Skip to content

Commit

Permalink
InnoSetup installer
Browse files Browse the repository at this point in the history
  • Loading branch information
gorlak committed May 19, 2019
1 parent 89a6b2f commit 2c36f7f
Show file tree
Hide file tree
Showing 8 changed files with 241 additions and 10 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
Bin/
Build/
Build/
*.aps
2 changes: 1 addition & 1 deletion Dependencies/InnoSetup
Submodule InnoSetup updated 84 files
+ Compil32.exe
+361 −335 Default.isl
+33 −32 Examples/64Bit.iss
+53 −48 Examples/64BitThreeArch.iss
+41 −34 Examples/64BitTwoArch.iss
+114 −0 Examples/AllPagesExample.iss
+310 −310 Examples/CodeAutomation.iss
+298 −298 Examples/CodeAutomation2.iss
+421 −374 Examples/CodeClasses.iss
+207 −204 Examples/CodeDlg.iss
+95 −80 Examples/CodeDll.iss
+167 −149 Examples/CodeExample1.iss
+118 −117 Examples/CodePrepareToInstall.iss
+34 −33 Examples/Components.iss
+23 −22 Examples/Example1.iss
+27 −24 Examples/Example2.iss
+63 −35 Examples/Example3.iss
+46 −44 Examples/ISPPExample1.iss
+3 −3 Examples/ISPPExample1License.txt
+55 −59 Examples/Languages.iss
+1 −0 Examples/License.txt
+ Examples/MyDll.dll
+25 −0 Examples/MyDll/C#/MyDll.cs
+63 −0 Examples/MyDll/C#/MyDll.csproj
+22 −0 Examples/MyDll/C#/MyDll.sln
+36 −0 Examples/MyDll/C#/Properties/AssemblyInfo.cs
+4 −0 Examples/MyDll/C#/packages.config
+5 −5 Examples/MyDll/C/MyDll.c
+1 −1 Examples/MyDll/C/MyDll.def
+76 −76 Examples/MyDll/C/MyDll.dsp
+14 −14 Examples/MyDll/Delphi/MyDll.dpr
+ Examples/MyProg-ARM64.exe
+ Examples/MyProg-IA64.exe
+ Examples/MyProg-x64.exe
+ Examples/MyProg.exe
+1 −1 Examples/Readme.txt
+30 −0 Examples/UnicodeExample1.iss
+46 −45 Examples/UninstallCodeExample1.iss
+ ISCC.exe
+ ISCmplr.dll
+ ISPP.chm
+ ISPP.dll
+384 −345 ISPPBuiltins.iss
+ ISetup.chm
+354 −0 Languages/Armenian.isl
+361 −358 Languages/BrazilianPortuguese.isl
+31 −7 Languages/Catalan.isl
+370 −0 Languages/Corsican.isl
+354 −336 Languages/Czech.isl
+356 −333 Languages/Danish.isl
+336 −313 Languages/Dutch.isl
+336 −313 Languages/Finnish.isl
+380 −353 Languages/French.isl
+379 −345 Languages/German.isl
+0 −342 Languages/Greek.isl
+353 −330 Languages/Hebrew.isl
+0 −357 Languages/Hungarian.isl
+335 −0 Languages/Icelandic.isl
+367 −340 Languages/Italian.isl
+343 −320 Languages/Japanese.isl
+351 −328 Languages/Norwegian.isl
+355 −326 Languages/Polish.isl
+341 −318 Languages/Portuguese.isl
+346 −323 Languages/Russian.isl
+0 −334 Languages/SerbianCyrillic.isl
+0 −334 Languages/SerbianLatin.isl
+349 −325 Languages/Slovenian.isl
+358 −334 Languages/Spanish.isl
+359 −0 Languages/Turkish.isl
+363 −339 Languages/Ukrainian.isl
+ Setup.e32
+ SetupLdr.e32
+ isbunzip.dll
+ isbzip.dll
+0 −495 isfaq.htm
+2 −0 isfaq.url
+ islzma.dll
+ islzma32.exe
+ islzma64.exe
+ isscint.dll
+ isunzlib.dll
+ iszlib.dll
+32 −37 license.txt
+204 −1,120 whatsnew.htm
8 changes: 4 additions & 4 deletions Source/gui/P4Win409/P4Win409.rc
Original file line number Diff line number Diff line change
Expand Up @@ -3235,8 +3235,8 @@ END
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 2008,1,17,6239
PRODUCTVERSION 2008,1,0,0
FILEVERSION RESOURCE_VERSION
PRODUCTVERSION RESOURCE_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
Expand All @@ -3254,12 +3254,12 @@ BEGIN
VALUE "Comments", "Requires Perforce 98.2.7488 or higher server"
VALUE "CompanyName", "Perforce Software"
VALUE "FileDescription", "Perforce Windows Client, English (U.S.) resource dll"
VALUE "FileVersion", "2008.1 BETA 17.6239"
VALUE "FileVersion", RESOURCE_VERSION_STRING
VALUE "InternalName", "P4Win409"
VALUE "LegalCopyright", "Copyright � 1997, 2008 Perforce Software"
VALUE "OriginalFilename", "P4Win409.DLL"
VALUE "ProductName", "Perforce Windows GUI Client "
VALUE "ProductVersion", "2008.1 BETA 17.6239"
VALUE "ProductVersion", RESOURCE_VERSION_STRING
END
END
BLOCK "VarFileInfo"
Expand Down
8 changes: 4 additions & 4 deletions Source/gui/P4Win411/P4Win411.rc
Original file line number Diff line number Diff line change
Expand Up @@ -3145,8 +3145,8 @@ END
//

