replace all <ConfigurationType>DynamicLibrary</ConfigurationType>
with <ConfigurationType>StaticLibrary</ConfigurationType>
in *.vcxproj
#define Py_NO_ENABLE_SHARED
#define MS_NO_COREDLL
``` in pyconfig.h
remove `Py_ENABLE_SHARED` in pythoncore.vcxproj
manual set MT and /Zl in all vcxproj.
add
``` <AdditionalDependencies>_asyncio.pyd;_bz2.pyd;_ctypes.pyd;_decimal.pyd;_elementtree.pyd;_hashlib.pyd;_lzma.pyd;_msi.pyd;_multiprocessing.pyd;_overlapped.pyd;_queue.pyd;_socket.pyd;_sqlite3.pyd;_ssl.pyd;_uuid.pyd;_zoneinfo.pyd;pyexpat.pyd;select.pyd;unicodedata.pyd;version.lib;shlwapi.lib;ws2_32.lib;pathcch.lib;crypt32.lib;cabinet.lib;msi.lib;rpcrt4.lib;iphlpapi.lib;rpcrt4.lib;sqlite3.lib;liblzma.lib;libcrypto_static.lib;libssl_static.lib;libffi.lib;%(AdditionalDependencies)</AdditionalDependencies>
for all exe output vcxproj s
<ItemDefinitionGroup>
<ClCompile>
<AdditionalOptions>/Zl %(AdditionalOptions)</AdditionalOptions>
</ClCompile>
</ItemDefinitionGroup>
for all lib output vcxproj s
comment_out
<TestModules Include="_ctypes_test;_testbuffer;_testcapi;_testinternalcapi;_testembed;_testimportmultiple;_testmultiphase;_testconsole" />
<TestModules Include="xxlimited" Condition="'$(Configuration)' == 'Release'" />
and
<Projects2 Condition="$(Platform) != 'ARM' and $(Platform) != 'ARM64'" Include="_freeze_importlib.vcxproj" />
``` in pcbuild.proj
edit config.c
extern PyObject* PyInit__asyncio(void); extern PyObject* PyInit__bz2(void); extern PyObject* PyInit__ctypes(void); extern PyObject* PyInit__decimal(void); extern PyObject* PyInit__elementtree(void); extern PyObject* PyInit__hashlib(void); extern PyObject* PyInit__lzma(void); extern PyObject* PyInit__msi(void); extern PyObject* PyInit__multiprocessing(void); extern PyObject* PyInit__overlapped(void); extern PyObject* PyInit__queue(void); extern PyObject* PyInit__socket(void); extern PyObject* PyInit__sqlite3(void); extern PyObject* PyInit__ssl(void); extern PyObject* PyInit__uuid(void); extern PyObject* PyInit_pyexpat(void); extern PyObject* PyInit_select(void); extern PyObject* PyInit_unicodedata(void);
{"_asyncio", PyInit__asyncio}, {"_bz2", PyInit__bz2}, {"_ctypes", PyInit__ctypes}, {"_decimal", PyInit__decimal}, {"_elementtree", PyInit__elementtree}, {"_hashlib", PyInit__hashlib}, {"_lzma", PyInit__lzma}, {"_msi", PyInit__msi}, {"_multiprocessing", PyInit__multiprocessing}, {"_overlapped", PyInit__overlapped}, {"_queue", PyInit__queue}, {"_socket", PyInit__socket}, {"_sqlite3", PyInit__sqlite3}, {"_ssl", PyInit__ssl}, {"_uuid", PyInit__uuid}, {"pyexpat", PyInit_pyexpat}, {"select", PyInit_select}, {"unicodedata", PyInit_unicodedata},
#ifdef MS_COREDLL SET_SYS_FROM_STRING("winver", PyUnicode_FromString(PyWin_DLLVersionString)); #else extern void* __ImageBase; SET_SYS_FROM_STRING("dllhandle", PyLong_FromVoidPtr((void*)&__ImageBase)); #endif
refactor `OverlappedType` to `_OverlappedType` in _winapi.c
move `const char *PyWin_DLLVersionString = MS_DLL_ID;` out of `#ifdef Py_ENABLE_SHARED` in dl_nt.c
remove `#ifdef Py_ENABLE_SHARED` in `calculate_module_search_path` and for `getpythonregpath` in getpathp.c