Commit Graph

8028 Commits

Author SHA1 Message Date
Jussi Pakkanen 9c1b6a95b0 Bump version number for rc2. 2022-12-17 00:27:25 +02:00
Eli Schwartz b7a5c384a1 mtest: handle TAP tests with unknown version.
TAP 14 states:
> Harnesses may treat any TAP stream lacking a version as a failed test.

TAP 13 states:
> In the absence of any version line version 12 is assumed. It is an
> error to explicitly specify any version lower than 13.

So, modern TAP is saying that we should treat a missing version as a
test definition bug, it's no longer okay to use a missing version as
saying "let's use TAP 12". But, we can choose whether to treat it that
way or error out.

Let's do a diagnostic, as we do elsewhere. But allow TAP streams that
aren't well defined, if they used to be well defined (back in TAP 12).
2022-12-17 00:26:38 +02:00
Jussi Pakkanen 27bd499772
Merge pull request #11174 from bgilbert/jar-manifest
depfixer: silence `fix_jar()` and make it do something
2022-12-16 20:51:12 +02:00
Jussi Pakkanen 6c26cb96b8
Merge pull request #11181 from tristan957/backends
JNISystemDependency fixes
2022-12-16 20:30:53 +02:00
Tristan Partin fb6fda3853
Change double quote doc comment to sinqle quote 2022-12-15 20:24:26 -06:00
Tristan Partin 7254db36a7
Try to find the jni dependency when javac is a Darwin stub
Darwin-based systems, at least macOS, provide various JDK executable
stubs in
/System/Library/Frameworks/JavaVM.framework/Versions/*/Commands.
These stubs are placed in such a way that they break the heuristics of
the JNI system dependency. If a javac being analyzed to find a Java home
is a stub, use /usr/libexec/java_home.

See https://stackoverflow.com/a/15133344/7572728 for more details.

Closes #11173
2022-12-15 20:24:25 -06:00
Eli Schwartz 2ef94a71f8
delay importing ctypes unless it is actually used
ctypes uses FFI, and surprisingly often people's Python installations
will be broken because ctypes is broken (e.g. the system libffi has been
updated and Python needs to be recompiled). That is not our fault, but
it does manifest as Meson failing to run. It turns out we aren't even
using it though. At least, pretty often.

We have two uses of ctypes, and both of them are for Windows. One of
them is already conditionally imported in the function that uses it, but
the other is imported at startup. Move this down into the invoking
function.

On non-Windows systems, it is now impossible for Meson to fail to run
when ctypes is broken, because we don't use it. Anecdotally, this issue
tends to come up on Linux systems primarily.

Fixes #11111
Closes #11112
2022-12-15 16:44:35 -05:00
Tristan Partin f287cac862
Deduplicate code in JNISystemDependency conditional 2022-12-14 19:08:19 -06:00
Benjamin Gilbert 35e230e48c depfixer: silence fix_jar() and make it do something
fix_jar() tries to remove an existing Class-Path entry from the jar
manifest by postprocessing the manifest and passing it to `jar -um`.
However, `jar -um` can only add/replace manifest entries, not remove
them, and it also complains loudly when replacing an entry:

    Dec 13, 2022 7:11:19 PM java.util.jar.Attributes read
    WARNING: Duplicate name in Manifest: Manifest-Version.
    Ensure that the manifest does not have duplicate entries, and
    that blank lines separate individual sections in both your
    manifest and in the META-INF/MANIFEST.MF entry in the jar file.

Thus fix_jar() produces one such warning for each entry in the manifest
and accomplishes nothing else.

Use jar -uM instead.  This completely removes the manifest from the jar
and allows adding it back as a normal zip member, fixing fix_jar() and
avoiding the warnings.

Fixes: https://github.com/mesonbuild/meson/issues/10491
Fixes: c70a051e93 ("java: remove manifest classpath from installed jar")
2022-12-14 15:37:59 -05:00
Benjamin Gilbert 51c889ddbc depfixer: don't extract MANIFEST.MF verbosely
Avoids non-actionable output when installing a jar:

    inflated: META-INF/MANIFEST.MF

Fixes: c70a051e93 ("java: remove manifest classpath from installed jar")
2022-12-13 21:41:50 -05:00
Brad Smith dd25b88f00 Revert "openbsd: execinfo is not a compiler lib"
OpenBSD now has execinfo as compiler lib. DragonFly has all along.

This reverts commit 0241948d8f.
2022-12-13 21:00:53 +02:00
Andreas Deininger b249470a4c Fixing typos
Convert http to https in some links
2022-12-12 12:10:37 -05:00
Phil Jones 41ab2ef8af mlog: set LV environment variable for pager. 2022-12-12 08:14:18 -05:00
Phil Jones 8bfc29f91f mlog: set LESS environment variable for pager.
Rather than passing arguments directly to less, set the LESS environment
variable to contain the desired arguments instead. This allows passing
arguments in case the user has PAGER=less set in their environment.
2022-12-12 08:14:18 -05:00
Eli Schwartz 100456de07
fix broken fs.copyfile function that crashed if you tried to use it
At least, if you tried to use it when passing an install_dir. Because
T.Sequence is horrible and we should never use it, and the annotations
are a lie that produces bugs.

So, fix the annotations on CustomTarget to never allow this to happen
again, and also fix the function too. Move some definitions elsewhere
inline to satisfy the linter.

Fixes #11157
2022-12-11 18:28:39 -05:00
Eli Schwartz e5a9272034
typing: fix some broken Sequence annotations
T.Sequence is a questionable concept. The idea is to hammer out generic,
maximally forgiving APIs that operate on protocols, which is a fancy way
of saying "I don't care if you use tuples or lists". This is rarely
needed, actually, and in exchange for this fancy behavior you get free
bugs.

Specifically, `somestr` is of type `T.Sequence[str]`, and also
`somestr[0]` is another string of type you guessed it. It's ~~turtles~~
strings all the way down.

It's worth noting that trying to code for "protocols" is a broken
concept if the contents have semantic meaning, e.g. it operates on
"the install tags of this object" rather than "an iterable that supports
efficient element access".

The other way to use T.Sequence is "I don't like that T.List is
invariant, but also I don't like that T.Tuple makes you specify exact
ordering". This sort of works. In fact it probably does work as long as
you don't allow str in your sequences, which of course everyone allows
anyway.

Use of Sequence has cute side effects, such as actually passing lists
around, knowing that you are going to get a list and knowing that you
need to pass it on as a list, and then having to re-allocate as
`list(mylist)` "because the type annotations says it could be a str or
tuple".

Except it cannot be a str, because if it is then the application is
fatally flawed and logic errors occur to disastrous end user effects,
and the type annotations:
- do not enforce their promises of annotating types
- fail to live up to "minimal runtime penalties" due to all the `list()`

Shun this broken concept, by hardening the type annotations. As it turns
out, we do not actually need any of this covariance or protocol-ism for
a list of strings! The whole attempt was a slow, buggy waste of time.
2022-12-11 18:28:39 -05:00
Eli Schwartz cbf4496434
simplify install_tag handling according to the accepted API
There are two problems here: a typing problem, and an algorithm problem.

We expect it to always be passed to CustomTarget() as a list, but we ran
list() on it, which became horribly mangled if you violated the types
and passed a string instead. This caused weird*er* errors and didn't
even do anything. We want to do all validation in the interpreter,
anyway, and make the build level dumb.

Meanwhile we type it as accepting a T.Sequence, which technically
permits... a string, actually. This isn't intentional; the point of
using T.Sequence is out of a misguided idea that APIs are supposed to be
"technically correct" by allowing "anything that fulfills an interface",
which is a flawed concept because we aren't using interfaces here, and
also because "technically string fulfills the same interface as a list,
if we're talking sequences".

Basically:
- mypy is broken by design, because it typechecks "python", not "what we
  wish python to be"
- we do not actually need to graciously permit passing tuples instead of
  lists

As far as historic implementations of this logic go, we have formerly:
- originally, typeslistified anything
- switched to accepting list from the interpreter, redundantly ran list()
  on the list we got, and mishandling API violations passing a string
  (commit 11f9638035)
- switched to accepting anything, stringlistifying it if it was not
  `None`, mishandling `[None]`, and invoking list(x) on a brand new list
  from stringlistify (commit 157d438835)
- stopped stringlistify, just accept T.List[str | None] and re-cast to
  list, violates typing because we use/handle plain None too
  (commit a8521fef70)
- break typing by declaring we accept a simple string, which still
  results in mishandling by converting 'foo' -> ['f', 'o', 'o']
  (commit ac576530c4)

All of this. ALL of it. Is because we tried to be fancy and say we
accept T.Tuple; the only version of this logic that has ever worked
correctly is the original untyped do-all-validation-in-the-build-phase
typeslistified version.

Let's just call it what it is. We want a list | None, and we handle it too.
2022-12-11 18:28:38 -05:00
Tristan Partin dfea023ced
Fix package kwarg type 2022-12-11 14:50:26 -06:00
Tristan Partin 2e600ef710
Rename java.generate_native_headers to java.native_headers
This follows the Meson naming scheme which typically leaves off a verb
like generate.
2022-12-11 14:50:26 -06:00
Tristan Partin b746e92f62
Remove java.generate_native_header
This API existed for 2 minor releases and was worthless for pretty much
every usecase.
2022-12-11 14:50:23 -06:00
Eli Schwartz 79d7891746 debug cygwin CI 2022-12-11 22:43:31 +02:00
Olexa Bilaniuk 255f335d8e CUDA: Update compute-capability limits logic for CUDA 12.
In particular, CUDA 12 removes support for Kepler (3.x) entirely.
Unusually, however, it does not introduce any new architectures,
or even compute capabilities.
2022-12-11 00:11:43 +02:00
Olexa Bilaniuk 36751d5d4c CUDA: Add listing for newly-released CUDA 12 in minimum driver version table. 2022-12-11 00:11:43 +02:00
Jussi Pakkanen dbb33aaf92
Merge pull request #11024 from dcbaker/submit/bindgen-dependencies
Add a `dependencies` keyword argument to bindgen
2022-12-11 00:09:27 +02:00
Jussi Pakkanen c8766468a3 Bump version numbers for rc1. 2022-12-10 18:48:22 +02:00
Jussi Pakkanen 2ec3fe7a4a
Merge pull request #10990 from xclaesse/devenv
devenv: various improvements
2022-12-09 15:26:06 +02:00
Eli Schwartz 7b2c47eb45 python module: don't overwrite and destroy the .pc dependency name
When finding a py.dependency() we try to use pkg-config. We then apply
our own custom base class, which replaces self.name with the informative
comment "override the name from the "real" dependency lookup", to which
I can only say "uhhh why". Why do we want to do that???

It turns out we don't, it was just a really old legacy design because we
had a SystemDependency with a .pkgdep attribute hiding the real
dependency bizarro-land style. We cleaned that up in commit
4d67dd19e5 and as part of that, we
*shifted over* the self.name assignment to preserve the visible effects,
sort of. We didn't have a *reason* to override the name, we just did it
because... we weren't sure whether it mattered.

Unfortunately it very much does matter the other way -- we don't want
it. We can pass this dependency to the pkgconfig module, which uses the
name attribute to fill out the `Requires: ` field. Also, the name should
name what we have. :p

Get rid of this bizarre historic quirk. Since we have proper
dependencies here, we should go all in.

Fixes https://github.com/ufo-kit/ufo-core/pull/185#issuecomment-1328224996
2022-12-09 14:23:18 +02:00
L. E. Segovia d490636328 utils: Fix pylint warning using-constant-test 2022-12-07 13:29:04 -05:00
L. E. Segovia 35599c5362 wrap: Don't use --branch with shallow clones against HEAD
Fixes #10931
2022-12-07 13:29:04 -05:00
Xavier Claessens 2dbe976278 devenv: Set QEMU_LD_PREFIX to sys_root
When the cross file has a sys_root, it is most probably needed to run
executables with qemu.
2022-12-07 11:59:06 -05:00
Xavier Claessens 548c9adad4 Remove useless EmptyExternalProgram
It is only used by Environment.get_exe_wrapper() and every callers were
handling None already. Type annotation was wrong, it already could
return None for the case an exe wrapper is needed but none is provided.
2022-12-07 11:58:36 -05:00
Xavier Claessens 302a29593a devenv: Always include env for HOST machine
Cross compiled executables could still be run with an exe wrapper, or
with proper binfmt installed.

Fixes: #10999
2022-12-07 11:58:36 -05:00
Xavier Claessens f73970cc8f devenv: Add executables locations to both PATH and WINEPATH
Handles the case when wine-binfmt is installed, which makes .exe files
executable without without specifying an exe wrapper.
2022-12-07 11:58:36 -05:00
Xavier Claessens b926374205 devenv: Do not include system values in --dump
This makes --dump print variables like `FOO=/path:$FOO:/another/path`.
2022-12-07 11:58:35 -05:00
Marvin Scholz 85a58f12f0 interpreter: compiler: Allow array for the prefix kwarg 2022-12-06 10:59:00 -05:00
Xavier Claessens bc2f1fb2f3 devenv: Add more info how to get gdb scripts working
Now that top builddir is not the default workdir any more, the .gdbinit
file we write there won't be loaded automatically unless user cd there,
or use --init-command. There is also a global setting that user has to
set to allow automatically loading .gdbinit file.
2022-12-06 07:59:48 -05:00
Xavier Claessens 3e7433086c devenv: Add --workdir option
Most of the time it is preferable to remain the the top source dir
instead of going into the builddir. Add --workdir argument to be able to
have a different workdir than builddir, but keep it default to builddir
for backward compatibility, and also because it makes gdb integration
better.
2022-12-06 07:59:48 -05:00
Eli Schwartz d0054f2c3c
mtest: warn on invalid TAP output
In commit a7e458effa we stopped erroring
out on invalid TAP stream contents, with the rationale that "prove" has
become more lenient.

A close reading of the TAP spec indicates why, though:

> A TAP parser is required to not consider an unknown line as an error but
> may optionally choose to capture said line and hand it to the test
> harness, which may have custom behavior attached. This is to allow for
> forward compatability. Test::Harness silently ignores incorrect lines,
> but will become more stringent in the future. TAP::Harness reports TAP
> syntax errors at the end of a test run.

The goal of treating unknown lines as an error in the TAP parser is not
because unknown lines are fine and dandy. The goal is to allow
implementing future versions of TAP, and handling it via existing
parsers. Since Meson has both a parser and a harness, let's do exactly
that -- pass these lines as a distinctive status to the test harness,
then have the test harness complain.
2022-12-05 15:46:46 -05:00
Eli Schwartz 7c9705b801
mtest: early return when parsing blank lines in TAP
Just like comment lines, blank lines do nothing. Before commit
a7e458effa we ended off the parser by
returning if the line was blank, because we needed to in order to catch
non-blank lines as errors. But really, we should have always returned
much earlier and not wasted time attempting to process anything.
2022-12-05 15:46:46 -05:00
Eli Schwartz 9e8a3b9cbd when generating optional utility targets in ninja, skip existing aliases too
When auto-generating e.g. a `clang-format` target, we first check to see
if the user has already defined one, and if so we don't bother creating
our own. We check for two things:

- if a ninja target already exists, skip
- if a run_target was defined, skip

The second check is *obviously* a duplicate of the first check. But the
first check never actually worked, because all_outputs was only
generated *after* generating all utility rules and actually writing out
the build.ninja file. The check itself compares against nothing, and
always evaluates to false no matter what.

Fix this by reordering the target creation logic so we track outputs
immediately, but only error about them later. Now, we no longer need to
special-case run_target at all, so we can drop that whole logic from
build.py and interpreter.py, and simplify the tracked state.

Fixes defining an `alias_target()` for a utility, which tried to
auto-generate another rule and errored out. Also fixes doing the same
thing with a `custom_target()` although I cannot imagine why anyone
would want to produce an output file named `clang-format` (unless clang
itself decided to migrate to Meson, which would be cool but feels
unlikely).
2022-12-05 12:33:17 -08:00
Eli Schwartz ce120ff164 on newer versions of clang-format, use builtin --check handling
Due to a deficiency in upstream clang-format, our automatic target for
`ninja clang-format-check` runs clang-format, then compares the bytes of
the file before and after to see if anything changed. If it did change,
we rewrite the file back to its original form and error out.

Since clang-format 10, there is an option to report warnings instead of
writing the reformatted file, and also, to make those warnings fatal.
This is a much better user experience, to see *what* is wrong, not just
that something is wrong, and also gets rid of a pretty gross "modify
your files when you didn't ask for it" behavior that is vulnerable to
getting interrupted.

Let's switch over to the new approach, if we can.
2022-12-05 12:33:17 -08:00
Dylan Baker d49e6bc038 modules/rust: Add support for dependencies in bindgen
This is needed for cases where we need external C headers, which are
passed to clang.
2022-12-05 12:23:55 -08:00
Dylan Baker 24b0024065 modules/rust: Use `__future__.annotations` 2022-12-05 12:22:09 -08:00
Dylan Baker 33ba2c6f95 modules/rust: use the shared DEPENDENCIES_KW 2022-12-05 12:22:08 -08:00
Dylan Baker bb875280b6 modules/rust: Add support for string include_directories
Which we support for basically every other case, but not this one.
2022-12-05 15:20:09 -05:00
Dylan Baker 3a0d6f65b0 modules: Add a method to the state object for include_dirs
The Interpreter has a method for this, and the module state just wraps
it.
2022-12-05 15:20:09 -05:00
Dylan Baker ff3083c956 type_checking: add a type checking helper for strings in include_directories 2022-12-05 15:20:09 -05:00
Dylan Baker c2e392d78d interpreter: add a feature_validator to KwargInfo
Because sometimes we simply need to open code FeatureNew and
FeatureDeprecated checks, but in a re-usable way.
2022-12-05 15:20:09 -05:00
Dylan Baker 010f525cc5 interpreter: move TEST_KW from interpreter.py to type_checking.py
Since it's also used in the rust module, it should be in a common place.
Also rename from `TEST_KWARGS` to `TEST_KWS`, which is more in line with
the `*_KW` naming scheme used in the type_checking module.
2022-12-05 15:20:09 -05:00
Michael Champanis f194413f87
dependencies: only print not_found_message once
Due to an accidentally repeated line it would print twice unless
required.

Fixes #8150
2022-12-04 22:54:47 -05:00