From: "Zoltán Böszörményi" <zboszor@gmail.com>
To: openembedded-devel@lists.openembedded.org
Cc: "Zoltán Böszörményi" <zboszor@gmail.com>
Subject: [meta-python][PATCH 4/4] python3-meson-python: New recipe
Date: Wed, 15 Mar 2023 09:04:29 +0100 [thread overview]
Message-ID: <20230315080429.2722555-4-zboszor@gmail.com> (raw)
In-Reply-To: <20230315080429.2722555-1-zboszor@gmail.com>
Used by inherit python_setuptools_build_meta_mesonpy.
Signed-off-by: Zoltán Böszörményi <zboszor@gmail.com>
---
.../remove-hardcoded-setup-args.patch | 123 ++++++++++++++++++
.../use-installed-mesonpy.patch | 9 ++
.../python3-meson-python_0.13.0.pre0.bb | 26 ++++
3 files changed, 158 insertions(+)
create mode 100644 meta-python/recipes-devtools/python/python3-meson-python/remove-hardcoded-setup-args.patch
create mode 100644 meta-python/recipes-devtools/python/python3-meson-python/use-installed-mesonpy.patch
create mode 100644 meta-python/recipes-devtools/python/python3-meson-python_0.13.0.pre0.bb
diff --git a/meta-python/recipes-devtools/python/python3-meson-python/remove-hardcoded-setup-args.patch b/meta-python/recipes-devtools/python/python3-meson-python/remove-hardcoded-setup-args.patch
new file mode 100644
index 000000000..3edda85dc
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-meson-python/remove-hardcoded-setup-args.patch
@@ -0,0 +1,123 @@
+--- meson_python-0.13.0.pre0/mesonpy/__init__.py.old 1970-01-01 01:00:00.000000000 +0100
++++ meson_python-0.13.0.pre0/mesonpy/__init__.py 2023-03-13 21:26:52.263117416 +0100
+@@ -669,8 +669,6 @@
+ self._build_dir = pathlib.Path(build_dir).absolute() if build_dir else (self._working_dir / 'build')
+ self._editable_verbose = editable_verbose
+ self._install_dir = self._working_dir / 'install'
+- self._meson_native_file = self._source_dir / '.mesonpy-native-file.ini'
+- self._meson_cross_file = self._source_dir / '.mesonpy-cross-file.ini'
+ self._meson_args: MesonArgs = collections.defaultdict(list)
+ self._env = os.environ.copy()
+
+@@ -679,32 +677,6 @@
+ if ninja_path is not None:
+ self._env.setdefault('NINJA', str(ninja_path))
+
+- # setuptools-like ARCHFLAGS environment variable support
+- if sysconfig.get_platform().startswith('macosx-'):
+- archflags = self._env.get('ARCHFLAGS')
+- if archflags is not None:
+- arch, *other = filter(None, (x.strip() for x in archflags.split('-arch')))
+- if other:
+- raise ConfigError(f'Multi-architecture builds are not supported but $ARCHFLAGS={archflags!r}')
+- macver, _, nativearch = platform.mac_ver()
+- if arch != nativearch:
+- x = self._env.setdefault('_PYTHON_HOST_PLATFORM', f'macosx-{macver}-{arch}')
+- if not x.endswith(arch):
+- raise ConfigError(f'$ARCHFLAGS={archflags!r} and $_PYTHON_HOST_PLATFORM={x!r} do not agree')
+- family = 'aarch64' if arch == 'arm64' else arch
+- cross_file_data = textwrap.dedent(f'''
+- [binaries]
+- c = ['cc', '-arch', {arch!r}]
+- cpp = ['c++', '-arch', {arch!r}]
+- [host_machine]
+- system = 'Darwin'
+- cpu = {arch!r}
+- cpu_family = {family!r}
+- endian = 'little'
+- ''')
+- self._meson_cross_file.write_text(cross_file_data)
+- self._meson_args['setup'].extend(('--cross-file', os.fspath(self._meson_cross_file)))
+-
+ # load config -- PEP 621 support is optional
+ self._config = tomllib.loads(self._source_dir.joinpath('pyproject.toml').read_text())
+ self._pep621 = 'project' in self._config
+@@ -749,19 +721,6 @@
+ [binaries]
+ python = '{sys.executable}'
+ ''')
+- native_file_mismatch = (
+- not self._meson_native_file.exists()
+- or self._meson_native_file.read_text() != native_file_data
+- )
+- if native_file_mismatch:
+- try:
+- self._meson_native_file.write_text(native_file_data)
+- except OSError:
+- # if there are permission errors or something else in the source
+- # directory, put the native file in the working directory instead
+- # (this won't survive multiple calls -- Meson will have to be reconfigured)
+- self._meson_native_file = self._working_dir / '.mesonpy-native-file.ini'
+- self._meson_native_file.write_text(native_file_data)
+
+ # Don't reconfigure if build directory doesn't have meson-private/coredata.data
+ # (means something went wrong)
+@@ -784,7 +743,7 @@
+ def _proc(self, *args: str) -> None:
+ """Invoke a subprocess."""
+ print('{cyan}{bold}+ {}{reset}'.format(' '.join(args), **_STYLES))
+- r = subprocess.run(list(args), env=self._env, cwd=self._build_dir)
++ r = subprocess.run(' '.join(list(args)).split(), env=self._env, cwd=self._build_dir)
+ if r.returncode != 0:
+ raise SystemExit(r.returncode)
+
+@@ -800,22 +759,6 @@
+ """
+ sys_paths = mesonpy._introspection.SYSCONFIG_PATHS
+ setup_args = [
+- f'--prefix={sys.base_prefix}',
+- os.fspath(self._source_dir),
+- os.fspath(self._build_dir),
+- f'--native-file={os.fspath(self._meson_native_file)}',
+- # TODO: Allow configuring these arguments
+- '-Ddebug=false',
+- '-Doptimization=2',
+-
+- # XXX: This should not be needed, but Meson is using the wrong paths
+- # in some scenarios, like on macOS.
+- # https://github.com/mesonbuild/meson-python/pull/87#discussion_r1047041306
+- '--python.purelibdir',
+- sys_paths['purelib'],
+- '--python.platlibdir',
+- sys_paths['platlib'],
+-
+ # user args
+ *self._meson_args['setup'],
+ ]
+@@ -905,8 +848,7 @@
+ editable_verbose: bool = False,
+ ) -> Iterator[Project]:
+ """Creates a project instance pointing to a temporary working directory."""
+- with tempfile.TemporaryDirectory(prefix='.mesonpy-', dir=os.fspath(source_dir)) as tmpdir:
+- yield cls(source_dir, tmpdir, build_dir, meson_args, editable_verbose)
++ yield cls(source_dir, build_dir, build_dir, meson_args, editable_verbose)
+
+ @functools.lru_cache()
+ def _info(self, name: str) -> Dict[str, Any]:
+@@ -1105,15 +1047,7 @@
+ for key, value in config_settings.items()
+ }
+
+- builddir_value = config_settings.get('builddir', {})
+- if len(builddir_value) > 0:
+- if len(builddir_value) != 1:
+- raise ConfigError('Only one value for configuration entry "builddir" can be specified')
+- builddir = builddir_value[0]
+- if not isinstance(builddir, str):
+- raise ConfigError(f'Configuration entry "builddir" should be a string not {type(builddir)}')
+- else:
+- builddir = None
++ builddir = os.environ.get('MESONPY_BUILD')
+
+ def _validate_string_collection(key: str) -> None:
+ assert isinstance(config_settings, Mapping)
diff --git a/meta-python/recipes-devtools/python/python3-meson-python/use-installed-mesonpy.patch b/meta-python/recipes-devtools/python/python3-meson-python/use-installed-mesonpy.patch
new file mode 100644
index 000000000..64c2c304c
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-meson-python/use-installed-mesonpy.patch
@@ -0,0 +1,9 @@
+--- meson_python-0.13.0.pre0/pyproject.toml.old 2023-03-14 08:55:19.092987968 +0100
++++ meson_python-0.13.0.pre0/pyproject.toml 2023-03-14 08:55:40.108672980 +0100
+@@ -1,6 +1,5 @@
+ [build-system]
+ build-backend = 'mesonpy'
+-backend-path = ['.']
+ requires = [
+ 'meson>=0.63.3',
+ 'pyproject-metadata>=0.7.1',
diff --git a/meta-python/recipes-devtools/python/python3-meson-python_0.13.0.pre0.bb b/meta-python/recipes-devtools/python/python3-meson-python_0.13.0.pre0.bb
new file mode 100644
index 000000000..21a4a6e5f
--- /dev/null
+++ b/meta-python/recipes-devtools/python/python3-meson-python_0.13.0.pre0.bb
@@ -0,0 +1,26 @@
+SUMMARY = "Meson Python build backend (PEP 517)"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://LICENSE;md5=d580b27e67cc0892a5b005b0be114b60"
+
+DEPENDS = " \
+ meson-native ninja-native python3-ninja-native \
+ python3-pyproject-metadata-native \
+ python3-patchelf-native \
+"
+
+PYPI_PACKAGE = "meson_python"
+
+inherit pypi python_setuptools_build_meta_mesonpy
+SRC_URI[sha256sum] = "8d537a0304709c31c11ffa34872a62a4c06a6a6c24fc862b7fb4306f3e881b95"
+
+SRC_URI:append:class-native = "file://remove-hardcoded-setup-args.patch"
+SRC_URI:append:class-nativesdk = "file://use-installed-mesonpy.patch"
+SRC_URI:append:class-target = "file://use-installed-mesonpy.patch"
+
+RDEPENDS:${PN} = " \
+ meson ninja python3-ninja \
+ python3-pyproject-metadata \
+ python3-patchelf \
+"
+
+BBCLASSEXTEND = "native nativesdk"
--
2.39.2
next prev parent reply other threads:[~2023-03-15 8:04 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-15 8:04 [meta-python][PATCH 1/4] python_setuptools_build_meta_mesonpy.bbclass: New class Zoltán Böszörményi
2023-03-15 8:04 ` [meta-python][PATCH 2/4] python3-patchelf: New recipe Zoltán Böszörményi
2023-03-15 12:42 ` [oe] " Ross Burton
2023-03-15 14:18 ` Böszörményi Zoltán
[not found] ` <174C9D7A024E2A7B.8829@lists.openembedded.org>
2023-03-15 17:49 ` Böszörményi Zoltán
[not found] ` <174CA8FCFC219282.31505@lists.openembedded.org>
2023-03-15 18:23 ` Böszörményi Zoltán
2023-03-15 8:04 ` [meta-python][PATCH 3/4] python3-pyproject-metadata: " Zoltán Böszörményi
2023-03-15 8:04 ` Zoltán Böszörményi [this message]
2023-03-15 12:46 ` [oe] [meta-python][PATCH 1/4] python_setuptools_build_meta_mesonpy.bbclass: New class Ross Burton
2023-03-15 14:16 ` Böszörményi Zoltán
2023-03-15 18:08 ` Ross Burton
2023-03-16 15:51 ` Tim Orling
2023-03-16 16:36 ` Böszörményi Zoltán
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230315080429.2722555-4-zboszor@gmail.com \
--to=zboszor@gmail.com \
--cc=openembedded-devel@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.