aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Style-guide.md
diff options
context:
space:
mode:
Diffstat (limited to 'meson/docs/markdown/Style-guide.md')
-rw-r--r--meson/docs/markdown/Style-guide.md87
1 files changed, 87 insertions, 0 deletions
diff --git a/meson/docs/markdown/Style-guide.md b/meson/docs/markdown/Style-guide.md
new file mode 100644
index 000000000..f204a9a70
--- /dev/null
+++ b/meson/docs/markdown/Style-guide.md
@@ -0,0 +1,87 @@
+---
+short-description: Style recommendations for Meson files
+...
+
+# Style recommendations
+
+This page lists some recommendations on organizing and formatting your
+Meson build files.
+
+## Tabs or spaces?
+
+Always spaces.
+
+## Naming Variable
+
+Snake case (stylized as `snake_case`) refers to the style of writing in which
+each space is replaced by an underscore (`_`) character, and the first letter of
+each word written in lowercase. It is the most common naming convention used
+in Meson build scripts as identifiers for variable.
+
+Let say you would like to refer to your executable so something like `my_exe`.
+
+## Dependency usage
+
+The `dependency` function is the recommended way to handle
+dependencies. If your wrap files have the necessary `[provide]`
+entries, everything will work automatically both when compiling your
+own and when using system dependencies.
+
+You should only need `subproject` when you need to extract non dependencies/programs.
+
+## Naming options
+
+There are two ways of naming project options. As an example for
+booleans the first one is `foo` and the second one is `enable-foo`.
+The former style is recommended, because in Meson options have strong
+type, rather than being just strings.
+
+You should try to name options the same as is common in other
+projects. This is especially important for yielding options, because
+they require that both the parent and subproject options have the same
+name.
+
+# Global arguments
+
+Prefer `add_project_arguments` to `add_global_arguments` because using
+the latter prevents using the project as a subproject.
+
+# Cross compilation arguments
+
+Try to keep cross compilation arguments away from your build files as
+much as possible. Keep them in the cross file instead. This adds
+portability, since all changes needed to compile to a different
+platform are isolated in one place.
+
+# Sorting source paths
+
+The source file arrays should all be sorted. This makes it easier to
+spot errors and often reduces merge conflicts. Furthermore, the paths
+should be sorted with a natural sorting algorithm, so that numbers are
+sorted in an intuitive way (`1, 2, 3, 10, 20` instead of `1, 10, 2,
+20, 3`).
+
+Numbers should also be sorted before characters (`a111` before `ab0`).
+Furthermore, strings should be sorted case insensitive.
+
+Additionally, if a path contains a directory it should be sorted before
+normal files. This rule also applies recursively for subdirectories.
+
+The following example shows correct source list definition:
+
+```meson
+sources = files([
+ 'aaa/a1.c',
+ 'aaa/a2.c',
+ 'bbb/subdir1/b1.c',
+ 'bbb/subdir2/b2.c',
+ 'bbb/subdir10/b3.c',
+ 'bbb/subdir20/b4.c',
+ 'bbb/b5.c',
+ 'bbb/b6.c',
+ 'f1.c',
+ 'f2.c',
+ 'f10.c',
+ 'f20.c'
+])
+```