diff --git a/indra/cmake/CopyWinLibs.cmake b/indra/cmake/CopyWinLibs.cmake index f588e7203..7f47f60b7 100644 --- a/indra/cmake/CopyWinLibs.cmake +++ b/indra/cmake/CopyWinLibs.cmake @@ -6,13 +6,13 @@ include(CMakeCopyIfDifferent) -#if (WORD_SIZE EQUAL 32) -# set(debug_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") -# set(release_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") -#else (WORD_SIZE EQUAL 32) +if(WORD_SIZE EQUAL 32) + set(debug_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/debug") + set(release_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/i686-win32/lib/release") +else(WORD_SIZE EQUAL 32) set(debug_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/x86_64-win/lib/debug") set(release_libs_dir "${CMAKE_SOURCE_DIR}/../libraries/x86_64-win/lib/release") -#endif WORD_SIZE EQUAL 32) +endif(WORD_SIZE EQUAL 32) set(vivox_src_dir "${CMAKE_SOURCE_DIR}/newview/vivox-runtime/i686-win32") set(vivox_files @@ -214,7 +214,6 @@ set(all_targets ${all_targets} ${out_targets}) set(release_src_dir "${release_libs_dir}") set(release_files -# libtcmalloc_minimal.dll libhunspell.dll libapr-1.dll libaprutil-1.dll @@ -225,6 +224,13 @@ set(release_files glod.dll ) +if(WORD_SIZE EQUAL 32) + set(release_files ${release_files} + libtcmalloc_minimal.dll + ) +endif(WORD_SIZE EQUAL 32) + + if(FMODEX) if (WORD_SIZE EQUAL 32) set(fmodex_dll_file "fmodex.dll") diff --git a/indra/lib/python/indra/util/llmanifest.py b/indra/lib/python/indra/util/llmanifest.py index 11945a239..1522e3e9a 100644 --- a/indra/lib/python/indra/util/llmanifest.py +++ b/indra/lib/python/indra/util/llmanifest.py @@ -192,6 +192,8 @@ def usage(srctree=""): arg['description'] % nd) def main(): + print "cwd:", os.getcwd() + print " ".join(sys.argv) option_names = [arg['name'] + '=' for arg in ARGUMENTS] option_names.append('help') options, remainder = getopt.getopt(sys.argv[1:], "", option_names) @@ -266,7 +268,7 @@ class LLManifest(object): __metaclass__ = LLManifestRegistry manifests = {} def for_platform(self, platform, arch = None): - if arch: + if arch and platform != "windows": platform = platform + '_' + arch return self.manifests[platform.lower()] for_platform = classmethod(for_platform) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 7ae9a2cf6..dad0d6bb5 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -1516,6 +1516,7 @@ if (WINDOWS) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --arch=${ARCH} --artwork=${ARTWORK_DIR} --branding_id=${VIEWER_BRANDING_ID} --build=${CMAKE_CURRENT_BINARY_DIR} @@ -1537,6 +1538,7 @@ if (WINDOWS) COMMAND ${PYTHON_EXECUTABLE} ARGS ${CMAKE_CURRENT_SOURCE_DIR}/viewer_manifest.py + --arch=${ARCH} --artwork=${ARTWORK_DIR} --actions=copy --branding_id=${VIEWER_BRANDING_ID} diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi index 8fa0a943c..7fb868205 100644 --- a/indra/newview/installers/windows/installer_template.nsi +++ b/indra/newview/installers/windows/installer_template.nsi @@ -63,7 +63,7 @@ LangString LanguageCode ${LANG_DUTCH} "nl" LangString LanguageCode ${LANG_PORTUGUESEBR} "pt" LangString LanguageCode ${LANG_SIMPCHINESE} "zh" -Name ${VIEWERNAME} +Name "${VIEWERNAME}" SubCaption 0 $(LicenseSubTitleSetup) ; override "license agreement" text @@ -71,7 +71,7 @@ BrandingText "Prepare to Implode!" ; bottom of window text Icon %%SOURCE%%\installers\windows\install_icon_singularity.ico UninstallIcon %%SOURCE%%\installers\windows\uninstall_icon_singularity.ico WindowIcon off ; show our icon in left corner -BGGradient 9090b0 000000 notext +# BGGradient 9090b0 000000 notext CRCCheck on ; make sure CRC is OK #InstProgressFlags smooth colored ; new colored smooth look InstProgressFlags @@ -80,7 +80,7 @@ ShowInstDetails show ; no details, no "show" button SetOverwrite on ; stomp files by default AutoCloseWindow true ; after all files install, close window -InstallDir "$PROGRAMFILES\${INSTNAME}" +InstallDir "%%INSTALLDIR%%" InstallDirRegKey HKEY_LOCAL_MACHINE "SOFTWARE\Linden Research, Inc.\${INSTNAME}" "" DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index b3d3bb508..3bfdd152f 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -176,6 +176,9 @@ class ViewerManifest(LLManifest): return " ".join((channel_flags, grid_flags, setting_flags)).strip() class WindowsManifest(ViewerManifest): + def is_win64(self): + return self.args.get('arch') == "x86_64" + def final_exe(self): return self.channel_oneword() + 'Viewer.exe' @@ -185,6 +188,11 @@ class WindowsManifest(ViewerManifest): # the final exe is complicated because we're not sure where it's coming from, # nor do we have a fixed name for the executable self.path(src='%s/secondlife-bin.exe' % self.args['configuration'], dst=self.final_exe()) + + if self.is_win64(): + release_lib_dir = "../../libraries/x86_64-win/lib/release" + else: + release_lib_dir = "../../libraries/i686-win32/lib/release" # Plugin host application self.path(os.path.join(os.pardir, @@ -192,7 +200,7 @@ class WindowsManifest(ViewerManifest): "SLPlugin.exe") # Plugin volume control - if self.prefix(src=self.args['configuration'], dst=""): + if not self.is_win64() and self.prefix(src=self.args['configuration'], dst=""): self.path("winmm.dll") self.end_prefix() @@ -216,7 +224,7 @@ class WindowsManifest(ViewerManifest): #is shipped with windows anyway # For using FMOD for sound... DJS - #~if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): + #~if self.prefix(src=release_lib_dir, dst=""): #~try: #~self.path("fmod.dll") #~pass @@ -226,7 +234,7 @@ class WindowsManifest(ViewerManifest): #~self.end_prefix() # For textures - #if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): + #if self.prefix(src=release_lib_dir, dst=""): # self.path("openjpeg.dll") # self.end_prefix() @@ -246,7 +254,7 @@ class WindowsManifest(ViewerManifest): self.end_prefix() # For WebKit/Qt plugin runtimes - if self.prefix(src="../../libraries/i686-win32/lib/release", dst="llplugin"): + if self.prefix(src=release_lib_dir, dst="llplugin"): self.path("libeay32.dll") self.path("qtcore4.dll") self.path("qtgui4.dll") @@ -258,7 +266,7 @@ class WindowsManifest(ViewerManifest): self.end_prefix() # For WebKit/Qt plugin runtimes (image format plugins) - if self.prefix(src="../../libraries/i686-win32/lib/release/imageformats", dst="llplugin/imageformats"): + if self.prefix(src=release_lib_dir+"/imageformats", dst="llplugin/imageformats"): self.path("qgif4.dll") self.path("qico4.dll") self.path("qjpeg4.dll") @@ -267,7 +275,7 @@ class WindowsManifest(ViewerManifest): self.path("qtiff4.dll") self.end_prefix() - if self.prefix(src="../../libraries/i686-win32/lib/release/codecs", dst="llplugin/codecs"): + if self.prefix(src=release_lib_dir+"/codecs", dst="llplugin/codecs"): self.path("qcncodecs4.dll") self.path("qjpcodecs4.dll") self.path("qkrcodecs4.dll") @@ -282,7 +290,7 @@ class WindowsManifest(ViewerManifest): print err.message print "Skipping llcommon.dll (assuming llcommon was linked statically)" self.end_prefix() - if self.prefix(src="../../libraries/i686-win32/lib/release", dst=""): + if self.prefix(src=release_lib_dir, dst=""): self.path("libeay32.dll") self.path("ssleay32.dll") try: @@ -294,10 +302,11 @@ class WindowsManifest(ViewerManifest): self.end_prefix() # For google-perftools tcmalloc allocator. - self.path("../../libraries/i686-win32/lib/release/libtcmalloc_minimal.dll", dst="libtcmalloc_minimal.dll") + if not self.is_win64(): + self.path(release_lib_dir+"/libtcmalloc_minimal.dll", dst="libtcmalloc_minimal.dll") try: - if self.prefix("../../libraries/i686-win32/lib/release/msvcrt", dst=""): + if self.prefix(release_lib_dir+"/msvcrt", dst=""): self.path("*.dll") self.path("*.manifest") self.end_prefix() @@ -386,6 +395,13 @@ class WindowsManifest(ViewerManifest): prev = d return result + + def installer_file(self): + if self.is_win64(): + mask = "%s_%s_x86-64_Setup.exe" + else: + mask = "%s_%s_Setup.exe" + return mask % (self.channel_oneword(), '-'.join(self.args['version'])) def package_finish(self): # a standard map of strings for replacing in the templates @@ -401,6 +417,9 @@ class WindowsManifest(ViewerManifest): 'channel':self.channel(), 'channel_oneword':self.channel_oneword(), 'channel_unique':self.channel_unique(), + 'inst_name':self.channel_oneword() + ' (64 bit)' if self.is_win64() else self.channel_oneword(), + 'installer_file':self.installer_file(), + 'viewer_name': "%s%s" % (self.channel(), " (64 bit)" if self.is_win64() else "" ), } version_vars = """ @@ -409,13 +428,13 @@ class WindowsManifest(ViewerManifest): !define VERSION_LONG "%(version)s" !define VERSION_DASHES "%(version_dashes)s" """ % substitution_strings - installer_file = "%(channel_oneword)s_%(version_dashes)s_Setup.exe" + installer_file = "%(installer_file)s" grid_vars_template = """ OutFile "%(installer_file)s" - !define VIEWERNAME "%(channel)s" + !define VIEWERNAME "%(viewer_name)s" !define INSTFLAGS "%(flags)s" - !define INSTNAME "%(channel_oneword)s" - !define SHORTCUT "%(channel)s Viewer" + !define INSTNAME "%(inst_name)s" + !define SHORTCUT "%(viewer_name)s Viewer" !define URLNAME "secondlife" !define INSTALL_ICON "install_icon_singularity.ico" !define UNINSTALL_ICON "install_icon_singularity.ico" @@ -435,7 +454,9 @@ class WindowsManifest(ViewerManifest): "%%SOURCE%%":self.get_src_prefix(), "%%GRID_VARS%%":grid_vars_template % substitution_strings, "%%INSTALL_FILES%%":self.nsi_file_commands(True), - "%%DELETE_FILES%%":self.nsi_file_commands(False)}) + "%%DELETE_FILES%%":self.nsi_file_commands(False), + "%%INSTALLDIR%%":"%s\\%s" % ('$PROGRAMFILES64' if self.is_win64() else '$PROGRAMFILES', self.channel_oneword()), + }) # We use the Unicode version of NSIS, available from # http://www.scratchpaper.com/