t: better support for out-of-tree builds
Our in-tree builds used by the Makefile use various different build directories scattered around different locations. The paths to those build directories have to be propagated to our tests such that they can find the contained files. This is done via a mixture of hardcoded paths in our test library and injected variables in our bin-wrappers or "GIT-BUILD-OPTIONS". The latter two mechanisms are preferable over using hardcoded paths. For one, we have all paths which are subject to change stored in a small set of central files instead of having the knowledge of build paths in many files. And second, it allows build systems which build files elsewhere to adapt those paths based on their own needs. This is especially nice in the context of build systems that use out-of-tree builds like CMake or Meson. Remove hardcoded knowledge of build paths from our test library and move it into our bin-wrappers and "GIT-BUILD-OPTIONS". Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
023c3370ac
commit
7e0730c8ba
|
@ -35,6 +35,11 @@ GIT_PERF_MAKE_COMMAND=@GIT_PERF_MAKE_COMMAND@
|
|||
GIT_INTEROP_MAKE_OPTS=@GIT_INTEROP_MAKE_OPTS@
|
||||
GIT_TEST_INDEX_VERSION=@GIT_TEST_INDEX_VERSION@
|
||||
GIT_TEST_PERL_FATAL_WARNINGS=@GIT_TEST_PERL_FATAL_WARNINGS@
|
||||
GIT_TEST_TEXTDOMAINDIR=@GIT_TEST_TEXTDOMAINDIR@
|
||||
GIT_TEST_POPATH=@GIT_TEST_POPATH@
|
||||
GIT_TEST_TEMPLATE_DIR=@GIT_TEST_TEMPLATE_DIR@
|
||||
GIT_TEST_GITPERLLIB=@GIT_TEST_GITPERLLIB@
|
||||
GIT_TEST_MERGE_TOOLS_DIR=@GIT_TEST_MERGE_TOOLS_DIR@
|
||||
RUNTIME_PREFIX=@RUNTIME_PREFIX@
|
||||
GITWEBDIR=@GITWEBDIR@
|
||||
USE_GETTEXT_SCHEME=@USE_GETTEXT_SCHEME@
|
||||
|
|
9
Makefile
9
Makefile
|
@ -3176,6 +3176,11 @@ GIT-BUILD-OPTIONS: FORCE
|
|||
-e "s|@GIT_INTEROP_MAKE_OPTS@|\'$(GIT_INTEROP_MAKE_OPTS)\'|" \
|
||||
-e "s|@GIT_TEST_INDEX_VERSION@|\'$(GIT_TEST_INDEX_VERSION)\'|" \
|
||||
-e "s|@GIT_TEST_PERL_FATAL_WARNINGS@|\'$(GIT_TEST_PERL_FATAL_WARNINGS)\'|" \
|
||||
-e "s|@GIT_TEST_TEXTDOMAINDIR@|\'$(shell pwd)/po/build/locale\'|" \
|
||||
-e "s|@GIT_TEST_POPATH@|\'$(shell pwd)/po\'|" \
|
||||
-e "s|@GIT_TEST_TEMPLATE_DIR@|\'$(shell pwd)/templates/blt\'|" \
|
||||
-e "s|@GIT_TEST_GITPERLLIB@|\'$(shell pwd)/perl/build/lib\'|" \
|
||||
-e "s|@GIT_TEST_MERGE_TOOLS_DIR@|\'$(shell pwd)/mergetools\'|" \
|
||||
-e "s|@RUNTIME_PREFIX@|\'$(RUNTIME_PREFIX_OPTION)\'|" \
|
||||
-e "s|@GITWEBDIR@|\'$(gitwebdir_SQ)\'|" \
|
||||
-e "s|@USE_GETTEXT_SCHEME@|\'$(USE_GETTEXT_SCHEME)\'|" \
|
||||
|
@ -3205,6 +3210,10 @@ all:: $(TEST_PROGRAMS) $(test_bindir_programs) $(UNIT_TEST_PROGS) $(CLAR_TEST_PR
|
|||
$(test_bindir_programs): bin-wrappers/%: bin-wrappers/wrap-for-bin.sh
|
||||
$(QUIET_GEN)sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
|
||||
-e 's|@BUILD_DIR@|$(shell pwd)|' \
|
||||
-e 's|@GIT_TEXTDOMAINDIR@|$(shell pwd)/po/build/locale|' \
|
||||
-e 's|@GITPERLLIB@|$(shell pwd)/perl/build/lib|' \
|
||||
-e 's|@MERGE_TOOLS_DIR@|$(shell pwd)/mergetools|' \
|
||||
-e 's|@TEMPLATE_DIR@|$(shell pwd)/templates/blt|' \
|
||||
-e 's|@PROG@|$(shell pwd)/$(patsubst test-%,t/helper/test-%,$(@F))$(if $(filter-out $(BINDIR_PROGRAMS_NO_X),$(@F)),$(X),)|' < $< > $@ && \
|
||||
chmod +x $@
|
||||
|
||||
|
|
|
@ -4,21 +4,22 @@
|
|||
# to run test suite against sandbox, but with only bindir-installed
|
||||
# executables in PATH. The Makefile copies this into various
|
||||
# files in bin-wrappers, substituting
|
||||
# @BUILD_DIR@ and @PROG@.
|
||||
# @BUILD_DIR@, @TEMPLATE_DIR@ and @PROG@.
|
||||
|
||||
GIT_EXEC_PATH='@BUILD_DIR@'
|
||||
if test -n "$NO_SET_GIT_TEMPLATE_DIR"
|
||||
then
|
||||
unset GIT_TEMPLATE_DIR
|
||||
else
|
||||
GIT_TEMPLATE_DIR='@BUILD_DIR@/templates/blt'
|
||||
GIT_TEMPLATE_DIR='@TEMPLATE_DIR@'
|
||||
export GIT_TEMPLATE_DIR
|
||||
fi
|
||||
GITPERLLIB='@BUILD_DIR@/perl/build/lib'"${GITPERLLIB:+:$GITPERLLIB}"
|
||||
GIT_TEXTDOMAINDIR='@BUILD_DIR@/po/build/locale'
|
||||
MERGE_TOOLS_DIR='@MERGE_TOOLS_DIR@'
|
||||
GITPERLLIB='@GITPERLLIB@'"${GITPERLLIB:+:$GITPERLLIB}"
|
||||
GIT_TEXTDOMAINDIR='@GIT_TEXTDOMAINDIR@'
|
||||
PATH='@BUILD_DIR@/bin-wrappers:'"$PATH"
|
||||
|
||||
export GIT_EXEC_PATH GITPERLLIB PATH GIT_TEXTDOMAINDIR
|
||||
export MERGE_TOOLS_DIR GIT_EXEC_PATH GITPERLLIB PATH GIT_TEXTDOMAINDIR
|
||||
|
||||
case "$GIT_DEBUGGER" in
|
||||
'')
|
||||
|
|
|
@ -1100,6 +1100,9 @@ endforeach()
|
|||
|
||||
file(STRINGS ${CMAKE_SOURCE_DIR}/bin-wrappers/wrap-for-bin.sh content NEWLINE_CONSUME)
|
||||
string(REPLACE "@BUILD_DIR@" "${CMAKE_BINARY_DIR}" content "${content}")
|
||||
string(REPLACE "@GIT_TEXTDOMAINDIR@" "${CMAKE_BINARY_DIR}/po/build/locale" content "${content}")
|
||||
string(REPLACE "@GITPERLLIB@" "${CMAKE_BINARY_DIR}/perl/build/lib" content "${content}")
|
||||
string(REPLACE "@MERGE_TOOLS_DIR@" "${CMAKE_SOURCE_DIR}/mergetools" content "${content}")
|
||||
string(REPLACE "@PROG@" "${CMAKE_BINARY_DIR}/git-cvsserver" content "${content}")
|
||||
file(WRITE ${CMAKE_BINARY_DIR}/bin-wrappers/git-cvsserver ${content})
|
||||
|
||||
|
@ -1185,6 +1188,11 @@ string(REPLACE "@GIT_PERF_MAKE_COMMAND@" "" git_build_options "${git_build_optio
|
|||
string(REPLACE "@GIT_INTEROP_MAKE_OPTS@" "" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_INDEX_VERSION@" "" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_PERL_FATAL_WARNINGS@" "" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_TEXTDOMAINDIR@" "'${CMAKE_BINARY_DIR}/po/build/locale'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_POPATH@" "'${CMAKE_BINARY_DIR}/po'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_TEMPLATE_DIR@" "'${CMAKE_BINARY_DIR}/templates/blt'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_GITPERLLIB@" "'${CMAKE_BINARY_DIR}/perl/build/lib'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GIT_TEST_MERGE_TOOLS_DIR@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@RUNTIME_PREFIX@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@GITWEBDIR@" "'${GITWEBDIR}'" git_build_options "${git_build_options}")
|
||||
string(REPLACE "@USE_GETTEXT_SCHEME@" "" git_build_options "${git_build_options}")
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
|
||||
. ./test-lib.sh
|
||||
|
||||
GIT_TEXTDOMAINDIR="$GIT_BUILD_DIR/po/build/locale"
|
||||
GIT_PO_PATH="$GIT_BUILD_DIR/po"
|
||||
GIT_TEXTDOMAINDIR="$GIT_TEST_TEXTDOMAINDIR"
|
||||
GIT_PO_PATH="$GIT_TEST_POPATH"
|
||||
export GIT_TEXTDOMAINDIR GIT_PO_PATH
|
||||
|
||||
if test -n "$GIT_TEST_INSTALLED"
|
||||
|
|
|
@ -7,7 +7,7 @@ Testing basic merge tools options'
|
|||
. ./test-lib.sh
|
||||
|
||||
test_expect_success 'mergetool --tool=vimdiff creates the expected layout' '
|
||||
. "$GIT_BUILD_DIR"/mergetools/vimdiff &&
|
||||
. "$GIT_TEST_MERGE_TOOLS_DIR"/vimdiff &&
|
||||
run_unit_tests
|
||||
'
|
||||
|
||||
|
|
|
@ -1419,7 +1419,7 @@ else # normal case, use ../bin-wrappers only unless $with_dashes:
|
|||
PATH="$GIT_BUILD_DIR:$GIT_BUILD_DIR/t/helper:$PATH"
|
||||
fi
|
||||
fi
|
||||
GIT_TEMPLATE_DIR="$GIT_BUILD_DIR"/templates/blt
|
||||
GIT_TEMPLATE_DIR="$GIT_TEST_TEMPLATE_DIR"
|
||||
GIT_CONFIG_NOSYSTEM=1
|
||||
GIT_ATTR_NOSYSTEM=1
|
||||
GIT_CEILING_DIRECTORIES="$TRASH_DIRECTORY/.."
|
||||
|
@ -1485,9 +1485,9 @@ then
|
|||
fi
|
||||
fi
|
||||
|
||||
GITPERLLIB="$GIT_BUILD_DIR"/perl/build/lib
|
||||
GITPERLLIB="$GIT_TEST_GITPERLLIB"
|
||||
export GITPERLLIB
|
||||
test -d "$GIT_BUILD_DIR"/templates/blt || {
|
||||
test -d "$GIT_TEMPLATE_DIR" || {
|
||||
BAIL_OUT "You haven't built things yet, have you?"
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue