I wrote: > Hi Jonathan, > > Jonathan Nieder wrote: >> Todd Zullinger wrote: > [...] >>> +++ b/Makefile >>> @@ -296,6 +296,9 @@ all:: >>> # >>> # Define NO_PERL if you do not want Perl scripts or libraries at all. >>> # >>> +# Define NO_PERL_CPAN_FALLBACKS if you do not want to install fallbacks for >>> +# perl CPAN modules. >> >> nit: Looking at this as a naive user, it's not obvious what kind of >> fallbacks are meant. How about: >> >> Define NO_PERL_CPAN_FALLBACKS if you do not want to install bundled >> copies of CPAN modules that serve as a fallback in case the modules are >> not available on the system. >> >> Or perhaps: >> >> Define HAVE_CPAN_MODULES if you have Error.pm and Mail::Address installed >> and do not want to install the fallback copies from perl/FromCPAN. > > Hmm, a positive variable like HAVE_CPAN_MODULES is > appealing. > > I don't know about listing the modules, as those seem likely > to change and then the comment becomes stale. It's nice to > have a shorter name. I could easily go back and forth. > Hopefully some other folks will chime in with preferences. > >> Would this patch need to update the loader to expect the modules in >> the new location? > > That's a good catch. In checking how this ends up when not > setting NO_PERL_CPAN_FALLBACKS, we end up installing > FromCPAN at the root of $perllibdir rather than under the > Git dir. > > While we could probably fix Git::LoadCPAN, I doubt we want > to pollute the namespace. ;) So we'll want to ensure the > files get put in the right place from the start. I'll try > to fix that up. I ended up adding a second variable to hold the FromCPAN wildcard match, as I couldn't come up with any clean way to do it in the same LIB_PERL{,_GEN} vars. I tested it with and without NO_PERL_CPAN_FALLBACKS set and with and without the system Error and Mail::Address modules installed. There's nothing which automatically removes the perl/build/lib/Git/FromCPAN tree if make was run without NO_PERL_CPAN_FALLBACKS set and then re-run with it. I don't know if that's something we'd care to support or not. I suspect it's simpler to require 'make clean' between such runs. (I had to restore the FromCPAN copy of Address.pm, as noted in <87tvuif10e.fsf@xxxxxxxxxxxxxxxxxxx>, of course.) Here's what it looks like now (still subject to changing the NO_PERL_CPAN_FALLBACKS variable). ---- 8> ---- From: Todd Zullinger <tmz@xxxxxxxxx> Subject: [PATCH] Makefile: add NO_PERL_CPAN_FALLBACKS knob We include some perl modules which are not part of the core perl install, as a convenience. This allows us to rely on those modules in our perl-based tools and scripts without requiring users to install the modules from CPAN or their operating system packages. Users whose operating system provides these modules and packagers of Git often don't want to ship or use these bundled modules. Allow these users to set NO_PERL_CPAN_FALLBACKS to avoid installing the bundled modules. Signed-off-by: Todd Zullinger <tmz@xxxxxxxxx> --- Makefile | 14 ++++++++++++++ perl/{Git => }/FromCPAN/.gitattributes | 0 perl/{Git => }/FromCPAN/Error.pm | 0 perl/{Git => }/FromCPAN/Mail/.gitattributes | 0 perl/{Git => }/FromCPAN/Mail/Address.pm | 0 5 files changed, 14 insertions(+) rename perl/{Git => }/FromCPAN/.gitattributes (100%) rename perl/{Git => }/FromCPAN/Error.pm (100%) rename perl/{Git => }/FromCPAN/Mail/.gitattributes (100%) rename perl/{Git => }/FromCPAN/Mail/Address.pm (100%) diff --git a/Makefile b/Makefile index bdd50069af..49244fb116 100644 --- a/Makefile +++ b/Makefile @@ -296,6 +296,10 @@ all:: # # Define NO_PERL if you do not want Perl scripts or libraries at all. # +# Define NO_PERL_CPAN_FALLBACKS if you do not want to install bundled +# copies of CPAN modules that serve as a fallback in case the modules are +# not available on the system. +# # Define PYTHON_PATH to the path of your Python binary (often /usr/bin/python # but /usr/bin/python2.7 on some platforms). # @@ -2300,15 +2304,25 @@ po/build/locale/%/LC_MESSAGES/git.mo: po/%.po LIB_PERL := $(wildcard perl/Git.pm perl/Git/*.pm perl/Git/*/*.pm perl/Git/*/*/*.pm) LIB_PERL_GEN := $(patsubst perl/%.pm,perl/build/lib/%.pm,$(LIB_PERL)) +ifndef NO_PERL_CPAN_FALLBACKS +LIB_CPAN := $(wildcard perl/FromCPAN/*.pm perl/FromCPAN/*/*.pm) +LIB_CPAN_GEN := $(patsubst perl/%.pm,perl/build/lib/Git/%.pm,$(LIB_CPAN)) +endif ifndef NO_PERL all:: $(LIB_PERL_GEN) +ifndef NO_PERL_CPAN_FALLBACKS +all:: $(LIB_CPAN_GEN) +endif endif perl/build/lib/%.pm: perl/%.pm $(QUIET_GEN)mkdir -p $(dir $@) && \ sed -e 's|@@LOCALEDIR@@|$(localedir_SQ)|g' < $< > $@ +perl/build/lib/Git/FromCPAN/%.pm: perl/FromCPAN/%.pm + $(QUIET_GEN)mkdir -p $(dir $@) && cp $< $@ + perl/build/man/man3/Git.3pm: perl/Git.pm $(QUIET_GEN)mkdir -p $(dir $@) && \ pod2man $< $@ diff --git a/perl/Git/FromCPAN/.gitattributes b/perl/FromCPAN/.gitattributes similarity index 100% rename from perl/Git/FromCPAN/.gitattributes rename to perl/FromCPAN/.gitattributes diff --git a/perl/Git/FromCPAN/Error.pm b/perl/FromCPAN/Error.pm similarity index 100% rename from perl/Git/FromCPAN/Error.pm rename to perl/FromCPAN/Error.pm diff --git a/perl/Git/FromCPAN/Mail/.gitattributes b/perl/FromCPAN/Mail/.gitattributes similarity index 100% rename from perl/Git/FromCPAN/Mail/.gitattributes rename to perl/FromCPAN/Mail/.gitattributes diff --git a/perl/Git/FromCPAN/Mail/Address.pm b/perl/FromCPAN/Mail/Address.pm similarity index 100% rename from perl/Git/FromCPAN/Mail/Address.pm rename to perl/FromCPAN/Mail/Address.pm -- 2.16.2 I thought about using '$(INSTALL) -m 644' instead of 'cp' to allow users to set 'INSTALL = install -p' to preserve the timestamp of the FromCPAN files, but that would only be useful to users installing from the same tarball version multiple times. The intersection of users who care that much about consistent timestamps and don't care about using system perl modules seems small. -- Todd ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A person who smiles in the face of adversity ... probably has a scapegoat.