diff options
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 @@ -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 @@ -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 @@ -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 |