summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.clant.json9
-rw-r--r--.gitignore10
-rw-r--r--.gitlab-ci.yml114
-rw-r--r--.gitmodules51
-rw-r--r--.includes.imp7
m---------ingen0
m---------jalv0
m---------libs/ganv0
m---------libs/lv2kit0
m---------libs/raul0
m---------machina0
-rw-r--r--meson.build103
-rw-r--r--meson_options.txt38
m---------patchage0
m---------plugins/blop.lv20
m---------plugins/fomp.lv20
m---------plugins/mda.lv20
m---------subprojects/blop.lv20
m---------subprojects/fomp.lv20
m---------subprojects/ganv0
m---------subprojects/ingen0
m---------subprojects/jalv0
m---------subprojects/lv2kit0
m---------subprojects/machina0
m---------subprojects/mda.lv20
m---------subprojects/patchage0
m---------subprojects/raul0
-rwxr-xr-xwaf16
m---------waflib0
-rw-r--r--wscript72
30 files changed, 302 insertions, 118 deletions
diff --git a/.clant.json b/.clant.json
new file mode 100644
index 0000000..1b7924e
--- /dev/null
+++ b/.clant.json
@@ -0,0 +1,9 @@
+{
+ "version": "1.0.0",
+ "mapping_files": [
+ ".includes.imp",
+ "boost-1.64-all-private.imp",
+ "boost-1.64-all.imp",
+ "qt5_11.imp"
+ ]
+}
diff --git a/.gitignore b/.gitignore
index 9b1df0f..cc8dbe9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,7 @@
-build/**
-.waf-*
-.lock-waf*
+# Copyright 2020-2023 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+build/
+subprojects/packagecache/
+subprojects/sphinxygen-1.0.4/
+subprojects/sphinxygen.wrap
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000..c618786
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,114 @@
+# Copyright 2019-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+stages:
+ - build
+
+variables:
+ GIT_SUBMODULE_STRATEGY: recursive
+
+default:
+ stage: build
+ image: lv2plugin/debian-x64
+ script:
+ - meson setup build -Dwerror=true
+ - ninja -C build test
+
+dev:
+ stage: build
+ image: lv2plugin/debian-x64-big
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release -Db_coverage=false build
+ - ninja -C build test
+
+static:
+ stage: build
+ image: lv2plugin/debian-x64-big
+ script:
+ - meson setup build --wrap-mode=forcefallback -Ddefault_library=static -Ddocs=disabled -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+
+sanitize:
+ stage: build
+ image: lv2plugin/debian-x64-clang
+ script:
+ - meson setup build --wrap-mode=forcefallback -Db_lundef=false -Dbuildtype=plain -Ddocs=disabled -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+ variables:
+ CC: "clang"
+ CXX: "clang++"
+ CFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+ CXXFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+ LDFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+
+# Linux distributions
+
+fedora:
+ stage: build
+ image: lv2plugin/fedora-dev
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=plain -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+ variables:
+ CFLAGS: -O2 -D_FORTIFY_SOURCE=2
+ CXXFLAGS: -O2 -D_FORTIFY_SOURCE=2
+
+# Linux Platforms
+
+arm32:
+ stage: build
+ image: lv2plugin/debian-arm32
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
+
+arm64:
+ stage: build
+ image: lv2plugin/debian-arm64
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=3 -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
+
+x32:
+ stage: build
+ image: lv2plugin/debian-x32
+ script:
+ - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
+
+# Non-Linux/Docker rows (not hosted)
+
+freebsd:
+ stage: build
+ tags: [freebsd,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Dwarning_level=everything -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
+
+mac:
+ stage: build
+ tags: [macos]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=everything -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
+
+win:
+ stage: build
+ tags: [windows,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dwarning_level=everything -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
+ - ninja -C build test
diff --git a/.gitmodules b/.gitmodules
index 0c93aef..502a6fe 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,33 +1,30 @@
[submodule "libs/lv2kit"]
- path = libs/lv2kit
- url = ../../lv2/lv2kit
-[submodule "waflib"]
- path = waflib
- url = ../autowaf.git
-[submodule "libs/raul"]
- path = libs/raul
- url = ../raul
+ path = subprojects/lv2kit
+ url = ../../lv2/lv2kit.git
+[submodule "raul"]
+ path = subprojects/raul
+ url = ../raul.git
[submodule "jalv"]
- path = jalv
- url = ../jalv
+ path = subprojects/jalv
+ url = ../jalv.git
[submodule "ingen"]
- path = ingen
- url = ../ingen
+ path = subprojects/ingen
+ url = ../ingen.git
[submodule "patchage"]
- path = patchage
- url = ../patchage
-[submodule "libs/ganv"]
- path = libs/ganv
- url = ../ganv
-[submodule "plugins/mda.lv2"]
- path = plugins/mda.lv2
- url = ../mda.lv2.git
+ path = subprojects/patchage
+ url = ../patchage.git
+[submodule "ganv"]
+ path = subprojects/ganv
+ url = ../ganv.git
+[submodule "mda.lv2"]
+ path = subprojects/mda.lv2
+ url = ../mda-lv2.git
[submodule "machina"]
- path = machina
+ path = subprojects/machina
url = ../machina.git
-[submodule "plugins/fomp.lv2"]
- path = plugins/fomp.lv2
- url = ../fomp.lv2.git
-[submodule "plugins/blop.lv2"]
- path = plugins/blop.lv2
- url = ../blop.lv2.git
+[submodule "fomp.lv2"]
+ path = subprojects/fomp.lv2
+ url = ../fomp.git
+[submodule "blop.lv2"]
+ path = subprojects/blop.lv2
+ url = ../blop-lv2.git
diff --git a/.includes.imp b/.includes.imp
new file mode 100644
index 0000000..f3ea4eb
--- /dev/null
+++ b/.includes.imp
@@ -0,0 +1,7 @@
+[
+ { "ref": "subprojects/ingen/.includes.imp" },
+ { "ref": "subprojects/lv2kit/.includes.imp" },
+ { "ref": "subprojects/lv2kit/subprojects/sord/.includes.imp" },
+ { "ref": "subprojects/patchage/.includes.imp" },
+ { "ref": "subprojects/raul/.includes.imp" }
+]
diff --git a/ingen b/ingen
deleted file mode 160000
-Subproject 5e3d6fd5cf29ce89741fdd5c61dfa62877d276d
diff --git a/jalv b/jalv
deleted file mode 160000
-Subproject 1e0aa339bb8ae9bf25b464dc1de8e31edefb53f
diff --git a/libs/ganv b/libs/ganv
deleted file mode 160000
-Subproject 43185835f4a0bf319105b79bae7beac71b1b146
diff --git a/libs/lv2kit b/libs/lv2kit
deleted file mode 160000
-Subproject e0336d5bfef7000e51191fab1c369cb333848df
diff --git a/libs/raul b/libs/raul
deleted file mode 160000
-Subproject 496e70e420811c7d744a8bcc44a2ac1b51b676b
diff --git a/machina b/machina
deleted file mode 160000
-Subproject 1e15c09a3dce4eb02af040657dd719a32436393
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..f41e14d
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,103 @@
+project(
+ 'drobillad',
+ ['c', 'cpp'],
+ default_options: [
+ 'b_ndebug=if-release',
+ 'buildtype=release',
+ 'c_std=c99',
+ 'cpp_std=c++17',
+ ],
+ license: 'GPLv3+',
+ meson_version: '>= 0.56.0',
+ version: '0.0.0',
+)
+
+#######################
+# Compilers and Flags #
+#######################
+
+# Required tools
+pkg = import('pkgconfig')
+cc = meson.get_compiler('c')
+cpp = meson.get_compiler('cpp')
+
+##########################
+# LV2 Path Configuration #
+##########################
+
+lv2dir = get_option('lv2dir')
+if lv2dir == ''
+ prefix = get_option('prefix')
+ if target_machine.system() == 'darwin' and prefix == '/'
+ lv2dir = '/Library/Audio/Plug-Ins/LV2'
+ elif target_machine.system() == 'haiku' and prefix == '/'
+ lv2dir = '/boot/common/add-ons/lv2'
+ elif target_machine.system() == 'windows' and prefix == 'C:/'
+ lv2dir = 'C:/Program Files/Common/LV2'
+ else
+ lv2dir = prefix / get_option('libdir') / 'lv2'
+ endif
+endif
+
+###############
+# Subprojects #
+###############
+
+lv2kit = subproject('lv2kit', required: get_option('lv2kit'))
+
+lilv_dep = lv2kit.get_variable('lilv_dep')
+lv2_dep = lv2kit.get_variable('lv2_dep')
+serd_dep = lv2kit.get_variable('serd_dep')
+sord_dep = lv2kit.get_variable('sord_dep')
+sratom_dep = lv2kit.get_variable('sratom_dep')
+suil_dep = lv2kit.get_variable('suil_dep')
+
+lv2dir = lv2_dep.get_variable(
+ default_value: lv2dir,
+ internal: 'lv2dir',
+ pkgconfig: 'lv2dir',
+ pkgconfig_define: ['prefix', '/prefix'],
+)
+
+# LV2 plugins
+
+blop_lv2 = subproject('blop.lv2', required: get_option('plugins'))
+
+fomp_lv2 = subproject(
+ 'fomp.lv2',
+ default_options: ['cpp_std=c++17'],
+ required: get_option('plugins'),
+)
+
+mda_lv2 = subproject(
+ 'mda.lv2',
+ default_options: ['cpp_std=c++17'],
+ required: get_option('plugins'),
+)
+
+# Libraries
+
+ganv = subproject(
+ 'ganv',
+ default_options: ['cpp_std=c++17'],
+ required: get_option('ganv'),
+)
+
+raul = subproject('raul', required: get_option('raul'))
+
+# Applications
+
+ingen = subproject(
+ 'ingen',
+ default_options: ['cpp_std=c++17'],
+ required: get_option('ingen'),
+)
+
+jalv = subproject(
+ 'jalv',
+ default_options: ['cpp_std=c++17'],
+ required: get_option('jalv'),
+)
+
+# machina = subproject('machina', required: get_option('machina')))
+patchage = subproject('patchage', required: get_option('patchage'))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..a5c3a32
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,38 @@
+# Copyright 2021-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+option('checks', type: 'feature', value: 'enabled', yield: true,
+ description: 'Check for platform-specific features')
+
+option('docs', type: 'feature', value: 'auto',
+ description: 'Build documentation')
+
+option('ganv', type: 'feature', value: 'auto',
+ description: 'Build ganv')
+
+option('ingen', type: 'feature', value: 'auto',
+ description: 'Build ingen')
+
+option('jalv', type: 'feature', value: 'auto',
+ description: 'Build jalv')
+
+option('lint', type: 'boolean', value: false, yield: true,
+ description: 'Run code quality checks')
+
+option('lv2dir', type: 'string', value: '', yield: true,
+ description: 'LV2 bundle installation directory')
+
+option('lv2kit', type: 'feature', value: 'auto',
+ description: 'Build lv2kit')
+
+option('patchage', type: 'feature', value: 'auto',
+ description: 'Build patchage')
+
+option('plugins', type: 'feature', value: 'auto',
+ description: 'Build LV2 plugins')
+
+option('raul', type: 'feature', value: 'auto',
+ description: 'Build raul')
+
+option('tests', type: 'feature', value: 'auto', yield: true,
+ description: 'Build tests')
diff --git a/patchage b/patchage
deleted file mode 160000
-Subproject 458b92a89e8014fec4c70b0f982651e1c74ed79
diff --git a/plugins/blop.lv2 b/plugins/blop.lv2
deleted file mode 160000
-Subproject 648fea7b36ae78d5465215d6cc9ff0bccc3a775
diff --git a/plugins/fomp.lv2 b/plugins/fomp.lv2
deleted file mode 160000
-Subproject 961bb1cf0c7972aa648d0e45b7cb6f762f1410f
diff --git a/plugins/mda.lv2 b/plugins/mda.lv2
deleted file mode 160000
-Subproject 9fdec8c3307c79dddc4d2f8d2951f408e88dd60
diff --git a/subprojects/blop.lv2 b/subprojects/blop.lv2
new file mode 160000
+Subproject cbc3fed6d2ae7c08d700c4b1e3c5792332af3c3
diff --git a/subprojects/fomp.lv2 b/subprojects/fomp.lv2
new file mode 160000
+Subproject cb3a25e18866f211b9d7cac3a64eea936859beb
diff --git a/subprojects/ganv b/subprojects/ganv
new file mode 160000
+Subproject 485393a6c1a9169f6a2f4a3b8d3f4146f1dbcca
diff --git a/subprojects/ingen b/subprojects/ingen
new file mode 160000
+Subproject 77539f23febc306f3ae444df899ee4fa59b5aa1
diff --git a/subprojects/jalv b/subprojects/jalv
new file mode 160000
+Subproject 5aea04570496e4eb583f82c1cfdfa2b67fa72e1
diff --git a/subprojects/lv2kit b/subprojects/lv2kit
new file mode 160000
+Subproject d519170a808d8430c21751728b0972d02e6942b
diff --git a/subprojects/machina b/subprojects/machina
new file mode 160000
+Subproject 2c1c56b8ab43c3081949c07103f10a8a7947608
diff --git a/subprojects/mda.lv2 b/subprojects/mda.lv2
new file mode 160000
+Subproject 5101d1a9979c8a773a68827621957e039e94fbc
diff --git a/subprojects/patchage b/subprojects/patchage
new file mode 160000
+Subproject c94e92befcc94fca6d0639c2fd562762d152d46
diff --git a/subprojects/raul b/subprojects/raul
new file mode 160000
+Subproject 4f070bf3abbbb500c19c4397571d5049b8e008e
diff --git a/waf b/waf
deleted file mode 100755
index e22930a..0000000
--- a/waf
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/usr/bin/env python
-
-# Minimal waf script for projects that include waflib directly
-
-from waflib import Context, Scripting
-
-import inspect
-import os
-
-def main():
- script_path = os.path.abspath(inspect.getfile(inspect.getmodule(main)))
- project_path = os.path.dirname(script_path)
- Scripting.waf_entry_point(os.getcwd(), Context.WAFVERSION, project_path)
-
-if __name__ == '__main__':
- main()
diff --git a/waflib b/waflib
deleted file mode 160000
-Subproject 116a28fa5f92e58a46dc878751019ba74a61e54
diff --git a/wscript b/wscript
deleted file mode 100644
index fcab4bf..0000000
--- a/wscript
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/env python
-
-import os
-
-from waflib import Logs
-from waflib.extras import autowaf
-
-# Mandatory waf variables
-APPNAME = 'drobillad' # Package name for waf dist
-VERSION = '0.0.0' # Package version for waf dist
-top = '.' # Source directory
-out = 'build' # Build directory
-
-line_just = 45
-libs = ['libs/lv2kit', 'libs/raul', 'libs/ganv']
-apps = ['jalv', 'patchage', 'ingen']#, 'machina']
-plugins = ['plugins/blop.lv2', 'plugins/fomp.lv2', 'plugins/mda.lv2']
-projects = libs + apps + plugins
-
-
-def options(opt):
- opt.load('compiler_c')
- opt.load('compiler_cxx')
- opt.load('lv2')
- run_opts = opt.add_option_group('Run options')
- run_opts.add_option('--cmd', type='string', dest='cmd',
- help='command to run from build directory')
- for p in projects:
- opt.recurse(p)
-
-
-def configure(conf):
- conf.load('compiler_c', cache=True)
- conf.load('compiler_cxx', cache=True)
- conf.load('lv2', cache=True)
- conf.load('autowaf', cache=True)
-
- conf.env.DROBILLAD_BUILD = []
- for p in projects:
- try:
- name = os.path.basename(p)
- Logs.pprint('BOLD', '')
- conf.recurse(p)
- autowaf.set_local_lib(conf, name, name != 'lv2')
- conf.env.DROBILLAD_BUILD += [p]
- except Exception as e:
- Logs.warn('Configuration failed, not building %s (%s)' % (p, e))
-
- autowaf.g_is_child = False
-
- Logs.info('')
- autowaf.display_summary(conf)
- Logs.info('\nBuilding: %s\n' % ' '.join(conf.env.DROBILLAD_BUILD))
-
- not_building = []
- for i in projects:
- if i not in conf.env.DROBILLAD_BUILD:
- not_building += [i]
-
- if not_building != []:
- Logs.warn('Not building:\n\t%s\n' % '\n\t'.join(not_building))
-
-
-def build(bld):
- for i in bld.env.DROBILLAD_BUILD:
- bld.add_group()
- bld.recurse(i)
-
-
-def test(ctx):
- for i in ctx.env.DROBILLAD_BUILD:
- ctx.recurse(i, mandatory=False)