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

Re: [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets

From
Jeff King <peff@peff.net>
Date
Jun 20, 2012, 16:37 UTC
Message-ID
<20120620163714.GB12856@sigill.intra.peff.net>
In-Reply-To
<20120620102750.GB4579@burratino>
On Wed, Jun 20, 2012 at 05:27:50AM -0500, Jonathan Nieder wrote:
Show 10 quoted lines
> Jeff King wrote:
> 
> >   1. The .sp and .s targets _do_ need the same -D macros that the .o
> >      targets get.
> 
> Ah, you mean EXTRA_CPPFLAGS.  Yeah, that's also important, though the
> patch doesn't have anything to do with it.
> 
> Some circuit in my mind missed that you meant EXTRA_CPPFLAGS and not a
> file like GIT-CFLAGS.

No, I meant GIT-CFLAGS. But the point of my series is that the two are intimately paired: if you are setting EXTRA_CPPFLAGS to mention a make variable, then you should have a dependency on a file that changes if that make variable changes.

Show 5 quoted lines
> > So I think my preference would be to tack on a note to the commit
> > message saying "yeah, this doesn't do anything for meta-dependencies,
> > but it doesn't hurt either". OK?
> 
> What is a meta-dependency?  I would find that even more confusing.

It is my term for things like GIT-CFLAGS; they are not really dependencies in the sense that the build process even looks at them, but they are a marker whose timestamp changes when things which we _do_ actually depend on change. Better name suggestions are welcome.

> This change could be motivated more simply by saying that it prevents
> "make git.sp", "make git.s", "make help.s", and "make builtin/help.s"
> from failing when common-cmds.h doesn't exist yet, no?

More simply, perhaps, but that was not the entire motivation when writing the patch. It is connected with patches later in the series which update those lines.

Show 11 quoted lines
> But suggesting that we are supposed to ignore the FORCE just leaves
> the reader wondering why the same patch does not also urgently need
> to make additional changes such as the following, no?
> 
> 	builtin/branch.o builtin/checkout.o builtin/clone.o \
> 	builtin/reset.o branch.o transport.o: branch.h
> 
> to
> 
> 	builtin/branch.sp builtin/branch.o builtin/branch.s \
> [...]

Those lines were not updated because I did not notice them, as I was keeping the scope of the updates to generated headers and files like GIT-CFLAGS. IOW, my patch is a step in what I think is the right direction, but it does not remove all issues, only one class of them.

As a side note, I have to wonder if those lines are really worthwhile. Everything already depends on LIB_H (when computed header dependencies are not used). Headers like "branch.h" seem to be split out of LIB_H to avoid causing a full rebuild when uncommon headers are updated. But it is a half-hearted attempt; LIB_H has plenty of infrequently used headers, and a solution which requires manually updating the target lists seems doomed to staleness. These days COMPUTE_HEADER_DEPENDENCIES is on by default, and I expect most developers use it.

Can we just fold these few headers into LIB_H, let people without "gcc -MMD" deal with the extra compilation, and drop MISC_H and these extra manual dependencies entirely? And note that "extra compilation" there only happens when you are trying to rebuild a new version of git in a working tree containing an older version (so probably bisection would be the only place people would see it, and even then, only when jumping between versions that update one of the header files listed in MISC_H, but _not_ any of the ones listed in LIB_H).

-Peff
Previous: Jonathan NiederNext: Jeff King
Message 30 of 84 in “git version statistics”
  1. Jeff KingMay 31, 2012
  2. Jeff KingMay 31, 2012
  3. Junio C HamanoMay 31, 2012
  4. Jeff KingJun 1, 2012
  5. Junio C HamanoJun 1, 2012
  6. Jeff KingJun 2, 2012
  7. Tomas CarneckyJun 2, 2012
  8. Jeff KingJun 2, 2012
  9. 1/4 move git_version_string into version.cJeff King, Jun 2, 2012
  10. 2/4 version: add git_user_agent functionJeff King, Jun 2, 2012
  11. Thomas RastJun 19, 2012
  12. Jeff KingJun 19, 2012
  13. Jeff KingJun 19, 2012
  14. 1/3 Makefile: apply dependencies consistently to sparse/asm targetsJeff King, Jun 19, 2012
  15. Junio C HamanoJun 19, 2012
  16. 2/3 Makefile: split GIT_USER_AGENT from GIT-CFLAGSJeff King, Jun 19, 2012
  17. Junio C HamanoJun 19, 2012
  18. 3/3 Makefile: split prefix flags from GIT-CFLAGSJeff King, Jun 19, 2012
  19. Junio C HamanoJun 19, 2012
  20. Jeff KingJun 19, 2012
  21. Junio C HamanoJun 19, 2012
  22. Jeff KingJun 19, 2012
  23. Junio C HamanoJun 19, 2012
  24. Jeff KingJun 19, 2012
  25. 0/8 makefile cleanupsJeff King, Jun 19, 2012
  26. 1/8 Makefile: apply dependencies consistently to sparse/asm targetsJeff King, Jun 19, 2012
  27. Jonathan NiederJun 20, 2012
  28. Jeff KingJun 20, 2012
  29. Jonathan NiederJun 20, 2012
  30. Jeff KingJun 20, 2012
  31. Jeff KingJun 20, 2012
  32. 01/11 Makefile: sort LIB_H listJeff King, Jun 20, 2012
  33. Junio C HamanoJun 20, 2012
  34. Jeff KingJun 20, 2012
  35. 02/11 Makefile: fold MISC_H into LIB_HJeff King, Jun 20, 2012
  36. Junio C HamanoJun 20, 2012
  37. Jonathan NiederJun 20, 2012
  38. Jeff KingJun 20, 2012
  39. 5/11 Makefile: fold XDIFF_H and VCSSVN_H into LIB_HJonathan Nieder, Jul 7, 2012
  40. Junio C HamanoJul 9, 2012
  41. Jonathan NiederJul 6, 2012
  42. 03/11 Makefile: do not have git.o depend on common-cmds.hJeff King, Jun 20, 2012
  43. Jonathan NiederJun 20, 2012
  44. 04/11 Makefile: apply dependencies consistently to sparse/asm targetsJeff King, Jun 20, 2012
  45. Jonathan NiederJun 20, 2012
  46. Jeff KingJun 20, 2012
  47. Makefile: document ground rules for target-specific dependenciesJonathan Nieder, Jul 7, 2012
  48. 05/11 Makefile: do not replace @@GIT_USER_AGENT@@ in scriptsJeff King, Jun 20, 2012
  49. Junio C HamanoJun 20, 2012
  50. Jeff KingJun 20, 2012
  51. 06/11 Makefile: split GIT_USER_AGENT from GIT-CFLAGSJeff King, Jun 20, 2012
  52. Jonathan NiederJun 20, 2012
  53. Jeff KingJun 20, 2012
  54. Jonathan NiederJun 20, 2012
  55. 06/11 Makefile: split GIT_USER_AGENT from GIT-CFLAGSJonathan Nieder, Jul 7, 2012
  56. 07/11 Makefile: split prefix flags from GIT-CFLAGSJeff King, Jun 20, 2012
  57. Jonathan NiederJun 20, 2012
  58. Jeff KingJun 20, 2012
  59. 08/11 Makefile: do not replace @@GIT_VERSION@@ in shell scriptsJeff King, Jun 20, 2012
  60. 09/11 Makefile: update scripts when build-time parameters changeJeff King, Jun 20, 2012
  61. 10/11 Makefile: build instaweb similar to other scriptsJeff King, Jun 20, 2012
  62. 11/11 Makefile: move GIT-VERSION-FILE dependencies closer to useJeff King, Jun 20, 2012
  63. Jonathan NiederJun 20, 2012
  64. Jonathan NiederJun 20, 2012
  65. Jeff KingJun 20, 2012
  66. Jonathan NiederJun 20, 2012
  67. Jeff KingJun 20, 2012
  68. Jonathan NiederJun 20, 2012
  69. Automatic dependency tracking in the Git build system (was: Re: [PATCHv2 1/8] Makefile: apply dependencies consistently to sparse/asm targets)Stefano Lattarini, Jun 21, 2012
  70. Junio C HamanoJun 20, 2012
  71. Thomas RastJun 20, 2012
  72. Jeff KingJun 21, 2012
  73. Junio C HamanoJun 21, 2012
  74. 2/8 Makefile: do not replace @@GIT_USER_AGENT@@ in scriptsJeff King, Jun 19, 2012
  75. 3/8 Makefile: split GIT_USER_AGENT from GIT-CFLAGSJeff King, Jun 19, 2012
  76. 4/8 Makefile: split prefix flags from GIT-CFLAGSJeff King, Jun 19, 2012
  77. 5/8 Makefile: do not replace @@GIT_VERSION@@ in shell scriptsJeff King, Jun 19, 2012
  78. 6/8 Makefile: update scripts when build-time parameters changeJeff King, Jun 19, 2012
  79. 7/8 Makefile: build instaweb similar to other scriptsJeff King, Jun 19, 2012
  80. 8/8 Makefile: move GIT-VERSION-FILE dependencies closer to useJeff King, Jun 19, 2012
  81. 3/4 http: get default user-agent from git_user_agentJeff King, Jun 2, 2012
  82. 4/4 include agent identifier in capability stringJeff King, Jun 2, 2012
  83. Stephen BashMay 31, 2012
  84. Jeff KingJun 1, 2012

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.