Whitespace changes
[geany-mirror.git] / geany.nsi
blob6367212b6e08728637664d30a614b16c0859be2a
1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2 ; geany.nsi - this file is part of Geany, a fast and lightweight IDE
4 ; Copyright 2007-2012 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
5 ; Copyright 2007-2012 Nick Treleaven <nick(dot)treleaven(at)btinternet(dot)com>
7 ; This program is free software; you can redistribute it and/or modify
8 ; it under the terms of the GNU General Public License as published by
9 ; the Free Software Foundation; either version 2 of the License, or
10 ; (at your option) any later version.
12 ; This program is distributed in the hope that it will be useful,
13 ; but WITHOUT ANY WARRANTY; without even the implied warranty of
14 ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 ; GNU General Public License for more details.
17 ; You should have received a copy of the GNU General Public License
18 ; along with this program; if not, write to the Free Software
19 ; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
22 ; Installer script for Geany (Windows Installer)
23 ; (Script originally generated by the HM NIS Edit Script Wizard)
24 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
27 ; Do a Cyclic Redundancy Check to make sure the installer was not corrupted by the download
28 CRCCheck force
29 RequestExecutionLevel highest ; set execution level for Windows Vista
31 ;;;;;;;;;;;;;;;;;;;
32 ; helper defines ;
33 ;;;;;;;;;;;;;;;;;;;
34 !define PRODUCT_NAME "Geany"
35 !define PRODUCT_VERSION "1.25"
36 !define PRODUCT_VERSION_ID "1.25.0.0"
37 !define PRODUCT_PUBLISHER "The Geany developer team"
38 !define PRODUCT_WEB_SITE "http://www.geany.org/"
39 !define PRODUCT_DIR_REGKEY "Software\Geany"
40 !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
41 !define PRODUCT_EXE "$INSTDIR\bin\Geany.exe"
42 !define PRODUCT_REGNAME "Geany.ProjectFile"
43 !define PRODUCT_EXT ".geany"
44 !define RESOURCEDIR "geany-${PRODUCT_VERSION}"
46 ;;;;;;;;;;;;;;;;;;;;;
47 ; Version resource ;
48 ;;;;;;;;;;;;;;;;;;;;;
49 VIProductVersion "${PRODUCT_VERSION_ID}"
50 VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
51 VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
52 VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
53 VIAddVersionKey "LegalCopyright" "Copyright 2005-2014 by the Geany developer team"
54 VIAddVersionKey "FileDescription" "${PRODUCT_NAME} Installer"
56 BrandingText "$(^NAME) installer (NSIS 2.46)"
57 InstallDir "$PROGRAMFILES\Geany"
58 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
59 SetCompressor /SOLID lzma
60 ShowInstDetails hide
61 ShowUnInstDetails hide
62 XPStyle on
63 !ifdef INCLUDE_GTK
64 OutFile "geany-${PRODUCT_VERSION}_setup.exe"
65 !else
66 OutFile "geany-${PRODUCT_VERSION}_nogtk_setup.exe"
67 !endif
69 Var Answer
70 Var UserName
71 Var StartmenuFolder
72 Var UNINSTDIR
74 ;;;;;;;;;;;;;;;;
75 ; MUI Settings ;
76 ;;;;;;;;;;;;;;;;
77 !include "MUI2.nsh"
79 !define MUI_ABORTWARNING
80 !define MUI_ICON "icons\geany.ico"
81 !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
83 ; Welcome page
84 !insertmacro MUI_PAGE_WELCOME
85 ; License page
86 ;!define MUI_LICENSEPAGE_RADIOBUTTONS
87 !insertmacro MUI_PAGE_LICENSE "${RESOURCEDIR}\Copying.txt"
88 ; Components page
89 !insertmacro MUI_PAGE_COMPONENTS
90 ; Directory page
91 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE OnDirLeave
92 !insertmacro MUI_PAGE_DIRECTORY
93 ; Start menu page
94 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "Geany"
95 !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
96 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
97 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
98 !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} "$StartmenuFolder"
99 ; Instfiles page
100 !insertmacro MUI_PAGE_INSTFILES
101 ; Finish page
102 !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\News.txt"
103 !define MUI_FINISHPAGE_SHOWREADME_TEXT "Show Release Notes"
104 !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
105 !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\Geany.exe"
106 !define MUI_FINISHPAGE_RUN_NOTCHECKED
107 !insertmacro MUI_PAGE_FINISH
109 !insertmacro MUI_UNPAGE_INSTFILES ; Uninstaller page
110 !insertmacro MUI_LANGUAGE "English" ; Language file
112 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
113 ; Sections and InstTypes ;
114 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
115 InstType "Full"
116 InstType "Minimal"
118 Section "!Program Files" SEC01
119 SectionIn RO 1 2
120 SetOverwrite ifnewer
122 SetOutPath "$INSTDIR"
123 File "${RESOURCEDIR}\*.txt"
125 SetOutPath "$INSTDIR\bin"
126 File "${RESOURCEDIR}\bin\Geany.exe"
128 SetOutPath "$INSTDIR\data"
129 File "${RESOURCEDIR}\data\GPL-2"
130 File "${RESOURCEDIR}\data\file*"
131 File "${RESOURCEDIR}\data\geany.glade"
132 File "${RESOURCEDIR}\data\geany.gtkrc"
133 File "${RESOURCEDIR}\data\snippets.conf"
134 File "${RESOURCEDIR}\data\ui_toolbar.xml"
136 SetOutPath "$INSTDIR\data\templates"
137 File /r "${RESOURCEDIR}\data\templates\*"
139 SetOutPath "$INSTDIR\data\colorschemes"
140 File /r "${RESOURCEDIR}\data\colorschemes\*"
141 # Geany color schemes project, don't bail out if they are missing
142 File /nonfatal /r "..\geany-themes\colorschemes\*.conf"
144 SetOutPath "$INSTDIR\share\icons"
145 File /r "${RESOURCEDIR}\share\icons\*"
147 SetOutPath "$INSTDIR"
149 CreateShortCut "$INSTDIR\Geany.lnk" "$INSTDIR\bin\Geany.exe"
150 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
151 CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
152 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Geany.lnk" "$INSTDIR\bin\Geany.exe"
153 !insertmacro MUI_STARTMENU_WRITE_END
155 ; register the extension .geany
156 ; write information about file type
157 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}" "" "${PRODUCT_NAME} Project File"
158 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\DefaultIcon" "" "${PRODUCT_EXE},0"
159 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\Shell\open\command" "" '"${PRODUCT_EXE}" "%1"'
160 ; write information about file extensions
161 WriteRegStr SHCTX "Software\Classes\${PRODUCT_EXT}" "" "${PRODUCT_REGNAME}"
162 ; refresh shell
163 System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (0x08000000, 0, 0, 0)'
164 SectionEnd
166 Section "Plugins" SEC02
167 SectionIn 1
168 SetOverwrite ifnewer
169 SetOutPath "$INSTDIR\lib"
170 File "${RESOURCEDIR}\lib\*.dll"
171 SectionEnd
173 Section "Language Files" SEC03
174 SectionIn 1
175 SetOutPath "$INSTDIR\share\locale"
176 File /r "${RESOURCEDIR}\share\locale\*"
177 !ifdef INCLUDE_GTK
178 SetOutPath "$INSTDIR\share\locale"
179 File /r "gtk\share\locale\*"
180 !endif
181 SectionEnd
183 Section "Documentation" SEC04
184 SectionIn 1
185 SetOverwrite ifnewer
186 SetOutPath "$INSTDIR"
187 File /r "${RESOURCEDIR}\doc"
188 WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" "$INSTDIR\doc\Manual.html"
189 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
190 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Documentation.lnk" "$INSTDIR\Documentation.url"
191 !insertmacro MUI_STARTMENU_WRITE_END
192 SectionEnd
194 Section "Autocompletion Tags" SEC05
195 SectionIn 1
196 SetOutPath "$INSTDIR\data"
197 SetOverwrite ifnewer
198 File "${RESOURCEDIR}\data\php.tags"
199 File "${RESOURCEDIR}\data\pascal.tags"
200 File "${RESOURCEDIR}\data\python.tags"
201 File "${RESOURCEDIR}\data\html_entities.tags"
202 File "${RESOURCEDIR}\data\c99.tags"
203 SectionEnd
205 ; Include GTK runtime library but only if desired from command line
206 !ifdef INCLUDE_GTK
207 Section "GTK 2.24 Runtime Environment" SEC06
208 SectionIn 1
209 SetOverwrite ifnewer
210 SetOutPath "$INSTDIR\bin"
211 File /r "gtk\bin\*"
212 SetOutPath "$INSTDIR\etc"
213 File /r "gtk\etc\*"
214 SetOutPath "$INSTDIR\lib"
215 File /r "gtk\lib\*"
216 SetOutPath "$INSTDIR\share\themes"
217 File /r "gtk\share\themes\*"
218 SectionEnd
219 !endif
221 Section "Context Menus" SEC07
222 SectionIn 1
223 WriteRegStr HKCR "*\shell\OpenWithGeany" "" "Open with Geany"
224 WriteRegStr HKCR "*\shell\OpenWithGeany" "Icon" "$INSTDIR\bin\geany.exe"
225 WriteRegStr HKCR "*\shell\OpenWithGeany\command" "" '"$INSTDIR\bin\geany.exe" "%1"'
226 SectionEnd
228 Section "Desktop Shortcuts" SEC08
229 SectionIn 1
230 CreateShortCut "$DESKTOP\Geany.lnk" "$INSTDIR\bin\Geany.exe"
231 CreateShortCut "$QUICKLAUNCH\Geany.lnk" "$INSTDIR\bin\Geany.exe"
232 SectionEnd
234 ; Development files
235 Section "Development files" SEC09
236 SetOverwrite ifnewer
237 SetOutPath "$INSTDIR\include"
238 File /r "${RESOURCEDIR}\include\*"
240 SetOutPath "$INSTDIR\lib\pkgconfig"
241 File "${RESOURCEDIR}\lib\pkgconfig\geany.pc"
242 SectionEnd
244 Section -AdditionalIcons
245 SetOutPath $INSTDIR
246 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
247 WriteIniStr "$INSTDIR\Website.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
248 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Website.lnk" "$INSTDIR\Website.url"
249 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall.lnk" "$INSTDIR\uninst.exe"
250 !insertmacro MUI_STARTMENU_WRITE_END
251 SectionEnd
253 Section -Post
254 WriteUninstaller "$INSTDIR\uninst.exe"
255 WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR"
256 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
257 ${if} $Answer == "yes" ; if user is admin
258 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
259 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
260 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\Geany.exe"
261 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
262 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
263 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${PRODUCT_WEB_SITE}"
264 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
265 WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
266 WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
267 ${endif}
268 SectionEnd
270 Section Uninstall
271 Delete "$INSTDIR\Website.url"
272 Delete "$INSTDIR\Documentation.url"
273 Delete "$INSTDIR\uninst.exe"
274 Delete "$INSTDIR\News.txt"
275 Delete "$INSTDIR\ReadMe.txt"
276 Delete "$INSTDIR\Thanks.txt"
277 Delete "$INSTDIR\ToDo.txt"
278 Delete "$INSTDIR\Authors.txt"
279 Delete "$INSTDIR\ChangeLog.txt"
280 Delete "$INSTDIR\Copying.txt"
281 Delete "$INSTDIR\Geany.lnk"
283 ; delete start menu entry
284 ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
285 RMDir /r "$0"
287 Delete "$QUICKLAUNCH\Geany.lnk"
288 Delete "$DESKTOP\Geany.lnk"
290 RMDir /r "$INSTDIR\bin"
291 RMDir /r "$INSTDIR\doc"
292 RMDir /r "$INSTDIR\data"
293 RMDir /r "$INSTDIR\etc"
294 RMDir /r "$INSTDIR\include"
295 RMDir /r "$INSTDIR\lib"
296 RMDir /r "$INSTDIR\share"
297 RMDir "$INSTDIR"
299 ; remove .geany file extension
300 ReadRegStr $R0 SHCTX "Software\Classes\${PRODUCT_EXT}" ""
301 ${if} $R0 == "${PRODUCT_REGNAME}"
302 DeleteRegKey SHCTX "${PRODUCT_EXT}"
303 DeleteRegKey HKCR "${PRODUCT_EXT}"
304 DeleteRegKey SHCTX "${PRODUCT_REGNAME}"
305 DeleteRegKey HKCR "${PRODUCT_REGNAME}"
306 ${endif}
308 DeleteRegKey HKCR "*\shell\OpenWithGeany"
310 DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
311 DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
312 DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
313 DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
315 SetAutoClose true
316 SectionEnd
318 ;;;;;;;;;;;;;;;;;;;;;;;;;
319 ; Section descriptions ;
320 ;;;;;;;;;;;;;;;;;;;;;;;;;
321 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
322 !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Required program files. You cannot skip these files."
323 !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Available plugins like 'Version Diff', 'Class Builder' and 'Insert Special Characters'."
324 !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Various translations of Geany's interface."
325 !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Manual in Text and HTML format."
326 !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} "Symbol lists necessary for auto completion of symbols."
327 !ifdef INCLUDE_GTK
328 !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} "You need these files to run Geany. If you have already installed a GTK Runtime Environment (2.24 or higher), you can skip it."
329 !endif
330 !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} "Add context menu item 'Open With Geany'"
331 !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} "Create shortcuts for Geany on the desktop and in the Quicklaunch Bar"
332 !insertmacro MUI_DESCRIPTION_TEXT ${SEC09} "You need these files only if you want to develop own plugins for Geany. If unsure, you can skip it."
333 !insertmacro MUI_FUNCTION_DESCRIPTION_END
335 ;;;;;;;;;;;;;;;;;;;;;
336 ; helper functions ;
337 ;;;;;;;;;;;;;;;;;;;;;
339 ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
340 !macro IsUserAdmin Result UName
341 ClearErrors
342 UserInfo::GetName
343 IfErrors Win9x
344 Pop $0
345 StrCpy ${UName} $0
346 UserInfo::GetAccountType
347 Pop $1
348 ${if} $1 == "Admin"
349 StrCpy ${Result} "yes"
350 ${else}
351 StrCpy ${Result} "no"
352 ${endif}
353 Goto done
355 Win9x:
356 StrCpy ${Result} "yes"
357 done:
358 !macroend
360 Function .onInit
361 StrCpy "$StartmenuFolder" "Geany"
363 ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
364 ; If the user does *not* have administrator privileges, abort
365 StrCpy $Answer ""
366 StrCpy $UserName ""
367 !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
368 ${if} $Answer == "yes"
369 SetShellVarContext all ; set that e.g. shortcuts will be created for all users
370 ${else}
371 SetShellVarContext current
372 ; TODO is this really what we want? $PROGRAMFILES is not much better because
373 ; probably the unprivileged user can't write it anyways
374 StrCpy $INSTDIR "$PROFILE\$(^Name)"
375 ${endif}
377 ; prevent running multiple instances of the installer
378 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "geany_installer") i .r1 ?e'
379 Pop $R0
380 StrCmp $R0 0 +3
381 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." /SD IDOK
382 Abort
383 ; warn about a new install over an existing installation
384 ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString"
385 StrCmp $R0 "" finish
387 MessageBox MB_YESNO|MB_ICONEXCLAMATION \
388 "Geany has already been installed. $\nDo you want to remove the previous version before installing $(^Name) ?" \
389 /SD IDYES IDYES remove IDNO finish
391 remove:
392 ; run the uninstaller
393 ClearErrors
394 ; we read the installation path of the old installation from the Registry
395 ReadRegStr $UNINSTDIR SHCTX "${PRODUCT_DIR_REGKEY}" "Path"
396 IfSilent dosilent nonsilent
397 dosilent:
398 ExecWait '$R0 /S _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
399 Goto finish
400 nonsilent:
401 ExecWait '$R0 _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
402 finish:
403 FunctionEnd
405 Function un.onUninstSuccess
406 HideWindow
407 MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." \
408 /SD IDOK
409 FunctionEnd
411 Function un.onInit
412 ; If the user does *not* have administrator privileges, abort
413 StrCpy $Answer ""
414 !insertmacro IsUserAdmin $Answer $UserName
415 ${if} $Answer == "yes"
416 SetShellVarContext all
417 ${else}
418 ; check if the Geany has been installed with admin permisions
419 ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
420 ${if} $0 != ""
421 MessageBox MB_OK|MB_ICONSTOP "You need administrator privileges to uninstall Geany!" \
422 /SD IDOK
423 Abort
424 ${endif}
425 SetShellVarContext current
426 ${endif}
428 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" \
429 /SD IDYES IDYES +2
430 Abort
431 FunctionEnd
433 Function OnDirLeave
434 ClearErrors
435 SetOutPath "$INSTDIR" ; what about IfError creating $INSTDIR?
436 GetTempFileName $1 "$INSTDIR" ; creates tmp file (or fails)
437 FileOpen $0 "$1" "w" ; error to open?
438 FileWriteByte $0 "0"
439 IfErrors notPossible possible
441 notPossible:
442 RMDir "$INSTDIR" ; removes folder if empty
443 MessageBox MB_OK "The given directory is not writeable. Please choose another one!" /SD IDOK
444 Abort
445 possible:
446 FileClose $0
447 Delete "$1"
448 FunctionEnd