Raw File
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
back to top