OSDN Git Service

652f138914b3d79face5194ef202646eac47bcf4
[winmerge-jp/winmerge-jp.git] / Installer / InnoSetup / WinMerge.iss
1 ;           Programmed by:  Christian Blackburn, Christian List, Kimmo Varis,\r
2 ;                 Purpose:  The is the Inno Setup installation script for distributing our WinMerge application.\r
3 ; Tools Needed To Compile:  Inno Setup 5.1.7+ (http://www.jrsoftware.org/isdl.php), Inno Setup QuickStart Pack 5.1.7+(http://www.jrsoftware.org/isdl.php)\r
4 ;                           note: the versions of Inno Setup and the QuickStart Pack should be identical to ensure proper function\r
5 ;Directly Dependant Files:  Because this is an installer. It would be difficult to list and maintain each of the files referenced\r
6 ;                           throughout the script in the header.  If you search this plain text script for a particular file in our Subversio repository and it\r
7 ;                           doesn't appear then this script is not directly dependant on that file.\r
8 ;Compilation Instructions:  1.  Open this file in Inno Setup or ISTool\r
9 ;                           2.  Make sure Compression=LZMA/Ultra, InternalCompressLevel=Ultra, and SolidCompression=True these values are lowered during\r
10 ;                               development to speed up compilation, however at release we want the intaller to be as strong as possible.\r
11 ;                           3. Check all files are present:\r
12 ;                                   -From ISTool Click\r
13 ;                           4.  Compile the script: "Project" --> "Verify Files..."\r
14 ;                                   -From Inno Setup "Click "Build" --> "Compile"\r
15 ;                                   -From ISTool Click "Project" --> "Compile Setup"\r
16 ;                           5.  The compiled installer will appear in the \InnoSetup\Output\ directory at currently should be around 1.5MBs in size.\r
17 ;\r
18 ; Installer To Do List:\r
19 ; #  Make the Install7ZipDll() Function automatically work with future versions of Merge7zDLL (Use GetCurentFileName)\r
20 ; #  Provide the option to or not to assign the Ctrl+Alt+M accelerator to WinMerge., make sure it's turned on for at least one icon\r
21 ; #  Add WinMerge to the user's path so they can execute comparison's from a Dos Prompt (Cmd.exe/Command.exe)\r
22 ; #  We need to unregister, and delete the ShellExtension Dll if the user doesn't want it, during installation\r
23 \r
24 ; #  Display integration options in gray rather than hiding them if the user doesn't have the application in question installed\r
25 ; #  We need to ask those that have the RCLLocalization.dll in their plugins folder if they actually want it, their answer will need to be stored in the registry\r
26 ; #  Write code to detect "\Programs\WinMerge\WinMerge" type start menu installs\r
27 ;\r
28 ; Custom Installer Pages:\r
29 ; #  Bundle 7-Zip with WinMerge or provide on the fly download capability.\r
30 ; #  Allow users to set their working directory via a custom installer page\r
31 ;\r
32 ; Things that make the user's life easier:\r
33 ; #  Create instructions and a sample language file using the Inno Setup Translator Tool (http://www2.arnes.si/~sopjsimo/translator.html)\r
34 ; #  Add "WinMerge is running would you like to close it now?" support with programmatic termination\r
35 ;     -Note: We'll need to add a declares statement to our ISX code so that we can use FindWindowEx directly or a mutex search or two\r
36 ; #  Rather than requiring users to restart we could just kill all intances of Explorer.exe, but we'll need to prompt the user first and restart it\r
37 ;    once the ShellExtension.dll file has been added or removed.\r
38 ;\r
39 ; Non-Essential Features:\r
40 ; #  See about getting a higher resolution copy of the Users's Guide.ico source art from somebody (A 32x32, and or 48x48 would be nice)\r
41 ; #  Using the registry set the order our icons appear within their group in the start menu.:\r
42 ;      1.  WinMerge\r
43 ;      2.  Read Me\r
44 ;      3.  Users's Guide\r
45 ;      4.  WinMerge on the Web\r
46 ;      5.  Uninstall WinMerge\r
47 ; #  Create the ability to install to two start menu groups simultaneously\r
48 ;\r
49 ; Not yet possible (Limited by Inno Setup):\r
50 ; #  While uninstalling prompt the user as to whether or not they'd like to remove their WinMerge preferences too?\r
51 \r
52 #define AppVersion GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe")\r
53 #define FriendlyAppVersion Copy(GetFileVersion(SourcePath + "\..\..\Build\MergeUnicodeRelease\WinMergeU.exe"), 1, 5)\r
54 #define VS120COMNTOOLS GetEnv('VS120COMNTOOLS')\r
55 #define VS140COMNTOOLS GetEnv('VS140COMNTOOLS')\r
56 \r
57 [Setup]\r
58 AppName=WinMerge\r
59 AppVersion={#AppVersion}\r
60 AppVerName=WinMerge {#AppVersion}\r
61 AppPublisher=Thingamahoochie Software\r
62 AppPublisherURL=http://WinMerge.org/\r
63 AppSupportURL=http://WinMerge.org/\r
64 AppUpdatesURL=http://WinMerge.org/\r
65 \r
66 ; Installer executable's version resource info\r
67 VersionInfoCompany=http://winmerge.org\r
68 VersionInfoDescription=WinMerge Installer\r
69 VersionInfoVersion={#AppVersion}\r
70 \r
71 ;This is in case an older version of the installer happened to be\r
72 DirExistsWarning=no\r
73 \r
74 ;Tells the installer to only display a select language dialog if the an exact match wasn't found\r
75 ShowLanguageDialog=auto\r
76 \r
77 DefaultDirName={pf}\WinMerge\r
78 DefaultGroupName=WinMerge\r
79 DisableStartupPrompt=true\r
80 AllowNoIcons=true\r
81 InfoBeforeFile=..\..\Docs\users\GPL.rtf\r
82 InfoAfterFile=..\..\Docs\users\ReadMe.txt\r
83 \r
84 OutputBaseFilename=WinMerge-{#AppVersion}-Setup\r
85 \r
86 ;This must be admin to install C++ Runtimes and shell extension\r
87 PrivilegesRequired=admin\r
88 \r
89 ;Windows 2000 or later required\r
90 MinVersion=0,5.0\r
91 \r
92 UninstallDisplayIcon={app}\{code:ExeName}\r
93 \r
94 ;Artwork References\r
95 WizardImageFile=Art\Large Logo.bmp\r
96 WizardSmallImageFile=Art\Small Logo.bmp\r
97 WizardImageStretch=true\r
98 \r
99 ;It is confusing, if Setup/Uninstall use the same icon like WinMerge!\r
100 ;SetupIconFile=..\..\src\res\Merge.ico\r
101 \r
102 ;Compression Parameters\r
103 ;Please note while Compression=lzma/ultra and InternalCompressLevel=Ultra are better than max\r
104 ;they also require 320 MB of memory for compression. If you're system has at least 256MB RAM then by all\r
105 ;means set it to ultra before compilation\r
106 Compression=lzma/ultra\r
107 InternalCompressLevel=ultra\r
108 SolidCompression=true\r
109 \r
110 ; Update file associations for shell (project files)\r
111 ChangesAssociations=true\r
112 ; Updates PATH\r
113 ChangesEnvironment=true\r
114 OutputDir=..\..\Build\r
115 AlwaysShowComponentsList=true\r
116 \r
117 ;SignTool=signbat $f\r
118 ;SignedUninstaller=yes\r
119 \r
120 [Languages]\r
121 ;Inno Setup's Native Language\r
122 Name: English; MessagesFile: ..\..\Translations\InnoSetup\English.isl\r
123 \r
124 ;Localizations:\r
125 Name: Basque; MessagesFile: ..\..\Translations\InnoSetup\Basque.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt\r
126 Name: Bulgarian; MessagesFile: ..\..\Translations\InnoSetup\Bulgarian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt\r
127 Name: Catalan; MessagesFile: ..\..\Translations\InnoSetup\Catalan.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt\r
128 Name: Chinese_Simplified; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Simplified.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt\r
129 Name: Chinese_Traditional; MessagesFile: ..\..\Translations\InnoSetup\Chinese_Traditional.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt\r
130 Name: Croatian; MessagesFile: ..\..\Translations\InnoSetup\Croatian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt\r
131 Name: Czech; MessagesFile: ..\..\Translations\InnoSetup\Czech.isl\r
132 Name: Danish; MessagesFile: ..\..\Translations\InnoSetup\Danish.isl\r
133 Name: Dutch; MessagesFile: ..\..\Translations\InnoSetup\Dutch.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt\r
134 Name: Finnish; MessagesFile: ..\..\Translations\InnoSetup\Finnish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt\r
135 Name: French; MessagesFile: ..\..\Translations\InnoSetup\French.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-French.txt\r
136 Name: Galician; MessagesFile: ..\..\Translations\InnoSetup\Galician.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt\r
137 Name: German; MessagesFile: ..\..\Translations\InnoSetup\German.isl\r
138 Name: Greek; MessagesFile: ..\..\Translations\InnoSetup\Greek.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt\r
139 Name: Hungarian; MessagesFile: ..\..\Translations\InnoSetup\Hungarian.isl\r
140 Name: Italian; MessagesFile: ..\..\Translations\InnoSetup\Italian.isl\r
141 Name: Japanese; MessagesFile: ..\..\Translations\InnoSetup\Japanese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt\r
142 Name: Korean; MessagesFile: ..\..\Translations\InnoSetup\Korean.isl\r
143 Name: Norwegian; MessagesFile: ..\..\Translations\InnoSetup\Norwegian.isl\r
144 Name: Persian; MessagesFile: ..\..\Translations\InnoSetup\Persian.isl\r
145 Name: Polish; MessagesFile: ..\..\Translations\InnoSetup\Polish.isl\r
146 Name: Portuguese; MessagesFile: ..\..\Translations\InnoSetup\Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt\r
147 Name: PortugueseBrazilian; MessagesFile: ..\..\Translations\InnoSetup\Brazilian_Portuguese.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt\r
148 Name: Romanian; MessagesFile: ..\..\Translations\InnoSetup\Romanian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt\r
149 Name: Russian; MessagesFile: ..\..\Translations\InnoSetup\Russian.isl\r
150 Name: Serbian; MessagesFile: ..\..\Translations\InnoSetup\Serbian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt\r
151 Name: Sinhala; MessagesFile: ..\..\Translations\InnoSetup\Sinhala.isl\r
152 Name: Slovak; MessagesFile: ..\..\Translations\InnoSetup\Slovak.isl\r
153 Name: Slovenian; MessagesFile: ..\..\Translations\InnoSetup\Slovenian.isl\r
154 Name: Spanish; MessagesFile: ..\..\Translations\InnoSetup\Spanish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt\r
155 Name: Swedish; MessagesFile: ..\..\Translations\InnoSetup\Swedish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt\r
156 Name: Turkish; MessagesFile: ..\..\Translations\InnoSetup\Turkish.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt\r
157 Name: Ukrainian; MessagesFile: ..\..\Translations\InnoSetup\Ukrainian.isl; InfoAfterFile: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt\r
158 \r
159 \r
160 [Messages]\r
161 English.FinishedLabel=Setup has finished installing WinMerge on your computer.\r
162 English.SetupAppTitle=Setup - WinMerge {#AppVersion}\r
163 English.WizardInfoBefore=License Agreement\r
164 English.InfoBeforeLabel=GNU General Public License\r
165 \r
166 \r
167 [Types]\r
168 Name: typical; Description: {cm:TypicalInstallation}\r
169 Name: full; Description: {cm:FullInstallation}\r
170 Name: compact; Description: {cm:CompactInstallation}\r
171 Name: custom; Description: {cm:CustomInstallation}; Flags: iscustom\r
172 \r
173 \r
174 [Components]\r
175 ; Executable, libraries, documentation\r
176 Name: Core; Description: {cm:AppCoreFiles}; Types: full custom typical compact; Flags: fixed\r
177 \r
178 Name: filters; Description: {cm:Filters}; Flags: disablenouninstallwarning; Types: full typical\r
179 Name: Plugins; Description: {cm:Plugins}; Flags: disablenouninstallwarning; Types: full typical\r
180 Name: Frhed; Description: {cm:Frhed}; Flags: disablenouninstallwarning; Types: full typical\r
181 Name: WinIMerge; Description: {cm:WinIMerge}; Flags: disablenouninstallwarning; Types: full typical\r
182 Name: ArchiveSupport; Description: {cm:ArchiveSupport}; Flags: disablenouninstallwarning; Types: full typical\r
183 Name: Patch; Description: {cm:Patch}; Flags: disablenouninstallwarning; Types: full typical\r
184 \r
185 ;Language components\r
186 Name: Languages; Description: {cm:Languages}; Flags: disablenouninstallwarning\r
187 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Basque\r
188 Name: Languages\Basque; Description: {cm:BasqueLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Basque\r
189 \r
190 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Bulgarian\r
191 Name: Languages\Bulgarian; Description: {cm:BulgarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Bulgarian\r
192 \r
193 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Catalan\r
194 Name: Languages\Catalan; Description: {cm:CatalanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Catalan\r
195 \r
196 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Simplified\r
197 Name: Languages\Chinese_Simplified; Description: {cm:ChineseSimplifiedLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Simplified\r
198 \r
199 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Chinese_Traditional\r
200 Name: Languages\Chinese_Traditional; Description: {cm:ChineseTraditionalLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Chinese_Traditional\r
201 \r
202 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Croatian\r
203 Name: Languages\Croatian; Description: {cm:CroatianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Croatian\r
204 \r
205 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Czech\r
206 Name: Languages\Czech; Description: {cm:CzechLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Czech\r
207 \r
208 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Danish\r
209 Name: Languages\Danish; Description: {cm:DanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Danish\r
210 \r
211 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Dutch\r
212 Name: Languages\Dutch; Description: {cm:DutchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Dutch\r
213 \r
214 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Finnish\r
215 Name: Languages\Finnish; Description: {cm:FinnishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Finnish\r
216 \r
217 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not French\r
218 Name: Languages\French; Description: {cm:FrenchLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: French\r
219 \r
220 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Galician\r
221 Name: Languages\Galician; Description: {cm:GalicianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Galician\r
222 \r
223 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not German\r
224 Name: Languages\German; Description: {cm:GermanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: German\r
225 \r
226 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Greek\r
227 Name: Languages\Greek; Description: {cm:GreekLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Greek\r
228 \r
229 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Hungarian\r
230 Name: Languages\Hungarian; Description: {cm:HungarianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Hungarian\r
231 \r
232 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Italian\r
233 Name: Languages\Italian; Description: {cm:ItalianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Italian\r
234 \r
235 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Japanese\r
236 Name: Languages\Japanese; Description: {cm:JapaneseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Japanese\r
237 \r
238 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Korean\r
239 Name: Languages\Korean; Description: {cm:KoreanLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Korean\r
240 \r
241 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Norwegian\r
242 Name: Languages\Norwegian; Description: {cm:NorwegianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Norwegian\r
243 \r
244 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Persian\r
245 Name: Languages\Persian; Description: {cm:PersianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Persian\r
246 \r
247 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Polish\r
248 Name: Languages\Polish; Description: {cm:PolishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Polish\r
249 \r
250 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Portuguese\r
251 Name: Languages\Portuguese; Description: {cm:PortugueseLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Portuguese\r
252 \r
253 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not PortugueseBrazilian\r
254 Name: Languages\PortugueseBrazilian; Description: {cm:PortugueseBrazilLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: PortugueseBrazilian\r
255 \r
256 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Romanian\r
257 Name: Languages\Romanian; Description: {cm:RomanianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Romanian\r
258 \r
259 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Russian\r
260 Name: Languages\Russian; Description: {cm:RussianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Russian\r
261 \r
262 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Serbian\r
263 Name: Languages\Serbian; Description: {cm:SerbianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Serbian\r
264 \r
265 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Sinhala\r
266 Name: Languages\Sinhala; Description: {cm:SinhalaLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Sinhala\r
267 \r
268 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovak\r
269 Name: Languages\Slovak; Description: {cm:SlovakLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovak\r
270 \r
271 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Slovenian\r
272 Name: Languages\Slovenian; Description: {cm:SlovenianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Slovenian\r
273 \r
274 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Spanish\r
275 Name: Languages\Spanish; Description: {cm:SpanishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Spanish\r
276 \r
277 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Swedish\r
278 Name: Languages\Swedish; Description: {cm:SwedishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Swedish\r
279 \r
280 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Turkish\r
281 Name: Languages\Turkish; Description: {cm:TurkishLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Turkish\r
282 \r
283 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full; Languages: not Ukrainian\r
284 Name: Languages\Ukrainian; Description: {cm:UkrainianLanguage}; Flags: disablenouninstallwarning; Types: full typical compact; Languages: Ukrainian\r
285 \r
286 \r
287 [Tasks]\r
288 Name: ShellExtension; Description: {cm:ExplorerContextMenu}; GroupDescription: {cm:OptionalFeatures}\r
289 Name: modifypath; Description: {cm:AddToPath}; GroupDescription: {cm:OptionalFeatures}; Flags: unchecked\r
290 Name: TortoiseCVS; Description: {cm:IntegrateTortoiseCVS}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseCVSInstalled\r
291 Name: TortoiseGit; Description: {cm:IntegrateTortoiseGit}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseGitInstalled; MinVersion: 0,5.0.2195sp3\r
292 Name: TortoiseSVN; Description: {cm:IntegrateTortoiseSVN}; GroupDescription: {cm:OptionalFeatures}; Check: TortoiseSVNInstalled; MinVersion: 0,5.0.2195sp3\r
293 Name: ClearCase; Description: {cm:IntegrateClearCase}; GroupDescription: {cm:OptionalFeatures}; Check: ClearCaseInstalled\r
294 Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked\r
295 Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; OnlyBelowVersion: 0,6.1\r
296 \r
297 [InstallDelete]\r
298 ; Diff.txt is a file left over from previous versions of WinMerge (before version 2.0), we just delete it to be nice.\r
299 Type: files; Name: {app}\Diff.txt\r
300 \r
301 ;All of these files are removed so if the user upgrades their operating system or changes their language selections only the\r
302 ;necessary files will be left in the installation folder\r
303 ;Another reason these files might be strays is if a user extracted one of the experimental builds such as:\r
304 ;WinMerge.{#AppVersion}-exe.7z.\r
305 Name: {app}\WinMerge.exe; Type: files\r
306 Name: {app}\WinMergeU.exe; Type: files; MinVersion: 0, 4\r
307 \r
308 ;Remove manifest files as we don't need them in 2.6.2 / 2.7.1.1 or later\r
309 Name: {app}\WinMerge.exe.manifest; Type: files\r
310 Name: {app}\WinMergeU.exe.manifest; Type: files\r
311 \r
312 Name: {app}\Merge7z311.dll; Type: files\r
313 Name: {app}\Merge7z311U.dll; Type: files; MinVersion: 0, 4\r
314 \r
315 Name: {app}\Merge7z312.dll; Type: files\r
316 Name: {app}\Merge7z312U.dll; Type: files; MinVersion: 0, 4\r
317 \r
318 Name: {app}\Merge7z313.dll; Type: files\r
319 Name: {app}\Merge7z313U.dll; Type: files; MinVersion: 0, 4\r
320 \r
321 Name: {app}\Merge7z420.dll; Type: files\r
322 Name: {app}\Merge7z420U.dll; Type: files; MinVersion: 0, 4\r
323 \r
324 Name: {app}\Merge7z423.dll; Type: files\r
325 Name: {app}\Merge7z423U.dll; Type: files; MinVersion: 0, 4\r
326 \r
327 Name: {app}\Merge7z431.dll; Type: files\r
328 Name: {app}\Merge7z431U.dll; Type: files; MinVersion: 0, 4\r
329 \r
330 Name: {app}\Merge7z432.dll; Type: files\r
331 Name: {app}\Merge7z432U.dll; Type: files; MinVersion: 0, 4\r
332 \r
333 Name: {app}\Merge7z442.dll; Type: files\r
334 Name: {app}\Merge7z442U.dll; Type: files; MinVersion: 0, 4\r
335 \r
336 Name: {app}\Merge7z457.dll; Type: files\r
337 Name: {app}\Merge7z457U.dll; Type: files; MinVersion: 0, 4\r
338 \r
339 Name: {app}\Merge7z465.dll; Type: files\r
340 Name: {app}\Merge7z465U.dll; Type: files; MinVersion: 0, 4\r
341 \r
342 Name: {app}\Merge7z920.dll; Type: files\r
343 Name: {app}\Merge7z920U.dll; Type: files; MinVersion: 0, 4\r
344 \r
345 ;This won't work, because the file has to be unregistered, and explorer closed, first.\r
346 ;Name: {app}\ShellExtension.dll; Type: files; Check: TaskDisabled('ShellExtension')\r
347 \r
348 ; Remove existing .lang files - we don't need them anymore as we are\r
349 ; using PO files now.\r
350 Name: {app}\Languages\MergeBrazilian.lang; Type: files\r
351 Name: {app}\Languages\MergeBulgarian.lang; Type: files\r
352 Name: {app}\Languages\MergeCatalan.lang; Type: files\r
353 Name: {app}\Languages\MergeChineseSimplified.lang; Type: files\r
354 Name: {app}\Languages\MergeChineseTraditional.lang; Type: files\r
355 Name: {app}\Languages\MergeCzech.lang; Type: files\r
356 Name: {app}\Languages\MergeDanish.lang; Type: files\r
357 Name: {app}\Languages\MergeDutch.lang; Type: files\r
358 Name: {app}\Languages\MergeFrench.lang; Type: files\r
359 Name: {app}\Languages\MergeGerman.lang; Type: files\r
360 Name: {app}\Languages\MergeHungarian.lang; Type: files\r
361 Name: {app}\Languages\MergeItalian.lang; Type: files\r
362 Name: {app}\Languages\MergeJapanese.lang; Type: files\r
363 Name: {app}\Languages\MergeKorean.lang; Type: files\r
364 Name: {app}\Languages\MergeNorwegian.lang; Type: files\r
365 Name: {app}\Languages\MergePersian.lang; Type: files\r
366 Name: {app}\Languages\MergePolish.lang; Type: files\r
367 Name: {app}\Languages\MergePortuguese.lang; Type: files\r
368 Name: {app}\Languages\MergeSlovak.lang; Type: files\r
369 Name: {app}\Languages\MergeSpanish.lang; Type: files\r
370 Name: {app}\Languages\MergeRussian.lang; Type: files\r
371 Name: {app}\Languages\MergeSerbian.lang; Type: files\r
372 Name: {app}\Languages\MergeSwedish.lang; Type: files\r
373 Name: {app}\Languages\MergeTurkish.lang; Type: files\r
374 Name: {app}\MergePlugins\list.txt; Type: files; Check: not IsComponentSelected('Plugins')\r
375 \r
376 ;Removes the user's guide icon if the user deselects the user's guide component.\r
377 Name: {group}\{cm:UsersGuide}.lnk; Type: files; Check: not IsComponentSelected('Docs')\r
378 \r
379 ;This removes the quick launch icon in case the user chooses not to install it after previously having it installed\r
380 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
381 Name: {commonappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge.lnk; Type: files; Check: not IsTaskSelected('QuickLauchIcon')\r
382 \r
383 ;This removes the desktop icon in case the user chooses not to install it after previously having it installed\r
384 Name: {userdesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
385 Name: {commondesktop}\WinMerge.lnk; Type: files; Check: not IsTaskSelected('DesktopIcon')\r
386 \r
387 ;Removes the Uninstall icon from the start menu...\r
388 Name: {group}\{cm:UninstallProgram,WinMerge}.lnk; Type: files;\r
389 \r
390 ;Remove ANSI executable link from start menu for NT-based Windows versions\r
391 ;This was installed earlier, but not anymore.\r
392 Name: {group}\WinMerge (ANSI).lnk; Type: files; MinVersion: 0,4\r
393 Name: {app}\Docs; Type: filesandordirs\r
394 \r
395 Name: {app}\MergePlugins\editor addin.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
396 Name: {app}\MergePlugins\insert datetime.sct; Type: Files; Check: not IsComponentSelected('Plugins')\r
397 Name: {app}\MergePlugins\CompareMSExcelFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
398 Name: {app}\MergePlugins\CompareMSWordFiles.dll; Type: Files; Check: IsComponentSelected('Plugins')\r
399 Name: {app}\MergePlugins; Type: DirIfEmpty; Check: not IsComponentSelected('Plugins')\r
400 \r
401 Name: {app}\Filters\ADAMulti.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
402 Name: {app}\Filters\ASPNET.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
403 Name: {app}\Filters\CSharp_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
404 Name: {app}\Filters\Delphi.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
405 Name: {app}\Filters\MASM.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
406 Name: {app}\Filters\Merge_GnuC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
407 Name: {app}\Filters\Merge_VC_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
408 Name: {app}\Filters\Merge_VB_loose.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
409 Name: {app}\Filters\SourceControl.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
410 Name: {app}\Filters\Symbian.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
411 Name: {app}\Filters\XML_html.flt; Type: Files; Check: not IsComponentSelected('Filters')\r
412 Name: {app}\Filters\FileFilter.tmpl; Type: Files; Check: not IsComponentSelected('Filters')\r
413 Name: {app}\Filters; Type: DirIfEmpty; Check: not IsComponentSelected('Filters')\r
414 \r
415 \r
416 \r
417 [Dirs]\r
418 ;The always uninstall flag tells the uninstaller to remove the folder if it's empty regardless of whether or not it existed prior to the installation\r
419 Name: {app}; Flags: uninsalwaysuninstall\r
420 \r
421 \r
422 [Files]\r
423 ; WinMerge itself\r
424 Source: ..\..\Build\MergeUnicodeRelease\WinMergeU.exe; DestDir: {app}; Flags: promptifolder; Components: Core\r
425 \r
426 ; List of installed files\r
427 Source: ..\..\Docs\Users\Files.txt; DestDir: {app}; Flags: promptifolder; Components: Core\r
428 \r
429 ; Shell extension\r
430 Source: ..\..\Build\ShellExtension\ShellExtensionU.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder; MinVersion: 0, 4; Check: not IsWin64\r
431 ; 64-bit version of ShellExtension\r
432 Source: ..\..\Build\ShellExtension\ShellExtensionX64.dll; DestDir: {app}; Flags: regserver uninsrestartdelete restartreplace promptifolder 64bit; MinVersion: 0,5.01.2600; Check: IsWin64\r
433 \r
434 ;Please do not reorder the 7z Dlls by version they compress better ordered by platform and then by version\r
435 Source: ..\..\Build\Merge7z\Merge7z1604U.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
436 Source: ..\..\Build\Merge7z\7z.dll; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
437 Source: ..\..\Build\Merge7z\*.txt; DestDir: {app}\Merge7z; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
438 Source: ..\..\Build\Merge7z\Lang\*.txt; DestDir: {app}\Merge7z\Lang; Flags: promptifolder; MinVersion: 0, 4; Components: ArchiveSupport\r
439 \r
440 ; MergeLang.dll - translation helper dll\r
441 Source: ..\..\Build\MergeUnicodeRelease\MergeLang.dll; DestDir: {app}; Flags: promptifolder ignoreversion; Components: Core\r
442 \r
443 ; Language files\r
444 Source: ..\..\Translations\WinMerge\Basque.po; DestDir: {app}\Languages; Components: Languages\Basque; Flags: ignoreversion comparetimestamp\r
445 Source: ..\..\Translations\Docs\Readme\ReadMe-Basque.txt; DestDir: {app}\Docs; Components: Languages\Basque\r
446 Source: ..\..\Translations\WinMerge\Brazilian.po; DestDir: {app}\Languages; Components: Languages\PortugueseBrazilian; Flags: ignoreversion comparetimestamp\r
447 Source: ..\..\Translations\Docs\Readme\ReadMe-Brazilian.txt; DestDir: {app}\Docs; Components: Languages\PortugueseBrazilian\r
448 Source: ..\..\Translations\WinMerge\Bulgarian.po; DestDir: {app}\Languages; Components: Languages\Bulgarian; Flags: ignoreversion comparetimestamp\r
449 Source: ..\..\Translations\Docs\Readme\ReadMe-Bulgarian.txt; DestDir: {app}\Docs; Components: Languages\Bulgarian\r
450 Source: ..\..\Translations\WinMerge\Catalan.po; DestDir: {app}\Languages; Components: Languages\Catalan; Flags: ignoreversion comparetimestamp\r
451 Source: ..\..\Translations\Docs\Readme\ReadMe-Catalan.txt; DestDir: {app}\Docs; Components: Languages\Catalan\r
452 Source: ..\..\Translations\WinMerge\ChineseSimplified.po; DestDir: {app}\Languages; Components: Languages\Chinese_Simplified; Flags: ignoreversion comparetimestamp\r
453 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseSimplified.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Simplified\r
454 Source: ..\..\Translations\WinMerge\ChineseTraditional.po; DestDir: {app}\Languages; Components: Languages\Chinese_Traditional; Flags: ignoreversion comparetimestamp\r
455 Source: ..\..\Translations\Docs\Readme\ReadMe-ChineseTraditional.txt; DestDir: {app}\Docs; Components: Languages\Chinese_Traditional\r
456 Source: ..\..\Translations\WinMerge\Croatian.po; DestDir: {app}\Languages; Components: Languages\Croatian; Flags: ignoreversion comparetimestamp\r
457 Source: ..\..\Translations\Docs\Readme\ReadMe-Croatian.txt; DestDir: {app}\Docs; Components: Languages\Croatian\r
458 Source: ..\..\Translations\WinMerge\Czech.po; DestDir: {app}\Languages; Components: Languages\Czech; Flags: ignoreversion comparetimestamp\r
459 Source: ..\..\Translations\WinMerge\Danish.po; DestDir: {app}\Languages; Components: Languages\Danish; Flags: ignoreversion comparetimestamp\r
460 Source: ..\..\Translations\WinMerge\Dutch.po; DestDir: {app}\Languages; Components: Languages\Dutch; Flags: ignoreversion comparetimestamp\r
461 Source: ..\..\Translations\Docs\Readme\ReadMe-Dutch.txt; DestDir: {app}\Docs; Components: Languages\Dutch\r
462 Source: ..\..\Translations\WinMerge\Finnish.po; DestDir: {app}\Languages; Components: Languages\Finnish; Flags: ignoreversion comparetimestamp\r
463 Source: ..\..\Translations\Docs\Readme\ReadMe-Finnish.txt; DestDir: {app}\Docs; Components: Languages\Finnish\r
464 Source: ..\..\Translations\WinMerge\French.po; DestDir: {app}\Languages; Components: Languages\French; Flags: ignoreversion comparetimestamp\r
465 Source: ..\..\Translations\Docs\Readme\ReadMe-French.txt; DestDir: {app}\Docs; Components: Languages\French\r
466 Source: ..\..\Translations\WinMerge\Galician.po; DestDir: {app}\Languages; Components: Languages\Galician; Flags: ignoreversion comparetimestamp\r
467 Source: ..\..\Translations\Docs\Readme\ReadMe-Galician.txt; DestDir: {app}\Docs; Components: Languages\Galician\r
468 Source: ..\..\Translations\WinMerge\German.po; DestDir: {app}\Languages; Components: Languages\German; Flags: ignoreversion comparetimestamp\r
469 Source: ..\..\Translations\WinMerge\Greek.po; DestDir: {app}\Languages; Components: Languages\Greek; Flags: ignoreversion comparetimestamp\r
470 Source: ..\..\Translations\Docs\Readme\ReadMe-Greek.txt; DestDir: {app}\Docs; Components: Languages\Greek\r
471 Source: ..\..\Translations\WinMerge\Hungarian.po; DestDir: {app}\Languages; Components: Languages\Hungarian; Flags: ignoreversion comparetimestamp\r
472 Source: ..\..\Translations\WinMerge\Italian.po; DestDir: {app}\Languages; Components: Languages\Italian; Flags: ignoreversion comparetimestamp\r
473 Source: ..\..\Translations\WinMerge\Japanese.po; DestDir: {app}\Languages; Components: Languages\Japanese; Flags: ignoreversion comparetimestamp\r
474 Source: ..\..\Translations\Docs\Readme\ReadMe-Japanese.txt; DestDir: {app}\Docs; Components: Languages\Japanese\r
475 Source: ..\..\Translations\WinMerge\Korean.po; DestDir: {app}\Languages; Components: Languages\Korean; Flags: ignoreversion comparetimestamp\r
476 Source: ..\..\Translations\WinMerge\Norwegian.po; DestDir: {app}\Languages; Components: Languages\Norwegian; Flags: ignoreversion comparetimestamp\r
477 Source: ..\..\Translations\WinMerge\Persian.po; DestDir: {app}\Languages; Components: Languages\Persian; Flags: ignoreversion comparetimestamp\r
478 Source: ..\..\Translations\WinMerge\Polish.po; DestDir: {app}\Languages; Components: Languages\Polish; Flags: ignoreversion comparetimestamp\r
479 Source: ..\..\Translations\WinMerge\Portuguese.po; DestDir: {app}\Languages; Components: Languages\Portuguese; Flags: ignoreversion comparetimestamp\r
480 Source: ..\..\Translations\Docs\Readme\ReadMe-Portuguese.txt; DestDir: {app}\Docs; Components: Languages\Portuguese\r
481 Source: ..\..\Translations\WinMerge\Romanian.po; DestDir: {app}\Languages; Components: Languages\Romanian; Flags: ignoreversion comparetimestamp\r
482 Source: ..\..\Translations\Docs\Readme\ReadMe-Romanian.txt; DestDir: {app}\Docs; Components: Languages\Romanian\r
483 Source: ..\..\Translations\WinMerge\Russian.po; DestDir: {app}\Languages; Components: Languages\Russian; Flags: ignoreversion comparetimestamp\r
484 Source: ..\..\Translations\WinMerge\Serbian.po; DestDir: {app}\Languages; Components: Languages\Serbian; Flags: ignoreversion comparetimestamp\r
485 Source: ..\..\Translations\Docs\Readme\ReadMe-Serbian.txt; DestDir: {app}\Docs; Components: Languages\Serbian\r
486 Source: ..\..\Translations\WinMerge\Sinhala.po; DestDir: {app}\Languages; Components: Languages\Sinhala; Flags: ignoreversion comparetimestamp\r
487 Source: ..\..\Translations\WinMerge\Slovak.po; DestDir: {app}\Languages; Components: Languages\Slovak; Flags: ignoreversion comparetimestamp\r
488 Source: ..\..\Translations\WinMerge\Slovenian.po; DestDir: {app}\Languages; Components: Languages\Slovenian; Flags: ignoreversion comparetimestamp\r
489 Source: ..\..\Translations\WinMerge\Spanish.po; DestDir: {app}\Languages; Components: Languages\Spanish; Flags: ignoreversion comparetimestamp\r
490 Source: ..\..\Translations\Docs\Readme\ReadMe-Spanish.txt; DestDir: {app}\Docs; Components: Languages\Spanish\r
491 Source: ..\..\Translations\WinMerge\Swedish.po; DestDir: {app}\Languages; Components: Languages\Swedish; Flags: ignoreversion comparetimestamp\r
492 Source: ..\..\Translations\Docs\Readme\ReadMe-Swedish.txt; DestDir: {app}\Docs; Components: Languages\Swedish\r
493 Source: ..\..\Translations\WinMerge\Turkish.po; DestDir: {app}\Languages; Components: Languages\Turkish; Flags: ignoreversion comparetimestamp\r
494 Source: ..\..\Translations\Docs\Readme\ReadMe-Turkish.txt; DestDir: {app}\Docs; Components: Languages\Turkish\r
495 Source: ..\..\Translations\WinMerge\Ukrainian.po; DestDir: {app}\Languages; Components: Languages\Ukrainian; Flags: ignoreversion comparetimestamp\r
496 Source: ..\..\Translations\Docs\Readme\ReadMe-Ukrainian.txt; DestDir: {app}\Docs; Components: Languages\Ukrainian\r
497 \r
498 Source: ..\..\Filters\*.flt; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
499 Source: ..\..\Filters\FileFilter.tmpl; DestDir: {app}\Filters; Flags: sortfilesbyextension comparetimestamp ignoreversion; Components: filters\r
500 \r
501 ;Documentation\r
502 Source: ..\..\Docs\Users\ReadMe.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
503 Source: ..\..\Docs\Users\Contributors.txt; DestDir: {app}; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
504 Source: ..\..\Docs\Users\ReleaseNotes.html; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
505 Source: ..\..\Docs\Users\ChangeLog.txt; DestDir: {app}\Docs; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
506 Source: ..\..\Build\Manual\htmlhelp\WinMerge.chm; DestDir: {app}\Docs\; Flags: overwritereadonly uninsremovereadonly; Components: Core\r
507 Source: ..\..\Docs\users\GPL.rtf; DestDir: {app}\Docs\; Flags: comparetimestamp ignoreversion promptifolder; Components: Core\r
508 \r
509 ;Plugins\r
510 ;Please note IgnoreVersion and CompareTimeStamp are to instruct the installer to not not check for version info and go straight to comparing modification dates\r
511 Source: ..\..\Plugins\dlls\editor addin.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
512 Source: ..\..\Plugins\dlls\insert datetime.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
513 Source: ..\..\Plugins\dlls\CompareMSExcelFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
514 Source: ..\..\Plugins\dlls\CompareMSWordFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
515 Source: ..\..\Plugins\dlls\CompareMSPowerPointFiles.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
516 Source: ..\..\Plugins\dlls\ApplyPatch.sct; DestDir: {app}\MergePlugins; Flags: IgnoreVersion CompareTimeStamp; Components: Plugins\r
517 Source: ..\..\Plugins\dlls\IgnoreColumns.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
518 Source: ..\..\Plugins\dlls\IgnoreCommentsC.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
519 Source: ..\..\Plugins\dlls\IgnoreFieldsComma.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
520 Source: ..\..\Plugins\dlls\IgnoreFieldsTab.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
521 Source: ..\..\Plugins\dlls\IgnoreLeadingLineNumbers.dll; DestDir: {app}\MergePlugins; Flags: ignoreversion replacesameversion; Components: Plugins\r
522 \r
523 ;Frhed\r
524 Source: ..\..\Build\Frhed\GPL.txt; DestDir: {app}\Frhed; Components: Frhed\r
525 ;Source: ..\..\Build\Frhed\frhed.exe; DestDir: {app}\Frhed; Components: Frhed\r
526 Source: ..\..\Build\Frhed\hekseditU.dll; DestDir: {app}\Frhed; Flags: ignoreversion replacesameversion; Components: Frhed\r
527 Source: ..\..\Build\Frhed\Docs\ChangeLog.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
528 Source: ..\..\Build\Frhed\Docs\Contributors.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
529 Source: ..\..\Build\Frhed\Docs\History.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
530 Source: ..\..\Build\Frhed\Docs\Links.txt; DestDir: {app}\Frhed\Docs; Components: Frhed\r
531 Source: ..\..\Build\Frhed\Docs\Sample.tpl  ; DestDir: {app}\Frhed\Docs; Components: Frhed\r
532 Source: ..\..\Build\Frhed\Languages\de.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
533 Source: ..\..\Build\Frhed\Languages\fr.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
534 Source: ..\..\Build\Frhed\Languages\ja.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
535 Source: ..\..\Build\Frhed\Languages\nl.po; DestDir: {app}\Frhed\Languages; Components: Frhed\r
536 Source: ..\..\Build\Frhed\Languages\heksedit.lng; DestDir: {app}\Frhed\Languages; Components: Frhed\r
537 \r
538 ;WinIMerge\r
539 Source: ..\..\Build\WinIMerge\GPL.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
540 Source: ..\..\Build\WinIMerge\freeimage-license-gplv2.txt; DestDir: {app}\WinIMerge; Components: WinIMerge\r
541 ;Source: ..\..\Build\WinIMerge\bin\WinIMerge.exe; DestDir: {app}\WinIMerge; Components: WinIMerge\r
542 Source: ..\..\Build\WinIMerge\bin\WinIMergeLib.dll; DestDir: {app}\WinIMerge; Flags: ignoreversion replacesameversion; Components: WinIMerge\r
543 Source: ..\..\Build\WinIMerge\bin\vcomp140.dll; DestDir: {app}; Components: WinIMerge\r
544 \r
545 ;GnuWin32 Patch for Windows\r
546 Source: ..\..\Build\GnuWin32\*.*; DestDir: {app}\GnuWin32; Flags: recursesubdirs; Components: Patch\r
547 \r
548 [Dirs]\r
549 Name: "{app}\MergePlugins"\r
550 \r
551 [Icons]\r
552 ;Start Menu Icons\r
553 Name: {group}\WinMerge; Filename: {app}\{code:ExeName}; AppUserModelID: "Thingamahoochie.WinMerge"\r
554 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe.txt; IconFileName: {win}\NOTEPAD.EXE\r
555 Name: {group}\{cm:UsersGuide}; Filename: {app}\Docs\WinMerge.chm\r
556 Name: {group}\{cm:UninstallProgram,WinMerge}; Filename: {uninstallexe}\r
557 Name: {group}\{cm:ProgramOnTheWeb,WinMerge}; Filename: http://winmerge.org\r
558 \r
559 ;Link to translated ReadMe in Start Menu\r
560 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Basque.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Basque\r
561 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Brazilian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: PortugueseBrazilian\r
562 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Bulgarian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Bulgarian\r
563 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Catalan.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Catalan\r
564 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseSimplified.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Simplified\r
565 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-ChineseTraditional.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Chinese_Traditional\r
566 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Croatian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Croatian\r
567 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Dutch.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Dutch\r
568 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Finnish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Finnish\r
569 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-French.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: French\r
570 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Galician.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Galician\r
571 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Greek.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Greek\r
572 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Japanese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Japanese\r
573 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Portuguese.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Portuguese\r
574 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Romanian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Romanian\r
575 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Serbian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Serbian\r
576 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Spanish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Spanish\r
577 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Swedish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Swedish\r
578 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Turkish.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Turkish\r
579 Name: {group}\{cm:ReadMe}; Filename: {app}\Docs\ReadMe-Ukrainian.txt; IconFileName: {win}\NOTEPAD.EXE; Languages: Ukrainian\r
580 \r
581 ;Desktop Icon\r
582 Name: {commondesktop}\WinMerge; Filename: {app}\{code:ExeName}; Tasks: desktopicon\r
583 \r
584 ;Quick Launch Icon\r
585 Name: {userappdata}\Microsoft\Internet Explorer\Quick Launch\WinMerge; Filename: {app}\{code:ExeName}; Tasks: quicklaunchicon\r
586 \r
587 [Registry]\r
588 Root: HKCU; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
589 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
590 Root: HKLM; Subkey: Software\Thingamahoochie; Flags: uninsdeletekeyifempty\r
591 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge; Flags: uninsdeletekey\r
592 \r
593 ;Add Project file extension (.WinMerge) to known extensions and\r
594 ;set WinMerge to open those files\r
595 ;set Notepad to edit project files\r
596 Root: HKCR; Subkey: .WinMerge; ValueType: String; ValueData: WinMerge.Project.File; Flags: uninsdeletekey\r
597 Root: HKCR; Subkey: WinMerge.Project.File; ValueType: String; ValueData: {cm:ProjectFileDesc}; Flags: uninsdeletekey\r
598 Root: HKCR; Subkey: WinMerge.Project.File\shell\open\command; ValueType: String; ValueData: """{app}\{code:ExeName}"" ""%1"""; Flags: uninsdeletekey\r
599 Root: HKCR; Subkey: WinMerge.Project.File\shell\edit\command; ValueType: String; ValueData: """NOTEPAD.EXE"" ""%1"""; Flags: uninsdeletekey\r
600 Root: HKCR; Subkey: WinMerge.Project.File\DefaultIcon; ValueType: String; ValueData: """{app}\{code:ExeName}"",1"; Flags: uninsdeletekey\r
601 \r
602 ; delete obsolete values\r
603 ;In Inno Setup Version 4.18 ValueData couldn't be null and compile,\r
604 ;if this is fixed in a later version feel free to remove the parameter\r
605 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: LeftMax; Flags: deletevalue\r
606 Root: HKCU; Subkey: Software\Thingamahoochie\WinMerge\Settings; ValueType: none; ValueName: DirViewMax; Flags: deletevalue\r
607 \r
608 ;This removes the key that remembers which messageboxes to hide from the user, this is because the text of that message\r
609 ;can change and make it more clear as to the user why they might want to pay attention to a particular dialog and also\r
610 ;because a particular message might be added or removed and a new message might occupy a previous message's ID number\r
611 Root: HKLM; Subkey: Software\Thingamahoochie\WinMerge\MessageBoxes; ValueType: none; Flags: deletekey\r
612 \r
613 Root: HKCR; SubKey: Directory\Shell\WinMerge\command; ValueType: none; Flags: deletekey noerror\r
614 Root: HKCR; SubKey: Directory\Shell\WinMerge; ValueType: none; Flags: deletekey noerror\r
615 \r
616 ;Adds "Start Menu" --> "Run" Support for WinMerge\r
617 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: none; Flags: uninsdeletekey\r
618 Root: HKLM; Subkey: Software\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: none; Flags: uninsdeletekey\r
619 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMerge.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
620 Root: HKLM; SubKey: SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\WinMergeU.exe; ValueType: string; ValueName: ; ValueData: {app}\{code:ExeName}\r
621 \r
622 ;Registry Keys for use by ShellExtension.dll\r
623 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: string; ValueName: Executable; ValueData: {app}\{code:ExeName}\r
624 \r
625 ;Enables or disables the Context Menu preference based on what the user selects during install\r
626 ;Initially the Context menu is explicitly disabled:\r
627 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 0;\r
628 \r
629 ;If the user chose to use the context menu then we re-enable it.  This is necessary so it'll turn on and off not just on.\r
630 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: 1; Tasks: ShellExtension\r
631 Root: HKCU; SubKey: Software\Thingamahoochie\WinMerge; ValueType: dword; ValueName: ContextMenuEnabled; ValueData: {code:ShellMenuEnabled}\r
632 \r
633 ;If WinMerge.exe is installed then we'll automatically configure WinMerge as the differencing application\r
634 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Diff Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
635 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: DiffAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
636 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
637 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Diff2 Params; ValueType: string; ValueName: _; ValueData: """%1"" ""%2"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
638 \r
639 ;Tells TortoiseCVS to use WinMerge as its differencing application (this happens whether or not Tortoise is current installed, that way\r
640 ;if it is installed at a later date this will automatically support it)\r
641 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: string; ValueName: External Merge Application; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
642 Root: HKCU; SubKey: Software\TortoiseCVS; ValueType: dword; ValueName: MergeAsUnicode; ValueData: $00000001; Flags: uninsdeletevalue; Tasks: TortoiseCVS\r
643 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge Application; ValueType: string; ValueName: _; ValueData: {app}\{code:ExeName}; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
644 Root: HKCU; SubKey: Software\TortoiseCVS\Prefs\External Merge2 Params; ValueType: string; ValueName: _; ValueData: """%mine"" ""%yours"""; Flags: uninsdeletevalue dontcreatekey; Tasks: TortoiseCVS\r
645 \r
646 ;Set WinMerge as TortoiseGit diff tool\r
647 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseGit\r
648 Root: HKCU; SubKey: Software\TortoiseGit; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
649 \r
650 ;Set WinMerge as TortoiseSVN diff tool\r
651 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Diff; ValueData: {app}\{code:ExeName} -e -ub -dl %bname -dr %yname %base %mine; Flags: uninsdeletevalue; Tasks: TortoiseSVN\r
652 Root: HKCU; SubKey: Software\TortoiseSVN; ValueType: string; ValueName: Merge; ValueData: {code:TortoiseSVNGITMergeToolCommandLine}; Flags: uninsdeletevalue; Check: UseAs3WayMergeTool\r
653 \r
654 ;Whatever the user chooses at the [Select Setup Language] dialog should also determine what language WinMerge will start up in\r
655 ;(unless the user already has a startup language specified)\r
656 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000042d; Flags: deletevalue; Languages: Basque\r
657 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000402; Flags: deletevalue; Languages: Bulgarian\r
658 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000403; Flags: deletevalue; Languages: Catalan\r
659 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000804; Flags: deletevalue; Languages: Chinese_Simplified\r
660 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000404; Flags: deletevalue; Languages: Chinese_Traditional\r
661 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041a; Flags: deletevalue; Languages: Croatian\r
662 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000405; Flags: deletevalue; Languages: Czech\r
663 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000406; Flags: deletevalue; Languages: Danish\r
664 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000413; Flags: deletevalue; Languages: Dutch\r
665 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000409; Flags: deletevalue; Languages: English\r
666 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040b; Flags: deletevalue; Languages: Finnish\r
667 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040c; Flags: deletevalue; Languages: French\r
668 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000456; Flags: deletevalue; Languages: Galician\r
669 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000407; Flags: deletevalue; Languages: German\r
670 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000408; Flags: deletevalue; Languages: Greek\r
671 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000040e; Flags: deletevalue; Languages: Hungarian\r
672 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000410; Flags: deletevalue; Languages: Italian\r
673 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000411; Flags: deletevalue; Languages: Japanese\r
674 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000412; Flags: deletevalue; Languages: Korean\r
675 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000414; Flags: deletevalue; Languages: Norwegian\r
676 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000429; Flags: deletevalue; Languages: Persian\r
677 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000415; Flags: deletevalue; Languages: Polish\r
678 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000816; Flags: deletevalue; Languages: Portuguese\r
679 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000416; Flags: deletevalue; Languages: PortugueseBrazilian\r
680 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000418; Flags: deletevalue; Languages: Romanian\r
681 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000419; Flags: deletevalue; Languages: Russian\r
682 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c1a; Flags: deletevalue; Languages: Serbian\r
683 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000045b; Flags: deletevalue; Languages: Sinhala\r
684 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041b; Flags: deletevalue; Languages: Slovak\r
685 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000424; Flags: deletevalue; Languages: Slovenian\r
686 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000c0a; Flags: deletevalue; Languages: Spanish\r
687 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041D; Flags: deletevalue; Languages: Swedish\r
688 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $0000041f; Flags: deletevalue; Languages: Turkish\r
689 Root: HKLM; SubKey: Software\Thingamahoochie\WinMerge\Locale; ValueType: dword; ValueName: LanguageId; ValueData: $00000422; Flags: deletevalue; Languages: Ukrainian\r
690 \r
691 \r
692 [Run]\r
693 ;This will no longer appear unless the user chose to make a start menu group in the first place\r
694 Filename: {win}\Explorer.exe; Description: {cm:ViewStartMenuFolder}; Parameters: """{group}"""; Flags: waituntilidle postinstall skipifsilent unchecked; Check: GroupCreated\r
695 \r
696 Filename: {app}\{code:ExeName}; Description: {cm:LaunchProgram,WinMerge}; Flags: nowait postinstall skipifsilent runmaximized\r
697 \r
698 \r
699 [UninstallDelete]\r
700 ;Remove 7-zip integration dlls possibly installed (by hand or using separate installer)\r
701 Name: {app}\Merge7z*.dll; Type: files\r
702 Name: {app}\7zip_pad.xml; Type: files\r
703 Name: {app}\Codecs; Type: filesandordirs\r
704 Name: {app}\Formats; Type: filesandordirs\r
705 Name: {app}\Lang; Type: filesandordirs\r
706 \r
707 Name: {group}; Type: dirifempty\r
708 Name: {app}; Type: dirifempty\r
709 \r
710 \r
711 [Code]\r
712 Var\r
713     g_CheckListBox: TNewCheckListBox;\r
714 \r
715 {Determines whether or not the user chose to create a start menu}\r
716 Function GroupCreated(): boolean;\r
717 Var\r
718     {Stores the path of the start menu group Inno Setup may have created}\r
719     strGroup_Path: string;\r
720 Begin\r
721     {Saves the path that Inno Setup intended to create the start menu group at}\r
722     strGroup_Path := ExpandConstant('{group}');\r
723 \r
724     {If the start menu path isn't blank then..}\r
725     if strGroup_Path <> '' Then\r
726         Begin\r
727             {If the user choose to create the start menu then this folder will exist.\r
728             If the folder exists then GroupCreated = True otherwise it does not.}\r
729             Result := DirExists(strGroup_Path)\r
730         end\r
731     else\r
732         {Since the start menu path is null, we know that the user chose not to create a\r
733         start menu group (note in Inno Setup 4.18 this didn't yet work, but I'm sure it will in the future}\r
734         Result := False;\r
735 \r
736      {Debug\r
737 \r
738     If DirExists(strGroup_Path) = True Then\r
739         Msgbox('The group "' + ExpandConstant('group') + '" was found', mbInformation, mb_ok)\r
740     Else\r
741         Msgbox('The group "' + ExpandConstant('group') + '" doesn''t exist.', mbInformation, mb_ok); }\r
742 End;\r
743 \r
744 \r
745 {Returns the appropriate name of the .EXE being installed}\r
746 Function ExeName(Unused: string): string;\r
747 Begin\r
748   Result := 'WinMergeU.exe';\r
749 End;\r
750 \r
751 Function FixVersion(strInput: string): string;\r
752 {Returns a version with four segments A.B.C.D}\r
753 Var\r
754   {Stores the number of periods found within the version string}\r
755   intPeriods: integer;\r
756 \r
757   {Creates a counter}\r
758   i: integer;\r
759 \r
760   {Generates the string to be returned to the user}\r
761   strVersion: string;\r
762 Begin\r
763 \r
764   {Creates a copy of the input string before we tear it apart}\r
765   strVersion := strInput;\r
766 \r
767   {Until strInput is empty do..}\r
768   While Length(strInput) > 0 do\r
769     Begin\r
770       {if the first character of the input string is a period then}\r
771       If Copy(strInput, 1, 1) = '.' Then\r
772 \r
773         {Incriment the number of periods found}\r
774         intPeriods := intPeriods + 1;\r
775 \r
776       {Remove the first character from the Input string}\r
777       strInput := Copy(strINput, 2, length(strINput));\r
778     End;\r
779 \r
780   {For every period shy of 3 do..}\r
781   For i := 1 to 3 - intperiods do\r
782 \r
783     {Add a '.0' to the version string}\r
784     strVersion := strVersion + '.0';\r
785 \r
786   {Returns the Version string with the correct number of segments}\r
787   Result := strVersion;\r
788 \r
789 End;\r
790 \r
791 Function RemoveLeadingZeros(strInput: string): string;\r
792 {Removes the leading zeros if any from a numeric string}\r
793 Begin\r
794 \r
795   {While the first character of the string is a zero}\r
796   While Copy(strInput, 1, 1) = '0' Do\r
797     begin\r
798 \r
799     {Removes one leading zero from the input string}\r
800       strInput := Copy(strInput, 2, Length(strINput));\r
801     end;\r
802 \r
803   {Returns the formatted string}\r
804   Result := strInput;\r
805 \r
806 End;\r
807 \r
808 \r
809 {Returns whether or not the version string detected is meets the version number requirement}\r
810 Function VersionAtLeast(strVersion_Installed: string; intMajor: integer; intMinor: integer; intRevision: integer; intBuild: integer): boolean;\r
811 Var\r
812 \r
813   {Stores the Major of the Version installed (X.0.0.0)}\r
814   intMajor_Installed: Integer;\r
815 \r
816   {Stores the Minor of the Version installed (1.X.0.0)}\r
817   intMinor_Installed: Integer;\r
818 \r
819   {Stores the Revision of the Version installed (1.0.X.0)}\r
820   intRevision_Installed: Integer;\r
821 \r
822   {Stores the Revision of the Version installed (1.0.0.X)}\r
823   intBuild_Installed: Integer;\r
824 \r
825   {Stores the last valid character of a particular segment (Major, Minor, Revision) of the Version string}\r
826   intEnd_Pos: Integer;\r
827 \r
828 begin\r
829   {Debug\r
830   Msgbox('The version installed is ' + strVersion_Installed + ' and the required version is ' + IntToStr(intMajor) + '.' + IntToStr(intMinor) + '.' + IntToStr(intRevision) + '.' + IntToStr(intBuild), mbINformation, mb_OK)\r
831         }\r
832 \r
833   {Makes sure the version string contains four numberic segments 5.2 ---> 5.2.0.0}\r
834   strVersion_Installed := FixVersion(strVersion_Installed);\r
835 \r
836   {If the version number is empty then quit the function}\r
837   if strVersion_Installed = '' Then\r
838     begin\r
839       Result := False;\r
840 \r
841       {Stops analyzing the version installed and returns that the version installed was inadequate}\r
842       exit;\r
843     end;\r
844 \r
845   {Starts detecting the Major value of the Version Installed}\r
846 \r
847   {Sets the end position equal to one character before the first period in the version number}\r
848   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
849 \r
850   {Sets the major version equal to all character before the first period }\r
851   intMajor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
852 \r
853   {Debug\r
854   msgbox('The Major version installed is ' + IntToStr(intMajor_installed) + ' and the required Major is ' + IntToStr(intMajor) + '.', mbInformation, MB_OK)\r
855         }\r
856 \r
857   {If the Major Version Installed is greater than the required value then...}\r
858   if intMajor_Installed > intMajor Then\r
859     begin\r
860       {Returns that the version number was adequate, since it actually exceeded the requirement}\r
861       Result := True;\r
862 \r
863         {Debug\r
864         msgbox(IntToStr(intMajor_installed) + ' > ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
865         }\r
866 \r
867       {Stops analyzing the version number since we already know it met the requirement}\r
868       exit;\r
869     end;\r
870 \r
871   {If the Major version installed is less than the requirement then...}\r
872   If intMajor_Installed < intMajor Then\r
873     begin\r
874       {Debug\r
875        msgbox(IntToStr(intMajor_installed) + ' < ' +  IntToStr(intMajor), mbInformation, MB_OK)\r
876        }\r
877 \r
878       Result := False;\r
879 \r
880       {Stops analyzing the version number since we already know it's inadequate and returns False (inadequate)}\r
881       exit;\r
882     end;\r
883 \r
884 \r
885   {Starts detecting the Minor version of the Version Installed}\r
886 \r
887   {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Major Version)}\r
888   strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
889 \r
890   {Sets the end position equal to one character before the first period in the version number}\r
891   intEnd_Pos := Pos('.', strVersion_Installed) -1\r
892 \r
893   {Sets the Minor version equal to all character before the first period }\r
894         intMinor_installed := StrToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0)\r
895 \r
896         {Debug\r
897   msgbox('The Minor version installed is ' + IntToStr(intMinor_installed) + ' and the required Minor is ' + IntToStr(intMinor) + '.', mbInformation, MB_OK)\r
898         }\r
899 \r
900         {If the Minor Version Installed is greater than the required value then...}\r
901         If intMinor_Installed > intMinor Then\r
902     begin\r
903       {Returns that the version number was adequate}\r
904       Result := True;\r
905 \r
906       {Stops further analyzation of the version number}\r
907       exit\r
908     end;\r
909 \r
910   {If the minor installed is less than what was required}\r
911   If intMinor_Installed < intMinor Then\r
912     Begin\r
913       Result := False;\r
914 \r
915       {Returns that the version installed did not meet the required value and stops analyzing the version number}\r
916       exit;\r
917     end;\r
918 \r
919 \r
920   {Starts Detecting the Revision of the Version Installed}\r
921 \r
922         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Minor Version)}\r
923         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
924 \r
925         {Sets the last character of the Revision to last character before the first period}\r
926         intEnd_Pos := Pos('.', strVersion_Installed) -1\r
927 \r
928         {Sets the Revision Installed equal to everything before the first period}\r
929         intRevision_Installed := strToIntDef(RemoveLeadingZeros(Copy(strVersion_Installed, 1, intEnd_Pos)), 0);\r
930 \r
931         {Debug\r
932   msgbox('The Revision version installed is ' + IntToStr(intRevision_installed) + ' and the required Revision is ' + IntToStr(intRevision) + '.', mbInformation, MB_OK)\r
933         }\r
934 \r
935         {If the Revision Installed is greater than the required value then...}\r
936   If intRevision_Installed > intRevision Then\r
937     begin\r
938       {Return that the version installed was adequate}\r
939       Result := True;\r
940 \r
941       {Stops further analyzation of the version number}\r
942       exit\r
943     end;\r
944 \r
945   {If the revision installed did not meet the requirement then...}\r
946   If intRevision_Installed < intRevision Then\r
947     begin\r
948       Result := False;\r
949 \r
950     {Return that the version number failed to meet the requirement and stops further analyzation of the version number}\r
951       exit;\r
952     end;\r
953 \r
954   {Start Detection the Build Installed}\r
955 \r
956         {Modifies strVersion_Installed removing the first period and everything prior to it (Removes the Revision) leaving behind only the build number}\r
957         strVersion_Installed := Copy(strVersion_Installed, intEnd_Pos + 2, Length(strVersion_Installed));\r
958 \r
959         {Set the build installed = to what's left of the strVersion_Installed text}\r
960         intBuild_installed := strToIntDef(RemoveLeadingZeros(strVersion_Installed), 0);\r
961 \r
962         {Debug\r
963   msgbox('The Build version installed is ' + IntToStr(intBuild_installed) + ' and the required Build is ' + IntToStr(intBuild) + '.', mbInformation, MB_OK)\r
964         }\r
965 \r
966         {If the build installed is greater than or equal to the requirement then...}\r
967         if intBuild_installed >= intBuild Then\r
968 \r
969          {Report that the version installed was adequate}\r
970     Result := True\r
971   else\r
972 \r
973     {Reports the inadequacy of the version installed and seases processing }\r
974     Result := False;\r
975 end;\r
976 \r
977 \r
978 {Determines whether or not TortoiseCVS is installed}\r
979 Function TortoiseCVSInstalled(): boolean;\r
980 Begin\r
981         {This absolutely must remain as \CustomIcons, because our application used to create some TortoiseCVS keys even if the application wasn't installed!}\r
982     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\CustomIcons') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseCVS\Icons');\r
983 End;\r
984 \r
985 {Determines whether or not TortoiseGit is installed}\r
986 Function TortoiseGitInstalled(): boolean;\r
987 Begin\r
988     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseGit') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseGit');\r
989 End;\r
990 \r
991 {Determines whether or not TortoiseSVN is installed}\r
992 Function TortoiseSVNInstalled(): boolean;\r
993 Begin\r
994     Result := RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\TortoiseSVN') or RegKeyExists(HKEY_LOCAL_MACHINE, 'SOFTWARE\Classes\Directory\Background\shellex\ContextMenuHandlers\TortoiseSVN');\r
995 End;\r
996 \r
997 Function OldGroup(): string;\r
998 Begin\r
999     {Stores where in \All Users\Programs\ our start menu used to be located}\r
1000      RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\WinMerge_is1', 'Inno Setup: Icon Group', Result)\r
1001 End;\r
1002 \r
1003 Procedure DeletePreviousStartMenu();\r
1004 Var\r
1005         strOld: string;\r
1006         strNew: string;\r
1007         strMessage: string;\r
1008         strShortcut: string;\r
1009 Begin\r
1010     {Detects the previous start menu group's path, if any}\r
1011     strOld := OldGroup();\r
1012 \r
1013     {Detects the current start menu group's path, if any (not creating a group is a valid option)}\r
1014     strNew := ExpandConstant('{group}');\r
1015 \r
1016     {removes the start menu portion of the path from the group path making it match the format of strOld}\r
1017     StringChange(strNew, ExpandConstant('{commonprograms}\'), '')\r
1018 \r
1019     {if the user does have a previous start menu location then..}\r
1020     If strOld <> '' Then\r
1021         Begin\r
1022             {If the current and previous start menu locations are different then...}\r
1023             If Uppercase(strOld) <> UpperCase(strNew) Then\r
1024                 Begin\r
1025                     strMessage := ExpandConstant('{cm:DeletePreviousStartMenu}');\r
1026                     strMessage := Format(strMessage, [strOld, strNew]);\r
1027 \r
1028                     {Display a dialog asking the user if they'd like to delete the previous start menu group}\r
1029                     {If they'd like to delete the previous start menu group then...}\r
1030                     If Msgbox(strMessage, mbConfirmation, mb_YesNo) = mrYes Then\r
1031                         Begin\r
1032                             strOld := ExpandConstant('{commonprograms}\') + strOld;\r
1033                             {Remove old start menu}\r
1034                             DelTree(strOld, True, True, True);\r
1035                         End;\r
1036                 End;\r
1037         End;\r
1038 End;\r
1039 \r
1040 {This event procedure is queed each time the user changes pages within the installer}\r
1041 Procedure CurPageChanged(CurPage: integer);\r
1042 Begin\r
1043     {if the installer reaches the file copy page then...}\r
1044     If CurPage = wpInstalling Then\r
1045             {Delete the previous start menu group if the location has changed since the last install}\r
1046             DeletePreviousStartMenu;\r
1047 End;\r
1048 \r
1049 // Checks if context menu is already enabled for shell extension\r
1050 // If so, we won't overwrite its existing value in [Registry] section\r
1051 Function ShellMenuEnabled(Unused: string): string;\r
1052 Var\r
1053   ContextMenuEnabled: DWORD;\r
1054 Begin\r
1055   ContextMenuEnabled := 0;\r
1056   RegQueryDWORDValue(HKCU, 'Software\Thingamahoochie\WinMerge', 'ContextMenuEnabled', ContextMenuEnabled);\r
1057   if IsTaskSelected('ShellExtension') then\r
1058     Result := inttostr(ContextMenuEnabled or 1)\r
1059   else\r
1060     Result := '0';\r
1061 End;\r
1062 \r
1063 {Replace one occurrence of OldStr in Str with NewStr}\r
1064 Function ReplaceSubString(Src: string; OldStr: string; NewStr: string) : string;\r
1065 Var\r
1066     OldStrStartAt: Integer;\r
1067 \r
1068 Begin\r
1069     OldStrStartAt := Pos(OldStr, Src);\r
1070     if OldStrStartAt > 0 then\r
1071     begin\r
1072         {Remove old string}\r
1073         Delete(Src, OldStrStartAt, Length(OldStr));\r
1074         {Insert new string}\r
1075         Insert(NewStr, Src, OldStrStartAt);\r
1076     end;\r
1077     Result := Src;\r
1078 End;\r
1079 \r
1080 {Returns WinMerge installed exeutable file name}\r
1081 Function WinMergeExeName(): string;\r
1082 Var\r
1083         Unused: String;\r
1084 \r
1085 Begin\r
1086     Result := ExpandConstant('{app}\') + ExeName(Unused);\r
1087 End;\r
1088 \r
1089 {Returns ClearCase external tools configuration file name}\r
1090 Function ClearCaseMapFile(): string;\r
1091 Begin\r
1092     if not RegQueryStringValue(HKEY_LOCAL_MACHINE, 'SOFTWARE\Rational Software\', 'RSINSTALLDIR', Result) then\r
1093     begin\r
1094         Result := {pf} + '\Rational\';\r
1095     end;\r
1096     Result := Result + 'ClearCase\lib\mgrs\map';\r
1097 End;\r
1098 \r
1099 {Determines whether or not Rational ClearCase is installed}\r
1100 Function ClearCaseInstalled(): boolean;\r
1101 Begin\r
1102     Result := FileExists(ClearCaseMapFile());\r
1103 End;\r
1104 \r
1105 {Intergrate WinMerge as ClearCase external diff tool}\r
1106 Procedure IntegrateClearCase(OldExe: String; NewExe: String);\r
1107 Var\r
1108     MapFile: TStringList;\r
1109     FileName: String;\r
1110     I: Integer;\r
1111     BakFile: String;\r
1112 \r
1113 Begin\r
1114     FileName := ClearCaseMapFile();\r
1115     {Create a backup file of the original file first time it gets modified}\r
1116     BakFile := FileName + '.original';\r
1117     if not FileExists(BakFile) then\r
1118     begin\r
1119         FileCopy(FileName, BakFile, True);\r
1120     end;\r
1121     MapFile := TStringList.Create();\r
1122     {Read the entire map file to a string list}\r
1123     MapFile.LoadFromFile(FileName);\r
1124     if MapFile.Count > 0 then\r
1125     begin\r
1126         for I := 0 to MapFile.Count do\r
1127         begin\r
1128             {Search for the 'text_file_delta xcompare ...' line}\r
1129                         if (MapFile.Strings[I][1] <> ';') and (Pos('text_file_delta', MapFile.Strings[I]) > 0) and (Pos('xcompare', MapFile.Strings[I]) > 0) then\r
1130                         begin\r
1131                                 {Replace old executable name with a new executable name}\r
1132                                 MapFile.Strings[I] := ReplaceSubString(MapFile.Strings[I], OldExe, NewExe);\r
1133                             break;\r
1134                         end;\r
1135                 end;\r
1136                 { Save the modified file. }\r
1137                 MapFile.SaveToFile(FileName);\r
1138         end;\r
1139 End;\r
1140 \r
1141 // Add WinMerge to system path.\r
1142 // This requires certain order of things to work:\r
1143 // #1 ModPathDir function must be first (it gets called by others)\r
1144 // #2 include of modpath.iss so modpath code gets included\r
1145 // #3 CurStepChanged and CurUninstallStepChanged procedures as they call\r
1146 //    ModPath (in modpath.iss)\r
1147 function ModPathDir(): TArrayOfString;\r
1148 var\r
1149     Dir:        TArrayOfString;\r
1150 begin\r
1151     setArrayLength(Dir, 1)\r
1152         Dir[0] := ExpandConstant('{app}');\r
1153         Result := Dir;\r
1154 end;\r
1155 \r
1156 function UseAs3WayMergeTool(): Boolean;\r
1157 begin\r
1158     Result := g_CheckListBox.Checked[0];\r
1159 end;\r
1160 \r
1161 function TortoiseSVNGITMergeToolCommandLine(Unused: string): string;\r
1162 var\r
1163     lmr: string;\r
1164     Args: string;\r
1165 begin\r
1166     if g_CheckListBox.Checked[1] then begin\r
1167         lmr := 'r';\r
1168         Args := '/e /ub /fr /wl /wm /dl %bname /dm %tname /dr %yname  %base %theirs %mine /o %merged';\r
1169     end else if g_CheckListBox.Checked[2] then begin\r
1170         lmr := 'm';\r
1171         Args := '/e /ub /fm /wl /wr /dl %tname /dm %bname /dr %yname  %theirs %base %mine /o %merged';\r
1172     end else begin\r
1173         lmr := 'l';\r
1174         Args := '/e /ub /fl /wm /wr /dl %yname /dm %tname /dr %bname  %mine %theirs %base /o %merged';\r
1175     end;\r
1176     if g_CheckListBox.Checked[4] then begin\r
1177         Args := Args + ' /a' + lmr;\r
1178     end;\r
1179     Result := WinMergeExeName() + ' ' + Args;\r
1180 end;\r
1181 \r
1182 function ThreeWayMergePage_ShouldSkipPage(Page: TWizardPage): Boolean;\r
1183 begin\r
1184     Result := not (IsTaskSelected('TortoiseSVN') or IsTaskSelected('TortoiseGIT'));\r
1185 end;\r
1186 \r
1187 #include "modpath.iss"\r
1188 \r
1189 procedure CurStepChanged(CurStep: TSetupStep);\r
1190 Begin\r
1191     if CurStep = ssPostInstall then\r
1192     begin\r
1193                 if IsTaskSelected('modifypath') then\r
1194                         ModPath();\r
1195         if IsTaskSelected('ClearCase') then\r
1196         begin\r
1197             IntegrateClearCase('..\..\bin\cleardiffmrg.exe', WinMergeExeName());\r
1198         end;\r
1199     end;\r
1200 End;\r
1201 \r
1202 Procedure CurUninstallStepChanged(CurUninstallStep: TUninstallStep);\r
1203 var\r
1204         appdir:                 String;\r
1205         selectedTasks:  AnsiString;\r
1206 Begin\r
1207         appdir := ExpandConstant('{app}')\r
1208         if CurUninstallStep = usUninstall then begin\r
1209                 if LoadStringFromFile(appdir + '\uninsTasks.txt', selectedTasks) then\r
1210                         if Pos('modifypath', selectedTasks) > 0 then\r
1211                                 ModPath();\r
1212                 DeleteFile(appdir + '\uninsTasks.txt')\r
1213         end;\r
1214 \r
1215     if CurUninstallStep = usPostUninstall then\r
1216     begin\r
1217       if ClearCaseInstalled() then\r
1218         IntegrateClearCase(WinMergeExeName(), '..\..\bin\cleardiffmrg.exe');\r
1219     end;\r
1220 End;\r
1221 \r
1222 function BooleanToString(Value : Boolean) : String; \r
1223 begin\r
1224   if Value then\r
1225     Result := 'true'\r
1226   else\r
1227     Result := 'false';\r
1228 end;\r
1229 \r
1230 function StringToBoolean(Value : String) : Boolean; \r
1231 begin\r
1232   if Value = 'true' then\r
1233     Result := true\r
1234   else\r
1235     Result := false;\r
1236 end;\r
1237 \r
1238 procedure RegisterPreviousData(PreviousDataKey: Integer);\r
1239 begin\r
1240   SetPreviousData(PreviousDataKey, 'UseAs3WayMergeTool', BooleanToString(g_CheckListBox.Checked[0]));\r
1241   SetPreviousData(PreviousDataKey, 'MergeAtRightPane', BooleanToString(g_CheckListBox.Checked[1]));\r
1242   SetPreviousData(PreviousDataKey, 'MergeAtCenterPane', BooleanToString(g_CheckListBox.Checked[2]));\r
1243   SetPreviousData(PreviousDataKey, 'MergeAtLeftPane', BooleanToString(g_CheckListBox.Checked[3]));\r
1244   SetPreviousData(PreviousDataKey, 'AutoMergeAtStartup', BooleanToString(g_CheckListBox.Checked[4]));\r
1245 end;\r
1246 \r
1247 function GetSysColor(ColorType: Integer): Integer;\r
1248 external 'GetSysColor@user32.dll';\r
1249 \r
1250 procedure InitializeWizard();\r
1251 var\r
1252   Page: TWizardPage;\r
1253 begin\r
1254   Page := CreateCustomPage(wpSelectTasks, ExpandConstant('{cm:ThreeWayMergeWizardPageCaption}'), ExpandConstant('{cm:ThreeWayMergeWizardPageDescription}'));\r
1255   Page.OnShouldSkipPage := @ThreeWayMergePage_ShouldSkipPage;\r
1256 \r
1257   g_CheckListBox := TNewCheckListBox.Create(Page);\r
1258   g_CheckListBox.Width := Page.SurfaceWidth;\r
1259   g_CheckListBox.Height := ScaleY(128);\r
1260   g_CheckListBox.Flat := True;\r
1261   g_CheckListBox.BorderStyle := bsNone;\r
1262   g_CheckListBox.Color := GetSysColor(15);\r
1263   g_CheckListBox.Parent := Page.Surface;\r
1264   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:RegisterWinMergeAs3WayMergeTool}'), '', 0, StringToBoolean(GetPreviousData('UseAs3WayMergeTool', 'true')), True, False, True, nil);\r
1265   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtRightPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtRightPane', 'true')), True, nil);\r
1266   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtCenterPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtCenterPane', 'false')), True, nil);\r
1267   g_CheckListBox.AddRadioButton(ExpandConstant('{cm:MergeAtLeftPane}'), '', 1, StringToBoolean(GetPreviousData('MergeAtLeftPane', 'false')), True, nil);\r
1268   g_CheckListBox.AddCheckBox(ExpandConstant('{cm:AutoMergeAtStartup}'), '', 1, StringToBoolean(GetPreviousData('AutoMergeAtStartup', 'true')), True, False, True, nil);\r
1269 end;\r