home *** CD-ROM | disk | FTP | other *** search
/ Chip 2003 August / Chip_2003-08_cd1.bin / zkuste / macos / Files / iChatAV.dmg / iChatAVBeta.pkg / Contents / Resources / postflight < prev    next >
Text File  |  2003-06-09  |  8KB  |  293 lines

  1. #!/usr/bin/perl
  2.  
  3. use IO::File;
  4. use File::Spec;
  5.  
  6. my $target = $ARGV[2];
  7. my $TEMP_DIR         = $ARGV[2] . "/private/tmp/fpuzhpxf2/";
  8. my $REVERTER_DIR     = $TEMP_DIR . "/iChatBetaReverter.pkg/";
  9. my $REVERTER_ROOT     = $TEMP_DIR . "/Root/";
  10. my $RECYCLING         = $TEMP_DIR . "/Recycling/";
  11.  
  12. ########################################################################################
  13. my $REVERTER_SKELETON     = $ARGV[0] . "/Contents/iChatBetaReverter.pkg";
  14. system("/bin/cp -r \"$REVERTER_SKELETON\" \"$TEMP_DIR\"");
  15.  
  16.  
  17. ########################################################################################
  18. #        iChat Application
  19. my $HIDER    = $REVERTER_DIR . "Contents/" . "iChatVersion";
  20. my $BUNDLE    = "/Applications/iChat.app/";
  21. my $VERS    = $BUNDLE . "Contents/version.plist";
  22.  
  23. GoReportRevertableInstallOver();
  24.  
  25.  
  26. ########################################################################################
  27. #        iChat Menu Extra DooDad
  28. $HIDER    = $REVERTER_DIR . "Contents/" . "iChatMenuVersion";
  29. $BUNDLE    = "/System/Library/CoreServices/Menu Extras/iChat.menu/";
  30. $VERS    = $BUNDLE . "Contents/version.plist";
  31.  
  32. GoReportRevertableInstallOver();
  33.  
  34.  
  35. ########################################################################################
  36. #        Instant Message Framework
  37. $HIDER    = $REVERTER_DIR . "Contents/" . "InstantMessageFrameworkVersion";
  38. $BUNDLE    = "/System/Library/PrivateFrameworks/InstantMessage.framework/";
  39. $VERS    = $BUNDLE . "Versions/A/Resources/version.plist";
  40.  
  41. GoReportRevertableInstallOver();
  42.  
  43.  
  44. ########################################################################################
  45. #        Video Conference Framework
  46. $HIDER    = $REVERTER_DIR . "Contents/" . "VideoConferenceFrameworkVersion";
  47. $BUNDLE    = "/System/Library/PrivateFrameworks/VideoConference.framework/";
  48. $VERS    = $BUNDLE . "Versions/A/Resources/version.plist";
  49.  
  50. GoReportRevertableInstallOver();
  51.  
  52.  
  53. ########################################################################################
  54. #        VCH263Codec
  55. $HIDER    = $REVERTER_DIR . "Contents/" . "VCH263CodecVersion";
  56. $BUNDLE    = "/System/Library/Components/VCH263Codec.component/";
  57. $VERS    = $BUNDLE . "Contents/version.plist";
  58.  
  59. GoReportRevertableInstallOver();
  60.  
  61.  
  62. ########################################################################################
  63. #        SystemUIServer
  64. $HIDER    = $REVERTER_DIR . "Contents/SystemUIServerVersion";
  65. $BUNDLE    = "/System/Library/CoreServices/SystemUIServer.app/";
  66. $VERS    = $BUNDLE . "Contents/version.plist";
  67.  
  68. if (CheckVersion("$VERS", GetVersion("$REVERTER_ROOT . $VERS", "SourceVersion"), "SourceVersion", ">") )
  69. {
  70.     my $HIDER    = $REVERTER_DIR . "Contents/VCH263CodecVersion";
  71.     my $VERS    = "/System/Library/Components/VCH263Codec.component/Contents/version.plist";
  72.     
  73.     sysopen( HIDER, $HIDER, O_WRONLY|O_TRUNC|O_CREAT );
  74.     print HIDER GetVersion($VERS,"SourceVersion") . "\n";
  75.     close HIDER;
  76. }
  77. else
  78. {
  79.     system("/bin/mv \"" . $REVERTER_ROOT . $BUNDLE ."\" \"" . $BUNDLE. "\"");
  80. }
  81.  
  82.  
  83.  
  84. ######## NON-REVERTABLE BUNDLES ###########
  85.  
  86. ########################################################################################
  87. #        iSightAudio Plugin
  88. $BUNDLE    = "/Library/Audio/Plug-Ins/HAL/iSightAudio.plugin";
  89. $VERS    = $BUNDLE . "/Contents/version.plist";
  90.  
  91. (my $VOL, my $PATH, my $PACK) = File::Spec->splitpath( $BUNDLE );
  92.  
  93. if (-d $RECYCLING . $PACK) {
  94.     if (CheckVersion($VERS, GetVersion($RECYCLING . $PACK, "SourceVersion"), "SourceVersion", "<=") )
  95.     {
  96.         system("/bin/mv \"" . $RECYCLING . $PACK ."\" \"" . $BUNDLE. "\"");
  97.     }
  98. }
  99.  
  100.  
  101. ########################################################################################
  102. #        Apple_iSight kext
  103. $BUNDLE    = "/System/Library/Extensions/Apple_iSight.kext";
  104. $VERS    = $BUNDLE . "/Contents/version.plist";
  105.  
  106. ($VOL, $PATH, $PACK) = File::Spec->splitpath( $BUNDLE );
  107.  
  108. if (-d $RECYCLING . $PACK) {
  109.     if (CheckVersion($VERS, GetVersion($RECYCLING . $PACK, "SourceVersion"), "SourceVersion", "<=") )
  110.     {
  111.         system("/bin/mv \"" . $RECYCLING . $PACK ."\" \"" . $BUNDLE. "\"");
  112.     }
  113. }
  114.  
  115.  
  116. ########################################################################################
  117. #        QuickTimeIIDCDigitizer
  118. $BUNDLE    = "/System/Library/QuickTime/QuickTimeIIDCDigitizer.component";
  119. $VERS    = $BUNDLE . "/Contents/version.plist";
  120.  
  121. ($VOL, $PATH, $PACK) = File::Spec->splitpath( $BUNDLE );
  122.  
  123. if (-d $RECYCLING . $PACK) {
  124.     if (CheckVersion($VERS, GetVersion($RECYCLING . $PACK, "SourceVersion"), "SourceVersion", "<=") )
  125.     {
  126.         system("/bin/mv \"" . $RECYCLING . $PACK ."\" \"" . $BUNDLE. "\"");
  127.     }
  128. }
  129.  
  130.  
  131. ########################################################################################
  132. use Cwd;
  133.  
  134. my $olddir = getcwd();
  135. chdir($REVERTER_ROOT);
  136. system("/bin/pax -w -z -x cpio -f \"" . $REVERTER_DIR . "/Contents/Archive.pax.gz\" ./");
  137. system("/usr/bin/mkbom ./ \"" . $REVERTER_DIR . "/Contents/Archive.bom\"");
  138. chdir($olddir);
  139.  
  140. system("/bin/mv \"" . $REVERTER_DIR . "\" \"/Library/Application Support/\"");
  141.  
  142. ########################################################################################
  143. system "/usr/sbin/kextcache -l -a `arch` -m \"$target/System/Library/Extensions.mkext\" " . "\"$target/System/Library/Extensions\"";
  144. system "/usr/bin/touch -c \"$target/System/Library/Extensions/\"";
  145. system "/usr/bin/touch -c \"$target/Applications/\"";
  146.  
  147. exit(0);
  148.  
  149. ########################################################
  150. ########################################################
  151. ########################################################
  152. ########################################################
  153. ########################################################
  154. ########################################################
  155.  
  156. sub GoReportRevertableInstallOver
  157. {    
  158.     sysopen( HIDER, $HIDER, O_WRONLY|O_TRUNC|O_CREAT );
  159.     print HIDER GetVersion($VERS,"SourceVersion") . "\n";
  160.     close HIDER;
  161. }
  162.  
  163.  
  164. ########################################################
  165. ########################################################
  166.  
  167. sub CheckVersion
  168. {
  169.     my $path            = $_[0];
  170.     my $version         = $_[1];
  171.     my $keyName         = $_[2];
  172.     my $operator        = $_[3];
  173.     
  174.     my $oldSeperator;
  175.     my $plistData;
  176.     my @items;
  177.     my $item;
  178.     my $versiondata;
  179.     my $i;
  180.     my @theVersionArray;
  181.     my %versiondata;
  182.     my @versionArray;
  183.  
  184.     # if there's no THERE there, we return FALSE
  185.     if (! -e $path) {
  186.         return 0;
  187.     }
  188.  
  189.     if (!$operator) {
  190.         $operator = "==";
  191.     }
  192.  
  193.     $oldSeperator = $/;
  194.     $/ = \0;
  195.  
  196.     open( PLIST, "$path") || do {
  197.         return 0;
  198.     };
  199.  
  200.     $plistData = <PLIST>;
  201.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  202.  
  203.     @items = split(/<key>/, $plistData);
  204.  
  205.     shift @items;
  206.     foreach $item (@items) {
  207.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  208.         $versiondata{ $1 } = $2;
  209.     }
  210.  
  211.     close(PLIST);
  212.  
  213.     $/ = $oldSeperator;
  214.  
  215.     @theVersionArray = split(/\./, $versiondata{$keyName});
  216.     for ($i = 0; $i < 3; $i++) {
  217.         if(!$theVersionArray[$i]) {
  218.             $theVersionArray[$i] = '0';
  219.         }
  220.     }
  221.  
  222.     @versionArray = split(/\./, $version);
  223.     
  224.     my $actualVersion;
  225.  
  226.     for ($i = 0; $i < 3; $i++) {
  227.         if (($theVersionArray[$i] != $versionArray[$i]) or ($i == 2)) {
  228.  
  229.             $actualVersion = $theVersionArray[$i];
  230.             $version = $versionArray[$i];
  231.  
  232.             last;
  233.         }
  234.     }
  235.  
  236.     my $expression = '$actualVersion ' . $operator . ' $version';
  237.     if( eval ($expression) )
  238.     {
  239.         return 1;
  240.     }
  241.     else
  242.     {
  243.         return 0;
  244.     }
  245.  
  246. }
  247.  
  248. ########################################################
  249.  
  250. sub GetVersion
  251. {
  252.     my $path            = $_[0];
  253.     my $keyName         = $_[1];
  254.     
  255.     my $oldSeperator;
  256.     my $plistData;
  257.     my @items;
  258.     my $item;
  259.     my $versiondata;
  260.     my $i;
  261.     my @theVersionArray;
  262.     my %versiondata;
  263.     my @versionArray;
  264.  
  265.     # if there's no THERE there, we return FALSE
  266.     if (! -e $path) {
  267.         return 0;
  268.     }
  269.  
  270.     $oldSeperator = $/;
  271.     $/ = \0;
  272.  
  273.     open( PLIST, "$path");
  274.  
  275.     $plistData = <PLIST>;
  276.     $plistData =~ /<dict>(.*?)<\/dict>/gis;
  277.  
  278.     @items = split(/<key>/, $plistData);
  279.  
  280.     shift @items;
  281.     foreach $item (@items) {
  282.         $item =~ /(.*?)<\/key>.*?<string>(.*?)<\/string>/gis;
  283.         $versiondata{ $1 } = $2;
  284.     }
  285.  
  286.     close(PLIST);
  287.  
  288.     $/ = $oldSeperator;
  289.  
  290.     return($versiondata{$keyName});
  291. }
  292.  
  293.