Commit Graph

13749 Commits

Author SHA1 Message Date
a1ef957e34 linkers: delay implementations import until detect is run
This saves on a 1500-line import at startup and may be skipped entirely
if no compiled languages are used. In exchange, we move the
implementation to a new file that is imported instead.

Followup to commit ab20eb5bbc.
2023-06-26 13:10:33 -04:00
6fad02db04 fix regression in handling output overwriting for ar-like linkers
Linkers that aren't actually ar, were refactored into a base class in
commit 253ff71e6b, which however didn't
take into account that we were doing checks for this.
2023-06-26 13:10:33 -04:00
3c5d46267f WIP: cmake: do not re-export unused top-level objects
We should try to figure out what is a cross-submodule object and what
isn't.
2023-06-26 13:10:33 -04:00
5849979afa stop importing cmake when it isn't used
We don't need a CMakeInterpreter until and unless we actually attempt to
use a cmake subproject via the cmake module.

Minus 10 files and 3679 lines of code imported at startup.
2023-06-26 13:10:33 -04:00
b8b2d87567 dependencies: switch the delayed-import mechanism for custom dependencies
Simply store the module it is expected to be found in. That module then
appends to the packages dict, which guarantees mypy can verify that
it's got the right type -- there is no casting needed.
2023-06-26 13:10:33 -04:00
b1ddfabf8f dependencies: defer importing a custom dependency until it is used
This lessens the amount of code imported at Meson startup by mapping
each dependency to a dictionary entry and using a programmable import to
dynamically return it.

Minus 16 files and 6399 lines of code imported at startup.
2023-06-26 13:10:33 -04:00
c82305db0c dependencies: delay often-unused imports
We expose detect.py as the mesonbuild.dependencies entrypoint and import
it upfront everywhere. But unless the `dependency()` function is
actually invoked, we don't need *any* of the private implementations for
this.

Avoid doing so until, as part of actual dependency lookup, we attempt
that specific dependency method. This avoids importing big modules if
`method:` is specified, and in most cases hopefully pkg-config works and
we can avoid importing the cmake implementation particularly.

Actually avoiding most of these imports requires more refactoring. But
even so, the garden path no longer needs to import the dub dependency
impl.
2023-06-26 13:10:32 -04:00
c780d240e2 dependencies: Don't Repeat Yourself when it comes to lookup methods
We need to extend the candidates the same way per method, but we handle
each method twice: once in explicit method checks, and once for auto. We
can just handle auto as a special list of methods, though.
2023-06-26 13:10:32 -04:00
216f7476de dependencies: move dub to a hidden package internal detail
Do not import it and expose it at the package scope, it's never used
elsewhere except inside the dub module.
2023-06-26 13:10:32 -04:00
e715400d1b tree-wide: reduce unneeded imports on specific Dependency impls
We can check something's subtype using properties, without importing the
module up front and doing isinstance checks on specific subclasses of
the interface -- or worse, solving cyclic imports by doing the import
inside the function. ;)
2023-06-26 13:10:32 -04:00
418063cc47 pkgconfig: move uninstalled devenv handling from setup to the module hook
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-26 13:10:25 -04:00
620bdf5895 add profiling startup import check and testcase to count it 2023-06-26 13:08:57 -04:00
25f5f3554d tests: move script loaded modules test to platform-agnostic
We have the same platform startup logic here for all platforms and I do
not believe it's important to test this on the slow CI machines.
2023-06-25 15:38:31 -04:00
cd6c3ca55e msetup: place profiling logs in the log directory 2023-06-25 12:12:11 -04:00
a53c6687b6 fully type mconf.py 2023-06-25 10:08:15 -04:00
b411be5edc fully type mdist.py 2023-06-25 10:08:15 -04:00
b05764b73e mdist: consolidate facts about the current dist using a dataclass
And avoid passing variables around several functions just to finally get
where they need to be. These function signatures were kind of ugly...

