diff options
author | Eike Ziller <eike.ziller@digia.com> | 2012-09-26 12:04:46 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@digia.com> | 2012-09-28 09:35:08 +0200 |
commit | 154f6c859ea9f0fb35f3a8e2ad9566fd9126d3ab (patch) | |
tree | f581cf4a81e5336b26d65ef718d78d3100f90fa8 /scripts | |
parent | 14a2ff598aec6af17299580468e75a95055c8894 (diff) | |
download | qt-creator-154f6c859ea9f0fb35f3a8e2ad9566fd9126d3ab.tar.gz |
Add installer target.
Requires Qt Installer Framwork (IFW)
Change-Id: Id78c05f86cc104d29d4ed3ba02baefa20d49fe4f
Reviewed-by: Tim Jenssen <tim.jenssen@digia.com>
Diffstat (limited to 'scripts')
-rwxr-xr-x | scripts/packageIfw.py | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/scripts/packageIfw.py b/scripts/packageIfw.py new file mode 100755 index 0000000000..b78cb548f2 --- /dev/null +++ b/scripts/packageIfw.py @@ -0,0 +1,132 @@ +#!/usr/bin/env python +################################################################################ +# Copyright (c) 2011 Nokia Corporation +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright notice, +# this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# * Neither the name of Nokia Corporation, nor the names of its contributors +# may be used to endorse or promote products derived from this software +# without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 'AS IS' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +################################################################################ + +import os +import sys +import datetime +import getopt +import subprocess +import fnmatch +import tempfile +import shutil +import inspect + +def usage(): + print 'Usage: %s [-v|--version-string=versionstring] [-i|--installer-path=/path/to/installerfw] [-a|--archive=archive.7z] <outputname>' % os.path.basename(sys.argv[0]) + +def substitute_file(infile, outfile, substitutions): + with open(infile, 'r') as f: + template = f.read() + with open(outfile, 'w') as f: + f.write(template.format(**substitutions)) + +def ifw_template_dir(): + script_dir = os.path.dirname(inspect.getfile(inspect.currentframe())) + source_dir = os.path.normpath(os.path.join(script_dir, '..')); + return os.path.normpath(os.path.join(source_dir, 'dist', 'installer', 'ifw')) + +def main(): + try: + opts, args = getopt.gnu_getopt(sys.argv[1:], 'hv:i:a:', ['help', 'version-string=', 'installer-path=', 'archive']) + except: + usage() + sys.exit(2) + + if len(args) < 1: + usage() + sys.exit(2) + + version = '' + ifw_location = '' + archive = '' + for o, a in opts: + if o in ('-h', '--help'): + usage() + sys.exit(0) + if o in ('-v', '--version-string'): + version = a + if o in ('-i', '--installer-path'): + ifw_location = a + if o in ('-a', '--archive'): + archive = a + + if (version == ''): + raise Exception('Version not specified (--version-string)!') + + if (ifw_location == ''): + raise Exception('Installer framework location not specified (--installer-path)!') + + if (archive == ''): + raise Exception('Archive not specified (--archive)!') + + installer_name = args[0] + if sys.platform == 'darwin': + installer_name = installer_name + '.dmg' + + try: + temp_dir = tempfile.mkdtemp() + except: + raise Exception('Failed to create a temporary directory!') + + try: + substs = {} + substs['version'] = version + substs['date'] = datetime.date.today().isoformat() + + template_dir = ifw_template_dir() + out_config_dir = os.path.join(temp_dir,'config') + out_packages_dir = os.path.join(temp_dir, 'packages') + + shutil.copytree(os.path.join(template_dir, 'packages'), os.path.join(temp_dir, 'packages')) + shutil.copytree(os.path.join(template_dir, 'config'), os.path.join(temp_dir, 'config')) + + for root, dirnames, filenames in os.walk(out_packages_dir): + for template in fnmatch.filter(filenames, '*.in'): + substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs) + os.remove(os.path.join(root, template)) + + for root, dirnames, filenames in os.walk(out_config_dir): + for template in fnmatch.filter(filenames, '*.in'): + substitute_file(os.path.join(root, template), os.path.join(root, template[:-3]), substs) + os.remove(os.path.join(root, template)) + + data_path = os.path.join(out_packages_dir, 'org.qtproject.qtcreator.application', 'data') + if not os.path.exists(data_path): + os.makedirs(data_path) + shutil.copy(archive, data_path) + + ifw_call = [os.path.join(ifw_location, 'bin', 'binarycreator'), '-c', os.path.join(out_config_dir, 'config.xml'), '-p', out_packages_dir, installer_name, '--offline-only' ] + subprocess.check_call(ifw_call, stderr=subprocess.STDOUT) + finally: + print 'Cleaning up...' + shutil.rmtree(temp_dir) + print 'Done.' + +if __name__ == '__main__': + main() |