VS_VERSION_INFO VERSIONINFO
FILEVERSION 2008,1,17,6239
PRODUCTVERSION 2008,1,0,0
FILEVERSION RESOURCE_VERSION
PRODUCTVERSION RESOURCE_VERSION
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
Expand All @@ -3164,12 +3164,12 @@ BEGIN
VALUE "Comments", "Requires Perforce 98.2.7488 or higher server"
VALUE "CompanyName", "Perforce Software"
VALUE "FileDescription", "Perforce Windows Client, Japanese resource dll"
VALUE "FileVersion", "2008.1 BETA 17.6239"
VALUE "FileVersion", RESOURCE_VERSION_STRING
VALUE "InternalName", "P4Win411"
VALUE "LegalCopyright", "Copyright � 1997, 2008 Perforce Software"
VALUE "OriginalFilename", "P4Win411.DLL"
VALUE "ProductName", "Perforce Windows GUI Client "
VALUE "ProductVersion", "2008.1 BETA 17.6239"
VALUE "ProductVersion", RESOURCE_VERSION_STRING
END
END
BLOCK "VarFileInfo"
Expand Down
10 changes: 10 additions & 0 deletions Source/gui/resource.h
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,16 @@
// Microsoft Visual C++ generated include file.
// Used by c:\workspac\main\p4-win\gui\P4Win409\P4Win409.rc
//
#define VERSION_MAJOR 2008
#define VERSION_MINOR 1
#define VERSION_PATCH 1
#define VERSION_STRINGIFY(major, minor, patch) _T(#major) _T(".") _T(#minor) _T(".") _T(#patch)
#define VERSION_TOSTRING(major, minor, patch) VERSION_STRINGIFY(major,minor,patch)
#define VERSION_STRING VERSION_TOSTRING( VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH )
#define RESOURCE_VERSION VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH, 0
#define RESOURCE_VERSION_STRINGIFY(major, minor, patch) #major "," #minor "," #patch ",0"
#define RESOURCE_VERSION_TOSTRING(major, minor, patch) RESOURCE_VERSION_STRINGIFY(major, minor, patch)
#define RESOURCE_VERSION_STRING RESOURCE_VERSION_TOSTRING( VERSION_MAJOR, VERSION_MINOR, VERSION_PATCH )
#define IDC_NOT_USED 1
#define P4_INT_MINOR 1
#define IDC_NEXT 2
Expand Down
2 changes: 2 additions & 0 deletions installer.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
@"%~dp0Dependencies\StrawberryPerl\perl\bin\perl.exe" installer.pl %*
@exit /b %ERRORLEVEL%
150 changes: 150 additions & 0 deletions installer.iss
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
; This script uses Inno Setup Preprocessor (ISPP) by Alex Yackimoff.
; To download and install ISPP, get the Inno Setup QuickStart Pack from http://www.jrsoftware.org/isdl.php#qsp

