Re: GIT-BUILD-OPTIONS can override manual invocations

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux