Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
93 changes: 48 additions & 45 deletions scripts/windows/PythonHelpers.nsh
Original file line number Diff line number Diff line change
@@ -1,29 +1,31 @@

!include TextFunc.nsh

# ${GetPythonInstall} VERSION $(user_var: INSTALL_PREFIX) $(user_var: INSTALL_MODE)
# ${GetPythonInstallPEP514} COMPANY TAG $(user_var: INSTALL_PREFIX) $(user_var: INSTALL_MODE)
#
# Retrive the registered install prefix for Python
# - input: VERSION is a Major.Minor version number
# Retrive the registered install prefix for Python (as documented by PEP 514)
# - input: COMPANY distibutor (use PythonCore for default pyhton.org
# distributed python)
# - input: TAG environemnt tag (e.g 3.6 or 3.6-32; sys.winver for PythonCore)
# - output: INSTALL_PREFIX installation path (e.g C:\Python35) or empty if
# not found
# - output: INSTALL_MODE
# 1 if Python was installed for all users or 0 if
# current user only (-1 when not installed).
# 1 if Python was installed for all users, 0 if
# current user only or -1 when not found.
#
# Example
# -------
# ${GetPythonInstall} 3.5 $PythonDir $InstallMode

# ${GetPythonInstallPEP14} PythonCore 3.5 $PythonDir $InstallMode
# ${GetPythonInstallPEP14} ContinuumAnalytics Anaconda36-64 $1 $2

!macro __GET_PYTHON_INSTALL VERSION INSTALL_PREFIX INSTALL_MODE
!macro __GET_PYTHON_INSTALL_PEP514 COMPANY TAG INSTALL_PREFIX INSTALL_MODE
ReadRegStr ${INSTALL_PREFIX} \
HKCU Software\Python\PythonCore\${VERSION}\InstallPath ""
HKCU Software\Python\${COMPANY}\${TAG}\InstallPath ""
${If} ${INSTALL_PREFIX} != ""
StrCpy ${INSTALL_MODE} 0
${Else}
ReadRegStr ${INSTALL_PREFIX} \
HKLM Software\Python\PythonCore\${VERSION}\InstallPath ""
HKLM Software\Python\${COMPANY}\${TAG}\InstallPath ""
${If} ${INSTALL_PREFIX} != ""
StrCpy ${INSTALL_MODE} 1
${Else}
Expand All @@ -43,56 +45,55 @@
Pop $0
${EndIf}
!macroend
!define GetPythonInstall "!insertmacro __GET_PYTHON_INSTALL"
!define GetPythonInstallPEP514 "!insertmacro __GET_PYTHON_INSTALL_PEP514"


# ${GetPythonInstall} VERSION BITS $(user_var: INSTALL_PREFIX) $(user_var: INSTALL_MODE)
#
# Retrive the registered install prefix for Python
# - input: VERSION is a Major.Minor version number
# - input: BITS is 32 or 64 constant speciying which python arch to lookup
# - output: INSTALL_PREFIX installation path (e.g C:\Python35) or empty if
# not found
# - output: INSTALL_MODE
# 1 if Python was installed for all users, 0 if
# current user only or -1 when not found.
#
# Example
# -------
# ${GetPythonInstall} 3.5 64 $PythonDir $InstallMode

!macro __GET_PYTHON_INSTALL VERSION BITS INSTALL_PREFIX INSTALL_MODE
!if ${VERSION} < 3.5
!define __TAG ${VERSION}
!else if ${BITS} == 64
!define __TAG ${VERSION}
!else
!define __TAG ${VERSION}-${BITS}
!endif
${GetPythonInstallPEP514} PythonCore ${__TAG} ${INSTALL_PREFIX} ${INSTALL_MODE}
!undef __TAG
!macroend
!define GetPythonInstall "!insertmacro __GET_PYTHON_INSTALL"

# ${GetAnacondaInstall} VERSIONTAG BITS $(user_var: INSTALL_PREFIX) $(user_var: INSTALL_MODE)
#
# Retrive the registered install prefix for Python
# - input: VERSIONTAG is a MajorMinor version number (no dots)
# - input: BITS 34 or 64 (constant!)
# - input: BITS 34 or 64 (constant)
# - output: INSTALL_PREFIX installation path (e.g C:\Python35)
# - output: INSTALL_MODE
# 1 if Python was installed for all users or 0 if
# current user only (-1 when not installed).
#
# Example
# -------
# ${GetPythonInstall} 3.5 $PythonDir $InstallMode
# ${GetAnacondaInstall} 35 64 $PythonDir $InstallMode

