Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/gawk -f
- function fixdepends(s, p,a,sout,n) {
- split(s,a,",")
- for (p in a) {
- sout = sout ",+" a[p]
- }
- sub(/^,/,"",sout) ; return sout;
- }
- function parse_pkg_name(s, txz_split,arch_build){
- match(s,/^([^\-]*)(\-.*)(\.([^\-]+))$/,txz_split)
- PKG=txz_split[1]
- split(txz_split[2],ver_arch_build,"-")
- PKGVER=ver_arch_build[2]
- len=length(ver_arch_build)
- if (len == 4){
- BUILD_NO=ver_arch_build[4]
- ARCH=ver_arch_build[3]
- }
- else if(len == 3){
- if (ver_arch_build[len-1] ~ /^[0-9]+$/){
- BUILD_NO=ver_arch_build[2]
- }
- else{
- ARCH=ver_arch_build[3]
- }
- }
- }
- function maybe_parse_dec(s, line_split){
- if( PARSE_DEC_FLAG == 1){
- match($0,/(\S+):\s+(.*)$/,line_split)
- if(length(line_split) > 0){
- if (line_split[1] == PKG){
- PKGINFO=substr(line_split[2],1,200)
- PARSE_DEC_FLAG=0
- }
- }
- }
- }
- function cat_fallback(s){
- if (length(s)>0){
- switch(s){
- case /vcs.*/:
- return "Utility;development"
- break
- case /doc.*/:
- return "Help"
- break
- case /admin.*/:
- return "Setup"
- break
- case /games.*/:
- return "Fun"
- break
- case /.{7,}/:
- return "science"
- break
- default:
- return "BuildingBlock"
- break
- }
- }
- else
- {
- return "BuildingBlock"
- }
- }
- function get_category(s1,v1,c1, out,s2,sc1,sc2){
- if ( s1 in pkg_categories){
- return pkg_categories[s1]
- }
- sc1=get_canonical_name(s1,v1)
- if (sc1 in pkg_categories_canonical){
- return pkg_categories_canonical[sc1]
- }
- s2=gensub(/^(.+[^0-9])([0-9]*)$/,"\\1","g",s1)
- if ( s2 in pkg_categories){
- return pkg_categories[s2]
- }
- sc2=get_canonical_name(s2,v1)
- if (sc2 in pkg_categories_canonical){
- return pkg_categories_canonica[sc2]
- }
- #TODO: consider also trying to look up category based on the full name.
- return cat_fallback(c1)
- }
- function parse_cats(s){
- i=index(s,"=")
- if (i>0){
- #catagory=( package1 package2 ... packageN)
- category=substr(s,0,i-1)
- sub(/PKGCAT_/,"",category) #e.g. category=PKGCAT_Utility => category=Utility
- sub(/_/,";",category) #e.g. category=Filesystem_filemanager => category=Filesystem;filemanager
- #e.g catagory=( package1 package2 ... packageN) => package1 package2 ... packageN
- s=gensub(/^([^=]+="\s*)([^\s].*[^\s])(\s*"\s*)$/,"\\2","g",s)
- split(s,pkg_names," ")
- for (pkg_i in pkg_names){
- pkg=pkg_names[pkg_i]
- pkg_categories[pkg]=category
- pkg_categories_canonical[pkg]=get_canonical_name(category)
- }
- }
- }
- function get_canonical_name(s,v){
- if (s in CANONICAL_ARY){
- return CANONICAL_ARY[s]
- } else {
- switch(s "-" v){
- case /gtk\+2.*/:
- return "gtk+"
- case /libdbus-glib.*/:
- return "dbus"
- case /libdbus.*/:
- return "dbus"
- case /dbus.*/:
- return "dbus"
- case /mesa-common.*/:
- return "mesa"
- case /libgl1-mesa.*/:
- return "mesa"
- case /mesa_.*/:
- return "mesa"
- case /samba_.*/:
- return "samba"
- case /libgudev.*/:
- return "udev"
- case /libudev.*/:
- return "udev"
- case /udev_.*/:
- return "udev"
- case /perlapi.*/:
- return "perl_tiny"
- }
- }
- return s
- }
- function init_CANONICAL_ARY(){
- CANONICAL_ARY["perl_tiny"]="perl_tiny"
- CANONICAL_ARY["perl-base"]="perl_tiny"
- CANONICAL_ARY["samba-tng"]="samba"
- CANONICAL_ARY["sane-backends"]="sane"
- CANONICAL_ARY["gtkdialog3"]="gtkdialog"
- CANONICAL_ARY["xdg_puppy"]="xdg_puppy"
- CANONICAL_ARY["mountcifs"]="samba"
- CANONICAL_ARY["mesa"]="mesa"
- CANONICAL_ARY["urxvt-unicode"]="rxvt-unicode"
- CANONICAL_ARY["gtkdialog"]="gtkdialog"
- CANONICAL_ARY["perl-modules"]="perl_tiny"
- CANONICAL_ARY["urxvt"]="rxvt-unicode"
- CANONICAL_ARY["rxvt-unicode"]="rxvt-unicode"
- CANONICAL_ARY["xdg-utils"]="xdg_puppy"
- CANONICAL_ARY["gtk+"]="gtk+"
- CANONICAL_ARY["samba"]="samba"
- CANONICAL_ARY["sane"]="sane"
- CANONICAL_ARY["udev"]="udev"
- }
- BEGIN { init_CANONICAL_ARY() #MAPS a PKG NAME to a canonical name
- }
- #FILENAME = ALIASFILE { }
- FILENAME==CATFILE {parse_cats($0)
- next} #https://www3.physnet.uni-hamburg.de/physnet/Tru64-Unix/HTML/APS32DTE/WKXXXXXX.HTM
- /^PACKAGE NAME:/ { sub(/^PACKAGE NAME:\s*/,""); PKGFILE=$0; parse_pkg_name($0); getline; }
- /^PACKAGE LOCATION:/ { sub(/^PACKAGE LOCATION:\s*/,""); sub(/^(.\/)?/,""); PKGPATH=$0; next; }
- /^PACKAGE SIZE \(uncompressed\):/ { sub(/^PACKAGE SIZE \(uncompressed\):\s*/,""); sub(/\s/,""); PKGSIZE=$0; next; }
- /^PACKAGE DESCRIPTION:/ { PARSE_DEC_FLAG=1; getline; next; }
- /^PACKAGE REQUIRED:/ { sub(/^PACKAGE REQUIRED:\s*/,""); PKGDEP=fixdepends($0); next; }
- {maybe_parse_dec($0)}
- /^$/ {
- if (length(PKG)>1){
- PKGSECTION=get_category(PKG,PKGVER,PKGSECTION)
- print PKG "_" PKGVER "|" PKG "|" PKGVER "|" BUILD_NO "|" PKGSECTION "|" PKGSIZE "|" PKGPATH "|" PKGFILE "|" PKGDEP "|" PKGINFO "|" PKGOS "|" PKGOSVER "|"
- };
- PKG=""; PKGVER=""; PKGSECTION=""; PKGSIZE=""; PKGFILE=""; PKGPATH=""; PKGDEP=""; PKGINFO=""; PKGPRIO=""; BUILD_NO=""; ARCH=""; PARSE_DEC_FLAG=0; }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement