@@ -27,9 +27,9 @@ PYTHON_VER=$(basename $(PYTHON_VERSION))
2727#  The binary releases of dependencies, published at:
2828#  https://github.com/beeware/cpython-apple-source-deps/releases
2929BZIP2_VERSION =1.0.8-1
30- LIBFFI_VERSION =3.4.6 -1
31- OPENSSL_VERSION =3.0.15 -1
32- XZ_VERSION =5.6.2 -1
30+ LIBFFI_VERSION =3.4.7 -1
31+ OPENSSL_VERSION =3.0.16 -1
32+ XZ_VERSION =5.6.4 -1
3333
3434#  Supported OS
3535OS_LIST =macOS iOS tvOS watchOS
@@ -128,10 +128,10 @@ ARCH-$(target)=$$(subst .,,$$(suffix $(target)))
128128ifneq  ($(os ) ,macOS)
129129	ifeq ($$(findstring simulator,$$(SDK-$(target))),)
130130TARGET_TRIPLE-$(target) =$$(ARCH-$(target )  ) -apple-$$(OS_LOWER-$(target )  )$$(VERSION_MIN-$(os )  ) 
131- IS_SIMULATOR-$(target) =" False" 
131+ IS_SIMULATOR-$(target) =False
132132	else
133133TARGET_TRIPLE-$(target) =$$(ARCH-$(target )  ) -apple-$$(OS_LOWER-$(target )  )$$(VERSION_MIN-$(os )  ) -simulator
134- IS_SIMULATOR-$(target) =" True" 
134+ IS_SIMULATOR-$(target) =True
135135	endif
136136endif 
137137
@@ -240,6 +240,9 @@ PYTHON_LIB-$(target)=$$(PYTHON_FRAMEWORK-$(target))/Python
240240PYTHON_BIN-$(target) =$$(PYTHON_INSTALL-$(target )  ) /bin
241241PYTHON_INCLUDE-$(target) =$$(PYTHON_FRAMEWORK-$(target )  ) /Headers
242242PYTHON_STDLIB-$(target) =$$(PYTHON_INSTALL-$(target )  ) /lib/python$(PYTHON_VER ) 
243+ PYTHON_PLATFORM_CONFIG-$(target) =$$(PYTHON_INSTALL-$(target )  ) /platform-config/$$(ARCH-$(target )  ) -$$(SDK-$(target )  ) 
244+ PYTHON_PLATFORM_SITECUSTOMIZE-$(target) =$$(PYTHON_PLATFORM_CONFIG-$(target )  ) /sitecustomize.py
245+ 
243246
244247$$(PYTHON_SRCDIR-$(target )  ) /configure\ 
245248		downloads/Python-$(PYTHON_VERSION ) .tar.gz \ 
@@ -292,23 +295,35 @@ $$(PYTHON_LIB-$(target)): $$(PYTHON_SRCDIR-$(target))/python.exe
292295		#  Remove any .orig files produced by the compliance patching process
293296		find $$(PYTHON_INSTALL-$(target)) -name "*.orig" -exec rm {} \;
294297
295- endif 
296- 
297- PYTHON_SITECUSTOMIZE-$(target ) =$(PROJECT_DIR ) /support/$(PYTHON_VER ) /$(os ) /platform-site/$(target ) /sitecustomize.py
298298
299- $$(PYTHON_SITECUSTOMIZE-$(target )  ) :
300- 	@echo ">>> Create cross-platform sitecustomize.py for $(target ) "
301- 	mkdir -p $$(dir  $$(PYTHON_SITECUSTOMIZE-$(target )  ) ) 
302- 	cat $(PROJECT_DIR ) /patch/Python/sitecustomize.$(os ) .py \
299+ $$(PYTHON_PLATFORM_SITECUSTOMIZE-$(target )  ) 
300+ 	@echo " >>> Create cross-plaform config for $( target) " 
301+ 	mkdir -p $$(PYTHON_PLATFORM_CONFIG-$(target )  ) 
302+ 	#  Create the cross-platform site definition
303+ 	echo  " import _cross_$$ (ARCH-$( target) $$ (SDK-$( target) " \ 
304+ 		>  $$(PYTHON_PLATFORM_CONFIG-$(target )  ) /_cross_venv.pth
305+ 	cp $(PROJECT_DIR ) /patch/Python/make_cross_venv.py \ 
306+ 		$$(PYTHON_PLATFORM_CONFIG-$(target )  ) /make_cross_venv.py
307+ 	cp $(PROJECT_DIR ) /patch/Python/_cross_venv.py \ 
308+ 		$$(PYTHON_PLATFORM_CONFIG-$(target )  ) /_cross_venv.py
309+ 	cp $$(PYTHON_STDLIB-$(target )  ) /_sysconfig*  \ 
310+ 		$$(PYTHON_PLATFORM_CONFIG-$(target )  ) 
311+ 	cat $(PROJECT_DIR ) /patch/Python/_cross_target.py.tmpl \ 
303312		|  sed -e " s/{{os}}/$( os) " \ 
313+ 		|  sed -e " s/{{platform}}/$$ (OS_LOWER-$( target) " \ 
304314		|  sed -e " s/{{arch}}/$$ (ARCH-$( target) " \ 
315+ 		|  sed -e " s/{{sdk}}/$$ (SDK-$( target) " \ 
305316		|  sed -e " s/{{version_min}}/$$ (VERSION_MIN-$( os) " \ 
306317		|  sed -e " s/{{is_simulator}}/$$ (IS_SIMULATOR-$( target) " \ 
307- 		| sed -e "s/{{multiarch}}/$$(ARCH-$(target )  ) -$$(SDK-$(target )  ) /g" \
308- 		| sed -e "s/{{tag}}/$$(OS_LOWER-$(target )  ) -$$(VERSION_MIN-$(os )  ) -$$(ARCH-$(target )  ) -$$(SDK-$(target )  ) /g" \
309- 		> $$(PYTHON_SITECUSTOMIZE-$(target )  ) 
318+ 		>  $$(PYTHON_PLATFORM_CONFIG-$(target )  ) /_cross_$$(ARCH-$(target )  ) _$$(SDK-$(target )  ) .py
319+ 	cat $(PROJECT_DIR ) /patch/Python/sitecustomize.py.tmpl \ 
320+ 		|  sed -e " s/{{arch}}/$$ (ARCH-$( target) " \ 
321+ 		|  sed -e " s/{{sdk}}/$$ (SDK-$( target) " \ 
322+ 		>  $$(PYTHON_PLATFORM_SITECUSTOMIZE-$(target )  ) 
323+ 
324+ endif 
310325
311- $(target ) : $$(PYTHON_SITECUSTOMIZE -$(target )   $$(PYTHON_LIB-$(target )  ) 
326+ $(target ) : $$(PYTHON_PLATFORM_SITECUSTOMIZE -$(target )   $$(PYTHON_LIB-$(target )  ) 
312327
313328# ##########################################################################
314329#  Target: Debug
@@ -335,6 +350,8 @@ vars-$(target):
335350	@echo "PYTHON_BIN-$(target ) : $$(PYTHON_BIN-$(target )  ) "
336351	@echo "PYTHON_INCLUDE-$(target ) : $$(PYTHON_INCLUDE-$(target )  ) "
337352	@echo "PYTHON_STDLIB-$(target ) : $$(PYTHON_STDLIB-$(target )  ) "
353+ 	@echo "PYTHON_PLATFORM_CONFIG-$(target ) : $$(PYTHON_PLATFORM_CONFIG-$(target )  ) "
354+ 	@echo "PYTHON_PLATFORM_SITECUSTOMIZE-$(target ) : $$(PYTHON_PLATFORM_SITECUSTOMIZE-$(target )  ) "
338355	@echo
339356
340357endef  #  build-target
@@ -380,6 +397,7 @@ PYTHON_FRAMEWORK-$(sdk)=$$(PYTHON_INSTALL-$(sdk))/Python.framework
380397PYTHON_INSTALL_VERSION-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk )  ) /Versions/$(PYTHON_VER ) 
381398PYTHON_LIB-$(sdk) =$$(PYTHON_INSTALL_VERSION-$(sdk )  ) /Python
382399PYTHON_INCLUDE-$(sdk) =$$(PYTHON_INSTALL_VERSION-$(sdk )  ) /include/python$(PYTHON_VER ) 
400+ PYTHON_MODULEMAP-$(sdk) =$$(PYTHON_INCLUDE-$(sdk )  ) /module.modulemap
383401PYTHON_STDLIB-$(sdk) =$$(PYTHON_INSTALL_VERSION-$(sdk )  ) /lib/python$(PYTHON_VER ) 
384402
385403else 
@@ -390,11 +408,13 @@ else
390408#  The non-macOS frameworks don't use the versioning structure.
391409
392410PYTHON_INSTALL-$(sdk) =$(PROJECT_DIR ) /install/$(os ) /$(sdk ) /python-$(PYTHON_VERSION ) 
411+ PYTHON_MODULEMAP-$(sdk) =$$(PYTHON_INCLUDE-$(sdk )  ) /module.modulemap
393412PYTHON_FRAMEWORK-$(sdk) =$$(PYTHON_INSTALL-$(sdk )  ) /Python.framework
394413PYTHON_LIB-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk )  ) /Python
395414PYTHON_BIN-$(sdk) =$$(PYTHON_INSTALL-$(sdk )  ) /bin
396415PYTHON_INCLUDE-$(sdk) =$$(PYTHON_FRAMEWORK-$(sdk )  ) /Headers
397416PYTHON_STDLIB-$(sdk) =$$(PYTHON_INSTALL-$(sdk )  ) /lib/python$(PYTHON_VER ) 
417+ PYTHON_PLATFORM_CONFIG-$(sdk) =$$(PYTHON_INSTALL-$(sdk )  ) /platform-config
398418
399419$$(PYTHON_LIB-$(sdk )  ) $$(foreach  target,$$(SDK_TARGETS-$(sdk )  ) ,$$(PYTHON_LIB-$$(target )  ) ) 
400420	@echo " >>> Build Python fat library for the $( sdk) " 
@@ -419,6 +439,15 @@ $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h: $$(PYTHON_LIB-$(sdk))
419439	#  Copy headers as-is from the first target in the $(sdk) SDK
420440	cp -r $$(PYTHON_INCLUDE-$$(firstword $$(SDK_TARGETS-$(sdk)))) $$(PYTHON_INCLUDE-$(sdk))
421441
442+ 	#  Create the modulemap file
443+ 	cp -r patch/Python/module.modulemap.prefix $$(PYTHON_MODULEMAP-$(sdk))
444+ 	echo "" >> $$(PYTHON_MODULEMAP-$(sdk))
445+ 	cd $$(PYTHON_SRCDIR-$$(firstword $$(SDK_TARGETS-$(sdk))))/Include && \
446+ 		find cpython -name "*.h"  | sort | sed -e 's/^/    exclude header "/' | sed 's/$$$$/"/' >> $$(PYTHON_MODULEMAP-$(sdk)) && \
447+ 		echo "" >> $$(PYTHON_MODULEMAP-$(sdk)) && \
448+ 		find internal -name "*.h"  | sort | sed -e 's/^/    exclude header "/' | sed 's/$$$$/"/' >> $$(PYTHON_MODULEMAP-$(sdk))
449+ 	echo "\n}" >> $$(PYTHON_MODULEMAP-$(sdk))
450+ 
422451	#  Link the PYTHONHOME version of the headers
423452	mkdir -p $$(PYTHON_INSTALL-$(sdk))/include
424453	ln -si ../Python.framework/Headers $$(PYTHON_INSTALL-$(sdk))/include/python$(PYTHON_VER)
@@ -430,7 +459,7 @@ $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h: $$(PYTHON_LIB-$(sdk))
430459	cp $$(PYTHON_SRCDIR-$$(firstword $$(SDK_TARGETS-$(sdk))))/$(os)/Resources/pyconfig.h $$(PYTHON_INCLUDE-$(sdk))/pyconfig.h
431460
432461
433- $$(PYTHON_STDLIB-$(sdk )  ) /LICENSE.TXT$$(PYTHON_LIB-$(sdk )  )  $$(PYTHON_FRAMEWORK-$(sdk )  ) /Info.plist $$(PYTHON_INCLUDE-$(sdk )  ) /pyconfig.h
462+ $$(PYTHON_STDLIB-$(sdk )  ) /LICENSE.TXT$$(PYTHON_LIB-$(sdk )  )  $$(PYTHON_FRAMEWORK-$(sdk )  ) /Info.plist $$(PYTHON_INCLUDE-$(sdk )  ) /pyconfig.h  $$( foreach  target, $$( SDK_TARGETS- $( sdk ) ) , $$( PYTHON_PLATFORM_SITECUSTOMIZE- $$( target ) ) ) 
434463	@echo " >>> Build Python stdlib for the $( sdk) " 
435464	mkdir -p $$(PYTHON_STDLIB-$(sdk )  ) /lib-dynload
436465	#  Copy stdlib from the first target associated with the $(sdk) SDK
@@ -445,6 +474,10 @@ $$(PYTHON_STDLIB-$(sdk))/LICENSE.TXT: $$(PYTHON_LIB-$(sdk)) $$(PYTHON_FRAMEWORK-
445474	#  Copy the individual _sysconfigdata modules into names that include the architecture
446475	$$(foreach target,$$(SDK_TARGETS-$(sdk)),cp $$(PYTHON_STDLIB-$$(target))/_sysconfigdata_* $$(PYTHON_STDLIB-$(sdk))/; )
447476
477+ 	#  Copy the platform site folders for each architecture
478+ 	mkdir -p $$(PYTHON_PLATFORM_CONFIG-$(sdk))
479+ 	$$(foreach target,$$(SDK_TARGETS-$(sdk)),cp -r $$(PYTHON_PLATFORM_CONFIG-$$(target)) $$(PYTHON_PLATFORM_CONFIG-$(sdk)); )
480+ 
448481	#  Merge the binary modules from each target in the $(sdk) SDK into a single binary
449482	$$(foreach module,$$(wildcard $$(PYTHON_STDLIB-$$(firstword $$(SDK_TARGETS-$(sdk))))/lib-dynload/*),lipo -create -output $$(PYTHON_STDLIB-$(sdk))/lib-dynload/$$(notdir $$(module)) $$(foreach target,$$(SDK_TARGETS-$(sdk)),$$(PYTHON_STDLIB-$$(target))/lib-dynload/$$(notdir $$(module))); )
450483
@@ -529,6 +562,15 @@ $$(PYTHON_XCFRAMEWORK-$(os))/Info.plist: \
529562	#  Rewrite the framework to make it standalone
530563	patch/make-relocatable.sh $$(PYTHON_INSTALL_VERSION-macosx) 2>&1 > /dev/null
531564
565+ 	#  Create the modulemap file
566+ 	cp -r patch/Python/module.modulemap.prefix $$(PYTHON_MODULEMAP-macosx)
567+ 	echo "" >> $$(PYTHON_MODULEMAP-macosx)
568+ 	cd $$(PYTHON_INCLUDE-macosx) && \
569+ 		find cpython -name "*.h"  | sort | sed -e 's/^/    exclude header "/' | sed 's/$$$$/"/' >> $$(PYTHON_MODULEMAP-macosx) && \
570+ 		echo "" >> $$(PYTHON_MODULEMAP-macosx) && \
571+ 		find internal -name "*.h"  | sort | sed -e 's/^/    exclude header "/' | sed 's/$$$$/"/' >> $$(PYTHON_MODULEMAP-macosx)
572+ 	echo "\n}" >> $$(PYTHON_MODULEMAP-macosx)
573+ 
532574	#  Re-apply the signature on the binaries.
533575	codesign -s - --preserve-metadata=identifier,entitlements,flags,runtime -f $$(PYTHON_LIB-macosx) \
534576		2>&1 | tee $$(PYTHON_INSTALL-macosx)/python-$(os).codesign.log
@@ -552,7 +594,7 @@ support/$(PYTHON_VER)/macOS/VERSIONS:
552594dist/Python-$(PYTHON_VER ) -macOS-support.$(BUILD_NUMBER ) .tar.gz : \ 
553595	$$(PYTHON_XCFRAMEWORK-macOS ) /Info.plist \ 
554596	support/$(PYTHON_VER ) /macOS/VERSIONS \ 
555- 	$$(foreach  target,$$(TARGETS-macOS ) , $$(PYTHON_SITECUSTOMIZE -$$(target )  ) 
597+ 	$$(foreach  target,$$(TARGETS-macOS ) , $$(PYTHON_PLATFORM_SITECUSTOMIZE -$$(target )  ) 
556598
557599	@echo ">>> Create final distribution artefact for macOS"
558600	mkdir -p dist
@@ -575,9 +617,7 @@ $$(PYTHON_XCFRAMEWORK-$(os))/Info.plist: \
575617	$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/include $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
576618	$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/bin $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
577619	$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/lib $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
578- 
579- 	@echo ">>> Create helper links in XCframework for $(os)"
580- 	$$(foreach sdk,$$(SDKS-$(os)),ln -si $$(SDK_SLICE-$$(sdk)) $$(PYTHON_XCFRAMEWORK-$(os))/$$(sdk); )
620+ 	$$(foreach sdk,$$(SDKS-$(os)),cp -r $$(PYTHON_INSTALL-$$(sdk))/platform-config $$(PYTHON_XCFRAMEWORK-$(os))/$$(SDK_SLICE-$$(sdk)); )
581621
582622ifeq  ($(os ) ,iOS)
583623	@echo ">>> Clone testbed project for $(os)"
@@ -596,7 +636,7 @@ endif
596636
597637dist/Python-$(PYTHON_VER ) -$(os ) -support.$(BUILD_NUMBER ) .tar.gz : \ 
598638	$$(PYTHON_XCFRAMEWORK-$(os )  ) /Info.plist \ 
599- 	$$(foreach  target,$$(TARGETS-$(os )  ) , $$(PYTHON_SITECUSTOMIZE -$$(target )  ) 
639+ 	$$(foreach  target,$$(TARGETS-$(os )  ) , $$(PYTHON_PLATFORM_SITECUSTOMIZE -$$(target )  ) 
600640
601641	@echo ">>> Create final distribution artefact for $(os)"
602642	mkdir -p dist
0 commit comments