changeset 3664:41f860e3d879 octave-forge

allow to build some o-f packages into separate installers
author goffioul
date Tue, 17 Jul 2007 17:14:51 +0000
parents 0a9a72793747
children 4e16cc19161b
files admin/Windows/msvc/.cvsignore admin/Windows/msvc/octave.nsi.in admin/Windows/msvc/octave_package.nsi.in admin/Windows/msvc/run_compilation.sh
diffstat 4 files changed, 253 insertions(+), 37 deletions(-) [+]
line wrap: on
line diff
--- a/admin/Windows/msvc/.cvsignore	Tue Jul 17 16:40:57 2007 +0000
+++ b/admin/Windows/msvc/.cvsignore	Tue Jul 17 17:14:51 2007 +0000
@@ -2,4 +2,5 @@
 octave_forge.nsi
 octave_forge_desc.nsi
 octave_main.nsi
+octave_pkg_*.nsi
 octave-*-setup.exe
--- a/admin/Windows/msvc/octave.nsi.in	Tue Jul 17 16:40:57 2007 +0000
+++ b/admin/Windows/msvc/octave.nsi.in	Tue Jul 17 17:14:51 2007 +0000
@@ -446,6 +446,7 @@
 Section -Post
   WriteUninstaller "$INSTDIR\uninst.exe"
   WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\bin\octave-${OCTAVE_VERSION}.exe"
+  WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "Packages" "$INSTDIR\share\octave\packages"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe"
   WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\octave-${OCTAVE_VERSION}.exe"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/admin/Windows/msvc/octave_package.nsi.in	Tue Jul 17 17:14:51 2007 +0000
@@ -0,0 +1,172 @@
+; Script generated by the HM NIS Edit Script Wizard.
+
+!define PACKAGE_NAME "@PACKAGE_NAME@"
+!define PACKAGE_LONG_NAME "@PACKAGE_LONG_NAME@"
+!define PACKAGE_VERSION "@PACKAGE_VERSION@"
+!define PACKAGE_INFO "@PACKAGE_INFO@"
+!define OCTAVE_VERSION "@OCTAVE_VERSION@"
+!define VCLIBS_ROOT "@VCLIBS_ROOT@"
+!define SOFTWARE_ROOT "@SOFTWARE_ROOT@"
+
+!define OCTAVE_BASE "octave-${OCTAVE_VERSION}"
+!define OCTAVE_ROOT "${VCLIBS_ROOT}\local\${OCTAVE_BASE}"
+
+; HM NIS Edit Wizard helper defines
+!define PRODUCT_NAME "${PACKAGE_LONG_NAME}"
+!define PRODUCT_VERSION "${PACKAGE_VERSION}"
+!define PRODUCT_PUBLISHER ""
+!define PRODUCT_WEB_SITE "http://octave.sourceforge.net"
+!define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\octave-${OCTAVE_VERSION}.exe"
+!define PRODUCT_ROOT_KEY "HKLM"
+
+; MUI 1.67 compatible ------
+!include "MUI.nsh"
+!include "Sections.nsh"
+!include "WordFunc.nsh"
+!insertmacro WordReplace
+
+; MUI Settings
+!define MUI_ABORTWARNING
+!define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico"
+!define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico"
+
+; Welcome page
+!insertmacro MUI_PAGE_WELCOME
+; License page
+!define MUI_LICENSEPAGE_TEXT_BOTTOM "Click Next to continue."
+!define MUI_LICENSEPAGE_BUTTON "Next >"
+!insertmacro MUI_PAGE_LICENSE "${VCLIBS_ROOT}\license\COPYING.GPL"
+!insertmacro MUI_PAGE_COMPONENTS
+; Instfiles page
+!insertmacro MUI_PAGE_INSTFILES
+; Finish page
+!insertmacro MUI_PAGE_FINISH
+
+; Language files
+!insertmacro MUI_LANGUAGE "English"
+
+; MUI end ------
+
+Name "${PRODUCT_NAME} ${PRODUCT_VERSION}"
+OutFile "octave-${PACKAGE_NAME}-${PACKAGE_VERSION}-setup.exe"
+InstallDir "$PROGRAMFILES\Octave"
+#InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" ""
+ShowInstDetails show
+ShowUnInstDetails show
+XPStyle on
+
+Var IS_WIN2K
+
+Section "${PACKAGE_LONG_NAME}" SEC_@PACKAGE_NAME@
+  SetOverwrite try
+@PACKAGE_FILES@
+  SetOutPath "$INSTDIR\${PACKAGE_NAME}-${PACKAGE_VERSION}"
+  File /r "${OCTAVE_ROOT}\share\octave\packages\${PACKAGE_NAME}-${PACKAGE_VERSION}\*"
+  
+  ExecWait '"$INSTDIR\..\..\..\bin\octave.exe" -qf --eval "pkg rebuild ${PACKAGE_NAME}"'
+SectionEnd
+
+; Section descriptions
+!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
+  !insertmacro MUI_DESCRIPTION_TEXT ${SEC_@PACKAGE_NAME@} "${PACKAGE_INFO}"
+!insertmacro MUI_FUNCTION_DESCRIPTION_END
+
+Function .onInit
+  ReadRegStr $INSTDIR ${PRODUCT_ROOT_KEY} "${PRODUCT_DIR_REGKEY}" Packages
+  StrCmp $INSTDIR "" 0 octave_present
+  MessageBox MB_ICONSTOP|MB_OK "Octave ${OCTAVE_VERSION} not found on this system.$\r$\nThis package cannot be installed"
+  Abort
+octave_present:
+  Call DetectWinVer
+  Call DetectAdmin
+  Pop $0
+  StrCmp $0 1 0 endadmin
+  SetShellVarContext all
+endadmin:
+FunctionEnd
+
+Function DetectAdmin
+  Push $0
+  Push $1
+  ClearErrors
+  UserInfo::GetName
+  IfErrors win9x
+  Pop $0
+  UserInfo::GetAccountType
+  Pop $1
+  StrCmp $1 "Admin" win9x 0
+  StrCpy $0 0
+  Goto done
+win9x:
+  StrCpy $0 1
+done:
+  Pop $1
+  Exch $0
+FunctionEnd
+
+Function ReplaceOctDir
+  Push $0
+  Push $1
+  Push $2
+  Push $3
+  ClearErrors
+  FileOpen $2 $0 r
+  IfErrors done
+  FileOpen $3 $1 w
+  IfErrors close
+doit:
+  FileRead $2 $0
+  StrCmp $0 "" close1 0
+  ${WordReplace} $0 "@OCTAVE_DIR@" "$INSTDIR" "+" $1
+  FileWrite $3 $1
+  Goto doit
+close1:
+  FileClose $3
+close:
+  FileClose $2
+done:
+  Pop $3
+  Pop $2
+  Pop $1
+  Pop $0
+FunctionEnd
+
+Function DetectJVM
+  Push $0
+  ReadRegStr $0 HKLM "SOFTWARE\JavaSoft\Java Runtime Environment" CurrentVersion
+  Exch $0
+FunctionEnd
+
+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 6 is_winxp
+  StrCmp $1 5 0 is_error
+  StrCmp $0 "5.0" is_win2k
+  StrCmp $0 "5.1" is_winxp
+  StrCmp $0 "5.2" is_winxp64
+  Goto is_error
+is_win2k:
+  StrCpy $IS_WIN2K 1
+  Goto done
+is_winxp64:
+is_winxp:
+  StrCpy $IS_WIN2K 0
+  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.$\r$\nSupported systems are Windows 2000 and Windows XP.$\r$\n$\r$\nCurrent system: $0 (version: $1)"
+  Abort
+done:
+  Pop $1
+  Pop $0
+FunctionEnd
--- a/admin/Windows/msvc/run_compilation.sh	Tue Jul 17 16:40:57 2007 +0000
+++ b/admin/Windows/msvc/run_compilation.sh	Tue Jul 17 17:14:51 2007 +0000
@@ -1552,6 +1552,50 @@
 # NSI package generation #
 ##########################
 
