aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
AgeCommit message (Collapse)AuthorFilesLines
2018-11-02meson: performance optimizethe file objectMarcel Hollerbach1-0/+5
reduce the amount of access calls to the os. This safes ~1 sec. build time
2018-10-28Fix bug in PerMachine constructorJohn Ericson1-1/+1
Don't make single element tuple
2018-10-25Merge pull request #4326 from Ericson2314/per-machineJussi Pakkanen1-23/+88
Start leveraging MachineInfo with for_* methods
2018-10-10os.path.relpath() can fail on WindowsJon Turney1-0/+9
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 Ericson1-23/+39
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 Ericson1-0/+49
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 Claessens1-0/+17
2018-09-20mesonlib: use collections.abc for abc typesDylan Baker1-1/+1
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 Turney1-0/+1
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 Turney1-3/+3
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 Turney1-0/+14
2018-09-12Use the exact current version in obtainMesonOutputJon Turney1-13/+0
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 Turney1-54/+3
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 Turney1-12/+60
2018-08-08PkgConfigDependency: Fix library path search orderNirbheek Chauhan1-0/+3
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 Claesson1-1/+1
2018-08-07Refactor getting the host system of a cross compilerGeorge Koehler1-18/+6
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 Pakkanen1-0/+6
Be more permissive about not-found exe_wrapper
2018-07-09Fix searching of shared libraries on OpenBSD (#3851)Nirbheek Chauhan1-0/+12
* 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 Chauhan1-0/+6
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 Chauhan1-0/+10
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 Chauhan1-1/+3
Avoids throwing a traceback. Also, warn when setting such a value.
2018-07-04configure_file: Don't optimize away substitutionsNirbheek Chauhan1-1/+7
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 Chauhan1-2/+2
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 FeatureNewSalamandar1-9/+18
* 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 Chauhan1-9/+6
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 Sweers1-4/+7
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 Scholz1-1/+1
2018-06-02Make windows_proof_rmtree resilient to read-only filesFilipe Brandenburger1-0/+13
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 Pakkanen1-0/+70
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 Chauhan1-47/+1
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 Duponchelle1-9/+27
* 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 mesonlibSalamandar1-0/+2
2018-06-01Add version_compare_condition_with_{min,max} for specific comparison utils.Salamandar1-0/+68
Split FeatureNew and FeatureDeprecated Implement features report to be printed in some 'dev mode'
2018-05-31Revert "mesonlib: handle meson exe wrappers"Nirbheek Chauhan1-1/+47
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 Kelly1-47/+1
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 Chauhan1-1/+1
2018-05-04add linker flag to handle $ORIGIN on OpenBSDJasper Lievisse Adriaanse1-0/+3
2018-04-14Fix encoding bug on WindowsRobin1-1/+3
2018-04-08add support for cmakedefine in configure_file()David Fort1-7/+22
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.
2018-03-20Grab a file lock on the build dir during modifications.Jussi Pakkanen1-0/+38
2018-03-19Create a helper for checking if a string has a path componentNirbheek Chauhan1-0/+6
This is used in a number of places, and in some places it is incomplete. Use a helper to ensure it's used properly.
2018-03-07mesonlib: fix meson detection (again)Mathieu Duponchelle1-5/+4
Starting from 8fc424418720da4ef61bde9348f4cc1a149d1cb2, tests failed on my system (python 3.6 arch) because shutil.which('meson.py') returns 'meson.py', not './meson.py'. Refactor that codepath by using os.path.isabs instead of "m_dir == '.'", also remove the adjacent comment because it doesn't make much sense.
2018-02-20rmtree: Don't retry when the file is not foundNirbheek Chauhan1-0/+2
No need to pointlessly loop for several seconds in this case.
2018-02-20Support running out-of-tree tests against a meson in PATHNirbheek Chauhan1-5/+11
Closes https://github.com/mesonbuild/meson/issues/3015
2018-02-04Don't version shared libraries for AndroidRobert Bragg1-0/+15
Android's loader doesn't handle shared library versioning so this avoids adding a suffix to the filename or soname for Android hosts.
2018-01-30Use os.path: basename() and dirname() instead of split()Aleksey Filippov1-3/+3
According to Python documentation[1] dirname and basename are defined as follows: os.path.dirname() = os.path.split()[0] os.path.basename() = os.path.split()[1] For the purpose of better readability split() is replaced by appropriate function if only one part of returned tuple is used. [1]: https://docs.python.org/3/library/os.path.html#os.path.split
2018-01-30dump_conf_header should rewrite file only if modified (just like ↵Salamandar1-1/+3
do_conf_file) (#2952)
2018-01-09Merge pull request #2803 from dcbaker/wip/freebsd-fixesJussi Pakkanen1-0/+6
various BSD fixes
2018-01-07Merge pull request #2840 from alyst/fix_detect_locationJussi Pakkanen1-18/+29
Fix meson location detection from other meson tools