home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 August / Chip_2003-08_cd1.bin / zkuste / macos / Files / Safari.dmg / Safari.pkg / Contents / Resources / VolumeCheck < prev   
Text File  |  2003-06-13  |  3KB  |  124 lines

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