diff options
Diffstat (limited to 'metas/perl.d')
-rwxr-xr-x | metas/perl.d/perl-dist | 26 | ||||
-rwxr-xr-x | metas/perl.d/perl-dist-funcs | 101 | ||||
-rwxr-xr-x | metas/perl.d/perl-pkgbuild | 122 |
3 files changed, 138 insertions, 111 deletions
diff --git a/metas/perl.d/perl-dist b/metas/perl.d/perl-dist index 99d187b..69f9317 100755 --- a/metas/perl.d/perl-dist +++ b/metas/perl.d/perl-dist @@ -4,7 +4,7 @@ use warnings 'FATAL' => 'all'; use strict; my $PROG = 'metas/perl.d/perl-dist'; -my $FUNCPROG = 'perl-dist-funcs'; +my $PBPROG = 'perl-pkgbuild'; sub DBG {} if(exists $ENV{'GENDBG'}){ @@ -381,12 +381,15 @@ sub printdata return; } -sub printfuncs +sub writepb { my($ddir) = @_; my $dtype = (-f "$ddir/Build.PL" ? "MB" : "MM"); - exec $FUNCPROG => $dtype - or die "$PROG: $FUNCPROG failed to execute!\n"; + if(system $PBPROG => $dtype){ + return $? >> 8; + }else{ + return 0; + } } sub main @@ -419,16 +422,19 @@ sub main %$deps, ); - print STDERR "DBG: \$dir = $dir\n"; chdir $dir or die "chdir: $!"; - close STDOUT or die "close STDOUT: $!"; + my $ret = writepb($dir); + if($ret){ + print STDERR "$PROG: failed to write PKGBUILD: error $ret\n"; + return 1; + } + + close STDOUT; open STDOUT, '>', 'PKGDATA' or die "open PKGDATA: $!"; printdata(\%pbvars); - - close STDOUT or die "close STDOUT: $!"; - open STDOUT, '>', 'PKGFUNC', or die "open PKGFUNC: $!"; - exit printfuncs($dir); + close STDOUT or die "close PKGDATA: $!"; + return 0; } # Create the src/ directory and tarball symlink. Then chdir into it. diff --git a/metas/perl.d/perl-dist-funcs b/metas/perl.d/perl-dist-funcs deleted file mode 100755 index cc9ba19..0000000 --- a/metas/perl.d/perl-dist-funcs +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env perl - -use warnings 'FATAL' => 'all'; -use strict; - -my $PROG = 'perl-dist-funcs'; - -my %BODYFOR = - ('MM', { - 'build' => [ - q{/usr/bin/perl Makefile.PL } - . q{DESTDIR="$pkgdir" INSTALLDIRS=vendor}, - q{make}, - ], - 'check' => [ q{make test} ], - 'package' => [ q{make install} ], - }, - 'MB', { - 'build' => [ - q{/usr/bin/perl Build.PL } - . q{--destdir "$pkgdir" --installdirs vendor}, - q{./Build}, - ], - 'check' => [ q{./Build test} ], - 'package' => [ q{./Build install} ], - }); - -my %FUNC; -$FUNC{'build'}{'intro'} = <<'END_INTRO'; -cd "$_distdir" -PERL_MM_USE_DEFAULT=1 PERL_AUTOINSTALL=--skipdeps MODULEBUILDRC=/dev/null -export PERL_MM_USE_DEFAULT PERL_AUTOINSTALL MODULEBUILDRC -unset PERL_MM_OPT PERL_MB_OPT PERL5LIB -END_INTRO - -$FUNC{'check'}{'intro'} = <<'END_INTRO'; -cd "$_distdir" -PERL_MM_USE_DEFAULT=1 -export PERL_MM_USE_DEFAULT -unset PERL_MM_OPT PERL_MB_OPT PERL5LIB -END_INTRO - -$FUNC{'package'}{'intro'} = <<'END_INTRO'; -cd "$_distdir" -unset PERL_MM_OPT PERL_MB_OPT PERL5LIB -END_INTRO - -$FUNC{'package'}{'end'} = <<'END_END'; -find "$pkgdir" -name .packlist -o -name perllocal.pod -delete -END_END - -my $PBEND = <<'END_END'; -# Local Variables: -# mode: shell-script -# sh-basic-offset: 2 -# End: -# vim:set ts=2 sw=2 et: -END_END - -sub printfunc -{ - my($name, $func) = @_; - print "BEGNODE $name\n"; - for my $sect (qw/intro body end/){ - if(exists $func->{$sect}){ - my $txt = $func->{$sect}; - $txt .= "\n" unless($txt =~ /\n\z/); - print "BEGNODE $sect\n", $txt, "ENDNODE $sect\n"; - } - } - print "ENDNODE $name\n"; - return; -} - -sub printfuncs -{ - my($btype) = @_; - my $acts = $BODYFOR{$btype} or die "$PROG: unknown build type: $btype"; - - print "BEGNODE PKGBUILD\n", "BEGNODE body\n"; - for my $f (keys %FUNC){ - $FUNC{$f}{'body'} = join q{}, map { "$_\n" } @{$acts->{$f}}; - printfunc($f, $FUNC{$f}); - } - print "ENDNODE body\n"; - print "BEGNODE end\n", $PBEND, "ENDNODE end\n"; - print "ENDNODE PKGBUILD\n"; - return; -} - -sub main -{ - if(@_ == 0 || ($_[0] ne 'MM' && $_[0] ne 'MB')){ - print STDERR qq{usage: $PROG ["MM" or "MB"] > PKGFUNCS\n}; - return 1; - } - printfuncs(shift); - return 0; -} - -exit main(@ARGV); diff --git a/metas/perl.d/perl-pkgbuild b/metas/perl.d/perl-pkgbuild new file mode 100755 index 0000000..667ec3d --- /dev/null +++ b/metas/perl.d/perl-pkgbuild @@ -0,0 +1,122 @@ +#!/usr/bin/env perl + +use warnings 'FATAL' => 'all'; +use strict; + +my $PROG = 'perl-pkgbuild'; + +sub putpkgbuild +{ + my($sect, $subsect, $text) = @_; + open my $pipe, '|-', 'putpkgtree' => 'PKGBUILD', $sect, $subsect + or die "open putpkgtree: $!"; + print $pipe $text; + close $pipe or exit $? >> 8; +} + +sub putfuncs +{ + my($funcs) = @_; + for my $f (keys %$funcs){ + my $sects = $funcs->{$f}; + while(my ($s, $txt) = each %$sects){ + putpkgbuild($f, $s, $txt); + } + } +} + +sub startfunc +{ + my($name) = @_; + return <<"ENDTXT"; +${name}() +( + cd "\$_distdir" +ENDTXT +} + +sub functxt +{ + my $fmt = shift; + $fmt .= "\n" unless($fmt =~ /\n\z/); + my $txt = sprintf $fmt, @_; + $txt =~ s/^/ /gm; + return $txt; +} + +sub main +{ + if(@_ == 0 || ($_[0] ne 'MM' && $_[0] ne 'MB')){ + print STDERR qq{usage: $PROG ["MM" or "MB"]\n}; + return 1; + } + + my $type = shift; + my($script, $make, $iargs); + my @badenv = qw/PERL5LIB/; + my @exports = qw/PERL_MM_USE_DEFAULT=1/; + if($type eq 'MM'){ + $script = 'Makefile.PL'; + $make = 'make'; + $iargs = q{INSTALLDIRS=vendor DESTDIR="$pkgdir"}; + push @exports, 'PERL_AUTOINSTALL=--skipdeps'; + push @badenv, 'PERL_MM_OPT'; + }else{ + $script = 'Build.PL'; + $make = './Build'; + $iargs = q{installdirs=vendor destdir="$pkgdir"}; + push @badenv, 'PERL_MB_OPT', 'MODULEBUILDRC=/dev/null'; + } + + my %funcs; + my @fnames = qw/build check package/; + for my $f (@fnames){ + $funcs{$f}{'beg'} = startfunc($f); + # Module::Build uses env vars for each stage of Build + if($type eq 'MB'){ + $funcs{$f}{'beg'} = <<"ENDTXT"; +export @exports +unset @badenv +ENDTXT + } + } + + # ExtUtils::MakeMaker only uses env vars for Makefile.PL + if($type eq 'MM'){ + $funcs{'build'}{'beg'} .= functxt(<<'ENDTXT', "@exports", "@badenv"); +export %s +unset %s +ENDTXT + } + + $funcs{'build'}{'body'} = functxt(<<'ENDTXT', $script, $make); + . functxt(<<'ENDTXT', ); + +/usr/bin/perl %s +%s +ENDTXT + + $funcs{'check'}{'body'} = functxt("%s test", $make); + + $funcs{'package'}{'body'} = functxt(<<'ENDTXT', $make, $iargs); +%s install %s +find "$pkgdir" -name .packlist -o -name perllocal.pod -delete +ENDTXT + + for my $f (@fnames){ + $funcs{$f}{'end'} = ")\n"; + } + putfuncs(\%funcs); + + putpkgbuild('suffix', 'body', <<'ENDTXT'); +# Local Variables: +# mode: shell-script +# sh-basic-offset: 2 +# End: +# vim:set ts=2 sw=2 et: +ENDTXT + + return 0; +} + +exit main(@ARGV); |