summaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
AgeCommit message (Collapse)Author
2019-02-20Fix default_libdir() on FreeBSDNiclas Zeising
Fix defaul_libdir() on FreeBSD. The current behaviour of using usr/lib64 if that exists is wrong on FreeBSD. The default should be to always use usr/lib, even if usr/lib64 exists as a folder in the file system. Fix this by checking if we're running on FreeBSD and then always return 'lib' in default_libdir().
2019-02-13add type hintingMichael Hirsch, Ph.D
more type hints syntax modernization / robustify syntax typo more effective directory collection
2019-02-11mesonlib: Use class syntax for defining MachineChoiceDylan Baker
Mypy struggles with the imperative form of Enum declaration, and upstream doesn't consider it a bug, they recomend using the class form for enums that are going to be externally exposed.
2019-02-01macos: lipo outputs aarch64 as arm64, fix itNirbheek Chauhan
Or we'll reject arm64 objects as invalid when building for aarch64
2019-01-31macos: lipo from older xcode does not support -archsNirbheek Chauhan
2019-01-31find_library: Check arch of libraries on DarwinNirbheek Chauhan
macOS provides the tool `lipo` to check the archs supported by an object (executable, static library, dylib, etc). This is especially useful for fat archives, but it also helps with thin archives. Without this, the linker will fail to link to the library we mistakenly 'found' like so: ld: warning: ignoring file /path/to/libfoo.a, missing required architecture armv7 in file /path/to/libfoo.a
2019-02-01Rewrite appleframework and extraframework dependency classesNirbheek Chauhan
Instead of only doing a naive filesystem search, also run the linker so that it can tell us whether the -F path specified actually contains the framework we're looking for. Unfortunately, `extraframework` searching is still not 100% correct in the case when since we want to search in either /Library/Frameworks or in /System/Library/Frameworks but not in both. The -Z flag disables searching in those prefixes and would in theory allow this, but then you cannot force the linker to look in those by manually adding -F args, so that doesn't work.
2019-01-29pep8 py37Michael Hirsch, Ph.D
2019-01-24configure_file: preserve newlines of the input file. Fixes #4817Christoph Reiter
In some cases (see #4817) it's helpful if the output file uses the same newlines as the input file without translating them to the platform defaults. open() by default recognizes all newline styles and translates them to "\n" and then to the platform default when writing. Passing "" to "newline" disables the translation and lets us pass through the original newline characters.
2018-12-20msetup: Fix callig meson --wipe inside a build directoryDylan Baker
This seems to be related to deleting the current working directory. Simply deleting all of the trees inside the build directory instead seems to fix it. This only appears with some combination of generated targets, running the test case against say "1 trivial" doesn't show the bug. See this mesa bug: https://bugs.freedesktop.org/show_bug.cgi?id=109071
2018-11-02meson: performance optimizethe file objectMarcel Hollerbach
reduce the amount of access calls to the os. This safes ~1 sec. build time
2018-10-28Fix bug in PerMachine constructorJohn Ericson
Don't make single element tuple
2018-10-25Merge pull request #4326 from Ericson2314/per-machineJussi Pakkanen
Start leveraging MachineInfo with for_* methods
2018-10-10os.path.relpath() can fail on WindowsJon Turney
If builddir and sourcedir have different drive letters, a relative path doesn't exist, and os.path.relpath fails with a ValueError exception. This just fixes the places which are hit by test cases in a simple-minded way. There are several other uses of os.path.relpath(), which might be suspect.
2018-10-05Rewrite `for_*` machine checks in terms of MachineInfo and phase outJohn Ericson
It's much better to directly query the machine in question rather than do some roundabout "is_cross" thing. This is the first step for much natve- and cross- code path deduplication.
2018-10-05Pull out essence total map essence of MachineInfos into PerMachineJohn Ericson
We'll eventually have many other data structure duplicated for each build, host, and target machines. This sets up the infrastructure for that.
2018-10-04Move set_meson_command() to mesonlibXavier Claessens
2018-09-20mesonlib: use collections.abc for abc typesDylan Baker
The use of ABC classes (like MutableSet) is deprecated currently, in python 3.8 the aliases in collections will be dropped and only the ones in collections.abc will remain. collections.abc has existed since python 3.3, so there is no backwards compatibility risk.
2018-09-16Fix incorrect feature check warningJon Turney
Fix the special handling of '>=0.nn' constraints in project(meson_version:) for feature checks when the constraint version contains spaces
2018-09-12Correct version_compare_condition_with_min()Jon Turney
Correct version_compare_condition_with_min() for the case where no minimum version is established by the version constraint. Add a simple test. Also fix test_feature_check_usage_subprojects by escaping regex metacharacters. if |condition| is '<', '<=' or '!=', the minimum version satisfying the condition is 0, so the minimum version for a feature is never met. if |condition| is '>=' or '==', the minimum version satisfying the condition is the version compared with, so the minimum version for a feature must be less than or equal to that. if |condition| is '>', the minimum version satisfying the condition is greater than the version compared with, so the minimum version for a feature must be less than that (it's this last condition that makes this function necessary, as in all other cases we could establish a definite minimum version which we could compare to see if it's less than or equal to the current version)
2018-09-12Allow features added in 0.nn.0 to be used when version constraint is '>=0.nn'Jon Turney
2018-09-12Use the exact current version in obtainMesonOutputJon Turney
Currently this trims '0.48.0.dev1' to '0.48.0', and then requires exactly that version in the generated meson.build for the test. Just use the exact version. Also only use a 'project(meson_version:)' constraint in the generated project if a version is specified Also remove unused grab_leading_numbers
2018-09-11Re-implement version_compare_condition_with_min likewiseJon Turney
Also remove unused version_compare_with_max Also remove now unused make_same_len
2018-09-11Re-implement version_compare using RPM-style version comparisonJon Turney
2018-08-08PkgConfigDependency: Fix library path search orderNirbheek Chauhan
We were searching the library paths in the reverse order, which meant that we'd pick libraries from the wrong prefix. Closes https://github.com/mesonbuild/meson/issues/3951
2018-08-07Prints error message instead of backtrace on failNiklas Claesson
2018-08-07Refactor getting the host system of a cross compilerGeorge Koehler
Use mesonlib.for_windows or mesonlib.for_cygwin instead of reimplementing them. Add CrossBuildInfo.get_host_system to shorten the repeated the code in the mesonlib.for_<platform> methods.
2018-07-31Merge pull request #3850 from mesonbuild/nirbheek/exe-wrapper-compiler-fallbacksJussi Pakkanen
Be more permissive about not-found exe_wrapper
2018-07-09Fix searching of shared libraries on OpenBSD (#3851)Nirbheek Chauhan
* get_library_naming: Use templates instead of suffix/prefix pairs This commit does not change functionality, and merely sets the groundwork for a more flexibly naming implementation. * find_library: Fix manual searching on OpenBSD On OpenBSD, shared libraries are called libfoo.so.X.Y where X is the major version and Y is the minor version. We were assuming that it's libfoo.so and not finding shared libraries at all while doing manual searching, which meant we'd link statically instead. See: https://www.openbsd.org/faq/ports/specialtopics.html#SharedLibs Now we use file globbing to do searching, and pick the first one that's a real file. Closes https://github.com/mesonbuild/meson/issues/3844 * find_library: Fix priority of library search in OpenBSD Also add unit tests for the library naming function so that it's absolutely clear what the priority list of naming is. Testing is done with mocking on Linux to ensure that local testing is easy
2018-07-09cross: Use ExternalProgram for cross-file exe_wrapperNirbheek Chauhan
We already have code to fetch and find binaries specified in a cross file, so use the same code for exe_wrapper. This allows us to handle the same corner-cases that were fixed for other cross binaries.
2018-07-07Print a more usable message when a subproject fails to configureNirbheek Chauhan
Instead of just printing the message in the exception, if it's a MesonException, also print the file and the line number. If it's an unknown exception, print the entire traceback so that we can pin-point what the Meson bug causing it is.
2018-07-07Raise a MesonException when substituting an invalid valueNirbheek Chauhan
Avoids throwing a traceback. Also, warn when setting such a value.
2018-07-04configure_file: Don't optimize away substitutionsNirbheek Chauhan
It's possible that the configuration data object has components added conditionally, and that sometimes an empty configuration data object is passed on purpose. Instead, we do the substitution and also warn if no tokens were found that could've been substituted. Closes https://github.com/mesonbuild/meson/issues/3826
2018-07-02FeatureNew: Make all checks subproject-specificNirbheek Chauhan
We now pass the current subproject to every FeatureNew and FeatureDeprecated call. This requires a bunch of rework to: 1. Ensure that we have access to the subproject in the list of arguments when used as a decorator (see _get_callee_args). 2. Pass the subproject to .use() when it's called manually. 3. We also can't do feature checks for new features in meson_options.txt because that's parsed before we know the meson_version from project()
2018-07-02Various bug fixes for FeatureNewSalamandar
* Use _get_callee_args to unwrap function call arguments, needed for module functions. * Move some FeatureNewKwargs from build.py to interpreter.py * Print a summary for featurenew only if conflicts were found. The summary now only prints conflicting features. * Report and store featurenew/featuredeprecated only once * Fix version comparison: use le/ge and resize arrays to not fail on '0.47.0>=0.47' Closes https://github.com/mesonbuild/meson/issues/3660
2018-06-18run_command: Add new kwarg 'capture'Nirbheek Chauhan
capture: false means we won't try to read the stdout at all. Closes https://github.com/mesonbuild/meson/issues/3364
2018-06-09Add file encoding to configure_fileSander Sweers
Input files can be in any file encoding, not just utf-8 or isolatin1. Meson should not make assumptions here and allow for the user to specify the encoding to use.
2018-06-03Fix #mesondefine token error message formattingMarvin Scholz
2018-06-02Make windows_proof_rmtree resilient to read-only filesFilipe Brandenburger
Start the process by traversing the tree and adding the S_IWRITE and S_IREAD bits to the file's mode (which are also preserved on Windows.) This fixes windows_proof_rmtree's inability to remove read-only files, which was uncovered in testing the new `install_mode` feature. Tested: ./run_tests.py passes on Linux, appveyor CI on Windows passes.
2018-06-01Merge pull request #3486 from Salamandar/salamandar/meson_version_introspectionJussi Pakkanen
Add FeatureNew and FeatureDeprecated, to alert the user of bad meson_version
2018-06-01Set the meson command to use when we know what it isNirbheek Chauhan
Instead of using fragile guessing to figure out how to invoke meson, set the value when meson is run. Also rework how we pass of meson_script_launcher to regenchecker.py -- it wasn't even being used With this change, we only need to guess the meson path when running the tests, and in that case: 1. If MESON_EXE is set in the env, we know how to run meson for project tests. 2. MESON_EXE is not set, which means we run the configure in-process for project tests and need to guess what meson to run, so either - meson.py is found next to run_tests.py, or - meson, meson.py, or meson.exe is in PATH Otherwise, you can invoke meson in the following ways: 1. meson is installed, and mesonbuild is available in PYTHONPATH: - meson, meson.py, meson.exe from PATH - python3 -m mesonbuild.mesonmain - python3 /path/to/meson.py - meson is a shell wrapper to meson.real 2. meson is not installed, and is run from git: - Absolute path to meson.py - Relative path to meson.py - Symlink to meson.py All these are tested in test_meson_commands.py, except meson.exe since that involves building the meson msi and installing it.
2018-06-01configure_file: Add output_format kwarg (#3636)Mathieu Duponchelle
* configure_file: Add output_format kwarg * docs: Reference-manual.md output_format was added in 0.47 [skip ci]
2018-06-01Move target_version from coredata to mesonlibSalamandar
2018-06-01Add version_compare_condition_with_{min,max} for specific comparison utils.Salamandar
Split FeatureNew and FeatureDeprecated Implement features report to be printed in some 'dev mode'
2018-05-31Revert "mesonlib: handle meson exe wrappers"Nirbheek Chauhan
This reverts commit 0627e9d616dc311b7c9b0ef17301f680ac9e78a7. Breaks installation: https://github.com/mesonbuild/meson/issues/3647 Will be restored once that can be fixed.
2018-05-30mesonlib: handle meson exe wrappersMartin Kelly
There are cases when it is useful to wrap the main meson executable with a script that sets up environment variables, passes --cross-file, etc. For example, in a Yocto SDK, we need to point to the right meson.cross so that everything "just works", and we need to alter CC, CXX, etc. In such cases, it can happen that the "meson" found in the path is actually a wrapper script that invokes the real meson, which may be in another location (e.g. "meson.real" or similar). Currently, in such a situation, meson gets confused because it tries to invoke itself using the "meson" executable (which points to the wrapper script) instead of the actual meson (which may be called "meson.real" or similar). In fact, the wrapper script is not necessarily even Python, so the whole thing fails. Fix this by using Python imports to directly find mesonmain.py instead of trying to detect it heuristically. In addition to fixing the wrapper issue, this should make the detection logic much more robust.
2018-05-21for_darwin: Also accept system='ios' in cross filesNirbheek Chauhan
2018-05-04add linker flag to handle $ORIGIN on OpenBSDJasper Lievisse Adriaanse
2018-04-14Fix encoding bug on WindowsRobin
2018-04-08add support for cmakedefine in configure_file()David Fort
The added format argument for configure_file allows to specify the kind of file that is treated. It defaults to 'meson', but can also have the 'cmake' or 'cmake@' value to treat config.h.in files in the cmake format with #cmakedefine statements.