Commit Graph

12636 Commits

Author SHA1 Message Date
Dylan Baker 3260c0ebdb ast/introspection: tidy up imports a bit more with __future__.annotations
This lets us not import quite as much at runtime
2022-06-01 22:49:10 -04:00
Dylan Baker 77e4110880 ast/introspection: sort imports 2022-06-01 22:49:10 -04:00
Dylan Baker a2def550c5 modules: move gnome targets into gnome module
They're not used outside of the gnome module anyway, and they create
some annoying potentials for dependency loops
2022-06-01 22:49:10 -04:00
Dylan Baker d553748b60 compiler: Add missing needs_static_linker to base Compiler class 2022-06-01 22:49:10 -04:00
Xavier Claessens 39ba552811 Add "in development" in release notes title
It was already written in the side menu, but better have it in the page
title too.
2022-06-01 21:52:45 -04:00
Vili Väinölä 18e2f8b2b3 Fix sandbox violation when using subproject as a symlink
Fix "Tried to grab file outside current (sub)project" error when subproject exists within
a source tree but it is used through a symlink. Using subprojects as symlinks is very useful
feature when migrating an existing codebase to meson that all sources do not need to be
immediately moved to subprojects folder.
2022-06-01 12:32:53 -07:00
Eli Schwartz eec7b2c359
docs: fix incorrect link
When referring to the custom_target docs, we want to point to the docs
on the function, not the docs on the returned method.
2022-05-31 17:49:30 -04:00
Eli Schwartz c88a1dc55c
fix bug in i18n merge_file/itstool_join revealed by previous commit
Logically, i18n.merge_file cannot ever take a MULTI_OUTPUT_KW, but it
does take a CT_OUTPUT_KW-like interface.

Actually trying to pass multiple merge_file outputs causes the
msgfmthelper script to be entirely malformed in the arguments it
accepts, and treat the broken one like a --flag, then exit with argparse
errors.

Even if we somehow assumed that somehow it was designed to actually
allow this, msgfmt doesn't support conceptually passing multiple outputs
so that would be a msgfmt error instead of an error inside the guts of
`meson --internal msgfmthelper`.

Same logic applies again for the itstool command and the itstool
internal helper.

Catch this error at configuration time by using the single-output kwarg
form.

Likewise, it's totally nonsense to accept multiple install_dir or
install_tags, and ever since commit 11f9638035
the CustomTarget itself won't even check this.
2022-05-31 17:49:29 -04:00
Eli Schwartz 52d01dbf38
rename a badly named KwargInfo
CT_OUTPUT_KW is the same OUTPUT_KW we use in lots of places. The most
distinctive thing about it is not that it's part of custom_target
(basically any other function that uses such a kwarg follows the same
rules due to using CustomTarget under the hood), but the fact that it
takes multiple outputs.
2022-05-31 17:49:29 -04:00
Eli Schwartz e3d70d89b1
fix regression that broke type checking of CustomTarget outputs
We validate a few things here, such as the non-presence of '@INPUT' in
an output name. These got moved out of the CustomTarget constructor in
commit 11f9638035 and into KwargInfo, but
only for kwargs that took multiple values. This caused configure_file()
and unstable_rust.bindgen() to stop checking for this.

Add a shared single-output KW and use it in both places. This now
dispatches to _output_validator.

configure_file now validates subdirectories in output names the same way
we do elsewhere, directly in the typed_kwargs and by specifying the
erroring kwarg.
2022-05-31 17:49:29 -04:00
Eli Schwartz ae0b40945b
make sure no custom_target outputs are named "all" or "meson-internal__*"
Or any other reserved names. We check in add_target that the primary
name of any build target isn't on the forbidden list, but custom_target
allows names that are distinct from the output filenames, so we need to
check those too.

We would eventually still error out all the way at the end, with:

```
ERROR: Multiple producers for Ninja target "all". Please rename your targets.
```

But, if we can check that early and provide the underlying reason
(reserved name) alongside actually useful debugging info (a line
number), then why not?

