Mercurial > hg > mxe-octave-anirudha
view makeinst-script.sh @ 3236:9d6566d9944e default tip
Added tag GSoC_end for changeset f53543bd5dd6
author | Anirudha Bose <ani07nov@gmail.com> |
---|---|
date | Tue, 24 Sep 2013 16:13:01 +0530 |
parents | f13064b3aca0 |
children |
line wrap: on
line source
#! /bin/bash set -e if [ $# != 1 ]; then echo "Expected octave folder" exit fi ARG1=$1 TOPDIR=`dirname $ARG1` OCTAVE_SOURCE=`basename $ARG1` echo "Generating installer script ... " cd $TOPDIR # find icon ICON=`find $OCTAVE_SOURCE -name octave-logo.ico -printf "%P" | sed 's,/,\\\\,g'` # create installer script echo "; octave setup script $OCTAVE_SOURCE" > octave.nsi # installer settings cat >> octave.nsi << EOF !define APP_NAME "GNU Octave" !define COMP_NAME "GNU Project" !define WEB_SITE "http://www.octave.org" !define VERSION "3.7.5.0" !define OCTAVE_VERSION "3.7.5" !define COPYRIGHT "Copyright © 2013 John W. Eaton and others." !define DESCRIPTION "GNU Octave is a high-level programming language, primarily intended for numerical computations." !define INSTALLER_FILES "../installer_files" !define INSTALLER_NAME "octave-installer.exe" !define MAIN_APP_EXE "octave.exe" !define INSTALL_TYPE "SetShellVarContext current" !define PRODUCT_ROOT_KEY "HKLM" !define PRODUCT_KEY "Software\Octave" ###################################################################### VIProductVersion "\${VERSION}" VIAddVersionKey "ProductName" "\${APP_NAME}" VIAddVersionKey "CompanyName" "\${COMP_NAME}" VIAddVersionKey "LegalCopyright" "\${COPYRIGHT}" VIAddVersionKey "FileDescription" "\${DESCRIPTION}" VIAddVersionKey "FileVersion" "\${VERSION}" ###################################################################### SetCompressor /SOLID Lzma Name "\${APP_NAME}" Caption "\${APP_NAME}" OutFile "\${INSTALLER_NAME}" BrandingText "\${APP_NAME}" XPStyle on InstallDir "C:\\Octave\\Octave-\${OCTAVE_VERSION}" Icon "$OCTAVE_SOURCE\\$ICON" ###################################################################### ; MUI settings !include "MUI.nsh" !define MUI_ABORTWARNING !define MUI_UNABORTWARNING !define MUI_HEADERIMAGE ; Theme !define MUI_ICON "\${INSTALLER_FILES}/octave-logo.ico" !define MUI_UNICON "./${OCTAVE_SOURCE}/share/nsis/Contrib/Graphics/Icons/orange-uninstall.ico" !define MUI_HEADERIMAGE_BITMAP "\${INSTALLER_FILES}/octave-hdr.bmp" !define MUI_WELCOMEFINISHPAGE_BITMAP "\${INSTALLER_FILES}/octave.bmp" !insertmacro MUI_PAGE_WELCOME !define MUI_LICENSEPAGE_TEXT_BOTTOM "The source code for Octave is freely redistributable under the terms of the GNU General Public License (GPL) as published by the Free Software Foundation." !define MUI_LICENSEPAGE_BUTTON "Next >" !insertmacro MUI_PAGE_LICENSE "\${INSTALLER_FILES}/gpl-3.0.txt" !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !define MUI_FINISHPAGE_RUN "\$INSTDIR\bin\\\${MAIN_APP_EXE}" !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE "English" ###################################################################### Function .onInit Call DetectWinVer Call CheckPrevVersion Call CheckJRE InitPluginsDir FunctionEnd ; file section Section "MainFiles" EOF # insert the files IFS=$'\n' for f in $(find $OCTAVE_SOURCE -type d -printf "%P\n"); do winf=`echo $f | sed 's,/,\\\\,g'` echo " CreateDirectory \"\$INSTDIR\\$winf\"" >> octave.nsi echo " SetOutPath \"\$INSTDIR\\$winf\"" >> octave.nsi find "$OCTAVE_SOURCE/$f" -maxdepth 1 -type f -printf " File \"%p\"\n" >> octave.nsi done cat >> octave.nsi << EOF SectionEnd Section make_uninstaller ; Write the uninstall keys for Windows SetOutPath "\$INSTDIR" WriteRegStr HKLM "Software\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Octave" "DisplayName" "Octave" WriteRegStr HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Octave" "UninstallString" "\$INSTDIR\uninstall.exe" WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Octave" "NoModify" 1 WriteRegDWORD HKLM "Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\Octave" "NoRepair" 1 WriteUninstaller "uninstall.exe" SectionEnd ; start menu (currently hardcoded) Section "Shortcuts" CreateDirectory "\$SMPROGRAMS\\Octave" CreateShortCut "\$SMPROGRAMS\\Octave\\Uninstall.lnk" "\$INSTDIR\\uninstall.exe" "" "\$INSTDIR\\uninstall.exe" 0 CreateShortCut "\$SMPROGRAMS\Octave\\Octave.lnk" "\$INSTDIR\\bin\\octave.exe" "" "\$INSTDIR\\$ICON" 0 CreateShortCut "\$SMPROGRAMS\Octave\\Octave (No GUI).lnk" "\$INSTDIR\\bin\\octave-cli.exe" "" "\$INSTDIR\\$ICON" 0 CreateDirectory "\$SMPROGRAMS\\Octave\\Documentation" CreateShortCut "\$SMPROGRAMS\\Octave\\Documentation\\Octave C++ Classes (PDF).lnk" "\$INSTDIR\\share\\doc\\octave\\liboctave.pdf" "" "" 0 CreateShortCut "\$SMPROGRAMS\\Octave\\Documentation\\Octave C++ Classes (HTML).lnk" "\$INSTDIR\\share\\doc\\octave\\liboctave.html\\index.html" "" "" 0 CreateShortCut "\$SMPROGRAMS\\Octave\\Documentation\\Octave (PDF).lnk" "\$INSTDIR\\share\\doc\\octave\\octave.pdf" "" "" 0 CreateShortCut "\$SMPROGRAMS\\Octave\\Documentation\\Octave (HTML).lnk" "\$INSTDIR\\share\\doc\\octave\\octave.html\index.html" "" "" 0 SectionEnd Section "Uninstall" DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\Octave" DeleteRegKey HKLM "Software\Octave" ; Remove shortcuts Delete "\$SMPROGRAMS\Octave\*.*" Delete "\$SMPROGRAMS\Octave\Documentation\*.*" Delete "\$SMPROGRAMS\Octave\Documentation" RMDir "\$SMPROGRAMS\Octave" EOF # insert dir list (backwards order) for uninstall files for f in $(find $OCTAVE_SOURCE -depth -type d -printf "%P\n"); do winf=`echo $f | sed 's,/,\\\\,g'` echo " Delete \"\$INSTDIR\\$winf\\*.*\"" >> octave.nsi echo " RmDir \"\$INSTDIR\\$winf\"" >> octave.nsi done # last bit of the uninstaller cat >> octave.nsi << EOF Delete "\$INSTDIR\*.*" RmDir "\$INSTDIR" SectionEnd ; Function to detect Windows version and abort if Octave is unsupported in the current platform Function DetectWinVer Push \$0 Push \$1 ReadRegStr \$0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" CurrentVersion IfErrors is_error is_winnt is_winnt: StrCpy \$1 \$0 1 StrCmp \$1 4 is_error ; Aborting installation for Windows versions older than Windows 2000 StrCmp \$0 "5.0" is_error ; Removing Windows 2000 as supported Windows version StrCmp \$0 "5.1" is_winnt_XP StrCmp \$0 "5.2" is_winnt_2003 StrCmp \$0 "6.0" is_winnt_vista StrCmp \$0 "6.1" is_winnt_7 StrCmp \$0 "6.2" is_winnt_8 StrCmp \$1 6 is_winnt_8 ; Checking for future versions of Windows 8 Goto is_error is_winnt_8: MessageBox MB_YESNO|MB_ICONEXCLAMATION "Setup has detected Windows 8 installed on your system. Octave is currently not fully supported on Windows 8. If you choose to continue with the installation, you might not be able to access Octave GUI. Do you want to proceed with the installation anyway?" IDYES done IDNO 0 Abort is_winnt_XP: is_winnt_2003: is_winnt_vista: is_winnt_7: Goto done is_error: StrCpy \$1 \$0 ReadRegStr \$0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" ProductName IfErrors 0 +4 ReadRegStr \$0 HKLM "SOFTWARE\Microsoft\Windows\CurrentVersion" Version IfErrors 0 +2 StrCpy \$0 "Unknown" MessageBox MB_ICONSTOP|MB_OK "This version of Octave cannot be installed on this system. Octave is supported only on Windows NT systems. Current system: \$0 (version: \$1)" Abort done: Pop \$1 Pop \$0 FunctionEnd ; Function to check any previously installed version of Octave in the system Function CheckPrevVersion Push \$0 Push \$1 Push \$2 IfFileExists "\$INSTDIR\bin\octave-\${OCTAVE_VERSION}.exe" 0 otherver MessageBox MB_OK|MB_ICONSTOP "Another Octave installation (with the same version) has been detected. Please uninstall it first." Abort otherver: StrCpy \$0 0 StrCpy \$2 "" loop: EnumRegKey \$1 \${PRODUCT_ROOT_KEY} "\${PRODUCT_KEY}" \$0 StrCmp \$1 "" loopend IntOp \$0 \$0 + 1 StrCmp \$2 "" 0 +2 StrCpy \$2 "\$1" StrCpy \$2 "\$2, \$1" Goto loop loopend: ReadRegStr \$1 \${PRODUCT_ROOT_KEY} "\${PRODUCT_KEY}" "Version" IfErrors finalcheck StrCmp \$2 "" 0 +2 StrCpy \$2 "\$1" StrCpy \$2 "\$2, \$1" finalcheck: StrCmp \$2 "" done MessageBox MB_YESNO|MB_ICONEXCLAMATION "Another Octave installation (version \$2) has been detected. It is recommended to uninstall it if you intend to use the same installation directory. Do you want to proceed with the installation anyway?" IDYES done IDNO 0 Abort done: ClearErrors Pop \$2 Pop \$1 Pop \$0 FunctionEnd ; Function to check Java Runtime Environment Function CheckJRE ; looks in: ; 1 - JAVA_HOME environment variable ; 2 - the registry Push \$R0 Push \$R1 ; use javaw.exe to avoid dosbox. ; use java.exe to keep stdout/stderr !define JAVAEXE "javaw.exe" ClearErrors ReadEnvStr \$R0 "JAVA_HOME" StrCpy \$R0 "\$R0\bin\\\${JAVAEXE}" IfErrors 0 continue ;; 1) found it in JAVA_HOME ClearErrors ReadRegStr \$R1 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" "CurrentVersion" ReadRegStr \$R0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment\\\$R1" "JavaHome" StrCpy \$R0 "\$R0\bin\\\${JAVAEXE}" IfErrors 0 continue ;; 2) found it in the registry IfErrors JRE_Error JRE_Error: MessageBox MB_ICONEXCLAMATION|MB_YESNO "Octave includes a Java integration component, but it seems Java is not available on this system. This component requires the Java Runtime Environment from Oracle (http://www.java.com) installed on your system. Octave can work without Java available, but the Java integration component will not be functional. Installing those components without Java available might prevent Octave from working correctly. Proceed with installation anyway?" IDYES continue Abort continue: FunctionEnd EOF echo "Generation Completed"