OSDN Git Service

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