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

[PATCH 3/4] Makefile: allow building without perl

From
Jeff King <peff@peff.net>
Date
Apr 3, 2009, 19:32 UTC
Message-ID
<20090403193220.GC5547@coredump.intra.peff.net>
In-Reply-To
<20090403192700.GA14965@coredump.intra.peff.net>

For systems with a missing or broken perl, it is nicer to explicitly say "we don't want perl" because:

  1. The Makefile knows not to bother with Perl-ish things
     like Git.pm.
  2. We can print a more user-friendly error message
     than "foo is not a git command" or whatever the broken
     perl might barf
  3. Test scripts that require perl can mark themselves and
     such and be skipped

This patch implements parts (1) and (2). The perl/ subdirectory is skipped entirely, gitweb is not built, and any git commands which rely on perl will print a human-readable message and exit with an error code.

This patch is based on one from Robin H. Johnson.
Signed-off-by: Jeff King <peff@peff.net>
---
This is a rebase of what I sent earlier (the original was based on
1.6.2.1).
 Makefile         |   23 +++++++++++++++++++++--
 unimplemented.sh |    4 ++++
 2 files changed, 25 insertions(+), 2 deletions(-)
 create mode 100644 unimplemented.sh
diff --git a/Makefile b/Makefile
index 7867eac..d7b0837 100644
--- a/Makefile
+++ b/Makefile
@@ -145,6 +145,8 @@ all::
 # Define NO_PERL_MAKEMAKER if you cannot use Makefiles generated by perl's
 # MakeMaker (e.g. using ActiveState under Cygwin).
 #
+# Define NO_PERL if you do not want Perl scripts or libraries at all.
+#
 # Define NO_TCLTK if you do not want Tcl/Tk GUI.
 #
 # The TCL_PATH variable governs the location of the Tcl interpreter
@@ -353,7 +355,10 @@ BUILT_INS += git-whatchanged$X
 ALL_PROGRAMS = $(PROGRAMS) $(SCRIPTS)
 
 # what 'all' will build but not install in gitexecdir
-OTHER_PROGRAMS = git$X gitweb/gitweb.cgi
+OTHER_PROGRAMS = git$X
+ifndef NO_PERL
+OTHER_PROGRAMS += gitweb/gitweb.cgi
+endif
 
 # Set paths to tools early so that they can be used for version tests.
 ifndef SHELL_PATH
@@ -1178,7 +1183,9 @@ ifndef NO_TCLTK
 	$(QUIET_SUBDIR0)git-gui $(QUIET_SUBDIR1) gitexecdir='$(gitexec_instdir_SQ)' all
 	$(QUIET_SUBDIR0)gitk-git $(QUIET_SUBDIR1) all
 endif
+ifndef NO_PERL
 	$(QUIET_SUBDIR0)perl $(QUIET_SUBDIR1) PERL_PATH='$(PERL_PATH_SQ)' prefix='$(prefix_SQ)' all
+endif
 	$(QUIET_SUBDIR0)templates $(QUIET_SUBDIR1)
 
 please_set_SHELL_PATH_to_a_more_modern_shell:
@@ -1225,6 +1232,7 @@ $(patsubst %.sh,%,$(SCRIPT_SH)) : % : %.sh
 	chmod +x $@+ && \
 	mv $@+ $@
 
+ifndef NO_PERL
 $(patsubst %.perl,%,$(SCRIPT_PERL)): perl/perl.mak
 
 perl/perl.mak: GIT-CFLAGS perl/Makefile perl/Makefile.PL
@@ -1284,6 +1292,15 @@ git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
 	    $@.sh > $@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
+else # NO_PERL
+$(patsubst %.perl,%,$(SCRIPT_PERL)) git-instaweb: % : unimplemented.sh
+	$(QUIET_GEN)$(RM) $@ $@+ && \
+	sed -e '1s|#!.*/sh|#!$(SHELL_PATH_SQ)|' \
+	    -e 's|@@REASON@@|NO_PERL=$(NO_PERL)|g' \
+	    unimplemented.sh >$@+ && \
+	chmod +x $@+ && \
+	mv $@+ $@
+endif # NO_PERL
 
 configure: configure.ac
 	$(QUIET_GEN)$(RM) $@ $<+ && \
@@ -1602,9 +1619,11 @@ clean:
 	$(RM) -r $(GIT_TARNAME) .doc-tmp-dir
 	$(RM) $(GIT_TARNAME).tar.gz git-core_$(GIT_VERSION)-*.tar.gz
 	$(RM) $(htmldocs).tar.gz $(manpages).tar.gz
-	$(RM) gitweb/gitweb.cgi
 	$(MAKE) -C Documentation/ clean
+ifndef NO_PERL
+	$(RM) gitweb/gitweb.cgi
 	$(MAKE) -C perl clean
+endif
 	$(MAKE) -C templates/ clean
 	$(MAKE) -C t/ clean
 ifndef NO_TCLTK
diff --git a/unimplemented.sh b/unimplemented.sh
new file mode 100644
index 0000000..5252de4
--- /dev/null
+++ b/unimplemented.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+echo >&2 "fatal: git was built without support for `basename $0` (@@REASON@@)."
+exit 128
-- 
1.6.2.2.569.g2d4b2
Previous: Jeff KingNext: Robin H. Johnson
Message 20 of 30 in “NO_PERL support”
  1. NO_PERL supportRobin H. Johnson, Apr 3, 2009
  2. Jeff KingApr 3, 2009
  3. Johannes SchindelinApr 3, 2009
  4. Jeff KingApr 3, 2009
  5. Johannes SchindelinApr 3, 2009
  6. Miklos VajnaApr 3, 2009
  7. Jeff KingApr 3, 2009
  8. Johannes SixtApr 3, 2009
  9. Jeff KingApr 3, 2009
  10. Jeff KingApr 3, 2009
  11. Robin H. JohnsonApr 3, 2009
  12. Jeff KingApr 3, 2009
  13. Junio C HamanoApr 3, 2009
  14. Jeff KingApr 3, 2009
  15. Junio C HamanoApr 3, 2009
  16. Jeff KingApr 3, 2009
  17. 0/4 NO_PERL supportJeff King, Apr 3, 2009
  18. 1/4 commit: abort commit if interactive add failedJeff King, Apr 3, 2009
  19. 2/4 tests: remove exit after test_done callJeff King, Apr 3, 2009
  20. 3/4 Makefile: allow building without perlJeff King, Apr 3, 2009
  21. Robin H. JohnsonApr 4, 2009
  22. Jeff KingApr 4, 2009
  23. Robin H. JohnsonApr 4, 2009
  24. Jeff KingApr 4, 2009
  25. Robin H. JohnsonApr 5, 2009
  26. Jeff KingApr 7, 2009
  27. 4/4 tests: skip perl tests if NO_PERL is definedJeff King, Apr 3, 2009
  28. Robin H. JohnsonApr 4, 2009
  29. Jeff KingApr 4, 2009
  30. Jeff KingApr 7, 2009

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.