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

all: deps wasm

# See https://github.com/pypa/pip/tags
#
VERSION = 22.3.1

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

include ../build/Makefile-rules

SETUPTOOLS = $(shell cowasm-package-path @cowasm/py-setuptools)

${BUILD_WASM}/.patched: ${BUILD_WASM}/.build
	# It would be much nicer to implement a better mmap.  But for now, let's just patch it out:
	cd ${BUILD_WASM} && cat ${SRC}/patches/01-pip-no-mmap.patch | patch -p1
	# It would be better to have a better fallback for threads that works in some cases so we
	# don't need this. But for now, just remove it:
	cd ${BUILD_WASM} && cat ${SRC}/patches/02-pip-no-auto-refresh-progress.patch  | patch -p1
	touch ${BUILD_WASM}/.patched

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

# Trying to use a bundle (e.g., only pyc, etc.,) leads to endless problems, since
# many scripts and components that use pip assume the .py files are there.
${DIST_WASM}/.built:  ${BUILD_WASM}/.built
	rm -rf ${DIST_WASM}
	mkdir -p ${DIST_WASM}
	cp -r ${BUILD_WASM}/build/lib/pip ${DIST_WASM}/
	# Build tools (e.g., for pandas, etc.) absolute require that setuptools actually be pip installed.
	# So we pip install it into site-packages, then copy everything over dist_wasm, so that
	# the directory setuptools-65.6.3.dist-info exists.  Basically, we used our own setuptools package
	# just for bootstrapping.  Probably this is very similar to what ensurepip does?
	# We do NOT just pip install pip because of the patches above...
	PYTHONPATH=${SETUPTOOLS}:${DIST_WASM} pnpm-exec cpython -m pip install setuptools --target=${BUILD_WASM}/site-packages
	cp -r ${BUILD_WASM}/site-packages/* ${DIST_WASM}
	touch ${DIST_WASM}/.built

test: deps ${DIST_WASM}/.built
	# Importing from the bundle works:
	PYTHONPATH=${DIST_WASM} pnpm-exec cpython -c 'import pip'
	# The command line script works.
	PYTHONPATH=${DIST_WASM} pnpm-exec cpython -m pip > /dev/null