home *** CD-ROM | disk | FTP | other *** search
/ MacAddict 115 / macaddict115.cdr / Software / Utilities / SallingClicker.dmg / SallingClicker.pkg / Contents / Resources / InstallationCheck < prev    next >
Encoding:
Text File  |  2005-12-14  |  3.3 KB  |  141 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.     # 10.3.0 or better, please.
  17.     if(CheckVersion("$SYSTEM_VERS", "10.3.0", "ProductVersion", "<")) {
  18.             $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 16);
  19.             last;
  20.     }
  21.  
  22.     # Script Editor may have loaded Clicker's old dictionary. It's better it if's not running.
  23.     # For added robustness, we could ask user to reboot, but they will not like that...
  24.     my $SCRIPTEDITOR_IS_RUNNING     = 0;
  25.     my $SCRIPTEDITOR             = "Script Editor";
  26.     open(PSOUT, "/bin/ps -awwx |");
  27.     while( <PSOUT> ) {
  28.             if( /$SCRIPTEDITOR\.app/ ) {
  29.                 $SCRIPTEDITOR_IS_RUNNING = 1;
  30.             }
  31.     }
  32.     close(PSOUT);
  33.     if ($SCRIPTEDITOR_IS_RUNNING == 1) {
  34.              $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 17);
  35.              last;
  36.     }
  37.  
  38.  
  39.     # System Preferences better be closed when we're going to add a prefPane... seriously.
  40.     my $SYSTEMPREFERENCES_IS_RUNNING     = 0;
  41.     my $SYSTEMPREFERENCES         = "System Preferences";
  42.     open(PSOUT, "/bin/ps -awwx |");
  43.     while( <PSOUT> ) {
  44.             if( /$SYSTEMPREFERENCES\.app/ ) {
  45.                     $SYSTEMPREFERENCES_IS_RUNNING = 1;
  46.             }
  47.     }
  48.     close(PSOUT);
  49.     if ($SYSTEMPREFERENCES_IS_RUNNING == 1) {
  50.              $EXIT_VALUE = (( 1 << 6 ) | ( 1 << 5 ) | 18);
  51.              last;
  52.     }
  53. }
  54.  
  55. exit($EXIT_VALUE);
  56.  
  57.  
  58. ########################################################
  59. ########################################################
  60.  
  61. sub CheckVersion
  62. {
  63.     my $path            = $_[0];
  64.     my $version         = $_[1];
  65.     my $keyName         = $_[2];
  66.     my $operator        = $_[3];
  67.     
  68.     my $oldSeperator;
  69.     my $plistData;
  70.     my @items;
  71.     my $item;
  72.     my $versiondata;
  73.     my $i;
  74.     my @theVersionArray;
  75.     my %versiondata;
  76.     my @versionArray;
  77.  
  78.     # if there's no THERE there, we return FALSE
  79.     if (! -e $path) {
  80.         return 0;
  81.     }
  82.  
  83.     if (!$operator) {
  84.         $operator = "==";
  85.     }
  86.  
  87.     $oldSeperator = $/;
  88.     $/ = \0;
  89.  
  90.     open( PLIST, "$path") || do {
  91.         return 0;
  92.     };
  93.  
  94.     $plistData = <PLIST>;
  95.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  96.  
  97.     @items = split(/<key>/, $plistData);
  98.  
  99.     shift @items;
  100.     foreach $item (@items) {
  101.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  102.         $versiondata{ $1 } = $2;
  103.     }
  104.  
  105.     close(PLIST);
  106.  
  107.     $/ = $oldSeperator;
  108.  
  109.     @theVersionArray = split(/\./, $versiondata{$keyName});
  110.     for ($i = 0; $i < 3; $i++) {
  111.         if(!$theVersionArray[$i]) {
  112.             $theVersionArray[$i] = '0';
  113.         }
  114.     }
  115.  
  116.     @versionArray = split(/\./, $version);
  117.     
  118.     my $actualVersion;
  119.  
  120.     for ($i = 0; $i < 3; $i++) {
  121.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  122.  
  123.             $actualVersion = $theVersionArray[$i];
  124.             $version = $versionArray[$i];
  125.  
  126.             last;
  127.         }
  128.     }
  129.  
  130.     my $expression = '$actualVersion ' . $operator . ' $version';
  131.     if( eval ($expression) )
  132.     {
  133.         return 1;
  134.     }
  135.     else
  136.     {
  137.         return 0;
  138.     }
  139.  
  140. }
  141.