!macro __GET_CONDA_INSTALL VERSION_TAG BITS INSTALL_PREFIX INSTALL_MODE
!define __CONDA_REG_PREFIX \
Software\Python\ContinuumAnalytics\Anaconda${VERSION_TAG}-${BITS}

!if "${BITS}" != 32
!if "${BITS}" != 64
!error "BITS must be a 32 or 64 constant"
!endif
!endif
ReadRegStr ${INSTALL_PREFIX} HKCU ${__CONDA_REG_PREFIX}\InstallPath ""
${If} ${INSTALL_PREFIX} != ""
StrCpy ${INSTALL_MODE} 0
${Else}
ReadRegStr ${INSTALL_PREFIX} HKLM ${__CONDA_REG_PREFIX}\InstallPath ""
${If} ${INSTALL_PREFIX} != ""
StrCpy ${INSTALL_MODE} 1
${Else}
StrCpy ${INSTALL_MODE} 0
${EndIf}
${EndIf}

${If} ${INSTALL_PREFIX} != ""
# Strip (single) trailing '\' if present
Push $0
StrCpy $0 ${INSTALL_PREFIX} "" -1
${If} $0 == "\"
StrLen $0 ${INSTALL_PREFIX}
IntOp $0 $0 - 1
StrCpy ${INSTALL_PREFIX} ${INSTALL_PREFIX} $0 0
${EndIf}
Pop $0
${EndIf}
!undef __CONDA_REG_PREFIX
!define __TAG Anaconda${VERSION_TAG}-${BITS}
${GetPythonInstallPEP514} ContinuumAnalytics ${__TAG} ${INSTALL_PREFIX} ${INSTALL_MODE}
!undef __TAG
!macroend
!define GetAnacondaInstall "!insertmacro __GET_CONDA_INSTALL"

Expand All @@ -118,6 +119,8 @@
ReadRegStr $2 ${ROOT_KEY} \
"${__CONDA_REG_PREFIX}\$1\InstallPath" ""
${If} $2 != ""
${AndIf} ${FileExists} "$2\python.exe"
${AndIf} ${FileExists} "$2\Scripts\conda.exe"
${LogWrite} "${ROOT_KEY} ${__CONDA_REG_PREFIX}\$1\InstallPath: $2"
Exch $2 # <stack> $0, $1, $2, "prefix"
${EndIf}
Expand Down
7 changes: 7 additions & 0 deletions scripts/windows/condainstall.bat
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,13 @@ rem # with a local package, we need to create it manually.
echo @echo off > "%PREFIX%\Scripts\conda.bat"
echo call "%CONDA%" %%* >> "%PREFIX%\Scripts\conda.bat"

rem # same for activate.bat
rem #
for %%f in ( "%CONDA%" ) do ( set "CONDA_DIR=%%~dpf" )
echo @echo off > "%PREFIX%\Scripts\activate.bat"
echo call "%CONDA_DIR%\activate.bat" %%* >> "%PREFIX%\Scripts\activate.bat"
set CONDA_DIR=

rem # Create .condarc file that includes conda-forge channel
rem # We need it so add-ons can be installed from conda-forge
echo Appending conda-forge channel
Expand Down
12 changes: 11 additions & 1 deletion scripts/windows/orange-conda.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -171,6 +171,10 @@ Var StartMenuFolder
# - no check box to enable/disable start menu creation
# (is controled by the Components Page)
!define MUI_STARTMENUPAGE_NODISABLE
# Registry key path where the selected start folder name is stored
!define MUI_STARTMENUPAGE_REGISTRY_ROOT SHELL_CONTEXT
!define MUI_STARTMENUPAGE_REGISTRY_KEY ${INSTALL_SETTINGS_KEY}
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuFolder
!insertmacro MUI_PAGE_STARTMENU StartMenuPageID $StartMenuFolder

# Install Files page:
Expand Down Expand Up @@ -574,6 +578,11 @@ Section "Start Menu Shortcuts" SectionStartMenu
"$SMPROGRAMS\$StartMenuFolder\${LAUNCHER_SHORTCUT_NAME}.lnk" \
"$PythonExecPrefix\pythonw.exe" "-m Orange.canvas" \
"$PythonPrefix\share\orange3\icons\orange.ico" 0

