diff options
Diffstat (limited to 'indra/newview/viewer_manifest.py')
-rw-r--r-- | indra/newview/viewer_manifest.py | 130 |
1 files changed, 116 insertions, 14 deletions
diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index f0b1973fdf..0a21d8714c 100644 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -31,6 +31,7 @@ import os.path import re import tarfile import time +import random viewer_dir = os.path.dirname(__file__) # 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/util')) @@ -62,6 +63,26 @@ class ViewerManifest(LLManifest): # include the entire shaders directory recursively self.path("shaders") + # include the extracted list of contributors + contributor_names = self.extract_names("../../doc/contributions.txt") + self.put_in_file(contributor_names, "contributors.txt") + # include the extracted list of translators + translator_names = self.extract_names("../../doc/translations.txt") + self.put_in_file(translator_names, "translators.txt") + # include the list of Lindens (if any) + # see https://wiki.lindenlab.com/wiki/Generated_Linden_Credits + linden_names_path = os.getenv("linden_credits") + if linden_names_path : + try: + linden_file = open(linden_names_path,'r') + # all names should be one line, but the join below also converts to a string + linden_names = ', '.join(linden_file.readlines()) + self.put_in_file(linden_names, "lindens.txt") + linden_file.close() + except IOError: + print "No Linden names found at '%s', using built-in list" % linden_names_path + pass + # ... and the entire windlight directory self.path("windlight") self.end_prefix("app_settings") @@ -114,6 +135,16 @@ class ViewerManifest(LLManifest): # Files in the newview/ directory self.path("gpu_table.txt") + # The summary.json file gets left in the base checkout dir by + # build.sh. It's only created for a build.sh build, therefore we + # have to check whether it exists. :-P + summary_json = "summary.json" + summary_json_path = os.path.join(os.pardir, os.pardir, summary_json) + if os.path.exists(os.path.join(self.get_src_prefix(), summary_json_path)): + self.path(summary_json_path, summary_json) + else: + print "No %s" % os.path.join(self.get_src_prefix(), summary_json_path) + def login_channel(self): """Channel reported for login and upgrade purposes ONLY; used for A/B testing""" @@ -133,6 +164,21 @@ class ViewerManifest(LLManifest): def channel_lowerword(self): return self.channel_oneword().lower() + def icon_path(self): + icon_path="icons/" + channel_type=self.channel_lowerword() + if channel_type == 'release' \ + or channel_type == 'development' \ + : + icon_path += channel_type + elif channel_type == 'betaviewer' : + icon_path += 'beta' + elif re.match('project.*',channel_type) : + icon_path += 'project' + else : + icon_path += 'test' + return icon_path + def flags_list(self): """ Convenience function that returns the command-line flags for the grid""" @@ -164,6 +210,28 @@ class ViewerManifest(LLManifest): return " ".join((channel_flags, grid_flags, setting_flags)).strip() + def extract_names(self,src): + try: + contrib_file = open(src,'r') + except IOError: + print "Failed to open '%s'" % src + raise + lines = contrib_file.readlines() + contrib_file.close() + + # All lines up to and including the first blank line are the file header; skip them + lines.reverse() # so that pop will pull from first to last line + while not re.match("\s*$", lines.pop()) : + pass # do nothing + + # A line that starts with a non-whitespace character is a name; all others describe contributions, so collect the names + names = [] + for line in lines : + if re.match("\S", line) : + names.append(line.rstrip()) + # It's not fair to always put the same people at the head of the list + random.shuffle(names) + return ', '.join(names) class WindowsManifest(ViewerManifest): def final_exe(self): @@ -253,25 +321,38 @@ class WindowsManifest(ViewerManifest): #self.disable_manifest_check() self.path(src="../viewer_components/updater/scripts/windows/update_install.bat", dst="update_install.bat") - # Get shared libs from the shared libs staging directory if self.prefix(src=os.path.join(os.pardir, 'sharedlibs', self.args['configuration']), dst=""): #self.enable_crt_manifest_check() - + # Get llcommon and deps. If missing assume static linkage and continue. try: self.path('llcommon.dll') self.path('libapr-1.dll') self.path('libaprutil-1.dll') self.path('libapriconv-1.dll') + except RuntimeError, err: print err.message print "Skipping llcommon.dll (assuming llcommon was linked statically)" #self.disable_manifest_check() + # Mesh 3rd party libs needed for auto LOD and collada reading + try: + if self.args['configuration'].lower() == 'debug': + self.path("libcollada14dom22-d.dll") + else: + self.path("libcollada14dom22.dll") + + self.path("glod.dll") + except RuntimeError, err: + print err.message + print "Skipping COLLADA and GLOD libraries (assumming linked statically)" + + # Get fmod dll, continue if missing try: self.path("fmod.dll") @@ -322,7 +403,7 @@ class WindowsManifest(ViewerManifest): self.path("featuretable_xp.txt") #self.enable_no_crt_manifest_check() - + # Media plugins - QuickTime if self.prefix(src='../media_plugins/quicktime/%s' % self.args['configuration'], dst="llplugin"): self.path("media_plugin_quicktime.dll") @@ -586,12 +667,11 @@ class DarwinManifest(ViewerManifest): self.path("featuretable_mac.txt") self.path("SecondLife.nib") - # If we are not using the default channel, use the 'Firstlook - # icon' to show that it isn't a stable release. - if self.default_channel() and self.default_grid(): + icon_path = self.icon_path() + if self.prefix(src=icon_path, dst="") : self.path("secondlife.icns") - else: - self.path("secondlife_firstlook.icns", "secondlife.icns") + self.end_prefix(icon_path) + self.path("SecondLife.nib") # Translations @@ -636,6 +716,8 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.dylib", "libexpat.1.5.2.dylib", "libexception_handler.dylib", + "libGLOD.dylib", + "libcollada14dom.dylib" ): self.path(os.path.join(libdir, libfile), libfile) @@ -667,6 +749,8 @@ class DarwinManifest(ViewerManifest): "libaprutil-1.0.dylib", "libexpat.1.5.2.dylib", "libexception_handler.dylib", + "libGLOD.dylib", + "libcollada14dom.dylib" ): target_lib = os.path.join('../../..', libfile) self.run_command("ln -sf %(target)r %(link)r" % @@ -706,6 +790,7 @@ class DarwinManifest(ViewerManifest): self.run_command('strip -S %(viewer_binary)r' % { 'viewer_binary' : self.dst_path_of('Contents/MacOS/Second Life')}) + def copy_finish(self): # Force executable permissions to be set for scripts # see CHOP-223 and http://mercurial.selenic.com/bts/issue1802 @@ -767,9 +852,7 @@ class DarwinManifest(ViewerManifest): # will use the release .DS_Store, and will look broken. # - Ambroff 2008-08-20 dmg_template = os.path.join( - 'installers', - 'darwin', - '%s-dmg' % "".join(self.channel_unique().split()).lower()) + 'installers', 'darwin', '%s-dmg' % self.channel_lowerword()) if not os.path.exists (self.src_path_of(dmg_template)): dmg_template = os.path.join ('installers', 'darwin', 'release-dmg') @@ -825,7 +908,6 @@ class LinuxManifest(ViewerManifest): def construct(self): super(LinuxManifest, self).construct() self.path("licenses-linux.txt","licenses.txt") - self.path("res/ll_icon.png","secondlife_icon.png") if self.prefix("linux_tools", dst=""): self.path("client-readme.txt","README-linux.txt") self.path("client-readme-voice.txt","README-linux-voice.txt") @@ -851,6 +933,15 @@ class LinuxManifest(ViewerManifest): # recurse self.end_prefix("res-sdl") + # Get the icons based on the channel + icon_path = self.icon_path() + if self.prefix(src=icon_path, dst="") : + self.path("secondlife_256.png","secondlife_icon.png") + if self.prefix(src="",dst="res-sdl") : + self.path("secondlife_256.BMP","ll_icon.BMP") + self.end_prefix("res-sdl") + self.end_prefix(icon_path) + self.path("../viewer_components/updater/scripts/linux/update_install", "bin/update_install") # plugins @@ -936,12 +1027,15 @@ class Linux_i686Manifest(LinuxManifest): self.path("libbreakpad_client.so.0.0.0") self.path("libbreakpad_client.so.0") self.path("libbreakpad_client.so") + self.path("libcollada14dom.so") self.path("libdb-5.1.so") self.path("libdb-5.so") self.path("libdb.so") - self.path("libcrypto.so.0.9.8") + self.path("libcrypto.so.1.0.0") self.path("libexpat.so.1.5.2") - self.path("libssl.so.0.9.8") + self.path("libssl.so.1.0.0") + self.path("libglod.so") + self.path("libminizip.so") self.path("libuuid.so") self.path("libuuid.so.16") self.path("libuuid.so.16.0.22") @@ -956,6 +1050,9 @@ class Linux_i686Manifest(LinuxManifest): self.path("libopenal.so", "libopenal.so.1") self.path("libopenal.so", "libvivoxoal.so.1") # vivox's sdk expects this soname self.path("libfontconfig.so.1.4.4") + self.path("libtcmalloc.so", "libtcmalloc.so") #formerly called google perf tools + self.path("libtcmalloc.so.0", "libtcmalloc.so.0") #formerly called google perf tools + self.path("libtcmalloc.so.0.1.0", "libtcmalloc.so.0.1.0") #formerly called google perf tools try: self.path("libfmod-3.75.so") pass @@ -976,6 +1073,11 @@ class Linux_i686Manifest(LinuxManifest): self.path("libvivoxplatform.so") self.end_prefix("lib") + if self.args['buildtype'].lower() == 'release' and self.is_packaging_viewer(): + print "* Going strip-crazy on the packaged binaries, since this is a RELEASE build" + self.run_command("find %(d)r/bin %(d)r/lib -type f \\! -name update_install | xargs --no-run-if-empty strip -S" % {'d': self.get_dst_prefix()} ) # makes some small assumptions about our packaged dir structure + + class Linux_x86_64Manifest(LinuxManifest): def construct(self): super(Linux_x86_64Manifest, self).construct() |