aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib/universal.py
AgeCommit message (Collapse)AuthorFilesLines
2022-09-28Move classes used by scripts to their own moduleXavier Claessens1-2313/+0
Those classes are used by wrapper scripts and we should not have to import the rest of mesonlib, build.py, and all their dependencies for that. This renames mesonlib/ directory to utils/ and add a mesonlib.py module that imports everything from utils/ to not have to change `import mesonlib` everywhere. It allows to import utils.core without importing the rest of mesonlib.
2022-09-26ninjabackend: Fix get_target_generated_sources() return typeXavier Claessens1-0/+5
Type annotation, documentation string, and implementation were doing 3 different things. Change implementation to match type annotation which makes the most sense because it match what get_target_sources() does. All callers only use keys from the returned dictionary any way, but that's going to change in next commits.
2022-09-22pylint: enable global-statementDylan Baker1-1/+1
This does force a number of uses of `# pylint: disable` comments, but it also finds a couple of useless global uses and one place (in the previous commit) that an easy refactor removes the use of global. Global is a code smell, so forcing adding a comment to disable helps force developers to really consider if what they're doing is a good idea.
2022-09-22pylint: enable global-variable-not-assignedDylan Baker1-1/+0
The `global` statement is only needed to assign to global variables, not read or mutate them. So calling `global.mutate()` is fine, but not `var = foo`, which would otherwise shadow `var`.
2022-09-12mesonlib: Add a function to find the first element in an iterable which ↔Dylan Baker1-0/+15
matches a predicate
2022-08-01fix Popen_safe writeZhangyuan Nie1-6/+9
2022-06-17Improve WINEPATH reductionXavier Claessens1-28/+63
- Remove duplicated code in mdevenv.py - Change the limit to 1024 instead of 2048 which is what has been tested. - Skip shortening if it is already short enough. - Skip shortening with wine >= 6.4 which does not seems to have that limitation any more. - Downgrade exception to warning in the case WINEPATH cannot be shortened under 1024 chars, it is possible that it will still work.
2022-06-16minstall: Add more safety checks when unpickling installdataXavier Claessens1-0/+22
When need to catch exceptions just like we do in coredata.load() to print proper error message instead of backtrace when user mix meson versions. This happens frequently when user has a newer version of meson installed in their HOME and then "sudo meson install" uses the system version of meson.
2022-06-13flake8: fix various whitespace nitsEli Schwartz1-1/+1
2022-06-08mesonlib: fix annotation of OrderedSet.differenceDylan Baker1-1/+1
Any iterable is acceptable, not just Set | OrderedSet
2022-05-03add prefer_static built-in optionDudemanguy1-0/+1
By default, meson will try to look for shared libraries first before static ones. In the meson.build itself, one can use the static keyword to control if a static library will be tried first but there's no simple way for an end user performing a build to switch back and forth at will. Let's cover this usecase by adding an option that allows a user to specify if they want dependency lookups to try static or shared libraries first. The writer of the meson.build can manually specify the static keyword where appropriate which will override the value of this option.
2022-04-19Add ppc970 definition to universal.pySergey Fedorov1-0/+1
2022-04-19Fix universal builds on Darwin PPC: add ppc7400 definitionbarracuda1561-0/+1
2022-03-22OptionOverrideProxy: Handle per-subproject optionsXavier Claessens1-9/+20
2022-03-22OptionOverrideProxy: Make it immutable to avoid copiesXavier Claessens1-16/+11
It is always used as an immutable view so there is no point in doing copies. However, mypy insist it must implement the same APIs as Dict[OptionKey, UserOption[Any]] so keep faking it.
2022-03-13Merge pull request #9339 from dcbaker/submit/structured_sourcesJussi Pakkanen1-0/+10
Structured Sources
2022-03-07treewide: string-quote the first argument to T.castEli Schwartz1-2/+2
Using future annotations, type annotations become strings at runtime and don't impact performance. This is not possible to do with T.cast though, because it is a function argument instead of an annotation. Quote the type argument everywhere in order to have the same effect as future annotations. This also allows linters to better detect in some cases that a given import is typing-only.
2022-03-07mesonlib: Add a from_node initializer to MesonExceptionDylan Baker1-0/+10
This is useful when creating an exception with a node option, with less typing.
2022-03-01mesonlib: use Literal to tighten configure_file formatsDylan Baker1-14/+17
Now that we have strong type checking in the interpreter, we can tighten the type checking in the mesonlib side by using the same Literals.
2022-02-23mesonlib: allow check_dirent_issues to take an iterableDylan Baker1-2/+2
There's no reason it needs a concrete list, any iterable is fine. This does mean that we need to explicitly check for `str | bytes` in the listify pass, as `str` and `bytes` are both iterable.
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-01-26Popen_safe and wrappers can accept os.PathLike for cwdEli Schwartz1-3/+3
Do not require users to convert it to a string first. This is a waste of time and effort for exactly the same results.
2022-01-10manually clean up some python 3.6 era codeEli Schwartz1-7/+3
2021-12-30correct type annotations for File.endswithEli Schwartz1-1/+1
It should accept whatever str.endswith accepts, which means optionally a tuple of options.
2021-12-30Fix mypy 0.930 issuesTristan Partin1-2/+2
Removed errant "type: ignore". Fixed issue with "fetch" call. This issue was the following: Dict::get() and Dict::pop() have the following signature: T.Callable[[_T, _U], _U | None] OR T.Callable[[_T], _U | None] Note how the return type is _U here. When the fetch() function was actually being called, it had the following signature: T.Callable[[_T, T.List[_U]], T.Union[T.List[_U], _U]] This is incompatible with the previous definitions. The solution is simply to move where the default value is introduced if fetch() produces None.
2021-12-22Don't wipe out RPATHs specified by dependenciesNirbheek Chauhan1-0/+4
Since we scan all dependencies for build-only RPATHs now (which are removed on install), we must take care not to add build-only RPATHs pointing to directories that dependencies explicitly add -Wl,-rpath link args for, otherwise the paths will get wiped on install. Caught by LinuxlikeTests::test_usage_pkgconfig_prefixes
2021-12-17Fix mypy errorsDaniel Mensinger1-3/+1
2021-12-15mesonlib: make get_meson_command return an ImmutableListDylan Baker1-2/+2
We really don't want to be mutating global state, so let mypy yell at us when we try.
2021-11-28Add typing to msubprojects.pyTristan Partin1-1/+1
2021-11-25mesonlib: update `OptionKey.__repr__`Dylan Baker1-1/+1
Which is missing several values
2021-11-09depfixer: convert unused printing code to debugging functionsZbigniew Jędrzejewski-Szmek1-0/+9
When installing with 'meson install --quiet' I'd get the following output: This file does not have an rpath. This file does not have a runpath. (It turns out that of the couple hundred of binaries that are installed, this message was generated for /usr/lib/systemd/boot/efi/linuxx64.elf.stub.) There doesn't seem to be any good reason for this output by default. But those functions can still be used for debugging. Under a debugger, returning the string is just as useful as printing it, but more flexible. So let's suppress printing of anything by default, but keep the extractor functions. The code was somewhat inconsistent wrt. to when .decode() was done. But it seems that we'll get can expect a decodable text string in all cases, so just call .decode() everywhere, because it's nicer to print decoded strings.
2021-11-01various manual conversion of percent-formatted strings to f-stringsEli Schwartz1-1/+1
2021-10-27Fix crash when getting cuda optionsXavier Claessens1-14/+5
We could have an OptionOverrideProxy of an OptionOverrideProxy, recursively. This fix is a minimal subset of the refactoring I did in https://github.com/mesonbuild/meson/pull/9394. Instead of faking UserOption we can just do a shallow copy of one and set a new value on it. Fixes: #9448
2021-10-27remove public export of private functionEli Schwartz1-1/+0
2021-10-27fix various flake8 whitespace errorsEli Schwartz1-6/+6
2021-10-10Fix typos discovered by codespellChristian Clauss1-1/+1
2021-10-08python: Add platlibdir and purelibdir optionsXavier Claessens1-1/+1
2021-10-08Add support for module optionsXavier Claessens1-20/+30
2021-10-04mesonlib: ConfigurationData can also be a `Dict[str, Tuple[Str, Optional[str]]]`Dylan Baker1-2/+2
2021-10-04condense linesEli Schwartz1-2/+1
2021-10-04f-stringsEli Schwartz1-2/+2
2021-10-04fix extra whitespaceEli Schwartz1-2/+0
discovered via flake8 --select E303
2021-09-07interpreter: detect and pass compiler to be used for linker testsPaolo Bonzini1-0/+4
Allow using the links method to test that the C++ driver (e.g. g++) can be used to link C objects. One usecase is that the C compiler's libsanitizer might not be compatible with the one included by the C++ driver. This is theoretically backwards-incompatible, but it should be treated as a bugfix in my opinion. There is no way in Meson to compile a .c file with the C++ driver as part of a build target, therefore there would be no reason to do something like meson.get_compiler(meson.get_compiler('cpp').links(files('main.c')). Fixes: #7703
2021-09-03Improve WSL detectionWill1-1/+1
WSL 2 removes the "Microsoft" from `platform.version` but leaves it inside `platform.release`. This lets us detect both types of WSL without issue.
2021-09-02OptionKey: Fix orderingXavier Claessens1-10/+8
When sorting options we want the same order as they are presented in "meson configure" command.
2021-08-31interpreter: use python dunders instead of lock for unpicklabilityDylan Baker1-7/+0
This simplifies things for us, as we don't have to have threading imported for no other reason, and we can remove the `an_unpicklable_object` from the Interpreter and mesonlib, since there was only one user of this.
2021-08-31pylint: turn on superflous-parensDylan Baker1-1/+1
We have a lot of these. Some of them are harmless, if unidiomatic, such as `if (condition)`, others are potentially dangerous `assert(...)`, as `assert(condtion)` works as expected, but `assert(condition, message)` will result in an assertion that never triggers, as what you're actually asserting is `bool(tuple[2])`, which will always be true.
2021-08-22Add subscript to subprocess.PopenTristan Partin1-2/+2
2021-08-20mesonlib: Fix typing of substitute_valuesDylan Baker1-5/+27
This is really, really, annoying. What we really want is (psuedocode): ```python class SubValues(TypedDict[str, str], total=False): @INPUT@: T.List[str] @OUTPUT@: T.List[str] ``` Which would specifiy that `@INPUT@` and `@OUTPUT@` *may* be present and if they are, then they are lists. There may be additional keys, which have a single string as a value. Of course there is currently no way to do that with typing, so we have to instead take a union type and then use asserts to help the type checker unerstand this. More info: https://github.com/python/mypy/issues/4617
2021-08-20mesonlib: Add an exception for what should be unreachable codeDylan Baker1-0/+2
It gives us a little more saftey, and makes pylance happy.