Subject: Re: [PATCH] t0090: mark add-interactive test with PERL prerequisite

From: Jeff King <[email-masked]>
Date: Tue, 18 Nov 2014 12:43:09 -0500

On Tue, Nov 18, 2014 at 12:22:31PM -0500, Jeff King wrote:

> The add-interactive system is built in perl. If you build
> with NO_PERL, running "git commit --interactive" will exit
> with an error and the test will fail.
> 
> Signed-off-by: Jeff King <[email-masked]>
> ---
> Noticed by Michael while working around gitweb failures by setting
> NO_PERL. :)
> 
> It didn't reproduce for me in my existing build directory, presumably
> because I had an old git-add--interactive build product lying around.
> But running the tests in a clean clone with NO_PERL set reproduces
> easily.

I don't think fixing this is really a high priority. You can't ever be
free of odd interactions with previous build artifacts. After all, you
might have a built "git-foo" from a previous version of git (or one from
the future, or even an alternate reality from another branch), and our
Makefile should not have to know about every previous version you may
have built in the path. That is what "git clean" is for (or just using a
clean build directory).

But fixing this one in particular is pretty easy (and we _do_ know about
the wrongly-built file; our dependencies are just incomplete):

-- >8 --
Subject: Makefile: have perl scripts depend on NO_PERL setting

If NO_PERL is not set, our perl scripts are built as
usual. If it is set, then we build "dummy" versions that
tell you git was built without perl support and exit
gracefully.

However, if you switch to NO_PERL in a directory with
existing build artifacts, we do not notice that the files
need rebuilt. We see only that they are newer than the
"unimplemented.sh" wrapper and assume they are done. So
doing:

  make
  make NO_PERL=Nope

would result in a git-add--interactive script that uses perl
(and running the test suite would make use of it).

Instead, we should trigger a rebuild of the perl scripts
anytime NO_PERL changes.

Signed-off-by: Jeff King <[email-masked]>
---
 Makefile | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Makefile b/Makefile
index 827006b..0fa02ff 100644
--- a/Makefile
+++ b/Makefile
@@ -1676,6 +1676,9 @@ git.res: git.rc GIT-VERSION-FILE
 	  $(join -DMAJOR= -DMINOR=, $(wordlist 1,2,$(subst -, ,$(subst ., ,$(GIT_VERSION))))) \
 	  -DGIT_VERSION="\\\"$(GIT_VERSION)\\\"" $< -o $@
 
+# This makes sure we depend on the NO_PERL setting itself.
+$(patsubst %.perl,%,$(SCRIPT_PERL)): GIT-BUILD-OPTIONS
+
 ifndef NO_PERL
 $(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak
 
-- 
2.1.2.596.g7379948