Skip to content
Snippets Groups Projects
Commit 2e50b01f authored by Rye Mutt's avatar Rye Mutt :bread:
Browse files

Innosetup installer

parent 6f7dfd9f
No related branches found
No related tags found
2 merge requests!3Update to main branch,!2Rebase onto current main branch
Showing
with 243 additions and 1048 deletions
...@@ -819,6 +819,38 @@ ...@@ -819,6 +819,38 @@
<key>version</key> <key>version</key>
<string>0.10.6.314267</string> <string>0.10.6.314267</string>
</map> </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> <key>jpegencoderbasic</key>
<map> <map>
<key>copyright</key> <key>copyright</key>
...@@ -2079,38 +2111,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string> ...@@ -2079,38 +2111,6 @@ Copyright (c) 2012, 2014, 2015, 2016 nghttp2 contributors</string>
<key>version</key> <key>version</key>
<string>4.10.0000.32327.5fc3fe7c.558436</string> <string>4.10.0000.32327.5fc3fe7c.558436</string>
</map> </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> <key>threejs</key>
<map> <map>
<key>copyright</key> <key>copyright</key>
......
...@@ -85,6 +85,68 @@ if(WINDOWS) ...@@ -85,6 +85,68 @@ if(WINDOWS)
if(TARGET al::discord-gamesdk) if(TARGET al::discord-gamesdk)
list(APPEND release_files discord_game_sdk.dll) list(APPEND release_files discord_game_sdk.dll)
endif() 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) elseif(DARWIN)
set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}") set(vivox_lib_dir "${ARCH_PREBUILT_DIRS_RELEASE}")
set(slvoice_files SLVoice) set(slvoice_files SLVoice)
......
...@@ -53,6 +53,10 @@ include(LLPrimitive) ...@@ -53,6 +53,10 @@ include(LLPrimitive)
# Viewer Branding Assets # Viewer Branding Assets
use_prebuilt_binary(branding) use_prebuilt_binary(branding)
if(WINDOWS)
use_prebuilt_binary(innosetup)
endif()
if( LLPHYSICSEXTENSIONS_SRC_DIR ) if( LLPHYSICSEXTENSIONS_SRC_DIR )
if (NOT HAVOK_TPV) if (NOT HAVOK_TPV)
# When using HAVOK_TPV, the library is precompiled, so no need for this # When using HAVOK_TPV, the library is precompiled, so no need for this
......
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
; 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
This diff is collapsed.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
; 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."
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
File suppressed by a .gitattributes entry or the file's encoding is unsupported.
...@@ -471,6 +471,18 @@ def construct(self): ...@@ -471,6 +471,18 @@ def construct(self):
else: else:
self.path(src="fmod.dll", dst="fmod.dll") 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 # SLVoice executable
with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')): with self.prefix(src=os.path.join(pkgdir, 'bin', 'release')):
self.path("SLVoice.exe") self.path("SLVoice.exe")
...@@ -614,14 +626,10 @@ def wpath(path): ...@@ -614,14 +626,10 @@ def wpath(path):
out_path = None out_path = None
for pkg_file in dest_files: for pkg_file in dest_files:
rel_file = os.path.normpath(pkg_file.replace(self.get_dst_prefix()+os.path.sep,'')) 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)) 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: if install:
result += 'File ' + pkg_file + '\n' result += 'Source: "' + pkg_file + '"; DestDir: "' + installed_dir + '"; Flags: ignoreversion \n'
else: else:
result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n' result += 'Delete ' + wpath(os.path.join('$INSTDIR', rel_file)) + '\n'
...@@ -653,20 +661,12 @@ def package_finish(self): ...@@ -653,20 +661,12 @@ def package_finish(self):
'final_exe' : self.final_exe(), 'final_exe' : self.final_exe(),
'flags':'', 'flags':'',
'app_name':self.app_name(), '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' installer_file = self.installer_base_name() + '_Setup.exe'
substitution_strings['installer_file'] = installer_file substitution_strings['installer_file'] = self.installer_base_name() + '_Setup'
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
if self.channel_type() == 'release': if self.channel_type() == 'release':
substitution_strings['caption'] = CHANNEL_VENDOR_BASE substitution_strings['caption'] = CHANNEL_VENDOR_BASE
...@@ -674,30 +674,21 @@ def package_finish(self): ...@@ -674,30 +674,21 @@ def package_finish(self):
substitution_strings['caption'] = self.app_name() + ' ${VERSION}' substitution_strings['caption'] = self.app_name() + ' ${VERSION}'
inst_vars_template = """ inst_vars_template = """
OutFile "%(installer_file)s" #define MyAppName "%(app_name)s"
!define INSTNAME "%(app_name_oneword)s" #define MyAppNameShort "%(app_name_oneword)s"
!define SHORTCUT "%(app_name)s" #define MyAppVersion "%(version)s"
!define URLNAME "secondlife" #define MyAppExeName "%(final_exe)s"
Caption "%(caption)s" #define ViewerSrcDir "%(src_dir)s"
#define MyAppInstFile "%(installer_file)s"
""" """
if(self.address_size == 64): tempfile = "alchemy_setup_tmp.iss"
engage_registry="SetRegView 64"
program_files="!define MULTIUSER_USE_PROGRAMFILES64"
else:
engage_registry="SetRegView 32"
program_files=""
tempfile = "alchemy_setup_tmp.nsi"
# the following replaces strings in the nsi template # the following replaces strings in the nsi template
# it also does python-style % substitution # it also does python-style % substitution
self.replace_in("installers/windows/installer_template.nsi", tempfile, { self.replace_in("installers/windows/install_template.iss", tempfile, {
"%%VERSION%%":version_vars,
"%%SOURCE%%":self.get_src_prefix(), "%%SOURCE%%":self.get_src_prefix(),
"%%INST_VARS%%":inst_vars_template % substitution_strings, "%%INST_VARS%%":inst_vars_template % substitution_strings,
"%%INSTALL_FILES%%":self.nsi_file_commands(True), "%%INSTALL_FILES%%":self.nsi_file_commands(True),
"%%PROGRAMFILES%%":program_files,
"%%ENGAGEREGISTRY%%":engage_registry,
"%%DELETE_FILES%%":self.nsi_file_commands(False)}) "%%DELETE_FILES%%":self.nsi_file_commands(False)})
# If we're on a build machine, sign the code using our Authenticode certificate. JC # If we're on a build machine, sign the code using our Authenticode certificate. JC
...@@ -705,33 +696,26 @@ def package_finish(self): ...@@ -705,33 +696,26 @@ def package_finish(self):
# Unlike the viewer binary, the VMP filenames are invariant with respect to version, os, etc. # Unlike the viewer binary, the VMP filenames are invariant with respect to version, os, etc.
for exe in ( for exe in (
self.final_exe(), self.final_exe(),
"SLVersionChecker.exe",
"llplugin/dullahan_host.exe", "llplugin/dullahan_host.exe",
): ):
self.sign(exe) self.sign(exe)
# Check two paths, one for Program Files, and one for Program Files (x86). inno_path = os.path.join(self.args['build'], os.pardir, 'packages', 'innosetup', 'iscc.exe')
# Yay 64bit windows. iscc_attempts=3
for ProgramFiles in 'ProgramFiles', 'ProgramFiles(x86)': iscc_retry_wait=15
NSIS_path = os.path.expandvars(r'${%s}\NSIS\makensis.exe' % ProgramFiles) for attempt in range(iscc_attempts):
if os.path.exists(NSIS_path):
break
installer_created=False
nsis_attempts=3
nsis_retry_wait=15
for attempt in range(nsis_attempts):
try: 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: except ManifestError as err:
if attempt+1 < nsis_attempts: if attempt+1 < iscc_attempts:
print("nsis failed, waiting %d seconds before retrying" % nsis_retry_wait, file=sys.stderr) print("iscc failed, waiting %d seconds before retrying" % iscc_retry_wait, file=sys.stderr)
time.sleep(nsis_retry_wait) time.sleep(iscc_retry_wait)
nsis_retry_wait*=2 iscc_retry_wait*=2
else: else:
# NSIS worked! Done! # ISCC worked! Done!
break break
else: else:
print("Maximum nsis attempts exceeded; giving up", file=sys.stderr) print("Maximum iscc attempts exceeded; giving up", file=sys.stderr)
raise raise
self.sign(installer_file) self.sign(installer_file)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment