|  | 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. |