forked from Imagelibrary/rtems
* filewrite.nsi, getparameters.nsi, instance-check.nsi,
mingw-path.nsi, sm-dummy.nsi, strslash.nsi, strstr.nsi,
options.nsi: Added the shared between the 2 installer scripts.
* msys-path.nsi: Fixed the last LF bug.
* rtems-autotools.nsi, rtems-tools.nsi: Fixed the instance check,
added a start menu, remove pages from target installers.
* rtems.ini: Fixed the URL links. Added support link.
* rtems_logo.bmp: Trimmed a little more to get a better image.
* ba-wrap.sh: Stop on a error.
* build-exes.sh: Use the option parameter variables. Change the
order the section appear in the installer.
323 lines
9.3 KiB
NSIS
323 lines
9.3 KiB
NSIS
;
|
|
; $Id$
|
|
;
|
|
; RTEMS Autotools Installer.
|
|
;
|
|
; Copyright Chris Johns (chrisj@rtems.org)
|
|
;
|
|
|
|
;!define EMPTY_INSTALLER
|
|
|
|
!define PRODUCT_NAME "RTEMS Autotools"
|
|
!define PRODUCT_VERSION ${RTEMS_VERSION}
|
|
!define PRODUCT_PUBLISHER "RTEM Project Team"
|
|
!define PRODUCT_WEB_SITE "http://www.rtems.org/"
|
|
!define PRODUCT_TITLE "${PRODUCT_NAME} ${PRODUCT_VERSION} (${RTEMS_TARGET})"
|
|
!define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}"
|
|
!define PRODUCT_UNINST_ROOT_KEY "HKLM"
|
|
!define PRODUCT_STARTMENU_REGVAL "NSIS:StartMenuDir"
|
|
|
|
; MUI 1.66 compatible ------
|
|
!include "MUI.nsh"
|
|
|
|
; MUI Settings
|
|
!define MUI_ABORTWARNING
|
|
!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\win-install.ico"
|
|
!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\win-uninstall.ico"
|
|
|
|
!define MUI_HEADERIMAGE
|
|
!define MUI_HEADERIMAGE_BITMAP "${RTEMS_LOGO}"
|
|
|
|
!define MUI_COMPONENTSPAGE_SMALLDESC
|
|
|
|
; Start Menu Support
|
|
!include "${RTEMS_SOURCE}/sm-dummy.nsi"
|
|
var smfolder
|
|
!define MUI_STARTMENUPAGE_DISABLE
|
|
!define MUI_STARTMENUPAGE_DEFAULTFOLDER "RTEMS ${PRODUCT_VERSION}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_ROOT "${PRODUCT_UNINST_ROOT_KEY}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_KEY "${PRODUCT_UNINST_KEY}"
|
|
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME "${PRODUCT_STARTMENU_REGVAL}"
|
|
!insertmacro MUI_PAGE_STARTMENU_DUMMY Application $smfolder
|
|
|
|
; Instfiles page
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
|
|
; Uninstaller pages
|
|
!insertmacro MUI_UNPAGE_INSTFILES
|
|
|
|
; Language files
|
|
!insertmacro MUI_LANGUAGE "English"
|
|
|
|
; Reserve files
|
|
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
|
|
|
; MUI end ------
|
|
|
|
ReserveFile "rtems.ini"
|
|
!insertmacro MUI_RESERVEFILE_INSTALLOPTIONS
|
|
|
|
Name "${PRODUCT_NAME} ${PRODUCT_VERSION} (${RTEMS_TARGET})"
|
|
OutFile "${RTEMS_BINARY}/rtems${PRODUCT_VERSION}-tools-${RTEMS_TARGET}-${RTEMS_BUILD_VERSION}.exe"
|
|
InstallDir "C:\opt\rtems-${PRODUCT_VERSION}"
|
|
ShowInstDetails show
|
|
ShowUnInstDetails show
|
|
BrandingText "RTEMS ${RTEMS_TARGET} Tools v${PRODUCT_VERSION}"
|
|
AllowRootDirInstall false
|
|
AutoCloseWindow true
|
|
CRCCheck force
|
|
|
|
!include "${RTEMS_SOURCE}/instance-check.nsi"
|
|
!include "${RTEMS_SOURCE}/mingw-path.nsi"
|
|
!include "${RTEMS_SOURCE}/msys-path.nsi"
|
|
!include "${RTEMS_SOURCE}/options.nsi"
|
|
!include "${RTEMS_SOURCE}/filewrite.nsi"
|
|
|
|
Section "RTEMS ${RTEMS_TARGET} Tools" SecTools
|
|
SetDetailsView show
|
|
AddSize ${RTEMS_TOOLS_SIZE}
|
|
|
|
Call MSYSFstabUpdate
|
|
|
|
/*
|
|
* Detect if MSYS is installed.
|
|
*/
|
|
Call MSYSDetect
|
|
Pop $9
|
|
StrCmp $9 "not-found" 0 +3
|
|
MessageBox MB_OK "Could not find a valid MSYS. Please install from http://www.mingw.org/"
|
|
Abort
|
|
SetOutPath "$INSTDIR\Uninstall"
|
|
SetOutPath "$INSTDIR\Packages\Build"
|
|
SetOutPath "$INSTDIR\Packages\Build"
|
|
SetOutPath "$INSTDIR\Packages\Source"
|
|
File "${RTEMS_SOURCE}/build-autotools.sh"
|
|
File "${RTEMS_SOURCE}/ba-wrap.sh"
|
|
File "${RTEMS_PACKAGE_SOURCE}/${RTEMS_AUTOCONF_SOURCE}"
|
|
File "${RTEMS_SOURCE}/autoconf.def"
|
|
File "${RTEMS_SOURCE}/automake.def"
|
|
!insertmacro RTEMS_AUTOCONF_PATCHES
|
|
File "${RTEMS_PACKAGE_SOURCE}/${RTEMS_AUTOMAKE_SOURCE}"
|
|
!insertmacro RTEMS_AUTOMAKE_PATCHES
|
|
|
|
Delete "$INSTDIR\Packages\Source\at-log.txt"
|
|
|
|
/*
|
|
* Need to fix the slashes when using a Unix type shell.
|
|
*/
|
|
Push "$INSTDIR\Packages\Source\ba-wrap.sh"
|
|
Push '\\'
|
|
Pop $R0
|
|
Call StrSlash
|
|
Pop $R1
|
|
Push "$INSTDIR\Packages\Build"
|
|
Push '\\'
|
|
Pop $R0
|
|
Call StrSlash
|
|
Pop $R2
|
|
|
|
/*
|
|
* Build Autoconf.
|
|
*/
|
|
Push "$INSTDIR\Packages\Source\autoconf.def"
|
|
Push '\\'
|
|
Pop $R0
|
|
Call StrSlash
|
|
Pop $R0
|
|
DetailPrint "Building automake. Command window closes automatically. Debug:$DebugScriptOption"
|
|
ExecWait '"$9\bin\sh" --login -c "$R1 $DebugScriptOption -p /opt/rtems-${PRODUCT_VERSION} -b $R2 -c $R0"' $0
|
|
BringToFront
|
|
IntCmp $0 0 +3
|
|
MessageBox MB_OK "Autoconf build failed. See $INSTDIR\Packages\Source\at-log.txt"
|
|
Abort
|
|
|
|
BringToFront
|
|
|
|
Push "$INSTDIR\Uninstall\${RTEMS_AUTOCONF}-files"
|
|
call InstallFilesFromFile
|
|
|
|
/*
|
|
* Build Automake.
|
|
*/
|
|
Push "$INSTDIR\Packages\Source\automake.def"
|
|
Push '\\'
|
|
Pop $R0
|
|
Call StrSlash
|
|
Pop $R0
|
|
DetailPrint "Building automake. Command window closes automatically. Debug:$DebugScriptOption"
|
|
ExecWait '"$9\bin\sh" --login -c "$R1 $DebugScriptOption -p /opt/rtems-${PRODUCT_VERSION} -b $R2 -c $R0"' $0
|
|
BringToFront
|
|
IntCmp $0 0 +3
|
|
MessageBox MB_OK "Automake build failed. See $INSTDIR\Packages\Source\at-log.txt"
|
|
Abort
|
|
|
|
BringToFront
|
|
|
|
Push "$INSTDIR\Uninstall\${RTEMS_AUTOMAKE}-files"
|
|
call InstallFilesFromFile
|
|
|
|
DetailPrint "Removing Build directory"
|
|
RMDir /r "$INSTDIR\Packages\Build"
|
|
SectionEnd
|
|
|
|
Function .onInit
|
|
;Check if we are the correct instance for our mode.
|
|
Call CheckInstance
|
|
;Handle the Command line options
|
|
Call CheckSilent
|
|
Call CheckDebug
|
|
;See if MinGW and MSYS are installed
|
|
Call MinGWDetect
|
|
Call MSYSDetect
|
|
FunctionEnd
|
|
|
|
Var FileList
|
|
|
|
Function InstallFilesFromFile
|
|
Pop $R6
|
|
Push $R7
|
|
Push $R8
|
|
Push $R9
|
|
DetailPrint "Installing file list: $R6"
|
|
SetFileAttributes "$R6" NORMAL
|
|
FileOpen $FileList "$R6" r
|
|
IfErrors 0 +3
|
|
MessageBox MB_OK "Internal error reading file list (0:$R6)."
|
|
Abort
|
|
ReadLoop:
|
|
FileRead $FileList $R7
|
|
IfErrors Done
|
|
StrCpy $R7 $R7 -1 # has a \n only at the end
|
|
StrCpy $R8 $R7
|
|
StrCpy $R7 $R7 1 # first character on the line
|
|
StrCpy $R8 $R8 256 2
|
|
StrCmpS $R7 "D" ReadLoop
|
|
StrCmpS $R7 "b" 0 +3
|
|
StrCpy $R9 $R8
|
|
Goto ReadLoop
|
|
StrCmpS $R7 "d" 0 +3
|
|
CreateDirectory "$INSTDIR\$R8"
|
|
Goto ReadLoop
|
|
StrCmpS $R7 "f" 0 +3
|
|
CopyFiles /SILENT "$INSTDIR\Packages\Build\$R9\$R8" "$INSTDIR\$R8"
|
|
Goto ReadLoop
|
|
MessageBox MB_OK "Internal error installing package (2:$R6)."
|
|
Abort
|
|
Done:
|
|
FileClose $FileList
|
|
ClearErrors
|
|
Pop $R9
|
|
Pop $R8
|
|
Pop $R7
|
|
FunctionEnd
|
|
|
|
Function un.RemoveFilesFromFile
|
|
; Two passes, one to delete files then the directories
|
|
; This is due to the order in the *-files list. Plus
|
|
; RMDir seems to stuff things up (maybe a NSIS bug!)
|
|
Pop $R6
|
|
Push $R7
|
|
Push $R8
|
|
Push $R9
|
|
DetailPrint "Delete file list: $R6"
|
|
SetFileAttributes "$R6" NORMAL
|
|
FileOpen $FileList "$R6" r
|
|
IfErrors 0 +3
|
|
MessageBox MB_OK "Internal error reading file list (0:$R6)."
|
|
Abort
|
|
ReadLoop:
|
|
FileRead $FileList $R7
|
|
IfErrors Pass2
|
|
StrCpy $R7 $R7 -1 # has a \n only at the end
|
|
StrCpy $R8 $R7
|
|
StrCpy $R7 $R7 1 # first character on the line
|
|
StrCpy $R8 $R8 256 2
|
|
StrCmp $R7 "b" ReadLoop
|
|
StrCmp $R7 "d" ReadLoop
|
|
StrCmp $R7 "D" ReadLoop
|
|
StrCmp $R7 "f" 0 +3
|
|
Delete "$INSTDIR\$R8"
|
|
Goto ReadLoop
|
|
MessageBox MB_OK "Internal error removing package (2:$R6)."
|
|
Abort
|
|
Pass2:
|
|
ClearErrors
|
|
FileSeek $FileList 0 SET
|
|
ReadLoop2:
|
|
FileRead $FileList $R7
|
|
IfErrors Done
|
|
StrCpy $R7 $R7 -1 # has a \n only at the end
|
|
StrCpy $R8 $R7
|
|
StrCpy $R7 $R7 1 # first character on the line
|
|
StrCpy $R8 $R8 256 2
|
|
StrCmpS $R7 "b" ReadLoop2
|
|
StrCmpS $R7 "d" ReadLoop2
|
|
StrCmpS $R7 "f" ReadLoop2
|
|
StrCmpS $R7 "D" 0 Fail
|
|
ifFileExists "$INSTDIR\$R8\*.*" 0 ReadLoop2
|
|
RMDir "$INSTDIR\$R8" #is dir
|
|
Delete "$INSTDIR\$R8"
|
|
ClearErrors
|
|
Goto ReadLoop2
|
|
Fail:
|
|
MessageBox MB_OK "Internal error removing package (2:$R6)."
|
|
Abort
|
|
Done:
|
|
FileClose $FileList
|
|
ClearErrors
|
|
Delete $R6
|
|
Pop $R9
|
|
Pop $R8
|
|
Pop $R7
|
|
FunctionEnd
|
|
|
|
Section -Post
|
|
StrCpy $R0 "$INSTDIR\rtems${PRODUCT_VERSION}-${RTEMS_BUILD_VERSION}-tools-${RTEMS_TARGET}-uninst.exe"
|
|
StrCpy $R1 "RTEMS ${RTEMS_TARGET} Tools.lnk"
|
|
WriteUninstaller "$R0"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}" \
|
|
"DisplayName" "$(^Name)"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}" \
|
|
"UninstallString" "$R0"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}" \
|
|
"DisplayVersion" "${PRODUCT_VERSION} Build-${RTEMS_BUILD_VERSION}"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}" \
|
|
"URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}" \
|
|
"Publisher" "${PRODUCT_PUBLISHER}"
|
|
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $R2
|
|
!insertmacro MUI_STARTMENU_WRITE_BEGIN Application
|
|
CreateDirectory "$SMPROGRAMS\$R2"
|
|
CreateDirectory "$SMPROGRAMS\$R2\Uninstall"
|
|
CreateShortCut "$SMPROGRAMS\$R2\Uninstall\$R1" "$R0"
|
|
!insertmacro MUI_STARTMENU_WRITE_END
|
|
SectionEnd
|
|
|
|
Section Uninstall
|
|
SetDetailsView show
|
|
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_TITLE}"
|
|
DetailPrint "Delete the installed files"
|
|
Push "$INSTDIR\Uninstall\${RTEMS_AUTOCONF}-files"
|
|
call un.RemoveFilesFromFile
|
|
Push "$INSTDIR\Uninstall\${RTEMS_AUTOMAKE}-files"
|
|
call un.RemoveFilesFromFile
|
|
RMDir "$INSTDIR\Uninstall"
|
|
Delete "$INSTDIR\Packages\Source\build-autotools.sh"
|
|
Delete "$INSTDIR\Packages\Source\ba-wrap.sh"
|
|
Delete "$INSTDIR\Packages\Source\${RTEMS_AUTOCONF_SOURCE}"
|
|
Delete "$INSTDIR\Packages\Source\${RTEMS_AUTOMAKE_SOURCE}"
|
|
Delete "$INSTDIR\Packages\Source\autoconf.def"
|
|
Delete "$INSTDIR\Packages\Source\automake.def"
|
|
Delete "$INSTDIR\Packages\Source\at-log.txt"
|
|
!insertmacro RTEMS_DELETE_AUTOCONF_PATCHES
|
|
!insertmacro RTEMS_DELETE_AUTOMAKE_PATCHES
|
|
RMDir "$INSTDIR\Packages\Source"
|
|
RMDir "$INSTDIR\Packages\Build"
|
|
!insertmacro MUI_STARTMENU_GETFOLDER "Application" $smfolder
|
|
Delete "$SMPROGRAMS\$smfolder\Uninstall\RTEMS ${RTEMS_TARGET} Tools.lnk"
|
|
Delete $INSTDIR\rtems${PRODUCT_VERSION}-${RTEMS_BUILD_VERSION}-tools-${RTEMS_TARGET}-uninst.exe
|
|
RMDir "$INSTDIR"
|
|
DetailPrint "All done."
|
|
SetAutoClose true
|
|
SectionEnd
|