git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH resend] Makefile: Use computed header dependencies if the compiler supports it

From
Fredrik Kuivinen <frekui@gmail.com>
Date
Aug 18, 2011, 18:34 UTC
Message-ID
<20110818183439.GA21560@fredrik-Q430-Q530>
In-Reply-To
<20110814200255.GC16819@elie.gateway.2wire.net>
On Sun, Aug 14, 2011 at 03:02:55PM -0500, Jonathan Nieder wrote:
Show 15 quoted lines
> Fredrik Kuivinen wrote:
> > On Sun, Aug 14, 2011 at 21:00, Jonathan Nieder <jrnieder@gmail.com> wrote:
> 
> >> I wonder if we can make do with a faster check, like
> >>
> >>        $(CC) -c -MF /dev/null -MMD -MP git.c --help >/dev/null 2>&1
> >>
> >> What do you think?
> [...]
> > Without patch (with COMPUTE_HEADER_DEPENDENCIES=Yes):
> 
> The case to compare against is when COMPUTE_HEADER_DEPENDENCIES is not
> set, I'd think, since that is the status quo.  And I was talking about
> commands like "make clean" that do not care about that feature, not
> "make all".

There is no measurable difference between setting and unsetting COMPUTE_HEADER_DEPENDENCIES for me (not surprising as nothing is actually built). "make clean" (in a clean tree) takes more time than "make" (in a fully built tree), so the relative overhead in the make clean case is even smaller. The absolute overhead is, of course, the same.

> [...]
> > With patch, but changed to use git.c instead of ++empty.c:
> 
> Did you try with "--help"?

Oh, I missed "--help". But for me gcc always exits with status code 0 when I give it "--help", regardless of what other flags I provide. Therefore, I don't see how "--help" can be used to test for support of -MMD.

Here is an updated patch. It avoids the ++empty.c file by giving "-x c" to the compiler. It also avoids the auto-detection when COMPUTE_HEADER_DEPENDENCIES is set, so if you want to avoid the overhead you can set that in you config.mak.

-- 8< --
Subject: [PATCH] Makefile: Use computed header dependencies if the compiler supports it

Previously you had to manually define COMPUTE_HEADER_DEPENDENCIES to enable this feature. It seemed a bit sad that such a useful feature had to be enabled manually.

To avoid the small overhead we don't do the auto-detection if COMPUTE_HEADER_DEPENDENCIES is already set.

Signed-off-by: Fredrik Kuivinen <frekui@gmail.com>
---
 Makefile |   13 +++++++++----
 1 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/Makefile b/Makefile
index 89cc624..c131439 100644
--- a/Makefile
+++ b/Makefile
@@ -250,10 +250,6 @@ all::
 #   DEFAULT_EDITOR='$GIT_FALLBACK_EDITOR',
 #   DEFAULT_EDITOR='"C:\Program Files\Vim\gvim.exe" --nofork'
 #
-# Define COMPUTE_HEADER_DEPENDENCIES if your compiler supports the -MMD option
-# and you want to avoid rebuilding objects when an unrelated header file
-# changes.
-#
 # Define CHECK_HEADER_DEPENDENCIES to check for problems in the hard-coded
 # dependency rules.
 #
@@ -1236,6 +1232,15 @@ endif
 ifdef CHECK_HEADER_DEPENDENCIES
 COMPUTE_HEADER_DEPENDENCIES =
 USE_COMPUTED_HEADER_DEPENDENCIES =
+else
+ifndef COMPUTE_HEADER_DEPENDENCIES
+dep_check = $(shell sh -c \
+	'$(CC) -c -MF /dev/null -MMD -MP -x c /dev/null -o /dev/null 2>&1; \
+	echo $$?')
+ifeq ($(dep_check),0)
+COMPUTE_HEADER_DEPENDENCIES=YesPlease
+endif
+endif
 endif
 
 ifdef COMPUTE_HEADER_DEPENDENCIES
-- 
1.7.5.3.368.g8b1b7.dirty
Previous: Jonathan NiederNext: Jonathan Nieder
Message 5 of 6 in “Makefile: Use computed header dependencies if the compiler supports it”
  1. Makefile: Use computed header dependencies if the compiler supports itFredrik Kuivinen, Aug 14, 2011
  2. Jonathan NiederAug 14, 2011
  3. Fredrik KuivinenAug 14, 2011
  4. Jonathan NiederAug 14, 2011
  5. Fredrik KuivinenAug 18, 2011
  6. Jonathan NiederAug 18, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.