Refactor the check into a small helper function in the process.
2022-05-31 17:49:29 -04:00
Eli Schwartz 38c00feb9d
relax target name restrictions to cater to internal use
We don't want to allow targets that conflict with:
- our aliased meson-* targets for phony commands
- any meson-*/ directories we create for internal purposes

We do want to allow targets such as:
- our own meson-*.X manpages

There are a couple routes we could take.

Using a better restriction, such as `meson-internal__*`, is trivially
done for our aliased targets, but changing directory names is...
awkward. We probably cannot do this, and doing the former but not the
latter is not very useful.

We could also carefully allow patterns we know we won't use, such as
file extensions, but which the manpages need, which works for our
directories and for many aliased targets, but run_target() is
user-specified and can be anything.

Use a hybrid approach to cover both use cases. We will now allow target
names that fulfill *all* the following criteria:
- it begins with "meson-"
- it doesn't continue with "internal__"
- it has a file extension
2022-05-31 17:49:29 -04:00
Eli Schwartz dd2f1c4c57
ninja backend: simplify generation of phony targets
Every phony target has a special indirection rule created because ninja
is bad at deleting generated outputs and tries to delete phony outputs
too.

Instead of invoking this as a separate helper post-creation function to
create the alias, wrap NinjaBuildElement and create it behind the
scenes. This simplifies target naming and means one less line at every
single use site.
2022-05-31 17:49:29 -04:00
Karl Linden 40c69630df Fix typo in documentation for add_*_arguments 2022-05-31 17:48:45 -04:00
Vili Väinölä 020f787335 Fix that VS backend respects "console" keyword in custom_target
Previously the output of the custom target was always captured
and it was not possible to see the output unless build failed.
2022-05-31 22:13:39 +03:00
Florian "sp1rit"​ ad8f24f232 Implement `preserve_path` for install_headers
The `install_headers` function now has an optional argument
`preserve_path` that allows installing multi-directory
headerfile structures that live alongside sourcecode with a
single command.

For example, the headerfile structure

headers = [
  'one.h',
  'two.h',
  'alpha/one.h',
  'alpha/two.h',
  'alpha/three.h'
  'beta/one.h'
]

can now be passed to `install_headers(headers, subdir: 'mylib', preserve_path: true)`
and the resulting directory tree will look like

{prefix}
└── include
    └── mylib
        ├── alpha
        │   ├── one.h
        │   ├── two.h
        │   └── three.h
        ├── beta
        │   └── one.h
        ├── one.h
        └── two.h

Fixes #3371
2022-05-30 18:03:01 -04:00
Eli Schwartz 37fea63033 fix invalid type for default_options
We have two checks for the type accepted here. One is the basic
typed_kwargs type-checking, which declares it accepts:

  str | include_directories

The other is the custom validator which further narrows it to strings
with certain option-like properties (needs to be an = assignment).

The former is obviously wrong, which doesn't really matter all that much
but still isn't very nice...

Introduced in commit f34013fb08.
2022-05-30 12:26:19 -04:00
Eli Schwartz 194c28297f fix incorrectly allowed kwarg for custom_target
override_options makes no sense for custom_target as we don't use it for
anything. Also, this was added in commit c3c30d4b06
despite not being allowed in permittedKwargsc3c30d4b0.

For inexplicable reasons, we had a known_kwargs for custom_target that
looped over kwargs and issued a warning, not an error, for unknown
kwargs. It was impossible to ever hit that check to begin with, though,
ever since commit e08d735105 which added
permittedKwargs and obsoleted those manual checks with real errors.

So at one point override_options was specially permitted to be used
without emitting a warning, and then for about half a decade it was an
error, and then based on some dead code it was allowed again for a bit.
But through all this it doesn't do anything and isn't documented.
2022-05-30 12:26:19 -04:00
Eli Schwartz 915a468ed3
i18n: be build-compatible (but not developer-compatible) with gettext-tiny
For maintainer targets, we need some more tools that gettext-tiny
doesn't implement. It's a shame to cause NLS to be completely disabled
in such environments, so instead just issue a warning and continue.