Also the use of dataclasses makes a big chunk of this file now typed
properly.
2023-06-25 10:08:15 -04:00
a146ee6946 mdist: refactor lots of code into VCS-specific classes
Most of the dist handling is either git-specific or hg-specific.
Tangling it all together makes it much harder to analyze what is going
on.
2023-06-25 10:08:14 -04:00
9e1dc30f1f Add CppNorth talk. 2023-06-25 16:27:42 +03:00
543610468d coredata: Also clear compiler and run caches 2023-06-23 13:53:35 -04:00
1d600b48cb mconf: Allow changing options and clearing cache at the same time
Setting options or clearing cache is also an error without a valid build
directory.
2023-06-23 13:53:35 -04:00
c16dd8d711 coredata: Malformed machine file is not a Meson bug
Fixes: #11899
2023-06-23 06:03:20 -04:00
ab17bd2393 rust: fix -C prefer-dynamic behavior
I noticed when building a project that uses a proc macro that Meson
passed -C prefer-dynamic for the executable, and not the proc macro,
while cargo passed -C prefer-dynamic for the proc macro, but not for
the executable.  Meson's behavior broke setting -C panic=abort on the
executable.

As far as we can tell, because we explicitly pass each library path to
rustc, the only thing -C prefer-dynamic affects in Meson is how the
standard libraries are linked.  Generally, one does not want the
standard libraries to be dynamically linked, because if the Rust
compiler is ever updated, anything linked against the old standard
libraries will likely break, due to the lack of a stable Rust ABI.
Therefore, I've reorganised Meson's behavior around the principle that
the standard libraries should only be dynamically linked when Rust
dynamic linking has already been opted into in some other way.  The
details of how this manifests are now explained in the documentation.
2023-06-21 18:05:16 -04:00
548dd25c67 Clarify environment docs.
The object is not used only for tests, but also for `custom_target` etc.
2023-06-21 08:45:47 -04:00
4c85a7af92 doc: Dictionaries are ordered since Meson 0.62.0
This is a side effect of requiring Python >= 3.7 which itself guarantees
dictionary order. This is now a Meson language guarantee as well which
is required for passing default_options as dict and is generally
expected by users.
2023-06-20 16:10:20 -07:00
6f2956e76c interpreter: Accept more types in default_options dict values 2023-06-20 16:10:20 -07:00
be20e0809f interpreter: allow default_options and override_options as a dict 2023-06-20 16:10:20 -07:00
d0cbda99a3 backends/vs: add sundry type annotations
We went from 192 mypy errors down to 144.
2023-06-20 16:24:46 -04:00
f38c653a75 backends/xcode: simplify an obviously too-complicated function
This function has a pretty unique name, and a simple grep shows that it
is only ever called as:
```
add_comment(PbxComment('...........'))
```

It doesn't need to include logic such as handling str. Moreover it looks
like that handling was broken anyway... it handled the case where
comment is type str, by constructing a new PbxComment(str) instead of
PbxComment(comment), a condition that cannot ever be valid (and crashed
due to other assertions).

Fixes:

