home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / boot / i386 / rescue / usr / lib / rpm / convertrpmrc.sh < prev    next >
Linux/UNIX/POSIX Shell Script  |  2006-11-29  |  3KB  |  107 lines

  1. #!/bin/sh
  2. #
  3. # Convert per-system configuration in /etc/rpmrc to macros in /etc/rpm/macros.
  4. #
  5. # prereq: awk fileutils textutils sh-utils mktemp
  6. #
  7.  
  8. RPMRC=$1
  9. [ -z "$RPMRC" ] && RPMRC=/etc/rpmrc
  10. MACROS=$2
  11. [ -z "$MACROS" ] && MACROS=/etc/rpm/macros
  12. # for testing
  13. #RPMRC=/tmp/rpmrc
  14. #MACROS=/tmp/macros
  15.  
  16. [ -f $RPMRC ] || exit 0
  17.  
  18. [ -f $MACROS ] && {
  19.   echo "$MACROS already exists" 1>&2
  20.   exit 1
  21. }
  22.  
  23. DIRN="`dirname $MACROS`"
  24. [ -d "$DIRN" ] || mkdir -p "$DIRN"
  25. [ -d "$DIRN" ] || {
  26.   echo "could not create directory $DIRN" 1>&2
  27.   exit 1
  28. }
  29.  
  30. TMP=$(mktemp /tmp/rpmrc.XXXXXX) || {
  31.   echo could not create temp file 1>&2
  32.   exit 1
  33. }
  34.  
  35. awk 'BEGIN {
  36.   macros="'"$MACROS"'"
  37.   # direct translation except underscore prepended
  38.   xlate["builddir"] = "_builddir"
  39.   xlate["buildshell"] = "_buildshell"
  40.   xlate["bzip2bin"] = "_bzip2bin"
  41.   xlate["dbpath"] = "_dbpath"
  42.   xlate["defaultdocdir"] = "_defaultdocdir"
  43.   xlate["excludedocs"] = "_excludedocs"
  44.   xlate["ftpport"] = "_ftpport"
  45.   xlate["ftpproxy"] = "_ftpproxy"
  46.   xlate["gzipbin"] = "_gzipbin"
  47.   xlate["instchangelog"] = "_instchangelog"
  48.   xlate["langpatt"] = "_langpatt"
  49.   xlate["netsharedpath"] = "_netsharedpath"
  50.   xlate["pgp_name"] = "_pgp_name"
  51.   xlate["pgp_path"] = "_pgp_path"
  52.   xlate["rpmdir"] = "_rpmdir"
  53.   xlate["rpmfilename"] = "_rpmfilename"
  54.   xlate["signature"] = "_signature"
  55.   xlate["sourcedir"] = "_sourcedir"
  56.   xlate["specdir"] = "_specdir"
  57.   xlate["srcrpmdir"] = "_srcrpmdir"
  58.   xlate["timecheck"] = "_timecheck"
  59.   xlate["tmppath"] = "_tmppath"
  60.   xlate["topdir"] = "_topdir"
  61.  
  62.   # direct translation with no underscore at all
  63.   xlate["buildroot"] = "buildroot"
  64.   xlate["distribution"] = "distribution"
  65.   xlate["packager"] = "packager"
  66.   xlate["vendor"] = "vendor"
  67.  
  68.   # simply remove
  69.   xlate["messagelevel"] = ""
  70.   xlate["require_distribution"] = ""
  71.   xlate["require_icon"] = ""
  72.   xlate["require_vendor"] = ""
  73. }
  74.  
  75. {
  76.   for (str in xlate) {
  77.     ms = "^" str ":"
  78.     if (match($1, ms)) {
  79.       if (xlate[str]) {
  80.         sub(ms, "%" xlate[str] " ")
  81.         print >> macros
  82.       }
  83.       # else get ignore and thus get rid of obsolete items
  84.       next
  85.     }
  86.     if (match ($1, "^fixperms:")) {
  87.       sub("^fixperms:", "%_fixperms chmod -R ")
  88.       print >> macros
  89.       next
  90.     }
  91.   }
  92.   print
  93.   next
  94. }
  95. ' < $RPMRC > $TMP || {
  96.   echo "could not convert $RPMRC entries to $MACROS entries" 1>&2
  97.   exit 1
  98. }
  99. if [ -s $TMP ] ; then
  100.   # don't mess with timestamp unless we have actually changed something
  101.   cat $TMP > $RPMRC && rm -f $TMP
  102.   [ -f $TMP ] && { echo "could not overwrite $RPMRC" 1>&2 ; exit 1 ; }
  103. fi
  104. rm -f $TMP
  105.  
  106. exit 0
  107.