#define _AppName "P4Win"
#define _AppMutex "EShellMenu"
#define _AppPublisher "gorlak"
#define _AppPublisherURL "https://github.com/gorlak/P4Win"

#ifndef _AppVersionMajor
#define _AppVersionMajor "0"
#endif

#ifndef _AppVersionMinor
#define _AppVersionMinor "0"
#endif

#ifndef _AppVersionPatch
#define _AppVersionPatch "0"
#endif

#define _AppVersion _AppVersionMajor + "." + _AppVersionMinor + "." + _AppVersionPatch

#ifndef _BuildConfig
#define _BuildConfig "Release"
#endif

#define _VersionInfoComments "P4Win is a Windows client for Perforce (Helix VCS) built in MFC."
#define _VersionInfoCopyright "Copyright (C) " + _AppPublisher
#define _VersionInfoDescription "EShell Menu"
#define _VersionInfoVersion _AppVersion

[Setup]
AllowNoIcons=yes
AlwaysShowDirOnReadyPage=yes
; 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={{1068CD05-61D1-4371-96EC-FD6AA4BC9E27}
AppName={#_AppName}
AppMutex={#_AppMutex}
AppVerName={cm:NameAndVersion,{#_AppName},{#_AppVersion}}
AppPublisher={#_AppPublisher}
AppPublisherURL={#_AppPublisherURL}
AppSupportURL={#_AppPublisherURL}
AppUpdatesURL={#_AppPublisherURL}
ArchitecturesAllowed=x64
ArchitecturesInstallIn64BitMode=x64
Compression=lzma
CreateUninstallRegKey=yes
DefaultDirName={pf64}\{#_AppName}
DisableDirPage=no
DefaultGroupName={#_AppName}
OutputDir=.\
OutputBaseFilename=P4WinSetup
PrivilegesRequired=admin
SetupIconFile=Source\gui\res\P4win.ico
SolidCompression=yes
Uninstallable=yes
UninstallDisplayIcon={uninstallexe}
UsePreviousAppDir=yes
UsePreviousGroup=yes
UsePreviousTasks=yes
VersionInfoCompany={#_AppPublisher}
VersionInfoCopyright={#_AppName} {#_AppVersion}
VersionInfoDescription={#_VersionInfoDescription}
VersionInfoProductName={#_AppName}
VersionInfoProductVersion={#_VersionInfoVersion}
VersionInfoTextVersion={#_VersionInfoVersion}
VersionInfoVersion={#_VersionInfoVersion}

[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

[Files]
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
Source: "Bin\{#_BuildConfig}\P4Win.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Bin\{#_BuildConfig}\P4Win.pdb"; DestDir: "{app}"; Flags: ignoreversion
Source: "Bin\{#_BuildConfig}\P4.exe"; DestDir: "{app}"; Flags: ignoreversion
Source: "Bin\{#_BuildConfig}\P4.pdb"; DestDir: "{app}"; Flags: ignoreversion

[Icons]
Name: "{group}\{#_AppName}"; Filename: "{app}\P4Win.exe"; Comment: {#_VersionInfoComments}
Name: "{group}\{cm:UninstallProgram,{#_AppName}}"; Filename: "{uninstallexe}"; Comment: {#_VersionInfoComments}
Name: "{commondesktop}\{#_AppName}"; Filename: "{app}\P4Win.exe"; Comment: {#_VersionInfoComments}; Tasks: desktopicon
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#_AppName}"; Filename: "{app}\P4Win.exe"; Comment: {#_VersionInfoComments}; Tasks: quicklaunchicon

[Run]
Filename: "{app}\P4Win.exe"; Description: "Run {#_AppName}"; Flags: nowait postinstall shellexec

[Code]
/////////////////////////////////////////////////////////////////////
function GetUninstallString(): String;
var
sUnInstPath: String;
sUnInstallString: String;
begin
sUnInstPath := ExpandConstant('Software\Microsoft\Windows\CurrentVersion\Uninstall\{#emit SetupSetting("AppId")}_is1');
sUnInstallString := '';
if not RegQueryStringValue(HKLM, sUnInstPath, 'UninstallString', sUnInstallString) then
RegQueryStringValue(HKCU, sUnInstPath, 'UninstallString', sUnInstallString);
Result := sUnInstallString;
end;
/////////////////////////////////////////////////////////////////////
function IsUpgrade(): Boolean;
begin
Result := (GetUninstallString() <> '');
end;
/////////////////////////////////////////////////////////////////////
function UnInstallOldVersion(): Integer;
var
sUnInstallString: String;
iResultCode: Integer;
begin
// Return Values:
// 1 - uninstall string is empty
// 2 - error executing the UnInstallString
// 3 - successfully executed the UnInstallString
// default return value
Result := 0;
// get the uninstall string of the old app
sUnInstallString := GetUninstallString();
if sUnInstallString <> '' then begin
sUnInstallString := RemoveQuotes(sUnInstallString);
if Exec(sUnInstallString, '/SILENT /NORESTART /SUPPRESSMSGBOXES','', SW_HIDE, ewWaitUntilTerminated, iResultCode) then
Result := 3
else
Result := 2;
end else
Result := 1;
end;
/////////////////////////////////////////////////////////////////////
procedure CurStepChanged(CurStep: TSetupStep);
begin
if (CurStep=ssInstall) then
begin
if (IsUpgrade()) then
begin
UnInstallOldVersion();
end;
end;
end;
68 changes: 68 additions & 0 deletions installer.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use File::Basename;
use File::Copy;
use File::Path;
use Getopt::Long;


#
# globals
#

my $g_ISCCFilePath = File::Spec->catfile( 'Dependencies', 'InnoSetup', 'ISCC.exe' );
my $g_ISSFilePath = 'installer.iss';
my $g_OutputBaseFilename = 'P4WinSetup';
my $g_OutputDir = 'Bin\\Release';
my $g_VersionFilePath = 'Source\\gui\\resource.h';
my $g_OutputFilePath = File::Spec->catfile( $g_OutputDir, "$g_OutputBaseFilename.exe" );


#
# extract version
#

my $g_MajorVersion = 0;
my $g_MinorVersion = 0;
my $g_PatchVersion = 0;

open IN, "<$g_VersionFilePath" or die "could not read $g_VersionFilePath: $!";
my @VersionFileContent = <IN>;
close IN or die "could not close $g_VersionFilePath: $!";
chomp @VersionFileContent;

foreach my $line ( @VersionFileContent )
{
if ( $line =~ /VERSION_MAJOR\s+(\d+)/i )
{
$g_MajorVersion = $1;
}
elsif ( $line =~ /VERSION_MINOR\s+(\d+)/i )
{
$g_MinorVersion = $1;
}
elsif ( $line =~ /VERSION_PATCH\s+(\d+)/i )
{
$g_PatchVersion = $1;
}
}
my $g_PrintVersion = "${g_MajorVersion}.${g_MinorVersion}.${g_PatchVersion}";


#
# build installer
#

print( "\n o Building installer for $g_PrintVersion...\n" );

if ( -e $g_OutputFilePath )
{
system( "del /Q /F \"$g_OutputFilePath\"" );
}

mkpath( $g_OutputDir );

system( "\"$g_ISCCFilePath\" \"$g_ISSFilePath\" /q /o\"$g_OutputDir\" /f\"$g_OutputBaseFilename\" /d\"_AppVersionMajor=$g_MajorVersion\" /d\"_AppVersionMinor=$g_MinorVersion\" /d\"_AppVersionPatch=$g_PatchVersion\"" );

exit $? >> 8;

0 comments on commit 2c36f7f

Please sign in to comment.