summaryrefslogtreecommitdiffstats
path: root/meson.build
diff options
context:
space:
mode:
Diffstat (limited to 'meson.build')
-rw-r--r--meson.build182
1 files changed, 182 insertions, 0 deletions
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..b84e3d1
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,182 @@
+# Copyright (c) 2021, Dell Inc. or its subsidiaries. All rights reserved.
+# SPDX-License-Identifier: Apache-2.0
+# See the LICENSE file for details.
+#
+# This file is part of NVMe STorage Appliance Services (nvme-stas).
+#
+# Authors: Martin Belanger <Martin.Belanger@dell.com>
+#
+project(
+ 'nvme-stas',
+ meson_version: '>= 0.53.0',
+ version: '2.2.1',
+ license: 'Apache-2.0',
+ default_options: [
+ 'buildtype=release',
+ 'prefix=/usr',
+ 'sysconfdir=/etc',
+ ]
+)
+
+fs = import('fs')
+
+#===============================================================================
+prefix = get_option('prefix')
+datadir = prefix / get_option('datadir')
+etcdir = prefix / get_option('sysconfdir')
+bindir = prefix / get_option('bindir')
+sbindir = prefix / get_option('sbindir')
+mandir = prefix / get_option('mandir')
+docdir = datadir / 'doc' / 'nvme-stas'
+cnfdir = etcdir / 'stas'
+
+want_man = get_option('man')
+want_html = get_option('html')
+want_readthedocs = get_option('readthedocs')
+
+buildtime_modules = []
+if want_man or want_html or want_readthedocs
+ buildtime_modules += ['lxml']
+endif
+
+python3 = import('python').find_installation('python3', modules:buildtime_modules)
+python_version = python3.language_version()
+python_version_req = '>=3.6'
+if not python_version.version_compare(python_version_req)
+ error('Python @0@ required. Found @1@ instead'.format(python_version_req, python_version))
+endif
+
+# Check if the runtime Python modules are present. These are not needed
+# to build nvme-stas, but will be needed to run the tests.
+missing_runtime_mods = false
+py_modules_reqd = [
+ ['libnvme', 'Install python3-libnvme (deb/rpm)'],
+ ['dasbus', 'Install python3-dasbus (deb/rpm) OR pip3 install dasbus'],
+ ['pyudev', 'Install python3-pyudev (deb/rpm)'],
+ ['systemd', 'Install python3-systemd (deb/rpm)'],
+ ['gi', 'Install python3-gi (deb) OR python3-gobject (rpm)'],
+]
+foreach p : py_modules_reqd
+ if run_command(python3, '-c', 'import @0@'.format(p[0]), check: false).returncode() != 0
+ warning('Missing runtime module "@0@". @1@'.format(p[0], p[1]))
+ missing_runtime_mods = true
+ endif
+endforeach
+
+if missing_runtime_mods and get_option('rt_pymods_reqd')
+ error('Please install missing runtime modules')
+endif
+
+
+#===============================================================================
+conf = configuration_data()
+
+conf.set('VERSION', meson.project_version())
+conf.set('LICENSE', meson.project_license()[0])
+conf.set('BUILD_DIR', meson.current_build_dir())
+conf.set('STAFD_DBUS_NAME', 'org.nvmexpress.staf')
+conf.set('STAFD_DBUS_PATH', '/org/nvmexpress/staf')
+conf.set('STACD_DBUS_NAME', 'org.nvmexpress.stac')
+conf.set('STACD_DBUS_PATH', '/org/nvmexpress/stac')
+
+#===============================================================================
+stafd = configure_file(
+ input: 'stafd.py',
+ output: 'stafd',
+ install_dir: sbindir,
+ copy: true,
+)
+stacd = configure_file(
+ input: 'stacd.py',
+ output: 'stacd',
+ install_dir: sbindir,
+ copy: true,
+)
+
+stafctl = configure_file(
+ input: 'stafctl.py',
+ output: 'stafctl',
+ install_dir: bindir,
+ copy: true,
+)
+
+stacctl = configure_file(
+ input: 'stacctl.py',
+ output: 'stacctl',
+ install_dir: bindir,
+ copy: true,
+)
+
+stasadm = configure_file(
+ input: 'stasadm.py',
+ output: 'stasadm',
+ install_dir: bindir,
+ copy: true,
+)
+
+#===========================================================================
+install_subdir(
+ 'etc/stas',
+ install_dir: etcdir,
+)
+
+#===========================================================================
+foreach component : [ 'nvme-stas.spec', '.coveragerc', 'coverage.sh', ]
+ configure_file(
+ input: component + '.in',
+ output: component,
+ configuration: conf,
+ )
+endforeach
+
+#===========================================================================
+# Make a list of modules to lint
+modules_to_lint = [stafd, stafctl, stacd, stacctl, stasadm]
+
+
+# Point Python Path to Current Build Dir.
+# This is used by other meson.build files.
+PYTHON_SEARCH_PATHS = [
+ conf.get('BUILD_DIR'),
+ conf.get('BUILD_DIR') / 'subprojects' / 'libnvme',
+]
+PYTHONPATH = ':'.join(PYTHON_SEARCH_PATHS)
+
+#===========================================================================
+subdir('staslib')
+subdir('etc/dbus-1/system.d')
+subdir('usr/lib/systemd/system')
+subdir('test')
+subdir('doc')
+
+
+#===========================================================================
+summary_dict = {
+ 'prefix ': prefix,
+ 'etcdir ': etcdir,
+ 'cnfdir ': cnfdir,
+ 'bindir ': bindir,
+ 'sbindir ': sbindir,
+ 'datadir ': datadir,
+ 'mandir ': mandir,
+ 'docdir ': docdir,
+ 'dbus_conf_dir ': dbus_conf_dir,
+ 'sd_unit_dir ': sd_unit_dir,
+ 'build location ': meson.current_build_dir(),
+ 'libnvme for tests ': libnvme_location,
+}
+summary(summary_dict, section: 'Directories')
+
+summary_dict = {
+ 'want_man ': want_man,
+ 'want_html ': want_html,
+ 'want_readthedocs ': want_readthedocs,
+}
+if meson.version().version_compare('>=0.57.0') # conf.keys()
+ foreach key : conf.keys()
+ if key not in ['BUILD_DIR', 'VERSION', 'LICENSE']
+ summary_dict += { key + ' ': conf.get(key) }
+ endif
+ endforeach
+endif
+summary(summary_dict, section: 'Configuration', bool_yn: true)