summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2022-07-07 13:15:20 -0400
committerDavid Robillard <d@drobilla.net>2022-08-18 02:31:59 -0400
commit6ef785fad5cb4e9c162f295d7434d5690a13d029 (patch)
tree2d645f1efa9df5e2dab56b76a5c0cbef941d2178
parentf31d96e901bfdbe5f05dc9ae077203c58a9f715a (diff)
downloaddrobillad-6ef785fad5cb4e9c162f295d7434d5690a13d029.tar.gz
drobillad-6ef785fad5cb4e9c162f295d7434d5690a13d029.tar.bz2
drobillad-6ef785fad5cb4e9c162f295d7434d5690a13d029.zip
Switch to meson build system
-rw-r--r--.gitignore7
-rw-r--r--.gitlab-ci.yml173
-rw-r--r--.gitmodules45
-rw-r--r--.includes.imp10
m---------ingen0
m---------jalv0
m---------machina0
-rw-r--r--meson.build77
-rw-r--r--meson/warnings/meson.build256
-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--wscript75
27 files changed, 465 insertions, 232 deletions
diff --git a/.gitignore b/.gitignore
index 9b1df0f..9eaa7f0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
-build/**
-.waf-*
-.lock-waf*
+# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: CC0-1.0 OR ISC
+
+build/*
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index d6fcc7d..c1fba90 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,164 +1,119 @@
-stages: [build, test]
+stages:
+ - build
variables:
GIT_SUBMODULE_STRATEGY: recursive
.build_template: &build_definition
stage: build
- artifacts:
- paths: ["build/", ".lock-waf*"]
-
-.test_template: &test_definition
- stage: test
- artifacts:
- paths: [build/coverage]
-
arm32_dbg:
<<: *build_definition
image: lv2plugin/debian-arm32
- script: python ./waf configure build -dsT --wrapper=qemu-arm --no-bindings
- variables:
- CC: "arm-linux-gnueabihf-gcc"
- CXX: "arm-linux-gnueabihf-g++"
-
-test:arm32_dbg:
- <<: *test_definition
- image: lv2plugin/debian-arm32
- script: python ./waf test --wrapper=qemu-arm
- needs: ["arm32_dbg"]
-
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
arm32_rel:
<<: *build_definition
image: lv2plugin/debian-arm32
- script: python ./waf configure build -sT --wrapper=qemu-arm --no-bindings
- variables:
- CC: "arm-linux-gnueabihf-gcc"
- CXX: "arm-linux-gnueabihf-g++"
-
-test:arm32_rel:
- <<: *test_definition
- image: lv2plugin/debian-arm32
- script: python ./waf test --wrapper=qemu-arm
- needs: ["arm32_rel"]
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=release -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
arm64_dbg:
<<: *build_definition
image: lv2plugin/debian-arm64
- script: python ./waf configure build -dsT --wrapper=qemu-aarch64 --no-bindings
- variables:
- CC: "aarch64-linux-gnu-gcc"
- CXX: "aarch64-linux-gnu-g++"
-
-test:arm64_dbg:
- <<: *test_definition
- image: lv2plugin/debian-arm64
- script: python ./waf test --wrapper=qemu-aarch64
- needs: ["arm64_dbg"]
-
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
arm64_rel:
<<: *build_definition
image: lv2plugin/debian-arm64
- script: python ./waf configure build -sT --wrapper=qemu-aarch64 --no-bindings
- variables:
- CC: "aarch64-linux-gnu-gcc"
- CXX: "aarch64-linux-gnu-g++"
-
-test:arm64_rel:
- <<: *test_definition
- image: lv2plugin/debian-arm64
- script: python ./waf test --wrapper=qemu-aarch64
- needs: ["arm64_rel"]
+ script:
+ - meson setup build --wrap-mode=forcefallback --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=release -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
x64_dbg:
<<: *build_definition
- image: lv2plugin/debian-x64
- script: python ./waf configure build -dsT
-
-test:x64_dbg:
- <<: *test_definition
- image: lv2plugin/debian-x64
- script: python ./waf test
- needs: ["x64_dbg"]
-
+ image: lv2plugin/debian-x64-big
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
x64_rel:
<<: *build_definition
- image: lv2plugin/debian-x64
- script: python ./waf configure build -sT
+ image: lv2plugin/debian-x64-big
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=release -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
+
-test:x64_rel:
- <<: *test_definition
- image: lv2plugin/debian-x64
- script: python ./waf test
- needs: ["x64_rel"]
+x64_static:
+ <<: *build_definition
+ image: lv2plugin/debian-x64-big
+ script:
+ - meson setup build --wrap-mode=forcefallback -Ddefault_library=static -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
x64_sanitize:
<<: *build_definition
- image: lv2plugin/debian-x64-big
- script: python ./waf configure build -sT --no-coverage --no-bindings
+ image: lv2plugin/debian-x64-clang
+ script:
+ - meson setup build --wrap-mode=forcefallback -Db_lundef=false -Dbuildtype=plain -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
variables:
CC: "clang"
- CFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
CXX: "clang++"
- CXXFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
- LINKFLAGS: "-fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
-
-test:x64_sanitize:
- <<: *test_definition
- image: lv2plugin/debian-x64-big
- script: python ./waf test
- needs: ["x64_sanitize"]
+ 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"
-mac_dbg:
+freebsd_dbg:
<<: *build_definition
- script: python ./waf configure build -dsT --no-coverage
- tags: [macos]
+ tags: [freebsd,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
-test:mac_dbg:
- <<: *test_definition
- script: python ./waf test
- needs: ["mac_dbg"]
- tags: [macos]
+freebsd_rel:
+ <<: *build_definition
+ tags: [freebsd,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
-mac_rel:
+mac_dbg:
<<: *build_definition
- script: python ./waf configure build -sT --no-coverage
tags: [macos]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
-test:mac_rel:
- <<: *test_definition
- script: python ./waf test
- needs: ["mac_rel"]
+mac_rel:
+ <<: *build_definition
tags: [macos]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=release -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
win_dbg:
<<: *build_definition
- script: python ./waf configure build -sT --no-coverage
- tags: [windows,msvc,python]
-
-test:win_dbg:
- <<: *test_definition
- script: python ./waf test
- needs: ["win_dbg"]
- tags: [windows,msvc,python]
-
+ tags: [windows,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=debug -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
win_rel:
<<: *build_definition
- script: python ./waf configure build -sT --no-coverage
- tags: [windows,msvc,python]
-
-test:win_rel:
- <<: *test_definition
- script: python ./waf test
- needs: ["win_rel"]
- tags: [windows,msvc,python]
+ tags: [windows,meson]
+ script:
+ - meson setup build --wrap-mode=forcefallback -Dbuildtype=release -Ddocs=disabled -Dstrict=true -Dwerror=true
+ - ninja -C build test
diff --git a/.gitmodules b/.gitmodules
index 1708533..805f867 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,33 +1,30 @@
[submodule "libs/lv2kit"]
path = subprojects/lv2kit
- url = ../../lv2/lv2kit
-[submodule "waflib"]
- path = waflib
- url = ../autowaf.git
-[submodule "libs/raul"]
+ url = ../../lv2/lv2kit.git
+[submodule "raul"]
path = subprojects/raul
- url = ../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 = subprojects/patchage
+ url = ../patchage.git
+[submodule "ganv"]
path = subprojects/ganv
- url = ../ganv
-[submodule "plugins/mda.lv2"]
- path = plugins/mda.lv2
- url = ../mda.lv2.git
+ 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-lv2.git
+[submodule "blop.lv2"]
+ path = subprojects/blop.lv2
+ url = ../blop-lv2.git
diff --git a/.includes.imp b/.includes.imp
index e61db75..f3ea4eb 100644
--- a/.includes.imp
+++ b/.includes.imp
@@ -1,7 +1,7 @@
[
- { "ref": "ingen/.includes.imp" },
- { "ref": "libs/lv2kit/.includes.imp" },
- { "ref": "libs/lv2kit/libs/sord/.includes.imp" },
- { "ref": "libs/raul/.includes.imp" },
- { "ref": "patchage/.includes.imp" }
+ { "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 b760e11d5f9f4d25919a566ef727164da437606
diff --git a/jalv b/jalv
deleted file mode 160000
-Subproject 08ca5ba8003ba421566412675be4d9bebd85b82
diff --git a/machina b/machina
deleted file mode 160000
-Subproject 20bc7a79f54943c111161a905eb5fc1a491563a
diff --git a/meson.build b/meson.build
new file mode 100644
index 0000000..d895639
--- /dev/null
+++ b/meson.build
@@ -0,0 +1,77 @@
+project('drobillad', ['c', 'cpp'],
+ version: '0.0.0',
+ license: 'GPLv3+',
+ meson_version: '>= 0.56.0',
+ default_options: [
+ 'b_ndebug=if-release',
+ 'buildtype=release',
+ 'c_std=c99',
+ 'cpp_std=c++14',
+ ])
+
+#######################
+# Compilers and Flags #
+#######################
+
+# Required tools
+pkg = import('pkgconfig')
+cc = meson.get_compiler('c')
+cpp = meson.get_compiler('cpp')
+
+# Set global warning flags
+if get_option('strict') and not meson.is_subproject()
+ subdir('meson/warnings')
+endif
+
+##########################
+# 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', required: get_option('plugins'))
+mda_lv2 = subproject('mda.lv2', required: get_option('plugins'))
+
+# Libraries
+ganv = subproject('ganv', required: get_option('ganv'))
+raul = subproject('raul', required: get_option('raul'))
+
+# Applications
+ingen = subproject('ingen', required: get_option('ingen'))
+jalv = subproject('jalv', required: get_option('jalv'))
+# machina = subproject('machina', required: get_option('machina')))
+patchage = subproject('patchage', required: get_option('patchage'))
diff --git a/meson/warnings/meson.build b/meson/warnings/meson.build
new file mode 100644
index 0000000..708d730
--- /dev/null
+++ b/meson/warnings/meson.build
@@ -0,0 +1,256 @@
+# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: CC0-1.0 OR ISC
+
+# General code to enable approximately all warnings in GCC 12, clang, and MSVC.
+#
+# This is trivial for clang and MSVC, but GCC doesn't have an "everything"
+# option, so we need to enable everything we want explicitly. Wall is assumed,
+# but Wextra is not, for stability.
+#
+# These are collected from common.opt and c.opt in the GCC source, and manually
+# curated with the help of the GCC documentation. Warnings that are
+# application-specific, historical, or about compatibility between specific
+# language revisions are omitted. The intent here is to have roughly the same
+# meaning as clang's Weverything: extremely strict, but general. Specifically
+# omitted are:
+#
+# General:
+#
+# Wabi=
+# Waggregate-return
+# Walloc-size-larger-than=BYTES
+# Walloca-larger-than=BYTES
+# Wframe-larger-than=BYTES
+# Wlarger-than=BYTES
+# Wstack-usage=BYTES
+# Wsystem-headers
+# Wtraditional
+# Wtraditional-conversion
+# Wtrampolines
+# Wvla-larger-than=BYTES
+#
+# Build specific:
+#
+# Wpoison-system-directories
+#
+# C Specific:
+#
+# Wc11-c2x-compat
+# Wc90-c99-compat
+# Wc99-c11-compat
+# Wdeclaration-after-statement
+# Wtraditional
+# Wtraditional-conversion
+#
+# C++ Specific:
+#
+# Wc++0x-compat
+# Wc++1z-compat
+# Wc++2a-compat
+# Wctad-maybe-unsupported
+# Wnamespaces
+# Wtemplates
+
+# GCC warnings that apply to all C-family languages
+gcc_common_warnings = [
+ '-Walloc-zero',
+ '-Walloca',
+ '-Wanalyzer-too-complex',
+ '-Warith-conversion',
+ '-Warray-bounds=2',
+ '-Wattribute-alias=2',
+ '-Wbidi-chars=ucn',
+ '-Wcast-align=strict',
+ '-Wcast-function-type',
+ '-Wcast-qual',
+ '-Wclobbered',
+ '-Wconversion',
+ '-Wdate-time',
+ '-Wdisabled-optimization',
+ '-Wdouble-promotion',
+ '-Wduplicated-branches',
+ '-Wduplicated-cond',
+ '-Wempty-body',
+ '-Wendif-labels',
+ '-Wfloat-equal',
+ '-Wformat-overflow=2',
+ '-Wformat-signedness',
+ '-Wformat-truncation=2',
+ '-Wformat=2',
+ '-Wignored-qualifiers',
+ '-Wimplicit-fallthrough=3',
+ '-Winit-self',
+ '-Winline',
+ '-Winvalid-pch',
+ '-Wlogical-op',
+ '-Wmissing-declarations',
+ '-Wmissing-field-initializers',
+ '-Wmissing-include-dirs',
+ '-Wmultichar',
+ '-Wnormalized=nfc',
+ '-Wnull-dereference',
+ '-Wopenacc-parallelism',
+ '-Woverlength-strings',
+ '-Wpacked',
+ '-Wpacked-bitfield-compat',
+ '-Wpadded',
+ '-Wpointer-arith',
+ '-Wredundant-decls',
+ '-Wshadow',
+ '-Wshift-negative-value',
+ '-Wshift-overflow=2',
+ '-Wstack-protector',
+ '-Wstrict-aliasing=3',
+ '-Wstrict-overflow=5',
+ '-Wstring-compare',
+ '-Wstringop-overflow=3',
+ '-Wsuggest-attribute=cold',
+ '-Wsuggest-attribute=const',
+ '-Wsuggest-attribute=format',
+ '-Wsuggest-attribute=malloc',
+ '-Wsuggest-attribute=noreturn',
+ '-Wsuggest-attribute=pure',
+ '-Wswitch-default',
+ '-Wswitch-enum',
+ '-Wtrampolines',
+ '-Wtrivial-auto-var-init',
+ '-Wtype-limits',
+ '-Wundef',
+ '-Wuninitialized',
+ '-Wunsafe-loop-optimizations',
+ '-Wunused',
+ '-Wunused-const-variable=2',
+ '-Wunused-macros',
+ '-Wvector-operation-performance',
+ '-Wvla',
+ '-Wwrite-strings',
+]
+
+#####
+# C #
+#####
+
+if is_variable('cc')
+ # Set all_c_warnings for the current C compiler
+ all_c_warnings = []
+
+ if get_option('strict')
+ if cc.get_id() == 'clang'
+ all_c_warnings += ['-Weverything']
+
+ if not meson.is_cross_build()
+ all_c_warnings += [
+ '-Wno-poison-system-directories',
+ ]
+ endif
+
+ elif cc.get_id() == 'gcc'
+ all_c_warnings += gcc_common_warnings + [
+ '-Wabsolute-value',
+ '-Wbad-function-cast',
+ '-Wc++-compat',
+ '-Wenum-conversion',
+ '-Wjump-misses-init',
+ '-Wmissing-parameter-type',
+ '-Wmissing-prototypes',
+ '-Wnested-externs',
+ '-Wold-style-declaration',
+ '-Wold-style-definition',
+ '-Woverride-init',
+ '-Wsign-compare',
+ '-Wstrict-prototypes',
+ '-Wunsuffixed-float-constants',
+ ]
+
+ elif cc.get_id() == 'msvc'
+ all_c_warnings += [
+ '/Wall',
+ '/experimental:external',
+ '/external:W0',
+ '/external:anglebrackets',
+ ]
+ endif
+ endif
+
+ all_c_warnings = cc.get_supported_arguments(all_c_warnings)
+ add_global_arguments(all_c_warnings, language: ['c'])
+endif
+
+#######
+# C++ #
+#######
+
+if is_variable('cpp')
+ # Set all_cpp_warnings for the current C++ compiler
+ all_cpp_warnings = []
+
+ if get_option('strict')
+ if cpp.get_id() == 'clang'
+ all_cpp_warnings += [
+ '-Weverything',
+ '-Wno-c++98-compat',
+ '-Wno-c++98-compat-pedantic',
+ ]
+
+ if not meson.is_cross_build()
+ all_cpp_warnings += [
+ '-Wno-poison-system-directories',
+ ]
+ endif
+
+ elif cpp.get_id() == 'gcc'
+ all_cpp_warnings += gcc_common_warnings + [
+ '-Wabi-tag',
+ '-Waligned-new=all',
+ '-Wcatch-value=3',
+ '-Wcomma-subscript',
+ '-Wconditionally-supported',
+ '-Wctor-dtor-privacy',
+ '-Wdelete-non-virtual-dtor',
+ '-Wdeprecated',
+ '-Wdeprecated-copy',
+ '-Wdeprecated-copy-dtor',
+ '-Wdeprecated-enum-enum-conversion',
+ '-Wdeprecated-enum-float-conversion',
+ '-Weffc++',
+ '-Wexpansion-to-defined',
+ '-Wextra-semi',
+ '-Wimport',
+ '-Winvalid-imported-macros',
+ '-Wmismatched-tags',
+ '-Wmultiple-inheritance',
+ '-Wnoexcept',
+ '-Wnoexcept-type',
+ '-Wnon-virtual-dtor',
+ '-Wold-style-cast',
+ '-Woverloaded-virtual',
+ '-Wplacement-new=2',
+ '-Wredundant-move',
+ '-Wredundant-tags',
+ '-Wregister',
+ '-Wsign-compare',
+ '-Wsign-promo',
+ '-Wsized-deallocation',
+ '-Wstrict-null-sentinel',
+ '-Wsuggest-final-methods',
+ '-Wsuggest-final-types',
+ '-Wsuggest-override',
+ '-Wuseless-cast',
+ '-Wvirtual-inheritance',
+ '-Wvolatile',
+ '-Wzero-as-null-pointer-constant',
+ ]
+
+ elif cpp.get_id() == 'msvc'
+ all_cpp_warnings += [
+ '/Wall',
+ '/experimental:external',
+ '/external:W0',
+ '/external:anglebrackets',
+ ]
+ endif
+ endif
+
+ all_cpp_warnings = cpp.get_supported_arguments(all_cpp_warnings)
+ add_global_arguments(all_cpp_warnings, language: ['cpp'])
+endif
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644
index 0000000..ee2a3fe
--- /dev/null
+++ b/meson_options.txt
@@ -0,0 +1,38 @@
+# Copyright 2021-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: CC0-1.0 OR ISC
+
+option('checks', type: 'boolean', value: true, yield: true,
+ description: 'Check for features with the build system')
+
+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('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('strict', type: 'boolean', value: false, yield: true,
+ description: 'Enable ultra-strict warnings')
+
+option('tests', type: 'feature', value: 'auto', yield: true,
+ description: 'Build tests')
diff --git a/patchage b/patchage
deleted file mode 160000
-Subproject 6d53e23c76dc9093fea8958d0ae2328f9f5bced
diff --git a/plugins/blop.lv2 b/plugins/blop.lv2
deleted file mode 160000
-Subproject e60dd7472389691b5f2a310fff7ad743146867b
diff --git a/plugins/fomp.lv2 b/plugins/fomp.lv2
deleted file mode 160000
-Subproject c6516877974c700224861bd6347ab1313bb5fab
diff --git a/plugins/mda.lv2 b/plugins/mda.lv2
deleted file mode 160000
-Subproject 19752af61234581e0f73db539d5609ab14b3d92
diff --git a/subprojects/blop.lv2 b/subprojects/blop.lv2
new file mode 160000
+Subproject 153cf14cf825aeb7abae4e2c5224c65955da717
diff --git a/subprojects/fomp.lv2 b/subprojects/fomp.lv2
new file mode 160000
+Subproject 01e0564679f5831ed3b43f8547a2ed6d868c3c5
diff --git a/subprojects/ganv b/subprojects/ganv
-Subproject 17f58b94abf5e7b1ad7ea3c40d0cd1107298d41
+Subproject e1c2053ff1814d5f0f2fc30e7e9f150f7032f50
diff --git a/subprojects/ingen b/subprojects/ingen
new file mode 160000
+Subproject 79693e0ed6fc5c221ee15ab4523d4cf03f9454f
diff --git a/subprojects/jalv b/subprojects/jalv
new file mode 160000
+Subproject 37d87e9d55749b1d73f8c617d9365d482f9a7db
diff --git a/subprojects/lv2kit b/subprojects/lv2kit
-Subproject 96c0394fb5784812775290ad56768fc5c4a836e
+Subproject 7852888ce291b21f9723c52bdd018443fc50dc6
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 ac0590c5a8f84f9edcd6817e44976ad75fccb25
diff --git a/subprojects/patchage b/subprojects/patchage
new file mode 160000
+Subproject d8e1c0a515d4bb5818c7e6185d75a96f285d253
diff --git a/subprojects/raul b/subprojects/raul
-Subproject c56e72595ac6478639f6a0b074d24946d652dc4
+Subproject 5d32959f829725e0e059d55329bce69764618c2
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 b600c928b221a001faeab7bd92786d0b25714bc
diff --git a/wscript b/wscript
deleted file mode 100644
index 2670694..0000000
--- a/wscript
+++ /dev/null
@@ -1,75 +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 = ['subprojects/lv2kit', 'subprojects/raul', 'subprojects/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)
-
- if not autowaf.set_c_lang(conf, 'c11', mandatory=False):
- autowaf.set_c_lang(conf, 'c99')
-
- 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)