home *** CD-ROM | disk | FTP | other *** search
/ Australian Personal Computer 2004 September / APC0409D1.iso / brows / files / Safari / Safari.dmg / Safari.pkg / Contents / Resources / InstallationCheck < prev    next >
Encoding:
Text File  |  2003-06-13  |  3.1 KB  |  140 lines

  1. #!/usr/bin/perl
  2.  
  3. ########################################################
  4. my $SYSTEM_VERS     = "/System/Library/CoreServices/SystemVersion.plist";
  5. my $EXIT_VALUE         = 0;
  6. ########################################################
  7.  
  8. DO_CHECKS: 
  9. {
  10.     # Really old installers need the generic error message.
  11.     if(CheckVersion("$SYSTEM_VERS", "10.1", "ProductVersion", "<")) {
  12.             $EXIT_VALUE = 1;
  13.             last;
  14.     }
  15.     
  16.     # Must have 10.2.0 or better BOOTED, please.
  17.     if(CheckVersion("$SYSTEM_VERS", "10.2.0", "ProductVersion", "<")) {
  18.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 16);
  19.             last;
  20.     }
  21.     
  22.     ########################################################################################
  23.     # stop if iChat is running
  24.     my $APP_IS_RUNNING     = 0;
  25.     my $APP         = "Safari";
  26.     my $SWU_IS_RUNNING     = 0;
  27.     my $SWU         = "Software Update";
  28.     
  29.     # grep ps and see if we're running.
  30.     open(PSOUT, "/bin/ps -awwx |");
  31.     while( <PSOUT> ) {
  32.         if( /$APP\.app/ ) {
  33.             $APP_IS_RUNNING = 1;
  34.         }
  35.     }
  36.     close(PSOUT);
  37.     
  38.     # if Software Update is running, we do not want to stop
  39.     open(PSOUT, "/bin/ps -awwx |");
  40.     while( <PSOUT> ) {
  41.         if( /$SWU\.app/ ) {
  42.                 $SWU_IS_RUNNING = 1;
  43.         }
  44.     }
  45.     close(PSOUT);
  46.     
  47.     
  48.     if (($APP_IS_RUNNING == 1) && ($SWU_IS_RUNNING != 1)) {
  49.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 17);
  50.             last;
  51.     }
  52. }
  53.  
  54. exit($EXIT_VALUE);
  55.  
  56.  
  57. ########################################################
  58. ########################################################
  59.  
  60. sub CheckVersion
  61. {
  62.     my $path            = $_[0];
  63.     my $version         = $_[1];
  64.     my $keyName         = $_[2];
  65.     my $operator        = $_[3];
  66.     
  67.     my $oldSeperator;
  68.     my $plistData;
  69.     my @items;
  70.     my $item;
  71.     my $versiondata;
  72.     my $i;
  73.     my @theVersionArray;
  74.     my %versiondata;
  75.     my @versionArray;
  76.  
  77.     # if there's no THERE there, we return FALSE
  78.     if (! -e $path) {
  79.         return 0;
  80.     }
  81.  
  82.     if (!$operator) {
  83.         $operator = "==";
  84.     }
  85.  
  86.     $oldSeperator = $/;
  87.     $/ = \0;
  88.  
  89.     open( PLIST, "$path") || do {
  90.         return 0;
  91.     };
  92.  
  93.     $plistData = <PLIST>;
  94.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  95.  
  96.     @items = split(/<key>/, $plistData);
  97.  
  98.     shift @items;
  99.     foreach $item (@items) {
  100.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  101.         $versiondata{ $1 } = $2;
  102.     }
  103.  
  104.     close(PLIST);
  105.  
  106.     $/ = $oldSeperator;
  107.  
  108.     @theVersionArray = split(/\./, $versiondata{$keyName});
  109.     for ($i = 0; $i < 3; $i++) {
  110.         if(!$theVersionArray[$i]) {
  111.             $theVersionArray[$i] = '0';
  112.         }
  113.     }
  114.  
  115.     @versionArray = split(/\./, $version);
  116.     
  117.     my $actualVersion;
  118.  
  119.     for ($i = 0; $i < 3; $i++) {
  120.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  121.  
  122.             $actualVersion = $theVersionArray[$i];
  123.             $version = $versionArray[$i];
  124.  
  125.             last;
  126.         }
  127.     }
  128.  
  129.     my $expression = '$actualVersion ' . $operator . ' $version';
  130.     if( eval ($expression) )
  131.     {
  132.         return 1;
  133.     }
  134.     else
  135.     {
  136.         return 0;
  137.     }
  138.  
  139. }
  140.