aboutsummaryrefslogtreecommitdiff
path: root/ports/python3
diff options
context:
space:
mode:
authorAdam Johnson <AdamJohnso@gmail.com>2020-12-18 15:00:45 -0500
committerGitHub <noreply@github.com>2020-12-18 12:00:45 -0800
commitbdb225bc6890ac507175fe2623d7665936335781 (patch)
tree6b42b6d8b2930d329e0604645f2a60687621815c /ports/python3
parente1417916bc1ed24bacd9cbc54bd42a99f996f618 (diff)
downloadvcpkg-bdb225bc6890ac507175fe2623d7665936335781.tar.gz
vcpkg-bdb225bc6890ac507175fe2623d7665936335781.zip
[python3] Build interpreter (#14891)
Diffstat (limited to 'ports/python3')
-rw-r--r--ports/python3/0001-static-library.patch13
-rw-r--r--ports/python3/0002-static-crt.patch28
-rw-r--r--ports/python3/0002-use-vcpkg-zlib.patch39
-rw-r--r--ports/python3/0003-devendor-external-dependencies.patch117
-rw-r--r--ports/python3/0004-dont-copy-vcruntime.patch26
-rw-r--r--ports/python3/0005-only-build-required-projects.patch60
-rw-r--r--ports/python3/0006-fix-duplicate-symbols.patch39
-rw-r--r--ports/python3/CONTROL8
-rw-r--r--ports/python3/openssl.props.in14
-rw-r--r--ports/python3/portfile.cmake386
-rw-r--r--ports/python3/python_vcpkg.props.in35
-rw-r--r--ports/python3/vcpkg.json32
12 files changed, 526 insertions, 271 deletions
diff --git a/ports/python3/0001-static-library.patch b/ports/python3/0001-static-library.patch
index e0824849a..f7d46d094 100644
--- a/ports/python3/0001-static-library.patch
+++ b/ports/python3/0001-static-library.patch
@@ -1,16 +1,16 @@
-From dffd6c572fb60f955bf3d98a87e5739163ab8f3f Mon Sep 17 00:00:00 2001
+From 4bd06273a9ed63f17966f113dc61a6051bad8b86 Mon Sep 17 00:00:00 2001
From: Adam Johnson <AdamJohnso@gmail.com>
Date: Thu, 28 May 2020 17:25:21 -0400
-Subject: [PATCH 1/2] static library
+Subject: [PATCH 1/6] static library
builds the pythoncore as a static library instead of a DLL
---
- PC/pyconfig.h | 6 ++++++
+ PC/pyconfig.h | 7 +++++++
PCbuild/pythoncore.vcxproj | 16 ++++++++++++++--
- 2 files changed, 20 insertions(+), 2 deletions(-)
+ 2 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
-index 02216b5068..d359c884e2 100644
+index 02216b5068..7e0ba881a5 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -252,6 +252,7 @@ typedef int pid_t;
@@ -21,7 +21,7 @@ index 02216b5068..d359c884e2 100644
#if !defined(MS_NO_COREDLL) && !defined(Py_NO_ENABLE_SHARED)
# define Py_ENABLE_SHARED 1 /* standard symbol for shared library */
# define MS_COREDLL /* deprecated old symbol */
-@@ -277,6 +278,11 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
+@@ -277,6 +278,12 @@ Py_NO_ENABLE_SHARED to find out. Also support MS_NO_COREDLL for b/w compat */
# endif /* _DEBUG */
# endif /* _MSC_VER */
# endif /* Py_BUILD_CORE */
@@ -30,6 +30,7 @@ index 02216b5068..d359c884e2 100644
+# pragma comment(lib, "version.lib")
+# pragma comment(lib, "shlwapi.lib")
+# pragma comment(lib, "ws2_32.lib")
++# pragma comment(lib, "pathcch.lib")
#endif /* MS_COREDLL */
#if defined(MS_WIN64)
diff --git a/ports/python3/0002-static-crt.patch b/ports/python3/0002-static-crt.patch
deleted file mode 100644
index 5044507ec..000000000
--- a/ports/python3/0002-static-crt.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 28fe1e90fc4d34381553b7faf2f4c331bcaef669 Mon Sep 17 00:00:00 2001
-From: Adam Johnson <AdamJohnso@gmail.com>
-Date: Thu, 28 May 2020 17:36:31 -0400
-Subject: [PATCH 2/2] static crt
-
-changes crt linkage of pythoncore to static.
----
- PCbuild/pythoncore.vcxproj | 4 ++++
- 1 file changed, 4 insertions(+)
-
-diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
-index dbe236829a..1a4ddb5cea 100644
---- a/PCbuild/pythoncore.vcxproj
-+++ b/PCbuild/pythoncore.vcxproj
-@@ -104,6 +104,10 @@
- <AdditionalIncludeDirectories Condition="$(IncludeExternals)">$(zlibDir);%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
- <PreprocessorDefinitions>_USRDLL;Py_BUILD_CORE;Py_BUILD_CORE_BUILTIN;MS_DLL_ID="$(SysWinVer)";%(PreprocessorDefinitions)</PreprocessorDefinitions>
- <PreprocessorDefinitions Condition="$(IncludeExternals)">_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
-+ <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">MultiThreadedDebug</RuntimeLibrary>
-+ <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">MultiThreadedDebug</RuntimeLibrary>
-+ <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MultiThreaded</RuntimeLibrary>
-+ <RuntimeLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MultiThreaded</RuntimeLibrary>
- </ClCompile>
- <Link>
- <AdditionalDependencies>version.lib;shlwapi.lib;ws2_32.lib;pathcch.lib;%(AdditionalDependencies)</AdditionalDependencies>
---
-2.28.0.windows.1
-
diff --git a/ports/python3/0002-use-vcpkg-zlib.patch b/ports/python3/0002-use-vcpkg-zlib.patch
new file mode 100644
index 000000000..c7f9dd60e
--- /dev/null
+++ b/ports/python3/0002-use-vcpkg-zlib.patch
@@ -0,0 +1,39 @@
+From 196555707236f4387875749f66620fb519166963 Mon Sep 17 00:00:00 2001
+From: Adam Johnson <AdamJohnso@gmail.com>
+Date: Wed, 9 Sep 2020 15:20:36 -0400
+Subject: [PATCH 2/6] use vcpkg zlib
+
+building without zlib is not a supported configuration, per the warning
+messages.
+---
+ PCbuild/pythoncore.vcxproj | 6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
+index dbe236829a..5f30a35eb3 100644
+--- a/PCbuild/pythoncore.vcxproj
++++ b/PCbuild/pythoncore.vcxproj
+@@ -507,8 +507,10 @@
+ <ClCompile Include="..\Python\thread.c" />
+ <ClCompile Include="..\Python\traceback.c" />
+ </ItemGroup>
+- <ItemGroup Condition="$(IncludeExternals)">
++ <ItemGroup>
+ <ClCompile Include="..\Modules\zlibmodule.c" />
++ </ItemGroup>
++ <ItemGroup Condition="false">
+ <ClCompile Include="$(zlibDir)\adler32.c" />
+ <ClCompile Include="$(zlibDir)\compress.c" />
+ <ClCompile Include="$(zlibDir)\crc32.c" />
+@@ -556,7 +558,7 @@
+ <Target Name="_WarnAboutToolset" BeforeTargets="PrepareForBuild" Condition="$(PlatformToolset) != 'v140' and $(PlatformToolset) != 'v141' and $(PlatformToolset) != 'v142'">
+ <Warning Text="Toolset $(PlatformToolset) is not used for official builds. Your build may have errors or incompatibilities." />
+ </Target>
+- <Target Name="_WarnAboutZlib" BeforeTargets="PrepareForBuild" Condition="!$(IncludeExternals)">
++ <Target Name="_WarnAboutZlib" BeforeTargets="PrepareForBuild" Condition="false">
+ <Warning Text="Not including zlib is not a supported configuration." />
+ </Target>
+
+--
+2.28.0.windows.1
+
diff --git a/ports/python3/0003-devendor-external-dependencies.patch b/ports/python3/0003-devendor-external-dependencies.patch
new file mode 100644
index 000000000..25e3a1489
--- /dev/null
+++ b/ports/python3/0003-devendor-external-dependencies.patch
@@ -0,0 +1,117 @@
+From 6c5c3793cbc6ba2a1d0d623a2bdaa9c2125be516 Mon Sep 17 00:00:00 2001
+From: Adam Johnson <AdamJohnso@gmail.com>
+Date: Wed, 9 Sep 2020 15:24:38 -0400
+Subject: [PATCH 3/6] devendor external dependencies
+
+externally fetched libraries may cause linker errors resulting from
+duplicate symbols in downstream projects.
+---
+ PCbuild/_bz2.vcxproj | 4 +++-
+ PCbuild/_lzma.vcxproj | 5 ++---
+ PCbuild/_sqlite3.vcxproj | 2 +-
+ PCbuild/_ssl.vcxproj | 2 +-
+ PCbuild/pyexpat.vcxproj | 6 ++++--
+ 5 files changed, 11 insertions(+), 8 deletions(-)
+
+diff --git a/PCbuild/_bz2.vcxproj b/PCbuild/_bz2.vcxproj
+index 3fe95fbf83..6b12e8818e 100644
+--- a/PCbuild/_bz2.vcxproj
++++ b/PCbuild/_bz2.vcxproj
+@@ -101,6 +101,8 @@
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\Modules\_bz2module.c" />
++ </ItemGroup>
++ <ItemGroup Condition="false">
+ <ClCompile Include="$(bz2Dir)\blocksort.c" />
+ <ClCompile Include="$(bz2Dir)\bzlib.c" />
+ <ClCompile Include="$(bz2Dir)\compress.c" />
+@@ -109,7 +111,7 @@
+ <ClCompile Include="$(bz2Dir)\huffman.c" />
+ <ClCompile Include="$(bz2Dir)\randtable.c" />
+ </ItemGroup>
+- <ItemGroup>
++ <ItemGroup Condition="false">
+ <ClInclude Include="$(bz2Dir)\bzlib.h" />
+ <ClInclude Include="$(bz2Dir)\bzlib_private.h" />
+ </ItemGroup>
+diff --git a/PCbuild/_lzma.vcxproj b/PCbuild/_lzma.vcxproj
+index fe076a6fc5..70cc61dd95 100644
+--- a/PCbuild/_lzma.vcxproj
++++ b/PCbuild/_lzma.vcxproj
+@@ -94,10 +94,9 @@
+ <ItemDefinitionGroup>
+ <ClCompile>
+ <AdditionalIncludeDirectories>$(lzmaDir)src/liblzma/api;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+- <PreprocessorDefinitions>WIN32;_FILE_OFFSET_BITS=64;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;LZMA_API_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
++ <PreprocessorDefinitions>WIN32;_FILE_OFFSET_BITS=64;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ <Link>
+- <AdditionalDependencies>$(OutDir)liblzma$(PyDebugExt).lib;%(AdditionalDependencies)</AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+@@ -111,7 +110,7 @@
+ <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+- <ProjectReference Include="liblzma.vcxproj">
++ <ProjectReference Condition="false" Include="liblzma.vcxproj">
+ <Project>{12728250-16eC-4dc6-94d7-e21dd88947f8}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+diff --git a/PCbuild/_sqlite3.vcxproj b/PCbuild/_sqlite3.vcxproj
+index 7e0062692b..6fb3279a20 100644
+--- a/PCbuild/_sqlite3.vcxproj
++++ b/PCbuild/_sqlite3.vcxproj
+@@ -127,7 +127,7 @@
+ <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+- <ProjectReference Include="sqlite3.vcxproj">
++ <ProjectReference Condition="false" Include="sqlite3.vcxproj">
+ <Project>{a1a295e5-463c-437f-81ca-1f32367685da}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+diff --git a/PCbuild/_ssl.vcxproj b/PCbuild/_ssl.vcxproj
+index 4907f49b66..4dffa202b7 100644
+--- a/PCbuild/_ssl.vcxproj
++++ b/PCbuild/_ssl.vcxproj
+@@ -99,7 +99,7 @@
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="..\Modules\_ssl.c" />
+- <ClCompile Include="$(opensslIncludeDir)\applink.c">
++ <ClCompile Condition="false" Include="$(opensslIncludeDir)\applink.c">
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;$(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemGroup>
+diff --git a/PCbuild/pyexpat.vcxproj b/PCbuild/pyexpat.vcxproj
+index b2d9f5d57d..4efb826a05 100644
+--- a/PCbuild/pyexpat.vcxproj
++++ b/PCbuild/pyexpat.vcxproj
+@@ -89,17 +89,19 @@
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <ItemDefinitionGroup>
+- <ClCompile>
++ <ClCompile Condition="false">
+ <AdditionalIncludeDirectories>$(PySourcePath)Modules\expat;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <PreprocessorDefinitions>_CRT_SECURE_NO_WARNINGS;PYEXPAT_EXPORTS;HAVE_EXPAT_H;XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ClCompile>
+ </ItemDefinitionGroup>
+- <ItemGroup>
++ <ItemGroup Condition="false">
+ <ClInclude Include="..\Modules\expat\xmlrole.h" />
+ <ClInclude Include="..\Modules\expat\xmltok.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="..\Modules\pyexpat.c" />
++ </ItemGroup>
++ <ItemGroup Condition="false">
+ <ClCompile Include="..\Modules\expat\xmlparse.c" />
+ <ClCompile Include="..\Modules\expat\xmlrole.c" />
+ <ClCompile Include="..\Modules\expat\xmltok.c" />
+--
+2.28.0.windows.1
+
diff --git a/ports/python3/0004-dont-copy-vcruntime.patch b/ports/python3/0004-dont-copy-vcruntime.patch
new file mode 100644
index 000000000..174c27e5c
--- /dev/null
+++ b/ports/python3/0004-dont-copy-vcruntime.patch
@@ -0,0 +1,26 @@
+From 8086c67fa7ada1888a7808cbdc6fe74b62abe5b1 Mon Sep 17 00:00:00 2001
+From: Adam Johnson <AdamJohnso@gmail.com>
+Date: Wed, 9 Sep 2020 16:12:49 -0400
+Subject: [PATCH 4/6] dont copy vcruntime
+
+VCRUNTIME140.dll should not be redistributed, ever.
+---
+ PCbuild/pythoncore.vcxproj | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/PCbuild/pythoncore.vcxproj b/PCbuild/pythoncore.vcxproj
+index 5f30a35eb3..3cf21ba39c 100644
+--- a/PCbuild/pythoncore.vcxproj
++++ b/PCbuild/pythoncore.vcxproj
+@@ -565,7 +565,7 @@
+ <Target Name="_CopyVCRuntime" AfterTargets="Build" Inputs="@(VCRuntimeDLL)" Outputs="$(OutDir)%(Filename)%(Extension)" DependsOnTargets="FindVCRuntime">
+ <!-- bpo-38597: When we switch to another VCRuntime DLL, include vcruntime140.dll as well -->
+ <Warning Text="A copy of vcruntime140.dll is also required" Condition="!$(VCToolsRedistVersion.StartsWith(`14.`))" />
+- <Copy SourceFiles="%(VCRuntimeDLL.FullPath)" DestinationFolder="$(OutDir)" />
++ <Copy Condition="false" SourceFiles="%(VCRuntimeDLL.FullPath)" DestinationFolder="$(OutDir)" />
+ </Target>
+ <Target Name="_CleanVCRuntime" AfterTargets="Clean">
+ <Delete Files="@(VCRuntimeDLL->'$(OutDir)%(Filename)%(Extension)')" />
+--
+2.28.0.windows.1
+
diff --git a/ports/python3/0005-only-build-required-projects.patch b/ports/python3/0005-only-build-required-projects.patch
new file mode 100644
index 000000000..dbbe37234
--- /dev/null
+++ b/ports/python3/0005-only-build-required-projects.patch
@@ -0,0 +1,60 @@
+From 6492277e39dbe7dd77d32fdc9ae4b989213ef3c6 Mon Sep 17 00:00:00 2001
+From: Adam Johnson <AdamJohnso@gmail.com>
+Date: Wed, 9 Sep 2020 20:15:58 -0400
+Subject: [PATCH 5/6] only build required projects
+
+strips out tests and unsupported externals (eg tkinter).
+---
+ PCbuild/_ssl.vcxproj | 2 +-
+ PCbuild/pcbuild.proj | 14 +++++++-------
+ 2 files changed, 8 insertions(+), 8 deletions(-)
+
+diff --git a/PCbuild/_ssl.vcxproj b/PCbuild/_ssl.vcxproj
+index 4dffa202b7..e661cb6fb6 100644
+--- a/PCbuild/_ssl.vcxproj
++++ b/PCbuild/_ssl.vcxproj
+@@ -111,7 +111,7 @@
+ <Project>{cf7ac3d1-e2df-41d2-bea6-1e2556cdea26}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+- <ProjectReference Include="_socket.vcxproj">
++ <ProjectReference Condition="false" Include="_socket.vcxproj">
+ <Project>{86937f53-c189-40ef-8ce8-8759d8e7d480}</Project>
+ <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
+ </ProjectReference>
+diff --git a/PCbuild/pcbuild.proj b/PCbuild/pcbuild.proj
+index 4d416c589e..ede9868a8f 100644
+--- a/PCbuild/pcbuild.proj
++++ b/PCbuild/pcbuild.proj
+@@ -45,21 +45,21 @@
+ <BuildInParallel>false</BuildInParallel>
+ </Projects>
+ <!-- python3.dll -->
+- <Projects Include="python3dll.vcxproj" />
++ <Projects Include="python3dll.vcxproj" Condition="false" />
+ <!-- py[w].exe -->
+- <Projects Include="pylauncher.vcxproj;pywlauncher.vcxproj" />
++ <Projects Include="pylauncher.vcxproj;pywlauncher.vcxproj" Condition="false" />
+ <!-- pyshellext.dll -->
+- <Projects Include="pyshellext.vcxproj" />
++ <Projects Include="pyshellext.vcxproj" Condition="false" />
+ <!-- Extension modules -->
+ <ExtensionModules Include="_asyncio;_zoneinfo;_decimal;_elementtree;_msi;_multiprocessing;_overlapped;pyexpat;_queue;select;unicodedata;winsound;_uuid" />
+ <ExtensionModules Include="_ctypes" Condition="$(IncludeCTypes)" />
+ <!-- Extension modules that require external sources -->
+ <ExternalModules Include="_bz2;_lzma;_sqlite3" />
+ <!-- venv launchers -->
+- <Projects Include="venvlauncher.vcxproj;venvwlauncher.vcxproj" />
+- <!-- _ssl will build _socket as well, which may cause conflicts in parallel builds -->
+- <ExtensionModules Include="_socket" Condition="!$(IncludeSSL) or !$(IncludeExternals)" />
+- <ExternalModules Include="_ssl;_hashlib" Condition="$(IncludeSSL)" />
++ <Projects Include="venvlauncher.vcxproj;venvwlauncher.vcxproj" Condition="false" />
++ <!-- _ssl will NOT build _socket as well -->
++ <ExtensionModules Include="_socket" Condition="true" />
++ <ExternalModules Include="_ssl;_hashlib" Condition="true" />
+ <ExternalModules Include="_tkinter" Condition="$(IncludeTkinter) and $(Platform) != 'ARM' and $(Platform) != 'ARM64'" />
+ <ExtensionModules Include="@(ExternalModules->'%(Identity)')" Condition="$(IncludeExternals)" />
+ <Projects Include="@(ExtensionModules->'%(Identity).vcxproj')" Condition="$(IncludeExtensions)" />
+--
+2.28.0.windows.1
+
diff --git a/ports/python3/0006-fix-duplicate-symbols.patch b/ports/python3/0006-fix-duplicate-symbols.patch
new file mode 100644
index 000000000..251c0186a
--- /dev/null
+++ b/ports/python3/0006-fix-duplicate-symbols.patch
@@ -0,0 +1,39 @@
+From 62e082c1eba79d46ba8ab4b7a556a57a2253d555 Mon Sep 17 00:00:00 2001
+From: Adam Johnson <AdamJohnso@gmail.com>
+Date: Fri, 11 Sep 2020 12:35:36 -0400
+Subject: [PATCH 6/6] fix duplicate symbols
+
+---
+ Modules/_winapi.c | 2 +-
+ Modules/overlapped.c | 2 +-
+ 2 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/Modules/_winapi.c b/Modules/_winapi.c
+index e1672c4785..27148094d2 100644
+--- a/Modules/_winapi.c
++++ b/Modules/_winapi.c
+@@ -304,7 +304,7 @@ static PyMemberDef overlapped_members[] = {
+ {NULL}
+ };
+
+-PyTypeObject OverlappedType = {
++static PyTypeObject OverlappedType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ /* tp_name */ "_winapi.Overlapped",
+ /* tp_basicsize */ sizeof(OverlappedObject),
+diff --git a/Modules/overlapped.c b/Modules/overlapped.c
+index cd7869fa8a..319ea0a4b7 100644
+--- a/Modules/overlapped.c
++++ b/Modules/overlapped.c
+@@ -1756,7 +1756,7 @@ static PyGetSetDef Overlapped_getsets[] = {
+ {NULL},
+ };
+
+-PyTypeObject OverlappedType = {
++static PyTypeObject OverlappedType = {
+ PyVarObject_HEAD_INIT(NULL, 0)
+ /* tp_name */ "_overlapped.Overlapped",
+ /* tp_basicsize */ sizeof(OverlappedObject),
+--
+2.28.0.windows.1
+
diff --git a/ports/python3/CONTROL b/ports/python3/CONTROL
deleted file mode 100644
index 9085950fd..000000000
--- a/ports/python3/CONTROL
+++ /dev/null
@@ -1,8 +0,0 @@
-Source: python3
-Version: 3.9.0
-Homepage: https://github.com/python/cpython
-Description: The Python programming language as an embeddable library
-Build-Depends: libffi, openssl, zlib (!uwp&!windows)
-
-Feature: enable-shared
-Description: Build shared libraries in addition to static ones built by default
diff --git a/ports/python3/openssl.props.in b/ports/python3/openssl.props.in
new file mode 100644
index 000000000..1d404ad57
--- /dev/null
+++ b/ports/python3/openssl.props.in
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemDefinitionGroup>
+ <Link>
+ <AdditionalDependencies>Crypt32.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalDependencies Condition="'$(Configuration)|$(IncludeExternals)'=='Release|true'">
+ ${CRYPTO_RELEASE};${SSL_RELEASE};%(AdditionalDependencies)
+ </AdditionalDependencies>
+ <AdditionalDependencies Condition="'$(Configuration)|$(IncludeExternals)'=='Debug|true'">
+ ${CRYPTO_DEBUG};${SSL_DEBUG};%(AdditionalDependencies)
+ </AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/ports/python3/portfile.cmake b/ports/python3/portfile.cmake
index 40b1aeacb..711b317e0 100644
--- a/ports/python3/portfile.cmake
+++ b/ports/python3/portfile.cmake
@@ -8,17 +8,19 @@ set(PYTHON_VERSION_MINOR 9)
set(PYTHON_VERSION_PATCH 0)
set(PYTHON_VERSION ${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.${PYTHON_VERSION_PATCH})
-if(VCPKG_TARGET_IS_WINDOWS)
- if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
- list(APPEND PATCHES ${CMAKE_CURRENT_LIST_DIR}/0001-static-library.patch)
- endif()
- if (VCPKG_CRT_LINKAGE STREQUAL static)
- list(APPEND PATCHES ${CMAKE_CURRENT_LIST_DIR}/0002-static-crt.patch)
- endif()
+set(PATCHES
+ 0002-use-vcpkg-zlib.patch
+ 0003-devendor-external-dependencies.patch
+ 0004-dont-copy-vcruntime.patch
+ 0005-only-build-required-projects.patch
+ 0006-fix-duplicate-symbols.patch
+)
+if(VCPKG_LIBRARY_LINKAGE STREQUAL "static")
+ list(PREPEND PATCHES 0001-static-library.patch)
endif()
vcpkg_from_github(
- OUT_SOURCE_PATH TEMP_SOURCE_PATH
+ OUT_SOURCE_PATH SOURCE_PATH
REPO python/cpython
REF v${PYTHON_VERSION}
SHA512 39d304cae181674c4872c63768c0e5aeace2c92eb6d5ea550428d65c8571bc60922b3a3d484b51c46b466aadb7e27500559cafec13a489b48613bbb3fe6a5a5d
@@ -26,228 +28,154 @@ vcpkg_from_github(
PATCHES ${PATCHES}
)
-if("enable-shared" IN_LIST FEATURES)
- set(_ENABLED_SHARED --enable-shared)
- if(VCPKG_TARGET_IS_LINUX)
- message(WARNING"Feature enable-shared requires libffi-devel from the system package manager, please install it on Ubuntu system via sudo apt-get install libffi-dev.")
+if(VCPKG_TARGET_IS_WINDOWS OR VCPKG_TARGET_IS_UWP)
+ # Due to the way Python handles C extension modules on Windows, a static python core cannot
+ # load extension modules.
+ string(COMPARE EQUAL ${VCPKG_LIBRARY_LINKAGE} "dynamic" PYTHON_ALLOW_EXTENSIONS)
+ if(PYTHON_ALLOW_EXTENSIONS)
+ find_library(BZ2_RELEASE NAMES bz2 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(BZ2_DEBUG NAMES bz2d PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(CRYPTO_RELEASE NAMES libcrypto PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(CRYPTO_DEBUG NAMES libcrypto PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(EXPAT_RELEASE NAMES libexpat libexpatMD PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(EXPAT_DEBUG NAMES libexpatd libexpatdMD PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(FFI_RELEASE NAMES libffi PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(FFI_DEBUG NAMES libffi PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(LZMA_RELEASE NAMES lzma PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(LZMA_DEBUG NAMES lzmad PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(SQLITE_RELEASE NAMES sqlite3 PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(SQLITE_DEBUG NAMES sqlite3 PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ find_library(SSL_RELEASE NAMES libssl PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(SSL_DEBUG NAMES libssl PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+ else()
+ message(STATUS "WARNING: Static builds of Python will not have C extension modules available.")
+ endif()
+ find_library(ZLIB_RELEASE NAMES zlib PATHS "${CURRENT_INSTALLED_DIR}/lib" NO_DEFAULT_PATH)
+ find_library(ZLIB_DEBUG NAMES zlib zlibd PATHS "${CURRENT_INSTALLED_DIR}/debug/lib" NO_DEFAULT_PATH)
+
+ configure_file(${SOURCE_PATH}/PC/pyconfig.h ${SOURCE_PATH}/PC/pyconfig.h)
+ configure_file(${CMAKE_CURRENT_LIST_DIR}/python_vcpkg.props.in ${SOURCE_PATH}/PCbuild/python_vcpkg.props)
+ configure_file(${CMAKE_CURRENT_LIST_DIR}/openssl.props.in ${SOURCE_PATH}/PCbuild/openssl.props)
+ file(WRITE ${SOURCE_PATH}/PCbuild/libffi.props
+ "<?xml version='1.0' encoding='utf-8'?>
+ <Project xmlns='http://schemas.microsoft.com/developer/msbuild/2003' />"
+ )
+
+ if(PYTHON_ALLOW_EXTENSIONS)
+ set(OPTIONS
+ "/p:IncludeExtensions=true"
+ "/p:IncludeExternals=true"
+ "/p:IncludeCTypes=true"
+ "/p:IncludeSSL=true"
+ "/p:IncludeTkinter=false"
+ "/p:IncludeTests=false"
+ "/p:ForceImportBeforeCppTargets=${SOURCE_PATH}/PCbuild/python_vcpkg.props"
+ )
+ else()
+ set(OPTIONS
+ "/p:IncludeExtensions=false"
+ "/p:IncludeExternals=false"
+ "/p:IncludeTests=false"
+ "/p:ForceImportBeforeCppTargets=${SOURCE_PATH}/PCbuild/python_vcpkg.props"
+ )
+ endif()
+ if(VCPKG_TARGET_IS_UWP)
+ list(APPEND OPTIONS "/p:IncludeUwp=true")
+ else()
+ list(APPEND OPTIONS "/p:IncludeUwp=false")
+ endif()
+ if(VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
+ list(APPEND OPTIONS "/p:_VcpkgPythonLinkage=DynamicLibrary")
+ else()
+ list(APPEND OPTIONS "/p:_VcpkgPythonLinkage=StaticLibrary")
endif()
-else()
- unset(_ENABLED_SHARED)
-endif()
-if (VCPKG_TARGET_IS_WINDOWS)
- if(DEFINED _ENABLED_SHARED)
- message(WARNING "enable-shared requested, by Windows build already produce a shared library by default")
- endif()
- set(SOURCE_PATH "${TEMP_SOURCE_PATH}-Lib-Win")
- file(REMOVE_RECURSE ${SOURCE_PATH})
- file(RENAME "${TEMP_SOURCE_PATH}" ${SOURCE_PATH})
-
- if (VCPKG_TARGET_ARCHITECTURE MATCHES "x86")
- set(BUILD_ARCH "Win32")
- set(OUT_DIR "win32")
- elseif (VCPKG_TARGET_ARCHITECTURE MATCHES "x64")
- set(BUILD_ARCH "x64")
- set(OUT_DIR "amd64")
- else()
- message(FATAL_ERROR "Unsupported architecture: ${VCPKG_TARGET_ARCHITECTURE}")
- endif()
-
- vcpkg_build_msbuild(
- PROJECT_PATH ${SOURCE_PATH}/PCBuild/pythoncore.vcxproj
- PLATFORM ${BUILD_ARCH})
-
- file(INSTALL
- "${SOURCE_PATH}/Include/"
- "${SOURCE_PATH}/PC/pyconfig.h"
- DESTINATION "${CURRENT_PACKAGES_DIR}/include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}"
- FILES_MATCHING PATTERN *.h
- )
- file(INSTALL
- "${SOURCE_PATH}/Lib"
- DESTINATION
- "${CURRENT_PACKAGES_DIR}/share/python${PYTHON_VERSION_MAJOR}"
- )
- file(INSTALL
- "${SOURCE_PATH}/PCBuild/${OUT_DIR}/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.lib"
- DESTINATION
- "${CURRENT_PACKAGES_DIR}/lib"
- )
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- file(INSTALL "${SOURCE_PATH}/PCBuild/${OUT_DIR}/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}_d.lib" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib)
- endif()
-
- if (VCPKG_LIBRARY_LINKAGE STREQUAL dynamic)
- file(INSTALL "${SOURCE_PATH}/PCBuild/${OUT_DIR}/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.dll" DESTINATION ${CURRENT_PACKAGES_DIR}/bin)
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- file(INSTALL "${SOURCE_PATH}/PCBuild/${OUT_DIR}/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}_d.dll" DESTINATION ${CURRENT_PACKAGES_DIR}/debug/bin)
- endif()
- endif()
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- vcpkg_copy_pdbs()
- endif()
- # Handle copyright
- file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/python${PYTHON_VERSION_MAJOR} RENAME copyright)
-
-elseif (VCPKG_TARGET_IS_LINUX OR VCPKG_TARGET_IS_OSX)
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- set(SOURCE_PATH_DEBUG "${TEMP_SOURCE_PATH}-${TARGET_TRIPLET}-debug")
- endif()
-
- set(SOURCE_PATH_RELEASE "${TEMP_SOURCE_PATH}-${TARGET_TRIPLET}-release")
- file(REMOVE_RECURSE ${SOURCE_PATH_RELEASE})
- file(GLOB FILES ${TEMP_SOURCE_PATH}/*)
- file(COPY ${FILES} DESTINATION ${SOURCE_PATH_RELEASE})
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- file(REMOVE_RECURSE ${SOURCE_PATH_DEBUG})
- file(RENAME "${TEMP_SOURCE_PATH}" ${SOURCE_PATH_DEBUG})
- endif()
-
- find_program(MAKE make)
- if (NOT MAKE)
- message(FATAL_ERROR "MAKE not found")
- endif()
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
- ################
- # Release build
- ################
- message(STATUS "Configuring ${TARGET_TRIPLET}-rel")
- set(OUT_PATH_RELEASE ${SOURCE_PATH_RELEASE}/../../make-build-${TARGET_TRIPLET}-release)
- file(MAKE_DIRECTORY ${OUT_PATH_RELEASE})
-
- if(VCPKG_TARGET_IS_OSX)
- vcpkg_execute_build_process(
- COMMAND
- "${SOURCE_PATH_RELEASE}/configure"
- ${_ENABLED_SHARED}
- --prefix=${OUT_PATH_RELEASE}
- --with-openssl=${CURRENT_INSTALLED_DIR}
- "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include -framework CoreFoundation" "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/lib" "LIBS=-liconv"
- WORKING_DIRECTORY ${SOURCE_PATH_RELEASE}
- LOGNAME config-${TARGET_TRIPLET}-rel
- )
- else()
- vcpkg_execute_build_process(
- COMMAND
- "${SOURCE_PATH_RELEASE}/configure"
- ${_ENABLED_SHARED}
- --prefix=${OUT_PATH_RELEASE}
- --with-openssl=${CURRENT_INSTALLED_DIR}
- "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include" "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/lib"
- WORKING_DIRECTORY ${SOURCE_PATH_RELEASE}
- LOGNAME config-${TARGET_TRIPLET}-rel
- )
- endif()
-
- message(STATUS "Building ${TARGET_TRIPLET}-rel")
-
- vcpkg_execute_build_process(
- COMMAND make install -j ${VCPKG_CONCURRENCY}
- NO_PARALLEL_COMMAND make install
- WORKING_DIRECTORY ${SOURCE_PATH_RELEASE}
- LOGNAME make-build-${TARGET_TRIPLET}-release
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-rel headers...")
- file(INSTALL "${OUT_PATH_RELEASE}/include/"
- DESTINATION ${CURRENT_PACKAGES_DIR}/include
- FILES_MATCHING PATTERN *.h
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-rel lib files...")
- file(GLOB PY_LIBS
- ${OUT_PATH_RELEASE}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/*)
- file(INSTALL ${PY_LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/share/python${PYTHON_VERSION_MAJOR}/Lib
- PATTERN "*.pyc" EXCLUDE
- PATTERN "*__pycache__*" EXCLUDE
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-rel share files...")
- file(GLOB PKGCFG ${OUT_PATH_RELEASE}/lib/pkgconfig/*)
- file(INSTALL ${PKGCFG} DESTINATION ${CURRENT_PACKAGES_DIR}/share/python${PYTHON_VERSION_MAJOR}
- PATTERN "*.pyc" EXCLUDE
- PATTERN "*__pycache__*" EXCLUDE
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-rel Python library files...")
- file(GLOB LIBS
- ${OUT_PATH_RELEASE}/lib/libpython${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}.*)
- if (NOT LIBS)
- file(GLOB LIBS ${OUT_PATH_RELEASE}/lib64/*)
- endif()
- file(INSTALL ${LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/lib
- PATTERN "*.pyc" EXCLUDE
- PATTERN "*__pycache__*" EXCLUDE
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-rel done")
-
- endif()
-
- if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
- ################
- # Debug build
- ################
- message(STATUS "Configuring ${TARGET_TRIPLET}-dbg")
- set(OUT_PATH_DEBUG ${SOURCE_PATH_DEBUG}/../../make-build-${TARGET_TRIPLET}-debug)
- file(MAKE_DIRECTORY ${OUT_PATH_DEBUG})
-
- if(VCPKG_TARGET_IS_OSX)
- vcpkg_execute_build_process(
- COMMAND
- "${SOURCE_PATH_DEBUG}/configure"
- --with-pydebug
- ${_ENABLED_SHARED}
- --prefix=${OUT_PATH_DEBUG}
- --with-openssl=${CURRENT_INSTALLED_DIR}/debug
- "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include -framework CoreFoundation" "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/debug/lib" "LIBS=-liconv"
- WORKING_DIRECTORY ${SOURCE_PATH_DEBUG}
- LOGNAME config-${TARGET_TRIPLET}-debug
- )
- else()
- vcpkg_execute_build_process(
- COMMAND
- "${SOURCE_PATH_DEBUG}/configure"
- --with-pydebug
- ${_ENABLED_SHARED}
- --prefix=${OUT_PATH_DEBUG}
- --with-openssl=${CURRENT_INSTALLED_DIR}/debug
- "CPPFLAGS=-I${CURRENT_INSTALLED_DIR}/include" "LDFLAGS=-L${CURRENT_INSTALLED_DIR}/debug/lib"
- WORKING_DIRECTORY ${SOURCE_PATH_DEBUG}
- LOGNAME config-${TARGET_TRIPLET}-debug
- )
- endif()
-
- message(STATUS "Building ${TARGET_TRIPLET}-dbg")
- vcpkg_execute_build_process(
- COMMAND make install -j ${VCPKG_CONCURRENCY}
- NO_PARALLEL_COMMAND make install
- WORKING_DIRECTORY ${SOURCE_PATH_DEBUG}
- LOGNAME make-build-${TARGET_TRIPLET}-debug
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-dbg Python library files...")
- file(GLOB LIBS
- ${OUT_PATH_DEBUG}/lib/libpython${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}d.*)
- if (NOT LIBS)
- file(GLOB LIBS
- ${OUT_PATH_DEBUG}/lib64/*)
- endif()
- file(INSTALL ${LIBS} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib
- PATTERN "*.pyc" EXCLUDE
- PATTERN "*__pycache__*" EXCLUDE
- )
-
- message(STATUS "Installing ${TARGET_TRIPLET}-dbg done")
-
- endif()
- # Handle copyright
- file(INSTALL ${SOURCE_PATH_RELEASE}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/python${PYTHON_VERSION_MAJOR} RENAME copyright)
+ # _freeze_importlib.exe is run as part of the build process, so make sure the required dynamic libs are available.
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
+ vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}/bin")
+ endif()
+ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
+ vcpkg_add_to_path("${CURRENT_INSTALLED_DIR}/debug/bin")
+ endif()
+
+ vcpkg_install_msbuild(
+ SOURCE_PATH ${SOURCE_PATH}
+ PROJECT_SUBPATH "PCbuild/pcbuild.proj"
+ OPTIONS ${OPTIONS}
+ LICENSE_SUBPATH "LICENSE"
+ SKIP_CLEAN
+ )
+
+ # The extension modules must be placed in the DLLs directory, so we can't use vcpkg_copy_tools()
+ if(PYTHON_ALLOW_EXTENSIONS)
+ file(GLOB_RECURSE PYTHON_EXTENSIONS "${CURRENT_BUILDTREES_DIR}/*.pyd")
+ list(FILTER PYTHON_EXTENSIONS EXCLUDE REGEX [[.*_d\.pyd]])
+ file(COPY ${PYTHON_EXTENSIONS} DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs")
+ vcpkg_copy_tool_dependencies("${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs")
+ file(REMOVE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/DLLs/python${PYTHON_VERSION_MAJOR}${PYTHON_VERSION_MINOR}.dll")
+ endif()
+
+ file(COPY "${SOURCE_PATH}/Include/" "${SOURCE_PATH}/PC/pyconfig.h"
+ DESTINATION "${CURRENT_PACKAGES_DIR}/include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}"
+ FILES_MATCHING PATTERN *.h
+ )
+ file(COPY "${SOURCE_PATH}/Lib" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+
+ # Remove any extension libraries and other unversioned binaries that could conflict with the python2 port.
+ # You don't need to link against these anyway.
+ file(GLOB PYTHON_LIBS
+ "${CURRENT_PACKAGES_DIR}/lib/*.lib"
+ "${CURRENT_PACKAGES_DIR}/debug/lib/*.lib"
+ )
+ list(FILTER PYTHON_LIBS EXCLUDE REGEX [[python[0-9]*(_d)?\.lib$]])
+ file(GLOB PYTHON_INSTALLERS "${CURRENT_PACKAGES_DIR}/tools/${PORT}/wininst-*.exe")
+ file(REMOVE ${PYTHON_LIBS} ${PYTHON_INSTALLERS})
+
+ if(PYTHON_ALLOW_EXTENSIONS)
+ message(STATUS "Bootstrapping pip")
+ vcpkg_execute_required_process(COMMAND python -m ensurepip
+ WORKING_DIRECTORY "${CURRENT_PACKAGES_DIR}/tools/${PORT}"
+ LOGNAME "ensurepip-${TARGET_TRIPLET}"
+ )
+ endif()
+
+ vcpkg_clean_msbuild()
+else()
+ set(OPTIONS
+ "--with-openssl=${CURRENT_INSTALLED_DIR}"
+ "--with-ensurepip"
+ [[--with-suffix=""]]
+ "--with-system-expat"
+ )
+ if(VCPKG_TARGET_IS_OSX)
+ list(APPEND OPTIONS "LIBS=-liconv -lintl")
+ endif()
+ vcpkg_configure_make(
+ SOURCE_PATH ${SOURCE_PATH}
+ OPTIONS ${OPTIONS}
+ OPTIONS_DEBUG "--with-pydebug"
+ )
+ vcpkg_install_make(ADD_BIN_TO_PATH INSTALL_TARGET altinstall)
+
+ file(COPY "${CURRENT_PACKAGES_DIR}/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
+ file(COPY "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin/" DESTINATION "${CURRENT_PACKAGES_DIR}/tools/${PORT}")
+
+ # Makefiles, c files, __pycache__, and other junk.
+ file(GLOB PYTHON_LIB_DIRS LIST_DIRECTORIES true
+ "${CURRENT_PACKAGES_DIR}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/*"
+ "${CURRENT_PACKAGES_DIR}/debug/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/*")
+ list(FILTER PYTHON_LIB_DIRS INCLUDE REGEX [[config-[0-9].*.*]])
+ file(REMOVE_RECURSE ${PYTHON_LIB_DIRS})
+
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/bin")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/bin")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/include")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/debug/share")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/include/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}d")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/share/${PORT}/man1")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin")
+ file(REMOVE_RECURSE "${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug")
+
+ file(INSTALL "${SOURCE_PATH}/LICENSE" DESTINATION "${CURRENT_PACKAGES_DIR}/share/${PORT}" RENAME "copyright")
endif()
diff --git a/ports/python3/python_vcpkg.props.in b/ports/python3/python_vcpkg.props.in
new file mode 100644
index 000000000..efad43bbd
--- /dev/null
+++ b/ports/python3/python_vcpkg.props.in
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemDefinitionGroup>
+ <CLCompile>
+ <!-- Use vcpkg ports instead of vendored externals -->
+ <PreprocessorDefinitions>_Py_HAVE_ZLIB;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="${VCPKG_LIBRARY_LINKAGE} == 'static'">XML_STATIC;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <AdditionalIncludeDirectories>
+ ${CURRENT_INSTALLED_DIR}/include;%(AdditionalIncludeDirectories)
+ </AdditionalIncludeDirectories>
+
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'static|Debug'">MultiThreadedDebug</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'static|Release'">MultiThreaded</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'dynamic|Debug'">MultiThreadedDebugDLL</RuntimeLibrary>
+ <RuntimeLibrary Condition="'${VCPKG_CRT_LINKAGE}|$(Configuration)' == 'dynamic|Release'">MultiThreadedDLL</RuntimeLibrary>
+ </CLCompile>
+ <Link>
+ <!-- Required Libs -->
+ <AdditionalDependencies Condition="'$(Configuration)'=='Release'">
+ ${ZLIB_RELEASE};%(AdditionalDependencies)
+ </AdditionalDependencies>
+ <AdditionalDependencies Condition="'$(Configuration)'=='Debug'">
+ ${ZLIB_DEBUG};%(AdditionalDependencies)
+ </AdditionalDependencies>
+
+ <!-- Extension modules -->
+ <AdditionalDependencies Condition="'$(Configuration)|$(IncludeExtensions)' == 'Release|true'">
+ ${BZ2_RELEASE};${EXPAT_RELEASE};${FFI_RELEASE};${LZMA_RELEASE};${SQLITE_RELEASE};%(AdditionalDependencies)
+ </AdditionalDependencies>
+ <AdditionalDependencies Condition="'$(Configuration)|$(IncludeExtensions)' == 'Debug|true'">
+ ${BZ2_DEBUG};${EXPAT_DEBUG};${FFI_DEBUG};${LZMA_DEBUG};${SQLITE_DEBUG};%(AdditionalDependencies)
+ </AdditionalDependencies>
+ </Link>
+ </ItemDefinitionGroup>
+</Project>
diff --git a/ports/python3/vcpkg.json b/ports/python3/vcpkg.json
new file mode 100644
index 000000000..5907ab9b9
--- /dev/null
+++ b/ports/python3/vcpkg.json
@@ -0,0 +1,32 @@
+{
+ "name": "python3",
+ "version-string": "3.9.0",
+ "port-version": 1,
+ "description": "The Python programming language",
+ "homepage": "https://github.com/python/cpython",
+ "supports": "!(arm | uwp)",
+ "dependencies": [
+ {
+ "name": "bzip2",
+ "platform": "!(windows & static)"
+ },
+ "expat",
+ {
+ "name": "libffi",
+ "platform": "!(windows & static)"
+ },
+ {
+ "name": "liblzma",
+ "platform": "!(windows & static)"
+ },
+ {
+ "name": "openssl",
+ "platform": "!(windows & static)"
+ },
+ {
+ "name": "sqlite3",
+ "platform": "!(windows & static)"
+ },
+ "zlib"
+ ]
+}