From: "Ævar Arnfjörð Bjarmason" <avarab@gmail.com>
To: Johannes Schindelin <Johannes.Schindelin@gmx.de>
Cc: Junio C Hamano <gitster@pobox.com>,
Phillip Wood <phillip.wood123@gmail.com>,
phillip.wood@dunelm.org.uk, git@vger.kernel.org,
Jeff King <peff@peff.net>, Paul Smith <paul@mad-scientist.net>,
Sibi Siddharthan <sibisiddharthan.github@gmail.com>
Subject: Re: [PATCH v2 3/3] Makefile: replace most hardcoded object lists with $(wildcard)
Date: Wed, 10 Nov 2021 14:21:32 +0100 [thread overview]
Message-ID: <211110.86h7cki0uo.gmgdl@evledraar.gmail.com> (raw)
In-Reply-To: <nycvar.QRO.7.76.6.2111101332130.21127@tvgsbejvaqbjf.bet>
On Wed, Nov 10 2021, Johannes Schindelin wrote:
> Hi Junio,
>
> On Tue, 9 Nov 2021, Junio C Hamano wrote:
>
>> Allowing to be sloppy while maintaining Makefile feels like a false
>> economy, and having to paper it over by adding exceptions and
>> forcing developers to learn such ad-hoc rules even more so.
>
> If you ever needed another opinion to back you up on this: I fully agree.
I could go either way on that, but in terms of Makefile maintenance it
does suck a lot less to pick one or the other.
A (I realize, unstated) eventual goal I had was to move these wildcard
declarations to some common list you can include from various Makefiles,
currently we've got dependency bugs in e.g. Makefile &
Documentation/Makefile interaction.
If we're not OK with $(wildcard) as a pattern that would mean changing
all of these to hardcoded (in some cases quite big) lists somewhere:
$ git -P grep -E '^[^~]+\$\(wildcard.+\*' ':!git-gui' ':!gitk-git' ':!contrib'
Documentation/Makefile: $(wildcard git-*.txt))
Documentation/Makefile:HOWTO_TXT += $(wildcard howto/*.txt)
Documentation/Makefile:DOC_DEP_TXT += $(wildcard *.txt)
Documentation/Makefile:DOC_DEP_TXT += $(wildcard config/*.txt)
Documentation/Makefile:API_DOCS = $(patsubst %.txt,%,$(filter-out technical/api-index-skel.txt technical/api-index.txt, $(wildcard technical/api-*.txt)))
Documentation/Makefile:mergetools-list.made: ../git-mergetool--lib.sh $(wildcard ../mergetools/*)
Documentation/Makefile:%.1 %.5 %.7 : %.xml manpage-base-url.xsl $(wildcard manpage*.xsl)
Makefile:command-list.h: $(wildcard Documentation/git*.txt)
Makefile:POFILES := $(wildcard po/*.po)
Makefile:LIB_PERL := $(wildcard perl/Git.pm perl/Git/*.pm perl/Git/*/*.pm perl/Git/*/*/*.pm)
Makefile:LIB_CPAN := $(wildcard perl/FromCPAN/*.pm perl/FromCPAN/*/*.pm)
Makefile:coccicheck: $(addsuffix .patch,$(filter-out %.pending.cocci,$(wildcard contrib/coccinelle/*.cocci)))
Makefile:coccicheck-pending: $(addsuffix .patch,$(wildcard contrib/coccinelle/*.pending.cocci))
t/Makefile:T = $(sort $(wildcard t[0-9][0-9][0-9][0-9]-*.sh))
t/Makefile:TGITWEB = $(sort $(wildcard t95[0-9][0-9]-*.sh))
t/Makefile:THELPERS = $(sort $(filter-out $(T),$(wildcard *.sh)))
t/Makefile:TPERF = $(sort $(wildcard perf/p[0-9][0-9][0-9][0-9]-*.sh))
t/Makefile:CHAINLINTTESTS = $(sort $(patsubst chainlint/%.test,%,$(wildcard chainlint/*.test)))
t/interop/Makefile:T = $(sort $(wildcard i[0-9][0-9][0-9][0-9]-*.sh))
What do you & Junio think about that?
I don't really mind either way, as long as I stop running into
occasional bugs where I need to run "git clean -dxf" because the
Makeefile was too stupid to properly manage its dependencies.
>> If we could use "git ls-files" consistently, that may make it
>> somewhat safer; you'd at least need to "git add" a new file before
>> it gets into the picture. But it would be impossible, because we
>> need to be able to bootstrap Git from a tarball extract.
>
> Indeed, the ability to build from a `.tar` extract is important. That's
> why we were careful to use `ls-files` in `LIB_H` and in
> `FIND_SOURCE_FILE`, falling back on using `find` if the `ls-files` call
> failed.
Why would you need any of that to *build* from a .tar extract? I think
we should remove that LIB_H thing entirely.
Its only purpose is to support someone who:
1. Wants to do an *incremental* build, not a "build from tar". I.e. you
build already, changed a header, and now you want to not over-build
again.
Your compiler is perfectly capable of locating headers in an -I dir
for you.
2. Doesn't have gcc or clang installed. Note "installed", not to
build.
Well, currently we require you to build with those to use .depends &
COMPUTE_HEADER_DEPENDENCIES, but that's an easily fixable
implementation detail.
We can easily make the .depend files with gcc/clang and build with
another compiler. I had a 5-10 line local change at some point to do
that.
3. Doesn't find it acceptable to have a fallback of just a glob like
"**.h" for that "depends" target.
I.e. we'd over-rebuild if you dropped in a new *.h we're not
actually using into your extracted tarball, but really, who cares?
4. Wants to run "make hdr-check" or "make pot", both of which I think
are OK to say "you need to run this on a box that has .depends (or
in the case of *.pot, we can use a greedier glob).
> And to be honest, even `LIB_H` and `FIND_SOURCE_FILE` would quite
> potentially better be hard-coded (with a CI check to ensure that they're
> up to date).
That would be a bug, just because I don't build on Windows doesn't mean
that I wouldn't like "make TAGS coccicheck" to find compat/win32/ at
all.
It doesn't do that now for a different reason, but that's a bug that
should be fixed.
next prev parent reply other threads:[~2021-11-10 13:42 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-30 22:32 [PATCH] Makefile: replace most hardcoded object lists with $(wildcard) Ævar Arnfjörð Bjarmason
2021-10-30 23:15 ` Paul Smith
2021-11-01 20:06 ` Ævar Arnfjörð Bjarmason
2021-10-31 8:29 ` Jeff King
2021-10-31 13:00 ` Ævar Arnfjörð Bjarmason
2021-11-03 11:30 ` Jeff King
2021-11-03 14:57 ` Ævar Arnfjörð Bjarmason
2021-11-04 0:31 ` Johannes Schindelin
2021-11-04 9:46 ` Ævar Arnfjörð Bjarmason
2021-11-04 14:29 ` Philip Oakley
2021-11-04 17:07 ` Junio C Hamano
2021-11-01 19:19 ` [PATCH v2 0/3] " Ævar Arnfjörð Bjarmason
2021-11-01 19:19 ` [PATCH v2 1/3] Makefile: rename $(SCRIPT_LIB) to $(SCRIPT_LIB_GEN) Ævar Arnfjörð Bjarmason
2021-11-01 19:19 ` [PATCH v2 2/3] Makefile: add a utility to dump variables Ævar Arnfjörð Bjarmason
2021-11-01 19:19 ` [PATCH v2 3/3] Makefile: replace most hardcoded object lists with $(wildcard) Ævar Arnfjörð Bjarmason
2021-11-06 10:57 ` Phillip Wood
2021-11-06 14:27 ` Ævar Arnfjörð Bjarmason
2021-11-06 16:49 ` Phillip Wood
2021-11-06 21:13 ` Ævar Arnfjörð Bjarmason
2021-11-09 21:38 ` Junio C Hamano
2021-11-10 12:39 ` Johannes Schindelin
2021-11-10 13:21 ` Ævar Arnfjörð Bjarmason [this message]
2021-11-10 14:59 ` Johannes Schindelin
2021-11-10 15:58 ` Ævar Arnfjörð Bjarmason
2022-01-21 12:01 ` Ævar Arnfjörð Bjarmason
2022-01-21 17:14 ` Phillip Wood
2022-01-21 18:13 ` Ævar Arnfjörð Bjarmason
2022-01-22 6:36 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=211110.86h7cki0uo.gmgdl@evledraar.gmail.com \
--to=avarab@gmail.com \
--cc=Johannes.Schindelin@gmx.de \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=paul@mad-scientist.net \
--cc=peff@peff.net \
--cc=phillip.wood123@gmail.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=sibisiddharthan.github@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).