Skip to content
  • Ævar Arnfjörð Bjarmason's avatar
    Makefile: replace perl/Makefile.PL with simple make rules · 20d2a30f
    Ævar Arnfjörð Bjarmason authored and Junio C Hamano's avatar Junio C Hamano committed
    Replace the perl/Makefile.PL and the fallback perl/Makefile used under
    NO_PERL_MAKEMAKER=NoThanks with a much simpler implementation heavily
    inspired by how the i18n infrastructure's build process works[1].
    
    The reason for having the Makefile.PL in the first place is that it
    was initially[2] building a perl C binding to interface with libgit,
    this functionality, that was removed[3] before Git.pm ever made it to
    the master branch.
    
    We've since since started maintaining a fallback perl/Makefile, as
    MakeMaker wouldn't work on some platforms[4]. That's just the tip of
    the iceberg. We have the PM.stamp hack in the top-level Makefile[5] to
    detect whether we need to regenerate the perl/perl.mak, which I fixed
    just recently to deal with issues like the perl version changing from
    under us[6].
    
    There is absolutely no reason for why this needs to be so complex
    anymore. All we're getting out of this elaborate Rube Goldberg machine
    was copying perl/* to perl/blib/* as we do a string-replacement on
    the *.pm files to hardcode @@LOCALEDIR@@ in the source, as well as
    pod2man-ing Git.pm & friends.
    
    So replace the whole thing with something that's pretty much a copy of
    how we generate po/build/**.mo from po/*.po, just with a small sed(1)
    command instead of msgfmt. As that's being done rename the files
    from *.pm to *.pmc just to indicate that they're generated (see
    "perldoc -f require").
    
    While I'm at it, change the fallback for Error.pm from being something
    where we'll ship our own Error.pm if one doesn't exist at build time
    to one where we just use a Git::Error wrapper that'll always prefer
    the system-wide Error.pm, only falling back to our own copy if it
    really doesn't exist at runtime. It's now shipped as
    Git::FromCPAN::Error, making it easy to add other modules to
    Git::FromCPAN::* in the future if that's needed.
    
    Functional changes:
    
     * This will not always install into perl's idea of its global
       "installsitelib". This only potentially matters for packagers that
       need to expose Git.pm for non-git use, and as explained in the
       INSTALL file there's a trivial workaround.
    
     * The scripts themselves will 'use lib' the target directory, but if
       INSTLIBDIR is set it overrides it. It doesn't have to be this way,
       it could be set in addition to INSTLIBDIR, but my reading of [7] is
       that this is the desired behavior.
    
     * We don't build man pages for all of the perl modules as we used to,
       only Git(3pm). As discussed on-list[8] that we were building
       installed manpages for purely internal APIs like Git::I18N or
       private-Error.pm was always a bug anyway, and all the Git::SVN::*
       ones say they're internal APIs.
    
       There are apparently external users of Git.pm, but I don't expect
       there to be any of the others.
    
       As a side-effect of these general changes the perl documentation
       now only installed by install-{doc,man}, not a mere "install" as
       before.
    
    1. 5e9637c6 ("i18n: add infrastructure for translating Git with
       gettext", 2011-11-18)
    
    2. b1edc53d ("Introduce Git.pm (v4)", 2006-06-24)
    
    3. 18b0fc1c ("Git.pm: Kill Git.xs for now", 2006-09-23)
    
    4. f848718a ("Make perl/ build procedure ActiveState friendly.",
       2006-12-04)
    
    5. ee9be067 ("perl: detect new files in MakeMaker builds",
       2012-07-27)
    
    6. c59c4939 ("perl: regenerate perl.mak if perl -V changes",
       2017-03-29)
    
    7. 0386dd37
    
     ("Makefile: add PERLLIB_EXTRA variable that adds to
       default perl path", 2013-11-15)
    
    8. 87bmjjv1pu.fsf@evledraar.booking.com ("Re: [PATCH] Makefile:
       replace perl/Makefile.PL with simple make rules"
    
    Signed-off-by: default avatarÆvar Arnfjörð Bjarmason <avarab@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    20d2a30f