source: osm/applications/nsis/openstreetmap.nsi@ 3233

Last change on this file since 3233 was 2952, checked in by ulf, 17 years ago

update to 0.0.7:

  • API 0.4 ready (latest JOSM and plugins)
  • add namefinder plugin
  • copy plugins from svn where available (instead of using wget)
  • fix some uninstaller bugs
File size: 19.0 KB
Line 
1;
2; openstreetmap.nsi
3;
4
5
6; Set the compression mechanism first.
7; As of NSIS 2.07, solid compression which makes installer about 1MB smaller
8; is no longer the default, so use the /SOLID switch.
9; This unfortunately is unknown to NSIS prior to 2.07 and creates an error.
10; So if you get an error here, please update to at least NSIS 2.07!
11SetCompressor /SOLID lzma
12
13; work with JAVA ini strings
14!include "INIStrNS.nsh"
15
16!define DEST "openstreetmap"
17
18InstType "OpenStreetMap (full install)"
19
20InstType "un.Default (keep Personal Settings and plugins)"
21InstType "un.All (remove all)"
22
23; Used to refresh the display of file association
24!define SHCNE_ASSOCCHANGED 0x08000000
25!define SHCNF_IDLIST 0
26
27; Used to add associations between file extensions and JOSM
28!define OSM_ASSOC "josm-file"
29
30; ============================================================================
31; Header configuration
32; ============================================================================
33; The name of the installer
34!define PROGRAM_NAME "OpenStreetMap"
35
36Name "${PROGRAM_NAME} ${VERSION}"
37
38; The file to write
39OutFile "${DEST}-setup-${VERSION}.exe"
40
41; Uninstall stuff (NSIS 2.08: "\r\n" don't work here)
42!define MUI_UNCONFIRMPAGE_TEXT_TOP "The following OpenStreetMap installation will be uninstalled. Click 'Next' to continue."
43
44XPStyle on
45
46
47
48; ============================================================================
49; Modern UI
50; ============================================================================
51
52!include "MUI.nsh"
53;!addplugindir ".\Plugins"
54
55; Icon of installer and uninstaller
56!define MUI_ICON "logo.ico"
57!define MUI_UNICON "logo.ico"
58
59!define MUI_COMPONENTSPAGE_SMALLDESC
60!define MUI_FINISHPAGE_NOAUTOCLOSE
61!define MUI_UNFINISHPAGE_NOAUTOCLOSE
62!define MUI_WELCOMEPAGE_TEXT "This wizard will guide you through the installation of OpenStreetMap.\r\n\r\nBefore starting the installation, make sure any OpenStreetMap applications are not running.\r\n\r\nClick 'Next' to continue."
63;!define MUI_FINISHPAGE_LINK "Install WinPcap to be able to capture packets from a network!"
64;!define MUI_FINISHPAGE_LINK_LOCATION "http://www.winpcap.org"
65
66; NSIS shows Readme files by opening the Readme file with the default application for
67; the file's extension. "README.win32" won't work in most cases, because extension "win32"
68; is usually not associated with an appropriate text editor. We should use extension "txt"
69; for a text file or "html" for an html README file.
70;!define MUI_FINISHPAGE_SHOWREADME "$INSTDIR\NEWS.txt"
71;!define MUI_FINISHPAGE_SHOWREADME_TEXT "Show News"
72;!define MUI_FINISHPAGE_SHOWREADME_NOTCHECKED
73!define MUI_FINISHPAGE_RUN "$INSTDIR\josm.exe"
74;!define MUI_FINISHPAGE_RUN_NOTCHECKED
75
76
77
78;!define MUI_PAGE_CUSTOMFUNCTION_SHOW myShowCallback
79
80; ============================================================================
81; MUI Pages
82; ============================================================================
83
84!insertmacro MUI_PAGE_WELCOME
85!insertmacro MUI_PAGE_LICENSE "downloads\LICENSE"
86!insertmacro MUI_PAGE_COMPONENTS
87;Page custom DisplayAdditionalTasksPage
88!insertmacro MUI_PAGE_DIRECTORY
89!insertmacro MUI_PAGE_INSTFILES
90!insertmacro MUI_PAGE_FINISH
91
92!insertmacro MUI_UNPAGE_WELCOME
93!insertmacro MUI_UNPAGE_CONFIRM
94!insertmacro MUI_UNPAGE_COMPONENTS
95!insertmacro MUI_UNPAGE_INSTFILES
96!insertmacro MUI_UNPAGE_FINISH
97
98; ============================================================================
99; MUI Languages
100; ============================================================================
101
102!insertmacro MUI_LANGUAGE "English"
103
104; ============================================================================
105; Reserve Files
106; ============================================================================
107
108 ;Things that need to be extracted on first (keep these lines before any File command!)
109 ;Only useful for BZIP2 compression
110
111; ReserveFile "AdditionalTasksPage.ini"
112!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
113
114; ============================================================================
115; Section macros
116; ============================================================================
117!include "Sections.nsh"
118
119; ========= Macro to unselect and disable a section =========
120
121!macro DisableSection SECTION
122
123 Push $0
124 SectionGetFlags "${SECTION}" $0
125 IntOp $0 $0 & ${SECTION_OFF}
126 IntOp $0 $0 | ${SF_RO}
127 SectionSetFlags "${SECTION}" $0
128 Pop $0
129
130!macroend
131
132; ========= Macro to enable (unreadonly) a section =========
133!define SECTION_ENABLE 0xFFFFFFEF
134!macro EnableSection SECTION
135
136 Push $0
137 SectionGetFlags "${SECTION}" $0
138 IntOp $0 $0 & ${SECTION_ENABLE}
139 SectionSetFlags "${SECTION}" $0
140 Pop $0
141
142!macroend
143
144; ============================================================================
145; Command Line
146; ============================================================================
147!include "FileFunc.nsh"
148
149;!insertmacro GetParameters
150;!insertmacro GetOptions
151
152; ============================================================================
153; Directory selection page configuration
154; ============================================================================
155; The text to prompt the user to enter a directory
156DirText "Choose a directory in which to install OpenStreeMap."
157
158; The default installation directory
159InstallDir $PROGRAMFILES\OpenStreetMap\
160
161; See if this is an upgrade; if so, use the old InstallDir as default
162InstallDirRegKey HKEY_LOCAL_MACHINE SOFTWARE\OpenStreetMap "InstallDir"
163
164
165; ============================================================================
166; Install page configuration
167; ============================================================================
168ShowInstDetails show
169ShowUninstDetails show
170
171; ============================================================================
172; Functions and macros
173; ============================================================================
174
175; update file extension icons
176!macro UpdateIcons
177 Push $R0
178 Push $R1
179 Push $R2
180
181 !define UPDATEICONS_UNIQUE ${__LINE__}
182
183 IfFileExists "$SYSDIR\shell32.dll" UpdateIcons.next1_${UPDATEICONS_UNIQUE} UpdateIcons.error1_${UPDATEICONS_UNIQUE}
184UpdateIcons.next1_${UPDATEICONS_UNIQUE}:
185 GetDllVersion "$SYSDIR\shell32.dll" $R0 $R1
186 IntOp $R2 $R0 / 0x00010000
187 IntCmp $R2 4 UpdateIcons.next2_${UPDATEICONS_UNIQUE} UpdateIcons.error2_${UPDATEICONS_UNIQUE}
188UpdateIcons.next2_${UPDATEICONS_UNIQUE}:
189 System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)'
190 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
191
192UpdateIcons.error1_${UPDATEICONS_UNIQUE}:
193 MessageBox MB_OK|MB_ICONSTOP "Can't find 'shell32.dll' library. Impossible to update icons"
194 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
195UpdateIcons.error2_${UPDATEICONS_UNIQUE}:
196 MessageBox MB_OK|MB_ICONINFORMATION "You should install the free 'Microsoft Layer for Unicode' to update OpenStreetMap file icons"
197 Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE}
198UpdateIcons.quit_${UPDATEICONS_UNIQUE}:
199 !undef UPDATEICONS_UNIQUE
200 Pop $R2
201 Pop $R1
202 Pop $R0
203
204!macroend
205
206; associate a file extension to an icon
207Function Associate
208 ; $R0 should contain the prefix to associate to OpenStreetMap
209 Push $R1
210
211 ReadRegStr $R1 HKCR $R0 ""
212 StrCmp $R1 "" Associate.doRegister
213 Goto Associate.end
214Associate.doRegister:
215 ;The extension is not associated to any program, we can do the link
216 WriteRegStr HKCR $R0 "" ${OSM_ASSOC}
217Associate.end:
218 pop $R1
219FunctionEnd
220
221; disassociate a file extension from an icon
222Function un.unlink
223 ; $R0 should contain the prefix to unlink
224 Push $R1
225
226 ReadRegStr $R1 HKCR $R0 ""
227 StrCmp $R1 ${OSM_ASSOC} un.unlink.doUnlink
228 Goto un.unlink.end
229un.unlink.doUnlink:
230 ; The extension is associated with OpenStreetMap so, we must destroy this!
231 DeleteRegKey HKCR $R0
232un.unlink.end:
233 pop $R1
234FunctionEnd
235
236Function .onInit
237 ;Extract InstallOptions INI files
238; !insertmacro MUI_INSTALLOPTIONS_EXTRACT "AdditionalTasksPage.ini"
239FunctionEnd
240
241;Function DisplayAdditionalTasksPage
242; !insertmacro MUI_HEADER_TEXT "Select Additional Tasks" "Which additional tasks should be done?"
243; !insertmacro MUI_INSTALLOPTIONS_DISPLAY "AdditionalTasksPage.ini"
244;FunctionEnd
245
246; ============================================================================
247; Installation execution commands
248; ============================================================================
249
250Section "-Required"
251;-------------------------------------------
252
253;
254; Install for every user
255;
256SectionIn 1 2 RO
257SetShellVarContext all
258
259SetOutPath $INSTDIR
260
261; Write the uninstall keys for Windows
262WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayVersion" "${VERSION}"
263WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayName" "OpenStreetMap ${VERSION}"
264WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "UninstallString" '"$INSTDIR\uninstall.exe"'
265WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "Publisher" "The OpenStreetMap developer community, http://www.openstreetmap.org/"
266WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "HelpLink" "mailto:newbies@openstreetmap.org."
267WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLInfoAbout" "http://www.openstreetmap.org/"
268WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLUpdateInfo" "http://www.openstreetmap.org/"
269WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoModify" 1
270WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoRepair" 1
271WriteUninstaller "uninstall.exe"
272
273; Write an entry for ShellExecute
274WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "" '$INSTDIR\josm.exe'
275WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "Path" '$INSTDIR'
276
277; Create start menu entries (depending on additional tasks page)
278;ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 2" "State"
279;StrCmp $0 "0" SecRequired_skip_StartMenu
280; To qoute "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch11d.asp":
281; "Do not include Readme, Help, or Uninstall entries on the Programs menu."
282CreateShortCut "$SMPROGRAMS\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" "JAVA OpenStreetMap - Editor"
283;SecRequired_skip_StartMenu:
284
285; is command line option "/desktopicon" set?
286;${GetParameters} $R0
287;${GetOptions} $R0 "/desktopicon=" $R1
288;StrCmp $R1 "no" SecRequired_skip_DesktopIcon
289;StrCmp $R1 "yes" SecRequired_install_DesktopIcon
290
291; Create desktop icon (depending on additional tasks page and command line option)
292;ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 3" "State"
293;StrCmp $0 "0" SecRequired_skip_DesktopIcon
294;SecRequired_install_DesktopIcon:
295CreateShortCut "$DESKTOP\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" "JAVA OpenStreetMap - Editor"
296;SecRequired_skip_DesktopIcon:
297
298; is command line option "/quicklaunchicon" set?
299;${GetParameters} $R0
300;${GetOptions} $R0 "/quicklaunchicon=" $R1
301;StrCmp $R1 "no" SecRequired_skip_QuickLaunchIcon
302;StrCmp $R1 "yes" SecRequired_install_QuickLaunchIcon
303
304; Create quick launch icon (depending on additional tasks page and command line option)
305;ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 4" "State"
306;StrCmp $0 "0" SecRequired_skip_QuickLaunchIcon
307;SecRequired_install_QuickLaunchIcon:
308CreateShortCut "$QUICKLAUNCH\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" "JAVA OpenStreetMap - Editor"
309;SecRequired_skip_QuickLaunchIcon:
310
311; Create File Extensions (depending on additional tasks page)
312;ReadINIStr $0 "$PLUGINSDIR\AdditionalTasksPage.ini" "Field 6" "State"
313;StrCmp $0 "0" SecRequired_skip_FileExtensions
314WriteRegStr HKCR ${OSM_ASSOC} "" "OpenStreetMap data"
315WriteRegStr HKCR "${OSM_ASSOC}\Shell\open\command" "" '"$INSTDIR\josm.exe" "%1"'
316WriteRegStr HKCR "${OSM_ASSOC}\DefaultIcon" "" '"$INSTDIR\josm.exe",0'
317push $R0
318 StrCpy $R0 ".osm"
319 Call Associate
320 StrCpy $R0 ".gpx"
321 Call Associate
322; if somethings added here, add it also to the uninstall section and the AdditionalTask page
323pop $R0
324!insertmacro UpdateIcons
325;SecRequired_skip_FileExtensions:
326
327SectionEnd ; "Required"
328
329
330Section "JOSM" SecJosm
331;-------------------------------------------
332SectionIn 1
333SetOutPath $INSTDIR
334File "josm.exe"
335SetShellVarContext current
336SetOutPath "$APPDATA\JOSM"
337
338; don't overwrite existing bookmarks
339IfFileExists preferences dont_overwrite_bookmarks
340File "bookmarks"
341dont_overwrite_bookmarks:
342
343; don't overwrite existing de_streets.xml file
344IfFileExists de-streets.xml dont_overwrite_de_streets
345File "de-streets.xml"
346dont_overwrite_de_streets:
347
348; write reasonable defaults for some preferences
349; XXX - some of this should be done in JOSM itself
350${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "laf" "com.sun.java.swing.plaf.windows.WindowsLookAndFeel"
351${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "download.osm" "true"
352${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "layerlist.visible" "true"
353${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "commandstack.visible" "true"
354${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "propertiesdialog.visible" "true"
355${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "draw.segment.direction" "true"
356${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "projection" "org.openstreetmap.josm.data.projection.Epsg4326"
357${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "osm-server.url" "http://www.openstreetmap.org/api"
358${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "annotation.sources" "$APPDATA/JOSM/de-streets.xml"
359SectionEnd
360
361
362SectionGroup /e "Plugins" SecPluginsGroup
363
364Section "mappaint" SecMappaintPlugin
365;-------------------------------------------
366SectionIn 1 2
367SetShellVarContext current
368SetOutPath $APPDATA\JOSM\plugins
369File "downloads\mappaint.jar"
370;SetOutPath $APPDATA\JOSM\plugins\mappaint
371;File "downloads\elemstyles.xml"
372SectionEnd
373
374Section "osmarender" SecOsmarenderPlugin
375;-------------------------------------------
376SectionIn 1 2
377SetShellVarContext current
378SetOutPath $APPDATA\JOSM\plugins
379File "downloads\osmarender.jar"
380${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "osmarender.firefox" "$PROGRAMFILES\Mozilla Firefox\firefox.exe"
381SectionEnd
382
383Section "WMS" SecWMSPlugin
384;-------------------------------------------
385SectionIn 1 2
386SetShellVarContext current
387SetOutPath $APPDATA\JOSM\plugins
388File "downloads\wmsplugin.jar"
389SectionEnd
390
391Section "namefinder" SecNamefinderPlugin
392;-------------------------------------------
393SectionIn 1 2
394SetShellVarContext current
395SetOutPath $APPDATA\JOSM\plugins
396File "downloads\namefinder.jar"
397SectionEnd
398
399SectionGroupEnd ; "Plugins"
400
401Section "-PluginSetting"
402;-------------------------------------------
403;MessageBox MB_OK "PluginSetting!" IDOK 0
404SetShellVarContext current
405${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "plugins" "mappaint,osmarender,wmsplugin,namefinder"
406SectionEnd
407
408
409Section "Uninstall" un.SecUinstall
410;-------------------------------------------
411
412;
413; UnInstall for every user
414;
415SectionIn 1 2
416SetShellVarContext all
417
418Delete "$INSTDIR\josm.exe"
419Delete "$INSTDIR\uninstall.exe"
420IfErrors 0 NoJOSMErrorMsg
421 MessageBox MB_OK "Please note: josm.exe could not be removed, it's probably in use!" IDOK 0 ;skipped if josm.exe removed
422 Abort "Please note: josm.exe could not be removed, it's probably in use! Abort uninstall process!"
423NoJOSMErrorMsg:
424
425DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM"
426DeleteRegKey HKEY_LOCAL_MACHINE "Software\josm.exe"
427DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe"
428
429push $R0
430 StrCpy $R0 ".osm"
431 Call un.unlink
432 StrCpy $R0 ".gpx"
433 Call un.unlink
434pop $R0
435
436DeleteRegKey HKCR ${OSM_ASSOC}
437DeleteRegKey HKCR "${OSM_ASSOC}\Shell\open\command"
438DeleteRegKey HKCR "${OSM_ASSOC}\DefaultIcon"
439!insertmacro UpdateIcons
440
441Delete "$SMPROGRAMS\josm.lnk"
442Delete "$DESKTOP\josm.lnk"
443Delete "$QUICKLAUNCH\josm.lnk"
444
445RMDir "$INSTDIR"
446
447SectionEnd ; "Uinstall"
448
449Section /o "Un.Personal Settings" un.SecPersonalSettings
450;-------------------------------------------
451SectionIn 2
452SetShellVarContext current
453Delete "$APPDATA\JOSM\preferences"
454Delete "$APPDATA\JOSM\bookmarks"
455Delete "$APPDATA\JOSM\de-streets.xml"
456RMDir "$APPDATA\JOSM"
457SectionEnd
458
459Section /o "Un.Plugins" un.SecPlugins
460;-------------------------------------------
461SectionIn 2
462SetShellVarContext current
463Delete "$APPDATA\JOSM\plugins\wmsplugin.jar"
464Delete "$APPDATA\JOSM\plugins\osmarender.jar"
465Delete "$APPDATA\JOSM\plugins\osmarender\*.*"
466Delete "$APPDATA\JOSM\plugins\mappaint.jar"
467Delete "$APPDATA\JOSM\plugins\namefinder.jar"
468;Delete "$APPDATA\JOSM\plugins\mappaint\elemstyles.xml"
469RMDir "$APPDATA\JOSM\plugins\osmarender"
470;RMDir "$APPDATA\JOSM\plugins\mappaint"
471RMDir "$APPDATA\JOSM\plugins"
472RMDir "$APPDATA\JOSM"
473SectionEnd
474
475
476Section "-Un.Finally"
477;-------------------------------------------
478SectionIn 1 2
479; this test must be done after all other things uninstalled (e.g. Global Settings)
480IfFileExists "$INSTDIR" 0 NoFinalErrorMsg
481 MessageBox MB_OK "Please note: The directory $INSTDIR could not be removed!" IDOK 0 ; skipped if dir doesn't exist
482NoFinalErrorMsg:
483SectionEnd
484
485
486; ============================================================================
487; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD!
488; ============================================================================
489!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
490 !insertmacro MUI_DESCRIPTION_TEXT ${SecJosm} "JOSM is the JAVA OpenStreetMap editor for .osm files."
491 !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsGroup} "Various JOSM plugins."
492 !insertmacro MUI_DESCRIPTION_TEXT ${SecMappaintPlugin} "An alternative renderer for the map with colouring, line thickness, icons after tags."
493 !insertmacro MUI_DESCRIPTION_TEXT ${SecOsmarenderPlugin} "Displays the current screen as nicely rendered SVG graphics in FireFox."
494 !insertmacro MUI_DESCRIPTION_TEXT ${SecWMSPlugin} "Display background images from Web Map Service (WMS) sources."
495 !insertmacro MUI_DESCRIPTION_TEXT ${SecNamefinderPlugin} "Add a 'Find places by their name' tab to the download dialog."
496!insertmacro MUI_FUNCTION_DESCRIPTION_END
497
498!insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN
499 !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} "Uninstall JOSM."
500 !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} "Uninstall personal settings like your preferences and bookmarks from your profile: $PROFILE."
501 !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPlugins} "Uninstall all plugins."
502!insertmacro MUI_UNFUNCTION_DESCRIPTION_END
503
504; ============================================================================
505; Callback functions
506; ============================================================================
507
Note: See TracBrowser for help on using the repository browser.