+isolated_packages="fpl bim msh secs1d secs2d"
+
+function get_nsi_additional_files()
+{
+  packname=$1
+  case "$packname" in
+    image)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\jpeg6b.dll\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\libpng13.dll\""
+      ;;
+    octcdf)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\netcdf.dll\""
+      echo "  SetOutPath \"\$INSTDIR\\license\""
+      echo "  File \"\${VCLIBS_ROOT}\\license\\COPYING.NETCDF\""
+      ;;
+    gsl)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\libgsl.dll\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\libgslcblas.dll\""
+      ;;
+    arpack)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\arpack.dll\""
+      echo "  SetOutPath \"\$INSTDIR\\license\""
+      echo "  File \"\${VCLIBS_ROOT}\\license\\COPYING.ARPACK.doc\""
+      ;;
+    miscellaneous)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\units.exe\""
+      echo "  File \"\${VCLIBS_ROOT}\\bin\\units.dat\""
+      ;;
+    secs2d)
+      echo "  SetOutPath \"\$INSTDIR\\bin\""
+      echo "  File \"\${SOFTWARE_ROOT}\\Gmsh\\gmsh.exe\""
+      echo "  SetOutPath \"\$INSTDIR\\license\""
+      echo "  File /oname=COPYING.GMSH \"\${SOFTWARE_ROOT}\\Gmsh\\LICENSE.txt\""
+      echo "  SetOutPath \"\$INSTDIR\\tools\\gmsh\""
+      echo "  File /r /x gmsh.exe \"\${SOFTWARE_ROOT}\\Gmsh\\*.*\""
+      ;;
+  esac
+}
+
 function create_nsi_entries()
 {
   pkgs=`for d in $1; do echo $d; done | sort - | sed -e ':a;N;$!ba;s/\n/\ /g'`
@@ -1561,6 +1605,9 @@
     if test "$packname" = "jhandles"; then
       continue
     fi
+    if `echo $isolated_packages | grep -e $packname > /dev/null`; then
+      continue
+    fi
     found=`find "$octave_prefix/share/octave/packages" -type d -a -name "$packname-*" -maxdepth 1`
     if test ! -z "$found"; then
       packdesc=`grep -e '^Name:' "$found/packinfo/DESCRIPTION" | sed -e 's/^Name *: *//'`
@@ -1575,43 +1622,7 @@
         fi
         echo "Section $flag_ \"$packdesc\" SEC_$packname"
         echo "  SetOverwrite try"
-        case "$packname" in
-          image)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\jpeg6b.dll\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\libpng13.dll\""
-            ;;
-          octcdf)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\netcdf.dll\""
-            echo "  SetOutPath \"\$INSTDIR\\license\""
-            echo "  File \"\${VCLIBS_ROOT}\\license\\COPYING.NETCDF\""
-            ;;
-          gsl)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\libgsl.dll\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\libgslcblas.dll\""
-            ;;
-          arpack)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\arpack.dll\""
-            echo "  SetOutPath \"\$INSTDIR\\license\""
-			echo "  File \"\${VCLIBS_ROOT}\\license\\COPYING.ARPACK.doc\""
-            ;;
-          miscellaneous)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\units.exe\""
-            echo "  File \"\${VCLIBS_ROOT}\\bin\\units.dat\""
-            ;;
-          secs2d)
-            echo "  SetOutPath \"\$INSTDIR\\bin\""
-            echo "  File \"\${GMSH_ROOT}\\gmsh.exe\""
-            echo "  SetOutPath \"\$INSTDIR\\license\""
-            echo "  File /oname=COPYING.GMSH \"\${GMSH_ROOT}\\LICENSE.txt\""
-            echo "  SetOutPath \"\$INSTDIR\\tools\\gmsh\""
-            echo "  File /r /x gmsh.exe \"\${GMSH_ROOT}\\*.*\""
-            ;;
-        esac
+        get_nsi_additional_files $packname
         echo "  SetOutPath \"\$INSTDIR\\share\\octave\\packages\\$packinstdir\""
         echo "  File /r \"\${OCTAVE_ROOT}\\share\\octave\\packages\\$packinstdir\\*\""
         echo "SectionEnd"
