diff options
author | Ryan Williams <rdw@lindenlab.com> | 2007-02-28 00:16:34 +0000 |
---|---|---|
committer | Ryan Williams <rdw@lindenlab.com> | 2007-02-28 00:16:34 +0000 |
commit | 109cd6845b5ad338d3b10f3b482c5a8fc27000ba (patch) | |
tree | 410d3bd10447d6116218660a0ae72e5e90b9f6f3 | |
parent | b5342e238a96ee00d7d2afa3883b1596291587cc (diff) |
Mac .dmgs generated by the manifest have upper-case grid names again.
Refactored a lot of the command-line options so that it's more self-documenting. Now we have a --help option.
Created a separate action for creating unpackeds, which is not part of the default actions (yet). This should speed up the packaging process. In the process of doing this, I also made sure to enforce the constraint that no actions are performed on the files in the destination directory after the construct method ends. To accomplish this I simply moved some strip method calls up into the construct method.
Lastly, I added our copyright notice to installer_template.nsi, and fixed a reference to a non-existant variable. Hopefully this last won't cause spurious conflicts with Callum's work.
Reviewed by Richard.
Also, the tabs were a little screwed up in the python files, so I untabified and all is good.
-rw-r--r-- | indra/newview/installers/windows/installer_template.nsi | 14 | ||||
-rwxr-xr-x | indra/newview/viewer_manifest.py | 77 |
2 files changed, 41 insertions, 50 deletions
diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 6178cfbc96..8ab7c4fdae 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -1,10 +1,14 @@ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;;; secondlife setup.nsi
-;;; Copyright 2004-2006, Linden Research, Inc.
+;;; @file viewer_manifest.py
+;;; @author James Cook, Don Kjer
+;;; @brief NSIS script for creating a Windows installer.
+;;; This file has variables expanded by viewer_manifest.py
+;;; to produce the complete nsi script file.
;;; For info, see http://www.nullsoft.com/free/nsis/
-;;;
;;; NSIS 2.02 or higher required
-;;; Author: James Cook, Don Kjer
+;;;
+;;; Copyright (c) 2006-$CurrentYear$, Linden Research, Inc.
+;;; $License$
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
@@ -612,7 +616,7 @@ ShowUninstDetails show Section Uninstall
; Start with some default values.
-StrCpy $INSTFLAGS "${FARMFLAG}"
+StrCpy $INSTFLAGS "${INSTFLAGS}"
StrCpy $INSTPROG "${INSTNAME}"
StrCpy $INSTEXE "${INSTEXE}"
StrCpy $INSTSHORTCUT "${SHORTCUT}"
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 104d860c87..927856da2b 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -11,7 +11,7 @@ import os.path import re import tarfile viewer_dir = os.path.dirname(__file__) -# add llmanifest library to our path so you don't have to muck with PYTHONPATH +# add llmanifest library to our path so we don't have to muck with PYTHONPATH sys.path.append(os.path.join(viewer_dir, '../lib/python/indra')) from llmanifest import LLManifest, main, proper_windows_path, path_ancestors @@ -74,7 +74,7 @@ class ViewerManifest(LLManifest): elif(self.args['grid'] == 'firstlook'): return '-settings settings_firstlook.xml' else: - return ("-settings settings_beta.xml --%(grid)s -helperuri http://preview-%(grid)s.secondlife.com/helpers/" % {'grid':self.args['grid']}) + return ("-settings settings_beta.xml --%(grid)s -helperuri http://preview-%(grid)s.secondlife.com/helpers/" % {'grid':self.args['grid']}) def login_url(self): """ Convenience function that returns the appropriate login url for the grid""" @@ -92,16 +92,6 @@ class ViewerManifest(LLManifest): # set the login page to point to a url appropriate for the type of client self.replace_in("skins/xui/en-us/panel_login.xml", searchdict={'http://secondlife.com/app/login/':self.login_url()}) - def create_unpacked(self): - unpacked_file_name = "unpacked_%(plat)s_%(vers)s.tar" % { - 'plat':self.args['platform'], - 'vers':'_'.join(self.args['version'])} - print "Creating unpacked file:", unpacked_file_name - # could add a gz here but that doubles the time it takes to do this step - tf = tarfile.open(self.src_path_of(unpacked_file_name), 'w:') - # add the entire installation package, at the very top level - tf.add(self.get_dst_prefix(), "") - tf.close() class WindowsManifest(ViewerManifest): def final_exe(self): @@ -187,26 +177,25 @@ class WindowsManifest(ViewerManifest): result += 'File ' + pkg_file + '\n' else: result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n' - # at the end of a delete, just rmdir all the directories - if(not install): - deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list] - # find all ancestors so that we don't skip any dirs that happened to have no non-dir children - deleted_dirs = [] - for d in deleted_file_dirs: - deleted_dirs.extend(path_ancestors(d)) - # sort deepest hierarchy first - deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b)) - deleted_dirs.reverse() - prev = None - for d in deleted_dirs: - if d != prev: # skip duplicates - result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n' - prev = d + # at the end of a delete, just rmdir all the directories + if(not install): + deleted_file_dirs = [os.path.dirname(pair[1].replace(self.get_dst_prefix()+os.path.sep,'')) for pair in self.file_list] + # find all ancestors so that we don't skip any dirs that happened to have no non-dir children + deleted_dirs = [] + for d in deleted_file_dirs: + deleted_dirs.extend(path_ancestors(d)) + # sort deepest hierarchy first + deleted_dirs.sort(lambda a,b: cmp(a.count(os.path.sep),b.count(os.path.sep)) or cmp(a,b)) + deleted_dirs.reverse() + prev = None + for d in deleted_dirs: + if d != prev: # skip duplicates + result += 'RMDir ' + wpath(os.path.join('$INSTDIR', os.path.normpath(d))) + '\n' + prev = d return result def package_finish(self): - self.create_unpacked() version_vars_template = """ !define INSTEXE "%(final_exe)s" !define VERSION "%(version_short)s" @@ -227,7 +216,7 @@ class WindowsManifest(ViewerManifest): installer_file = "Second Life %(version_dashes)s (%(grid_caps)s) Setup.exe" grid_vars_template = """ OutFile "%(outfile)s" - !define INSTFLAGS "%(flags)s" + !define INSTFLAGS "%(flags)s" !define INSTNAME "SecondLife%(grid_caps)s" !define SHORTCUT "Second Life (%(grid_caps)s)" !define URLNAME "secondlife%(grid)s" @@ -255,7 +244,7 @@ class WindowsManifest(ViewerManifest): NSIS_path = 'C:\\Program Files\\NSIS\\makensis.exe' self.run_command('"' + proper_windows_path(NSIS_path) + '" ' + self.dst_path_of(tempfile)) -# self.remove(self.dst_path_of(tempfile)) + self.remove(self.dst_path_of(tempfile)) self.created_path(installer_file) @@ -268,9 +257,6 @@ class DarwinManifest(ViewerManifest): # Expand the tar file containing the assorted mozilla bits into # <bundle>/Contents/MacOS/ self.contents_of_tar('mozilla-universal-darwin.tgz', 'MacOS') -# self.run_command('tar -zx -C "%(macos)s" -f "%(tarfile)s"' % -# {'macos':self.ensure_dst_dir("MacOS"), -# 'tarfile':self.src_path_of("mozilla-universal-darwin.tgz")}) # replace the default theme with our custom theme (so scrollbars work). if self.prefix(src="mozilla-theme", dst="MacOS/chrome"): @@ -305,21 +291,21 @@ class DarwinManifest(ViewerManifest): self.end_prefix("Resources") self.end_prefix("Contents") - - - def package_finish(self): + # NOTE: the -S argument to strip causes it to keep enough info for # annotated backtraces (i.e. function names in the crash log). 'strip' with no # arguments yields a slightly smaller binary but makes crash logs mostly useless. # This may be desirable for the final release. Or not. - self.run_command('strip -S "%(viewer_binary)s"' % - { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')}) + if("package" in self.args['actions'] or + "unpacked" in self.args['actions']): + self.run_command('strip -S "%(viewer_binary)s"' % + { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')}) - self.create_unpacked() + def package_finish(self): imagename="SecondLife_" + '_'.join(self.args['version']) if(self.args['grid'] != ''): - imagename = imagename + '_' + self.args['grid'] + imagename = imagename + '_' + self.args['grid'].upper() sparsename = imagename + ".sparseimage" finalname = imagename + ".dmg" @@ -367,6 +353,12 @@ class LinuxManifest(ViewerManifest): # set proper login url self.replace_login_url() + # stripping all the libs removes a few megabytes from the end-user package + for s,d in self.file_list: + if re.search("lib/lib.+\.so.*", d): + self.run_command('strip -S %s' % d) + + def package_finish(self): if(self.args.has_key('installer_name')): installer_name = self.args['installer_name'] @@ -375,11 +367,6 @@ class LinuxManifest(ViewerManifest): if grid != '': installer_name += "_" + grid.upper() - # stripping all the libs removes a few megabytes from the end-user package - for s,d in self.file_list: - if re.search("lib/lib.+\.so.*", d): - self.run_command('strip -S %s' % d) - self.create_unpacked() # temporarily move directory tree so that it has the right name in the tarfile self.run_command("mv %(dst)s %(inst)s" % {'dst':self.get_dst_prefix(),'inst':self.src_path_of(installer_name)}) # --numeric-owner hides the username of the builder for security etc. |