vcpkg/ports/vcpkg-get-python/vcpkg-port-config.cmake

58 lines
2.1 KiB
CMake

include_guard(GLOBAL)
function(vcpkg_get_vcpkg_installed_python out_python)
if(NOT VCPKG_TARGET_IS_WINDOWS)
# vcpkg installed python on !windows works as normal python would work.
set(${out_python} "${CURRENT_HOST_INSTALLED_DIR}/tools/python3/python3" PARENT_SCOPE)
return()
endif()
if(DEFINED CACHE{z_vcpkg_get_vcpkg_installed_python})
set(${out_python} "${z_vcpkg_get_vcpkg_installed_python}" PARENT_SCOPE)
return()
endif()
# On windows python is unable to lookup DLLs, so a manual venv is created
set(python_home "${CURRENT_HOST_INSTALLED_DIR}/tools/python3")
set(python_base "${CURRENT_BUILDTREES_DIR}/python-${TARGET_TRIPLET}")
file(GLOB python_files LIST_DIRECTORIES false "${python_home}/*")
if(EXISTS "${CURRENT_HOST_INSTALLED_DIR}/tools/python3/DLLs")
file(COPY "${CURRENT_HOST_INSTALLED_DIR}/tools/python3/DLLs/" DESTINATION "${python_base}/DLLs")
endif()
file(COPY ${python_files} DESTINATION "${python_base}/Scripts")
file(MAKE_DIRECTORY "${python_base}/Lib/site-packages")
file(WRITE "${python_base}/pyvenv.cfg"
"
home = ${python_home}
include-system-site-packages = false
version = ${PYTHON3_VERSION}
executable = ${python_home}/python.exe
command = ${python_home}/python.exe -m venv ${python_base}
"
)
file(WRITE "${python_base}/Lib/site-packages/sitecustomize.py"
"
import os
import sys
from pathlib import Path
import site
#enable direct lookup of installed site-packages without the need to copy them
site.addsitedir(sys.base_prefix + '/Lib/site-packages')
vcpkg_bin_path = Path(sys.base_prefix + '/../../bin')
if vcpkg_bin_path.is_dir():
os.add_dll_directory(vcpkg_bin_path)
"
)
file(COPY "${CURRENT_INSTALLED_DIR}/${PYTHON3_INCLUDE}/" DESTINATION "${python_base}/include")
set(suffix "PCBuild/AMD64") # TODO: ask python for the correct suffix.
file(COPY "${CURRENT_INSTALLED_DIR}/lib/python${PYTHON3_VERSION_MAJOR}${PYTHON3_VERSION_MINOR}.lib" DESTINATION "${python_base}/${suffix}")
set(${out_python} "${python_base}/Scripts/python.exe" PARENT_SCOPE)
set(z_vcpkg_get_vcpkg_installed_python "${python_base}/Scripts/python.exe" CACHE INTERNAL "")
endfunction()