sbsv2/raptor/util/install-windows/raptorinstallermaker.py
author timothy.murphy@nokia.com
Thu, 25 Mar 2010 13:43:28 +0000
branchfix
changeset 408 a819f9223567
parent 143 a00bdef52597
child 338 9372474d4b07
permissions -rw-r--r--
fix: stop using "magic" numbers in string operations for the copyannofile2log feature fix: When using the copylogfromannofile workaround, extract the build ID and build duration and add to the log as these are useful for analysis. The log should now be identical to the stdout file. fix: Remove extra blank lines from output in copylogfromannofile mode.

#
# Copyright (c) 2009-2010 Nokia Corporation and/or its subsidiary(-ies).
# All rights reserved.
# This component and the accompanying materials are made available
# under the terms of the License "Eclipse Public License v1.0"
# which accompanies this distribution, and is available
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
#
# Initial Contributors:
# Nokia Corporation - initial contribution.
#
# Contributors:
#
# Description: 
#
#! python

# Raptor installer maker!

import os
import os.path
import subprocess
import re
import optparse
import sys
import tempfile
import shutil
import unzip

tempdir = ""

parser = optparse.OptionParser()
parser.add_option("-s", "--sbs-home", dest="sbshome",
                  help="Path to use as SBS_HOME environment variable. If not present the script exits.")
parser.add_option("-w", "--win32-support", dest="win32support",
                  help="Path to Win32 support directory. If not present the script exits.")

(options, args) = parser.parse_args()

if options.sbshome == None:
	print "ERROR: no SBS_HOME passed in. Exiting..."
	sys.exit(2)

if options.win32support == None:
	print "ERROR: no win32support directory specified. Unable to proceed. Exiting..."
	sys.exit(2)
else:
	# Required irectories inside the win32-support repository
	win32supportdirs = ["bv", "cygwin", "mingw", "python264"]
	for dir in win32supportdirs:
		if not os.path.isdir(os.path.join(options.win32support, dir)):
			print "ERROR: directory %s does not exist. Cannot build installer. Exiting..." % dir
			sys.exit(2)

def parseconfig(xmlFile="raptorinstallermaker.xml"):
	pass

def generateinstallerversionheader(sbshome = None):
	shellenv = os.environ.copy()
	shellenv["PYTHONPATH"] = os.path.join(sbshome, "python")
	
	raptorversioncommand = "python -c \"import raptor_version; print raptor_version.numericversion()\""
	
	# Raptor version is obtained from raptor_version module's numericversion function.
	sbs_version_matcher = re.compile(".*(\d+\.\d+\.\d+).*", re.I)
	
	# Create Raptor subprocess
	versioncommand = subprocess.Popen(raptorversioncommand, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=shellenv)
	raptorversion = ""
	# Get all the lines matching the RE
	for line in versioncommand.stdout.readlines():
		res = sbs_version_matcher.match(line)
		if res:
			raptorversion = res.group(1)
			print "Successfully determined Raptor version %s" % raptorversion

	versioncommand.wait() # Wait for process to end
	
	raptorversion_nsis_header_string = "# Raptor version file\n\n!define RAPTOR_VERSION %s\n" % raptorversion
	
	fh = open("raptorversion.nsh", "w")
	fh.write(raptorversion_nsis_header_string)
	fh.close()
	print "Wrote raptorversion.nsh"
	return 0
	
def unzipnsis(pathtozip):
    global tempdir
    tempdir = tempfile.mkdtemp()
    un = unzip.unzip()
    print "Unzipping NSIS to %s..." % tempdir
    un.extract(pathtozip, tempdir)
    print "Done."
    
    return os.path.join(tempdir, "NSIS", "makensis.exe")
    
def runmakensis(nsiscommand):
	# Create makensis subprocess
	print "Running NSIS command\n%s" % nsiscommand
	makensis = subprocess.Popen(nsiscommand, shell=True)
	makensis.wait() # Wait for process to end

def cleanup():
	""" Clean up tempdir """
	global tempdir
	print "Cleaning up temporary directory %s" % tempdir
	shutil.rmtree(tempdir,True)
	try:
		os.remove("raptorversion.nsh")
		print "Successfully deleted raptorversion.nsh."
	except:
		print "ERROR: failed to remove raptorversion.nsh - remove manually if needed."
	print "Done."

makensispath = unzipnsis(".\\NSIS.zip")
generateinstallerversionheader(options.sbshome)
nsiscommand = makensispath + " /DRAPTOR_LOCATION=%s /DWIN32SUPPORT=%s raptorinstallerscript.nsi" % (options.sbshome, options.win32support)
print "nsiscommand = %s" % nsiscommand
runmakensis(nsiscommand)
cleanup()