aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-02-20devenv: support bash under MSYS2 by defaultChristoph Reiter1-4/+6
Currently it tries to run "cmd" by default in a MSYS2 bash. Passing "bash" doesn't work since that defaults to WSL and one has to pass an absolute path to bash instead, and even then one misses out on the PS1 override. In case $SHELL is set and the contained path exists prefer it even if we are on Windows. To make the PS1 override work we can't use Unix paths in Python since we might be on Windows, so move the .bashrc check into the temporary bash script itself. This makes "meson devenv" work the same under MSYS2 as on Linux.
2022-02-20add all supported arguments in docs for summary()Stone Tickle1-5/+28
2022-02-20mtest: raise informative error message when test program doesn't existEli Schwartz1-2/+5
If --no-rebuild is used, the test program might not exist, spawning a FileNotFoundError inside a long traceback rooted in subprocess.Popen trying to run that test program. Current versions of Meson even say it's an "unhandled python exception". But we can do one better and actually tell the user what is wrong, why, and what to do to fix it. And we can do so before getting waist deep in partially running tests. Fixes #10006
2022-02-17test cases: rename shared library('c') avoid libc collisionEli Schwartz5-5/+10
In a bunch of cases we create a series of sample libraries named "a", "b", "c" etc. This breaks on musl. Originally reported with muon via commit https://git.sr.ht/~lattis/muon/commit/ca5c37171423e9884047a85349e1b236d7449510 and also breaks the testsuite when packaging meson for alpine linux. libc.so is an existing library which is linked in by default for all the obvious reasons. You can get away with this on glibc, because that includes a soversion of "6", but it loads the wrong library on musl.
2022-02-17project tests: fine-tune the check for whether we are in CIEli Schwartz1-1/+1
Follow-up on commit 4274e0f42a9673df981dd7a7a456f4d4fcfe5452. We want to allow tests to be skipped freely in third-party environments, so this should check the jobname, not whether $CI exists. We will anyways raise an error when trying to run the project tests, if $CI is set but no jobname is set.
2022-02-17intl dependency: include header when checking for libc builtinEli Schwartz1-1/+2
This header is required anyway. And the compile test for linking to libc with the gettext symbol, can succeed when we try to use the literal symbol name without includes, but fail later during project build, because actually including libintl.h might redefine the function to match a forked symbol. This happens when GNU libintl is installed as a standalone library on systems that have a less fully-featured gettext implementation. So, by including the header in has_function, we can ensure that we test against the default resolved header. In the event that the symbol which is #define'd by the header is 'libintl_gettext', linking will fail against libc even when a builtin gettext does exist, and we will fall back to the intl dependency that provides -lintl (and which is needed to properly use the default header). Of course, even that probably won't work. has_function(prefix: '...') is useless to check the difference between builtins and external library functions. It has code to detect "builtins" that misfires in some cases (previously seen with iconv_open). Instead compile an open-coded test file that this intl dependency implementation fully controls, that doesn't get up to imaginative edge cases like trying to find `__builtin_gettext`. It's the only way to be sure. Fixes compiling against the intl dependency on e.g. Alpine Linux when the libintl package is installed.
2022-02-17tests: allow setting MESON_CI_JOBNAME=thirdpartyEli Schwartz2-4/+5
This is treated by the test harness as though unset, i.e. we do normal skipping and don't assume we are running in Meson's own project CI. However, it has one distinction which is that it isn't an error to set $CI without setting $MESON_CI_JOBNAME, if it is in fact set but to the ignored value. This lets automated workflows such as Linux distro testing, particularly alpine linux, set $CI or have it set for them by default, without messing things up. Also it has the advantage of $CI actually enabling useful benefits! We will still assume that this thirdparty environment wants to force verbose logging (printing testlogs, running ninja/samu with -v) and colorize the console.
2022-02-17tests: do not use a GNU bash script to check the minimum version of programsEli Schwartz2-10/+1
find_program() can check that for us already, there's no need to require GNU bash on systems that default to other POSIX shells. Even though this is the *linuxlike* tests and a POSIX shell is guaranteed, there is actually no need to require a shell at all. It's *easier* to use the meson builtin functionality here.
2022-02-17unittests: make ninja detection faster and more robustEli Schwartz1-8/+12
Instead of blindly assuming when $CI is set that `ninja` is always correct and always new enough, check for it the same way we do when $CI is not set. Instead of special casing when $CI is set and skipping ninja detection in subprocess tests (by assuming it is always `ninja`), skip detection in subprocess tests all the time, by passing this information around across processes after the first time it is looked up. This means that local (non-CI) tests are faster too! Fixes running unittests in alpine linux using samu. Although ninja is a symlink to samu, the exact output string on no-op builds is different, which we already handle, but what we don't handle is the fact that samu prints a third case when you invoke it as `ninja`. If $CI is exported, then the unittests ignored $NINJA entirely. Fixes running unittests when $CI is set, `samu` exists and `ninja` does not exist. This is not currently the case anywhere, but may be in the future; why not fix it now?
2022-02-16flake8: fix various whitespace errors with badly aligned codeEli Schwartz8-27/+28
2022-02-16flake8: do not use bare exceptionsEli Schwartz2-2/+2
In one case, we actually specifically want to catch IndexError only. In the other case, excepting Exception rather than BaseException is quite fine.
2022-02-16fix malformed warning to print the way it was meant to printEli Schwartz1-9/+5
Given a meson.build with the contents: ``` t = ' ' ``` We want to warn that this is bad. So we emitted this warning: ``` WARNING: Newline character in a string detected, use ''' (three single quotes) for multiline strings instead. This will become a hard error in a future Meson release. t = ' 4 4 ``` The line contents and the offset are printed as gibberish after a big whitespace run. These are elsewhere often passed to ParseException, which pretty-prints this, but newlines aren't an exception, merely a warning, and mlog.warning doesn't accept numeric strings as anything more meaningful than something to print as text. Fix this (by wrapping it in a ParseException) to properly print: ``` meson.build:4: WARNING: Newline character in a string detected, use ''' (three single quotes) for multiline strings instead. This will become a hard error in a future Meson release. t = ' ^ ```
2022-02-16fix a couple misuses of textwrap.dedentEli Schwartz2-4/+4
A backslash-escape of the last newline before a run of whitespace leading to the indented string ending and function termination `)` does not actually escape the entire line and make it do nothing. In fact what it does is cause all that whitespace to be part of the preceding line, and get printed. Meanwhile the textwrap.dedent documentation states that lines with only whitespace get normalized. When you *don't* mess with that final line, dedent actually does the right thing and makes the output message end with a single newline after the important text.
2022-02-16flake8: squelch warnings for star imports even harderEli Schwartz1-1/+1
mesonbuild.mesonlib is gathering its submodules into one module. We suppressed one warning for it, but another one cropped up instead.
2022-02-16fix missing f-string preventing variable formattingEli Schwartz1-1/+1
Detected by flake8 which reported that `e` was an unused variable.
2022-02-16flake8: remove some redundant separatorsEli Schwartz3-3/+3
2022-02-16flake8: fix wrong numbers of blank line separatorsEli Schwartz4-2/+4
2022-02-16flake8: fix typoed whitespace surrounding tokensEli Schwartz4-5/+5
2022-02-16remove outdated reference to deleted files in setuptools packagingEli Schwartz1-2/+0
It produced annoying status messages stating that these files could not be found.
2022-02-16flake8: use plain strings instead of f-strings when no variables usedEli Schwartz2-2/+2
2022-02-15fine-tune the logic for reporting context on tracebacksEli Schwartz1-11/+13
Do not report a MesonBugException if the command is `runpython`, because that is 100% other people's code, not ours. It's only used as an alternative to sys.executable for reporting a path to python, in the event of a Windows MSI install. While we are at it, refactor the logic for PermissionError to be a bit more unified (and sadly use isinstance instead of except, but it is what it is).
2022-02-15fix missing documentation for testsuite option in test.jsonEli Schwartz1-0/+5
stdout line matching supports count since commit 66d62a224e92c41d6012dc6c23912a965da4da8f to fail if certain output is present (count: 0) but it was never documented in the contribution guidelines.
2022-02-15pkgconfig module: allow custom variables to reference builtin directoriesEli Schwartz4-12/+107
Automatically generate additional variables and write them into the generated pkg-config file. This means projects no longer need to manually define the ones they use, which is annoying for dataonly usages (it used to forbid setting the base library-relevant "reserved" ones, and now allows it only for dataonly. But it's bloat to manualy list them anyway). It also fixes a regression in commit 248e6cf4736ef9ec636228da66c28f9be03aa74f which caused libdir to not be set, and to be unsettable, if the pkg-config file has no libraries but uses the ${libdir} expansion in a custom variable. This could be considered likely a case for dataonly, but it's not guaranteed.
2022-02-14shared module: Allow linking on AndroidNirbheek Chauhan3-9/+20
Android requires shared modules that use symbols from other shared modules to be linked before they can be dlopen()ed in the correct order. Not doing so leads to a missing symbol error: https://github.com/android/ndk/issues/201 We need to always allow linking for this. Also add a soname, although it's not confirmed that it's needed, and it doesn't really hurt if it isn't needed.
2022-02-14comment out broken Feature checks that fail mypyEli Schwartz1-3/+10
We currently cannot make this work because inside dependency() we don't know the current subproject. We would also like the optional but extremely useful location node, but we don't have that either... Convert the broken code to a FIXME for visibility.
2022-02-14FeatureNew: add mypy type annotations for subproject argEli Schwartz9-12/+28
Use a derived type when passing `subproject` around, so that mypy knows it's actually a SubProject, not a str. This means that passing anything other than a handle to the interpreter state's subproject attribute becomes a type violation, specifically when the order of the *four* different str arguments is typoed.
2022-02-14Add wx-config-3.1 provided by mingw-w64-x86_64-wxmsw3.1apoorv5691-1/+1
On Windows using MSYS2 MinGW installing the package `mingw-w64-x86_64-wxmsw3.1` provides `wx-config-3.1`. I have tried building my software by making this exact change and it build correctly.
2022-02-14run_unittests: check for pytest and pytest-xdist separatelyEli Schwartz1-7/+10
Do not quit from using pytest at all, when pytest is present, simply because xdist isn't available. Even without xdist, pytest is still useful. There doesn't seem to be any particular reason to require xdist. It just happens to have been implemented that way, back in commit 4200afc74d1e6ba6d117e900799d0d82a85bae8a when we originally added a check to avoid pytest erroring out with unknown options when xdist options are passed and xdist is not installed.
2022-02-14unittests: fine-tune the check for whether we are in CIEli Schwartz2-1/+2
The $CI environment variable may be generally set by Github or Gitlab actions, and is not a reliable indicator of whether we are running "CI". It could also, for an absolutely random example that didn't *just happen*, be Alpine Linux's attempt to enable the Meson testsuite in their packaging, which... uses Gitlab CI. In this case, we do want to perform normal skipping on not-found requirements. Instead of checking for $CI, check for $MESON_CI_JOBNAME as we already use that in all of our own CI jobs for various reasons. This makes it easier for linux distros to package Meson without accumulating hacks like "run the testsuite using `env -u CI`".
2022-02-14packaging: fix the MSI bundling of distutils sub-packagesEli Schwartz1-0/+1
Fixes regression in commit 05b5a1e56fe8f5400b65d0d69680cc6531fe74f8. This added usage of another module in the python module's introspection of `meson.exe runpython`, but the MSI packaging didn't adapt, causing it to fail to be detected due to ImportError. Fixes #9975
2022-02-12formatting improvement for include_directories sandbox violation warningEli Schwartz1-2/+2
Print the location the warning was encountered, and quote the string that triggered it. This makes it easier to read what actually happened.
2022-02-12validate the literal directory "subprojects" when checking sandbox violationsEli Schwartz1-1/+2
We do not want anyone touching this entire directory tree, but due to the way it was implemented, we only checked if its direct parent was a subproject violation. This generally worked, unless people tried to add `subprojects/` as an include directory. Patch this hole. It now provides the same warning any sandbox violation does (but is not currently an error, just a "will become an error in the future").
2022-02-10implement 'dist --allow-dirty' flagandy59954-12/+40
closes #9824
2022-02-10ninjabackend: fix rust program names with dashesAlyssa Ross4-7/+8
This substitution matches the behaviour of rustc[1] when inferring crate name based on file name. [1]: https://github.com/rust-lang/rust/tree/4e8fb743ccbec27344b2dd42de7057f41d4ebfdd/compiler/rustc_session/src/output.rs#L88
2022-02-10Contributing.md: fix typoAlyssa Ross1-1/+1
2022-02-09add some forgotten FeatureNew annotationsEli Schwartz1-0/+3
Forgotten in #8512.
2022-02-09fix UI regression in compiler.compiles loggingEli Schwartz1-1/+1
In commit b30dddd4e5b4ae6e5e1e812085a00a47e3edfcf1, various refactorings were done, during which a kwarg got accidentally dropped from the function that determined part of the log message. As a result, a ':' suddenly appeared in the log message where none should be. Example expected output: Checking if "-Werror=shadow with local shadowing" compiles: YES What actually happened: Checking if "-Werror=shadow with local shadowing" : compiles: YES Fixes #9974
2022-02-09minstall: raise explicit errors, by using MesonExceptionEli Schwartz1-7/+7
RuntimeError is way too generic when we have an explicit class for "Meson reports to the user, something went wrong". Moreover we now tell people that generic exceptions are "Meson bugs and should be reported", so our failure to do the technically correct thing and report the right kind of exception means we get haunted by demons of confusion. Specifically, people complain to us that Meson told them "there is a bug in Meson" when their install fails due to meson.build or build environment issues.
2022-02-09meson: Allow directory options outside of prefixJan Tojnar8-57/+51
This bring us in line with Autotools and CMake and it is useful for platforms like Nix, which install projects into multiple independent prefixes. As a consequence, `get_option` might return absolute paths for some directory options, if a directory outside of prefix is passed. This is technically a backwards incompatible change but its effect should be minimal, thanks to widespread use of `join_paths`/`/` operator and pkg-config generator module. It should only cause an issue when a path were constructed by concatenating the value of directory path option. Also remove a comment about commonpath since we do not use that since <https://github.com/mesonbuild/meson/commit/00f5dadd5b7d71c30bd7393d165a87f554eb92e5>. Fixes: https://github.com/mesonbuild/meson/issues/2561
2022-02-09setup.py: better requirementsHenry Schreiner1-1/+2
The first version of setuptools to properly support pyproject.toml was 42 (40-41 were buggy). It is also necessary to specify `build-backend = "setuptools.build_meta"`, otherwise you get the (horrible) default `build-backend = "setuptools.build_meta:__legacy__"`.
2022-02-09setup.cfg: update classifier, drop deprecatedHenry Schreiner1-2/+1
This adds 3.10 (didn't check to see if it was tested on 3.10, that should be done, but I'm using it on 3.10). setup_requires is deprecated and should be producing warnings on modern setuptools, and never worked for setuptools anyway - setuptools can't update itself, and setuptools is what is reading this anyway!
2022-02-09pypi: include a ninja extraHenry Schreiner1-0/+2
This will really help with pipx run, as `pipx run meson[ninja]` will now work on any system with pipx 0.17 or newer, no dependencies required. This now includes GitHub Actions, which just updated to pipx 1.0.0. Pipx run lets you use recent (always <1 week old) versions of anything on PyPI.
2022-02-07mdist: fix dist scripts in subprojects being marked as superproject scriptsEli Schwartz1-7/+7
This has never worked for built/found programs, only for script files. In commit 2fabd4c7dc22373e99fc63823d80083ad30704b8 scripts learned an attribute stating which subproject they came from. In commit 3990754bf55727ef5593769b48f0a03c6b7a3671 dist scripts learned to run even from a subproject, and relied on that attribute to know when, in fact, they came from a subproject. Unfortunately the original attribute was only set in one half of an if/else, and the other half returned early with only part of the work done. Fixes #9964
2022-02-06add FeatureNew check for compiler.* methods with dependency on internal depEli Schwartz1-2/+3
In commit 0deab2ee9efc2ffe9e43f2787611e34656e6a304 we added the ability to pass a declare_dependency() to any compiler method that accepts "dependencies", but we never marked the version it is available since. Fixes #9957
2022-02-06dlang: fix #9250 invalid include flag for root directoryTobias Pankrath1-0/+2
2022-02-06dlang: add test case for root include_directory #9250Tobias Pankrath4-0/+23
2022-02-05Guard against empty string in subdir().Jussi Pakkanen1-0/+2
2022-02-04Drop emacs meson-modeMarc-André Lureau1-31/+0
The one on MELPA is way more advanced: https://melpa.org/#/meson-mode https://github.com/wentasah/meson-mode Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
2022-02-04mesonlib: Fix Popen_safe_legacy() stderr assumptionOle André Vadla RavnÄs1-1/+1
It may be None. This was encountered with radare's build system on Windows, where symbolextractor.py crashes without any output displayed.
2022-02-03docs: strongly recommend the use of SPDX instead of array of licenseDylan Baker1-9/+17
The array of licenses is not clear, where and SPDX expression using AND and OR is very clear, take for example this: `['Apache', 'GPLv2']`. What does that mean? Any Apache license you like and GPLv2? Using a valid SPDX license identifier however makes it extremely clear what is meant: `'Apache-2.0 OR GPL-2.0-only'`. It is very clear that you mean, "this is Apache 2.0, however, you can use as GPL-2.0 for the purpose of linking it into your GPL-2.0 project".