#!/usr/bin/awk -f BEGIN { fieldstr = "pkgname _ver pkgver pkgrel pkgdesc epoch" \ " *arch *license *options" \ " install changelog" \ " *depends *makedepends *checkdepends *optdepends" \ " *conflicts *provides" \ " 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 if(sub(/^_/, "", fields[i])){ cfield[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 == "customvars" { for(i = 2; i <= NF; i++){ customvars[i - 1] = $i } customlen = NF - 1 } { quotevals() if(($1 in strfield) || ($1 in cfield)){ output[$1] = $2 }else { arrtxt = wraparray(length($1) + 2) if(arrfield[$1]){ output[$1] = arrtxt }else{ unk[$1] = arrtxt } } } 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 <= customlen; i++){ v = customvars[i] print "_" v, unk[v] } for(i=1; i<=max; i++){ name = fields[i] if(!(name in output)){ continue } if(name in cfield){ print "_" name, output[name] }else{ 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 ~ /[$'"`]/){ gsub(/[$"`]/, "\\\\&", $2) return sprintf("\"%s\"", val) } if(val ~ / /) return sprintf("'%s'", val) return val }