openlp-core team mailing list archive
-
openlp-core team
-
Mailing list archive
-
Message #16267
[Merge] lp:~mzibricky/openlp/packaging into lp:openlp/packaging
matysek has proposed merging lp:~mzibricky/openlp/packaging into lp:openlp/packaging.
Requested reviews:
Tim Bentley (trb143)
Related bugs:
Bug #814838 in OpenLP: "cleanup Mac OS X build script"
https://bugs.launchpad.net/openlp/+bug/814838
For more details, see:
https://code.launchpad.net/~mzibricky/openlp/packaging/+merge/112210
Final changes to improve and cleanup build process for osx:
- fix setting dmg icon, dmg background
- remove old files
- cleanup build script
- fix paths
--
https://code.launchpad.net/~mzibricky/openlp/packaging/+merge/112210
Your team OpenLP Core is subscribed to branch lp:openlp/packaging.
=== modified file 'osx/DmgImageInstallBackground.png' (properties changed: +x to -x)
=== removed file 'osx/Makefile'
--- osx/Makefile 2012-06-09 19:02:47 +0000
+++ osx/Makefile 1970-01-01 00:00:00 +0000
@@ -1,28 +0,0 @@
-all:
- python build.py -c openlp.cfg
-
-view:
- python build.py -c openlp.cfg --package-view --compress-view
-
-package:
-
- python build.py -c openlp.cfg --package --package-view
-
-bundle:
-
- python build.py -c openlp.cfg --compress --compress-view
-
-clean:
- # remove old configuration files
- rm -f openlp.spec
- rm -f Info.plist
- rm -f .version
-
- # remove old build artifacts
- rm -rf build
- rm -rf dist
- rm -rf Macopenlp.app
- rm -rf OpenLP.app
- rm -f warnopenlp.txt
- rm -f *dmg
-
=== renamed file 'osx/applescript-adjustview-10-6.master' => 'osx/applescript-adjust-dmg-view.master'
--- osx/applescript-adjustview-10-6.master 2012-06-09 19:02:47 +0000
+++ osx/applescript-adjust-dmg-view.master 2012-06-26 20:27:21 +0000
@@ -1,43 +1,6 @@
-on saveImageWithItselfAsIcon(icon_image_file)
- -- save icon_image_file with itself as icon
- set icon_image_file_string to icon_image_file as string
- tell application "Image Events"
- launch
- set icon_image to open file icon_image_file_string
- save icon_image with icon
- close icon_image
- end tell
-end saveImageWithItselfAsIcon
-
-on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
- tell application "Finder" to set f to aFileOrFolderWithIcon as alias
- -- grab the file's icon
- my CopyOrPaste(f, "c")
- -- now the icon is in the clipboard
- tell application "Finder" to set c to aFileOrFolder as alias
- my CopyOrPaste(result, "v")
-end copyIconOfTo
-
-on CopyOrPaste(i, cv)
- tell application "Finder"
- activate
- set infoWindow to open information window of i
- set infoWindowName to name of infoWindow
- end tell
- tell application "System Events" to tell process "Finder" to tell window infoWindowName
- keystroke tab -- select icon button
- keystroke (cv & "w") using command down (* (copy or paste) + close window *)
- end tell -- window 1 then process Finder then System Events
-end CopyOrPaste
-
on run
- set icon_image_file to POSIX file "%s" as alias
- set dmg_file to POSIX file "/Volumes/%s" as alias
-
- my saveImageWithItselfAsIcon(icon_image_file)
-- wait for virus scanner
delay 2
- my copyIconOfTo(icon_image_file, dmg_file)
tell application "Finder"
tell disk "%s"
=== removed file 'osx/applescript-adjustview-10-5.master'
--- osx/applescript-adjustview-10-5.master 2012-06-09 19:02:47 +0000
+++ osx/applescript-adjustview-10-5.master 1970-01-01 00:00:00 +0000
@@ -1,74 +0,0 @@
-on saveImageWithItselfAsIcon(icon_image_file)
- -- save icon_image_file with itself as icon
- set icon_image_file_string to icon_image_file as string
- tell application "Image Events"
- launch
- set icon_image to open file icon_image_file_string
- save icon_image with icon
- close icon_image
- end tell
-end saveImageWithItselfAsIcon
-
-on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
- tell application "Finder" to set f to aFileOrFolderWithIcon as alias
- -- grab the file's icon
- my CopyOrPaste(f, "c")
- -- now the icon is in the clipboard
- tell application "Finder" to set c to aFileOrFolder as alias
- my CopyOrPaste(result, "v")
-end copyIconOfTo
-
-on CopyOrPaste(i, cv)
- tell application "Finder"
- activate
- open information window of i
- end tell
- tell application "System Events" to tell process "Finder" to tell window 1
- keystroke tab -- select icon button
- keystroke (cv & "w") using command down (* (copy or paste) + close window *)
- end tell -- window 1 then process Finder then System Events
-end CopyOrPaste
-
-on run
- set icon_image_file to POSIX file "%s" as alias
- set dmg_file to POSIX file "/Volumes/%s" as alias
-
- my saveImageWithItselfAsIcon(icon_image_file)
- -- wait for virus scanner
- delay 2
- my copyIconOfTo(icon_image_file, dmg_file)
-
- tell application "Finder"
- tell disk "%s"
- open
- set current view of container window to icon view
- set toolbar visible of container window to false
- set statusbar visible of container window to false
- set the bounds of container window to {400, 100, 1100, 500}
- set theViewOptions to the icon view options of container window
- set arrangement of theViewOptions to not arranged
- set icon size of theViewOptions to 128
- 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 5
- 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 ".installer-background.png" 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 ".VolumeIcon.icns" of container window to {500, 500}
- set position of item ".fseventsd" of container window to {300, 500}
- if exists POSIX file ".SymAVx86QSFile" then
- set position of item ".SymAVx86QSFile" of container window to {600, 500}
- end if
- open
- close
- update without registering applications
- -- wait until the virus scan completes
- delay 5
- -- eject
- end tell
- end tell
-end run
=== removed file 'osx/applescript-seticon-10-5.master'
--- osx/applescript-seticon-10-5.master 2012-06-09 19:02:47 +0000
+++ osx/applescript-seticon-10-5.master 1970-01-01 00:00:00 +0000
@@ -1,40 +0,0 @@
-on saveImageWithItselfAsIcon(icon_image_file)
- -- save icon_image_file with itself as icon
- set icon_image_file_string to icon_image_file as string
- tell application "Image Events"
- launch
- set icon_image to open file icon_image_file_string
- save icon_image with icon
- close icon_image
- end tell
-end saveImageWithItselfAsIcon
-
-on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
- tell application "Finder" to set f to aFileOrFolderWithIcon as alias
- -- grab the file's icon
- my CopyOrPaste(f, "c")
- -- now the icon is in the clipboard
- tell application "Finder" to set c to aFileOrFolder as alias
- my CopyOrPaste(result, "v")
-end copyIconOfTo
-
-on CopyOrPaste(i, cv)
- tell application "Finder"
- activate
- open information window of i
- end tell
- tell application "System Events" to tell process "Finder" to tell window 1
- keystroke tab -- select icon button
- keystroke (cv & "w") using command down (* (copy or paste) + close window *)
- end tell -- window 1 then process Finder then System Events
-end CopyOrPaste
-
-on run
- set icon_image_file to POSIX file "%s" as alias
- set dmg_file to POSIX file "%s" as alias
-
- my saveImageWithItselfAsIcon(icon_image_file)
- -- wait for virus scanner
- delay 2
- my copyIconOfTo(icon_image_file, dmg_file)
-end run
=== removed file 'osx/applescript-seticon-10-6.master'
--- osx/applescript-seticon-10-6.master 2012-06-09 19:02:47 +0000
+++ osx/applescript-seticon-10-6.master 1970-01-01 00:00:00 +0000
@@ -1,41 +0,0 @@
-on saveImageWithItselfAsIcon(icon_image_file)
- -- save icon_image_file with itself as icon
- set icon_image_file_string to icon_image_file as string
- tell application "Image Events"
- launch
- set icon_image to open file icon_image_file_string
- save icon_image with icon
- close icon_image
- end tell
-end saveImageWithItselfAsIcon
-
-on copyIconOfTo(aFileOrFolderWithIcon, aFileOrFolder)
- tell application "Finder" to set f to aFileOrFolderWithIcon as alias
- -- grab the file's icon
- my CopyOrPaste(f, "c")
- -- now the icon is in the clipboard
- tell application "Finder" to set c to aFileOrFolder as alias
- my CopyOrPaste(result, "v")
-end copyIconOfTo
-
-on CopyOrPaste(i, cv)
- tell application "Finder"
- activate
- set infoWindow to open information window of i
- set infoWindowName to name of infoWindow
- end tell
- tell application "System Events" to tell process "Finder" to tell window infoWindowName
- keystroke tab -- select icon button
- keystroke (cv & "w") using command down (* (copy or paste) + close window *)
- end tell -- window 1 then process Finder then System Events
-end CopyOrPaste
-
-on run
- set icon_image_file to POSIX file "%s" as alias
- set dmg_file to POSIX file "%s" as alias
-
- my saveImageWithItselfAsIcon(icon_image_file)
- -- wait for virus scanner
- delay 2
- my copyIconOfTo(icon_image_file, dmg_file)
-end run
=== modified file 'osx/config.ini.default'
--- osx/config.ini.default 2012-06-09 19:02:47 +0000
+++ osx/config.ini.default 2012-06-26 20:27:21 +0000
@@ -1,6 +1,6 @@
[executables]
sphinx = sphinx-build
-pyinstaller = %(here)s/../pyinstaller/pyinstaller.py
+pyinstaller = %(projects)s/pyinstaller/pyinstaller.py
lrelease = lrelease
diskutil = diskutil
hdiutil = hdiutil
=== modified file 'osx/macosx-builder.py'
--- osx/macosx-builder.py 2012-06-09 19:02:47 +0000
+++ osx/macosx-builder.py 2012-06-26 20:27:21 +0000
@@ -205,14 +205,13 @@
"""
parser = ArgumentParser()
parser.add_argument('-b', '--branch', metavar='BRANCH', dest='branch',
- help='Specify the path to the branch you wish to build.',
- default='../trunk')
+ help='Specify the path to the branch you wish to build.')
parser.add_argument('--devel', dest='devel',
action='store_true', default=False,
help='Development build does not have set icons for .dmg file '
'and .dmg filename contains bzr revision number.')
parser.add_argument('-d', '--documentation', metavar='DOCS',
- dest='docs', default=os.path.join('..', 'documentation'),
+ dest='docs',
help='Specify the path to the documentation branch.')
parser.add_argument('-c', '--config', metavar='CONFIG', dest='config',
help='Specify the path to the configuration file.',
@@ -226,6 +225,10 @@
parser.add_argument('--transifex',
dest='update_translations', action='store_true', default=False,
help='Update the language translation from Transifex.')
+ parser.add_argument('--transifex-user',
+ dest='transifex_user', help='Transifex username.')
+ parser.add_argument('--transifex-pass',
+ dest='transifex_pass', help='Transifex password.')
parser.add_argument('-v', '--verbose', dest='verbose',
action='store_true', default=False,
help='Print out additional information.')
@@ -236,7 +239,9 @@
Read the configuration from the configuration file.
"""
self.config = ConfigParser(defaults={
- u'here': self.script_path
+ u'here': self.script_path,
+ u'projects': os.path.abspath(os.path.join(self.script_path,
+ '..', '..')),
})
self.config.read(os.path.abspath(self.args.config))
@@ -264,18 +269,16 @@
Set up a variety of paths that we use throughout the build process.
"""
if self.args.branch:
- branch_path = self.args.branch
+ self.branch_path = os.path.abspath(self.args.branch)
else:
- branch_path = self.config.get(u'paths', u'branch')
- self.branch_path = os.path.abspath(branch_path)
+ self.branch_path = self.config.get(u'paths', u'branch')
if self.args.docs:
- docs_path = self.args.docs
+ self.docs_path = os.path.abspath(self.args.docs)
else:
- docs_path = self.config.get(u'paths', u'documentation')
- self.docs_path = os.path.abspath(docs_path)
+ self.docs_path = self.config.get(u'paths', u'documentation')
self.openlp_script = os.path.abspath(
- os.path.join(branch_path, u'openlp.pyw'))
+ os.path.join(self.branch_path, u'openlp.pyw'))
self.hooks_path = os.path.abspath(os.path.join(
self.branch_path, self.config.get(u'paths', u'hooks')))
self.mac_icon = os.path.abspath(
@@ -371,9 +374,9 @@
raise Exception(u'Error running bzr log')
output_ascii = unicode(output, errors=u'ignore')
latest = output_ascii.split(u':')[0]
- version_string = latest == revision and tag or \
- u'%s-bzr%s' % (tag, latest)
+ version_string = u'%s-bzr%s' % (tag, latest)
self.version_string = version_string
+ self.version_tag = tag
version_file = open(os.path.join(self.dist_path, u'.version'), u'w')
version_file.write(version_string)
version_file.close()
@@ -450,8 +453,14 @@
raise Exception(u'No option named "username" found.')
if not self.config.has_option('transifex', 'password'):
raise Exception(u'No option named "password" found.')
- username = self.config.get(u'transifex', u'username')
- password = self.config.get(u'transifex', u'password')
+ if self.args.transifex_user:
+ username = self.args.transifex_user
+ else:
+ username = self.config.get(u'transifex', u'username')
+ if self.args.transifex_pass:
+ password = self.args.transifex_pass
+ else:
+ password = self.config.get(u'transifex', u'password')
os.chdir(os.path.split(self.i18n_utils)[0])
translation_utils = Popen([self.python, self.i18n_utils, u'-qdpu',
u'-U', username, u'-P', password])
@@ -513,7 +522,12 @@
"""
self._print(u'Creating dmg file...')
- dmg_name = 'OpenLP-' + self.version_string + '.dmg'
+ # Release version does not contain revision in .dmg name.
+ if self.args.devel:
+ dmg_name = 'OpenLP-' + self.version_string + '.dmg'
+ else:
+ dmg_name = 'OpenLP-' + self.version_tag + '.dmg'
+
dmg_file = os.path.join(self.branch_path, 'build', dmg_name)
# Remove dmg if it exists.
if os.path.exists(dmg_file):
@@ -548,13 +562,33 @@
u'Could not copy app bundle, dmg creation failed.'
)
- self._print('... Copying the background image.')
- os.mkdir(os.path.join(dmg_volume_path, '.background'))
- self._run_command(['cp', self.dmg_background_img,
- os.path.join(dmg_volume_path,
- '.background/installer-background.png')],
- u'Could not copy the background image, dmg creation failed.'
+ # Set icon for dmg file.
+ # http://endrift.com/blog/2010/06/14/dmg-files-volume-icons-cli/
+ self._print('... Setting the dmg icon.')
+ dmg_icon = os.path.join(dmg_volume_path, '.VolumeIcon.icns')
+ self._run_command(['cp', self.mac_icon, dmg_icon],
+ u'Could not copy the dmg icon file, dmg creation failed.'
)
+ # Set proper dmg icon attributes.
+ self._run_command(['SetFile', '-c', 'icnC', dmg_icon],
+ 'Could not set dmg icon attributes.')
+ # Ensures dmg icon will be used while mounted.
+ self._run_command(['SetFile', '-a', 'C', dmg_volume_path],
+ 'Could not set dmg icon attributes.')
+
+ # Set dmg background. Requires running Mac OS X gui.
+ # TODO: better formatting and code refactoring
+ if not self.args.devel:
+ self._print('... Setting the background image.')
+
+ os.mkdir(os.path.join(dmg_volume_path, '.background'))
+ self._run_command(['cp', self.dmg_background_img,
+ os.path.join(dmg_volume_path,
+ '.background/installer-background.png')],
+ u'Could not copy the background image, dmg creation failed.'
+ )
+
+ self.adjust_dmg_view(os.path.basename(dmg_volume_path))
# Unmount dmg file.
self._print('... unmounting the dmg.')
@@ -590,10 +624,23 @@
self._print('Finished creating dmg file, resulting file: %s' %
compressed_dmg)
- # TODO Reimplement following actions.
- #adjust_package_view(settings, adjustview_scriptname)
- #compress_view(settings, seticon_scriptname, dmg_file)
+ self.dmg_file = compressed_dmg
+ def adjust_dmg_view(self, dmg_volume_name):
+ try:
+ # TODO: Use only one applescript file. Remove one for osx 10.5.
+ f = open(os.path.join(self.script_path,
+ 'applescript-adjust-dmg-view.master'))
+ p = Popen([self.osascript], stdin=PIPE)
+ p.communicate(f.read() % (dmg_volume_name, 'OpenLP'))
+ f.close()
+ result = p.returncode
+ if (result != 0):
+ self._print('Adjusting dmg view failed.')
+ sys.exit(1)
+ except (IOError, OSError):
+ self._print('Adjusting dmg view failed.')
+ sys.exit(1)
def main(self):
"""
@@ -607,7 +654,7 @@
self._print_verbose(u'Source path: .............%s', self.source_path)
self._print_verbose(u'"dist.app" path: .........%s', self.dist_app_path)
self._print_verbose(u'"dist" path: .............%s', self.dist_path)
- self._print_verbose(u'"hooks" path: .............%s', self.hooks_path)
+ self._print_verbose(u'"hooks" path: ............%s', self.hooks_path)
self._print_verbose(u'PyInstaller: .............%s', self.pyinstaller)
self._print_verbose(u'Documentation branch path:%s', self.docs_path)
self._print_verbose(u'')
@@ -639,76 +686,3 @@
if __name__ == u'__main__':
MacosxBuilder().main()
-
-
-
-# TODO reimplement following options. They arenecessary for release builds.
-def compress_view(settings, seticon_scriptname, dmg_file):
- logging.info('[%s] setting icon of the dmg file...', script_name)
- try:
- f = open(seticon_scriptname)
- p = subp.Popen(["osascript"], stdin=subp.PIPE)
- p.communicate(f.read() % ((os.getcwd() + '/' +
- settings['openlp_dmg_icon_file']), dmg_file))
- f.close()
- result = p.returncode
- if (result != 0):
- logging.error('[%s] could not set the icon to the dmg file, \
- dmg creation failed!', script_name)
- sys.exit(1)
- except IOError, e:
- logging.error('[%s] could not adjust the view (%s), dmg creation \
- failed!', script_name, e)
- sys.exit(1)
- except OSError, e:
- logging.error('[%s] could not set the icon to the dmg file(%s), \
- dmg creation failed!', script_name, e)
- sys.exit(1)
-
-def adjust_package_view(settings, adjustview_scriptname):
- logging.info('[%s] making adjustments to the view...', script_name)
- try:
- f = open(adjustview_scriptname)
- p = subp.Popen(["osascript"], stdin=subp.PIPE)
- p.communicate(f.read() % ((os.getcwd() + '/' + \
- settings['openlp_dmg_icon_file']),
- settings['openlp_appname'],
- settings['openlp_appname'],
- settings['openlp_appname']))
- f.close()
- result = p.returncode
- if (result != 0):
- logging.error('[%s] could not adjust the view, dmg creation \
- failed!', script_name)
- sys.exit(1)
- except IOError, e:
- logging.error('[%s] could not adjust the view (%s), dmg creation \
- failed!', script_name, e)
- sys.exit(1)
- except OSError, e:
- logging.error('[%s] could not adjust the view (%s), dmg creation \
- failed!', script_name, e)
- sys.exit(1)
-
-def old_main():
-
- version = platform.mac_ver()[0]
- # we only need the differenciation between leopard and snow leopard
- if version.startswith("10.6") or version.startswith("10.7"):
- SNOWLEOPARD = True
- logging.info('[%s] using snow leopard scripts (version = %s)',
- script_name, version)
- adjustview_scriptname = "applescript-adjustview-10-6.master"
- seticon_scriptname = "applescript-seticon-10-6.master"
- else:
- SNOWLEOPARD = False
- logging.info('[%s] using leopard scripts (version = %s)', script_name,
- version)
- adjustview_scriptname = "applescript-adjustview-10-5.master"
- seticon_scriptname = "applescript-seticon-10-5.master"
-
- if not os.path.isfile(adjustview_scriptname) \
- or not os.path.isfile(seticon_scriptname):
- logging.error('[%s] could not find apple scripts for given OS X '
- + 'version %s', script_name, version)
- sys.exit(1)
Follow ups