git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jeff King <peff@peff.net>
To: Junio C Hamano <gitster@pobox.com>
Cc: Thomas Rast <trast@student.ethz.ch>, git@vger.kernel.org
Subject: Re: [PATCH 3/3] Makefile: split prefix flags from GIT-CFLAGS
Date: Tue, 19 Jun 2012 17:43:08 -0400	[thread overview]
Message-ID: <20120619214308.GA22166@sigill.intra.peff.net> (raw)
In-Reply-To: <20120619210426.GA21838@sigill.intra.peff.net>

On Tue, Jun 19, 2012 at 05:04:26PM -0400, Jeff King wrote:

> > The damage is not too bad from the point of view of linecount, but
> > this embeds the implicit knowledge of dependencies from $prefix to
> > various path variables to selected object files that embed these
> > paths variables by scattering dependencies on GIT-PREFIX in the
> > Makefile, which does not seem to scale very well.  I wonder if it
> > makes sense to have a single default-paths.o file that holds these
> > strings and recompile only that file when any of the paths change,
> > to localize the damage.
> > 
> > Of course, the current users of GIT_HTML_PATH that expect they can
> > do sizeof(GIT_HTML_PATH)-1 in place of strlen(GIT_HTML_PATH) may
> > need to be adjusted if we go that route.
> 
> Yeah, I think that would be nicer overall. If we move to a link-time
> dependency, then we can even put _all_ of the Makefile-based strings in
> there without ever having to care about who uses it. Of course, it won't
> work for things that truly need to be preprocessor macros (for
> conditional compilation), so we'd still be stuck with those (most of
> them just end up in CFLAGS and trigger a full rebuild, which is probably
> OK).

I started on this, but it is a little bit trickier than that. We can
cover C compilation with one strategy, but make variables end up going
lots of other places, too, like shell scripts, the perl Makefile
generation, etc. Those places all need to individually respect a
separate sentinel-file dependency. So I don't think there is an easy way
out of the sprinkling of dependencies.

At the very least, I tried to keep the dependency close to the
point-of-use, like:

  foo.o: GIT-PREFIX
  foo.o: EXTRA_CPPFLAGS = \
          '-DPREFIX=$(prefix_SQ)'

even if the actual build rules for foo.o are found elsewhere (and
typically they are, as they are part of a big pattern-based rule).

Some of the existing locations did not do a great job of that, and
instead it like this:

  version.o git.spec \
          $(patsubst %.sh,%,$(SCRIPT_SH)) \
          $(patsubst %.perl,%,$(SCRIPT_PERL)) \
          : GIT-VERSION-FILE

  [... 500 lines later ...]

  git.spec: git.spec.in
          sed -e 's/@@VERSION@@/$(GIT_VERSION)/g' <$< >$@+

If you read the latter hunk and wanted to emulate it, there is nothing
to indicate that you must also modify the earlier hunk. I think putting
them together makes more sense (even though it technically takes more
lines).

