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; \
> +} >$@+
> endefSorry, 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")"