dev-util/meson: Sync with Gentoo

It's from Gentoo commit c0ad7b00c772c71a74ec42be0bf594ee9198b71c.
This commit is contained in:
Flatcar Buildbot 2023-10-09 07:10:43 +00:00 committed by Krzesimir Nowak
parent abb4dc6189
commit 7b9027777f
8 changed files with 538 additions and 0 deletions

View File

@ -0,0 +1,39 @@
From 5f96e35b873d6230970fd63ba2e706bbd3f4e26f Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Fri, 8 Sep 2023 16:54:48 -0400
Subject: [PATCH 1/7] python dependency: ensure that setuptools doesn't inject
itself into distutils
We do not use setuptools for anything, and only lightly use distutils.
Unpredictable issues can occur due to setuptools monkey-patching, which
interferes with our intended use. Tell setuptools to simply never get
involved.
Note: while it's otherwise possible to check if the probe is run using
sys.executable and avoid forking, setuptools unconditionally injects
itself at startup in a way that requires subprocess isolation to
disable.
(cherry picked from commit 9f610ad5b72ea91de2d7aeb6f3266d0a7477062e)
---
mesonbuild/dependencies/python.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mesonbuild/dependencies/python.py b/mesonbuild/dependencies/python.py
index 160772888..f04494674 100644
--- a/mesonbuild/dependencies/python.py
+++ b/mesonbuild/dependencies/python.py
@@ -113,7 +113,9 @@ class BasicPythonExternalProgram(ExternalProgram):
with importlib.resources.path('mesonbuild.scripts', 'python_info.py') as f:
cmd = self.get_command() + [str(f)]
- p, stdout, stderr = mesonlib.Popen_safe(cmd)
+ env = os.environ.copy()
+ env['SETUPTOOLS_USE_DISTUTILS'] = 'stdlib'
+ p, stdout, stderr = mesonlib.Popen_safe(cmd, env=env)
try:
info = json.loads(stdout)
--
2.42.0

View File

@ -0,0 +1,72 @@
From cb4e62a8c55118988babac8b8254e0af1dc9698b Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz@archlinux.org>
Date: Mon, 21 Nov 2022 20:47:14 -0500
Subject: [PATCH 2/7] python module: stop using distutils schemes on
sufficiently new Debian
Since 3.10.3, Debian finally started patching sysconfig with custom
paths, instead of just distutils. This means we can now go use that
instead. It reduces our reliance on the deprecated distutils module.
Partial fix for #7702
(cherry picked from commit 40f897fa92f7d3cc43788d3000733310ce77cf0c)
---
mesonbuild/scripts/python_info.py | 32 +++++++++++++++++++++++--------
1 file changed, 24 insertions(+), 8 deletions(-)
diff --git a/mesonbuild/scripts/python_info.py b/mesonbuild/scripts/python_info.py
index 9c3a0791a..65597b121 100755
--- a/mesonbuild/scripts/python_info.py
+++ b/mesonbuild/scripts/python_info.py
@@ -13,7 +13,6 @@ if sys.path[0].endswith('scripts'):
del sys.path[0]
import json, os, sysconfig
-import distutils.command.install
def get_distutils_paths(scheme=None, prefix=None):
import distutils.dist
@@ -37,15 +36,32 @@ def get_distutils_paths(scheme=None, prefix=None):
# default scheme to a custom one pointing to /usr/local and replacing
# site-packages with dist-packages.
# See https://github.com/mesonbuild/meson/issues/8739.
-# XXX: We should be using sysconfig, but Debian only patches distutils.
+#
+# We should be using sysconfig, but before 3.10.3, Debian only patches distutils.
+# So we may end up falling back.
-if 'deb_system' in distutils.command.install.INSTALL_SCHEMES:
- paths = get_distutils_paths(scheme='deb_system')
- install_paths = get_distutils_paths(scheme='deb_system', prefix='')
-else:
- paths = sysconfig.get_paths()
+def get_install_paths():
+ if sys.version_info >= (3, 10):
+ scheme = sysconfig.get_default_scheme()
+ else:
+ scheme = sysconfig._get_default_scheme()
+
+ if sys.version_info >= (3, 10, 3):
+ if 'deb_system' in sysconfig.get_scheme_names():
+ scheme = 'deb_system'
+ else:
+ import distutils.command.install
+ if 'deb_system' in distutils.command.install.INSTALL_SCHEMES:
+ paths = get_distutils_paths(scheme='deb_system')
+ install_paths = get_distutils_paths(scheme='deb_system', prefix='')
+ return paths, install_paths
+
+ paths = sysconfig.get_paths(scheme=scheme)
empty_vars = {'base': '', 'platbase': '', 'installed_base': ''}
- install_paths = sysconfig.get_paths(vars=empty_vars)
+ install_paths = sysconfig.get_paths(scheme=scheme, vars=empty_vars)
+ return paths, install_paths
+
+paths, install_paths = get_install_paths()
def links_against_libpython():
from distutils.core import Distribution, Extension
--
2.42.0

