script_cgal.nsi
;===========================
; Copyright 2007, 2008 GeometryFactory (France)
; Author: Andreas Fabri (andreas.fabri@geometryfactrory.com), Fernando Cacciola (fernando.cacciola@geometryfactrory.com)
;============================
; Some portions of this file have been derived from "boost.nsi", the Boost Windows Installer, contributed by www.boost-consulting.org.
;
; Copyright 2006 Daniel Wallin
; Copyright 2006 Eric Niebler
; Distributed under the Boost Software License, Version 1.0. (See
; accompanying file LICENSE_1_0.txt or copy at
; http://www.boost.org/LICENSE_1_0.txt)
;============================
!include "MUI.nsh"
!include "Sections.nsh"
!include "LogicLib.nsh"
!include "Locate.nsh"
!include "WriteEnvStr.nsh"
!include "EnvVarUpdate.nsh"
!include "x64.nsh"
;!define DebugLog
!ifdef DebugLog
!include "TextLog.nsh"
!endif
!include "script_cgal.nsh"
!define CGAL_SRC "CGAL-4.8"
!define FTP_SRC "https://cgal.geometryfactory.com/CGAL/precompiled_libs/"
;--------------------------------
; General
;--------------------------------
;Name and file
Name "${CGAL_SRC}"
!ifdef FetchLocal
OutFile "${CGAL_SRC}-Full-Setup.exe"
!else
OutFile "${CGAL_SRC}-Setup.exe"
!endif
;Default installation folder: C:\dev\CGAL-4.8
; See also .onInit
Installdir ""
;Get installation folder from registry if available
InstallDirRegKey HKCU "Software\${CGAL_SRC}" ""
BrandingText "The CGAL Project and GeometryFactory - Installer created with NSIS."
VIProductVersion "4.8.0.0"
VIAddVersionKey "ProductName" "CGAL Windows Installer"
VIAddVersionKey "CompanyName" "The CGAL Project and GeometryFactory"
VIAddVersionKey "LegalCopyright" "© The CGAL Project and GeometryFactory"
VIAddVersionKey "FileDescription" "Windows Installer for CGAL"
VIAddVersionKey "FileVersion" "4.8"
;--------------------------------
; Variables
;--------------------------------
Var SetCGAL_DIR
Var RegLoc
Var Add_GMP_LIB_DIR_to_PATH
;--------------------------------
; Interface Settings
;--------------------------------
!define MUI_ICON "cgal.ico"
!define MUI_UNICON "cgal.ico"
!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP_NOSTRETCH
!define MUI_HEADERIMAGE_UNBITMAP_NOSTRETCH
!define MUI_HEADERIMAGE_BITMAP "cgal_very_small_FFFFFF.bmp" ; optional
!define MUI_HEADERIMAGE_UNBITMAP "cgal_very_small_FFFFFF.bmp" ; optional
!define MUI_FINISHPAGE_NOAUTOCLOSE
!define MUI_ABORTWARNING
!define MUI_WELCOMEFINISHPAGE_BITMAP Zirkel.bmp
!define MUI_WELCOMEFINISHPAGE_BITMAP_NOSTRETCH
!define MUI_UNWELCOMEFINISHPAGE_BITMAP Zirkel.bmp
!define MUI_UNWELCOMEFINISHPAGE_BITMAP_NOSTRETCH
!define MUI_COMPONENTSPAGE_SMALLDESC
!define MUI_WELCOMEPAGE_TEXT "This downloads ${CGAL_SRC} to your machine."
!define MUI_FINISHPAGE_TITLE "Downloading finished"
!define MUI_FINISHPAGE_TEXT "You have downloaded CGAL successfully. Please continue the installation, reading the installation instructions."
!define MUI_FINISHPAGE_LINK "Installation instructions"
!define MUI_FINISHPAGE_LINK_LOCATION "https://www.cgal.org/download/windows.html"
;--------------------------------
; Pages
;--------------------------------
!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_LICENSE "${CGAL_SRC}\LICENSE"
!insertmacro MUI_PAGE_COMPONENTS
; A page where the user can specify a default variant configuration (taken from the boost installer)
Page custom VariantsPage
!insertmacro MUI_PAGE_DIRECTORY
; A page where the user can check/uncheck the environment variables
; used to specify paths in vcproj files to be added.
Page custom envarsPage
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_UNPAGE_FINISH
;--------------------------------
; Languages
!insertmacro MUI_LANGUAGE "English"
;--------------------------------
; Sections
;--------------------------------
;--------------------------------
Section "!Main CGAL" MAIN_Idx
!ifndef SkipFiles
SectionIn RO
SetOutPath "$INSTDIR\auxiliary"
File /nonfatal /r "${CGAL_SRC}\auxiliary\*.*"
SetOutPath "$INSTDIR\cmake"
File /r "${CGAL_SRC}\cmake\*.*"
SetOutPath "$INSTDIR\doc_html"
File /r "${CGAL_SRC}\doc_html\*.*"
SetOutPath "$INSTDIR\include"
File /r "${CGAL_SRC}\include\*.*"
SetOutPath "$INSTDIR\lib"
File /r "${CGAL_SRC}\lib\*.*"
SetOutPath "$INSTDIR\scripts"
File /r "${CGAL_SRC}\scripts\*.*"
SetOutPath "$INSTDIR\src"
File /r "${CGAL_SRC}\src\*.*"
SetOutPath "$INSTDIR\demo\icons"
File /r "${CGAL_SRC}\demo\icons\*.*"
SetOutPath "$INSTDIR\demo\resources"
File /r "${CGAL_SRC}\demo\resources\*.*"
SetOutPath "$INSTDIR"
File "${CGAL_SRC}\AUTHORS"
File "${CGAL_SRC}\CGALConfig.cmake"
File "${CGAL_SRC}\CHANGES.md"
File "${CGAL_SRC}\CMakeLists.txt"
File "${CGAL_SRC}\INSTALL.md"
File "${CGAL_SRC}\LICENSE"
File "${CGAL_SRC}\LICENSE.FREE_USE"
File "${CGAL_SRC}\LICENSE.LGPL"
File "${CGAL_SRC}\LICENSE.GPL"
File "${CGAL_SRC}\VERSION"
File ".\cgal.ico"
!endif
; Write uninstall informations
; http://nsis.sourceforge.net/Add_uninstall_information_to_Add/Remove_Programs
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"DisplayName" "${CGAL_SRC} -- Computational Geometry Algorithms Library, version 4.8"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"UninstallString" "$\"$INSTDIR\Uninstall.exe$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"QuietUninstallString" "$\"$INSTDIR\Uninstall.exe$\" /S"
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"NoModify" 1
WriteRegDWORD HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"NoRepair" 1
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"InstallLocation" "$\"$INSTDIR$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"DisplayIcon" "$\"$INSTDIR\cgal.ico$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"Publisher" "The CGAL Project and GeometryFactory"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"URLInfoAbout" "https://www.cgal.org/"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"DisplayedVersion" "4.8.0"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"CGALUninstallRegLoc" "$RegLoc"
;Create uninstaller
WriteUninstaller "$INSTDIR\Uninstall.exe"
SectionEnd
;--------------------------------
;--------------------------------
Section "CGAL Examples and Demos" SAMPLES_Idx
!ifndef SkipFiles
SetOutPath "$INSTDIR\examples"
File /r "${CGAL_SRC}\examples\*.*"
SetOutPath "$INSTDIR\demo"
File /r "${CGAL_SRC}\demo\*.*"
!endif
SectionEnd
; Download and install GMP and MPFR binaries.
; Depend only on the platform (one variant per platform)
Section "GMP and MPFR precompiled libs" GMP_LIB_Idx
!ifndef FetchLocal
!insertmacro Install_GMP_MPFR_bin "$Platform"
!endif
SectionEnd
;--------------------------------
Section /o "HTML Manuals" DOC_Idx
!ifndef FetchLocal
!insertmacro DownloadFileFrom "https://cgal.geometryfactory.com/" "CGAL/4.8/Manual/" "cgal_manual.zip" "$INSTDIR\doc_html"
!endif
SectionEnd
Section "-Unzip"
${locate::Open} "$INSTDIR" "/D=0 /X=zip" $0
${If} $0 <> 0
${Do}
${locate::Find} $0 $1 $2 $3 $4 $5 $6
${If} "$1" != ""
ZipDLL::extractall $1 $2
Pop $7
${If} "$7" == "success"
Delete $1
${EndIf}
${EndIf}
${LoopUntil} "$1" == ""
${EndIf}
${locate::Close} $0
${locate::Unload}
SectionEnd
;--------------------------------
;Uninstaller Section
Section "Uninstall"
;ADD YOUR OWN FILES HERE...
Delete "$INSTDIR\Uninstall.exe"
RMDir /r "$INSTDIR"
ReadRegStr $RegLoc HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}" \
"CGALUninstallRegLoc"
DeleteRegKey /ifempty HKCU "Software\${CGAL_SRC}"
DeleteRegKey HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${CGAL_SRC}"
${un.EnvVarUpdate} $0 "PATH" "R" $RegLoc "$INSTDIR\auxiliary\gmp\lib"
${If} $RegLoc == HKLM
${un.DeleteEnvStr} "CGAL_DIR" 1
${Else}
${un.DeleteEnvStr} "CGAL_DIR" 0
${EndIf}
SectionEnd
;--------------------------------
;Descriptions
;Language strings
LangString DESC_MAIN ${LANG_ENGLISH} "The main components of the CGAL Library."
LangString DESC_SAMPLES ${LANG_ENGLISH} "The CGAL demos and examples, for which you need Qt 5 in order to build them (and Qt 3 for some)."
LangString DESC_GMP_LIB ${LANG_ENGLISH} "The precompiled GMP and MPFR libraries (needed for exact constructions)."
LangString DESC_DOC ${LANG_ENGLISH} "The HTML manuals."
LangString DESC_ENVSET ${LANG_ENGLISH} "already set"
;Assign language strings to sections
!insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN
!insertmacro MUI_DESCRIPTION_TEXT ${MAIN_Idx} $(DESC_MAIN)
!insertmacro MUI_DESCRIPTION_TEXT ${SAMPLES_Idx} $(DESC_SAMPLES)
!insertmacro MUI_DESCRIPTION_TEXT ${GMP_LIB_Idx} $(DESC_GMP_LIB)
!insertmacro MUI_DESCRIPTION_TEXT ${DOC_Idx} $(DESC_DOC)
!insertmacro MUI_FUNCTION_DESCRIPTION_END
;--------------------------------
; Functions
;--------------------------------
Function .onInit
# Setup the default installation dir
${If} $InstDir == "" ; /D= was not used on the command line
StrCpy $InstDir "C:\dev\${CGAL_SRC}"
${EndIf}
!ifdef DebugLog
${LogSetFileName} "${CGAL_SRC}_install_log.txt"
${LogSetOn}
!endif
StrCpy $Platform "win32"
# the plugins dir is automatically deleted when the installer exits
InitPluginsDir
File /oname=$PLUGINSDIR\splash.bmp ".\CGAL.bmp"
advsplash::show 1000 600 400 -1 $PLUGINSDIR\splash
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "variants.ini"
!insertmacro MUI_INSTALLOPTIONS_EXTRACT "environment_variables.ini"
FunctionEnd
Function .onInstSuccess
${If} $SetCGAL_DIR != ""
; RegLoc can be either HKLM (all users) or HKCU (current user).
${If} $RegLoc == HKLM
${WriteEnvStr} "CGAL_DIR" $SetCGAL_DIR 1
${Else}
${WriteEnvStr} "CGAL_DIR" $SetCGAL_DIR 0
${Endif}
${EndIf}
${If} $Add_GMP_LIB_DIR_to_PATH = 1
; Append "$INSTDIR\auxiliary\gmp\lib" to the PATH.
; RegLoc can be either HKLM (all users) or HKCU (current user).
; The return value goes to $0
${EnvVarUpdate} $0 "PATH" "A" $RegLoc "$INSTDIR\auxiliary\gmp\lib"
${EndIf}
FunctionEnd
Function VariantsPage
!insertmacro MUI_HEADER_TEXT "Select platform" "Choose the platform for precompiled libraries."
!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "variants.ini"
!insertmacro MUI_INSTALLOPTIONS_SHOW
!insertmacro MUI_INSTALLOPTIONS_READ $0 "variants.ini" "Field 1" "State"
${If} $0 = 1
StrCpy $Platform "win32"
${Else}
StrCpy $Platform "x64"
${Endif}
FunctionEnd
# Disables the env var checkbox # FN and textbox # FN+1
!macro UncheckEnvStrCheckbox FN
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "0"
!macroend
!macro CheckEnvStrCheckbox FN
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "1"
!macroend
!macro DisableEnvStrCheckbox FN
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Flags" "DISABLED"
!macroend
!macro EnableEnvStrCheckbox FN
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Flags" ""
!macroend
# Disables the env var checkbox # FN
!macro SetEnvStrValueSlot FN VAL
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "State" "${VAL}"
!macroend
!macro SetEnvStrLabel FN VAL
!insertmacro MUI_INSTALLOPTIONS_WRITE "environment_variables.ini" "Field ${FN}" "Text" "${VAL}"
!macroend
Function envarsPage
Push $0
Push $1
Push $2
Push $3
Push $4
Push $5
!insertmacro MUI_HEADER_TEXT "Setting Environment Variables" "Choose whether to set or not the following environment variables"
ReadEnvStr $1 "CGAL_DIR" # $1 = existing value for CGAL_DIR
!insertmacro SetEnvStrValueSlot 7 $INSTDIR
!insertmacro SetEnvStrValueSlot 7 $INSTDIR
${If} $1 != ""
StrCpy $3 "($(DESC_ENVSET): $1 )"
!insertmacro UncheckEnvStrCheckbox 6
!insertmacro SetEnvStrLabel 8 $3
${Endif}
SectionGetText ${GMP_LIB_Idx} $2
SectionGetFlags ${GMP_LIB_Idx} $1
IntOp $2 $1 & ${SF_SELECTED}
${If} $2 == 0
!insertmacro UncheckEnvStrCheckbox 9
!insertmacro DisableEnvStrCheckbox 9
${Else}
!insertmacro CheckEnvStrCheckbox 9
!insertmacro EnableEnvStrCheckbox 9
${Endif}
!insertmacro MUI_INSTALLOPTIONS_INITDIALOG "environment_variables.ini"
!insertmacro MUI_INSTALLOPTIONS_SHOW_RETURN
Pop $0
${If} "$0" = "success"
# PROCESSING - Installs selected environment variables
!insertmacro MUI_INSTALLOPTIONS_READ $3 "environment_variables.ini" "Field 2" "State" # $3=Is ALL USERS selected
${If} $3 == 1
StrCpy $RegLoc "HKLM"
${Else}
StrCpy $RegLoc "HKCU"
${EndIf}
!insertmacro MUI_INSTALLOPTIONS_READ $3 "environment_variables.ini" "Field 6" "State" # CGAL_DIR checkbox
!insertmacro MUI_INSTALLOPTIONS_READ $4 "environment_variables.ini" "Field 7" "State" # CGAL_DIR value
${If} $3 == 1
StrCpy $SetCGAL_DIR $4
${EndIF}
!insertmacro MUI_INSTALLOPTIONS_READ $5 "environment_variables.ini" "Field 9" "State" # Add to PATH checkbox
${If} $5 == 1
StrCpy $Add_GMP_LIB_DIR_to_PATH 1
${EndIF}
${EndIf}
Pop $5
Pop $4
Pop $3
Pop $2
Pop $1
Pop $0
FunctionEnd