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-req.pl < prev    next >
Perl Script  |  2006-11-29  |  4KB  |  212 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='--requires --rpmformat --keywords'
  10.  
  11. ulimit -c 0;
  12.  
  13.  
  14.  
  15.  
  16.  
  17. IGNORE_DEPS="@"
  18. BUILDROOT="/" 
  19.  
  20.  
  21.  
  22. # Loop over all args
  23.  
  24. while :
  25. do
  26.  
  27. # Break out if there are no more args
  28.     case $# in
  29.     0)
  30.         break
  31.         ;;
  32.     esac
  33.  
  34. # Get the first arg, and shuffle
  35.     option=$1
  36.     shift
  37.  
  38. # Make all options have two hyphens
  39.     orig_option=$option    # Save original for error messages
  40.     case $option in
  41.     --*) ;;
  42.     -*) option=-$option ;;
  43.     esac
  44.  
  45.  
  46.     case $option in
  47.     --buildroot)
  48.         BUILDROOT=$1
  49.         shift
  50.         ;;
  51.     --ignore_deps)
  52.         IGNORE_DEPS=$1
  53.         shift
  54.         ;;
  55.     --help)
  56.         echo $usage
  57.         exit 0
  58.         ;;
  59.     *)
  60.         echo "$0: Unrecognized option: \"$orig_option\"; use --help for usage." >&2
  61.         exit 1
  62.         ;;
  63.     esac
  64. done
  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.     /usr/local/lib/rpm/bash --rpm-requires $file;
  77. ;;
  78.  
  79. sh)
  80.     /usr/local/lib/rpm/bash --rpm-requires $file;
  81. ;;
  82.  
  83. perl)
  84.     perl.req $file;
  85. ;;
  86.  
  87. wish)
  88.     tcl.req $file;
  89. ;;
  90.  
  91. python)
  92.     python.req $file;
  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. # Shared libraries can depend on other shared libraries.
  105.  
  106. *lib*.so*)
  107.  
  108.     ldd $file 2>/dev/null | awk '/\=\>/ { print $1 }' \
  109.         | print_deps --identifier so;
  110.  
  111.     # keep this for backward compatibility till we have converted
  112.     # everything.
  113.  
  114.     ldd $file 2>/dev/null | awk '/\=\>/ { print $1 }';
  115.  
  116. ;;
  117.  
  118. # Java jar files are just a special kind of zip files.
  119. # Sun OS 5.5.1 does not understand zip archives, it calls them 'data'
  120. # Sun OS 5.6 has this line in /etc/magic
  121. # 0       string          PK\003\004      ZIP archive
  122.  
  123. *.jar)
  124.  
  125.     unzip -p $file |\
  126.     javadeps $javadeps_args -;
  127.  
  128. ;;
  129.  
  130. # there are enough jar files out there with zip extensions that we
  131. # need to have a separate entry
  132.  
  133. *.zip)
  134.  
  135.     unzip -p $file |\
  136.     javadeps $javadeps_args -;
  137.  
  138. ;;
  139.  
  140. # Java Class files
  141. # Sun OS 5.6 has this line in /etc/magic
  142. # 0       string          \312\376\272\276        java class file
  143.  
  144. *.class) 
  145.  
  146.     javadeps $javadeps_args $file;
  147.  
  148. ;;
  149.  
  150.  
  151. # Perl libraries are hard to detect.  Need to also Look for #!*perl
  152.  
  153. *.pl) 
  154.  
  155.     perl.req $file;
  156.  
  157. ;;
  158.  
  159. *.pm) 
  160.  
  161.     perl.req $file;
  162.  
  163. ;;
  164.  
  165.  
  166.  
  167. # tcl libraries are hard to detect.  Need to also Look for #!*wish #!*tclsh
  168.  
  169. *.tcl) 
  170.  
  171.     tcl.req $file;
  172.  
  173. ;;
  174.  
  175. # python libraries are hard to detect.  Need to also Look for #!*python
  176.  
  177. *.py) 
  178.  
  179.     python.req $file;
  180.  
  181. ;;
  182.  
  183. # Binary executables can have any filename so let file tell us which
  184. # ones are binary filenames. Assume that users do not name ELF binary
  185. # files with names like runme.java
  186.  
  187. # Dependencies for html documenets are a bit ill defined. Lets try
  188. # extracting the basename of all strings within "'s 
  189. # precise globbing is hard so I use egrep instead of the case statement.
  190.  
  191. *)
  192.  
  193.     /usr/ucb/file -L $file 2>/dev/null | grep executable | cut -d: -f1 |\
  194.  xargs ldd 2>/dev/null | awk '/\=\>/ { print $1 }' | xargs -n 1 basename;
  195.  
  196.     echo $file | egrep '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))$' | xargs cat | httprequires
  197.  
  198.  
  199.     # All files are candidates for being an executable.  Let the
  200.     # magic.req script figure out what should be considered
  201.     # execuables.
  202.  
  203.     magic.req $file
  204.  
  205. ;;
  206.  
  207.  
  208. esac
  209.  
  210. done | sort -u | egrep -v \'$IGNORE_DEPS\'
  211.  
  212.