Provided by: muon-meson_0.3.0-4_amd64 bug

NAME

       meson.build - a build system dsl

DESCRIPTION

       The  meson  dsl  is  a dynamically typed language, similar to other interpreted languages like python and
       ruby.  All objects are immutable. Functions cannot be defined, only built-in functions are available.

       •   STRUCTURE - overview of source and project layout
       •   TYPES - information on all primitive types
       •   SYNTAX - description of syntax and keywords

STRUCTURE

       All meson projects must have a file called `meson.build` at the project root.  This  is  the  root  build
       file.   This  file  must  have  a  call  to  the `project()` function as its first statement.  Additional
       `meson.build` files may reside in any subdirectories of the project.  These build files are then executed
       with the `subdir()` function.

TYPES

       The meson build system dsl contains most of the common types that would be expected:

       •   booleans (written as `true` and `false`)
       •   integers
       •   strings
       •   arrays
       •   dictionaries

   Booleans
       Booleans are either `true` or `false`.

       OPERATORS
       •   `and` - logical and
       •   `or` - logical or
       •   `not` - logical and

   Integers
       You can specify an integer literal using decimal, hexadecimal, octal, and binary.

           int_1 = 1
           int_42 = 42
           int_255 = 0xFF
           int_493 = 0o755
           int_1365 = 0b10101010101

       All  common  arithmetic  operations  are  implemented  for  integers:  addition,  subtraction,  division,
       multiplication, and modulo.

       OPERATORS
       •   `*` - multiplication
       •   `/` - integer division
       •   `%` - modulo (remainder)
       •   `+` - addition
       •   `-` - subtraction
       •   `==` - equal to
       •   `!=` - not equal to
       •   `<` - less than
       •   `>` - greater than
       •   `<=` - less than or equal to
       •   `>=` - greater than or equal to

   Strings
       Strings in Meson are declared with single quotes.  `` is the escape character.

       The full list of escape sequences is:

       •   `\` Backslash
       •   `'` Single quote
       •   `a` Bell
       •   `b` Backspace
       •   `f` Formfeed
       •   `n` Newline
       •   `r` Carriage Return
       •   `t` Horizontal Tab
       •   `v` Vertical Tab
       •   `ooo` Character with octal value ooo, up to 3 digits long
       •   `xhh` Character with hex value hh
       •   `uxxxx` Character with 16-bit hex value xxxx
       •   `Uxxxxxxxx` Character with 32-bit hex value xxxxxxxx
       •   `N{name}` Character named name in Unicode database

       Multi-line strings are surrounded by 3 consecutive quotes.  These are raw strings that do not support the
       escape sequences listed above.

       Format strings are expressed by a placing leading `f` before the first opening quote.  Inside of a format
       string,  sequences  of  the form `@[a-z_]+@` will be substituted with the value of the matching variable.
       This variable can be of type bool, int, or str.

           name = 'Alice'

           # prints "Hello Alice"
           message(f'Hello @name@')

       OPERATORS
       •   `+` - concatenate two strings
       •   `/` - concatenate two strings as if `join_paths()` was called
       •   `[int]` -  access the character at index
       •   `<str> in <str>` - check if str is a substring
       •   `<str> not in <str>` - check if str is not a substring
       •   `==` - equal to
       •   `!=` - not equal to

   Arrays
       Arrays are delimited by brackets. An array can contain an arbitrary number of objects of any type.

       OPERATORS
       •   `+` -  If the rhs operand is an array, it will be joined to the lhs array. If it is a scalar, it will
           be appended to the lhs array.
       •   `[int]` - access the object at index
       •   `<any> in <array>` - check if object is in `array`
       •   `<any> not in <array>` - check if object is not in `array`
       •   `==` - equal to
       •   `!=` - not equal to

   Dictionaries
       Dictionaries are delimited by curly braces. A dictionary can contain an arbitrary number  of  key:  value
       pairs.  Keys  are  required  to  be  strings,  but  values  can be objects of any type.  Dictionaries are
       immutable and do not have a guaranteed order.

       OPERATORS
       •   `+` - merge two dictionaries.  In case of a conflicting key, the value from the rhs  dictionary  will
           be taken.
       •   `[str]` - access the object with key `key`
       •   `<str> in <dict>` - check if key is in `dict`
       •   `<str> not in <dict>` - check if key is not in `dict`
       •   `==` - equal to
       •   `!=` - not equal to

SYNTAX

       A meson build file is composed of statements, which are terminated by newlines. Other than the statement-
       terminating newline, white space has no syntactic meaning.

   Comments
       A comment starts with the `#` character and extends until the end of the line.

   Variables
       A variable can contain a value of any type, and does not need to be predeclared.

           var1 = 'hello'
           var2 = 102

       One important difference in how variables work in the dsl is that all objects are immutable. When you see
       an operation which appears like a mutation, actually a new object is created and assigned to the name.

           var1 = [1, 2, 3]
           var2 = var1
           var2 += [4]
           # var2 is now [1, 2, 3, 4]
           # var1 is still [1, 2, 3]

   Function and method calls
       Builtin  functions  are called by their name followed by parenthesis containing optional, comma-separated
       arguments.  Arguments are either positional or  keyword.   Keyword  arguments  are  expressed  using  the
       keyword without quotes, followed by a colon.

           foo()
           foo('bar')
           foo('bar', baz: true)

       Method calls are expressed by a `.` followed by the same function call syntax as above.

           foo.bar()
           foo.bar('baz', qux: false)

       For a complete list of functions and methods, please see `meson-reference(3)`.

   If statements
       Start  an  if statement with the `if` keyword followed by a boolean expression. Further conditions can be
       expressed using the `elif` keyword followed by a boolean expression.  The `else` keyword can be  used  to
       handle the case when no conditions are matched.  An if statement is terminated with the `endif` keyword.

           if conditon1
                ...
           elif condition2
                ...
           else condition3
                ...
           endif

   Foreach statements
       To loop over values in an iterable, use the `foreach` keyword followed by a comma separated list of names
       to  assign  the  values  of  the  iterable  to,  a  colon,  and  an iterable expression.  Only arrays and
       dictionaries are iterable.  A foreach statement is terminated with the `endforeach` keyword.

       Arrays have one value to assign to.

           foreach value : array
                foo(value)
           endforeach

       Dictionaries have one two values to assign to.

           foreach key, value : dictionary
                foo(key)
                bar(value)
           endforeach

       Inside a `foreach` block you may use  the  `break`  and  `continue`  keywords.  `break`  exits  the  loop
       immediately.  `continue` skips the rest of the current iteration.

SEE ALSO

       meson-reference(3) meson(1) muon(1)

                                                   2024-11-28                                     meson.build(5)