Thread (4 messages) 4 messages, 2 authors, 2025-03-05

Re: GIT-BUILD-OPTIONS can override manual invocations

From: Jeff King <hidden>
Date: 2025-03-04 08:29:03

On Fri, Feb 28, 2025 at 03:08:57PM -0500, Taylor Blau wrote:
In 4638e8806e (Makefile: use common template for GIT-BUILD-OPTIONS,
2024-12-06), the project's Makefile changed how it writes the
GIT-BUILD-OPTIONS script. Prior to 4638e8806e, the Makefile would write
the file itself, but post-4638e8806e it fills out a template
("GIT-BUILD-OPTIONS.in") with the appropriate values.

This has an interesting side effect when running e.g. the t/perf or
t/interop suites. If I do:

    make && make -C t/perf GIT_PERF_MAKE_OPTS='NO_EXPAT=1'

, then we will still try and build with the libexpat headers!
Hmm. I am not sure what this is supposed to do, as I would not expect
that "make -C t/perf" to build anything at all. It will use the working
tree version built in the first step. So I'd expect your initial "make"
to do all the work (and either fail or not depending on whether NO_EXPAT
is set in your config.mak).

I usually trigger a build of another version using arguments to "./run".
Is there a way to make that happen via make in t/perf?
This is AFAICT fallout from a change in 4638e8806e where instead of
*not* writing e.g. GIT_PERF_MAKE_OPTS into the GIT-BUILD-OPTIONS file,
we now write it with an empty value. So when we run 'make -C t/perf'
with a non-empty GIT_PERF_MAKE_OPTS, t/perf/run will source
GIT-BUILD-OPTIONS, and override the value of GIT_PERF_MAKE_OPTS we
specified.
But yeah, I can see how this would fail with:

  make &&
  (cd t/perf && GIT_PERF_MAKE_OPTS=NO_EXPAT=1 ./run HEAD^ HEAD)

if the GIT-BUILD-OPTIONS value takes precedence over the environment.
OTOH, wasn't that also true before 4638e8806e if you did set
GIT_PERF_MAKE_OPTS? So:

  make GIT_PERF_MAKE_OPTS=NO_TCLTK=1 &&
  (cd t/perf && GIT_PERF_MAKE_OPTS="NO_TCLTK=1 NO_EXPAT=1" ./run HEAD^ HEAD)

would fail (or more likely, the initial one is set in your config.mak).

I think you're "supposed" to do this:

  make GIT_PERF_MAKE_OPTS=NO_EXPAT=1 &&
  (cd t/perf && ./run HEAD^ HEAD)

Rather than rely on the environment. But of course none of that is
documented at all, and is just convention and the whims of the few
people who bothered to run t/perf at all in the first place.

I do think it would be nice if environment variables took precedence
over the sourced GIT-BUILD-OPTIONS for "./run", but I suspect doing so
is a little tricky.
So I think a more robust fix might look like only filling out those
lines in the GIT-BUILD-OPTIONS template when they are non-empty, similar
to the pre-4638e8806e behavior. Something like:
Yeah, that would fix the regression. But I kind of feel like your
initial command is already skirting the edges of what the original code
was meant to handle.

-Peff
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help