home *** CD-ROM | disk | FTP | other *** search
/ Click Press Kit / Click Press Kit.iso / mac / QuickTime704.pkg / Contents / Resources / InstallationCheck < prev    next >
Encoding:
Text File  |  2005-03-11  |  3.7 KB  |  190 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.  
  21. #
  22. # Don't install if target system is less than 10.3.9
  23. #
  24. if(CheckVersion("$SYSTEM_VERS", "10.3.9", "ProductVersion", "<")) {
  25.     $EXIT_VALUE = ((1 << 6) | ( 1 << 5 ) | 16 );
  26. }
  27.  
  28. #
  29. # Don't install if target system is 10.4 or greater.
  30. #
  31. if(CheckVersion("$SYSTEM_VERS", "10.4", "ProductVersion", ">=")) 
  32. {
  33.     $EXIT_VALUE = ((1 << 6) | ( 1 << 5 ) | 17 );
  34. }
  35.     
  36. exit ($EXIT_VALUE);
  37.  
  38. ###
  39.  
  40. sub CheckVersion
  41. {
  42.     my $path            = $_[0];
  43.     my $version         = $_[1];
  44.     my $keyName         = $_[2];
  45.     my $operator        = $_[3];
  46.  
  47.     if (! -e $path) {
  48.         return 0;
  49.     }
  50.  
  51.     if (!$operator) {
  52.         $operator = "==";
  53.     }
  54.  
  55.     my $oldSeperator = $/;
  56.     $/ = \0;
  57.  
  58.     open( PLIST, "$path") || do {
  59.         return 0;
  60.     };
  61.  
  62.     $plistData = <PLIST>;
  63.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  64.  
  65.     @items = split(/<key>/, $plistData);
  66.  
  67.     shift @items;
  68.     foreach $item (@items) {
  69.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  70.         $versiondata{ $1 } = $2;
  71.     }
  72.  
  73.     close(PLIST);
  74.  
  75.     $/ = $oldSeperator;
  76.  
  77.     @theVersionArray = split(/\./, $versiondata{$keyName});
  78.     for ($i = 0; $i < 3; $i++) {
  79.         if(!$theVersionArray[$i]) {
  80.             $theVersionArray[$i] = '0';
  81.         }
  82.     }
  83.  
  84.     @versionArray = split(/\./, $version);
  85.     
  86.     my $actualVersion;
  87.  
  88.     for ($i = 0; $i < 3; $i++) {
  89.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  90.  
  91.             $actualVersion = $theVersionArray[$i];
  92.             $version = $versionArray[$i];
  93.  
  94.             last;
  95.         }
  96.     }
  97.  
  98.     my $expression = '$actualVersion ' . $operator . ' $version';
  99.     if( eval ($expression) )
  100.     {
  101.         return 1;
  102.     }
  103.     else
  104.     {
  105.         return 0;
  106.     }
  107.  
  108. }
  109.  
  110. sub ExtractPkgVersion
  111. {
  112.     my $path        = $_[0];
  113.  
  114.     my $pkgMajor;
  115.     my $pkgMinor;
  116.  
  117.     $pkgMajor = GetPlistVersion("$path/Contents/Info.plist", "IFMajorVersion");
  118.     $pkgMinor = GetPlistVersion("$path/Contents/Info.plist", "IFMinorVersion");
  119.  
  120.     if (! $pkgMajor || ! $pkgMinor)
  121.     {
  122.         open (FILE, "$path/Contents/Resources/package_version");
  123.         $line = <FILE>;
  124.     chomp $line;
  125.         $line =~ /Major:\s(.*)/;
  126.     $pkgMajor = $1;
  127.         $line = <FILE>;
  128.     chomp $line;
  129.         $line =~ /Minor:\s(.*)/;
  130.         $pkgMinor = $1;
  131.         close (FILE);
  132.     }
  133.  
  134.     if (! $pkgMajor)
  135.     {
  136.         $pkgMajor = 0;
  137.     }
  138.     if (! $pkgMinor)    
  139.     {
  140.         $pkgMinor = 0;
  141.     }
  142.     return ($pkgMajor, $pkgMinor);
  143.    # return $pkgMajor . "." . $pkgMinor;
  144. }
  145.  
  146. sub GetPlistVersion
  147. {
  148.     my $path            = $_[0];
  149.     my $keyName         = $_[1];
  150.  
  151.     my %versiondata;
  152.     
  153.     if (! -e $path) {
  154.         return 0;
  155.     }
  156.  
  157.     my $oldSeperator = $/;
  158.     $/ = \0;
  159.  
  160.     open( PLIST, "$path") || do {
  161.         return 0;
  162.     };
  163.  
  164.     $plistData = <PLIST>;
  165.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  166.  
  167.     @items = split(/<key>/, $plistData);
  168.  
  169.     shift @items;
  170.     foreach $item (@items) {
  171.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  172.         $versiondata{ $1 } = $2;
  173.     }
  174.  
  175.     close(PLIST);
  176.  
  177.     $/ = $oldSeperator;
  178.     
  179.     return $versiondata{$keyName};
  180. }
  181.  
  182. sub GetPackageName
  183. {
  184.   my $pathToPackage    = $_[0];
  185.   
  186.   my @pathItems = split (/\//,$pathToPackage);
  187.  
  188.   return $pathItems[-1];    
  189. }
  190.