git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
From: "Robin H. Johnson" <robbat2@gentoo.org>
To: Git Mailing List <git@vger.kernel.org>
Subject: [PATCH] NO_PERL support
Date: Fri, 3 Apr 2009 00:03:50 -0700	[thread overview]
Message-ID: <20090403T065545Z@curie.orbis-terrarum.net> (raw)


[-- Attachment #1.1: Type: text/plain, Size: 599 bytes --]

The attached patch adds NO_PERL to the build system, in the same fashion
as NO_TCLTK.

Effects:
- No perl-based scripts or code are installed:
	$SCRIPT_PERL
	git-instaweb
	gitweb
	git-cvsserver
	git-svn
- git-add does NOT have interactive support.
- None of the tests for the disabled stuff gets run.

This patch has been a optional part of the Gentoo build of Git for a
full year now, originally introduced with v1.5.4.4.

-- 
Robin Hugh Johnson
Gentoo Linux Developer & Infra Guy
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85

[-- Attachment #1.2: 20090402-git-1.6.2.2-noperl.patch --]
[-- Type: text/plain, Size: 12384 bytes --]

Implement 95% of the NO_PERL functionality, to build Git without any Perl
support, because some Gentoo users want a Git without any Perl whatesoever
(Gentoo bug #214168).

Remaining bits are doing configure.ac as well as git-remote usage in:
t5502-quickfetch.sh
t5512-ls-remote.sh
t5520-pull.sh

Signed-off-by: Robin H. Johnson <robbat2@gentoo.org>
Updated-by: Bernd Lommerzheim <bernd@lommerzheim.com>
Bugzilla-URL: http://bugs.gentoo.org/show_bug.cgi?id=214168
Notes: Ported from 20080423-git-1.5.5.1-noperl.patch
Notes: Ported from 20080322-git-1.5.4.5-noperl.patch
Notes: Ported from 20080528-git-1.5.6.1-noperl.patch
Notes: Ported from 20080626-git-1.5.6.1-noperl.patch and 20081123-git-1.6.0.4-noperl-cvsserver.patch
Notes: Ported from 20090126-git-1.6.1.1-noperl.patch
Notes: t3701-add-interactive.sh block added 2009/04/02 as it was missed, broke
       testsuite with USE=-perl.

diff --git a/Makefile b/Makefile
index 0675c43..0adb2b5 100644
--- a/Makefile
+++ b/Makefile
@@ -139,6 +139,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 at all.
+#
 # Define NO_TCLTK if you do not want Tcl/Tk GUI.
 #
 # The TCL_PATH variable governs the location of the Tcl interpreter
@@ -277,6 +279,8 @@ SCRIPT_SH += git-stash.sh
 SCRIPT_SH += git-submodule.sh
 SCRIPT_SH += git-web--browse.sh
 
+SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH))
+ifndef NO_PERL
 SCRIPT_PERL += git-add--interactive.perl
 SCRIPT_PERL += git-archimport.perl
 SCRIPT_PERL += git-cvsexportcommit.perl
@@ -285,10 +289,11 @@ SCRIPT_PERL += git-cvsserver.perl
 SCRIPT_PERL += git-relink.perl
 SCRIPT_PERL += git-send-email.perl
 SCRIPT_PERL += git-svn.perl
-
-SCRIPTS = $(patsubst %.sh,%,$(SCRIPT_SH)) \
-	  $(patsubst %.perl,%,$(SCRIPT_PERL)) \
-	  git-instaweb
+SCRIPTS += $(patsubst %.perl,%,$(SCRIPT_PERL)) \
+			git-instaweb
+else
+SCRIPT_PERL =
+endif
 
 # Empty...
 EXTRA_PROGRAMS =
@@ -335,7 +340,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
@@ -868,6 +876,10 @@ else
 	endif
 endif
 
+ifdef NO_PERL
+	BASIC_CFLAGS += -DNO_PERL
+endif
+
 ifdef ZLIB_PATH
 	BASIC_CFLAGS += -I$(ZLIB_PATH)/include
 	EXTLIBS += -L$(ZLIB_PATH)/$(lib) $(CC_LD_DYNPATH)$(ZLIB_PATH)/$(lib)
@@ -1067,6 +1079,11 @@ endif
 ifeq ($(TCLTK_PATH),)
 NO_TCLTK=NoThanks
 endif
+ifeq ($(PERL_PATH),)
+NO_PERL=NoThanks
+export NO_PERL
+export NO_PERL_MAKEMAKER
+endif
 
 QUIET_SUBDIR0  = +$(MAKE) -C # space to separate -C and subdir
 QUIET_SUBDIR1  =
@@ -1142,7 +1159,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:
@@ -1189,6 +1208,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
@@ -1248,6 +1268,7 @@ git-instaweb: git-instaweb.sh gitweb/gitweb.cgi gitweb/gitweb.css
 	    $@.sh > $@+ && \
 	chmod +x $@+ && \
 	mv $@+ $@
+endif # NO_PERL
 
 configure: configure.ac
 	$(QUIET_GEN)$(RM) $@ $<+ && \
@@ -1455,9 +1476,12 @@ install: all
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(INSTALL) -d -m 755 '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
 	$(INSTALL) $(ALL_PROGRAMS) '$(DESTDIR_SQ)$(gitexec_instdir_SQ)'
-	$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
+	$(INSTALL) git$X git-upload-pack$X git-receive-pack$X git-upload-archive$X git-shell$X '$(DESTDIR_SQ)$(bindir_SQ)'
 	$(MAKE) -C templates DESTDIR='$(DESTDIR_SQ)' install
+ifndef NO_PERL
 	$(MAKE) -C perl prefix='$(prefix_SQ)' DESTDIR='$(DESTDIR_SQ)' install
+	$(INSTALL) git-cvsserver '$(DESTDIR_SQ)$(bindir_SQ)'
+endif
 ifndef NO_TCLTK
 	$(MAKE) -C gitk-git install
 	$(MAKE) -C git-gui gitexecdir='$(gitexec_instdir_SQ)' install
@@ -1565,9 +1589,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/builtin-add.c b/builtin-add.c
index 08443f2..01e18a1 100644
--- a/builtin-add.c
+++ b/builtin-add.c
@@ -15,7 +15,9 @@ static const char * const builtin_add_usage[] = {
 	"git add [options] [--] <filepattern>...",
 	NULL
 };
+#ifndef NO_PERL
 static int patch_interactive, add_interactive;
+#endif
 static int take_worktree_changes;
 
 static void fill_pathspec_matches(const char **pathspec, char *seen, int specs)
@@ -158,6 +160,7 @@ static const char **validate_pathspec(int argc, const char **argv, const char *p
 	return pathspec;
 }
 
+#ifndef NO_PERL
 int interactive_add(int argc, const char **argv, const char *prefix)
 {
 	int status, ac;
@@ -186,6 +189,7 @@ int interactive_add(int argc, const char **argv, const char *prefix)
 	free(args);
 	return status;
 }
+#endif
 
 static struct lock_file lock_file;
 
@@ -199,8 +203,10 @@ static struct option builtin_add_options[] = {
 	OPT__DRY_RUN(&show_only),
 	OPT__VERBOSE(&verbose),
 	OPT_GROUP(""),
+#ifndef NO_PERL
 	OPT_BOOLEAN('i', "interactive", &add_interactive, "interactive picking"),
 	OPT_BOOLEAN('p', "patch", &patch_interactive, "interactive patching"),
+#endif
 	OPT_BOOLEAN('f', "force", &ignored_too, "allow adding otherwise ignored files"),
 	OPT_BOOLEAN('u', "update", &take_worktree_changes, "update tracked files"),
 	OPT_BOOLEAN('N', "intent-to-add", &intent_to_add, "record only the fact that the path will be added later"),
@@ -252,10 +258,12 @@ int cmd_add(int argc, const char **argv, const char *prefix)
 
 	argc = parse_options(argc, argv, builtin_add_options,
 			  builtin_add_usage, 0);
+#ifndef NO_PERL
 	if (patch_interactive)
 		add_interactive = 1;
 	if (add_interactive)
 		exit(interactive_add(argc, argv, prefix));
+#endif
 
 	git_config(add_config, NULL);
 
diff --git a/builtin-commit.c b/builtin-commit.c
index 46e649c..944f3ac 100644
--- a/builtin-commit.c
+++ b/builtin-commit.c
@@ -100,7 +100,9 @@ static struct option builtin_commit_options[] = {
 	OPT_GROUP("Commit contents options"),
 	OPT_BOOLEAN('a', "all", &all, "commit all changed files"),
 	OPT_BOOLEAN('i', "include", &also, "add specified files to index for commit"),
+#ifndef NO_PERL
 	OPT_BOOLEAN(0, "interactive", &interactive, "interactively add files"),
+#endif
 	OPT_BOOLEAN('o', "only", &only, "commit only specified files"),
 	OPT_BOOLEAN('n', "no-verify", &no_verify, "bypass pre-commit hook"),
 	OPT_BOOLEAN(0, "amend", &amend, "amend previous commit"),
@@ -223,6 +225,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
 	struct string_list partial;
 	const char **pathspec = NULL;
 
+#ifndef NO_PERL
 	if (interactive) {
 		interactive_add(argc, argv, prefix);
 		if (read_cache_preload(NULL) < 0)
@@ -230,6 +233,7 @@ static char *prepare_index(int argc, const char **argv, const char *prefix)
 		commit_style = COMMIT_AS_IS;
 		return get_index_file();
 	}
+#endif
 
 	if (*argv)
 		pathspec = get_pathspec(prefix, argv);
diff --git a/t/lib-git-svn.sh b/t/lib-git-svn.sh
index 67c431d..83a5535 100644
--- a/t/lib-git-svn.sh
+++ b/t/lib-git-svn.sh
@@ -9,6 +9,12 @@ then
 	test_done
 	exit
 fi
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-svn tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 
 GIT_DIR=$PWD/.git
 GIT_SVN_DIR=$GIT_DIR/svn/git-svn
diff --git a/t/t5505-remote.sh b/t/t5505-remote.sh
index eb63718..e3bcf20 100755
--- a/t/t5505-remote.sh
+++ b/t/t5505-remote.sh
@@ -3,6 +3,12 @@
 test_description='git remote porcelain-ish'
 
 . ./test-lib.sh
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-cvsimport tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 
 setup_repository () {
 	mkdir "$1" && (
diff --git a/t/t7501-commit.sh b/t/t7501-commit.sh
index b4e2b4d..2e74ce5 100755
--- a/t/t7501-commit.sh
+++ b/t/t7501-commit.sh
@@ -38,7 +38,7 @@ test_expect_success \
 	"echo King of the bongo >file &&
 	test_must_fail git commit -m foo -a file"
 
-test_expect_success \
+[ -z "$NO_PERL" ] && test_expect_success \
 	"using paths with --interactive" \
 	"echo bong-o-bong >file &&
 	! (echo 7 | git commit -m foo --interactive file)"
@@ -119,7 +119,7 @@ test_expect_success \
 	"echo 'gak' >file && \
 	 git commit -m 'author' --author 'Rubber Duck <rduck@convoy.org>' -a"
 
-test_expect_success \
+[ -z "$NO_PERL" ] && test_expect_success \
 	"interactive add" \
 	"echo 7 | git commit --interactive | grep 'What now'"
 
diff --git a/t/t9001-send-email.sh b/t/t9001-send-email.sh
index cb3d183..1d5355d 100755
--- a/t/t9001-send-email.sh
+++ b/t/t9001-send-email.sh
@@ -2,6 +2,12 @@
 
 test_description='git send-email'
 . ./test-lib.sh
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-send-email tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 
 PROG='git send-email'
 test_expect_success \
diff --git a/t/t9200-git-cvsexportcommit.sh b/t/t9200-git-cvsexportcommit.sh
index 245a7c3..6cd779a 100755
--- a/t/t9200-git-cvsexportcommit.sh
+++ b/t/t9200-git-cvsexportcommit.sh
@@ -13,6 +13,12 @@ then
     test_done
     exit
 fi
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-cvsexportcommit tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 
 CVSROOT=$(pwd)/cvsroot
 CVSWORK=$(pwd)/cvswork
diff --git a/t/t9400-git-cvsserver-server.sh b/t/t9400-git-cvsserver-server.sh
index 6a37f71..84a0d31 100755
--- a/t/t9400-git-cvsserver-server.sh
+++ b/t/t9400-git-cvsserver-server.sh
@@ -17,6 +17,12 @@ then
     test_done
     exit
 fi
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-cvsserver tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 perl -e 'use DBI; use DBD::SQLite' >/dev/null 2>&1 || {
     test_expect_success 'skipping git-cvsserver tests, Perl SQLite interface unavailable' :
     test_done
diff --git a/t/t9500-gitweb-standalone-no-errors.sh b/t/t9500-gitweb-standalone-no-errors.sh
index 6ed10d0..d4580a4 100755
--- a/t/t9500-gitweb-standalone-no-errors.sh
+++ b/t/t9500-gitweb-standalone-no-errors.sh
@@ -72,6 +72,13 @@ safe_chmod () {
 }
 
 . ./test-lib.sh
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping gitweb-standalone-no-errors tests, NO_PERL defined' :
+	test_done
+	exit
+fi
+
 
 perl -MEncode -e 'decode_utf8("", Encode::FB_CROAK)' >/dev/null 2>&1 || {
     test_expect_success 'skipping gitweb tests, perl version is too old' :
diff --git a/t/t9600-cvsimport.sh b/t/t9600-cvsimport.sh
index d2379e7..75bf178 100755
--- a/t/t9600-cvsimport.sh
+++ b/t/t9600-cvsimport.sh
@@ -16,6 +16,12 @@ then
 	test_done
 	exit
 fi
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping git-cvsimport tests, NO_PERL defined' :
+	test_done
+	exit
+fi
 
 cvsps_version=`cvsps -h 2>&1 | sed -ne 's/cvsps version //p'`
 case "$cvsps_version" in
diff a/t/t3701-add-interactive.sh b/t/t3701-add-interactive.sh
--- a/t/t3701-add-interactive.sh	2009-04-02 14:26:45.000000000 -0700
+++ b/t/t3701-add-interactive.sh	2009-04-02 23:06:20.543358154 -0700
@@ -3,6 +3,13 @@
 test_description='add -i basic tests'
 . ./test-lib.sh
 
+if test -n "$NO_PERL"
+then
+	test_expect_success 'skipping add-interactive tests, NO_PERL defined' :
+	test_done
+	exit
+fi
+
 test_expect_success 'setup (initial)' '
 	echo content >file &&
 	git add file &&

[-- Attachment #2: Type: application/pgp-signature, Size: 330 bytes --]

             reply	other threads:[~2009-04-03  7:12 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-04-03  7:03 Robin H. Johnson [this message]
2009-04-03 13:20 ` [PATCH] NO_PERL support Jeff King
2009-04-03 14:51   ` Johannes Schindelin
2009-04-03 14:53     ` Jeff King
2009-04-03 15:02       ` Johannes Schindelin
2009-04-03 15:11         ` Miklos Vajna
2009-04-03 15:16         ` Jeff King
2009-04-03 17:54   ` Johannes Sixt
2009-04-03 18:37     ` Jeff King
2009-04-03 15:46 ` Jeff King
2009-04-03 15:59   ` Robin H. Johnson
2009-04-03 16:18     ` Jeff King
2009-04-03 16:25 ` Junio C Hamano
2009-04-03 17:15   ` Jeff King
2009-04-03 20:20     ` Junio C Hamano
2009-04-03 20:56       ` Jeff King
2009-04-03 19:27 ` [PATCH 0/4] " Jeff King
2009-04-03 19:28   ` [PATCH 1/4] commit: abort commit if interactive add failed Jeff King
2009-04-03 19:31   ` [PATCH 2/4] tests: remove exit after test_done call Jeff King
2009-04-03 19:32   ` [PATCH 3/4] Makefile: allow building without perl Jeff King
2009-04-04 22:47     ` Robin H. Johnson
2009-04-04 23:39       ` Jeff King
2009-04-04 23:51         ` Robin H. Johnson
2009-04-04 23:56           ` Jeff King
2009-04-05  0:06             ` Robin H. Johnson
2009-04-07  7:27               ` Jeff King
2009-04-03 19:33   ` [PATCH 4/4] tests: skip perl tests if NO_PERL is defined Jeff King
2009-04-04 23:30     ` Robin H. Johnson
2009-04-04 23:42       ` Jeff King
2009-04-07  7:31   ` [PATCH 0/4] NO_PERL support Jeff King

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: http://vger.kernel.org/majordomo-info.html

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090403T065545Z@curie.orbis-terrarum.net \
    --to=robbat2@gentoo.org \
    --cc=git@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).