source: osm/applications/editors/josm/nsis/josm.nsi@ 27189

Last change on this file since 27189 was 24717, checked in by stoecker, 15 years ago

fix installer due to plugin integration

File size: 16.9 KB
RevLine 
[2601]1;
[3771]2; josm.nsi
[2601]3;
4
5; Set the compression mechanism first.
[14194]6; If you get an error here, please update to at least NSIS 2.07!
[2601]7SetCompressor /SOLID lzma
8
9; work with JAVA ini strings
10!include "INIStrNS.nsh"
11
[3771]12!define DEST "josm"
[2601]13
14; Used to refresh the display of file association
15!define SHCNE_ASSOCCHANGED 0x08000000
16!define SHCNF_IDLIST 0
17
18; Used to add associations between file extensions and JOSM
19!define OSM_ASSOC "josm-file"
20
21; ============================================================================
22; Header configuration
23; ============================================================================
24; The name of the installer
[3771]25!define PROGRAM_NAME "JOSM"
[2601]26
27Name "${PROGRAM_NAME} ${VERSION}"
28
29; The file to write
30OutFile "${DEST}-setup-${VERSION}.exe"
31
32XPStyle on
33
34
35
36; ============================================================================
37; Modern UI
38; ============================================================================
39
40!include "MUI.nsh"
41
42; Icon of installer and uninstaller
43!define MUI_ICON "logo.ico"
44!define MUI_UNICON "logo.ico"
45
46!define MUI_COMPONENTSPAGE_SMALLDESC
47!define MUI_FINISHPAGE_NOAUTOCLOSE
48!define MUI_UNFINISHPAGE_NOAUTOCLOSE
[5798]49!define MUI_WELCOMEFINISHPAGE_BITMAP "josm-nsis-brand.bmp"
[6054]50!define MUI_WELCOMEPAGE_TEXT $(JOSM_WELCOME_TEXT)
[2601]51
52!define MUI_FINISHPAGE_RUN "$INSTDIR\josm.exe"
53
54
55; ============================================================================
56; MUI Pages
57; ============================================================================
58
59!insertmacro MUI_PAGE_WELCOME
[5214]60!insertmacro MUI_PAGE_LICENSE "..\core\LICENSE"
[2601]61!insertmacro MUI_PAGE_COMPONENTS
62;Page custom DisplayAdditionalTasksPage
63!insertmacro MUI_PAGE_DIRECTORY
64!insertmacro MUI_PAGE_INSTFILES
65!insertmacro MUI_PAGE_FINISH
66
67!insertmacro MUI_UNPAGE_WELCOME
68!insertmacro MUI_UNPAGE_CONFIRM
69!insertmacro MUI_UNPAGE_COMPONENTS
70!insertmacro MUI_UNPAGE_INSTFILES
71!insertmacro MUI_UNPAGE_FINISH
72
73; ============================================================================
74; MUI Languages
75; ============================================================================
76
[6054]77 ;Remember the installer language
78 !define MUI_LANGDLL_REGISTRY_ROOT "HKLM"
79 !define MUI_LANGDLL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM"
80 !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language"
81
82 ;; English goes first because its the default. The rest are
83 ;; in alphabetical order (at least the strings actually displayed
84 ;; will be).
[2601]85
[6054]86 !insertmacro MUI_LANGUAGE "English"
87 !insertmacro MUI_LANGUAGE "German"
88
89;--------------------------------
90;Translations
91
92 !define JOSM_DEFAULT_LANGFILE "locale\english.nsh"
93
94 !include "langmacros.nsh"
95
96 !insertmacro JOSM_MACRO_INCLUDE_LANGFILE "ENGLISH" "locale\english.nsh"
97 !insertmacro JOSM_MACRO_INCLUDE_LANGFILE "GERMAN" "locale\german.nsh"
98
[14194]99; Uninstall stuff
[6054]100!define MUI_UNCONFIRMPAGE_TEXT_TOP ${un.JOSM_UNCONFIRMPAGE_TEXT_TOP}
101
[2601]102; ============================================================================
[6054]103; Installation types
104; ============================================================================
105
106InstType "$(JOSM_FULL_INSTALL)"
107
108InstType "un.$(un.JOSM_DEFAULT_UNINSTALL)"
109InstType "un.$(un.JOSM_FULL_UNINSTALL)"
110
111; ============================================================================
[2601]112; Reserve Files
113; ============================================================================
114
115 ;Things that need to be extracted on first (keep these lines before any File command!)
116 ;Only useful for BZIP2 compression
117
118!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
119
120; ============================================================================
121; Section macros
122; ============================================================================
123!include "Sections.nsh"
124
125; ========= Macro to unselect and disable a section =========
126
127!macro DisableSection SECTION
128
129 Push $0
130 SectionGetFlags "${SECTION}" $0
131 IntOp $0 $0 & ${SECTION_OFF}
132 IntOp $0 $0 | ${SF_RO}
133 SectionSetFlags "${SECTION}" $0
134 Pop $0
135
136!macroend
137
138; ========= Macro to enable (unreadonly) a section =========
139!define SECTION_ENABLE 0xFFFFFFEF
140!macro EnableSection SECTION
141
142 Push $0
143 SectionGetFlags "${SECTION}" $0
144 IntOp $0 $0 & ${SECTION_ENABLE}
145 SectionSetFlags "${SECTION}" $0
146 Pop $0
147
148!macroend
149
150; ============================================================================
151; Command Line
152; ============================================================================
153!include "FileFunc.nsh"
154
155; ============================================================================
156; Directory selection page configuration
157; ============================================================================
158; The text to prompt the user to enter a directory
[6054]159DirText $(JOSM_DIR_TEXT)
[2601]160
161; The default installation directory
[3771]162InstallDir $PROGRAMFILES\JOSM\
[2601]163
164; See if this is an upgrade; if so, use the old InstallDir as default
[3771]165InstallDirRegKey HKEY_LOCAL_MACHINE SOFTWARE\JOSM "InstallDir"
[2601]166
167
168; ============================================================================
169; Install page configuration
170; ============================================================================
171ShowInstDetails show
172ShowUninstDetails show
173
174; ============================================================================
175; Functions and macros
176; ============================================================================
177
178; update file extension icons
179!macro UpdateIcons
180 Push $R0
181 Push $R1
182 Push $R2
183
184 !define UPDATEICONS_UNIQUE ${__LINE__}
185
186 IfFileExists "$SYSDIR\shell32.dll" UpdateIcons.next1_${UPDATEICONS_UNIQUE} UpdateIcons.error1_${UPDATEICONS_UNIQUE}
187UpdateIcons.next1_${UPDATEICONS_UNIQUE}:
188 GetDllVersion "$SYSDIR\shell32.dll" $R0 $R1
189 IntOp $R2 $R0 / 0x00010000
190 IntCmp $R2 4 UpdateIcons.next2_${UPDATEICONS_UNIQUE} UpdateIcons.error2_${UPDATEICONS_UNIQUE}
191UpdateIcons.next2_${UPDATEICONS_UNIQUE}:
192 System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
193 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
194
195UpdateIcons.error1_${UPDATEICONS_UNIQUE}:
[6054]196 MessageBox MB_OK|MB_ICONSTOP $(JOSM_UPDATEICONS_ERROR1)
[2601]197 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
198UpdateIcons.error2_${UPDATEICONS_UNIQUE}:
[6054]199 MessageBox MB_OK|MB_ICONINFORMATION $(JOSM_UPDATEICONS_ERROR2)
[2601]200 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
201UpdateIcons.quit_${UPDATEICONS_UNIQUE}:
202 !undef UPDATEICONS_UNIQUE
203 Pop $R2
204 Pop $R1
205 Pop $R0
206
207!macroend
208
209; associate a file extension to an icon
210Function Associate
[3771]211 ; $R0 should contain the prefix to associate to JOSM
[2601]212 Push $R1
213
214 ReadRegStr $R1 HKCR $R0 ""
215 StrCmp $R1 "" Associate.doRegister
216 Goto Associate.end
217Associate.doRegister:
218 ;The extension is not associated to any program, we can do the link
219 WriteRegStr HKCR $R0 "" ${OSM_ASSOC}
220Associate.end:
221 pop $R1
222FunctionEnd
223
224; disassociate a file extension from an icon
225Function un.unlink
226 ; $R0 should contain the prefix to unlink
227 Push $R1
228
229 ReadRegStr $R1 HKCR $R0 ""
230 StrCmp $R1 ${OSM_ASSOC} un.unlink.doUnlink
231 Goto un.unlink.end
232un.unlink.doUnlink:
[3771]233 ; The extension is associated with JOSM so, we must destroy this!
[2601]234 DeleteRegKey HKCR $R0
235un.unlink.end:
236 pop $R1
237FunctionEnd
238
239Function .onInit
240 ;Extract InstallOptions INI files
241; !insertmacro MUI_INSTALLOPTIONS_EXTRACT "AdditionalTasksPage.ini"
[6054]242 !insertmacro MUI_LANGDLL_DISPLAY
[2601]243FunctionEnd
244
[6054]245Function un.onInit
246
247 !insertmacro MUI_UNGETLANGUAGE
248
249FunctionEnd
250
[2601]251; ============================================================================
252; Installation execution commands
253; ============================================================================
254
255Section "-Required"
256;-------------------------------------------
257
258;
259; Install for every user
260;
261SectionIn 1 2 RO
[14196]262SetShellVarContext current
[2601]263
264SetOutPath $INSTDIR
265
266; Write the uninstall keys for Windows
267WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayVersion" "${VERSION}"
[3771]268WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayName" "JOSM ${VERSION}"
[2601]269WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "UninstallString" '"$INSTDIR\uninstall.exe"'
270WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "Publisher" "The OpenStreetMap developer community, http://www.openstreetmap.org/"
271WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "HelpLink" "mailto:newbies@openstreetmap.org."
272WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLInfoAbout" "http://www.openstreetmap.org/"
[4470]273WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLUpdateInfo" "http://wiki.openstreetmap.org/index.php/JOSM"
[2601]274WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoModify" 1
275WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoRepair" 1
276WriteUninstaller "uninstall.exe"
277
278; Write an entry for ShellExecute
279WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "" '$INSTDIR\josm.exe'
280WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "Path" '$INSTDIR'
281
282SectionEnd ; "Required"
283
284
[6054]285Section $(JOSM_SEC_JOSM) SecJosm
[2601]286;-------------------------------------------
287SectionIn 1
288SetOutPath $INSTDIR
289File "josm.exe"
[18004]290File "josm-tested.jar"
[4470]291
292; XXX - should be provided/done by josm.jar itself and not here!
[2601]293SetShellVarContext current
294SetOutPath "$APPDATA\JOSM"
295
296; don't overwrite existing bookmarks
297IfFileExists preferences dont_overwrite_bookmarks
298File "bookmarks"
299dont_overwrite_bookmarks:
300
[14200]301; write reasonable defaults for some preferences
302${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "laf" "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
303
[2601]304SectionEnd
305
306
[6054]307SectionGroup $(JOSM_SEC_PLUGINS_GROUP) SecPluginsGroup
[2601]308
[14201]309Section $(JOSM_SEC_OPENSTREETBUGS_PLUGIN) SecOpenStreetBugsPlugin
310;-------------------------------------------
311SectionIn 1 2
312SetShellVarContext current
313SetOutPath $APPDATA\JOSM\plugins
314File "..\dist\openstreetbugs.jar"
315SectionEnd
316
[24579]317Section $(JOSM_SEC_TURNRESTRICTIONS_PLUGIN) SecTurnrestrictionsPlugin
[14200]318;-------------------------------------------
319SectionIn 1 2
320SetShellVarContext current
321SetOutPath $APPDATA\JOSM\plugins
[24579]322File "..\dist\turnrestrictions.jar"
[14200]323SectionEnd
324
[24717]325Section $(JOSM_SEC_WMS) SecWMS
[2601]326;-------------------------------------------
327SectionIn 1 2
[14196]328SetShellVarContext current
[14194]329SetOutPath $INSTDIR\imageformats
[14189]330File "webkit-image\imageformats\qjpeg4.dll"
[14194]331SetOutPath $INSTDIR
[14189]332File "webkit-image\mingwm10.dll"
333File "webkit-image\QtCore4.dll"
334File "webkit-image\QtGui4.dll"
335File "webkit-image\QtNetwork4.dll"
336File "webkit-image\QtWebKit4.dll"
337File "webkit-image\webkit-image.exe"
[2601]338SectionEnd
339
340SectionGroupEnd ; "Plugins"
341
[6054]342Section $(JOSM_SEC_STARTMENU) SecStartMenu
[4471]343;-------------------------------------------
344SectionIn 1 2
345; To qoute "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch11d.asp":
346; "Do not include Readme, Help, or Uninstall entries on the Programs menu."
[6054]347CreateShortCut "$SMPROGRAMS\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT)
[4471]348SectionEnd
349
[6054]350Section $(JOSM_SEC_DESKTOP_ICON) SecDesktopIcon
[4471]351;-------------------------------------------
352; SectionIn 1 2
[14194]353; Create desktop icon
354; Desktop icon for a program should not be installed as default!
[6054]355CreateShortCut "$DESKTOP\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT)
[4471]356SectionEnd
357
[6054]358Section $(JOSM_SEC_QUICKLAUNCH_ICON) SecQuickLaunchIcon
[4471]359;-------------------------------------------
360SectionIn 1 2
[14194]361; Create quick launch icon
[6054]362CreateShortCut "$QUICKLAUNCH\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT)
[4471]363SectionEnd
364
[6054]365Section $(JOSM_SEC_FILE_EXTENSIONS) SecFileExtensions
[4471]366;-------------------------------------------
367SectionIn 1 2
[14194]368; Create File Extensions
[4471]369WriteRegStr HKCR ${OSM_ASSOC} "" "OpenStreetMap data"
370WriteRegStr HKCR "${OSM_ASSOC}\Shell\open\command" "" '"$INSTDIR\josm.exe" "%1"'
371WriteRegStr HKCR "${OSM_ASSOC}\DefaultIcon" "" '"$INSTDIR\josm.exe",0'
372push $R0
373 StrCpy $R0 ".osm"
374 Call Associate
375 StrCpy $R0 ".gpx"
376 Call Associate
[14194]377; if somethings added here, add it also to the uninstall section
[4471]378pop $R0
379!insertmacro UpdateIcons
380SectionEnd
381
382
[2601]383Section "-PluginSetting"
384;-------------------------------------------
[4471]385SectionIn 1 2
[2601]386;MessageBox MB_OK "PluginSetting!" IDOK 0
[4470]387; XXX - should better be handled inside JOSM (recent plugin manager is going in the right direction)
[2601]388SetShellVarContext current
[6054]389!include LogicLib.nsh
[24717]390${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "plugins" "openstreetbugs
[2601]391turnrestrictions"
392SectionEnd
393
[6054]394
[2601]395Section "un.$(un.JOSM_SEC_UNINSTALL)" un.SecUinstall
396;-------------------------------------------
397
398;
399; UnInstall for every user
400;
[14196]401SectionIn 1 2
[2601]402SetShellVarContext current
[18004]403
[6054]404Delete "$INSTDIR\josm-tested.jar"
[17700]405IfErrors 0 NoJOSMErrorMsg
[6054]406 MessageBox MB_OK $(un.JOSM_IN_USE_ERROR) IDOK 0 ;skipped if josm.jar removed
407 Abort $(un.JOSM_IN_USE_ERROR)
[17700]408NoJOSMErrorMsg:
[14194]409Delete "$INSTDIR\josm.exe"
410Delete "$INSTDIR\imageformats\qjpeg4.dll"
411RMDir "$INSTDIR\imageformats"
412Delete "$INSTDIR\mingwm10.dll"
413Delete "$INSTDIR\QtCore4.dll"
414Delete "$INSTDIR\QtGui4.dll"
415Delete "$INSTDIR\QtNetwork4.dll"
416Delete "$INSTDIR\QtWebKit4.dll"
[2601]417Delete "$INSTDIR\webkit-image.exe"
418Delete "$INSTDIR\uninstall.exe"
[2952]419
[2601]420DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM"
421DeleteRegKey HKEY_LOCAL_MACHINE "Software\josm.exe"
422DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe"
[6054]423
424; Remove Language preference info
425DeleteRegKey HKCU "Software/JOSM" ;${MUI_LANGDLL_REGISTRY_ROOT} ${MUI_LANGDLL_REGISTRY_KEY}
[2601]426
427push $R0
428 StrCpy $R0 ".osm"
429 Call un.unlink
430 StrCpy $R0 ".gpx"
431 Call un.unlink
432pop $R0
433
434DeleteRegKey HKCR ${OSM_ASSOC}
435DeleteRegKey HKCR "${OSM_ASSOC}\Shell\open\command"
436DeleteRegKey HKCR "${OSM_ASSOC}\DefaultIcon"
437!insertmacro UpdateIcons
438
439Delete "$SMPROGRAMS\josm.lnk"
440Delete "$DESKTOP\josm.lnk"
441Delete "$QUICKLAUNCH\josm.lnk"
442
443RMDir "$INSTDIR"
444
445SectionEnd ; "Uinstall"
[6054]446
[2601]447Section /o "un.$(un.JOSM_SEC_PERSONAL_SETTINGS)" un.SecPersonalSettings
448;-------------------------------------------
449SectionIn 2
[24579]450SetShellVarContext current
451Delete "$APPDATA\JOSM\plugins\turnrestrictions\*.*"
[14201]452RMDir "$APPDATA\JOSM\plugins\turnrestrictions"
453Delete "$APPDATA\JOSM\plugins\openstreetbugs\*.*"
454RMDir "$APPDATA\JOSM\plugins\openstreetbugs"
455Delete "$APPDATA\JOSM\plugins\remotecontrol\*.*"
[24717]456RMDir "$APPDATA\JOSM\plugins\remotecontrol"
457Delete "$APPDATA\JOSM\plugins\validator\*.*"
[14196]458RMDir "$APPDATA\JOSM\plugins\validator"
459Delete "$APPDATA\JOSM\plugins\wmsplugin\*.*"
460RMDir "$APPDATA\JOSM\plugins\wmsplugin"
[2601]461Delete "$APPDATA\JOSM\plugins\*.*"
[14196]462RMDir "$APPDATA\JOSM\plugins"
463
464Delete "$APPDATA\JOSM\motd.html"
465Delete "$APPDATA\JOSM\preferences"
[2601]466Delete "$APPDATA\JOSM\bookmarks"
467RMDir "$APPDATA\JOSM"
468SectionEnd
469
470
471Section "-Un.Finally"
472;-------------------------------------------
473SectionIn 1 2
474; this test must be done after all other things uninstalled (e.g. Global Settings)
[6054]475IfFileExists "$INSTDIR" 0 NoFinalErrorMsg
[2601]476 MessageBox MB_OK $(un.JOSM_INSTDIR_ERROR) IDOK 0 ; skipped if dir doesn't exist
477NoFinalErrorMsg:
478SectionEnd
479
480
481; ============================================================================
482; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD!
483; ============================================================================
[6054]484!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
485 !insertmacro MUI_DESCRIPTION_TEXT ${SecJosm} $(JOSM_SECDESC_JOSM)
[14201]486 !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsGroup} $(JOSM_SECDESC_PLUGINS_GROUP)
[24582]487 !insertmacro MUI_DESCRIPTION_TEXT ${SecOpenStreetBugsPlugin} $(JOSM_SECDESC_OPENSTREETBUGS_PLUGIN)
[24717]488 !insertmacro MUI_DESCRIPTION_TEXT ${SecTurnrestrictionsPlugin} $(JOSM_SECDESC_TURNRESTRICTIONS_PLUGIN)
[6054]489 !insertmacro MUI_DESCRIPTION_TEXT ${SecWMS} $(JOSM_SECDESC_WMS)
490 !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(JOSM_SECDESC_STARTMENU)
491 !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopIcon} $(JOSM_SECDESC_DESKTOP_ICON)
492 !insertmacro MUI_DESCRIPTION_TEXT ${SecQuickLaunchIcon} $(JOSM_SECDESC_QUICKLAUNCH_ICON)
[4471]493 !insertmacro MUI_DESCRIPTION_TEXT ${SecFileExtensions} $(JOSM_SECDESC_FILE_EXTENSIONS)
494
[2601]495
496!insertmacro MUI_FUNCTION_DESCRIPTION_END
497
[6054]498!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
499 !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} $(un.JOSM_SECDESC_UNINSTALL)
[2601]500 !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} $(un.JOSM_SECDESC_PERSONAL_SETTINGS)
501!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
502
503; ============================================================================
504; Callback functions
505; ============================================================================
506
Note: See TracBrowser for help on using the repository browser.