Remove makefile.win32 based build system
[geany-mirror.git] / geany.nsi.in
blob7dfa76821b3ec4ce704be713363fe382e7abd902
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 "@VERSION@"
36 !define PRODUCT_VERSION_ID "@VERSION@.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}"
45 !define GTK_VERSION @GTK_VERSION@
47 ;;;;;;;;;;;;;;;;;;;;;
48 ; Version resource ;
49 ;;;;;;;;;;;;;;;;;;;;;
50 VIProductVersion "${PRODUCT_VERSION_ID}"
51 VIAddVersionKey "ProductName" "${PRODUCT_NAME}"
52 VIAddVersionKey "FileVersion" "${PRODUCT_VERSION}"
53 VIAddVersionKey "ProductVersion" "${PRODUCT_VERSION}"
54 VIAddVersionKey "LegalCopyright" "Copyright 2005-2016 by the Geany developer team"
55 VIAddVersionKey "FileDescription" "${PRODUCT_NAME} Installer"
57 BrandingText "$(^NAME) installer (NSIS 2.51)"
58 InstallDir "$PROGRAMFILES\Geany"
59 Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
60 SetCompressor /SOLID lzma
61 ShowInstDetails hide
62 ShowUnInstDetails hide
63 XPStyle on
64 !ifdef INCLUDE_GTK
65 OutFile "geany-${PRODUCT_VERSION}_setup.exe"
66 !else
67 OutFile "geany-${PRODUCT_VERSION}_nogtk_setup.exe"
68 !endif
70 Var Answer
71 Var UserName
72 Var StartmenuFolder
73 Var UNINSTDIR
75 ;;;;;;;;;;;;;;;;
76 ; MUI Settings ;
77 ;;;;;;;;;;;;;;;;
78 !include "MUI2.nsh"
80 ;Reserve files used in .onInit, for faster start-up
81 ReserveFile "${NSISDIR}\Plugins\System.dll"
82 ReserveFile "${NSISDIR}\Plugins\UserInfo.dll"
83 ReserveFile "${NSISDIR}\Plugins\InstallOptions.dll"
84 ReserveFile "${NSISDIR}\Plugins\LangDLL.dll"
86 !define MUI_ABORTWARNING
87 !define MUI_ICON "icons\geany.ico"
88 !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall-full.ico"
90 ; Welcome page
91 !insertmacro MUI_PAGE_WELCOME
92 ; License page
93 ;!define MUI_LICENSEPAGE_RADIOBUTTONS
94 !insertmacro MUI_PAGE_LICENSE "${RESOURCEDIR}\Copying.txt"
95 ; Components page
96 !insertmacro MUI_PAGE_COMPONENTS
97 ; Directory page
98 !define MUI_PAGE_CUSTOMFUNCTION_LEAVE OnDirLeave
99 !insertmacro MUI_PAGE_DIRECTORY
100 ; Start menu page
101 !define MUI_STARTMENUPAGE_DEFAULTFOLDER "Geany"
102 !define MUI_STARTMENUPAGE_REGISTRY_ROOT HKLM
103 !define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
104 !define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "Start Menu Folder"
105 !insertmacro MUI_PAGE_STARTMENU ${PRODUCT_NAME} "$StartmenuFolder"
106 ; Instfiles page
107 !insertmacro MUI_PAGE_INSTFILES
108 ; Finish page
109 !define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\News.txt"
110 !define MUI_FINISHPAGE_SHOWREADME_TEXT "Show Release Notes"
111 !define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
112 !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\Geany.exe"
113 !define MUI_FINISHPAGE_RUN_NOTCHECKED
114 !insertmacro MUI_PAGE_FINISH
116 !insertmacro MUI_UNPAGE_INSTFILES ; Uninstaller page
117 !insertmacro MUI_LANGUAGE "English" ; Language file
119 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
120 ; Sections and InstTypes ;
121 ;;;;;;;;;;;;;;;;;;;;;;;;;;;
122 InstType "Full"
123 InstType "Minimal"
125 Section "!Program Files" SEC01
126 SectionIn RO 1 2
127 SetOverwrite ifnewer
129 SetOutPath "$INSTDIR"
130 File "${RESOURCEDIR}\*.txt"
132 SetOutPath "$INSTDIR\bin"
133 File "${RESOURCEDIR}\bin\Geany.exe"
134 File "${RESOURCEDIR}\bin\*Geany*.dll"
135 # non-GTK dependencies
136 File "gtk\bin\libgcc_s_dw*.dll"
137 File "gtk\bin\libstdc++-*.dll"
138 File "gtk\bin\libwinpthread*.dll"
140 SetOutPath "$INSTDIR\data"
141 File "${RESOURCEDIR}\data\GPL-2"
142 File "${RESOURCEDIR}\data\filetype_extensions.conf"
143 File "${RESOURCEDIR}\data\geany.glade"
144 !if ${GTK_VERSION} >= 3
145 File "${RESOURCEDIR}\data\geany-3.20.css"
146 File "${RESOURCEDIR}\data\geany.css"
147 !else
148 File "${RESOURCEDIR}\data\geany.gtkrc"
149 !endif
150 File "${RESOURCEDIR}\data\snippets.conf"
151 File "${RESOURCEDIR}\data\ui_toolbar.xml"
153 SetOutPath "$INSTDIR\data\filedefs"
154 File /r "${RESOURCEDIR}\data\filedefs\*"
156 SetOutPath "$INSTDIR\data\templates"
157 File /r "${RESOURCEDIR}\data\templates\*"
159 SetOutPath "$INSTDIR\data\colorschemes"
160 File /r "${RESOURCEDIR}\data\colorschemes\*"
161 # Geany color schemes project, don't bail out if they are missing
162 File /nonfatal /r "..\geany-themes\colorschemes\*.conf"
164 SetOutPath "$INSTDIR\share\icons"
165 File /r "${RESOURCEDIR}\share\icons\*"
167 SetOutPath "$INSTDIR"
169 CreateShortCut "$INSTDIR\Geany.lnk" "$INSTDIR\bin\Geany.exe"
170 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
171 CreateDirectory "$SMPROGRAMS\$StartmenuFolder"
172 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Geany.lnk" "$INSTDIR\bin\Geany.exe"
173 !insertmacro MUI_STARTMENU_WRITE_END
175 ; register the extension .geany
176 ; write information about file type
177 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}" "" "${PRODUCT_NAME} Project File"
178 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\DefaultIcon" "" "${PRODUCT_EXE},0"
179 WriteRegStr SHCTX "Software\Classes\${PRODUCT_REGNAME}\Shell\open\command" "" '"${PRODUCT_EXE}" "%1"'
180 ; write information about file extensions
181 WriteRegStr SHCTX "Software\Classes\${PRODUCT_EXT}" "" "${PRODUCT_REGNAME}"
182 ; refresh shell
183 System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) (0x08000000, 0, 0, 0)'
184 SectionEnd
186 Section "Plugins" SEC02
187 SectionIn 1
188 SetOverwrite ifnewer
189 SetOutPath "$INSTDIR\lib\geany"
190 File "${RESOURCEDIR}\lib\geany\*.dll"
191 SectionEnd
193 Section "Language Files" SEC03
194 SectionIn 1
195 SetOutPath "$INSTDIR\share\locale"
196 File /r "${RESOURCEDIR}\share\locale\*"
197 !ifdef INCLUDE_GTK
198 SetOutPath "$INSTDIR\share\locale"
199 File /r "gtk\share\locale\*"
200 !endif
201 SectionEnd
203 Section "Documentation" SEC04
204 SectionIn 1
205 SetOverwrite ifnewer
206 SetOutPath "$INSTDIR\share\doc"
207 File /r "${RESOURCEDIR}\share\doc\*"
208 WriteIniStr "$INSTDIR\Documentation.url" "InternetShortcut" "URL" "$INSTDIR\share\doc\geany\html\index.html"
209 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
210 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Documentation.lnk" "$INSTDIR\Documentation.url"
211 !insertmacro MUI_STARTMENU_WRITE_END
212 SectionEnd
214 Section "Autocompletion Tags" SEC05
215 SectionIn 1
216 SetOverwrite ifnewer
217 SetOutPath "$INSTDIR\data\tags"
218 File /r "${RESOURCEDIR}\data\tags\*"
219 SectionEnd
221 ; Include GTK runtime library but only if desired from command line
222 !ifdef INCLUDE_GTK
223 Section "GTK ${GTK_VERSION} Runtime Environment" SEC06
224 SectionIn 1
225 SetOverwrite ifnewer
226 SetOutPath "$INSTDIR"
227 File "gtk\ReadMe.Dependencies.Geany.txt"
228 SetOutPath "$INSTDIR\bin"
229 File /r "gtk\bin\*"
230 SetOutPath "$INSTDIR\etc"
231 File /r "gtk\etc\*"
232 SetOutPath "$INSTDIR\lib"
233 File /r "gtk\lib\*"
234 SetOutPath "$INSTDIR\share"
235 File /r "gtk\share\*"
236 SectionEnd
237 !endif
239 Section "Context Menus" SEC07
240 SectionIn 1
241 WriteRegStr HKCR "*\shell\OpenWithGeany" "" "Open with Geany"
242 WriteRegStr HKCR "*\shell\OpenWithGeany" "Icon" "$INSTDIR\bin\geany.exe"
243 WriteRegStr HKCR "*\shell\OpenWithGeany\command" "" '"$INSTDIR\bin\geany.exe" "%1"'
244 SectionEnd
246 Section "Desktop Shortcuts" SEC08
247 SectionIn 1
248 CreateShortCut "$DESKTOP\Geany.lnk" "$INSTDIR\bin\Geany.exe"
249 CreateShortCut "$QUICKLAUNCH\Geany.lnk" "$INSTDIR\bin\Geany.exe"
250 SectionEnd
252 ; Development files
253 Section "Development files" SEC09
254 SetOverwrite ifnewer
255 SetOutPath "$INSTDIR\include"
256 File /r "${RESOURCEDIR}\include\*"
258 SetOutPath "$INSTDIR\lib\pkgconfig"
259 File "${RESOURCEDIR}\lib\pkgconfig\geany.pc"
260 SectionEnd
262 Section -AdditionalIcons
263 SetOutPath $INSTDIR
264 !insertmacro MUI_STARTMENU_WRITE_BEGIN ${PRODUCT_NAME}
265 WriteIniStr "$INSTDIR\Website.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}"
266 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Website.lnk" "$INSTDIR\Website.url"
267 CreateShortCut "$SMPROGRAMS\$StartmenuFolder\Uninstall.lnk" "$INSTDIR\uninst.exe"
268 !insertmacro MUI_STARTMENU_WRITE_END
269 SectionEnd
271 Section -Post
272 WriteUninstaller "$INSTDIR\uninst.exe"
273 WriteRegStr SHCTX "${PRODUCT_DIR_REGKEY}" Path "$INSTDIR"
274 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu" "$SMPROGRAMS\$StartmenuFolder"
275 ${if} $Answer == "yes" ; if user is admin
276 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
277 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
278 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\Geany.exe"
279 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}"
280 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}"
281 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "URLUpdateInfo" "${PRODUCT_WEB_SITE}"
282 WriteRegStr SHCTX "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}"
283 WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoModify" 0x00000001
284 WriteRegDWORD SHCTX "${PRODUCT_UNINST_KEY}" "NoRepair" 0x00000001
285 ${endif}
286 SectionEnd
288 Section Uninstall
289 Delete "$INSTDIR\Website.url"
290 Delete "$INSTDIR\Documentation.url"
291 Delete "$INSTDIR\uninst.exe"
292 Delete "$INSTDIR\News.txt"
293 Delete "$INSTDIR\ReadMe.txt"
294 Delete "$INSTDIR\ReadMe.Dependencies.Geany.txt"
295 Delete "$INSTDIR\Thanks.txt"
296 Delete "$INSTDIR\ToDo.txt"
297 Delete "$INSTDIR\Authors.txt"
298 Delete "$INSTDIR\ChangeLog.txt"
299 Delete "$INSTDIR\Copying.txt"
300 Delete "$INSTDIR\Geany.lnk"
302 ; delete start menu entry
303 ReadRegStr $0 SHCTX "${PRODUCT_UNINST_KEY}" "StartMenu"
304 RMDir /r "$0"
306 Delete "$QUICKLAUNCH\Geany.lnk"
307 Delete "$DESKTOP\Geany.lnk"
309 RMDir /r "$INSTDIR\bin"
310 RMDir /r "$INSTDIR\data"
311 RMDir /r "$INSTDIR\etc"
312 RMDir /r "$INSTDIR\include"
313 RMDir /r "$INSTDIR\lib"
314 RMDir /r "$INSTDIR\share"
315 RMDir "$INSTDIR"
317 ; remove .geany file extension
318 ReadRegStr $R0 SHCTX "Software\Classes\${PRODUCT_EXT}" ""
319 ${if} $R0 == "${PRODUCT_REGNAME}"
320 DeleteRegKey SHCTX "${PRODUCT_EXT}"
321 DeleteRegKey HKCR "${PRODUCT_EXT}"
322 DeleteRegKey SHCTX "${PRODUCT_REGNAME}"
323 DeleteRegKey HKCR "${PRODUCT_REGNAME}"
324 ${endif}
326 DeleteRegKey HKCR "*\shell\OpenWithGeany"
328 DeleteRegKey SHCTX "${PRODUCT_UNINST_KEY}"
329 DeleteRegKey HKCU "${PRODUCT_UNINST_KEY}"
330 DeleteRegKey SHCTX "${PRODUCT_DIR_REGKEY}"
331 DeleteRegKey HKCU "${PRODUCT_DIR_REGKEY}"
333 SetAutoClose true
334 SectionEnd
336 ;;;;;;;;;;;;;;;;;;;;;;;;;
337 ; Section descriptions ;
338 ;;;;;;;;;;;;;;;;;;;;;;;;;
339 !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
340 !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "Required program files. You cannot skip these files."
341 !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "Available plugins like 'Version Diff', 'Class Builder' and 'Insert Special Characters'."
342 !insertmacro MUI_DESCRIPTION_TEXT ${SEC03} "Various translations of Geany's interface."
343 !insertmacro MUI_DESCRIPTION_TEXT ${SEC04} "Manual in Text and HTML format."
344 !insertmacro MUI_DESCRIPTION_TEXT ${SEC05} "Symbol lists necessary for auto completion of symbols."
345 !ifdef INCLUDE_GTK
346 !insertmacro MUI_DESCRIPTION_TEXT ${SEC06} "You need these files to run Geany. If you have already installed a GTK Runtime Environment (${GTK_VERSION} or higher), you can skip it."
347 !endif
348 !insertmacro MUI_DESCRIPTION_TEXT ${SEC07} "Add context menu item 'Open With Geany'"
349 !insertmacro MUI_DESCRIPTION_TEXT ${SEC08} "Create shortcuts for Geany on the desktop and in the Quicklaunch Bar"
350 !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."
351 !insertmacro MUI_FUNCTION_DESCRIPTION_END
353 ;;;;;;;;;;;;;;;;;;;;;
354 ; helper functions ;
355 ;;;;;;;;;;;;;;;;;;;;;
357 ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
358 !macro IsUserAdmin Result UName
359 ClearErrors
360 UserInfo::GetName
361 IfErrors Win9x
362 Pop $0
363 StrCpy ${UName} $0
364 UserInfo::GetAccountType
365 Pop $1
366 ${if} $1 == "Admin"
367 StrCpy ${Result} "yes"
368 ${else}
369 StrCpy ${Result} "no"
370 ${endif}
371 Goto done
373 Win9x:
374 StrCpy ${Result} "yes"
375 done:
376 !macroend
378 Function .onInit
379 StrCpy "$StartmenuFolder" "Geany"
381 ; (from http://jabref.svn.sourceforge.net/viewvc/jabref/trunk/jabref/src/windows/nsis/setup.nsi)
382 ; If the user does *not* have administrator privileges, abort
383 StrCpy $Answer ""
384 StrCpy $UserName ""
385 !insertmacro IsUserAdmin $Answer $UserName ; macro from LyXUtils.nsh
386 ${if} $Answer == "yes"
387 SetShellVarContext all ; set that e.g. shortcuts will be created for all users
388 ${else}
389 SetShellVarContext current
390 ; TODO is this really what we want? $PROGRAMFILES is not much better because
391 ; probably the unprivileged user can't write it anyways
392 StrCpy $INSTDIR "$PROFILE\$(^Name)"
393 ${endif}
395 ; prevent running multiple instances of the installer
396 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "geany_installer") i .r1 ?e'
397 Pop $R0
398 StrCmp $R0 0 +3
399 MessageBox MB_OK|MB_ICONEXCLAMATION "The installer is already running." /SD IDOK
400 Abort
401 ; warn about a new install over an existing installation
402 ReadRegStr $R0 SHCTX "${PRODUCT_UNINST_KEY}" "UninstallString"
403 StrCmp $R0 "" finish
405 MessageBox MB_YESNO|MB_ICONEXCLAMATION \
406 "Geany has already been installed. $\nDo you want to remove the previous version before installing $(^Name) ?" \
407 /SD IDYES IDYES remove IDNO finish
409 remove:
410 ; run the uninstaller
411 ClearErrors
412 ; we read the installation path of the old installation from the Registry
413 ReadRegStr $UNINSTDIR SHCTX "${PRODUCT_DIR_REGKEY}" "Path"
414 IfSilent dosilent nonsilent
415 dosilent:
416 ExecWait '$R0 /S _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
417 Goto finish
418 nonsilent:
419 ExecWait '$R0 _?=$UNINSTDIR' ;Do not copy the uninstaller to a temp file
420 finish:
421 FunctionEnd
423 Function un.onUninstSuccess
424 HideWindow
425 MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." \
426 /SD IDOK
427 FunctionEnd
429 Function un.onInit
430 ; If the user does *not* have administrator privileges, abort
431 StrCpy $Answer ""
432 !insertmacro IsUserAdmin $Answer $UserName
433 ${if} $Answer == "yes"
434 SetShellVarContext all
435 ${else}
436 ; check if the Geany has been installed with admin permisions
437 ReadRegStr $0 HKLM "${PRODUCT_UNINST_KEY}" "Publisher"
438 ${if} $0 != ""
439 MessageBox MB_OK|MB_ICONSTOP "You need administrator privileges to uninstall Geany!" \
440 /SD IDOK
441 Abort
442 ${endif}
443 SetShellVarContext current
444 ${endif}
446 MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" \
447 /SD IDYES IDYES +2
448 Abort
449 FunctionEnd
451 Function OnDirLeave
452 ClearErrors
453 SetOutPath "$INSTDIR" ; what about IfError creating $INSTDIR?
454 GetTempFileName $1 "$INSTDIR" ; creates tmp file (or fails)
455 FileOpen $0 "$1" "w" ; error to open?
456 FileWriteByte $0 "0"
457 IfErrors notPossible possible
459 notPossible:
460 RMDir "$INSTDIR" ; removes folder if empty
461 MessageBox MB_OK "The given directory is not writeable. Please choose another one!" /SD IDOK
462 Abort
463 possible:
464 FileClose $0
465 Delete "$1"
466 FunctionEnd