Provided by: muon-meson_0.2.0-1build3_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.

           name = 'Alice'

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

       OPERATORS
       •   `+` - concatenate two strings
       •   `/` - concatenate two strings as if `join_paths()` was called
       •   `[n]` -  access the character at index `n`
       •   `==` - 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.
       •   `[n]` - access the object at index `n`
       •   `<obj> in <array>` - check if object `obj` is in `array`
       •   `<obj> in <array>` - check if object `obj` 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.
       •   `[key]` - access the object with key `key`
       •   `<key> in <dict>` - check if key `key` is in `dict`
       •   `<key> not in <dict>` - check if key `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-04-01                                     meson.build(5)