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

[PATCH v3 0/4] Makefile: untangle bin-wrappers/% rule complexity

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Oct 31, 2022, 22:28 UTC
Message-ID
<cover-v3-0.4-00000000000-20221031T222249Z-avarab@gmail.com>
In-Reply-To
<cover-v2-0.3-00000000000-20221026T143533Z-avarab@gmail.com>

This series untangles the gnarly rule we use to generate bin-wrappers/%.

It's now complex because we generate it from 3x separate variables, and then end up having to do inline pattern matching to decide which value comes from where.

Instead, we can avoid squashing those values together, so we don't have to guess.

See[1] for the v2. This hopefully addresses all outstanding issues/points that were raised. An added 3/4 here makes the eventual 4/4 smaler.

1. https://lore.kernel.org/git/cover-v2-0.3-00000000000-20221026T143533Z-avarab@gmail.com/
Ævar Arnfjörð Bjarmason (4):
  Makefile: factor sed-powered '#!/bin/sh' munging into a variable
  Makefile: define "TEST_{PROGRAM,OBJS}" variables earlier
  Makefile: rename "test_bindir_programs" variable, pre-declare
  Makefile: simplify $(test_bindir_programs) rule by splitting it up
 Makefile | 70 +++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 51 insertions(+), 19 deletions(-)
