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 Updated-by: Bernd Lommerzheim 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] [--] ...", 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 ' -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 &&