Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
sagemathinc
GitHub Repository: sagemathinc/python-wasm
Path: blob/main/python/py-setuptools/Makefile
1391 views
include ../build/Makefile-vars

all: deps wasm

# See https://github.com/pypa/setuptools/releases
VERSION = 65.6.3

URL = https://github.com/pypa/setuptools/archive/refs/tags/v65.6.3.tar.gz
TARBALL = ${UPSTREAM}/setuptools-${VERSION}.tar.gz

include ../build/Makefile-rules

${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
	# We apply one patch to support building C++ extensions.  Without this, the numpy
	# build fails pretty quickly. This is needed due to our hacky approach to -fPIC.
	cd ${BUILD_WASM} && cat ${SRC}/patches/01-c++.patch | patch -p1
	touch ${BUILD_WASM}/.patched

${BUILD_WASM}/.built: ${BUILD_WASM}/.patched
	cd ${BUILD_WASM} \
		&& pnpm-exec cpython setup.py build
	touch ${BUILD_WASM}/.built

${DIST_WASM}/.built: ${BUILD_WASM}/.built
	# Hack: since we are not "properly" installing using "ensurepip", we replace
	# the code in version.py that calls pkg_resources (and looks at data in site-packages),
	# and instead just hardcode the version, which we know of course.
	# Note that we only use setuptools to bootstrap installing pip, then replace
	# setuptools with the one from pip.
	echo '__version__="${VERSION}"' > ${BUILD_WASM}/build/lib/setuptools/version.py
	# create bundles
	cd ${BUILD_WASM}/build/lib \
		&& pnpm-exec cpython -m cowasm_bundler setuptools \
		&& pnpm-exec cpython -m cowasm_bundler _distutils_hack \
		&& pnpm-exec cpython -m cowasm_bundler pkg_resources
	rm -rf ${DIST_WASM}
	mkdir -p ${DIST_WASM}
	cd ${DIST_WASM} && tar xf ${BUILD_WASM}/build/lib/setuptools.tar.xz
	cd ${DIST_WASM} && tar xf ${BUILD_WASM}/build/lib/_distutils_hack.tar.xz
	cd ${DIST_WASM} && tar xf ${BUILD_WASM}/build/lib/pkg_resources.tar.xz
	touch ${DIST_WASM}/.built

test: deps ${DIST_WASM}/.built
	# Test that importing from the bundle works:
	PYTHONPATH=${DIST_WASM} pnpm-exec cpython  -c 'import setuptools'