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

  1. #!/usr/bin/perl
  2.  
  3. use File::Path;
  4. use File::Spec;
  5. use Cwd;
  6.  
  7. my $TARGET_VOLUME         = $ARGV[2];
  8. my $PACKAGE_PATH         = $ENV{PACKAGE_PATH};
  9. my $SCRIPT_NAME            = $ENV{SCRIPT_NAME};
  10. my $POSTFLIGHT_SCRIPT_PATH    = $ENV{RECEIPT_PATH};
  11.  
  12. my @PFPATHARRAY = File::Spec->splitdir($POSTFLIGHT_SCRIPT_PATH);
  13. pop @PFPATHARRAY;
  14. pop @PFPATHARRAY;
  15. my $RECEIPT_PATH = $TARGET_VOLUME . File::Spec->catdir(@PFPATHARRAY);
  16.  
  17. ####################################################################################################
  18. my $TOKEN         = "Safari";
  19. my $TOKENSPLIST        = quotemeta($RECEIPT_PATH . "/Contents/tokens.plist");
  20.  
  21. my $olddir = getcwd();
  22. chdir($PACKAGE_PATH . "/Contents/Resources/");
  23. my $command = "./PlistBuddy -c \"Print :" . $TOKEN . "\" " . $TOKENSPLIST . " |";
  24. open(PSOUT, $command);
  25. chomp(my $FOUNDAPP = <PSOUT>);
  26. close(PSOUT);
  27. chdir($olddir);
  28.  
  29. my $APPPATHWITHINVOL = File::Spec->canonpath($FOUNDAPP);
  30.  
  31. my $APPPATH = $TARGET_VOLUME . "/" . $APPPATHWITHINVOL;
  32.  
  33. my @PATHARRAY = File::Spec->splitdir($APPPATH);
  34. pop @PATHARRAY;
  35. my $PARENTDIR = File::Spec->catdir(@PATHARRAY);
  36.  
  37.  
  38. ####################################################################################################
  39. my $BOMLocation = quotemeta($RECEIPT_PATH . "/Contents/Archive.bom"); 
  40. my %inBOM;
  41. my $item;
  42.  
  43. $olddir = getcwd();
  44. chdir($APPPATH); 
  45. my @AppContents = split(/\n/, `/usr/bin/find -d .`);
  46. chdir($olddir); 
  47.  
  48. open(BOM, "/usr/bin/lsbom -s " . $BOMLocation . " |");
  49. while (<BOM>) {
  50.     if (m-^\.\/\Q${APPPATHWITHINVOL}\E(.*)$-) {
  51.         $inBOM{$1} = 1;
  52.     }
  53. };
  54. close(BOM);
  55.  
  56. foreach $item (@AppContents) {
  57.     $item =~ s/^\.//;
  58.     unless ($inBOM{$item}) {
  59.         my $obsolete = $APPPATH . $item;
  60.         rmdir($obsolete);
  61.         unlink($obsolete);
  62.     }
  63. }
  64.  
  65. #####################################################################################################
  66. $olddir = getcwd();
  67. chdir($APPPATH);
  68. system "/usr/bin/touch ./";
  69. chdir($PARENTDIR);
  70. system "/usr/bin/touch ./";
  71. chdir($olddir);
  72.  
  73. ####################################################################################################
  74. my $permissions_info_file = "/tmp/com.apple.installation.savedperm";
  75. my @stat_info;
  76. my $MODE = 2;
  77. my $UID = 4;
  78. my $GID = 5;
  79.  
  80. if(-e $permissions_info_file) {
  81.     if(open(PERMS_FILE_HDL, "$permissions_info_file")) {
  82.         while(<PERMS_FILE_HDL>) {
  83.             my $item = $_;
  84.             chomp($item);
  85.             push(@stat_info, $item);
  86.         }
  87.         close(PERMS_FILE_HDL);
  88.         unlink($permissions_info_file);
  89.  
  90.         chown($stat_info[$UID], $stat_info[$GID], $TARGET_VOLUME);
  91.         chmod($stat_info[$MODE] & 07777, $TARGET_VOLUME);
  92.     }
  93. }
  94.  
  95. ####################################################################################################
  96. exit 0;
  97.  
  98.  
  99.