Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/gawk -f
- function fixdepends(s, p,a,sout) {
- 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){
- 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
- }
- }
- function get_category(s1, out,s2,sc1,sc2){
- if ( s1 in pkg_categories){
- return pkg_categories[s1]
- }
- sc1=get_canonical_name(s1)
- 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)
- if (sc2 in pkg_categories_canonical){
- return pkg_categories_canonica[sc2]
- }
- #TODO: consider also trying to look up category based on the full name.
- }
- function parse_cats(s){
- i=index(s,"=")
- if (i>0){
- #catagory=( package1 package2 ... packageN)
- category=substr(s,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
- gensub(/^([^=]+="\s)(.*)(\s*"\s*)$/,"\\2","g",s)
- split(s,pkg_names" ")
- for (pkg in pkg_names){
- pkg_categories[pkg]=category
- pkg_categories_canonical=get_canonical_name(category)
- }
- }
- }function get_canonical_name(s){
- if (s in CANONICAL_ARY){
- return CANONICAL_ARY[s]
- } else {
- switch(s){
- 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 { }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement