You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@buildstream.apache.org by tv...@apache.org on 2022/04/05 10:04:25 UTC

[buildstream-plugins] 10/49: Initially adding meson element

This is an automated email from the ASF dual-hosted git repository.

tvb pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/buildstream-plugins.git

commit 52c3ab049165e0b6970f63b333898a3c0b544479
Author: Tristan van Berkom <tr...@codethink.co.uk>
AuthorDate: Fri Mar 18 17:15:55 2022 +0900

    Initially adding meson element
    
    From bst-plugins-experimental
---
 src/buildstream_plugins/elements/meson.py   | 66 ++++++++++++++++++++++++
 src/buildstream_plugins/elements/meson.yaml | 79 +++++++++++++++++++++++++++++
 2 files changed, 145 insertions(+)

diff --git a/src/buildstream_plugins/elements/meson.py b/src/buildstream_plugins/elements/meson.py
new file mode 100644
index 0000000..e9d1d8d
--- /dev/null
+++ b/src/buildstream_plugins/elements/meson.py
@@ -0,0 +1,66 @@
+#  Copyright (C) 2017 Patrick Griffis
+#  Copyright (C) 2018 Codethink Ltd.
+#
+#  Licensed under the Apache License, Version 2.0 (the "License");
+#  you may not use this file except in compliance with the License.
+#  You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+#  Unless required by applicable law or agreed to in writing, software
+#  distributed under the License is distributed on an "AS IS" BASIS,
+#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+#  See the License for the specific language governing permissions and
+#  limitations under the License.
+
+"""
+meson - Meson build element
+===========================
+This is a `BuildElement
+<https://docs.buildstream.build/master/buildstream.buildelement.html#module-buildstream.buildelement>`_
+implementation for using `Meson <http://mesonbuild.com/>`_ build scripts.
+
+You will often want to pass additional arguments to ``meson``. This should
+be done on a per-element basis by setting the ``meson-local`` variable.  Here is
+an example:
+
+.. code:: yaml
+
+   variables:
+     meson-local: |
+       -Dmonkeys=yes
+
+If you want to pass extra options to ``meson`` for every element in your
+project, set the ``meson-global`` variable in your project.conf file. Here is
+an example of that:
+
+.. code:: yaml
+
+   elements:
+     meson:
+       variables:
+         meson-global: |
+           -Dmonkeys=always
+
+Here is the default configuration for the ``meson`` element in full:
+
+  .. literalinclude:: ../../../src/buildstream_plugins/elements/meson.yaml
+     :language: yaml
+
+See `built-in functionality documentation
+<https://docs.buildstream.build/master/buildstream.buildelement.html#core-buildelement-builtins>`_ for
+details on common configuration options for build elements.
+"""
+
+from buildstream import BuildElement
+
+
+# Element implementation for the 'meson' kind.
+class MesonElement(BuildElement):
+
+    BST_MIN_VERSION = "2.0"
+
+
+# Plugin entry point
+def setup():
+    return MesonElement
diff --git a/src/buildstream_plugins/elements/meson.yaml b/src/buildstream_plugins/elements/meson.yaml
new file mode 100644
index 0000000..2172cb3
--- /dev/null
+++ b/src/buildstream_plugins/elements/meson.yaml
@@ -0,0 +1,79 @@
+# Meson default configuration
+
+variables:
+
+  build-dir: _builddir
+
+  # Project-wide extra arguments to be passed to `meson`
+  meson-global: ''
+
+  # Element-specific extra arguments to be passed to `meson`.
+  meson-local: ''
+
+  # For backwards compatibility only, do not use.
+  meson-extra: ''
+
+  meson-args: |
+
+    --prefix=%{prefix} \
+    --bindir=%{bindir} \
+    --sbindir=%{sbindir} \
+    --sysconfdir=%{sysconfdir} \
+    --datadir=%{datadir} \
+    --includedir=%{includedir} \
+    --libdir=%{libdir} \
+    --libexecdir=%{libexecdir} \
+    --localstatedir=%{localstatedir} \
+    --sharedstatedir=%{sharedstatedir} \
+    --mandir=%{mandir} \
+    --infodir=%{infodir} %{meson-extra} %{meson-global} %{meson-local}
+
+  meson: meson %{conf-root} %{build-dir} %{meson-args}
+
+  ninja: |
+    ninja -j ${NINJAJOBS} -C %{build-dir}
+
+  ninja-install: |
+    env DESTDIR="%{install-root}" ninja -C %{build-dir} install
+
+  # Set this if the sources cannot handle parallelization.
+  #
+  # notparallel: True
+
+config:
+
+  # Commands for configuring the software
+  #
+  configure-commands:
+  - |
+    %{meson}
+
+  # Commands for building the software
+  #
+  build-commands:
+  - |
+    %{ninja}
+
+  # Commands for installing the software into a
+  # destination folder
+  #
+  install-commands:
+  - |
+    %{ninja-install}
+
+  # Commands for stripping debugging information out of
+  # installed binaries
+  #
+  strip-commands:
+  - |
+    %{strip-binaries}
+
+# Use max-jobs CPUs for building
+environment:
+  NINJAJOBS: |
+    %{max-jobs}
+
+# And dont consider NINJAJOBS as something which may
+# affect build output.
+environment-nocache:
+- NINJAJOBS