2010-03-22 22:51:11 +00:00
; -----------------------------------------------
/ *
Nullsoft Installer for Netgen 32- bit and 64- bit
Filename : netgen_installer.nsi
Author : Philippose Rajan
Date : 11 March 2010
Description : This installer automates the process
of installing Netgen / Nglib and the associated
libraries on a Windows system
* * Also gives the option of installing NgSolve
and samples of the Plug- In architecture
* * NOTE : This installer can create both , the 32- bit
and the 64- bit versions of Netgen, depending on the
variable " NETGEN_ARCH "
NETGEN_ARCH < Win32 | x64>
* /
; ------------------------------------------------
; ---------- Set the Compression Alg ----
SetCompressor /SOLID /FINAL lzma
; ---------------------------------------
; ---------- Include files --------------
; Include for sending Windows Messages
!include WinMessages.nsh
; Include the Modern UI subsystem
!include MUI2.nsh
; Include the Logic Library
!include LogicLib.nsh
; Miscellaneous string functions
;!include StrContains.nsh
; ---------------------------------------
; ---------- Variable declarations ------
Var foundTclTkTix
Var foundTogl
Var foundPThds
Var foundOCC
Var foundLapackBlas
2010-05-20 23:01:20 +00:00
Var foundMKLLibs
2010-03-22 22:51:11 +00:00
Var StartMenuFolder
Var NetgenUserDir
; ---------------------------------------
; ---------- House-keeping --------------
; Define the terms to be used for the various architectures
; supported by Netgen
!define WIN32_ARCH " Win32 "
!define X64_ARCH " x64 "
; ########## MODIFY AS REQUIRED ###############
; Tell NSIS which architecture to use to create
; the installer
; NOTE: Currently this variable is set at the
; Command line when called "makensis.exe" using
; /DNETGEN_ARCH=<architecture>
;!define NETGEN_ARCH ${WIN32_ARCH}
;!define NETGEN_ARCH ${X64_ARCH}
; Change the version number of Netgen here
; NOTE: Currently this variable is set at the
; Command line when called "makensis.exe" using
; /DNETGEN_VER=<version>
;!define NETGEN_VER "4.9.12"
; Check if the Architecture and the version of Netgen have been specified
!ifndef NETGEN_ARCH
!error " Error: NETGEN_ARCH not defined....Please define this on the command line.....Aborting! "
!endif
!ifndef NETGEN_VER
!error " Error: NETGEN_VER not defined....Please define this on the command line.....Aborting! "
!endif
; Display the currently selected Netgen Architecture
!echo " Current Netgen Architecture: ${NETGEN_ARCH} "
; Display the current version of Netgen
!echo " Current Netgen Version: ${NETGEN_VER} "
; #############################################
; Part to be added to the "tcl" folders for 64-bit architecture
!if ${NETGEN_ARCH} == ${WIN32_ARCH}
!define TCL_ARCH_EXT " "
!else if ${NETGEN_ARCH} == ${X64_ARCH}
!define TCL_ARCH_EXT " -64 "
!else
!error " Error: Netgen Architecture not specified.....Aborting! "
!endif
; Part to be added to the "pthread" DLL for 32-bit or 64-bit architecture
!if ${NETGEN_ARCH} == ${WIN32_ARCH}
!define PTHDS_ARCH_DIR " -w32 "
!define PTHDS_ARCH_EXT " "
!else if ${NETGEN_ARCH} == ${X64_ARCH}
!define PTHDS_ARCH_DIR " -w64 "
!define PTHDS_ARCH_EXT " _64 "
!else
!error " Error: Netgen Architecture not specified.....Aborting! "
!endif
2010-05-20 23:01:20 +00:00
; Part to be added to the "Intel Math Kernel Libraries" DLL for 32-bit or 64-bit architecture
!if ${NETGEN_ARCH} == ${WIN32_ARCH}
!define MKL_ARCH_DIR " -w32 "
!else if ${NETGEN_ARCH} == ${X64_ARCH}
!define MKL_ARCH_DIR " -w64 "
!else
!error " Error: Netgen Architecture not specified.....Aborting! "
!endif
2010-03-22 22:51:11 +00:00
; Location of the OCC libraries for different architectures
!if ${NETGEN_ARCH} == ${WIN32_ARCH}
!define OCC_ARCH " win32 "
!else if ${NETGEN_ARCH} == ${X64_ARCH}
!define OCC_ARCH " win64 "
!else
!error " Error: Netgen Architecture not specified.....Aborting! "
!endif
; ########## MODIFY AS REQUIRED ###############
; Set up paths for access to various files
; Note #1: Change this according to the setup on
; the machine where the installer is being compiled
; Note #2: These paths can be set from the command
; line when calling "makensis.exe" by using:
; /DNETGEN_ROOT=<netgen root folder>
; /DNGSOLVE_ROOT=<ngsolve root folder>
; /DOCC_ROOT=<OpenCascade root folder>
!ifndef NETGEN_ROOT
!define NETGEN_ROOT " D:\netgenWin\05_Netgen_Main "
!endif
!ifndef NGSOLVE_ROOT
!define NGSOLVE_ROOT " D:\netgenWin\07_NGSolve_Main "
!endif
!ifndef OCC_ROOT
!define OCC_ROOT " D:\occ6.3.0 "
!endif
; Display the currently selected Root Paths
!echo " Netgen Root: ${NETGEN_ROOT} "
!echo " NGSolve Root: ${NGSOLVE_ROOT} "
!echo " OpenCascade Root: ${OCC_ROOT} "
; Setup the directory structures that NSIS uses to access
; the various flavours of Netgen, Nglib and NgSolve
; Namely:
; ** With and Without OpenCascade Support
; ** 32-bit or 64-bit versions
!define NETGEN_SRC " ${NETGEN_ROOT}\netgen "
!define NETGEN_BASIC " ${NETGEN_ROOT}\netgen-instNoOCC_${NETGEN_ARCH} "
!define NETGEN_OCC " ${NETGEN_ROOT}\netgen-instOCC_${NETGEN_ARCH} "
!define EXTLIBS_TCLTKTIX " ${NETGEN_ROOT}\ext_libs\tcl${TCL_ARCH_EXT} "
!define EXTLIBS_TOGL " ${NETGEN_ROOT}\ext_libs\tcl${TCL_ARCH_EXT} "
!define EXTLIBS_PTHDS " ${NETGEN_ROOT}\ext_libs\pthread${PTHDS_ARCH_DIR} "
!define NGLIB_SRC " ${NETGEN_ROOT}\netgen\nglib "
!define NGLIB_BIN_BASIC " ${NETGEN_ROOT}\nglib-instNoOCC_${NETGEN_ARCH} "
!define NGLIB_BIN_OCC " ${NETGEN_ROOT}\nglib-instOCC_${NETGEN_ARCH} "
!define DEMOAPP_SRC " ${NETGEN_ROOT}\demoapp "
!define DEMOAPP_BIN " ${NETGEN_ROOT}\netgen-demoapp_${NETGEN_ARCH} "
!define NGSOLVE_SRC " ${NGSOLVE_ROOT}\ngsolve "
!define NGSOLVE_BIN " ${NGSOLVE_ROOT}\ngsolve-inst_${NETGEN_ARCH} "
2010-05-20 23:01:20 +00:00
!define NGSOLVE_LAPACKLIBS " ${NGSOLVE_ROOT}\ext_libs\lapack-blas "
!define NGSOLVE_MKLLIBS " ${NGSOLVE_ROOT}\ext_libs\mkl${MKL_ARCH_DIR} "
2010-03-22 22:51:11 +00:00
!define EXTLIBS_OCC " ${OCC_ROOT}\ros\${OCC_ARCH}\bin "
; Folder which contains the LGPL License in various languages
!define LGPL_LICENSE_SRC " .\LGPL_Licenses "
; Location of the installer binary created by the NSIS compiler
!define OUTPUT_DIR " .\Binaries "
; #############################################
; ########## USUALLY NOTHING NEEDS TO BE CHANGED BEYOND THIS POINT ###########
; Name of environment variable required by
; Netgen for finding the required scripts
!define NETGENDIR " NETGENDIR "
!define NETGEN_USER_DIR " NETGEN_USER_DIR "
; Paths within the Windows Registry which are
; required for environment variables
!define HKLM_ENV 'HKLM "SYSTEM\CurrentControlSet\Control\Session Manager\Environment"'
!define HKCU_ENV 'HKCU "Environment"'
!define SHELLFOLDERS " Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders "
; Name to be used within the installer to refer to
; the program
Name " Netgen Mesher (${NETGEN_ARCH}) "
; Set the location of the output directory where the installer will be generated
!system 'md "${OUTPUT_DIR}"'
; Name of the generated installer
OutFile " ${OUTPUT_DIR}\Netgen-${NETGEN_VER}_${NETGEN_ARCH}.exe "
; Set the style
XPStyle on
; Default installation folder
InstallDir " $PROGRAMFILES \Netgen-${NETGEN_VER}_${NETGEN_ARCH} "
; Try to get the current installed folder (if any)
InstallDirRegKey HKCU " Software\Netgen\${NETGEN_VER}_${NETGEN_ARCH} " " Install_Dir "
; Request application privileges for Windows Vista
RequestExecutionLevel user
; ---------------------------------------
; ---------- Interface settings ---------
; Currently uses the Modern UI v2 User Interface
; Define the bitmap to use for the welcome and finish pages
!define MUI_WELCOMEFINISHPAGE_BITMAP " ${NSISDIR} \Contrib\Graphics\Wizard\orange.bmp "
!define MUI_UNWELCOMEFINISHPAGE_BITMAP " ${NSISDIR} \Contrib\Graphics\Wizard\orange.bmp "
; Display a header bitmap image on top right of each page
!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-r.bmp "
!define MUI_ABORTWARNING
; Select the Icon to use for the generated installer
!define MUI_ICON " ${NSISDIR} \Contrib\Graphics\Icons\orange-install-nsis.ico "
!define MUI_UNICON " ${NSISDIR} \Contrib\Graphics\Icons\orange-uninstall-nsis.ico "
; ---------------------------------------
; ---------- Pages to display -----------
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE " $(license) "
!insertmacro MUI_PAGE_COMPONENTS
; Select the Installation Directory
!define MUI_DIRECTORYPAGE_VARIABLE $INSTDIR
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION $ ( STR_InstallFolder)
!insertmacro MUI_PAGE_DIRECTORY
; Select the Netgen user Directory
!define MUI_PAGE_HEADER_TEXT $ ( STR_UserPageHeaderText)
!define MUI_PAGE_HEADER_SUBTEXT $ ( STR_UserPageHeaderSubText)
!define MUI_DIRECTORYPAGE_TEXT_TOP $ ( STR_UserPageText)
!define MUI_DIRECTORYPAGE_TEXT_DESTINATION $ ( STR_UserFolder)
!define MUI_DIRECTORYPAGE_VARIABLE $NetgenUserDir
!insertmacro MUI_PAGE_DIRECTORY
; Set up the Start Menu Page
!define MUI_STARTMENUPAGE_REGISTRY_ROOT " HKCU "
!define MUI_STARTMENUPAGE_REGISTRY_KEY " Software\Netgen\${NETGEN_VER}_${NETGEN_ARCH} "
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME " Start_Menu_Folder "
!define MUI_STARTMENUPAGE_DEFAULTFOLDER " Netgen "
!insertmacro MUI_PAGE_STARTMENU NetgenStartMenu $StartMenu Folder
!insertmacro MUI_PAGE_INSTFILES
!define MUI_FINISHPAGE_RUN " $INSTDIR \bin\netgen.exe "
!define MUI_FINISHPAGE_RUN_TEXT $ ( STR_Finish_RunText)
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
; ---------------------------------------
; ---------- Languages to use -----------
!insertmacro MUI_LANGUAGE " English "
!insertmacro MUI_LANGUAGE " German "
!insertmacro MUI_LANGUAGE " French "
; ---------------------------------------
; ---------- Reserve Files --------------
!insertmacro MUI_RESERVEFILE_LANGDLL
; ---------------------------------------
; ---------- License files --------------
LicenseLangString license ${LANG_ENGLISH} ${LGPL_LICENSE_SRC} \ LGPL_English.txt
LicenseLangString license ${LANG_GERMAN} ${LGPL_LICENSE_SRC} \ LGPL_German.txt
LicenseLangString license ${LANG_FRENCH} ${LGPL_LICENSE_SRC} \ LGPL_French.txt
LicenseData $ ( license)
; ---------------------------------------
; ---------- File Copy Macros -----------
; Macro to copy basic Netgen files into the
; install location
; These files are common to the versions of
; netgen with and without OCC support
!macro copyNetgenBasics reqDir
; Set the output path to the install
; folder path
SetOutPath $INSTDIR
; Create the directory structure
; used for the installation
CreateDirectory " $INSTDIR \bin "
CreateDirectory " $INSTDIR \include "
CreateDirectory " $INSTDIR \lib "
CreateDirectory " $INSTDIR \doc "
; Create the user specific directory where netgen
; stores configuration information
CreateDirectory " $NetgenUserDir "
; Copy the files into the right
; folders
SetOutPath " $INSTDIR \bin "
File ${reqDir} \ bin\ * .tcl
File ${reqDir} \ bin\ * .exe
File ${reqDir} \ bin\ * .ocf
SetOutPath " $INSTDIR \include "
File ${reqDir} \ include\ * .h
File ${reqDir} \ include\ * .hpp
SetOutPath " $INSTDIR \lib "
File ${reqDir} \ lib\ * .lib
SetOutPath " $INSTDIR \doc "
File ${NETGEN_SRC} \ doc\ * .pdf
SetOutPath " $INSTDIR \tutorials "
File ${NETGEN_SRC} \ tutorials\ * .*
!macroend
; ---------------------------------------
; Macro to copy the common auxiliary
; libraries
; The main libraries handled here are the
; Tcl, Tk, Tix, Togl and pthread-w32 libraries
!macro copyAuxLibBasics
; Install the required Auxiliary Libraries
; (If not already available and accessible)
${If} $foundTclTkTix != " 1 "
SetOutPath " $INSTDIR \bin "
File ${EXTLIBS_TCLTKTIX} \ bin\ tcl85.dll
File ${EXTLIBS_TCLTKTIX} \ bin\ tclpip85.dll
File ${EXTLIBS_TCLTKTIX} \ bin\ tk85.dll
File ${EXTLIBS_TCLTKTIX} \ bin\ tix84.dll
; Copy the basic Tcl headers and lib files to help
; with compilation of NgSolve
SetOutPath " $INSTDIR \include "
File ${EXTLIBS_TCLTKTIX} \ include\ tcl.h
File ${EXTLIBS_TCLTKTIX} \ include\ tclDecls.h
File ${EXTLIBS_TCLTKTIX} \ include\ tclPlatDecls.h
SetOutPath " $INSTDIR \lib "
File ${EXTLIBS_TCLTKTIX} \ lib\ tcl85.lib
File /r /x * .lib /x demos /x tzdata ${EXTLIBS_TCLTKTIX} \ lib\ * .*
${EndIf}
${If} $foundTogl != " 1 "
SetOutPath " $INSTDIR \bin "
File ${EXTLIBS_TOGL} \ bin\ Togl17.dll
${EndIf}
${If} $foundPThds != " 1 "
SetOutPath " $INSTDIR \bin "
File ${EXTLIBS_PTHDS} \ lib\ pthreadVC2${PTHDS_ARCH_EXT} .dll
${EndIf}
!macroend
; ---------------------------------------
; Macro to write the install folder and the
; NETGENDIR environment variable into the registry,
; and write the uninstaller.exe file
!macro registerInstall
; Set the NETGENDIR environment variable to the current
; installation bin folder
WriteRegExpandStr ${HKCU_ENV} " ${NETGENDIR} " " $INSTDIR \bin "
; Set the NETGEN_USER_DIR environment variable to the user
; selected folder
WriteRegExpandStr ${HKCU_ENV} " ${NETGEN_USER_DIR} " $NetgenUserDir
; Broadcast the changes in the environment variables to the rest of the system
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 " STR:Environment " /TIMEOUT = 5000
; Write the installation path into the registry
WriteRegStr HKCU " Software\Netgen\${NETGEN_VER}_${NETGEN_ARCH} " " Install_Dir " " $INSTDIR "
WriteRegStr HKCU " Software\Netgen\${NETGEN_VER}_${NETGEN_ARCH} " " User_Dir " " $NetgenUserDir "
; Write the un-installer
WriteUninstaller " $INSTDIR \uninstall.exe "
SetOutPath " $INSTDIR \tutorials "
; Write the Start Menu items
!insertmacro MUI_STARTMENU_WRITE_BEGIN NetgenStartMenu
CreateDirectory " $SMPROGRAMS \$StartMenuFolder "
CreateShortCut " $SMPROGRAMS \$StartMenuFolder\Netgen ${NETGEN_VER}.lnk " " $INSTDIR \bin\netgen.exe "
CreateShortCut " $SMPROGRAMS \$StartMenuFolder\Netgen User Manual.lnk " " $INSTDIR \doc\ng4.pdf "
CreateShortCut " $SMPROGRAMS \$StartMenuFolder\Uninstall.lnk " " $INSTDIR \uninstall.exe "
!insertmacro MUI_STARTMENU_WRITE_END
!macroend
; ---------------------------------------
; ---------------------------------------
; ---------- Main Section ---------------
SectionGroup /e " Netgen Executable "
Section " Netgen Basic " secNetgen
LogSet on
; Copy the basic Netgen files into the
; install location
!insertmacro copyNetgenBasics ${NETGEN_BASIC}
; Check if required libraries are present
; if not, mark them to be installed too
Call checkTclTkTix
Call checkTogl
Call checkPThds
; Copy the basic auxiliary libraries
; (if required) to the install location
!insertmacro copyAuxLibBasics
; register the install by adding registry
; keys, and write the uninstaller
!insertmacro registerInstall
SectionEnd
Section /o " Netgen with OCC " secNetgenOCC
LogSet on
; Copy the basic Netgen files into the
; install location
!insertmacro copyNetgenBasics ${NETGEN_OCC}
; Check if required libraries are present
; if not, mark them to be installed too
Call checkTclTkTix
Call checkTogl
Call checkPThds
Call checkOCC
; Copy the basic auxiliary libraries
; (if required) to the install location
!insertmacro copyAuxLibBasics
StrCmp $foundOCC " 1 " OCCInstalled 0
SetOutPath " $INSTDIR \bin "
File ${EXTLIBS_OCC} \ * .dll
OCCInstalled :
; register the install by adding registry
; keys, and write the uninstaller
!insertmacro registerInstall
SectionEnd
SectionGroupEnd
SectionGroup " Netgen API DLL (Nglib) "
Section /o " Nglib " secNglib
; Copy the nglib Basic DLL to the bin folder
; in the install location
SetOutPath " $INSTDIR \bin "
File ${NGLIB_BIN_BASIC} \ bin\ nglib.dll
; Copy the nglib LIB file to the lib folder
; in the install location
SetOutPath " $INSTDIR \lib "
File ${NGLIB_BIN_BASIC} \ lib\ nglib.lib
; Copy the nglib include header file to the
; include folder in the install location
SetOutPath " $INSTDIR \include "
File ${NGLIB_SRC} \ nglib.h
SectionEnd
Section /o " Nglib with OCC " secNglibOCC
; Copy the nglib DLL version with OCC support to the bin folder
; in the install location
SetOutPath " $INSTDIR \bin "
File ${NGLIB_BIN_OCC} \ bin\ nglib.dll
; Copy the nglib LIB file to the lib folder
; in the install location
SetOutPath " $INSTDIR \lib "
File ${NGLIB_BIN_OCC} \ lib\ nglib.lib
; Copy the nglib include header file to the
; include folder in the install location
SetOutPath " $INSTDIR \include "
File ${NGLIB_SRC} \ nglib.h
SectionEnd
Section /o " Nglib examples " secNglibEx
SectionEnd
SectionGroupEnd
SectionGroup " Add-On Applications "
Section /o " NgSolve " secNgSolve
; Check if required libraries are present
; if not, mark them to be installed too
Call checkLapackBlas
2010-05-20 23:01:20 +00:00
Call checkMKLLibs
2010-03-22 22:51:11 +00:00
; Copy the DLL and Tcl files to the
; Netgen bin folder
SetOutPath " $INSTDIR \bin "
File ${NGSOLVE_BIN} \ bin\ * .dll
File ${NGSOLVE_BIN} \ bin\ * .tcl
${If} ${NETGEN_ARCH} != ${X64_ARCH}
${If} $foundLapackBlas != " 1 "
SetOutPath " $INSTDIR \bin "
2010-05-20 23:01:20 +00:00
File ${NGSOLVE_LAPACKLIBS} \ bin\ * .dll
2010-03-22 22:51:11 +00:00
${EndIf}
${EndIf}
2010-05-20 23:01:20 +00:00
${If} $foundMKLLibs != " 1 "
SetOutPath " $INSTDIR \bin "
File ${NGSOLVE_MKLLIBS} \ bin\ * .dll
${EndIf}
2010-03-22 22:51:11 +00:00
; Copy the NGSolve LIB file to the
; Netgen lib folder
SetOutPath " $INSTDIR \lib "
File ${NGSOLVE_BIN} \ lib\ * .lib
; Copy the NGSolve header file structure
; to the Netgen include folder
SetOutPath " $INSTDIR \include\include "
File ${NGSOLVE_SRC} \ include\ * .hpp
SetOutPath " $INSTDIR \include\solve "
File ${NGSOLVE_SRC} \ solve\ * .hpp
SetOutPath " $INSTDIR \include\parallel "
File ${NGSOLVE_SRC} \ parallel\ * .hpp
SetOutPath " $INSTDIR \include\ngstd "
File ${NGSOLVE_SRC} \ ngstd\ * .hpp
SetOutPath " $INSTDIR \include\multigrid "
File ${NGSOLVE_SRC} \ multigrid\ * .hpp
SetOutPath " $INSTDIR \include\linalg "
File ${NGSOLVE_SRC} \ linalg\ * .hpp
SetOutPath " $INSTDIR \include\fem "
File ${NGSOLVE_SRC} \ fem\ * .hpp
SetOutPath " $INSTDIR \include\comp "
File ${NGSOLVE_SRC} \ comp\ * .hpp
SetOutPath " $INSTDIR \include\basiclinalg "
File ${NGSOLVE_SRC} \ basiclinalg\ * .hpp
; Copy the NgSolve pde tutorials to the
; installation folder
SetOutPath " $INSTDIR \pde_tutorials "
File ${NGSOLVE_SRC} \ pde_tutorial\ * .*
SectionEnd
Section /o " demoapp " secDemoApp
; Copy the demoapp DLL and Tcl files
; to the Netgen bin folder
SetOutPath " $INSTDIR \bin "
File ${DEMOAPP_BIN} \ bin\ * .dll
File ${DEMOAPP_BIN} \ bin\ * .tcl
; Copy the source files to the plugins folder
; under a subdirectory named "demoapp"
SetOutPath " $INSTDIR \plugins\demoapp "
File ${DEMOAPP_SRC} \ * .cpp
File ${DEMOAPP_SRC} \ * .h
File ${DEMOAPP_SRC} \ * .tcl
File ${DEMOAPP_SRC} \ README
SetOutPath " $INSTDIR \plugins\demoapp\windows "
File ${DEMOAPP_SRC} \ windows\ * .sln
File ${DEMOAPP_SRC} \ windows\ * .vcproj
File ${DEMOAPP_SRC} \ windows\ * .bat
SectionEnd
SectionGroupEnd
; ---------------------------------------
; ---------- Un-Installer Section -------
Section Uninstall
; The first step is to always delete the
; uninstaller
Delete " $INSTDIR \uninstall.exe "
; Remove the folders one by one...
; Could be done in one shot, but prefer
; to be a little clearer here
RMDir /r /REBOOTOK " $INSTDIR \bin "
RMDir /r /REBOOTOK " $INSTDIR \lib "
RMDir /r /REBOOTOK " $INSTDIR \include "
RMDir /r /REBOOTOK " $INSTDIR \doc "
RMDir /r /REBOOTOK " $INSTDIR \plugins "
RMDir /r /REBOOTOK " $INSTDIR \tutorials "
; Finally remove the install folder
RMDir /r /REBOOTOK $INSTDIR
; Remove the NETGENDIR registry key
DeleteRegValue ${HKCU_ENV} " ${NETGENDIR} "
DeleteRegValue ${HKCU_ENV} " ${NETGEN_USER_DIR} "
!insertmacro MUI_STARTMENU_GETFOLDER NetgenStartMenu $StartMenu Folder
RMDir /r /REBOOTOK " $SMPROGRAMS \$StartMenuFolder "
; Remove the Netgen entry from the SOFTWARE registry
DeleteRegKey HKCU " SOFTWARE\Netgen\${NETGEN_VER}_${NETGEN_ARCH} "
DeleteRegKey /ifempty HKCU " SOFTWARE\Netgen "
2010-03-23 21:04:06 +00:00
; Broadcast the changes in the environment variables to the rest of the system
SendMessage ${HWND_BROADCAST} ${WM_WININICHANGE} 0 " STR:Environment " /TIMEOUT = 5000
2010-03-22 22:51:11 +00:00
SectionEnd
; ---------- Section Descriptions -------
LangString DESC_secNetgen ${LANG_ENGLISH} " Basic version of the Netgen Mesher "
LangString DESC_secNetgen ${LANG_GERMAN} " Basis Version des Netgen Vernetzungstools "
LangString DESC_secNetgen ${LANG_FRENCH} " Version de base de l'outil de maillage Netgen "
LangString DESC_secNetgenOCC ${LANG_ENGLISH} " Netgen Mesher version with OpenCascade geometry support (STEP/IGES/BREP files) "
LangString DESC_secNetgenOCC ${LANG_GERMAN} " Der Netgen Vernetzungstool mit eingebauter Unterst<73> tzung f<> r OpenCascade Geometrie (STEP/IGES/BREP Dateien) "
LangString DESC_secNetgenOCC ${LANG_FRENCH} " Netgen outil de maillage avec le soutien de la g<> om<6F> trie OpenCascade (STEP/IGES/BREP fichiers) "
LangString DESC_secNglib ${LANG_ENGLISH} " Library (DLL) version of the Netgen Mesher containing the API for use in Third-party Software "
LangString DESC_secNglib ${LANG_GERMAN} " Bibliotheksversion (DLL) des Netgen Vernetzungstools f<> r Anwendung von innerhalb externen Software "
LangString DESC_secNglib ${LANG_FRENCH} " Biblioth<EFBFBD> que (DLL) version de l'outil de maillage Netgen contenant l'API pour une utilisation dans Logiciels tiers "
LangString DESC_secNglibOCC ${LANG_ENGLISH} " Library (DLL) version of the Netgen Mesher with OpenCascade geometry support containing the API for use in Third-party Software "
LangString DESC_secNglibOCC ${LANG_GERMAN} " Bibliotheksversion (DLL) des Netgen Vernetzungstools mit eingebauter Unterst<73> tzung f<> r OpenCascade Geometrie f<> r Anwendung von innerhalb externen Software "
LangString DESC_secNglibOCC ${LANG_FRENCH} " Biblioth<EFBFBD> que (DLL) version de l'outil de maillage Netgen contenant l'API pour une utilisation dans Logiciels tiers avec le soutien de la g<> om<6F> trie OpenCascade "
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${secNetgen} $ ( DESC_secNetgen)
!insertmacro MUI_DESCRIPTION_TEXT ${secNetgenOCC} $ ( DESC_secNetgenOCC)
!insertmacro MUI_DESCRIPTION_TEXT ${secNglib} $ ( DESC_secNglib)
!insertmacro MUI_DESCRIPTION_TEXT ${secNglibOCC} $ ( DESC_secNglibOCC)
!insertmacro MUI_DESCRIPTION_TEXT ${secNgSolve} " Pre-compiled (DLL) version of the NgSolve module - The Netgen Solver Module "
!insertmacro MUI_DESCRIPTION_TEXT ${secDemoApp} " Sample of a plugin application for customising and extending Netgen - Source files and pre-compiled DLL "
!insertmacro MUI_DESCRIPTION_TEXT ${secNglibEx} " Sample applications for demonstrating the NgLib API DLL "
!insertmacro MUI_FUNCTION_DESCRIPTION_END
; ---------- Miscellaneous Description Strings -------
LangString STR_InstallFolder ${LANG_ENGLISH} " Installation Directory "
LangString STR_InstallFolder ${LANG_GERMAN} " Installationsordner "
LangString STR_InstallFolder ${LANG_FRENCH} " Dossier d'installation "
LangString STR_UserFolder ${LANG_ENGLISH} " Directory for User specific settings "
LangString STR_UserFolder ${LANG_GERMAN} " Ordner f<> r Benutzerspezifische Einstellungen "
LangString STR_UserFolder ${LANG_FRENCH} " Dossier pour les param<61> tres sp<73> cifiques de l'utilisateur "
LangString STR_UserPageText ${LANG_ENGLISH} " Netgen uses the directory specified here in order to save user-specific configuration information. Make sure that you have write access for the selected folder. "
LangString STR_UserPageText ${LANG_GERMAN} " Netgen verwendet das hier angegebene Verzeichnis um anwenderspezifische Konfigurationsdatein zu speichern. Vergewissern Sie sich dass Sie Schreibrechte in diesem Verzeichnis haben "
LangString STR_UserPageText ${LANG_FRENCH} " Netgen utilise le dossier sp<73> cifi<66> ici afin de sauver l'utilisateur des informations de configuration sp<73> cifiques. Assurez-vous que vous avez acc<63> s en <20> criture pour le dossier s<> lectionn<6E> . "
LangString STR_UserPageHeaderText ${LANG_ENGLISH} " Select Location for User Specific Settings "
LangString STR_UserPageHeaderText ${LANG_GERMAN} " Zielverzeichnis f<> r Benutzerspezifische Einstellungen "
LangString STR_UserPageHeaderText ${LANG_FRENCH} " S<EFBFBD> lectionnez le dossier contenant les param<61> tres sp<73> cifiques <20> l'utilisateur "
LangString STR_UserPageHeaderSubText ${LANG_ENGLISH} " Select the folder which Netgen Mesher can use to save user specific data "
LangString STR_UserPageHeaderSubText ${LANG_GERMAN} " W<EFBFBD> hlen Sie das Verzeichnis aus, in das Netgen Mesher die Benutzerspezifische Daten speichern soll "
LangString STR_UserPageHeaderSubText ${LANG_FRENCH} " S<EFBFBD> lectionnez le dossier dans lequel l'outil de maillage Netgen pouvez utiliser pour enregistrer des donn<6E> es utilisateur sp<73> cifiques "
LangString STR_Finish_RunText ${LANG_ENGLISH} " Run Netgen-${NETGEN_VER} now "
LangString STR_Finish_RunText ${LANG_GERMAN} " Netgen-${NETGEN_VER} jetzt starten "
LangString STR_Finish_RunText ${LANG_FRENCH} " Ex<EFBFBD> cutez le Netgen-${NETGEN_VER} maintenant "
; ---------------------------------------
; ----------- Language selection --------
Function .onInit
; Display the language select window
!insertmacro MUI_LANGDLL_DISPLAY
; The base Netgen package (without OCC) is selected by default
StrCpy $1 ${secNetgen}
!insertmacro SetSectionFlag ${secNglibOCC} ${SF_RO}
!insertmacro ClearSectionFlag ${secNglib} ${SF_RO}
; Extract the user application data folder
ReadRegStr $3 HKCU " ${SHELLFOLDERS} " AppData
StrCmp $3 " " 0 + 3
StrCpy $NetgenUserDir " $INSTDIR "
Goto End
StrCpy $NetgenUserDir " $3 \Netgen-${NETGEN_VER} "
End :
FunctionEnd
; The init function for the uninstaller
Function un.oninit
; Display the language select window
!insertmacro MUI_LANGDLL_DISPLAY
FunctionEnd
; ---------------------------------------
; ---------- Package Selection ----------
Function .onSelChange
!insertmacro StartRadioButtons $1
!insertmacro RadioButton ${secNetgen}
!insertmacro RadioButton ${secNetgenOCC}
!insertmacro EndRadioButtons
; Select the right version of Nglib based on the current
; Netgen package version selection
!insertmacro SectionFlagIsSet ${secNetgen} ${SF_SELECTED} " NglibBasicSel " " "
!insertmacro SectionFlagIsSet ${secNetgenOCC} ${SF_SELECTED} " NglibOCCSel " " "
Goto NglibSelEnd
NglibBasicSel :
!insertmacro UnselectSection ${secNglibOCC}
!insertmacro SetSectionFlag ${secNglibOCC} ${SF_RO}
!insertmacro ClearSectionFlag ${secNglib} ${SF_RO}
Goto NglibSelEnd
NglibOCCSel :
!insertmacro UnselectSection ${secNglib}
!insertmacro SetSectionFlag ${secNglib} ${SF_RO}
!insertmacro ClearSectionFlag ${secNglibOCC} ${SF_RO}
NglibSelEnd :
FunctionEnd
; ---------------------------------------
; ------------- StrContains -------------
; StrContains
; This function does a case sensitive searches for an occurrence of a substring in a string.
; It returns the substring if it is found.
; Otherwise it returns null("").
; Written by kenglish_hi
; Adapted from StrReplace written by dandaman32
Var STR_HAYSTACK
Var STR_NEEDLE
Var STR_CONTAINS_VAR_1
Var STR_CONTAINS_VAR_2
Var STR_CONTAINS_VAR_3
Var STR_CONTAINS_VAR_4
Var STR_RETURN_VAR
Function StrContains
Exch $STR_NEEDLE
Exch 1
Exch $STR_HAYSTACK
; Uncomment to debug
;MessageBox MB_OK 'STR_NEEDLE = $STR_NEEDLE STR_HAYSTACK = $STR_HAYSTACK '
StrCpy $STR_RETURN_VAR " "
StrCpy $STR_CONTAINS_VAR_1 - 1
StrLen $STR_CONTAINS_VAR_2 $STR_NEEDLE
StrLen $STR_CONTAINS_VAR_4 $STR_HAYSTACK
loop :
IntOp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_1 + 1
StrCpy $STR_CONTAINS_VAR_3 $STR_HAYSTACK $STR_CONTAINS_VAR_2 $STR_CONTAINS_VAR_1
StrCmp $STR_CONTAINS_VAR_3 $STR_NEEDLE found
StrCmp $STR_CONTAINS_VAR_1 $STR_CONTAINS_VAR_4 done
Goto loop
found :
StrCpy $STR_RETURN_VAR $STR_NEEDLE
Goto done
done :
Pop $STR_NEEDLE ;Prevent "invalid opcode" errors and keep the
Exch $STR_RETURN_VAR
FunctionEnd
!macro _StrContainsConstructor OUT NEEDLE HAYSTACK
Push " ${HAYSTACK} "
Push " ${NEEDLE} "
Call StrContains
Pop " ${OUT} "
!macroend
!define StrContains '!insertmacro "_StrContainsConstructor"'
; ---------------------------------------
; ---------- Check for TCL/Tk DLLs ------
Function checkTclTkTix
ClearErrors
; Check if the Tix, Tk and Tcl DLLs are available in the PATH
; Note: Modify version numbers if required
SearchPath $2 tix84.dll
SearchPath $2 tk85.dll
SearchPath $2 tcl85.dll
IfErrors TclTkTixErrors
Push $2
Call GetPathOnly
Pop " $R0 "
; Check if the required auxiliary Tcl files are present
; in the location expected by Tcl/Tk/Tix
IfFileExists $R0 \ ..\ lib\ tcl8.5\ init.tcl 0 TclTkTixErrors
IfFileExists $R0 \ ..\ lib\ tk8.5\ * .tcl 0 TclTkTixErrors
IfFileExists $R0 \ ..\ lib\ tix8.4.* 0 TclTkTixErrors
${StrContains} $2 " ${TCL_ARCH_EXT} " $R0
${If} $2 == " "
${AndIf} ${NETGEN_ARCH} == ${X64_ARCH}
Goto TclTkTixErrors
${EndIf}
${If} $2 != " "
${AndIf} ${NETGEN_ARCH} == ${WIN32_ARCH}
Goto TclTkTixErrors
${EndIf}
StrCpy $foundTclTkTix " 1 "
LogText " Tcl/Tk and Tix Packages already installed on system....skipping local installation "
ClearErrors
Return
TclTkTixErrors :
StrCpy $foundTclTkTix " 0 "
LogText " Tcl/Tk and Tix Packages not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
; ---------- Check for Togl DLLs --------
Function checkTogl
ClearErrors
SearchPath $2 Togl17.dll
IfErrors ToglErrors
Push $2
Call GetPathOnly
Pop " $R0 "
${StrContains} $2 " ${TCL_ARCH_EXT} " $R0
${If} $2 == " "
${AndIf} ${NETGEN_ARCH} == ${X64_ARCH}
Goto ToglErrors
${EndIf}
${If} $2 != " "
${AndIf} ${NETGEN_ARCH} == ${WIN32_ARCH}
Goto ToglErrors
${EndIf}
StrCpy $foundTogl " 1 "
LogText " Togl-1.7 already installed on system....skipping local installation "
ClearErrors
Return
ToglErrors :
StrCpy $foundTogl " 0 "
LogText " Togl-1.7 not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
; ---------- Check for pthreads DLLs ----
Function checkPThds
ClearErrors
${If} ${NETGEN_ARCH} == ${X64_ARCH}
SearchPath $2 pthreadVC2_64.dll
${Else}
SearchPath $2 pthreadVC2.dll
${EndIf}
IfErrors PThdsErrors
StrCpy $foundPThds " 1 "
LogText " pthread${PTHDS_ARCH_DIR} already installed on system....skipping local installation "
ClearErrors
Return
PThdsErrors :
StrCpy $foundPThds " 0 "
LogText " pthread${PTHDS_ARCH_DIR} not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
; ---------- Check for OCC DLLs ---------
; Note: Not all required OCC DLLs will be
; checked for... only a few representative
; ones.
Function checkOCC
ClearErrors
SearchPath $2 TKernel.dll
SearchPath $2 TKLCAF.dll
SearchPath $2 TKSTEP.dll
SearchPath $2 TKIGES.dll
SearchPath $2 TKBRep.dll
IfErrors OCCErrors
Push $2
Call GetPathOnly
Pop " $R0 "
${StrContains} $2 ${OCC_ARCH} $R0
${If} $2 == " "
Goto OCCErrors
${EndIf}
StrCpy $foundOCC " 1 "
LogText " OpenCascade Libraries already installed on system....skipping local installation "
ClearErrors
Return
OCCErrors :
StrCpy $foundOCC " 0 "
LogText " OpenCascade Libraries not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
; ---------- Check for Lapack/BLAS DLLs -
; Checks if the Lapack/BLAS DLLs are available
; via the PATH environment variable
Function checkLapackBlas
ClearErrors
SearchPath $2 lapack_win32.dll
SearchPath $2 blas_win32.dll
IfErrors LapackBlasErrors
StrCpy $foundLapackBlas " 1 "
LogText " Lapack / BLAS Libraries already installed on system....skipping local installation "
ClearErrors
Return
LapackBlasErrors :
StrCpy $foundLapackBlas " 0 "
LogText " Lapack / BLAS Libraries not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
2010-05-20 23:01:20 +00:00
; ---------- Check for Intel Match Kernel Libraries (MKL) DLLs -
; Checks if the MKL DLLs are available
; via the PATH environment variable
Function checkMKLLibs
ClearErrors
SearchPath $2 libiomp5md.dll
SearchPath $2 mkl_core.dll
SearchPath $2 mkl_def.dll
SearchPath $2 mkl_intel_thread.dll
SearchPath $2 msvcr71.dll
IfErrors MKLErrors
StrCpy $foundMKLLibs " 1 "
LogText " Math Kernel Libraries (MKL) already installed on system....skipping local installation "
ClearErrors
Return
MKLErrors :
StrCpy $foundMKLLibs " 0 "
LogText " Math Kernel Libraries (MKL) not found on system....installing locally "
ClearErrors
FunctionEnd
; ---------------------------------------
2010-03-22 22:51:11 +00:00
; ---------- Func1 - Get Path Only ------
Function GetPathOnly
Exch $R0
Push $R1
Push $R2
StrLen $R1 $R0
IntOp $R1 $R1 + 1
loop :
IntOp $R1 $R1 - 1
StrCpy $R2 $R0 1 $R1
IntCmp $R1 1 exit2
StrCmp $R2 " \ " exit1 ; Look for the first backslash from the end of string
Goto loop
exit1 :
StrCpy $R0 $R0 $R1
exit2 :
Pop $R2
Pop $R1
Exch $R0
FunctionEnd
; ---------------------------------------