mesonbuild/backend/xcodebackend.py:148:42: error: Argument 1 to "PbxComment" has incompatible type "type[str]"; expected "str"  [arg-type]
2023-06-20 16:24:45 -04:00
50921263bd delete dead code that has never been referenced 2023-06-20 16:24:45 -04:00
a981433705 backends/xcode: various sundry low-effort typing fixes
I slapped the obvious type annotations onto a bunch of places, and got
the errors down from 668 to 112.
2023-06-20 16:24:45 -04:00
ba27c72861 backends/ninja: add sundry typing improvements 2023-06-20 16:24:45 -04:00
aa48cdcf60 use truncating division for code that explicitly needs an int
We are going to truncate it down below with int() anyway, no need to
carry extra precision. And mypy complains if the type changes between
float and int.
2023-06-20 16:24:45 -04:00
85e0c0a5d7 ninja backend: simplify code by using dataclasses 2023-06-20 16:24:45 -04:00
e869a09bc2 add str.splitlines method
The new splitlines method on str is intended to replace usage of
fs.read('whatever').strip().split('\n').
The problem with the .strip().split() approach is that it doesn't have a
way to represent empty lists (an empty string becomes a list with one
empty string, not an empty list), and it doesn't handle Windows-style
line endings.
2023-06-20 08:28:47 -04:00
8c766f5b5b compilers: don't recommend deprecated env var
RUST_LD was deprecated in Meson 0.54 in favor of RUSTC_LD.
2023-06-19 15:19:41 -04:00
b0d2a92584 Add kernel and subsystem properties to machine objects. 2023-06-19 18:03:57 +03:00
23efc1abea Alphabetize methods in MesonMain. 2023-06-19 18:03:57 +03:00
35291c9672 unittests: fix test_scripts_loaded_modules matching exactly our own modules
When meson is installed as editable, setuptools adds
`__editable___meson_1_0_99_finder` to the list. This contains the string
"meson" which isn't really accurate to what we want, which is modules
that are part of the `mesonbuild.*` namespace.
2023-06-16 02:11:02 -04:00
92592015bb unittests: skip test using symlink if not available 2023-06-16 02:11:02 -04:00
64394fcbd6 unittests: ensure terminal has 80 chars width 2023-06-16 02:10:16 -04:00
6b2427a031 windows: Fix windres detection for Microsoft shipped Clang
Clang, clang-cl, and MSVC all rely on RC.EXE to build resource files.

Fixes #11845
2023-06-15 11:56:21 -07:00
5e2a47e768 Interpreter: Using executable in run_command/configure_file is not a
bug

Fixes: #11382
2023-06-15 14:45:24 -04:00
f1a58a3ee6 remove unnecessary typing comments
Although they could be moved to annotations, the truth is that they are
unneeded because they get inherited from the parent class.
2023-06-14 23:12:09 -04:00
0ea28fa637 convert some FeatureDeprecated for totally broken stuff, to FeatureBroken
We now warn everyone equally that totally ignored sources are bad and
should not be used.
2023-06-14 23:12:09 -04:00
f93f443a53 detect and warn on non-commutative int/bool operations
an int only accepts operations on other ints, just like other primitive
types only accept operations on values of the same type.

But due to using isinstance in baseobjects "operator_call", an int
primitive allowed operations on a bool, even though reversing the
operator and having a bool perform operations on an int, would fail with
a type error.

Really, we should fail with a type error in both directions. But for
stability reasons, make this a loud warning and break --fatal-meson-warnings
builds.
2023-06-14 23:12:09 -04:00
d558291abe add new FeatureBroken check class for annotating features that are really broken
This is useful for totally terrible stuff that we really dislike, but
for some reason we are afraid to just use `mlog.deprecation()` and
unconditionally tell people so.

Apparently this is because it is totally absolutely vital that, when
telling people something is so broken they should never ever ever use it
no matter what, ever... we can't actually tell them that unless they
bump the minimum version of Meson, because that's our standard way of
introducing a **version number** to tell them when we first started
warning about this.

Sigh. We really want to warn people if they are doing totally broken
stuff no matter what version of Meson they support, because it's not
like fixing the thing that never worked is going to suddenly break old
versions of meson.

So. Here's some new functionality that always warns you, but also tells
you when we started warning.
2023-06-14 22:53:50 -04:00
d87d912e5d compilers: fix detection of ifx compiler
The version output scraping for identifying strings checked for "IFORT"
in parentheses after the executable name, which is probably a mistake by
Intel. Current versions of ifx have "IFX" in parentheses there.

Detect both.

Fixes #11873
2023-06-14 01:04:55 -04:00
a6bf2c1e2c compilers: add logging for non c_or_cpp language detection 2023-06-14 01:04:55 -04:00
aa13c46822 WIP: refactor loggable popen calls for consistency 2023-06-14 01:04:55 -04:00