diff --git a/autobuild.xml b/autobuild.xml index ff9768828b92997fc0c10bba14c4587fe09966bd..bf52db0031a8f7e1e41c3b6fe7ec8b158efae95c 100644 --- a/autobuild.xml +++ b/autobuild.xml @@ -819,6 +819,38 @@ <key>version</key> <string>0.10.6.314267</string> </map> + <key>innosetup</key> + <map> + <key>copyright</key> + <string>Copyright (C) 1997-2023 Jordan Russell. All rights reserved.</string> + <key>description</key> + <string>Innosetup installer framework</string> + <key>license</key> + <string>MIT</string> + <key>license_file</key> + <string>LICENSES/innosetup.txt</string> + <key>name</key> + <string>innosetup</string> + <key>platforms</key> + <map> + <key>windows64</key> + <map> + <key>archive</key> + <map> + <key>hash</key> + <string>46b82a3209dfa4bc6b65aa655eebdbd4ecaed1e1cc33e0a3b77d36475d5fa3ccd3fdc220c803ba91fa19b3e94b3bda2fa459cabab2620946af28f170d8aaa76c</string> + <key>hash_algorithm</key> + <string>blake2b</string> + <key>url</key> + <string>https://git.alchemyviewer.org/api/v4/projects/212/packages/generic/innosetup/6.2.2.2143/innosetup-6.2.2-windows64-2143.tar.zst</string> + </map> + <key>name</key> + <string>windows64</string> + </map> + </map> + <key>version</key> + <string>6.2.2</string> + </map> <key>jpegencoderbasic</key> <map> <key>copyright</key> @@ -2079,38 +2111,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> <key>version</key> <string>4.10.0000.32327.5fc3fe7c.558436</string> </map> - <key>squirrel</key> - <map> - <key>copyright</key> - <string>Copyright (c) 2012 GitHub, Inc.</string> - <key>description</key> - <string>Squirrel installer framework</string> - <key>license</key> - <string>MIT</string> - <key>license_file</key> - <string>LICENSES/squirrel.txt</string> - <key>name</key> - <string>squirrel</string> - <key>platforms</key> - <map> - <key>windows64</key> - <map> - <key>archive</key> - <map> - <key>hash</key> - <string>6ebc2d8934207911406aea18de8eac46bcd18cc4b6f6e2c24b936cac2d7f0abe94fc17e274f5567dc4280ace5a4e8accac658edb0cdf0623348fc72678c999cd</string> - <key>hash_algorithm</key> - <string>blake2b</string> - <key>url</key> - <string>https://git.alchemyviewer.org/api/v4/projects/197/packages/generic/squirrel/2.9.42.1850/squirrel-2.9.42-windows64-1850.tar.zst</string> - </map> - <key>name</key> - <string>windows64</string> - </map> - </map> - <key>version</key> - <string>2.9.42</string> - </map> <key>threejs</key> <map> <key>copyright</key> diff --git a/indra/cmake/Copy3rdPartyLibs.cmake b/indra/cmake/Copy3rdPartyLibs.cmake index 222017c55fec6ba54f142a10add144ba03d0cefd..3a6784d5afee188b414b7e131f511a28b5fa9958 100644 --- a/indra/cmake/Copy3rdPartyLibs.cmake +++ b/indra/cmake/Copy3rdPartyLibs.cmake @@ -85,6 +85,68 @@ if(WINDOWS) if(TARGET al::discord-gamesdk) list(APPEND release_files discord_game_sdk.dll) endif() + + #******************************* + # Copy MS C runtime dlls, required for packaging. + if (MSVC80) + set(MSVC_VER 80) + elseif (MSVC_VERSION EQUAL 1600) # VisualStudio 2010 + MESSAGE(STATUS "MSVC_VERSION ${MSVC_VERSION}") + elseif (MSVC_VERSION EQUAL 1800) # VisualStudio 2013, which is (sigh) VS 12 + set(MSVC_VER 120) + elseif (MSVC_VERSION GREATER_EQUAL 1910 AND MSVC_VERSION LESS 1920) # Visual Studio 2017 + set(MSVC_VER 140) + elseif (MSVC_VERSION GREATER_EQUAL 1920 AND MSVC_VERSION LESS 1930) # Visual Studio 2019 + set(MSVC_VER 140) + elseif (MSVC_VERSION GREATER_EQUAL 1930 AND MSVC_VERSION LESS 1940) # Visual Studio 2022 + set(MSVC_VER 140) + else (MSVC80) + MESSAGE(WARNING "New MSVC_VERSION ${MSVC_VERSION} of MSVC: adapt Copy3rdPartyLibs.cmake") + endif (MSVC80) + + if(ADDRESS_SIZE EQUAL 32) + # this folder contains the 32bit DLLs.. (yes really!) + set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/SysWOW64") + else(ADDRESS_SIZE EQUAL 32) + # this folder contains the 64bit DLLs.. (yes really!) + set(registry_find_path "[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Windows;Directory]/System32") + endif(ADDRESS_SIZE EQUAL 32) + + # Having a string containing the system registry path is a start, but to + # get CMake to actually read the registry, we must engage some other + # operation. + get_filename_component(registry_path "${registry_find_path}" ABSOLUTE) + + # These are candidate DLL names. Empirically, VS versions before 2015 have + # msvcp*.dll and msvcr*.dll. VS 2017 has msvcp*.dll and vcruntime*.dll. + # Check each of them. + foreach(release_msvc_file + concrt${MSVC_VER}.dll + msvcp${MSVC_VER}.dll + msvcp${MSVC_VER}_1.dll + msvcp${MSVC_VER}_2.dll + msvcp${MSVC_VER}_atomic_wait.dll + msvcp${MSVC_VER}_codecvt_ids.dll + vccorlib${MSVC_VER}.dll + vcruntime${MSVC_VER}.dll + vcruntime${MSVC_VER}_1.dll + ) + if(EXISTS "${registry_path}/${release_msvc_file}") + to_staging_dirs( + ${registry_path} + third_party_targets + ${release_msvc_file}) + else() + # This isn't a WARNING because, as noted above, every VS version + # we've observed has only a subset of the specified DLL names. + MESSAGE(STATUS "Redist lib ${release_msvc_file} not found") + endif() + endforeach() + MESSAGE(STATUS "Will copy redist files for MSVC ${MSVC_VER}:") + foreach(target ${third_party_targets}) + MESSAGE(STATUS "${target}") + endforeach() + elseif(DARWIN) set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(slvoice_files SLVoice) diff --git a/indra/newview/CMakeLists.txt b/indra/newview/CMakeLists.txt index 92f667cb7814029cc03c049df87f48ecb8c24145..89325f65a3de4f96d3c924c9636f696d189bbf46 100644 --- a/indra/newview/CMakeLists.txt +++ b/indra/newview/CMakeLists.txt @@ -53,6 +53,10 @@ include(LLPrimitive) # Viewer Branding Assets use_prebuilt_binary(branding) +if(WINDOWS) + use_prebuilt_binary(innosetup) +endif() + if( LLPHYSICSEXTENSIONS_SRC_DIR ) if (NOT HAVOK_TPV) # When using HAVOK_TPV, the library is precompiled, so no need for this diff --git a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt b/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt deleted file mode 100644 index 30f9349111d117a99d4af183bfb11607286239b0..0000000000000000000000000000000000000000 --- a/indra/newview/installers/windows/FILES_ARE_UNICODE_UTF-16LE.txt +++ /dev/null @@ -1,6 +0,0 @@ -The language files in this directory are Unicode (Little-Endian) format, also known as UTF-16 LE. - -This is the format required for NSIS Unicode. See http://www.scratchpaper.com/ for details. - -James Cook -September 2008 diff --git a/indra/newview/installers/windows/install_template.iss b/indra/newview/installers/windows/install_template.iss new file mode 100644 index 0000000000000000000000000000000000000000..18c74a43280fe62626827f76de3881d1ea920c8d --- /dev/null +++ b/indra/newview/installers/windows/install_template.iss @@ -0,0 +1,109 @@ +; Script generated by the Inno Setup Script Wizard. +; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! + +;#define MyAppName "Alchemy Viewer" +;#define MyAppNameShort "AlchemyViewer" +;#define MyAppVersion "7.0.0.4545" +;#define MyAppExeName "MyProg.exe" +;#define ViewerSrcDir "" + +%%INST_VARS%% + +#define MyAppPublisher "Alchemy Development Group" +#define MyAppURL "https://www.alchemyviewer.org" + +[Setup] +; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications. +; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) +AppId={{564993A0-36C3-4C9C-83FA-336EAB720367} +AppName={#MyAppName} +AppVersion={#MyAppVersion} +AppVerName={#MyAppName} {#MyAppVersion} +;AppVerName={#MyAppName} {#MyAppVersion} +AppPublisher={#MyAppPublisher} +AppPublisherURL={#MyAppURL} +AppSupportURL={#MyAppURL} +AppUpdatesURL={#MyAppURL} +AppCopyright=Copyright (C) 2013-2023 {#MyAppPublisher} +DefaultDirName={autopf}\{#MyAppNameShort} +DisableProgramGroupPage=yes +;LicenseFile={#ViewerSrcDir}\..\..\doc\LGPL-license.txt +; Uncomment the following line to run in non administrative install mode (install for current user only.) +;PrivilegesRequired=lowest +PrivilegesRequiredOverridesAllowed=commandline +OutputDir=. +OutputBaseFilename={#MyAppInstFile} +SetupIconFile={#ViewerSrcDir}\installers\windows\install_icon.ico +Compression=lzma2 +SolidCompression=yes +WizardStyle=modern +ArchitecturesAllowed=x64 +ArchitecturesInstallIn64BitMode=x64 +MinVersion=10.0 +AppMutex=AlchemyAppMutex,Global\AlchemyAppMutex +VersionInfoCompany={#MyAppPublisher} +VersionInfoVersion={#MyAppVersion} +DisableWelcomePage=no + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" +Name: "armenian"; MessagesFile: "compiler:Languages\Armenian.isl" +Name: "brazilianportuguese"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl" +Name: "bulgarian"; MessagesFile: "compiler:Languages\Bulgarian.isl" +Name: "catalan"; MessagesFile: "compiler:Languages\Catalan.isl" +Name: "corsican"; MessagesFile: "compiler:Languages\Corsican.isl" +Name: "czech"; MessagesFile: "compiler:Languages\Czech.isl" +Name: "danish"; MessagesFile: "compiler:Languages\Danish.isl" +Name: "dutch"; MessagesFile: "compiler:Languages\Dutch.isl" +Name: "finnish"; MessagesFile: "compiler:Languages\Finnish.isl" +Name: "french"; MessagesFile: "compiler:Languages\French.isl" +Name: "german"; MessagesFile: "compiler:Languages\German.isl" +Name: "hebrew"; MessagesFile: "compiler:Languages\Hebrew.isl" +Name: "hungarian"; MessagesFile: "compiler:Languages\Hungarian.isl" +Name: "icelandic"; MessagesFile: "compiler:Languages\Icelandic.isl" +Name: "italian"; MessagesFile: "compiler:Languages\Italian.isl" +Name: "japanese"; MessagesFile: "compiler:Languages\Japanese.isl" +Name: "norwegian"; MessagesFile: "compiler:Languages\Norwegian.isl" +Name: "polish"; MessagesFile: "compiler:Languages\Polish.isl" +Name: "portuguese"; MessagesFile: "compiler:Languages\Portuguese.isl" +Name: "russian"; MessagesFile: "compiler:Languages\Russian.isl" +Name: "slovak"; MessagesFile: "compiler:Languages\Slovak.isl" +Name: "slovenian"; MessagesFile: "compiler:Languages\Slovenian.isl" +Name: "spanish"; MessagesFile: "compiler:Languages\Spanish.isl" +Name: "turkish"; MessagesFile: "compiler:Languages\Turkish.isl" +Name: "ukrainian"; MessagesFile: "compiler:Languages\Ukrainian.isl" + +[Tasks] +Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked + +[Files] +; NOTE: Don't use "Flags: ignoreversion" on any shared system files +%%INSTALL_FILES%% + +[InstallDelete] +Type: files; Name: "{app}\app_settings" +Type: files; Name: "{app}\llplugin" +Type: files; Name: "{app}\skins" + +[Icons] +Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}" +Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon + +[Run] +Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent + +[Registry] +Root: HKA; Subkey: "Software\Classes\secondlife"; ValueType: "string"; ValueData: "URL:Second Life"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\Classes\secondlife"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: "" +Root: HKA; Subkey: "Software\Classes\secondlife\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0" +Root: HKA; Subkey: "Software\Classes\secondlife\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1""" + +Root: HKA; Subkey: "Software\Classes\x-grid-info"; ValueType: "string"; ValueData: "URL:Hypergrid"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\Classes\x-grid-info"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: "" +Root: HKA; Subkey: "Software\Classes\x-grid-info\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0" +Root: HKA; Subkey: "Software\Classes\x-grid-info\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1""" + +Root: HKA; Subkey: "Software\Classes\x-grid-location-info"; ValueType: "string"; ValueData: "URL:Hypergrid"; Flags: uninsdeletekey +Root: HKA; Subkey: "Software\Classes\x-grid-location-info"; ValueType: "string"; ValueName: "URL Protocol"; ValueData: "" +Root: HKA; Subkey: "Software\Classes\x-grid-location-info\DefaultIcon"; ValueType: "string"; ValueData: "{app}\{#MyAppExeName},0" +Root: HKA; Subkey: "Software\Classes\x-grid-location-info\shell\open\command"; ValueType: "string"; ValueData: """{app}\{#MyAppExeName}"" -url ""%1""" \ No newline at end of file diff --git a/indra/newview/installers/windows/installer_template.nsi b/indra/newview/installers/windows/installer_template.nsi deleted file mode 100644 index c782c901c37d4fb4b38fc7470f06a3467295694e..0000000000000000000000000000000000000000 --- a/indra/newview/installers/windows/installer_template.nsi +++ /dev/null @@ -1,868 +0,0 @@ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Second Life setup.nsi -;; Copyright 2004-2015, Linden Research, Inc. -;; -;; This library is free software; you can redistribute it and/or -;; modify it under the terms of the GNU Lesser General Public -;; License as published by the Free Software Foundation; -;; version 2.1 of the License only. -;; -;; This library is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -;; Lesser General Public License for more details. -;; -;; You should have received a copy of the GNU Lesser General Public -;; License along with this library; if not, write to the Free Software -;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -;; -;; Linden Research, Inc., 945 Battery Street, San Francisco, CA 94111 USA -;; -;; NSIS 3 or higher required for Unicode support -;; -;; Author: James Cook, TankMaster Finesmith, Don Kjer, Callum Prentice -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Compiler flags -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Unicode true -SetOverwrite on # Overwrite files -SetCompress auto # Compress if saves space -SetCompressor /solid lzma # Compress whole installer as one block -SetDatablockOptimize off # Only saves us 0.1%, not worth it -XPStyle on # Add an XP manifest to the installer -RequestExecutionLevel admin # For when we write to Program Files - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Project flags -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; - -# This placeholder is replaced by viewer_manifest.py -%%VERSION%% - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; - language files - one for each language (or flavor thereof) -;; (these files are in the same place as the nsi template but the python script generates a new nsi file in the -;; application directory so we have to add a path to these include files) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Ansariel notes: "Under certain circumstances the installer will fall back -;; to the first defined (aka default) language version. So you want to include -;; en-us as first language file." -!include "%%SOURCE%%\installers\windows\lang_en-us.nsi" - -# Danish and Polish no longer supported by the viewer itself -##!include "%%SOURCE%%\installers\windows\lang_da.nsi" -!include "%%SOURCE%%\installers\windows\lang_de.nsi" -!include "%%SOURCE%%\installers\windows\lang_es.nsi" -!include "%%SOURCE%%\installers\windows\lang_fr.nsi" -!include "%%SOURCE%%\installers\windows\lang_ja.nsi" -!include "%%SOURCE%%\installers\windows\lang_it.nsi" -##!include "%%SOURCE%%\installers\windows\lang_pl.nsi" -!include "%%SOURCE%%\installers\windows\lang_pt-br.nsi" -!include "%%SOURCE%%\installers\windows\lang_ru.nsi" -!include "%%SOURCE%%\installers\windows\lang_tr.nsi" -!include "%%SOURCE%%\installers\windows\lang_zh.nsi" - -# *TODO: Move these into the language files themselves -##LangString LanguageCode ${LANG_DANISH} "da" -LangString LanguageCode ${LANG_GERMAN} "de" -LangString LanguageCode ${LANG_ENGLISH} "en" -LangString LanguageCode ${LANG_SPANISH} "es" -LangString LanguageCode ${LANG_FRENCH} "fr" -LangString LanguageCode ${LANG_JAPANESE} "ja" -LangString LanguageCode ${LANG_ITALIAN} "it" -##LangString LanguageCode ${LANG_POLISH} "pl" -LangString LanguageCode ${LANG_PORTUGUESEBR} "pt" -LangString LanguageCode ${LANG_RUSSIAN} "ru" -LangString LanguageCode ${LANG_TURKISH} "tr" -LangString LanguageCode ${LANG_TRADCHINESE} "zh" - -# This placeholder is replaced by viewer_manifest.py -%%INST_VARS%% - -Name ${INSTNAME} - -SubCaption 0 $(LicenseSubTitleSetup) # Override "license agreement" text - -!define MUI_ICON "%%SOURCE%%\installers\windows\install_icon.ico" -!define MUI_UNICON "%%SOURCE%%\installers\windows\uninstall_icon.ico" - -BrandingText " " # Bottom of window text -Icon "${MUI_ICON}" -UninstallIcon "${MUI_UNICON}" -WindowIcon on # Show our icon in left corner -BGGradient off # No big background window -CRCCheck on # Make sure CRC is OK -InstProgressFlags smooth colored # New colored smooth look -SetOverwrite on # Overwrite files by default -AutoCloseWindow true # After all files install, close window - -# Registry key paths, ours and Microsoft's -!define LINDEN_KEY "SOFTWARE\Alchemy Development Group" -!define INSTNAME_KEY "${LINDEN_KEY}\${INSTNAME}" -!define MSCURRVER_KEY "SOFTWARE\Microsoft\Windows\CurrentVersion" -!define MSNTCURRVER_KEY "SOFTWARE\Microsoft\Windows NT\CurrentVersion" -!define MSUNINSTALL_KEY "${MSCURRVER_KEY}\Uninstall\${INSTNAME}" - -# from http://nsis.sourceforge.net/Docs/MultiUser/Readme.html -### Highest level permitted for user: Admin for Admin, Standard for Standard -##!define MULTIUSER_EXECUTIONLEVEL Highest -!define MULTIUSER_EXECUTIONLEVEL Admin -!define MULTIUSER_MUI -### Look for /AllUsers or /CurrentUser switches -##!define MULTIUSER_INSTALLMODE_COMMANDLINE -# appended to $PROGRAMFILES, as affected by MULTIUSER_USE_PROGRAMFILES64 -!define MULTIUSER_INSTALLMODE_INSTDIR "${INSTNAME}" -# expands to !define MULTIUSER_USE_PROGRAMFILES64 or nothing -%%PROGRAMFILES%% -# should make MultiUser.nsh initialization read existing INSTDIR from registry -## SL-10506: don't -##!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY "${INSTNAME_KEY}" -##!define MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME "" -# Don't set MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY and -# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME to cause the installer to -# write $MultiUser.InstallMode to the registry, because when the user installs -# multiple viewers with the same channel (same ${INSTNAME}, hence same -# ${INSTNAME_KEY}), the registry entry is overwritten. Instead we'll write a -# little file into the install directory -- see .onInstSuccess and un.onInit. -!include MultiUser.nsh -!include MUI2.nsh -!define MUI_BGCOLOR FFFFFF -!insertmacro MUI_FUNCTION_GUIINIT - -UninstallText $(UninstallTextMsg) -DirText $(DirectoryChooseTitle) $(DirectoryChooseSetup) -##!insertmacro MULTIUSER_PAGE_INSTALLMODE -!define MUI_PAGE_CUSTOMFUNCTION_PRE dirPre -!insertmacro MUI_PAGE_DIRECTORY -!insertmacro MUI_PAGE_INSTFILES - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Variables -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Var INSTNAME -Var INSTEXE -Var VIEWER_EXE -Var INSTSHORTCUT -Var COMMANDLINE # Command line passed to this installer, set in .onInit -Var SHORTCUT_LANG_PARAM # "--set InstallLanguage de", Passes language to viewer -Var SKIP_DIALOGS # Set from command line in .onInit. autoinstall GUI and the defaults. -Var SKIP_AUTORUN # Skip automatic launch of the viewer after install - -# Function definitions should go before file includes, because calls to -# DLLs like LangDLL trigger an implicit file include, so if that call is at -# the end of this script NSIS has to decompress the whole installer before -# it can call the DLL function. JC - -!include "FileFunc.nsh" # For GetParameters, GetOptions -!insertmacro GetParameters -!insertmacro GetOptions -!include WinVer.nsh # For OS and SP detection -!include 'LogicLib.nsh' # for value comparison -!include "x64.nsh" # for 64bit detection - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Pre-directory page callback -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function dirPre - StrCmp $SKIP_DIALOGS "true" 0 +2 - Abort - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Prep Installer Section -;; -;; Note: to add new languages, add a language file include to the list -;; at the top of this file, add an entry to the menu and then add an -;; entry to the language ID selector below -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function .onInit -!insertmacro MULTIUSER_INIT - -%%ENGAGEREGISTRY%% - -# SL-10506: Setting MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_KEY and -# MULTIUSER_INSTALLMODE_INSTDIR_REGISTRY_VALUENAME should -# read the current location of the install for this version into INSTDIR. -# However, SL-10506 complains about the resulting behavior, so the logic below -# is adapted from before we introduced MultiUser.nsh. - -# if $0 is empty, this is the first time for this viewer name -ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" "" - -# viewer with this name was installed before -${If} $0 != "" - # use the value we got from registry as install location - StrCpy $INSTDIR $0 -${EndIf} - -Call CheckCPUFlags # Make sure we have SSE2 support -Call CheckWindowsVersion # Don't install On unsupported systems - Push $0 - ${GetParameters} $COMMANDLINE # Get our command line - - ${GetOptions} $COMMANDLINE "/SKIP_DIALOGS" $0 - IfErrors +2 0 # If error jump past setting SKIP_DIALOGS - StrCpy $SKIP_DIALOGS "true" - - ${GetOptions} $COMMANDLINE "/SKIP_AUTORUN" $0 - IfErrors +2 0 ; If error jump past setting SKIP_AUTORUN - StrCpy $SKIP_AUTORUN "true" - - ${GetOptions} $COMMANDLINE "/LANGID=" $0 # /LANGID=1033 implies US English - -# If no language (error), then proceed - IfErrors lbl_configure_default_lang -# No error means we got a language, so use it - StrCpy $LANGUAGE $0 - Goto lbl_return - -lbl_configure_default_lang: -# If we currently have a version of SL installed, default to the language of that install -# Otherwise don't change $LANGUAGE and it will default to the OS UI language. - ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage" - IfErrors +2 0 # If error skip the copy instruction - StrCpy $LANGUAGE $0 - -# For silent installs, no language prompt, use default - IfSilent 0 +3 - StrCpy $SKIP_AUTORUN "true" - Goto lbl_return - StrCmp $SKIP_DIALOGS "true" lbl_return - - Push "" -# Use separate file so labels can be UTF-16 but we can still merge changes into this ASCII file. JC - !include "%%SOURCE%%\installers\windows\language_menu.nsi" - - Push A # A means auto count languages for the auto count to work the first empty push (Push "") must remain - LangDLL::LangDialog $(InstallerLanguageTitle) $(SelectInstallerLanguage) - Pop $0 - StrCmp $0 "cancel" 0 +2 - Abort - StrCpy $LANGUAGE $0 - -# Save language in registry - WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage" $LANGUAGE -lbl_return: - Pop $0 - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Prep Uninstaller Section -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.onInit - # Save $INSTDIR -- it appears to have the correct value before - # MULTIUSER_UNINIT, but then gets munged by MULTIUSER_UNINIT?! - Push $INSTDIR - !insertmacro MULTIUSER_UNINIT - Pop $INSTDIR - - # Now read InstallMode.txt from $INSTDIR - Push $0 - ClearErrors - FileOpen $0 "$INSTDIR\InstallMode.txt" r - IfErrors skipread - FileRead $0 $MultiUser.InstallMode - FileClose $0 -skipread: - Pop $0 - -%%ENGAGEREGISTRY%% - -# Read language from registry and set for uninstaller. Key will be removed on successful uninstall - ReadRegStr $0 SHELL_CONTEXT "${INSTNAME_KEY}" "InstallerLanguage" - IfErrors lbl_end - StrCpy $LANGUAGE $0 -lbl_end: - -## MessageBox MB_OK "After restoring:$\n$$INSTDIR = '$INSTDIR'$\n$$MultiUser.InstallMode = '$MultiUser.InstallMode'$\n$$LANGUAGE = '$LANGUAGE'" - - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Checks for CPU valid (must have SSE2 support) -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckCPUFlags - Push $1 - System::Call 'kernel32::IsProcessorFeaturePresent(i) i(10) .r1' - IntCmp $1 1 OK_SSE2 - MessageBox MB_OKCANCEL $(MissingSSE2) /SD IDOK IDOK OK_SSE2 - Quit - - OK_SSE2: - Pop $1 - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Make sure this computer meets the minimum system requirements. -;; Currently: Windows Vista SP2 -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckWindowsVersion - ${If} ${AtMostWin2003} - MessageBox MB_OK $(CheckWindowsVersionMB) - Quit - ${EndIf} - - ${If} ${IsWinVista} - ${AndIfNot} ${IsServicePack} 2 - MessageBox MB_OK $(CheckWindowsVersionMB) - Quit - ${EndIf} - - ${If} ${IsWin2008} - ${AndIfNot} ${IsServicePack} 2 - MessageBox MB_OK $(CheckWindowsVersionMB) - Quit - ${EndIf} - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Install Section -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Section "" - -# SetShellVarContext is set by MultiUser.nsh initialization. - -# Start with some default values. -StrCpy $INSTNAME "${INSTNAME}" -StrCpy $INSTEXE "${INSTEXE}" -StrCpy $VIEWER_EXE "${VIEWER_EXE}" -StrCpy $INSTSHORTCUT "${SHORTCUT}" - -Call CheckIfAdministrator # Make sure the user can install/uninstall -Call CloseSecondLife # Make sure Second Life not currently running - -ClearErrors - -INSTALL_FILES_START: - -Call RemoveProgFilesOnInst # Remove existing files to prevent certain errors when running the new version of the viewer - -# This placeholder is replaced by the complete list of all the files in the installer, by viewer_manifest.py -%%INSTALL_FILES%% - -IfErrors 0 INSTALL_FILES_DONE - StrCmp $SKIP_DIALOGS "true" INSTALL_FILES_DONE - MessageBox MB_ABORTRETRYIGNORE $(ErrorSecondLifeInstallRetry) IDABORT INSTALL_FILES_CANCEL IDRETRY INSTALL_FILES_START - # MB_ABORTRETRYIGNORE does not accept IDIGNORE - Goto INSTALL_FILES_DONE - -INSTALL_FILES_CANCEL: - # We are quiting, cleanup. - # Silence warnings from RemoveProgFilesOnInst. - StrCpy $SKIP_DIALOGS "true" - Call RemoveProgFilesOnInst - MessageBox MB_OK $(ErrorSecondLifeInstallSupport) - Quit - -INSTALL_FILES_DONE: - -# Pass the installer's language to the client to use as a default -StrCpy $SHORTCUT_LANG_PARAM "--set InstallLanguage $(LanguageCode)" - -# Shortcuts in start menu -CreateDirectory "$SMPROGRAMS\$INSTSHORTCUT" -SetOutPath "$INSTDIR" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE" - - -WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Create Account.url" \ - "InternetShortcut" "URL" \ - "http://join.secondlife.com/" -WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Your Account.url" \ - "InternetShortcut" "URL" \ - "http://www.secondlife.com/account/" -WriteINIStr "$SMPROGRAMS\$INSTSHORTCUT\SL Scripting Language Help.url" \ - "InternetShortcut" "URL" \ - "http://wiki.secondlife.com/wiki/LSL_Portal" -CreateShortCut "$SMPROGRAMS\$INSTSHORTCUT\Uninstall $INSTSHORTCUT.lnk" \ - '"$INSTDIR\uninst.exe"' '' - -# Other shortcuts -SetOutPath "$INSTDIR" -CreateShortCut "$DESKTOP\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE" -CreateShortCut "$INSTDIR\$INSTSHORTCUT.lnk" \ - "$INSTDIR\$VIEWER_EXE" "$SHORTCUT_LANG_PARAM" "$INSTDIR\$VIEWER_EXE" -CreateShortCut "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" \ - '"$INSTDIR\uninst.exe"' '' - -# Write registry -WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "" "$INSTDIR" -WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Version" "${VERSION_LONG}" -WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Shortcut" "$INSTSHORTCUT" -WriteRegStr SHELL_CONTEXT "${INSTNAME_KEY}" "Exe" "$VIEWER_EXE" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "Publisher" "Alchemy Development Group" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLInfoAbout" "https://alchemyviewer.org/pages/about.html" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "URLUpdateInfo" "https://alchemyviewer.org/pages/downloads.html" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "HelpLink" "https://alchemyviewer.org/" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayName" "$INSTNAME" -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "UninstallString" '"$INSTDIR\uninst.exe"' -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayVersion" "${VERSION_LONG}" -WriteRegDWORD SHELL_CONTEXT "${MSUNINSTALL_KEY}" "EstimatedSize" "0x0001D500" # ~117 MB - -# from FS:Ansariel -WriteRegStr SHELL_CONTEXT "${MSUNINSTALL_KEY}" "DisplayIcon" '"$INSTDIR\$VIEWER_EXE"' - -# Write URL registry info -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "(default)" "URL:Second Life" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "${URLNAME}\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"' - -# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks. -# MAINT-8305: On SLURL click, directly invoke the viewer, not the launcher. -WriteRegExpandStr HKEY_CLASSES_ROOT "${URLNAME}\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"' - -WriteRegStr HKEY_CLASSES_ROOT "x-grid-info" "(default)" "URL:Hypergrid" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-info" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-info\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"' - -# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"' - -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "(default)" "URL:Hypergrid" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info" "URL Protocol" "" -WriteRegStr HKEY_CLASSES_ROOT "x-grid-location-info\DefaultIcon" "" '"$INSTDIR\$VIEWER_EXE"' - -# URL param must be last item passed to viewer, it ignores subsequent params to avoid parameter injection attacks. -WriteRegExpandStr HKEY_CLASSES_ROOT "x-grid-location-info\shell\open\command" "" '"$INSTDIR\$VIEWER_EXE" -url "%1"' - -WriteRegStr HKEY_CLASSES_ROOT "Applications\$INSTEXE" "IsHostApp" "" -##WriteRegStr HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}" "NoStartPage" "" - -# Write out uninstaller -WriteUninstaller "$INSTDIR\uninst.exe" - -SectionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Uninstall Section -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Section Uninstall - -# Start with some default values. -StrCpy $INSTNAME "${INSTNAME}" -StrCpy $INSTEXE "${INSTEXE}" -StrCpy $VIEWER_EXE "${VIEWER_EXE}" -StrCpy $INSTSHORTCUT "${SHORTCUT}" - -# SetShellVarContext per the mode saved at install time in registry at -# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_KEY -# MULTIUSER_INSTALLMODE_DEFAULT_REGISTRY_VALUENAME -# Couldn't get NSIS to expand $MultiUser.InstallMode into the function name at Call time -${If} $MultiUser.InstallMode == 'AllUsers' -##MessageBox MB_OK "Uninstalling for all users" - Call un.MultiUser.InstallMode.AllUsers -${Else} -##MessageBox MB_OK "Uninstalling for current user" - Call un.MultiUser.InstallMode.CurrentUser -${EndIf} - -# Make sure we're not running -Call un.CloseSecondLife - -# Clean up registry keys and subkeys (these should all be !defines somewhere) -DeleteRegKey SHELL_CONTEXT "${INSTNAME_KEY}" -DeleteRegKey SHELL_CONTEXT "${MSCURRVER_KEY}\Uninstall\$INSTNAME" -# BUG-2707 Remove entry that disabled SEHOP -DeleteRegKey SHELL_CONTEXT "${MSNTCURRVER_KEY}\Image File Execution Options\$VIEWER_EXE" -DeleteRegKey HKEY_CLASSES_ROOT "Applications\$INSTEXE" -DeleteRegKey HKEY_CLASSES_ROOT "Applications\${VIEWER_EXE}" - -# Clean up shortcuts -Delete "$SMPROGRAMS\$INSTSHORTCUT\*.*" -RMDir "$SMPROGRAMS\$INSTSHORTCUT" - -Delete "$DESKTOP\$INSTSHORTCUT.lnk" -Delete "$INSTDIR\$INSTSHORTCUT.lnk" -Delete "$INSTDIR\Uninstall $INSTSHORTCUT.lnk" - -# Remove the main installation directory -Call un.ProgramFiles - -# Clean up cache and log files, but leave them in-place for non AGNI installs. -Call un.UserSettingsFiles - -SectionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Make sure the user can install -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckIfAdministrator - DetailPrint $(CheckAdministratorInstDP) - UserInfo::GetAccountType - Pop $R0 - StrCmp $R0 "Admin" lbl_is_admin - MessageBox MB_OK $(CheckAdministratorInstMB) - Quit -lbl_is_admin: - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Close the program, if running. Modifies no variables. -;; Allows user to bail out of install process. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CloseSecondLife - Push $0 - FindWindow $0 "Alchemy" "" - IntCmp $0 0 DONE - - StrCmp $SKIP_DIALOGS "true" CLOSE - MessageBox MB_OKCANCEL $(CloseSecondLifeInstMB) IDOK CLOSE IDCANCEL CANCEL_INSTALL - - CANCEL_INSTALL: - Quit - - CLOSE: - DetailPrint $(CloseSecondLifeInstDP) - SendMessage $0 16 0 0 - - LOOP: - FindWindow $0 "Alchemy" "" - IntCmp $0 0 SLEEP - Sleep 500 - Goto LOOP - - SLEEP: - # Second life window just closed, but program might not be fully done yet - # and OS might have not released some locks, wait a bit more to make sure - # all file handles were released. - # If something still isn't unlocked, it will trigger a notification from - # RemoveProgFilesOnInst - Sleep 1000 - DONE: - Pop $0 - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Close the program, if running. Modifies no variables. -;; Allows user to bail out of uninstall process. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.CloseSecondLife - Push $0 - FindWindow $0 "Alchemy" "" - IntCmp $0 0 DONE - MessageBox MB_OKCANCEL $(CloseSecondLifeUnInstMB) IDOK CLOSE IDCANCEL CANCEL_UNINSTALL - - CANCEL_UNINSTALL: - Quit - - CLOSE: - DetailPrint $(CloseSecondLifeUnInstDP) - SendMessage $0 16 0 0 - - LOOP: - FindWindow $0 "Alchemy" "" - IntCmp $0 0 DONE - Sleep 500 - Goto LOOP - - DONE: - Pop $0 - Return - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Delete files on install if previous install exists to prevent undesired behavior -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function RemoveProgFilesOnInst - -# We do not remove whole pervious install folder on install, since -# there is a chance that viewer was installed into some important -# folder by intent or accident -# RMDir /r $INSTDIR is especially unsafe if user installed somewhere -# like Program Files - -# Set retry counter. All integers are strings. -Push $0 -StrCpy $0 0 - -ClearErrors - -PREINSTALL_REMOVE: - -# Remove old SecondLife.exe to invalidate any old shortcuts to it that may be in non-standard locations. See MAINT-3575 -Delete "$INSTDIR\$INSTEXE" -Delete "$INSTDIR\$VIEWER_EXE" - -# Remove old shader files first so fallbacks will work. See DEV-5663 -RMDir /r "$INSTDIR\app_settings\shaders" - -# Remove folders to clean up files removed during development -RMDir /r "$INSTDIR\app_settings" -RMDir /r "$INSTDIR\skins" -RMDir /r "$INSTDIR\vmp_icons" - -# Remove llplugin, plugins can crash or malfunction if they -# find modules from different versions -RMDir /r "$INSTDIR\llplugin" - -IntOp $0 $0 + 1 - -IfErrors 0 PREINSTALL_DONE - IntCmp $0 1 PREINSTALL_REMOVE #try again once - StrCmp $SKIP_DIALOGS "true" PREINSTALL_DONE - MessageBox MB_ABORTRETRYIGNORE $(CloseSecondLifeInstRM) IDABORT PREINSTALL_FAIL IDRETRY PREINSTALL_REMOVE - # MB_ABORTRETRYIGNORE does not accept IDIGNORE - Goto PREINSTALL_DONE - -PREINSTALL_FAIL: - Quit - -PREINSTALL_DONE: - -# We are no longer including release notes with the viewer, so remove them. -Delete "$SMPROGRAMS\$INSTSHORTCUT\SL Release Notes.lnk" -Delete "$INSTDIR\releasenotes.txt" - -Pop $0 - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Delete files in \Users\<User>\AppData\ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.UserSettingsFiles - -# Ask if user wants to keep data files or not -MessageBox MB_YESNO|MB_ICONQUESTION $(RemoveDataFilesMB) IDYES Remove IDNO Keep - -Remove: -Push $0 -Push $1 -Push $2 - - DetailPrint "Deleting Alchemy data files" - - StrCpy $0 0 # Index number used to iterate via EnumRegKey - - LOOP: - EnumRegKey $1 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList" $0 - StrCmp $1 "" DONE # No more users - - ReadRegStr $2 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList\$1" "ProfileImagePath" - StrCmp $2 "" CONTINUE 0 # "ProfileImagePath" value is missing - -# Required since ProfileImagePath is of type REG_EXPAND_SZ - ExpandEnvStrings $2 $2 - -# Delete files in \Users\<User>\AppData\Roaming\AlchemyNext -# Remove all settings files but leave any other .txt files to preserve the chat logs -; RMDir /r "$2\AppData\Roaming\AlchemyNext\logs" - RMDir /r "$2\AppData\Roaming\AlchemyNext\browser_profile" - RMDir /r "$2\AppData\Roaming\AlchemyNext\user_settings" - Delete "$2\AppData\Roaming\AlchemyNext\*.xml" - Delete "$2\AppData\Roaming\AlchemyNext\*.bmp" - Delete "$2\AppData\Roaming\AlchemyNext\search_history.txt" - Delete "$2\AppData\Roaming\AlchemyNext\plugin_cookies.txt" - Delete "$2\AppData\Roaming\AlchemyNext\typed_locations.txt" -# Delete files in \Users\<User>\AppData\Local\AlchemyNext - RmDir /r "$2\AppData\Local\AlchemyNext" #Delete the cache folder - - CONTINUE: - IntOp $0 $0 + 1 - Goto LOOP - DONE: - -Pop $2 -Pop $1 -Pop $0 - -# Delete files in ProgramData\Secondlife -Push $0 - ReadRegStr $0 SHELL_CONTEXT "${MSCURRVER_KEY}\Explorer\Shell Folders" "Common AppData" - StrCmp $0 "" +2 - RMDir /r "$0\Alchemy" -Pop $0 - -Keep: - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Delete the installed files -;; This deletes the uninstall executable, but it works because it is copied to temp directory before running -;; -;; Note: You must list all files here, because we only want to delete our files, -;; not things users left in the program directory. -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function un.ProgramFiles - -# This placeholder is replaced by the complete list of files to uninstall by viewer_manifest.py -%%DELETE_FILES%% - -# our InstallMode.txt -Delete "$INSTDIR\InstallMode.txt" - -# Optional/obsolete files. Delete won't fail if they don't exist. -Delete "$INSTDIR\autorun.bat" -Delete "$INSTDIR\dronesettings.ini" -Delete "$INSTDIR\message_template.msg" -Delete "$INSTDIR\newview.pdb" -Delete "$INSTDIR\newview.map" -Delete "$INSTDIR\Alchemy.pdb" -Delete "$INSTDIR\Alchemy.map" -Delete "$INSTDIR\comm.dat" -Delete "$INSTDIR\*.glsl" -Delete "$INSTDIR\motions\*.lla" -Delete "$INSTDIR\trial\*.html" -Delete "$INSTDIR\newview.exe" -Delete "$INSTDIR\Alchemy.exe" - -# MAINT-3099 workaround - prevent these log files, if present, from causing a user alert -Delete "$INSTDIR\VivoxVoiceService-*.log" - -# Remove entire help directory -RMDir /r "$INSTDIR\help" - -Delete "$INSTDIR\uninst.exe" -RMDir "$INSTDIR" - -IfFileExists "$INSTDIR" FOLDERFOUND NOFOLDER - -FOLDERFOUND: - MessageBox MB_OK $(DeleteProgramFilesMB) /SD IDOK IDOK NOFOLDER - -NOFOLDER: - -MessageBox MB_YESNO $(DeleteRegistryKeysMB) IDYES DeleteKeys IDNO NoDelete - -DeleteKeys: - DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\x-grid-location-info" - DeleteRegKey SHELL_CONTEXT "SOFTWARE\Classes\secondlife" - DeleteRegKey HKEY_CLASSES_ROOT "x-grid-location-info" - DeleteRegKey HKEY_CLASSES_ROOT "x-grid-info" - DeleteRegKey HKEY_CLASSES_ROOT "secondlife" - -NoDelete: - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; After install completes, launch app -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function .onInstSuccess - Push $0 - FileOpen $0 "$INSTDIR\InstallMode.txt" w - # No newline -- this is for our use, not for users to read. - FileWrite $0 "$MultiUser.InstallMode" - FileClose $0 - Pop $0 - - Push $R0 - Push $0 - ;; MAINT-7812: Only write nsis.winstall file with /marker switch - ${GetParameters} $R0 - ${GetOptionsS} $R0 "/marker" $0 - ;; If no /marker switch, skip to ClearErrors - IfErrors +4 0 - ;; $EXEDIR is where we find the installer file - ;; Put a marker file there so VMP will know we're done - ;; and it can delete the download directory next time. - ;; http://nsis.sourceforge.net/Write_text_to_a_file - FileOpen $0 "$EXEDIR\nsis.winstall" w - FileWrite $0 "NSIS done$\n" - FileClose $0 - - ClearErrors - Pop $0 - Pop $R0 - - Call CheckWindowsServPack # Warn if not on the latest SP before asking to launch. - StrCmp $SKIP_AUTORUN "true" +2; - # Assumes SetOutPath $INSTDIR - # Run INSTEXE (our updater), passing VIEWER_EXE plus the command-line - # arguments built into our shortcuts. This gives the updater a chance - # to verify that the viewer we just installed is appropriate for the - # running system -- or, if not, to download and install a different - # viewer. For instance, if a user running 32-bit Windows installs a - # 64-bit viewer, it cannot run on this system. But since the updater - # is a 32-bit executable even in the 64-bit viewer package, the - # updater can detect the problem and adapt accordingly. - # Once everything is in order, the updater will run the specified - # viewer with the specified params. - # Quote the updater executable and the viewer executable because each - # must be a distinct command-line token, but DO NOT quote the language - # string because it must decompose into separate command-line tokens. - Exec '"$INSTDIR\$INSTEXE" precheck "$INSTDIR\$VIEWER_EXE" $SHORTCUT_LANG_PARAM' -# -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Recommend Upgrading to Service Pack 1 for Windows 7, if not present -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -Function CheckWindowsServPack - ${If} ${IsWin7} - ${AndIfNot} ${IsServicePack} 1 - MessageBox MB_OK $(CheckWindowsServPackMB) - DetailPrint $(UseLatestServPackDP) - Return - ${EndIf} - - ${If} ${IsWin2008R2} - ${AndIfNot} ${IsServicePack} 1 - MessageBox MB_OK $(CheckWindowsServPackMB) - DetailPrint $(UseLatestServPackDP) - Return - ${EndIf} - -FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;; Clobber user files - TEST ONLY -;; This is here for testing, DO NOT USE UNLESS YOU KNOW WHAT YOU ARE TESTING FOR! -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Function ClobberUserFilesTESTONLY - -;Push $0 -;Push $1 -;Push $2 -; -; StrCpy $0 0 # Index number used to iterate via EnumRegKey -; -; LOOP: -; EnumRegKey $1 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList" $0 -; StrCmp $1 "" DONE # no more users -; -; ReadRegStr $2 SHELL_CONTEXT "${MSNTCURRVER_KEY}\ProfileList\$1" "ProfileImagePath" -; StrCmp $2 "" CONTINUE 0 # "ProfileImagePath" value is missing -; -;# Required since ProfileImagePath is of type REG_EXPAND_SZ -; ExpandEnvStrings $2 $2 -; -; RMDir /r "$2\Application Data\SecondLife\" -; -; CONTINUE: -; IntOp $0 $0 + 1 -; Goto LOOP -; DONE: -; -;Pop $2 -;Pop $1 -;Pop $0 -; -;# Copy files in Documents and Settings\All Users\SecondLife -;Push $0 -; ReadRegStr $0 SHELL_CONTEXT "${MSCURRVER_KEY}\Explorer\Shell Folders" "Common AppData" -; StrCmp $0 "" +2 -; RMDir /r "$2\Application Data\SecondLife\" -;Pop $0 -; -;FunctionEnd - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; EOF ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/indra/newview/installers/windows/lang_da.nsi b/indra/newview/installers/windows/lang_da.nsi deleted file mode 100644 index 73f23086be22efa016f61757a0246ad56a929a6c..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_da.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_de.nsi b/indra/newview/installers/windows/lang_de.nsi deleted file mode 100644 index f67a09f84c6f81d44099fcfab04729e8af9e0850..0000000000000000000000000000000000000000 --- a/indra/newview/installers/windows/lang_de.nsi +++ /dev/null @@ -1,90 +0,0 @@ -; First is default -LoadLanguageFile "${NSISDIR}\Contrib\Language files\German.nlf" - -; Language selection dialog -LangString InstallerLanguageTitle ${LANG_GERMAN} "Installationssprache" -LangString SelectInstallerLanguage ${LANG_GERMAN} "Bitte wählen Sie die Installationssprache" - -; subtitle on license text caption (setup new version or update current one -LangString LicenseSubTitleUpdate ${LANG_GERMAN} " Update" -LangString LicenseSubTitleSetup ${LANG_GERMAN} " Setup" - -LangString MULTIUSER_TEXT_INSTALLMODE_TITLE ${LANG_GERMAN} "Installationsmodus" -LangString MULTIUSER_TEXT_INSTALLMODE_SUBTITLE ${LANG_GERMAN} "Für alle Benutzer (erfordert Administratorrechte) oder nur für den aktuellen Benutzer installieren?" -LangString MULTIUSER_INNERTEXT_INSTALLMODE_TOP ${LANG_GERMAN} "Wenn Sie dieses Installationsprogram mit Administratorrechten ausführen, können Sie auswählen, ob die Installation (beispielsweise) in c:\Programme oder unter AppData\Lokaler Ordner des aktuellen Benutzers erfolgen soll." -LangString MULTIUSER_INNERTEXT_INSTALLMODE_ALLUSERS ${LANG_GERMAN} "Für alle Benutzer installieren" -LangString MULTIUSER_INNERTEXT_INSTALLMODE_CURRENTUSER ${LANG_GERMAN} "Nur für den aktuellen Benutzer installieren" - -; installation directory text -LangString DirectoryChooseTitle ${LANG_GERMAN} "Installations-Ordner" -LangString DirectoryChooseUpdate ${LANG_GERMAN} "Wählen Sie den Second Life Ordner für dieses Update:" -LangString DirectoryChooseSetup ${LANG_GERMAN} "Pfad in dem Second Life installiert werden soll:" - -LangString MUI_TEXT_DIRECTORY_TITLE ${LANG_GERMAN} "Installationsverzeichnis" -LangString MUI_TEXT_DIRECTORY_SUBTITLE ${LANG_GERMAN} "Wählen Sie das Verzeichnis aus, in dem Second Life installiert werden soll:" - -LangString MUI_TEXT_INSTALLING_TITLE ${LANG_GERMAN} "Second Life wird installiert..." -LangString MUI_TEXT_INSTALLING_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wird im Verzeichnis $INSTDIR installiert" - -LangString MUI_TEXT_FINISH_TITLE ${LANG_GERMAN} "Second Life wird installiert" -LangString MUI_TEXT_FINISH_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wurde im Verzeichnis $INSTDIR installiert." - -LangString MUI_TEXT_ABORT_TITLE ${LANG_GERMAN} "Installation abgebrochen" -LangString MUI_TEXT_ABORT_SUBTITLE ${LANG_GERMAN} "Der Second Life Viewer wird nicht im Verzeichnis $INSTDIR installiert." - -; CheckStartupParams message box -LangString CheckStartupParamsMB ${LANG_GERMAN} "Konnte Programm '$INSTNAME' nicht finden. Stilles Update fehlgeschlagen." - -; installation success dialog -LangString InstSuccesssQuestion ${LANG_GERMAN} "Second Life starten?" - -; remove old NSIS version -LangString RemoveOldNSISVersion ${LANG_GERMAN} "Überprüfe alte Version ..." - -; check windows version -LangString CheckWindowsVersionDP ${LANG_GERMAN} "Überprüfung der Windows Version ..." -LangString CheckWindowsVersionMB ${LANG_GERMAN} 'Second Life unterstützt nur Windows Vista.$\n$\nDer Versuch es auf Windows $R0 zu installieren, könnte zu unvorhersehbaren Abstürzen und Datenverlust führen.$\n$\nTrotzdem installieren?' -LangString CheckWindowsServPackMB ${LANG_GERMAN} "Wir empfehlen, das neueste Service Pack für Ihr Betriebssystem zu installieren, um Second Life auszuführen.$\nDies unterstützt die Leistung und Stabilität des Programms." -LangString UseLatestServPackDP ${LANG_GERMAN} "Bitte verwenden Sie Windows Update, um das neueste Service Pack zu installieren." - -; checkifadministrator function (install) -LangString CheckAdministratorInstDP ${LANG_GERMAN} "Überprüfung der Installations-Berechtigungen ..." -LangString CheckAdministratorInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life installieren zu können.' - -; checkifadministrator function (uninstall) -LangString CheckAdministratorUnInstDP ${LANG_GERMAN} "Überprüfung der Entfernungs-Berechtigungen ..." -LangString CheckAdministratorUnInstMB ${LANG_GERMAN} 'Sie besitzen ungenügende Berechtigungen.$\nSie müssen ein "administrator" sein, um Second Life entfernen zu können..' - -; checkifalreadycurrent -LangString CheckIfCurrentMB ${LANG_GERMAN} "Anscheinend ist Second Life ${VERSION_LONG} bereits installiert.$\n$\nWürden Sie es gerne erneut installieren?" - -; checkcpuflags -LangString MissingSSE2 ${LANG_GERMAN} "Dieses Gerät verfügt möglicherweise nicht über eine CPU mit SSE2-Unterstützung, die für Second Life ${VERSION_LONG} benötigt wird. Möchten Sie fortfahren?" - -; closesecondlife function (install) -LangString CloseSecondLifeInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..." -LangString CloseSecondLifeInstMB ${LANG_GERMAN} "Second Life kann nicht installiert oder ersetzt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um die Installation abzubrechen." -LangString CloseSecondLifeInstRM ${LANG_GERMAN} "Second Life failed to remove some files from a previous install." - -; closesecondlife function (uninstall) -LangString CloseSecondLifeUnInstDP ${LANG_GERMAN} "Warten auf die Beendigung von Second Life ..." -LangString CloseSecondLifeUnInstMB ${LANG_GERMAN} "Second Life kann nicht entfernt werden, wenn es bereits läuft.$\n$\nBeenden Sie, was Sie gerade tun und klicken Sie OK, um Second Life zu beenden.$\nKlicken Sie CANCEL, um abzubrechen." - -; CheckNetworkConnection -LangString CheckNetworkConnectionDP ${LANG_GERMAN} "Prüfe Netzwerkverbindung..." - -; error during installation -LangString ErrorSecondLifeInstallRetry ${LANG_GERMAN} "Second Life konnte nicht korrekt installiert werden, einige Dateien wurden eventuell nicht korrekt von der Installationroutine kopiert." -LangString ErrorSecondLifeInstallSupport ${LANG_GERMAN} "Bitte laden Sie den Viewer erneut von https://secondlife.com/support/downloads/ und versuchen Sie die Installation erneut. Sollte das Problem weiterhin bestehen, dann kontaktieren Sie unseren Support unter https://support.secondlife.com." - -; ask to remove user's data files -LangString RemoveDataFilesMB ${LANG_GERMAN} "Möchten Sie alle anderen zu Second Life gehörigen Dateien ebenfalls ENTFERNEN?$\n$\nWir empfehlen, die Einstellungen und Cache-Dateien zu behalten, wenn Sie andere Versionen von Second Life installiert haben oder eine Deinstallation durchführen, um Second Life auf eine neuere Version zu aktualisieren." - -; delete program files -LangString DeleteProgramFilesMB ${LANG_GERMAN} "Es existieren weiterhin Dateien in Ihrem SecondLife Programm Ordner.$\n$\nDies sind möglicherweise Dateien, die sie modifiziert oder bewegt haben:$\n$INSTDIR$\n$\nMöchten Sie diese ebenfalls löschen?" - -; uninstall text -LangString UninstallTextMsg ${LANG_GERMAN} "Dies wird Second Life ${VERSION_LONG} von Ihrem System entfernen." - -; ask to remove registry keys that still might be needed by other viewers that are installed -LangString DeleteRegistryKeysMB ${LANG_GERMAN} "Möchten Sie die Registrierungsschlüssel der Anwendung entfernen?$\n$\nWir empfehlen, die Registrierungsschlüssel zu behalten, wenn Sie andere Versionen von Second Life installiert haben." diff --git a/indra/newview/installers/windows/lang_en-us.nsi b/indra/newview/installers/windows/lang_en-us.nsi deleted file mode 100644 index 9d00f1b4c0c2389604174f9343cf20fccea9288f..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_en-us.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_es.nsi b/indra/newview/installers/windows/lang_es.nsi deleted file mode 100644 index 364cc9f67e2f9aa7b05498d848d38b56ab22e429..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_es.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_fr.nsi b/indra/newview/installers/windows/lang_fr.nsi deleted file mode 100644 index 2f34c0c87a1552dd0632baf63dd53cc9bf1edf7b..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_fr.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_it.nsi b/indra/newview/installers/windows/lang_it.nsi deleted file mode 100644 index 51214d3a9ce88d5a594a6ab02ea3b8f4b09af8e2..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_it.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_ja.nsi b/indra/newview/installers/windows/lang_ja.nsi deleted file mode 100644 index 296703d1a3e94080fe18709d1e5ac3031887cde7..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_ja.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_pl.nsi b/indra/newview/installers/windows/lang_pl.nsi deleted file mode 100644 index 299645bbb78010298d43366cfa5dd3299081a096..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_pl.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_pt-br.nsi b/indra/newview/installers/windows/lang_pt-br.nsi deleted file mode 100644 index 542c8654b5bffbe4d6f57a90c878c329ce7eb997..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_pt-br.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_ru.nsi b/indra/newview/installers/windows/lang_ru.nsi deleted file mode 100644 index 4e53a4957d49d2cf9b11df0b1ac0849a3101dfaa..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_ru.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_tr.nsi b/indra/newview/installers/windows/lang_tr.nsi deleted file mode 100644 index bae5029ad1ce56a2fd347c95de656848400c052e..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_tr.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/lang_zh.nsi b/indra/newview/installers/windows/lang_zh.nsi deleted file mode 100644 index 7922d9df5228d652bf08955f00c0eb62b6794965..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/lang_zh.nsi and /dev/null differ diff --git a/indra/newview/installers/windows/language_menu.nsi b/indra/newview/installers/windows/language_menu.nsi deleted file mode 100644 index 2f426a0f47c92aac0b8e17441243802da7ab79e7..0000000000000000000000000000000000000000 Binary files a/indra/newview/installers/windows/language_menu.nsi and /dev/null differ diff --git a/indra/newview/viewer_manifest.py b/indra/newview/viewer_manifest.py index 47dad6cacf212d67e4a976ea59bd4b84dfb45190..fb126caed380a62e72d61b27880cb084ef74f063 100755 --- a/indra/newview/viewer_manifest.py +++ b/indra/newview/viewer_manifest.py @@ -471,6 +471,18 @@ def construct(self): else: self.path(src="fmod.dll", dst="fmod.dll") + # These need to be installed as a SxS assembly, currently a 'private' assembly. + # See http://msdn.microsoft.com/en-us/library/ms235291(VS.80).aspx + self.path("concrt140.dll") + self.path("msvcp140.dll") + self.path("msvcp140_1.dll") + self.path("msvcp140_2.dll") + self.path("msvcp140_atomic_wait.dll") + self.path("msvcp140_codecvt_ids.dll") + self.path("vccorlib140.dll") + self.path("vcruntime140.dll") + self.path("vcruntime140_1.dll") + # SLVoice executable with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')): self.path("SLVoice.exe") @@ -614,14 +626,10 @@ def wpath(path): out_path = None for pkg_file in dest_files: rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,'')) - installed_dir = wpath(os.path.join('$INSTDIR', os.path.dirname(rel_file))) + installed_dir = wpath(os.path.join('{app}', os.path.dirname(rel_file))) pkg_file = wpath(os.path.normpath(pkg_file)) - if installed_dir != out_path: - if install: - out_path = installed_dir - result += 'SetOutPath ' + out_path + '\n' if install: - result += 'File ' + pkg_file + '\n' + result += 'Source: "' + pkg_file + '"; DestDir: "' + installed_dir + '"; Flags: ignoreversion \n' else: result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n' @@ -653,20 +661,12 @@ def package_finish(self): 'final_exe' : self.final_exe(), 'flags':'', 'app_name':self.app_name(), - 'app_name_oneword':self.app_name_oneword() + 'app_name_oneword':self.app_name_oneword(), + 'src_dir':self.get_src_prefix() } installer_file = self.installer_base_name() + '_Setup.exe' - substitution_strings['installer_file'] = installer_file - - version_vars = """ - !define INSTEXE "SLVersionChecker.exe" - !define VERSION "%(version_short)s" - !define VERSION_LONG "%(version)s" - !define VERSION_DASHES "%(version_dashes)s" - !define VERSION_REGISTRY "%(version_registry)s" - !define VIEWER_EXE "%(final_exe)s" - """ % substitution_strings + substitution_strings['installer_file'] = self.installer_base_name() + '_Setup' if self.channel_type() == 'release': substitution_strings['caption'] = CHANNEL_VENDOR_BASE @@ -674,30 +674,21 @@ def package_finish(self): substitution_strings['caption'] = self.app_name() + ' ${VERSION}' inst_vars_template = """ - OutFile "%(installer_file)s" - !define INSTNAME "%(app_name_oneword)s" - !define SHORTCUT "%(app_name)s" - !define URLNAME "secondlife" - Caption "%(caption)s" +#define MyAppName "%(app_name)s" +#define MyAppNameShort "%(app_name_oneword)s" +#define MyAppVersion "%(version)s" +#define MyAppExeName "%(final_exe)s" +#define ViewerSrcDir "%(src_dir)s" +#define MyAppInstFile "%(installer_file)s" """ - if(self.address_size == 64): - engage_registry="SetRegView 64" - program_files="!define MULTIUSER_USE_PROGRAMFILES64" - else: - engage_registry="SetRegView 32" - program_files="" - - tempfile = "alchemy_setup_tmp.nsi" + tempfile = "alchemy_setup_tmp.iss" # the following replaces strings in the nsi template # it also does python-style % substitution - self.replace_in("installers/windows/installer_template.nsi", tempfile, { - "%%VERSION%%":version_vars, + self.replace_in("installers/windows/install_template.iss", tempfile, { "%%SOURCE%%":self.get_src_prefix(), "%%INST_VARS%%":inst_vars_template % substitution_strings, "%%INSTALL_FILES%%":self.nsi_file_commands(True), - "%%PROGRAMFILES%%":program_files, - "%%ENGAGEREGISTRY%%":engage_registry, "%%DELETE_FILES%%":self.nsi_file_commands(False)}) # If we're on a build machine, sign the code using our Authenticode certificate. JC @@ -705,33 +696,26 @@ def package_finish(self): # Unlike the viewer binary, the VMP filenames are invariant with respect to version, os, etc. for exe in ( self.final_exe(), - "SLVersionChecker.exe", "llplugin/dullahan_host.exe", ): self.sign(exe) - # Check two paths, one for Program Files, and one for Program Files (x86). - # Yay 64bit windows. - for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)': - NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles) - if os.path.exists(NSIS_path): - break - installer_created=False - nsis_attempts=3 - nsis_retry_wait=15 - for attempt in range(nsis_attempts): + inno_path = os.path.join(self.args['build'], os.pardir, 'packages', 'innosetup', 'iscc.exe') + iscc_attempts=3 + iscc_retry_wait=15 + for attempt in range(iscc_attempts): try: - self.run_command([NSIS_path, '/V2', self.dst_path_of(tempfile)]) + self.run_command([inno_path, self.dst_path_of(tempfile)]) except ManifestError as err: - if attempt+1 < nsis_attempts: - print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr) - time.sleep(nsis_retry_wait) - nsis_retry_wait*=2 + if attempt+1 < iscc_attempts: + print("iscc failed, waiting %d seconds before retrying" % iscc_retry_wait, file=sys.stderr) + time.sleep(iscc_retry_wait) + iscc_retry_wait*=2 else: - # NSIS worked! Done! + # ISCC worked! Done! break else: - print("Maximum nsis attempts exceeded; giving up", file=sys.stderr) + print("Maximum iscc attempts exceeded; giving up", file=sys.stderr) raise self.sign(installer_file)