From aeeb51372863bd95b5126691c16851d52082ac92 Mon Sep 17 00:00:00 2001 From: Justin Davis Date: Sun, 13 May 2012 20:40:10 -0400 Subject: Add feature to replace ver-strings with $pkgver. Alot of logic was added to allow changing versions in mods while still preserving the version in the $_ver custom variable. --- bin/genpkg | 22 ++++++++++++++++++++-- bin/pbfields | 51 +++++++++++++++++++++++++++++--------------------- preps/perl.d/perl-dist | 3 +-- setup | 3 ++- 4 files changed, 53 insertions(+), 26 deletions(-) diff --git a/bin/genpkg b/bin/genpkg index b3fa6c8..470cd5f 100755 --- a/bin/genpkg +++ b/bin/genpkg @@ -58,6 +58,18 @@ END { exit !found } return $? } +# Create an extra "ver" field in case the packager needs to modify +# the version. +dupver() +{ + awk ' +BEGIN { OFS = FS = "\n"; RS = ""; ORS = "\n\n" } +$1 == "pkgver" { pkgver = $2 } +1 +END { print "ver", pkgver } +' +} + if [ $# -lt 1 ] then echo "usage: $prog [package name]" 1>&2 @@ -98,20 +110,26 @@ do rm PKGDATA exit "$?" fi + trap '' 1 2 15 mod="$modsd/$pkg" if [ -f "$mod" -a -r "$mod" ] then - if modpkg "$mod" + trap 'rm PKGDATA.new' 1 2 15 + if cat PKGDATA | dupver | modpkg "$mod" > PKGDATA.new then echo "Modified with $mod." 1>&2 + mv PKGDATA.new PKGDATA else echo "$prog: modpkg failed." 1>&2 + [ "$GENPKGDBG" ] || rm PKGDATA.new fi + trap '' 1 2 15 fi # Insert PKGBUILD fields into prefix of PKGBUILD body. - cat PKGDATA | injectdigs | pbfields | putpkgtree PKGBUILD prefix body || exit "$?" + cat PKGDATA | vervar | injectdigs | pbfields |\ + putpkgtree PKGBUILD prefix body || exit "$?" # Merge split PKGTREE files into their own separate text files. mergefile PKGBUILD prefix build check package suffix diff --git a/bin/pbfields b/bin/pbfields index 5bbf9c6..ca65c2a 100755 --- a/bin/pbfields +++ b/bin/pbfields @@ -1,16 +1,22 @@ #!/usr/bin/awk -f BEGIN { - fieldstr = "pkgname pkgver pkgrel pkgdesc epoch" \ + fieldstr = "pkgname _ver pkgver pkgrel pkgdesc epoch" \ " *arch *license *options" \ " install changelog" \ " *depends *makedepends *checkdepends *optdepends" \ " *conflicts *provides" \ - " url *source *noextract *md5sums *sha512sums" + " url *source *noextract *md5sums *sha512sums" \ + " _dir" max = split(fieldstr, fields) for(i=1; i<=max; i++) { - if(sub(/^[*]/, "", fields[i])) arrfield[fields[i]] = 1; - else strfield[fields[i]] = 1; + if(sub(/^[*]/, "", fields[i])){ + arrfield[fields[i]] = 1 + }else if(sub(/^_/, "", fields[i])){ + cfield[fields[i]] = 1 + }else{ + strfield[fields[i]] = 1 + } } COLS = 78; FS = "\n"; RS = "" @@ -22,15 +28,6 @@ $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 } - $1 == "customvars" { for(i = 2; i <= NF; i++){ customvars[i - 1] = $i @@ -39,7 +36,8 @@ $1 == "customvars" { } { - if(strfield[$1]){ + quotevals() + if(($1 in strfield) || ($1 in cfield)){ output[$1] = $2 }else { arrtxt = wraparray(length($1) + 2) @@ -62,16 +60,22 @@ END { print "" OFS = "="; ORS = "\n"; + for(i = 1; i <= customlen; i++){ + v = customvars[i] + print "_" v, unk[v] + } for(i=1; i<=max; i++){ name = fields[i] - if(name in output){ + if(!(name in output)){ + continue + } + + if(name in cfield){ + print "_" name, output[name] + }else{ print name, output[name] } } - for(i = 1; i <= customlen; i++){ - v = customvars[i] - print "_" v, unk[v] - } } function wraparray (indent) @@ -112,6 +116,11 @@ function quotevals () function bashquote (val) { - if(val ~ /[$]/) return sprintf("\"%s\"", val) - return sprintf("'%s'", val) + + if(val ~ /[$'"`]/){ + gsub(/[$"`]/, "\\\\&", $2) + return sprintf("\"%s\"", val) + } + if(val ~ / /) return sprintf("'%s'", val) + return val } diff --git a/preps/perl.d/perl-dist b/preps/perl.d/perl-dist index 67616cd..05269f3 100755 --- a/preps/perl.d/perl-dist +++ b/preps/perl.d/perl-dist @@ -430,8 +430,7 @@ sub main 'pkgver' => $ver, 'pkgdesc' => $meta->{'abstract'}, 'arch' => (xsdist($distdir) ? ['i686', 'x86_64'] : 'any'), - 'distdir' => qq{"\$srcdir/$distdir"}, - 'customvars' => 'distdir', + 'dir' => "\$srcdir/$distdir", %$deps, ); diff --git a/setup b/setup index 8630ee1..76eb68d 100755 --- a/setup +++ b/setup @@ -3,7 +3,8 @@ set -e umask 022 prog=setup -binfiles='genpkg prepkg modpkg pbfields putpkgtree getpkgtree injectdigs' +binfiles='genpkg prepkg modpkg pbfields putpkgtree getpkgtree + injectdigs vervar' preps='perl perl.d/ perl.d/fetchcpan perl.d/perl-dist perl.d/perl-pkgbuild perl.d/scrapecore' -- cgit v1.2.3-24-g4f1b