;ArmIDE NSIS Installer Script ;Written by Martin Olejar !ifndef APPNAME !error "APPNAME undefined, please pass this in the command line." !endif !ifndef APPVER !error "APPVER undefined, please pass this in the command line." !endif !ifndef ECLIPSEVER !error "ECLIPSEVER undefined, please pass this in the command line." !endif !ifndef GNUARMVER !error "GNUARMVER undefined, please pass this in the command line." !endif !ifndef JREVER !error "JREVER undefined, please pass this in the command line." !endif !ifndef OPENOCDVER !error "OPENOCDVER undefined, please pass this in the command line." !endif !ifndef JLINKVER !error "JLINKVER undefined, please pass this in the command line." !endif !ifndef DOXYGENVER !error "DOXYGENVER undefined, please pass this in the command line." !endif !define PUBLISHER "Martin Olejar" !define EXEPATH "$INSTDIR\eclipse.exe" !define ICONPATH "$INSTDIR\ArmIDE.ico" !define UNINSTALLERPATH "$INSTDIR\Uninstall.exe" !define REGKEY "Software\${APPNAME}" !define REGKEYUNINSTALL "Software\Microsoft\Windows\CurrentVersion\Uninstall\${APPNAME}" ;---------------------------------------------------------------------------------------------------- ;Include Modern UI ;---------------------------------------------------------------------------------------------------- !include "MUI2.nsh" !include "FileFunc.nsh" !include "Sections.nsh" !include "LogicLib.nsh" !include "WinVer.nsh" !include "x64.nsh" ;---------------------------------------------------------------------------------------------------- ;General Settings ;---------------------------------------------------------------------------------------------------- Name "${APPNAME}" ;Default installation folder InstallDir "$PROGRAMFILES\${APPNAME}" ;Registry key to check for directory (so if you install again, it will overwrite the old one) InstallDirRegKey HKLM "${REGKEY}" "$INSTDIR" ;Request application privileges RequestExecutionLevel user ;Compresion type SetCompressor /SOLID lzma ;---------------------------------------------------------------------------------------------------- ;MUI Interface Settings ;---------------------------------------------------------------------------------------------------- ; Icons !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\orange-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\orange-uninstall.ico" ; Header !define MUI_HEADERIMAGE !define MUI_HEADERIMAGE_RIGHT !define MUI_HEADERIMAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-r.bmp" !define MUI_HEADERIMAGE_UNBITMAP "${NSISDIR}\Contrib\Graphics\Header\orange-uninstall-r.bmp" ; Wizard !define MUI_WELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange.bmp" !define MUI_UNWELCOMEFINISHPAGE_BITMAP "${NSISDIR}\Contrib\Graphics\Wizard\orange-uninstall.bmp" ; Others !define MUI_ABORTWARNING !define MUI_COMPONENTSPAGE_SMALLDESC ;---------------------------------------------------------------------------------------------------- ;MUI Pages ;---------------------------------------------------------------------------------------------------- !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE "LICENSE" !insertmacro MUI_PAGE_COMPONENTS !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES ;---------------------------------------------------------------------------------------------------- ;User Functions ;---------------------------------------------------------------------------------------------------- Function InstallJlinkDrv ${If} ${RunningX64} ;Install JLink Debugger Driver ExecWait '"$INSTDIR\tools\segger_jlink\USBDriver\x64\DPInst.exe" \ /C /Q /SA /SW /PATH "$INSTDIR\tools\segger_jlink\USBDriver\x64"' ;Install JLink VCOM Driver ExecWait '"$INSTDIR\tools\segger_jlink\USBDriver\CDC\dpinst_x64.exe" \ /C /Q /SA /SW /PATH "$INSTDIR\tools\segger_jlink\USBDriver\CDC"' ${Else} ;Install JLink Debugger Driver ExecWait '"$INSTDIR\tools\segger_jlink\USBDriver\x86\DPInst.exe" \ /C /Q /SA /SW /PATH "$INSTDIR\tools\segger_jlink\USBDriver\x86"' ;Install JLink VCOM Driver ExecWait '"$INSTDIR\tools\segger_jlink\USBDriver\CDC\dpinst_x86.exe" \ /C /Q /SA /SW /PATH "$INSTDIR\tools\segger_jlink\USBDriver\CDC"' ${EndIf} FunctionEnd ;---------------------------------------------------------------------------------------------------- ;Call-Back Functions ;---------------------------------------------------------------------------------------------------- Function .onInit ${IfNot} ${AtLeastWinXP} MessageBox MB_OK "Windows XP and above required" Quit ${EndIf} ReadRegStr $0 "HKLM" "${REGKEYUNINSTALL}" "DisplayVersion" StrCmp "$0" "" done MessageBox MB_OK|MB_ICONEXCLAMATION "${APPNAME} version $0 is already installed. \ First uninstall the old version if want install new." /SD IDOK Abort done: FunctionEnd Function .onInstFailed FunctionEnd Function .onInstSuccess FunctionEnd ;---------------------------------------------------------------------------------------------------- ;Languages ;---------------------------------------------------------------------------------------------------- !insertmacro MUI_LANGUAGE "English" ;---------------------------------------------------------------------------------------------------- ;Installer Sections ;---------------------------------------------------------------------------------------------------- Section "Eclipse ${ECLIPSEVER} (required)" SecEclipse SectionIn RO SetOutPath "$INSTDIR" File /r /x "jre" /x "toolchain" /x "tools" "release\${APPNAME}\*" SectionEnd Section "GNU ARM Toolchain ${GNUARMVER} (required)" SecToolchain SectionIn RO SetOutPath "$INSTDIR\toolchain" File /r "release\${APPNAME}\toolchain\*" SectionEnd Section "JAVA JRE ${JREVER}" SecJava SetOutPath "$INSTDIR\jre" File /r "release\${APPNAME}\jre\*" SectionEnd Section "OpenOCD ${OPENOCDVER}" SecOpenOCD SetOutPath "$INSTDIR\tools\openocd" File /r "release\${APPNAME}\tools\openocd\*" SectionEnd Section "SEGGER JLink ${JLINKVER}" SecJlink SetOutPath "$INSTDIR\tools\segger_jlink" File /r "release\${APPNAME}\tools\segger_jlink\*" SectionEnd Section "Doxygen ${DOXYGENVER}" SecDoxygen SetOutPath "$INSTDIR\tools\doxygen" File /r "release\${APPNAME}\tools\doxygen\*" SectionEnd Section -post SetOutPath "$INSTDIR" ;create desktop shortcut CreateShortCut "$DESKTOP\${APPNAME}.lnk" "${EXEPATH}" "" "${ICONPATH}" ;create start-menu items CreateDirectory "$SMPROGRAMS\${APPNAME}" CreateShortCut "$SMPROGRAMS\${APPNAME}\${APPNAME}.lnk" "${EXEPATH}" "" "${ICONPATH}" CreateShortCut "$SMPROGRAMS\${APPNAME}\Uninstall.lnk" "${UNINSTALLERPATH}" "" "" CreateDirectory "$SMPROGRAMS\${APPNAME}\Manuals" ${If} ${SectionIsSelected} ${SecJlink} CreateShortCut "$SMPROGRAMS\${APPNAME}\Manuals\JLinkARM Users Guide.lnk" \ "$INSTDIR\tools\segger_jlink\JLinkARM.pdf" "" "" ${EndIf} ${If} ${SectionIsSelected} ${SecOpenOCD} CreateShortCut "$SMPROGRAMS\${APPNAME}\Manuals\OpenOCD Users Guide.lnk" \ "$INSTDIR\tools\openocd\OpenOCD.pdf" "" "" ${EndIf} ${If} ${SectionIsSelected} ${SecDoxygen} CreateShortCut "$SMPROGRAMS\${APPNAME}\Manuals\Doxygen Users Guide.lnk" \ "$INSTDIR\tools\doxygen\Doxygen.pdf" "" "" ${EndIf} ; Write the uninstall keys for Windows WriteRegStr HKLM "${REGKEYUNINSTALL}" "DisplayName" "${APPNAME}" WriteRegStr HKLM "${REGKEYUNINSTALL}" "DisplayIcon" "${ICONPATH}" WriteRegStr HKLM "${REGKEYUNINSTALL}" "DisplayVersion" "${APPVER}" WriteRegStr HKLM "${REGKEYUNINSTALL}" "Publisher" "${PUBLISHER}" WriteRegStr HKLM "${REGKEYUNINSTALL}" "InstallLocation" "$INSTDIR\" WriteRegStr HKLM "${REGKEYUNINSTALL}" "UninstallString" '"${UNINSTALLERPATH}"' WriteRegDWORD HKLM "${REGKEYUNINSTALL}" "NoModify" 1 WriteRegDWORD HKLM "${REGKEYUNINSTALL}" "NoRepair" 1 ${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2 IntFmt $0 "0x%08X" $0 WriteRegDWORD HKLM "${REGKEYUNINSTALL}" "EstimatedSize" "$0" ;Create uninstaller WriteUninstaller "${UNINSTALLERPATH}" ;Install Drivers ${If} ${SectionIsSelected} ${SecJlink} Call InstallJlinkDrv ${EndIf} SectionEnd ;---------------------------------------------------------------------------------------------------- ;Uninstaller Section ;---------------------------------------------------------------------------------------------------- Section "Uninstall" ; Remove registry keys DeleteRegKey HKLM "${REGKEY}" DeleteRegKey HKLM "${REGKEYUNINSTALL}" ;Delete Desktop and Start Menu Shortcuts Delete "$DESKTOP\${APPNAME}.lnk" Delete "$SMPROGRAMS\${APPNAME}\Manuals\*.lnk" RmDir "$SMPROGRAMS\${APPNAME}\Manuals" Delete "$SMPROGRAMS\${APPNAME}\*.lnk" RmDir "$SMPROGRAMS\${APPNAME}" ;Remove uninstaller Delete "${UNINSTALLERPATH}" ;Remove all installed files RMDir /r "$INSTDIR" SectionEnd ;---------------------------------------------------------------------------------------------------- ;Components page descriptions ;---------------------------------------------------------------------------------------------------- LangString DESC_SecEclipse ${LANG_ENGLISH} \ "Eclipse CDT IDE for C/C++ developers with pre-installed plugins for ARM Embedded Processors" LangString DESC_SecToolchain ${LANG_ENGLISH} \ "GNU Tools for ARM Embedded Processors (Cortex-M and Cortex-R)" LangString DESC_SecJava ${LANG_ENGLISH} \ "Java virtual machine required by Eclipse. Must be installed, if isn't" LangString DESC_SecOpenOCD ${LANG_ENGLISH} \ "Open On-Chip Debugger and In-System Programmer" LangString DESC_SecJlink ${LANG_ENGLISH} \ "SEGGER JLink Debugger and In-System Programmer (Beta Version)" LangString DESC_SecDoxygen ${LANG_ENGLISH} \ "Open source tool for generating documentation from annotated C/C++ sources" ;Assign language strings to sections !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SecEclipse} $(DESC_SecEclipse) !insertmacro MUI_DESCRIPTION_TEXT ${SecToolchain} $(DESC_SecToolchain) !insertmacro MUI_DESCRIPTION_TEXT ${SecJava} $(DESC_SecJava) !insertmacro MUI_DESCRIPTION_TEXT ${SecOpenOCD} $(DESC_SecOpenOCD) !insertmacro MUI_DESCRIPTION_TEXT ${SecJlink} $(DESC_SecJlink) !insertmacro MUI_DESCRIPTION_TEXT ${SecDoxygen} $(DESC_SecDoxygen) !insertmacro MUI_FUNCTION_DESCRIPTION_END