Our package build process currently has a significant flaw: we first run `setup.py`, recording all compilation commands, then we rewrite these compilation commands to invoke `emcc` and replay them, and then we pray that the cross compiled executables ended up in the right place to go into the wheel. This is not a good strategy because the build script is allowed to implement arbitrary logic, and if it moves, renames, etc any of the output files then we lose track of them. This has repeatedly caused difficulty for us.

However, we also make no particularly significant use of the two pass approach. We can just do the simpler thing: capture the compiler commands as they occur, modify them as needed, and then run the fixed command.

I also added a patch to fix the numpy feature detection for wasm so that we don't have to include `_npyconfig.h` and `config.h`, numpy can generate them in the way it would for a native build. I opened a numpy PR that would fix the detection for us upstream:
https://github.com/numpy/numpy/pull/21154

This clears the way for us to switch to using pypa/build (as @henryiii has suggested) by removing our dependence on specific setuptools behavior.

This is on top of #2238.
No replay. Our package build process currently has a significant flaw: we first run `setup.py`, recording all compilation commands, then we rewrite these compilation commands to invoke `emcc` and replay them, and then we pray that the cross compiled executables ended up in the right place to go into the wheel. This is not a good strategy because the build script is allowed to implement arbitrary logic, and if it moves, renames, etc any of the output files then we lose track of them. This has repeatedly caused difficulty for us.

However, we also make no particularly significant use of the two pass approach. We can just do the simpler thing: capture the compiler commands as they occur, modify them as needed, and then run the fixed command.

I also added a patch to fix the numpy feature detection for wasm so that we don't have to include `_npyconfig.h` and `config.h`, numpy can generate them in the way it would for a native build. I opened a numpy PR that would fix the detection for us upstream:
https://github.com/numpy/numpy/pull/21154

This clears the way for us to switch to using pypa/build (as @henryiii has suggested) by removing our dependence on specific setuptools behavior.

This is on top of #2238.
From 5c949af8b513e87fec513f88aa47b61199a53b99 Mon Sep 17 00:00:00 2001
From: ryanking13 <def6488@gmail.com>
Date: Wed, 6 Oct 2021 22:16:32 +0900
Subject: [PATCH] Drop pwd bulit-in module

This patch drops pwd module support from Cpython.
pwd module provides access to the Unix user account and password database,
which is not available in browser environment.

---
 Modules/Setup | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Modules/Setup b/Modules/Setup
index 5e26472446..3c3421fb8e 100644
--- a/Modules/Setup
+++ b/Modules/Setup
@@ -103,7 +103,7 @@ PYTHONPATH=$(COREPYTHONPATH)
 
 posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix (UNIX) system calls
 errno errnomodule.c			# posix (UNIX) errno values
-pwd pwdmodule.c				# this is needed to find out the user's home dir
+# pwd pwdmodule.c				# this is needed to find out the user's home dir
 					# if $HOME is not set
 _sre -DPy_BUILD_CORE_BUILTIN _sre.c	# Fredrik Lundh's new regular expressions
 _codecs _codecsmodule.c			# access to the builtin codecs and codec registry
-- 
2.29.2


From 5c949af8b513e87fec513f88aa47b61199a53b99 Mon Sep 17 00:00:00 2001
From: ryanking13 <def6488@gmail.com>
Date: Wed, 6 Oct 2021 22:16:32 +0900
Subject: [PATCH] Drop pwd bulit-in module

This patch drops pwd module support from Cpython.
pwd module provides access to the Unix user account and password database,
which is not available in browser environment.

---
 Modules/Setup | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/Modules/Setup b/Modules/Setup
index 5e26472446..3c3421fb8e 100644
--- a/Modules/Setup
+++ b/Modules/Setup
@@ -103,7 +103,7 @@ PYTHONPATH=$(COREPYTHONPATH)
 
 posix -DPy_BUILD_CORE_BUILTIN -I$(srcdir)/Include/internal posixmodule.c # posix (UNIX) system calls
 errno errnomodule.c			# posix (UNIX) errno values
-pwd pwdmodule.c				# this is needed to find out the user's home dir
+# pwd pwdmodule.c				# this is needed to find out the user's home dir
 					# if $HOME is not set
 _sre -DPy_BUILD_CORE_BUILTIN _sre.c	# Fredrik Lundh's new regular expressions
 _codecs _codecsmodule.c			# access to the builtin codecs and codec registry
-- 
2.29.2

