summaryrefslogtreecommitdiff
path: root/mesonbuild/mesonlib.py
Commit message (Collapse)AuthorAgeFilesLines
...
* Fix bug in PerMachine constructorJohn Ericson2018-10-281-1/+1
| | | | Don't make single element tuple
* Merge pull request #4326 from Ericson2314/per-machineJussi Pakkanen2018-10-251-23/+88
|\ | | | | Start leveraging MachineInfo with for_* methods
| * Rewrite `for_*` machine checks in terms of MachineInfo and phase outJohn Ericson2018-10-051-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.
| * Pull out essence total map essence of MachineInfos into PerMachineJohn Ericson2018-10-051-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.
* | os.path.relpath() can fail on WindowsJon Turney2018-10-101-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.
* Move set_meson_command() to mesonlibXavier Claessens2018-10-041-0/+17
|
* mesonlib: use collections.abc for abc typesDylan Baker2018-09-201-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.
* Fix incorrect feature check warningJon Turney2018-09-161-0/+1
| | | | | Fix the special handling of '>=0.nn' constraints in project(meson_version:) for feature checks when the constraint version contains spaces
* Correct version_compare_condition_with_min()Jon Turney2018-09-121-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)
* Allow features added in 0.nn.0 to be used when version constraint is '>=0.nn'Jon Turney2018-09-121-0/+14
|
* Use the exact current version in obtainMesonOutputJon Turney2018-09-121-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
* Re-implement version_compare_condition_with_min likewiseJon Turney2018-09-111-54/+3
| | | | | Also remove unused version_compare_with_max Also remove now unused make_same_len
* Re-implement version_compare using RPM-style version comparisonJon Turney2018-09-111-12/+60
|
* PkgConfigDependency: Fix library path search orderNirbheek Chauhan2018-08-081-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
* Prints error message instead of backtrace on failNiklas Claesson2018-08-071-1/+1
|
* Refactor getting the host system of a cross compilerGeorge Koehler2018-08-071-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.
* Merge pull request #3850 from mesonbuild/nirbheek/exe-wrapper-compiler-fallbacksJussi Pakkanen2018-07-311-0/+6
|\ | | | | Be more permissive about not-found exe_wrapper
| * cross: Use ExternalProgram for cross-file exe_wrapperNirbheek Chauhan2018-07-091-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.
* | Fix searching of shared libraries on OpenBSD (#3851)Nirbheek Chauhan2018-07-091-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
* Print a more usable message when a subproject fails to configureNirbheek Chauhan2018-07-071-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.
* Raise a MesonException when substituting an invalid valueNirbheek Chauhan2018-07-071-1/+3
| | | | Avoids throwing a traceback. Also, warn when setting such a value.
* configure_file: Don't optimize away substitutionsNirbheek Chauhan2018-07-041-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
* FeatureNew: Make all checks subproject-specificNirbheek Chauhan2018-07-021-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()
* Various bug fixes for FeatureNewSalamandar2018-07-021-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
* run_command: Add new kwarg 'capture'Nirbheek Chauhan2018-06-181-9/+6
| | | | | | capture: false means we won't try to read the stdout at all. Closes https://github.com/mesonbuild/meson/issues/3364
* Add file encoding to configure_fileSander Sweers2018-06-091-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.
* Fix #mesondefine token error message formattingMarvin Scholz2018-06-031-1/+1
|
* Make windows_proof_rmtree resilient to read-only filesFilipe Brandenburger2018-06-021-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.
* Merge pull request #3486 from Salamandar/salamandar/meson_version_introspectionJussi Pakkanen2018-06-011-0/+70
|\ | | | | Add FeatureNew and FeatureDeprecated, to alert the user of bad meson_version
| * Move target_version from coredata to mesonlibSalamandar2018-06-011-0/+2
| |
| * Add version_compare_condition_with_{min,max} for specific comparison utils.Salamandar2018-06-011-0/+68
| | | | | | | | | | Split FeatureNew and FeatureDeprecated Implement features report to be printed in some 'dev mode'
* | Set the meson command to use when we know what it isNirbheek Chauhan2018-06-011-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.
* | configure_file: Add output_format kwarg (#3636)Mathieu Duponchelle2018-06-011-9/+27
|/ | | | | | * configure_file: Add output_format kwarg * docs: Reference-manual.md output_format was added in 0.47 [skip ci]
* Revert "mesonlib: handle meson exe wrappers"Nirbheek Chauhan2018-05-311-1/+47
| | | | | | | | This reverts commit 0627e9d616dc311b7c9b0ef17301f680ac9e78a7. Breaks installation: https://github.com/mesonbuild/meson/issues/3647 Will be restored once that can be fixed.
* mesonlib: handle meson exe wrappersMartin Kelly2018-05-301-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.
* for_darwin: Also accept system='ios' in cross filesNirbheek Chauhan2018-05-211-1/+1
|
* add linker flag to handle $ORIGIN on OpenBSDJasper Lievisse Adriaanse2018-05-041-0/+3
|
* Fix encoding bug on WindowsRobin2018-04-141-1/+3
|
* add support for cmakedefine in configure_file()David Fort2018-04-081-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.
* Grab a file lock on the build dir during modifications.Jussi Pakkanen2018-03-201-0/+38
|
* Create a helper for checking if a string has a path componentNirbheek Chauhan2018-03-191-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.
* mesonlib: fix meson detection (again)Mathieu Duponchelle2018-03-071-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.
* rmtree: Don't retry when the file is not foundNirbheek Chauhan2018-02-201-0/+2
| | | | No need to pointlessly loop for several seconds in this case.
* Support running out-of-tree tests against a meson in PATHNirbheek Chauhan2018-02-201-5/+11
| | | | Closes https://github.com/mesonbuild/meson/issues/3015
* Don't version shared libraries for AndroidRobert Bragg2018-02-041-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.
* Use os.path: basename() and dirname() instead of split()Aleksey Filippov2018-01-301-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
* dump_conf_header should rewrite file only if modified (just like ↵Salamandar2018-01-301-1/+3
| | | | | | do_conf_file) (#2952)
* Merge pull request #2803 from dcbaker/wip/freebsd-fixesJussi Pakkanen2018-01-091-0/+6
|\ | | | | various BSD fixes
| * LLVM: use DragonFly BSD workaround on FreeBSD as wellDylan Baker2018-01-061-0/+3
| |
| * compilers: fix unittest "16 prebuilt shared" on dragonfly bsdDylan Baker2018-01-061-0/+3
| |