1
0
Fork 0
forked from len0rd/rockbox

Support running NSIS from deployment script.

This requires a few workarounds since NSIS expects files in the source
folder but the build scripts run out-of-tree. Only added for Theme
Editor for now, since Rockbox Utility doesn't have a NSIS script yet
(and an installer for Rockbox Utility might not be that useful).

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27759 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Dominik Riebeling 2010-08-08 20:56:58 +00:00
parent e7951b1bab
commit 93c81dcd26
2 changed files with 40 additions and 6 deletions

View file

@ -24,7 +24,8 @@ deploy.project = "utils/themeeditor/themeeditor.pro"
deploy.svnserver = "svn://svn.rockbox.org/rockbox/"
deploy.svnpaths = \
[ "utils/themeeditor/",
"lib/skin_parser/" ]
"lib/skin_parser/",
"docs/COPYING" ]
deploy.useupx = False
deploy.bundlecopy = {
"resources/windowicon.icns" : "Contents/Resources/",
@ -46,6 +47,8 @@ else:
# all files of the program. Will get put into an archive after building
# (zip on w32, tar.bz2 on Linux). Does not apply on Mac which uses dmg.
deploy.programfiles = [ deploy.progexe ]
deploy.nsisscript = "utils/themeeditor/themeeditor.nsi"
deploy.nsissetup = "utils/themeeditor/rbthemeeditor-setup.exe"
deploy.deploy()

View file

@ -69,6 +69,8 @@ environment = os.environ
progexe = ""
make = "make"
programfiles = []
nsisscript = ""
nsissetup = ""
svnserver = ""
# Paths and files to retrieve from svn when creating a tarball.
@ -90,6 +92,8 @@ def usage(myself):
print " -a, --add=<file> add file to build folder before building"
print " -s, --source-only only create source archive"
print " -b, --binary-only only create binary archive"
if nsisscript != "":
print " -n, --makensis=<file> path to makensis for building Windows setup program."
if sys.platform != "darwin":
print " -d, --dynamic link dynamically instead of static"
print " -k, --keep-temp keep temporary folder on build failure"
@ -235,6 +239,28 @@ def upxfile(wd="."):
return 0
def runnsis(versionstring, nsis, srcfolder):
# run script through nsis to create installer.
print "Running NSIS ..."
# Assume the generated installer gets placed in the same folder the nsi
# script lives in. This seems to be a valid assumption unless the nsi
# script specifies a path. NSIS expects files relative to source folder so
# copy the relevant binaries.
for f in programfiles:
b = srcfolder + "/" + os.path.dirname(nsisscript) + "/" + os.path.dirname(f)
if not os.path.exists(b):
os.mkdir(b)
shutil.copy(srcfolder + "/" + f, b)
output = subprocess.Popen([nsis, srcfolder + "/" + nsisscript], stdout=subprocess.PIPE)
output.communicate()
if not output.returncode == 0:
print "NSIS failed!"
return -1
setupfile = program + "-" + versionstring + "-setup.exe"
shutil.copy(srcfolder + "/" + nsissetup, setupfile)
return 0
def zipball(versionstring, buildfolder):
'''package created binary'''
print "Creating binary zipball."
@ -345,8 +371,8 @@ def deploy():
startup = time.time()
try:
opts, args = getopt.getopt(sys.argv[1:], "q:p:t:a:sbdkh",
["qmake=", "project=", "tag=", "add=", "source-only", "binary-only", "dynamic", "keep-temp", "help"])
opts, args = getopt.getopt(sys.argv[1:], "q:p:t:a:n:sbdkh",
["qmake=", "project=", "tag=", "add=", "makensis=", "source-only", "binary-only", "dynamic", "keep-temp", "help"])
except getopt.GetoptError, err:
print str(err)
usage(sys.argv[0])
@ -360,6 +386,7 @@ def deploy():
binary = True
source = True
keeptemp = False
makensis = ""
if sys.platform != "darwin":
static = True
else:
@ -375,6 +402,8 @@ def deploy():
svnbase = svnserver + "tags/" + tag + "/"
if o in ("-a", "--add"):
addfiles.append(a)
if o in ("-n", "--makensis"):
makensis = a
if o in ("-s", "--source-only"):
binary = False
if o in ("-b", "--binary-only"):
@ -461,6 +490,7 @@ def deploy():
if not build(sourcefolder) == 0:
tempclean(workfolder, cleanup and not keeptemp)
sys.exit(1)
buildtime = time.time() - buildstart
if sys.platform == "win32":
if useupx == True:
if not upxfile(sourcefolder) == 0:
@ -473,6 +503,8 @@ def deploy():
if os.uname()[4].endswith("64"):
ver += "-64bit"
archive = tarball(ver, sourcefolder)
if nsisscript != "" and makensis != "":
runnsis(ver, makensis, sourcefolder)
# remove temporary files
tempclean(workfolder, cleanup)
@ -484,11 +516,10 @@ def deploy():
filestats(archivename)
filestats(archive)
duration = time.time() - startup
building = time.time() - buildstart
durmins = (int)(duration / 60)
dursecs = (int)(duration % 60)
buildmins = (int)(building / 60)
buildsecs = (int)(building % 60)
buildmins = (int)(buildtime / 60)
buildsecs = (int)(buildtime % 60)
print "Overall time %smin %ssec, building took %smin %ssec." % \
(durmins, dursecs, buildmins, buildsecs)