@@ -1623,6 +1634,34 @@
   done
 }
 
+function create_nsi_package_file()
+{
+  packname=$1
+  found=`find "$octave_prefix/share/octave/packages" -type d -a -name "$packname-*" -maxdepth 1`
+  if test ! -z "$found"; then
+    echo -n "creating installer for $packname... "
+    packdesc=`grep -e '^Name:' "$found/packinfo/DESCRIPTION" | sed -e 's/^Name *: *//'`
+    packdesc_low=`echo $packdesc | sed -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    packver=`grep -e '^Version:' "$found/packinfo/DESCRIPTION" | sed -e 's/^Version *: *//'`
+    packinstdir=$packdesc_low-$packver
+    packinfo=`sed -e '/^ /{H;$!d;}' -e 'x;/^Description: /!d;' "$found/packinfo/DESCRIPTION" | sed -e ':a;N;$!ba;s/\n */\ /g' | sed -e 's/^Description: //'`
+    packfiles=`get_nsi_additional_files $packname`
+    if test ! -z "$packfiles"; then
+      echo "$packfiles" > octave_pkg_${packname}_files.nsi
+      packfiles="!include \\\"octave_pkg_${packname}_files.nsi\\\""
+    fi
+    sed -e "s/@PACKAGE_NAME@/$packname/" \
+        -e "s/@PACKAGE_LONG_NAME@/$packdesc/" \
+        -e "s/@PACKAGE_VERSION@/$packver/" \
+        -e "s/@PACKAGE_INFO@/$packinfo/" \
+        -e "s/@OCTAVE_VERSION@/$octave_version/" \
+        -e "s/@VCLIBS_ROOT@/$tdir_w32/" \
+	-e "s/@PACKAGE_FILES@/$packfiles/" \
+        -e "s/@SOFTWARE_ROOT@/$software_root/" octave_package.nsi.in > octave_pkg_$packname.nsi
+    echo "done"
+  fi
+}
+
 if $do_nsi; then
   if test -z "$octave_version" || test ! -d "$INSTALL_DIR/local/octave-$octave_version"; then
     echo "no octave or octave-forge installed, cannot create installer"
@@ -1682,4 +1721,7 @@
   create_nsi_entries "$main_pkgs" "" 1 >> octave_forge_desc.nsi
   create_nsi_entries "$extra_pkgs" "" 1 >> octave_forge_desc.nsi
   echo "done"
+  for pack in $isolated_packages; do
+    create_nsi_package_file $pack
+  done
 fi