1[_ISTool]
2EnableISX=true
3[Defines]
4#define AppVersion GetEnv('LazVersion')
5// LazVersion may be 0.9.30.2RC1
6// A valid file version contains only digits, so drop the RC part
7#if pos('RC',AppVersion)>0
8  #define FileVersion = copy(AppVersion, 1, pos('RC', AppVersion)-1)
9#else
10  #if pos('pre',AppVersion)>0
11    #define FileVersion = copy(AppVersion, 1, pos('pre', AppVersion)-1)
12  #else
13    #define FileVersion = AppVersion
14  #endif
15#endif
16#define FPCVersion GetEnv('FPCVersion')
17#define FPCTargetOS GetEnv('FPCTargetOS')
18#define FPCTargetCPU GetEnv('FPCTARGETCPU')
19#define FPCFullTarget GetEnv('FPCFullTarget')
20#define AppName "Lazarus"
21#define SetupDate GetEnv('DateStamp')
22#define BuildDir GetEnv('BuildDir')
23#define QtInfDir GetEnv('QTINFDIR')
24#define HasQT5 GetEnv('HASQT5')
25#define Qt5InfDir GetEnv('QT5INFDIR')
26#define HasOpenSSL GetEnv('HASOPENSSL')
27#define OpenSSLDir GetEnv('OPENSSLDIR')
28#define IDEWidgetSet GetEnv('IDE_WidgetSet')
29#define OutputFileName GetEnv('OutputFileName')
30#define CHMHELPFILES GetEnv('CHMHELPFILES')
31[Setup]
32AllowNoIcons=yes
33AppName={#AppName}
34; AddId: registry/uninstall info: Max 127 char
35AppId={code:GetAppId}
36AppVersion={#AppVersion}
37AppVerName={#AppName} {#AppVersion}
38AppPublisher=Lazarus Team
39AppPublisherURL=http://www.lazarus.freepascal.org/
40AppSupportURL=http://www.lazarus.freepascal.org/
41AppUpdatesURL=http://www.lazarus.freepascal.org/
42#if FPCTargetCPU=="x86_64"
43ArchitecturesInstallIn64BitMode=x64
44ArchitecturesAllowed=x64
45#endif
46DefaultDirName={code:GetDefDir|{sd}\lazarus}
47DefaultGroupName={#AppName}
48AppendDefaultDirName=no
49DirExistsWarning=no
50OutputBaseFilename={#OutputFileName}
51;InternalCompressLevel=ultra64
52Compression=lzma2/ultra64
53LZMADictionarySize=131072
54;LZMADictionarySize=262144
55LZMAUseSeparateProcess=yes
56LZMANumFastBytes=270
57SolidCompression=yes
58VersionInfoVersion={#FileVersion}
59VersionInfoTextVersion={#AppVersion}-{#SetupDate}
60ShowLanguageDialog=yes
61WizardImageFile=lazarus_install_cheetah.bmp
62WizardSmallImageFile=lazgear.bmp
63WizardImageStretch=false
64ShowTasksTreeLines=true
65TimeStampRounding=0
66PrivilegesRequired=none
67ChangesAssociations=yes
68; prevent checkbox pre-set (for delete user conf). Latest inno supports unchecked checkedonce
69UsePreviousTasks=no
70; since appid can change, UsePreviousLanguage must be off
71UsePreviousLanguage=no
72UninstallDisplayIcon={app}\lazarus.exe
73DisableWelcomePage=no
74DisableDirPage=no
75
76
77[Tasks]
78Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked
79Name: delusersettings; Description: {cm:DelUserConf}; GroupDescription: {cm:CleanUp};  Flags: unchecked
80;unchecked checkedonce
81
82[Components]
83#ifdef CHMHELPFILES
84#if CHMHELPFILES!=""
85Name: installhelp; Description: {cm:InstallChm}; Types: custom full
86#endif
87#endif
88
89#if FPCTargetOS=="win32"
90;// #if IDEWidgetSet!="qt"
91Name: install4qtintfdll; Description: {cm:InstallQtLocal}; Types: custom full; Flags: checkablealone
92;// #else
93;//Name: install4qtintfdll; Description: {cm:InstallQtLocal}; Types: custom full compact; Flags: checkablealone fixed
94;// #endif
95Name: install4qtintfdll/global; Description: {cm:InstallQt}; Types: full; Flags: dontinheritcheck
96#endif
97
98#ifdef HasQT5
99#if HasQT5!=""
100#if IDEWidgetSet!="qt"
101Name: install5qtintfdll; Description: {cm:InstallQt5Local}; Types: custom full; Flags: checkablealone
102#else
103Name: install5qtintfdll; Description: {cm:InstallQt5Local}; Types: custom full compact; Flags: checkablealone fixed
104#endif
105Name: install5qtintfdll/global; Description: {cm:InstallQt5Global}; Types: full; Flags: dontinheritcheck
106#endif
107#endif
108
109#ifdef HasOpenSSL
110#if HasOpenSSL!=""
111Name: installopenssl; Description: {cm:InstallOpenSSL}; Types: custom full compact; Flags: checkablealone
112Name: installopenssl/global; Description: {cm:InstallOpenSSLGlobal}; Types: full; Flags: dontinheritcheck
113#endif
114#endif
115Name: association; Description: {cm:AssociateGroup}; Types: custom full
116Name: association/associatelfm; Description: {code:GetAssociateDesc|.lfm}; Types: custom full
117Name: association/associatelpi; Description: {code:GetAssociateDesc|.lpi}; Types: custom full
118Name: association/associatelpk; Description: {code:GetAssociateDesc|.lpk}; Types: custom full
119Name: association/associatelpr; Description: {code:GetAssociateDesc|.lpr}; Types: custom full
120Name: association/associateinc; Description: {code:GetAssociateDesc|.inc}; Types: custom full
121Name: association/associatepas; Description: {code:GetAssociateDesc|.pas}; Types: custom full
122Name: association/associatepp; Description: {code:GetAssociateDesc|.pp}; Types: custom full
123
124[InstallDelete]
125Name: {code:GetPCPForDelete}*.xml; Type: files; Tasks: delusersettings
126Name: {code:GetPCPForDelete}*.cfg; Type: files; Tasks: delusersettings
127Name: {code:GetPCPForDelete}lazarus.dci; Type: files; Tasks: delusersettings
128Name: {code:GetPCPForDelete}compilertest.pas; Type: files; Tasks: delusersettings
129Name: {code:GetPCPForDelete}easydocklayout.lyt; Type: files; Tasks: delusersettings
130Name: {code:GetPCPForDelete}laz_indentation.pas; Type: files; Tasks: delusersettings
131Name: {code:GetPCPForDelete}staticpackages.inc; Type: files; Tasks: delusersettings
132Name: {code:GetPCPForDelete}unitdictionarycodyunitdictionary*.tmp; Type: files; Tasks: delusersettings
133Name: {code:GetPCPForDelete}projectsessions\*.lps; Type: files; Tasks: delusersettings
134Name: {code:GetPCPForDelete}userschemes\*.xml; Type: files; Tasks: delusersettings
135#if FPCTargetOS=="win32"
136#include "RemovedFiles32.iss"
137#endif
138#if FPCTargetOS=="win64"
139#include "RemovedFiles64.iss"
140#endif
141
142[Files]
143Source: {#BuildDir}\*.*; DestDir: {app}; Flags: recursesubdirs
144Source: environmentoptions.xml; DestDir: {app}; AfterInstall: UpdateEnvironmentOptions; DestName: environmentoptions.xml
145
146#if FPCTargetOS=="win32"
147;//#if IDEWidgetSet=="qt"
148;//Source: {#QtInfDir}\*.dll; DestDir: {sys}; Flags: sharedfile replacesameversion
149;//#else
150Source: {#QtInfDir}\*.dll; DestDir: {sys}; Flags: sharedfile replacesameversion; Components: install4qtintfdll/global
151;//#endif
152Source: {#QtInfDir}\*.dll; DestDir: {app}; Components: install4qtintfdll
153#if FPCVersion=="2.2.0"
154Source: {#BuildDir}\fpc\{#FPCVersion}\bin\{#FPCFullTarget}\cpp.exe; DestDir: {app}\ide; MinVersion: 1,0
155#endif
156#endif
157
158#ifdef HasQT5
159#if HasQT5!=""
160#if IDEWidgetSet=="qt"
161Source: {#Qt5InfDir}\*.dll; DestDir: {sys}; Flags: sharedfile replacesameversion
162#else
163Source: {#Qt5InfDir}\*.dll; DestDir: {sys}; Flags: sharedfile replacesameversion; Components: install5qtintfdll/global
164#endif
165Source: {#Qt5InfDir}\*.dll; DestDir: {app}; Components: install5qtintfdll
166#endif
167#endif
168
169#ifdef CHMHELPFILES
170#if CHMHELPFILES!=""
171Source: {#CHMHELPFILES}\*.*; DestDir: {app}\docs\chm; Components: installhelp; Flags: recursesubdirs
172Source: {#CHMHELPFILES}\*.*; DestDir: {app}\docs\chm; Components: installhelp; Flags: recursesubdirs
173#endif
174#endif
175
176#ifdef HasOpenSSL
177#if HasOpenSSL!=""
178Source: {#OpenSSLDir}\*.*; DestDir: {app}; Components: installopenssl; Flags: recursesubdirs
179Source: {#OpenSSLDir}\*.*; DestDir: {sys}; Components: installopenssl/global; Flags: sharedfile replacesameversion
180#endif
181#endif
182
183[INI]
184Filename: {app}\Lazarus Home Page.url; Section: InternetShortcut; Key: URL; String: http://www.lazarus.freepascal.org/
185Filename: {app}\Lazarus Forums.url; Section: InternetShortcut; Key: URL; String: http://www.lazarus.freepascal.org/index.php?action=forum
186Filename: {app}\Lazarus Wiki Help.url; Section: InternetShortcut; Key: URL; String: http://wiki.lazarus.freepascal.org/
187
188[Icons]
189Name: {group}\{#AppName}; Filename: {app}\lazarus.exe; IconFilename: {app}\images\mainicon.ico; Comment: Open Source IDE for Free Pascal
190Name: {group}\{cm:ProgramOnTheWeb,Lazarus}; Filename: {app}\Lazarus Home Page.url; IconFilename: {app}\images\mainiconproject.ico
191Name: {group}\Lazarus Forums; Filename: {app}\Lazarus Forums.url; IconFilename: {app}\images\mainiconproject.ico
192Name: {group}\Lazarus Wiki Help; Filename: {app}\Lazarus Wiki Help.url; IconFilename: {app}\images\mainiconproject.ico
193Name: {group}\{cm:UninstallProgram,Lazarus}; Filename: {uninstallexe}
194Name: {userdesktop}\Lazarus; Filename: {app}\lazarus.exe; Tasks: desktopicon; IconFilename: {app}\images\mainicon.ico; Comment: Open Source IDE for Free Pascal
195Name: {group}\{#AppName} (debug); Filename: {app}\startlazarus.exe; Parameters: --debug; WorkingDir: {app}; IconFilename: {app}\images\mainicon.ico; Comment: Lazarus --debug
196
197[Run]
198Filename: {app}\fpc\{#FPCVersion}\bin\{#FPCFullTarget}\fpcmkcfg.exe; Parameters: "-d ""basepath={app}\fpc\$FPCVERSION"" -o ""{app}\fpc\{#FPCVersion}\bin\{#FPCFullTarget}\fpc.cfg"""; Flags: runhidden; Languages: ; WorkingDir: {app}\fpc\{#FPCVersion}\bin\{#FPCFullTarget}; Components:
199
200[UninstallDelete]
201Name: {app}\compilertest.pas; Type: files
202Name: {app}\Lazarus Wiki Help.url; Type: files
203Name: {app}\Lazarus Home Page.url; Type: files
204Name: {app}\Lazarus Forums.url; Type: files
205Name: {app}\fpc\{#FPCVersion}\bin\{#FPCFullTarget}\fpc.cfg; Type: files
206Name: {app}\lazarus.old.exe; Type: files
207Name: {app}\lazarus.old2.exe; Type: files
208
209[Registry]
210; HKLM
211Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lfm; ValueType: String; ValueData: Lazarus Form; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelfm
212Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lfm\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusForm.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelfm
213Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lfm\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusForm.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelfm
214Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lfm\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelfm
215
216Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpi; ValueType: String; ValueData: Lazarus Project Information; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpi
217Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpi\DefaultIcon; ValueType: String; ValueData: {app}\images\mainiconproject.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpi
218Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpi\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\mainiconproject.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpi
219Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpi\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpi
220
221Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpk; ValueType: String; ValueData: Lazarus Package File; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpk
222Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpk\DefaultIcon; ValueType: String; ValueData: {app}\images\lazaruspackage.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpk
223Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpk\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\lazaruspackage.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpk
224Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpk\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpk
225
226Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpr; ValueType: String; ValueData: Lazarus Project Main Source; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpr
227Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpr\DefaultIcon; ValueType: String; ValueData: {app}\images\lprfile.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpr
228Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpr\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\lprfile.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpr
229Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.lpr\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpr
230
231Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.inc; ValueType: String; ValueData: Object Pascal Include File; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associateinc
232Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.inc\DefaultIcon; ValueType: String; ValueData: {app}\images\includefile.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associateinc
233Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.inc\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\includefile.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associateinc
234Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.inc\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associateinc
235
236Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pas; ValueType: String; ValueData: Pascal Source Code; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepas
237Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pas\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepas
238Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pas\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepas
239Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pas\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepas
240
241Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pp; ValueType: String; ValueData: Pascal Source Code; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepp
242Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pp\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepp
243Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pp\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepp
244Root: HKLM; Subkey: Software\Classes\Lazarus.AssocFile.pp\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepp
245
246Root: HKLM; Subkey: Software\Classes\.lfm; ValueType: String; ValueData: Lazarus.AssocFile.lfm; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatelfm
247Root: HKLM; Subkey: Software\Classes\.lpi; ValueType: String; ValueData: Lazarus.AssocFile.lpi; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatelpi
248Root: HKLM; Subkey: Software\Classes\.lpk; ValueType: String; ValueData: Lazarus.AssocFile.lpk; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatelpk
249Root: HKLM; Subkey: Software\Classes\.lpr; ValueType: String; ValueData: Lazarus.AssocFile.lpr; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatelpr
250Root: HKLM; Subkey: Software\Classes\.inc; ValueType: String; ValueData: Lazarus.AssocFile.inc; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associateinc
251Root: HKLM; Subkey: Software\Classes\.pas; ValueType: String; ValueData: Lazarus.AssocFile.pas; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatepas
252Root: HKLM; Subkey: Software\Classes\.pp; ValueType: String; ValueData: Lazarus.AssocFile.pp; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association/associatepp
253
254Root: HKLM; Subkey: Software\Lazarus\Capabilities; ValueType: String; ValueName: ApplicationName; ValueData: Lazarus IDE; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association
255Root: HKLM; Subkey: Software\Lazarus\Capabilities; ValueType: String; ValueName: ApplicationDescription; ValueData: Open Source IDE for Free Pascal.; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association
256Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .lfm; ValueType: String; ValueData: Lazarus.AssocFile.lfm; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelfm
257Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .lpi; ValueType: String; ValueData: Lazarus.AssocFile.lpi; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpi
258Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .lpk; ValueType: String; ValueData: Lazarus.AssocFile.lpk; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpk
259Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .lpr; ValueType: String; ValueData: Lazarus.AssocFile.lpr; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatelpr
260Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .inc; ValueType: String; ValueData: Lazarus.AssocFile.inc; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associateinc
261Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .pas; ValueType: String; ValueData: Lazarus.AssocFile.pas; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepas
262Root: HKLM; Subkey: Software\Lazarus\Capabilities\FileAssociations; ValueName: .pp; ValueType: String; ValueData: Lazarus.AssocFile.pp; Flags: uninsdeletekey; Check: IsHKLMWriteable; Components: association/associatepp
263
264Root: HKLM; Subkey: Software\RegisteredApplications; ValueType: String; ValueName: Lazarus; ValueData: Software\Lazarus\Capabilities; Flags: uninsdeletevalue; Check: IsHKLMWriteable; Components: association
265
266; HKCU
267Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lfm; ValueType: String; ValueData: Lazarus Form; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelfm
268Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lfm\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusForm.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelfm
269Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lfm\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusForm.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelfm
270Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lfm\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelfm
271
272Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpi; ValueType: String; ValueData: Lazarus Project Information; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpi
273Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpi\DefaultIcon; ValueType: String; ValueData: {app}\images\mainiconproject.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpi
274Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpi\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\mainiconproject.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpi
275Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpi\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpi
276
277Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpk; ValueType: String; ValueData: Lazarus Package File; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpk
278Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpk\DefaultIcon; ValueType: String; ValueData: {app}\images\lazaruspackage.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpk
279Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpk\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\lazaruspackage.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpk
280Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpk\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpk
281
282Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpr; ValueType: String; ValueData: Lazarus Project Main Source; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpr
283Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpr\DefaultIcon; ValueType: String; ValueData: {app}\images\lprfile.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpr
284Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpr\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\lprfile.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpr
285Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.lpr\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatelpr
286
287Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.inc; ValueType: String; ValueData: Object Pascal Include File; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associateinc
288Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.inc\DefaultIcon; ValueType: String; ValueData: {app}\images\includefile.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associateinc
289Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.inc\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\includefile.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associateinc
290Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.inc\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associateinc
291
292Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pas; ValueType: String; ValueData: Pascal Source Code; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepas
293Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pas\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepas
294Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pas\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepas
295Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pas\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepas
296
297Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pp; ValueType: String; ValueData: Pascal Source Code; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepp
298Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pp\DefaultIcon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepp
299Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pp\Shell\Open; ValueName: Icon; ValueType: String; ValueData: {app}\images\LazarusSource.ico; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepp
300Root: HKCU; Subkey: Software\Classes\Lazarus.AssocFile.pp\Shell\Open\Command; ValueType: String; ValueData: """{app}\lazarus.exe"" ""%1"""; Flags: uninsdeletekey; Check: IsHKLMNotWriteable; Components: association/associatepp
301
302Root: HKCU; Subkey: Software\Classes\.lfm; ValueType: String; ValueData: Lazarus.AssocFile.lfm; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatelfm
303Root: HKCU; Subkey: Software\Classes\.lpi; ValueType: String; ValueData: Lazarus.AssocFile.lpi; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatelpi
304Root: HKCU; Subkey: Software\Classes\.lpk; ValueType: String; ValueData: Lazarus.AssocFile.lpk; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatelpk
305Root: HKCU; Subkey: Software\Classes\.lpr; ValueType: String; ValueData: Lazarus.AssocFile.lpr; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatelpr
306Root: HKCU; Subkey: Software\Classes\.inc; ValueType: String; ValueData: Lazarus.AssocFile.inc; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associateinc
307Root: HKCU; Subkey: Software\Classes\.pas; ValueType: String; ValueData: Lazarus.AssocFile.pas; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatepas
308Root: HKCU; Subkey: Software\Classes\.pp; ValueType: String; ValueData: Lazarus.AssocFile.pp; Flags: uninsdeletevalue; Check: IsHKLMNotWriteable; Components: association/associatepp
309
310[Languages]
311Name: default; MessagesFile: lazarus.def.isl
312Name: ca; MessagesFile: compiler:Languages\Catalan.isl
313Name: cs; MessagesFile: compiler:Languages\Czech.isl
314Name: de; MessagesFile: lazarus.de.isl
315Name: es; MessagesFile: lazarus.es.isl
316Name: fi; MessagesFile: compiler:Languages\Finnish.isl
317Name: fr; MessagesFile: lazarus.fr.isl
318Name: hu; MessagesFile: compiler:Languages\Hungarian.isl
319Name: it; MessagesFile: compiler:Languages\Italian.isl
320Name: nl; MessagesFile: compiler:Languages\Dutch.isl
321Name: no; MessagesFile: compiler:Languages\Norwegian.isl
322Name: pl; MessagesFile: compiler:Languages\Polish.isl
323Name: pt; MessagesFile: compiler:Languages\Portuguese.isl
324Name: pt_BR; MessagesFile: lazarus.pt_BR.isl
325Name: ru; MessagesFile: lazarus.ru.isl
326;Slovak.isl not avail with latest inno setup
327;Name: sk; MessagesFile: compiler:Languages\Slovak.isl
328Name: sl; MessagesFile: compiler:Languages\Slovenian.isl
329Name: zh_CN; MessagesFile: lazarus.zh_CN.isl
330
331[Code]
332type
333  TCfgFileState = (csNoFile, csUnreadable, csParsedOk);
334
335var
336  ForcePrimaryAppId: Boolean;  // GetAppId should ignore secondary
337
338  IsSecondaryUpdate: Boolean;     //   Also used by GetAppId
339
340  // User Selected
341  SecondPCP: String; // used by common.GetPCPForDelete
342
343function IsSecondaryCheckBoxChecked: Boolean; forward;                          // in secondary.pas
344function DidRunUninstaller: Boolean; forward;                                   // in uninst.pas
345function HasSavedConfigFromUninstall(AFolder: String): Boolean; forward;        // in uninst.pas
346function GetSavedConfigFromUninstall(AFolder: String): TStringList; forward;    // in uninst.pas
347function GetSavedPCPFromUninstall(AFolder: String): String; forward;            // in uninst.pas
348function GetSavedStateFromUninstall(AFolder: String): TCfgFileState; forward;   // in uninst.pas
349
350
351#include "innoscript\common.pas"
352#include "innoscript\conffile.pas"
353#include "innoscript\secondary.pas"
354#include "innoscript\uninst.pas"
355#include "innoscript\about.pas"
356
357var
358  HasBeenOnGroupSelect: Boolean;
359
360procedure CurPageChanged(CurPageID: Integer);
361begin
362  if CurPageID = wpInstalling then
363    AddInfoComponentsToProgressWizzard;
364
365  if (CurPageID = wpSelectDir) then
366    AddSecondaryCheckBoxToTargetDirWizzard;
367
368  if CurPageID = wpFinished then
369    CreateOrSaveConfigFile;
370
371  if CurPageId = wpSelectTasks then begin
372    // desktop item
373    // index 0 is the caption/ 1 the checkbox
374    WizardForm.TasksList.ItemEnabled[0] := not(IsSecondaryCheckBoxChecked or  IsSecondaryUpdate);
375    WizardForm.TasksList.ItemEnabled[1] := not(IsSecondaryCheckBoxChecked or  IsSecondaryUpdate);
376	if IsSecondaryCheckBoxChecked or  IsSecondaryUpdate then
377      WizardForm.TasksList.Checked[1] := False;
378  end;
379
380  if CurPageId = wpSelectProgramGroup then begin
381    if not HasBeenOnGroupSelect then
382      if (IsSecondaryCheckBoxChecked or IsSecondaryUpdate) and
383         (CompareText(WizardForm.GroupEdit.Text, 'Lazarus') = 0)
384        then
385          WizardForm.GroupEdit.Text := 'Lazarus 2';
386    HasBeenOnGroupSelect := True;
387  end;
388
389end;
390
391function NextButtonClick(CurPage: Integer): Boolean;
392var
393    s, folder: String;
394    FolderEmpty: Boolean;
395begin
396	// by default go to next page
397	Result := true;
398    ForcePrimaryAppId := False;
399
400	// if curpage is wpSelectDir check is filesystem
401	if (CurPage = wpSelectDir) then
402	begin
403        Log('NextButton in SelectDir');
404        IsSecondaryUpdate := False;
405        ClearExistingConfigForFolder;
406		folder := WizardDirValue;
407
408		if Pos( ' ', folder ) > 0 then
409		begin
410			MsgBox(SaveCustomMessage('FolderHasSpaces', 'Selected folder contains spaces, please select a folder without spaces in it.'),
411                   mbInformation, MB_OK );
412			Result := false;
413			exit;
414		end;
415
416		FolderEmpty := IsDirEmpty(folder);
417        LoadExistingConfigForFolder(folder);
418        IsSecondaryUpdate := HasPCPLoadedFromDir(folder, True); // check for uninstalled file too
419        SecondPCP := GetPCPLoadedFromDir(folder, True);
420// TODO:
421// If we came back AFTER running uninstall,
422// AND changed the folder for and back (ending with the uninstall folder selected)
423// THEN we should ask, if the uninstalled (todo uninstall cfg file) should be restored?
424		UpdateUninstallInfo;
425
426        if FolderEmpty then
427          exit;
428
429		if (IsSecondaryCheckBoxChecked) then
430		begin    // Secondary
431            case GetStateLoadedFromDir(folder, True) of
432              csNoFile: begin
433				  Result := False;
434                  MsgBox(Format(CustomMessage('FolderForSecondNoFile'), [#13#10]), mbConfirmation, MB_OK);
435                  exit;
436                end;
437              csUnreadable: begin
438				  Result := False;
439                  MsgBox(Format(CustomMessage('FolderForSecondBadFile'), [#13#10]), mbConfirmation, MB_OK);
440                  exit;
441                end;
442              csParsedOk: begin
443// TODO ask, depending on uninstaller availability
444			      if (UninstallState = UIOtherNeeded) or (UninstallState = uiInconsistent)
445                  then begin
446                    MsgBox(Format(CustomMessage('FolderForSecondBadUninstall'), [#13#10]), mbConfirmation, MB_OK);
447				    Result := False;
448                    exit;
449                  end
450                  else
451			      if ((UninstallState = uiDone) or (UninstallState = UIOtherNeeded)) or
452                     (UninstallState = uiInconsistent)
453                  then begin
454                    Result := MsgBox(Format(CustomMessage('FolderForSecondUpgrading'), [#13#10, SecondPCP]), mbConfirmation, MB_YESNO) = IDYES;
455                  end;
456                end;
457            end;
458		end
459
460        else
461		begin
462            // Dir NOT empty: do not warn, if uiDestNeeded => folder content is updatable lazarus
463			if ((UninstallState = uiDone) or (UninstallState = UIOtherNeeded)) or
464               (UninstallState = uiInconsistent)
465            then begin
466                if IsSecondaryUpdate then
467                    Result := MsgBox(Format(SaveCustomMessage('FolderForSecondUpgrading', 'The target folder is not empty.%0:sIt contains a secondary Lazarus installation using the following folder for configuration:%0:s%1:s%0:s%0:sContinue with installation?'),
468                                           {}[#13#10, SecondPCP]), mbConfirmation, MB_YESNO) = IDYES
469                else
470				    Result := MsgBox(SaveCustomMessage('FolderNotEmpty', 'The target folder is not empty. Continue with installation?'),
471                                     mbConfirmation, MB_YESNO) = IDYES;
472			end;
473		end;
474	end;
475
476    if CurPage = wpAskConfDir.ID then begin
477      Log('NextButton in AskConfDir');
478      s := wpAskConfDir.Values[0];
479      if (not IsDirEmpty(s)) then begin
480        MsgBox(Format(CustomMessage('FolderForConfNotEmpty'), [#13#10]), mbConfirmation, MB_OK);
481		Result := False;
482        exit;
483      end;
484
485      SecondPCP := s;
486    end;
487end;
488
489function ShouldSkipPage(PageId: Integer): Boolean;
490begin
491  Result := False
492  if PageId = wpAskConfDir.ID then begin
493    Log('ShouldSkip  AskConfDir  IsSecondaryUpdate='+dbgsBool(IsSecondaryUpdate)+
494       '  Check='+dbgsBool(IsSecondaryCheckBoxChecked)
495       );
496
497    Result := (not IsSecondaryCheckBoxChecked) or IsSecondaryUpdate;
498  end;
499  // UnInst uses: SkipAskUninst()
500end;
501
502function UpdateReadyMemo(Space, NewLine,
503  MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, MemoComponentsInfo, MemoGroupInfo,
504  MemoTasksInfo: String): String;
505begin
506  Result := '';
507  if MemoUserInfoInfo <> '' then
508    Result := Result + MemoUserInfoInfo + NewLine;
509  if MemoDirInfo <> '' then
510    Result := Result + MemoDirInfo + NewLine;
511  if MemoTypeInfo <> '' then
512    Result := Result + MemoTypeInfo + NewLine;
513  if MemoComponentsInfo <> '' then
514    Result := Result + MemoComponentsInfo + NewLine;
515  if MemoGroupInfo <> '' then
516    Result := Result + MemoGroupInfo + NewLine;
517  if MemoTasksInfo <> '' then
518    Result := Result + MemoTasksInfo + NewLine;
519  if (IsSecondaryCheckBoxChecked) then begin
520    if IsSecondaryUpdate then
521      Result := Result + Format(SaveCustomMessage('SecondTaskUpdate', ''), [NewLine, Space, SecondPCP])
522    else
523      Result := Result + Format(SaveCustomMessage('SecondTaskCreate', ''), [NewLine, Space, SecondPCP]);
524  end
525  else
526  if IsSecondaryUpdate then
527    Result := Result + Format(SaveCustomMessage('SecondTaskUpdate', ''), [NewLine, Space, SecondPCP]);
528end;
529
530function PrepareToInstall(var NeedsRestart: Boolean): String;
531begin
532  Result := '';
533  ForcePrimaryAppId := False;
534end;
535
536procedure InitializeWizard();
537var
538  s, s2 : String;
539begin
540  ForcePrimaryAppId := False;
541  HasBeenOnGroupSelect := False;
542
543  InitializeUninstallInfo;
544  CreateUninstallWizardPage;
545
546  CreateSecondaryConfFolderAndNameWizardPage;
547
548end;
549
550//function InitializeUninstall(): Boolean;
551//var i: integer;
552//begin
553//  Result := True;
554//  for i := 0 to ParamCount - 1 do
555//    if ParamStr(i) = '/VERBOSE' then
556//      Result :=
557//        MsgBox(Format(CustomMessage('UninstVerbose'),
558//                      {}[RemoveQuotes(GetUninstallData('Inno Setup: App Path')),
559//                       GetUninstallData('DisplayName')]),
560//               mbConfirmation, MB_YESNO) = IDYES;
561//
562//end;
563
564
565