-Peff

  parent reply	other threads:[~2012-06-19 21:43 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-05-31 11:48 git version statistics Jeff King
2012-05-31 12:00 ` Jeff King
2012-05-31 19:35   ` Junio C Hamano
2012-06-01  9:03     ` Jeff King
2012-06-01 14:49       ` Junio C Hamano
2012-06-02 16:32         ` Jeff King
2012-06-02 16:59           ` Tomas Carnecky
2012-06-02 18:49           ` Jeff King
2012-06-02 18:51             ` [PATCH 1/4] move git_version_string into version.c Jeff King
2012-06-02 19:01             ` [PATCH 2/4] version: add git_user_agent function Jeff King
2012-06-19 18:40               ` Thomas Rast
2012-06-19 18:59                 ` Jeff King
2012-06-19 19:52                   ` Jeff King
2012-06-19 19:52                     ` [PATCH 1/3] Makefile: apply dependencies consistently to sparse/asm targets Jeff King
2012-06-19 20:38                       ` Junio C Hamano
2012-06-19 20:01                     ` [PATCH 2/3] Makefile: split GIT_USER_AGENT from GIT-CFLAGS Jeff King
2012-06-19 20:38                       ` Junio C Hamano
2012-06-19 20:03                     ` [PATCH 3/3] Makefile: split prefix flags " Jeff King
2012-06-19 20:51                       ` Junio C Hamano
2012-06-19 21:04                         ` Jeff King
2012-06-19 21:39                           ` Junio C Hamano
2012-06-19 23:36                             ` Jeff King
2012-06-19 23:58                               ` Junio C Hamano
2012-06-19 21:43                           ` Jeff King [this message]
2012-06-19 23:22                             ` [PATCHv2 0/8] makefile cleanups Jeff King
2012-06-19 23:23                               ` [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets Jeff King
2012-06-20  3:50                                 ` Jonathan Nieder
2012-06-20  4:26                                   ` Jeff King
2012-06-20 10:27                                     ` Jonathan Nieder
2012-06-20 16:37                                       ` Jeff King
2012-06-20 18:28                                         ` Jeff King
2012-06-20 18:30                                           ` [PATCHv3 01/11] Makefile: sort LIB_H list Jeff King
2012-06-20 20:00                                             ` Junio C Hamano
2012-06-20 20:01                                               ` Jeff King
2012-06-20 18:30                                           ` [PATCHv3 02/11] Makefile: fold MISC_H into LIB_H Jeff King
2012-06-20 20:01                                             ` Junio C Hamano
2012-06-20 21:07                                             ` Jonathan Nieder
2012-06-20 22:11                                               ` Jeff King
2012-07-07  3:39                                                 ` [PATCH 02.5/11] Makefile: fold XDIFF_H and VCSSVN_H " Jonathan Nieder
2012-07-09 14:59                                                   ` Junio C Hamano
2012-07-06 22:47                                             ` [PATCHv3 02/11] Makefile: fold MISC_H " Jonathan Nieder
2012-06-20 18:31                                           ` [PATCHv3 03/11] Makefile: do not have git.o depend on common-cmds.h Jeff King
2012-06-20 21:09                                             ` Jonathan Nieder
2012-06-20 18:31                                           ` [PATCHv3 04/11] Makefile: apply dependencies consistently to sparse/asm targets Jeff King
2012-06-20 21:12                                             ` Jonathan Nieder
2012-06-20 22:15                                               ` Jeff King
2012-07-07  4:19                                                 ` [PATCH/RFC] Makefile: document ground rules for target-specific dependencies Jonathan Nieder
2012-06-20 18:31                                           ` [PATCHv3 05/11] Makefile: do not replace @@GIT_USER_AGENT@@ in scripts Jeff King
2012-06-20 20:06                                             ` Junio C Hamano
2012-06-20 20:09                                               ` Jeff King
2012-06-20 18:31                                           ` [PATCHv3 06/11] Makefile: split GIT_USER_AGENT from GIT-CFLAGS Jeff King
2012-06-20 21:21                                             ` Jonathan Nieder
2012-06-20 22:16                                               ` Jeff King
2012-06-20 22:21                                                 ` Jonathan Nieder
2012-07-07  4:42                                                 ` [RFC/PATCH v4 " Jonathan Nieder
2012-06-20 18:31                                           ` [PATCHv3 07/11] Makefile: split prefix flags " Jeff King
2012-06-20 21:28                                             ` Jonathan Nieder
2012-06-20 22:22                                               ` Jeff King
2012-06-20 18:32                                           ` [PATCHv3 08/11] Makefile: do not replace @@GIT_VERSION@@ in shell scripts Jeff King
2012-06-20 18:32                                           ` [PATCHv3 09/11] Makefile: update scripts when build-time parameters change Jeff King
2012-06-20 18:32                                           ` [PATCHv3 10/11] Makefile: build instaweb similar to other scripts Jeff King
2012-06-20 18:32                                           ` [PATCHv3 11/11] Makefile: move GIT-VERSION-FILE dependencies closer to use Jeff King
2012-06-20 21:31                                             ` Jonathan Nieder
2012-06-20 19:30                                           ` [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets Jonathan Nieder
2012-06-20 19:36                                             ` Jeff King
2012-06-20 19:45                                               ` Jonathan Nieder
2012-06-20 19:57                                                 ` Jeff King
2012-06-20 21:00                                                   ` Jonathan Nieder
2012-06-21  8:52                                                   ` Automatic dependency tracking in the Git build system (was: Re: [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets) Stefano Lattarini
2012-06-20 20:10                                           ` [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets Junio C Hamano
2012-06-20 23:00                                             ` Thomas Rast
2012-06-21  5:18                                             ` Jeff King
2012-06-21  5:43                                               ` Junio C Hamano
2012-06-19 23:24                               ` [PATCHv2 2/8] Makefile: do not replace @@GIT_USER_AGENT@@ in scripts Jeff King
2012-06-19 23:25                               ` [PATCHv2 3/8] Makefile: split GIT_USER_AGENT from GIT-CFLAGS Jeff King
2012-06-19 23:25                               ` [PATCHv2 4/8] Makefile: split prefix flags " Jeff King
2012-06-19 23:27                               ` [PATCHv2 5/8] Makefile: do not replace @@GIT_VERSION@@ in shell scripts Jeff King
2012-06-19 23:28                               ` [PATCHv2 6/8] Makefile: update scripts when build-time parameters change Jeff King
2012-06-19 23:29                               ` [PATCHv2 7/8] Makefile: build instaweb similar to other scripts Jeff King
2012-06-19 23:30                               ` [PATCHv2 8/8] Makefile: move GIT-VERSION-FILE dependencies closer to use Jeff King
2012-06-02 19:03             ` [PATCH 3/4] http: get default user-agent from git_user_agent Jeff King
2012-06-02 19:05             ` [PATCH 4/4] include agent identifier in capability string Jeff King
2012-05-31 15:20 ` git version statistics Stephen Bash
2012-06-01  8:52   ` Jeff King

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=20120619214308.GA22166@sigill.intra.peff.net \
    --to=peff@peff.net \
    --cc=git@vger.kernel.org \
    --cc=gitster@pobox.com \
    --cc=trast@student.ethz.ch \
    /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).