summaryrefslogtreecommitdiff
path: root/mesonbuild/modules/python.py
Commit message (Collapse)AuthorAgeFilesLines
* python module: windows dll name for pypy needs special casingMatti Picus2022-04-121-1/+9
|
* Use a temp file to invoke the introspection command.Jussi Pakkanen2022-04-101-1/+6
| | | | | This is more reliable as '-c' can, for example, exhaust the maximum command line length.
* python module: restore logging for broken pythonEli Schwartz2022-04-101-5/+12
| | | | This check was erroneously removed in commit c5c02b72e132a03ae0284bdd5e15d1675301a37d
* python: Remove warning about invalid install pathXavier Claessens2022-03-161-9/+0
| | | | | | | It was originally added because proper detection was not working on Debian, but that has been fixed since. It was causing annoying warning by default when prefix is /usr/local that can only be avoided by setting options.
* Revert "devenv: Set PYTHONPATH where we install python modules"Eli Schwartz2022-03-151-43/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This reverts commit 79c6075b560dbf1c3e4e0b30f1c472dc2086421e. # Conflicts: # docs/markdown/snippets/devenv.md # mesonbuild/modules/python.py # test cases/unit/91 devenv/test-devenv.py PYTHONPATH cannot be reliably determined. The standard use case for installing python modules with Meson is mixed pure sources (at least `__init__.py`) and compiled extension_modules or configured files. Unfortunately that doesn't actually work because python will not load the same package hierarchy from two different directories, one a source directory and one a (mandatory) out of tree build directory. (It kind of can, but you need to do what this test case accidentally stumbled upon, which is namespace packages. Namespace packages are a very specific use case and you are NOT SUPPOSED to use them outside that use case, so people are not going to use them just to circumvent Meson devenv stuff as that would have negative install-time effects.) Adding PYTHONPATH anyway will just lead to documentation commitments which we cannot actually uphold, and confusing issues at time of use because some imports *will* work... and some will *not*. The end result will be a half-created tree of modules which just doesn't work together at all, but because it partially works, users attempting to debug it will spend time wondering why parts of it do import. For any case where the automatic devenv would work correctly, it will also work correctly to use `meson.add_devenv()` a single time, which is very easy to manually get correct and doesn't provide any significant value to automate. In the long run, an uninstalled python package environment will require "editable installs" support.
* Remove a spurious debug print in Python moduleRalf Gommers2022-03-101-1/+0
| | | | | | | This prints many lines of unwanted "done /absolute/path", I noticed this when testing 0.62.0rc1 with SciPy. [ci skip]
* fix correctly detecting whether python is found if link args are emptyEli Schwartz2022-03-071-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | There are two cases where we can assume we found the python dependency with its requisite libraries using sysconfig: - we found the library with find_library and are prepared to link to it - the library is not actually part of the dependency, so its presence or absence is irrelevant In the latter case, we should consider it found if link_libpython is False. Originally we did this, but the logic was inverted in commit 5b422fce87826beff3bca85e9c9081f22b3f45b7 in an unrelated change and without explanation, likely by accident. Normally this doesn't much matter, since a python invariably comes with a predictably located libpython and the first condition evaluates true. But that is not true for pypy, and in fact that is the reason the link_libpython check was originally added in commit 1bd14b52b26b0f4ec207bf7e38813b82bfc15f86. Restore that original logic. Fixes #8570
* merge various TYPE_CHECKING blocks into oneEli Schwartz2022-03-071-36/+29
| | | | | | A bunch of files have several T.TYPE_CHECKING blocks that each do some things which could just as well be done once, with a single `if` statement. Make them do so.
* devenv: Set PYTHONPATH where we install python modulesXavier Claessens2022-02-281-6/+44
|
* Cache the result of python.find_installation()Xavier Claessens2022-02-281-29/+34
| | | | | This avoids running sanity checks everytime find_installation() is called.
* python module: add option to specify a python environment to install toEli Schwartz2022-02-221-0/+21
| | | | | | | | | | | | The default behavior of installing relative to prefix may be unexpected, and is definitely wrong in many cases. Give users control in order to specify that yes, they actually want to install to a venv. This is particularly useful for projects that use meson as a build system for a python module, where *all* files shall be installed into the python site-packages.
* python module: only find a pkg-config dependency from the found pythonEli Schwartz2022-01-201-8/+21
| | | | | | | | | | | | | | | | | | | | | If the found python returns None from sysconfig.get_config_var('LIBPC') then we cannot (and don't) set PKG_CONFIG_LIBDIR from it. In fact, we can virtually guarantee we won't find a PkgConfigDependency either, because any python that doesn't have a LIBPC is presumably not installed to the system pkg-config directory (maybe it's an isolated relocatable install, maybe it just doesn't have pkg-config support for who knows what reason). Trying to find one anyway using pkg-config's builtin search paths can unexpectedly succeed, though, by finding a completely unrelated python installation installed to a system location, which isn't the one we are actually building for. Instead, return early so that we use the system dependency class fallback. While we are at it, add back the debug messages from #3989 which got removed.
* Fix to find Python files for Windows virtualenvsMatthew Brett2021-11-151-2/+6
| | | | | | | | | Virtualenvs do not have their Python DLLs etc in the `sys.prefix` directory, but in the `sys.base_prefix` directory. This directory is the same as `sys.prefix` if not in a virtualenv, so is safe for either case: https://docs.python.org/3/library/sys.html#sys.base_prefix
* python: Better detect when install path is not in sys.pathXavier Claessens2021-11-091-9/+12
| | | | | Using pathlib ensure propre platform specific path handling, such as case sensitivity.
* python.dependency(): Do not stop when first candidate is not foundXavier Claessens2021-11-021-3/+4
| | | | | It has to lookup the dependency with required=False otherwise it raises an exception when the first candidate (pkg-config) failed.
* fix various flake8 whitespace errorsEli Schwartz2021-10-271-5/+5
|
* dep.name(): return dependency name even if dependency is not foundThomas Heijligen2021-10-261-2/+1
| | | | | | The dep.name() function schould always return the name of the dependency as documented. No matter if it was found or not. https://mesonbuild.com/Reference-manual_returned_dep.html#depfound
* Fix typos discovered by codespellChristian Clauss2021-10-101-3/+3
|
* python: Add platlibdir and purelibdir optionsXavier Claessens2021-10-081-6/+11
|
* f-stringsEli Schwartz2021-10-041-4/+2
|
* modules: python: better handling of the Python paths for DebianFilipe Laíns2021-09-291-8/+35
| | | | | | | | | | | | | | | | | | Hardcoding the name is fragile, and enabling it based on the existence of /etc/debian_version (as the is_debianlike helper does) will result in incorrect paths if the Python binary is not provided by Debian. Using the deb_system distuils scheme instead makes sure we use the install path from the current interpreter, which Debian could change between releases, and gives us the correct value on Python installations that are not provided by Debian (eg. deadsnakes, Github Action Python, etc.) Do notice, though, that there is still no guarantee that these are the correct paths, as they assume all schemes paths have the install prefix as a base, see #9284. Signed-off-by: Filipe Laíns <lains@riseup.net>
* mintro: add installed_planFilipe Laíns2021-09-061-1/+5
| | | | Signed-off-by: Filipe Laíns <lains@riseup.net>
* python module: fix error message mentioning setuptoolsEli Schwartz2021-08-311-1/+1
| | | | We use distutils, not setuptools, for probing information.
* Add missing "disabler" kwarg to python.dependency()Xavier Claessens2021-08-301-0/+1
| | | | | There is a unit test using it and now fails because the warning about unknown kwarg became fatal.
* interpreter: fix cases of `KwargInfo(..., T, default=None)`Dylan Baker2021-08-271-1/+2
| | | | | | The correct way to mark these is `KwargInfo(..., (T, type(None)))`. There's also a few cases of `(T, None)` which is invalid, as `None` isn't a type
* python module: produce the correct install path on every OSEli Schwartz2021-08-271-1/+1
| | | | | | | | | | The sysconfig paths are, by default, correct for every OS -- they are supposed to follow the scheme that python knows about per default. For some reason, this overrode the scheme to posix_prefix, which is the default for posix OSes like linux and macOS, but wrong on Windows. Simply deleting this entirely makes everything that used to work, still work, and a couple new things start working.
* python: Workaround broken install pathXavier Claessens2021-08-221-3/+20
|
* python module: fix extensions without explicit subdir being installed to libdirEli Schwartz2021-08-181-4/+4
| | | | | | | | They are documented to go in site-packages, and indeed belong there. Regression from the initial implementation via commit ad296976f079cd185ab7361e3e4b18c6bf684090 Fixes #6331
* python module: make external program wrapper have access to useful metadataEli Schwartz2021-08-181-26/+35
| | | | | Basically just reorganize code. Try to make it a little neater, while we're at it.
* Fix incorrect .name attribute for python programEli Schwartz2021-08-181-3/+4
| | | | It is always set to python3 even if we asked for python2...
* fix some confusingly indirect codeEli Schwartz2021-08-181-3/+3
| | | | | | | | rsplit(..., 1) always produces exactly one split, by design, there's no need to then join a 1-element list via a generator comprehension after extracting the end of it via pop. If this commit message sounds confusing, then so was I when trying to figure out what this actually did and if it needed extracting to PythonExternalModule.
* Add install tagsXavier Claessens2021-08-171-3/+5
| | | | Fixes: #7007.
* Fix python module leaving PKG_CONFIG_LIBDIR set in os.environ.Xavier Claessens2021-08-031-4/+7
|
* modules/python: fix up a few simply typing warnings/errorsDylan Baker2021-07-131-8/+24
| | | | | | These were spotted by mypy and pyright. One is a string where a Path is expected, another other is a possibly unbound variable, and the third is bound but unused variables.
* modules/python: Allow trying a macos framework as well other methodsDylan Baker2021-07-131-2/+18
|
* modules/python: make some internal helpers protectedDylan Baker2021-07-131-4/+4
|
* modules/python: use factory for dependencyDylan Baker2021-07-131-90/+83
| | | | | This removes the odd 'pkgdep' attribute thing, and makes it behave more like a proper dependency
* modules/python: simplify a number of interfacesDylan Baker2021-07-131-33/+27
| | | | | | Including not calling back into `Interpreter.func_*`, which is not a good idea both from a type saftey and perforamance point of view. Instead there's now a shared _impl method
* modules/python: use typed_pos_argsDylan Baker2021-07-131-10/+15
| | | | | And note that the way that find_installation works is completely broken in regards to machine files
* modules/python: Add type annotationsDylan Baker2021-07-131-80/+96
| | | | | There's still a number of things that don't properly type check, that's expected though as the input is often unvalidated and assumed good.
* modules/python: sort importsDylan Baker2021-07-131-8/+9
|
* holders: Fix the remaining code to respect the holder changesDaniel Mensinger2021-06-181-21/+33
|
* expose SystemDependency and BuiltinDependency as toplevel classesEli Schwartz2021-06-171-2/+1
| | | | | | | | | | | mesonbuild.dependencies.__init__ exposes configtool, pkgconfig, cmake and more in __init__.py, so there's no reason we should be tying SystemDependency to the internal organization implementation of the subpackage! In the 2nd previous commit it took quite some effort to figure out that the python module "does not exist" because of import errors while refactoring something completely different.
* move base class for system dependencies into base.pyEli Schwartz2021-06-171-1/+1
| | | | In accordance with review comments; it's small enough this seems fitting.
* dependencies: Use the SystemDependencyDylan Baker2021-06-141-5/+3
| | | | | | | This fixes these dependencies, which currently return the name of the dependency as the type. Fixes #8877
* deps: Split dependencies.baseDaniel Mensinger2021-06-031-1/+1
| | | | | Split the Factory and dependency classes out of the base.py script to improve maintainability.
* modules: Add methods dict everywhereXavier Claessens2021-05-281-0/+3
| | | | | This fix calling random internal methods from meson.build as long as they were not prefixed by underscore.
* modules: Remove snippet methodsXavier Claessens2021-05-281-3/+2
| | | | | | | | | | | | The only advantage they have is they have the interpreter in arguments, but it's already available as self.interpreter. We should discourage usage of the interpreter API and rely on ModuleState object instead in the future. This also lift the restriction that a module method cannot add build targets, but that was not enforced for snippet methods anyway (and some modules were doing it) and it's really loose restriction as it should check for many other things if we wanted to make it consistent.
* interpreter: 'embed' kwarg is only valid in python moduleXavier Claessens2021-05-081-1/+1
|
* interpreter: Split permitted_kwargs dictXavier Claessens2021-04-121-2/+2
|