home *** CD-ROM | disk | FTP | other *** search
/ Mean Girls Press Kit / Mean Girls Press Kit.iso / mac / QuickTimeInstaller / OSX / QuickTime.pkg / Contents / Resources / InstallationCheck < prev    next >
Encoding:
Text File  |  2003-11-17  |  3.4 KB  |  178 lines

  1. #!/usr/bin/perl
  2.  
  3. my $SYSTEM_VERS = "/System/Library/CoreServices/SystemVersion.plist";
  4. my $EXIT_VALUE = 0;
  5. my $Package_Path = $ENV{PACKAGE_PATH};
  6. if(CheckVersion("$SYSTEM_VERS", "10.3", "ProductVersion", "<")) {
  7.     @localPkgVers = ExtractPkgVersion("$Package_Path");
  8.     @receiptVers = ExtractPkgVersion("/Library/Receipts/" . GetPackageName("$Package_Path"));
  9.  
  10.     if ($receiptVers[0] == $localPkgVers[0]) {
  11.         if ($receiptVers[1] > $localPkgVers[1]){
  12.             $EXIT_VALUE = ((1 << 6));
  13.         }
  14.     } else {
  15.         if ($receiptVers[0] > $localPkgVers[0]){
  16.             $EXIT_VALUE = ((1 << 6));
  17.         }
  18.     }
  19. }
  20. if(CheckVersion("$SYSTEM_VERS", "10.2.4", "ProductVersion", "<")) {
  21.     $EXIT_VALUE = (1 << 6);
  22. }
  23.  
  24. exit ($EXIT_VALUE);
  25.  
  26. ###
  27.  
  28. sub CheckVersion
  29. {
  30.     my $path            = $_[0];
  31.     my $version         = $_[1];
  32.     my $keyName         = $_[2];
  33.     my $operator        = $_[3];
  34.  
  35.     if (! -e $path) {
  36.         return 0;
  37.     }
  38.  
  39.     if (!$operator) {
  40.         $operator = "==";
  41.     }
  42.  
  43.     my $oldSeperator = $/;
  44.     $/ = \0;
  45.  
  46.     open( PLIST, "$path") || do {
  47.         return 0;
  48.     };
  49.  
  50.     $plistData = <PLIST>;
  51.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  52.  
  53.     @items = split(/<key>/, $plistData);
  54.  
  55.     shift @items;
  56.     foreach $item (@items) {
  57.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  58.         $versiondata{ $1 } = $2;
  59.     }
  60.  
  61.     close(PLIST);
  62.  
  63.     $/ = $oldSeperator;
  64.  
  65.     @theVersionArray = split(/\./, $versiondata{$keyName});
  66.     for ($i = 0; $i < 3; $i++) {
  67.         if(!$theVersionArray[$i]) {
  68.             $theVersionArray[$i] = '0';
  69.         }
  70.     }
  71.  
  72.     @versionArray = split(/\./, $version);
  73.     
  74.     my $actualVersion;
  75.  
  76.     for ($i = 0; $i < 3; $i++) {
  77.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  78.  
  79.             $actualVersion = $theVersionArray[$i];
  80.             $version = $versionArray[$i];
  81.  
  82.             last;
  83.         }
  84.     }
  85.  
  86.     my $expression = '$actualVersion ' . $operator . ' $version';
  87.     if( eval ($expression) )
  88.     {
  89.         return 1;
  90.     }
  91.     else
  92.     {
  93.         return 0;
  94.     }
  95.  
  96. }
  97.  
  98. sub ExtractPkgVersion
  99. {
  100.     my $path        = $_[0];
  101.  
  102.     my $pkgMajor;
  103.     my $pkgMinor;
  104.  
  105.     $pkgMajor = GetPlistVersion("$path/Contents/Info.plist", "IFMajorVersion");
  106.     $pkgMinor = GetPlistVersion("$path/Contents/Info.plist", "IFMinorVersion");
  107.  
  108.     if (! $pkgMajor || ! $pkgMinor)
  109.     {
  110.         open (FILE, "$path/Contents/Resources/package_version");
  111.         $line = <FILE>;
  112.     chomp $line;
  113.         $line =~ /Major:\s(.*)/;
  114.     $pkgMajor = $1;
  115.         $line = <FILE>;
  116.     chomp $line;
  117.         $line =~ /Minor:\s(.*)/;
  118.         $pkgMinor = $1;
  119.         close (FILE);
  120.     }
  121.  
  122.     if (! $pkgMajor)
  123.     {
  124.         $pkgMajor = 0;
  125.     }
  126.     if (! $pkgMinor)    
  127.     {
  128.         $pkgMinor = 0;
  129.     }
  130.     return ($pkgMajor, $pkgMinor);
  131.    # return $pkgMajor . "." . $pkgMinor;
  132. }
  133.  
  134. sub GetPlistVersion
  135. {
  136.     my $path            = $_[0];
  137.     my $keyName         = $_[1];
  138.  
  139.     my %versiondata;
  140.     
  141.     if (! -e $path) {
  142.         return 0;
  143.     }
  144.  
  145.     my $oldSeperator = $/;
  146.     $/ = \0;
  147.  
  148.     open( PLIST, "$path") || do {
  149.         return 0;
  150.     };
  151.  
  152.     $plistData = <PLIST>;
  153.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  154.  
  155.     @items = split(/<key>/, $plistData);
  156.  
  157.     shift @items;
  158.     foreach $item (@items) {
  159.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  160.         $versiondata{ $1 } = $2;
  161.     }
  162.  
  163.     close(PLIST);
  164.  
  165.     $/ = $oldSeperator;
  166.     
  167.     return $versiondata{$keyName};
  168. }
  169.  
  170. sub GetPackageName
  171. {
  172.   my $pathToPackage    = $_[0];
  173.   
  174.   my @pathItems = split (/\//,$pathToPackage);
  175.  
  176.   return $pathItems[-1];    
  177. }
  178.