The Meson Build System http://mesonbuild.com/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

113 lines
4.4 KiB

name: find_program
returns: external_program
description: |
`program_name` here is a string that can be an executable or script
to be searched for in `PATH` or other places inside the project.
The search order is:
1. Program overrides set via [[meson.override_find_program]]
1. [`[provide]` sections](Wrap-dependency-system-manual.md#provide-section)
in subproject wrap files, if [`wrap_mode`](Builtin-options.md#core-options) is
set to `forcefallback`
1. [`[binaries]` section](Machine-files.md#binaries) in your machine files
1. Directories provided using the `dirs:` kwarg (see below)
1. Project's source tree relative to the current subdir
- If you use the return value of [[configure_file]], the
current subdir inside the build tree is used instead
1. `PATH` environment variable
1. [`[provide]` sections](Wrap-dependency-system-manual.md#provide-section) in
subproject wrap files, if [`wrap_mode`](Builtin-options.md#core-options) is
set to anything other than `nofallback`
Meson will also autodetect scripts with a shebang line and run them
with the executable/interpreter specified in it both on Windows
(because the command invocator will reject the command otherwise) and
Unixes (if the script file does not have the executable bit set).
Hence, you *must not* manually add the interpreter while using this
script as part of a list of commands. Since *0.50.0* if the "python3"
program is requested and it is not found in the system, Meson will return
its current interpreter.
If you need to check for a program in a non-standard location, you can
just pass an absolute path to `find_program`, e.g.
```meson
setcap = find_program('setcap', '/usr/sbin/setcap', '/sbin/setcap', required : false)
```
It is also possible to pass an array to `find_program` in case you
need to construct the set of paths to search on the fly:
```meson
setcap = find_program(['setcap', '/usr/sbin/setcap', '/sbin/setcap'], required : false)
```
The returned [[@external_program]] object also has documented methods.
posargs:
program_name:
type: str | file
description: |
The name of the program to search, or a [[@file]] object to be used
without searching.
varargs:
name: fallback
type: str | file
since: 0.37.0
description: |
These parameters are used as fallback names to search for.
This is meant to be used for cases where the
program may have many alternative names, such as `foo` and
`foo.py`. The function will check for the arguments one by one and the
first one that is found is returned.
kwargs:
required:
type: bool | feature
default: true
description: |
When `true`, Meson will abort if no program can be found.
If `required` is set to `false`,
Meson continue even if none of the programs can be found. You can
then use the `.found()` method on the returned [[@external_program]] to check
whether it was found or not. *(since 0.47.0)* The value of a
[`feature`](Build-options.md#features) option can also be passed to the
`required` keyword argument.
native:
type: bool
default: false
since: 0.43.0
description: |
Defines how this executable should be searched. By default
it is set to `false`, which causes Meson to first look for the
executable in the cross file (when cross building) and if it is not
defined there, then from the system. If set to `true`, the cross
file is ignored and the program is only searched from the system.
disabler:
type: bool
since: 0.49.0
default: false
description: |
If `true` and the program couldn't be found, return a [[@disabler]] object
instead of a not-found object.
version:
type: str
since: 0.52.0
description: |
specifies the required version, see
[[dependency]] for argument format. The version of the program
is determined by running `program_name --version` command. If stdout is empty
it fallbacks to stderr. If the output contains more text than simply a version
number, only the first occurrence of numbers separated by dots is kept.
If the output is more complicated than that, the version checking will have to
be done manually using [[run_command]].
dirs:
type: list[str]
since: 0.53.0
description: extra list of absolute paths where to look for program names.