; ; josm.nsi ; ; Set the compression mechanism first. ; If you get an error here, please update to at least NSIS 2.07! SetCompressor /SOLID lzma ; work with JAVA ini strings !include "INIStrNS.nsh" !define DEST "josm" ; Used to refresh the display of file association !define SHCNE_ASSOCCHANGED 0x08000000 !define SHCNF_IDLIST 0 ; Used to add associations between file extensions and JOSM !define OSM_ASSOC "josm-file" ; ============================================================================ ; Header configuration ; ============================================================================ ; The name of the installer !define PROGRAM_NAME "JOSM" Name "${PROGRAM_NAME} ${VERSION}" ; The file to write OutFile "${DEST}-setup-${VERSION}.exe" XPStyle on ; ============================================================================ ; Modern UI ; ============================================================================ !include "MUI.nsh" ; Icon of installer and uninstaller !define MUI_ICON "logo.ico" !define MUI_UNICON "logo.ico" !define MUI_COMPONENTSPAGE_SMALLDESC !define MUI_FINISHPAGE_NOAUTOCLOSE !define MUI_UNFINISHPAGE_NOAUTOCLOSE !define MUI_WELCOMEFINISHPAGE_BITMAP "josm-nsis-brand.bmp" !define MUI_WELCOMEPAGE_TEXT $(JOSM_WELCOME_TEXT) !define MUI_FINISHPAGE_RUN "$INSTDIR\josm.exe" ; ============================================================================ ; MUI Pages ; ============================================================================ !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "..\core\LICENSE" !insertmacro MUI_PAGE_COMPONENTS ;Page custom DisplayAdditionalTasksPage !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_COMPONENTS !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH ; ============================================================================ ; MUI Languages ; ============================================================================ ;Remember the installer language !define MUI_LANGDLL_REGISTRY_ROOT "HKLM" !define MUI_LANGDLL_REGISTRY_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" !define MUI_LANGDLL_REGISTRY_VALUENAME "Installer Language" ;; English goes first because its the default. The rest are ;; in alphabetical order (at least the strings actually displayed ;; will be). !insertmacro MUI_LANGUAGE "English" !insertmacro MUI_LANGUAGE "German" ;-------------------------------- ;Translations !define JOSM_DEFAULT_LANGFILE "locale\english.nsh" !include "langmacros.nsh" !insertmacro JOSM_MACRO_INCLUDE_LANGFILE "ENGLISH" "locale\english.nsh" !insertmacro JOSM_MACRO_INCLUDE_LANGFILE "GERMAN" "locale\german.nsh" ; Uninstall stuff !define MUI_UNCONFIRMPAGE_TEXT_TOP ${un.JOSM_UNCONFIRMPAGE_TEXT_TOP} ; ============================================================================ ; Installation types ; ============================================================================ InstType "$(JOSM_FULL_INSTALL)" InstType "un.$(un.JOSM_DEFAULT_UNINSTALL)" InstType "un.$(un.JOSM_FULL_UNINSTALL)" ; ============================================================================ ; Reserve Files ; ============================================================================ ;Things that need to be extracted on first (keep these lines before any File command!) ;Only useful for BZIP2 compression !insertmacro MUI_RESERVEFILE_INSTALLOPTIONS ; ============================================================================ ; Section macros ; ============================================================================ !include "Sections.nsh" ; ========= Macro to unselect and disable a section ========= !macro DisableSection SECTION Push $0 SectionGetFlags "${SECTION}" $0 IntOp $0 $0 & ${SECTION_OFF} IntOp $0 $0 | ${SF_RO} SectionSetFlags "${SECTION}" $0 Pop $0 !macroend ; ========= Macro to enable (unreadonly) a section ========= !define SECTION_ENABLE 0xFFFFFFEF !macro EnableSection SECTION Push $0 SectionGetFlags "${SECTION}" $0 IntOp $0 $0 & ${SECTION_ENABLE} SectionSetFlags "${SECTION}" $0 Pop $0 !macroend ; ============================================================================ ; Command Line ; ============================================================================ !include "FileFunc.nsh" ; ============================================================================ ; Directory selection page configuration ; ============================================================================ ; The text to prompt the user to enter a directory DirText $(JOSM_DIR_TEXT) ; The default installation directory InstallDir $PROGRAMFILES\JOSM\ ; See if this is an upgrade; if so, use the old InstallDir as default InstallDirRegKey HKEY_LOCAL_MACHINE SOFTWARE\JOSM "InstallDir" ; ============================================================================ ; Install page configuration ; ============================================================================ ShowInstDetails show ShowUninstDetails show ; ============================================================================ ; Functions and macros ; ============================================================================ ; update file extension icons !macro UpdateIcons Push $R0 Push $R1 Push $R2 !define UPDATEICONS_UNIQUE ${__LINE__} IfFileExists "$SYSDIR\shell32.dll" UpdateIcons.next1_${UPDATEICONS_UNIQUE} UpdateIcons.error1_${UPDATEICONS_UNIQUE} UpdateIcons.next1_${UPDATEICONS_UNIQUE}: GetDllVersion "$SYSDIR\shell32.dll" $R0 $R1 IntOp $R2 $R0 / 0x00010000 IntCmp $R2 4 UpdateIcons.next2_${UPDATEICONS_UNIQUE} UpdateIcons.error2_${UPDATEICONS_UNIQUE} UpdateIcons.next2_${UPDATEICONS_UNIQUE}: System::Call 'shell32.dll::SHChangeNotify(i, i, i, i) v (${SHCNE_ASSOCCHANGED}, ${SHCNF_IDLIST}, 0, 0)' Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE} UpdateIcons.error1_${UPDATEICONS_UNIQUE}: MessageBox MB_OK|MB_ICONSTOP $(JOSM_UPDATEICONS_ERROR1) Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE} UpdateIcons.error2_${UPDATEICONS_UNIQUE}: MessageBox MB_OK|MB_ICONINFORMATION $(JOSM_UPDATEICONS_ERROR2) Goto UpdateIcons.quit_${UPDATEICONS_UNIQUE} UpdateIcons.quit_${UPDATEICONS_UNIQUE}: !undef UPDATEICONS_UNIQUE Pop $R2 Pop $R1 Pop $R0 !macroend ; associate a file extension to an icon Function Associate ; $R0 should contain the prefix to associate to JOSM Push $R1 ReadRegStr $R1 HKCR $R0 "" StrCmp $R1 "" Associate.doRegister Goto Associate.end Associate.doRegister: ;The extension is not associated to any program, we can do the link WriteRegStr HKCR $R0 "" ${OSM_ASSOC} Associate.end: pop $R1 FunctionEnd ; disassociate a file extension from an icon Function un.unlink ; $R0 should contain the prefix to unlink Push $R1 ReadRegStr $R1 HKCR $R0 "" StrCmp $R1 ${OSM_ASSOC} un.unlink.doUnlink Goto un.unlink.end un.unlink.doUnlink: ; The extension is associated with JOSM so, we must destroy this! DeleteRegKey HKCR $R0 un.unlink.end: pop $R1 FunctionEnd Function .onInit ;Extract InstallOptions INI files ; !insertmacro MUI_INSTALLOPTIONS_EXTRACT "AdditionalTasksPage.ini" !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd Function un.onInit !insertmacro MUI_UNGETLANGUAGE FunctionEnd ; ============================================================================ ; Installation execution commands ; ============================================================================ Section "-Required" ;------------------------------------------- ; ; Install for every user ; SectionIn 1 2 RO SetShellVarContext current SetOutPath $INSTDIR ; Write the uninstall keys for Windows WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayVersion" "${VERSION}" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "DisplayName" "JOSM ${VERSION}" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "UninstallString" '"$INSTDIR\uninstall.exe"' WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "Publisher" "The OpenStreetMap developer community, http://www.openstreetmap.org/" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "HelpLink" "mailto:newbies@openstreetmap.org." WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLInfoAbout" "http://www.openstreetmap.org/" WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "URLUpdateInfo" "http://wiki.openstreetmap.org/index.php/JOSM" WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoModify" 1 WriteRegDWORD HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" "NoRepair" 1 WriteUninstaller "uninstall.exe" ; Write an entry for ShellExecute WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "" '$INSTDIR\josm.exe' WriteRegStr HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" "Path" '$INSTDIR' SectionEnd ; "Required" Section $(JOSM_SEC_JOSM) SecJosm ;------------------------------------------- SectionIn 1 SetOutPath $INSTDIR File "josm.exe" File "josm-tested.jar" ; XXX - should be provided/done by josm.jar itself and not here! SetShellVarContext current SetOutPath "$APPDATA\JOSM" ; don't overwrite existing bookmarks IfFileExists preferences dont_overwrite_bookmarks File "bookmarks" dont_overwrite_bookmarks: ; write reasonable defaults for some preferences ; XXX - some of this should be done in JOSM itself, see also JOSM core, data\Preferences.java function resetToDefault() ; XXX - just using JOSM defaults doesn't work here, as JOSM doesn't set some defaults if a preferences file doesn't exist ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "projection" "org.openstreetmap.josm.data.projection.Epsg4326" ;${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "draw.segment.direction" "true" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "layerlist.visible" "true" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "selectionlist.visible" "true" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "commandstack.visible" "true" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "propertiesdialog.visible" "true" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "osm-server.url" "http://www.openstreetmap.org/api" ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "laf" "com.sun.java.swing.plaf.windows.WindowsLookAndFeel" SectionEnd SectionGroup $(JOSM_SEC_PLUGINS_GROUP) SecPluginsGroup Section $(JOSM_SEC_AGPIFOJ_PLUGIN) SecAgPifoJPlugin ;------------------------------------------- SectionIn 1 2 SetShellVarContext current SetOutPath $APPDATA\JOSM\plugins File "..\dist\AgPifoJ.jar" SectionEnd Section $(JOSM_SEC_OPENSTREETBUGS_PLUGIN) SecOpenStreetBugsPlugin ;------------------------------------------- SectionIn 1 2 SetShellVarContext current SetOutPath $APPDATA\JOSM\plugins File "..\dist\openstreetbugs.jar" SectionEnd Section $(JOSM_SEC_REMOTECONTROL_PLUGIN) SecRemoteControlPlugin ;------------------------------------------- SectionIn 1 2 SetShellVarContext current SetOutPath $APPDATA\JOSM\plugins File "..\dist\remotecontrol.jar" SectionEnd Section $(JOSM_SEC_VALIDATOR_PLUGIN) SecValidatorPlugin ;------------------------------------------- SectionIn 1 2 SetShellVarContext current SetOutPath $APPDATA\JOSM\plugins File "..\dist\validator.jar" SectionEnd Section $(JOSM_SEC_WMS_PLUGIN) SecWMSPlugin ;------------------------------------------- SectionIn 1 2 SetShellVarContext current SetOutPath $APPDATA\JOSM\plugins File "..\dist\wmsplugin.jar" SetOutPath $INSTDIR\imageformats File "webkit-image\imageformats\qjpeg4.dll" SetOutPath $INSTDIR File "webkit-image\mingwm10.dll" File "webkit-image\QtCore4.dll" File "webkit-image\QtGui4.dll" File "webkit-image\QtNetwork4.dll" File "webkit-image\QtWebKit4.dll" File "webkit-image\webkit-image.exe" SectionEnd SectionGroupEnd ; "Plugins" Section $(JOSM_SEC_STARTMENU) SecStartMenu ;------------------------------------------- SectionIn 1 2 ; To qoute "http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnwue/html/ch11d.asp": ; "Do not include Readme, Help, or Uninstall entries on the Programs menu." CreateShortCut "$SMPROGRAMS\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT) SectionEnd Section $(JOSM_SEC_DESKTOP_ICON) SecDesktopIcon ;------------------------------------------- ; SectionIn 1 2 ; Create desktop icon ; Desktop icon for a program should not be installed as default! CreateShortCut "$DESKTOP\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT) SectionEnd Section $(JOSM_SEC_QUICKLAUNCH_ICON) SecQuickLaunchIcon ;------------------------------------------- SectionIn 1 2 ; Create quick launch icon CreateShortCut "$QUICKLAUNCH\JOSM.lnk" "$INSTDIR\josm.exe" "" "$INSTDIR\josm.exe" 0 "" "" $(JOSM_LINK_TEXT) SectionEnd Section $(JOSM_SEC_FILE_EXTENSIONS) SecFileExtensions ;------------------------------------------- SectionIn 1 2 ; Create File Extensions WriteRegStr HKCR ${OSM_ASSOC} "" "OpenStreetMap data" WriteRegStr HKCR "${OSM_ASSOC}\Shell\open\command" "" '"$INSTDIR\josm.exe" "%1"' WriteRegStr HKCR "${OSM_ASSOC}\DefaultIcon" "" '"$INSTDIR\josm.exe",0' push $R0 StrCpy $R0 ".osm" Call Associate StrCpy $R0 ".gpx" Call Associate ; if somethings added here, add it also to the uninstall section pop $R0 !insertmacro UpdateIcons SectionEnd Section "-PluginSetting" ;------------------------------------------- SectionIn 1 2 ;MessageBox MB_OK "PluginSetting!" IDOK 0 ; XXX - should better be handled inside JOSM (recent plugin manager is going in the right direction) SetShellVarContext current !include LogicLib.nsh ${WriteINIStrNS} $R0 "$APPDATA\JOSM\preferences" "plugins" "AgPifoJ;openstreetbugs;remotecontrol;validator;wmsplugin" SectionEnd Section "un.$(un.JOSM_SEC_UNINSTALL)" un.SecUinstall ;------------------------------------------- ; ; UnInstall for every user ; SectionIn 1 2 SetShellVarContext current Delete "$INSTDIR\josm-tested.jar" IfErrors 0 NoJOSMErrorMsg MessageBox MB_OK $(un.JOSM_IN_USE_ERROR) IDOK 0 ;skipped if josm.jar removed Abort $(un.JOSM_IN_USE_ERROR) NoJOSMErrorMsg: Delete "$INSTDIR\josm.exe" Delete "$INSTDIR\imageformats\qjpeg4.dll" RMDir "$INSTDIR\imageformats" Delete "$INSTDIR\mingwm10.dll" Delete "$INSTDIR\QtCore4.dll" Delete "$INSTDIR\QtGui4.dll" Delete "$INSTDIR\QtNetwork4.dll" Delete "$INSTDIR\QtWebKit4.dll" Delete "$INSTDIR\webkit-image.exe" Delete "$INSTDIR\uninstall.exe" DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\Uninstall\OSM" DeleteRegKey HKEY_LOCAL_MACHINE "Software\josm.exe" DeleteRegKey HKEY_LOCAL_MACHINE "Software\Microsoft\Windows\CurrentVersion\App Paths\josm.exe" ; Remove Language preference info DeleteRegKey HKCU "Software/JOSM" ;${MUI_LANGDLL_REGISTRY_ROOT} ${MUI_LANGDLL_REGISTRY_KEY} push $R0 StrCpy $R0 ".osm" Call un.unlink StrCpy $R0 ".gpx" Call un.unlink pop $R0 DeleteRegKey HKCR ${OSM_ASSOC} DeleteRegKey HKCR "${OSM_ASSOC}\Shell\open\command" DeleteRegKey HKCR "${OSM_ASSOC}\DefaultIcon" !insertmacro UpdateIcons Delete "$SMPROGRAMS\josm.lnk" Delete "$DESKTOP\josm.lnk" Delete "$QUICKLAUNCH\josm.lnk" RMDir "$INSTDIR" SectionEnd ; "Uinstall" Section /o "un.$(un.JOSM_SEC_PERSONAL_SETTINGS)" un.SecPersonalSettings ;------------------------------------------- SectionIn 2 SetShellVarContext current Delete "$APPDATA\JOSM\plugins\agpifoj\*.*" RMDir "$APPDATA\JOSM\plugins\agpifoj" Delete "$APPDATA\JOSM\plugins\openstreetbugs\*.*" RMDir "$APPDATA\JOSM\plugins\openstreetbugs" Delete "$APPDATA\JOSM\plugins\remotecontrol\*.*" RMDir "$APPDATA\JOSM\plugins\remotecontrol" Delete "$APPDATA\JOSM\plugins\validator\*.*" RMDir "$APPDATA\JOSM\plugins\validator" Delete "$APPDATA\JOSM\plugins\wmsplugin\*.*" RMDir "$APPDATA\JOSM\plugins\wmsplugin" Delete "$APPDATA\JOSM\plugins\*.*" RMDir "$APPDATA\JOSM\plugins" Delete "$APPDATA\JOSM\motd.html" Delete "$APPDATA\JOSM\preferences" Delete "$APPDATA\JOSM\bookmarks" RMDir "$APPDATA\JOSM" SectionEnd Section "-Un.Finally" ;------------------------------------------- SectionIn 1 2 ; this test must be done after all other things uninstalled (e.g. Global Settings) IfFileExists "$INSTDIR" 0 NoFinalErrorMsg MessageBox MB_OK $(un.JOSM_INSTDIR_ERROR) IDOK 0 ; skipped if dir doesn't exist NoFinalErrorMsg: SectionEnd ; ============================================================================ ; PLEASE MAKE SURE, THAT THE DESCRIPTIVE TEXT FITS INTO THE DESCRIPTION FIELD! ; ============================================================================ !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecJosm} $(JOSM_SECDESC_JOSM) !insertmacro MUI_DESCRIPTION_TEXT ${SecPluginsGroup} $(JOSM_SECDESC_PLUGINS_GROUP) !insertmacro MUI_DESCRIPTION_TEXT ${SecAgPifoJPlugin} $(JOSM_SECDESC_AGPIFOJ_PLUGIN) !insertmacro MUI_DESCRIPTION_TEXT ${SecOpenStreetBugsPlugin} $(JOSM_SECDESC_OPENSTREETBUGS_PLUGIN) !insertmacro MUI_DESCRIPTION_TEXT ${SecRemoteControlPlugin} $(JOSM_SECDESC_REMOTECONTROL_PLUGIN) !insertmacro MUI_DESCRIPTION_TEXT ${SecValidatorPlugin} $(JOSM_SECDESC_VALIDATOR_PLUGIN) !insertmacro MUI_DESCRIPTION_TEXT ${SecWMSPlugin} $(JOSM_SECDESC_WMS_PLUGIN) !insertmacro MUI_DESCRIPTION_TEXT ${SecStartMenu} $(JOSM_SECDESC_STARTMENU) !insertmacro MUI_DESCRIPTION_TEXT ${SecDesktopIcon} $(JOSM_SECDESC_DESKTOP_ICON) !insertmacro MUI_DESCRIPTION_TEXT ${SecQuickLaunchIcon} $(JOSM_SECDESC_QUICKLAUNCH_ICON) !insertmacro MUI_DESCRIPTION_TEXT ${SecFileExtensions} $(JOSM_SECDESC_FILE_EXTENSIONS) !insertmacro MUI_FUNCTION_DESCRIPTION_END !insertmacro MUI_UNFUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${un.SecUinstall} $(un.JOSM_SECDESC_UNINSTALL) !insertmacro MUI_DESCRIPTION_TEXT ${un.SecPersonalSettings} $(un.JOSM_SECDESC_PERSONAL_SETTINGS) !insertmacro MUI_UNFUNCTION_DESCRIPTION_END ; ============================================================================ ; Callback functions ; ============================================================================