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 / find-prov.pl < prev    next >
Perl Script  |  2006-11-29  |  4KB  |  224 lines

  1. #!/bin/sh
  2.  
  3. # This script reads filenames from STDIN and outputs any relevant provides
  4. # information that needs to be included in the package.
  5.  
  6. PATH=/usr/bin:/usr/ccs/bin:/usr/sbin:/sbin:/usr/local/bin;
  7. export PATH;
  8.  
  9. javadeps_args='--provides --rpmformat --keywords --starprov'
  10.  
  11.  
  12. IGNORE_DEPS="@"
  13. BUILDROOT="/"
  14.  
  15.  
  16.  
  17. # Loop over all args
  18.  
  19. while :
  20. do
  21.  
  22. # Break out if there are no more args
  23.     case $# in
  24.     0)
  25.         break
  26.         ;;
  27.     esac
  28.  
  29. # Get the first arg, and shuffle
  30.     option=$1
  31.     shift
  32.  
  33. # Make all options have two hyphens
  34.     orig_option=$option    # Save original for error messages
  35.     case $option in
  36.     --*) ;;
  37.     -*) option=-$option ;;
  38.     esac
  39.  
  40.  
  41.     case $option in
  42.     --buildroot)
  43.         BUILDROOT=$1
  44.         shift
  45.         ;;
  46.     --ignore_deps)
  47.         IGNORE_DEPS=$1
  48.         shift
  49.         ;;
  50.     --help)
  51.         echo $usage
  52.         exit 0
  53.         ;;
  54.     *)
  55.         echo "$0: Unrecognized option: \"$orig_option\"; use --help for usage." >&2
  56.         exit 1
  57.         ;;
  58.     esac
  59. done
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67. for file in `cat -`
  68. do
  69.  
  70. # this section is for processing based on the interpreter specified in
  71. # the '#!' line.
  72.  
  73. case `get_magic $file` in 
  74.  
  75. bash)
  76.     print_deps --identifier executable $file
  77.     print_deps --identifier executable --basename $file
  78. ;;
  79.  
  80. sh)
  81.     print_deps --identifier executable $file
  82.     print_deps --identifier executable --basename $file
  83. ;;
  84.  
  85. perl)
  86.     perl.prov $file;
  87. ;;
  88.  
  89. wish)
  90.     print_deps --identifier tcl $file
  91.     print_deps --identifier tcl --basename $file
  92. ;;
  93.  
  94.  
  95. esac
  96.  
  97.  
  98. # this section is for processing based on filename matching.  It is
  99. # crude but needed as many library types have no easily identifiable
  100. # '#!' line
  101.  
  102. case $file in 
  103.  
  104. # We can not count on finding a SONAME in third party Libraries though
  105. # they tend to include softlinks with the correct SONMAE name.  We
  106. # must assume anything with a *\.so* and is of type 'dynamic lib' is a
  107. # library.  This scriptlet works because 'file' follows soft links.
  108.  
  109.  
  110. *lib*.so*)
  111.     /usr/ucb/file -L $file 2>/dev/null | \
  112.     grep "ELF.*dynamic lib" | cut -d: -f1 | \
  113.         xargs -n 1 basename | print_deps --identifier so;
  114.  
  115.     # keep this for backward compatibility till we have converted
  116.     # everything.
  117.  
  118.     /usr/ucb/file -L $file 2>/dev/null | \
  119.     grep "ELF.*dynamic lib" | cut -d: -f1 | \
  120.         xargs -n 1 basename;
  121. ;;
  122.  
  123. # Java jar files are just a special kind of zip files.
  124. # Sun OS 5.5.1 does not understand zip archives, it calls them 'data'
  125. # Sun OS 5.6 has this line in /etc/magic
  126. # 0       string          PK\003\004      ZIP archive
  127.  
  128. *.jar)
  129.  
  130.     unzip -p $file |\
  131.     javadeps $javadeps_args -;
  132.  
  133. ;;
  134.  
  135. # there are enough jar files out there with zip extensions that we
  136. # need to have a separate entry
  137.  
  138. *.zip)
  139.  
  140.     unzip -p $file |\
  141.     javadeps $javadeps_args -;
  142.  
  143. ;;
  144.  
  145. # Java Class files
  146. # Sun OS 5.6 has this line in /etc/magic
  147. # 0       string          \312\376\272\276        java class file
  148.  
  149. *.class) 
  150.  
  151.     javadeps $javadeps_args $file;
  152.  
  153. ;;
  154.  
  155.  
  156.  
  157. # Perl libraries are hard to detect.  Use file endings.
  158.  
  159. *.pl) 
  160.  
  161.     perl.prov $file;
  162.  
  163.     # pl files are often required using the .pl extension
  164.     # so provide that name as well
  165.  
  166.     print_deps --identifier perl --basename $file
  167. ;;
  168.  
  169. *.pm) 
  170.  
  171.     perl.prov $file;
  172. ;;
  173.  
  174. *.ph)
  175.  
  176.     # ph files do not use the package name inside the file.
  177.     # perlmodlib  documentation says:
  178.  
  179.     #       the .ph files made by h2ph will probably end up as
  180.     #       extension modules made by h2xs.
  181.  
  182.     # so do not expend much effort on these.
  183.  
  184.     print_deps --identifier perl --basename $file
  185.  
  186. ;;
  187.  
  188. # tcl libraries are hard to detect.  Use file endings.
  189.  
  190. *.tcl) 
  191.  
  192.     print_deps --identifier tcl $file
  193.     print_deps --identifier tcl --basename $file
  194. ;;
  195.  
  196.  
  197.  
  198. *)
  199.  
  200.     # Dependencies for html documenets are a bit ill defined. Lets try
  201.     # using file endings like the browsers do.
  202.     # precise globbing is hard so I use egrep instead of the case statement.
  203.  
  204. hfile=`basename $file | egrep '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))$'`;
  205.  
  206.     if [ "${hfile}" != "" ]
  207.     then
  208.     print_deps --identifier http --basename $file
  209.     fi
  210.  
  211.     # all files are candidates for being an executable.  Let the
  212.     # magic.prov script figure out what should be considered
  213.     # execuables.
  214.  
  215.     magic.prov  --buildroot=$BUILDROOT $file
  216.  
  217. ;;
  218.  
  219.  
  220. esac
  221.  
  222. done | sort -u | egrep -v \'$IGNORE_DEPS\'
  223.  
  224.