Merge branch 'ab/simplify-perl-makefile'
The build procedure for perl/ part has been greatly simplified by weaning ourselves off of MakeMaker. * ab/simplify-perl-makefile: perl: treat PERLLIB_EXTRA as an extra path again perl: avoid *.pmc and fix Error.pm further Makefile: replace perl/Makefile.PL with simple make rules
This commit is contained in:
9
perl/.gitignore
vendored
9
perl/.gitignore
vendored
@ -1,8 +1 @@
|
||||
perl.mak
|
||||
perl.mak.old
|
||||
MYMETA.json
|
||||
MYMETA.yml
|
||||
blib
|
||||
blibdirs
|
||||
pm_to_blib
|
||||
PM.stamp
|
||||
/build/
|
||||
|
||||
@ -101,7 +101,7 @@ increase notwithstanding).
|
||||
|
||||
|
||||
use Carp qw(carp croak); # but croak is bad - throw instead
|
||||
use Error qw(:try);
|
||||
use Git::Error qw(:try);
|
||||
use Cwd qw(abs_path cwd);
|
||||
use IPC::Open2 qw(open2);
|
||||
use Fcntl qw(SEEK_SET SEEK_CUR);
|
||||
|
||||
46
perl/Git/Error.pm
Normal file
46
perl/Git/Error.pm
Normal file
@ -0,0 +1,46 @@
|
||||
package Git::Error;
|
||||
use 5.008;
|
||||
use strict;
|
||||
use warnings;
|
||||
|
||||
=head1 NAME
|
||||
|
||||
Git::Error - Wrapper for the L<Error> module, in case it's not installed
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Wraps the import function for the L<Error> module.
|
||||
|
||||
This module is only intended to be used for code shipping in the
|
||||
C<git.git> repository. Use it for anything else at your peril!
|
||||
|
||||
=cut
|
||||
|
||||
sub import {
|
||||
shift;
|
||||
my $caller = caller;
|
||||
|
||||
eval {
|
||||
require Error;
|
||||
1;
|
||||
} or do {
|
||||
my $error = $@ || "Zombie Error";
|
||||
|
||||
my $Git_Error_pm_path = $INC{"Git/Error.pm"} || die "BUG: Should have our own path from %INC!";
|
||||
|
||||
require File::Basename;
|
||||
my $Git_Error_pm_root = File::Basename::dirname($Git_Error_pm_path) || die "BUG: Can't figure out lib/Git dirname from '$Git_Error_pm_path'!";
|
||||
|
||||
require File::Spec;
|
||||
my $Git_pm_FromCPAN_root = File::Spec->catdir($Git_Error_pm_root, 'FromCPAN');
|
||||
die "BUG: '$Git_pm_FromCPAN_root' should be a directory!" unless -d $Git_pm_FromCPAN_root;
|
||||
|
||||
local @INC = ($Git_pm_FromCPAN_root, @INC);
|
||||
require Error;
|
||||
};
|
||||
|
||||
unshift @_, $caller;
|
||||
goto &Error::import;
|
||||
}
|
||||
|
||||
1;
|
||||
@ -18,7 +18,7 @@ our @EXPORT_OK = @EXPORT;
|
||||
|
||||
sub __bootstrap_locale_messages {
|
||||
our $TEXTDOMAIN = 'git';
|
||||
our $TEXTDOMAINDIR = $ENV{GIT_TEXTDOMAINDIR} || '++LOCALEDIR++';
|
||||
our $TEXTDOMAINDIR = $ENV{GIT_TEXTDOMAINDIR} || '@@LOCALEDIR@@';
|
||||
|
||||
require POSIX;
|
||||
POSIX->import(qw(setlocale));
|
||||
|
||||
@ -1,90 +0,0 @@
|
||||
#
|
||||
# Makefile for perl support modules and routine
|
||||
#
|
||||
makfile:=perl.mak
|
||||
modules =
|
||||
|
||||
PERL_PATH_SQ = $(subst ','\'',$(PERL_PATH))
|
||||
prefix_SQ = $(subst ','\'',$(prefix))
|
||||
localedir_SQ = $(subst ','\'',$(localedir))
|
||||
|
||||
ifndef V
|
||||
QUIET = @
|
||||
endif
|
||||
|
||||
all install instlibdir: $(makfile)
|
||||
$(QUIET)$(MAKE) -f $(makfile) $@
|
||||
|
||||
clean:
|
||||
$(QUIET)test -f $(makfile) && $(MAKE) -f $(makfile) $@ || exit 0
|
||||
$(RM) ppport.h
|
||||
$(RM) $(makfile)
|
||||
$(RM) $(makfile).old
|
||||
$(RM) PM.stamp
|
||||
|
||||
$(makfile): PM.stamp
|
||||
|
||||
ifdef NO_PERL_MAKEMAKER
|
||||
instdir_SQ = $(subst ','\'',$(prefix)/lib)
|
||||
|
||||
modules += Git
|
||||
modules += Git/I18N
|
||||
modules += Git/IndexInfo
|
||||
modules += Git/Packet
|
||||
modules += Git/SVN
|
||||
modules += Git/SVN/Memoize/YAML
|
||||
modules += Git/SVN/Fetcher
|
||||
modules += Git/SVN/Editor
|
||||
modules += Git/SVN/GlobSpec
|
||||
modules += Git/SVN/Log
|
||||
modules += Git/SVN/Migration
|
||||
modules += Git/SVN/Prompt
|
||||
modules += Git/SVN/Ra
|
||||
modules += Git/SVN/Utils
|
||||
|
||||
$(makfile): ../GIT-CFLAGS Makefile
|
||||
echo all: private-Error.pm Git.pm Git/I18N.pm > $@
|
||||
set -e; \
|
||||
for i in $(modules); \
|
||||
do \
|
||||
if test $$i = $${i%/*}; \
|
||||
then \
|
||||
subdir=; \
|
||||
else \
|
||||
subdir=/$${i%/*}; \
|
||||
fi; \
|
||||
echo ' $(RM) blib/lib/'$$i'.pm' >> $@; \
|
||||
echo ' mkdir -p blib/lib'$$subdir >> $@; \
|
||||
echo ' cp '$$i'.pm blib/lib/'$$i'.pm' >> $@; \
|
||||
done
|
||||
echo ' $(RM) blib/lib/Error.pm' >> $@
|
||||
'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
|
||||
echo ' cp private-Error.pm blib/lib/Error.pm' >> $@
|
||||
echo install: >> $@
|
||||
set -e; \
|
||||
for i in $(modules); \
|
||||
do \
|
||||
if test $$i = $${i%/*}; \
|
||||
then \
|
||||
subdir=; \
|
||||
else \
|
||||
subdir=/$${i%/*}; \
|
||||
fi; \
|
||||
echo ' $(RM) "$$(DESTDIR)$(instdir_SQ)/'$$i'.pm"' >> $@; \
|
||||
echo ' mkdir -p "$$(DESTDIR)$(instdir_SQ)'$$subdir'"' >> $@; \
|
||||
echo ' cp '$$i'.pm "$$(DESTDIR)$(instdir_SQ)/'$$i'.pm"' >> $@; \
|
||||
done
|
||||
echo ' $(RM) "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@
|
||||
'$(PERL_PATH_SQ)' -MError -e 'exit($$Error::VERSION < 0.15009)' || \
|
||||
echo ' cp private-Error.pm "$$(DESTDIR)$(instdir_SQ)/Error.pm"' >> $@
|
||||
echo instlibdir: >> $@
|
||||
echo ' echo $(instdir_SQ)' >> $@
|
||||
else
|
||||
$(makfile): Makefile.PL ../GIT-CFLAGS
|
||||
$(PERL_PATH) $< PREFIX='$(prefix_SQ)' INSTALL_BASE='' --localedir='$(localedir_SQ)'
|
||||
endif
|
||||
|
||||
# this is just added comfort for calling make directly in perl dir
|
||||
# (even though GIT-CFLAGS aren't used yet. If ever)
|
||||
../GIT-CFLAGS:
|
||||
$(MAKE) -C .. GIT-CFLAGS
|
||||
@ -1,62 +0,0 @@
|
||||
use strict;
|
||||
use warnings;
|
||||
use ExtUtils::MakeMaker;
|
||||
use Getopt::Long;
|
||||
use File::Find;
|
||||
|
||||
# Don't forget to update the perl/Makefile, too.
|
||||
# Don't forget to test with NO_PERL_MAKEMAKER=YesPlease
|
||||
|
||||
# Sanity: die at first unknown option
|
||||
Getopt::Long::Configure qw/ pass_through /;
|
||||
|
||||
my $localedir = '';
|
||||
GetOptions("localedir=s" => \$localedir);
|
||||
|
||||
sub MY::postamble {
|
||||
return <<'MAKE_FRAG';
|
||||
instlibdir:
|
||||
@echo '$(INSTALLSITELIB)'
|
||||
|
||||
ifneq (,$(DESTDIR))
|
||||
ifeq (0,$(shell expr '$(MM_VERSION)' '>' 6.10))
|
||||
$(error ExtUtils::MakeMaker version "$(MM_VERSION)" is older than 6.11 and so \
|
||||
is likely incompatible with the DESTDIR mechanism. Try setting \
|
||||
NO_PERL_MAKEMAKER=1 instead)
|
||||
endif
|
||||
endif
|
||||
|
||||
MAKE_FRAG
|
||||
}
|
||||
|
||||
# Find all the .pm files in "Git/" and Git.pm
|
||||
my %pm;
|
||||
find sub {
|
||||
return unless /\.pm$/;
|
||||
|
||||
# sometimes File::Find prepends a ./ Strip it.
|
||||
my $pm_path = $File::Find::name;
|
||||
$pm_path =~ s{^\./}{};
|
||||
|
||||
$pm{$pm_path} = '$(INST_LIBDIR)/'.$pm_path;
|
||||
}, "Git", "Git.pm";
|
||||
|
||||
|
||||
# We come with our own bundled Error.pm. It's not in the set of default
|
||||
# Perl modules so install it if it's not available on the system yet.
|
||||
if ( !eval { require Error } || $Error::VERSION < 0.15009) {
|
||||
$pm{'private-Error.pm'} = '$(INST_LIBDIR)/Error.pm';
|
||||
}
|
||||
|
||||
# redirect stdout, otherwise the message "Writing perl.mak for Git"
|
||||
# disrupts the output for the target 'instlibdir'
|
||||
open STDOUT, ">&STDERR";
|
||||
|
||||
WriteMakefile(
|
||||
NAME => 'Git',
|
||||
VERSION_FROM => 'Git.pm',
|
||||
PM => \%pm,
|
||||
PM_FILTER => qq[\$(PERL) -pe "s<\\Q++LOCALEDIR++\\E><$localedir>"],
|
||||
MAKEFILE => 'perl.mak',
|
||||
INSTALLSITEMAN3DIR => '$(SITEPREFIX)/share/man/man3'
|
||||
);
|
||||
Reference in New Issue
Block a user