diff --git a/docs/project/changelog.md b/docs/project/changelog.md index e428931a5..1d6252647 100644 --- a/docs/project/changelog.md +++ b/docs/project/changelog.md @@ -14,8 +14,9 @@ substitutions: ## Unreleased -- {{ Enhancement }} Integrity of Pyodide packages are now verified before loading them. This is for now only - limited to browser environments. {pr}`2513` +- {{ Enhancement }} Integrity of Pyodide packages are now verified before + loading them. This is for now only limited to browser environments. + {pr}`2513` - {{ Fix }} Fix building on macOS {issue}`2360` {pr}`2554` @@ -28,9 +29,13 @@ substitutions: - {{ Enhancement }} Update sqlite version to latest stable release {pr}`2477` and {pr}`2518` -- {{ Fix }} We now tell packagers (e.g., Webpack) to ignore npm-specific imports when packing files for the browser. {pr}`2468` +- {{ Fix }} We now tell packagers (e.g., Webpack) to ignore npm-specific imports + when packing files for the browser. + {pr}`2468` -- {{ Enhancement }} Update Typescript target to ES2017 to generate more modern Javascript code. {pr}`2471` +- {{ Enhancement }} Update Typescript target to ES2017 to generate more modern + Javascript code. + {pr}`2471` - {{ Enhancement }} We now put our built files into the `dist` directory rather than the `build` directory. {pr}`2387` @@ -44,7 +49,8 @@ substitutions: `pyodide.runPython(code, { globals : some_dict})`; {pr}`2391` -- {{ Fix }} The build will error out earlier if `cmake` or `libtool` are not installed. +- {{ Fix }} The build will error out earlier if `cmake` or `libtool` are not + installed. {pr}`2423` - {{ Enhancement }} `pyodide.unpackArchive` now accepts any `ArrayBufferView` or @@ -61,7 +67,8 @@ substitutions: translated to negative Python ints. {pr}`2484` -- {{ Fix }} Pyodide now correctly handles JavaScript objects with `null` constructor. +- {{ Fix }} Pyodide now correctly handles JavaScript objects with `null` + constructor. {pr}`2520` - {{ Fix }} Fix garbage collection of `once_callable` {pr}`2401` @@ -70,8 +77,8 @@ substitutions: rewriting and various other improvements. {pr}`2510` -- {{ BREAKING }} `pyodide_build.testing` is removed. `run_in_pyodide` decorator can now be accessed - through `pyodide_test_runner`. +- {{ BREAKING }} `pyodide_build.testing` is removed. `run_in_pyodide` decorator + can now be accessed through `pyodide_test_runner`. {pr}`2418` - {{ Enhancement }} Added the `js_id` attribute to `JsProxy` to allow using @@ -82,16 +89,24 @@ substitutions: `dictConverter` argument. {pr}`2533` -- {{ Enhancement }} Added Python wrappers `set_timeout`, `clear_timeout`, `set_interval`, - `clear_interval`, `add_event_listener` and `remove_event_listener` for the corresponding JavaScript functions. +- {{ Enhancement }} Added Python wrappers `set_timeout`, `clear_timeout`, + `set_interval`, `clear_interval`, `add_event_listener` and + `remove_event_listener` for the corresponding JavaScript functions. {pr}`2456` -- {{ Enhancement }} Pyodide now directly exposes the Emscripten `PATH` and `ERRNO_CODES` APIs. +- {{ Enhancement }} Pyodide now directly exposes the Emscripten `PATH` and + `ERRNO_CODES` APIs. {pr}`2582` -- {{ Fix }} If the request errors due to CORS, `pyfetch` now raises an `OSError` not a `JSException`. +- {{ Fix }} If the request errors due to CORS, `pyfetch` now raises an `OSError` + not a `JSException`. {pr}`2598` +- {{ Enhancement }} The platform tags of wheels now include the Emscripten + version in them. This should help ensure ABI compatibility if Emscripten + wheels are distributed outside of the main Pyodide distribution. + {pr}`2610` + ### micropip - {{ Fix }} micropip now correctly handles package names that include dashes @@ -111,7 +126,8 @@ substitutions: If set to `True`, micropip will include pre-release and development versions. {pr}`2542` -- {{ Enhancement }} `micropip` was refactored to improve readability and ease of maintenance. +- {{ Enhancement }} `micropip` was refactored to improve readability and ease of + maintenance. {pr}`2561`, {pr}`2563`, {pr}`2564`, {pr}`2565`, {pr}`2568` - {{ Enhancement }} Various error messages were fine tuned and improved. diff --git a/pyodide-build/pyodide_build/common.py b/pyodide-build/pyodide_build/common.py index e3aad46fb..bdd5658a4 100644 --- a/pyodide-build/pyodide_build/common.py +++ b/pyodide-build/pyodide_build/common.py @@ -11,7 +11,11 @@ from packaging.utils import parse_wheel_filename from .io import parse_package_config -PLATFORM = "emscripten_wasm32" + +def platform(): + emscripten_version = get_make_flag("PYODIDE_EMSCRIPTEN_VERSION") + version = emscripten_version.replace(".", "_") + return f"emscripten_{version}_wasm32" def pyodide_tags() -> Iterator[Tag]: @@ -22,6 +26,7 @@ def pyodide_tags() -> Iterator[Tag]: """ PYMAJOR = get_make_flag("PYMAJOR") PYMINOR = get_make_flag("PYMINOR") + PLATFORM = platform() python_version = (int(PYMAJOR), int(PYMINOR)) yield from cpython_tags(platforms=[PLATFORM], python_version=python_version) yield from compatible_tags(platforms=[PLATFORM], python_version=python_version) diff --git a/pyodide-build/pyodide_build/pywasmcross.py b/pyodide-build/pyodide_build/pywasmcross.py index e90e42cd3..46c8206e8 100755 --- a/pyodide-build/pyodide_build/pywasmcross.py +++ b/pyodide-build/pyodide_build/pywasmcross.py @@ -107,7 +107,7 @@ def compile(env, **kwargs): args["orig__name__"] = __name__ make_command_wrapper_symlinks(env) env["PYWASMCROSS_ARGS"] = json.dumps(args) - env["_PYTHON_HOST_PLATFORM"] = common.PLATFORM + env["_PYTHON_HOST_PLATFORM"] = common.platform() from pyodide_build.pypabuild import build diff --git a/pyodide-build/pyodide_build/tests/test_common.py b/pyodide-build/pyodide_build/tests/test_common.py index 7efe4f6bd..bbbbd326a 100644 --- a/pyodide-build/pyodide_build/tests/test_common.py +++ b/pyodide-build/pyodide_build/tests/test_common.py @@ -9,6 +9,7 @@ from pyodide_build.common import ( find_matching_wheels, get_make_environment_vars, get_make_flag, + platform, search_pyodide_root, ) @@ -89,6 +90,7 @@ def test_wheel_paths(): old_version = "cp38" PYMAJOR = int(get_make_flag("PYMAJOR")) PYMINOR = int(get_make_flag("PYMINOR")) + PLATFORM = platform() current_version = f"cp{PYMAJOR}{PYMINOR}" future_version = f"cp{PYMAJOR}{PYMINOR + 1}" strings = [] @@ -102,17 +104,17 @@ def test_wheel_paths(): "py2.py3", ]: for abi in [interp, "abi3", "none"]: - for arch in ["emscripten_wasm32", "linux_x86_64", "any"]: + for arch in [PLATFORM, "linux_x86_64", "any"]: strings.append(f"wrapt-1.13.3-{interp}-{abi}-{arch}.whl") paths = [Path(x) for x in strings] assert [x.stem.split("-", 2)[-1] for x in find_matching_wheels(paths)] == [ - f"{current_version}-{current_version}-emscripten_wasm32", - f"{current_version}-abi3-emscripten_wasm32", - f"{current_version}-none-emscripten_wasm32", - f"{old_version}-abi3-emscripten_wasm32", - "py3-none-emscripten_wasm32", - "py2.py3-none-emscripten_wasm32", + f"{current_version}-{current_version}-{PLATFORM}", + f"{current_version}-abi3-{PLATFORM}", + f"{current_version}-none-{PLATFORM}", + f"{old_version}-abi3-{PLATFORM}", + f"py3-none-{PLATFORM}", + f"py2.py3-none-{PLATFORM}", "py3-none-any", "py2.py3-none-any", ]