View File

@ -0,0 +1,36 @@
From c179c18765514d5c37737dec996b4c91cb31477f Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Mon, 2 Oct 2023 16:40:15 -0400
Subject: [PATCH 3/7] python module: refactor pypy detection into a consistent
variable
(cherry picked from commit 3d3a10ef022284c8377bd9f8e1b1adec73c50d95)
---
mesonbuild/scripts/python_info.py | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/mesonbuild/scripts/python_info.py b/mesonbuild/scripts/python_info.py
index 65597b121..d17b3a376 100755
--- a/mesonbuild/scripts/python_info.py
+++ b/mesonbuild/scripts/python_info.py
@@ -72,6 +72,8 @@ def links_against_libpython():
variables = sysconfig.get_config_vars()
variables.update({'base_prefix': getattr(sys, 'base_prefix', sys.prefix)})
+is_pypy = '__pypy__' in sys.builtin_module_names
+
if sys.version_info < (3, 0):
suffix = variables.get('SO')
elif sys.version_info < (3, 8, 7):
@@ -88,7 +90,7 @@ print(json.dumps({
'install_paths': install_paths,
'version': sysconfig.get_python_version(),
'platform': sysconfig.get_platform(),
- 'is_pypy': '__pypy__' in sys.builtin_module_names,
+ 'is_pypy': is_pypy,
'is_venv': sys.prefix != variables['base_prefix'],
'link_libpython': links_against_libpython(),
'suffix': suffix,
--
2.42.0

View File

@ -0,0 +1,72 @@
From 3c493dae4bd8410bfb09e8f654605f65e15d8e66 Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz@archlinux.org>
Date: Tue, 22 Nov 2022 22:56:10 -0500
Subject: [PATCH 4/7] python module: stop using distutils "link to libpython"
probe on recent python
On python >=3.8, this information is expected to be encoded in the
sysconfig vars.
In distutils, it is always necessary to link to libpython on Windows;
for posix platforms, it depends on the value of LIBPYTHON (which is the
library to link to, possibly the empty string) as generated by
configure.ac and embedded into python.pc and python-config.sh, and then
coded a second time in the distutils python sources.
There are a couple of caveats which have ramifications for Cygwin and
Android:
- python.pc and python-config.sh disagree with distutils when python is
not built shared. In that case, the former act the same as a shared
build, while the latter *never* links to libpython
- python.pc disagrees with python-config.sh and distutils when python is
built shared. The former never links to libpython, while the latter do
The disagreement is resolved in favor of distutils' behavior in all
cases, and python.pc is correct for our purposes on python 3.12; see:
https://github.com/python/cpython/pull/100356
https://github.com/python/cpython/pull/100967
Although it was not backported to older releases, Cygwin at least has
always patched in a fix for python.pc, which behavior is now declared
canonical. We can reliably assume it is always correct.
This is the other half of the fix for #7702
(cherry picked from commit 2d6c10908b3771216e7ce086af1ee4dc77e698c2)
---
mesonbuild/scripts/python_info.py | 17 +++++++++++++----
1 file changed, 13 insertions(+), 4 deletions(-)
diff --git a/mesonbuild/scripts/python_info.py b/mesonbuild/scripts/python_info.py
index d17b3a376..a3f3d3535 100755
--- a/mesonbuild/scripts/python_info.py
+++ b/mesonbuild/scripts/python_info.py
@@ -64,10 +64,19 @@ def get_install_paths():
paths, install_paths = get_install_paths()
def links_against_libpython():
- from distutils.core import Distribution, Extension
- cmd = Distribution().get_command_obj('build_ext')
- cmd.ensure_finalized()
- return bool(cmd.get_libraries(Extension('dummy', [])))
+ # on versions supporting python-embed.pc, this is the non-embed lib
+ #
+ # PyPy is not yet up to 3.12 and work is still pending to export the
+ # relevant information (it doesn't automatically provide arbitrary
+ # Makefile vars)
+ if sys.version_info >= (3, 8) and not is_pypy:
+ variables = sysconfig.get_config_vars()
+ return bool(variables.get('LIBPYTHON', 'yes'))
+ else:
+ from distutils.core import Distribution, Extension
+ cmd = Distribution().get_command_obj('build_ext')
+ cmd.ensure_finalized()
+ return bool(cmd.get_libraries(Extension('dummy', [])))
variables = sysconfig.get_config_vars()
variables.update({'base_prefix': getattr(sys, 'base_prefix', sys.prefix)})
--
2.42.0

View File

@ -0,0 +1,31 @@
From ae44d9a379faca6274db819be44ffca3e0159f56 Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Mon, 2 Oct 2023 23:51:57 -0400
Subject: [PATCH 5/7] tests: fix test case to not import distutils on python
3.12
Testing the correctness of the `modules: ` kwarg can be done with other
guaranteed stdlib modules that are even more guaranteed since they
didn't get deprecated for removal.
(cherry picked from commit ecf261330c498783760cbde00b613b7469f8d3c0)
---
test cases/python/5 modules kwarg/meson.build | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/test cases/python/5 modules kwarg/meson.build b/test cases/python/5 modules kwarg/meson.build
index 9751adaab..41a9a4fae 100644
--- a/test cases/python/5 modules kwarg/meson.build
+++ b/test cases/python/5 modules kwarg/meson.build
@@ -1,7 +1,7 @@
project('python kwarg')
py = import('python')
-prog_python = py.find_installation('python3', modules : ['distutils'])
+prog_python = py.find_installation('python3', modules : ['os', 'sys', 're'])
assert(prog_python.found() == true, 'python not found when should be')
prog_python = py.find_installation('python3', modules : ['thisbetternotexistmod'], required : false)
assert(prog_python.found() == false, 'python not found but reported as found')
--
2.42.0

View File

@ -0,0 +1,25 @@
From d9abf4a97dc182b3c57204a792000d620f9f941e Mon Sep 17 00:00:00 2001
From: Eli Schwartz <eschwartz93@gmail.com>
Date: Tue, 3 Oct 2023 00:22:25 -0400
Subject: [PATCH 6/7] mark the PyPI metadata as supporting python 3.12
meson itself runs okay on 3.12, and the last issue for *probing* against
3.12 is solved. Tests pass here locally.
(cherry picked from commit 880f21281ee359e01de659fe7d45549d19e6b84d)
---
setup.cfg | 1 +
1 file changed, 1 insertion(+)
diff --git a/setup.cfg b/setup.cfg
index dfaba76dd..2f2962eed 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -30,6 +30,7 @@ classifiers =
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
Programming Language :: Python :: 3.11
+ Programming Language :: Python :: 3.12
Topic :: Software Development :: Build Tools
long_description = Meson is a cross-platform build system designed to be both as fast and as user friendly as possible. It supports many languages and compilers, including GCC, Clang, PGI, Intel, and Visual Studio. Its build definitions are written in a simple non-Turing complete DSL.

View File

@ -0,0 +1,141 @@
From 9d1d4ae746ce39d1916dfe71fd6dcc5fce27e828 Mon Sep 17 00:00:00 2001
From: Sam James <sam@gentoo.org>
Date: Tue, 3 Oct 2023 16:52:56 +0100
Subject: [PATCH 7/7] Revert "rust: apply global, project, and environment C
args to bindgen"
This reverts commit 36210f64f22dc10d324db76bb1a7988c9cd5b14e.
This ended up not doing what was intended - see https://github.com/mesonbuild/meson/issues/12065#issuecomment-1742263677.
Bug: https://bugs.gentoo.org/914989
Bug: https://bugs.gentoo.org/915014
Signed-off-by: Sam James <sam@gentoo.org>
---
mesonbuild/modules/rust.py | 6 ------
test cases/rust/12 bindgen/meson.build | 18 ------------------
.../rust/12 bindgen/src/global-project.h | 10 ----------
test cases/rust/12 bindgen/src/global.c | 5 -----
test cases/rust/12 bindgen/src/global.rs | 14 --------------
test cases/rust/12 bindgen/test.json | 5 +----
6 files changed, 1 insertion(+), 57 deletions(-)
delete mode 100644 test cases/rust/12 bindgen/src/global-project.h
delete mode 100644 test cases/rust/12 bindgen/src/global.c
delete mode 100644 test cases/rust/12 bindgen/src/global.rs
diff --git a/mesonbuild/modules/rust.py b/mesonbuild/modules/rust.py
index e6e5c633f..3514412e6 100644
--- a/mesonbuild/modules/rust.py
+++ b/mesonbuild/modules/rust.py
@@ -232,12 +232,6 @@ class RustModule(ExtensionModule):
elif isinstance(s, CustomTarget):
depends.append(s)
- clang_args.extend(state.global_args.get('c', []))
- clang_args.extend(state.project_args.get('c', []))
- cargs = state.get_option('args', state.subproject, lang='c')
- assert isinstance(cargs, list), 'for mypy'
- clang_args.extend(cargs)
-
if self._bindgen_bin is None:
self._bindgen_bin = state.find_program('bindgen')
diff --git a/test cases/rust/12 bindgen/meson.build b/test cases/rust/12 bindgen/meson.build
index e7cb5f3db..c05cc0631 100644
--- a/test cases/rust/12 bindgen/meson.build
+++ b/test cases/rust/12 bindgen/meson.build
@@ -8,9 +8,6 @@ if not prog_bindgen.found()
error('MESON_SKIP_TEST bindgen not found')
endif
-add_project_arguments('-DPROJECT_ARG', language : 'c')
-add_global_arguments('-DGLOBAL_ARG', language : 'c')
-
# This seems to happen on windows when libclang.dll is not in path or is not
# valid. We must try to process a header file for this to work.
#
@@ -84,18 +81,3 @@ test('generated header', rust_bin2)
subdir('sub')
subdir('dependencies')
-
-gp = rust.bindgen(
- input : 'src/global-project.h',
- output : 'global-project.rs',
-)
-
-gp_lib = static_library('gp_lib', 'src/global.c')
-
-gp_exe = executable(
- 'gp_exe',
- structured_sources(['src/global.rs', gp]),
- link_with : gp_lib,
-)
-
-test('global and project arguments', gp_exe)
diff --git a/test cases/rust/12 bindgen/src/global-project.h b/test cases/rust/12 bindgen/src/global-project.h
deleted file mode 100644
index 6084e8ed6..000000000
--- a/test cases/rust/12 bindgen/src/global-project.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef GLOBAL_ARG
-char * success(void);
-#endif
-#ifndef PROJECT_ARG
-char * success(void);
-#endif
-#ifndef CMD_ARG
-char * success(void);
-#endif
-int success(void);
diff --git a/test cases/rust/12 bindgen/src/global.c b/test cases/rust/12 bindgen/src/global.c
deleted file mode 100644
index 10f6676f7..000000000
--- a/test cases/rust/12 bindgen/src/global.c
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "src/global-project.h"
-
-int success(void) {
- return 0;
-}
diff --git a/test cases/rust/12 bindgen/src/global.rs b/test cases/rust/12 bindgen/src/global.rs
deleted file mode 100644
index 4b70b1ecc..000000000
--- a/test cases/rust/12 bindgen/src/global.rs
+++ /dev/null
@@ -1,14 +0,0 @@
-// SPDX-license-identifer: Apache-2.0
-// Copyright © 2023 Intel Corporation
-
-#![allow(non_upper_case_globals)]
-#![allow(non_camel_case_types)]
-#![allow(non_snake_case)]
-
-include!("global-project.rs");
-
-fn main() {
- unsafe {
- std::process::exit(success());
- };
-}
diff --git a/test cases/rust/12 bindgen/test.json b/test cases/rust/12 bindgen/test.json
index b3a758562..f94ee85f9 100644
--- a/test cases/rust/12 bindgen/test.json
+++ b/test cases/rust/12 bindgen/test.json
@@ -1,10 +1,7 @@
{
- "env": {
- "CFLAGS": "-DCMD_ARG"
- },
"stdout": [
{
- "line": "test cases/rust/12 bindgen/meson.build:30: WARNING: Project targets '>= 0.63' but uses feature introduced in '1.0.0': \"rust.bindgen\" keyword argument \"include_directories\" of type array[str]."
+ "line": "test cases/rust/12 bindgen/meson.build:27: WARNING: Project targets '>= 0.63' but uses feature introduced in '1.0.0': \"rust.bindgen\" keyword argument \"include_directories\" of type array[str]."
}
]
}
--
2.42.0

View File

@ -0,0 +1,122 @@
# Copyright 2016-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
PYTHON_COMPAT=( python3_{10..12} pypy3 )
DISTUTILS_USE_PEP517=setuptools
if [[ ${PV} = *9999* ]]; then
EGIT_REPO_URI="https://github.com/mesonbuild/meson"
inherit git-r3
else
inherit pypi
MY_P=${P/_/}
S=${WORKDIR}/${MY_P}
if [[ ${PV} != *_rc* ]] ; then
KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~loong ~m68k ~mips ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86 ~amd64-linux ~x86-linux ~arm64-macos ~ppc-macos ~x64-macos ~x64-solaris"
fi
fi
inherit bash-completion-r1 distutils-r1 toolchain-funcs
DESCRIPTION="Open source build system"
HOMEPAGE="https://mesonbuild.com/"
LICENSE="Apache-2.0"
SLOT="0"
IUSE="test"
RESTRICT="!test? ( test )"
DEPEND="
test? (
dev-libs/glib:2
dev-libs/gobject-introspection
dev-util/ninja
dev-vcs/git
sys-libs/zlib[static-libs(+)]
virtual/pkgconfig
)
"
RDEPEND="
virtual/pkgconfig
"
PATCHES=(
"${FILESDIR}"/${PN}-1.2.1-python-path.patch
"${FILESDIR}"/1.2.2
)
python_prepare_all() {
local disable_unittests=(
# ASAN and sandbox both want control over LD_PRELOAD
# https://bugs.gentoo.org/673016
-e 's/test_generate_gir_with_address_sanitizer/_&/'
# ASAN is unsupported on some targets
# https://bugs.gentoo.org/692822
-e 's/test_pch_with_address_sanitizer/_&/'
# https://github.com/mesonbuild/meson/issues/7203
-e 's/test_templates/_&/'
# Broken due to python2 wrapper
-e 's/test_python_module/_&/'
)
sed -i "${disable_unittests[@]}" unittests/*.py || die
# Broken due to python2 script created by python_wrapper_setup
rm -r "test cases/frameworks/1 boost" || die
distutils-r1_python_prepare_all
}
src_test() {
tc-export PKG_CONFIG
if ${PKG_CONFIG} --exists Qt5Core && ! ${PKG_CONFIG} --exists Qt5Gui; then
ewarn "Found Qt5Core but not Qt5Gui; skipping tests"
else
distutils-r1_src_test
fi
}
python_test() {
(
# test_meson_installed
unset PYTHONDONTWRITEBYTECODE
# https://bugs.gentoo.org/687792
unset PKG_CONFIG
# test_cross_file_system_paths
unset XDG_DATA_HOME
# 'test cases/unit/73 summary' expects 80 columns
export COLUMNS=80
# If JAVA_HOME is not set, meson looks for javac in PATH.
# If javac is in /usr/bin, meson assumes /usr/include is a valid
# JDK include path. Setting JAVA_HOME works around this broken
# autodetection. If no JDK is installed, we should end up with an empty
# value in JAVA_HOME, and the tests should get skipped.
export JAVA_HOME=$(java-config -O 2>/dev/null)
# Call python3 instead of EPYTHON to satisfy test_meson_uninstalled.
python3 run_tests.py
) || die "Testing failed with ${EPYTHON}"
}
python_install_all() {
distutils-r1_python_install_all
insinto /usr/share/vim/vimfiles
doins -r data/syntax-highlighting/vim/{ftdetect,indent,syntax}
insinto /usr/share/zsh/site-functions
doins data/shell-completions/zsh/_meson
dobashcomp data/shell-completions/bash/meson
}