home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 December / Chip_2003-12_cd1.bin / opsys / macos / ical / iCal.dmg / iCal.pkg / Contents / Resources / postflight < prev    next >
Text File  |  2003-08-25  |  6KB  |  218 lines

  1. #!/usr/bin/perl
  2.  
  3. use File::Path;
  4. use File::Spec;
  5.  
  6. ########################################################
  7. my $PLISTBUDDY        = $ARGV[0] . "/Contents/Resources/PlistBuddy";
  8. my $TOKENSPLIST        = $ARGV[2] . "/Library/Receipts/iCal.pkg/Contents/tokens.plist";
  9. ########################################################
  10.  
  11. my $ICALPATH = File::Spec->canonpath($ARGV[2] . "/Applications/iCal.app/");
  12. my @ICALPATHARRAY = File::Spec->splitdir($ICALPATH);
  13. pop @ICALPATHARRAY;
  14. my $ICALPARENTDIR = File::Spec->catdir(@ICALPATHARRAY);
  15.  
  16. #
  17.  
  18. $command = "\"" . $PLISTBUDDY . "\" -c \"Print :isync\" " . $TOKENSPLIST . "|";
  19.  
  20. open(PSOUT, $command);
  21. chomp(my $ISYNC = <PSOUT>);
  22. close(PSOUT);
  23.  
  24. my $ISYNCPATH = File::Spec->canonpath($ARGV[2] . $ISYNC);
  25. my @ISYNCPATHARRAY = File::Spec->splitdir($ISYNCPATH);
  26. pop @ISYNCPATHARRAY;
  27. my $ISYNCPARENTDIR = File::Spec->catdir(@ISYNCPATHARRAY);
  28.  
  29. ########################################################
  30. my $SYNCSERVER = $ARGV[2] . "/System/Library/CoreServices/SyncServer.app/";
  31. if (-d $SYNCSERVER)
  32. {
  33.     if (CheckVersion($SYNCSERVER . "Contents/version.plist", "1.1", "CFBundleShortVersionString", "<="))
  34.     {
  35.         system(    "/usr/bin/ditto", 
  36.                 $ICALPATH . "/Contents/Resources/FakeSyncServer.app/Contents",
  37.                 $SYNCSERVER . "/Contents/");
  38.                 
  39.         system(    "/bin/mv",
  40.                 $SYNCSERVER . "/Contents/MacOS/" . "FakeSyncServer",
  41.                 $SYNCSERVER . "/Contents/MacOS/" . "SyncServer");
  42.         
  43.         system(    $PLISTBUDDY,
  44.                 "-c",
  45.                 "Set :CFBundleShortVersionString 1.1.1",
  46.                 $SYNCSERVER . "/Contents/version.plist");
  47.         system(    $PLISTBUDDY,
  48.                 "-c",
  49.                 "Set :CFBundleShortVersionString 1.1.1",
  50.                 $SYNCSERVER . "/Contents/Info.plist");
  51.     
  52.         if (-d $ISYNCPATH)
  53.         {
  54.             if (CheckVersion($ISYNCPATH . "/Contents/version.plist", "1.1", "CFBundleShortVersionString", "<="))
  55.             {
  56.                 system(    "/bin/cp", "-f",
  57.                         $ICALPATH . "/Contents/Resources/FakeSyncServer.app/Contents/MacOS/FakeSyncServer",
  58.                         $ISYNCPATH . "/Contents/MacOS/iSync");
  59.                 
  60.                 system ($PLISTBUDDY, 
  61.                         "-c",
  62.                         "Set :CFBundleShortVersionString 1.1.1",
  63.                         $ISYNCPATH . "/Contents/version.plist");
  64.                 system ($PLISTBUDDY, 
  65.                         "-c",
  66.                         "Set :CFBundleShortVersionString 1.1.1",
  67.                         $ISYNCPATH . "/Contents/Info.plist");
  68.                 system(    $PLISTBUDDY,
  69.                         "-c",
  70.                         "Set :CFBundleGetInfoString iSync 1.1.1, ┬⌐ 2003 Apple Computer, Inc. All rights reserved.",
  71.                         $ISYNCPATH . "/Contents/Info.plist");
  72.                         
  73.                 system("/usr/bin/touch", "-c", $ISYNCPATH);
  74.                 system("/usr/bin/touch", "-c", $ISYNCPARENTDIR);
  75.             }
  76.         }
  77.     }
  78. }
  79.  
  80. system(    "/bin/rm", "-rf", $ICALPATH . "/Contents/Resources/FakeSyncServer.app");
  81.  
  82.  
  83. ####################################################################################################
  84. system("/usr/bin/touch", "-c", $ICALPATH);
  85. system("/usr/bin/touch", "-c", $ICALPARENTDIR);
  86.  
  87. exit(0);
  88.  
  89. ########################################################
  90. ########################################################
  91.  
  92. sub CheckVersion
  93. {
  94.     my $path            = $_[0];
  95.     my $version         = $_[1];
  96.     my $keyName         = $_[2];
  97.     my $operator        = $_[3];
  98.     
  99.     my $oldSeperator;
  100.     my $plistData;
  101.     my @items;
  102.     my $item;
  103.     my $versiondata;
  104.     my $i;
  105.     my @theVersionArray;
  106.     my %versiondata;
  107.     my @versionArray;
  108.  
  109.     if (! -e $path) {
  110.         return 0;
  111.     }
  112.  
  113.     if (!$operator) {
  114.         $operator = "==";
  115.     }
  116.  
  117.     $oldSeperator = $/;
  118.     $/ = \0;
  119.  
  120.     open( PLIST, "$path") || do {
  121.         return 0;
  122.     };
  123.  
  124.     $plistData = <PLIST>;
  125.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  126.  
  127.     @items = split(/<key>/, $plistData);
  128.  
  129.     shift @items;
  130.     foreach $item (@items) {
  131.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  132.         $versiondata{ $1 } = $2;
  133.     }
  134.  
  135.     close(PLIST);
  136.  
  137.     $/ = $oldSeperator;
  138.  
  139.     @theVersionArray = split(/\./, $versiondata{$keyName});
  140.     for ($i = 0; $i < 3; $i++) {
  141.         if(!$theVersionArray[$i]) {
  142.             $theVersionArray[$i] = '0';
  143.         }
  144.     }
  145.  
  146.     @versionArray = split(/\./, $version);
  147.     
  148.     my $actualVersion;
  149.  
  150.     for ($i = 0; $i < 3; $i++) {
  151.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  152.  
  153.             $actualVersion = $theVersionArray[$i];
  154.             $version = $versionArray[$i];
  155.  
  156.             last;
  157.         }
  158.     }
  159.  
  160.     my $expression = '$actualVersion ' . $operator . ' $version';
  161.     if( eval ($expression) )
  162.     {
  163.         return 1;
  164.     }
  165.     else
  166.     {
  167.         return 0;
  168.     }
  169.  
  170. }
  171.  
  172. ########################################################
  173.  
  174. sub GetVersion
  175. {
  176.     my $path            = $_[0];
  177.     my $keyName         = $_[1];
  178.     
  179.     my $oldSeperator;
  180.     my $plistData;
  181.     my @items;
  182.     my $item;
  183.     my $versiondata;
  184.     my $i;
  185.     my @theVersionArray;
  186.     my %versiondata;
  187.     my @versionArray;
  188.  
  189.     if (! -e $path) {
  190.         return 0;
  191.     }
  192.  
  193.     $oldSeperator = $/;
  194.     $/ = \0;
  195.  
  196.     open( PLIST, "$path");
  197.  
  198.     $plistData = <PLIST>;
  199.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  200.  
  201.     @items = split(/<key>/, $plistData);
  202.  
  203.     shift @items;
  204.     foreach $item (@items) {
  205.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  206.         $versiondata{ $1 } = $2;
  207.     }
  208.  
  209.     close(PLIST);
  210.  
  211.     $/ = $oldSeperator;
  212.  
  213.     return($versiondata{$keyName});
  214. }
  215.  
  216.  
  217.  
  218.