]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/python3/portfile.cmake
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / python3 / portfile.cmake
1 if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic AND VCPKG_CRT_LINKAGE STREQUAL static)
2 message(STATUS "Warning: Dynamic library with static CRT is not supported. Building static library.")
3 set(VCPKG_LIBRARY_LINKAGE static)
4 endif()
5
6 set(PYTHON_VERSION_MAJOR 3)
7 set(PYTHON_VERSION_MINOR 9)
8 set(PYTHON_VERSION_PATCH 2)
9 set(PYTHON_VERSION ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH})
10
11 set(PATCHES
12 0002-use-vcpkg-zlib.patch
13 0003-devendor-external-dependencies.patch
14 0004-dont-copy-vcruntime.patch
15 0005-only-build-required-projects.patch
16 0006-fix-duplicate-symbols.patch
17 )
18 if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
19 list(PREPEND PATCHES 0001-static-library.patch)
20 endif()
21
22 # Python 3.9 removed support for Windows 7. This patch re-adds support for Windows 7 and is therefore
23 # required to build this port on Windows 7 itself due to Python using itself in its own build system.
24 if("deprecated-win7-support" IN_LIST FEATURES)
25 list(APPEND PATCHES 0007-restore-support-for-windows-7.patch)
26 message(WARNING "Windows 7 support is deprecated and may be removed at any time.")
27 elseif(VCPKG_TARGET_IS_WINDOWS AND CMAKE_SYSTEM_VERSION EQUAL 6.1)
28 message(FATAL_ERROR "python3 requires the feature deprecated-win7-support when building on Windows 7.")
29 endif()
30
31 vcpkg_from_github(
32 OUT_SOURCE_PATH SOURCE_PATH
33 REPO python/cpython
34 REF v${PYTHON_VERSION}
35 SHA512 f13c7e50d2c7c00e67b801b0bbb6ab6a8b6bd16c706b3bdd9d2186de3830f0043d0b95d7993d65a169adc9097738906c07727f0df49cd2fb2916bdf0456896b6
36 HEAD_REF master
37 PATCHES ${PATCHES}
38 )
39
40 if(VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
41 # Due to the way Python handles C extension modules on Windows, a static python core cannot
42 # load extension modules.
43 string(COMPARE EQUAL ${VCPKG_LIBRARY_LINKAGE} "dynamic" PYTHON_ALLOW_EXTENSIONS)
44 if(PYTHON_ALLOW_EXTENSIONS)
45 find_library(BZ2_RELEASE NAMES bz2 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
46 find_library(BZ2_DEBUG NAMES bz2d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
47 find_library(CRYPTO_RELEASE NAMES libcrypto PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
48 find_library(CRYPTO_DEBUG NAMES libcrypto PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
49 find_library(EXPAT_RELEASE NAMES libexpat libexpatMD PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
50 find_library(EXPAT_DEBUG NAMES libexpatd libexpatdMD PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
51 find_library(FFI_RELEASE NAMES libffi PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
52 find_library(FFI_DEBUG NAMES libffi PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
53 find_library(LZMA_RELEASE NAMES lzma PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
54 find_library(LZMA_DEBUG NAMES lzmad PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
55 find_library(SQLITE_RELEASE NAMES sqlite3 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
56 find_library(SQLITE_DEBUG NAMES sqlite3 PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
57 find_library(SSL_RELEASE NAMES libssl PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
58 find_library(SSL_DEBUG NAMES libssl PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
59 else()
60 message(STATUS "WARNING: Static builds of Python will not have C extension modules available.")
61 endif()
62 find_library(ZLIB_RELEASE NAMES zlib PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
63 find_library(ZLIB_DEBUG NAMES zlib zlibd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
64
65 configure_file(${SOURCE_PATH}/PC/pyconfig.h ${SOURCE_PATH}/PC/pyconfig.h)
66 configure_file(${CMAKE_CURRENT_LIST_DIR}/python_vcpkg.props.in ${SOURCE_PATH}/PCbuild/python_vcpkg.props)
67 configure_file(${CMAKE_CURRENT_LIST_DIR}/openssl.props.in ${SOURCE_PATH}/PCbuild/openssl.props)
68 file(WRITE ${SOURCE_PATH}/PCbuild/libffi.props
69 "<?xml version='1.0' encoding='utf-8'?>
70 <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' />"
71 )
72
73 if(PYTHON_ALLOW_EXTENSIONS)
74 set(OPTIONS
75 "/p:IncludeExtensions=true"
76 "/p:IncludeExternals=true"
77 "/p:IncludeCTypes=true"
78 "/p:IncludeSSL=true"
79 "/p:IncludeTkinter=false"
80 "/p:IncludeTests=false"
81 "/p:ForceImportBeforeCppTargets=${SOURCE_PATH}/PCbuild/python_vcpkg.props"
82 )
83 else()
84 set(OPTIONS
85 "/p:IncludeExtensions=false"
86 "/p:IncludeExternals=false"
87 "/p:IncludeTests=false"
88 "/p:ForceImportBeforeCppTargets=${SOURCE_PATH}/PCbuild/python_vcpkg.props"
89 )
90 endif()
91 string(REPLACE "\\" "" WindowsSDKVersion "$ENV{WindowsSDKVersion}")
92 list(APPEND OPTIONS
93 "/p:WindowsTargetPlatformVersion=${WindowsSDKVersion}"
94 "/p:DefaultWindowsSDKVersion=${WindowsSDKVersion}"
95 )
96 if(VCPKG_TARGET_IS_UWP)
97 list(APPEND OPTIONS "/p:IncludeUwp=true")
98 else()
99 list(APPEND OPTIONS "/p:IncludeUwp=false")
100 endif()
101 if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
102 list(APPEND OPTIONS "/p:_VcpkgPythonLinkage=DynamicLibrary")
103 else()
104 list(APPEND OPTIONS "/p:_VcpkgPythonLinkage=StaticLibrary")
105 endif()
106
107 # _freeze_importlib.exe is run as part of the build process, so make sure the required dynamic libs are available.
108 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
109 vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}/bin")
110 endif()
111 if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
112 vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}/debug/bin")
113 endif()
114
115 vcpkg_install_msbuild(
116 SOURCE_PATH ${SOURCE_PATH}
117 PROJECT_SUBPATH "PCbuild/pcbuild.proj"
118 OPTIONS ${OPTIONS}
119 LICENSE_SUBPATH "LICENSE"
120 SKIP_CLEAN
121 )
122
123 # The extension modules must be placed in the DLLs directory, so we can't use vcpkg_copy_tools()
124 if(PYTHON_ALLOW_EXTENSIONS)
125 file(GLOB_RECURSE PYTHON_EXTENSIONS "${CURRENT_BUILDTREES_DIR}/*.pyd")
126 list(FILTER PYTHON_EXTENSIONS EXCLUDE REGEX [[.*_d\.pyd]])
127 file(COPY ${PYTHON_EXTENSIONS} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs")
128 vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs")
129 file(REMOVE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.dll")
130 endif()
131
132 file(COPY "${SOURCE_PATH}/Include/" "${SOURCE_PATH}/PC/pyconfig.h"
133 DESTINATION "${CURRENT_PACKAGES_DIR}/include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}"
134 FILES_MATCHING PATTERN *.h
135 )
136 file(COPY "${SOURCE_PATH}/Lib" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
137
138 # Remove any extension libraries and other unversioned binaries that could conflict with the python2 port.
139 # You don't need to link against these anyway.
140 file(GLOB PYTHON_LIBS
141 "${CURRENT_PACKAGES_DIR}/lib/*.lib"
142 "${CURRENT_PACKAGES_DIR}/debug/lib/*.lib"
143 )
144 list(FILTER PYTHON_LIBS EXCLUDE REGEX [[python[0-9]*(_d)?\.lib$]])
145 file(GLOB PYTHON_INSTALLERS "${CURRENT_PACKAGES_DIR}/tools/${PORT}/wininst-*.exe")
146 file(REMOVE ${PYTHON_LIBS} ${PYTHON_INSTALLERS})
147
148 if(PYTHON_ALLOW_EXTENSIONS)
149 message(STATUS "Bootstrapping pip")
150 vcpkg_execute_required_process(COMMAND python -m ensurepip
151 WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}"
152 LOGNAME "ensurepip-${TARGET_TRIPLET}"
153 )
154 endif()
155
156 vcpkg_clean_msbuild()
157 else()
158 set(OPTIONS
159 "--with-openssl=${CURRENT_INSTALLED_DIR}"
160 "--with-ensurepip"
161 [[--with-suffix=""]]
162 "--with-system-expat"
163 )
164 if(VCPKG_TARGET_IS_OSX)
165 list(APPEND OPTIONS "LIBS=-liconv -lintl")
166 endif()
167
168 vcpkg_configure_make(
169 SOURCE_PATH ${SOURCE_PATH}
170 OPTIONS ${OPTIONS}
171 OPTIONS_DEBUG "--with-pydebug"
172 )
173 vcpkg_install_make(ADD_BIN_TO_PATH INSTALL_TARGET altinstall)
174
175 file(COPY "${CURRENT_PACKAGES_DIR}/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
176 file(COPY "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
177
178 # Makefiles, c files, __pycache__, and other junk.
179 file(GLOB PYTHON_LIB_DIRS LIST_DIRECTORIES true
180 "${CURRENT_PACKAGES_DIR}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/*"
181 "${CURRENT_PACKAGES_DIR}/debug/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/*")
182 list(FILTER PYTHON_LIB_DIRS INCLUDE REGEX [[config-[0-9].*.*]])
183 file(REMOVE_RECURSE ${PYTHON_LIB_DIRS})
184
185 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin")
186 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin")
187 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
188 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
189 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}d")
190 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/${PORT}/man1")
191 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
192 file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug")
193
194 file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME "copyright")
195 endif()
196
197 file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/usage" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}")
198
199 function(_generate_finder)
200 cmake_parse_arguments(PythonFinder "NO_OVERRIDE" "DIRECTORY;PREFIX" "" ${ARGN})
201 configure_file(
202 "${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake"
203 "${CURRENT_PACKAGES_DIR}/share/${PythonFinder_DIRECTORY}/vcpkg-cmake-wrapper.cmake"
204 @ONLY
205 )
206 endfunction()
207
208 message(STATUS "Installing cmake wrappers")
209 _generate_finder(DIRECTORY "python" PREFIX "Python")
210 _generate_finder(DIRECTORY "python3" PREFIX "Python3")
211 _generate_finder(DIRECTORY "pythoninterp" PREFIX "PYTHON" NO_OVERRIDE)