Some fixes and cleanup for the osx packaging stuff.

bzr-revno: 6
This commit is contained in:
Jonathan Corwin 2012-12-07 19:27:48 +00:00
commit 59c266174c
2 changed files with 23 additions and 17 deletions

View File

@ -13,22 +13,13 @@ on run
set arrangement of theViewOptions to not arranged set arrangement of theViewOptions to not arranged
set icon size of theViewOptions to 128 set icon size of theViewOptions to 128
set background picture of theViewOptions to file ".background:installer-background.png" set background picture of theViewOptions to file ".background:installer-background.png"
if not exists file "Applications" then
make new alias file at container window to POSIX file "/Applications" with properties {name:"Applications"}
end if
delay 1
set position of item "%s" of container window to {160, 200} set position of item "%s" of container window to {160, 200}
set position of item ".Trashes" of container window to {100, 500}
set position of item ".background" of container window to {200, 500}
set position of item ".DS_Store" of container window to {400, 500}
set position of item "Applications" of container window to {550, 200} set position of item "Applications" of container window to {550, 200}
if exists file ".VolumeIcon.icns" then set position of item ".background" of container window to {100, 500}
set position of item ".VolumeIcon.icns" of container window to {500, 500} set position of item ".DS_Store" of container window to {200, 500}
end if
set position of item ".fseventsd" of container window to {300, 500} set position of item ".fseventsd" of container window to {300, 500}
if exists POSIX file ".SymAVx86QSFile" then set position of item ".Trashes" of container window to {400, 500}
set position of item ".SymAVx86QSFile" of container window to {600, 500} set position of item ".VolumeIcon.icns" of container window to {500, 500}
end if
open open
close close
update without registering applications update without registering applications

View File

@ -113,6 +113,8 @@ build process you can specify different make targets
import os import os
import plistlib import plistlib
import signal
import subprocess
import sys import sys
from shutil import copy, rmtree from shutil import copy, rmtree
from subprocess import Popen, PIPE from subprocess import Popen, PIPE
@ -579,6 +581,10 @@ class MacosxBuilder(object):
self._run_command(['SetFile', '-a', 'C', dmg_volume_path], self._run_command(['SetFile', '-a', 'C', dmg_volume_path],
'Could not set dmg icon attributes.') 'Could not set dmg icon attributes.')
# Create symlink in dmg pointing to the /Applications directory on OS X.
self._print('... Creating symlink to /Applications.')
os.symlink('/Applications', os.path.join(dmg_volume_path, 'Applications'))
# Set dmg background. Requires running Mac OS X gui. # Set dmg background. Requires running Mac OS X gui.
# TODO: better formatting and code refactoring # TODO: better formatting and code refactoring
if not self.args.devel: if not self.args.devel:
@ -593,8 +599,19 @@ class MacosxBuilder(object):
self.adjust_dmg_view(os.path.basename(dmg_volume_path)) self.adjust_dmg_view(os.path.basename(dmg_volume_path))
# Unmount dmg file. ## Unmount dmg file.
self._print('... unmounting the dmg.') self._print('... unmounting the dmg.')
# Sometimes it could happen that OSX Finder is blocking umount.
# We need to find this process and kill it.
try:
output = subprocess.check_output(['fuser', dmg_volume_path]).strip()
if output:
blocking_proc_pid = int(output.split()[0])
os.kill(int(blocking_proc_pid), signal.SIGKILL)
except Exception as e:
print str(e)
self._print('... failed to kill process using %s' % dmg_volume_path)
# Unmount dmg file.
self._run_command([self.hdiutil, 'detach', dmg_volume_path], self._run_command([self.hdiutil, 'detach', dmg_volume_path],
'Could not unmount the dmg file, dmg creation failed.' 'Could not unmount the dmg file, dmg creation failed.'
) )
@ -639,11 +656,9 @@ class MacosxBuilder(object):
f.close() f.close()
result = p.returncode result = p.returncode
if (result != 0): if (result != 0):
self._print('Adjusting dmg view failed.') self._print('Adjusting dmg view failed (non-zero exit code).')
sys.exit(1)
except (IOError, OSError): except (IOError, OSError):
self._print('Adjusting dmg view failed.') self._print('Adjusting dmg view failed.')
sys.exit(1)
def main(self): def main(self):
""" """