Makefile: use common template for GIT-BUILD-OPTIONS

The "GIT-BUILD-OPTIONS" file is generated by our build systems to propagate built-in features and paths to our tests. The generation is done ad-hoc, where both our Makefile and the CMake build instructions simply echo a bunch of strings into the file. This makes it very hard to figure out what variables are expected to exist and what format they have, and the written variables can easily get out of sync between build systems. Introduce a new "GIT-BUILD-OPTIONS.in" template to address this issue. This has multiple advantages: - It demonstrates which built options exist in the first place. - It can serve as a spot to document the build options. - Some build systems complain when not all variables could be substituted, alerting us of mismatches. Others don't, but if we forgot to substitute such variables we now have a bogus string that will likely cause our tests to fail, if they have any meaning in the first place. Backfill values that we didn't yet set in our CMake build instructions. While at it, remove the `SUPPORTS_SIMPLE_IPC` variable that we only set up in CMake as it isn't used anywhere. This change requires us to adapt the setup of TEST_OUTPUT_DIRECTORY in "test-lib.sh" such that it does not get overwritten after sourcing when it has been set up via the environment. This is the only instance I could find where we rely on ordering on variables. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Patrick Steinhardt committed Dec 6, 2024 at 14:24 UTC 4638e8806e3a1c5550b9ee3a1201e79cc519b85e
4 files changed +136 -95
GIT-BUILD-OPTIONS.in new
+36
@@ -0,0 +1,36 @@
1 +SHELL_PATH=@SHELL_PATH@
2 +TEST_SHELL_PATH=@TEST_SHELL_PATH@
3 +PERL_PATH=@PERL_PATH@
4 +DIFF=@DIFF@
5 +PYTHON_PATH=@PYTHON_PATH@
6 +TAR=@TAR@
7 +NO_CURL=@NO_CURL@
8 +NO_ICONV=@NO_ICONV@
9 +NO_EXPAT=@NO_EXPAT@
10 +USE_LIBPCRE2=@USE_LIBPCRE2@
11 +NO_PERL=@NO_PERL@
12 +NO_PTHREADS=@NO_PTHREADS@
13 +NO_PYTHON=@NO_PYTHON@
14 +NO_REGEX=@NO_REGEX@
15 +NO_UNIX_SOCKETS=@NO_UNIX_SOCKETS@
16 +PAGER_ENV=@PAGER_ENV@
17 +SANITIZE_LEAK=@SANITIZE_LEAK@
18 +SANITIZE_ADDRESS=@SANITIZE_ADDRESS@
19 +X=@X@
20 +FSMONITOR_DAEMON_BACKEND=@FSMONITOR_DAEMON_BACKEND@
21 +FSMONITOR_OS_SETTINGS=@FSMONITOR_OS_SETTINGS@
22 +TEST_OUTPUT_DIRECTORY=@TEST_OUTPUT_DIRECTORY@
23 +GIT_TEST_OPTS=@GIT_TEST_OPTS@
24 +GIT_TEST_CMP=@GIT_TEST_CMP@
25 +GIT_TEST_CMP_USE_COPIED_CONTEXT=@GIT_TEST_CMP_USE_COPIED_CONTEXT@
26 +GIT_TEST_UTF8_LOCALE=@GIT_TEST_UTF8_LOCALE@
27 +NO_GETTEXT=@NO_GETTEXT@
28 +GIT_PERF_REPEAT_COUNT=@GIT_PERF_REPEAT_COUNT@
29 +GIT_PERF_REPO=@GIT_PERF_REPO@
30 +GIT_PERF_LARGE_REPO=@GIT_PERF_LARGE_REPO@
31 +GIT_PERF_MAKE_OPTS=@GIT_PERF_MAKE_OPTS@
32 +GIT_PERF_MAKE_COMMAND=@GIT_PERF_MAKE_COMMAND@
33 +GIT_INTEROP_MAKE_OPTS=@GIT_INTEROP_MAKE_OPTS@
34 +GIT_TEST_INDEX_VERSION=@GIT_TEST_INDEX_VERSION@
35 +GIT_TEST_PERL_FATAL_WARNINGS=@GIT_TEST_PERL_FATAL_WARNINGS@
36 +RUNTIME_PREFIX=@RUNTIME_PREFIX@
Makefile
+45 -70
@@ -3160,80 +3160,55 @@ GIT-LDFLAGS: FORCE
3160 echo "$$FLAGS" >GIT-LDFLAGS; \
3161 fi
3162
3163 +ifdef RUNTIME_PREFIX
3164 +RUNTIME_PREFIX_OPTION = true
3165 +else
3166 +RUNTIME_PREFIX_OPTION = false
3167 +endif
3168 +
3169 # We need to apply sq twice, once to protect from the shell
3170 # that runs GIT-BUILD-OPTIONS, and then again to protect it
3171 # and the first level quoting from the shell that runs "echo".
3172 GIT-BUILD-OPTIONS: FORCE
3167 - @echo SHELL_PATH=\''$(subst ','\'',$(SHELL_PATH_SQ))'\' >$@+
3168 - @echo TEST_SHELL_PATH=\''$(subst ','\'',$(TEST_SHELL_PATH_SQ))'\' >>$@+
3169 - @echo PERL_PATH=\''$(subst ','\'',$(PERL_PATH_SQ))'\' >>$@+
3170 - @echo DIFF=\''$(subst ','\'',$(subst ','\'',$(DIFF)))'\' >>$@+
3171 - @echo PYTHON_PATH=\''$(subst ','\'',$(PYTHON_PATH_SQ))'\' >>$@+
3172 - @echo TAR=\''$(subst ','\'',$(subst ','\'',$(TAR)))'\' >>$@+
3173 - @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
3174 - @echo NO_ICONV=\''$(subst ','\'',$(subst ','\'',$(NO_ICONV)))'\' >>$@+
3175 - @echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
3176 - @echo USE_LIBPCRE2=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE2)))'\' >>$@+
3177 - @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
3178 - @echo NO_PTHREADS=\''$(subst ','\'',$(subst ','\'',$(NO_PTHREADS)))'\' >>$@+
3179 - @echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+
3180 - @echo NO_REGEX=\''$(subst ','\'',$(subst ','\'',$(NO_REGEX)))'\' >>$@+
3181 - @echo NO_UNIX_SOCKETS=\''$(subst ','\'',$(subst ','\'',$(NO_UNIX_SOCKETS)))'\' >>$@+
3182 - @echo PAGER_ENV=\''$(subst ','\'',$(subst ','\'',$(PAGER_ENV)))'\' >>$@+
3183 - @echo SANITIZE_LEAK=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_LEAK)))'\' >>$@+
3184 - @echo SANITIZE_ADDRESS=\''$(subst ','\'',$(subst ','\'',$(SANITIZE_ADDRESS)))'\' >>$@+
3185 - @echo X=\'$(X)\' >>$@+
3186 -ifdef FSMONITOR_DAEMON_BACKEND
3187 - @echo FSMONITOR_DAEMON_BACKEND=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_DAEMON_BACKEND)))'\' >>$@+
3188 -endif
3189 -ifdef FSMONITOR_OS_SETTINGS
3190 - @echo FSMONITOR_OS_SETTINGS=\''$(subst ','\'',$(subst ','\'',$(FSMONITOR_OS_SETTINGS)))'\' >>$@+
3191 -endif
3192 -ifdef TEST_OUTPUT_DIRECTORY
3193 - @echo TEST_OUTPUT_DIRECTORY=\''$(subst ','\'',$(subst ','\'',$(TEST_OUTPUT_DIRECTORY)))'\' >>$@+
3194 -endif
3195 -ifdef GIT_TEST_OPTS
3196 - @echo GIT_TEST_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_OPTS)))'\' >>$@+
3197 -endif
3198 -ifdef GIT_TEST_CMP
3199 - @echo GIT_TEST_CMP=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_CMP)))'\' >>$@+
3200 -endif
3201 -ifdef GIT_TEST_CMP_USE_COPIED_CONTEXT
3202 - @echo GIT_TEST_CMP_USE_COPIED_CONTEXT=YesPlease >>$@+
3203 -endif
3204 -ifdef GIT_TEST_UTF8_LOCALE
3205 - @echo GIT_TEST_UTF8_LOCALE=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_UTF8_LOCALE)))'\' >>$@+
3206 -endif
3207 - @echo NO_GETTEXT=\''$(subst ','\'',$(subst ','\'',$(NO_GETTEXT)))'\' >>$@+
3208 -ifdef GIT_PERF_REPEAT_COUNT
3209 - @echo GIT_PERF_REPEAT_COUNT=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPEAT_COUNT)))'\' >>$@+
3210 -endif
3211 -ifdef GIT_PERF_REPO
3212 - @echo GIT_PERF_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_REPO)))'\' >>$@+
3213 -endif
3214 -ifdef GIT_PERF_LARGE_REPO
3215 - @echo GIT_PERF_LARGE_REPO=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_LARGE_REPO)))'\' >>$@+
3216 -endif
3217 -ifdef GIT_PERF_MAKE_OPTS
3218 - @echo GIT_PERF_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_OPTS)))'\' >>$@+
3219 -endif
3220 -ifdef GIT_PERF_MAKE_COMMAND
3221 - @echo GIT_PERF_MAKE_COMMAND=\''$(subst ','\'',$(subst ','\'',$(GIT_PERF_MAKE_COMMAND)))'\' >>$@+
3222 -endif
3223 -ifdef GIT_INTEROP_MAKE_OPTS
3224 - @echo GIT_INTEROP_MAKE_OPTS=\''$(subst ','\'',$(subst ','\'',$(GIT_INTEROP_MAKE_OPTS)))'\' >>$@+
3225 -endif
3226 -ifdef GIT_TEST_INDEX_VERSION
3227 - @echo GIT_TEST_INDEX_VERSION=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_INDEX_VERSION)))'\' >>$@+
3228 -endif
3229 -ifdef GIT_TEST_PERL_FATAL_WARNINGS
3230 - @echo GIT_TEST_PERL_FATAL_WARNINGS=\''$(subst ','\'',$(subst ','\'',$(GIT_TEST_PERL_FATAL_WARNINGS)))'\' >>$@+
3231 -endif
3232 -ifdef RUNTIME_PREFIX
3233 - @echo RUNTIME_PREFIX=\'true\' >>$@+
3234 -else
3235 - @echo RUNTIME_PREFIX=\'false\' >>$@+
3236 -endif
3173 + @sed \
3174 + -e "s|@SHELL_PATH@|\'$(SHELL_PATH_SQ)\'|" \
3175 + -e "s|@TEST_SHELL_PATH@|\'$(TEST_SHELL_PATH_SQ)\'|" \
3176 + -e "s|@PERL_PATH@|\'$(PERL_PATH_SQ)\'|" \
3177 + -e "s|@DIFF@|\'$(DIFF)\'|" \
3178 + -e "s|@PYTHON_PATH@|\'$(PYTHON_PATH_SQ)\'|" \
3179 + -e "s|@TAR@|\'$(TAR)\'|" \
3180 + -e "s|@NO_CURL@|\'$(NO_CURL)\'|" \
3181 + -e "s|@NO_ICONV@|\'$(NO_ICONV)\'|" \
3182 + -e "s|@NO_EXPAT@|\'$(NO_EXPAT)\'|" \
3183 + -e "s|@USE_LIBPCRE2@|\'$(USE_LIBPCRE2)\'|" \
3184 + -e "s|@NO_PERL@|\'$(NO_PERL)\'|" \
3185 + -e "s|@NO_PTHREADS@|\'$(NO_PTHREADS)\'|" \
3186 + -e "s|@NO_PYTHON@|\'$(NO_PYTHON)\'|" \
3187 + -e "s|@NO_REGEX@|\'$(NO_REGEX)\'|" \
3188 + -e "s|@NO_UNIX_SOCKETS@|\'$(NO_UNIX_SOCKETS)\'|" \
3189 + -e "s|@PAGER_ENV@|\'$(PAGER_ENV)\'|" \
3190 + -e "s|@SANITIZE_LEAK@|\'$(SANITIZE_LEAK)\'|" \
3191 + -e "s|@SANITIZE_ADDRESS@|\'$(SANITIZE_ADDRESS)\'|" \
3192 + -e "s|@X@|\'$(X)\'|" \
3193 + -e "s|@FSMONITOR_DAEMON_BACKEND@|\'$(FSMONITOR_DAEMON_BACKEND)\'|" \
3194 + -e "s|@FSMONITOR_OS_SETTINGS@|\'$(FSMONITOR_OS_SETTINGS)\'|" \
3195 + -e "s|@TEST_OUTPUT_DIRECTORY@|\'$(TEST_OUTPUT_DIRECTORY)\'|" \
3196 + -e "s|@GIT_TEST_OPTS@|\'$(GIT_TEST_OPTS)\'|" \
3197 + -e "s|@GIT_TEST_CMP@|\'$(GIT_TEST_CMP)\'|" \
3198 + -e "s|@GIT_TEST_CMP_USE_COPIED_CONTEXT@|\'$(GIT_TEST_CMP_USE_COPIED_CONTEXT)\'|" \
3199 + -e "s|@GIT_TEST_UTF8_LOCALE@|\'$(GIT_TEST_UTF8_LOCALE)\'|" \
3200 + -e "s|@NO_GETTEXT@|\'$(NO_GETTEXT)\'|" \
3201 + -e "s|@GIT_PERF_REPEAT_COUNT@|\'$(GIT_PERF_REPEAT_COUNT)\'|" \
3202 + -e "s|@GIT_PERF_REPO@|\'$(GIT_PERF_REPO)\'|" \
3203 + -e "s|@GIT_PERF_LARGE_REPO@|\'$(GIT_PERF_LARGE_REPO)\'|" \
3204 + -e "s|@GIT_PERF_MAKE_OPTS@|\'$(GIT_PERF_MAKE_OPTS)\'|" \
3205 + -e "s|@GIT_PERF_MAKE_COMMAND@|\'$(GIT_PERF_MAKE_COMMAND)\'|" \
3206 + -e "s|@GIT_INTEROP_MAKE_OPTS@|\'$(GIT_INTEROP_MAKE_OPTS)\'|" \
3207 + -e "s|@GIT_TEST_INDEX_VERSION@|\'$(GIT_TEST_INDEX_VERSION)\'|" \
3208 + -e "s|@GIT_TEST_PERL_FATAL_WARNINGS@|\'$(GIT_TEST_PERL_FATAL_WARNINGS)\'|" \
3209 + -e "s|@RUNTIME_PREFIX@|\'$(RUNTIME_PREFIX_OPTION)\'|" \
3210 + GIT-BUILD-OPTIONS.in >$@+
3211 + @if grep -q '^[A-Z][A-Z_]*=@.*@$$' $@+; then echo "Unsubstituted build options in $@" >&2 && exit 1; fi
3212 @if cmp $@+ $@ >/dev/null 2>&1; then $(RM) $@+; else mv $@+ $@; fi
3213 @if test -f GIT-BUILD-DIR; then rm GIT-BUILD-DIR; fi
3214
contrib/buildsystems/CMakeLists.txt
+39 -19
@@ -1125,27 +1125,47 @@ if(NOT PYTHON_TESTS)
1125 set(NO_PYTHON 1)
1126 endif()
1127
1128 -file(WRITE ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "SHELL_PATH='${SHELL_PATH}'\n")
1129 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "TEST_SHELL_PATH='${TEST_SHELL_PATH}'\n")
1130 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PERL_PATH='${PERL_PATH}'\n")
1131 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "DIFF='${DIFF}'\n")
1132 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PYTHON_PATH='${PYTHON_PATH}'\n")
1133 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "TAR='${TAR}'\n")
1134 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_CURL='${NO_CURL}'\n")
1135 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_ICONV='${NO_ICONV}'\n")
1136 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_EXPAT='${NO_EXPAT}'\n")
1137 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PERL='${NO_PERL}'\n")
1138 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PTHREADS='${NO_PTHREADS}'\n")
1139 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_UNIX_SOCKETS='${NO_UNIX_SOCKETS}'\n")
1140 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PAGER_ENV='${PAGER_ENV}'\n")
1141 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "X='${EXE_EXTENSION}'\n")
1142 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_GETTEXT='${NO_GETTEXT}'\n")
1143 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "RUNTIME_PREFIX='${RUNTIME_PREFIX}'\n")
1144 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "NO_PYTHON='${NO_PYTHON}'\n")
1145 -file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "SUPPORTS_SIMPLE_IPC='${SUPPORTS_SIMPLE_IPC}'\n")
1128 +file(STRINGS ${CMAKE_SOURCE_DIR}/GIT-BUILD-OPTIONS.in git_build_options NEWLINE_CONSUME)
1129 +string(REPLACE "@SHELL_PATH@" "'${SHELL_PATH}'" git_build_options "${git_build_options}")
1130 +string(REPLACE "@TEST_SHELL_PATH@" "'${TEST_SHELL_PATH}'" git_build_options "${git_build_options}")
1131 +string(REPLACE "@PERL_PATH@" "'${PERL_PATH}'" git_build_options "${git_build_options}")
1132 +string(REPLACE "@DIFF@" "'${DIFF}'" git_build_options "${git_build_options}")
1133 +string(REPLACE "@PYTHON_PATH@" "'${PYTHON_PATH}'" git_build_options "${git_build_options}")
1134 +string(REPLACE "@TAR@" "'${TAR}'" git_build_options "${git_build_options}")
1135 +string(REPLACE "@NO_CURL@" "${NO_CURL}" git_build_options "${git_build_options}")
1136 +string(REPLACE "@NO_ICONV@" "${NO_ICONV}" git_build_options "${git_build_options}")
1137 +string(REPLACE "@NO_EXPAT@" "${NO_EXPAT}" git_build_options "${git_build_options}")
1138 +string(REPLACE "@USE_LIBPCRE2@" "" git_build_options "${git_build_options}")
1139 +string(REPLACE "@NO_PERL@" "${NO_PERL}" git_build_options "${git_build_options}")
1140 +string(REPLACE "@NO_PTHREADS@" "${NO_PTHREADS}" git_build_options "${git_build_options}")
1141 +string(REPLACE "@NO_PYTHON@" "${NO_PYTHON}" git_build_options "${git_build_options}")
1142 +string(REPLACE "@NO_REGEX@" "" git_build_options "${git_build_options}")
1143 +string(REPLACE "@NO_UNIX_SOCKETS@" "${NO_UNIX_SOCKETS}" git_build_options "${git_build_options}")
1144 +string(REPLACE "@PAGER_ENV@" "'${PAGER_ENV}'" git_build_options "${git_build_options}")
1145 +string(REPLACE "@SANITIZE_LEAK@" "" git_build_options "${git_build_options}")
1146 +string(REPLACE "@SANITIZE_ADDRESS@" "" git_build_options "${git_build_options}")
1147 +string(REPLACE "@X@" "${EXE_EXTENSION}" git_build_options "${git_build_options}")
1148 +string(REPLACE "@FSMONITOR_DAEMON_BACKEND@" "win32" git_build_options "${git_build_options}")
1149 +string(REPLACE "@FSMONITOR_OS_SETTINGS@" "win32" git_build_options "${git_build_options}")
1150 +string(REPLACE "@TEST_OUTPUT_DIRECTORY@" "" git_build_options "${git_build_options}")
1151 +string(REPLACE "@GIT_TEST_OPTS@" "" git_build_options "${git_build_options}")
1152 +string(REPLACE "@GIT_TEST_CMP@" "" git_build_options "${git_build_options}")
1153 +string(REPLACE "@GIT_TEST_CMP_USE_COPIED_CONTEXT@" "" git_build_options "${git_build_options}")
1154 +string(REPLACE "@GIT_TEST_UTF8_LOCALE@" "" git_build_options "${git_build_options}")
1155 +string(REPLACE "@NO_GETTEXT@" "${NO_GETTEXT}" git_build_options "${git_build_options}")
1156 +string(REPLACE "@GIT_PERF_REPEAT_COUNT@" "" git_build_options "${git_build_options}")
1157 +string(REPLACE "@GIT_PERF_REPO@" "" git_build_options "${git_build_options}")
1158 +string(REPLACE "@GIT_PERF_LARGE_REPO@" "" git_build_options "${git_build_options}")
1159 +string(REPLACE "@GIT_PERF_MAKE_OPTS@" "" git_build_options "${git_build_options}")
1160 +string(REPLACE "@GIT_PERF_MAKE_COMMAND@" "" git_build_options "${git_build_options}")
1161 +string(REPLACE "@GIT_INTEROP_MAKE_OPTS@" "" git_build_options "${git_build_options}")
1162 +string(REPLACE "@GIT_TEST_INDEX_VERSION@" "" git_build_options "${git_build_options}")
1163 +string(REPLACE "@GIT_TEST_PERL_FATAL_WARNINGS@" "" git_build_options "${git_build_options}")
1164 +string(REPLACE "@RUNTIME_PREFIX@" "'${RUNTIME_PREFIX}'" git_build_options "${git_build_options}")
1165 if(USE_VCPKG)
1147 - file(APPEND ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
1166 + string(APPEND git_build_options "PATH=\"$PATH:$TEST_DIRECTORY/../compat/vcbuild/vcpkg/installed/x64-windows/bin\"\n")
1167 endif()
1168 +file(WRITE ${CMAKE_BINARY_DIR}/GIT-BUILD-OPTIONS ${git_build_options})
1169
1170 #Make the tests work when building out of the source tree
1171 get_filename_component(CACHE_PATH ${CMAKE_CURRENT_LIST_DIR}/../../CMakeCache.txt ABSOLUTE)
t/test-lib.sh
+16 -6
@@ -35,12 +35,6 @@ else
35 # needing to exist.
36 TEST_DIRECTORY=$(cd "$TEST_DIRECTORY" && pwd) || exit 1
37 fi
38 -if test -z "$TEST_OUTPUT_DIRECTORY"
39 -then
40 - # Similarly, override this to store the test-results subdir
41 - # elsewhere
42 - TEST_OUTPUT_DIRECTORY=$TEST_DIRECTORY
43 -fi
38 GIT_BUILD_DIR="${TEST_DIRECTORY%/t}"
39 if test "$TEST_DIRECTORY" = "$GIT_BUILD_DIR"
40 then
@@ -92,6 +86,15 @@ export LSAN_OPTIONS
86 prepend_var UBSAN_OPTIONS : $GIT_SAN_OPTIONS
87 export UBSAN_OPTIONS
88
89 +# The TEST_OUTPUT_DIRECTORY will be overwritten via GIT-BUILD-OPTIONS. So in
90 +# case the caller has manually set up this variable via the environment we must
91 +# make sure to not overwrite that value, and thus we save it into
92 +# TEST_OUTPUT_DIRECTORY_OVERRIDE here.
93 +if test -n "$TEST_OUTPUT_DIRECTORY" && test -z "$TEST_OUTPUT_DIRECTORY_OVERRIDE"
94 +then
95 + TEST_OUTPUT_DIRECTORY_OVERRIDE=$TEST_OUTPUT_DIRECTORY
96 +fi
97 +
98 if test ! -f "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
99 then
100 echo >&2 'error: GIT-BUILD-OPTIONS missing (has Git been built?).'
@@ -100,6 +103,13 @@ fi
103 . "$GIT_BUILD_DIR"/GIT-BUILD-OPTIONS
104 export PERL_PATH SHELL_PATH
105
106 +if test -z "$TEST_OUTPUT_DIRECTORY"
107 +then
108 + # Similarly, override this to store the test-results subdir
109 + # elsewhere
110 + TEST_OUTPUT_DIRECTORY=$TEST_DIRECTORY
111 +fi
112 +
113 # In t0000, we need to override test directories of nested testcases. In case
114 # the developer has TEST_OUTPUT_DIRECTORY part of his build options, then we'd
115 # reset this value to instead contain what the developer has specified. We thus