Range-diff against v2:
1:  fc6c5a6a8df = 1:  c9ce5b78a3a Makefile: factor sed-powered '#!/bin/sh' munging into a variable
2:  6dcb49f25c4 = 2:  b95c296b6de Makefile: define "TEST_{PROGRAM,OBJS}" variables earlier
-:  ----------- > 3:  fea93c45898 Makefile: rename "test_bindir_programs" variable, pre-declare
3:  400f487e30d ! 4:  0ff09495476 Makefile: simplify $(test_bindir_programs) rule by splitting it up
    @@ Commit message
         Which will show an empty diff, i.e. we've correctly dealt with the
         combination of $(SHELL_PATH), $(X) and these three variables here.
     
    -    This also fixes an issue with the "bin-wrappers/" scripts have never had properly declared
    -    dependency information, i.e. this has never worked:
    +    This also fixes an issue with the "bin-wrappers/" scripts have never
    +    had properly declared dependency information, i.e. this has never
    +    worked:
     
                 make clean &&
                 make bin-wrappers/git &&
    @@ Commit message
         Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
     
      ## Makefile ##
    -@@ Makefile: export TCL_PATH TCLTK_PATH
    - PTHREAD_LIBS = -lpthread
    - 
    - # Guard against environment variables
    -+BIN_WRAPPERS =
    - BUILTIN_OBJS =
    - BUILT_INS =
    - COMPAT_CFLAGS =
     @@ Makefile: GIT-PYTHON-VARS: FORCE
                  fi
      endif
      
    --test_bindir_programs := $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))
    +-BIN_WRAPPERS = $(patsubst %,bin-wrappers/%,$(BINDIR_PROGRAMS_NEED_X) $(BINDIR_PROGRAMS_NO_X) $(TEST_PROGRAMS_NEED_X))
     +define cmd_munge_bin_wrappers_script
     +sed \
     +	-e $(call cmd_munge_script_sed_shell_path_arg) \
    @@ Makefile: GIT-PYTHON-VARS: FORCE
     +	chmod +x $@
     +endef
      
    --all:: $(test_bindir_programs)
    +-all:: $(BIN_WRAPPERS)
     +define bin_wrappers_template
     +
    -+## bin_wrappers_template
    -+# 1 = $(1)
    -+# 2 = $(2)
    -+# 3 = $(3)
    -+# 4 = $(4)
    ++### bin_wrappers_template; Parameters:
    ++## E.g. "BINDIR_PROGRAMS_NEED_X": Variable reference
    ++# 1='$(1)'
    ++## E.g. "$(@F)": Passed as $$(1)) to "cmd_munge_bin_wrappers_script"
    ++# 2='$(2)'
    ++## E.g. "" or "t/helper": Directory prefix for the wrapped binary
    ++# 3='$(3)'
    ++## E.g. "" or "$$X": If $$X: wrapped binary needs X=.exe (for Windows)
    ++# 4='$(4)'
     +BW_$(1) = $$($(1):%=bin-wrappers/%)
     +BIN_WRAPPERS += $$(BW_$(1))
    -+all:: $$(BW_$(1))
     +$$(BW_$(1)): bin-wrappers/% : $(3)%$(4)
     +$$(BW_$(1)): wrap-for-bin.sh
     +	$$(call mkdir_p_parent_template)
    @@ Makefile: GIT-PYTHON-VARS: FORCE
      
      # GNU make supports exporting all variables by "export" without parameters.
      # However, the environment gets quite big, and some programs have problems
    -@@ Makefile: OTHER_PROGRAMS += $(shell echo *.dll t/helper/*.dll)
    - endif
    - 
    - artifacts-tar:: $(ALL_COMMANDS_TO_INSTALL) $(SCRIPT_LIB) $(OTHER_PROGRAMS) \
    --		GIT-BUILD-OPTIONS $(TEST_PROGRAMS) $(test_bindir_programs) \
    -+		GIT-BUILD-OPTIONS $(TEST_PROGRAMS) $(BIN_WRAPPERS) \
    - 		$(MOFILES)
    - 	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1) \
    - 		SHELL_PATH='$(SHELL_PATH_SQ)' PERL_PATH='$(PERL_PATH_SQ)'
-- 
2.38.0.1280.g8136eb6fab2
Previous: Ævar Arnfjörð BjarmasonNext: Ævar Arnfjörð Bjarmason
Message 28 of 70 in “scalar: integrate into core Git”
  1. 0/8 scalar: integrate into core GitVictoria Dye via GitGitGadget, Aug 31, 2022
  2. 1/8 scalar: fix command documentation section headerVictoria Dye via GitGitGadget, Aug 31, 2022
  3. 3/8 git help: special-case `scalar`Johannes Schindelin via GitGitGadget, Aug 31, 2022
  4. 2/8 scalar: include in standard Git build & installationVictoria Dye via GitGitGadget, Aug 31, 2022
  5. Johannes SchindelinSep 1, 2022
  6. 0/5 Makefile: split up $(test_bindir_programs)Ævar Arnfjörð Bjarmason, Sep 1, 2022
  7. 1/5 Makefile: factor sed-powered '#!/bin/sh' munging into a variableÆvar Arnfjörð Bjarmason, Sep 1, 2022
  8. 2/5 Makefile: define "TEST_{PROGRAM,OBJS}" variables earlierÆvar Arnfjörð Bjarmason, Sep 1, 2022
  9. 3/5 Makefile: simplify $(test_bindir_programs) rule by splitting it upÆvar Arnfjörð Bjarmason, Sep 1, 2022
  10. 5/5 Makefile: fix "make clean && make bin-wrappers/$NAME" dependenciesÆvar Arnfjörð Bjarmason, Sep 1, 2022
  11. 4/5 Makefile: define bin-wrappers/% rules with a templateÆvar Arnfjörð Bjarmason, Sep 1, 2022
  12. Derrick StoleeSep 1, 2022
  13. Johannes SchindelinSep 2, 2022
  14. 0/3 Makefile: fix issues with bin-wrappers/% ruleÆvar Arnfjörð Bjarmason, Oct 26, 2022
  15. 1/3 Makefile: factor sed-powered '#!/bin/sh' munging into a variableÆvar Arnfjörð Bjarmason, Oct 26, 2022
  16. Junio C HamanoOct 26, 2022
  17. 3/3 Makefile: simplify $(test_bindir_programs) rule by splitting it upÆvar Arnfjörð Bjarmason, Oct 26, 2022
  18. Junio C HamanoOct 26, 2022
  19. Ævar Arnfjörð BjarmasonOct 26, 2022
  20. Junio C HamanoOct 26, 2022
  21. Ævar Arnfjörð BjarmasonOct 26, 2022
  22. 2/3 Makefile: define "TEST_{PROGRAM,OBJS}" variables earlierÆvar Arnfjörð Bjarmason, Oct 26, 2022
  23. Junio C HamanoOct 26, 2022
  24. Ævar Arnfjörð BjarmasonOct 26, 2022
  25. Junio C HamanoOct 26, 2022
  26. Jeff KingOct 28, 2022
  27. Ævar Arnfjörð BjarmasonOct 28, 2022
  28. 0/4 Makefile: untangle bin-wrappers/% rule complexityÆvar Arnfjörð Bjarmason, Oct 31, 2022
  29. 1/4 Makefile: factor sed-powered '#!/bin/sh' munging into a variableÆvar Arnfjörð Bjarmason, Oct 31, 2022
  30. 3/4 Makefile: rename "test_bindir_programs" variable, pre-declareÆvar Arnfjörð Bjarmason, Oct 31, 2022
  31. 2/4 Makefile: define "TEST_{PROGRAM,OBJS}" variables earlierÆvar Arnfjörð Bjarmason, Oct 31, 2022
  32. 4/4 Makefile: simplify $(test_bindir_programs) rule by splitting it upÆvar Arnfjörð Bjarmason, Oct 31, 2022
  33. Taylor BlauOct 31, 2022
  34. Ævar Arnfjörð BjarmasonNov 1, 2022
  35. 4/8 scalar: implement the `help` subcommandJohannes Schindelin via GitGitGadget, Aug 31, 2022
  36. Ævar Arnfjörð BjarmasonAug 31, 2022
  37. Victoria DyeSep 1, 2022
  38. Johannes SchindelinSep 1, 2022
  39. Johannes SchindelinSep 1, 2022
  40. 5/8 scalar-clone: add test coverageVictoria Dye via GitGitGadget, Aug 31, 2022
  41. Johannes SchindelinSep 1, 2022
  42. Victoria DyeSep 1, 2022
  43. Johannes SchindelinSep 2, 2022
  44. Junio C HamanoSep 2, 2022
  45. 7/8 t/perf: add 'GIT_PERF_USE_SCALAR' run optionVictoria Dye via GitGitGadget, Aug 31, 2022
  46. Johannes SchindelinSep 1, 2022
  47. Victoria DyeSep 2, 2022
  48. Johannes SchindelinSep 2, 2022
  49. 6/8 t/perf: add Scalar performance testsVictoria Dye via GitGitGadget, Aug 31, 2022
  50. Johannes SchindelinSep 1, 2022
  51. Victoria DyeSep 1, 2022
  52. Victoria DyeSep 1, 2022
  53. Johannes SchindelinSep 2, 2022
  54. Junio C HamanoSep 1, 2022
  55. 8/8 Documentation/technical: include Scalar technical docVictoria Dye via GitGitGadget, Aug 31, 2022
  56. Ævar Arnfjörð BjarmasonAug 31, 2022
  57. Victoria DyeAug 31, 2022
  58. Johannes SchindelinSep 1, 2022
  59. 0/9 scalar: integrate into core GitVictoria Dye via GitGitGadget, Sep 2, 2022
  60. 4/9 scalar: implement the `help` subcommandJohannes Schindelin via GitGitGadget, Sep 2, 2022
  61. 3/9 git help: special-case `scalar`Johannes Schindelin via GitGitGadget, Sep 2, 2022
  62. 1/9 scalar: fix command documentation section headerVictoria Dye via GitGitGadget, Sep 2, 2022
  63. 7/9 t/perf: add Scalar performance testsVictoria Dye via GitGitGadget, Sep 2, 2022
  64. 6/9 scalar-clone: add test coverageVictoria Dye via GitGitGadget, Sep 2, 2022
  65. 2/9 scalar: include in standard Git build & installationVictoria Dye via GitGitGadget, Sep 2, 2022
  66. 8/9 t/perf: add 'GIT_PERF_USE_SCALAR' run optionVictoria Dye via GitGitGadget, Sep 2, 2022
  67. 9/9 Documentation/technical: include Scalar technical docVictoria Dye via GitGitGadget, Sep 2, 2022
  68. 5/9 scalar: add to 'git help -a' command listVictoria Dye via GitGitGadget, Sep 2, 2022
  69. Johannes SchindelinSep 5, 2022
  70. Derrick StoleeSep 8, 2022

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.