# A utility shortcut for activating the environment
CreateShortCut \
"$SMPROGRAMS\$StartMenuFolder\${APPNAME} Command Prompt.lnk" \
"%COMSPEC%" '/S /K ""$PythonScriptsPrefix\activate.bat" "$InstDir""'
${EndIf}
!insertmacro MUI_STARTMENU_WRITE_END
SectionEnd
Expand Down Expand Up @@ -604,6 +613,7 @@ Function un.Shortcuts
${LogWrite} "Removing Start Menu Shortcuts (from $SMPROGRAMS\$0)"
DetailPrint "Removing Start Menu shortcuts"
Delete "$SMPROGRAMS\$0\${LAUNCHER_SHORTCUT_NAME}.lnk"
Delete "$SMPROGRAMS\$0\${APPNAME} Command Prompt.lnk"
RMDir "$SMPROGRAMS\$0"
${EndIf}
${LogWrite} "Removing Desktop shortcurt"
Expand Down Expand Up @@ -743,8 +753,8 @@ Section Uninstall
${LogWrite} " PythonPrefix: $PythonPrefix"
${LogWrite} " BasePythonPrefix: $BasePythonPrefix"

Call un.Register
Call un.Shortcuts
Call un.Register
Call un.Launchers
Call un.InstallPackages
Call un.Environment
Expand Down
14 changes: 11 additions & 3 deletions scripts/windows/orange-install.nsi
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,10 @@ Var StartMenuFolder
# - no check box to enable/disable start menu creation
# (is controled by the Components Page)
!define MUI_STARTMENUPAGE_NODISABLE
# Registry key path where the selected start folder name is stored
!define MUI_STARTMENUPAGE_REGISTRY_ROOT SHELL_CONTEXT
!define MUI_STARTMENUPAGE_REGISTRY_KEY ${INSTALL_SETTINGS_KEY}
!define MUI_STARTMENUPAGE_REGISTRY_VALUENAME StartMenuFolder
!insertmacro MUI_PAGE_STARTMENU StartMenuPageID $StartMenuFolder

# Install Files page:
Expand Down Expand Up @@ -446,7 +450,7 @@ Section "Python ${PYTHON_VERSION} (${BITS} bit)" SectionPython
Abort "Python installation failed (error value: $0)"
${EndIf}
${GetPythonInstall} \
"${PYMAJOR}.${PYMINOR}" $BasePythonPrefix $PythonInstallMode
"${PYMAJOR}.${PYMINOR}" ${BITS} $BasePythonPrefix $PythonInstallMode
${If} $BasePythonPrefix == ""
Abort "Python installation failed (cannot determine Python \
installation prefix)."
Expand Down Expand Up @@ -639,6 +643,9 @@ Function un.Shortcuts
${LogWrite} "Removing Start Menu Shortcuts (from $SMPROGRAMS\$0)"
DetailPrint "Removing Start Menu shortcuts"
Delete "$SMPROGRAMS\$0\${LAUNCHER_SHORTCUT_NAME}.lnk"
!if ${PYINSTALL_TYPE} == Normal
Delete "$SMPROGRAMS\$0\${APPNAME} Command Prompt.lnk"
!endif
RMDir "$SMPROGRAMS\$0"
${EndIf}
${LogWrite} "Removing Desktop shortcurt"
Expand Down Expand Up @@ -780,8 +787,8 @@ Section Uninstall
${LogWrite} " PythonPrefix: $PythonPrefix"
${LogWrite} " BasePythonPrefix: $BasePythonPrefix"

Call un.Register
Call un.Shortcuts
Call un.Register
Call un.Launchers
Call un.InstallPackages
Call un.Environment
Expand Down Expand Up @@ -811,7 +818,8 @@ Function .onInit
!insertmacro MULTIUSER_INIT

!if ${PYINSTALL_TYPE} == Normal
${GetPythonInstall} ${PYMAJOR}.${PYMINOR} $BasePythonPrefix $PythonInstallMode
${GetPythonInstall} ${PYMAJOR}.${PYMINOR} ${BITS} \
$BasePythonPrefix $PythonInstallMode
${LogWrite} "Python Prefix: $BasePythonPrefix"
${LogWrite} "Python Install Type: $PythonInstallMode"
${If} $BasePythonPrefix != ""
Expand Down