Before 0.62.0 these were never checked for, and would simply fail at
runtime, probably. In theory, the user might install the tools in
between configuring and building, and then the maintainer targets would
begin to work. Return to that behavior -- we still create the targets,
which will *probably* fail, but might not -- and for existing
integrations, failing at `ninja foo-update-po` with "error, program
msgmerge not found" is a bit more discoverable than ninja saying "what
do you mean, there's no such target".

We still have the 0.62.0 preferred behavior of trying to find the
programs, succeeding in all cases other than gettext-tiny, and
guaranteeing that their paths are set up in a machine-file-respecting
manner.
2022-05-29 18:23:03 -04:00
Eli Schwartz de2c091ba6
i18n: fix bug where disabling gettext() broke merge_file()
In the former case, the presence of tools is optional, but triggers a
warning and then no-ops the target. In the latter case, the presence of
the tools is mandatory. But if it was already looked up and discovered
to be missing, we did not actually check that it is found before trying
to use it.

In the case that it isn't found, check again, so that we explicitly
error out with a relevant error message due to setting the required
flag.

Fixes #10320
2022-05-29 18:23:03 -04:00
Eli Schwartz 34da721ec2
gettext: explicitly pass source root / subdir as cli args
Because this is a wrapper script and we could/should do this, we even
have half the infra for it.
2022-05-29 18:23:03 -04:00
Eli Schwartz 6757e4f07c
linkers: try a bit harder to autodetect the correct linker id
mingw GCC using ld.bfd emits diagnostics that include
"-plugin-opt=-pass-through=-lmoldname" and this triggers a match for
mold when it should not.

Instead, always check the very beginning of the output for the linker
id. This is pretty consistent:

- it is always on stdout

- GCC may put additional things on stderr we don't care about

- swift is bizarre and on some OSes redirects the linker stdout to
  swiftc's stderr, but it will still be the only stderr; we didn't even
  check stderr at all until commit 712cbe0568

For gold/bfd linkers, the linker id is always the *second* word, after
the legally mandated "GNU" we already check for.
2022-05-29 11:41:55 -04:00
Guilherme Janczak 704cd1a79d remove repetition and stiff language 2022-05-26 20:48:47 -04:00
Guilherme Janczak 3c66be0c1d don't tell documentation contributors to skip CI
The CI correctly handles documentation changes automatically, it's no
longer necessary to do it by hand.
2022-05-26 20:47:39 -04:00
Eli Schwartz fda4c49c34
fix custom_target crash if boolean true is specified in install_dir
We accept boolean false to indicate "do not install this one particular
output", but the type checking simply checked if it is a bool. We do
this correctly for configure_file, so copy the same validator from
there.
2022-05-26 17:42:14 -04:00
Xavier Claessens 9b9154017e Make a copy of auto_features options when changing its name
This fixes bogus messages "skipped: feature foo disabled" when
auto_features=disabled. It was reporting the name of the latest
get_option() call instead of the name of the current feature option.

This is especially visible in GStreamer summary where it should show a
different option name for every subproject but instead shows "tools"
everywhere:
```
  Subprojects
    gst-devtools              : NO Feature 'tools' disabled
    gst-editing-services      : NO Feature 'tools' disabled
    ...
```
2022-05-25 22:52:30 -04:00
Dylan Baker a6df51aa8c build: replace hand rolled code with CustomTarget[Index].links_dynamically()
Which also fixes builds on windows that might produce a .lib instead of
a .a. The error message has been changed to reflect that as well
2022-05-25 22:41:03 -04:00
Dylan Baker 8f68f5435d interpreter: add type restrictions to declare_dependency link_whole
Including that we don't accept SharedLibraries or CustomTarget[Index]s
that are a shared library
2022-05-25 22:41:03 -04:00
Dylan Baker bd68e8c613 build: Add a `links_dynamically` method to CustomTarget[Index]
This is useful for cases where we treat CustomTargets as linkable
targets, and need to know whether they're going to link statically or
dynamically.
2022-05-25 22:41:03 -04:00
Dylan Baker 702030a9cc dependencies: Don't allow as_link_whole to complete with SharedLibraries
Since a SharedLibrary can't be statically linked in, we shouldn't allow
the method to complete.
2022-05-25 22:41:03 -04:00
Dylan Baker 5926190cbb interpreter: add annotations to extract_variables 2022-05-25 22:41:03 -04:00
Dylan Baker 835a697da0 dependencies: Fix several annotations issues
- `BuildTarget` should be `SharedLibrary | StaticLibrary`
- Needs to take `CustomTargetIndex` as well as `CustomTarget`
- don't assign to self until values have been converted to the correct
  type
