diff options
Diffstat (limited to 'templ')
-rwxr-xr-x | templ/pbfields | 99 | ||||
-rwxr-xr-x | templ/perl-pkg | 121 |
2 files changed, 220 insertions, 0 deletions
diff --git a/templ/pbfields b/templ/pbfields new file mode 100755 index 0000000..5e7844c --- /dev/null +++ b/templ/pbfields @@ -0,0 +1,99 @@ +#!/usr/bin/awk -f + +BEGIN { + fieldstr = "pkgname pkgver pkgrel pkgdesc epoch" \ + " *arch *license *options" \ + " install changelog" \ + " *depends *makedepends *checkdepends *optdepends" \ + " *conflicts *provides" \ + " url *source *noextract *md5sums *sha512sums" + max = split(fieldstr, fields) + for(i=1; i<=max; i++) { + if(sub(/^[*]/, "", fields[i])) arrfield[fields[i]] = 1; + else strfield[fields[i]] = 1; + } + + COLS = 78; FS = "\n"; RS = "" +} + +NF < 2 { next } + +$1 == "packager" { packager = $2 } + +$1 == "maintainer" { maintainer = $2 } + +$1 ~ /depends$|conflicts|provides|source/ { quotevals() } + +$1 == "pkgdesc" { + gsub(/[$"`]/, "\\\\&", $2) + $2 = sprintf("\"%s\"", $2) +} + +$1 == "pkgverfmt" { pkgverfmt = $2 } + +strfield[$1] { output[$1] = $2 } + +arrfield[$1] { + output[$1] = wraparray(length($1) + 2) +} + +END { + if(pkgverfmt){ + output["pkgver"] = sprintf(pkgverfmt, output["pkgver"]) + } + + if(!maintainer && !packager) { packager = "Anonymous" } + if(maintainer) print "# Maintainer: " maintainer + else if(packager) print "# Packager: " packager + print "" + + OFS = "="; ORS = "\n"; + for(i=1; i<=max; i++){ + name = fields[i] + if(name in output){ + print name, output[name] + } + } +} + +function wraparray (indent) +{ + if(NF == 1) return "()" # this shouldn't happen but just in case. + + line = "" + delete lines + linecount = 0 + + i = 2 + while(i <= NF) { + linelen = length(line) + + if((indent + linelen + 1 + length($i) > COLS) && linelen > 0) { + lines[++linecount] = line + line = "" + } else { + if(linelen == 0) line = $(i++) + else line = line " " $(i++) + } + } + + if(length(line) > 0) lines[++linecount] = line + + indtxt = sprintf("%" indent "s", "") + txt = "(" lines[1] + for(i=2; i<=linecount; i++) txt = txt "\n" indtxt lines[i] + txt = txt ")" + + return txt +} + +function quotevals () +{ + for(i=2; i<=NF; i++) $i = bashquote($i) +} + +function bashquote (val) +{ + if(val ~ /[$]/) return sprintf("\"%s\"", val) + return sprintf("'%s'", val) +} diff --git a/templ/perl-pkg b/templ/perl-pkg new file mode 100755 index 0000000..47cc682 --- /dev/null +++ b/templ/perl-pkg @@ -0,0 +1,121 @@ +#!/usr/bin/env perl + +use warnings 'FATAL' => 'all'; +use strict; + +my %ACTIONS_OF = + ('MM', { + 'build' => [ q{/usr/bin/perl Makefile.PL}, q{make} ], + 'check' => [ q{make test} ], + 'package' => [ q{make DESTDIR="$pkgdir" install} ] + }, + 'MB', { + 'build' => [ q{/usr/bin/perl Build.PL}, q{./Build} ], + 'check' => [ q{./Build test} ], + 'package' => [ q{./Build install} ] + }); + +my %FUNCFMTS; +$FUNCFMTS{'build'} = <<'END_FMT'; +build() +( + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" \ + PERL_AUTOINSTALL=--skipdeps \ + PERL_MM_OPT="INSTALLDIRS=vendor DESTDIR='$pkgdir'" \ + PERL_MB_OPT="--installdirs vendor --destdir '$pkgdir'" \ + MODULEBUILDRC=/dev/null + + cd "$_distdir" +%s +) +END_FMT + +$FUNCFMTS{'check'} = <<'END_FMT'; +check() +( + export PERL_MM_USE_DEFAULT=1 PERL5LIB="" + cd "$_distdir" +%s +) +END_FMT + +$FUNCFMTS{'package'} = <<'END_FMT'; +package() { + cd "$_distdir" +%s + find "$pkgdir" -name .packlist -o -name perllocal.pod -delete +} +END_FMT + +my $PBEND = <<'END_END'; +# Local Variables: +# mode: shell-script +# sh-basic-offset: 2 +# End: +# vim:set ts=2 sw=2 et: +END_END + +# Convert actions array into lines of bash to insert into template. +sub bashify +{ + my (@lines) = @_; + my $txt = join qq{\n}, map { s/^/ /gm; $_ } @lines; + return $txt +} + +sub mungevars +{ + my ($vars) = @_; + $vars->{'options'} = [ '!emptydirs' ]; + + # Replace version string in 'source' entry & 'distdir' with + # $pkgver parameter. + for my $v (qw/pkgver distdir/) { + die "$0: $v is undefined" unless defined $vars->{$v}[0]; + } + my $ver = $vars->{'pkgver'}[0]; + s/\Q$ver\E/\${pkgver}/g for ($vars->{'source'}[0], $vars->{'distdir'}[0]); + + return; +} + +sub printpb +{ + my ($btype, $pbvars) = @_; + my $acts = $ACTIONS_OF{$btype} + or die "$0: unknown build type ($btype)\n"; + + my $distdir = $pbvars->{'distdir'}[0]; + print qq{_distdir="\${srcdir}/$distdir"\n}; + print "\n"; + + for my $func (qw/build check package/) { + my $funclines = $acts->{$func}; + printf $FUNCFMTS{$func}, bashify(@$funclines); + print "\n"; + } + print $PBEND; +} + +sub readvars +{ + local $/ = ""; # split records on empty lines + my (%pbvars); + while (<STDIN>) { + my ($name, @vals) = split /\n/; + $pbvars{$name} = [ @vals ]; + } + return \%pbvars; +} + +sub main +{ + my ($type) = @_; + my $vars = readvars(); + mungevars($vars); + printpb($type, $vars); + return 0; +} + +my $type = shift or die qq{$0: please provide "MM" or "MB" as argument\n}; +exit main($type); |