| name: compiler | |
| long_name: Compiler object | |
| description: | | |
| This object is returned by [[meson.get_compiler]]. | |
| It represents a compiler for a given language and allows you to query its properties. | |
| notes: | |
| - | | |
| These compiler checks do not use compiler arguments added | |
| with `add_*_arguments()`, via `-Dlang_args` on the command-line, or | |
| through `CFLAGS`/`LDFLAGS`, etc in the environment. Hence, you can | |
| trust that the tests will be fully self-contained, and won't fail | |
| because of custom flags added by other parts of the build file or by | |
| users. | |
| - | | |
| Note that if you have a single prefix with all your dependencies, you | |
| might find it easier to append to the environment variables | |
| `C_INCLUDE_PATH` with GCC/Clang and `INCLUDE` with MSVC to expand the | |
| default include path, and `LIBRARY_PATH` with GCC/Clang and `LIB` with | |
| MSVC to expand the default library search path. | |
| However, with GCC, these variables will be ignored when | |
| cross-compiling. In that case you need to use a specs file. See: | |
| http://www.mingw.org/wiki/SpecsFileHOWTO | |
| methods: | |
| # Helper methods to pre-define common posargs | |
| - name: _code | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| posargs: | |
| code: | |
| type: str | file | |
| description: | | |
| The source code to check. | |
| If a string is passed, the code is used directly. If a [[@file]] object | |
| is passed, its content is used for the compiler check. | |
| # Helper methods to pre-define common kwargs | |
| - name: _args | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| args: | |
| type: array[str] | |
| description: | | |
| Used to pass an array of compiler arguments. | |
| Defining include paths for headers not in the default include path | |
| via `-Isome/path/to/header` is generally supported, however, usually not | |
| recommended. | |
| This is because include directories can also be specified via the | |
| `include_directories` or the `dependency` kwarg (if present). | |
| The same is also true for passing libraries to link with `-lfoo`. | |
| - name: _include_directories | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| include_directories: | |
| type: array[inc | str] | |
| since: 0.38.0 | |
| description: | | |
| Extra directories for header searches, created with the | |
| [[include_directories]] function. | |
| *(Since 1.10.0)* Strings are also accepted. | |
| - name: _dependencies | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| dependencies: | |
| type: dep | array[dep] | |
| description: Additionally dependencies required for compiling and / or linking. | |
| - name: _prefix | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| prefix: | |
| type: str | array[str] | |
| description: | | |
| Used to add `#include`s and other things that are required | |
| for the symbol to be declared. Since 1.0.0 an array is accepted | |
| too. When an array is passed, the items are concatenated together | |
| separated by a newline. | |
| System definitions should be passed via compiler args | |
| (eg: `_GNU_SOURCE` is often required for some symbols to be exposed | |
| on Linux, and it should be passed via `args` keyword argument). | |
| - name: _no_builtin_args | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| no_builtin_args: | |
| type: bool | |
| default: false | |
| description: When set to `true`, the compiler arguments controlled by built-in configuration options are not added. | |
| - name: _name | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| name: | |
| type: str | |
| description: | | |
| The name to use for printing a message about the compiler check. | |
| If this keyword argument is not passed, no message will be printed about the check. | |
| # Even more convenient | |
| - name: _common | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs_inherit: | |
| - compiler._args | |
| - compiler._include_directories | |
| - compiler._dependencies | |
| - compiler._no_builtin_args | |
| - compiler._prefix | |
| - name: _compiles | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| required: | |
| type: bool | feature | |
| default: false | |
| since: 1.5.0 | |
| description: | |
| When set to `true`, Meson will halt if the check fails. | |
| When set to a [`feature`](Build-options.md#features) option, the feature | |
| will control if it is searched and whether to fail if not found. | |
| kwargs_inherit: | |
| - compiler._args | |
| - compiler._include_directories | |
| - compiler._dependencies | |
| - compiler._no_builtin_args | |
| - compiler._name | |
| - compiler._werror | |
| - name: _header | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs_inherit: compiler._common | |
| kwargs: | |
| required: | |
| type: bool | feature | |
| default: false | |
| since: 0.50.0 | |
| description: | |
| When set to `true`, Meson will halt if the header check fails. | |
| When set to a [`feature`](Build-options.md#features) option, the feature | |
| will control if it is searched and whether to fail if not found. | |
| - name: _required | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| required: | |
| type: bool | feature | |
| default: false | |
| since: 1.3.0 | |
| description: | |
| When set to `true`, Meson will halt if the check fails. | |
| When set to a [`feature`](Build-options.md#features) option, the feature | |
| will control if it is searched and whether to fail if not found. | |
| - name: _werror | |
| returns: void | |
| description: You have found a bug if you can see this! | |
| kwargs: | |
| werror: | |
| type: bool | |
| default: false | |
| description: When set to `true`, compiler warnings are treated as error. | |
| since: 1.3.0 | |
| # Star of the actual functions | |
| - name: version | |
| returns: str | |
| description: Returns the compiler's version number as a string. | |
| - name: cmd_array | |
| returns: array[str] | |
| description: Returns an array containing the command(s) for the compiler. | |
| - name: alignment | |
| returns: int | |
| description: | | |
| Returns the alignment of the specified type. For C-like languages, | |
| the headers `stddef.h` and `stdio.h` are included | |
| implicitly for native compilation, only `stddef.h` is included when | |
| cross-compiling. | |
| posargs: | |
| typename: | |
| type: str | |
| description: The name of the type to check. | |
| kwargs_inherit: | |
| - compiler._args | |
| - compiler._prefix | |
| - compiler._dependencies | |
| # TODO: why not also allow passing `include_directories`? | |
| - name: run | |
| returns: runresult | |
| description: Attempts to compile and execute the given code fragment. | |
| posargs_inherit: compiler._code | |
| kwargs_inherit: compiler._compiles | |
| - name: get_id | |
| returns: str | |
| description: | | |
| Returns a string identifying the compiler. | |
| For example, `gcc`, `msvc`, [and more](Reference-tables.md#compiler-ids). | |
| - name: get_linker_id | |
| returns: str | |
| since: 0.53.0 | |
| description: | | |
| Returns a string identifying the linker. | |
| For example, `ld.bfd`, `link`, [and more](Reference-tables.md#linker-ids). | |
| - name: symbols_have_underscore_prefix | |
| returns: bool | |
| since: 0.37.0 | |
| description: Returns `true` if the C symbol mangling is one underscore (`_`) prefixed to the symbol. | |
| - name: has_member | |
| returns: bool | |
| description: Returns true if the type has the specified member. | |
| kwargs_inherit: | |
| - compiler._common | |
| - compiler._required | |
| posargs: | |
| typename: | |
| type: str | |
| description: The type to check. | |
| membername: | |
| type: str | |
| description: The member to check. | |
| - name: has_members | |
| returns: bool | |
| description: Returns `true` if the type has *all* the specified members. | |
| kwargs_inherit: | |
| - compiler._common | |
| - compiler._required | |
| posargs: | |
| typename: | |
| type: str | |
| description: The type to check. | |
| varargs: | |
| name: member | |
| type: str | |
| min_varargs: 1 | |
| description: The members to check | |
| - name: has_function | |
| returns: bool | |
| description: | | |
| Returns true if the given function is provided | |
| by the standard library or a library passed in with the `args` keyword. | |
| kwargs_inherit: | |
| - compiler._common | |
| - compiler._required | |
| posargs: | |
| funcname: | |
| type: str | |
| description: The function to check. | |
| - name: has_type | |
| returns: bool | |
| description: Returns `true` if the specified token is a type. | |
| kwargs_inherit: | |
| - compiler._common | |
| - compiler._required | |
| posargs: | |
| typename: | |
| type: str | |
| description: The type to check. | |
| - name: compute_int | |
| returns: int | |
| since: 0.40.0 | |
| kwargs_inherit: compiler._common | |
| description: | | |
| Computes the value of the given expression | |
| (as an example `1 + 2`). When cross compiling this is evaluated with | |
| an iterative algorithm, you can specify keyword arguments `low` | |
| (defaults to -1024), `high` (defaults to 1024) and `guess` to | |
| specify max and min values for the search and the value to try | |
| first. | |
| For C-like languages, the header `stddef.h` and `stdio.h` are included | |
| implicitly for native compilation, only `stddef.h` is included when | |
| cross-compiling. | |
| posargs: | |
| expr: | |
| type: str | |
| description: The expression to compute. | |
| kwargs: | |
| low: | |
| type: int | |
| default: -1024 | |
| description: The min value. | |
| high: | |
| type: int | |
| default: 1024 | |
| description: The max value. | |
| guess: | |
| type: int | |
| description: The value to try first. | |
| - name: sizeof | |
| returns: int | |
| description: | | |
| returns the size of the given type (e.g. `'int'`) or -1 if the type is unknown. | |
| For C-like languages, the header `stddef.h` and `stdio.h` are included | |
| implicitly for native compilation, only `stddef.h` is included when | |
| cross-compiling. | |
| kwargs_inherit: compiler._common | |
| posargs: | |
| typename: | |
| type: str | |
| description: The type to compute. | |
| - name: get_define | |
| returns: str | |
| since: 0.40.0 | |
| description: | | |
| Returns the given preprocessor symbol's value | |
| as a string or empty string if it is not defined. | |
| *(since 0.47.0)* This method will concatenate string literals as | |
| the compiler would. E.g. `"a" "b"` will become `"ab"`. | |
| kwargs_inherit: compiler._common | |
| posargs: | |
| definename: | |
| type: str | |
| description: The define to check. | |
| - name: has_define | |
| returns: bool | |
| since: 1.3.0 | |
| description: | | |
| Returns true if the given preprocessor symbol is *defined*. | |
| kwargs_inherit: compiler._common | |
| posargs: | |
| definename: | |
| type: str | |
| description: The define to check. | |
| - name: compiles | |
| returns: bool | |
| description: Returns true if the code compiles. | |
| posargs_inherit: compiler._code | |
| kwargs_inherit: compiler._compiles | |
| - name: links | |
| returns: bool | |
| description: | | |
| Returns true if the code compiles and links. | |
| *Since 0.60.0*, if the `file` object's | |
| suffix does not match the compiler object's language, the compiler | |
| corresponding to the suffix is used to compile the source, while the | |
| target of the `links` method is used to link the resulting object file. | |
| posargs_inherit: compiler._code | |
| kwargs_inherit: compiler._compiles | |
| - name: check_header | |
| returns: bool | |
| since: 0.47.0 | |
| description: | | |
| Returns true if the specified header is *usable* | |
| with the specified prefix, dependencies, and arguments. | |
| kwargs_inherit: compiler._header | |
| posargs: | |
| header_name: | |
| type: str | |
| description: The header to check. | |
| - name: has_header | |
| returns: bool | |
| description: | | |
| Returns true if the specified header is *exists* | |
| with the specified prefix, dependencies, and arguments. | |
| This method is faster than [[compiler.check_header]] since it only does a | |
| pre-processor check. | |
| kwargs_inherit: compiler._header | |
| posargs_inherit: compiler.check_header | |
| - name: has_header_symbol | |
| returns: bool | |
| description: | | |
| Detects whether a particular symbol is declared in the specified header. | |
| Symbols here include function, variable, `#define`, type definition, etc. | |
| kwargs_inherit: compiler._header | |
| posargs: | |
| header: | |
| type: str | |
| description: The header to check. | |
| symbol: | |
| type: str | |
| description: The symbol to check. | |
| - name: find_library | |
| returns: dep | |
| description: Tries to find the library specified in the positional argument. | |
| posargs: | |
| libname: | |
| type: str | |
| description: The library to find. | |
| kwargs: | |
| required: | |
| type: bool | feature | |
| default: true | |
| description: | | |
| If set `true`, Meson will abort with an error if the library could not | |
| be found. Otherwise, Meson will continue and the found method of the | |
| returned object will return `false`. | |
| When set to a [`feature`](Build-options.md#features) option, the feature | |
| will control if it is searched and whether to fail if not found. | |
| *(since 0.47.0)* The value of a `feature` option can also be passed here. | |
| has_headers: | |
| type: array[str] | |
| since: 0.50.0 | |
| description: | | |
| An array of headers that must be found as well. | |
| This check is equivalent to checking each header with a | |
| [[compiler.has_header]] call. | |
| When used, kwargs that [[compiler.has_header]] would accept can be | |
| passed here prefixed with `header_`, and will have the same effect on | |
| the header check. | |
| static: | |
| type: bool | |
| default: false | |
| since: 0.51.0 | |
| description: | | |
| If `true`, the search is limited to static libraries only. | |
| Setting this value to `false` (the default) will search for both shared | |
| *and* static libraries. | |
| disabler: | |
| type: bool | |
| default: false | |
| since: 0.49.0 | |
| description: If `true`, this method will return a [[@disabler]] on a failed check. | |
| dirs: | |
| type: array[str] | |
| description: | | |
| Additional directories to search in. | |
| By default the library is searched for in the system library directory | |
| (e.g. /usr/lib). Specifying more directories here, causes Meson to search | |
| in those directories as well as the system directories. | |
| # does not work, since all _common kwargs need to be prefixed `header_` here | |
| # kwargs_inherit: compiler._common | |
| header_args: | |
| type: array[str] | |
| since: 0.51.0 | |
| description: | | |
| When the `has_headers` kwarg is also used, this argument is passed to | |
| [[compiler.has_header]] as `args`. | |
| header_include_directories: | |
| type: array[inc | str] | |
| since: 0.51.0 | |
| description: | | |
| When the `has_headers` kwarg is also used, this argument is passed to | |
| [[compiler.has_header]] as `include_directories`. | |
| *(Since 1.10.0)* Strings are also accepted. | |
| header_dependencies: | |
| type: dep | array[dep] | |
| since: 0.51.0 | |
| description: | | |
| When the `has_headers` kwarg is also used, this argument is passed to | |
| [[compiler.has_header]] as `dependencies`. | |
| header_no_builtin_args: | |
| type: bool | |
| default: false | |
| since: 0.51.0 | |
| description: | | |
| When the `has_headers` kwarg is also used, this argument is passed to | |
| [[compiler.has_header]] as `no_builtin_args`. | |
| header_prefix: | |
| type: str | |
| since: 0.51.0 | |
| description: | | |
| When the `has_headers` kwarg is also used, this argument is passed to | |
| [[compiler.has_header]] as `prefix`. | |
| # Compiler arguments | |
| - name: has_argument | |
| returns: bool | |
| description: | | |
| Returns `true` if the compiler accepts the specified command line argument, | |
| that is, can compile code without erroring out or printing a warning about | |
| an unknown flag. | |
| posargs: | |
| argument: | |
| type: str | |
| description: The argument to check. | |
| kwargs_inherit: | |
| - compiler._required | |
| - name: has_multi_arguments | |
| since: 0.37.0 | |
| returns: bool | |
| description: | | |
| the same as [[compiler.has_argument]] but takes multiple arguments | |
| and uses them all in a single compiler invocation. | |
| varargs: | |
| name: arg | |
| type: str | |
| description: The arguments to check. | |
| kwargs_inherit: | |
| - compiler._required | |
| - name: get_supported_arguments | |
| returns: array[str] | |
| since: 0.43.0 | |
| varargs_inherit: compiler.has_multi_arguments | |
| description: | | |
| Returns an array containing only the arguments supported by the compiler, | |
| as if [[compiler.has_argument]] were called on them individually. | |
| kwargs: | |
| checked: | |
| type: str | |
| since: 0.59.0 | |
| default: "'off'" | |
| description: | | |
| Supported values: | |
| - `'off'`: Quietly ignore unsupported arguments | |
| - `'warn'`: Print a warning for unsupported arguments | |
| - `'require'`: Abort if at least one argument is not supported | |
| - name: first_supported_argument | |
| returns: array[str] | |
| since: 0.43.0 | |
| varargs_inherit: compiler.has_multi_arguments | |
| description: | | |
| Given an array of strings, returns a single-element array containing the first | |
| argument that passes the [[compiler.has_argument]] test or an empty array if | |
| none pass. | |
| # Linker arguments | |
| - name: has_link_argument | |
| since: 0.46.0 | |
| returns: bool | |
| description: | | |
| Returns `true` if the linker accepts the specified command line argument, | |
| that is, can | |
| compile and link code without erroring out or printing a warning | |
| about an unknown flag. Link arguments will be passed to the | |
| compiler, so should usually have the `-Wl,` prefix. On VisualStudio | |
| a `/link` argument will be prepended. | |
| posargs: | |
| argument: | |
| type: str | |
| description: The argument to check. | |
| kwargs_inherit: | |
| - compiler._required | |
| - name: has_multi_link_arguments | |
| since: 0.46.0 | |
| returns: bool | |
| description: | | |
| the same as [[compiler.has_link_argument]] but takes multiple arguments | |
| and uses them all in a single compiler invocation. | |
| varargs: | |
| name: arg | |
| type: str | |
| description: The link arguments to check. | |
| kwargs_inherit: | |
| - compiler._required | |
| - name: get_supported_link_arguments | |
| returns: array[str] | |
| since: 0.46.0 | |
| varargs_inherit: compiler.has_multi_link_arguments | |
| description: | | |
| Returns an array containing only the arguments supported by the compiler, | |
| as if [[compiler.has_link_argument]] were called on them individually. | |
| # TODO: why is this not present here? | |
| # kwargs: | |
| # checked: | |
| # type: str | |
| # since: 0.59.0 | |
| # default: "'off'" | |
| # description: | | |
| # Supported values: | |
| # - `'off'`: Quietly ignore unsupported arguments | |
| # - `'warn'`: Print a warning for unsupported arguments | |
| # - `'require'`: Abort if at least one argument is not supported | |
| - name: first_supported_link_argument | |
| returns: array[str] | |
| since: 0.46.0 | |
| varargs_inherit: compiler.has_multi_link_arguments | |
| description: | | |
| Given an array of strings, returns the first argument that passes the | |
| [[compiler.has_link_argument]] test or an empty array if none pass. | |
| - name: has_function_attribute | |
| returns: bool | |
| since: 0.48.0 | |
| description: | | |
| Returns `true` if the compiler supports the GNU style (`__attribute__(...)`) `name`. | |
| This is preferable to manual compile checks as it may be optimized for compilers that | |
| do not support such attributes. | |
| [This table](Reference-tables.md#gcc-__attribute__) lists all of the supported attributes. | |
| posargs: | |
| name: | |
| type: str | |
| description: The attribute name to check. | |
| kwargs_inherit: | |
| - compiler._required | |
| - name: get_supported_function_attributes | |
| returns: array[str] | |
| since: 0.48.0 | |
| description: | | |
| Returns an array containing any names that are supported GCC style attributes. | |
| Equivalent to [[compiler.has_function_attribute]] was called on each of | |
| them individually. | |
| # TODO: Again why doesn't this function have the checked kwarg? | |
| - name: get_argument_syntax | |
| returns: str | |
| since: 0.49.0 | |
| description: | | |
| returns a string identifying the type of arguments the compiler takes. | |
| Can be one of `gcc`, `msvc`, or an undefined | |
| string value. This method is useful for identifying compilers that are not | |
| gcc or msvc, but use the same argument syntax as one of those two compilers | |
| such as clang or icc, especially when they use different syntax on different | |
| operating systems. | |
| - name: preprocess | |
| returns: array[custom_idx] | |
| since: 0.64.0 | |
| description: | | |
| Preprocess an array of source files but do not compile them. The preprocessor | |
| will receive the same arguments (include directories, defines, etc) as with | |
| normal compilation. That includes for example args added with | |
| `add_project_arguments()`, or on the command line with `-Dc_args=-DFOO`. | |
| varargs: | |
| name: source | |
| type: str | file | custom_tgt | custom_idx | generated_list | |
| description: | | |
| Input source to preprocess. The following types are supported: | |
| - Strings relative to the current source directory | |
| - [[@file]] objects defined in any preceding build file | |
| - The return value of configure-time generators such as [[configure_file]] | |
| - The return value of build-time generators such as | |
| [[custom_target]] or [[generator.process]] | |
| kwargs_inherit: | |
| - compiler._include_directories | |
| kwargs: | |
| output: | |
| type: str | |
| description: | | |
| Template for name of preprocessed files: `@PLAINNAME@` is replaced by | |
| the source filename and `@BASENAME@` is replaced by the source filename | |
| without its extension. | |
| compile_args: | |
| type: array[str] | |
| description: | | |
| Extra flags to pass to the preprocessor | |
| dependencies: | |
| type: dep | array[dep] | |
| description: Additionally dependencies required. | |
| since: 1.1.0 | |
| depends: | |
| type: array[build_tgt | custom_tgt] | |
| description: | | |
| Specifies that this target depends on the specified | |
| target(s). These targets should be built before starting | |
| to preprocess an input. | |
| since: 1.4.0 |