2022-05-25 22:41:03 -04:00
Dylan Baker 6e36f8f666 build: fix annotations for BuildTarget.link*target
which do not hold BuildTargets, they are `SharedLibrary | StaticLibrary |
CustomTarget | CustomTargetIndex` (whole doesn't accept `SharedLIbrary`)
2022-05-25 22:41:03 -04:00
Dylan Baker 9c9be9d74b modules/gnome: Fix missing type annotation 2022-05-25 22:41:03 -04:00
Dylan Baker 764b3bf327 modules/gnome: fix some typing issues
That come to light with some of the changes later in this series,
particularly around dependencies.
2022-05-25 22:41:03 -04:00
Andreas Obergschwandtner bfc4e958b4 Fix optimization level 's' for the TI compiler 2022-05-25 07:12:02 -07:00
Daniel Mensinger 35b3522065 cmake: Add test case 2022-05-24 18:00:49 -04:00
Daniel Mensinger ac31eb49d6 cmake: fix detecting directories as input files (fixes #10244) 2022-05-24 18:00:49 -04:00
Daniel Mensinger 7ef73e8f6a ast: cmake: Generate line numbers while printing the AST for better debugging 2022-05-24 18:00:49 -04:00
Xavier Claessens c88c1e7dba doc: Generate dev release notes 2022-05-24 20:19:46 +03:00
andy5995 5746469e45 Compiler-properties.md:link to compiler object page 2022-05-24 20:18:42 +03:00
Peter Eisentraut 8e4fecdd0f Tweak "header has symbol" message
Change message

    Header <foo.h> has symbol "BAR"

to

    Header "foo.h" has symbol "BAR"

with the first part also now in bold.  This is more consistent with
other messages like

    Has header "foo.h"

and

    Checking whether type "foo" has member "bar"
2022-05-24 20:18:19 +03:00
Eli Schwartz 950fd06bc3 fix traceback when run_command has a find_program as the inline arg
We were poking directly at the node, so if it was a FunctionNode then
this broke. Instead, just do a reverse lookup in the overrides table to
get the original find_program name.
2022-05-24 20:16:16 +03:00
Paolo Bonzini a7e458effa mtest: ignore invalid input
TAP version 14 introduced subtests, that are supposedly backward compatible
because "TAP13 specifies that non-TAP output should be ignored".  Meson
reported TAP syntax errors based on behavior of "prove" at the time,
but it seems that now "prove" has become a lot more lenient; it even
accepts the following completely bogus input just fine:

---
ok 1
    ok 2
x
1..1
---

So do the same and make Meson's parser accept invalid TAP input silently.

Fixes: #10032
2022-05-24 20:15:34 +03:00
Dylan Baker 4acab57d47 modules/icestorm: use type checking 2022-05-23 23:32:47 -04:00
Dylan Baker 02ac3d7b2e modules/icestorm: replace individual tools attributes with dict
As we commonly do in other modules
2022-05-23 23:32:47 -04:00
Dylan Baker d97d3721a3 interpreter: Add another overload to source_strings_to_files
Which doesn't have `StructuredSources`, as is actually quite common.
2022-05-23 23:32:47 -04:00
Dylan Baker 10fc19ecb4 modules: add typing to the modtest module 2022-05-23 23:32:47 -04:00
Eli Schwartz 1c52ac4e15
move various imports into TYPE_CHECKING blocks for neatness 2022-05-23 16:44:08 -04:00
Eli Schwartz e5c7dc199a
typing: use forward reference for types defined later in file 2022-05-23 16:44:07 -04:00