diff options
-rwxr-xr-x | bin/templ/pbfields | 68 | ||||
-rwxr-xr-x | bin/templ/perl-pkg | 76 |
2 files changed, 90 insertions, 54 deletions
diff --git a/bin/templ/pbfields b/bin/templ/pbfields new file mode 100755 index 0000000..8597910 --- /dev/null +++ b/bin/templ/pbfields @@ -0,0 +1,68 @@ +#!/usr/bin/awk -f + +BEGIN { + fieldstr = "pkgname pkgver pkgrel pkgdesc epoch " \ + "*arch *license *options " \ + "install changelog " \ + "*depends *makedepends *checkdepends *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 = ""; OFS = "="; ORS = "\n"; +} + +$1 ~ /depends$|conflicts|provides/ { + for (i=2; i<=NF; i++) $i = sprintf("'%s'", $i) +} + +$1 == "pkgdesc" { gsub(/[$"`]/, "\\&", $2) } + +strfield[$1] { output[$1] = $2 } + +arrfield[$1] { + output[$1] = wraparray(length($1) + 2) +} + +END { + 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 +}
\ No newline at end of file diff --git a/bin/templ/perl-pkg b/bin/templ/perl-pkg index e2cfbdf..82a5537 100755 --- a/bin/templ/perl-pkg +++ b/bin/templ/perl-pkg @@ -17,25 +17,8 @@ my %ACTIONS_OF = ('MM', } ); my $PBBEG = <<'END_BEG'; -# Maintainer : {: packager :} -# Generator : pbjam {: pbjver :} - -pkgname={: pkgname :} -pkgver={: pkgver :} -pkgrel={: pkgrel :} -pkgdesc={: pkgdesc :} -arch=({: arch :}) -license=(PerlArtistic GPL) -options=('!emptydirs') -depends=({: depends :}) -makedepends=({: makedepends :}) -checkdepends=({: checkdepends :}) -conflicts=({: conflicts :}) -url={: url :} -source=({: source :}) -md5sums=({: md5sums :}) -sha512sums=({: sha512sums :}) -_distdir="${srcdir}/{: distdir :}" +# Maintainer : %s +# Generator : pbjam %s END_BEG my %FUNCFMTS; @@ -78,39 +61,10 @@ my $PBEND = <<'END_END'; # vim:set ts=2 sw=2 et: END_END -# Expands one variable into its bash string representation. -sub expandvar -{ - my ($pbvars, $name) = @_; - - my $val = $pbvars->{$1}; - if ($name eq 'pkgdesc') { - $val->[0] =~ s/([\$\"\`])/\\$1/g; - return qq{"$val->[0]"}; - } - elsif ($name =~ /conflicts|depends$/) { - my @deps = map { qq{'$_'} } @$val; - return wrap(q{}, q{ } x (length($name) + 2), @deps); - } - return ($val ? join q{ }, @$val : q{}); -} - -# Expand variables used in the template text. -sub expandvars -{ - my ($tmpl, $pbvars) = @_; - - my $txt = $tmpl; - $txt =~ s/ {: \s* (\w+) \s* :} /expandvar($pbvars, $1)/gex; - return $txt; -} - # Convert actions array into lines of bash to insert into template. sub bashify { my (@lines) = @_; -# use Data::Dump qw(dump); -# print STDERR dump($lines), "\n"; my $txt = join qq{\n}, map { s/^/ /gm; $_ } @lines; return $txt } @@ -121,9 +75,24 @@ sub printpb my $acts = $ACTIONS_OF{$btype} or die "$0: unknown build type ($btype)\n"; - print expandvars($PBBEG, $pbvars), "\n"; + my $pkger = $pbvars->{'packager'}[0] || 'Anonymous'; + printf $PBBEG, $pkger, $pbvars->{'pbjver'}[0]; + print "\n"; + + # 'pbfields' will recognize and PKGBUILD fields in the data + # and print them out in order, wordwrapping arrays. + open my $pbfields, '|pbfields' or die "failed to pipe to pbfields: $!"; + while (my ($name, $vals) = each %$pbvars) { + print $pbfields $name, "\n"; + print $pbfields $_, "\n" for @$vals; + print $pbfields "\n"; + } + close $pbfields; + print "\n"; + for my $func (qw/build check package/) { - printf $FUNCFMTS{$func}, bashify(@{$acts->{$func}}); + my $funclines = $acts->{$func}; + printf $FUNCFMTS{$func}, bashify(@$funclines); print "\n"; } print $PBEND; @@ -131,17 +100,16 @@ sub printpb sub readvars { - my %pbvars; - my $name; local $/ = ""; # split records on empty lines + my (%pbvars); while (<STDIN>) { my ($name, @vals) = split /\n/; - $pbvars{$name} = \@vals; + $pbvars{$name} = [ @vals ]; } - return \%pbvars; } my $type = shift or die qq{$0: please provide "MM" or "MB" as argument\n}; + my $vars = readvars(); printpb($type, $vars); |