aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.clang-format25
-rw-r--r--.clang-tidy25
-rw-r--r--.git-blame-ignore-revs5
-rw-r--r--.gitignore3
-rw-r--r--.gitlab-ci.yml167
-rw-r--r--NEWS14
-rw-r--r--README.md4
-rw-r--r--doc/c/doxy-style.css4
-rw-r--r--doc/c/meson.build2
-rw-r--r--doc/c/reference.doxygen.in58
-rw-r--r--doc/ns/ext/meson.build1
-rw-r--r--doc/ns/extensions/meson.build1
-rw-r--r--doc/ns/meson.build9
-rw-r--r--doc/style/meson.build5
-rw-r--r--include/lv2/atom/atom.h18
-rw-r--r--include/lv2/atom/forge.h72
-rw-r--r--include/lv2/atom/util.h62
-rw-r--r--include/lv2/buf-size/buf-size.h6
-rw-r--r--include/lv2/core/attributes.h2
-rw-r--r--include/lv2/core/lv2.h26
-rw-r--r--include/lv2/core/lv2_util.h15
-rw-r--r--include/lv2/data-access/data-access.h6
-rw-r--r--include/lv2/dynmanifest/dynmanifest.h16
-rw-r--r--include/lv2/event/event-helpers.h13
-rw-r--r--include/lv2/event/event.h23
-rw-r--r--include/lv2/instance-access/instance-access.h6
-rw-r--r--include/lv2/log/log.h8
-rw-r--r--include/lv2/log/logger.h18
-rw-r--r--include/lv2/midi/midi.h6
-rw-r--r--include/lv2/morph/morph.h6
-rw-r--r--include/lv2/options/options.h10
-rw-r--r--include/lv2/parameters/parameters.h6
-rw-r--r--include/lv2/patch/patch.h6
-rw-r--r--include/lv2/port-groups/port-groups.h6
-rw-r--r--include/lv2/port-props/port-props.h6
-rw-r--r--include/lv2/presets/presets.h6
-rw-r--r--include/lv2/resize-port/resize-port.h6
-rw-r--r--include/lv2/state/state.h8
-rw-r--r--include/lv2/time/time.h6
-rw-r--r--include/lv2/ui/ui.h17
-rw-r--r--include/lv2/units/units.h6
-rw-r--r--include/lv2/uri-map/uri-map.h14
-rw-r--r--include/lv2/urid/urid.h6
-rw-r--r--include/lv2/worker/worker.h8
-rw-r--r--lv2/atom.lv2/atom.meta.ttl1
-rw-r--r--lv2/atom.lv2/atom.ttl5
-rw-r--r--lv2/atom.lv2/manifest.ttl1
-rw-r--r--lv2/buf-size.lv2/buf-size.meta.ttl1
-rw-r--r--lv2/buf-size.lv2/buf-size.ttl1
-rw-r--r--lv2/buf-size.lv2/manifest.ttl1
-rw-r--r--lv2/core.lv2/lv2core.meta.ttl3
-rw-r--r--lv2/core.lv2/lv2core.ttl12
-rw-r--r--lv2/core.lv2/manifest.ttl5
-rw-r--r--lv2/core.lv2/meta.ttl1
-rw-r--r--lv2/core.lv2/people.ttl1
-rw-r--r--lv2/data-access.lv2/data-access.meta.ttl1
-rw-r--r--lv2/data-access.lv2/data-access.ttl1
-rw-r--r--lv2/data-access.lv2/manifest.ttl1
-rw-r--r--lv2/dynmanifest.lv2/dynmanifest.meta.ttl1
-rw-r--r--lv2/dynmanifest.lv2/dynmanifest.ttl1
-rw-r--r--lv2/dynmanifest.lv2/manifest.ttl1
-rw-r--r--lv2/event.lv2/event.meta.ttl1
-rw-r--r--lv2/event.lv2/event.ttl1
-rw-r--r--lv2/event.lv2/manifest.ttl1
-rw-r--r--lv2/instance-access.lv2/instance-access.meta.ttl1
-rw-r--r--lv2/instance-access.lv2/instance-access.ttl1
-rw-r--r--lv2/instance-access.lv2/manifest.ttl1
-rw-r--r--lv2/log.lv2/log.meta.ttl1
-rw-r--r--lv2/log.lv2/log.ttl1
-rw-r--r--lv2/log.lv2/manifest.ttl1
-rw-r--r--lv2/midi.lv2/manifest.ttl1
-rw-r--r--lv2/midi.lv2/midi.meta.ttl1
-rw-r--r--lv2/midi.lv2/midi.ttl1
-rw-r--r--lv2/morph.lv2/manifest.ttl1
-rw-r--r--lv2/morph.lv2/morph.meta.ttl1
-rw-r--r--lv2/morph.lv2/morph.ttl1
-rw-r--r--lv2/options.lv2/manifest.ttl1
-rw-r--r--lv2/options.lv2/options.meta.ttl1
-rw-r--r--lv2/options.lv2/options.ttl1
-rw-r--r--lv2/parameters.lv2/manifest.ttl1
-rw-r--r--lv2/parameters.lv2/parameters.meta.ttl1
-rw-r--r--lv2/parameters.lv2/parameters.ttl1
-rw-r--r--lv2/patch.lv2/manifest.ttl1
-rw-r--r--lv2/patch.lv2/patch.meta.ttl1
-rw-r--r--lv2/patch.lv2/patch.ttl1
-rw-r--r--lv2/port-groups.lv2/manifest.ttl1
-rw-r--r--lv2/port-groups.lv2/port-groups.meta.ttl1
-rw-r--r--lv2/port-groups.lv2/port-groups.ttl1
-rw-r--r--lv2/port-props.lv2/manifest.ttl1
-rw-r--r--lv2/port-props.lv2/port-props.meta.ttl1
-rw-r--r--lv2/port-props.lv2/port-props.ttl1
-rw-r--r--lv2/presets.lv2/manifest.ttl1
-rw-r--r--lv2/presets.lv2/presets.meta.ttl1
-rw-r--r--lv2/presets.lv2/presets.ttl1
-rw-r--r--lv2/resize-port.lv2/manifest.ttl1
-rw-r--r--lv2/resize-port.lv2/resize-port.meta.ttl1
-rw-r--r--lv2/resize-port.lv2/resize-port.ttl1
-rw-r--r--lv2/state.lv2/manifest.ttl1
-rw-r--r--lv2/state.lv2/state.meta.ttl1
-rw-r--r--lv2/state.lv2/state.ttl1
-rw-r--r--lv2/time.lv2/manifest.ttl1
-rw-r--r--lv2/time.lv2/time.meta.ttl1
-rw-r--r--lv2/time.lv2/time.ttl1
-rw-r--r--lv2/ui.lv2/manifest.ttl5
-rw-r--r--lv2/ui.lv2/ui.meta.ttl21
-rw-r--r--lv2/ui.lv2/ui.ttl21
-rw-r--r--lv2/units.lv2/manifest.ttl1
-rw-r--r--lv2/units.lv2/units.meta.ttl1
-rw-r--r--lv2/units.lv2/units.ttl1
-rw-r--r--lv2/uri-map.lv2/manifest.ttl1
-rw-r--r--lv2/uri-map.lv2/uri-map.meta.ttl1
-rw-r--r--lv2/uri-map.lv2/uri-map.ttl1
-rw-r--r--lv2/urid.lv2/manifest.ttl1
-rw-r--r--lv2/urid.lv2/urid.meta.ttl1
-rw-r--r--lv2/urid.lv2/urid.ttl1
-rw-r--r--lv2/worker.lv2/manifest.ttl1
-rw-r--r--lv2/worker.lv2/worker.meta.ttl1
-rw-r--r--lv2/worker.lv2/worker.ttl1
-rwxr-xr-xlv2specgen/lv2specgen.py18
-rw-r--r--lv2specgen/meson.build5
-rw-r--r--meson.build226
-rw-r--r--meson/library/meson.build30
-rw-r--r--meson/suppressions/meson.build132
-rw-r--r--meson/warnings/meson.build256
-rw-r--r--meson_options.txt14
-rw-r--r--plugins/.clang-tidy22
-rw-r--r--plugins/eg-amp.lv2/amp.c7
-rw-r--r--plugins/eg-amp.lv2/meson.build3
-rw-r--r--plugins/eg-fifths.lv2/fifths.c25
-rw-r--r--plugins/eg-fifths.lv2/meson.build3
-rw-r--r--plugins/eg-fifths.lv2/uris.h10
-rw-r--r--plugins/eg-metro.lv2/meson.build3
-rw-r--r--plugins/eg-metro.lv2/metro.c24
-rw-r--r--plugins/eg-midigate.lv2/meson.build3
-rw-r--r--plugins/eg-midigate.lv2/midigate.c19
-rw-r--r--plugins/eg-params.lv2/meson.build3
-rw-r--r--plugins/eg-params.lv2/params.c27
-rw-r--r--plugins/eg-params.lv2/state_map.h6
-rw-r--r--plugins/eg-sampler.lv2/atom_sink.h6
-rw-r--r--plugins/eg-sampler.lv2/meson.build32
-rw-r--r--plugins/eg-sampler.lv2/peaks.h8
-rw-r--r--plugins/eg-sampler.lv2/sampler.c33
-rw-r--r--plugins/eg-sampler.lv2/sampler_ui.c29
-rw-r--r--plugins/eg-sampler.lv2/uris.h16
-rw-r--r--plugins/eg-scope.lv2/examploscope.c35
-rw-r--r--plugins/eg-scope.lv2/examploscope_ui.c50
-rw-r--r--plugins/eg-scope.lv2/meson.build14
-rw-r--r--plugins/eg-scope.lv2/uris.h8
-rw-r--r--plugins/meson.build4
-rw-r--r--schemas.lv2/dcterms.ttl1
-rw-r--r--schemas.lv2/doap.ttl1
-rw-r--r--schemas.lv2/foaf.ttl1
-rw-r--r--schemas.lv2/manifest.ttl1
-rw-r--r--schemas.lv2/owl.ttl1
-rw-r--r--schemas.lv2/rdf.ttl1
-rw-r--r--schemas.lv2/rdfs.ttl1
-rw-r--r--schemas.lv2/xsd.ttl31
-rwxr-xr-xscripts/lv2_check_specification.py4
-rw-r--r--test/.clang-tidy24
-rw-r--r--test/atom_test_utils.c20
-rw-r--r--test/cpp/.clang-tidy27
-rw-r--r--test/cpp/test_build.cpp54
-rw-r--r--test/headers/.clang-tidy22
-rw-r--r--test/headers/meson.build69
-rw-r--r--test/headers/test_headers.c42
-rw-r--r--test/meson.build202
-rw-r--r--test/test_atom.c18
-rw-r--r--test/test_build.c60
-rw-r--r--test/test_build.cpp54
-rw-r--r--test/test_forge_overflow.c14
170 files changed, 1245 insertions, 1350 deletions
diff --git a/.clang-format b/.clang-format
index 8ee2675..c40ad9c 100644
--- a/.clang-format
+++ b/.clang-format
@@ -1,37 +1,38 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# Copyright 2020-2024 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
---
AlignConsecutiveAssignments: true
AlignConsecutiveDeclarations: true
-AlignEscapedNewlinesLeft: true
+AlignEscapedNewlines: Left
+AttributeMacros:
+ - LV2_DEPRECATED
+ - LV2_SYMBOL_EXPORT
BasedOnStyle: Mozilla
BraceWrapping:
- AfterNamespace: false
AfterClass: true
AfterEnum: false
AfterExternBlock: false
AfterFunction: true
+ AfterNamespace: false
AfterStruct: false
SplitEmptyFunction: false
SplitEmptyRecord: false
BreakBeforeBraces: Custom
Cpp11BracedListStyle: true
+ForEachMacros:
+ - LV2_ATOM_OBJECT_BODY_FOREACH
+ - LV2_ATOM_OBJECT_FOREACH
+ - LV2_ATOM_SEQUENCE_BODY_FOREACH
+ - LV2_ATOM_SEQUENCE_FOREACH
+ - LV2_ATOM_TUPLE_BODY_FOREACH
+ - LV2_ATOM_TUPLE_FOREACH
IndentCaseLabels: false
IndentPPDirectives: AfterHash
KeepEmptyLinesAtTheStartOfBlocks: false
SpacesInContainerLiterals: false
StatementMacros:
- - LV2_DEPRECATED
- LV2_DISABLE_DEPRECATION_WARNINGS
- LV2_RESTORE_WARNINGS
- - LV2_SYMBOL_EXPORT
- _Pragma
-ForEachMacros:
- - LV2_ATOM_OBJECT_BODY_FOREACH
- - LV2_ATOM_OBJECT_FOREACH
- - LV2_ATOM_SEQUENCE_BODY_FOREACH
- - LV2_ATOM_SEQUENCE_FOREACH
- - LV2_ATOM_TUPLE_BODY_FOREACH
- - LV2_ATOM_TUPLE_FOREACH
...
diff --git a/.clang-tidy b/.clang-tidy
new file mode 100644
index 0000000..013eda7
--- /dev/null
+++ b/.clang-tidy
@@ -0,0 +1,25 @@
+# Copyright 2020-2025 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+ *,
+ -*-macro-to-enum,
+ -*-magic-numbers,
+ -altera-*,
+ -bugprone-assignment-in-if-condition,
+ -bugprone-easily-swappable-parameters,
+ -bugprone-macro-parentheses,
+ -clang-diagnostic-unused-function,
+ -clang-diagnostic-unused-macros,
+ -llvmlibc-*,
+ -misc-include-cleaner,
+ -performance-no-int-to-ptr,
+ -readability-identifier-length,
+CheckOptions:
+ - key: hicpp-uppercase-literal-suffix.NewSuffixes
+ value: L;U;f
+ - key: readability-uppercase-literal-suffix.NewSuffixes
+ value: L;U;f
+FormatStyle: file
+HeaderFilterRegex: 'lv2/.*\.h'
+WarningsAsErrors: '*'
diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs
new file mode 100644
index 0000000..6f45828
--- /dev/null
+++ b/.git-blame-ignore-revs
@@ -0,0 +1,5 @@
+# Copyright 2025 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+# Format all code with clang-format
+882b9446cbf7316345de391188e68c2a7333da5b
diff --git a/.gitignore b/.gitignore
index 7cb3c9f..bb24764 100644
--- a/.gitignore
+++ b/.gitignore
@@ -10,3 +10,6 @@
*.swp
cscope.*
tags
+
+# cached files when used as a meson subproject
+.meson-subproject-wrap-hash.txt
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 82be218..a67a043 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,168 +1,141 @@
-# Copyright 2018-2022 David Robillard <d@drobilla.net>
+# Copyright 2018-2023 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
-arm32_dbg:
- image: lv2plugin/debian-arm32
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-arm32_rel:
- image: lv2plugin/debian-arm32
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-
-arm64_dbg:
- image: lv2plugin/debian-arm64
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-arm64_rel:
- image: lv2plugin/debian-arm64
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/aarch64-linux-gnu.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-
-x32_dbg:
- image: lv2plugin/debian-x32
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-x32_rel:
- image: lv2plugin/debian-x32
+default:
+ image: lv2plugin/debian-x64
script:
- - meson setup build --cross-file=/usr/share/meson/cross/i686-linux-gnu.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build -Dwerror=true
- ninja -C build test
-
-x64_dbg:
- image: lv2plugin/debian-x64
+dev:
+ image: lv2plugin/debian-x64-big
script:
- - meson setup build -Dbuildtype=debug -Dstrict=true -Dwerror=true -Db_coverage=true
+ - meson setup build -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Db_coverage=true -Dlint=true
- ninja -C build test
- ninja -C build coverage-html
+ - meson configure -Dbuildtype=release -Db_coverage=false build
+ - ninja -C build test
coverage: '/ *lines\.*: \d+\.\d+.*/'
artifacts:
paths:
- build/meson-logs/coveragereport
-x64_rel:
+static:
image: lv2plugin/debian-x64
script:
- - meson setup build -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build -Ddefault_library=static -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
- ninja -C build test
-
-x64_static:
- image: lv2plugin/debian-x64
- script:
- - meson setup build -Ddefault_library=static -Dstrict=true -Dwerror=true -Ddocs=disabled
- - ninja -C build test
-
-
-x64_sanitize:
+sanitize:
image: lv2plugin/debian-x64-clang
script:
- - meson setup build -Db_lundef=false -Dbuildtype=plain -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build -Db_lundef=false -Dbuildtype=plain -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
- ninja -C build test
variables:
CC: "clang"
CFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
LDFLAGS: "-fno-sanitize-recover=all -fsanitize=address -fsanitize=undefined -fsanitize=float-divide-by-zero -fsanitize=unsigned-integer-overflow -fsanitize=implicit-conversion -fsanitize=local-bounds -fsanitize=nullability"
+# Linux Distributions
-freebsd_dbg:
- tags: [freebsd,meson]
+fedora:
+ image: lv2plugin/fedora-big
script:
- - meson setup build -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build -Dbuildtype=plain -Dwarning_level=3 -Ddocs=enabled -Dwerror=true
- ninja -C build test
+ variables:
+ CFLAGS: -O2 -D_FORTIFY_SOURCE=2
+ artifacts:
+ paths:
+ - build/doc
-freebsd_rel:
- tags: [freebsd,meson]
+# Linux Platforms
+
+arm32:
+ image: lv2plugin/debian-arm32
script:
- - meson setup build -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build --cross-file=/usr/share/meson/cross/arm-linux-gnueabihf.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-
-mingw32_dbg:
- image: lv2plugin/debian-mingw32
+arm64:
+ image: lv2plugin/debian-arm64
script:
- - meson setup build --cross-file=/usr/share/meson/cross/i686-w64-mingw32.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build --cross-file=/usr/share/meson/cross/aarch64-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
-mingw32_rel:
+mingw32:
image: lv2plugin/debian-mingw32
script:
- - meson setup build --cross-file=/usr/share/meson/cross/i686-w64-mingw32.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build --cross-file=/usr/share/meson/cross/i686-w64-mingw32.ini -Dbuildtype=debug -Dwarning_level=everything -Dwerror=true -Ddocs=disabled
- ninja -C build test
-
-
-mingw64_dbg:
- image: lv2plugin/debian-mingw64
- script:
- - meson setup build --cross-file=/usr/share/meson/cross/x86_64-w64-mingw32.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-mingw64_rel:
+mingw64:
image: lv2plugin/debian-mingw64
script:
- - meson setup build --cross-file=/usr/share/meson/cross/x86_64-w64-mingw32.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build --cross-file=/usr/share/meson/cross/x86_64-w64-mingw32.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-
-mac_dbg:
- tags: [macos]
+wasm:
+ image: lv2plugin/debian-wasm
script:
- - meson setup build -Dbuildtype=debug -Dstrict=true -Dwerror=true
+ - meson setup build --cross-file=/usr/share/meson/cross/wasm.ini -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddefault_library=static -Ddocs=disabled -Dplugins=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-mac_rel:
- tags: [macos]
+x32:
+ image: lv2plugin/debian-x32
script:
- - meson setup build -Dbuildtype=release -Dstrict=true -Dwerror=true
+ - 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)
-win_dbg:
- tags: [windows,meson]
+freebsd:
+ tags: [freebsd,meson]
script:
- - meson setup build -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson setup build -Dbuildtype=debug -Dwarning_level=3 -Dwerror=true -Ddocs=disabled
- ninja -C build test
-
-win_rel:
- tags: [windows,meson]
- script:
- - meson setup build -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddocs=disabled
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-
-wasm_dbg:
- image: lv2plugin/debian-wasm
+mac:
+ tags: [macos]
script:
- - meson setup build --cross-file=/usr/share/meson/cross/wasm.ini -Dbuildtype=debug -Dstrict=true -Dwerror=true -Ddefault_library=static -Ddocs=disabled -Dplugins=disabled
+ - meson setup build -Dbuildtype=debug -Dwarning_level=everything -Dwerror=true
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
- ninja -C build test
-wasm_rel:
- image: lv2plugin/debian-wasm
+win:
+ tags: [windows,meson]
script:
- - meson setup build --cross-file=/usr/share/meson/cross/wasm.ini -Dbuildtype=release -Dstrict=true -Dwerror=true -Ddefault_library=static -Ddocs=disabled -Dplugins=disabled
+ - meson setup build -Dbuildtype=debug -Dwarning_level=everything -Dwerror=true -Ddocs=disabled
+ - ninja -C build test
+ - meson configure -Dbuildtype=release build
- ninja -C build test
+# Documentation
pages:
stage: deploy
script:
- mkdir -p public
- mv build/meson-logs/coveragereport/ public/coverage
- dependencies:
- - x64_dbg
+ needs:
+ - dev
artifacts:
paths:
- public
only:
- - master
+ - main
diff --git a/NEWS b/NEWS
index 0cafca5..fa67fb3 100644
--- a/NEWS
+++ b/NEWS
@@ -1,11 +1,21 @@
-lv2 (1.18.9) unstable; urgency=medium
+lv2 (1.18.11) unstable; urgency=medium
+
+ * Allow LV2_SYMBOL_EXPORT to be overridden
+ * Fix pylint warning in test script
+ * Override pkg-config dependency within meson
+ * Remove troublesome lv2_atom_assert_double_fits_in_64_bits
+ * ui: Add types for Gtk4UI and Qt6UI
+
+ -- David Robillard <d@drobilla.net> Thu, 11 Jul 2024 23:58:50 +0000
+
+lv2 (1.18.10) stable; urgency=medium
* Fix includedir in pkg-config file
* Fix missing example plugin UI binaries
* Only install lv2specgen when required Python modules are found
* Replace change history data with a plain text NEWS file
- -- David Robillard <d@drobilla.net> Wed, 07 Sep 2022 00:19:12 +0000
+ -- David Robillard <d@drobilla.net> Fri, 09 Sep 2022 17:26:51 +0000
lv2 (1.18.8) stable; urgency=medium
diff --git a/README.md b/README.md
index bbc7b63..d547ce2 100644
--- a/README.md
+++ b/README.md
@@ -37,12 +37,12 @@ Other projects may extend LV2, but must place their headers elsewhere.
Headers are installed to `includedir` with paths like:
- #include "lv2/urid/urid.h"
+ #include <lv2/urid/urid.h>
For backwards compatibility, if the `old_headers` option is set, then headers
are also installed to the older URI-based paths:
- #include "lv2/lv2plug.in/ns/ext/urid/urid.h"
+ #include <lv2/lv2plug.in/ns/ext/urid/urid.h>
Projects still using this style are encourated to migrate to the shorter style
above.
diff --git a/doc/c/doxy-style.css b/doc/c/doxy-style.css
index b44675e..6f15ee4 100644
--- a/doc/c/doxy-style.css
+++ b/doc/c/doxy-style.css
@@ -208,6 +208,10 @@ dl.el {
font-family: "SF Mono", Menlo, Consolas, "DejaVu Sans Mono", monospace, fixed;
}
+.ttc {
+ display: none;
+}
+
pre.fragment {
border: 1px solid #C4C4C4;
background-color: #F9F9F9;
diff --git a/doc/c/meson.build b/doc/c/meson.build
index 7285c60..da88b86 100644
--- a/doc/c/meson.build
+++ b/doc/c/meson.build
@@ -11,7 +11,7 @@ if doxygen.found()
'LV2_SRCDIR': lv2_source_root,
'LV2_BUILDDIR': lv2_build_root,
'LV2_VERSION': meson.project_version(),
- }
+ },
)
reference_doxygen = configure_file(
diff --git a/doc/c/reference.doxygen.in b/doc/c/reference.doxygen.in
index 0b87d49..333fe1c 100644
--- a/doc/c/reference.doxygen.in
+++ b/doc/c/reference.doxygen.in
@@ -805,6 +805,7 @@ INPUT = @LV2_SRCDIR@/doc/c/mainpage.md \
@LV2_SRCDIR@/include/lv2/atom/util.h \
@LV2_SRCDIR@/include/lv2/buf-size/buf-size.h \
@LV2_SRCDIR@/include/lv2/core/lv2.h \
+ @LV2_SRCDIR@/include/lv2/core/lv2_util.h \
@LV2_SRCDIR@/include/lv2/data-access/data-access.h \
@LV2_SRCDIR@/include/lv2/dynmanifest/dynmanifest.h \
@LV2_SRCDIR@/include/lv2/event/event-helpers.h \
@@ -1206,15 +1207,6 @@ HTML_COLORSTYLE_SAT = 30
HTML_COLORSTYLE_GAMMA = 100
-# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML
-# page will contain the date and time when the page was generated. Setting this
-# to YES can help to show when doxygen was last run and thus if the
-# documentation is up to date.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-HTML_TIMESTAMP = NO
-
# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
# documentation will contain a main index with vertical navigation menus that
# are dynamically created via JavaScript. If disabled, the navigation index will
@@ -1502,17 +1494,6 @@ EXT_LINKS_IN_WINDOW = NO
FORMULA_FONTSIZE = 10
-# Use the FORMULA_TRANSPARENT tag to determine whether or not the images
-# generated for formulas are transparent PNGs. Transparent PNGs are not
-# supported properly for IE 6.0, but are supported on all modern browsers.
-#
-# Note that when changing this option you need to delete any form_*.png files in
-# the HTML output directory before the changes have effect.
-# The default value is: YES.
-# This tag requires that the tag GENERATE_HTML is set to YES.
-
-FORMULA_TRANSPARENT = YES
-
# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
# https://www.mathjax.org) which uses client side JavaScript for the rendering
# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
@@ -1822,14 +1803,6 @@ LATEX_HIDE_INDICES = NO
LATEX_BIB_STYLE = plain
-# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated
-# page will contain the date and time when the page was generated. Setting this
-# to NO can help when comparing the output of multiple runs.
-# The default value is: NO.
-# This tag requires that the tag GENERATE_LATEX is set to YES.
-
-LATEX_TIMESTAMP = NO
-
#---------------------------------------------------------------------------
# Configuration options related to the RTF output
#---------------------------------------------------------------------------
@@ -2185,23 +2158,6 @@ HAVE_DOT = NO
DOT_NUM_THREADS = 0
-# When you want a differently looking font in the dot files that doxygen
-# generates you can specify the font name using DOT_FONTNAME. You need to make
-# sure dot is able to find the font, which can be done by putting it in a
-# standard location or by setting the DOTFONTPATH environment variable or by
-# setting DOT_FONTPATH to the directory containing the font.
-# The default value is: Helvetica.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTNAME =
-
-# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of
-# dot graphs.
-# Minimum value: 4, maximum value: 24, default value: 10.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_FONTSIZE = 10
-
# By default doxygen will tell dot to use the default font as specified with
# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set
# the path where dot can find it using this tag.
@@ -2417,18 +2373,6 @@ DOT_GRAPH_MAX_NODES = 50
MAX_DOT_GRAPH_DEPTH = 0
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is disabled by default, because dot on Windows does not seem
-# to support this out of the box.
-#
-# Warning: Depending on the platform used, enabling this option may lead to
-# badly anti-aliased labels on the edges of a graph (i.e. they become hard to
-# read).
-# The default value is: NO.
-# This tag requires that the tag HAVE_DOT is set to YES.
-
-DOT_TRANSPARENT = NO
-
# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
# files in one run (i.e. multiple -o and -T options on the command line). This
# makes dot run faster, but since only newer versions of dot (>1.8.10) support
diff --git a/doc/ns/ext/meson.build b/doc/ns/ext/meson.build
index c76f1a2..bf6431b 100644
--- a/doc/ns/ext/meson.build
+++ b/doc/ns/ext/meson.build
@@ -45,6 +45,7 @@ if build_docs
command: lv2specgen_command_prefix + [
'--docdir=../../c/html',
'--style-uri=../../style/style.css',
+ ] + [
'@INPUT@',
'@OUTPUT@',
],
diff --git a/doc/ns/extensions/meson.build b/doc/ns/extensions/meson.build
index 599deb8..837f736 100644
--- a/doc/ns/extensions/meson.build
+++ b/doc/ns/extensions/meson.build
@@ -26,6 +26,7 @@ if build_docs
command: lv2specgen_command_prefix + [
'--docdir=../../c/html',
'--style-uri=../../style/style.css',
+ ] + [
'@INPUT@',
'@OUTPUT@',
],
diff --git a/doc/ns/meson.build b/doc/ns/meson.build
index cda9ba0..126a100 100644
--- a/doc/ns/meson.build
+++ b/doc/ns/meson.build
@@ -24,6 +24,7 @@ if build_docs
command: lv2specgen_command_prefix + [
'--docdir=../c/html',
'--style-uri=../style/style.css',
+ ] + [
'@INPUT@',
'@OUTPUT@',
],
@@ -55,12 +56,14 @@ subdir('extensions')
# Index #
#########
-lv2_build_index = find_program(lv2_source_root / 'scripts' / 'lv2_build_index.py')
+lv2_build_index = find_program(
+ lv2_source_root / 'scripts' / 'lv2_build_index.py',
+)
lv2_build_index_command = [
lv2_build_index,
- '--lv2-version', meson.project_version(),
- '--lv2-source-root', lv2_source_root,
+ ['--lv2-version', meson.project_version()],
+ ['--lv2-source-root', lv2_source_root],
]
if get_option('online_docs')
diff --git a/doc/style/meson.build b/doc/style/meson.build
index 501c0fa..39e9242 100644
--- a/doc/style/meson.build
+++ b/doc/style/meson.build
@@ -1,10 +1,7 @@
# Copyright 2022 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
-style_files = files(
- 'pygments.css',
- 'style.css'
-)
+style_files = files('pygments.css', 'style.css')
foreach file : style_files
configure_file(
diff --git a/include/lv2/atom/atom.h b/include/lv2/atom/atom.h
index a6178cf..41af21a 100644
--- a/include/lv2/atom/atom.h
+++ b/include/lv2/atom/atom.h
@@ -1,8 +1,8 @@
// Copyright 2008-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_ATOM_H
-#define LV2_ATOM_H
+#ifndef LV2_ATOM_ATOM_H
+#define LV2_ATOM_ATOM_H
/**
@defgroup atom Atom
@@ -62,25 +62,19 @@
extern "C" {
#endif
-/** @cond */
-/** This expression will fail to compile if double does not fit in 64 bits. */
-typedef char lv2_atom_assert_double_fits_in_64_bits
- [((sizeof(double) <= sizeof(uint64_t)) * 2) - 1];
-/** @endcond */
-
/**
Return a pointer to the contents of an Atom. The "contents" of an atom
is the data past the complete type-specific header.
@param type The type of the atom, for example LV2_Atom_String.
@param atom A variable-sized atom.
*/
-#define LV2_ATOM_CONTENTS(type, atom) ((void*)((uint8_t*)(atom) + sizeof(type)))
+#define LV2_ATOM_CONTENTS(type, atom) ((void*)((type*)(atom) + 1U))
/**
Const version of LV2_ATOM_CONTENTS.
*/
#define LV2_ATOM_CONTENTS_CONST(type, atom) \
- ((const void*)((const uint8_t*)(atom) + sizeof(type)))
+ ((const void*)((const type*)(atom) + 1U))
/**
Return a pointer to the body of an Atom. The "body" of an atom is the
@@ -221,7 +215,7 @@ typedef struct {
| Event 1 (size 6) | Event 2
| | | | | | | | |
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | |
- |FRAMES |TYPE |SIZE |DATADATADATAPAD|FRAMES |...
+ |FRAMES |SIZE |TYPE |DATADATADATAPAD|FRAMES |...
</pre>
*/
typedef struct {
@@ -244,4 +238,4 @@ typedef struct {
@}
*/
-#endif /* LV2_ATOM_H */
+#endif // LV2_ATOM_ATOM_H
diff --git a/include/lv2/atom/forge.h b/include/lv2/atom/forge.h
index 5e9bef8..58b7512 100644
--- a/include/lv2/atom/forge.h
+++ b/include/lv2/atom/forge.h
@@ -38,10 +38,10 @@
@{
*/
-#include "lv2/atom/atom.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/attributes.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/attributes.h>
+#include <lv2/urid/urid.h>
#include <assert.h>
#include <stdbool.h>
@@ -90,24 +90,24 @@ typedef struct {
LV2_Atom_Forge_Frame* stack;
- LV2_URID Blank LV2_DEPRECATED;
- LV2_URID Bool;
- LV2_URID Chunk;
- LV2_URID Double;
- LV2_URID Float;
- LV2_URID Int;
- LV2_URID Long;
- LV2_URID Literal;
- LV2_URID Object;
- LV2_URID Path;
- LV2_URID Property;
+ LV2_URID Blank LV2_DEPRECATED;
+ LV2_URID Bool;
+ LV2_URID Chunk;
+ LV2_URID Double;
+ LV2_URID Float;
+ LV2_URID Int;
+ LV2_URID Long;
+ LV2_URID Literal;
+ LV2_URID Object;
+ LV2_URID Path;
+ LV2_URID Property;
LV2_URID Resource LV2_DEPRECATED;
- LV2_URID Sequence;
- LV2_URID String;
- LV2_URID Tuple;
- LV2_URID URI;
- LV2_URID URID;
- LV2_URID Vector;
+ LV2_URID Sequence;
+ LV2_URID String;
+ LV2_URID Tuple;
+ LV2_URID URI;
+ LV2_URID URID;
+ LV2_URID Vector;
} LV2_Atom_Forge;
static inline void
@@ -147,6 +147,7 @@ lv2_atom_forge_init(LV2_Atom_Forge* forge, LV2_URID_Map* map)
static inline LV2_Atom*
lv2_atom_forge_deref(LV2_Atom_Forge* forge, LV2_Atom_Forge_Ref ref)
{
+ // NOLINTNEXTLINE(performance-no-int-to-ptr)
return forge->buf ? (LV2_Atom*)ref : forge->deref(forge->handle, ref);
}
@@ -305,7 +306,7 @@ lv2_atom_forge_pad(LV2_Atom_Forge* forge, uint32_t written)
static inline LV2_Atom_Forge_Ref
lv2_atom_forge_write(LV2_Atom_Forge* forge, const void* data, uint32_t size)
{
- LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, data, size);
+ const LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, data, size);
if (out) {
lv2_atom_forge_pad(forge, size);
}
@@ -316,11 +317,18 @@ lv2_atom_forge_write(LV2_Atom_Forge* forge, const void* data, uint32_t size)
static inline LV2_Atom_Forge_Ref
lv2_atom_forge_string_body(LV2_Atom_Forge* forge, const char* str, uint32_t len)
{
- LV2_Atom_Forge_Ref out = lv2_atom_forge_raw(forge, str, len);
- if (out && (out = lv2_atom_forge_raw(forge, "", 1))) {
- lv2_atom_forge_pad(forge, len + 1);
+ const LV2_Atom_Forge_Ref s = lv2_atom_forge_raw(forge, str, len);
+ if (!s) {
+ return s;
}
- return out;
+
+ const LV2_Atom_Forge_Ref t = lv2_atom_forge_raw(forge, "", 1);
+ if (!t) {
+ return t;
+ }
+
+ lv2_atom_forge_pad(forge, len + 1U);
+ return t;
}
/**
@@ -484,10 +492,10 @@ lv2_atom_forge_vector(LV2_Atom_Forge* forge,
const void* elems)
{
const LV2_Atom_Vector a = {
- {(uint32_t)sizeof(LV2_Atom_Vector_Body) + n_elems * child_size,
+ {(uint32_t)sizeof(LV2_Atom_Vector_Body) + (n_elems * child_size),
forge->Vector},
{child_size, child_type}};
- LV2_Atom_Forge_Ref out = lv2_atom_forge_write(forge, &a, sizeof(a));
+ const LV2_Atom_Forge_Ref out = lv2_atom_forge_write(forge, &a, sizeof(a));
if (out) {
lv2_atom_forge_write(forge, elems, child_size * n_elems);
}
@@ -561,8 +569,7 @@ lv2_atom_forge_object(LV2_Atom_Forge* forge,
This function is deprecated and should not be used in new code.
Use lv2_atom_forge_object() directly instead.
*/
-LV2_DEPRECATED
-static inline LV2_Atom_Forge_Ref
+LV2_DEPRECATED static inline LV2_Atom_Forge_Ref
lv2_atom_forge_resource(LV2_Atom_Forge* forge,
LV2_Atom_Forge_Frame* frame,
LV2_URID id,
@@ -580,8 +587,7 @@ lv2_atom_forge_resource(LV2_Atom_Forge* forge,
This function is deprecated and should not be used in new code.
Use lv2_atom_forge_object() directly instead.
*/
-LV2_DEPRECATED
-static inline LV2_Atom_Forge_Ref
+LV2_DEPRECATED static inline LV2_Atom_Forge_Ref
lv2_atom_forge_blank(LV2_Atom_Forge* forge,
LV2_Atom_Forge_Frame* frame,
uint32_t id,
@@ -667,4 +673,4 @@ LV2_RESTORE_WARNINGS
@}
*/
-#endif /* LV2_ATOM_FORGE_H */
+#endif // LV2_ATOM_FORGE_H
diff --git a/include/lv2/atom/util.h b/include/lv2/atom/util.h
index f585f82..9a3d8a3 100644
--- a/include/lv2/atom/util.h
+++ b/include/lv2/atom/util.h
@@ -1,4 +1,4 @@
-// Copyright 2008-2015 David Robillard <d@drobilla.net>
+// Copyright 2008-2024 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
#ifndef LV2_ATOM_UTIL_H
@@ -13,7 +13,7 @@
*/
/**
- @defgroup util Utilities
+ @defgroup atom_util Utilities
@ingroup atom
Utilities for working with atoms.
@@ -21,13 +21,15 @@
@{
*/
-#include "lv2/atom/atom.h"
+#include <lv2/atom/atom.h>
#include <stdarg.h>
#include <stdbool.h>
#include <stdint.h>
#include <string.h>
+// NOLINTBEGIN(bugprone-macro-parentheses)
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -36,7 +38,9 @@ extern "C" {
static inline uint32_t
lv2_atom_pad_size(uint32_t size)
{
- return (size + 7U) & (~7U);
+ static const uint32_t mask = 7U;
+
+ return (size + mask) & ~mask;
}
/** Return the total size of `atom`, including the header. */
@@ -57,8 +61,7 @@ lv2_atom_is_null(const LV2_Atom* atom)
static inline bool
lv2_atom_equals(const LV2_Atom* a, const LV2_Atom* b)
{
- return (a == b) || ((a->type == b->type) && (a->size == b->size) &&
- !memcmp(a + 1, b + 1, a->size));
+ return (a == b) || !memcmp(a, b, sizeof(LV2_Atom) + a->size);
}
/**
@@ -112,14 +115,14 @@ lv2_atom_sequence_next(const LV2_Atom_Event* i)
@endcode
*/
#define LV2_ATOM_SEQUENCE_FOREACH(seq, iter) \
- for (LV2_Atom_Event * iter = lv2_atom_sequence_begin(&(seq)->body); \
+ for (LV2_Atom_Event* iter = lv2_atom_sequence_begin(&(seq)->body); \
!lv2_atom_sequence_is_end(&(seq)->body, (seq)->atom.size, (iter)); \
(iter) = lv2_atom_sequence_next(iter))
/** Like LV2_ATOM_SEQUENCE_FOREACH but for a headerless sequence body. */
-#define LV2_ATOM_SEQUENCE_BODY_FOREACH(body, size, iter) \
- for (LV2_Atom_Event * iter = lv2_atom_sequence_begin(body); \
- !lv2_atom_sequence_is_end(body, size, (iter)); \
+#define LV2_ATOM_SEQUENCE_BODY_FOREACH(body, size, iter) \
+ for (LV2_Atom_Event* iter = lv2_atom_sequence_begin(body); \
+ !lv2_atom_sequence_is_end(body, size, (iter)); \
(iter) = lv2_atom_sequence_next(iter))
/**
@@ -178,7 +181,7 @@ lv2_atom_sequence_append_event(LV2_Atom_Sequence* seq,
static inline LV2_Atom*
lv2_atom_tuple_begin(const LV2_Atom_Tuple* tup)
{
- return (LV2_Atom*)(LV2_ATOM_BODY(tup));
+ return (LV2_Atom*)tup + 1U;
}
/** Return true iff `i` has reached the end of `body`. */
@@ -210,15 +213,14 @@ lv2_atom_tuple_next(const LV2_Atom* i)
}
@endcode
*/
-#define LV2_ATOM_TUPLE_FOREACH(tuple, iter) \
- for (LV2_Atom * iter = lv2_atom_tuple_begin(tuple); \
- !lv2_atom_tuple_is_end( \
- LV2_ATOM_BODY(tuple), (tuple)->atom.size, (iter)); \
+#define LV2_ATOM_TUPLE_FOREACH(tuple, iter) \
+ for (LV2_Atom* iter = lv2_atom_tuple_begin(tuple); !lv2_atom_tuple_is_end( \
+ LV2_ATOM_BODY(tuple), (tuple)->atom.size, (iter)); \
(iter) = lv2_atom_tuple_next(iter))
/** Like LV2_ATOM_TUPLE_FOREACH but for a headerless tuple body. */
#define LV2_ATOM_TUPLE_BODY_FOREACH(body, size, iter) \
- for (LV2_Atom * iter = (LV2_Atom*)(body); \
+ for (LV2_Atom* iter = (LV2_Atom*)(body); \
!lv2_atom_tuple_is_end(body, size, (iter)); \
(iter) = lv2_atom_tuple_next(iter))
@@ -249,7 +251,7 @@ static inline LV2_Atom_Property_Body*
lv2_atom_object_next(const LV2_Atom_Property_Body* i)
{
const LV2_Atom* const value =
- (const LV2_Atom*)((const uint8_t*)i + 2 * sizeof(uint32_t));
+ (const LV2_Atom*)((const uint8_t*)i + (2 * sizeof(uint32_t)));
return (LV2_Atom_Property_Body*)((const uint8_t*)i +
lv2_atom_pad_size(
(uint32_t)sizeof(LV2_Atom_Property_Body) +
@@ -270,15 +272,15 @@ lv2_atom_object_next(const LV2_Atom_Property_Body* i)
}
@endcode
*/
-#define LV2_ATOM_OBJECT_FOREACH(obj, iter) \
- for (LV2_Atom_Property_Body * iter = lv2_atom_object_begin(&(obj)->body); \
- !lv2_atom_object_is_end(&(obj)->body, (obj)->atom.size, (iter)); \
+#define LV2_ATOM_OBJECT_FOREACH(obj, iter) \
+ for (LV2_Atom_Property_Body* iter = lv2_atom_object_begin(&(obj)->body); \
+ !lv2_atom_object_is_end(&(obj)->body, (obj)->atom.size, (iter)); \
(iter) = lv2_atom_object_next(iter))
/** Like LV2_ATOM_OBJECT_FOREACH but for a headerless object body. */
-#define LV2_ATOM_OBJECT_BODY_FOREACH(body, size, iter) \
- for (LV2_Atom_Property_Body * iter = lv2_atom_object_begin(body); \
- !lv2_atom_object_is_end(body, size, (iter)); \
+#define LV2_ATOM_OBJECT_BODY_FOREACH(body, size, iter) \
+ for (LV2_Atom_Property_Body* iter = lv2_atom_object_begin(body); \
+ !lv2_atom_object_is_end(body, size, (iter)); \
(iter) = lv2_atom_object_next(iter))
/**
@@ -357,7 +359,7 @@ lv2_atom_object_body_get(uint32_t size, const LV2_Atom_Object_Body* body, ...)
int n_queries = 0;
/* Count number of keys so we can short-circuit when done */
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, body);
for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) {
if (!va_arg(args, const LV2_Atom**)) {
@@ -370,7 +372,7 @@ lv2_atom_object_body_get(uint32_t size, const LV2_Atom_Object_Body* body, ...)
LV2_ATOM_OBJECT_BODY_FOREACH (body, size, prop) {
va_start(args, body);
for (int i = 0; i < n_queries; ++i) {
- uint32_t qkey = va_arg(args, uint32_t);
+ const uint32_t qkey = va_arg(args, uint32_t);
const LV2_Atom** qval = va_arg(args, const LV2_Atom**);
if (qkey == prop->key && !*qval) {
*qval = &prop->value;
@@ -412,7 +414,7 @@ lv2_atom_object_get(const LV2_Atom_Object* object, ...)
int n_queries = 0;
/* Count number of keys so we can short-circuit when done */
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, object);
for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) {
if (!va_arg(args, const LV2_Atom**)) {
@@ -425,7 +427,7 @@ lv2_atom_object_get(const LV2_Atom_Object* object, ...)
LV2_ATOM_OBJECT_FOREACH (object, prop) {
va_start(args, object);
for (int i = 0; i < n_queries; ++i) {
- uint32_t qkey = va_arg(args, uint32_t);
+ const uint32_t qkey = va_arg(args, uint32_t);
const LV2_Atom** qval = va_arg(args, const LV2_Atom**);
if (qkey == prop->key && !*qval) {
*qval = &prop->value;
@@ -468,7 +470,7 @@ lv2_atom_object_get_typed(const LV2_Atom_Object* object, ...)
int n_queries = 0;
/* Count number of keys so we can short-circuit when done */
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, object);
for (n_queries = 0; va_arg(args, uint32_t); ++n_queries) {
if (!va_arg(args, const LV2_Atom**) || !va_arg(args, uint32_t)) {
@@ -502,9 +504,11 @@ lv2_atom_object_get_typed(const LV2_Atom_Object* object, ...)
} /* extern "C" */
#endif
+// NOLINTEND(bugprone-macro-parentheses)
+
/**
@}
@}
*/
-#endif /* LV2_ATOM_UTIL_H */
+#endif // LV2_ATOM_UTIL_H
diff --git a/include/lv2/buf-size/buf-size.h b/include/lv2/buf-size/buf-size.h
index 17be7bc..c1a00e1 100644
--- a/include/lv2/buf-size/buf-size.h
+++ b/include/lv2/buf-size/buf-size.h
@@ -1,8 +1,8 @@
// Copyright 2007-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_BUF_SIZE_H
-#define LV2_BUF_SIZE_H
+#ifndef LV2_BUF_SIZE_BUF_SIZE_H
+#define LV2_BUF_SIZE_BUF_SIZE_H
/**
@defgroup buf-size Buffer Size
@@ -35,4 +35,4 @@
@}
*/
-#endif /* LV2_BUF_SIZE_H */
+#endif // LV2_BUF_SIZE_BUF_SIZE_H
diff --git a/include/lv2/core/attributes.h b/include/lv2/core/attributes.h
index ab46931..2db876f 100644
--- a/include/lv2/core/attributes.h
+++ b/include/lv2/core/attributes.h
@@ -43,4 +43,4 @@
@}
*/
-#endif /* LV2_CORE_ATTRIBUTES_H */
+#endif // LV2_CORE_ATTRIBUTES_H
diff --git a/include/lv2/core/lv2.h b/include/lv2/core/lv2.h
index 06adea0..e4b90fd 100644
--- a/include/lv2/core/lv2.h
+++ b/include/lv2/core/lv2.h
@@ -3,8 +3,8 @@
// Copyright 2000-2002 Richard W.E. Furse, Paul Barton-Davis, Stefan Westerfeld.
// SPDX-License-Identifier: ISC
-#ifndef LV2_H_INCLUDED
-#define LV2_H_INCLUDED
+#ifndef LV2_CORE_LV2_H
+#define LV2_CORE_LV2_H
/**
@defgroup lv2 LV2
@@ -36,6 +36,7 @@
#define LV2_CORE__AnalyserPlugin LV2_CORE_PREFIX "AnalyserPlugin" ///< http://lv2plug.in/ns/lv2core#AnalyserPlugin
#define LV2_CORE__AudioPort LV2_CORE_PREFIX "AudioPort" ///< http://lv2plug.in/ns/lv2core#AudioPort
#define LV2_CORE__BandpassPlugin LV2_CORE_PREFIX "BandpassPlugin" ///< http://lv2plug.in/ns/lv2core#BandpassPlugin
+#define LV2_CORE__BandstopPlugin LV2_CORE_PREFIX "BandstopPlugin" ///< http://lv2plug.in/ns/lv2core#BandstopPlugin
#define LV2_CORE__CVPort LV2_CORE_PREFIX "CVPort" ///< http://lv2plug.in/ns/lv2core#CVPort
#define LV2_CORE__ChorusPlugin LV2_CORE_PREFIX "ChorusPlugin" ///< http://lv2plug.in/ns/lv2core#ChorusPlugin
#define LV2_CORE__CombPlugin LV2_CORE_PREFIX "CombPlugin" ///< http://lv2plug.in/ns/lv2core#CombPlugin
@@ -99,6 +100,7 @@
#define LV2_CORE__index LV2_CORE_PREFIX "index" ///< http://lv2plug.in/ns/lv2core#index
#define LV2_CORE__integer LV2_CORE_PREFIX "integer" ///< http://lv2plug.in/ns/lv2core#integer
#define LV2_CORE__isLive LV2_CORE_PREFIX "isLive" ///< http://lv2plug.in/ns/lv2core#isLive
+#define LV2_CORE__isSideChain LV2_CORE_PREFIX "isSideChain" ///< http://lv2plug.in/ns/lv2core#isSideChain
#define LV2_CORE__latency LV2_CORE_PREFIX "latency" ///< http://lv2plug.in/ns/lv2core#latency
#define LV2_CORE__maximum LV2_CORE_PREFIX "maximum" ///< http://lv2plug.in/ns/lv2core#maximum
#define LV2_CORE__microVersion LV2_CORE_PREFIX "microVersion" ///< http://lv2plug.in/ns/lv2core#microVersion
@@ -351,11 +353,13 @@ typedef struct LV2_Descriptor {
Put this (LV2_SYMBOL_EXPORT) before any functions that are to be loaded
by the host as a symbol from the dynamic library.
*/
-#ifdef _WIN32
-# define LV2_SYMBOL_EXPORT LV2_SYMBOL_EXTERN __declspec(dllexport)
-#else
-# define LV2_SYMBOL_EXPORT \
- LV2_SYMBOL_EXTERN __attribute__((visibility("default")))
+#ifndef LV2_SYMBOL_EXPORT
+# ifdef _WIN32
+# define LV2_SYMBOL_EXPORT LV2_SYMBOL_EXTERN __declspec(dllexport)
+# else
+# define LV2_SYMBOL_EXPORT \
+ LV2_SYMBOL_EXTERN __attribute__((visibility("default")))
+# endif
#endif
/**
@@ -381,8 +385,7 @@ typedef struct LV2_Descriptor {
Note that `index` has no meaning, hosts MUST NOT depend on it remaining
consistent between loads of the plugin library.
*/
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index);
/**
@@ -447,8 +450,7 @@ typedef struct {
be destroyed (using LV2_Lib_Descriptor::cleanup()) until all plugins loaded
from that library have been destroyed.
*/
-LV2_SYMBOL_EXPORT
-const LV2_Lib_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Lib_Descriptor*
lv2_lib_descriptor(const char* bundle_path, const LV2_Feature* const* features);
/**
@@ -467,4 +469,4 @@ typedef const LV2_Lib_Descriptor* (*LV2_Lib_Descriptor_Function)(
@}
*/
-#endif /* LV2_H_INCLUDED */
+#endif // LV2_CORE_LV2_H
diff --git a/include/lv2/core/lv2_util.h b/include/lv2/core/lv2_util.h
index 8cd2872..82c5e1e 100644
--- a/include/lv2/core/lv2_util.h
+++ b/include/lv2/core/lv2_util.h
@@ -1,13 +1,16 @@
// Copyright 2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
+#ifndef LV2_CORE_LV2_UTIL_H
+#define LV2_CORE_LV2_UTIL_H
+
/**
- @defgroup util Utilities
+ @defgroup lv2_util Utilities
@ingroup lv2core
@{
*/
-#include "lv2/core/lv2.h"
+#include <lv2/core/lv2.h>
#include <stdarg.h>
#include <stdbool.h>
@@ -62,13 +65,13 @@ lv2_features_data(const LV2_Feature* const* features, const char* const uri)
static inline const char*
lv2_features_query(const LV2_Feature* const* features, ...)
{
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, features);
const char* uri = NULL;
while ((uri = va_arg(args, const char*))) {
- void** data = va_arg(args, void**);
- bool required = (bool)va_arg(args, int);
+ void** data = va_arg(args, void**);
+ const bool required = (bool)va_arg(args, int);
*data = lv2_features_data(features, uri);
if (required && !*data) {
@@ -88,3 +91,5 @@ lv2_features_query(const LV2_Feature* const* features, ...)
/**
@}
*/
+
+#endif // LV2_CORE_LV2_UTIL_H
diff --git a/include/lv2/data-access/data-access.h b/include/lv2/data-access/data-access.h
index 2809d93..4586273 100644
--- a/include/lv2/data-access/data-access.h
+++ b/include/lv2/data-access/data-access.h
@@ -1,8 +1,8 @@
// Copyright 2008-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_DATA_ACCESS_H
-#define LV2_DATA_ACCESS_H
+#ifndef LV2_DATA_ACCESS_DATA_ACCESS_H
+#define LV2_DATA_ACCESS_DATA_ACCESS_H
/**
@defgroup data-access Data Access
@@ -57,4 +57,4 @@ typedef struct {
@}
*/
-#endif /* LV2_DATA_ACCESS_H */
+#endif // LV2_DATA_ACCESS_DATA_ACCESS_H
diff --git a/include/lv2/dynmanifest/dynmanifest.h b/include/lv2/dynmanifest/dynmanifest.h
index d67c750..7a6854d 100644
--- a/include/lv2/dynmanifest/dynmanifest.h
+++ b/include/lv2/dynmanifest/dynmanifest.h
@@ -1,8 +1,8 @@
// Copyright 2008-2011 Stefano D'Angelo <zanga.mail@gmail.com>
// SPDX-License-Identifier: ISC
-#ifndef LV2_DYN_MANIFEST_H_INCLUDED
-#define LV2_DYN_MANIFEST_H_INCLUDED
+#ifndef LV2_DYNMANIFEST_DYNMANIFEST_H
+#define LV2_DYNMANIFEST_DYNMANIFEST_H
/**
@defgroup dynmanifest Dynamic Manifest
@@ -15,7 +15,7 @@
@{
*/
-#include "lv2/core/lv2.h"
+#include <lv2/core/lv2.h>
#include <stdio.h>
@@ -56,7 +56,7 @@ typedef void* LV2_Dyn_Manifest_Handle;
evaluate the result of the operation by examining the returned value and
MUST NOT try to interpret the value of handle.
*/
-int
+LV2_SYMBOL_EXPORT int
lv2_dyn_manifest_open(LV2_Dyn_Manifest_Handle* handle,
const LV2_Feature* const* features);
@@ -83,7 +83,7 @@ lv2_dyn_manifest_open(LV2_Dyn_Manifest_Handle* handle,
@return 0 on success, otherwise a non-zero error code.
*/
-int
+LV2_SYMBOL_EXPORT int
lv2_dyn_manifest_get_subjects(LV2_Dyn_Manifest_Handle handle, FILE* fp);
/**
@@ -116,7 +116,7 @@ lv2_dyn_manifest_get_subjects(LV2_Dyn_Manifest_Handle handle, FILE* fp);
@return 0 on success, otherwise a non-zero error code.
*/
-int
+LV2_SYMBOL_EXPORT int
lv2_dyn_manifest_get_data(LV2_Dyn_Manifest_Handle handle,
FILE* fp,
const char* uri);
@@ -132,7 +132,7 @@ lv2_dyn_manifest_get_data(LV2_Dyn_Manifest_Handle handle,
@param handle Dynamic manifest generator handle.
*/
-void
+LV2_SYMBOL_EXPORT void
lv2_dyn_manifest_close(LV2_Dyn_Manifest_Handle handle);
#ifdef __cplusplus
@@ -143,4 +143,4 @@ lv2_dyn_manifest_close(LV2_Dyn_Manifest_Handle handle);
@}
*/
-#endif /* LV2_DYN_MANIFEST_H_INCLUDED */
+#endif // LV2_DYNMANIFEST_DYNMANIFEST_H
diff --git a/include/lv2/event/event-helpers.h b/include/lv2/event/event-helpers.h
index 0bf352f..de386ca 100644
--- a/include/lv2/event/event-helpers.h
+++ b/include/lv2/event/event-helpers.h
@@ -1,16 +1,16 @@
// Copyright 2008-2015 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_EVENT_HELPERS_H
-#define LV2_EVENT_HELPERS_H
+#ifndef LV2_EVENT_EVENT_HELPERS_H
+#define LV2_EVENT_EVENT_HELPERS_H
/**
@file event-helpers.h Helper functions for the LV2 Event extension
<http://lv2plug.in/ns/ext/event>.
*/
-#include "lv2/core/attributes.h"
-#include "lv2/event/event.h"
+#include <lv2/core/attributes.h>
+#include <lv2/event/event.h>
#include <stdbool.h>
#include <stdint.h>
@@ -107,7 +107,8 @@ lv2_event_increment(LV2_Event_Iterator* iter)
return false;
}
- LV2_Event* const ev = (LV2_Event*)(iter->buf->data + iter->offset);
+ const LV2_Event* const ev =
+ (const LV2_Event*)(iter->buf->data + iter->offset);
iter->offset +=
lv2_event_pad_size((uint16_t)((uint16_t)sizeof(LV2_Event) + ev->size));
@@ -239,4 +240,4 @@ LV2_RESTORE_WARNINGS
} /* extern "C" */
#endif
-#endif /* LV2_EVENT_HELPERS_H */
+#endif // LV2_EVENT_EVENT_HELPERS_H
diff --git a/include/lv2/event/event.h b/include/lv2/event/event.h
index b880de1..42ba54f 100644
--- a/include/lv2/event/event.h
+++ b/include/lv2/event/event.h
@@ -2,8 +2,8 @@
// Copyright 2006-2007 Lars Luthman <lars.luthman@gmail.com>
// SPDX-License-Identifier: ISC
-#ifndef LV2_EVENT_H
-#define LV2_EVENT_H
+#ifndef LV2_EVENT_EVENT_H
+#define LV2_EVENT_EVENT_H
/**
@defgroup event Event
@@ -36,7 +36,7 @@
#define LV2_EVENT_AUDIO_STAMP 0 ///< Special timestamp type for audio frames
-#include "lv2/core/attributes.h"
+#include <lv2/core/attributes.h>
#include <stdint.h>
@@ -51,8 +51,7 @@ LV2_DISABLE_DEPRECATION_WARNINGS
Equal to 2^12 * 5 * 7 * 9 * 11 * 13 * 17, which is evenly divisible
by all integers from 1 through 18 inclusive, and powers of 2 up to 2^12.
*/
-LV2_DEPRECATED
-static const uint32_t LV2_EVENT_PPQN = 3136573440U;
+LV2_DEPRECATED static const uint32_t LV2_EVENT_PPQN = 3136573440U;
/**
An LV2 event (header only).
@@ -67,8 +66,7 @@ static const uint32_t LV2_EVENT_PPQN = 3136573440U;
memcpy(ev_copy, ev, sizeof(LV2_Event) + ev->size); (or equivalent)
*/
-LV2_DEPRECATED
-typedef struct {
+LV2_DEPRECATED typedef struct {
/**
The frames portion of timestamp. The units used here can optionally be
set for a port (with the lv2ev:timeUnits property), otherwise this is
@@ -127,8 +125,7 @@ typedef struct {
| | | | | | | | | | | | | | | | | | | | | | | | |
|FRAMES |SUBFRMS|TYP|LEN|DATA..DATA..PAD|FRAMES | ...
*/
-LV2_DEPRECATED
-typedef struct {
+LV2_DEPRECATED typedef struct {
/**
The contents of the event buffer. This may or may not reside in the
same block of memory as this header, plugins must not assume either.
@@ -210,8 +207,7 @@ typedef struct {
/**
Opaque pointer to host data.
*/
-LV2_DEPRECATED
-typedef void* LV2_Event_Callback_Data;
+LV2_DEPRECATED typedef void* LV2_Event_Callback_Data;
/**
Non-POD events feature.
@@ -221,8 +217,7 @@ typedef void* LV2_Event_Callback_Data;
and data pointed to an instance of this struct. Note this feature
is not mandatory to support the event extension.
*/
-LV2_DEPRECATED
-typedef struct {
+LV2_DEPRECATED typedef struct {
/**
Opaque pointer to host data.
@@ -282,4 +277,4 @@ LV2_RESTORE_WARNINGS
@}
*/
-#endif /* LV2_EVENT_H */
+#endif // LV2_EVENT_EVENT_H
diff --git a/include/lv2/instance-access/instance-access.h b/include/lv2/instance-access/instance-access.h
index a87ecaf..70c2789 100644
--- a/include/lv2/instance-access/instance-access.h
+++ b/include/lv2/instance-access/instance-access.h
@@ -1,8 +1,8 @@
// Copyright 2008-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_INSTANCE_ACCESS_H
-#define LV2_INSTANCE_ACCESS_H
+#ifndef LV2_INSTANCE_ACCESS_INSTANCE_ACCESS_H
+#define LV2_INSTANCE_ACCESS_INSTANCE_ACCESS_H
/**
@defgroup instance-access Instance Access
@@ -25,4 +25,4 @@
@}
*/
-#endif /* LV2_INSTANCE_ACCESS_H */
+#endif // LV2_INSTANCE_ACCESS_INSTANCE_ACCESS_H
diff --git a/include/lv2/log/log.h b/include/lv2/log/log.h
index cdaa6d3..2616ffe 100644
--- a/include/lv2/log/log.h
+++ b/include/lv2/log/log.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_LOG_H
-#define LV2_LOG_H
+#ifndef LV2_LOG_LOG_H
+#define LV2_LOG_LOG_H
/**
@defgroup log Log
@@ -29,7 +29,7 @@
// clang-format on
-#include "lv2/urid/urid.h"
+#include <lv2/urid/urid.h>
#include <stdarg.h>
@@ -97,4 +97,4 @@ typedef struct {
@}
*/
-#endif /* LV2_LOG_H */
+#endif // LV2_LOG_LOG_H
diff --git a/include/lv2/log/logger.h b/include/lv2/log/logger.h
index b7d2856..83e2132 100644
--- a/include/lv2/log/logger.h
+++ b/include/lv2/log/logger.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_ATOM_LOGGER_H
-#define LV2_ATOM_LOGGER_H
+#ifndef LV2_LOG_LOGGER_H
+#define LV2_LOG_LOGGER_H
/**
@defgroup logger Logger
@@ -15,8 +15,8 @@
@{
*/
-#include "lv2/log/log.h"
-#include "lv2/urid/urid.h"
+#include <lv2/log/log.h>
+#include <lv2/urid/urid.h>
#include <stdarg.h>
#include <stdio.h>
@@ -90,7 +90,7 @@ LV2_LOG_FUNC(2, 3)
static inline int
lv2_log_error(LV2_Log_Logger* logger, const char* fmt, ...)
{
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, fmt);
const int ret = lv2_log_vprintf(logger, logger->Error, fmt, args);
va_end(args);
@@ -102,7 +102,7 @@ LV2_LOG_FUNC(2, 3)
static inline int
lv2_log_note(LV2_Log_Logger* logger, const char* fmt, ...)
{
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, fmt);
const int ret = lv2_log_vprintf(logger, logger->Note, fmt, args);
va_end(args);
@@ -114,7 +114,7 @@ LV2_LOG_FUNC(2, 3)
static inline int
lv2_log_trace(LV2_Log_Logger* logger, const char* fmt, ...)
{
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, fmt);
const int ret = lv2_log_vprintf(logger, logger->Trace, fmt, args);
va_end(args);
@@ -126,7 +126,7 @@ LV2_LOG_FUNC(2, 3)
static inline int
lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...)
{
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, fmt);
const int ret = lv2_log_vprintf(logger, logger->Warning, fmt, args);
va_end(args);
@@ -141,4 +141,4 @@ lv2_log_warning(LV2_Log_Logger* logger, const char* fmt, ...)
@}
*/
-#endif /* LV2_LOG_LOGGER_H */
+#endif // LV2_LOG_LOGGER_H
diff --git a/include/lv2/midi/midi.h b/include/lv2/midi/midi.h
index cef7bc8..2a687fb 100644
--- a/include/lv2/midi/midi.h
+++ b/include/lv2/midi/midi.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_MIDI_H
-#define LV2_MIDI_H
+#ifndef LV2_MIDI_MIDI_H
+#define LV2_MIDI_MIDI_H
/**
@defgroup midi MIDI
@@ -232,4 +232,4 @@ lv2_midi_message_type(const uint8_t* msg)
@}
*/
-#endif /* LV2_MIDI_H */
+#endif // LV2_MIDI_MIDI_H
diff --git a/include/lv2/morph/morph.h b/include/lv2/morph/morph.h
index e60a7d5..88bfe81 100644
--- a/include/lv2/morph/morph.h
+++ b/include/lv2/morph/morph.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_MORPH_H
-#define LV2_MORPH_H
+#ifndef LV2_MORPH_MORPH_H
+#define LV2_MORPH_MORPH_H
/**
@defgroup morph Morph
@@ -32,4 +32,4 @@
@}
*/
-#endif /* LV2_MORPH_H */
+#endif // LV2_MORPH_MORPH_H
diff --git a/include/lv2/options/options.h b/include/lv2/options/options.h
index 48f7bfb..5dea9f3 100644
--- a/include/lv2/options/options.h
+++ b/include/lv2/options/options.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_OPTIONS_H
-#define LV2_OPTIONS_H
+#ifndef LV2_OPTIONS_OPTIONS_H
+#define LV2_OPTIONS_OPTIONS_H
/**
@defgroup options Options
@@ -15,8 +15,8 @@
@{
*/
-#include "lv2/core/lv2.h"
-#include "lv2/urid/urid.h"
+#include <lv2/core/lv2.h>
+#include <lv2/urid/urid.h>
#include <stdint.h>
@@ -133,4 +133,4 @@ typedef struct {
@}
*/
-#endif /* LV2_OPTIONS_H */
+#endif // LV2_OPTIONS_OPTIONS_H
diff --git a/include/lv2/parameters/parameters.h b/include/lv2/parameters/parameters.h
index 6c17a1c..b20c83e 100644
--- a/include/lv2/parameters/parameters.h
+++ b/include/lv2/parameters/parameters.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_PARAMETERS_H
-#define LV2_PARAMETERS_H
+#ifndef LV2_PARAMETERS_PARAMETERS_H
+#define LV2_PARAMETERS_PARAMETERS_H
/**
@defgroup parameters Parameters
@@ -52,4 +52,4 @@
@}
*/
-#endif /* LV2_PARAMETERS_H */
+#endif // LV2_PARAMETERS_PARAMETERS_H
diff --git a/include/lv2/patch/patch.h b/include/lv2/patch/patch.h
index 16b7889..99fd8e9 100644
--- a/include/lv2/patch/patch.h
+++ b/include/lv2/patch/patch.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_PATCH_H
-#define LV2_PATCH_H
+#ifndef LV2_PATCH_PATCH_H
+#define LV2_PATCH_PATCH_H
/**
@defgroup patch Patch
@@ -57,4 +57,4 @@
@}
*/
-#endif /* LV2_PATCH_H */
+#endif // LV2_PATCH_PATCH_H
diff --git a/include/lv2/port-groups/port-groups.h b/include/lv2/port-groups/port-groups.h
index 303890a..ff00533 100644
--- a/include/lv2/port-groups/port-groups.h
+++ b/include/lv2/port-groups/port-groups.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_PORT_GROUPS_H
-#define LV2_PORT_GROUPS_H
+#ifndef LV2_PORT_GROUPS_PORT_GROUPS_H
+#define LV2_PORT_GROUPS_PORT_GROUPS_H
/**
@defgroup port-groups Port Groups
@@ -61,4 +61,4 @@
@}
*/
-#endif /* LV2_PORT_GROUPS_H */
+#endif // LV2_PORT_GROUPS_PORT_GROUPS_H
diff --git a/include/lv2/port-props/port-props.h b/include/lv2/port-props/port-props.h
index ff45140..6007f4b 100644
--- a/include/lv2/port-props/port-props.h
+++ b/include/lv2/port-props/port-props.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_PORT_PROPS_H
-#define LV2_PORT_PROPS_H
+#ifndef LV2_PORT_PROPS_PORT_PROPS_H
+#define LV2_PORT_PROPS_PORT_PROPS_H
/**
@defgroup port-props Port Properties
@@ -37,4 +37,4 @@
@}
*/
-#endif /* LV2_PORT_PROPS_H */
+#endif // LV2_PORT_PROPS_PORT_PROPS_H
diff --git a/include/lv2/presets/presets.h b/include/lv2/presets/presets.h
index 7100605..ecd23a2 100644
--- a/include/lv2/presets/presets.h
+++ b/include/lv2/presets/presets.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_PRESETS_H
-#define LV2_PRESETS_H
+#ifndef LV2_PRESETS_PRESETS_H
+#define LV2_PRESETS_PRESETS_H
/**
@defgroup presets Presets
@@ -32,4 +32,4 @@
@}
*/
-#endif /* LV2_PRESETS_H */
+#endif // LV2_PRESETS_PRESETS_H
diff --git a/include/lv2/resize-port/resize-port.h b/include/lv2/resize-port/resize-port.h
index cd4828e..7593a6d 100644
--- a/include/lv2/resize-port/resize-port.h
+++ b/include/lv2/resize-port/resize-port.h
@@ -1,8 +1,8 @@
// Copyright 2007-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_RESIZE_PORT_H
-#define LV2_RESIZE_PORT_H
+#ifndef LV2_RESIZE_PORT_RESIZE_PORT_H
+#define LV2_RESIZE_PORT_RESIZE_PORT_H
/**
@defgroup resize-port Resize Port
@@ -73,4 +73,4 @@ typedef struct {
@}
*/
-#endif /* LV2_RESIZE_PORT_H */
+#endif // LV2_RESIZE_PORT_RESIZE_PORT_H
diff --git a/include/lv2/state/state.h b/include/lv2/state/state.h
index 9c5d9d8..c1a357a 100644
--- a/include/lv2/state/state.h
+++ b/include/lv2/state/state.h
@@ -2,8 +2,8 @@
// Copyright 2010 Leonard Ritter <paniq@paniq.org>
// SPDX-License-Identifier: ISC
-#ifndef LV2_STATE_H
-#define LV2_STATE_H
+#ifndef LV2_STATE_STATE_H
+#define LV2_STATE_STATE_H
/**
@defgroup state State
@@ -16,7 +16,7 @@
@{
*/
-#include "lv2/core/lv2.h"
+#include <lv2/core/lv2.h>
#include <stddef.h>
#include <stdint.h>
@@ -376,4 +376,4 @@ typedef struct {
@}
*/
-#endif /* LV2_STATE_H */
+#endif // LV2_STATE_STATE_H
diff --git a/include/lv2/time/time.h b/include/lv2/time/time.h
index 83408c9..2d81dc7 100644
--- a/include/lv2/time/time.h
+++ b/include/lv2/time/time.h
@@ -1,8 +1,8 @@
// Copyright 2011-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_TIME_H
-#define LV2_TIME_H
+#ifndef LV2_TIME_TIME_H
+#define LV2_TIME_TIME_H
/**
@defgroup time Time
@@ -43,4 +43,4 @@
@}
*/
-#endif /* LV2_TIME_H */
+#endif // LV2_TIME_TIME_H
diff --git a/include/lv2/ui/ui.h b/include/lv2/ui/ui.h
index 5ef75a3..408b570 100644
--- a/include/lv2/ui/ui.h
+++ b/include/lv2/ui/ui.h
@@ -2,8 +2,8 @@
// Copyright 2006-2011 Lars Luthman <lars.luthman@gmail.com>
// SPDX-License-Identifier: ISC
-#ifndef LV2_UI_H
-#define LV2_UI_H
+#ifndef LV2_UI_UI_H
+#define LV2_UI_UI_H
/**
@defgroup ui User Interfaces
@@ -16,8 +16,8 @@
@{
*/
-#include "lv2/core/lv2.h"
-#include "lv2/urid/urid.h"
+#include <lv2/core/lv2.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -29,11 +29,13 @@
#define LV2_UI__CocoaUI LV2_UI_PREFIX "CocoaUI" ///< http://lv2plug.in/ns/extensions/ui#CocoaUI
#define LV2_UI__Gtk3UI LV2_UI_PREFIX "Gtk3UI" ///< http://lv2plug.in/ns/extensions/ui#Gtk3UI
+#define LV2_UI__Gtk4UI LV2_UI_PREFIX "Gtk4UI" ///< http://lv2plug.in/ns/extensions/ui#Gtk4UI
#define LV2_UI__GtkUI LV2_UI_PREFIX "GtkUI" ///< http://lv2plug.in/ns/extensions/ui#GtkUI
#define LV2_UI__PortNotification LV2_UI_PREFIX "PortNotification" ///< http://lv2plug.in/ns/extensions/ui#PortNotification
#define LV2_UI__PortProtocol LV2_UI_PREFIX "PortProtocol" ///< http://lv2plug.in/ns/extensions/ui#PortProtocol
#define LV2_UI__Qt4UI LV2_UI_PREFIX "Qt4UI" ///< http://lv2plug.in/ns/extensions/ui#Qt4UI
#define LV2_UI__Qt5UI LV2_UI_PREFIX "Qt5UI" ///< http://lv2plug.in/ns/extensions/ui#Qt5UI
+#define LV2_UI__Qt6UI LV2_UI_PREFIX "Qt6UI" ///< http://lv2plug.in/ns/extensions/ui#Qt6UI
#define LV2_UI__UI LV2_UI_PREFIX "UI" ///< http://lv2plug.in/ns/extensions/ui#UI
#define LV2_UI__WindowsUI LV2_UI_PREFIX "WindowsUI" ///< http://lv2plug.in/ns/extensions/ui#WindowsUI
#define LV2_UI__X11UI LV2_UI_PREFIX "X11UI" ///< http://lv2plug.in/ns/extensions/ui#X11UI
@@ -67,7 +69,7 @@
/**
The index returned by LV2UI_Port_Map::port_index() for unknown ports.
*/
-#define LV2UI_INVALID_PORT_INDEX ((uint32_t)-1)
+#define LV2UI_INVALID_PORT_INDEX ((uint32_t)(-1))
#ifdef __cplusplus
extern "C" {
@@ -509,8 +511,7 @@ typedef struct {
This is the entry point to a UI library, which works in the same way as
lv2_descriptor() but for UIs rather than plugins.
*/
-LV2_SYMBOL_EXPORT
-const LV2UI_Descriptor*
+LV2_SYMBOL_EXPORT const LV2UI_Descriptor*
lv2ui_descriptor(uint32_t index);
/**
@@ -526,4 +527,4 @@ typedef const LV2UI_Descriptor* (*LV2UI_DescriptorFunction)(uint32_t index);
@}
*/
-#endif /* LV2_UI_H */
+#endif // LV2_UI_UI_H
diff --git a/include/lv2/units/units.h b/include/lv2/units/units.h
index 0b8d416..a6ac4c5 100644
--- a/include/lv2/units/units.h
+++ b/include/lv2/units/units.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_UNITS_H
-#define LV2_UNITS_H
+#ifndef LV2_UNITS_UNITS_H
+#define LV2_UNITS_UNITS_H
/**
@defgroup units Units
@@ -59,4 +59,4 @@
@}
*/
-#endif /* LV2_UNITS_H */
+#endif // LV2_UNITS_UNITS_H
diff --git a/include/lv2/uri-map/uri-map.h b/include/lv2/uri-map/uri-map.h
index 0c683d0..90bc9bd 100644
--- a/include/lv2/uri-map/uri-map.h
+++ b/include/lv2/uri-map/uri-map.h
@@ -1,8 +1,8 @@
// Copyright 2008-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_URI_MAP_H
-#define LV2_URI_MAP_H
+#ifndef LV2_URI_MAP_URI_MAP_H
+#define LV2_URI_MAP_URI_MAP_H
/**
@defgroup uri-map URI Map
@@ -30,7 +30,7 @@
// clang-format on
-#include "lv2/core/attributes.h"
+#include <lv2/core/attributes.h>
#include <stdint.h>
@@ -43,8 +43,7 @@ LV2_DISABLE_DEPRECATION_WARNINGS
/**
Opaque pointer to host data.
*/
-LV2_DEPRECATED
-typedef void* LV2_URI_Map_Callback_Data;
+LV2_DEPRECATED typedef void* LV2_URI_Map_Callback_Data;
/**
URI Map Feature.
@@ -53,8 +52,7 @@ typedef void* LV2_URI_Map_Callback_Data;
plugin's instantiate method with URI "http://lv2plug.in/ns/ext/uri-map"
and data pointed to an instance of this struct.
*/
-LV2_DEPRECATED
-typedef struct {
+LV2_DEPRECATED typedef struct {
/**
Opaque pointer to host data.
@@ -105,4 +103,4 @@ LV2_RESTORE_WARNINGS
@}
*/
-#endif /* LV2_URI_MAP_H */
+#endif // LV2_URI_MAP_URI_MAP_H
diff --git a/include/lv2/urid/urid.h b/include/lv2/urid/urid.h
index 5890307..8dc4332 100644
--- a/include/lv2/urid/urid.h
+++ b/include/lv2/urid/urid.h
@@ -2,8 +2,8 @@
// Copyright 2011 Gabriel M. Beddingfield <gabrbedd@gmail.com>
// SPDX-License-Identifier: ISC
-#ifndef LV2_URID_H
-#define LV2_URID_H
+#ifndef LV2_URID_URID_H
+#define LV2_URID_URID_H
/**
@defgroup urid URID
@@ -124,4 +124,4 @@ typedef struct {
@}
*/
-#endif /* LV2_URID_H */
+#endif // LV2_URID_URID_H
diff --git a/include/lv2/worker/worker.h b/include/lv2/worker/worker.h
index 0b0e792..2cfd052 100644
--- a/include/lv2/worker/worker.h
+++ b/include/lv2/worker/worker.h
@@ -1,8 +1,8 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#ifndef LV2_WORKER_H
-#define LV2_WORKER_H
+#ifndef LV2_WORKER_WORKER_H
+#define LV2_WORKER_WORKER_H
/**
@defgroup worker Worker
@@ -15,7 +15,7 @@
@{
*/
-#include "lv2/core/lv2.h"
+#include <lv2/core/lv2.h>
#include <stdint.h>
@@ -167,4 +167,4 @@ typedef struct {
@}
*/
-#endif /* LV2_WORKER_H */
+#endif // LV2_WORKER_WORKER_H
diff --git a/lv2/atom.lv2/atom.meta.ttl b/lv2/atom.lv2/atom.meta.ttl
index 81c3482..e2902c5 100644
--- a/lv2/atom.lv2/atom.meta.ttl
+++ b/lv2/atom.lv2/atom.meta.ttl
@@ -447,4 +447,3 @@ This protocol applies to atom ports. The host must transfer the complete atom
contained in the port, including header.
"""^^lv2:Markdown .
-
diff --git a/lv2/atom.lv2/atom.ttl b/lv2/atom.lv2/atom.ttl
index bdeaebf..064d274 100644
--- a/lv2/atom.lv2/atom.ttl
+++ b/lv2/atom.lv2/atom.ttl
@@ -161,7 +161,7 @@ atom:Resource
rdfs:subClassOf atom:Object ;
rdfs:label "Resource" ;
rdfs:comment "A named collection of properties with a URI." ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
atom:cType "LV2_Atom_Object" .
atom:Blank
@@ -169,7 +169,7 @@ atom:Blank
rdfs:subClassOf atom:Object ;
rdfs:label "Blank" ;
rdfs:comment "An anonymous collection of properties without a URI." ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
atom:cType "LV2_Atom_Object" .
atom:Sound
@@ -244,4 +244,3 @@ atom:atomTransfer
a ui:PortProtocol ;
rdfs:label "atom transfer" ;
rdfs:comment "A port protocol for transferring atoms." .
-
diff --git a/lv2/atom.lv2/manifest.ttl b/lv2/atom.lv2/manifest.ttl
index 3cb5134..8875a20 100644
--- a/lv2/atom.lv2/manifest.ttl
+++ b/lv2/atom.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 2 ;
lv2:microVersion 4 ;
rdfs:seeAlso <atom.ttl> .
-
diff --git a/lv2/buf-size.lv2/buf-size.meta.ttl b/lv2/buf-size.lv2/buf-size.meta.ttl
index ba08b29..dbce35b 100644
--- a/lv2/buf-size.lv2/buf-size.meta.ttl
+++ b/lv2/buf-size.lv2/buf-size.meta.ttl
@@ -120,4 +120,3 @@ This should be provided as an option by hosts that support event ports
auxiliary buffers large enough to copy the input.
"""^^lv2:Markdown .
-
diff --git a/lv2/buf-size.lv2/buf-size.ttl b/lv2/buf-size.lv2/buf-size.ttl
index 4f6bd52..be18fbe 100644
--- a/lv2/buf-size.lv2/buf-size.ttl
+++ b/lv2/buf-size.lv2/buf-size.ttl
@@ -65,4 +65,3 @@ bufsz:sequenceSize
rdfs:label "sequence size" ;
rdfs:comment "The maximum size of a sequence, in bytes." ;
rdfs:range xsd:nonNegativeInteger .
-
diff --git a/lv2/buf-size.lv2/manifest.ttl b/lv2/buf-size.lv2/manifest.ttl
index d242f97..b9cd1ec 100644
--- a/lv2/buf-size.lv2/manifest.ttl
+++ b/lv2/buf-size.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 4 ;
rdfs:seeAlso <buf-size.ttl> .
-
diff --git a/lv2/core.lv2/lv2core.meta.ttl b/lv2/core.lv2/lv2core.meta.ttl
index 9844b29..77f2c67 100644
--- a/lv2/core.lv2/lv2core.meta.ttl
+++ b/lv2/core.lv2/lv2core.meta.ttl
@@ -126,7 +126,7 @@ If the value has no explicit datatype, it is assumed to be a valid XHTML Basic
1.1 fragment suitable for use as the content of the `body` element of a page.
XHTML Basic is a W3C Recommendation which defines a simplified subset of XHTML
-intended to be reasonable to implement with limited resources, for exampe on
+intended to be reasonable to implement with limited resources, for example on
embedded devices. See [XHTML Basic, Section
3](http://www.w3.org/TR/xhtml-basic/#s_xhtmlmodules) for a list of valid tags.
@@ -702,4 +702,3 @@ but should not be considered a part of the main signal chain. Sidechain ports
SHOULD be lv2:connectionOptional, and may be ignored by hosts.
"""^^lv2:Markdown .
-
diff --git a/lv2/core.lv2/lv2core.ttl b/lv2/core.lv2/lv2core.ttl
index 7722cac..c7dcf50 100644
--- a/lv2/core.lv2/lv2core.ttl
+++ b/lv2/core.lv2/lv2core.ttl
@@ -17,7 +17,7 @@ lv2:Specification
owl:Class ;
rdfs:subClassOf doap:Project ;
rdfs:label "Specification" ;
- rdfs:comment "An LV2 specifiation." .
+ rdfs:comment "An LV2 specification." .
lv2:Markdown
a rdfs:Datatype ;
@@ -374,7 +374,7 @@ lv2:connectionOptional
lv2:reportsLatency
a lv2:PortProperty ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
rdfs:label "reports latency" ;
rdfs:comment "Control port value is the plugin latency in frames." .
@@ -524,6 +524,13 @@ lv2:BandpassPlugin
rdfs:label "Bandpass Filter Plugin" ;
rdfs:comment "A filter that attenuates frequencies outside of some band." .
+lv2:BandstopPlugin
+ a rdfs:Class ,
+ owl:Class ;
+ rdfs:subClassOf lv2:FilterPlugin ;
+ rdfs:label "Bandstop Filter Plugin" ;
+ rdfs:comment "A filter that attenuates frequencies inside of some band." .
+
lv2:HighpassPlugin
a rdfs:Class ,
owl:Class ;
@@ -670,4 +677,3 @@ lv2:MIDIPlugin
rdfs:subClassOf lv2:Plugin ;
rdfs:label "MIDI Plugin" ;
rdfs:comment "A plugin that primarily processes MIDI messages." .
-
diff --git a/lv2/core.lv2/manifest.ttl b/lv2/core.lv2/manifest.ttl
index 7f5e37e..0072346 100644
--- a/lv2/core.lv2/manifest.ttl
+++ b/lv2/core.lv2/manifest.ttl
@@ -4,12 +4,11 @@
<http://lv2plug.in/ns/lv2core>
a lv2:Specification ;
- lv2:minorVersion 18 ;
- lv2:microVersion 6 ;
+ lv2:minorVersion 19 ;
+ lv2:microVersion 0 ;
rdfs:seeAlso <lv2core.ttl> .
<http://lv2plug.in/ns/lv2>
a doap:Project ;
rdfs:seeAlso <meta.ttl> ,
<people.ttl> .
-
diff --git a/lv2/core.lv2/meta.ttl b/lv2/core.lv2/meta.ttl
index 75a13ac..014285c 100644
--- a/lv2/core.lv2/meta.ttl
+++ b/lv2/core.lv2/meta.ttl
@@ -32,4 +32,3 @@ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH R
meta:daste ,
meta:kfoltman ,
meta:paniq .
-
diff --git a/lv2/core.lv2/people.ttl b/lv2/core.lv2/people.ttl
index 52d0384..c735af6 100644
--- a/lv2/core.lv2/people.ttl
+++ b/lv2/core.lv2/people.ttl
@@ -48,4 +48,3 @@ meta:bmwiedemann
a foaf:Person ;
foaf:name "Bernhard M. Wiedemann" ;
foaf:mbox <bwiedemann@suse.de> .
-
diff --git a/lv2/data-access.lv2/data-access.meta.ttl b/lv2/data-access.lv2/data-access.meta.ttl
index 7d0e622..735bf0b 100644
--- a/lv2/data-access.lv2/data-access.meta.ttl
+++ b/lv2/data-access.lv2/data-access.meta.ttl
@@ -27,4 +27,3 @@ LV2_Descriptor::extension_data() with URI LV2_DATA_ACCESS_URI and data pointed
to an instance of LV2_Extension_Data_Feature.
"""^^lv2:Markdown .
-
diff --git a/lv2/data-access.lv2/data-access.ttl b/lv2/data-access.lv2/data-access.ttl
index b0dc6f4..b75cc81 100644
--- a/lv2/data-access.lv2/data-access.ttl
+++ b/lv2/data-access.lv2/data-access.ttl
@@ -7,4 +7,3 @@
rdfs:label "data access" ;
rdfs:comment "A feature that provides access to plugin extension data." ;
rdfs:seeAlso <data-access.meta.ttl> .
-
diff --git a/lv2/data-access.lv2/manifest.ttl b/lv2/data-access.lv2/manifest.ttl
index 9585a5e..54fcace 100644
--- a/lv2/data-access.lv2/manifest.ttl
+++ b/lv2/data-access.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 6 ;
rdfs:seeAlso <data-access.ttl> .
-
diff --git a/lv2/dynmanifest.lv2/dynmanifest.meta.ttl b/lv2/dynmanifest.lv2/dynmanifest.meta.ttl
index 5d365c6..9c2919d 100644
--- a/lv2/dynmanifest.lv2/dynmanifest.meta.ttl
+++ b/lv2/dynmanifest.lv2/dynmanifest.meta.ttl
@@ -86,4 +86,3 @@ All relative URIs in the generated data MUST be relative to the base path that
would be used to parse a normal LV2 manifest (the bundle path).
"""^^lv2:Markdown .
-
diff --git a/lv2/dynmanifest.lv2/dynmanifest.ttl b/lv2/dynmanifest.lv2/dynmanifest.ttl
index b46d694..12be4dc 100644
--- a/lv2/dynmanifest.lv2/dynmanifest.ttl
+++ b/lv2/dynmanifest.lv2/dynmanifest.ttl
@@ -21,4 +21,3 @@ dman:DynManifest
rdfs:comment "A DynManifest MUST have at least one lv2:binary."
] ;
rdfs:comment "Dynamic manifest for an LV2 binary." .
-
diff --git a/lv2/dynmanifest.lv2/manifest.ttl b/lv2/dynmanifest.lv2/manifest.ttl
index db27a73..2c072a3 100644
--- a/lv2/dynmanifest.lv2/manifest.ttl
+++ b/lv2/dynmanifest.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 6 ;
rdfs:seeAlso <dynmanifest.ttl> .
-
diff --git a/lv2/event.lv2/event.meta.ttl b/lv2/event.lv2/event.meta.ttl
index f573a15..4492d2b 100644
--- a/lv2/event.lv2/event.meta.ttl
+++ b/lv2/event.lv2/event.meta.ttl
@@ -157,4 +157,3 @@ their output type on an input port so the host can make more sense of the
plugin and provide a more sensible interface.
"""^^lv2:Markdown .
-
diff --git a/lv2/event.lv2/event.ttl b/lv2/event.lv2/event.ttl
index 2d871f6..ebcbd3a 100644
--- a/lv2/event.lv2/event.ttl
+++ b/lv2/event.lv2/event.ttl
@@ -82,4 +82,3 @@ ev:inheritsTimeStamp
rdfs:range lv2:Port ;
rdfs:label "inherits time stamp type" ;
rdfs:comment "Output port inherits time stamp types from an input port." .
-
diff --git a/lv2/event.lv2/manifest.ttl b/lv2/event.lv2/manifest.ttl
index 230fe73..15b095b 100644
--- a/lv2/event.lv2/manifest.ttl
+++ b/lv2/event.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 14 ;
rdfs:seeAlso <event.ttl> .
-
diff --git a/lv2/instance-access.lv2/instance-access.meta.ttl b/lv2/instance-access.lv2/instance-access.meta.ttl
index 8d33100..b9cdfc4 100644
--- a/lv2/instance-access.lv2/instance-access.meta.ttl
+++ b/lv2/instance-access.lv2/instance-access.meta.ttl
@@ -26,4 +26,3 @@ instantiate method with URI LV2_INSTANCE_ACCESS_URI and data pointed directly
to the LV2_Handle of the plugin instance.
"""^^lv2:Markdown .
-
diff --git a/lv2/instance-access.lv2/instance-access.ttl b/lv2/instance-access.lv2/instance-access.ttl
index 637f4e0..068ef4f 100644
--- a/lv2/instance-access.lv2/instance-access.ttl
+++ b/lv2/instance-access.lv2/instance-access.ttl
@@ -7,4 +7,3 @@
rdfs:label "instance access" ;
rdfs:comment "A feature that provides access to a plugin instance." ;
rdfs:seeAlso <instance-access.meta.ttl> .
-
diff --git a/lv2/instance-access.lv2/manifest.ttl b/lv2/instance-access.lv2/manifest.ttl
index e6c8810..3da863d 100644
--- a/lv2/instance-access.lv2/manifest.ttl
+++ b/lv2/instance-access.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 6 ;
rdfs:seeAlso <instance-access.ttl> .
-
diff --git a/lv2/log.lv2/log.meta.ttl b/lv2/log.lv2/log.meta.ttl
index 06d9f63..0c74e6c 100644
--- a/lv2/log.lv2/log.meta.ttl
+++ b/lv2/log.lv2/log.meta.ttl
@@ -81,4 +81,3 @@ the host must pass an LV2_Feature to LV2_Descriptor::instantiate() with URI
LV2_LOG__log and data pointed to an instance of LV2_Log_Log.
"""^^lv2:Markdown .
-
diff --git a/lv2/log.lv2/log.ttl b/lv2/log.lv2/log.ttl
index 0b334ed..10f0acc 100644
--- a/lv2/log.lv2/log.ttl
+++ b/lv2/log.lv2/log.ttl
@@ -45,4 +45,3 @@ log:log
a lv2:Feature ;
rdfs:label "log" ;
rdfs:comment "Logging feature." .
-
diff --git a/lv2/log.lv2/manifest.ttl b/lv2/log.lv2/manifest.ttl
index bcaeff3..f448ffe 100644
--- a/lv2/log.lv2/manifest.ttl
+++ b/lv2/log.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 2 ;
lv2:microVersion 4 ;
rdfs:seeAlso <log.ttl> .
-
diff --git a/lv2/midi.lv2/manifest.ttl b/lv2/midi.lv2/manifest.ttl
index f141936..7c9efcd 100644
--- a/lv2/midi.lv2/manifest.ttl
+++ b/lv2/midi.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 10 ;
rdfs:seeAlso <midi.ttl> .
-
diff --git a/lv2/midi.lv2/midi.meta.ttl b/lv2/midi.lv2/midi.meta.ttl
index b3dfd44..8afb944 100644
--- a/lv2/midi.lv2/midi.meta.ttl
+++ b/lv2/midi.lv2/midi.meta.ttl
@@ -70,4 +70,3 @@ midi:statusMask
This is a status byte with the lower nibble set to zero.
"""^^lv2:Markdown .
-
diff --git a/lv2/midi.lv2/midi.ttl b/lv2/midi.lv2/midi.ttl
index 4a0e8c9..5dfdbc7 100644
--- a/lv2/midi.lv2/midi.ttl
+++ b/lv2/midi.lv2/midi.ttl
@@ -362,4 +362,3 @@ midi:velocity
rdfs:label "velocity" ;
rdfs:range midi:HexByte ;
rdfs:comment "The velocity of a note message (0 to 127)." .
-
diff --git a/lv2/morph.lv2/manifest.ttl b/lv2/morph.lv2/manifest.ttl
index 7c85cfd..c63317b 100644
--- a/lv2/morph.lv2/manifest.ttl
+++ b/lv2/morph.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 0 ;
rdfs:seeAlso <morph.ttl> .
-
diff --git a/lv2/morph.lv2/morph.meta.ttl b/lv2/morph.lv2/morph.meta.ttl
index f161557..09945c0 100644
--- a/lv2/morph.lv2/morph.meta.ttl
+++ b/lv2/morph.lv2/morph.meta.ttl
@@ -75,4 +75,3 @@ The currently active type of the port. This is for dynamic use as an option
and SHOULD NOT be listed in the static plugin data.
"""^^lv2:Markdown .
-
diff --git a/lv2/morph.lv2/morph.ttl b/lv2/morph.lv2/morph.ttl
index 9b8ef51..cd21dd9 100644
--- a/lv2/morph.lv2/morph.ttl
+++ b/lv2/morph.lv2/morph.ttl
@@ -43,4 +43,3 @@ morph:currentType
rdfs:domain morph:MorphPort ;
rdfs:label "current type" ;
rdfs:comment "The currently active type of the port." .
-
diff --git a/lv2/options.lv2/manifest.ttl b/lv2/options.lv2/manifest.ttl
index 18db448..c54456c 100644
--- a/lv2/options.lv2/manifest.ttl
+++ b/lv2/options.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 4 ;
rdfs:seeAlso <options.ttl> .
-
diff --git a/lv2/options.lv2/options.meta.ttl b/lv2/options.lv2/options.meta.ttl
index 10ca296..33946f4 100644
--- a/lv2/options.lv2/options.meta.ttl
+++ b/lv2/options.lv2/options.meta.ttl
@@ -94,4 +94,3 @@ The host SHOULD provide a value for the specified option if one is known, or
provide the user an opportunity to specify one if possible.
"""^^lv2:Markdown .
-
diff --git a/lv2/options.lv2/options.ttl b/lv2/options.lv2/options.ttl
index 5f9fcc9..7233180 100644
--- a/lv2/options.lv2/options.ttl
+++ b/lv2/options.lv2/options.ttl
@@ -41,4 +41,3 @@ opts:supportedOption
rdfs:range rdf:Property ;
rdfs:label "supported option" ;
rdfs:comment "An option supported or by the instance." .
-
diff --git a/lv2/parameters.lv2/manifest.ttl b/lv2/parameters.lv2/manifest.ttl
index 57f5d2e..4889ae5 100644
--- a/lv2/parameters.lv2/manifest.ttl
+++ b/lv2/parameters.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 4 ;
rdfs:seeAlso <parameters.ttl> .
-
diff --git a/lv2/parameters.lv2/parameters.meta.ttl b/lv2/parameters.lv2/parameters.meta.ttl
index ffb3507..653f715 100644
--- a/lv2/parameters.lv2/parameters.meta.ttl
+++ b/lv2/parameters.lv2/parameters.meta.ttl
@@ -36,4 +36,3 @@ and wet percentages can be calculated from the following equations:
Typically, maximum value of 1 or 100 and minimum value of 0 should be used.
"""^^lv2:Markdown .
-
diff --git a/lv2/parameters.lv2/parameters.ttl b/lv2/parameters.lv2/parameters.ttl
index 9987812..2e2c5df 100644
--- a/lv2/parameters.lv2/parameters.ttl
+++ b/lv2/parameters.lv2/parameters.ttl
@@ -202,4 +202,3 @@ param:CompressorControls
] , [
lv2:designation param:ratio
] .
-
diff --git a/lv2/patch.lv2/manifest.ttl b/lv2/patch.lv2/manifest.ttl
index 4bf9cfb..fee2375 100644
--- a/lv2/patch.lv2/manifest.ttl
+++ b/lv2/patch.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 2 ;
lv2:microVersion 10 ;
rdfs:seeAlso <patch.ttl> .
-
diff --git a/lv2/patch.lv2/patch.meta.ttl b/lv2/patch.lv2/patch.meta.ttl
index 976034f..edbb5dc 100644
--- a/lv2/patch.lv2/patch.meta.ttl
+++ b/lv2/patch.lv2/patch.meta.ttl
@@ -303,4 +303,3 @@ interfaces to present appropriate controls. For example:
patch:writable eg:title .
"""^^lv2:Markdown .
-
diff --git a/lv2/patch.lv2/patch.ttl b/lv2/patch.lv2/patch.ttl
index 33d04d1..59ca118 100644
--- a/lv2/patch.lv2/patch.ttl
+++ b/lv2/patch.lv2/patch.ttl
@@ -245,4 +245,3 @@ patch:writable
rdfs:label "writable" ;
rdfs:range rdf:Property ;
rdfs:comment "A property that can be set with a patch:Set or patch:Patch message." .
-
diff --git a/lv2/port-groups.lv2/manifest.ttl b/lv2/port-groups.lv2/manifest.ttl
index a887cb0..7df99a8 100644
--- a/lv2/port-groups.lv2/manifest.ttl
+++ b/lv2/port-groups.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 4 ;
rdfs:seeAlso <port-groups.ttl> .
-
diff --git a/lv2/port-groups.lv2/port-groups.meta.ttl b/lv2/port-groups.lv2/port-groups.meta.ttl
index 4e3a158..a76d783 100644
--- a/lv2/port-groups.lv2/port-groups.meta.ttl
+++ b/lv2/port-groups.lv2/port-groups.meta.ttl
@@ -107,4 +107,3 @@ does not depend on a particular speaker configuration; a decoder can be used to
convert an ambisonic stream for any speaker configuration.
"""^^lv2:Markdown .
-
diff --git a/lv2/port-groups.lv2/port-groups.ttl b/lv2/port-groups.lv2/port-groups.ttl
index 2806821..9fc5c34 100644
--- a/lv2/port-groups.lv2/port-groups.ttl
+++ b/lv2/port-groups.lv2/port-groups.ttl
@@ -805,4 +805,3 @@ pg:AmbisonicBH3P3Group
lv2:index 15 ;
lv2:designation pg:ACN15
] .
-
diff --git a/lv2/port-props.lv2/manifest.ttl b/lv2/port-props.lv2/manifest.ttl
index 45f598d..dd12797 100644
--- a/lv2/port-props.lv2/manifest.ttl
+++ b/lv2/port-props.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 2 ;
rdfs:seeAlso <port-props.ttl> .
-
diff --git a/lv2/port-props.lv2/port-props.meta.ttl b/lv2/port-props.lv2/port-props.meta.ttl
index 6f65843..e97de45 100644
--- a/lv2/port-props.lv2/port-props.meta.ttl
+++ b/lv2/port-props.lv2/port-props.meta.ttl
@@ -177,4 +177,3 @@ where:
* `lower` and <code>upper</code> are the bounds.
"""^^lv2:Markdown .
-
diff --git a/lv2/port-props.lv2/port-props.ttl b/lv2/port-props.lv2/port-props.ttl
index ea25c6b..063996a 100644
--- a/lv2/port-props.lv2/port-props.ttl
+++ b/lv2/port-props.lv2/port-props.ttl
@@ -77,4 +77,3 @@ pprops:rangeSteps
rdfs:range xsd:nonNegativeInteger ;
rdfs:label "range steps" ;
rdfs:comment "The number of even steps the range should be divided into." .
-
diff --git a/lv2/presets.lv2/manifest.ttl b/lv2/presets.lv2/manifest.ttl
index b9cacf5..1508770 100644
--- a/lv2/presets.lv2/manifest.ttl
+++ b/lv2/presets.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 2 ;
lv2:microVersion 8 ;
rdfs:seeAlso <presets.ttl> .
-
diff --git a/lv2/presets.lv2/presets.meta.ttl b/lv2/presets.lv2/presets.meta.ttl
index 53b8ee9..d3e1ef9 100644
--- a/lv2/presets.lv2/presets.meta.ttl
+++ b/lv2/presets.lv2/presets.meta.ttl
@@ -79,4 +79,3 @@ be useful for saving state, or notifying a plugin instance at run-time about a
preset change.
"""^^lv2:Markdown .
-
diff --git a/lv2/presets.lv2/presets.ttl b/lv2/presets.lv2/presets.ttl
index 60189ea..8de997b 100644
--- a/lv2/presets.lv2/presets.ttl
+++ b/lv2/presets.lv2/presets.ttl
@@ -58,4 +58,3 @@ pset:preset
rdfs:range pset:Preset ;
rdfs:label "preset" ;
rdfs:comment "The preset currently applied to a plugin instance." .
-
diff --git a/lv2/resize-port.lv2/manifest.ttl b/lv2/resize-port.lv2/manifest.ttl
index 9fae8b8..fb8da8a 100644
--- a/lv2/resize-port.lv2/manifest.ttl
+++ b/lv2/resize-port.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 0 ;
rdfs:seeAlso <resize-port.ttl> .
-
diff --git a/lv2/resize-port.lv2/resize-port.meta.ttl b/lv2/resize-port.lv2/resize-port.meta.ttl
index 74bd534..ffd1b9b 100644
--- a/lv2/resize-port.lv2/resize-port.meta.ttl
+++ b/lv2/resize-port.lv2/resize-port.meta.ttl
@@ -59,4 +59,3 @@ property. Any host, especially those that do NOT support dynamic port
resizing, SHOULD do so or reduced functionality may result.
"""^^lv2:Markdown .
-
diff --git a/lv2/resize-port.lv2/resize-port.ttl b/lv2/resize-port.lv2/resize-port.ttl
index 6f42c8f..ffdeda2 100644
--- a/lv2/resize-port.lv2/resize-port.ttl
+++ b/lv2/resize-port.lv2/resize-port.ttl
@@ -33,4 +33,3 @@ rsz:minimumSize
rdfs:range xsd:nonNegativeInteger ;
rdfs:label "minimum size" ;
rdfs:comment "Minimum buffer size required by a port, in bytes." .
-
diff --git a/lv2/state.lv2/manifest.ttl b/lv2/state.lv2/manifest.ttl
index e56c4e5..6b17b52 100644
--- a/lv2/state.lv2/manifest.ttl
+++ b/lv2/state.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 2 ;
lv2:microVersion 10 ;
rdfs:seeAlso <state.ttl> .
-
diff --git a/lv2/state.lv2/state.meta.ttl b/lv2/state.lv2/state.meta.ttl
index b7b6855..1cd0544 100644
--- a/lv2/state.lv2/state.meta.ttl
+++ b/lv2/state.lv2/state.meta.ttl
@@ -390,4 +390,3 @@ a change which it knows is likely to have that effect, such as changing a
parameter.
"""^^lv2:Markdown .
-
diff --git a/lv2/state.lv2/state.ttl b/lv2/state.lv2/state.ttl
index 463fdb9..9a5ddcb 100644
--- a/lv2/state.lv2/state.ttl
+++ b/lv2/state.lv2/state.ttl
@@ -57,4 +57,3 @@ state:StateChanged
a rdfs:Class ;
rdfs:label "State Changed" ;
rdfs:comment "A notification that the internal state of the plugin has changed." .
-
diff --git a/lv2/time.lv2/manifest.ttl b/lv2/time.lv2/manifest.ttl
index d80aa75..ece8679 100644
--- a/lv2/time.lv2/manifest.ttl
+++ b/lv2/time.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 6 ;
rdfs:seeAlso <time.ttl> .
-
diff --git a/lv2/time.lv2/time.meta.ttl b/lv2/time.lv2/time.meta.ttl
index c0543c3..723a61b 100644
--- a/lv2/time.lv2/time.meta.ttl
+++ b/lv2/time.lv2/time.meta.ttl
@@ -67,4 +67,3 @@ rate of 0.0 is stopped, 1.0 is rolling at normal speed, 0.5 is rolling at half
speed, -1.0 is reverse, and so on.
"""^^lv2:Markdown .
-
diff --git a/lv2/time.lv2/time.ttl b/lv2/time.lv2/time.ttl
index f3da9b0..f9c65ee 100644
--- a/lv2/time.lv2/time.ttl
+++ b/lv2/time.lv2/time.ttl
@@ -118,4 +118,3 @@ time:speed
rdfs:range xsd:float ;
rdfs:label "speed" ;
rdfs:comment "The rate of the progress of time as a fraction of normal speed." .
-
diff --git a/lv2/ui.lv2/manifest.ttl b/lv2/ui.lv2/manifest.ttl
index d3b12b5..a77d6d0 100644
--- a/lv2/ui.lv2/manifest.ttl
+++ b/lv2/ui.lv2/manifest.ttl
@@ -3,7 +3,6 @@
<http://lv2plug.in/ns/extensions/ui>
a lv2:Specification ;
- lv2:minorVersion 2 ;
- lv2:microVersion 24 ;
+ lv2:minorVersion 3 ;
+ lv2:microVersion 0 ;
rdfs:seeAlso <ui.ttl> .
-
diff --git a/lv2/ui.lv2/ui.meta.ttl b/lv2/ui.lv2/ui.meta.ttl
index fd4d11d..393d8d6 100644
--- a/lv2/ui.lv2/ui.meta.ttl
+++ b/lv2/ui.lv2/ui.meta.ttl
@@ -99,6 +99,16 @@ not be used in the same process.
"""^^lv2:Markdown .
+ui:Gtk4UI
+ lv2:documentation """
+
+The host must guarantee that the Gtk+ 4 library has been initialised and the
+Glib main loop is running before the UI is instantiated. Note that this UI
+type is not suitable for binary distribution since multiple versions of Gtk can
+not be used in the same process.
+
+"""^^lv2:Markdown .
+
ui:Qt4UI
lv2:documentation """
@@ -119,6 +129,16 @@ used in the same process.
"""^^lv2:Markdown .
+ui:Qt6UI
+ lv2:documentation """
+
+The host must guarantee that the Qt6 library has been initialised and the Qt6
+main loop is running before the UI is instantiated. Note that this UI type is
+not suitable for binary distribution since multiple versions of Qt can not be
+used in the same process.
+
+"""^^lv2:Markdown .
+
ui:X11UI
lv2:documentation """
@@ -476,4 +496,3 @@ Write Effect
: None.
"""^^lv2:Markdown .
-
diff --git a/lv2/ui.lv2/ui.ttl b/lv2/ui.lv2/ui.ttl
index 1c2e455..c42992e 100644
--- a/lv2/ui.lv2/ui.ttl
+++ b/lv2/ui.lv2/ui.ttl
@@ -34,6 +34,13 @@ ui:Gtk3UI
rdfs:label "GTK3 UI" ;
rdfs:comment "A UI where the widget is a pointer to a Gtk+ 3.0 GtkWidget." .
+ui:Gtk4UI
+ a rdfs:Class ,
+ owl:Class ;
+ rdfs:subClassOf ui:UI ;
+ rdfs:label "GTK4 UI" ;
+ rdfs:comment "A UI where the widget is a pointer to a Gtk+ 4.0 GtkWidget." .
+
ui:Qt4UI
a rdfs:Class ,
owl:Class ;
@@ -48,6 +55,13 @@ ui:Qt5UI
rdfs:label "Qt5 UI" ;
rdfs:comment "A UI where the widget is a pointer to a Qt5 QWidget." .
+ui:Qt6UI
+ a rdfs:Class ,
+ owl:Class ;
+ rdfs:subClassOf ui:UI ;
+ rdfs:label "Qt6 UI" ;
+ rdfs:comment "A UI where the widget is a pointer to a Qt6 QWidget." .
+
ui:X11UI
a rdfs:Class ,
owl:Class ;
@@ -81,13 +95,13 @@ ui:binary
a rdf:Property ,
owl:ObjectProperty ;
owl:sameAs lv2:binary ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
rdfs:label "binary" ;
rdfs:comment "The shared library that a UI resides in." .
ui:makeSONameResident
a lv2:Feature ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
rdfs:label "make SO name resident" ;
rdfs:comment "UI binary must not be unloaded." .
@@ -174,7 +188,7 @@ ui:notifyType
ui:resize
a lv2:Feature ,
lv2:ExtensionData ;
- owl:deprecated "true"^^xsd:boolean ;
+ owl:deprecated true ;
rdfs:label "resize" ;
rdfs:comment """A feature that provides control of, and notifications about, a UI's size.""" .
@@ -246,4 +260,3 @@ ui:peakProtocol
a ui:PortProtocol ;
rdfs:label "peak protocol" ;
rdfs:comment "A protocol for sending continuous peak measurements of an audio signal." .
-
diff --git a/lv2/units.lv2/manifest.ttl b/lv2/units.lv2/manifest.ttl
index c6c9286..8b84346 100644
--- a/lv2/units.lv2/manifest.ttl
+++ b/lv2/units.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 5 ;
lv2:microVersion 12 ;
rdfs:seeAlso <units.ttl> .
-
diff --git a/lv2/units.lv2/units.meta.ttl b/lv2/units.lv2/units.meta.ttl
index 910bf46..0e03b35 100644
--- a/lv2/units.lv2/units.meta.ttl
+++ b/lv2/units.lv2/units.meta.ttl
@@ -55,4 +55,3 @@ units defined in this extension include conversion definitions where it makes
sense to do so.
"""^^lv2:Markdown .
-
diff --git a/lv2/units.lv2/units.ttl b/lv2/units.lv2/units.ttl
index 21a1898..0f94cc3 100644
--- a/lv2/units.lv2/units.ttl
+++ b/lv2/units.lv2/units.ttl
@@ -375,4 +375,3 @@ units:midiNote
rdfs:comment "A MIDI note number." ;
units:render "MIDI note %d" ;
units:symbol "note" .
-
diff --git a/lv2/uri-map.lv2/manifest.ttl b/lv2/uri-map.lv2/manifest.ttl
index a64e4fb..3824435 100644
--- a/lv2/uri-map.lv2/manifest.ttl
+++ b/lv2/uri-map.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 6 ;
rdfs:seeAlso <uri-map.ttl> .
-
diff --git a/lv2/uri-map.lv2/uri-map.meta.ttl b/lv2/uri-map.lv2/uri-map.meta.ttl
index d531899..9615f31 100644
--- a/lv2/uri-map.lv2/uri-map.meta.ttl
+++ b/lv2/uri-map.lv2/uri-map.meta.ttl
@@ -26,4 +26,3 @@ extensibility of RDF with the performance of integers (or centrally defined
enumerations).
"""^^lv2:Markdown .
-
diff --git a/lv2/uri-map.lv2/uri-map.ttl b/lv2/uri-map.lv2/uri-map.ttl
index 7a7d6e3..8a7a043 100644
--- a/lv2/uri-map.lv2/uri-map.ttl
+++ b/lv2/uri-map.lv2/uri-map.ttl
@@ -10,4 +10,3 @@
rdfs:label "LV2 URI Map" ;
rdfs:comment "A feature for mapping URIs to integers." ;
rdfs:seeAlso <uri-map.meta.ttl> .
-
diff --git a/lv2/urid.lv2/manifest.ttl b/lv2/urid.lv2/manifest.ttl
index 772e2b6..7dc919f 100644
--- a/lv2/urid.lv2/manifest.ttl
+++ b/lv2/urid.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 4 ;
rdfs:seeAlso <urid.ttl> .
-
diff --git a/lv2/urid.lv2/urid.meta.ttl b/lv2/urid.lv2/urid.meta.ttl
index 6f64e69..cbc5153 100644
--- a/lv2/urid.lv2/urid.meta.ttl
+++ b/lv2/urid.lv2/urid.meta.ttl
@@ -47,4 +47,3 @@ LV2_Descriptor::instantiate() with URI LV2_URID__unmap and data pointed to an
instance of LV2_URID_Unmap.
"""^^lv2:Markdown .
-
diff --git a/lv2/urid.lv2/urid.ttl b/lv2/urid.lv2/urid.ttl
index 6ce666a..e875fba 100644
--- a/lv2/urid.lv2/urid.ttl
+++ b/lv2/urid.lv2/urid.ttl
@@ -19,4 +19,3 @@ urid:unmap
a lv2:Feature ;
rdfs:label "unmap" ;
rdfs:comment "A feature to unmap URIDs back to strings." .
-
diff --git a/lv2/worker.lv2/manifest.ttl b/lv2/worker.lv2/manifest.ttl
index 692720d..cf4a83f 100644
--- a/lv2/worker.lv2/manifest.ttl
+++ b/lv2/worker.lv2/manifest.ttl
@@ -6,4 +6,3 @@
lv2:minorVersion 1 ;
lv2:microVersion 2 ;
rdfs:seeAlso <worker.ttl> .
-
diff --git a/lv2/worker.lv2/worker.meta.ttl b/lv2/worker.lv2/worker.meta.ttl
index 0918446..b9d651a 100644
--- a/lv2/worker.lv2/worker.meta.ttl
+++ b/lv2/worker.lv2/worker.meta.ttl
@@ -57,4 +57,3 @@ the plugin MAY use it to schedule work in the calling context. The plugin MUST
NOT assume any relationship between different schedule features.
"""^^lv2:Markdown .
-
diff --git a/lv2/worker.lv2/worker.ttl b/lv2/worker.lv2/worker.ttl
index 581be71..be07105 100644
--- a/lv2/worker.lv2/worker.ttl
+++ b/lv2/worker.lv2/worker.ttl
@@ -21,4 +21,3 @@ work:schedule
a lv2:Feature ;
rdfs:label "work schedule" ;
rdfs:comment "The work scheduling feature provided by a host." .
-
diff --git a/lv2specgen/lv2specgen.py b/lv2specgen/lv2specgen.py
index 95702a5..28c1500 100755
--- a/lv2specgen/lv2specgen.py
+++ b/lv2specgen/lv2specgen.py
@@ -111,19 +111,18 @@ def getLiteralString(s):
def isResource(n):
- return type(n) == rdflib.URIRef
+ return isinstance(n, rdflib.URIRef)
def isBlank(n):
- return type(n) == rdflib.BNode
+ return isinstance(n, rdflib.BNode)
def isLiteral(n):
- return type(n) == rdflib.Literal
+ return isinstance(n, rdflib.Literal)
def niceName(uri):
- global spec_bundle
if uri.startswith(spec_ns_str):
return uri.replace(spec_ns_str, "")
elif uri == str(rdfs.seeAlso):
@@ -382,8 +381,6 @@ def endProperties(first):
def rdfsPropertyInfo(term, m):
"""Generate HTML for properties: Domain, range"""
- global classranges
- global classdomains
doc = ""
label = getLabel(m, term)
@@ -537,8 +534,6 @@ def owlRestrictionInfo(term, m):
def rdfsClassInfo(term, m):
"""Generate rdfs-type information for Classes: ranges, and domains."""
- global classranges
- global classdomains
doc = ""
label = getLabel(m, term)
@@ -900,8 +895,6 @@ def specInformation(m, ns):
and proplist. Global variables classranges and classdomains are also filled
as appropriate.
"""
- global classranges
- global classdomains
# Find the class information: Ranges, domains, and list of all names.
classtypes = [rdfs.Class, owl.Class, rdfs.Datatype]
@@ -1112,7 +1105,6 @@ def load_tags(path, docdir):
and cn.tagName == "compound"
and cn.getAttribute("kind") != "page"
):
-
name = getChildText(cn, "name")
filename = getChildText(cn, "filename")
anchor = getChildText(cn, "anchor")
@@ -1152,8 +1144,6 @@ def specgen(
global spec_ns_str
global spec_ns
global spec_pre
- global ns_list
- global specgendir
global linkmap
spec_bundle = "file://%s/" % os.path.abspath(os.path.dirname(specloc))
@@ -1328,7 +1318,7 @@ def specgen(
template = template.replace("@DESCRIPTION@", docs)
now = int(os.environ.get("SOURCE_DATE_EPOCH", time.time()))
- build_date = datetime.datetime.utcfromtimestamp(now)
+ build_date = datetime.datetime.fromtimestamp(now, datetime.timezone.utc)
template = template.replace("@DATE@", build_date.strftime("%F"))
template = template.replace("@TIME@", build_date.strftime("%F %H:%M UTC"))
diff --git a/lv2specgen/meson.build b/lv2specgen/meson.build
index 5407d69..69b029b 100644
--- a/lv2specgen/meson.build
+++ b/lv2specgen/meson.build
@@ -11,12 +11,13 @@ lv2specgen_command_prefix = [
'--list-email=' + lv2_list_email,
'--list-page=' + lv2_list_page,
'--style-dir=' + lv2_source_root / 'doc' / 'style',
- '--template', files('template.html'),
+ '--template',
+ files('template.html'),
]
if is_variable('lv2_tags')
lv2specgen_command_prefix += [
- '--tags', lv2_tags.full_path(), # TODO: Remove full_path() in meson 0.60.0
+ ['--tags', lv2_tags.full_path()], # TODO: Remove full_path() in meson 0.60.0
]
endif
diff --git a/meson.build b/meson.build
index 6c10fad..07698de 100644
--- a/meson.build
+++ b/meson.build
@@ -1,23 +1,26 @@
# Copyright 2021-2022 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
-project('lv2', ['c'],
- version: '1.18.9',
- license: 'ISC',
- meson_version: '>= 0.56.0',
- default_options: [
- 'b_ndebug=if-release',
- 'buildtype=release',
- 'c_std=c99',
- ])
+project(
+ 'lv2',
+ ['c'],
+ default_options: [
+ 'b_ndebug=if-release',
+ 'buildtype=release',
+ 'c_std=c99',
+ ],
+ license: 'ISC',
+ meson_version: '>= 0.56.0',
+ version: '1.18.11',
+)
lv2_docdir = get_option('datadir') / 'doc' / 'lv2'
lv2_source_root = meson.current_source_dir()
lv2_build_root = meson.current_build_dir()
-#######################
-# Compilers and Flags #
-#######################
+#############################
+# Compilers and Build Tools #
+#############################
# Required tools
pkg = import('pkgconfig')
@@ -31,11 +34,165 @@ if not get_option('tests').disabled()
endif
endif
-# Set global warning flags
-if get_option('strict') and not meson.is_subproject()
- subdir('meson/warnings')
+########################
+# Warning Suppressions #
+########################
+
+warning_level = get_option('warning_level')
+
+# C
+c_suppressions = []
+if cc.get_id() in ['clang', 'emscripten']
+ if warning_level == 'everything'
+ c_suppressions += [
+ '-Wno-bad-function-cast',
+ '-Wno-cast-align',
+ '-Wno-cast-function-type-strict',
+ '-Wno-cast-qual',
+ '-Wno-declaration-after-statement',
+ '-Wno-documentation-unknown-command',
+ '-Wno-double-promotion',
+ '-Wno-float-conversion',
+ '-Wno-float-equal',
+ '-Wno-implicit-float-conversion',
+ '-Wno-padded',
+ '-Wno-reserved-id-macro',
+ '-Wno-shorten-64-to-32',
+ '-Wno-sign-conversion',
+ '-Wno-switch-default',
+ '-Wno-switch-enum',
+ '-Wno-unsafe-buffer-usage',
+ ]
+
+ if not meson.is_cross_build()
+ c_suppressions += ['-Wno-poison-system-directories']
+ endif
+
+ if host_machine.system() == 'windows'
+ c_suppressions += ['-Wno-format-nonliteral']
+ endif
+ endif
+
+ if warning_level in ['everything', '3', '2']
+ c_suppressions += ['-Wno-unused-parameter']
+ endif
+
+elif cc.get_id() == 'gcc'
+ if warning_level == 'everything'
+ c_suppressions += [
+ '-Wno-bad-function-cast',
+ '-Wno-cast-align',
+ '-Wno-cast-qual',
+ '-Wno-conversion',
+ '-Wno-double-promotion',
+ '-Wno-float-equal',
+ '-Wno-inline',
+ '-Wno-padded',
+ '-Wno-suggest-attribute=const',
+ '-Wno-suggest-attribute=malloc',
+ '-Wno-suggest-attribute=pure',
+ '-Wno-switch-default',
+ '-Wno-switch-enum',
+ '-Wno-unsuffixed-float-constants',
+ '-Wno-unused-const-variable',
+ ]
+
+ if target_machine.system() == 'windows'
+ c_suppressions += ['-Wno-suggest-attribute=format']
+ endif
+ endif
+
+ if warning_level in ['everything', '3', '2']
+ c_suppressions += ['-Wno-unused-parameter']
+ endif
+
+elif cc.get_id() == 'msvc'
+ if warning_level == 'everything'
+ c_suppressions += [
+ '/wd4061', # enumerator in switch is not explicitly handled
+ '/wd4244', # conversion with possible loss of data
+ '/wd4310', # cast truncates constant value
+ '/wd4365', # signed/unsigned mismatch
+ '/wd4464', # relative include path contains ".."
+ '/wd4514', # unreferenced inline function has been removed
+ '/wd4514', # unreferenced inline function has been removed
+ '/wd4706', # assignment within conditional expression
+ '/wd4710', # function not inlined
+ '/wd4711', # function selected for automatic inline expansion
+ '/wd4820', # padding added after construct
+ '/wd5045', # will insert Spectre mitigation for memory load
+ ]
+ endif
+
+ if warning_level in ['everything', '3']
+ c_suppressions += [
+ '/wd4100', # unreferenced formal parameter
+ ]
+ endif
+
+ if warning_level in ['everything', '3', '2']
+ c_suppressions += [
+ '/wd4267', # conversion from size_t to a smaller type
+ ]
+ endif
+endif
+
+c_suppressions = cc.get_supported_arguments(c_suppressions)
+
+# C++
+if is_variable('cpp')
+ cpp_suppressions = []
+
+ if warning_level == 'everything'
+ if cpp.get_id() in ['clang', 'emscripten']
+ cpp_suppressions += [
+ '-Wno-c++98-compat',
+ '-Wno-cast-align',
+ '-Wno-cast-qual',
+ '-Wno-documentation-unknown-command',
+ '-Wno-nullability-extension',
+ '-Wno-padded',
+ '-Wno-reserved-id-macro',
+ '-Wno-unsafe-buffer-usage',
+ ]
+
+ if not meson.is_cross_build()
+ cpp_suppressions += ['-Wno-poison-system-directories']
+ endif
+
+ if host_machine.system() == 'windows'
+ cpp_suppressions += ['-Wno-format-nonliteral']
+ endif
+
+ elif cpp.get_id() == 'gcc'
+ cpp_suppressions += [
+ '-Wno-cast-align',
+ '-Wno-cast-qual',
+ '-Wno-inline',
+ '-Wno-padded',
+ '-Wno-unused-const-variable',
+ '-Wno-useless-cast',
+ ]
+
+ if target_machine.system() == 'windows'
+ cpp_suppressions += ['-Wno-suggest-attribute=format']
+ endif
+
+ elif cpp.get_id() == 'msvc'
+ cpp_suppressions += [
+ '/wd4514', # unreferenced inline function has been removed
+ '/wd4706', # assignment within conditional expression
+ '/wd4710', # function not inlined
+ '/wd4711', # function selected for automatic inline expansion
+ '/wd4820', # padding added after data member
+ '/wd5045', # will insert Spectre mitigation
+ '/wd5264', # const variable is not used
+ ]
+ endif
+ endif
+
+ cpp_suppressions = cpp.get_supported_arguments(cpp_suppressions)
endif
-subdir('meson/suppressions')
##########################
# LV2 Path Configuration #
@@ -59,7 +216,7 @@ endif
# Package/Dependency #
######################
-# Generage pkg-config file for external dependants
+# Generate pkg-config file for external dependants
pkg.generate(
description: 'Plugin standard for audio systems',
filebase: 'lv2',
@@ -81,6 +238,9 @@ lv2_dep = declare_dependency(
version: meson.project_version(),
)
+# Override pkg-config dependency for internal meson dependants
+meson.override_dependency('lv2', lv2_dep)
+
##################
# Specifications #
##################
@@ -185,8 +345,10 @@ check_python = pymod.find_installation(
required: get_option('tests'),
)
-if (check_python.found() and
- check_python.language_version().version_compare('<3.7'))
+if (
+ check_python.found()
+ and check_python.language_version().version_compare('<3.7')
+)
warning('Python 3.7 is required for tests')
check_python = disabler()
endif
@@ -343,12 +505,26 @@ endif
subdir('util')
# Data and build tests
-subdir('test')
+if not get_option('tests').disabled()
+ subdir('test')
+endif
if not meson.is_subproject()
- summary('Tests', not get_option('tests').disabled(), bool_yn: true)
- summary('Documentation', build_docs, bool_yn: true)
- summary('Prefix', get_option('prefix'), section: 'Paths')
- summary('LV2 bundles', lv2dir, section: 'Paths')
- summary('Headers', get_option('prefix') / get_option('includedir'), section: 'Paths')
+ summary(
+ {
+ 'Tests': not get_option('tests').disabled(),
+ 'Documentation': build_docs,
+ },
+ bool_yn: true,
+ section: 'Components',
+ )
+
+ summary(
+ {
+ 'Install prefix': get_option('prefix'),
+ 'Headers': get_option('prefix') / get_option('includedir'),
+ 'LV2 bundles': lv2dir,
+ },
+ section: 'Directories',
+ )
endif
diff --git a/meson/library/meson.build b/meson/library/meson.build
deleted file mode 100644
index 81aab96..0000000
--- a/meson/library/meson.build
+++ /dev/null
@@ -1,30 +0,0 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
-# SPDX-License-Identifier: 0BSD OR ISC
-
-# General definitions for building libraries.
-#
-# These are essentially workarounds for meson and/or MSVC. Unfortunately,
-# meson's default_library option doesn't support shared and static builds very
-# well. In particular, it's often necessary to define different symbols for
-# static and shared builds of libraries so that symbols can be exported. To
-# work around this, we do not support default_library=both on Windows. On
-# other platforms with GCC-like compilers, we can support both because symbols
-# can safely be exported in the same way (giving them default visibility) in
-# both static and shared builds.
-
-# Abort on Windows with default_library=both
-if get_option('default_library') == 'both'
- if host_machine.system() == 'windows'
- error('default_library=both is not supported on Windows')
- endif
-endif
-
-# Set library_suffix to the suffix for libraries
-if cc.get_id() == 'msvc'
- # Meson appends a version to the name only on MS, which leads to inconsistent
- # library names, like `mylib-1-1`. So, provide no suffix to ultimately get
- # the same name as on other platforms, like `mylib-1`.
- library_suffix = ''
-else
- library_suffix = '-@0@'.format(meson.project_version().split('.')[0])
-endif
diff --git a/meson/suppressions/meson.build b/meson/suppressions/meson.build
deleted file mode 100644
index 66510f9..0000000
--- a/meson/suppressions/meson.build
+++ /dev/null
@@ -1,132 +0,0 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
-# SPDX-License-Identifier: 0BSD OR ISC
-
-# Project-specific warning suppressions.
-#
-# This should be used in conjunction with the generic "warnings" sibling that
-# enables all reasonable warnings for the compiler. It lives here just to keep
-# the top-level meson.build more readable.
-
-#####
-# C #
-#####
-
-if is_variable('cc')
- c_suppressions = []
-
- if get_option('strict')
- if cc.get_id() in ['clang', 'emscripten']
- c_suppressions += [
- '-Wno-bad-function-cast',
- '-Wno-cast-align',
- '-Wno-cast-qual',
- '-Wno-declaration-after-statement',
- '-Wno-documentation-unknown-command',
- '-Wno-double-promotion',
- '-Wno-float-conversion',
- '-Wno-float-equal',
- '-Wno-implicit-float-conversion',
- '-Wno-padded',
- '-Wno-reserved-id-macro',
- '-Wno-shorten-64-to-32',
- '-Wno-sign-conversion',
- '-Wno-switch-enum',
- '-Wno-unused-parameter',
- ]
- elif cc.get_id() == 'gcc'
- c_suppressions += [
- '-Wno-bad-function-cast',
- '-Wno-cast-align',
- '-Wno-cast-qual',
- '-Wno-conversion',
- '-Wno-double-promotion',
- '-Wno-float-equal',
- '-Wno-inline',
- '-Wno-padded',
- '-Wno-suggest-attribute=const',
- '-Wno-suggest-attribute=malloc',
- '-Wno-suggest-attribute=pure',
- '-Wno-switch-default',
- '-Wno-switch-enum',
- '-Wno-unsuffixed-float-constants',
- '-Wno-unused-const-variable',
- '-Wno-unused-parameter',
- ]
-
- if target_machine.system() == 'windows'
- c_suppressions += [
- '-Wno-suggest-attribute=format',
- ]
- endif
-
- elif cc.get_id() == 'msvc'
- c_suppressions += [
- '/wd4061', # enumerator in switch is not explicitly handled
- '/wd4100', # unreferenced formal parameter
- '/wd4244', # conversion with possible loss of data
- '/wd4267', # conversion from size_t to a smaller type
- '/wd4310', # cast truncates constant value
- '/wd4365', # signed/unsigned mismatch
- '/wd4464', # relative include path contains ".."
- '/wd4514', # unreferenced inline function has been removed
- '/wd4514', # unreferenced inline function has been removed
- '/wd4706', # assignment within conditional expression
- '/wd4710', # function not inlined
- '/wd4711', # function selected for automatic inline expansion
- '/wd4820', # padding added after construct
- '/wd5045', # will insert Spectre mitigation for memory load
- ]
- endif
- endif
-
- c_suppressions = cc.get_supported_arguments(c_suppressions)
-endif
-
-#######
-# C++ #
-#######
-
-if is_variable('cpp')
- cpp_suppressions = []
-
- if get_option('strict')
- if cpp.get_id() in ['clang', 'emscripten']
- cpp_suppressions = [
- '-Wno-cast-align',
- '-Wno-cast-qual',
- '-Wno-documentation-unknown-command',
- '-Wno-nullability-extension',
- '-Wno-padded',
- '-Wno-reserved-id-macro',
- ]
-
- elif cpp.get_id() == 'gcc'
- cpp_suppressions = [
- '-Wno-cast-align',
- '-Wno-cast-qual',
- '-Wno-inline',
- '-Wno-padded',
- '-Wno-unused-const-variable',
- '-Wno-useless-cast',
- ]
-
- if target_machine.system() == 'windows'
- cpp_suppressions += [
- '-Wno-suggest-attribute=format',
- ]
- endif
-
- elif cpp.get_id() == 'msvc'
- cpp_suppressions = [
- '/wd4514', # unreferenced inline function has been removed
- '/wd4706', # assignment within conditional expression
- '/wd4710', # function not inlined
- '/wd4711', # function selected for automatic inline expansion
- '/wd4820', # padding added after data member
- '/wd5045', # will insert Spectre mitigation
- ]
- endif
- endif
-
- cpp_suppressions = cpp.get_supported_arguments(cpp_suppressions)
-endif
diff --git a/meson/warnings/meson.build b/meson/warnings/meson.build
deleted file mode 100644
index 089f292..0000000
--- a/meson/warnings/meson.build
+++ /dev/null
@@ -1,256 +0,0 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
-# SPDX-License-Identifier: 0BSD 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') and not is_variable('all_c_warnings')
- # 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') and not is_variable('all_cpp_warnings')
- # 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
index 278cf12..2661999 100644
--- a/meson_options.txt
+++ b/meson_options.txt
@@ -1,25 +1,25 @@
# Copyright 2021-2022 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
-option('docs', type: 'feature', value: 'auto', yield: true,
+option('docs', type: 'feature', yield: true,
description: 'Build documentation')
+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('old_headers', type: 'boolean', value: true, yield: true,
description: 'Install backwards compatible headers at URI-style paths')
-option('online_docs', type: 'boolean', value: 'false', yield: true,
+option('online_docs', type: 'boolean', value: false, yield: true,
description: 'Build documentation for online hosting')
-option('plugins', type: 'feature', value: 'auto', yield: true,
+option('plugins', type: 'feature', yield: true,
description: 'Build example plugins')
-option('strict', type: 'boolean', value: false, yield: true,
- description: 'Enable ultra-strict warnings')
-
-option('tests', type: 'feature', value: 'auto', yield: true,
+option('tests', type: 'feature', yield: true,
description: 'Build tests')
option('title', type: 'string', value: 'LV2',
diff --git a/plugins/.clang-tidy b/plugins/.clang-tidy
index bff0bfd..b327b36 100644
--- a/plugins/.clang-tidy
+++ b/plugins/.clang-tidy
@@ -1,26 +1,16 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# Copyright 2020-2025 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
Checks: >
- *,
- -*-magic-numbers,
-*-narrowing-conversions,
- -altera-*,
+ -bugprone-assignment-in-if-condition,
-bugprone-easily-swappable-parameters,
- -bugprone-macro-parentheses,
+ -bugprone-multi-level-implicit-pointer-conversion,
+ -bugprone-suspicious-realloc-usage,
-cert-err33-c,
+ -clang-analyzer-core.NullDereference,
-hicpp-signed-bitwise,
-llvm-header-guard,
- -llvmlibc-*,
-misc-unused-parameters,
- -performance-no-int-to-ptr,
-readability-function-cognitive-complexity,
- -readability-identifier-length,
-WarningsAsErrors: '*'
-HeaderFilterRegex: '.*'
-FormatStyle: file
-CheckOptions:
- - key: hicpp-uppercase-literal-suffix.NewSuffixes
- value: L;U;f
- - key: readability-uppercase-literal-suffix.NewSuffixes
- value: L;U;f
+InheritParentConfig: true
diff --git a/plugins/eg-amp.lv2/amp.c b/plugins/eg-amp.lv2/amp.c
index 90a5769..c85d6ab 100644
--- a/plugins/eg-amp.lv2/amp.c
+++ b/plugins/eg-amp.lv2/amp.c
@@ -9,7 +9,7 @@
replacing `http:/` with `lv2` any header in the specification bundle can be
included, in this case `lv2.h`.
*/
-#include "lv2/core/lv2.h"
+#include <lv2/core/lv2.h>
/** Include standard C headers */
#include <math.h>
@@ -105,7 +105,7 @@ activate(LV2_Handle instance)
{}
/** Define a macro for converting a gain in dB to a coefficient. */
-#define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g)*0.05f) : 0.0f)
+#define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g) * 0.05f) : 0.0f)
/**
The `run()` method is the main process function of the plugin. It processes
@@ -196,8 +196,7 @@ static const LV2_Descriptor descriptor = {AMP_URI,
This method is in the ``discovery'' threading class, so no other functions
or methods in this plugin library will be called concurrently with it.
*/
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-amp.lv2/meson.build b/plugins/eg-amp.lv2/meson.build
index bc222d2..2912e3f 100644
--- a/plugins/eg-amp.lv2/meson.build
+++ b/plugins/eg-amp.lv2/meson.build
@@ -11,6 +11,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -19,7 +20,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
diff --git a/plugins/eg-fifths.lv2/fifths.c b/plugins/eg-fifths.lv2/fifths.c
index 9f6a388..22d5f8a 100644
--- a/plugins/eg-fifths.lv2/fifths.c
+++ b/plugins/eg-fifths.lv2/fifths.c
@@ -1,16 +1,16 @@
// Copyright 2014-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "./uris.h"
+#include "uris.h"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/midi/midi.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/midi/midi.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -90,8 +90,8 @@ cleanup(LV2_Handle instance)
static void
run(LV2_Handle instance, uint32_t sample_count)
{
- Fifths* self = (Fifths*)instance;
- FifthsURIs* uris = &self->uris;
+ Fifths* self = (Fifths*)instance;
+ const FifthsURIs* uris = &self->uris;
// Struct for a 3 byte MIDI event, used for writing notes
typedef struct {
@@ -160,8 +160,7 @@ static const LV2_Descriptor descriptor = {EG_FIFTHS_URI,
cleanup,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-fifths.lv2/meson.build b/plugins/eg-fifths.lv2/meson.build
index 0fa8525..d0cbc6a 100644
--- a/plugins/eg-fifths.lv2/meson.build
+++ b/plugins/eg-fifths.lv2/meson.build
@@ -11,6 +11,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -19,7 +20,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
diff --git a/plugins/eg-fifths.lv2/uris.h b/plugins/eg-fifths.lv2/uris.h
index 0406937..f32a6bd 100644
--- a/plugins/eg-fifths.lv2/uris.h
+++ b/plugins/eg-fifths.lv2/uris.h
@@ -4,10 +4,10 @@
#ifndef FIFTHS_URIS_H
#define FIFTHS_URIS_H
-#include "lv2/atom/atom.h"
-#include "lv2/midi/midi.h"
-#include "lv2/patch/patch.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/midi/midi.h>
+#include <lv2/patch/patch.h>
+#include <lv2/urid/urid.h>
#define EG_FIFTHS_URI "http://lv2plug.in/plugins/eg-fifths"
@@ -37,4 +37,4 @@ map_fifths_uris(LV2_URID_Map* map, FifthsURIs* uris)
uris->patch_value = map->map(map->handle, LV2_PATCH__value);
}
-#endif /* FIFTHS_URIS_H */
+#endif // FIFTHS_URIS_H
diff --git a/plugins/eg-metro.lv2/meson.build b/plugins/eg-metro.lv2/meson.build
index def9e0b..ee4016e 100644
--- a/plugins/eg-metro.lv2/meson.build
+++ b/plugins/eg-metro.lv2/meson.build
@@ -11,6 +11,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -19,7 +20,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
diff --git a/plugins/eg-metro.lv2/metro.c b/plugins/eg-metro.lv2/metro.c
index f3fe164..e60a33f 100644
--- a/plugins/eg-metro.lv2/metro.c
+++ b/plugins/eg-metro.lv2/metro.c
@@ -1,14 +1,14 @@
// Copyright 2012-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/time/time.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/time/time.h>
+#include <lv2/urid/urid.h>
#include <math.h>
#include <stdbool.h>
@@ -199,6 +199,7 @@ play(Metro* self, uint32_t begin, uint32_t end)
{
float* const output = self->ports.output;
const uint32_t frames_per_beat = (uint32_t)(60.0f / self->bpm * self->rate);
+ const float attack_den = self->attack_len ? (float)self->attack_len : 1.0f;
if (self->speed == 0.0f) {
memset(output, 0, (end - begin) * sizeof(float));
@@ -209,8 +210,8 @@ play(Metro* self, uint32_t begin, uint32_t end)
switch (self->state) {
case STATE_ATTACK:
// Amplitude increases from 0..1 until attack_len
- output[i] = self->wave[self->wave_offset] * (float)self->elapsed_len /
- (float)self->attack_len;
+ output[i] =
+ self->wave[self->wave_offset] * (float)self->elapsed_len / attack_den;
if (self->elapsed_len >= self->attack_len) {
self->state = STATE_DECAY;
}
@@ -331,8 +332,7 @@ static const LV2_Descriptor descriptor = {
NULL, // extension_data
};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-midigate.lv2/meson.build b/plugins/eg-midigate.lv2/meson.build
index 609ee3a..fc6010b 100644
--- a/plugins/eg-midigate.lv2/meson.build
+++ b/plugins/eg-midigate.lv2/meson.build
@@ -11,6 +11,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -19,7 +20,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
diff --git a/plugins/eg-midigate.lv2/midigate.c b/plugins/eg-midigate.lv2/midigate.c
index db2fdea..b4861db 100644
--- a/plugins/eg-midigate.lv2/midigate.c
+++ b/plugins/eg-midigate.lv2/midigate.c
@@ -1,14 +1,14 @@
// Copyright 2013-2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/midi/midi.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/midi/midi.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -213,8 +213,7 @@ static const LV2_Descriptor descriptor = {MIDIGATE_URI,
cleanup,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-params.lv2/meson.build b/plugins/eg-params.lv2/meson.build
index 5b06709..83c6ef9 100644
--- a/plugins/eg-params.lv2/meson.build
+++ b/plugins/eg-params.lv2/meson.build
@@ -11,6 +11,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -19,7 +20,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
diff --git a/plugins/eg-params.lv2/params.c b/plugins/eg-params.lv2/params.c
index af96fc8..9fbaa46 100644
--- a/plugins/eg-params.lv2/params.c
+++ b/plugins/eg-params.lv2/params.c
@@ -3,17 +3,17 @@
#include "state_map.h"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/midi/midi.h"
-#include "lv2/patch/patch.h"
-#include "lv2/state/state.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/midi/midi.h>
+#include <lv2/patch/patch.h>
+#include <lv2/state/state.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -320,7 +320,7 @@ save(LV2_Handle instance,
LV2_State_Status st = LV2_STATE_SUCCESS;
for (unsigned i = 0; i < N_PROPS; ++i) {
- StateMapItem* prop = &self->props[i];
+ const StateMapItem* prop = &self->props[i];
store_prop(self, map_path, &st, store, handle, prop->urid, prop->value);
}
@@ -512,8 +512,7 @@ static const LV2_Descriptor descriptor = {EG_PARAMS_URI,
cleanup,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return (index == 0) ? &descriptor : NULL;
diff --git a/plugins/eg-params.lv2/state_map.h b/plugins/eg-params.lv2/state_map.h
index a223243..c81ea29 100644
--- a/plugins/eg-params.lv2/state_map.h
+++ b/plugins/eg-params.lv2/state_map.h
@@ -1,8 +1,8 @@
// Copyright 2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/urid/urid.h>
#include <stdarg.h>
#include <stdint.h>
@@ -68,7 +68,7 @@ state_map_init(
{
// Set dict entries from parameters
unsigned i = 0;
- va_list args;
+ va_list args; // NOLINT(cppcoreguidelines-init-variables)
va_start(args, handle);
for (const char* uri = NULL; (uri = va_arg(args, const char*)); ++i) {
const char* type = va_arg(args, const char*);
diff --git a/plugins/eg-sampler.lv2/atom_sink.h b/plugins/eg-sampler.lv2/atom_sink.h
index 8966eb2..3319767 100644
--- a/plugins/eg-sampler.lv2/atom_sink.h
+++ b/plugins/eg-sampler.lv2/atom_sink.h
@@ -1,9 +1,9 @@
// Copyright 2016 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
#include <stdint.h>
#include <string.h>
diff --git a/plugins/eg-sampler.lv2/meson.build b/plugins/eg-sampler.lv2/meson.build
index 0916ff6..a0f8799 100644
--- a/plugins/eg-sampler.lv2/meson.build
+++ b/plugins/eg-sampler.lv2/meson.build
@@ -6,18 +6,26 @@ ui_sources = files('sampler_ui.c')
bundle_name = 'eg-sampler.lv2'
data_filenames = ['manifest.ttl.in', 'sampler.ttl', 'click.wav']
-samplerate_dep = dependency('samplerate',
- version: '>= 0.1.0',
- required: get_option('plugins'))
+samplerate_dep = dependency(
+ 'samplerate',
+ include_type: 'system',
+ required: get_option('plugins'),
+ version: '>= 0.1.0',
+)
-sndfile_dep = dependency('sndfile',
- version: '>= 1.0.0',
- required: get_option('plugins'))
+sndfile_dep = dependency(
+ 'sndfile',
+ include_type: 'system',
+ required: get_option('plugins'),
+ version: '>= 1.0.0',
+)
-gtk2_dep = dependency('gtk+-2.0',
- include_type: 'system',
- required: get_option('plugins'),
- version: '>= 2.18.0')
+gtk2_dep = dependency(
+ 'gtk+-2.0',
+ include_type: 'system',
+ required: get_option('plugins'),
+ version: '>= 2.18.0',
+)
if samplerate_dep.found() and sndfile_dep.found()
module = shared_library(
@@ -26,6 +34,7 @@ if samplerate_dep.found() and sndfile_dep.found()
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep, samplerate_dep, sndfile_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -57,13 +66,14 @@ if samplerate_dep.found() and sndfile_dep.found()
if cc.get_id() == 'gcc'
ui_suppressions += ['-Wno-strict-overflow']
endif
-
+
shared_library(
'sampler_ui',
ui_sources,
c_args: ui_suppressions,
dependencies: [lv2_dep, gtk2_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
diff --git a/plugins/eg-sampler.lv2/peaks.h b/plugins/eg-sampler.lv2/peaks.h
index 47d6616..ff91546 100644
--- a/plugins/eg-sampler.lv2/peaks.h
+++ b/plugins/eg-sampler.lv2/peaks.h
@@ -14,10 +14,10 @@
requested, with reasonably sized incremental updates sent over plugin ports.
*/
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/urid/urid.h>
#include <math.h>
#include <stdbool.h>
diff --git a/plugins/eg-sampler.lv2/sampler.c b/plugins/eg-sampler.lv2/sampler.c
index d870a07..6fc04c5 100644
--- a/plugins/eg-sampler.lv2/sampler.c
+++ b/plugins/eg-sampler.lv2/sampler.c
@@ -7,17 +7,17 @@
#include "peaks.h"
#include "uris.h"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/midi/midi.h"
-#include "lv2/state/state.h"
-#include "lv2/urid/urid.h"
-#include "lv2/worker/worker.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/midi/midi.h>
+#include <lv2/state/state.h>
+#include <lv2/urid/urid.h>
+#include <lv2/worker/worker.h>
#include <samplerate.h>
#include <sndfile.h>
@@ -249,9 +249,9 @@ work(LV2_Handle instance,
static LV2_Worker_Status
work_response(LV2_Handle instance, uint32_t size, const void* data)
{
- Sampler* self = (Sampler*)instance;
- Sample* old_sample = self->sample;
- Sample* new_sample = *(Sample* const*)data;
+ Sampler* self = (Sampler*)instance;
+ Sample* old_sample = self->sample;
+ const Sample* new_sample = *(Sample* const*)data;
// Install the new sample
self->sample = *(Sample* const*)data;
@@ -353,7 +353,7 @@ deactivate(LV2_Handle instance)
}
/** Define a macro for converting a gain in dB to a coefficient. */
-#define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g)*0.05f) : 0.0f)
+#define DB_CO(g) ((g) > -90.0f ? powf(10.0f, (g) * 0.05f) : 0.0f)
/**
Handle an incoming event in the audio thread.
@@ -688,8 +688,7 @@ static const LV2_Descriptor descriptor = {EG_SAMPLER_URI,
cleanup,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-sampler.lv2/sampler_ui.c b/plugins/eg-sampler.lv2/sampler_ui.c
index 16a8c71..769dde0 100644
--- a/plugins/eg-sampler.lv2/sampler_ui.c
+++ b/plugins/eg-sampler.lv2/sampler_ui.c
@@ -4,16 +4,16 @@
#include "peaks.h"
#include "uris.h"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/midi/midi.h"
-#include "lv2/ui/ui.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/midi/midi.h>
+#include <lv2/ui/ui.h>
+#include <lv2/urid/urid.h>
#include <cairo.h>
#include <gdk/gdk.h>
@@ -183,13 +183,13 @@ on_canvas_expose(GtkWidget* widget, GdkEventExpose* event, gpointer data)
// Draw line through top peaks
for (int i = 0; i < n_peaks; ++i) {
const float peak = peaks[i];
- cairo_line_to(cr, i * scale, mid_y + (peak / 2.0f) * size.height);
+ cairo_line_to(cr, i * scale, mid_y + ((peak / 2.0f) * size.height));
}
// Continue through bottom peaks
for (int i = n_peaks - 1; i >= 0; --i) {
const float peak = peaks[i];
- cairo_line_to(cr, i * scale, mid_y - (peak / 2.0f) * size.height);
+ cairo_line_to(cr, i * scale, mid_y - ((peak / 2.0f) * size.height));
}
// Close shape
@@ -421,7 +421,7 @@ ui_hide(LV2UI_Handle handle)
static int
ui_idle(LV2UI_Handle handle)
{
- SamplerUI* ui = (SamplerUI*)handle;
+ const SamplerUI* ui = (const SamplerUI*)handle;
if (ui->window) {
gtk_main_iteration_do(false);
}
@@ -451,8 +451,7 @@ static const LV2UI_Descriptor descriptor = {SAMPLER_UI_URI,
port_event,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2UI_Descriptor*
+LV2_SYMBOL_EXPORT const LV2UI_Descriptor*
lv2ui_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-sampler.lv2/uris.h b/plugins/eg-sampler.lv2/uris.h
index f934390..9922f51 100644
--- a/plugins/eg-sampler.lv2/uris.h
+++ b/plugins/eg-sampler.lv2/uris.h
@@ -4,13 +4,13 @@
#ifndef SAMPLER_URIS_H
#define SAMPLER_URIS_H
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/midi/midi.h"
-#include "lv2/parameters/parameters.h"
-#include "lv2/patch/patch.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/midi/midi.h>
+#include <lv2/parameters/parameters.h>
+#include <lv2/patch/patch.h>
+#include <lv2/urid/urid.h>
#include <stdint.h>
#include <stdio.h>
@@ -164,7 +164,7 @@ read_set_file(const SamplerURIs* uris, const LV2_Atom_Object* obj)
return NULL;
}
- return (const char*)LV2_ATOM_BODY_CONST(value);
+ return (const char*)&value[1];
}
#endif /* SAMPLER_URIS_H */
diff --git a/plugins/eg-scope.lv2/examploscope.c b/plugins/eg-scope.lv2/examploscope.c
index e3bb53b..5cdb610 100644
--- a/plugins/eg-scope.lv2/examploscope.c
+++ b/plugins/eg-scope.lv2/examploscope.c
@@ -2,17 +2,17 @@
// Copyright 2013 Robin Gareus <robin@gareus.org>
// SPDX-License-Identifier: ISC
-#include "./uris.h"
-
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/core/lv2_util.h"
-#include "lv2/log/log.h"
-#include "lv2/log/logger.h"
-#include "lv2/state/state.h"
-#include "lv2/urid/urid.h"
+#include "uris.h"
+
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/core/lv2_util.h>
+#include <lv2/log/log.h>
+#include <lv2/log/logger.h>
+#include <lv2/state/state.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -169,11 +169,11 @@ connect_port(LV2_Handle handle, uint32_t port, void* data)
http://lv2plug.in/ns/ext/atom#Float[Float].
*/
static void
-tx_rawaudio(LV2_Atom_Forge* forge,
- ScoLV2URIs* uris,
- const int32_t channel,
- const size_t n_samples,
- const float* data)
+tx_rawaudio(LV2_Atom_Forge* forge,
+ const ScoLV2URIs* uris,
+ const int32_t channel,
+ const size_t n_samples,
+ const float* data)
{
LV2_Atom_Forge_Frame frame;
@@ -398,8 +398,7 @@ static const LV2_Descriptor descriptor_stereo = {SCO_URI "#Stereo",
cleanup,
extension_data};
-LV2_SYMBOL_EXPORT
-const LV2_Descriptor*
+LV2_SYMBOL_EXPORT const LV2_Descriptor*
lv2_descriptor(uint32_t index)
{
switch (index) {
diff --git a/plugins/eg-scope.lv2/examploscope_ui.c b/plugins/eg-scope.lv2/examploscope_ui.c
index 1c82d44..4f366aa 100644
--- a/plugins/eg-scope.lv2/examploscope_ui.c
+++ b/plugins/eg-scope.lv2/examploscope_ui.c
@@ -1,14 +1,14 @@
// Copyright 2013 Robin Gareus <robin@gareus.org>
// SPDX-License-Identifier: ISC
-#include "./uris.h"
+#include "uris.h"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/core/lv2.h"
-#include "lv2/ui/ui.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/core/lv2.h>
+#include <lv2/ui/ui.h>
+#include <lv2/urid/urid.h>
#include <cairo.h>
#include <gdk/gdk.h>
@@ -110,6 +110,8 @@ send_ui_state(LV2UI_Handle handle)
lv2_atom_total_size(msg),
ui->uris.atom_eventTransfer,
msg);
+
+ lv2_atom_forge_set_buffer(&ui->forge, NULL, 0);
}
/** Notify backend that UI is closed. */
@@ -134,6 +136,8 @@ send_ui_disable(LV2UI_Handle handle)
lv2_atom_total_size(msg),
ui->uris.atom_eventTransfer,
msg);
+
+ lv2_atom_forge_set_buffer(&ui->forge, NULL, 0);
}
/**
@@ -167,7 +171,7 @@ send_ui_enable(LV2UI_Handle handle)
static gboolean
on_cfg_changed(GtkWidget* widget, gpointer data)
{
- EgScopeUI* ui = (EgScopeUI*)data;
+ const EgScopeUI* ui = (const EgScopeUI*)data;
if (!ui->updating) {
// Only send UI state if the change is from user interaction
send_ui_state(data);
@@ -206,6 +210,7 @@ on_expose_event(GtkWidget* widget, GdkEventExpose* ev, gpointer data)
assert(start < DAWIDTH);
assert(end <= DAWIDTH);
assert(start < end);
+ assert(ui->n_channels <= 2U);
for (uint32_t c = 0; c < ui->n_channels; ++c) {
ScoChan* chn = &ui->chn[c];
@@ -219,10 +224,10 @@ on_expose_event(GtkWidget* widget, GdkEventExpose* ev, gpointer data)
* - (DAHEIGHT / 2) * (VAL) * (GAIN)
* )
*/
- const float chn_y_offset = DAHEIGHT * c + DAHEIGHT * 0.5f - 0.5f;
- const float chn_y_scale = DAHEIGHT * 0.5f * gain;
+ const float chn_y_offset = (DAHEIGHT * c) + (DAHEIGHT * 0.5f) - 0.5f;
+ const float chn_y_scale = (DAHEIGHT * 0.5f) * gain;
-#define CYPOS(VAL) (chn_y_offset - (VAL)*chn_y_scale)
+#define CYPOS(VAL) (chn_y_offset - ((VAL) * chn_y_scale))
cairo_save(cr);
@@ -292,15 +297,15 @@ on_expose_event(GtkWidget* widget, GdkEventExpose* ev, gpointer data)
// Channel separator
if (c > 0) {
cairo_set_source_rgba(cr, .5, .5, .5, 1.0);
- cairo_move_to(cr, 0, DAHEIGHT * c - .5);
- cairo_line_to(cr, DAWIDTH, DAHEIGHT * c - .5);
+ cairo_move_to(cr, 0, (DAHEIGHT * c) - .5);
+ cairo_line_to(cr, DAWIDTH, (DAHEIGHT * c) - .5);
cairo_stroke(cr);
}
// Zero scale line
cairo_set_source_rgba(cr, .3, .3, .7, .5);
- cairo_move_to(cr, 0, DAHEIGHT * (c + .5) - .5);
- cairo_line_to(cr, DAWIDTH, DAHEIGHT * (c + .5) - .5);
+ cairo_move_to(cr, 0, (DAHEIGHT * (c + .5)) - .5);
+ cairo_line_to(cr, DAWIDTH, (DAHEIGHT * (c + .5)) - .5);
cairo_stroke(cr);
}
@@ -327,12 +332,12 @@ on_expose_event(GtkWidget* widget, GdkEventExpose* ev, gpointer data)
and https://github.com/x42/sisco.lv2
*/
static int
-process_channel(EgScopeUI* ui,
- ScoChan* chn,
- const size_t n_elem,
- float const* data,
- uint32_t* idx_start,
- uint32_t* idx_end)
+process_channel(const EgScopeUI* ui,
+ ScoChan* chn,
+ const size_t n_elem,
+ float const* data,
+ uint32_t* idx_start,
+ uint32_t* idx_end)
{
int overflow = 0;
*idx_start = chn->idx;
@@ -655,8 +660,7 @@ static const LV2UI_Descriptor descriptor = {SCO_URI "#ui",
port_event,
NULL};
-LV2_SYMBOL_EXPORT
-const LV2UI_Descriptor*
+LV2_SYMBOL_EXPORT const LV2UI_Descriptor*
lv2ui_descriptor(uint32_t index)
{
return index == 0 ? &descriptor : NULL;
diff --git a/plugins/eg-scope.lv2/meson.build b/plugins/eg-scope.lv2/meson.build
index 773a3d0..84e17ba 100644
--- a/plugins/eg-scope.lv2/meson.build
+++ b/plugins/eg-scope.lv2/meson.build
@@ -6,10 +6,12 @@ ui_sources = files('examploscope_ui.c')
bundle_name = 'eg-scope.lv2'
data_filenames = ['manifest.ttl.in', 'examploscope.ttl.in']
-gtk2_dep = dependency('gtk+-2.0',
- include_type: 'system',
- required: get_option('plugins'),
- version: '>= 2.18.0')
+gtk2_dep = dependency(
+ 'gtk+-2.0',
+ include_type: 'system',
+ required: get_option('plugins'),
+ version: '>= 2.18.0',
+)
module = shared_library(
'examploscope',
@@ -17,6 +19,7 @@ module = shared_library(
c_args: c_suppressions,
dependencies: [lv2_dep, m_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
@@ -25,7 +28,7 @@ module = shared_library(
config = configuration_data(
{
'LIB_EXT': '.' + module.full_path().split('.')[-1],
- }
+ },
)
foreach filename : data_filenames
@@ -53,6 +56,7 @@ if gtk2_dep.found()
c_args: c_suppressions,
dependencies: [lv2_dep, gtk2_dep],
gnu_symbol_visibility: 'hidden',
+ implicit_include_directories: false,
install: true,
install_dir: lv2dir / bundle_name,
name_prefix: '',
diff --git a/plugins/eg-scope.lv2/uris.h b/plugins/eg-scope.lv2/uris.h
index e2becae..d9d94be 100644
--- a/plugins/eg-scope.lv2/uris.h
+++ b/plugins/eg-scope.lv2/uris.h
@@ -4,9 +4,9 @@
#ifndef SCO_URIS_H
#define SCO_URIS_H
-#include "lv2/atom/atom.h"
-#include "lv2/parameters/parameters.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/parameters/parameters.h>
+#include <lv2/urid/urid.h>
#define SCO_URI "http://lv2plug.in/plugins/eg-scope"
@@ -18,7 +18,7 @@ typedef struct {
LV2_URID atom_eventTransfer;
LV2_URID param_sampleRate;
- /* URIs defined for this plugin. It is best to re-use existing URIs as
+ /* URIs defined for this plugin. It is best to reuse existing URIs as
much as possible, but plugins may need more vocabulary specific to their
needs. These are used as types and properties for plugin:UI
communication, as well as for saving state. */
diff --git a/plugins/meson.build b/plugins/meson.build
index 098f585..ff70af1 100644
--- a/plugins/meson.build
+++ b/plugins/meson.build
@@ -18,8 +18,8 @@ if not get_option('docs').disabled()
asciidoc = find_program('asciidoc', required: get_option('docs'))
if asciidoc.found()
- book_inputs = files(
- 'README.txt',
+ book_inputs = files('README.txt')
+ book_inputs += files(
'eg-amp.lv2/README.txt',
'eg-amp.lv2/amp.c',
'eg-amp.lv2/amp.ttl',
diff --git a/schemas.lv2/dcterms.ttl b/schemas.lv2/dcterms.ttl
index f6a5d06..d8fd196 100644
--- a/schemas.lv2/dcterms.ttl
+++ b/schemas.lv2/dcterms.ttl
@@ -337,4 +337,3 @@ dcterms:title
rdfs:isDefinedBy dcterms: ;
rdfs:label "title"@en-us ;
rdfs:range rdfs:Literal .
-
diff --git a/schemas.lv2/doap.ttl b/schemas.lv2/doap.ttl
index b806d31..160cda5 100644
--- a/schemas.lv2/doap.ttl
+++ b/schemas.lv2/doap.ttl
@@ -706,4 +706,3 @@ doap:wiki
"wiki"@en ,
"wiki"@es ,
"wiki"@fr .
-
diff --git a/schemas.lv2/foaf.ttl b/schemas.lv2/foaf.ttl
index 17dcc13..5aec41e 100644
--- a/schemas.lv2/foaf.ttl
+++ b/schemas.lv2/foaf.ttl
@@ -609,4 +609,3 @@ foaf:yahooChatID
rdfs:label "Yahoo chat ID" ;
rdfs:range rdfs:Literal ;
rdfs:subPropertyOf foaf:nick .
-
diff --git a/schemas.lv2/manifest.ttl b/schemas.lv2/manifest.ttl
index dd41f58..813d254 100644
--- a/schemas.lv2/manifest.ttl
+++ b/schemas.lv2/manifest.ttl
@@ -28,4 +28,3 @@ rdfs:
<http://www.w3.org/2001/XMLSchema#>
a owl:Ontology ;
rdfs:seeAlso <xsd.ttl> .
-
diff --git a/schemas.lv2/owl.ttl b/schemas.lv2/owl.ttl
index 26bd0e8..e5f4fa2 100644
--- a/schemas.lv2/owl.ttl
+++ b/schemas.lv2/owl.ttl
@@ -618,4 +618,3 @@ owl:withRestrictions
rdfs:isDefinedBy owl: ;
rdfs:label "with restrictions" ;
rdfs:range rdf:List .
-
diff --git a/schemas.lv2/rdf.ttl b/schemas.lv2/rdf.ttl
index cb758cb..0fdeed0 100644
--- a/schemas.lv2/rdf.ttl
+++ b/schemas.lv2/rdf.ttl
@@ -126,4 +126,3 @@ rdf:value
rdfs:isDefinedBy rdf: ;
rdfs:label "value" ;
rdfs:range rdfs:Resource .
-
diff --git a/schemas.lv2/rdfs.ttl b/schemas.lv2/rdfs.ttl
index 10cfbb7..09ba907 100644
--- a/schemas.lv2/rdfs.ttl
+++ b/schemas.lv2/rdfs.ttl
@@ -121,4 +121,3 @@ rdfs:subPropertyOf
rdfs:isDefinedBy rdfs: ;
rdfs:label "sub-property of" ;
rdfs:range rdf:Property .
-
diff --git a/schemas.lv2/xsd.ttl b/schemas.lv2/xsd.ttl
index cb98363..38bae58 100644
--- a/schemas.lv2/xsd.ttl
+++ b/schemas.lv2/xsd.ttl
@@ -45,7 +45,8 @@ xsd:byte
owl:withRestrictions (
[
xsd:maxInclusive "127"^^xsd:byte
- ] [
+ ]
+ [
xsd:minInclusive "-128"^^xsd:byte
]
) .
@@ -99,7 +100,8 @@ xsd:duration
owl:withRestrictions (
[
xsd:pattern "-?P([0-9]+Y)?([0-9]+M)?([0-9]+D)?(T([0-9]+H)?([0-9]+M)?([0-9]+(\\.[0-9]+)?S)?)?"
- ] [
+ ]
+ [
xsd:whiteSpace "collapse"
]
) .
@@ -112,7 +114,8 @@ xsd:float
owl:withRestrictions (
[
xsd:pattern "-?INF|NaN|[+-]?(([0-9]+[.]?[0-9]*)|([0-9]*[.]?[0-9]+))([eE][-+]?[0-9]+)?"
- ] [
+ ]
+ [
xsd:whiteSpace "collapse"
]
) .
@@ -142,7 +145,8 @@ xsd:int
owl:withRestrictions (
[
xsd:maxInclusive "2147483647"^^xsd:int
- ] [
+ ]
+ [
xsd:minInclusive "-2147483648"^^xsd:int
]
) .
@@ -154,7 +158,8 @@ xsd:integer
owl:withRestrictions (
[
xsd:pattern "[-+]?[0-9]+"
- ] [
+ ]
+ [
xsd:fractionDigits 0
]
) .
@@ -176,7 +181,8 @@ xsd:long
owl:withRestrictions (
[
xsd:maxInclusive "9223372036854775807"^^xsd:long
- ] [
+ ]
+ [
xsd:minInclusive "-9223372036854775808"^^xsd:long
]
) .
@@ -222,7 +228,8 @@ xsd:nonNegativeInteger
owl:withRestrictions (
[
xsd:pattern "[+]?[0-9]+"
- ] [
+ ]
+ [
xsd:minInclusive 0
]
) .
@@ -234,7 +241,8 @@ xsd:nonPositiveInteger
owl:withRestrictions (
[
xsd:pattern "(0|-[0-9]+)"
- ] [
+ ]
+ [
xsd:maxInclusive 0
]
) .
@@ -258,7 +266,8 @@ xsd:positiveInteger
owl:withRestrictions (
[
xsd:pattern "[+]?[0-9]*[1-9]+[0-9]*"
- ] [
+ ]
+ [
xsd:minInclusive 1
]
) .
@@ -270,7 +279,8 @@ xsd:short
owl:withRestrictions (
[
xsd:maxInclusive "32767"^^xsd:short
- ] [
+ ]
+ [
xsd:minInclusive "-32768"^^xsd:short
]
) .
@@ -351,4 +361,3 @@ xsd:whiteSpace
]
)
] .
-
diff --git a/scripts/lv2_check_specification.py b/scripts/lv2_check_specification.py
index 0cd296e..41611ef 100755
--- a/scripts/lv2_check_specification.py
+++ b/scripts/lv2_check_specification.py
@@ -150,8 +150,8 @@ def _check_specification(checker, spec_dir, is_stable=False):
# Get all subjects that have an explicit rdf:type
typed_subjects = set()
- for typing in model.triples([None, rdf.type, None]):
- typed_subjects.add(typing[0])
+ for subject in model.subjects(rdf.type, None):
+ typed_subjects.add(subject)
# Check that all named and typed resources have labels and comments
for subject in typed_subjects:
diff --git a/test/.clang-tidy b/test/.clang-tidy
index ca868be..ef4d61f 100644
--- a/test/.clang-tidy
+++ b/test/.clang-tidy
@@ -1,26 +1,16 @@
-# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# Copyright 2020-2025 David Robillard <d@drobilla.net>
# SPDX-License-Identifier: 0BSD OR ISC
Checks: >
- *,
-*-else-after-return,
- -*-magic-numbers,
- -altera-*,
-bugprone-easily-swappable-parameters,
- -bugprone-macro-parentheses,
+ -bugprone-multi-level-implicit-pointer-conversion,
-bugprone-suspicious-include,
- -llvm-header-guard,
+ -cert-err33-c,
+ -clang-diagnostic-unused-parameter,
+ -cppcoreguidelines-avoid-non-const-global-variables,
-llvmlibc-implementation-in-namespace,
- -llvmlibc-restrict-system-libc-headers,
+ -misc-unused-parameters,
-modernize-use-trailing-return-type,
- -performance-no-int-to-ptr,
-readability-function-cognitive-complexity,
- -readability-identifier-length,
-WarningsAsErrors: '*'
-HeaderFilterRegex: '.*'
-FormatStyle: file
-CheckOptions:
- - key: hicpp-uppercase-literal-suffix.NewSuffixes
- value: L;U;f
- - key: readability-uppercase-literal-suffix.NewSuffixes
- value: L;U;f
+InheritParentConfig: true
diff --git a/test/atom_test_utils.c b/test/atom_test_utils.c
index e7d45d0..5c313a5 100644
--- a/test/atom_test_utils.c
+++ b/test/atom_test_utils.c
@@ -1,12 +1,15 @@
// Copyright 2012-2018 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/log/log.h"
-#include "lv2/urid/urid.h"
+#undef NDEBUG
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/log/log.h>
+#include <lv2/urid/urid.h>
+
+#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
@@ -32,8 +35,11 @@ urid_map(LV2_URID_Map_Handle handle, const char* uri)
}
}
- uris = (char**)realloc(uris, ++n_uris * sizeof(char*));
- uris[n_uris - 1] = copy_string(uri);
+ char** const new_uris = (char**)realloc(uris, (n_uris + 1) * sizeof(char*));
+ assert(new_uris);
+
+ uris = new_uris;
+ uris[n_uris++] = copy_string(uri);
return n_uris;
}
diff --git a/test/cpp/.clang-tidy b/test/cpp/.clang-tidy
new file mode 100644
index 0000000..1fe1f27
--- /dev/null
+++ b/test/cpp/.clang-tidy
@@ -0,0 +1,27 @@
+# Copyright 2020-2025 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+ -*-avoid-c-arrays,
+ -*-deprecated-headers,
+ -*-no-malloc,
+ -*-use-auto,
+ -bugprone-reserved-identifier,
+ -cert-dcl37-c,
+ -cert-dcl50-cpp,
+ -cert-dcl51-cpp,
+ -cppcoreguidelines-macro-usage,
+ -cppcoreguidelines-owning-memory,
+ -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
+ -cppcoreguidelines-pro-bounds-pointer-arithmetic,
+ -cppcoreguidelines-pro-type-cstyle-cast,
+ -cppcoreguidelines-pro-type-vararg,
+ -hicpp-no-array-decay,
+ -hicpp-use-nullptr,
+ -hicpp-vararg,
+ -llvmlibc-callee-namespace,
+ -modernize-use-nullptr,
+ -modernize-use-using,
+ -performance-enum-size,
+ -readability-implicit-bool-conversion,
+InheritParentConfig: true
diff --git a/test/cpp/test_build.cpp b/test/cpp/test_build.cpp
new file mode 100644
index 0000000..73868a4
--- /dev/null
+++ b/test/cpp/test_build.cpp
@@ -0,0 +1,54 @@
+// Copyright 2022 David Robillard <d@drobilla.net>
+// SPDX-License-Identifier: ISC
+
+#if defined(__clang__)
+_Pragma("clang diagnostic push")
+_Pragma("clang diagnostic ignored \"-Wold-style-cast\"")
+_Pragma("clang diagnostic ignored \"-Wzero-as-null-pointer-constant\"")
+#elif defined(__GNUC__)
+_Pragma("GCC diagnostic push")
+_Pragma("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+#endif
+
+#include <lv2/atom/atom.h> // IWYU pragma: keep
+#include <lv2/atom/forge.h> // IWYU pragma: keep
+#include <lv2/atom/util.h> // IWYU pragma: keep
+#include <lv2/buf-size/buf-size.h> // IWYU pragma: keep
+#include <lv2/core/attributes.h> // IWYU pragma: keep
+#include <lv2/core/lv2.h> // IWYU pragma: keep
+#include <lv2/core/lv2_util.h> // IWYU pragma: keep
+#include <lv2/data-access/data-access.h> // IWYU pragma: keep
+#include <lv2/dynmanifest/dynmanifest.h> // IWYU pragma: keep
+#include <lv2/event/event-helpers.h> // IWYU pragma: keep
+#include <lv2/event/event.h> // IWYU pragma: keep
+#include <lv2/instance-access/instance-access.h> // IWYU pragma: keep
+#include <lv2/log/log.h> // IWYU pragma: keep
+#include <lv2/log/logger.h> // IWYU pragma: keep
+#include <lv2/midi/midi.h> // IWYU pragma: keep
+#include <lv2/morph/morph.h> // IWYU pragma: keep
+#include <lv2/options/options.h> // IWYU pragma: keep
+#include <lv2/parameters/parameters.h> // IWYU pragma: keep
+#include <lv2/patch/patch.h> // IWYU pragma: keep
+#include <lv2/port-groups/port-groups.h> // IWYU pragma: keep
+#include <lv2/port-props/port-props.h> // IWYU pragma: keep
+#include <lv2/presets/presets.h> // IWYU pragma: keep
+#include <lv2/resize-port/resize-port.h> // IWYU pragma: keep
+#include <lv2/state/state.h> // IWYU pragma: keep
+#include <lv2/time/time.h> // IWYU pragma: keep
+#include <lv2/ui/ui.h> // IWYU pragma: keep
+#include <lv2/units/units.h> // IWYU pragma: keep
+#include <lv2/uri-map/uri-map.h> // IWYU pragma: keep
+#include <lv2/urid/urid.h> // IWYU pragma: keep
+#include <lv2/worker/worker.h> // IWYU pragma: keep
+
+int
+main()
+{
+ return 0;
+}
+
+#if defined(__clang__)
+_Pragma("clang diagnostic pop")
+#elif defined(__GNUC__)
+_Pragma("GCC diagnostic pop")
+#endif
diff --git a/test/headers/.clang-tidy b/test/headers/.clang-tidy
new file mode 100644
index 0000000..bf971cc
--- /dev/null
+++ b/test/headers/.clang-tidy
@@ -0,0 +1,22 @@
+# Copyright 2020-2024 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+Checks: >
+ *,
+ -*-macro-to-enum,
+ -*-magic-numbers,
+ -altera-*,
+ -bugprone-assignment-in-if-condition,
+ -bugprone-easily-swappable-parameters,
+ -bugprone-macro-parentheses,
+ -llvmlibc-restrict-system-libc-headers,
+ -performance-no-int-to-ptr,
+ -readability-identifier-length,
+CheckOptions:
+ - key: hicpp-uppercase-literal-suffix.NewSuffixes
+ value: L;U;f
+ - key: readability-uppercase-literal-suffix.NewSuffixes
+ value: L;U;f
+FormatStyle: file
+HeaderFilterRegex: 'lv2/.*\.h'
+WarningsAsErrors: '*'
diff --git a/test/headers/meson.build b/test/headers/meson.build
new file mode 100644
index 0000000..89ee4b8
--- /dev/null
+++ b/test/headers/meson.build
@@ -0,0 +1,69 @@
+# Copyright 2020-2022 David Robillard <d@drobilla.net>
+# SPDX-License-Identifier: 0BSD OR ISC
+
+header_c_suppressions = []
+
+if get_option('warning_level') == 'everything'
+ if cc.get_id() == 'clang'
+ header_c_suppressions += [
+ '-Wno-cast-align',
+ '-Wno-cast-qual',
+ '-Wno-declaration-after-statement',
+ '-Wno-padded',
+ '-Wno-unsafe-buffer-usage',
+ ]
+
+ if not meson.is_cross_build()
+ header_c_suppressions += [
+ '-Wno-poison-system-directories',
+ ]
+ endif
+
+ if host_machine.system() == 'windows'
+ header_c_suppressions += [
+ '-Wno-format-nonliteral',
+ ]
+ endif
+
+ elif cc.get_id() == 'gcc'
+ header_c_suppressions += [
+ '-Wno-cast-align',
+ '-Wno-cast-qual',
+ '-Wno-padded',
+ '-Wno-sign-conversion',
+ '-Wno-suggest-attribute=format',
+ '-Wno-unused-const-variable',
+ ]
+
+ if host_machine.system() == 'windows'
+ header_c_suppressions += [
+ '-Wno-sign-conversion',
+ ]
+ endif
+
+ elif cc.get_id() == 'msvc'
+ header_c_suppressions += [
+ '/wd4820', # padding added after construct
+ ]
+ endif
+endif
+
+if cc.get_id() == 'clang'
+ header_c_suppressions += [
+ '-Wno-nullability-extension',
+ ]
+endif
+
+header_c_suppressions = cc.get_supported_arguments(header_c_suppressions)
+
+test(
+ 'headers',
+ executable(
+ 'test_headers',
+ files('test_headers.c'),
+ c_args: header_c_suppressions,
+ dependencies: [lv2_dep],
+ implicit_include_directories: false,
+ ),
+ suite: 'unit',
+)
diff --git a/test/headers/test_headers.c b/test/headers/test_headers.c
new file mode 100644
index 0000000..d62b000
--- /dev/null
+++ b/test/headers/test_headers.c
@@ -0,0 +1,42 @@
+// Copyright 2022 David Robillard <d@drobilla.net>
+// SPDX-License-Identifier: ISC
+
+#include <lv2/atom/atom.h> // IWYU pragma: keep
+#include <lv2/atom/forge.h> // IWYU pragma: keep
+#include <lv2/atom/util.h> // IWYU pragma: keep
+#include <lv2/buf-size/buf-size.h> // IWYU pragma: keep
+#include <lv2/core/attributes.h> // IWYU pragma: keep
+#include <lv2/core/lv2.h> // IWYU pragma: keep
+#include <lv2/core/lv2_util.h> // IWYU pragma: keep
+#include <lv2/data-access/data-access.h> // IWYU pragma: keep
+#include <lv2/dynmanifest/dynmanifest.h> // IWYU pragma: keep
+#include <lv2/event/event-helpers.h> // IWYU pragma: keep
+#include <lv2/event/event.h> // IWYU pragma: keep
+#include <lv2/instance-access/instance-access.h> // IWYU pragma: keep
+#include <lv2/log/log.h> // IWYU pragma: keep
+#include <lv2/log/logger.h> // IWYU pragma: keep
+#include <lv2/midi/midi.h> // IWYU pragma: keep
+#include <lv2/morph/morph.h> // IWYU pragma: keep
+#include <lv2/options/options.h> // IWYU pragma: keep
+#include <lv2/parameters/parameters.h> // IWYU pragma: keep
+#include <lv2/patch/patch.h> // IWYU pragma: keep
+#include <lv2/port-groups/port-groups.h> // IWYU pragma: keep
+#include <lv2/port-props/port-props.h> // IWYU pragma: keep
+#include <lv2/presets/presets.h> // IWYU pragma: keep
+#include <lv2/resize-port/resize-port.h> // IWYU pragma: keep
+#include <lv2/state/state.h> // IWYU pragma: keep
+#include <lv2/time/time.h> // IWYU pragma: keep
+#include <lv2/ui/ui.h> // IWYU pragma: keep
+#include <lv2/units/units.h> // IWYU pragma: keep
+#include <lv2/uri-map/uri-map.h> // IWYU pragma: keep
+#include <lv2/urid/urid.h> // IWYU pragma: keep
+#include <lv2/worker/worker.h> // IWYU pragma: keep
+
+#ifdef __GNUC__
+__attribute__((const))
+#endif
+int
+main(void)
+{
+ return 0;
+}
diff --git a/test/meson.build b/test/meson.build
index 092499a..cddb05a 100644
--- a/test/meson.build
+++ b/test/meson.build
@@ -5,51 +5,61 @@
# Data #
########
-# Check for spelling errors
-codespell = find_program('codespell', required: get_option('tests'))
-if codespell.found()
- ignore = [
- lv2_source_root / 'doc' / 'style' / 'pygments.css',
- lv2_source_root / 'lv2specgen' / 'DTD',
- lv2_source_root / 'schemas.lv2' / 'doap.ttl',
- ]
+if get_option('lint')
+ # Check for spelling errors
+ codespell = find_program('codespell', required: get_option('tests'))
+ if codespell.found()
+ ignore = [
+ lv2_source_root / 'doc' / 'style' / 'pygments.css',
+ lv2_source_root / 'lv2specgen' / 'DTD',
+ lv2_source_root / 'schemas.lv2' / 'doap.ttl',
+ ]
- test(
- 'codespell',
- codespell,
- args: [
- '-d',
- '-q', '3',
- '-S', ','.join(ignore),
- lv2_source_root / 'doc',
- lv2_source_root / 'lv2',
- lv2_source_root / 'lv2specgen',
- lv2_source_root / 'plugins',
- lv2_source_root / 'schemas.lv2',
- ],
- suite: 'data',
- )
-endif
+ test(
+ 'codespell',
+ codespell,
+ args: [
+ '-d',
+ ['-q', '3'],
+ ['-S', ','.join(ignore)],
+ lv2_source_root / 'doc',
+ lv2_source_root / 'lv2',
+ lv2_source_root / 'lv2specgen',
+ lv2_source_root / 'plugins',
+ lv2_source_root / 'schemas.lv2',
+ ],
+ suite: 'data',
+ )
+ endif
-# Check that specification data is strictly formatted
-serdi = find_program('serdi', required: get_option('tests'))
-native_build = not meson.is_cross_build() and host_machine.system() != 'windows'
-if serdi.found() and native_build
- lv2_check_syntax = files(lv2_source_root / 'scripts' / 'lv2_check_syntax.py')
+ # Check that specification data is strictly formatted
+ serdi = find_program(
+ 'serdi',
+ required: get_option('tests'),
+ version: '>= 0.32.0',
+ )
+ native_build = (
+ not meson.is_cross_build()
+ and host_machine.system() != 'windows'
+ )
+ if serdi.found() and native_build
+ lv2_check_syntax = files(
+ lv2_source_root / 'scripts' / 'lv2_check_syntax.py',
+ )
- test('syntax',
- lv2_check_syntax,
- args: ['--serdi', serdi.full_path()] + spec_files + schema_data,
- suite: 'data')
-endif
+ test(
+ 'syntax',
+ lv2_check_syntax,
+ args: ['--serdi', serdi.full_path()] + spec_files + schema_data,
+ suite: 'data',
+ )
+ endif
-# Check that specification data validates
-sord_validate = find_program('sord_validate', required: get_option('tests'))
-if sord_validate.found()
- test('valid',
- sord_validate,
- args: spec_files + schema_data,
- suite: 'data')
+ # Check that specification data validates
+ sord_validate = find_program('sord_validate', required: get_option('tests'))
+ if sord_validate.found()
+ test('valid', sord_validate, args: spec_files + schema_data, suite: 'data')
+ endif
endif
########
@@ -57,36 +67,38 @@ endif
########
# Check that all the headers compile cleanly in C
-test('c',
- executable(
- 'test_build_c',
- files('test_build.c'),
- c_args: c_suppressions,
- dependencies: lv2_dep,
- ),
- suite: 'build')
+test(
+ 'c',
+ executable(
+ 'test_build_c',
+ files('test_build.c'),
+ c_args: c_suppressions,
+ dependencies: [lv2_dep],
+ implicit_include_directories: false,
+ ),
+ suite: 'build',
+)
# Check that all the headers compile cleanly in C++
if is_variable('cpp')
- test('cpp',
- executable(
- 'test_build_cpp',
- files('test_build.cpp'),
- cpp_args: cpp_suppressions,
- dependencies: lv2_dep,
- ),
- suite: 'build')
+ test(
+ 'cpp',
+ executable(
+ 'test_build_cpp',
+ files('cpp/test_build.cpp'),
+ cpp_args: cpp_suppressions,
+ dependencies: [lv2_dep],
+ implicit_include_directories: false,
+ ),
+ suite: 'build',
+ )
endif
##########
# Python #
##########
-if get_option('strict')
- flake8 = find_program('flake8', required: get_option('tests'))
- pylint = find_program('pylint', required: get_option('tests'))
- black = find_program('black', required: get_option('tests'))
-
+if get_option('lint')
# Scripts that don't pass with pylint
lax_python_scripts = files(
'../lv2specgen/lv2docgen.py',
@@ -98,20 +110,46 @@ if get_option('strict')
all_python_scripts = lax_python_scripts + strict_python_scripts
- if is_variable('black') and black.found()
+ # Check script formatting
+ black = find_program('black', required: get_option('tests'))
+ if black.found()
black_opts = ['-l', '79', '-q', '--check']
- test('black', black, args: black_opts + all_python_scripts, suite: 'scripts')
+ test(
+ 'black',
+ black,
+ args: black_opts + all_python_scripts,
+ suite: 'scripts',
+ )
endif
- if is_variable('flake8') and flake8.found()
+ # Check scripts for errors with flake8
+ flake8 = find_program('flake8', required: get_option('tests'))
+ if flake8.found()
test('flake8', flake8, args: all_python_scripts, suite: 'scripts')
endif
- if is_variable('pylint') and pylint.found()
- test('pylint', pylint, args: strict_python_scripts, suite: 'scripts')
+ # Check scripts for errors with pylint
+ pylint = find_program('pylint', required: get_option('tests'))
+ if pylint.found()
+ pymod = import('python')
+ lint_py = pymod.find_installation(
+ 'python3',
+ modules: ['pygments', 'rdflib'],
+ required: false,
+ )
+
+ if lint_py.found()
+ test('pylint', pylint, args: strict_python_scripts, suite: 'scripts')
+ endif
endif
endif
+###################
+# Header Warnings #
+###################
+
+subdir('headers')
+
##############
# Unit Tests #
##############
@@ -121,18 +159,22 @@ test_names = [
'forge_overflow',
]
+atom_test_suppressions = []
+if cc.get_id() == 'gcc'
+ atom_test_suppressions += ['-Wno-stringop-overflow']
+endif
+
# Build and run tests
-if not get_option('tests').disabled()
- foreach test_name : test_names
- test(
+foreach test_name : test_names
+ test(
+ test_name,
+ executable(
test_name,
- executable(
- test_name,
- files('test_@0@.c'.format(test_name)),
- c_args: c_suppressions,
- dependencies: lv2_dep,
- ),
- suite: 'unit',
- )
- endforeach
-endif
+ files('test_@0@.c'.format(test_name)),
+ c_args: c_suppressions + atom_test_suppressions,
+ dependencies: [lv2_dep],
+ implicit_include_directories: false,
+ ),
+ suite: 'unit',
+ )
+endforeach
diff --git a/test/test_atom.c b/test/test_atom.c
index beac05c..f88c4c7 100644
--- a/test/test_atom.c
+++ b/test/test_atom.c
@@ -3,10 +3,10 @@
#include "atom_test_utils.c"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/atom/util.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/atom/util.h>
+#include <lv2/urid/urid.h>
#include <stdbool.h>
#include <stdint.h>
@@ -101,7 +101,7 @@ main(void)
lv2_atom_forge_key(&forge, eg_path);
LV2_Atom_String* path = (LV2_Atom_String*)lv2_atom_forge_deref(
&forge, lv2_atom_forge_uri(&forge, pstr, pstr_len));
- char* pbody = (char*)LV2_ATOM_BODY(path);
+ char* pbody = (char*)&path[1];
if (!!strcmp(pbody, pstr)) {
return test_fail("%s != \"%s\"\n", pbody, pstr);
}
@@ -112,7 +112,7 @@ main(void)
lv2_atom_forge_key(&forge, eg_uri);
LV2_Atom_String* uri = (LV2_Atom_String*)lv2_atom_forge_deref(
&forge, lv2_atom_forge_uri(&forge, ustr, ustr_len));
- char* ubody = (char*)LV2_ATOM_BODY(uri);
+ char* ubody = (char*)&uri[1];
if (!!strcmp(ubody, ustr)) {
return test_fail("%s != \"%s\"\n", ubody, ustr);
}
@@ -130,7 +130,7 @@ main(void)
lv2_atom_forge_key(&forge, eg_string);
LV2_Atom_String* string = (LV2_Atom_String*)lv2_atom_forge_deref(
&forge, lv2_atom_forge_string(&forge, "hello", strlen("hello")));
- char* sbody = (char*)LV2_ATOM_BODY(string);
+ char* sbody = (char*)&string[1];
if (!!strcmp(sbody, "hello")) {
return test_fail("%s != \"hello\"\n", sbody);
}
@@ -144,7 +144,7 @@ main(void)
strlen("bonjour"),
0,
urid_map(NULL, "http://lexvo.org/id/term/fr")));
- char* lbody = (char*)LV2_ATOM_CONTENTS(LV2_Atom_Literal, literal);
+ char* lbody = (char*)&literal[1];
if (!!strcmp(lbody, "bonjour")) {
return test_fail("%s != \"bonjour\"\n", lbody);
}
@@ -186,7 +186,7 @@ main(void)
LV2_Atom_Vector* vector = (LV2_Atom_Vector*)lv2_atom_forge_deref(
&forge,
lv2_atom_forge_vector(&forge, sizeof(int32_t), forge.Int, 4, elems));
- void* vec_body = LV2_ATOM_CONTENTS(LV2_Atom_Vector, vector);
+ const void* vec_body = LV2_ATOM_CONTENTS_CONST(LV2_Atom_Vector, vector);
if (!!memcmp(elems, vec_body, sizeof(elems))) {
return test_fail("Corrupt vector\n");
}
diff --git a/test/test_build.c b/test/test_build.c
index bdc47f6..83a69df 100644
--- a/test/test_build.c
+++ b/test/test_build.c
@@ -1,36 +1,36 @@
// Copyright 2022 David Robillard <d@drobilla.net>
// SPDX-License-Identifier: ISC
-#include "lv2/atom/atom.h" // IWYU pragma: keep
-#include "lv2/atom/forge.h" // IWYU pragma: keep
-#include "lv2/atom/util.h" // IWYU pragma: keep
-#include "lv2/buf-size/buf-size.h" // IWYU pragma: keep
-#include "lv2/core/attributes.h" // IWYU pragma: keep
-#include "lv2/core/lv2.h" // IWYU pragma: keep
-#include "lv2/core/lv2_util.h" // IWYU pragma: keep
-#include "lv2/data-access/data-access.h" // IWYU pragma: keep
-#include "lv2/dynmanifest/dynmanifest.h" // IWYU pragma: keep
-#include "lv2/event/event-helpers.h" // IWYU pragma: keep
-#include "lv2/event/event.h" // IWYU pragma: keep
-#include "lv2/instance-access/instance-access.h" // IWYU pragma: keep
-#include "lv2/log/log.h" // IWYU pragma: keep
-#include "lv2/log/logger.h" // IWYU pragma: keep
-#include "lv2/midi/midi.h" // IWYU pragma: keep
-#include "lv2/morph/morph.h" // IWYU pragma: keep
-#include "lv2/options/options.h" // IWYU pragma: keep
-#include "lv2/parameters/parameters.h" // IWYU pragma: keep
-#include "lv2/patch/patch.h" // IWYU pragma: keep
-#include "lv2/port-groups/port-groups.h" // IWYU pragma: keep
-#include "lv2/port-props/port-props.h" // IWYU pragma: keep
-#include "lv2/presets/presets.h" // IWYU pragma: keep
-#include "lv2/resize-port/resize-port.h" // IWYU pragma: keep
-#include "lv2/state/state.h" // IWYU pragma: keep
-#include "lv2/time/time.h" // IWYU pragma: keep
-#include "lv2/ui/ui.h" // IWYU pragma: keep
-#include "lv2/units/units.h" // IWYU pragma: keep
-#include "lv2/uri-map/uri-map.h" // IWYU pragma: keep
-#include "lv2/urid/urid.h" // IWYU pragma: keep
-#include "lv2/worker/worker.h" // IWYU pragma: keep
+#include <lv2/atom/atom.h> // IWYU pragma: keep
+#include <lv2/atom/forge.h> // IWYU pragma: keep
+#include <lv2/atom/util.h> // IWYU pragma: keep
+#include <lv2/buf-size/buf-size.h> // IWYU pragma: keep
+#include <lv2/core/attributes.h> // IWYU pragma: keep
+#include <lv2/core/lv2.h> // IWYU pragma: keep
+#include <lv2/core/lv2_util.h> // IWYU pragma: keep
+#include <lv2/data-access/data-access.h> // IWYU pragma: keep
+#include <lv2/dynmanifest/dynmanifest.h> // IWYU pragma: keep
+#include <lv2/event/event-helpers.h> // IWYU pragma: keep
+#include <lv2/event/event.h> // IWYU pragma: keep
+#include <lv2/instance-access/instance-access.h> // IWYU pragma: keep
+#include <lv2/log/log.h> // IWYU pragma: keep
+#include <lv2/log/logger.h> // IWYU pragma: keep
+#include <lv2/midi/midi.h> // IWYU pragma: keep
+#include <lv2/morph/morph.h> // IWYU pragma: keep
+#include <lv2/options/options.h> // IWYU pragma: keep
+#include <lv2/parameters/parameters.h> // IWYU pragma: keep
+#include <lv2/patch/patch.h> // IWYU pragma: keep
+#include <lv2/port-groups/port-groups.h> // IWYU pragma: keep
+#include <lv2/port-props/port-props.h> // IWYU pragma: keep
+#include <lv2/presets/presets.h> // IWYU pragma: keep
+#include <lv2/resize-port/resize-port.h> // IWYU pragma: keep
+#include <lv2/state/state.h> // IWYU pragma: keep
+#include <lv2/time/time.h> // IWYU pragma: keep
+#include <lv2/ui/ui.h> // IWYU pragma: keep
+#include <lv2/units/units.h> // IWYU pragma: keep
+#include <lv2/uri-map/uri-map.h> // IWYU pragma: keep
+#include <lv2/urid/urid.h> // IWYU pragma: keep
+#include <lv2/worker/worker.h> // IWYU pragma: keep
int
main(void)
diff --git a/test/test_build.cpp b/test/test_build.cpp
deleted file mode 100644
index c8b2ca0..0000000
--- a/test/test_build.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-// Copyright 2022 David Robillard <d@drobilla.net>
-// SPDX-License-Identifier: ISC
-
-#if defined(__clang__)
-_Pragma("clang diagnostic push")
-_Pragma("clang diagnostic ignored \"-Wold-style-cast\"")
-_Pragma("clang diagnostic ignored \"-Wzero-as-null-pointer-constant\"")
-#elif defined(__GNUC__)
-_Pragma("GCC diagnostic push")
-_Pragma("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-#endif
-
-#include "lv2/atom/atom.h" // IWYU pragma: keep
-#include "lv2/atom/forge.h" // IWYU pragma: keep
-#include "lv2/atom/util.h" // IWYU pragma: keep
-#include "lv2/buf-size/buf-size.h" // IWYU pragma: keep
-#include "lv2/core/attributes.h" // IWYU pragma: keep
-#include "lv2/core/lv2.h" // IWYU pragma: keep
-#include "lv2/core/lv2_util.h" // IWYU pragma: keep
-#include "lv2/data-access/data-access.h" // IWYU pragma: keep
-#include "lv2/dynmanifest/dynmanifest.h" // IWYU pragma: keep
-#include "lv2/event/event-helpers.h" // IWYU pragma: keep
-#include "lv2/event/event.h" // IWYU pragma: keep
-#include "lv2/instance-access/instance-access.h" // IWYU pragma: keep
-#include "lv2/log/log.h" // IWYU pragma: keep
-#include "lv2/log/logger.h" // IWYU pragma: keep
-#include "lv2/midi/midi.h" // IWYU pragma: keep
-#include "lv2/morph/morph.h" // IWYU pragma: keep
-#include "lv2/options/options.h" // IWYU pragma: keep
-#include "lv2/parameters/parameters.h" // IWYU pragma: keep
-#include "lv2/patch/patch.h" // IWYU pragma: keep
-#include "lv2/port-groups/port-groups.h" // IWYU pragma: keep
-#include "lv2/port-props/port-props.h" // IWYU pragma: keep
-#include "lv2/presets/presets.h" // IWYU pragma: keep
-#include "lv2/resize-port/resize-port.h" // IWYU pragma: keep
-#include "lv2/state/state.h" // IWYU pragma: keep
-#include "lv2/time/time.h" // IWYU pragma: keep
-#include "lv2/ui/ui.h" // IWYU pragma: keep
-#include "lv2/units/units.h" // IWYU pragma: keep
-#include "lv2/uri-map/uri-map.h" // IWYU pragma: keep
-#include "lv2/urid/urid.h" // IWYU pragma: keep
-#include "lv2/worker/worker.h" // IWYU pragma: keep
-
-int
-main()
-{
- return 0;
-}
-
-#if defined(__clang__)
-_Pragma("clang diagnostic pop")
-#elif defined(__GNUC__)
-_Pragma("GCC diagnostic pop")
-#endif
diff --git a/test/test_forge_overflow.c b/test/test_forge_overflow.c
index 95e9b87..7e97ae4 100644
--- a/test/test_forge_overflow.c
+++ b/test/test_forge_overflow.c
@@ -3,9 +3,9 @@
#include "atom_test_utils.c"
-#include "lv2/atom/atom.h"
-#include "lv2/atom/forge.h"
-#include "lv2/urid/urid.h"
+#include <lv2/atom/atom.h>
+#include <lv2/atom/forge.h>
+#include <lv2/urid/urid.h>
#include <assert.h>
#include <stdint.h>
@@ -90,7 +90,7 @@ test_literal_overflow(void)
static int
test_sequence_overflow(void)
{
- static const size_t size = sizeof(LV2_Atom_Sequence) + 6 * sizeof(LV2_Atom);
+ static const size_t size = sizeof(LV2_Atom_Sequence) + (6 * sizeof(LV2_Atom));
LV2_URID_Map map = {NULL, urid_map};
// Test over a range that fails in the sequence header and event components
@@ -121,7 +121,7 @@ test_sequence_overflow(void)
static int
test_vector_head_overflow(void)
{
- static const size_t size = sizeof(LV2_Atom_Vector) + 3 * sizeof(LV2_Atom);
+ static const size_t size = sizeof(LV2_Atom_Vector) + (3 * sizeof(LV2_Atom));
LV2_URID_Map map = {NULL, urid_map};
// Test over a range that fails in the vector header and elements
@@ -154,7 +154,7 @@ test_vector_head_overflow(void)
static int
test_vector_overflow(void)
{
- static const size_t size = sizeof(LV2_Atom_Vector) + 3 * sizeof(LV2_Atom);
+ static const size_t size = sizeof(LV2_Atom_Vector) + (3 * sizeof(LV2_Atom));
static const int32_t vec[] = {1, 2, 3};
LV2_URID_Map map = {NULL, urid_map};
@@ -181,7 +181,7 @@ test_vector_overflow(void)
static int
test_tuple_overflow(void)
{
- static const size_t size = sizeof(LV2_Atom_Tuple) + 3 * sizeof(LV2_Atom);
+ static const size_t size = sizeof(LV2_Atom_Tuple) + (3 * sizeof(LV2_Atom));
LV2_URID_Map map = {NULL, urid_map};
// Test over a range that fails in the tuple header and elements