aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/msetup.py
AgeCommit message (Collapse)AuthorFilesLines
2023-08-25msetup: Update options when builddir is already configuredXavier Claessens1-19/+15
`meson setup -Dfoo=bar builddir` command was returning success ignoring new option values. This now also update options. It is useful because it means `meson setup -Dfoo=bar builddir && ninja -C builddir` works regardless whether builddir already exists or not, and when done in a script, changing options in the script will automatically trigger a reconfigure if needed. This was already possible by always passing --reconfigure argument, but that triggers a reconfigure even when options did not change.
2023-07-24fix a few miscellaneous implicit-optional typing issuesEli Schwartz1-4/+4
2023-07-21Display more timestamps when profiling ninjaCharles Brunet1-0/+2
When running setup with `--profile-self` option, there are currently no logs after "Found ninja...". However, there are still some lengthy processes for generating targets and ninja.build. This add more log entries, when profiling, only for the purpose of displaying the timestamps of the different steps in ninja generation.
2023-07-03fix the use of setup --profile-self in combination with --genvsliteDan Hawson1-2/+4
After the recent change to the backend `generate(...)` signature for '--genvslite', `profile.runctx('...')` needs to construct the correct cmd string and also extract the return result from `locals()`.
2023-07-02genvslite: greatly simplify the implementation of non-genvslite backendsEli Schwartz1-14/+7
By avoiding Java-style variable naming, the code becomes considerably more readable while simultaneously becoming *more* easy to understand. It's no longer necessary to ask questions like "what's a captured buildtype" when trying to read through the code for a backend, because it can be dismissed as not relevant to the current context by re-reading it as "context for vslite". The primary goal here has been to revert regressions in the developer experience for users of the ninja backend, so there may still be issues in vs2010backend.py Post-facto application of issues that were raised during review, ignored, and merged despite such.
2023-07-02genvslite: fix badly overflowing line lengthsEli Schwartz1-1/+3
Function comments that overflow the screen width by coming after code, instead of on their own line, are hard to read. Same applies to message strings that are all on one line. Fix by reflowing them. Post-facto application of issues that were caught during post-merge review, after the genvslite PR was merged without a full review.
2023-06-28Experimental 'genvslite' WIP. (#11049)GertyP1-6/+55
* Capture all compile args from the first round of ninja backend generation for all languages used in building the targets so that these args, defines, and include paths can be applied to the .vcxproj's intellisense fields for all buildtypes/configurations. Solution generation is now set up for mutiple build configurations (buildtypes) when using '--genvslite'. All generated vcxprojs invoke the same high-level meson compile to build all targets; there's no selective target building (could add this later). Related to this, we skip pointlessly generating vcxprojs for targets that aren't buildable (BuildTarget-derived), which aren't of interest to the user anyway. When using --genvslite, no longer inject '<ProjectReference ...>' dependencies on which a generated .vcxproj depends because that imposes a forced visual studio build dependency, which we don't want, since we're essentially bypassing VS's build in favour of running 'meson compile ...'. When populating the vcxproj's shared intellisense defines, include paths, and compiler options fields, we choose the most frequent src file language, since this means more project src files can simply reference the project shared fields and fewer files of non-primary language types need to populate their full set of intellisense fields. This makes for smaller .vcxproj files. Paths for generated source/header/etc files, left alone, would be added to solution projects relative to the '..._vs' build directory, where they're never generated; they're generated under the respective '..._[debug/opt/release]' ninja build directories that correspond to the solution build configuration. Although VS doesn't allow conditional src/header listings in vcxprojs (at least not in a simple way that I'm aware of), we can ensure these generated sources get adjusted to at least reference locations under one of the concrete build directories (I've chosen '..._debug') under which they will be generated. Testing with --genvslite has revealed that, in some cases, the presence of 'c:\windows\system32;c:\windows' on the 'Path' environment variable (via the make-style project's ExecutablePath element) is critical to getting the 'meson compile ...' build to succeed. Not sure whether this is some 'find and guess' implicit defaults behaviour within meson or within the MSVC compiler that some projects may rely on. Feels weird but not sure of a better solution than forcibly adding these to the Path environment variable (the Executable Path property of the project). Added a new windows-only test to windowstests.py ('test_genvslite') to exercise the --genvslite option along with checking that the 'msbuild' command invokes the 'meson compile ...' of the build-type-appropriate-suffixed temporary build dir and checks expected program output. Check and report error if user specifies a non-ninja backend with a 'genvslite' setup, since that conflicts with the stated behaviour of genvslite. Also added this test case to 'WindowsTests.test_genvslite' I had problems tracking down some problematic environment variable behaviour, which appears to need a work-around. See further notes on VSINSTALLDIR, in windowstests.py, test_genvslite. 'meson setup --help' clearly states that positional arguments are ... [builddir] [sourcedir]. However, BasePlatformTests.init(...) was passing these in the order [sourcedir] [builddir]. This was producing failures, saying, "ERROR: Neither directory contains a build file meson.build." but when using the correct ordering, setup now succeeds. Changed regen, run_tests, and run_install utility projects to be simpler makefile projects instead, with commands to invoke the appropriate '...meson.py --internal regencheck ...' (or install/test) on the '[builddir]_[buildtype]' as appropriate for the curent VS configuration. Also, since the 'regen.vcxproj' utility didn't work correctly with '--genvslite' setup build dirs, and getting it to fully work would require more non-trivial intrusion into new parts of meson (i.e. '--internal regencheck', '--internal regenerate', and perhaps also 'setup --reconfigure'), for now, the REGEN project is replaced with a simpler, lighter-weight RECONFIGURE utility proj, which is unlinked from any solution build dependencies and which simply runs 'meson setup --reconfigure [builddir]_[buildtype] [srcdir]' on each of the ninja-backend build dirs for each buildtype. Yes, although this will enable the building/compiling to be correctly configured, it can leave the solution/vcxprojs stale and out-of-date, it's simple for the user to 'meson setup --genvslite ...' to fully regenerate an updated, correct solution again. However, I've noted this down as a 'fixme' to consider implementing the full regen behaviour for the genvslite case. * Review feedback changes - - Avoid use of 'captured_compile_args_per_buildtype_and_target' as an 'out' param. - Factored a little msetup.py, 'run(...)' macro/looping setup steps, for genvslite, out into a 'run_genvslite_setup' func. * Review feedback: Fixed missing spaces between multi-line strings. * 'backend_name' assignment gets immediately overwritten in 'genvslite' case so moved it into else/non-genvslite block. * Had to bump up 'test cases/unit/113 genvslites/...' up to 114; it collided with a newly added test dir again. * Changed validation of 'capture' and 'captured_compile_args_...' to use MesonBugException instead of MesonException. * Changed some function param and closing brace indentation.
2023-06-26pkgconfig: move uninstalled devenv handling from setup to the module hookEli Schwartz1-3/+1
msetup.py doesn't need to know the gory details of PkgConfigDependency, or directly import it at program startup. It's also slightly wasteful to generate a devenv for the -uninstalled directory when a project doesn't even, in the end, use the pkgconfig module anyway.
2023-06-26add profiling startup import check and testcase to count itEli Schwartz1-15/+13
2023-06-25msetup: place profiling logs in the log directoryEli Schwartz1-3/+3
2023-05-02update the devenv module hooks to support generic modifications to BuildEli Schwartz1-5/+4
We may want to do things like update install scripts as well, which have to happen before generating the backend. Instead of adding one module method per thing to do, use a single function that allows for modifying the Build object directly.
2023-03-30msetup: Allow (re)configure of not empty builddirXavier Claessens1-1/+4
Also prevent from using a parent directory as builddir by mistake. Co-authored-by: Volker Weißmann <volker.weissmann@gmx.de> Co-authored-by: Charles Brunet <charles.brunet@optelgroup.com>
2023-03-30msetup: use more consistent exceptions on exitXavier Claessens1-8/+13
- MesonException for errors is clearer than SystemExit('error message') and provides meson-formatted "ERROR: ..." - `raise SystemExit` with no parameter isn't obvious that it intends to exit successfully While clarifying the latter, it was observed to cause test_preprocessor_checks_CPPFLAGS() failure to be ignored. That test checks get_define() on both c and cpp compilers, which means we need to define either CPPFLAGS or both CFLAGS+CXXFLAGS.
2023-03-29Make --vsenv a readonly builtin optionXavier Claessens1-4/+0
We need to remember its value when reconfiguring, but the Build object is not reused, only coredata is. This also makes CLI more consistent by allowing `-Dvsenv=true` syntax. Fixes: #11309
2023-03-27Allow --reconfigure and --wipe of empty builddirXavier Claessens1-13/+13
This allows to run setup command regardless whether the builddir has been configured or not previously. This is useful for example with scripts that always repeat all options. meson setup builddir --reconfigure -Dfoo=bar
2023-02-28msetup: clarify error message when wrong directories are specifiedEli Schwartz1-10/+13
This can happen from typos, which then confusingly claim that neither build directory has a meson.build file because the implicit . directory was not actually one of the directories. Instead a random command line argument was interpreted as a directory name. Fixes #11472
2023-02-01treewide: add future annotations importEli Schwartz1-0/+1
2023-01-03msetup: do some stupid casting to make mypy happyDylan Baker1-4/+5
mypy is pretty dumb when it comes to unions of callables (pylance is also dumb in this regard), and can't figure out that our use of `mlog.debug | mlog.log` is perfectly safe. We also can't annotate them properly to cast them to a valid subset of arguments because you can't have splats in `typing.Callable`, so I've done enough to make it work.
2022-11-29pylint: enable used-before-assignmentDylan Baker1-1/+3
The one case of this was a false-positive, but what we were doing (checking locals()) is not idiomatic. I've replaced the call to `locals()` with the obvious `var: T.Optional[str] = None` with check instead.
2022-09-19avoid importing the entire codebase at first startupEli Schwartz1-1/+5
We want to optimize out some internal codepaths used at build time by avoiding work such as argparse. This doesn't work particularly well when the argparse arguments are imported before then. Between them, they indirectly import pretty much all code anywhere, and msetup alone imports most of it. Also make sure the regenerate internal script goes directly to msetup.
2022-08-22fix up some message strings that don't include "setup" in the configure commandEli Schwartz1-1/+1
2022-05-04devenv: Use PkgConfigDependency.get_env()Xavier Claessens1-1/+3
This ensures that PKG_CONFIG_PATH, PKG_CONFIG_LIBDIR and PKG_CONFIG_SYSROOT_DIR are also set properly.
2022-02-28Add API for modules that wants to define their devenvXavier Claessens1-1/+8
2021-10-10Add --vsenv command line option and active VS only when neededXavier Claessens1-0/+4
2021-09-12deprecate layout=flat and warn people never to use itEli Schwartz1-0/+7
It's broken in various circumstances, no one seems to actually use it, CI doesn't test it, no one is committed to maintaining it, etc. etc. etc. Also, projects doing trivially reasonable things, such as generating "foo/util.py" and "bar/util.py", create clashing output names. This will never, ever, ever, ever work with layout=flat. Closes #996 Closes #1521 Closes #1908 Closes #7133 Closes #7135 Closes #7480 Closes #8378
2021-09-12msetup: make xcode unsupported warning actually showEli Schwartz1-2/+5
Until we invoke interpreter.Interpreter(b, ...) the coredata options still have their default values and thus cannot be used sensibly. Currently the warning never shows (other than, unsurprising in retrospect, during --internal regenerate).
2021-09-02interpreter: Add summary of all user defined optionsXavier Claessens1-8/+7
It is a commonly needed information to help debugging build issues. We already were printing options with non-default value at the end of the configure but outside of the summary. Keeping the list of user defined options in the interpreter will also in the future be useful to use new default value on reconfigure.
2021-06-29fix: Always explicitly set encoding for text files (fixes #8263)Daniel Mensinger1-2/+2
2021-04-17msetup: Restore .gitignore after wipeXavier Claessens1-0/+1
2021-03-22cmd_line_file.txt: Use cross/native file path resolved by coredataXavier Claessens1-0/+4
This fix issue when using --wipe and the machine file was passed as a pipe and written locally, or when the file was resolved in XDG_DATA_HOME or XDG_DATA_DIRS. Fixes: #8560
2021-03-16Add `meson devenv` command and meson.add_devenv()Xavier Claessens1-0/+1
2021-03-04mass rewrite of string formatting to use f-strings everywhereEli Schwartz1-6/+6
performed by running "pyupgrade --py36-plus" and committing the results
2021-01-04Use a single coredata dictionary for optionsDylan Baker1-1/+1
This patches takes the options work to it's logical conclusion: A single flat dictionary of OptionKey: UserOptions. This allows us to simplify a large number of cases, as we don't need to check if an option is in this dict or that one (or any of 5 or 6, actually).
2021-01-04use OptionKey for builtin and base optionsDylan Baker1-1/+1
I would have prefered to do these seperatately, but they are combined in some cases, so it was much easier to convert them together. this eliminates the builtins_per_machine dict, as it's duplicated with the OptionKey's machine parameter.
2020-12-28Incorrect source-build directory error when using network paths on WindowsSamuel Longchamps1-2/+5
2020-12-13Add VCS ignore files to build dir on creation. Closes #6509.Jussi Pakkanen1-0/+19
2020-11-07Fix host machine reporting typo in msetup.pyCorey McNeish1-1/+1
2020-09-13mcompile: Add some basic XCode supportNirbheek Chauhan1-0/+2
I wrote this to convert run_tests.get_backend_commands() over to the new meson wrappers, but that turned out to be harder than I expected, so just splitting this out for now.
2020-09-08typing: more fixesDaniel Mensinger1-6/+12
2020-09-08typing: fully annotate mcompile, minit, and msetupDaniel Mensinger1-5/+5
2020-04-29Fix symlink deletion with --wipe optionLaurent Pinchart1-1/+1
When wiping a build tree with --wipe, every entry in the build directory is removed with mesonlib.windows_proof_rmtree() for directories and mesonlib.windows_proof_rm() for other files. Symlinks to directories are considered directories, resulting in the former being called. This causes an exception to be raised, as the implementation calls shutil.rmtree(), which isn't allowed on symlinks. Fix this by using mesonlib.windows_proof_rm() for symlinks. Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
2020-04-10Fix typo in help of option '--wipe' [skip ci]Jens Carl1-1/+1
2020-03-03Cherry-picking - (rm python2 % add python3 .format) (#6725)Michael Brockus1-4/+4
2020-02-12meson: unbreak --profile-selfMarcel Hollerbach1-1/+1
This broke in 668610c0d2b0f3a66d96022eb57afe5b09c3a2b7.
2020-01-28backend: refactor: set self.interpreter in the constructorDaniel Mensinger1-1/+1
2020-01-08types: import typing as T (fixes #6333)Daniel Mensinger1-3/+3
2019-11-07CI: add initial type annotation checkingMichael Hirsch, Ph.D1-7/+7
2019-09-25Print user defined options in meson-log.txtXavier Claessens1-0/+1
It can be useful to know what options have been passed to the command line, excluding default values. Closes: #5956
2019-08-12Put native file before cross file in options listJohn Ericson1-4/+4
I think this makes more sense by matching how build comes before host. Native builds are also more common than cross builds.
2019-08-11Print only host platform info in some cases during native buildsJussi Pakkanen1-6/+9
Build and target info is confusing in that case. However still log that information, as it is useful in case something slips out of sync and needs to be debugged.