forked from Imagelibrary/rtems
* rtems_logo.bmp: Clipped to get the correct proportions
in the installer's header.
* upload.sh: Install only the specific build installers.
* rtems.ini: Change to show the actual web paths.
* version: Build 15.
* build-exes.sh, msys-path.nsi, rtems-autotools.nsi,
rtems-tools.nsi: Fixed MSYS path detection. Fixed the uninstaller
registry data. Changed the way the top level is generated. Now all
the sections are added no matter what target is specified.
396 lines
10 KiB
NSIS
396 lines
10 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/"
|
|
|
|
; 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
|
|
|
|
; Welcome page
|
|
!insertmacro MUI_PAGE_WELCOME
|
|
; Details of what will happen.
|
|
Page custom RTEMSMessage
|
|
; License page
|
|
;!define MUI_LICENSEPAGE_CHECKBOX
|
|
!insertmacro MUI_PAGE_LICENSE "${RTEMS_LICENSE_FILE}"
|
|
; Components page
|
|
!insertmacro MUI_PAGE_COMPONENTS
|
|
; Directory page
|
|
!insertmacro MUI_PAGE_DIRECTORY
|
|
; Instfiles page
|
|
!insertmacro MUI_PAGE_INSTFILES
|
|
; Finish page
|
|
!insertmacro MUI_PAGE_FINISH
|
|
|
|
; 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 false
|
|
CRCCheck force
|
|
|
|
!include "${RTEMS_SOURCE}/msys-path.nsi"
|
|
|
|
Section "RTEMS ${RTEMS_TARGET} Tools" SecTools
|
|
SetDetailsView show
|
|
AddSize ${RTEMS_TOOLS_SIZE}
|
|
|
|
/*
|
|
* 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 autoconf. Command window closes automatically."
|
|
ExecWait '"$9\bin\sh" --login -c "$R1 -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."
|
|
ExecWait '"$9\bin\sh" --login -c "$R1 -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
|
|
|
|
!macro FILE_WRITE_LINE Handle Text
|
|
FileWrite ${Handle} `${Text}`
|
|
FileWriteByte ${Handle} "13"
|
|
FileWriteByte ${Handle} "10"
|
|
!macroend
|
|
|
|
Function .onInit
|
|
;Extract InstallOptions INI files
|
|
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "rtems.ini"
|
|
FunctionEnd
|
|
|
|
Function RTEMSMessage
|
|
|
|
!insertmacro MUI_HEADER_TEXT \
|
|
"RTEMS Tools (Autoconf/Automake)" \
|
|
"A tool set for the RTEMS operating system."
|
|
|
|
;Display the Install Options dialog
|
|
|
|
Push $R0
|
|
Push $R1
|
|
Push $R2
|
|
|
|
InstallOptions::initDialog /NOUNLOAD "$PLUGINSDIR\rtems.ini"
|
|
Pop $R0
|
|
|
|
GetDlgItem $R1 $R0 1200 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1201 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "12" "700"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1202 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1203 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1204 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1205 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
GetDlgItem $R1 $R0 1206 ;1200 + Field number - 1
|
|
;$R1 contains the HWND of the first field
|
|
CreateFont $R2 "Tahoma" "8" "300"
|
|
SendMessage $R1 ${WM_SETFONT} $R2 0
|
|
|
|
InstallOptions::show
|
|
Pop $R0
|
|
|
|
Pop $R2
|
|
Pop $R1
|
|
Pop $R0
|
|
|
|
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
|
|
|
|
; Push $filenamestring (e.g. 'c:\this\and\that\filename.htm')
|
|
; Push '\\'
|
|
; Pop $R0
|
|
; Call StrSlash
|
|
; Pop $R0
|
|
; ;Now $R0 contains 'c:/this/and/that/filename.htm'
|
|
Function StrSlash
|
|
Exch $R0
|
|
Push $R1
|
|
Push $R2
|
|
StrCpy $R1 0
|
|
loop:
|
|
IntOp $R1 $R1 - 1
|
|
StrCpy $R2 $R0 1 $R1
|
|
StrCmp $R2 "" done
|
|
StrCmp $R2 "\" 0 loop ;" keep to get Emacs for fontlock
|
|
StrCpy $R2 $R0 $R1
|
|
Push $R1
|
|
IntOp $R1 $R1 + 1
|
|
StrCpy $R1 $R0 "" $R1
|
|
StrCpy $R0 "$R2/$R1"
|
|
Pop $R1
|
|
IntOp $R1 $R1 - 1
|
|
Goto loop
|
|
done:
|
|
Pop $R2
|
|
Pop $R1
|
|
Exch $R0
|
|
FunctionEnd
|
|
|
|
Section -Post
|
|
StrCpy $R0 "$INSTDIR\rtems${PRODUCT_VERSION}-${RTEMS_BUILD_VERSION}-tools-${RTEMS_TARGET}-uninst.exe"
|
|
WriteUninstaller "$R0"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
"DisplayName" "$(^Name)"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
"UninstallString" "$R0"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
"DisplayVersion" "${PRODUCT_VERSION} Build-${RTEMS_BUILD_VERSION}"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
"URLInfoAbout" "${PRODUCT_WEB_SITE}"
|
|
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" \
|
|
"Publisher" "${PRODUCT_PUBLISHER}"
|
|
SectionEnd
|
|
|
|
Section Uninstall
|
|
SetDetailsView show
|
|
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}"
|
|
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"
|
|
Delete $INSTDIR\rtems${PRODUCT_VERSION}-${RTEMS_BUILD_VERSION}-tools-${RTEMS_TARGET}-uninst.exe
|
|
RMDir "$INSTDIR"
|
|
DetailPrint "All done."
|
|
SetAutoClose false
|
|
SectionEnd
|