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 / http.req < prev    next >
Text File  |  2006-11-29  |  4KB  |  166 lines

  1. #!/usr/bin/perl
  2.  
  3. # This file can find requirements of html and jhtml files (cgi, gif,
  4. # java dependencies).  It is a bit of a hack but it turns out to work
  5. # well.  We track only dependencies between Relative URLs, absolute
  6. # URL's are assumed to be extenernal to the RPM system.  We do not
  7. # parse the HTML but look through the set of strings (text surrounded
  8. # by quotes) for something which looks like a reference.  This avoids
  9. # writing a full HTML parsers and tends to work really well.  In this
  10. # manner we can track dependencies for: href, src, action and other
  11. # HTML tags which have not been invented yet.
  12.  
  13.  
  14. # The reference:
  15. #
  16. #    href="http://www.perl.org/images/arrow.gif"
  17. #
  18. # does not create a dependency but the reference
  19. #
  20. #    href="images/arrow.gif"
  21. #
  22. # will create a dependency.  
  23.  
  24. # Additionally this program will find the requirements for sun jhtml
  25. # (html with embedded java) since jhtml is deprecated so is this part
  26. # of the code.
  27.  
  28. # These references create dependencies:
  29.  
  30. #    <form action="signup.jhtml" method="POST">
  31. #
  32. #    <img src="images/spacer.gif" width=1>
  33. #
  34. #    <A HREF="signup.jhtml">
  35. #
  36. #    adWidget.writeAd(out, "login.html", "expired");
  37. #
  38. #    response.sendRedirect("http://"+request.getServerName()+"/mailcom/login.jhtml");
  39.  
  40.  
  41. # Notice how we look for strings WITH the proper ending. This is
  42. # because the java sometimes has really strange double quoting
  43. # conventions.  Look at how splitting out the strings in this
  44. # fragment would get you the wrong text.
  45.  
  46. #      <img src="`c.getImage("bhunterlogo.gif")`" width=217 >
  47.  
  48. # Ignore non relative references since these dependencies can not be
  49. # met. (ie, no package you install will ever provide
  50. # 'http://www.yahoo.com').
  51.  
  52. # I use basename since I have seen too many http references which
  53. # begin with '../' and I can not figure out where the document root
  54. # is for the webserver this would just kill the dependnecy tracking
  55. # mechanism.
  56.  
  57.  
  58.  
  59. use File::Basename;
  60.  
  61. # this is the pattern of extensions to call requirements
  62.  
  63. $DEPS_PAT = '\.((cgi)|(ps)|(pdf)|(png)|(jpg)|(gif)|(tiff)|(tif)|(xbm)|(html)|(htm)|(shtml)|(jhtml))'; #'
  64.  
  65. if ("@ARGV") {
  66.   foreach (@ARGV) {
  67.     process_file($_);
  68.   }
  69. } else {
  70.   
  71.   # notice we are passed a list of filenames NOT as common in unix the
  72.   # contents of the file.
  73.   
  74.   foreach (<>) {
  75.     process_file($_);
  76.   }
  77. }
  78.  
  79.  
  80.  
  81. foreach $key (sort keys %seen) {
  82.   print "$key\n";
  83. }
  84.  
  85.  
  86. sub process_file {
  87.  
  88.   my ($file) = @_;
  89.   chomp $file;
  90.   
  91.   open(FILE, "<$file")||
  92.     die("$0: Could not open file: '$file' : $!\n");
  93.   
  94.   # we have to suck in the whole file at once because too many people
  95.   # split lines around <java></java> tags.
  96.   
  97.   my (@file) = <FILE>;
  98.   
  99.   $_= "@file";
  100.  
  101.   # ignore line based comments ( careful although it has two slashes
  102.   # 'http://www.yahoo.com' is not a comment! )
  103.  
  104.   s!^\s*//.*$!!mg;
  105.   s!//\s.*$!!mg;
  106.   s!\s//.*$!!mg;
  107.   
  108.   # ignore multi-line comments 
  109.   # (use non greedy operators)
  110.   
  111.   s!/\*.*?\*/!!g;
  112.   s/<!--.*?-->//g;
  113.  
  114.   # Ignore non relative references since these dependencies can not be
  115.   # met. (ie, no package you install will ever provide
  116.   # 'http://www.yahoo.com').
  117.  
  118.   # I use basename since I have seen too many http references which
  119.   # begin with '../' and I can not figure out where the document root
  120.   # is for the webserver this would just kill the dependnecy tracking
  121.   # mechanism.
  122.  
  123.  
  124.   # Notice how we look for strings WITH the proper ending. This is
  125.   # because the java sometimes has really strange double quoting
  126.   # conventions.  Look at how splitting out the strings in this
  127.   # fragment would get you the wrong text.
  128.  
  129.   #      <img src="`c.getImage("bhunterlogo.gif")`" width=217 >
  130.  
  131.   while ( m{\"([^\"]+$DEPS_PAT)\"}g ) {
  132.     my $string = $1;
  133.     chomp $string;
  134.     if ( $string !~ m!http://! ) {
  135.       $string = basename($string);
  136.       $string =~ s!\s+!!g;
  137.       $seen{"http(${string})"} = 1;
  138.     }
  139.   }
  140.  
  141.   {
  142.  
  143.   # This section is only for use with (Sun) jhtml dependencies, and
  144.   # since jhtml is deprecated so is this code.
  145.  
  146.   # java imports in jhtml (may have stars for leaf class)
  147.   # these may span several lines
  148.   
  149.     while (  m!<java type=((import)|(extends))>\s*([^<]+)\s*<!g ) {
  150.       my $java_list = $4;
  151.       $java_list =~ s/;/ /g;
  152.       $java_list =~ s/\n+/ /g;
  153.       $java_list =~ s/\s+/ /g;
  154.       foreach $java_class ( split(/\s+/, $java_list) ) {
  155.     $seen{"java(${java_class})"} = 1;
  156.       }
  157.     }
  158.     
  159.   }
  160.  
  161.   close(FILE)||
  162.     die("$0: Could not close file: '$file' : $!\n");
  163.   
  164.   return ;
  165. }
  166.