Update InnoSetup files (#1988)
* inno: update visual style to modern; support hidpi * inno: fix add to PATH and add banner images * inno: fix arch specification and default to x64compatible * scripts: actually use x64compatible in package-innosetup.sh * inno: fix unsupported windows warning * gitignore: add trailing newline (cherry picked from commit 819fa9d30e2c0e737fad519fbff63ce2baff4456)
@@ -23,3 +23,5 @@ LiteXL*
|
||||
!resources/windows/*.diff
|
||||
!resources/windows/*.exe.manifest.in
|
||||
!resources/macos/*.py
|
||||
!scripts/innosetup/lite-xl@*.bmp
|
||||
!scripts/innosetup/lite-xl-banner@*.bmp
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
; Use /dArch option to create a setup for a different architecture, e.g.:
|
||||
; iscc /dArch=x86 innosetup.iss
|
||||
#ifndef Arch
|
||||
#define Arch "x64"
|
||||
#define Arch "x64compatible"
|
||||
#endif
|
||||
|
||||
[Setup]
|
||||
@@ -26,24 +26,26 @@ AppPublisherURL={#MyAppURL}
|
||||
AppSupportURL={#MyAppURL}
|
||||
AppUpdatesURL={#MyAppURL}
|
||||
|
||||
#if Arch=="x86"
|
||||
#if Pos("x86", Arch) != 0
|
||||
#define ArchInternal "i686"
|
||||
#else
|
||||
ArchitecturesAllowed={#Arch}
|
||||
ArchitecturesInstallIn64BitMode={#Arch}
|
||||
#if Arch=="x64"
|
||||
#if Pos("x64", Arch) != 0
|
||||
#define ArchInternal "x86_64"
|
||||
#elif Arch=="arm64"
|
||||
#elif Pos("arm64", Arch) != 0
|
||||
#define ArchInternal "aarch64"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
AllowNoIcons=yes
|
||||
Compression=lzma
|
||||
Compression=lzma2
|
||||
SolidCompression=yes
|
||||
DefaultDirName={autopf}/{#MyAppName}
|
||||
DefaultGroupName={#MyAppPublisher}
|
||||
UninstallFilesDir={app}
|
||||
WizardStyle=modern
|
||||
AlwaysShowDirOnReadyPage=yes
|
||||
|
||||
; Uncomment the following line to run in non administrative install mode
|
||||
; (install for current user only.)
|
||||
@@ -56,21 +58,45 @@ UsedUserAreasWarning=no
|
||||
|
||||
OutputDir=.
|
||||
OutputBaseFilename=LiteXL-{#MyAppVersion}-{#ArchInternal}-setup
|
||||
;DisableDirPage=yes
|
||||
DisableDirPage=no
|
||||
;DisableProgramGroupPage=yes
|
||||
|
||||
LicenseFile={#SourceDir}/LICENSE
|
||||
SetupIconFile={#SourceDir}/resources/icons/icon.ico
|
||||
WizardImageFile="{#SourceDir}/scripts/innosetup/wizard-modern-image.bmp"
|
||||
WizardSmallImageFile="{#SourceDir}/scripts/innosetup/litexl-55px.bmp"
|
||||
UninstallDisplayIcon={app}\{#MyAppExeName}, 0
|
||||
|
||||
; Get a list of icons for different DPIs
|
||||
#define WizardIconPath = SourceDir + "/scripts/innosetup/"
|
||||
#define FinalIconPath ""
|
||||
#define FindHandle
|
||||
#define FindResult
|
||||
#for {FindHandle = FindResult = FindFirst(WizardIconPath + "lite-xl@*.bmp", 0); FindResult; FindResult = FindNext(FindHandle)} \
|
||||
Insert(FinalIconPath, 0, WizardIconPath + FindGetFileName(FindHandle) + ",")
|
||||
#if FindHandle
|
||||
#expr FindClose(FindHandle)
|
||||
#endif
|
||||
WizardSmallImageFile="{#FinalIconPath}"
|
||||
|
||||
; Get a list of banners for different DPIs (FIXME: figure out how to reuse this code?)
|
||||
#define FinalBannerPath ""
|
||||
#for {FindHandle = FindResult = FindFirst(WizardIconPath + "lite-xl-banner@*.bmp", 0); FindResult; FindResult = FindNext(FindHandle)} \
|
||||
Insert(FinalBannerPath, 0, WizardIconPath + FindGetFileName(FindHandle) + ",")
|
||||
#if FindHandle
|
||||
#expr FindClose(FindHandle)
|
||||
#endif
|
||||
WizardImageFile="{#FinalBannerPath}"
|
||||
|
||||
; Required for the add to path option to refresh environment
|
||||
ChangesEnvironment=yes
|
||||
|
||||
[Languages]
|
||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
||||
|
||||
[Tasks]
|
||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
|
||||
Name: "portablemode"; Description: "Portable Mode"; Flags: unchecked
|
||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.2; Check: not IsAdminInstallMode
|
||||
Name: "portablemode"; Description: "Extract only, do not install"; Flags: unchecked
|
||||
Name: "envPath"; Description: "Add Lite XL to PATH"; Flags: unchecked
|
||||
|
||||
[Files]
|
||||
Source: "{#SourceDir}/lite-xl/*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs
|
||||
@@ -83,8 +109,91 @@ Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}";
|
||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon; Check: not WizardIsTaskSelected('portablemode')
|
||||
; Name: "{usersendto}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
||||
|
||||
[Registry]
|
||||
Root: "HKA"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "Open with {#MyAppName}"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\*\shell\{#MyAppName}"; ValueType: string; ValueName: "Icon"; ValueData: "{app}\{#MyAppExeName}, 0"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\*\shell\{#MyAppName}\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExename}"" ""%1"""; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\shell\{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "Open with {#MyAppName}"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\shell\{#MyAppName}"; ValueType: string; ValueName: "Icon"; ValueData: "{app}\{#MyAppExeName}, 0"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\shell\{#MyAppName}\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExename}"" ""%1"""; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\background\shell\{#MyAppName}"; ValueType: string; ValueName: ""; ValueData: "Open with {#MyAppName}"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\background\shell\{#MyAppName}"; ValueType: string; ValueName: "Icon"; ValueData: "{app}\{#MyAppExeName}, 0"; Flags: uninsdeletekey
|
||||
Root: "HKA"; Subkey: "Software\Classes\directory\background\shell\{#MyAppName}\command"; ValueType: string; ValueName: ""; ValueData: """{app}\{#MyAppExename}"" ""%V"""; Flags: uninsdeletekey
|
||||
|
||||
[Run]
|
||||
Filename: "{app}/{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
||||
|
||||
[Setup]
|
||||
Uninstallable=not WizardIsTaskSelected('portablemode')
|
||||
|
||||
; Code to add installation path to environment taken from:
|
||||
; https://stackoverflow.com/a/46609047
|
||||
[Code]
|
||||
const SystemKey = 'SYSTEM\CurrentControlSet\Control\Session Manager\Environment';
|
||||
const UserKey = 'Environment';
|
||||
const SystemHive = HKEY_LOCAL_MACHINE;
|
||||
const UserHive = HKEY_CURRENT_USER;
|
||||
|
||||
procedure EnvAddPath(Path: string);
|
||||
var
|
||||
SystemPath: string;
|
||||
UserPath: string;
|
||||
R: boolean;
|
||||
begin
|
||||
{ Retrieve user and system PATH }
|
||||
if not RegQueryStringValue(SystemHive, SystemKey, 'Path', SystemPath)
|
||||
then SystemPath := '';
|
||||
if not RegQueryStringValue(UserHive, UserKey, 'Path', UserPath)
|
||||
then UserPath := '';
|
||||
|
||||
{ Skip if the string is found in user / system path }
|
||||
if Pos(';' + Uppercase(Path) + ';', ';' + Uppercase(UserPath) + ';' + Uppercase(SystemPath) + ';') > 0 then exit;
|
||||
|
||||
{ Add the environment variable to user or system PATH depending on installation mode }
|
||||
if IsAdminInstallMode() then R := RegWriteStringValue(SystemHive, SystemKey, 'Path', SystemPath + ';' + Path + ';')
|
||||
else R := RegWriteStringValue(UserHive, UserKey, 'Path', UserPath + ';' + Path + ';');
|
||||
|
||||
{ Log any issues }
|
||||
if R then Log(Path + ' is added to PATH')
|
||||
else Log('Cannot add ' + Path + ' to PATH');
|
||||
end;
|
||||
|
||||
procedure EnvRemovePath(Path: string);
|
||||
var
|
||||
RegKeys: array of string;
|
||||
RegHives: array of integer;
|
||||
Paths: string;
|
||||
I: integer;
|
||||
P: integer;
|
||||
begin
|
||||
{ During uninstallation, we always have administrator privileges }
|
||||
RegKeys := [SystemKey, UserKey];
|
||||
RegHives := [SystemHive, UserHive];
|
||||
{ Remove the path from both user and system PATH }
|
||||
for I := 0 to Length(RegKeys) - 1 do
|
||||
begin
|
||||
{ Skip if registry key doesn't exist }
|
||||
if not RegQueryStringValue(RegHives[I], RegKeys[I], 'Path', Paths) then continue;
|
||||
{ Skip if path is not in PATH }
|
||||
P := Pos(';' + Uppercase(Path) + ';', ';' + Uppercase(Paths) + ';');
|
||||
if p = 0 then continue;
|
||||
{ Remove string from PATH }
|
||||
Delete(Paths, P - 1, Length(Path) + 1);
|
||||
{ Write to the environment variable }
|
||||
if RegWriteStringValue(RegHives[I], RegKeys[I], 'Path', Paths)
|
||||
then Log(Path + ' is removed from PATH')
|
||||
else Log('Error removing ' + Path + ' from PATH');
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure CurStepChanged(CurStep: TSetupStep);
|
||||
begin
|
||||
if (CurStep = ssPostInstall) and WizardIsTaskSelected('envPath')
|
||||
then EnvAddPath(ExpandConstant('{app}'));
|
||||
end;
|
||||
|
||||
procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);
|
||||
begin
|
||||
if CurUninstallStep = usPostUninstall
|
||||
then EnvRemovePath(ExpandConstant('{app}'));
|
||||
end;
|
||||
|
||||
@@ -31,11 +31,11 @@ main() {
|
||||
|
||||
case "$MSYSTEM" in
|
||||
MINGW64|UCRT64|CLANG64)
|
||||
arch=x64
|
||||
arch=x64compatible
|
||||
arch_file=x86_64
|
||||
;;
|
||||
MINGW32|CLANG32)
|
||||
arch=x86
|
||||
arch=x86compatible
|
||||
arch_file=i686
|
||||
;;
|
||||
CLANGARM64)
|
||||
|
||||
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 290 KiB |
|
After Width: | Height: | Size: 441 KiB |
|
After Width: | Height: | Size: 593 KiB |
|
After Width: | Height: | Size: 774 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
After Width: | Height: | Size: 17 KiB |
|
After Width: | Height: | Size: 26 KiB |
|
After Width: | Height: | Size: 35 KiB |
|
Before Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 51 KiB |