diff --git a/cmake-proxies/cmake-modules/AudacityInnoSetup.cmake b/cmake-proxies/cmake-modules/AudacityInnoSetup.cmake index 775d51cfb..6a757680d 100644 --- a/cmake-proxies/cmake-modules/AudacityInnoSetup.cmake +++ b/cmake-proxies/cmake-modules/AudacityInnoSetup.cmake @@ -23,11 +23,12 @@ if( INNO_SETUP_COMPILER ) -DOUTPUT_DIR=${TEMP_PACKAGE_PATH} -DINNO_SETUP_COMPILER=${INNO_SETUP_COMPILER} -DEMBED_MANUAL=${${_OPT}package_manual} - -DBUILDING_64_BIT=${IS_64BIT} + -DIS_64_BIT=${IS_64BIT} -DSIGN=${${_OPT}perform_codesign} -DWINDOWS_CERTIFICATE=${WINDOWS_CERTIFICATE} -D WINDOWS_CERTIFICATE_PASSWORD=${WINDOWS_CERTIFICATE_PASSWORD} -P "${CMAKE_SOURCE_DIR}/win/Inno_Setup_Wizard/BuildInnoSetupInstaller.cmake" + -D CMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE} -parallel ${CMAKE_BUILD_PARALLEL_LEVEL} VERBATIM ) diff --git a/win/InnoSetupLanguages/README.txt b/win/InnoSetupLanguages/README.txt new file mode 100644 index 000000000..6b9d991fe --- /dev/null +++ b/win/InnoSetupLanguages/README.txt @@ -0,0 +1,3 @@ +If you manually add isl language files to this directory then the innosetup installer creation process will be able to find them. + +Note that it ignores any file within this directory which is not *.isl diff --git a/win/Inno_Setup_Wizard/BuildInnoSetupInstaller.cmake b/win/Inno_Setup_Wizard/BuildInnoSetupInstaller.cmake index 1a3aa0598..3dce6e3d2 100644 --- a/win/Inno_Setup_Wizard/BuildInnoSetupInstaller.cmake +++ b/win/Inno_Setup_Wizard/BuildInnoSetupInstaller.cmake @@ -4,13 +4,16 @@ # SOURCE_DIR - should be set to CMAKE_SOURCE_DIR by teh caller # OUTPUT_DIR - directory, where installer will be built # INNO_SETUP_COMPILER - InnoSetup compiler executable -# BUILDING_64_BIT - Flag, that indicates that we are building a 64-bit installer +# IS_64_BIT - Flag, that indicates that we are building a 64-bit installer # EMBED_MANUAL - embed a fresh copy of manual # SIGN - sign the installer # WINDOWS_CERTIFICATE - path to PFX file. If not present, env:WINDOWS_CERTIFICATE will be used # WINDOWS_CERTIFICATE_PASSWORD - password for the PFX file. If not present, env:WINDOWS_CERTIFICATE_PASSWORD will be used -if( BUILDING_64_BIT ) +# Allow if statements to use the new IN_LIST operator (compatibility override for CMake <3.3) +cmake_policy( SET CMP0057 NEW ) + +if( IS_64_BIT ) set( INSTALLER_SUFFIX "x64" ) set( INSTALLER_X64_MODE "ArchitecturesInstallIn64BitMode=x64") else() @@ -48,32 +51,76 @@ configure_file("${OUTPUT_DIR}/tenacity.iss.in" "${OUTPUT_DIR}/tenacity.iss") file(COPY "${SOURCE_DIR}/presets" DESTINATION "${OUTPUT_DIR}/Additional") -file(COPY +file(COPY "${SOURCE_DIR}/LICENSE.txt" - "${SOURCE_DIR}/README.md" + "${SOURCE_DIR}/win/README.rtf" "${SOURCE_DIR}/win/tenacity.ico" - DESTINATION + "${SOURCE_DIR}/win/darktenacity.ico" + DESTINATION "${OUTPUT_DIR}/Additional" ) +if( DEFINED CMAKE_BUILD_TYPE ) + if( EXISTS "${BUILD_DIR}/bin/${CMAKE_BUILD_TYPE}" ) + # Use CMAKE_BUILD_TYPE value if defined and previously built + set( INNOSETUP_BUILD_CONFIGURATIONS "${CMAKE_BUILD_TYPE};" ) + else() + message( FATAL_ERROR "You defined a value for CMAKE_BUILD_TYPE which has not already been built, please build it and try again" ) + endif() +elseif( DEFINED CMAKE_INSTALL_CONFIG_NAME ) + if( EXISTS "${BUILD_DIR}/bin/${CMAKE_INSTALL_CONFIG_NAME}" ) + # Use install --config value if defined and previously built + set( INNOSETUP_BUILD_CONFIGURATIONS "${CMAKE_INSTALL_CONFIG_NAME};" ) + else() + message( FATAL_ERROR "You defined a value for CMAKE_INSTALL_CONFIG_NAME which has not already been built, please build it and try again" ) + endif() +else() + # These are listed in order of preference in case more than one of them are built + # It must include all four configurations for this to work correctly on multi-config + set( INNOSETUP_BUILD_CONFIGURATIONS "MinSizeRel;Release;RelWithDebInfo;Debug" ) + message( STATUS "You did not define a build type manually so we will attempt to find build types in this order: ${INNOSETUP_BUILD_CONFIGURATIONS}" ) +endif() + # "Install" prebuilt package -execute_process( - COMMAND - ${CMAKE_COMMAND} - --install ${BUILD_DIR} - --prefix "${OUTPUT_DIR}/Package" -) +set( VALID_BUILD_TYPE_FOUND FALSE ) +foreach( config ${INNOSETUP_BUILD_CONFIGURATIONS} ) + file( GLOB VALID_BUILD + "${BUILD_DIR}/bin/${config}/Tenacity" "${BUILD_DIR}/bin/${config}/Tenacity.*" + "${BUILD_DIR}/bin/${config}/tenacity" "${BUILD_DIR}/bin/${config}/tenacity.*" + ) + if( VALID_BUILD ) + message ( STATUS "Using build type ${config} to create innosetup installer" ) + execute_process( + COMMAND + ${CMAKE_COMMAND} + --install ${BUILD_DIR} + --prefix "${OUTPUT_DIR}/Package" + --config ${config} + # When we upgrade to CMake min version 3.19 we can use this + # COMMAND_ERROR_IS_FATAL ANY + ) + set( VALID_BUILD_TYPE_FOUND TRUE FORCE ) + set( VALID_BUILD_TYPE ${config} ) + break() + endif() +endforeach() -# Build the installer +if( NOT VALID_BUILD_TYPE_FOUND ) + message( FATAL_ERROR "You must build the project successfully before building the innosetup target" ) +endif() execute_process( COMMAND - ${INNO_SETUP_COMPILER} /Sbyparam=$p "tenacity.iss" + ${INNO_SETUP_COMPILER} /Sbyparam=$p "tenacity.iss" /Qp WORKING_DIRECTORY ${OUTPUT_DIR} + # When we upgrade to CMake min version 3.19 we can use this + # COMMAND_ERROR_IS_FATAL ANY ) -# Emulate CPack behavior +# If we enable COMMAND_ERROR_IS_FATAL then if we reach here we are sure we successfully created the installer +# message ( STATUS "Successfully created innosetup installer using build type ${VALID_BUILD_TYPE}" ) +# Emulate CPack behavior file( COPY "${OUTPUT_DIR}/Output/" DESTINATION "${BUILD_DIR}/package" ) diff --git a/win/Inno_Setup_Wizard/tenacity.iss.in b/win/Inno_Setup_Wizard/tenacity.iss.in index f4cc6f5e3..c471f558f 100644 --- a/win/Inno_Setup_Wizard/tenacity.iss.in +++ b/win/Inno_Setup_Wizard/tenacity.iss.in @@ -3,81 +3,71 @@ ; License: GPL v2. See License.txt. ; ; tenacity.iss -; Vaughan Johnson, Leland Lucius, Martyn Shaw, Richard Ash, & others -; -; This requires that the ISS Preprocessor be installed - -#define AppExe "Package\tenacity.exe" +#define AppExe "Package\tenacity.exe" #define AppMajor "" #define AppMinor "" #define AppRev "" #define AppBuild "" -#define FullVersion ParseVersion(AppExe, AppMajor, AppMinor, AppRev, AppBuild) +#define FullVersion GetVersionComponents(AppExe, AppMajor, AppMinor, AppRev, AppBuild) #define AppVersion Str(AppMajor) + "." + Str(AppMinor) + "." + Str(AppRev) #define AppName GetStringFileInfo(AppExe, PRODUCT_NAME) [UninstallRun] ; Uninstall prior installations. -Filename: "{app}\unins*.*"; +Filename: "{app}\unins*.*"; RunOnceId: "UninstallPrior" [Setup] -; compiler-related directives -OutputBaseFilename=tenacity-win-{#AppVersion}-@INSTALLER_SUFFIX@ - -; Use 100% images by default +; Icons +SetupIconFile="Additional\tenacity.ico" +UninstallDisplayIcon="{app}\tenacity.exe" WizardImageFile=".\tenacity_InnoWizardImage_100.bmp" WizardSmallImageFile=".\tenacity_InnoWizardSmallImage_100.bmp" -SolidCompression=yes - -; installer-related directives -; From Inno 5.5.7, Inno defaults to disabling the Welcome page as recommended -; by Microsoft's desktop applications guideline, but we don't want to do that. -DisableWelcomePage=no - +; App/Version information AppName={#AppName} AppVerName=Tenacity {#AppVersion} -; Specify AppVersion as well, so it appears in the Add/Remove Programs entry. AppVersion={#AppVersion} AppPublisher="Tenacity Team" AppPublisherURL=https://tenacityaudio.org/ AppSupportURL=https://tenacityaudio.org/ AppUpdatesURL=https://tenacityaudio.org/ -ChangesAssociations=yes -@INSTALLER_X64_MODE@ - -DefaultDirName={commonpf}\Tenacity - VersionInfoProductName={#AppName} VersionInfoProductTextVersion={#GetFileProductVersion(AppExe)} VersionInfoDescription={#AppName + " " + AppVersion + " Setup"} -VersionInfoVersion={#GetFileVersion(AppExe)} +VersionInfoVersion={#GetVersionNumbersString(AppExe)} VersionInfoCopyright={#GetFileCopyright(AppExe)} -; Don't disable the "Select Destination Location" wizard, even if +; Default install location +DefaultDirName={commonpf}\Tenacity + +; Tells explorer to refresh file assocations to pickup any changes +ChangesAssociations=yes + +; Does package->compress instead of compress->package +SolidCompression=yes + +; Don't disable the "Select Destination Location" wizard, even if ; Tenacity is already installed. DisableDirPage=no ; Always warn if dir exists, because we'll overwrite previous Tenacity. DirExistsWarning=yes DisableProgramGroupPage=yes -UninstallDisplayIcon="{app}\tenacity.exe" -; No longer force them to accept the license, just display it. LicenseFile=..\LICENSE.txt +; Always show welcome page +DisableWelcomePage=no + +; Display license information before install InfoBeforeFile=".\tenacity_InnoWizard_InfoBefore.rtf" -InfoAfterFile=Additional\README.md -; We no longer produce new ANSI builds. -; As we use Inno Setup (u), the Unicode version, to build this script, -; the MinVersion will automatically be set to what we need. -; We no longer explicitly set it. -; MinVersion=4.0,5.0 - -; cosmetic-related directives -SetupIconFile="Additional\tenacity.ico" +; Display README after install +InfoAfterFile=Additional\README.rtf +; Directives using information passed by CMake +@INSTALLER_X64_MODE@ @SIGN_TOOL@ +OutputBaseFilename=tenacity-win-{#AppVersion}-@INSTALLER_SUFFIX@ [INI] Filename: "{app}\FirstTime.ini"; Section: "FromInno"; Key: "ResetPrefs"; String: "1"; Tasks: resetPrefs; @@ -93,8 +83,8 @@ Name: resetPrefs; Description: "{cm:ResetPrefs}"; Flags: unchecked ; Prime the first time .ini file so the permissions can be set Source: ".\FirstTimeModel.ini"; DestDir: "{app}"; DestName: "FirstTime.ini"; Permissions: users-modify -; Don't display in separate window, rather as InfoAfterFile. Source: "..\README.md"; DestDir: "{app}"; Flags: ignoreversion isreadme -Source: "Additional\README.md"; DestDir: "{app}"; Flags: ignoreversion +; Manually create RTF version of README +Source: "Additional\README.rtf"; DestDir: "{app}"; Flags: ignoreversion Source: "Additional\LICENSE.txt"; DestDir: "{app}"; Flags: ignoreversion Source: "{#AppExe}"; DestDir: "{app}"; Flags: ignoreversion @@ -150,7 +140,7 @@ end; procedure InitializeWizard; begin { If using larger scaling, load the correct size of images } - if GetScalingFactor > 100 then + if GetScalingFactor > 100 then begin LoadEmbededScaledBitmap(WizardForm.WizardBitmapImage, 'tenacity_InnoWizardImage'); LoadEmbededScaledBitmap(WizardForm.WizardBitmapImage2, 'tenacity_InnoWizardImage'); @@ -163,32 +153,31 @@ Name: "{commonprograms}\Tenacity"; Filename: "{app}\tenacity.exe" Name: "{commondesktop}\Tenacity"; Filename: "{app}\tenacity.exe"; Tasks: desktopicon [InstallDelete] -; Get rid of Tenacity 1.0.0 stuff that's no longer used. -Type: files; Name: "{app}\tenacity-help.htb" -Type: files; Name: "{app}\tenacity-1.2-help.htb" -; Get rid of previous versions of MSVC runtimes. +; Get rid of previous versions of MSVC runtimes +; Currently MSVC runtime versions 8, 9, 10, 11, 12, 13 Type: files; Name: "{app}\Microsoft.VC80.CRT.manifest" -Type: files; Name: "{app}\Microsoft.VC90.CRT.manifest" Type: files; Name: "{app}\msvcp80.dll" Type: files; Name: "{app}\msvcr80.dll" +Type: files; Name: "{app}\Microsoft.VC90.CRT.manifest" Type: files; Name: "{app}\msvcp90.dll" Type: files; Name: "{app}\msvcr90.dll" +Type: files; Name: "{app}\Microsoft.VC100.CRT.manifest" +Type: files; Name: "{app}\msvcp100.dll" +Type: files; Name: "{app}\msvcr100.dll" +Type: files; Name: "{app}\Microsoft.VC110.CRT.manifest" +Type: files; Name: "{app}\msvcp110.dll" +Type: files; Name: "{app}\msvcr110.dll" +Type: files; Name: "{app}\Microsoft.VC120.CRT.manifest" Type: files; Name: "{app}\msvcp120.dll" Type: files; Name: "{app}\msvcr120.dll" +Type: files; Name: "{app}\Microsoft.VC130.CRT.manifest" +Type: files; Name: "{app}\msvcp130.dll" +Type: files; Name: "{app}\msvcr130.dll" ; Get rid of previous help folder. Type: filesandordirs; Name: "{app}\help" -; Don't want to do this because user may have stored their own. -; Type: filesandordirs; Name: "{app}\vst" - -; We've switched from a folder in the start menu to just the Tenacity.exe at the top level. -; Get rid of 1.0.0 folder and its icons. -Type: files; Name: "{commonprograms}\Tenacity\tenacity.exe" -Type: files; Name: "{commonprograms}\Tenacity\unins000.exe" -Type: dirifempty; Name: "{commonprograms}\Tenacity" - ;Get rid of previous uninstall item Type: files; Name: "{app}\unins*.*" @@ -217,7 +206,7 @@ Type: files; Name: "{app}\Plug-Ins\gverb_1216.dll" Type: files; Name: "{app}\Plug-Ins\crossfadein.ny" Type: files; Name: "{app}\Plug-Ins\crossfadeout.ny" Type: files; Name: "{app}\Plug-Ins\clicktrack.ny" - + [Registry] ; No longer allow user to choose whether to associate AUP file type with Tenacity. ; Leaving this one commented out example of the old way. @@ -248,7 +237,7 @@ Filename: "{app}\tenacity.exe"; Description: "{cm:LaunchProgram,Tenacity}"; Flag ; http://www.jrsoftware.org/files/istrans/ ; ; Set this to the base of the unofficial Inno Setup translations -#define UrlBase "http://raw.github.com/jrsoftware/issrc/master/Files/Languages/Unofficial/" +#define UrlBase "https://raw.githubusercontent.com/jrsoftware/issrc/main/Files/Languages/Unofficial/" ; This macro will use the Windows PowerShell to download the given translation into ; the Inno Setup Languages folder if it hasn't already been downloaded. diff --git a/win/Inno_Setup_Wizard/tenacity_InnoWizard_InfoBefore.rtf b/win/Inno_Setup_Wizard/tenacity_InnoWizard_InfoBefore.rtf index 14cd446c7..21bf2a6e0 100644 Binary files a/win/Inno_Setup_Wizard/tenacity_InnoWizard_InfoBefore.rtf and b/win/Inno_Setup_Wizard/tenacity_InnoWizard_InfoBefore.rtf differ diff --git a/win/README.rtf b/win/README.rtf new file mode 100644 index 000000000..4efe5a368 Binary files /dev/null and b/win/README.rtf differ diff --git a/win/darkaudacity.ico b/win/darktenacity.ico similarity index 100% rename from win/darkaudacity.ico rename to win/darktenacity.ico