summaryrefslogtreecommitdiffstats
path: root/metas/perl.d
diff options
context:
space:
mode:
Diffstat (limited to 'metas/perl.d')
-rwxr-xr-xmetas/perl.d/perl-dist26
-rwxr-xr-xmetas/perl.d/perl-dist-funcs101
-rwxr-xr-xmetas/perl.d/perl-pkgbuild122
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);