Advertisement
s243a

AWK_gen_prg

Dec 14th, 2019
3,284
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Awk 4.90 KB | None | 0 0
  1. #!/bin/gawk -f
  2. function fixdepends(s,   p,a,sout) {
  3.     split(s,a,",")
  4.     for (p in a) {
  5.         sout = sout ",+" a[p]
  6.     }
  7.     sub(/^,/,"",sout) ; return sout;
  8. }
  9. function parse_pkg_name(s,        txz_split,arch_build){
  10.     match(s,/^([^\-]*)(\-.*)(\.([^\-]+))$/,txz_split)
  11.  
  12.     PKG=txz_split[1]
  13.     split(txz_split[2],ver_arch_build,"-") 
  14.     PKGVER=ver_arch_build[2]
  15.  
  16.     len=length(ver_arch_build)
  17.     if (len == 4){
  18.         BUILD_NO=ver_arch_build[4]
  19.         ARCH=ver_arch_build[3]
  20.     }
  21.     else if(len == 3){
  22.       if (ver_arch_build[len-1] ~ /^[0-9]+$/){
  23.         BUILD_NO=ver_arch_build[2]
  24.        }
  25.        else{
  26.            ARCH=ver_arch_build[3]
  27.       }
  28.     }  
  29.    
  30. }
  31. function maybe_parse_dec(s,        line_split){
  32.   if( PARSE_DEC_FLAG == 1){
  33.     match($0,/(\S+):\s+(.*)$/,line_split)
  34.     if(length(line_split) > 0){
  35.       if (line_split[1] == PKG){
  36.         PKGINFO=substr(line_split[2],1,200)
  37.         PARSE_DEC_FLAG=0
  38.       }
  39.     }
  40.   }
  41. }function cat_fallback(s){
  42.     switch(s){
  43.         case /vcs.*/:
  44.           return "Utility;development"
  45.           break
  46.         case /doc.*/:
  47.           return "Help"
  48.           break
  49.         case /admin.*/:
  50.           return "Setup"
  51.           break
  52.         case /games.*/:
  53.           return "Fun"
  54.           break
  55.         case /.{7,}/:
  56.           return "science"
  57.           break
  58.        default:
  59.           return "BuildingBlock"
  60.           break
  61.  
  62.     }
  63. }
  64. function get_category(s1,     out,s2,sc1,sc2){
  65.   if ( s1 in pkg_categories){
  66.     return pkg_categories[s1]
  67.   }
  68.   sc1=get_canonical_name(s1)
  69.   if (sc1 in pkg_categories_canonical){
  70.       return pkg_categories_canonical[sc1]
  71.   }
  72.   s2=gensub(/^(.+[^0-9])([0-9]*)$/,"\\1","g",s1)
  73.   if ( s2 in pkg_categories){
  74.     return pkg_categories[s2]
  75.   }
  76.   sc2=get_canonical_name(s2)
  77.   if (sc2 in pkg_categories_canonical){
  78.       return pkg_categories_canonica[sc2]
  79.   }  
  80.   #TODO: consider also trying to look up category based on the full name.
  81. }
  82. function parse_cats(s){
  83.   i=index(s,"=")
  84.   if (i>0){
  85.     #catagory=( package1 package2 ... packageN)  
  86.     category=substr(s,i-1)
  87.     sub(/PKGCAT_/,"",category) #e.g. category=PKGCAT_Utility => category=Utility
  88.     sub(/_/,";",category) #e.g. category=Filesystem_filemanager => category=Filesystem;filemanager
  89.    
  90.     #e.g catagory=( package1 package2 ... packageN) => package1 package2 ... packageN
  91.     gensub(/^([^=]+="\s)(.*)(\s*"\s*)$/,"\\2","g",s)
  92.    
  93.     split(s,pkg_names" ")
  94.     for (pkg in pkg_names){
  95.       pkg_categories[pkg]=category
  96.       pkg_categories_canonical=get_canonical_name(category)
  97.     }  
  98.   }
  99. }function get_canonical_name(s){                  
  100.   if (s in CANONICAL_ARY){                      
  101.    return CANONICAL_ARY[s]                      
  102.   } else {                                      
  103.     switch(s){                                  
  104.       case /gtk\+2.*/:                              
  105.         return "gtk+"                      
  106.       case /libdbus-glib.*/:                              
  107.         return "dbus"                      
  108.       case /libdbus.*/:                              
  109.         return "dbus"                      
  110.       case /dbus.*/:                              
  111.         return "dbus"                      
  112.       case /mesa-common.*/:                              
  113.         return "mesa"                      
  114.       case /libgl1-mesa.*/:                              
  115.         return "mesa"                      
  116.       case /mesa_.*/:                              
  117.         return "mesa"                      
  118.       case /samba_.*/:                              
  119.         return "samba"                      
  120.       case /libgudev.*/:                              
  121.         return "udev"                      
  122.       case /libudev.*/:                              
  123.         return "udev"                      
  124.       case /udev_.*/:                              
  125.         return "udev"                      
  126.       case /perlapi.*/:                              
  127.         return "perl_tiny"                      
  128.     }                                            
  129.   }                                              
  130.   return s                                      
  131. }                                                
  132. function init_CANONICAL_ARY(){                            
  133.   CANONICAL_ARY["perl_tiny"]="perl_tiny"
  134.   CANONICAL_ARY["perl-base"]="perl_tiny"
  135.   CANONICAL_ARY["samba-tng"]="samba"
  136.   CANONICAL_ARY["sane-backends"]="sane"
  137.   CANONICAL_ARY["gtkdialog3"]="gtkdialog"
  138.   CANONICAL_ARY["xdg_puppy"]="xdg_puppy"
  139.   CANONICAL_ARY["mountcifs"]="samba"
  140.   CANONICAL_ARY["mesa"]="mesa"
  141.   CANONICAL_ARY["urxvt-unicode"]="rxvt-unicode"
  142.   CANONICAL_ARY["gtkdialog"]="gtkdialog"
  143.   CANONICAL_ARY["perl-modules"]="perl_tiny"
  144.   CANONICAL_ARY["urxvt"]="rxvt-unicode"
  145.   CANONICAL_ARY["rxvt-unicode"]="rxvt-unicode"
  146.   CANONICAL_ARY["xdg-utils"]="xdg_puppy"
  147.   CANONICAL_ARY["gtk+"]="gtk+"
  148.   CANONICAL_ARY["samba"]="samba"
  149.   CANONICAL_ARY["sane"]="sane"
  150.   CANONICAL_ARY["udev"]="udev"
  151. }BEGIN { init_CANONICAL_ARY() #MAPS a PKG NAME to a canonical name
  152.       }
  153. #FILENAME = ALIASFILE { }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement