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

Re: [PATCH 12/13] Makefile: teach scripts to include make variables

From
Junio C Hamano <gitster@pobox.com>
Date
Feb 5, 2014, 19:26 UTC
Message-ID
<xmqqa9e54ayl.fsf@gitster.dls.corp.google.com>
In-Reply-To
<20140205180547.GL15218@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 20 quoted lines
>  define cmd_munge_script
>  $(RM) $@ $@+ && \
> +{ \
> +includes="$(filter MAKE/%.sh,$^)"; \
> +if ! test -z "$$includes"; then \
> +	cat $$includes; \
> +fi && \
>  sed -e '1s|#!.*/sh|#!$(call sqi,$(SHELL_PATH))|' \
>      -e 's|@SHELL_PATH@|$(call sqi,$(SHELL_PATH))|' \
> -    -e 's|@@DIFF@@|$(call sqi,$(DIFF))|' \
>      -e 's|@@LOCALEDIR@@|$(call sqi,$(localedir))|g' \
>      -e 's/@@NO_CURL@@/$(NO_CURL)/g' \
>      -e 's/@@USE_GETTEXT_SCHEME@@/$(USE_GETTEXT_SCHEME)/g' \
>      -e $(BROKEN_PATH_FIX) \
>      -e 's|@@GITWEBDIR@@|$(call sqi,$(gitwebdir))|g' \
>      -e 's|@@PERL@@|$(call sqi,$(PERL_PATH))|g' \
> -    $@.sh >$@+
> +    $@.sh; \
> +} >$@+
>  endef
Sorry, but I am not quite sure what is going on here.
 - if $includes does not exist, cat $includes will barf but that is
   OK;
 - if $includes is empty, there is no point running cat so that is
   OK;
 - if $includes is not empty, we want to cat.

And then after emitting that piece, we start processing the *.sh source file, replacing she-bang line?

Show 11 quoted lines
> diff --git a/git-sh-setup.sh b/git-sh-setup.sh
> index fffa3c7..627d289 100644
> --- a/git-sh-setup.sh
> +++ b/git-sh-setup.sh
> @@ -285,7 +285,7 @@ clear_local_git_env() {
>  # remove lines from $1 that are not in $2, leaving only common lines.
>  create_virtual_base() {
>  	sz0=$(wc -c <"$1")
> -	@@DIFF@@ -u -La/"$1" -Lb/"$1" "$1" "$2" | git apply --no-add
> +	$MAKE_DIFF -u -La/"$1" -Lb/"$1" "$1" "$2" | git apply --no-add
>  	sz1=$(wc -c <"$1")

This would mean that after this mechanism is extensively employed throughout our codebase, any random environment variable the user has whose name happens to begin with "MAKE_" will interfere with us (rather, we will override such a variable while we run). Having to carve out our own namespace in such a way is OK, but we would want to see that namespace somewhat related to the name of our project, not to the name of somebody else's like "make", no?

Show 12 quoted lines
>  
>  	# If we do not have enough common material, it is not
> diff --git a/script/mksh b/script/mksh
> new file mode 100644
> index 0000000..d41e77a
> --- /dev/null
> +++ b/script/mksh
> @@ -0,0 +1,4 @@
> +#!/bin/sh
> +
> +name=$1; shift
> +printf "MAKE_%s='%s'\n" "$name" "$(sed "s/'/'\\''/g")"
Previous: Jeff KingNext: Jeff King
Message 22 of 28 in “makefile refactoring”
  1. 0/13 makefile refactoringJeff King, Feb 5, 2014
  2. 01/13 Makefile: drop USE_GETTEXT_SCHEME from GIT-CFLAGSJeff King, Feb 5, 2014
  3. 02/13 Makefile: fix git-instaweb dependency on gitwebJeff King, Feb 5, 2014
  4. 03/13 Makefile: introduce make-var helper functionJeff King, Feb 5, 2014
  5. Eric SunshineFeb 6, 2014
  6. 04/13 Makefile: use tempfile/mv strategy for GIT-*Jeff King, Feb 5, 2014
  7. 05/13 Makefile: prefer printf to echo for GIT-*Jeff King, Feb 5, 2014
  8. 06/13 Makefile: store GIT-* sentinel files in MAKE/Jeff King, Feb 5, 2014
  9. Junio C HamanoFeb 5, 2014
  10. 07/13 Makefile: always create files via make-varJeff King, Feb 5, 2014
  11. 08/13 Makefile: introduce sq function for shell-quotingJeff King, Feb 5, 2014
  12. Junio C HamanoFeb 5, 2014
  13. 09/13 Makefile: add c-quote helper functionJeff King, Feb 5, 2014
  14. Junio C HamanoFeb 5, 2014
  15. Jeff KingFeb 5, 2014
  16. 10/13 Makefile: drop *_SQ variablesJeff King, Feb 5, 2014
  17. Junio C HamanoFeb 5, 2014
  18. 11/13 Makefile: auto-build C strings from make variablesJeff King, Feb 5, 2014
  19. Junio C HamanoFeb 5, 2014
  20. Jeff KingFeb 5, 2014
  21. 12/13 Makefile: teach scripts to include make variablesJeff King, Feb 5, 2014
  22. Junio C HamanoFeb 5, 2014
  23. Jeff KingFeb 5, 2014
  24. Thomas RastFeb 8, 2014
  25. Jeff KingFeb 10, 2014
  26. 13/13 move LESS/LV pager environment to MakefileJeff King, Feb 5, 2014
  27. Jeff KingFeb 5, 2014
  28. Jeff KingFeb 5, 2014

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.