home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 April / Chip_2004-04_cd1.bin / opsys / macos / safari / safari.dmg / Safari_1.2.pkg / Contents / Resources / VolumeCheck < prev   
Encoding:
Text File  |  2004-01-22  |  2.7 KB  |  126 lines

  1. #!/usr/bin/perl
  2.  
  3. ########################################################
  4. my $SYSTEM_VERS     = $ARGV[0] . "/System/Library/CoreServices/SystemVersion.plist";
  5. my $BOOTSYSTEM_VERS    = "/System/Library/CoreServices/SystemVersion.plist";
  6. my $EXIT_VALUE         = 0;
  7. ########################################################
  8.  
  9. DO_CHECKS: 
  10. {
  11.     # Must have Mac OS X on target volume.
  12.     if (! -e $SYSTEM_VERS) {
  13.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 16);
  14.             last;
  15.     }
  16.  
  17.     # 10.3.0 or better on target disk, please.
  18.     if (CheckVersion($SYSTEM_VERS, "10.3", "ProductVersion", "<")) {
  19.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 16);
  20.             last;
  21.     }
  22.     
  23.     # Less than 10.3.4 may only install on boot drive. 
  24.     if (CheckVersion($BOOTSYSTEM_VERS, "10.3.4", "ProductVersion", "<") && ($ARGV[0] ne "/") ) {
  25.         $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 18);
  26.         last;
  27.     }
  28.  
  29.     # Less than 10.3.9 on target disk, please.
  30.     if (CheckVersion($SYSTEM_VERS, "10.3.9", "ProductVersion", ">")) {
  31.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 17);
  32.             last;
  33.     }
  34.     
  35.     
  36.     
  37.  
  38. }
  39.  
  40. exit($EXIT_VALUE);
  41.  
  42.  
  43. ########################################################
  44. ########################################################
  45.  
  46. sub CheckVersion
  47. {
  48.     my $path            = $_[0];
  49.     my $version         = $_[1];
  50.     my $keyName         = $_[2];
  51.     my $operator        = $_[3];
  52.     
  53.     my $oldSeperator;
  54.     my $plistData;
  55.     my @items;
  56.     my $item;
  57.     my $versiondata;
  58.     my $i;
  59.     my @theVersionArray;
  60.     my %versiondata;
  61.     my @versionArray;
  62.  
  63.     # if there's no THERE there, we return FALSE
  64.     if (! -e $path) {
  65.         return 0;
  66.     }
  67.  
  68.     if (!$operator) {
  69.         $operator = "==";
  70.     }
  71.  
  72.     $oldSeperator = $/;
  73.     $/ = \0;
  74.  
  75.     open( PLIST, "$path") || do {
  76.         return 0;
  77.     };
  78.  
  79.     $plistData = <PLIST>;
  80.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  81.  
  82.     @items = split(/<key>/, $plistData);
  83.  
  84.     shift @items;
  85.     foreach $item (@items) {
  86.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  87.         $versiondata{ $1 } = $2;
  88.     }
  89.  
  90.     close(PLIST);
  91.  
  92.     $/ = $oldSeperator;
  93.  
  94.     @theVersionArray = split(/\./, $versiondata{$keyName});
  95.     for ($i = 0; $i < 3; $i++) {
  96.         if(!$theVersionArray[$i]) {
  97.             $theVersionArray[$i] = '0';
  98.         }
  99.     }
  100.  
  101.     @versionArray = split(/\./, $version);
  102.     
  103.     my $actualVersion;
  104.  
  105.     for ($i = 0; $i < 3; $i++) {
  106.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  107.  
  108.             $actualVersion = $theVersionArray[$i];
  109.             $version = $versionArray[$i];
  110.  
  111.             last;
  112.         }
  113.     }
  114.  
  115.     my $expression = '$actualVersion ' . $operator . ' $version';
  116.     if( eval ($expression) )
  117.     {
  118.         return 1;
  119.     }
  120.     else
  121.     {
  122.         return 0;
  123.     }
  124.  
  125. }
  126.