From: Peter Michael Green Date: Sat, 30 Nov 2019 15:26:20 +0000 (+0000) Subject: juce (5.4.4~repack0-3+rpi1) bullseye-staging; urgency=medium X-Git-Tag: archive/raspbian/5.4.5_ds0-1+rpi1~14 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=a5193c9d9da91ae14647c454607d52f9fce0364a;p=juce.git juce (5.4.4~repack0-3+rpi1) bullseye-staging; urgency=medium * Link with libatomic on armhf too. [dgit import unpatched juce 5.4.4~repack0-3+rpi1] --- a5193c9d9da91ae14647c454607d52f9fce0364a diff --cc debian/NEWS index 00000000,00000000..56aceb77 new file mode 100644 --- /dev/null +++ b/debian/NEWS @@@ -1,0 -1,0 +1,16 @@@ ++juce (5.2.0~repack-1) unstable; urgency=medium ++ ++ Removal of "libjuce(-dev)" - switch to "juce-modules-source" ++ ============================================================ ++ Starting with JUCE-5.2.0, Debian no longer ships libjuce(-dev) packages, as ++ they turned out to be not useful: the use case heavily favoured by upstream ++ is "static linking". ++ In order to keep JUCE useful for developers and packagers, we now suggest to ++ use the 'juce-modules-source' package instead. ++ ++ Breaking changes ++ ================ ++ See BREAKING-CHANGES.txt (in the 'juce-modules-sources') package for upstream ++ incompatibilities. ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 09 Nov 2017 13:46:52 +0100 diff --cc debian/Projucer.desktop index 00000000,00000000..2b2a8799 new file mode 100644 --- /dev/null +++ b/debian/Projucer.desktop @@@ -1,0 -1,0 +1,12 @@@ ++[Desktop Entry] ++Version=1.0 ++Name=Projucer ++GenericName=JUCE project management tool ++Comment=IDE for working with JUCE based projects ++Exec=/usr/bin/Projucer %f ++Icon=juce.png ++Categories=Development ++MimeType=applications/x-juce; ++Terminal=false ++Type=Application ++Keywords=Development;IDE;C++ diff --cc debian/README.Debian index 00000000,00000000..94066309 new file mode 100644 --- /dev/null +++ b/debian/README.Debian @@@ -1,0 -1,0 +1,80 @@@ ++JUCE for Debian ++=============== ++ ++upstream's preferred form of usage of JUCE is to include a verbatim copy of all ++used JUCE modules in your application. ++This is made explicit in the 'Projucer', JUCE's own software project ++management workbench, that will copy (or symlink, or include otherwise) the ++modules' source code into your project. ++ ++# Projucer for Debian ++ ++Installing the following packages will give you the 'Projucer' as Debian ++packages while keeping your embedded-module-code workflow: ++ - juce-tools (contains the Projucer) ++ - juce-modules-source (contains the source-code for the JUCE modules) ++ ++The 'Projucer' as shipped with Debian has the following modification regarding ++the once shipped by upstream: ++ ++# Debian packages that depend on JUCE ++ ++This is a quick guideline for packaging upstream software that uses JUCE for ++Debian. ++For further implementation details check out the 'iem-plugin-suite' package. ++ ++- Build-Depend on 'juce-modules-source' ++- Add 'Built-Using: juce-modules-source (= <>)' to debian/control ++ (replace '<>' with the actual version of 'juce-modules-source', as ++ obtained with ++ ++ dpkg-query --show --showformat='${source:Version}' juce-modules-source ++ ++ ++ E.g. dh based packages might use something like the following in debian/rules: ++ ++ JUCE_VERSION := $(shell dpkg-query --show --showformat='$${source:Version}' juce-modules-source) ++ override_dh_gencontrol: ++ dh_gencontrol -- -Vjuce:BuiltUsing="juce ( = $(JUCE_VERSION) )" ++ ++ Accompanied by the following in the binary package's section in debian/control: ++ ++ Built-Using: ${juce:BuiltUsing} ++ ++- If needed, dynamically link against the following libraries (as ++ "juce-modules-source" does not include their sources (as opposed to upstream): ++ - libjpeg ++ - libpng ++ - libflac ++ - libvorbis libvorbisenc libvorbisfile ++ - libogg ++ - zlib ++ E.g. using something like: ++ ++ make LDFLAGS="$(pkg-config --libs libpng libjpeg flac vorbis vorbisfile vorbisenc ogg zlib)" ++ ++ *Alternatively*, resave the JUCE-project with the Debian-packaged 'Projucer' ++ (>=5.4.4~repack0-3) which will take care of adding these libraries (if ++ required) to the LinuxMakefile build. ++ ++- When compiling for some embedded architectures (notably 'armel', 'mipsel' and ++ the like), you might need to link against '-latomic'. ++ The following snippet for d/rules can help inject the library on the required ++ architectures: ++ ++ # link with libatomic on architectures without built-in atomic ++ noatomicarch = $(shell dpkg-architecture -qDEB_HOST_ARCH | egrep -x "(armel|powerpc|powerpcspe|m68k|mips|mipsel|sh4|riscv64)") ++ ifeq ($(if $(noatomicarch),atomic), atomic) ++ LDFLAGS += -latomic ++ endif ++ ++ *Alternatively*, resave the JUCE-project with the Debian-packaged 'Projucer' ++ (>=5.4.4~repack0-3) which will take care of adding the relevant flags to the ++ LinuxMakefile build. ++ ++- Also be aware, that Projucer generated makefiles usually include ++ "-march=native", which is mostly not what you want for a generic baseline CPU ++ build. ++ You can override that by setting the TARGET_ARCH make variable ++ ++ make TARGET_ARCH="" diff --cc debian/README.libjuce-doc index 00000000,00000000..bd2012e2 new file mode 100644 --- /dev/null +++ b/debian/README.libjuce-doc @@@ -1,0 -1,0 +1,5 @@@ ++the HTML documentation can be found in ++ /usr/share/doc/juce-modules-source/apiref/ ++ ++ -- IOhannes m zmölnig (Debian/GNU) Sun, 11 Feb 2018 10:42:03 +0100 ++ diff --cc debian/README.source index 00000000,00000000..86a78e2f new file mode 100644 --- /dev/null +++ b/debian/README.source @@@ -1,0 -1,0 +1,56 @@@ ++removed libraries ++----------------- ++ ++upstream embeds a number of FLOSS libraries, that Debian already ships: ++ - FLAC ++ - OGG/Vorbis ++ - jpglib ++ - pnglib ++ - zlib ++upstream also includes some FLOSS headers for building OS-specific audio ++plugins: ++ - AudioUnit (OSX) ++ ++since we don't need either of these, they are stripped away from the source ++tarball (in order to not accidentally use them). ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 10 Feb 2016 16:38:34 +0100 ++ ++ ++NOT-removed embedded libraries ++------------------------------ ++ ++upstream also includes an embedded copy of Box2D which is available on debian as ++"box2d". ++Unfortunately it seems that the two are really different versions and the API ++has changed. ++Therefore we are currently building with the embedded copy. ++ ++Once upstream updates their embedded copy to a version compatible with the one ++shipped by Debian, we will switch to the system library. ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 10 Feb 2016 16:38:35 +0100 ++ ++ ++gbp clone ++--------- ++ ++Starting with gbp>0.8.1, here's an simple way to automatically fine-tune the ++repository in the following ways: ++- make git ignore any .pc/ directory (created by quilt) ++- enable the "--follow-tags" when running 'git-push', so it's harder ++ to forget to push packaging tags along with the branches. ++ ++To enable this, run gbp-clone with the '--postclone debian/gbp/postclone.sh' ++option. ++To enable this for ALL repositories cloned via 'gbp' (in the future), do ++something like the following: ++ ++ $ mkdir -p ~/bin ++ $ cp debian/gbp/postclone.sh ~/bin/gbphook-postclone ++ $ cat >> ~/.gbp.conf < Mon, 1 Aug 2016 12:15:50 +0200 diff --cc debian/TODO.Debian index 00000000,00000000..efc9c4bb new file mode 100644 --- /dev/null +++ b/debian/TODO.Debian @@@ -1,0 -1,0 +1,46 @@@ ++ ++# 2017-11-08 ++ ++## drop libjuce ++it simply doesn't work. ++it's not supported by upstream. ++JUCE applications are meant to be compiled with the JUCE sources (statically ++linked). ++JUCE ABI keeps breaking. ++ ++it was a lot of work, but we should try to swim too hard against the current... ++ ++## keep multiple versions? ++API stability??? ++ ++####################################################### ++# old TODO ++ ++ ++## include headers ++do we want all headers starting with "juce_*"? ++ ++## build libjuce ++we probably need a debug-version and a non-debug version ++ ++or (alternatively) separate libraries for each of the modules. ++ ++- check how to build the GUI widgets ++ ++### use system installed libraries! ++ ++basically done. ++ ++Box2D is incompatible ++ ++ ++ ++### clamp defines! ++ ++the following defines need to be forced to ++- 0 in Release mode ++- 1 in Debug mode ++defines: ++ - JUCE_FORCE_DEBUG ++ - JUCE_LOG_ASSERTIONS ++ - JUCE_CHECK_MEMORY_LEAKS diff --cc debian/artifacts/.empty index 00000000,00000000..e69de29b new file mode 100644 --- /dev/null +++ b/debian/artifacts/.empty diff --cc debian/changelog index 00000000,00000000..728cf49e new file mode 100644 --- /dev/null +++ b/debian/changelog @@@ -1,0 -1,0 +1,338 @@@ ++juce (5.4.4~repack0-3+rpi1) bullseye-staging; urgency=medium ++ ++ * Link with libatomic on armhf too. ++ ++ -- Peter Michael Green Sat, 30 Nov 2019 15:26:20 +0000 ++ ++juce (5.4.4~repack0-3) unstable; urgency=medium ++ ++ * Make Makefiles created by Debian's Projucer compile without further ado ++ * Add patch to link against (required) system-libraries ++ * Add patch to inject LIBS into Projucer's Makefile-exporter from the ++ from the cmdline ++ * Make armel/mipsel/... Projucer add "-latomic" to LIBS ++ * Document the Projucer fixes in README.Debian ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 22 Aug 2019 10:01:56 +0200 ++ ++juce (5.4.4~repack0-2) unstable; urgency=medium ++ ++ * Link against "libatomic" on armel/mipsel/... to fix FTBFS ++ * Fix dversionmangle in d/watch ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 21 Aug 2019 13:56:30 +0200 ++ ++juce (5.4.4~repack0-1) unstable; urgency=medium ++ ++ * New upstream version 5.4.4~repack0 ++ (Closes: #925723) ++ ++ [ Ondřej Nový ] ++ * Use debhelper-compat instead of debian/compat ++ * Bump Standards-Version to 4.4.0 ++ ++ [ IOhannes m zmölnig ] ++ * Refresh patches ++ * Drop obsolete d/source/local-options ++ * Update d/copyright ++ * Regenerate d/copyright_hints ++ ++ -- IOhannes m zmölnig (Debian/GNU) Tue, 20 Aug 2019 13:28:00 +0200 ++ ++juce (5.4.1+really5.4.1~repack-3) unstable; urgency=medium ++ ++ * Add more missing VST opcodes (Closes: #923529) ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 06 Mar 2019 19:22:02 +0100 ++ ++juce (5.4.1+really5.4.1~repack-2) unstable; urgency=medium ++ ++ * Install VSTInterface.h for jor arch:all builds ++ ++ -- IOhannes m zmölnig (Debian/GNU) Sun, 13 Jan 2019 09:42:22 +0100 ++ ++juce (5.4.1+really5.4.1~repack-1) unstable; urgency=medium ++ ++ [ IOhannes m zmölnig (Debian/GNU) ] ++ * New upstream version 5.4.1 ++ * Refresh patches ++ ++ * Ported juce_VSTInterface.h from JUCE-5.3.2 to JUCE-5.4.1 (Closes: #913915) ++ * Fixed spelling errors ++ * Updated d/copyright ++ * Fixed 'licensecheck' target ++ * Refreshed d/copyright_hints ++ * Removed trailing whitespace in d/changelog ++ * Bumped standards-version to 4.3.0 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Sat, 12 Jan 2019 00:45:16 +0100 ++ ++juce (5.4.1+really5.3.2~repack-1) unstable; urgency=medium ++ ++ * Reverted to upstream version 5.3.2 (due to VST issues) ++ (Closes: #913915) ++ ++ * Fixed cmdline flag for Projucer for the autopkgtest ++ * Updated licensecheck ignores ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 05 Dec 2018 17:06:00 +0100 ++ ++juce (5.4.1~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.4.1~repack ++ ++ [ Olivier Humbert ] ++ * Fixed typos in README.Debian and README.source ++ ++ [ IOhannes m zmölnig (Debian/GNU) ] ++ * Refreshed patches and removed patch applied upstream ++ * Updated d/copyright ++ * Regenerated d/copyright_hints ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 14 Nov 2018 11:22:12 +0100 ++ ++juce (5.3.2~repack-2) unstable; urgency=medium ++ ++ * Backported fix for Projucer crash when saving global search-path ++ * Fixed patch-headers in preparation of 'gbp pq' ++ * Declare that building this package doesn't require "root" privileges ++ * Bumped standards-version to 4.2.1 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Fri, 26 Oct 2018 22:17:07 +0200 ++ ++juce (5.3.2~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.3.2~repack ++ * Refreshed patches ++ * Dropped build-time patch for reproducible builds ++ ++ -- IOhannes m zmölnig (Debian/GNU) Mon, 14 May 2018 09:58:20 +0200 ++ ++juce (5.3.1~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.3.1~repack ++ * Refreshed patches ++ * Patch to generate useful JACK client names by default ++ * Run unit-tests on Deb-CI ++ * Fix UnitTests to use system-wide JUCE modules ++ * Refreshed d/copyright_hints ++ * Bumped standards to 4.1.4 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 12 Apr 2018 13:34:24 +0200 ++ ++juce (5.3.0~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.3.0~repack ++ * Refreshed patches ++ * Fixed path to Icon.png ++ * Added patch to not reveal usage data by default ++ * Install API documentation into /usr/share/doc/juce-modules-source/ ++ * Updated copyright for moved Box2D tests ++ * Updated d/copyright_hints ++ * Updated Vcs-* stanzas to salsa.d.o ++ * Updated upstream source URL ++ ++ -- IOhannes m zmölnig (Debian/GNU) Mon, 26 Mar 2018 16:11:09 +0200 ++ ++juce (5.2.1~repack-2) unstable; urgency=medium ++ ++ * Fixed building of documentation (for real) ++ * Use upstream's Makefile rather than second-guessing how to do it ++ * Added B-D on Python3 and added patch to use Py3 to build docs ++ * Added B-D on graphviz (Closes: #890035) ++ * Dropped .tag files for (more) reproducible builds. (Closes: #890036) ++ Thanks to Chris Lamb for the last two ++ * Re-enabled LV2 support (Closes: #889969) ++ * Refreshed LV2 sources ++ ++ -- IOhannes m zmölnig (Debian/GNU) Sun, 11 Feb 2018 10:42:03 +0100 ++ ++juce (5.2.1~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.2.1~repack ++ * Removed patches applied upstream ++ * Refreshed remaining patches ++ * Have juce-module-source depend on more packages ++ * Fixed libjuce-doc package to actually contain documentation ++ * Added more documentation on how to create Debian packages depending on JUCE ++ * Updated maintainer email ++ * Updated d/copyright(_hints) ++ * Switched build system from CDBS to DH ++ * Bumped dh-compat to 11 ++ * Bumped standards version to 4.1.3 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 08 Feb 2018 22:25:21 +0100 ++ ++juce (5.2.0~repack-3) unstable; urgency=medium ++ ++ * Backported upstream fix for IIRFilter with SIMD registers ++ * Updated README.Debian with build instructions for Debian Developers ++ * Bumped standards version to 4.1.2 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Tue, 19 Dec 2017 17:51:50 +0100 ++ ++juce (5.2.0~repack-2) unstable; urgency=medium ++ ++ * Projucer: use Debian's JUCE modules by default ++ * modules-sources: force system provided use of libflac and libvorbis ++ (LP: #1720634) ++ * Recommend image/audio format libraries and depend on zlib-dev ++ * Fixed formatting of NEWS file ++ ++ -- IOhannes m zmölnig (Debian/GNU) Tue, 19 Dec 2017 11:43:22 +0100 ++ ++juce (5.2.0~repack-1) unstable; urgency=medium ++ ++ * New upstream version 5.2.0~repack ++ ++ * Refreshed patches ++ - Dropped those applied upstream ++ - Dropped unneeded patch magic ++ - Removed reproducible DATE_TIME hacks ++ - Patch to fix spelling errors ++ - Patch to avoid checking for updates ++ - Added DEP-3 headers to patches ++ - Build GPL-3 variant of Projucer ++ * Added missing B-Ds, dropped unused B-Ds ++ * Dropped libjuce(0|-dev) packages ++ - juce-modules-source breaks/replaces libjuce-dev ++ * Re-ordered packages in d/control ++ * Installed lv2-ttl-generator as part of juce-tools ++ * "verbose" builds ++ * Dropped 'install' target ++ * Link with "--as-needed" ++ * Changed how to build debian-specific artifacts ++ * Force-disabled embedded zlib/jpeglib/pnglib ++ * Added "Keywords" to desktop-file ++ * Ship BREAKING-CHANGES.txt ++ * Updated README.Debian ++ * Added d/NEWS ++ * Updated d/copyright ++ - Excluded some more well-known binary files from licensecheck ++ * Modernized Vcs-Browser stanza ++ * Fixed reference to non-existing "introjucer" package in long description ++ * Dropped unused lintian override ++ * Bumped standards version to 4.1.1 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 09 Nov 2017 15:04:02 +0100 ++ ++juce (4.3.0~repack-1) unstable; urgency=medium ++ ++ * New upstream version 4.3.0~repack ++ ++ [ IOhannes m zmölnig ] ++ * Refreshed patches. ++ * Fixed LV2_wrapper. ++ * Recommend lv2-dev (for building LV2-plugins) ++ * Tightened versioned dependencies. ++ * Added Multi-Arch fields. ++ * Updated d/copyright(_hints) ++ ++ -- IOhannes m zmölnig (Debian/GNU) Fri, 04 Nov 2016 22:27:09 +0100 ++ ++juce (4.2.4~repack-1) unstable; urgency=medium ++ ++ * New upstream version 4.2.4~repack ++ * Refreshed patches. ++ * Enabled VST pluginhost ++ * Tightened dependency of juce-utils ++ * Update d/copyright_hints ++ * Excluded more binary data from copyright-check ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 21 Sep 2016 12:21:37 +0200 ++ ++juce (4.2.3~repack-1) unstable; urgency=medium ++ ++ * New upstream version 4.2.3~repack ++ ++ * Refreshed patches ++ * Documented how to properly checkout the project via gbp ++ * Updated d/copyright_hints ++ ++ -- IOhannes m zmölnig (Debian/GNU) Mon, 08 Aug 2016 15:47:12 +0200 ++ ++juce (4.2.2+repack-1) unstable; urgency=medium ++ ++ * Imported Upstream version 4.2.2+repack ++ ++ * Fixed rule that fixes permissions of source-files ++ * Renamed introjucer/projucer package to juce-tools ++ * Updated README.Debian to reflect package rename ++ * Shortened extended description ++ * Updated d/copyright_hints ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 25 May 2016 17:01:46 +0200 ++ ++juce (4.2.1+repack-2) unstable; urgency=medium ++ ++ * Drop "-march=native" from Projucer build-flags ++ * Refreshed libpng16 patch ++ ++ -- IOhannes m zmölnig (Debian/GNU) Mon, 02 May 2016 15:51:34 +0200 ++ ++juce (4.2.1+repack-1) unstable; urgency=medium ++ ++ * Imported Upstream version 4.2.1+repack ++ * Introjucer has been replaced by Projucer ++ * Refreshed patches ++ * libjuce: manually include AppConfig.h ++ * libjuce0 symbols file (not used in packaging) ++ * Updated d/copyright ++ * Drop licenses that no longer apply from d/copyright ++ * Install documentation into /usr/share/doc/libjuce/ ++ * Bumped standards version to 3.9.8 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 28 Apr 2016 23:38:46 +0200 ++ ++juce (4.1.0+repack-6) unstable; urgency=medium ++ ++ * Updated d/copyright ++ * Fixed homepage field. ++ Thanks to Paul Wise (Closes: 820653) ++ * Set BUILD_TIME from d/changelog ++ ++ -- IOhannes m zmölnig (Debian/GNU) Wed, 13 Apr 2016 16:39:10 +0200 ++ ++juce (4.1.0+repack-5) unstable; urgency=medium ++ ++ [ IOhannes m zmölnig ] ++ * LV2 support ++ * Added LV2-wrapper sources to -dev package. ++ * LV2-wrapper not included in library ++ * ttl-generator for lv2 ++ * Another try on a decent build-date. ++ * Clamped audio-plugin defines. ++ ++ [ Gianfranco Costamagna ] ++ * Fixed build with libpng16. (Closes: 820347) ++ ++ -- IOhannes m zmölnig (Debian/GNU) Thu, 07 Apr 2016 22:18:20 +0200 ++ ++juce (4.1.0+repack-4) unstable; urgency=medium ++ ++ * Updated B-D from libpng12-dev to libpng-dev. ++ Thanks to Tobias Frost (Closes: #819438) ++ ++ -- IOhannes m zmölnig (Debian/GNU) Mon, 28 Mar 2016 21:17:16 +0200 ++ ++juce (4.1.0+repack-3) unstable; urgency=medium ++ ++ * Dropped "-std=gnu++0x" from CFLAGS since we are already using "-std=c++11" ++ (Closes: #816000) ++ * Reverted uscan-compat to 3 ++ ++ -- IOhannes m zmölnig (Debian/GNU) Sat, 27 Feb 2016 17:02:27 +0100 ++ ++juce (4.1.0+repack-2) unstable; urgency=medium ++ ++ * Use numeric build-date ++ * Nicer package description for 'introjucer' ++ * Fixed debian/watch ++ ++ -- IOhannes m zmölnig (Debian/GNU) Tue, 16 Feb 2016 16:45:04 +0100 ++ ++juce (4.1.0+repack-1) unstable; urgency=medium ++ ++ * Initial release. (Closes: #808611) ++ ++ -- IOhannes m zmölnig (Debian/GNU) Fri, 12 Feb 2016 07:46:59 +0100 diff --cc debian/control index 00000000,00000000..e7bf27f1 new file mode 100644 --- /dev/null +++ b/debian/control @@@ -1,0 -1,0 +1,109 @@@ ++Source: juce ++Section: devel ++Priority: optional ++Maintainer: Debian Multimedia Maintainers ++Uploaders: ++ IOhannes m zmölnig (Debian/GNU) , ++Build-Depends: ++ debhelper-compat (= 11), ++ pkg-config, ++ libasound2-dev, ++ libcurl4-gnutls-dev | libcurl-dev, ++ libfreetype6-dev, ++ libgl1-mesa-dev | libgl-dev, ++ libgtk-3-dev, ++ libjpeg-dev, ++ libwebkit2gtk-4.0-dev, ++ libx11-dev, ++ libxext-dev, ++ libxinerama-dev, ++ libxrandr-dev, ++ libxcomposite-dev, ++ libxcursor-dev, ++ zlib1g-dev, ++ help2man, ++Build-Depends-Indep: ++ doxygen, ++ graphviz, ++ python3, ++Standards-Version: 4.4.0 ++Rules-Requires-Root: no ++Homepage: https://www.juce.com ++Vcs-Git: https://salsa.debian.org/multimedia-team/juce.git ++Vcs-Browser: https://salsa.debian.org/multimedia-team/juce ++ ++Package: juce-modules-source ++Architecture: all ++Multi-Arch: foreign ++Depends: ++ ${shlibs:Depends}, ++ ${misc:Depends}, ++ libasound2-dev, ++ libcurl4-gnutls-dev | libcurl-dev, ++ libfreetype6-dev, ++ libgl1-mesa-dev | libgl-dev, ++ libx11-dev, ++ libxext-dev, ++ libxinerama-dev, ++ libxrandr-dev, ++ zlib1g-dev | libz-dev, ++ libwebkit2gtk-4.0-dev, ++ libgtk-3-dev, ++ libflac-dev, ++ libjpeg-dev, ++ libpng-dev, ++ libvorbis-dev, ++Recommends: ++ lv2-dev, ++Replaces: libjuce-dev (<< 5.2.0~) ++Breaks: libjuce-dev (<< 5.2.0~) ++Description: Jules' Utility Class Extensions (module sources) ++ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for ++ developing cross-platform software. ++ . ++ It contains pretty much everything you're likely to need to create most ++ applications, and is particularly well-suited for building highly-customised ++ GUIs, and for handling graphics and sound. ++ . ++ This package provides the sources for the JUCE modules, as used by 'jucer' ++ projects. (Projucer is provided in the 'juce-tools' package). ++ ++Package: juce-tools ++Architecture: any ++Depends: ++ ${shlibs:Depends}, ++ ${misc:Depends}, ++Recommends: juce-modules-source ++Breaks: introjucer ++Replaces: introjucer ++Conflicts: introjucer ++Description: JUCE's project management tools ++ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for ++ developing cross-platform software. ++ The Projucer (formerly Introjucer) is JUCE's project-management tool and secret ++ weapon. ++ . ++ The Projucer's Duties: ++ - Central management of cross-platform builds ++ - JUCE Module Management ++ - New Project Creation ++ - User-Interface Design Tool ++ - Plug-in Projects ++ - Miscellaneous Utilities ++ ++Package: libjuce-doc ++Architecture: all ++Multi-Arch: foreign ++Section: doc ++Depends: ++ ${misc:Depends}, ++Suggests: juce-modules-source ++Description: Jules' Utility Class Extensions (documentation) ++ JUCE (Jules' Utility Class Extensions) is an all-encompassing C++ framework for ++ developing cross-platform software. ++ . ++ It contains pretty much everything you're likely to need to create most ++ applications, and is particularly well-suited for building highly-customised ++ GUIs, and for handling graphics and sound. ++ . ++ This package contains html documentation for the JUCE API. diff --cc debian/copyright index 00000000,00000000..07be548b new file mode 100644 --- /dev/null +++ b/debian/copyright @@@ -1,0 -1,0 +1,842 @@@ ++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ ++Upstream-Name: JUCE ++Upstream-Contact: ++Source: https://github.com/WeAreROLI/JUCE ++Files-Excluded: ++ modules/juce_audio_formats/codecs/flac/* ++ modules/juce_audio_formats/codecs/oggvorbis/* ++ modules/juce_audio_plugin_client/AU/* ++ modules/juce_graphics/image_formats/jpglib/* ++ modules/juce_graphics/image_formats/pnglib/* ++ modules/juce_core/zip/zlib/* ++ .gitignore ++ ++Files: * ++Copyright: 2015-2019, ROLI Ltd ++License: GPL-3 ++ ++Files: ++ modules/juce_core/* ++ modules/juce_audio_devices/* ++ modules/juce_audio_basics/* ++ modules/juce_events/* ++ modules/juce_blocks_basics/* ++Copyright: 2015-2019, ROLI Ltd ++License: ISC ++ ++Files: modules/juce_box2d/box2d/* ++ examples/Assets/Box2DTests/* ++ examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/* ++Copyright: 2006-2011, Erin Catto http://www.box2d.org ++License: Zlib/libpng ++ ++Files: modules/juce_audio_processors/format_types/VST3_SDK/* ++Copyright: 2018-2019, Steinberg Media Technologies GmbH ++License: GPL-3 ++ ++Files: modules/juce_audio_processors/format_types/VST3_SDK/base/* ++Copyright: 2018-2019, Steinberg Media Technologies GmbH ++License: BSD-3-clause ++ ++Files: ++ ex*/*/Builds/Android/gradle/wrapper/* ++ extras/Projucer/Source/BinaryData/gradle/* ++Copyright: 2015 Gradle Inc. ++License: Apache-2.0 ++ ++Files: debian/* ++Copyright: 2015-2019, IOhannes m zmölnig ++License: GPL-2+ or GPL-3 ++ ++Files: debian/extra/juce_audio_plugin_client/* debian/extra/lv2-ttl-generator/lv2_ttl_generator.c ++Copyright: Filipe Coelho ++License: GPL-2+ or AGPL-3 ++ ++Files: debian/extra/juce_audio_plugin_client/LV2/includes/lv2_external_ui.h ++Copyright: NONE ++License: public-domain ++License-Grant: ++ This work is in public domain. ++ . ++ This file is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ . ++ If you have questions, contact Filipe Coelho (aka falkTX) ++ or ask in #lad channel, FreeNode IRC network. ++ ++ ++License: GPL-3 ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU General Public License version 3, as ++ published by the Free Software Foundation. ++ . ++ This program is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ++ GNU General Public License for more details. ++Comment: ++ On Debian systems, the complete text of the GNU General Public License ++ (GPL) version 3 can be found in "/usr/share/common-licenses/GPL-3". ++ . ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++ ++License: GPL-2+ ++ This program is free software; you can redistribute it and/or modify it ++ under the terms of the GNU General Public License as published by the ++ Free Software Foundation; either version 2, or (at your option) any ++ later version. ++ . ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ General Public License for more details. ++ . ++ Some files differ from above by replacing "this program" with "this ++ file". ++ . ++ On Debian GNU systems, the complete text of the GNU General Public ++ License (GPL) version 2 or later can be found in ++ '/usr/share/common-licenses/GPL-2'. ++ . ++ You should have received a copy of the GNU General Public License ++ along with this program. If not, see . ++ ++License: Zlib/libpng ++ This software is provided 'as-is', without any express or implied ++ warranty. In no event will the authors be held liable for any damages ++ arising from the use of this software. ++ . ++ Permission is granted to anyone to use this software for any purpose, ++ including commercial applications, and to alter it and redistribute it ++ freely, subject to the following restrictions: ++ . ++ 1. The origin of this software must not be misrepresented; you must not ++ claim that you wrote the original software. If you use this software ++ in a product, an acknowledgment in the product documentation would be ++ appreciated but is not required. ++ 2. Altered source versions must be plainly marked as such, and must not be ++ misrepresented as being the original software. ++ 3. This notice may not be removed or altered from any source distribution. ++ ++License: AGPL-3 ++ GNU AFFERO GENERAL PUBLIC LICENSE ++ Version 3, 19 November 2007 ++ . ++ Copyright (C) 2007 Free Software Foundation, Inc. ++ Everyone is permitted to copy and distribute verbatim copies of this ++ license document, but changing it is not allowed. ++ . ++ Preamble ++ . ++ The GNU Affero General Public License is a free, copyleft license for ++ software and other kinds of works, specifically designed to ensure ++ cooperation with the community in the case of network server software. ++ . ++ The licenses for most software and other practical works are designed ++ to take away your freedom to share and change the works. By contrast, ++ our General Public Licenses are intended to guarantee your freedom to ++ share and change all versions of a program--to make sure it remains ++ free software for all its users. ++ . ++ When we speak of free software, we are referring to freedom, not price. ++ Our General Public Licenses are designed to make sure that you have the ++ freedom to distribute copies of free software (and charge for them if ++ you wish), that you receive source code or can get it if you want it, ++ that you can change the software or use pieces of it in new free ++ programs, and that you know you can do these things. ++ . ++ Developers that use our General Public Licenses protect your rights ++ with two steps: (1) assert copyright on the software, and (2) offer you ++ this License which gives you legal permission to copy, distribute ++ and/or modify the software. ++ . ++ A secondary benefit of defending all users' freedom is that ++ improvements made in alternate versions of the program, if they receive ++ widespread use, become available for other developers to incorporate. ++ Many developers of free software are heartened and encouraged by the ++ resulting cooperation. However, in the case of software used on ++ network servers, this result may fail to come about. The GNU General ++ Public License permits making a modified version and letting the public ++ access it on a server without ever releasing its source code to the ++ public. ++ . ++ The GNU Affero General Public License is designed specifically to ++ ensure that, in such cases, the modified source code becomes available ++ to the community. It requires the operator of a network server to ++ provide the source code of the modified version running there to the ++ users of that server. Therefore, public use of a modified version, on ++ a publicly accessible server, gives the public access to the source ++ code of the modified version. ++ . ++ An older license, called the Affero General Public License and ++ published by Affero, was designed to accomplish similar goals. This is ++ a different license, not a version of the Affero GPL, but Affero has ++ released a new version of the Affero GPL which permits relicensing ++ under this license. ++ . ++ The precise terms and conditions for copying, distribution and ++ modification follow. ++ . ++ TERMS AND CONDITIONS ++ . ++ 0. Definitions. ++ . ++ "This License" refers to version 3 of the GNU Affero General Public ++ License. ++ . ++ "Copyright" also means copyright-like laws that apply to other kinds of ++ works, such as semiconductor masks. ++ . ++ "The Program" refers to any copyrightable work licensed under this ++ License. Each licensee is addressed as "you". "Licensees" and ++ "recipients" may be individuals or organizations. ++ . ++ To "modify" a work means to copy from or adapt all or part of the work ++ in a fashion requiring copyright permission, other than the making of ++ an exact copy. The resulting work is called a "modified version" of ++ the earlier work or a work "based on" the earlier work. ++ . ++ A "covered work" means either the unmodified Program or a work based on ++ the Program. ++ . ++ To "propagate" a work means to do anything with it that, without ++ permission, would make you directly or secondarily liable for ++ infringement under applicable copyright law, except executing it on a ++ computer or modifying a private copy. Propagation includes copying, ++ distribution (with or without modification), making available to the ++ public, and in some countries other activities as well. ++ . ++ To "convey" a work means any kind of propagation that enables other ++ parties to make or receive copies. Mere interaction with a user ++ through a computer network, with no transfer of a copy, is not ++ conveying. ++ . ++ An interactive user interface displays "Appropriate Legal Notices" to ++ the extent that it includes a convenient and prominently visible ++ feature that (1) displays an appropriate copyright notice, and (2) ++ tells the user that there is no warranty for the work (except to the ++ extent that warranties are provided), that licensees may convey the ++ work under this License, and how to view a copy of this License. If the ++ interface presents a list of user commands or options, such as a menu, ++ a prominent item in the list meets this criterion. ++ . ++ 1. Source Code. ++ . ++ The "source code" for a work means the preferred form of the work for ++ making modifications to it. "Object code" means any non-source form of ++ a work. ++ . ++ A "Standard Interface" means an interface that either is an official ++ standard defined by a recognized standards body, or, in the case of ++ interfaces specified for a particular programming language, one that is ++ widely used among developers working in that language. ++ . ++ The "System Libraries" of an executable work include anything, other ++ than the work as a whole, that (a) is included in the normal form of ++ packaging a Major Component, but which is not part of that Major ++ Component, and (b) serves only to enable use of the work with that ++ Major Component, or to implement a Standard Interface for which an ++ implementation is available to the public in source code form. A "Major ++ Component", in this context, means a major essential component (kernel, ++ window system, and so on) of the specific operating system (if any) on ++ which the executable work runs, or a compiler used to produce the work, ++ or an object code interpreter used to run it. ++ . ++ The "Corresponding Source" for a work in object code form means all the ++ source code needed to generate, install, and (for an executable work) ++ run the object code and to modify the work, including scripts to ++ control those activities. However, it does not include the work's ++ System Libraries, or general-purpose tools or generally available free ++ programs which are used unmodified in performing those activities but ++ which are not part of the work. For example, Corresponding Source ++ includes interface definition files associated with source files for ++ the work, and the source code for shared libraries and dynamically ++ linked subprograms that the work is specifically designed to require, ++ such as by intimate data communication or control flow between those ++ subprograms and other parts of the work. ++ . ++ The Corresponding Source need not include anything that users can ++ regenerate automatically from other parts of the Corresponding Source. ++ . ++ The Corresponding Source for a work in source code form is that same ++ work. ++ . ++ 2. Basic Permissions. ++ . ++ All rights granted under this License are granted for the term of ++ copyright on the Program, and are irrevocable provided the stated ++ conditions are met. This License explicitly affirms your unlimited ++ permission to run the unmodified Program. The output from running a ++ covered work is covered by this License only if the output, given its ++ content, constitutes a covered work. This License acknowledges your ++ rights of fair use or other equivalent, as provided by copyright law. ++ . ++ You may make, run and propagate covered works that you do not convey, ++ without conditions so long as your license otherwise remains in force. ++ You may convey covered works to others for the sole purpose of having ++ them make modifications exclusively for you, or provide you with ++ facilities for running those works, provided that you comply with the ++ terms of this License in conveying all material for which you do not ++ control copyright. Those thus making or running the covered works for ++ you must do so exclusively on your behalf, under your direction and ++ control, on terms that prohibit them from making any copies of your ++ copyrighted material outside their relationship with you. ++ . ++ Conveying under any other circumstances is permitted solely under the ++ conditions stated below. Sublicensing is not allowed; section 10 makes ++ it unnecessary. ++ . ++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law. ++ . ++ No covered work shall be deemed part of an effective technological ++ measure under any applicable law fulfilling obligations under article ++ 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar ++ laws prohibiting or restricting circumvention of such measures. ++ . ++ When you convey a covered work, you waive any legal power to forbid ++ circumvention of technological measures to the extent such ++ circumvention is effected by exercising rights under this License with ++ respect to the covered work, and you disclaim any intention to limit ++ operation or modification of the work as a means of enforcing, against ++ the work's users, your or third parties' legal rights to forbid ++ circumvention of technological measures. ++ . ++ 4. Conveying Verbatim Copies. ++ . ++ You may convey verbatim copies of the Program's source code as you ++ receive it, in any medium, provided that you conspicuously and ++ appropriately publish on each copy an appropriate copyright notice; ++ keep intact all notices stating that this License and any ++ non-permissive terms added in accord with section 7 apply to the code; ++ keep intact all notices of the absence of any warranty; and give all ++ recipients a copy of this License along with the Program. ++ . ++ You may charge any price or no price for each copy that you convey, and ++ you may offer support or warranty protection for a fee. ++ . ++ 5. Conveying Modified Source Versions. ++ . ++ You may convey a work based on the Program, or the modifications to ++ produce it from the Program, in the form of source code under the terms ++ of section 4, provided that you also meet all of these conditions: ++ . ++ a) The work must carry prominent notices stating that you modified it, ++ and giving a relevant date. ++ . ++ b) The work must carry prominent notices stating that it is released ++ under this License and any conditions added under section 7. This ++ requirement modifies the requirement in section 4 to "keep intact all ++ notices". ++ . ++ c) You must license the entire work, as a whole, under this License to ++ anyone who comes into possession of a copy. This License will ++ therefore apply, along with any applicable section 7 additional terms, ++ to the whole of the work, and all its parts, regardless of how they are ++ packaged. This License gives no permission to license the work in any ++ other way, but it does not invalidate such permission if you have ++ separately received it. ++ . ++ d) If the work has interactive user interfaces, each must display ++ Appropriate Legal Notices; however, if the Program has interactive ++ interfaces that do not display Appropriate Legal Notices, your work ++ need not make them do so. ++ . ++ A compilation of a covered work with other separate and independent ++ works, which are not by their nature extensions of the covered work, ++ and which are not combined with it such as to form a larger program, in ++ or on a volume of a storage or distribution medium, is called an ++ "aggregate" if the compilation and its resulting copyright are not used ++ to limit the access or legal rights of the compilation's users beyond ++ what the individual works permit. Inclusion of a covered work in an ++ aggregate does not cause this License to apply to the other parts of ++ the aggregate. ++ . ++ 6. Conveying Non-Source Forms. ++ . ++ You may convey a covered work in object code form under the terms of ++ sections 4 and 5, provided that you also convey the machine-readable ++ Corresponding Source under the terms of this License, in one of these ++ ways: ++ . ++ a) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by the ++ Corresponding Source fixed on a durable physical medium customarily ++ used for software interchange. ++ . ++ b) Convey the object code in, or embodied in, a physical product ++ (including a physical distribution medium), accompanied by a written ++ offer, valid for at least three years and valid for as long as you ++ offer spare parts or customer support for that product model, to give ++ anyone who possesses the object code either (1) a copy of the ++ Corresponding Source for all the software in the product that is ++ covered by this License, on a durable physical medium customarily used ++ for software interchange, for a price no more than your reasonable cost ++ of physically performing this conveying of source, or (2) access to ++ copy the Corresponding Source from a network server at no charge. ++ . ++ c) Convey individual copies of the object code with a copy of the ++ written offer to provide the Corresponding Source. This alternative is ++ allowed only occasionally and noncommercially, and only if you received ++ the object code with such an offer, in accord with subsection 6b. ++ . ++ d) Convey the object code by offering access from a designated place ++ (gratis or for a charge), and offer equivalent access to the ++ Corresponding Source in the same way through the same place at no ++ further charge. You need not require recipients to copy the ++ Corresponding Source along with the object code. If the place to copy ++ the object code is a network server, the Corresponding Source may be on ++ a different server (operated by you or a third party) that supports ++ equivalent copying facilities, provided you maintain clear directions ++ next to the object code saying where to find the Corresponding Source. ++ Regardless of what server hosts the Corresponding Source, you remain ++ obligated to ensure that it is available for as long as needed to ++ satisfy these requirements. ++ . ++ e) Convey the object code using peer-to-peer transmission, provided you ++ inform other peers where the object code and Corresponding Source of ++ the work are being offered to the general public at no charge under ++ subsection 6d. ++ . ++ A separable portion of the object code, whose source code is excluded ++ from the Corresponding Source as a System Library, need not be included ++ in conveying the object code work. ++ . ++ A "User Product" is either (1) a "consumer product", which means any ++ tangible personal property which is normally used for personal, family, ++ or household purposes, or (2) anything designed or sold for ++ incorporation into a dwelling. In determining whether a product is a ++ consumer product, doubtful cases shall be resolved in favor of ++ coverage. For a particular product received by a particular user, ++ "normally used" refers to a typical or common use of that class of ++ product, regardless of the status of the particular user or of the way ++ in which the particular user actually uses, or expects or is expected ++ to use, the product. A product is a consumer product regardless of ++ whether the product has substantial commercial, industrial or ++ non-consumer uses, unless such uses represent the only significant mode ++ of use of the product. ++ . ++ "Installation Information" for a User Product means any methods, ++ procedures, authorization keys, or other information required to ++ install and execute modified versions of a covered work in that User ++ Product from a modified version of its Corresponding Source. The ++ information must suffice to ensure that the continued functioning of ++ the modified object code is in no case prevented or interfered with ++ solely because modification has been made. ++ . ++ If you convey an object code work under this section in, or with, or ++ specifically for use in, a User Product, and the conveying occurs as ++ part of a transaction in which the right of possession and use of the ++ User Product is transferred to the recipient in perpetuity or for a ++ fixed term (regardless of how the transaction is characterized), the ++ Corresponding Source conveyed under this section must be accompanied by ++ the Installation Information. But this requirement does not apply if ++ neither you nor any third party retains the ability to install modified ++ object code on the User Product (for example, the work has been ++ installed in ROM). ++ . ++ The requirement to provide Installation Information does not include a ++ requirement to continue to provide support service, warranty, or ++ updates for a work that has been modified or installed by the ++ recipient, or for the User Product in which it has been modified or ++ installed. Access to a network may be denied when the modification ++ itself materially and adversely affects the operation of the network or ++ violates the rules and protocols for communication across the network. ++ . ++ Corresponding Source conveyed, and Installation Information provided, ++ in accord with this section must be in a format that is publicly ++ documented (and with an implementation available to the public in ++ source code form), and must require no special password or key for ++ unpacking, reading or copying. ++ . ++ 7. Additional Terms. ++ . ++ "Additional permissions" are terms that supplement the terms of this ++ License by making exceptions from one or more of its conditions. ++ Additional permissions that are applicable to the entire Program shall ++ be treated as though they were included in this License, to the extent ++ that they are valid under applicable law. If additional permissions ++ apply only to part of the Program, that part may be used separately ++ under those permissions, but the entire Program remains governed by ++ this License without regard to the additional permissions. ++ . ++ When you convey a copy of a covered work, you may at your option remove ++ any additional permissions from that copy, or from any part of it. ++ (Additional permissions may be written to require their own removal in ++ certain cases when you modify the work.) You may place additional ++ permissions on material, added by you to a covered work, for which you ++ have or can give appropriate copyright permission. ++ . ++ Notwithstanding any other provision of this License, for material you ++ add to a covered work, you may (if authorized by the copyright holders ++ of that material) supplement the terms of this License with terms: ++ . ++ a) Disclaiming warranty or limiting liability differently from the ++ terms of sections 15 and 16 of this License; or ++ . ++ b) Requiring preservation of specified reasonable legal notices or ++ author attributions in that material or in the Appropriate Legal ++ Notices displayed by works containing it; or ++ . ++ c) Prohibiting misrepresentation of the origin of that material, or ++ requiring that modified versions of such material be marked in ++ reasonable ways as different from the original version; or ++ . ++ d) Limiting the use for publicity purposes of names of licensors or ++ authors of the material; or ++ . ++ e) Declining to grant rights under trademark law for use of some trade ++ names, trademarks, or service marks; or ++ . ++ f) Requiring indemnification of licensors and authors of that material ++ by anyone who conveys the material (or modified versions of it) with ++ contractual assumptions of liability to the recipient, for any ++ liability that these contractual assumptions directly impose on those ++ licensors and authors. ++ . ++ All other non-permissive additional terms are considered "further ++ restrictions" within the meaning of section 10. If the Program as you ++ received it, or any part of it, contains a notice stating that it is ++ governed by this License along with a term that is a further ++ restriction, you may remove that term. If a license document contains ++ a further restriction but permits relicensing or conveying under this ++ License, you may add to a covered work material governed by the terms ++ of that license document, provided that the further restriction does ++ not survive such relicensing or conveying. ++ . ++ If you add terms to a covered work in accord with this section, you ++ must place, in the relevant source files, a statement of the additional ++ terms that apply to those files, or a notice indicating where to find ++ the applicable terms. ++ . ++ Additional terms, permissive or non-permissive, may be stated in the ++ form of a separately written license, or stated as exceptions; the ++ above requirements apply either way. ++ . ++ 8. Termination. ++ . ++ You may not propagate or modify a covered work except as expressly ++ provided under this License. Any attempt otherwise to propagate or ++ modify it is void, and will automatically terminate your rights under ++ this License (including any patent licenses granted under the third ++ paragraph of section 11). ++ . ++ However, if you cease all violation of this License, then your license ++ from a particular copyright holder is reinstated (a) provisionally, ++ unless and until the copyright holder explicitly and finally terminates ++ your license, and (b) permanently, if the copyright holder fails to ++ notify you of the violation by some reasonable means prior to 60 days ++ after the cessation. ++ . ++ Moreover, your license from a particular copyright holder is reinstated ++ permanently if the copyright holder notifies you of the violation by ++ some reasonable means, this is the first time you have received notice ++ of violation of this License (for any work) from that copyright holder, ++ and you cure the violation prior to 30 days after your receipt of the ++ notice. ++ . ++ Termination of your rights under this section does not terminate the ++ licenses of parties who have received copies or rights from you under ++ this License. If your rights have been terminated and not permanently ++ reinstated, you do not qualify to receive new licenses for the same ++ material under section 10. ++ . ++ 9. Acceptance Not Required for Having Copies. ++ . ++ You are not required to accept this License in order to receive or run ++ a copy of the Program. Ancillary propagation of a covered work ++ occurring solely as a consequence of using peer-to-peer transmission to ++ receive a copy likewise does not require acceptance. However, nothing ++ other than this License grants you permission to propagate or modify ++ any covered work. These actions infringe copyright if you do not ++ accept this License. Therefore, by modifying or propagating a covered ++ work, you indicate your acceptance of this License to do so. ++ . ++ 10. Automatic Licensing of Downstream Recipients. ++ . ++ Each time you convey a covered work, the recipient automatically ++ receives a license from the original licensors, to run, modify and ++ propagate that work, subject to this License. You are not responsible ++ for enforcing compliance by third parties with this License. ++ . ++ An "entity transaction" is a transaction transferring control of an ++ organization, or substantially all assets of one, or subdividing an ++ organization, or merging organizations. If propagation of a covered ++ work results from an entity transaction, each party to that transaction ++ who receives a copy of the work also receives whatever licenses to the ++ work the party's predecessor in interest had or could give under the ++ previous paragraph, plus a right to possession of the Corresponding ++ Source of the work from the predecessor in interest, if the predecessor ++ has it or can get it with reasonable efforts. ++ . ++ You may not impose any further restrictions on the exercise of the ++ rights granted or affirmed under this License. For example, you may ++ not impose a license fee, royalty, or other charge for exercise of ++ rights granted under this License, and you may not initiate litigation ++ (including a cross-claim or counterclaim in a lawsuit) alleging that ++ any patent claim is infringed by making, using, selling, offering for ++ sale, or importing the Program or any portion of it. ++ . ++ 11. Patents. ++ . ++ A "contributor" is a copyright holder who authorizes use under this ++ License of the Program or a work on which the Program is based. The ++ work thus licensed is called the contributor's "contributor version". ++ . ++ A contributor's "essential patent claims" are all patent claims owned ++ or controlled by the contributor, whether already acquired or hereafter ++ acquired, that would be infringed by some manner, permitted by this ++ License, of making, using, or selling its contributor version, but do ++ not include claims that would be infringed only as a consequence of ++ further modification of the contributor version. For purposes of this ++ definition, "control" includes the right to grant patent sublicenses in ++ a manner consistent with the requirements of this License. ++ . ++ Each contributor grants you a non-exclusive, worldwide, royalty-free ++ patent license under the contributor's essential patent claims, to ++ make, use, sell, offer for sale, import and otherwise run, modify and ++ propagate the contents of its contributor version. ++ . ++ In the following three paragraphs, a "patent license" is any express ++ agreement or commitment, however denominated, not to enforce a patent ++ (such as an express permission to practice a patent or covenant not to ++ sue for patent infringement). To "grant" such a patent license to a ++ party means to make such an agreement or commitment not to enforce a ++ patent against the party. ++ . ++ If you convey a covered work, knowingly relying on a patent license, ++ and the Corresponding Source of the work is not available for anyone to ++ copy, free of charge and under the terms of this License, through a ++ publicly available network server or other readily accessible means, ++ then you must either (1) cause the Corresponding Source to be so ++ available, or (2) arrange to deprive yourself of the benefit of the ++ patent license for this particular work, or (3) arrange, in a manner ++ consistent with the requirements of this License, to extend the patent ++ license to downstream recipients. "Knowingly relying" means you have ++ actual knowledge that, but for the patent license, your conveying the ++ covered work in a country, or your recipient's use of the covered work ++ in a country, would infringe one or more identifiable patents in that ++ country that you have reason to believe are valid. ++ . ++ If, pursuant to or in connection with a single transaction or ++ arrangement, you convey, or propagate by procuring conveyance of, a ++ covered work, and grant a patent license to some of the parties ++ receiving the covered work authorizing them to use, propagate, modify ++ or convey a specific copy of the covered work, then the patent license ++ you grant is automatically extended to all recipients of the covered ++ work and works based on it. ++ . ++ A patent license is "discriminatory" if it does not include within the ++ scope of its coverage, prohibits the exercise of, or is conditioned on ++ the non-exercise of one or more of the rights that are specifically ++ granted under this License. You may not convey a covered work if you ++ are a party to an arrangement with a third party that is in the ++ business of distributing software, under which you make payment to the ++ third party based on the extent of your activity of conveying the work, ++ and under which the third party grants, to any of the parties who would ++ receive the covered work from you, a discriminatory patent license (a) ++ in connection with copies of the covered work conveyed by you (or ++ copies made from those copies), or (b) primarily for and in connection ++ with specific products or compilations that contain the covered work, ++ unless you entered into that arrangement, or that patent license was ++ granted, prior to 28 March 2007. ++ . ++ Nothing in this License shall be construed as excluding or limiting any ++ implied license or other defenses to infringement that may otherwise be ++ available to you under applicable patent law. ++ . ++ 12. No Surrender of Others' Freedom. ++ . ++ If conditions are imposed on you (whether by court order, agreement or ++ otherwise) that contradict the conditions of this License, they do not ++ excuse you from the conditions of this License. If you cannot convey a ++ covered work so as to satisfy simultaneously your obligations under ++ this License and any other pertinent obligations, then as a consequence ++ you may not convey it at all. For example, if you agree to terms that ++ obligate you to collect a royalty for further conveying from those to ++ whom you convey the Program, the only way you could satisfy both those ++ terms and this License would be to refrain entirely from conveying the ++ Program. ++ . ++ 13. Remote Network Interaction; Use with the GNU General Public ++ License. ++ . ++ Notwithstanding any other provision of this License, if you modify the ++ Program, your modified version must prominently offer all users ++ interacting with it remotely through a computer network (if your ++ version supports such interaction) an opportunity to receive the ++ Corresponding Source of your version by providing access to the ++ Corresponding Source from a network server at no charge, through some ++ standard or customary means of facilitating copying of software. This ++ Corresponding Source shall include the Corresponding Source for any ++ work covered by version 3 of the GNU General Public License that is ++ incorporated pursuant to the following paragraph. ++ . ++ Notwithstanding any other provision of this License, you have ++ permission to link or combine any covered work with a work licensed ++ under version 3 of the GNU General Public License into a single ++ combined work, and to convey the resulting work. The terms of this ++ License will continue to apply to the part which is the covered work, ++ but the work with which it is combined will remain governed by version ++ 3 of the GNU General Public License. ++ . ++ 14. Revised Versions of this License. ++ . ++ The Free Software Foundation may publish revised and/or new versions of ++ the GNU Affero General Public License from time to time. Such new ++ versions will be similar in spirit to the present version, but may ++ differ in detail to address new problems or concerns. ++ . ++ Each version is given a distinguishing version number. If the Program ++ specifies that a certain numbered version of the GNU Affero General ++ Public License "or any later version" applies to it, you have the ++ option of following the terms and conditions either of that numbered ++ version or of any later version published by the Free Software ++ Foundation. If the Program does not specify a version number of the ++ GNU Affero General Public License, you may choose any version ever ++ published by the Free Software Foundation. ++ . ++ If the Program specifies that a proxy can decide which future versions ++ of the GNU Affero General Public License can be used, that proxy's ++ public statement of acceptance of a version permanently authorizes you ++ to choose that version for the Program. ++ . ++ Later license versions may give you additional or different ++ permissions. However, no additional obligations are imposed on any ++ author or copyright holder as a result of your choosing to follow a ++ later version. ++ . ++ 15. Disclaimer of Warranty. ++ . ++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY ++ APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT ++ HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT ++ WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT ++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A ++ PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE ++ OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ++ ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. ++ . ++ 16. Limitation of Liability. ++ . ++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING ++ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR ++ CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, ++ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ++ ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT ++ NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES ++ SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO ++ OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY ++ HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. ++ . ++ 17. Interpretation of Sections 15 and 16. ++ . ++ If the disclaimer of warranty and limitation of liability provided ++ above cannot be given local legal effect according to their terms, ++ reviewing courts shall apply local law that most closely approximates ++ an absolute waiver of all civil liability in connection with the ++ Program, unless a warranty or assumption of liability accompanies a ++ copy of the Program in return for a fee. ++ . ++ END OF TERMS AND CONDITIONS ++ . ++ How to Apply These Terms to Your New Programs ++ . ++ If you develop a new program, and you want it to be of the greatest ++ possible use to the public, the best way to achieve this is to make it ++ free software which everyone can redistribute and change under these ++ terms. ++ . ++ To do so, attach the following notices to the program. It is safest to ++ attach them to the start of each source file to most effectively state ++ the exclusion of warranty; and each file should have at least the ++ "copyright" line and a pointer to where the full notice is found. ++ . ++ ++ Copyright (C) ++ . ++ This program is free software: you can redistribute it and/or modify ++ it under the terms of the GNU Affero General Public License as ++ published by the Free Software Foundation, either version 3 of the ++ License, or (at your option) any later version. ++ . ++ This program is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Affero General Public License for more details. ++ . ++ You should have received a copy of the GNU Affero General Public ++ License along with this program. If not, see ++ . ++ . ++ Also add information on how to contact you by electronic and paper ++ mail. ++ . ++ If your software can interact with users remotely through a computer ++ network, you should also make sure that it provides a way for users to ++ get its source. For example, if your program is a web application, its ++ interface could display a "Source" link that leads users to an archive ++ of the code. There are many ways you could offer source, and different ++ solutions will be better for different programs; see section 13 for the ++ specific requirements. ++ . ++ You should also get your employer (if you work as a programmer) or ++ school, if any, to sign a "copyright disclaimer" for the program, if ++ necessary. For more information on this, and how to apply and follow ++ the GNU AGPL, see . ++ ++License: ISC ++ Permission to use, copy, modify, and distribute this software for any ++ purpose with or without fee is hereby granted, provided that the above ++ copyright notice and this permission notice appear in all copies. ++ . ++ THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS ++ ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES ++ OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE ++ CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL ++ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR ++ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ++ ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS ++ SOFTWARE. ++ ++License: Apache-2.0 ++ Licensed under the Apache License, Version 2.0 (the "License"); ++ you may not use this file except in compliance with the License. ++ You may obtain a copy of the License at ++ . ++ http://www.apache.org/licenses/LICENSE-2.0 ++ . ++ Unless required by applicable law or agreed to in writing, software ++ distributed under the License is distributed on an "AS IS" BASIS, ++ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ++ See the License for the specific language governing permissions and ++ limitations under the License. ++Comment: ++ On Debian systems, the complete text of the Apache License version 2.0 can ++ be found in "/usr/share/common-licenses/Apache-2.0". ++ ++License: BSD-3-clause ++ Redistribution and use in source and binary forms, with or without modification, ++ are permitted provided that the following conditions are met: ++ * Redistributions of source code must retain the above copyright notice, ++ this list of conditions and the following disclaimer. ++ * Redistributions in binary form must reproduce the above copyright notice, ++ this list of conditions and the following disclaimer in the documentation ++ and/or other materials provided with the distribution. ++ * Neither the name of the Steinberg Media Technologies nor the names of its ++ contributors may be used to endorse or promote products derived from this ++ software without specific prior written permission. ++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ++ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED ++ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. ++ IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, ++ INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, ++ BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ++ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF ++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE ++ OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED ++ OF THE POSSIBILITY OF SUCH DAMAGE. ++ ++License: public-domain ++ This work is in public domain. diff --cc debian/copyright_hints index 00000000,00000000..1f0c8d40 new file mode 100644 --- /dev/null +++ b/debian/copyright_hints @@@ -1,0 -1,0 +1,2436 @@@ ++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ ++Upstream-Name: FIXME ++Upstream-Contact: FIXME ++Source: FIXME ++Disclaimer: Autogenerated by licensecheck ++ ++Files: ./examples/DemoRunner/Source/Demos/DemoPIPs1.cpp ++ ./examples/DemoRunner/Source/Demos/DemoPIPs2.cpp ++ ./examples/DemoRunner/Source/Demos/IntroScreen.h ++ ./examples/DemoRunner/Source/Demos/JUCEDemos.cpp ++ ./examples/DemoRunner/Source/Demos/JUCEDemos.h ++ ./examples/DemoRunner/Source/Main.cpp ++ ./examples/DemoRunner/Source/UI/DemoContentComponent.cpp ++ ./examples/DemoRunner/Source/UI/DemoContentComponent.h ++ ./examples/DemoRunner/Source/UI/MainComponent.cpp ++ ./examples/DemoRunner/Source/UI/MainComponent.h ++ ./examples/DemoRunner/Source/UI/SettingsContent.h ++ ./extras/AudioPerformanceTest/Source/Main.cpp ++ ./extras/AudioPerformanceTest/Source/MainComponent.h ++ ./extras/AudioPluginHost/Source/HostStartup.cpp ++ ./extras/AudioPluginHost/Source/Plugins/IOConfigurationWindow.cpp ++ ./extras/AudioPluginHost/Source/Plugins/IOConfigurationWindow.h ++ ./extras/AudioPluginHost/Source/Plugins/InternalPlugins.cpp ++ ./extras/AudioPluginHost/Source/Plugins/InternalPlugins.h ++ ./extras/AudioPluginHost/Source/Plugins/PluginGraph.cpp ++ ./extras/AudioPluginHost/Source/Plugins/PluginGraph.h ++ ./extras/AudioPluginHost/Source/UI/GraphEditorPanel.cpp ++ ./extras/AudioPluginHost/Source/UI/GraphEditorPanel.h ++ ./extras/AudioPluginHost/Source/UI/MainHostWindow.cpp ++ ./extras/AudioPluginHost/Source/UI/MainHostWindow.h ++ ./extras/AudioPluginHost/Source/UI/PluginWindow.h ++ ./extras/BinaryBuilder/Source/Main.cpp ++ ./extras/NetworkGraphicsDemo/Source/Demos.h ++ ./extras/NetworkGraphicsDemo/Source/Main.cpp ++ ./extras/NetworkGraphicsDemo/Source/MasterComponent.h ++ ./extras/NetworkGraphicsDemo/Source/SharedCanvas.h ++ ./extras/NetworkGraphicsDemo/Source/SlaveComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_AboutWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_EditorColourSchemeWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_FloatingToolWindow.h ++ ./extras/Projucer/Source/Application/Windows/jucer_GlobalPathsWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_PIPCreatorWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_SVGPathDataWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_TranslationToolWindowComponent.h ++ ./extras/Projucer/Source/Application/Windows/jucer_UTF8WindowComponent.h ++ ./extras/Projucer/Source/Application/jucer_Application.cpp ++ ./extras/Projucer/Source/Application/jucer_Application.h ++ ./extras/Projucer/Source/Application/jucer_AutoUpdater.cpp ++ ./extras/Projucer/Source/Application/jucer_AutoUpdater.h ++ ./extras/Projucer/Source/Application/jucer_CommandIDs.h ++ ./extras/Projucer/Source/Application/jucer_CommandLine.cpp ++ ./extras/Projucer/Source/Application/jucer_CommandLine.h ++ ./extras/Projucer/Source/Application/jucer_CommonHeaders.h ++ ./extras/Projucer/Source/Application/jucer_Headers.h ++ ./extras/Projucer/Source/Application/jucer_Main.cpp ++ ./extras/Projucer/Source/Application/jucer_MainWindow.cpp ++ ./extras/Projucer/Source/Application/jucer_MainWindow.h ++ ./extras/Projucer/Source/Application/jucer_ProjucerAnalytics.cpp ++ ./extras/Projucer/Source/Application/jucer_ProjucerAnalytics.h ++ ./extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.cpp ++ ./extras/Projucer/Source/CodeEditor/jucer_DocumentEditorComponent.h ++ ./extras/Projucer/Source/CodeEditor/jucer_ItemPreviewComponent.h ++ ./extras/Projucer/Source/CodeEditor/jucer_LiveBuildCodeEditor.h ++ ./extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.cpp ++ ./extras/Projucer/Source/CodeEditor/jucer_OpenDocumentManager.h ++ ./extras/Projucer/Source/CodeEditor/jucer_SourceCodeEditor.cpp ++ ./extras/Projucer/Source/CodeEditor/jucer_SourceCodeEditor.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ButtonHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComboBoxHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentNameProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentTypeHandler.cpp ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentTypeHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ComponentUndoableAction.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_GenericComponentHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_GroupComponentHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_HyperlinkButtonHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ImageButtonHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_JucerComponentHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_LabelHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_SliderHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TabbedComponentHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TextButtonHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TextEditorHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ToggleButtonHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_TreeViewHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Components/jucer_ViewportHandler.h ++ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.cpp ++ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ButtonDocument.h ++ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.cpp ++ ./extras/Projucer/Source/ComponentEditor/Documents/jucer_ComponentDocument.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ColouredElement.cpp ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ColouredElement.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ElementSiblingComponent.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_FillType.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_GradientPointComponent.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_ImageResourceProperty.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.cpp ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElement.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementEllipse.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.cpp ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementGroup.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementImage.cpp ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementImage.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.cpp ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementPath.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRectangle.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementRoundedRectangle.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementText.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PaintElementUndoableAction.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_PointComponent.h ++ ./extras/Projucer/Source/ComponentEditor/PaintElements/jucer_StrokeType.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ColourPropertyComponent.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentBooleanProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentChoiceProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentColourProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_ComponentTextProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_FilePropertyComponent.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_FontPropertyComponent.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_JustificationProperty.h ++ ./extras/Projucer/Source/ComponentEditor/Properties/jucer_PositionPropertyBase.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutEditor.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentLayoutPanel.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ComponentOverlayComponent.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_EditingPanelBase.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_EditingPanelBase.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerCommandIDs.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_JucerDocumentEditor.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutineEditor.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_PaintRoutinePanel.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_RelativePositionedRectangle.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ResourceEditorPanel.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_ResourceEditorPanel.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_SnapGridPainter.h ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_TestComponent.cpp ++ ./extras/Projucer/Source/ComponentEditor/UI/jucer_TestComponent.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_BinaryResources.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_ComponentLayout.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_ComponentLayout.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_GeneratedCode.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_GeneratedCode.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_JucerDocument.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_ObjectTypes.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_ObjectTypes.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_PaintRoutine.cpp ++ ./extras/Projucer/Source/ComponentEditor/jucer_PaintRoutine.h ++ ./extras/Projucer/Source/ComponentEditor/jucer_UtilityFunctions.h ++ ./extras/Projucer/Source/Licenses/jucer_LicenseController.cpp ++ ./extras/Projucer/Source/Licenses/jucer_LicenseController.h ++ ./extras/Projucer/Source/Licenses/jucer_LicenseThread.h ++ ./extras/Projucer/Source/Licenses/jucer_LicenseWebview.h ++ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ActivityListComponent.h ++ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_BuildTabStatusComponent.h ++ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ComponentListComponent.h ++ ./extras/Projucer/Source/LiveBuildEngine/UI/jucer_ErrorListComponent.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_ActivityList.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_ClassDatabase.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_ClientServerMessages.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.cpp ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineClient.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineDLL.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.cpp ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineServer.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CompileEngineSettings.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_CppHelpers.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_DiagnosticMessage.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.cpp ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_DownloadCompileEngineThread.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_ErrorList.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_LiveCodeBuilderDLL.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_MessageIDs.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_ProjectBuildInfo.h ++ ./extras/Projucer/Source/LiveBuildEngine/jucer_SourceCodeRange.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ExporterTreeItems.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_FileTreeItems.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_LiveBuildTab.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ModuleTreeItems.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ProjectTab.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_ProjectTreeItemBase.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_TabComponents.h ++ ./extras/Projucer/Source/Project/UI/Sidebar/jucer_TreeItemTypes.h ++ ./extras/Projucer/Source/Project/UI/jucer_ContentViewComponents.h ++ ./extras/Projucer/Source/Project/UI/jucer_FileGroupInformationComponent.h ++ ./extras/Projucer/Source/Project/UI/jucer_HeaderComponent.cpp ++ ./extras/Projucer/Source/Project/UI/jucer_HeaderComponent.h ++ ./extras/Projucer/Source/Project/UI/jucer_ModulesInformationComponent.h ++ ./extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.cpp ++ ./extras/Projucer/Source/Project/UI/jucer_ProjectContentComponent.h ++ ./extras/Projucer/Source/Project/jucer_Module.cpp ++ ./extras/Projucer/Source/Project/jucer_Module.h ++ ./extras/Projucer/Source/Project/jucer_Project.cpp ++ ./extras/Projucer/Source/Project/jucer_Project.h ++ ./extras/Projucer/Source/Project/jucer_ProjectType.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Android.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CLion.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_CodeBlocks.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_MSVC.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.cpp ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectExporter.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.cpp ++ ./extras/Projucer/Source/ProjectSaving/jucer_ProjectSaver.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_ResourceFile.cpp ++ ./extras/Projucer/Source/ProjectSaving/jucer_ResourceFile.h ++ ./extras/Projucer/Source/ProjectSaving/jucer_XcodeProjectParser.h ++ ./extras/Projucer/Source/Settings/jucer_AppearanceSettings.cpp ++ ./extras/Projucer/Source/Settings/jucer_AppearanceSettings.h ++ ./extras/Projucer/Source/Settings/jucer_StoredSettings.cpp ++ ./extras/Projucer/Source/Settings/jucer_StoredSettings.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_CodeHelpers.cpp ++ ./extras/Projucer/Source/Utility/Helpers/jucer_CodeHelpers.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_Colours.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_FileHelpers.cpp ++ ./extras/Projucer/Source/Utility/Helpers/jucer_FileHelpers.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.cpp ++ ./extras/Projucer/Source/Utility/Helpers/jucer_MiscUtilities.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_PresetIDs.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_RelativePath.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_TranslationHelpers.h ++ ./extras/Projucer/Source/Utility/Helpers/jucer_ValueSourceHelpers.h ++ ./extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.cpp ++ ./extras/Projucer/Source/Utility/PIPs/jucer_PIPGenerator.h ++ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_ColourPropertyComponent.h ++ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_FilePathPropertyComponent.h ++ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_LabelPropertyComponent.h ++ ./extras/Projucer/Source/Utility/UI/PropertyComponents/jucer_PropertyComponentsWithEnablement.h ++ ./extras/Projucer/Source/Utility/UI/jucer_IconButton.h ++ ./extras/Projucer/Source/Utility/UI/jucer_Icons.cpp ++ ./extras/Projucer/Source/Utility/UI/jucer_Icons.h ++ ./extras/Projucer/Source/Utility/UI/jucer_JucerTreeViewBase.cpp ++ ./extras/Projucer/Source/Utility/UI/jucer_JucerTreeViewBase.h ++ ./extras/Projucer/Source/Utility/UI/jucer_ProjucerLookAndFeel.cpp ++ ./extras/Projucer/Source/Utility/UI/jucer_ProjucerLookAndFeel.h ++ ./extras/Projucer/Source/Utility/UI/jucer_SlidingPanelComponent.cpp ++ ./extras/Projucer/Source/Utility/UI/jucer_SlidingPanelComponent.h ++ ./extras/Projucer/Source/Utility/UI/jucer_UserSettingsPopup.h ++ ./extras/Projucer/Source/Wizards/jucer_NewFileWizard.cpp ++ ./extras/Projucer/Source/Wizards/jucer_NewFileWizard.h ++ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizard.h ++ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.cpp ++ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardClasses.h ++ ./extras/Projucer/Source/Wizards/jucer_NewProjectWizardComponent.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Animated.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioApp.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_AudioPlugin.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Blank.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_Console.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_DLL.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_GUIApp.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_StaticLibrary.h ++ ./extras/Projucer/Source/Wizards/jucer_ProjectWizard_openGL.h ++ ./extras/Projucer/Source/Wizards/jucer_StartPageComponent.h ++ ./extras/Projucer/Source/Wizards/jucer_TemplateThumbnailsComponent.h ++ ./extras/UnitTestRunner/Source/Main.cpp ++ ./modules/juce_analytics/analytics/juce_Analytics.cpp ++ ./modules/juce_analytics/analytics/juce_Analytics.h ++ ./modules/juce_analytics/analytics/juce_ButtonTracker.cpp ++ ./modules/juce_analytics/analytics/juce_ButtonTracker.h ++ ./modules/juce_analytics/destinations/juce_AnalyticsDestination.h ++ ./modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.cpp ++ ./modules/juce_analytics/destinations/juce_ThreadedAnalyticsDestination.h ++ ./modules/juce_analytics/juce_analytics.cpp ++ ./modules/juce_analytics/juce_analytics.h ++ ./modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.cpp ++ ./modules/juce_audio_basics/buffers/juce_AudioProcessLoadMeasurer.h ++ ./modules/juce_audio_formats/codecs/juce_AiffAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_AiffAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_CoreAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_CoreAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_FlacAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_FlacAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_LAMEEncoderAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_MP3AudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_MP3AudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_OggVorbisAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_WavAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_WavAudioFormat.h ++ ./modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.cpp ++ ./modules/juce_audio_formats/codecs/juce_WindowsMediaAudioFormat.h ++ ./modules/juce_audio_formats/format/juce_AudioFormat.cpp ++ ./modules/juce_audio_formats/format/juce_AudioFormat.h ++ ./modules/juce_audio_formats/format/juce_AudioFormatManager.cpp ++ ./modules/juce_audio_formats/format/juce_AudioFormatManager.h ++ ./modules/juce_audio_formats/format/juce_AudioFormatReader.cpp ++ ./modules/juce_audio_formats/format/juce_AudioFormatReader.h ++ ./modules/juce_audio_formats/format/juce_AudioFormatReaderSource.cpp ++ ./modules/juce_audio_formats/format/juce_AudioFormatReaderSource.h ++ ./modules/juce_audio_formats/format/juce_AudioFormatWriter.cpp ++ ./modules/juce_audio_formats/format/juce_AudioFormatWriter.h ++ ./modules/juce_audio_formats/format/juce_AudioSubsectionReader.cpp ++ ./modules/juce_audio_formats/format/juce_AudioSubsectionReader.h ++ ./modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.cpp ++ ./modules/juce_audio_formats/format/juce_BufferingAudioFormatReader.h ++ ./modules/juce_audio_formats/format/juce_MemoryMappedAudioFormatReader.h ++ ./modules/juce_audio_formats/juce_audio_formats.cpp ++ ./modules/juce_audio_formats/juce_audio_formats.h ++ ./modules/juce_audio_formats/juce_audio_formats.mm ++ ./modules/juce_audio_formats/sampler/juce_Sampler.cpp ++ ./modules/juce_audio_formats/sampler/juce_Sampler.h ++ ./modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h ++ ./modules/juce_audio_plugin_client/AAX/juce_AAX_Wrapper.cpp ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode1.cpp ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode2.cpp ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode3.cpp ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_DigiCode_Header.h ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_MacUtilities.mm ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinUtilities.cpp ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_Wrapper.cpp ++ ./modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterApp.cpp ++ ./modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h ++ ./modules/juce_audio_plugin_client/Unity/juce_UnityPluginInterface.h ++ ./modules/juce_audio_plugin_client/Unity/juce_Unity_Wrapper.cpp ++ ./modules/juce_audio_plugin_client/VST/juce_VSTCallbackHandler.h ++ ./modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp ++ ./modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.mm ++ ./modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client.h ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AAX.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU.r ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_1.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AU_2.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_AUv3.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_1.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_2.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_3.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_4.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS_utils.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_Standalone.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_Unity.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST2.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST3.cpp ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_VST_utils.mm ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_utils.cpp ++ ./modules/juce_audio_plugin_client/utility/juce_CarbonVisibility.h ++ ./modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h ++ ./modules/juce_audio_plugin_client/utility/juce_FakeMouseMoveGenerator.h ++ ./modules/juce_audio_plugin_client/utility/juce_IncludeModuleHeaders.h ++ ./modules/juce_audio_plugin_client/utility/juce_IncludeSystemHeaders.h ++ ./modules/juce_audio_plugin_client/utility/juce_PluginHostType.h ++ ./modules/juce_audio_plugin_client/utility/juce_PluginUtilities.cpp ++ ./modules/juce_audio_plugin_client/utility/juce_WindowsHooks.h ++ ./modules/juce_audio_processors/format/juce_AudioPluginFormat.cpp ++ ./modules/juce_audio_processors/format/juce_AudioPluginFormat.h ++ ./modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp ++ ./modules/juce_audio_processors/format/juce_AudioPluginFormatManager.h ++ ./modules/juce_audio_processors/format_types/juce_AU_Shared.h ++ ./modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.h ++ ./modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm ++ ./modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.cpp ++ ./modules/juce_audio_processors/format_types/juce_LADSPAPluginFormat.h ++ ./modules/juce_audio_processors/format_types/juce_LegacyAudioParameter.cpp ++ ./modules/juce_audio_processors/format_types/juce_VST3Common.h ++ ./modules/juce_audio_processors/format_types/juce_VST3Headers.h ++ ./modules/juce_audio_processors/format_types/juce_VST3PluginFormat.cpp ++ ./modules/juce_audio_processors/format_types/juce_VST3PluginFormat.h ++ ./modules/juce_audio_processors/format_types/juce_VSTCommon.h ++ ./modules/juce_audio_processors/format_types/juce_VSTMidiEventList.h ++ ./modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp ++ ./modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h ++ ./modules/juce_audio_processors/juce_audio_processors.cpp ++ ./modules/juce_audio_processors/juce_audio_processors.h ++ ./modules/juce_audio_processors/juce_audio_processors.mm ++ ./modules/juce_audio_processors/processors/juce_AudioPluginInstance.cpp ++ ./modules/juce_audio_processors/processors/juce_AudioPluginInstance.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessor.cpp ++ ./modules/juce_audio_processors/processors/juce_AudioProcessor.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorEditor.cpp ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorListener.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameter.h ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.cpp ++ ./modules/juce_audio_processors/processors/juce_AudioProcessorParameterGroup.h ++ ./modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.cpp ++ ./modules/juce_audio_processors/processors/juce_GenericAudioProcessorEditor.h ++ ./modules/juce_audio_processors/processors/juce_PluginDescription.cpp ++ ./modules/juce_audio_processors/processors/juce_PluginDescription.h ++ ./modules/juce_audio_processors/scanning/juce_KnownPluginList.cpp ++ ./modules/juce_audio_processors/scanning/juce_KnownPluginList.h ++ ./modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.cpp ++ ./modules/juce_audio_processors/scanning/juce_PluginDirectoryScanner.h ++ ./modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp ++ ./modules/juce_audio_processors/scanning/juce_PluginListComponent.h ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterBool.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterBool.h ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterChoice.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterChoice.h ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterFloat.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterFloat.h ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterInt.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioParameterInt.h ++ ./modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h ++ ./modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp ++ ./modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.h ++ ./modules/juce_audio_processors/utilities/juce_RangedAudioParameter.cpp ++ ./modules/juce_audio_processors/utilities/juce_RangedAudioParameter.h ++ ./modules/juce_audio_utils/audio_cd/juce_AudioCDBurner.h ++ ./modules/juce_audio_utils/audio_cd/juce_AudioCDReader.cpp ++ ./modules/juce_audio_utils/audio_cd/juce_AudioCDReader.h ++ ./modules/juce_audio_utils/gui/juce_AudioAppComponent.cpp ++ ./modules/juce_audio_utils/gui/juce_AudioAppComponent.h ++ ./modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.cpp ++ ./modules/juce_audio_utils/gui/juce_AudioDeviceSelectorComponent.h ++ ./modules/juce_audio_utils/gui/juce_AudioThumbnail.cpp ++ ./modules/juce_audio_utils/gui/juce_AudioThumbnail.h ++ ./modules/juce_audio_utils/gui/juce_AudioThumbnailBase.h ++ ./modules/juce_audio_utils/gui/juce_AudioThumbnailCache.cpp ++ ./modules/juce_audio_utils/gui/juce_AudioThumbnailCache.h ++ ./modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.cpp ++ ./modules/juce_audio_utils/gui/juce_AudioVisualiserComponent.h ++ ./modules/juce_audio_utils/gui/juce_BluetoothMidiDevicePairingDialogue.h ++ ./modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.cpp ++ ./modules/juce_audio_utils/gui/juce_MidiKeyboardComponent.h ++ ./modules/juce_audio_utils/juce_audio_utils.cpp ++ ./modules/juce_audio_utils/juce_audio_utils.h ++ ./modules/juce_audio_utils/juce_audio_utils.mm ++ ./modules/juce_audio_utils/native/juce_android_BluetoothMidiDevicePairingDialogue.cpp ++ ./modules/juce_audio_utils/native/juce_ios_BluetoothMidiDevicePairingDialogue.mm ++ ./modules/juce_audio_utils/native/juce_linux_AudioCDReader.cpp ++ ./modules/juce_audio_utils/native/juce_linux_BluetoothMidiDevicePairingDialogue.cpp ++ ./modules/juce_audio_utils/native/juce_mac_AudioCDBurner.mm ++ ./modules/juce_audio_utils/native/juce_mac_AudioCDReader.mm ++ ./modules/juce_audio_utils/native/juce_mac_BluetoothMidiDevicePairingDialogue.mm ++ ./modules/juce_audio_utils/native/juce_win32_AudioCDBurner.cpp ++ ./modules/juce_audio_utils/native/juce_win32_AudioCDReader.cpp ++ ./modules/juce_audio_utils/native/juce_win_BluetoothMidiDevicePairingDialogue.cpp ++ ./modules/juce_audio_utils/players/juce_AudioProcessorPlayer.cpp ++ ./modules/juce_audio_utils/players/juce_AudioProcessorPlayer.h ++ ./modules/juce_audio_utils/players/juce_SoundPlayer.cpp ++ ./modules/juce_audio_utils/players/juce_SoundPlayer.h ++ ./modules/juce_box2d/juce_box2d.cpp ++ ./modules/juce_box2d/juce_box2d.h ++ ./modules/juce_box2d/utils/juce_Box2DRenderer.cpp ++ ./modules/juce_box2d/utils/juce_Box2DRenderer.h ++ ./modules/juce_cryptography/encryption/juce_BlowFish.cpp ++ ./modules/juce_cryptography/encryption/juce_BlowFish.h ++ ./modules/juce_cryptography/encryption/juce_Primes.cpp ++ ./modules/juce_cryptography/encryption/juce_Primes.h ++ ./modules/juce_cryptography/encryption/juce_RSAKey.cpp ++ ./modules/juce_cryptography/encryption/juce_RSAKey.h ++ ./modules/juce_cryptography/hashing/juce_MD5.cpp ++ ./modules/juce_cryptography/hashing/juce_MD5.h ++ ./modules/juce_cryptography/hashing/juce_SHA256.cpp ++ ./modules/juce_cryptography/hashing/juce_SHA256.h ++ ./modules/juce_cryptography/hashing/juce_Whirlpool.cpp ++ ./modules/juce_cryptography/hashing/juce_Whirlpool.h ++ ./modules/juce_cryptography/juce_cryptography.cpp ++ ./modules/juce_cryptography/juce_cryptography.h ++ ./modules/juce_cryptography/juce_cryptography.mm ++ ./modules/juce_data_structures/app_properties/juce_ApplicationProperties.cpp ++ ./modules/juce_data_structures/app_properties/juce_ApplicationProperties.h ++ ./modules/juce_data_structures/app_properties/juce_PropertiesFile.cpp ++ ./modules/juce_data_structures/app_properties/juce_PropertiesFile.h ++ ./modules/juce_data_structures/juce_data_structures.cpp ++ ./modules/juce_data_structures/juce_data_structures.h ++ ./modules/juce_data_structures/juce_data_structures.mm ++ ./modules/juce_data_structures/undomanager/juce_UndoManager.cpp ++ ./modules/juce_data_structures/undomanager/juce_UndoManager.h ++ ./modules/juce_data_structures/undomanager/juce_UndoableAction.h ++ ./modules/juce_data_structures/values/juce_CachedValue.cpp ++ ./modules/juce_data_structures/values/juce_CachedValue.h ++ ./modules/juce_data_structures/values/juce_Value.cpp ++ ./modules/juce_data_structures/values/juce_Value.h ++ ./modules/juce_data_structures/values/juce_ValueTree.cpp ++ ./modules/juce_data_structures/values/juce_ValueTree.h ++ ./modules/juce_data_structures/values/juce_ValueTreeSynchroniser.cpp ++ ./modules/juce_data_structures/values/juce_ValueTreeSynchroniser.h ++ ./modules/juce_data_structures/values/juce_ValueWithDefault.cpp ++ ./modules/juce_data_structures/values/juce_ValueWithDefault.h ++ ./modules/juce_dsp/containers/juce_AudioBlock.h ++ ./modules/juce_dsp/containers/juce_SIMDRegister.h ++ ./modules/juce_dsp/containers/juce_SIMDRegister_Impl.h ++ ./modules/juce_dsp/containers/juce_SIMDRegister_test.cpp ++ ./modules/juce_dsp/filter_design/juce_FilterDesign.cpp ++ ./modules/juce_dsp/filter_design/juce_FilterDesign.h ++ ./modules/juce_dsp/frequency/juce_Convolution.cpp ++ ./modules/juce_dsp/frequency/juce_Convolution.h ++ ./modules/juce_dsp/frequency/juce_FFT.cpp ++ ./modules/juce_dsp/frequency/juce_FFT.h ++ ./modules/juce_dsp/frequency/juce_FFT_test.cpp ++ ./modules/juce_dsp/frequency/juce_Windowing.cpp ++ ./modules/juce_dsp/frequency/juce_Windowing.h ++ ./modules/juce_dsp/juce_dsp.cpp ++ ./modules/juce_dsp/juce_dsp.h ++ ./modules/juce_dsp/juce_dsp.mm ++ ./modules/juce_dsp/maths/juce_FastMathApproximations.h ++ ./modules/juce_dsp/maths/juce_LogRampedValue.h ++ ./modules/juce_dsp/maths/juce_LogRampedValue_test.cpp ++ ./modules/juce_dsp/maths/juce_LookupTable.cpp ++ ./modules/juce_dsp/maths/juce_LookupTable.h ++ ./modules/juce_dsp/maths/juce_Matrix.cpp ++ ./modules/juce_dsp/maths/juce_Matrix.h ++ ./modules/juce_dsp/maths/juce_Matrix_test.cpp ++ ./modules/juce_dsp/maths/juce_Phase.h ++ ./modules/juce_dsp/maths/juce_Polynomial.h ++ ./modules/juce_dsp/maths/juce_SpecialFunctions.cpp ++ ./modules/juce_dsp/maths/juce_SpecialFunctions.h ++ ./modules/juce_dsp/native/juce_avx_SIMDNativeOps.cpp ++ ./modules/juce_dsp/native/juce_avx_SIMDNativeOps.h ++ ./modules/juce_dsp/native/juce_fallback_SIMDNativeOps.h ++ ./modules/juce_dsp/native/juce_neon_SIMDNativeOps.cpp ++ ./modules/juce_dsp/native/juce_neon_SIMDNativeOps.h ++ ./modules/juce_dsp/native/juce_sse_SIMDNativeOps.cpp ++ ./modules/juce_dsp/native/juce_sse_SIMDNativeOps.h ++ ./modules/juce_dsp/processors/juce_Bias.h ++ ./modules/juce_dsp/processors/juce_FIRFilter.cpp ++ ./modules/juce_dsp/processors/juce_FIRFilter.h ++ ./modules/juce_dsp/processors/juce_FIRFilter_test.cpp ++ ./modules/juce_dsp/processors/juce_Gain.h ++ ./modules/juce_dsp/processors/juce_IIRFilter.cpp ++ ./modules/juce_dsp/processors/juce_IIRFilter.h ++ ./modules/juce_dsp/processors/juce_IIRFilter_Impl.h ++ ./modules/juce_dsp/processors/juce_LadderFilter.cpp ++ ./modules/juce_dsp/processors/juce_LadderFilter.h ++ ./modules/juce_dsp/processors/juce_Oscillator.h ++ ./modules/juce_dsp/processors/juce_Oversampling.cpp ++ ./modules/juce_dsp/processors/juce_Oversampling.h ++ ./modules/juce_dsp/processors/juce_ProcessContext.h ++ ./modules/juce_dsp/processors/juce_ProcessorChain.h ++ ./modules/juce_dsp/processors/juce_ProcessorDuplicator.h ++ ./modules/juce_dsp/processors/juce_ProcessorWrapper.h ++ ./modules/juce_dsp/processors/juce_Reverb.h ++ ./modules/juce_dsp/processors/juce_StateVariableFilter.h ++ ./modules/juce_dsp/processors/juce_WaveShaper.h ++ ./modules/juce_graphics/colour/juce_Colour.cpp ++ ./modules/juce_graphics/colour/juce_Colour.h ++ ./modules/juce_graphics/colour/juce_ColourGradient.cpp ++ ./modules/juce_graphics/colour/juce_ColourGradient.h ++ ./modules/juce_graphics/colour/juce_Colours.cpp ++ ./modules/juce_graphics/colour/juce_Colours.h ++ ./modules/juce_graphics/colour/juce_FillType.cpp ++ ./modules/juce_graphics/colour/juce_FillType.h ++ ./modules/juce_graphics/colour/juce_PixelFormats.h ++ ./modules/juce_graphics/contexts/juce_GraphicsContext.cpp ++ ./modules/juce_graphics/contexts/juce_GraphicsContext.h ++ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsContext.h ++ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.cpp ++ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsPostScriptRenderer.h ++ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.cpp ++ ./modules/juce_graphics/contexts/juce_LowLevelGraphicsSoftwareRenderer.h ++ ./modules/juce_graphics/effects/juce_DropShadowEffect.cpp ++ ./modules/juce_graphics/effects/juce_DropShadowEffect.h ++ ./modules/juce_graphics/effects/juce_GlowEffect.cpp ++ ./modules/juce_graphics/effects/juce_GlowEffect.h ++ ./modules/juce_graphics/effects/juce_ImageEffectFilter.h ++ ./modules/juce_graphics/fonts/juce_AttributedString.cpp ++ ./modules/juce_graphics/fonts/juce_AttributedString.h ++ ./modules/juce_graphics/fonts/juce_CustomTypeface.cpp ++ ./modules/juce_graphics/fonts/juce_CustomTypeface.h ++ ./modules/juce_graphics/fonts/juce_Font.cpp ++ ./modules/juce_graphics/fonts/juce_Font.h ++ ./modules/juce_graphics/fonts/juce_GlyphArrangement.cpp ++ ./modules/juce_graphics/fonts/juce_GlyphArrangement.h ++ ./modules/juce_graphics/fonts/juce_TextLayout.cpp ++ ./modules/juce_graphics/fonts/juce_TextLayout.h ++ ./modules/juce_graphics/fonts/juce_Typeface.cpp ++ ./modules/juce_graphics/fonts/juce_Typeface.h ++ ./modules/juce_graphics/geometry/juce_AffineTransform.cpp ++ ./modules/juce_graphics/geometry/juce_AffineTransform.h ++ ./modules/juce_graphics/geometry/juce_BorderSize.h ++ ./modules/juce_graphics/geometry/juce_EdgeTable.cpp ++ ./modules/juce_graphics/geometry/juce_EdgeTable.h ++ ./modules/juce_graphics/geometry/juce_Line.h ++ ./modules/juce_graphics/geometry/juce_Parallelogram.h ++ ./modules/juce_graphics/geometry/juce_Path.cpp ++ ./modules/juce_graphics/geometry/juce_Path.h ++ ./modules/juce_graphics/geometry/juce_PathIterator.cpp ++ ./modules/juce_graphics/geometry/juce_PathIterator.h ++ ./modules/juce_graphics/geometry/juce_PathStrokeType.cpp ++ ./modules/juce_graphics/geometry/juce_PathStrokeType.h ++ ./modules/juce_graphics/geometry/juce_Point.h ++ ./modules/juce_graphics/geometry/juce_Rectangle.h ++ ./modules/juce_graphics/geometry/juce_RectangleList.h ++ ./modules/juce_graphics/image_formats/juce_GIFLoader.cpp ++ ./modules/juce_graphics/image_formats/juce_JPEGLoader.cpp ++ ./modules/juce_graphics/image_formats/juce_PNGLoader.cpp ++ ./modules/juce_graphics/images/juce_Image.cpp ++ ./modules/juce_graphics/images/juce_Image.h ++ ./modules/juce_graphics/images/juce_ImageCache.cpp ++ ./modules/juce_graphics/images/juce_ImageCache.h ++ ./modules/juce_graphics/images/juce_ImageConvolutionKernel.cpp ++ ./modules/juce_graphics/images/juce_ImageConvolutionKernel.h ++ ./modules/juce_graphics/images/juce_ImageFileFormat.cpp ++ ./modules/juce_graphics/images/juce_ImageFileFormat.h ++ ./modules/juce_graphics/juce_graphics.cpp ++ ./modules/juce_graphics/juce_graphics.h ++ ./modules/juce_graphics/juce_graphics.mm ++ ./modules/juce_graphics/native/juce_RenderingHelpers.h ++ ./modules/juce_graphics/native/juce_android_Fonts.cpp ++ ./modules/juce_graphics/native/juce_android_GraphicsContext.cpp ++ ./modules/juce_graphics/native/juce_android_IconHelpers.cpp ++ ./modules/juce_graphics/native/juce_freetype_Fonts.cpp ++ ./modules/juce_graphics/native/juce_linux_Fonts.cpp ++ ./modules/juce_graphics/native/juce_linux_IconHelpers.cpp ++ ./modules/juce_graphics/native/juce_mac_CoreGraphicsContext.h ++ ./modules/juce_graphics/native/juce_mac_CoreGraphicsContext.mm ++ ./modules/juce_graphics/native/juce_mac_CoreGraphicsHelpers.h ++ ./modules/juce_graphics/native/juce_mac_Fonts.mm ++ ./modules/juce_graphics/native/juce_mac_IconHelpers.cpp ++ ./modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.cpp ++ ./modules/juce_graphics/native/juce_win32_Direct2DGraphicsContext.h ++ ./modules/juce_graphics/native/juce_win32_DirectWriteTypeLayout.cpp ++ ./modules/juce_graphics/native/juce_win32_DirectWriteTypeface.cpp ++ ./modules/juce_graphics/native/juce_win32_Fonts.cpp ++ ./modules/juce_graphics/native/juce_win32_IconHelpers.cpp ++ ./modules/juce_graphics/placement/juce_Justification.h ++ ./modules/juce_graphics/placement/juce_RectanglePlacement.cpp ++ ./modules/juce_graphics/placement/juce_RectanglePlacement.h ++ ./modules/juce_gui_basics/application/juce_Application.cpp ++ ./modules/juce_gui_basics/application/juce_Application.h ++ ./modules/juce_gui_basics/buttons/juce_ArrowButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_ArrowButton.h ++ ./modules/juce_gui_basics/buttons/juce_Button.cpp ++ ./modules/juce_gui_basics/buttons/juce_Button.h ++ ./modules/juce_gui_basics/buttons/juce_DrawableButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_DrawableButton.h ++ ./modules/juce_gui_basics/buttons/juce_HyperlinkButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_HyperlinkButton.h ++ ./modules/juce_gui_basics/buttons/juce_ImageButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_ImageButton.h ++ ./modules/juce_gui_basics/buttons/juce_ShapeButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_ShapeButton.h ++ ./modules/juce_gui_basics/buttons/juce_TextButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_TextButton.h ++ ./modules/juce_gui_basics/buttons/juce_ToggleButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_ToggleButton.h ++ ./modules/juce_gui_basics/buttons/juce_ToolbarButton.cpp ++ ./modules/juce_gui_basics/buttons/juce_ToolbarButton.h ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandID.h ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.cpp ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandInfo.h ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandManager.cpp ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandManager.h ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.cpp ++ ./modules/juce_gui_basics/commands/juce_ApplicationCommandTarget.h ++ ./modules/juce_gui_basics/commands/juce_KeyPressMappingSet.cpp ++ ./modules/juce_gui_basics/commands/juce_KeyPressMappingSet.h ++ ./modules/juce_gui_basics/components/juce_CachedComponentImage.h ++ ./modules/juce_gui_basics/components/juce_Component.cpp ++ ./modules/juce_gui_basics/components/juce_Component.h ++ ./modules/juce_gui_basics/components/juce_ComponentListener.cpp ++ ./modules/juce_gui_basics/components/juce_ComponentListener.h ++ ./modules/juce_gui_basics/components/juce_ModalComponentManager.cpp ++ ./modules/juce_gui_basics/components/juce_ModalComponentManager.h ++ ./modules/juce_gui_basics/desktop/juce_Desktop.cpp ++ ./modules/juce_gui_basics/desktop/juce_Desktop.h ++ ./modules/juce_gui_basics/desktop/juce_Displays.cpp ++ ./modules/juce_gui_basics/desktop/juce_Displays.h ++ ./modules/juce_gui_basics/drawables/juce_Drawable.cpp ++ ./modules/juce_gui_basics/drawables/juce_Drawable.h ++ ./modules/juce_gui_basics/drawables/juce_DrawableComposite.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawableComposite.h ++ ./modules/juce_gui_basics/drawables/juce_DrawableImage.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawableImage.h ++ ./modules/juce_gui_basics/drawables/juce_DrawablePath.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawablePath.h ++ ./modules/juce_gui_basics/drawables/juce_DrawableRectangle.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawableRectangle.h ++ ./modules/juce_gui_basics/drawables/juce_DrawableShape.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawableShape.h ++ ./modules/juce_gui_basics/drawables/juce_DrawableText.cpp ++ ./modules/juce_gui_basics/drawables/juce_DrawableText.h ++ ./modules/juce_gui_basics/drawables/juce_SVGParser.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_ContentSharer.h ++ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileBrowserListener.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileChooser.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileChooser.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileChooserDialogBox.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileListComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileListComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_FilePreviewComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileSearchPathListComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_FilenameComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_FilenameComponent.h ++ ./modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.cpp ++ ./modules/juce_gui_basics/filebrowser/juce_ImagePreviewComponent.h ++ ./modules/juce_gui_basics/juce_gui_basics.cpp ++ ./modules/juce_gui_basics/juce_gui_basics.h ++ ./modules/juce_gui_basics/juce_gui_basics.mm ++ ./modules/juce_gui_basics/keyboard/juce_CaretComponent.cpp ++ ./modules/juce_gui_basics/keyboard/juce_CaretComponent.h ++ ./modules/juce_gui_basics/keyboard/juce_KeyListener.cpp ++ ./modules/juce_gui_basics/keyboard/juce_KeyListener.h ++ ./modules/juce_gui_basics/keyboard/juce_KeyPress.cpp ++ ./modules/juce_gui_basics/keyboard/juce_KeyPress.h ++ ./modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.cpp ++ ./modules/juce_gui_basics/keyboard/juce_KeyboardFocusTraverser.h ++ ./modules/juce_gui_basics/keyboard/juce_ModifierKeys.cpp ++ ./modules/juce_gui_basics/keyboard/juce_ModifierKeys.h ++ ./modules/juce_gui_basics/keyboard/juce_SystemClipboard.h ++ ./modules/juce_gui_basics/keyboard/juce_TextEditorKeyMapper.h ++ ./modules/juce_gui_basics/keyboard/juce_TextInputTarget.h ++ ./modules/juce_gui_basics/layout/juce_AnimatedPosition.h ++ ./modules/juce_gui_basics/layout/juce_AnimatedPositionBehaviours.h ++ ./modules/juce_gui_basics/layout/juce_ComponentAnimator.cpp ++ ./modules/juce_gui_basics/layout/juce_ComponentAnimator.h ++ ./modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.cpp ++ ./modules/juce_gui_basics/layout/juce_ComponentBoundsConstrainer.h ++ ./modules/juce_gui_basics/layout/juce_ComponentBuilder.cpp ++ ./modules/juce_gui_basics/layout/juce_ComponentBuilder.h ++ ./modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.cpp ++ ./modules/juce_gui_basics/layout/juce_ComponentMovementWatcher.h ++ ./modules/juce_gui_basics/layout/juce_ConcertinaPanel.cpp ++ ./modules/juce_gui_basics/layout/juce_ConcertinaPanel.h ++ ./modules/juce_gui_basics/layout/juce_FlexBox.cpp ++ ./modules/juce_gui_basics/layout/juce_FlexBox.h ++ ./modules/juce_gui_basics/layout/juce_FlexItem.h ++ ./modules/juce_gui_basics/layout/juce_Grid.cpp ++ ./modules/juce_gui_basics/layout/juce_Grid.h ++ ./modules/juce_gui_basics/layout/juce_GridItem.cpp ++ ./modules/juce_gui_basics/layout/juce_GridItem.h ++ ./modules/juce_gui_basics/layout/juce_GroupComponent.cpp ++ ./modules/juce_gui_basics/layout/juce_GroupComponent.h ++ ./modules/juce_gui_basics/layout/juce_MultiDocumentPanel.cpp ++ ./modules/juce_gui_basics/layout/juce_MultiDocumentPanel.h ++ ./modules/juce_gui_basics/layout/juce_ResizableBorderComponent.cpp ++ ./modules/juce_gui_basics/layout/juce_ResizableBorderComponent.h ++ ./modules/juce_gui_basics/layout/juce_ResizableCornerComponent.cpp ++ ./modules/juce_gui_basics/layout/juce_ResizableCornerComponent.h ++ ./modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.cpp ++ ./modules/juce_gui_basics/layout/juce_ResizableEdgeComponent.h ++ ./modules/juce_gui_basics/layout/juce_ScrollBar.cpp ++ ./modules/juce_gui_basics/layout/juce_ScrollBar.h ++ ./modules/juce_gui_basics/layout/juce_SidePanel.cpp ++ ./modules/juce_gui_basics/layout/juce_SidePanel.h ++ ./modules/juce_gui_basics/layout/juce_StretchableLayoutManager.cpp ++ ./modules/juce_gui_basics/layout/juce_StretchableLayoutManager.h ++ ./modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.cpp ++ ./modules/juce_gui_basics/layout/juce_StretchableLayoutResizerBar.h ++ ./modules/juce_gui_basics/layout/juce_StretchableObjectResizer.cpp ++ ./modules/juce_gui_basics/layout/juce_StretchableObjectResizer.h ++ ./modules/juce_gui_basics/layout/juce_TabbedButtonBar.cpp ++ ./modules/juce_gui_basics/layout/juce_TabbedButtonBar.h ++ ./modules/juce_gui_basics/layout/juce_TabbedComponent.cpp ++ ./modules/juce_gui_basics/layout/juce_TabbedComponent.h ++ ./modules/juce_gui_basics/layout/juce_Viewport.cpp ++ ./modules/juce_gui_basics/layout/juce_Viewport.h ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.cpp ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel.h ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.cpp ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V1.h ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.h ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.cpp ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V3.h ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.cpp ++ ./modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V4.h ++ ./modules/juce_gui_basics/menus/juce_BurgerMenuComponent.cpp ++ ./modules/juce_gui_basics/menus/juce_BurgerMenuComponent.h ++ ./modules/juce_gui_basics/menus/juce_MenuBarComponent.cpp ++ ./modules/juce_gui_basics/menus/juce_MenuBarComponent.h ++ ./modules/juce_gui_basics/menus/juce_MenuBarModel.cpp ++ ./modules/juce_gui_basics/menus/juce_MenuBarModel.h ++ ./modules/juce_gui_basics/menus/juce_PopupMenu.cpp ++ ./modules/juce_gui_basics/menus/juce_PopupMenu.h ++ ./modules/juce_gui_basics/misc/juce_BubbleComponent.cpp ++ ./modules/juce_gui_basics/misc/juce_BubbleComponent.h ++ ./modules/juce_gui_basics/misc/juce_DropShadower.cpp ++ ./modules/juce_gui_basics/misc/juce_DropShadower.h ++ ./modules/juce_gui_basics/misc/juce_JUCESplashScreen.cpp ++ ./modules/juce_gui_basics/misc/juce_JUCESplashScreen.h ++ ./modules/juce_gui_basics/mouse/juce_ComponentDragger.cpp ++ ./modules/juce_gui_basics/mouse/juce_ComponentDragger.h ++ ./modules/juce_gui_basics/mouse/juce_DragAndDropContainer.cpp ++ ./modules/juce_gui_basics/mouse/juce_DragAndDropContainer.h ++ ./modules/juce_gui_basics/mouse/juce_DragAndDropTarget.h ++ ./modules/juce_gui_basics/mouse/juce_FileDragAndDropTarget.h ++ ./modules/juce_gui_basics/mouse/juce_LassoComponent.h ++ ./modules/juce_gui_basics/mouse/juce_MouseCursor.cpp ++ ./modules/juce_gui_basics/mouse/juce_MouseCursor.h ++ ./modules/juce_gui_basics/mouse/juce_MouseEvent.cpp ++ ./modules/juce_gui_basics/mouse/juce_MouseEvent.h ++ ./modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.cpp ++ ./modules/juce_gui_basics/mouse/juce_MouseInactivityDetector.h ++ ./modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp ++ ./modules/juce_gui_basics/mouse/juce_MouseInputSource.h ++ ./modules/juce_gui_basics/mouse/juce_MouseListener.cpp ++ ./modules/juce_gui_basics/mouse/juce_MouseListener.h ++ ./modules/juce_gui_basics/mouse/juce_SelectedItemSet.h ++ ./modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h ++ ./modules/juce_gui_basics/mouse/juce_TooltipClient.h ++ ./modules/juce_gui_basics/native/juce_MultiTouchMapper.h ++ ./modules/juce_gui_basics/native/juce_android_ContentSharer.cpp ++ ./modules/juce_gui_basics/native/juce_android_FileChooser.cpp ++ ./modules/juce_gui_basics/native/juce_android_Windowing.cpp ++ ./modules/juce_gui_basics/native/juce_common_MimeTypes.cpp ++ ./modules/juce_gui_basics/native/juce_ios_ContentSharer.cpp ++ ./modules/juce_gui_basics/native/juce_ios_FileChooser.mm ++ ./modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm ++ ./modules/juce_gui_basics/native/juce_ios_Windowing.mm ++ ./modules/juce_gui_basics/native/juce_linux_FileChooser.cpp ++ ./modules/juce_gui_basics/native/juce_linux_X11.cpp ++ ./modules/juce_gui_basics/native/juce_linux_X11.h ++ ./modules/juce_gui_basics/native/juce_linux_X11_Clipboard.cpp ++ ./modules/juce_gui_basics/native/juce_linux_X11_Windowing.cpp ++ ./modules/juce_gui_basics/native/juce_mac_FileChooser.mm ++ ./modules/juce_gui_basics/native/juce_mac_MainMenu.mm ++ ./modules/juce_gui_basics/native/juce_mac_MouseCursor.mm ++ ./modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm ++ ./modules/juce_gui_basics/native/juce_mac_Windowing.mm ++ ./modules/juce_gui_basics/native/juce_win32_DragAndDrop.cpp ++ ./modules/juce_gui_basics/native/juce_win32_FileChooser.cpp ++ ./modules/juce_gui_basics/native/juce_win32_Windowing.cpp ++ ./modules/juce_gui_basics/positioning/juce_MarkerList.cpp ++ ./modules/juce_gui_basics/positioning/juce_MarkerList.h ++ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinate.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinate.h ++ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativeCoordinatePositioner.h ++ ./modules/juce_gui_basics/positioning/juce_RelativeParallelogram.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativeParallelogram.h ++ ./modules/juce_gui_basics/positioning/juce_RelativePoint.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativePoint.h ++ ./modules/juce_gui_basics/positioning/juce_RelativePointPath.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativePointPath.h ++ ./modules/juce_gui_basics/positioning/juce_RelativeRectangle.cpp ++ ./modules/juce_gui_basics/positioning/juce_RelativeRectangle.h ++ ./modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_BooleanPropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_ButtonPropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_ChoicePropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_MultiChoicePropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_PropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_PropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_PropertyPanel.cpp ++ ./modules/juce_gui_basics/properties/juce_PropertyPanel.h ++ ./modules/juce_gui_basics/properties/juce_SliderPropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_SliderPropertyComponent.h ++ ./modules/juce_gui_basics/properties/juce_TextPropertyComponent.cpp ++ ./modules/juce_gui_basics/properties/juce_TextPropertyComponent.h ++ ./modules/juce_gui_basics/widgets/juce_ComboBox.cpp ++ ./modules/juce_gui_basics/widgets/juce_ComboBox.h ++ ./modules/juce_gui_basics/widgets/juce_ImageComponent.cpp ++ ./modules/juce_gui_basics/widgets/juce_ImageComponent.h ++ ./modules/juce_gui_basics/widgets/juce_Label.cpp ++ ./modules/juce_gui_basics/widgets/juce_Label.h ++ ./modules/juce_gui_basics/widgets/juce_ListBox.cpp ++ ./modules/juce_gui_basics/widgets/juce_ListBox.h ++ ./modules/juce_gui_basics/widgets/juce_ProgressBar.cpp ++ ./modules/juce_gui_basics/widgets/juce_ProgressBar.h ++ ./modules/juce_gui_basics/widgets/juce_Slider.cpp ++ ./modules/juce_gui_basics/widgets/juce_Slider.h ++ ./modules/juce_gui_basics/widgets/juce_TableHeaderComponent.cpp ++ ./modules/juce_gui_basics/widgets/juce_TableHeaderComponent.h ++ ./modules/juce_gui_basics/widgets/juce_TableListBox.cpp ++ ./modules/juce_gui_basics/widgets/juce_TableListBox.h ++ ./modules/juce_gui_basics/widgets/juce_TextEditor.cpp ++ ./modules/juce_gui_basics/widgets/juce_TextEditor.h ++ ./modules/juce_gui_basics/widgets/juce_Toolbar.cpp ++ ./modules/juce_gui_basics/widgets/juce_Toolbar.h ++ ./modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.cpp ++ ./modules/juce_gui_basics/widgets/juce_ToolbarItemComponent.h ++ ./modules/juce_gui_basics/widgets/juce_ToolbarItemFactory.h ++ ./modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.cpp ++ ./modules/juce_gui_basics/widgets/juce_ToolbarItemPalette.h ++ ./modules/juce_gui_basics/widgets/juce_TreeView.cpp ++ ./modules/juce_gui_basics/widgets/juce_TreeView.h ++ ./modules/juce_gui_basics/windows/juce_AlertWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_AlertWindow.h ++ ./modules/juce_gui_basics/windows/juce_CallOutBox.cpp ++ ./modules/juce_gui_basics/windows/juce_CallOutBox.h ++ ./modules/juce_gui_basics/windows/juce_ComponentPeer.cpp ++ ./modules/juce_gui_basics/windows/juce_ComponentPeer.h ++ ./modules/juce_gui_basics/windows/juce_DialogWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_DialogWindow.h ++ ./modules/juce_gui_basics/windows/juce_DocumentWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_DocumentWindow.h ++ ./modules/juce_gui_basics/windows/juce_NativeMessageBox.h ++ ./modules/juce_gui_basics/windows/juce_ResizableWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_ResizableWindow.h ++ ./modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_ThreadWithProgressWindow.h ++ ./modules/juce_gui_basics/windows/juce_TooltipWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_TooltipWindow.h ++ ./modules/juce_gui_basics/windows/juce_TopLevelWindow.cpp ++ ./modules/juce_gui_basics/windows/juce_TopLevelWindow.h ++ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.cpp ++ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniser.h ++ ./modules/juce_gui_extra/code_editor/juce_CPlusPlusCodeTokeniserFunctions.h ++ ./modules/juce_gui_extra/code_editor/juce_CodeDocument.cpp ++ ./modules/juce_gui_extra/code_editor/juce_CodeDocument.h ++ ./modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.cpp ++ ./modules/juce_gui_extra/code_editor/juce_CodeEditorComponent.h ++ ./modules/juce_gui_extra/code_editor/juce_CodeTokeniser.h ++ ./modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.cpp ++ ./modules/juce_gui_extra/code_editor/juce_LuaCodeTokeniser.h ++ ./modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.cpp ++ ./modules/juce_gui_extra/code_editor/juce_XMLCodeTokeniser.h ++ ./modules/juce_gui_extra/documents/juce_FileBasedDocument.cpp ++ ./modules/juce_gui_extra/documents/juce_FileBasedDocument.h ++ ./modules/juce_gui_extra/embedding/juce_ActiveXControlComponent.h ++ ./modules/juce_gui_extra/embedding/juce_AndroidViewComponent.h ++ ./modules/juce_gui_extra/embedding/juce_NSViewComponent.h ++ ./modules/juce_gui_extra/embedding/juce_ScopedDPIAwarenessDisabler.h ++ ./modules/juce_gui_extra/embedding/juce_UIViewComponent.h ++ ./modules/juce_gui_extra/embedding/juce_XEmbedComponent.h ++ ./modules/juce_gui_extra/juce_gui_extra.cpp ++ ./modules/juce_gui_extra/juce_gui_extra.h ++ ./modules/juce_gui_extra/juce_gui_extra.mm ++ ./modules/juce_gui_extra/misc/juce_AnimatedAppComponent.cpp ++ ./modules/juce_gui_extra/misc/juce_AnimatedAppComponent.h ++ ./modules/juce_gui_extra/misc/juce_AppleRemote.h ++ ./modules/juce_gui_extra/misc/juce_BubbleMessageComponent.cpp ++ ./modules/juce_gui_extra/misc/juce_BubbleMessageComponent.h ++ ./modules/juce_gui_extra/misc/juce_ColourSelector.cpp ++ ./modules/juce_gui_extra/misc/juce_ColourSelector.h ++ ./modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.cpp ++ ./modules/juce_gui_extra/misc/juce_KeyMappingEditorComponent.h ++ ./modules/juce_gui_extra/misc/juce_LiveConstantEditor.cpp ++ ./modules/juce_gui_extra/misc/juce_LiveConstantEditor.h ++ ./modules/juce_gui_extra/misc/juce_PreferencesPanel.cpp ++ ./modules/juce_gui_extra/misc/juce_PreferencesPanel.h ++ ./modules/juce_gui_extra/misc/juce_PushNotifications.cpp ++ ./modules/juce_gui_extra/misc/juce_PushNotifications.h ++ ./modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.cpp ++ ./modules/juce_gui_extra/misc/juce_RecentlyOpenedFilesList.h ++ ./modules/juce_gui_extra/misc/juce_SplashScreen.cpp ++ ./modules/juce_gui_extra/misc/juce_SplashScreen.h ++ ./modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.cpp ++ ./modules/juce_gui_extra/misc/juce_SystemTrayIconComponent.h ++ ./modules/juce_gui_extra/misc/juce_WebBrowserComponent.h ++ ./modules/juce_gui_extra/native/juce_AndroidViewComponent.cpp ++ ./modules/juce_gui_extra/native/juce_android_PushNotifications.cpp ++ ./modules/juce_gui_extra/native/juce_android_WebBrowserComponent.cpp ++ ./modules/juce_gui_extra/native/juce_ios_PushNotifications.cpp ++ ./modules/juce_gui_extra/native/juce_ios_UIViewComponent.mm ++ ./modules/juce_gui_extra/native/juce_linux_X11_SystemTrayIcon.cpp ++ ./modules/juce_gui_extra/native/juce_linux_X11_WebBrowserComponent.cpp ++ ./modules/juce_gui_extra/native/juce_linux_XEmbedComponent.cpp ++ ./modules/juce_gui_extra/native/juce_mac_AppleRemote.mm ++ ./modules/juce_gui_extra/native/juce_mac_CarbonViewWrapperComponent.h ++ ./modules/juce_gui_extra/native/juce_mac_NSViewComponent.mm ++ ./modules/juce_gui_extra/native/juce_mac_PushNotifications.cpp ++ ./modules/juce_gui_extra/native/juce_mac_SystemTrayIcon.cpp ++ ./modules/juce_gui_extra/native/juce_mac_WebBrowserComponent.mm ++ ./modules/juce_gui_extra/native/juce_win32_ActiveXComponent.cpp ++ ./modules/juce_gui_extra/native/juce_win32_SystemTrayIcon.cpp ++ ./modules/juce_gui_extra/native/juce_win32_WebBrowserComponent.cpp ++ ./modules/juce_opengl/geometry/juce_Draggable3DOrientation.h ++ ./modules/juce_opengl/geometry/juce_Matrix3D.h ++ ./modules/juce_opengl/geometry/juce_Quaternion.h ++ ./modules/juce_opengl/geometry/juce_Vector3D.h ++ ./modules/juce_opengl/juce_opengl.cpp ++ ./modules/juce_opengl/juce_opengl.h ++ ./modules/juce_opengl/juce_opengl.mm ++ ./modules/juce_opengl/native/juce_MissingGLDefinitions.h ++ ./modules/juce_opengl/native/juce_OpenGLExtensions.h ++ ./modules/juce_opengl/native/juce_OpenGL_android.h ++ ./modules/juce_opengl/native/juce_OpenGL_ios.h ++ ./modules/juce_opengl/native/juce_OpenGL_linux_X11.h ++ ./modules/juce_opengl/native/juce_OpenGL_osx.h ++ ./modules/juce_opengl/native/juce_OpenGL_win32.h ++ ./modules/juce_opengl/opengl/juce_OpenGLContext.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLContext.h ++ ./modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLFrameBuffer.h ++ ./modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLGraphicsContext.h ++ ./modules/juce_opengl/opengl/juce_OpenGLHelpers.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLHelpers.h ++ ./modules/juce_opengl/opengl/juce_OpenGLImage.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLImage.h ++ ./modules/juce_opengl/opengl/juce_OpenGLPixelFormat.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLPixelFormat.h ++ ./modules/juce_opengl/opengl/juce_OpenGLRenderer.h ++ ./modules/juce_opengl/opengl/juce_OpenGLShaderProgram.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLShaderProgram.h ++ ./modules/juce_opengl/opengl/juce_OpenGLTexture.cpp ++ ./modules/juce_opengl/opengl/juce_OpenGLTexture.h ++ ./modules/juce_opengl/utils/juce_OpenGLAppComponent.cpp ++ ./modules/juce_opengl/utils/juce_OpenGLAppComponent.h ++ ./modules/juce_osc/juce_osc.cpp ++ ./modules/juce_osc/juce_osc.h ++ ./modules/juce_osc/osc/juce_OSCAddress.cpp ++ ./modules/juce_osc/osc/juce_OSCAddress.h ++ ./modules/juce_osc/osc/juce_OSCArgument.cpp ++ ./modules/juce_osc/osc/juce_OSCArgument.h ++ ./modules/juce_osc/osc/juce_OSCBundle.cpp ++ ./modules/juce_osc/osc/juce_OSCBundle.h ++ ./modules/juce_osc/osc/juce_OSCMessage.cpp ++ ./modules/juce_osc/osc/juce_OSCMessage.h ++ ./modules/juce_osc/osc/juce_OSCReceiver.cpp ++ ./modules/juce_osc/osc/juce_OSCReceiver.h ++ ./modules/juce_osc/osc/juce_OSCSender.cpp ++ ./modules/juce_osc/osc/juce_OSCSender.h ++ ./modules/juce_osc/osc/juce_OSCTimeTag.cpp ++ ./modules/juce_osc/osc/juce_OSCTimeTag.h ++ ./modules/juce_osc/osc/juce_OSCTypes.cpp ++ ./modules/juce_osc/osc/juce_OSCTypes.h ++ ./modules/juce_product_unlocking/in_app_purchases/juce_InAppPurchases.cpp ++ ./modules/juce_product_unlocking/in_app_purchases/juce_InAppPurchases.h ++ ./modules/juce_product_unlocking/juce_product_unlocking.cpp ++ ./modules/juce_product_unlocking/juce_product_unlocking.h ++ ./modules/juce_product_unlocking/marketplace/juce_KeyFileGeneration.h ++ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.cpp ++ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockForm.h ++ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.cpp ++ ./modules/juce_product_unlocking/marketplace/juce_OnlineUnlockStatus.h ++ ./modules/juce_product_unlocking/marketplace/juce_TracktionMarketplaceStatus.cpp ++ ./modules/juce_product_unlocking/marketplace/juce_TracktionMarketplaceStatus.h ++ ./modules/juce_product_unlocking/native/juce_android_InAppPurchases.cpp ++ ./modules/juce_product_unlocking/native/juce_ios_InAppPurchases.cpp ++ ./modules/juce_video/capture/juce_CameraDevice.cpp ++ ./modules/juce_video/capture/juce_CameraDevice.h ++ ./modules/juce_video/juce_video.cpp ++ ./modules/juce_video/juce_video.h ++ ./modules/juce_video/juce_video.mm ++ ./modules/juce_video/native/juce_android_CameraDevice.h ++ ./modules/juce_video/native/juce_ios_CameraDevice.h ++ ./modules/juce_video/native/juce_mac_CameraDevice.h ++ ./modules/juce_video/native/juce_win32_CameraDevice.h ++ ./modules/juce_video/native/juce_win32_Video.h ++ ./modules/juce_video/playback/juce_VideoComponent.cpp ++ ./modules/juce_video/playback/juce_VideoComponent.h ++Copyright: 2017, - ROLI Ltd. ++License: GPL-3 ++ FIXME ++ ++Files: ./.github/ISSUE_TEMPLATE.txt ++ ./.gitlab-ci.yml ++ ./BREAKING-CHANGES.txt ++ ./ChangeList.txt ++ ./doxygen/Doxyfile ++ ./doxygen/Makefile ++ ./doxygen/README.txt ++ ./doxygen/make.bat ++ ./doxygen/process_source_files.py ++ ./examples/Assets/Box2DTests/AddPair.h ++ ./examples/Assets/Signing/README.txt ++ ./examples/Assets/demo table data.xml ++ ./examples/Assets/google-services.json ++ ./examples/Assets/juce_module_info ++ ./examples/Assets/proaudio.path ++ ./examples/Assets/teapot.obj ++ ./examples/Assets/treedemo.xml ++ ./examples/DemoRunner/Builds/Android/app/CMakeLists.txt ++ ./examples/DemoRunner/Builds/Android/app/build.gradle ++ ./examples/DemoRunner/Builds/Android/app/src/debug/res/values/string.xml ++ ./examples/DemoRunner/Builds/Android/app/src/main/AndroidManifest.xml ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/AddPair.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Signing/README.txt ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/demo table data.xml ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/google-services.json ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/juce_module_info ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/proaudio.path ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/teapot.obj ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/treedemo.xml ++ ./examples/DemoRunner/Builds/Android/app/src/release/res/values/string.xml ++ ./examples/DemoRunner/Builds/Android/build.gradle ++ ./examples/DemoRunner/Builds/Android/gradle/wrapper/gradle-wrapper.properties ++ ./examples/DemoRunner/Builds/Android/gradlew ++ ./examples/DemoRunner/Builds/Android/gradlew.bat ++ ./examples/DemoRunner/Builds/Android/settings.gradle ++ ./examples/DemoRunner/Builds/LinuxMakefile/Makefile ++ ./examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.pbxproj ++ ./examples/DemoRunner/Builds/MacOSX/DemoRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner.sln ++ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj ++ ./examples/DemoRunner/Builds/VisualStudio2015/DemoRunner_App.vcxproj.filters ++ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner.sln ++ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj ++ ./examples/DemoRunner/Builds/VisualStudio2017/DemoRunner_App.vcxproj.filters ++ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner.sln ++ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj ++ ./examples/DemoRunner/Builds/VisualStudio2019/DemoRunner_App.vcxproj.filters ++ ./examples/DemoRunner/Builds/iOS/DemoRunner.entitlements ++ ./examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.pbxproj ++ ./examples/DemoRunner/Builds/iOS/DemoRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/AppIcon.appiconset/Contents.json ++ ./examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/LaunchImage.launchimage/Contents.json ++ ./examples/DemoRunner/Builds/iOS/LaunchScreen.storyboard ++ ./examples/DemoRunner/JuceLibraryCode/JuceHeader.h ++ ./examples/DemoRunner/JuceLibraryCode/ReadMe.txt ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_analytics.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_basics.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_devices.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_formats.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_processors.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_audio_utils.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_blocks_basics.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_box2d.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_core.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_core.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_cryptography.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_cryptography.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_data_structures.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_data_structures.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_dsp.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_dsp.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_events.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_events.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_graphics.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_graphics.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_basics.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_gui_extra.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_opengl.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_opengl.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_osc.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_product_unlocking.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_product_unlocking.mm ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_video.cpp ++ ./examples/DemoRunner/JuceLibraryCode/include_juce_video.mm ++ ./extras/AudioPerformanceTest/AudioPerformanceTest.jucer ++ ./extras/AudioPerformanceTest/Builds/Android/app/CMakeLists.txt ++ ./extras/AudioPerformanceTest/Builds/Android/app/build.gradle ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/debug/res/values/string.xml ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/AndroidManifest.xml ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/SharingContentProvider.java ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/release/res/values/string.xml ++ ./extras/AudioPerformanceTest/Builds/Android/build.gradle ++ ./extras/AudioPerformanceTest/Builds/Android/gradle/wrapper/gradle-wrapper.properties ++ ./extras/AudioPerformanceTest/Builds/Android/gradlew ++ ./extras/AudioPerformanceTest/Builds/Android/gradlew.bat ++ ./extras/AudioPerformanceTest/Builds/Android/settings.gradle ++ ./extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile ++ ./extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.pbxproj ++ ./extras/AudioPerformanceTest/Builds/MacOSX/AudioPerformanceTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/AudioPerformanceTest/Builds/MacOSX/Info-App.plist ++ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest.sln ++ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest_App.vcxproj ++ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/AudioPerformanceTest_App.vcxproj.filters ++ ./extras/AudioPerformanceTest/Builds/VisualStudio2019/resources.rc ++ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.pbxproj ++ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest/Images.xcassets/AppIcon.appiconset/Contents.json ++ ./extras/AudioPerformanceTest/Builds/iOS/AudioPerformanceTest/Images.xcassets/LaunchImage.launchimage/Contents.json ++ ./extras/AudioPerformanceTest/Builds/iOS/Info-App.plist ++ ./extras/AudioPerformanceTest/Builds/iOS/LaunchScreen.storyboard ++ ./extras/AudioPerformanceTest/JuceLibraryCode/JuceHeader.h ++ ./extras/AudioPerformanceTest/JuceLibraryCode/ReadMe.txt ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_basics.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_devices.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_formats.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_processors.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_audio_utils.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_core.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_core.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_events.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_events.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/AudioPerformanceTest/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/AudioPluginHost/AudioPluginHost.jucer ++ ./extras/AudioPluginHost/Builds/Android/app/CMakeLists.txt ++ ./extras/AudioPluginHost/Builds/Android/app/build.gradle ++ ./extras/AudioPluginHost/Builds/Android/app/src/debug/res/values/string.xml ++ ./extras/AudioPluginHost/Builds/Android/app/src/main/AndroidManifest.xml ++ ./extras/AudioPluginHost/Builds/Android/app/src/release/res/values/string.xml ++ ./extras/AudioPluginHost/Builds/Android/build.gradle ++ ./extras/AudioPluginHost/Builds/Android/gradle/wrapper/gradle-wrapper.properties ++ ./extras/AudioPluginHost/Builds/Android/gradlew ++ ./extras/AudioPluginHost/Builds/Android/gradlew.bat ++ ./extras/AudioPluginHost/Builds/Android/settings.gradle ++ ./extras/AudioPluginHost/Builds/LinuxMakefile/Makefile ++ ./extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.pbxproj ++ ./extras/AudioPluginHost/Builds/MacOSX/AudioPluginHost.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/AudioPluginHost/Builds/MacOSX/Info-App.plist ++ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost.sln ++ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj ++ ./extras/AudioPluginHost/Builds/VisualStudio2015/AudioPluginHost_App.vcxproj.filters ++ ./extras/AudioPluginHost/Builds/VisualStudio2015/resources.rc ++ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost.sln ++ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj ++ ./extras/AudioPluginHost/Builds/VisualStudio2017/AudioPluginHost_App.vcxproj.filters ++ ./extras/AudioPluginHost/Builds/VisualStudio2017/resources.rc ++ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost.sln ++ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj ++ ./extras/AudioPluginHost/Builds/VisualStudio2019/AudioPluginHost_App.vcxproj.filters ++ ./extras/AudioPluginHost/Builds/VisualStudio2019/resources.rc ++ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.pbxproj ++ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost/Images.xcassets/AppIcon.appiconset/Contents.json ++ ./extras/AudioPluginHost/Builds/iOS/AudioPluginHost/Images.xcassets/LaunchImage.launchimage/Contents.json ++ ./extras/AudioPluginHost/Builds/iOS/Info-App.plist ++ ./extras/AudioPluginHost/Builds/iOS/LaunchScreen.storyboard ++ ./extras/AudioPluginHost/JuceLibraryCode/BinaryData.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/BinaryData.h ++ ./extras/AudioPluginHost/JuceLibraryCode/JuceHeader.h ++ ./extras/AudioPluginHost/JuceLibraryCode/ReadMe.txt ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_basics.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_devices.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_formats.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_processors.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_audio_utils.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_core.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_core.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_cryptography.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_cryptography.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_events.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_events.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_opengl.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_opengl.mm ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_video.cpp ++ ./extras/AudioPluginHost/JuceLibraryCode/include_juce_video.mm ++ ./extras/BLOCKS/Makefile ++ ./extras/BLOCKS/standalone_sdk/README.md ++ ./extras/BLOCKS/standalone_sdk/SDK/BlocksHeader.h ++ ./extras/BLOCKS/standalone_sdk/SDK/Build/Linux/Makefile ++ ./extras/BLOCKS/standalone_sdk/SDK/Build/MacOS/BLOCKS-SDK.xcodeproj/project.pbxproj ++ ./extras/BLOCKS/standalone_sdk/SDK/Build/Windows/BLOCKS-SDK.sln ++ ./extras/BLOCKS/standalone_sdk/SDK/Build/Windows/BLOCKS-SDK.vcxproj ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Linux/Makefile ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/BlockFinder.xcodeproj/project.pbxproj ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/Makefile ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/BlockFinder.sln ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/BlockFinder.vcxproj ++ ./extras/BinaryBuilder/BinaryBuilder.jucer ++ ./extras/BinaryBuilder/Builds/LinuxMakefile/Makefile ++ ./extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.pbxproj ++ ./extras/BinaryBuilder/Builds/MacOSX/BinaryBuilder.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder.sln ++ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder_ConsoleApp.vcxproj ++ ./extras/BinaryBuilder/Builds/VisualStudio2019/BinaryBuilder_ConsoleApp.vcxproj.filters ++ ./extras/BinaryBuilder/Builds/VisualStudio2019/resources.rc ++ ./extras/BinaryBuilder/JuceLibraryCode/JuceHeader.h ++ ./extras/BinaryBuilder/JuceLibraryCode/ReadMe.txt ++ ./extras/BinaryBuilder/JuceLibraryCode/include_juce_core.cpp ++ ./extras/BinaryBuilder/JuceLibraryCode/include_juce_core.mm ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/CMakeLists.txt ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/build.gradle ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/debug/res/values/string.xml ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/AndroidManifest.xml ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/SharingContentProvider.java ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/release/res/values/string.xml ++ ./extras/NetworkGraphicsDemo/Builds/Android/build.gradle ++ ./extras/NetworkGraphicsDemo/Builds/Android/gradle/wrapper/gradle-wrapper.properties ++ ./extras/NetworkGraphicsDemo/Builds/Android/gradlew ++ ./extras/NetworkGraphicsDemo/Builds/Android/gradlew.bat ++ ./extras/NetworkGraphicsDemo/Builds/Android/settings.gradle ++ ./extras/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile ++ ./extras/NetworkGraphicsDemo/Builds/MacOSX/Info-App.plist ++ ./extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.pbxproj ++ ./extras/NetworkGraphicsDemo/Builds/MacOSX/NetworkGraphicsDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo.sln ++ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo_App.vcxproj ++ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/NetworkGraphicsDemo_App.vcxproj.filters ++ ./extras/NetworkGraphicsDemo/Builds/VisualStudio2019/resources.rc ++ ./extras/NetworkGraphicsDemo/Builds/iOS/Info-App.plist ++ ./extras/NetworkGraphicsDemo/Builds/iOS/LaunchScreen.storyboard ++ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.pbxproj ++ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo/Images.xcassets/AppIcon.appiconset/Contents.json ++ ./extras/NetworkGraphicsDemo/Builds/iOS/NetworkGraphicsDemo/Images.xcassets/LaunchImage.launchimage/Contents.json ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/BinaryData.h ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/JuceHeader.h ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/ReadMe.txt ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_basics.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_devices.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_formats.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_processors.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_audio_utils.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_core.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_core.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_cryptography.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_cryptography.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_events.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_events.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_opengl.cpp ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_opengl.mm ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/include_juce_osc.cpp ++ ./extras/NetworkGraphicsDemo/NetworkGraphicsDemo.jucer ++ ./extras/NetworkGraphicsDemo/README.txt ++ ./extras/Projucer/Builds/LinuxMakefile/Makefile ++ ./extras/Projucer/Builds/MacOSX/Info-App.plist ++ ./extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.pbxproj ++ ./extras/Projucer/Builds/MacOSX/Projucer.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/Projucer/Builds/VisualStudio2015/Projucer.sln ++ ./extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj ++ ./extras/Projucer/Builds/VisualStudio2015/Projucer_App.vcxproj.filters ++ ./extras/Projucer/Builds/VisualStudio2015/resources.rc ++ ./extras/Projucer/Builds/VisualStudio2017/Projucer.sln ++ ./extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj ++ ./extras/Projucer/Builds/VisualStudio2017/Projucer_App.vcxproj.filters ++ ./extras/Projucer/Builds/VisualStudio2017/resources.rc ++ ./extras/Projucer/Builds/VisualStudio2019/Projucer.sln ++ ./extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj ++ ./extras/Projucer/Builds/VisualStudio2019/Projucer_App.vcxproj.filters ++ ./extras/Projucer/Builds/VisualStudio2019/resources.rc ++ ./extras/Projucer/JuceLibraryCode/BinaryData.cpp ++ ./extras/Projucer/JuceLibraryCode/BinaryData.h ++ ./extras/Projucer/JuceLibraryCode/JuceHeader.h ++ ./extras/Projucer/JuceLibraryCode/ReadMe.txt ++ ./extras/Projucer/JuceLibraryCode/include_juce_analytics.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_core.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_core.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_cryptography.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_cryptography.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_events.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_events.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/Projucer/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/Projucer/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/Projucer/Projucer.jucer ++ ./extras/Projucer/Source/BinaryData/Icons/background_logo.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_android.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_clion.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_codeBlocks.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_linux.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_visualStudio.svg ++ ./extras/Projucer/Source/BinaryData/Icons/export_xcode.svg ++ ./extras/Projucer/Source/BinaryData/Icons/huckleberry_icon.svg ++ ./extras/Projucer/Source/BinaryData/Icons/juce-logo-with-text.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_AnimatedApp.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_AudioApp.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_AudioPlugin.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_ConsoleApp.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_DLL.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_GUI.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_Highlight.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_OpenGL.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_Openfile.svg ++ ./extras/Projucer/Source/BinaryData/Icons/wizard_StaticLibrary.svg ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentSimpleTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AnimatedComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentSimpleTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginEditorTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_AudioPluginFilterTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompSimpleTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_ContentCompTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_InlineComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainConsoleAppTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_NoWindow.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_SimpleWindow.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_MainTemplate_Window.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewCppFileTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewCppFileTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_NewInlineComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentSimpleTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_OpenGLComponentTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPAudioProcessorTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPMain.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_PIPTemplate.h ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_UnityPluginGUIScript.cs ++ ./extras/Projucer/Source/BinaryData/colourscheme_dark.xml ++ ./extras/Projucer/Source/BinaryData/colourscheme_light.xml ++ ./extras/Projucer/Source/BinaryData/gradle/gradlew ++ ./extras/Projucer/Source/BinaryData/gradle/gradlew.bat ++ ./extras/Projucer/Source/BinaryData/nothingtoseehere.txt ++ ./extras/UnitTestRunner/Builds/LinuxMakefile/Makefile ++ ./extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.pbxproj ++ ./extras/UnitTestRunner/Builds/MacOSX/UnitTestRunner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings ++ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner.sln ++ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj ++ ./extras/UnitTestRunner/Builds/VisualStudio2017/UnitTestRunner_ConsoleApp.vcxproj.filters ++ ./extras/UnitTestRunner/Builds/VisualStudio2017/resources.rc ++ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner.sln ++ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj ++ ./extras/UnitTestRunner/Builds/VisualStudio2019/UnitTestRunner_ConsoleApp.vcxproj.filters ++ ./extras/UnitTestRunner/Builds/VisualStudio2019/resources.rc ++ ./extras/UnitTestRunner/JuceLibraryCode/JuceHeader.h ++ ./extras/UnitTestRunner/JuceLibraryCode/ReadMe.txt ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_analytics.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_basics.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_devices.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_formats.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_processors.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_audio_utils.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_blocks_basics.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_core.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_core.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_cryptography.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_cryptography.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_dsp.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_dsp.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_events.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_events.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_opengl.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_opengl.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_osc.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_product_unlocking.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_product_unlocking.mm ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_video.cpp ++ ./extras/UnitTestRunner/JuceLibraryCode/include_juce_video.mm ++ ./extras/UnitTestRunner/UnitTestRunner.jucer ++ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL.sln ++ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL_StaticLibrary.vcxproj ++ ./extras/WindowsDLL/Builds/VisualStudio2019/WindowsDLL_StaticLibrary.vcxproj.filters ++ ./extras/WindowsDLL/JuceLibraryCode/JuceHeader.h ++ ./extras/WindowsDLL/JuceLibraryCode/ReadMe.txt ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_basics.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_basics.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_devices.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_devices.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_formats.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_formats.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_processors.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_processors.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_utils.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_audio_utils.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_core.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_core.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_cryptography.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_cryptography.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_data_structures.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_data_structures.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_events.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_events.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_graphics.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_graphics.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_basics.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_basics.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_extra.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_gui_extra.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_opengl.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_opengl.mm ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_video.cpp ++ ./extras/WindowsDLL/JuceLibraryCode/include_juce_video.mm ++ ./extras/WindowsDLL/WindowsDLL.jucer ++ ./modules/JUCE Module Format.txt ++ ./modules/juce_audio_devices/native/java/app/com/roli/juce/JuceMidiSupport.java ++ ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinExports.def ++ ./modules/juce_audio_plugin_client/juce_audio_plugin_client_RTAS.r ++ ./modules/juce_audio_processors/format_types/VST3_SDK/README.md ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/README.md ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/README.md ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/conststringtable.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/coreiids.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpop.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/falignpush.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fplatform.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fstrdefs.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ftypes.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/funknown.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/futils.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/fvariant.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ibstream.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/icloneable.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipersistent.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ipluginbase.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/istringresult.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/iupdatehandler.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/smartpointer.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/typesizecheck.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/base/ustring.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugview.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/gui/iplugviewcontentscalesupport.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstattributes.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstaudioprocessor.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstautomationstate.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstchannelcontextinfo.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcomponent.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstcontextmenu.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsteditcontroller.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstevents.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsthostapplication.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstinterappaudio.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmessage.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidicontrollers.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstmidilearn.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstnoteexpression.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstparameterchanges.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstphysicalui.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstpluginterfacesupport.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstplugview.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprefetchablesupport.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstprocesscontext.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstrepresentation.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivstunits.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstpshpack4.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vsttypes.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/README.md ++ ./modules/juce_blocks_basics/README.txt ++ ./modules/juce_blocks_basics/juce_LittleFootFunctions.dox ++ ./modules/juce_blocks_basics/littlefoot/LittleFoot Language README.txt ++ ./modules/juce_blocks_basics/protocol/Protocol Format.txt ++ ./modules/juce_box2d/box2d/README.txt ++ ./modules/juce_core/native/java/README.txt ++ ./modules/juce_core/native/java/app/com/roli/juce/FragmentOverlay.java ++ ./modules/juce_core/native/java/app/com/roli/juce/JuceHTTPStream.java ++ ./modules/juce_core/native/javacore/app/com/roli/juce/JuceApp.java ++ ./modules/juce_core/native/javacore/init/com/roli/juce/Java.java ++ ./modules/juce_gui_basics/native/java/app/com/roli/juce/ComponentPeerView.java ++ ./modules/juce_gui_basics/native/javacore/app/com/roli/juce/JuceSharingContentProvider.java ++ ./modules/juce_gui_basics/native/javaopt/app/com/roli/juce/JuceActivity.java ++ ./modules/juce_gui_extra/native/java/app/com/roli/juce/JuceWebView.java ++ ./modules/juce_gui_extra/native/javaopt/app/com/roli/juce/JuceFirebaseInstanceIdService.java ++ ./modules/juce_gui_extra/native/javaopt/app/com/roli/juce/JuceFirebaseMessagingService.java ++ ./modules/juce_opengl/native/java/app/com/roli/juce/JuceOpenGLView.java ++ ./modules/juce_video/native/java/app/com/roli/juce/CameraCaptureSessionCaptureCallback.java ++ ./modules/juce_video/native/java/app/com/roli/juce/CameraCaptureSessionStateCallback.java ++ ./modules/juce_video/native/java/app/com/roli/juce/CameraDeviceStateCallback.java ++ ./modules/juce_video/native/java/app/com/roli/juce/JuceOrientationEventListener.java ++ ./modules/juce_video/native/java/app/com/roli/juce/MediaControllerCallback.java ++ ./modules/juce_video/native/java/app/com/roli/juce/MediaSessionCallback.java ++ ./modules/juce_video/native/java/app/com/roli/juce/SystemVolumeObserver.java ++Copyright: NONE ++License: UNKNOWN ++ FIXME ++ ++Files: ./examples/Assets/AudioLiveScrollingDisplay.h ++ ./examples/Assets/DSPDemos_Common.h ++ ./examples/Assets/DemoUtilities.h ++ ./examples/Assets/WavefrontObjParser.h ++ ./examples/Audio/AudioAppDemo.h ++ ./examples/Audio/AudioLatencyDemo.h ++ ./examples/Audio/AudioPlaybackDemo.h ++ ./examples/Audio/AudioRecordingDemo.h ++ ./examples/Audio/AudioSettingsDemo.h ++ ./examples/Audio/AudioSynthesiserDemo.h ++ ./examples/Audio/MPEDemo.h ++ ./examples/Audio/MidiDemo.h ++ ./examples/Audio/PluckedStringsDemo.h ++ ./examples/Audio/SimpleFFTDemo.h ++ ./examples/BLOCKS/BlocksDrawingDemo.h ++ ./examples/BLOCKS/BlocksMonitorDemo.h ++ ./examples/BLOCKS/BlocksSynthDemo.h ++ ./examples/DSP/ConvolutionDemo.h ++ ./examples/DSP/FIRFilterDemo.h ++ ./examples/DSP/GainDemo.h ++ ./examples/DSP/IIRFilterDemo.h ++ ./examples/DSP/OscillatorDemo.h ++ ./examples/DSP/OverdriveDemo.h ++ ./examples/DSP/SIMDRegisterDemo.h ++ ./examples/DSP/StateVariableFilterDemo.h ++ ./examples/DSP/WaveShaperTanhDemo.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/AudioLiveScrollingDisplay.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/DSPDemos_Common.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/DemoUtilities.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/WavefrontObjParser.h ++ ./examples/GUI/AnimationAppDemo.h ++ ./examples/GUI/AnimationDemo.h ++ ./examples/GUI/BouncingBallWavetableDemo.h ++ ./examples/GUI/CameraDemo.h ++ ./examples/GUI/CodeEditorDemo.h ++ ./examples/GUI/ComponentDemo.h ++ ./examples/GUI/ComponentTransformsDemo.h ++ ./examples/GUI/DialogsDemo.h ++ ./examples/GUI/FlexBoxDemo.h ++ ./examples/GUI/FontsDemo.h ++ ./examples/GUI/GraphicsDemo.h ++ ./examples/GUI/GridDemo.h ++ ./examples/GUI/HelloWorldDemo.h ++ ./examples/GUI/ImagesDemo.h ++ ./examples/GUI/KeyMappingsDemo.h ++ ./examples/GUI/LookAndFeelDemo.h ++ ./examples/GUI/MDIDemo.h ++ ./examples/GUI/MenusDemo.h ++ ./examples/GUI/MultiTouchDemo.h ++ ./examples/GUI/OpenGLAppDemo.h ++ ./examples/GUI/OpenGLDemo.h ++ ./examples/GUI/OpenGLDemo2D.h ++ ./examples/GUI/PropertiesDemo.h ++ ./examples/GUI/VideoDemo.h ++ ./examples/GUI/WebBrowserDemo.h ++ ./examples/GUI/WidgetsDemo.h ++ ./examples/GUI/WindowsDemo.h ++ ./examples/Plugins/AUv3SynthPluginDemo.h ++ ./examples/Plugins/ArpeggiatorPluginDemo.h ++ ./examples/Plugins/AudioPluginDemo.h ++ ./examples/Plugins/DSPModulePluginDemo.h ++ ./examples/Plugins/GainPluginDemo.h ++ ./examples/Plugins/InterAppAudioEffectPluginDemo.h ++ ./examples/Plugins/MultiOutSynthPluginDemo.h ++ ./examples/Plugins/NoiseGatePluginDemo.h ++ ./examples/Plugins/SamplerPluginDemo.h ++ ./examples/Plugins/SurroundPluginDemo.h ++ ./examples/Utilities/AnalyticsCollectionDemo.h ++ ./examples/Utilities/Box2DDemo.h ++ ./examples/Utilities/ChildProcessDemo.h ++ ./examples/Utilities/CryptographyDemo.h ++ ./examples/Utilities/InAppPurchasesDemo.h ++ ./examples/Utilities/JavaScriptDemo.h ++ ./examples/Utilities/LiveConstantDemo.h ++ ./examples/Utilities/MultithreadingDemo.h ++ ./examples/Utilities/NetworkingDemo.h ++ ./examples/Utilities/OSCDemo.h ++ ./examples/Utilities/PushNotificationsDemo.h ++ ./examples/Utilities/SystemInfoDemo.h ++ ./examples/Utilities/TimersAndEventsDemo.h ++ ./examples/Utilities/UnitTestsDemo.h ++ ./examples/Utilities/ValueTreesDemo.h ++ ./examples/Utilities/XMLandJSONDemo.h ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/android/vending/billing/IInAppBillingService.java ++ ./extras/AudioPerformanceTest/Builds/Android/app/src/main/java/com/juce/audioperformancetest/AudioPerformanceTest.java ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/BlockFinder.cpp ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/BlockFinder.h ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Linux/main.cpp ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/MacOS/main.mm ++ ./extras/BLOCKS/standalone_sdk/examples/BlockFinder/Windows/main.cpp ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/android/vending/billing/IInAppBillingService.java ++ ./extras/NetworkGraphicsDemo/Builds/Android/app/src/main/java/com/juce/networkgraphicsdemo/JUCENetworkGraphicsDemo.java ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_ComponentTemplate.cpp ++ ./extras/Projucer/Source/BinaryData/Templates/jucer_ComponentTemplate.h ++ ./modules/juce_audio_basics/audio_play_head/juce_AudioPlayHead.h ++ ./modules/juce_audio_basics/buffers/juce_AudioChannelSet.cpp ++ ./modules/juce_audio_basics/buffers/juce_AudioChannelSet.h ++ ./modules/juce_audio_basics/buffers/juce_AudioDataConverters.cpp ++ ./modules/juce_audio_basics/buffers/juce_AudioDataConverters.h ++ ./modules/juce_audio_basics/buffers/juce_AudioSampleBuffer.h ++ ./modules/juce_audio_basics/buffers/juce_FloatVectorOperations.cpp ++ ./modules/juce_audio_basics/buffers/juce_FloatVectorOperations.h ++ ./modules/juce_audio_basics/juce_audio_basics.cpp ++ ./modules/juce_audio_basics/juce_audio_basics.h ++ ./modules/juce_audio_basics/juce_audio_basics.mm ++ ./modules/juce_audio_basics/midi/juce_MidiBuffer.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiBuffer.h ++ ./modules/juce_audio_basics/midi/juce_MidiFile.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiFile.h ++ ./modules/juce_audio_basics/midi/juce_MidiKeyboardState.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiKeyboardState.h ++ ./modules/juce_audio_basics/midi/juce_MidiMessage.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiMessage.h ++ ./modules/juce_audio_basics/midi/juce_MidiMessageSequence.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiMessageSequence.h ++ ./modules/juce_audio_basics/midi/juce_MidiRPN.cpp ++ ./modules/juce_audio_basics/midi/juce_MidiRPN.h ++ ./modules/juce_audio_basics/mpe/juce_MPEInstrument.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPEInstrument.h ++ ./modules/juce_audio_basics/mpe/juce_MPEMessages.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPEMessages.h ++ ./modules/juce_audio_basics/mpe/juce_MPENote.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPENote.h ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiser.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiser.h ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPESynthesiserVoice.h ++ ./modules/juce_audio_basics/mpe/juce_MPEUtils.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPEUtils.h ++ ./modules/juce_audio_basics/mpe/juce_MPEValue.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPEValue.h ++ ./modules/juce_audio_basics/mpe/juce_MPEZoneLayout.cpp ++ ./modules/juce_audio_basics/mpe/juce_MPEZoneLayout.h ++ ./modules/juce_audio_basics/native/juce_mac_CoreAudioLayouts.h ++ ./modules/juce_audio_basics/sources/juce_AudioSource.h ++ ./modules/juce_audio_basics/sources/juce_BufferingAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_BufferingAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_ChannelRemappingAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_IIRFilterAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_MemoryAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_MemoryAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_MixerAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_MixerAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_PositionableAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_ResamplingAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_ResamplingAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_ReverbAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_ReverbAudioSource.h ++ ./modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.cpp ++ ./modules/juce_audio_basics/sources/juce_ToneGeneratorAudioSource.h ++ ./modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp ++ ./modules/juce_audio_basics/synthesisers/juce_Synthesiser.h ++ ./modules/juce_audio_basics/utilities/juce_ADSR.h ++ ./modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.cpp ++ ./modules/juce_audio_basics/utilities/juce_CatmullRomInterpolator.h ++ ./modules/juce_audio_basics/utilities/juce_Decibels.h ++ ./modules/juce_audio_basics/utilities/juce_IIRFilter.cpp ++ ./modules/juce_audio_basics/utilities/juce_IIRFilter.h ++ ./modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.cpp ++ ./modules/juce_audio_basics/utilities/juce_LagrangeInterpolator.h ++ ./modules/juce_audio_basics/utilities/juce_Reverb.h ++ ./modules/juce_audio_basics/utilities/juce_SmoothedValue.cpp ++ ./modules/juce_audio_basics/utilities/juce_SmoothedValue.h ++ ./modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.cpp ++ ./modules/juce_audio_devices/audio_io/juce_AudioDeviceManager.h ++ ./modules/juce_audio_devices/audio_io/juce_AudioIODevice.cpp ++ ./modules/juce_audio_devices/audio_io/juce_AudioIODevice.h ++ ./modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.cpp ++ ./modules/juce_audio_devices/audio_io/juce_AudioIODeviceType.h ++ ./modules/juce_audio_devices/audio_io/juce_SystemAudioVolume.h ++ ./modules/juce_audio_devices/juce_audio_devices.cpp ++ ./modules/juce_audio_devices/juce_audio_devices.h ++ ./modules/juce_audio_devices/juce_audio_devices.mm ++ ./modules/juce_audio_devices/midi_io/juce_MidiDevices.cpp ++ ./modules/juce_audio_devices/midi_io/juce_MidiDevices.h ++ ./modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.cpp ++ ./modules/juce_audio_devices/midi_io/juce_MidiMessageCollector.h ++ ./modules/juce_audio_devices/native/juce_MidiDataConcatenator.h ++ ./modules/juce_audio_devices/native/juce_android_Audio.cpp ++ ./modules/juce_audio_devices/native/juce_android_Midi.cpp ++ ./modules/juce_audio_devices/native/juce_android_Oboe.cpp ++ ./modules/juce_audio_devices/native/juce_android_OpenSL.cpp ++ ./modules/juce_audio_devices/native/juce_ios_Audio.cpp ++ ./modules/juce_audio_devices/native/juce_ios_Audio.h ++ ./modules/juce_audio_devices/native/juce_linux_ALSA.cpp ++ ./modules/juce_audio_devices/native/juce_linux_Bela.cpp ++ ./modules/juce_audio_devices/native/juce_linux_JackAudio.cpp ++ ./modules/juce_audio_devices/native/juce_linux_Midi.cpp ++ ./modules/juce_audio_devices/native/juce_mac_CoreAudio.cpp ++ ./modules/juce_audio_devices/native/juce_mac_CoreMidi.cpp ++ ./modules/juce_audio_devices/native/juce_win32_ASIO.cpp ++ ./modules/juce_audio_devices/native/juce_win32_DirectSound.cpp ++ ./modules/juce_audio_devices/native/juce_win32_Midi.cpp ++ ./modules/juce_audio_devices/native/juce_win32_WASAPI.cpp ++ ./modules/juce_audio_devices/sources/juce_AudioSourcePlayer.cpp ++ ./modules/juce_audio_devices/sources/juce_AudioSourcePlayer.h ++ ./modules/juce_audio_devices/sources/juce_AudioTransportSource.cpp ++ ./modules/juce_audio_devices/sources/juce_AudioTransportSource.h ++ ./modules/juce_blocks_basics/blocks/juce_Block.cpp ++ ./modules/juce_blocks_basics/blocks/juce_Block.h ++ ./modules/juce_blocks_basics/blocks/juce_BlocksVersion.cpp ++ ./modules/juce_blocks_basics/blocks/juce_BlocksVersion.h ++ ./modules/juce_blocks_basics/blocks/juce_ControlButton.h ++ ./modules/juce_blocks_basics/blocks/juce_LEDGrid.h ++ ./modules/juce_blocks_basics/blocks/juce_LEDRow.h ++ ./modules/juce_blocks_basics/blocks/juce_StatusLight.h ++ ./modules/juce_blocks_basics/blocks/juce_TouchList.h ++ ./modules/juce_blocks_basics/blocks/juce_TouchSurface.h ++ ./modules/juce_blocks_basics/juce_blocks_basics.cpp ++ ./modules/juce_blocks_basics/juce_blocks_basics.h ++ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootCompiler.h ++ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootRemoteHeap.h ++ ./modules/juce_blocks_basics/littlefoot/juce_LittleFootRunner.h ++ ./modules/juce_blocks_basics/protocol/juce_BitPackingUtilities.h ++ ./modules/juce_blocks_basics/protocol/juce_BlockModels.h ++ ./modules/juce_blocks_basics/protocol/juce_BlocksProtocolDefinitions.h ++ ./modules/juce_blocks_basics/protocol/juce_HostPacketBuilder.h ++ ./modules/juce_blocks_basics/protocol/juce_HostPacketDecoder.h ++ ./modules/juce_blocks_basics/topology/internal/juce_BandwidthStatsLogger.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_BlockImplementation.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_ConnectedDeviceGroup.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_DepreciatedVersionReader.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_Detector.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_DetectorHolder.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_DeviceInfo.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_MIDIDeviceDetector.cpp ++ ./modules/juce_blocks_basics/topology/internal/juce_MidiDeviceConnection.cpp ++ ./modules/juce_blocks_basics/topology/juce_BlockGraph.cpp ++ ./modules/juce_blocks_basics/topology/juce_BlockGraph.h ++ ./modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.cpp ++ ./modules/juce_blocks_basics/topology/juce_PhysicalTopologySource.h ++ ./modules/juce_blocks_basics/topology/juce_RuleBasedTopologySource.cpp ++ ./modules/juce_blocks_basics/topology/juce_RuleBasedTopologySource.h ++ ./modules/juce_blocks_basics/topology/juce_Topology.h ++ ./modules/juce_blocks_basics/topology/juce_TopologySource.h ++ ./modules/juce_blocks_basics/visualisers/juce_BitmapLEDProgram.cpp ++ ./modules/juce_blocks_basics/visualisers/juce_BitmapLEDProgram.h ++ ./modules/juce_blocks_basics/visualisers/juce_DrumPadLEDProgram.cpp ++ ./modules/juce_blocks_basics/visualisers/juce_DrumPadLEDProgram.h ++ ./modules/juce_core/containers/juce_AbstractFifo.cpp ++ ./modules/juce_core/containers/juce_AbstractFifo.h ++ ./modules/juce_core/containers/juce_Array.h ++ ./modules/juce_core/containers/juce_ArrayAllocationBase.h ++ ./modules/juce_core/containers/juce_ArrayBase.cpp ++ ./modules/juce_core/containers/juce_ArrayBase.h ++ ./modules/juce_core/containers/juce_DynamicObject.cpp ++ ./modules/juce_core/containers/juce_DynamicObject.h ++ ./modules/juce_core/containers/juce_ElementComparator.h ++ ./modules/juce_core/containers/juce_HashMap.h ++ ./modules/juce_core/containers/juce_HashMap_test.cpp ++ ./modules/juce_core/containers/juce_LinkedListPointer.h ++ ./modules/juce_core/containers/juce_ListenerList.h ++ ./modules/juce_core/containers/juce_NamedValueSet.cpp ++ ./modules/juce_core/containers/juce_NamedValueSet.h ++ ./modules/juce_core/containers/juce_OwnedArray.cpp ++ ./modules/juce_core/containers/juce_OwnedArray.h ++ ./modules/juce_core/containers/juce_PropertySet.cpp ++ ./modules/juce_core/containers/juce_PropertySet.h ++ ./modules/juce_core/containers/juce_ReferenceCountedArray.cpp ++ ./modules/juce_core/containers/juce_ReferenceCountedArray.h ++ ./modules/juce_core/containers/juce_ScopedValueSetter.h ++ ./modules/juce_core/containers/juce_SortedSet.h ++ ./modules/juce_core/containers/juce_SparseSet.cpp ++ ./modules/juce_core/containers/juce_SparseSet.h ++ ./modules/juce_core/containers/juce_Variant.cpp ++ ./modules/juce_core/containers/juce_Variant.h ++ ./modules/juce_core/files/juce_DirectoryIterator.cpp ++ ./modules/juce_core/files/juce_DirectoryIterator.h ++ ./modules/juce_core/files/juce_File.cpp ++ ./modules/juce_core/files/juce_File.h ++ ./modules/juce_core/files/juce_FileFilter.cpp ++ ./modules/juce_core/files/juce_FileFilter.h ++ ./modules/juce_core/files/juce_FileInputStream.cpp ++ ./modules/juce_core/files/juce_FileInputStream.h ++ ./modules/juce_core/files/juce_FileOutputStream.cpp ++ ./modules/juce_core/files/juce_FileOutputStream.h ++ ./modules/juce_core/files/juce_FileSearchPath.cpp ++ ./modules/juce_core/files/juce_FileSearchPath.h ++ ./modules/juce_core/files/juce_MemoryMappedFile.h ++ ./modules/juce_core/files/juce_TemporaryFile.cpp ++ ./modules/juce_core/files/juce_TemporaryFile.h ++ ./modules/juce_core/files/juce_WildcardFileFilter.cpp ++ ./modules/juce_core/files/juce_WildcardFileFilter.h ++ ./modules/juce_core/javascript/juce_JSON.cpp ++ ./modules/juce_core/javascript/juce_JSON.h ++ ./modules/juce_core/javascript/juce_Javascript.cpp ++ ./modules/juce_core/javascript/juce_Javascript.h ++ ./modules/juce_core/juce_core.cpp ++ ./modules/juce_core/juce_core.h ++ ./modules/juce_core/juce_core.mm ++ ./modules/juce_core/logging/juce_FileLogger.cpp ++ ./modules/juce_core/logging/juce_FileLogger.h ++ ./modules/juce_core/logging/juce_Logger.cpp ++ ./modules/juce_core/logging/juce_Logger.h ++ ./modules/juce_core/maths/juce_BigInteger.cpp ++ ./modules/juce_core/maths/juce_BigInteger.h ++ ./modules/juce_core/maths/juce_Expression.cpp ++ ./modules/juce_core/maths/juce_Expression.h ++ ./modules/juce_core/maths/juce_MathsFunctions.h ++ ./modules/juce_core/maths/juce_NormalisableRange.h ++ ./modules/juce_core/maths/juce_Random.cpp ++ ./modules/juce_core/maths/juce_Random.h ++ ./modules/juce_core/maths/juce_Range.h ++ ./modules/juce_core/maths/juce_StatisticsAccumulator.h ++ ./modules/juce_core/memory/juce_Atomic.h ++ ./modules/juce_core/memory/juce_ByteOrder.h ++ ./modules/juce_core/memory/juce_ContainerDeletePolicy.h ++ ./modules/juce_core/memory/juce_HeapBlock.h ++ ./modules/juce_core/memory/juce_HeavyweightLeakedObjectDetector.h ++ ./modules/juce_core/memory/juce_LeakedObjectDetector.h ++ ./modules/juce_core/memory/juce_Memory.h ++ ./modules/juce_core/memory/juce_MemoryBlock.cpp ++ ./modules/juce_core/memory/juce_MemoryBlock.h ++ ./modules/juce_core/memory/juce_OptionalScopedPointer.h ++ ./modules/juce_core/memory/juce_ReferenceCountedObject.h ++ ./modules/juce_core/memory/juce_ScopedPointer.h ++ ./modules/juce_core/memory/juce_SharedResourcePointer.h ++ ./modules/juce_core/memory/juce_Singleton.h ++ ./modules/juce_core/memory/juce_WeakReference.h ++ ./modules/juce_core/misc/juce_ConsoleApplication.cpp ++ ./modules/juce_core/misc/juce_ConsoleApplication.h ++ ./modules/juce_core/misc/juce_Result.cpp ++ ./modules/juce_core/misc/juce_Result.h ++ ./modules/juce_core/misc/juce_RuntimePermissions.cpp ++ ./modules/juce_core/misc/juce_RuntimePermissions.h ++ ./modules/juce_core/misc/juce_Uuid.cpp ++ ./modules/juce_core/misc/juce_Uuid.h ++ ./modules/juce_core/misc/juce_WindowsRegistry.h ++ ./modules/juce_core/native/juce_BasicNativeHeaders.h ++ ./modules/juce_core/native/juce_android_Files.cpp ++ ./modules/juce_core/native/juce_android_JNIHelpers.cpp ++ ./modules/juce_core/native/juce_android_JNIHelpers.h ++ ./modules/juce_core/native/juce_android_Misc.cpp ++ ./modules/juce_core/native/juce_android_Network.cpp ++ ./modules/juce_core/native/juce_android_RuntimePermissions.cpp ++ ./modules/juce_core/native/juce_android_SystemStats.cpp ++ ./modules/juce_core/native/juce_android_Threads.cpp ++ ./modules/juce_core/native/juce_curl_Network.cpp ++ ./modules/juce_core/native/juce_linux_CommonFile.cpp ++ ./modules/juce_core/native/juce_linux_Files.cpp ++ ./modules/juce_core/native/juce_linux_Network.cpp ++ ./modules/juce_core/native/juce_linux_SystemStats.cpp ++ ./modules/juce_core/native/juce_linux_Threads.cpp ++ ./modules/juce_core/native/juce_mac_ClangBugWorkaround.h ++ ./modules/juce_core/native/juce_mac_Files.mm ++ ./modules/juce_core/native/juce_mac_Network.mm ++ ./modules/juce_core/native/juce_mac_Strings.mm ++ ./modules/juce_core/native/juce_mac_SystemStats.mm ++ ./modules/juce_core/native/juce_mac_Threads.mm ++ ./modules/juce_core/native/juce_osx_ObjCHelpers.h ++ ./modules/juce_core/native/juce_posix_IPAddress.h ++ ./modules/juce_core/native/juce_posix_NamedPipe.cpp ++ ./modules/juce_core/native/juce_posix_SharedCode.h ++ ./modules/juce_core/native/juce_win32_ComSmartPtr.h ++ ./modules/juce_core/native/juce_win32_Files.cpp ++ ./modules/juce_core/native/juce_win32_Network.cpp ++ ./modules/juce_core/native/juce_win32_Registry.cpp ++ ./modules/juce_core/native/juce_win32_SystemStats.cpp ++ ./modules/juce_core/native/juce_win32_Threads.cpp ++ ./modules/juce_core/network/juce_IPAddress.cpp ++ ./modules/juce_core/network/juce_IPAddress.h ++ ./modules/juce_core/network/juce_MACAddress.cpp ++ ./modules/juce_core/network/juce_MACAddress.h ++ ./modules/juce_core/network/juce_NamedPipe.cpp ++ ./modules/juce_core/network/juce_NamedPipe.h ++ ./modules/juce_core/network/juce_Socket.cpp ++ ./modules/juce_core/network/juce_Socket.h ++ ./modules/juce_core/network/juce_URL.cpp ++ ./modules/juce_core/network/juce_URL.h ++ ./modules/juce_core/network/juce_WebInputStream.cpp ++ ./modules/juce_core/network/juce_WebInputStream.h ++ ./modules/juce_core/streams/juce_BufferedInputStream.cpp ++ ./modules/juce_core/streams/juce_BufferedInputStream.h ++ ./modules/juce_core/streams/juce_FileInputSource.cpp ++ ./modules/juce_core/streams/juce_FileInputSource.h ++ ./modules/juce_core/streams/juce_InputSource.h ++ ./modules/juce_core/streams/juce_InputStream.cpp ++ ./modules/juce_core/streams/juce_InputStream.h ++ ./modules/juce_core/streams/juce_MemoryInputStream.cpp ++ ./modules/juce_core/streams/juce_MemoryInputStream.h ++ ./modules/juce_core/streams/juce_MemoryOutputStream.cpp ++ ./modules/juce_core/streams/juce_MemoryOutputStream.h ++ ./modules/juce_core/streams/juce_OutputStream.cpp ++ ./modules/juce_core/streams/juce_OutputStream.h ++ ./modules/juce_core/streams/juce_SubregionStream.cpp ++ ./modules/juce_core/streams/juce_SubregionStream.h ++ ./modules/juce_core/streams/juce_URLInputSource.cpp ++ ./modules/juce_core/streams/juce_URLInputSource.h ++ ./modules/juce_core/system/juce_CompilerSupport.h ++ ./modules/juce_core/system/juce_PlatformDefs.h ++ ./modules/juce_core/system/juce_StandardHeader.h ++ ./modules/juce_core/system/juce_SystemStats.cpp ++ ./modules/juce_core/system/juce_SystemStats.h ++ ./modules/juce_core/system/juce_TargetPlatform.h ++ ./modules/juce_core/text/juce_Base64.cpp ++ ./modules/juce_core/text/juce_Base64.h ++ ./modules/juce_core/text/juce_CharPointer_ASCII.h ++ ./modules/juce_core/text/juce_CharPointer_UTF16.h ++ ./modules/juce_core/text/juce_CharPointer_UTF32.h ++ ./modules/juce_core/text/juce_CharPointer_UTF8.h ++ ./modules/juce_core/text/juce_CharacterFunctions.cpp ++ ./modules/juce_core/text/juce_CharacterFunctions.h ++ ./modules/juce_core/text/juce_Identifier.cpp ++ ./modules/juce_core/text/juce_Identifier.h ++ ./modules/juce_core/text/juce_LocalisedStrings.cpp ++ ./modules/juce_core/text/juce_LocalisedStrings.h ++ ./modules/juce_core/text/juce_NewLine.h ++ ./modules/juce_core/text/juce_String.cpp ++ ./modules/juce_core/text/juce_String.h ++ ./modules/juce_core/text/juce_StringArray.cpp ++ ./modules/juce_core/text/juce_StringArray.h ++ ./modules/juce_core/text/juce_StringPairArray.cpp ++ ./modules/juce_core/text/juce_StringPairArray.h ++ ./modules/juce_core/text/juce_StringPool.cpp ++ ./modules/juce_core/text/juce_StringPool.h ++ ./modules/juce_core/text/juce_StringRef.h ++ ./modules/juce_core/text/juce_TextDiff.cpp ++ ./modules/juce_core/text/juce_TextDiff.h ++ ./modules/juce_core/threads/juce_ChildProcess.cpp ++ ./modules/juce_core/threads/juce_ChildProcess.h ++ ./modules/juce_core/threads/juce_CriticalSection.h ++ ./modules/juce_core/threads/juce_DynamicLibrary.h ++ ./modules/juce_core/threads/juce_HighResolutionTimer.cpp ++ ./modules/juce_core/threads/juce_HighResolutionTimer.h ++ ./modules/juce_core/threads/juce_InterProcessLock.h ++ ./modules/juce_core/threads/juce_Process.h ++ ./modules/juce_core/threads/juce_ReadWriteLock.cpp ++ ./modules/juce_core/threads/juce_ReadWriteLock.h ++ ./modules/juce_core/threads/juce_ScopedLock.h ++ ./modules/juce_core/threads/juce_ScopedReadLock.h ++ ./modules/juce_core/threads/juce_ScopedWriteLock.h ++ ./modules/juce_core/threads/juce_SpinLock.h ++ ./modules/juce_core/threads/juce_Thread.cpp ++ ./modules/juce_core/threads/juce_Thread.h ++ ./modules/juce_core/threads/juce_ThreadLocalValue.h ++ ./modules/juce_core/threads/juce_ThreadPool.cpp ++ ./modules/juce_core/threads/juce_ThreadPool.h ++ ./modules/juce_core/threads/juce_TimeSliceThread.cpp ++ ./modules/juce_core/threads/juce_TimeSliceThread.h ++ ./modules/juce_core/threads/juce_WaitableEvent.h ++ ./modules/juce_core/time/juce_PerformanceCounter.cpp ++ ./modules/juce_core/time/juce_PerformanceCounter.h ++ ./modules/juce_core/time/juce_RelativeTime.cpp ++ ./modules/juce_core/time/juce_RelativeTime.h ++ ./modules/juce_core/time/juce_Time.cpp ++ ./modules/juce_core/time/juce_Time.h ++ ./modules/juce_core/unit_tests/juce_UnitTest.cpp ++ ./modules/juce_core/unit_tests/juce_UnitTest.h ++ ./modules/juce_core/unit_tests/juce_UnitTestCategories.h ++ ./modules/juce_core/xml/juce_XmlDocument.cpp ++ ./modules/juce_core/xml/juce_XmlDocument.h ++ ./modules/juce_core/xml/juce_XmlElement.cpp ++ ./modules/juce_core/xml/juce_XmlElement.h ++ ./modules/juce_core/zip/juce_GZIPCompressorOutputStream.cpp ++ ./modules/juce_core/zip/juce_GZIPCompressorOutputStream.h ++ ./modules/juce_core/zip/juce_GZIPDecompressorInputStream.cpp ++ ./modules/juce_core/zip/juce_GZIPDecompressorInputStream.h ++ ./modules/juce_core/zip/juce_ZipFile.cpp ++ ./modules/juce_core/zip/juce_ZipFile.h ++ ./modules/juce_events/broadcasters/juce_ActionBroadcaster.cpp ++ ./modules/juce_events/broadcasters/juce_ActionBroadcaster.h ++ ./modules/juce_events/broadcasters/juce_ActionListener.h ++ ./modules/juce_events/broadcasters/juce_AsyncUpdater.cpp ++ ./modules/juce_events/broadcasters/juce_AsyncUpdater.h ++ ./modules/juce_events/broadcasters/juce_ChangeBroadcaster.cpp ++ ./modules/juce_events/broadcasters/juce_ChangeBroadcaster.h ++ ./modules/juce_events/broadcasters/juce_ChangeListener.h ++ ./modules/juce_events/interprocess/juce_ConnectedChildProcess.cpp ++ ./modules/juce_events/interprocess/juce_ConnectedChildProcess.h ++ ./modules/juce_events/interprocess/juce_InterprocessConnection.cpp ++ ./modules/juce_events/interprocess/juce_InterprocessConnection.h ++ ./modules/juce_events/interprocess/juce_InterprocessConnectionServer.cpp ++ ./modules/juce_events/interprocess/juce_InterprocessConnectionServer.h ++ ./modules/juce_events/interprocess/juce_NetworkServiceDiscovery.cpp ++ ./modules/juce_events/interprocess/juce_NetworkServiceDiscovery.h ++ ./modules/juce_events/juce_events.cpp ++ ./modules/juce_events/juce_events.h ++ ./modules/juce_events/juce_events.mm ++ ./modules/juce_events/messages/juce_ApplicationBase.cpp ++ ./modules/juce_events/messages/juce_ApplicationBase.h ++ ./modules/juce_events/messages/juce_CallbackMessage.h ++ ./modules/juce_events/messages/juce_DeletedAtShutdown.cpp ++ ./modules/juce_events/messages/juce_DeletedAtShutdown.h ++ ./modules/juce_events/messages/juce_Initialisation.h ++ ./modules/juce_events/messages/juce_Message.h ++ ./modules/juce_events/messages/juce_MessageListener.cpp ++ ./modules/juce_events/messages/juce_MessageListener.h ++ ./modules/juce_events/messages/juce_MessageManager.cpp ++ ./modules/juce_events/messages/juce_MessageManager.h ++ ./modules/juce_events/messages/juce_MountedVolumeListChangeDetector.h ++ ./modules/juce_events/messages/juce_NotificationType.h ++ ./modules/juce_events/native/juce_android_Messaging.cpp ++ ./modules/juce_events/native/juce_ios_MessageManager.mm ++ ./modules/juce_events/native/juce_linux_EventLoop.h ++ ./modules/juce_events/native/juce_linux_Messaging.cpp ++ ./modules/juce_events/native/juce_mac_MessageManager.mm ++ ./modules/juce_events/native/juce_osx_MessageQueue.h ++ ./modules/juce_events/native/juce_win32_HiddenMessageWindow.h ++ ./modules/juce_events/native/juce_win32_Messaging.cpp ++ ./modules/juce_events/native/juce_win32_WinRTWrapper.cpp ++ ./modules/juce_events/native/juce_win32_WinRTWrapper.h ++ ./modules/juce_events/timers/juce_MultiTimer.cpp ++ ./modules/juce_events/timers/juce_MultiTimer.h ++ ./modules/juce_events/timers/juce_Timer.cpp ++ ./modules/juce_events/timers/juce_Timer.h ++ ./modules/juce_product_unlocking/juce_product_unlocking.mm ++ ./modules/juce_video/native/juce_android_Video.h ++ ./modules/juce_video/native/juce_mac_Video.h ++Copyright: 2017, - ROLI Ltd. ++ 2018, - ROLI Ltd. ++ 2019, - ROLI Ltd. ++License: UNKNOWN ++ FIXME ++ ++Files: ./examples/Assets/Box2DTests/ApplyForce.h ++ ./examples/Assets/Box2DTests/BodyTypes.h ++ ./examples/Assets/Box2DTests/Breakable.h ++ ./examples/Assets/Box2DTests/Bridge.h ++ ./examples/Assets/Box2DTests/BulletTest.h ++ ./examples/Assets/Box2DTests/Cantilever.h ++ ./examples/Assets/Box2DTests/Car.h ++ ./examples/Assets/Box2DTests/Chain.h ++ ./examples/Assets/Box2DTests/CharacterCollision.h ++ ./examples/Assets/Box2DTests/CollisionFiltering.h ++ ./examples/Assets/Box2DTests/CollisionProcessing.h ++ ./examples/Assets/Box2DTests/CompoundShapes.h ++ ./examples/Assets/Box2DTests/Confined.h ++ ./examples/Assets/Box2DTests/ContinuousTest.h ++ ./examples/Assets/Box2DTests/DistanceTest.h ++ ./examples/Assets/Box2DTests/Dominos.h ++ ./examples/Assets/Box2DTests/DumpShell.h ++ ./examples/Assets/Box2DTests/DynamicTreeTest.h ++ ./examples/Assets/Box2DTests/EdgeShapes.h ++ ./examples/Assets/Box2DTests/EdgeTest.h ++ ./examples/Assets/Box2DTests/Gears.h ++ ./examples/Assets/Box2DTests/OneSidedPlatform.h ++ ./examples/Assets/Box2DTests/Pinball.h ++ ./examples/Assets/Box2DTests/PolyCollision.h ++ ./examples/Assets/Box2DTests/PolyShapes.h ++ ./examples/Assets/Box2DTests/Prismatic.h ++ ./examples/Assets/Box2DTests/Pulleys.h ++ ./examples/Assets/Box2DTests/Pyramid.h ++ ./examples/Assets/Box2DTests/RayCast.h ++ ./examples/Assets/Box2DTests/Revolute.h ++ ./examples/Assets/Box2DTests/RopeJoint.h ++ ./examples/Assets/Box2DTests/SensorTest.h ++ ./examples/Assets/Box2DTests/ShapeEditing.h ++ ./examples/Assets/Box2DTests/SliderCrank.h ++ ./examples/Assets/Box2DTests/SphereStack.h ++ ./examples/Assets/Box2DTests/TestEntries.cpp ++ ./examples/Assets/Box2DTests/TheoJansen.h ++ ./examples/Assets/Box2DTests/Tiles.h ++ ./examples/Assets/Box2DTests/TimeOfImpact.h ++ ./examples/Assets/Box2DTests/Tumbler.h ++ ./examples/Assets/Box2DTests/VaryingFriction.h ++ ./examples/Assets/Box2DTests/VaryingRestitution.h ++ ./examples/Assets/Box2DTests/VerticalStack.h ++ ./examples/Assets/Box2DTests/Web.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ApplyForce.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/BodyTypes.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Breakable.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Bridge.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/BulletTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Cantilever.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Car.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Chain.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CharacterCollision.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CollisionFiltering.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CollisionProcessing.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/CompoundShapes.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Confined.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ContinuousTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DistanceTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Dominos.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DumpShell.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/DynamicTreeTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/EdgeShapes.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/EdgeTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Gears.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/OneSidedPlatform.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pinball.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/PolyCollision.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/PolyShapes.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Prismatic.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pulleys.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Pyramid.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/RayCast.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Revolute.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/RopeJoint.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SensorTest.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/ShapeEditing.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SliderCrank.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/SphereStack.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TestEntries.cpp ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TheoJansen.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Tiles.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/TimeOfImpact.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Tumbler.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VaryingFriction.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VaryingRestitution.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/VerticalStack.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Web.h ++ ./modules/juce_box2d/box2d/Box2D.h ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2ChainShape.cpp ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2ChainShape.h ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2CircleShape.cpp ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2CircleShape.h ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.cpp ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2EdgeShape.h ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2PolygonShape.cpp ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2PolygonShape.h ++ ./modules/juce_box2d/box2d/Collision/Shapes/b2Shape.h ++ ./modules/juce_box2d/box2d/Collision/b2BroadPhase.cpp ++ ./modules/juce_box2d/box2d/Collision/b2BroadPhase.h ++ ./modules/juce_box2d/box2d/Collision/b2CollideCircle.cpp ++ ./modules/juce_box2d/box2d/Collision/b2CollideEdge.cpp ++ ./modules/juce_box2d/box2d/Collision/b2CollidePolygon.cpp ++ ./modules/juce_box2d/box2d/Collision/b2Collision.cpp ++ ./modules/juce_box2d/box2d/Collision/b2Collision.h ++ ./modules/juce_box2d/box2d/Collision/b2Distance.cpp ++ ./modules/juce_box2d/box2d/Collision/b2Distance.h ++ ./modules/juce_box2d/box2d/Collision/b2DynamicTree.cpp ++ ./modules/juce_box2d/box2d/Collision/b2DynamicTree.h ++ ./modules/juce_box2d/box2d/Collision/b2TimeOfImpact.cpp ++ ./modules/juce_box2d/box2d/Collision/b2TimeOfImpact.h ++ ./modules/juce_box2d/box2d/Common/b2BlockAllocator.cpp ++ ./modules/juce_box2d/box2d/Common/b2BlockAllocator.h ++ ./modules/juce_box2d/box2d/Common/b2GrowableStack.h ++ ./modules/juce_box2d/box2d/Common/b2Math.cpp ++ ./modules/juce_box2d/box2d/Common/b2Math.h ++ ./modules/juce_box2d/box2d/Common/b2Settings.cpp ++ ./modules/juce_box2d/box2d/Common/b2Settings.h ++ ./modules/juce_box2d/box2d/Common/b2StackAllocator.cpp ++ ./modules/juce_box2d/box2d/Common/b2StackAllocator.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndCircleContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndCircleContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndPolygonContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ChainAndPolygonContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2CircleContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2CircleContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2Contact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2ContactSolver.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndCircleContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndCircleContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndPolygonContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2EdgeAndPolygonContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonAndCircleContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonAndCircleContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonContact.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Contacts/b2PolygonContact.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2DistanceJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2DistanceJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2FrictionJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2FrictionJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2GearJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2GearJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2Joint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2MouseJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2MouseJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PrismaticJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PrismaticJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PulleyJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2PulleyJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RevoluteJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RevoluteJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RopeJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2RopeJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WeldJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WeldJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.cpp ++ ./modules/juce_box2d/box2d/Dynamics/Joints/b2WheelJoint.h ++ ./modules/juce_box2d/box2d/Dynamics/b2Body.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2Body.h ++ ./modules/juce_box2d/box2d/Dynamics/b2ContactManager.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2ContactManager.h ++ ./modules/juce_box2d/box2d/Dynamics/b2Fixture.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2Fixture.h ++ ./modules/juce_box2d/box2d/Dynamics/b2Island.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2Island.h ++ ./modules/juce_box2d/box2d/Dynamics/b2TimeStep.h ++ ./modules/juce_box2d/box2d/Dynamics/b2World.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2World.h ++ ./modules/juce_box2d/box2d/Dynamics/b2WorldCallbacks.cpp ++ ./modules/juce_box2d/box2d/Dynamics/b2WorldCallbacks.h ++ ./modules/juce_box2d/box2d/Rope/b2Rope.h ++Copyright: 2006-2007, Erin Catto http:www.box2d.org ++ 2006-2009, Erin Catto http:www.box2d.org ++ 2006-2010, Erin Catto http:www.box2d.org ++ 2006-2011, Erin Catto http:www.box2d.org ++ 2007, Erin Catto http:www.box2d.org ++ 2007-2009, Erin Catto http:www.box2d.org ++ 2007-2011, Erin Catto http:www.box2d.org ++ 2008-2009, Erin Catto http:www.box2d.org ++ 2009, Erin Catto http:www.box2d.org ++ 2010, Erin Catto http:www.box2d.org ++ 2011, Erin Catto http:www.box2d.org ++License: Zlib ++ FIXME ++ ++Files: ./modules/juce_audio_processors/format_types/VST3_SDK/base/LICENSE.txt ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/baseiids.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/classfactoryhelpers.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fbuffer.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fdebug.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fobject.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstreamer.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/fstring.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/source/updatehandler.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/thread/include/flock.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/base/thread/source/flock.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/ivsttestplugprovider.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/LICENSE.txt ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/memorystream.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/common/pluginview.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/hostclasses.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/hosting/pluginterfacesupport.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstbus.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponent.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstcomponentbase.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vsteditcontroller.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstinitiids.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstparameters.h ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.cpp ++ ./modules/juce_audio_processors/format_types/VST3_SDK/public.sdk/source/vst/vstpresetfile.h ++Copyright: 2018, Steinberg Media Technologies GmbH ++ 2019, Steinberg Media Technologies GmbH ++License: BSD-3-clause ++ FIXME ++ ++Files: ./LICENSE.md ++ ./examples/DemoRunner/JuceLibraryCode/AppConfig.h ++ ./extras/AudioPerformanceTest/JuceLibraryCode/AppConfig.h ++ ./extras/AudioPluginHost/JuceLibraryCode/AppConfig.h ++ ./extras/BinaryBuilder/JuceLibraryCode/AppConfig.h ++ ./extras/NetworkGraphicsDemo/JuceLibraryCode/AppConfig.h ++ ./extras/Projucer/JuceLibraryCode/AppConfig.h ++ ./extras/UnitTestRunner/JuceLibraryCode/AppConfig.h ++ ./extras/WindowsDLL/JuceLibraryCode/AppConfig.h ++Copyright: NONE ++License: GPL-3 ++ FIXME ++ ++Files: ./examples/Assets/Box2DTests/Rope.h ++ ./examples/DemoRunner/Builds/Android/app/src/main/assets/Box2DTests/Rope.h ++ ./modules/juce_box2d/box2d/Common/b2Draw.cpp ++ ./modules/juce_box2d/box2d/Common/b2Draw.h ++ ./modules/juce_box2d/box2d/Common/b2Timer.cpp ++ ./modules/juce_box2d/box2d/Common/b2Timer.h ++ ./modules/juce_box2d/box2d/Rope/b2Rope.cpp ++Copyright: 2011, Erin Catto http:box2d.org ++License: Zlib ++ FIXME ++ ++Files: ./examples/DemoRunner/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt ++ ./extras/AudioPerformanceTest/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt ++ ./extras/AudioPluginHost/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt ++ ./extras/NetworkGraphicsDemo/Builds/Android/gradle/wrapper/LICENSE-for-gradlewrapper.txt ++ ./extras/Projucer/Source/BinaryData/gradle/LICENSE ++Copyright: NONE ++License: Apache-2.0 ++ FIXME ++ ++Files: ./modules/juce_blocks_basics/blocks/juce_BlockConfigManager.h ++ ./modules/juce_core/misc/juce_StdFunctionCompat.cpp ++ ./modules/juce_core/misc/juce_StdFunctionCompat.h ++Copyright: 2017, - ROLI Ltd. ++License: ISC ++ FIXME ++ ++Files: ./examples/DemoRunner/Builds/VisualStudio2015/resources.rc ++ ./examples/DemoRunner/Builds/VisualStudio2017/resources.rc ++ ./examples/DemoRunner/Builds/VisualStudio2019/resources.rc ++Copyright: 2018, - ROLI Ltd.0" ++License: UNKNOWN ++ FIXME ++ ++Files: ./modules/juce_audio_processors/format_types/VST3_SDK/LICENSE.txt ++ ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/LICENSE.txt ++Copyright: 2019, Steinberg Media Technologies GmbH ++License: GPL-3 ++ FIXME ++ ++Files: ./examples/DemoRunner/Builds/MacOSX/Info-App.plist ++ ./examples/DemoRunner/Builds/iOS/Info-App.plist ++Copyright: 2018, - ROLI Ltd. ++License: UNKNOWN ++ FIXME ++ ++Files: ./extras/Projucer/Source/BinaryData/offlinepage.html ++Copyright: NONE ++License: GPL ++ FIXME ++ ++Files: ./examples/DemoRunner/DemoRunner.jucer ++Copyright: 2018, - ROLI Ltd." companyWebsite="https:www.juce.com/" ++License: UNKNOWN ++ FIXME ++ ++Files: ./modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinResources.rsr ++Copyright: 1996-2001, Digidesign Inc. ++License: UNKNOWN ++ FIXME ++ ++Files: ./modules/juce_audio_processors/format_types/VST3_SDK/pluginterfaces/vst/vstspeaker.h ++Copyright: const Speaker kSpeakerLfe = 1 << 3; /< Subbass (Lfe) ++License: UNKNOWN ++ FIXME ++ ++Files: ./extras/Projucer/Source/BinaryData/projucer_EULA.txt ++Copyright: provided you comply with the provisions in clause 2, make a single copy of the Software for back-up purposes, provided that you reproduce on it all copyright and other proprietary notices that are on the original copy of the Software; ++License: UNKNOWN ++ FIXME ++ ++Files: ./README.md ++Copyright: restrictions ++License: UNKNOWN ++ FIXME ++ ++Files: ./modules/juce_audio_plugin_client/AUResources.r ++Copyright: s in this original Apple software (the ++License: UNKNOWN ++ FIXME ++ diff --cc debian/extra/juce_audio_plugin_client/LV2/includes/lv2_external_ui.h index 00000000,00000000..789cd3ff new file mode 100644 --- /dev/null +++ b/debian/extra/juce_audio_plugin_client/LV2/includes/lv2_external_ui.h @@@ -1,0 -1,0 +1,109 @@@ ++/* ++ LV2 External UI extension ++ This work is in public domain. ++ ++ This file is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. ++ ++ If you have questions, contact Filipe Coelho (aka falkTX) ++ or ask in #lad channel, FreeNode IRC network. ++*/ ++ ++/** ++ @file lv2_external_ui.h ++ C header for the LV2 External UI extension . ++*/ ++ ++#ifndef LV2_EXTERNAL_UI_H ++#define LV2_EXTERNAL_UI_H ++ ++#include "ui.h" ++ ++#define LV2_EXTERNAL_UI_URI "http://kxstudio.sf.net/ns/lv2ext/external-ui" ++#define LV2_EXTERNAL_UI_PREFIX LV2_EXTERNAL_UI_URI "#" ++ ++#define LV2_EXTERNAL_UI__Host LV2_EXTERNAL_UI_PREFIX "Host" ++#define LV2_EXTERNAL_UI__Widget LV2_EXTERNAL_UI_PREFIX "Widget" ++ ++/** This extension used to be defined by a lv2plug.in URI */ ++#define LV2_EXTERNAL_UI_DEPRECATED_URI "http://lv2plug.in/ns/extensions/ui#external" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++/** ++ * When LV2_EXTERNAL_UI__Widget UI is instantiated, the returned ++ * LV2UI_Widget handle must be cast to pointer to LV2_External_UI_Widget. ++ * UI is created in invisible state. ++ */ ++typedef struct _LV2_External_UI_Widget { ++ /** ++ * Host calls this function regulary. UI library implementing the ++ * callback may do IPC or redraw the UI. ++ * ++ * @param _this_ the UI context ++ */ ++ void (*run)(struct _LV2_External_UI_Widget * _this_); ++ ++ /** ++ * Host calls this function to make the plugin UI visible. ++ * ++ * @param _this_ the UI context ++ */ ++ void (*show)(struct _LV2_External_UI_Widget * _this_); ++ ++ /** ++ * Host calls this function to make the plugin UI invisible again. ++ * ++ * @param _this_ the UI context ++ */ ++ void (*hide)(struct _LV2_External_UI_Widget * _this_); ++ ++} LV2_External_UI_Widget; ++ ++#define LV2_EXTERNAL_UI_RUN(ptr) (ptr)->run(ptr) ++#define LV2_EXTERNAL_UI_SHOW(ptr) (ptr)->show(ptr) ++#define LV2_EXTERNAL_UI_HIDE(ptr) (ptr)->hide(ptr) ++ ++/** ++ * On UI instantiation, host must supply LV2_EXTERNAL_UI__Host feature. ++ * LV2_Feature::data must be pointer to LV2_External_UI_Host. ++ */ ++typedef struct _LV2_External_UI_Host { ++ /** ++ * Callback that plugin UI will call when UI (GUI window) is closed by user. ++ * This callback will be called during execution of LV2_External_UI_Widget::run() ++ * (i.e. not from background thread). ++ * ++ * After this callback is called, UI is defunct. Host must call LV2UI_Descriptor::cleanup(). ++ * If host wants to make the UI visible again, the UI must be reinstantiated. ++ * ++ * @note When using the depreated URI LV2_EXTERNAL_UI_DEPRECATED_URI, ++ * some hosts will not call LV2UI_Descriptor::cleanup() as they should, ++ * and may call show() again without re-initialization. ++ * ++ * @param controller Host context associated with plugin UI, as ++ * supplied to LV2UI_Descriptor::instantiate(). ++ */ ++ void (*ui_closed)(LV2UI_Controller controller); ++ ++ /** ++ * Optional (may be NULL) "user friendly" identifier which the UI ++ * may display to allow a user to easily associate this particular ++ * UI instance with the correct plugin instance as it is represented ++ * by the host (e.g. "track 1" or "channel 4"). ++ * ++ * If supplied by host, the string will be referenced only during ++ * LV2UI_Descriptor::instantiate() ++ */ ++ const char * plugin_human_id; ++ ++} LV2_External_UI_Host; ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* LV2_EXTERNAL_UI_H */ diff --cc debian/extra/juce_audio_plugin_client/LV2/includes/lv2_programs.h index 00000000,00000000..01e28771 new file mode 100644 --- /dev/null +++ b/debian/extra/juce_audio_plugin_client/LV2/includes/lv2_programs.h @@@ -1,0 -1,0 +1,174 @@@ ++/* ++ LV2 Programs Extension ++ Copyright 2012 Filipe Coelho ++ ++ Permission to use, copy, modify, and/or distribute this software for any ++ purpose with or without fee is hereby granted, provided that the above ++ copyright notice and this permission notice appear in all copies. ++ ++ THIS SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++*/ ++ ++/** ++ @file lv2_programs.h ++ C header for the LV2 programs extension . ++*/ ++ ++#ifndef LV2_PROGRAMS_H ++#define LV2_PROGRAMS_H ++ ++#include "lv2.h" ++#include "ui.h" ++ ++#define LV2_PROGRAMS_URI "http://kxstudio.sf.net/ns/lv2ext/programs" ++#define LV2_PROGRAMS_PREFIX LV2_PROGRAMS_URI "#" ++ ++#define LV2_PROGRAMS__Host LV2_PROGRAMS_PREFIX "Host" ++#define LV2_PROGRAMS__Interface LV2_PROGRAMS_PREFIX "Interface" ++#define LV2_PROGRAMS__UIInterface LV2_PROGRAMS_PREFIX "UIInterface" ++ ++#ifdef __cplusplus ++extern "C" { ++#endif ++ ++typedef void* LV2_Programs_Handle; ++ ++typedef struct _LV2_Program_Descriptor { ++ ++ /** Bank number for this program. Note that this extension does not ++ support MIDI-style separation of bank LSB and MSB values. There is ++ no restriction on the set of available banks: the numbers do not ++ need to be contiguous, there does not need to be a bank 0, etc. */ ++ uint32_t bank; ++ ++ /** Program number (unique within its bank) for this program. There is ++ no restriction on the set of available programs: the numbers do not ++ need to be contiguous, there does not need to be a program 0, etc. */ ++ uint32_t program; ++ ++ /** Name of the program. */ ++ const char * name; ++ ++} LV2_Program_Descriptor; ++ ++/** ++ Programs extension, plugin data. ++ ++ When the plugin's extension_data is called with argument LV2_PROGRAMS__Interface, ++ the plugin MUST return an LV2_Programs_Instance structure, which remains valid ++ for the lifetime of the plugin. ++*/ ++typedef struct _LV2_Programs_Interface { ++ /** ++ * get_program() ++ * ++ * This member is a function pointer that provides a description ++ * of a program (named preset sound) available on this plugin. ++ * ++ * The index argument is an index into the plugin's list of ++ * programs, not a program number as represented by the Program ++ * field of the LV2_Program_Descriptor. (This distinction is ++ * needed to support plugins that use non-contiguous program or ++ * bank numbers.) ++ * ++ * This function returns a LV2_Program_Descriptor pointer that is ++ * guaranteed to be valid only until the next call to get_program ++ * or deactivate, on the same plugin instance. This function must ++ * return NULL if passed an index argument out of range, so that ++ * the host can use it to query the number of programs as well as ++ * their properties. ++ */ ++ const LV2_Program_Descriptor *(*get_program)(LV2_Handle handle, ++ uint32_t index); ++ ++ /** ++ * select_program() ++ * ++ * This member is a function pointer that selects a new program ++ * for this plugin. The program change should take effect ++ * immediately at the start of the next run() call. (This ++ * means that a host providing the capability of changing programs ++ * between any two notes on a track must vary the block size so as ++ * to place the program change at the right place. A host that ++ * wanted to avoid this would probably just instantiate a plugin ++ * for each program.) ++ * ++ * Plugins should ignore a select_program() call with an invalid ++ * bank or program. ++ * ++ * A plugin is not required to select any particular default ++ * program on activate(): it's the host's duty to set a program ++ * explicitly. ++ * ++ * A plugin is permitted to re-write the values of its input ++ * control ports when select_program is called. The host should ++ * re-read the input control port values and update its own ++ * records appropriately. (This is the only circumstance in which ++ * a LV2 plugin is allowed to modify its own control-input ports.) ++ */ ++ void (*select_program)(LV2_Handle handle, ++ uint32_t bank, ++ uint32_t program); ++ ++} LV2_Programs_Interface; ++ ++/** ++ Programs extension, UI data. ++ ++ When the UI's extension_data is called with argument LV2_PROGRAMS__UIInterface, ++ the UI MUST return an LV2_Programs_UI_Interface structure, which remains valid ++ for the lifetime of the UI. ++*/ ++typedef struct _LV2_Programs_UI_Interface { ++ /** ++ * select_program() ++ * ++ * This is exactly the same as select_program in LV2_Programs_Instance, ++ * but this struct relates to the UI instead of the plugin. ++ * ++ * When called, UIs should update their state to match the selected program. ++ */ ++ void (*select_program)(LV2UI_Handle handle, ++ uint32_t bank, ++ uint32_t program); ++ ++} LV2_Programs_UI_Interface; ++ ++/** ++ Feature data for LV2_PROGRAMS__Host. ++*/ ++typedef struct _LV2_Programs_Host { ++ /** ++ * Opaque host data. ++ */ ++ LV2_Programs_Handle handle; ++ ++ /** ++ * program_changed() ++ * ++ * Tell the host to reload a plugin's program. ++ * Parameter handle MUST be the 'handle' member of this struct. ++ * Parameter index is program index to change. ++ * When index is -1, host should reload all the programs. ++ * ++ * The plugin MUST NEVER call this function on a RT context or during run(). ++ * ++ * NOTE: This call is to inform the host about a program's bank, program or name change. ++ * It DOES NOT change the current selected program. ++ */ ++ void (*program_changed)(LV2_Programs_Handle handle, ++ int32_t index); ++ ++} LV2_Programs_Host; ++ ++#ifdef __cplusplus ++} /* extern "C" */ ++#endif ++ ++#endif /* LV2_PROGRAMS_H */ diff --cc debian/extra/juce_audio_plugin_client/LV2/juce_LV2_Wrapper.cpp index 00000000,00000000..1c1f6162 new file mode 100644 --- /dev/null +++ b/debian/extra/juce_audio_plugin_client/LV2/juce_LV2_Wrapper.cpp @@@ -1,0 -1,0 +1,2174 @@@ ++/* ++ ============================================================================== ++ ++ Juce LV2 Wrapper ++ ++ ============================================================================== ++*/ ++ ++// Your project must contain an AppConfig.h file with your project-specific settings in it, ++// and your header search path must make it accessible to the module's files. ++#include "AppConfig.h" ++ ++#include "juce_audio_plugin_client/utility/juce_CheckSettingMacros.h" ++#include "juce_core/system/juce_TargetPlatform.h" // for JUCE_LINUX ++ ++ ++#if JucePlugin_Build_LV2 ++ ++/** Plugin requires processing with a fixed/constant block size */ ++#ifndef JucePlugin_WantsLV2FixedBlockSize ++ #define JucePlugin_WantsLV2FixedBlockSize 0 ++#endif ++ ++/** Enable latency port */ ++#ifndef JucePlugin_WantsLV2Latency ++ #define JucePlugin_WantsLV2Latency 1 ++#endif ++ ++/** Use non-parameter states */ ++#ifndef JucePlugin_WantsLV2State ++ #define JucePlugin_WantsLV2State 1 ++#endif ++ ++/** States are strings, needs custom get/setStateInformationString */ ++#ifndef JucePlugin_WantsLV2StateString ++ #define JucePlugin_WantsLV2StateString 0 ++#endif ++ ++/** Export presets */ ++#ifndef JucePlugin_WantsLV2Presets ++ #define JucePlugin_WantsLV2Presets 1 ++#endif ++ ++/** Request time position */ ++#ifndef JucePlugin_WantsLV2TimePos ++ #define JucePlugin_WantsLV2TimePos 1 ++#endif ++ ++/** Using string states require enabling states first */ ++#if JucePlugin_WantsLV2StateString && ! JucePlugin_WantsLV2State ++ #undef JucePlugin_WantsLV2State ++ #define JucePlugin_WantsLV2State 1 ++#endif ++ ++#if JUCE_LINUX && ! JUCE_AUDIOPROCESSOR_NO_GUI ++ #include ++ #undef KeyPress ++#endif ++ ++#include ++#include ++ ++// LV2 includes.. ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include "includes/lv2_external_ui.h" ++#include "includes/lv2_programs.h" ++ ++#include "../utility/juce_IncludeModuleHeaders.h" ++ ++#define JUCE_LV2_STATE_STRING_URI "urn:juce:stateString" ++#define JUCE_LV2_STATE_BINARY_URI "urn:juce:stateBinary" ++ ++//============================================================================== ++// Various helper functions for creating the ttl files ++ ++#if JUCE_MAC ++ #define PLUGIN_EXT ".dylib" ++#elif JUCE_LINUX ++ #define PLUGIN_EXT ".so" ++#elif JUCE_WINDOWS ++ #define PLUGIN_EXT ".dll" ++#endif ++ ++using namespace juce; ++ ++/** Returns plugin type, defined in AppConfig.h or JucePluginCharacteristics.h */ ++const String getPluginType() ++{ ++ String pluginType; ++#ifdef JucePlugin_LV2Category ++ pluginType = "lv2:" JucePlugin_LV2Category; ++ pluginType += ", "; ++#elif JucePlugin_IsSynth ++ pluginType = "lv2:InstrumentPlugin, "; ++#endif ++ pluginType += "lv2:Plugin"; ++ return pluginType; ++} ++ ++/** Returns plugin URI */ ++static const String& getPluginURI() ++{ ++ // JucePlugin_LV2URI might be defined as a function (eg. allowing dynamic URIs based on filename) ++ static const String pluginURI(JucePlugin_LV2URI); ++ return pluginURI; ++} ++ ++static Array usedSymbols; ++ ++/** Converts a parameter name to an LV2 compatible symbol. */ ++const String nameToSymbol (const String& name, const uint32 portIndex) ++{ ++ String symbol, trimmedName = name.trimStart().trimEnd().toLowerCase(); ++ ++ if (trimmedName.isEmpty()) ++ { ++ symbol += "lv2_port_"; ++ symbol += String(portIndex+1); ++ } ++ else ++ { ++ for (int i=0; i < trimmedName.length(); ++i) ++ { ++ const juce_wchar c = trimmedName[i]; ++ if (i == 0 && std::isdigit(c)) ++ symbol += "_"; ++ else if (std::isalpha(c) || std::isdigit(c)) ++ symbol += c; ++ else ++ symbol += "_"; ++ } ++ } ++ ++ // Do not allow identical symbols ++ if (usedSymbols.contains(symbol)) ++ { ++ int offset = 2; ++ String offsetStr = "_2"; ++ symbol += offsetStr; ++ ++ while (usedSymbols.contains(symbol)) ++ { ++ offset += 1; ++ String newOffsetStr = "_" + String(offset); ++ symbol = symbol.replace(offsetStr, newOffsetStr); ++ offsetStr = newOffsetStr; ++ } ++ } ++ usedSymbols.add(symbol); ++ ++ return symbol; ++} ++ ++/** Prevents NaN or out of 0.0<->1.0 bounds parameter values. */ ++float safeParamValue (float value) ++{ ++ if (std::isnan(value)) ++ value = 0.0f; ++ else if (value < 0.0f) ++ value = 0.0f; ++ else if (value > 1.0f) ++ value = 1.0f; ++ return value; ++} ++ ++/** Create the manifest.ttl file contents */ ++const String makeManifestFile (AudioProcessor* const filter, const String& binary) ++{ ++ const String& pluginURI(getPluginURI()); ++ String text; ++ ++ // Header ++ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; ++ text += "@prefix pset: <" LV2_PRESETS_PREFIX "> .\n"; ++ text += "@prefix rdfs: .\n"; ++ text += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; ++ text += "\n"; ++ ++ // Plugin ++ text += "<" + pluginURI + ">\n"; ++ text += " a lv2:Plugin ;\n"; ++ text += " lv2:binary <" + binary + PLUGIN_EXT "> ;\n"; ++ text += " rdfs:seeAlso <" + binary + ".ttl> .\n"; ++ text += "\n"; ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ // UIs ++ if (filter->hasEditor()) ++ { ++ text += "<" + pluginURI + "#ExternalUI>\n"; ++ text += " a <" LV2_EXTERNAL_UI__Widget "> ;\n"; ++ text += " ui:binary <" + binary + PLUGIN_EXT "> ;\n"; ++ text += " lv2:requiredFeature <" LV2_INSTANCE_ACCESS_URI "> ;\n"; ++ text += " lv2:extensionData <" LV2_PROGRAMS__UIInterface "> .\n"; ++ text += "\n"; ++ ++ text += "<" + pluginURI + "#ParentUI>\n"; ++ #if JUCE_MAC ++ text += " a ui:CocoaUI ;\n"; ++ #elif JUCE_LINUX ++ text += " a ui:X11UI ;\n"; ++ #elif JUCE_WINDOWS ++ text += " a ui:WindowsUI ;\n"; ++ #endif ++ text += " ui:binary <" + binary + PLUGIN_EXT "> ;\n"; ++ text += " lv2:requiredFeature <" LV2_INSTANCE_ACCESS_URI "> ;\n"; ++ text += " lv2:optionalFeature ui:noUserResize ;\n"; ++ text += " lv2:extensionData <" LV2_PROGRAMS__UIInterface "> .\n"; ++ text += "\n"; ++ } ++#endif ++ ++#if JucePlugin_WantsLV2Presets ++ const String presetSeparator(pluginURI.contains("#") ? ":" : "#"); ++ ++ // Presets ++ for (int i = 0; i < filter->getNumPrograms(); ++i) ++ { ++ text += "<" + pluginURI + presetSeparator + "preset" + String::formatted("%03i", i+1) + ">\n"; ++ text += " a pset:Preset ;\n"; ++ text += " lv2:appliesTo <" + pluginURI + "> ;\n"; ++ text += " rdfs:label \"" + filter->getProgramName(i) + "\" ;\n"; ++ text += " rdfs:seeAlso .\n"; ++ text += "\n"; ++ } ++#endif ++ ++ return text; ++} ++ ++/** Create the -plugin-.ttl file contents */ ++const String makePluginFile (AudioProcessor* const filter, const int maxNumInputChannels, const int maxNumOutputChannels) ++{ ++ const String& pluginURI(getPluginURI()); ++ String text; ++ ++ // Header ++ text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n"; ++ text += "@prefix doap: .\n"; ++ text += "@prefix foaf: .\n"; ++ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; ++ text += "@prefix rdfs: .\n"; ++ text += "@prefix ui: <" LV2_UI_PREFIX "> .\n"; ++ text += "\n"; ++ ++ // Plugin ++ text += "<" + pluginURI + ">\n"; ++ text += " a " + getPluginType() + " ;\n"; ++ text += " lv2:requiredFeature <" LV2_BUF_SIZE__boundedBlockLength "> ,\n"; ++#if JucePlugin_WantsLV2FixedBlockSize ++ text += " <" LV2_BUF_SIZE__fixedBlockLength "> ,\n"; ++#endif ++ text += " <" LV2_URID__map "> ;\n"; ++ text += " lv2:extensionData <" LV2_OPTIONS__interface "> ,\n"; ++#if JucePlugin_WantsLV2State ++ text += " <" LV2_STATE__interface "> ,\n"; ++#endif ++ text += " <" LV2_PROGRAMS__Interface "> ;\n"; ++ text += "\n"; ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ // UIs ++ if (filter->hasEditor()) ++ { ++ text += " ui:ui <" + pluginURI + "#ExternalUI> ,\n"; ++ text += " <" + pluginURI + "#ParentUI> ;\n"; ++ text += "\n"; ++ } ++#endif ++ ++ uint32 portIndex = 0; ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ // MIDI input ++ text += " lv2:port [\n"; ++ text += " a lv2:InputPort, atom:AtomPort ;\n"; ++ text += " atom:bufferType atom:Sequence ;\n"; ++ #if JucePlugin_WantsMidiInput ++ text += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n"; ++ #endif ++ #if JucePlugin_WantsLV2TimePos ++ text += " atom:supports <" LV2_TIME__Position "> ;\n"; ++ #endif ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_events_in\" ;\n"; ++ text += " lv2:name \"Events Input\" ;\n"; ++ text += " lv2:designation lv2:control ;\n"; ++ #if ! JucePlugin_IsSynth ++ text += " lv2:portProperty lv2:connectionOptional ;\n"; ++ #endif ++ text += " ] ;\n"; ++ text += "\n"; ++#endif ++ ++#if JucePlugin_ProducesMidiOutput ++ // MIDI output ++ text += " lv2:port [\n"; ++ text += " a lv2:OutputPort, atom:AtomPort ;\n"; ++ text += " atom:bufferType atom:Sequence ;\n"; ++ text += " atom:supports <" LV2_MIDI__MidiEvent "> ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_midi_out\" ;\n"; ++ text += " lv2:name \"MIDI Output\" ;\n"; ++ text += " ] ;\n"; ++ text += "\n"; ++#endif ++ ++ // Freewheel port ++ text += " lv2:port [\n"; ++ text += " a lv2:InputPort, lv2:ControlPort ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_freewheel\" ;\n"; ++ text += " lv2:name \"Freewheel\" ;\n"; ++ text += " lv2:default 0.0 ;\n"; ++ text += " lv2:minimum 0.0 ;\n"; ++ text += " lv2:maximum 1.0 ;\n"; ++ text += " lv2:designation <" LV2_CORE__freeWheeling "> ;\n"; ++ text += " lv2:portProperty lv2:toggled, <" LV2_PORT_PROPS__notOnGUI "> ;\n"; ++ text += " ] ;\n"; ++ text += "\n"; ++ ++#if JucePlugin_WantsLV2Latency ++ // Latency port ++ text += " lv2:port [\n"; ++ text += " a lv2:OutputPort, lv2:ControlPort ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_latency\" ;\n"; ++ text += " lv2:name \"Latency\" ;\n"; ++ text += " lv2:designation <" LV2_CORE__latency "> ;\n"; ++ text += " lv2:portProperty lv2:reportsLatency, lv2:integer ;\n"; ++ text += " ] ;\n"; ++ text += "\n"; ++#endif ++ ++ // Audio inputs ++ for (int i=0; i < maxNumInputChannels; ++i) ++ { ++ if (i == 0) ++ text += " lv2:port [\n"; ++ else ++ text += " [\n"; ++ ++ text += " a lv2:InputPort, lv2:AudioPort ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_audio_in_" + String(i+1) + "\" ;\n"; ++ text += " lv2:name \"Audio Input " + String(i+1) + "\" ;\n"; ++ ++ if (i+1 == maxNumInputChannels) ++ text += " ] ;\n\n"; ++ else ++ text += " ] ,\n"; ++ } ++ ++ // Audio outputs ++ for (int i=0; i < maxNumOutputChannels; ++i) ++ { ++ if (i == 0) ++ text += " lv2:port [\n"; ++ else ++ text += " [\n"; ++ ++ text += " a lv2:OutputPort, lv2:AudioPort ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"lv2_audio_out_" + String(i+1) + "\" ;\n"; ++ text += " lv2:name \"Audio Output " + String(i+1) + "\" ;\n"; ++ ++ if (i+1 == maxNumOutputChannels) ++ text += " ] ;\n\n"; ++ else ++ text += " ] ,\n"; ++ } ++ ++ // Parameters ++ for (int i=0; i < filter->getNumParameters(); ++i) ++ { ++ if (i == 0) ++ text += " lv2:port [\n"; ++ else ++ text += " [\n"; ++ ++ text += " a lv2:InputPort, lv2:ControlPort ;\n"; ++ text += " lv2:index " + String(portIndex++) + " ;\n"; ++ text += " lv2:symbol \"" + nameToSymbol(filter->getParameterName(i), i) + "\" ;\n"; ++ ++ if (filter->getParameterName(i).isNotEmpty()) ++ text += " lv2:name \"" + filter->getParameterName(i) + "\" ;\n"; ++ else ++ text += " lv2:name \"Port " + String(i+1) + "\" ;\n"; ++ ++ text += " lv2:default " + String::formatted("%f", safeParamValue(filter->getParameter(i))) + " ;\n"; ++ text += " lv2:minimum 0.0 ;\n"; ++ text += " lv2:maximum 1.0 ;\n"; ++ ++ if (! filter->isParameterAutomatable(i)) ++ text += " lv2:portProperty <" LV2_PORT_PROPS__expensive "> ;\n"; ++ ++ if (i+1 == filter->getNumParameters()) ++ text += " ] ;\n\n"; ++ else ++ text += " ] ,\n"; ++ } ++ ++ text += " doap:name \"" + filter->getName() + "\" ;\n"; ++ text += " doap:maintainer [ foaf:name \"" JucePlugin_Manufacturer "\" ] .\n"; ++ ++ return text; ++} ++ ++/** Create the presets.ttl file contents */ ++const String makePresetsFile (AudioProcessor* const filter) ++{ ++ const String& pluginURI(getPluginURI()); ++ String text; ++ ++ // Header ++ text += "@prefix atom: <" LV2_ATOM_PREFIX "> .\n"; ++ text += "@prefix lv2: <" LV2_CORE_PREFIX "> .\n"; ++ text += "@prefix pset: <" LV2_PRESETS_PREFIX "> .\n"; ++ text += "@prefix rdf: .\n"; ++ text += "@prefix rdfs: .\n"; ++ text += "@prefix state: <" LV2_STATE_PREFIX "> .\n"; ++ text += "@prefix xsd: .\n"; ++ text += "\n"; ++ ++ // Presets ++ const int numPrograms = filter->getNumPrograms(); ++ const String presetSeparator(pluginURI.contains("#") ? ":" : "#"); ++ ++ for (int i = 0; i < numPrograms; ++i) ++ { ++ std::cout << "\nSaving preset " << i+1 << "/" << numPrograms+1 << "..."; ++ std::cout.flush(); ++ ++ String preset; ++ ++ // Label ++ filter->setCurrentProgram(i); ++ preset += "<" + pluginURI + presetSeparator + "preset" + String::formatted("%03i", i+1) + "> a pset:Preset ;\n"; ++ ++ // State ++#if JucePlugin_WantsLV2State ++ preset += " state:state [\n"; ++ #if JucePlugin_WantsLV2StateString ++ preset += " <" JUCE_LV2_STATE_STRING_URI ">\n"; ++ preset += "\"\"\"\n"; ++ preset += filter->getStateInformationString().replace("\r\n","\n"); ++ preset += "\"\"\"\n"; ++ #else ++ MemoryBlock chunkMemory; ++ filter->getCurrentProgramStateInformation(chunkMemory); ++ const String chunkString(Base64::toBase64(chunkMemory.getData(), chunkMemory.getSize())); ++ ++ preset += " <" JUCE_LV2_STATE_BINARY_URI "> [\n"; ++ preset += " a atom:Chunk ;\n"; ++ preset += " rdf:value \"" + chunkString + "\"^^xsd:base64Binary ;\n"; ++ preset += " ] ;\n"; ++ #endif ++ if (filter->getNumParameters() == 0) ++ { ++ preset += " ] .\n\n"; ++ continue; ++ } ++ ++ preset += " ] ;\n\n"; ++#endif ++ ++ // Port values ++ usedSymbols.clear(); ++ ++ for (int j=0; j < filter->getNumParameters(); ++j) ++ { ++ if (j == 0) ++ preset += " lv2:port [\n"; ++ else ++ preset += " [\n"; ++ ++ preset += " lv2:symbol \"" + nameToSymbol(filter->getParameterName(j), j) + "\" ;\n"; ++ preset += " pset:value " + String::formatted("%f", safeParamValue(filter->getParameter(j))) + " ;\n"; ++ ++ if (j+1 == filter->getNumParameters()) ++ preset += " ] "; ++ else ++ preset += " ] ,\n"; ++ } ++ preset += ".\n\n"; ++ ++ text += preset; ++ } ++ ++ return text; ++} ++ ++/** Creates manifest.ttl, plugin.ttl and presets.ttl files */ ++void createLv2Files(const char* basename) ++{ ++ const ScopedJuceInitialiser_GUI juceInitialiser; ++ ScopedPointer filter (createPluginFilterOfType (AudioProcessor::wrapperType_LV2)); ++ ++ String binary(basename); ++ String binaryTTL(binary + ".ttl"); ++ ++ std::cout << "Writing manifest.ttl..."; std::cout.flush(); ++ std::fstream manifest("manifest.ttl", std::ios::out); ++ manifest << makeManifestFile(filter, binary) << std::endl; ++ manifest.close(); ++ std::cout << " done!" << std::endl; ++ ++ std::cout << "Writing " << binary << ".ttl..."; std::cout.flush(); ++ std::fstream plugin(binaryTTL.toUTF8(), std::ios::out); ++ plugin << makePluginFile(filter, JucePlugin_MaxNumInputChannels, JucePlugin_MaxNumOutputChannels) << std::endl; ++ plugin.close(); ++ std::cout << " done!" << std::endl; ++ ++#if JucePlugin_WantsLV2Presets ++ std::cout << "Writing presets.ttl..."; std::cout.flush(); ++ std::fstream presets("presets.ttl", std::ios::out); ++ presets << makePresetsFile(filter) << std::endl; ++ presets.close(); ++ std::cout << " done!" << std::endl; ++#endif ++} ++ ++//============================================================================== ++#if JUCE_LINUX ++ ++class SharedMessageThread : public Thread ++{ ++public: ++ SharedMessageThread() ++ : Thread ("Lv2MessageThread"), ++ initialised (false) ++ { ++ startThread (7); ++ ++ while (! initialised) ++ sleep (1); ++ } ++ ++ ~SharedMessageThread() ++ { ++ MessageManager::getInstance()->stopDispatchLoop(); ++ waitForThreadToExit (5000); ++ } ++ ++ void run() override ++ { ++ const ScopedJuceInitialiser_GUI juceInitialiser; ++ ++ MessageManager::getInstance()->setCurrentThreadAsMessageThread(); ++ initialised = true; ++ ++ MessageManager::getInstance()->runDispatchLoop(); ++ } ++ ++private: ++ volatile bool initialised; ++}; ++#endif ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++//============================================================================== ++/** ++ Lightweight DocumentWindow subclass for external ui ++*/ ++class JuceLv2ExternalUIWindow : public DocumentWindow ++{ ++public: ++ /** Creates a Document Window wrapper */ ++ JuceLv2ExternalUIWindow (AudioProcessorEditor* editor, const String& title) : ++ DocumentWindow (title, Colours::white, DocumentWindow::minimiseButton | DocumentWindow::closeButton, false), ++ closed (false), ++ lastPos (0, 0) ++ { ++ setOpaque (true); ++ setContentNonOwned (editor, true); ++ setSize (editor->getWidth(), editor->getHeight()); ++ setUsingNativeTitleBar (true); ++ } ++ ++ /** Close button handler */ ++ void closeButtonPressed() ++ { ++ saveLastPos(); ++ removeFromDesktop(); ++ closed = true; ++ } ++ ++ void saveLastPos() ++ { ++ lastPos = getScreenPosition(); ++ } ++ ++ void restoreLastPos() ++ { ++ setTopLeftPosition (lastPos.getX(), lastPos.getY()); ++ } ++ ++ Point getLastPos() ++ { ++ return lastPos; ++ } ++ ++ bool isClosed() ++ { ++ return closed; ++ } ++ ++ void reset() ++ { ++ closed = false; ++ } ++ ++private: ++ bool closed; ++ Point lastPos; ++ ++ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ExternalUIWindow); ++}; ++ ++//============================================================================== ++/** ++ Juce LV2 External UI handle ++*/ ++class JuceLv2ExternalUIWrapper : public LV2_External_UI_Widget ++{ ++public: ++ JuceLv2ExternalUIWrapper (AudioProcessorEditor* editor, const String& title) ++ : window (editor, title) ++ { ++ // external UI calls ++ run = doRun; ++ show = doShow; ++ hide = doHide; ++ } ++ ++ ~JuceLv2ExternalUIWrapper() ++ { ++ if (window.isOnDesktop()) ++ window.removeFromDesktop(); ++ } ++ ++ void close() ++ { ++ window.closeButtonPressed(); ++ } ++ ++ bool isClosed() ++ { ++ return window.isClosed(); ++ } ++ ++ void reset(const String& title) ++ { ++ window.reset(); ++ window.setName(title); ++ } ++ ++ void repaint() ++ { ++ window.repaint(); ++ } ++ ++ Point getScreenPosition() ++ { ++ if (window.isClosed()) ++ return window.getLastPos(); ++ else ++ return window.getScreenPosition(); ++ } ++ ++ void setScreenPos (int x, int y) ++ { ++ if (! window.isClosed()) ++ window.setTopLeftPosition(x, y); ++ } ++ ++ //============================================================================== ++ static void doRun (LV2_External_UI_Widget* _this_) ++ { ++ const MessageManagerLock mmLock; ++ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_; ++ ++ if (! self->isClosed()) ++ self->window.repaint(); ++ } ++ ++ static void doShow (LV2_External_UI_Widget* _this_) ++ { ++ const MessageManagerLock mmLock; ++ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_; ++ ++ if (! self->isClosed()) ++ { ++ if (! self->window.isOnDesktop()) ++ self->window.addToDesktop(); ++ ++ self->window.restoreLastPos(); ++ self->window.setVisible(true); ++ } ++ } ++ ++ static void doHide (LV2_External_UI_Widget* _this_) ++ { ++ const MessageManagerLock mmLock; ++ JuceLv2ExternalUIWrapper* self = (JuceLv2ExternalUIWrapper*) _this_; ++ ++ if (! self->isClosed()) ++ { ++ self->window.saveLastPos(); ++ self->window.setVisible(false); ++ } ++ } ++ ++private: ++ JuceLv2ExternalUIWindow window; ++ ++ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ExternalUIWrapper); ++}; ++ ++//============================================================================== ++/** ++ Juce LV2 Parent UI container, listens for resize events and passes them to ui-resize ++*/ ++class JuceLv2ParentContainer : public Component ++{ ++public: ++ JuceLv2ParentContainer (AudioProcessorEditor* editor, const LV2UI_Resize* uiResize_) ++ : uiResize(uiResize_) ++ { ++ setOpaque (true); ++ editor->setOpaque (true); ++ setBounds (editor->getBounds()); ++ ++ editor->setTopLeftPosition (0, 0); ++ addAndMakeVisible (editor); ++ } ++ ++ ~JuceLv2ParentContainer() ++ { ++ } ++ ++ void paint (Graphics&) {} ++ void paintOverChildren (Graphics&) {} ++ ++ void childBoundsChanged (Component* child) ++ { ++ const int cw = child->getWidth(); ++ const int ch = child->getHeight(); ++ ++#if JUCE_LINUX ++ XResizeWindow (display.display, (Window) getWindowHandle(), cw, ch); ++#else ++ setSize (cw, ch); ++#endif ++ ++ if (uiResize != nullptr) ++ uiResize->ui_resize (uiResize->handle, cw, ch); ++ } ++ ++ void reset (const LV2UI_Resize* uiResize_) ++ { ++ uiResize = uiResize_; ++ ++ if (uiResize != nullptr) ++ uiResize->ui_resize (uiResize->handle, getWidth(), getHeight()); ++ } ++ ++private: ++ //============================================================================== ++ const LV2UI_Resize* uiResize; ++#if JUCE_LINUX ++ ScopedXDisplay display; ++#endif ++ ++ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2ParentContainer); ++}; ++ ++//============================================================================== ++/** ++ Juce LV2 UI handle ++*/ ++class JuceLv2UIWrapper : public AudioProcessorListener, ++ public Timer ++{ ++public: ++ JuceLv2UIWrapper (AudioProcessor* filter_, LV2UI_Write_Function writeFunction_, LV2UI_Controller controller_, ++ LV2UI_Widget* widget, const LV2_Feature* const* features, bool isExternal_) ++ : filter (filter_), ++ writeFunction (writeFunction_), ++ controller (controller_), ++ isExternal (isExternal_), ++ controlPortOffset (0), ++ lastProgramCount (0), ++ uiTouch (nullptr), ++ programsHost (nullptr), ++ externalUIHost (nullptr), ++ lastExternalUIPos (-1, -1), ++ uiResize (nullptr) ++ { ++ jassert (filter != nullptr); ++ ++ filter->addListener(this); ++ ++ if (filter->hasEditor()) ++ { ++ editor = filter->createEditorIfNeeded(); ++ ++ if (editor == nullptr) ++ { ++ *widget = nullptr; ++ return; ++ } ++ } ++ ++ for (int i = 0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_UI__touch) == 0) ++ uiTouch = (const LV2UI_Touch*)features[i]->data; ++ ++ else if (strcmp(features[i]->URI, LV2_PROGRAMS__Host) == 0) ++ programsHost = (const LV2_Programs_Host*)features[i]->data; ++ } ++ ++ if (isExternal) ++ { ++ resetExternalUI (features); ++ ++ if (externalUIHost != nullptr) ++ { ++ String title (filter->getName()); ++ ++ if (externalUIHost->plugin_human_id != nullptr) ++ title = externalUIHost->plugin_human_id; ++ ++ externalUI = new JuceLv2ExternalUIWrapper (editor, title); ++ *widget = externalUI; ++ startTimer (100); ++ } ++ else ++ { ++ *widget = nullptr; ++ } ++ } ++ else ++ { ++ resetParentUI (features); ++ ++ if (parentContainer != nullptr) ++ *widget = parentContainer->getWindowHandle(); ++ else ++ *widget = nullptr; ++ } ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ controlPortOffset += 1; ++#endif ++#if JucePlugin_ProducesMidiOutput ++ controlPortOffset += 1; ++#endif ++ controlPortOffset += 1; // freewheel ++#if JucePlugin_WantsLV2Latency ++ controlPortOffset += 1; ++#endif ++ controlPortOffset += JucePlugin_MaxNumInputChannels; ++ controlPortOffset += JucePlugin_MaxNumOutputChannels; ++ ++ lastProgramCount = filter->getNumPrograms(); ++ } ++ ++ ~JuceLv2UIWrapper() ++ { ++ PopupMenu::dismissAllActiveMenus(); ++ ++ filter->removeListener(this); ++ ++ parentContainer = nullptr; ++ externalUI = nullptr; ++ externalUIHost = nullptr; ++ ++ if (editor != nullptr) ++ { ++ filter->editorBeingDeleted (editor); ++ editor = nullptr; ++ } ++ } ++ ++ //============================================================================== ++ // LV2 core calls ++ ++ void lv2Cleanup() ++ { ++ const MessageManagerLock mmLock; ++ ++ if (isExternal) ++ { ++ if (isTimerRunning()) ++ stopTimer(); ++ ++ externalUIHost = nullptr; ++ ++ if (externalUI != nullptr) ++ { ++ lastExternalUIPos = externalUI->getScreenPosition(); ++ externalUI->close(); ++ } ++ } ++ else ++ { ++ if (parentContainer) ++ { ++ parentContainer->setVisible (false); ++ if (parentContainer->isOnDesktop()) ++ parentContainer->removeFromDesktop(); ++ } ++ } ++ } ++ ++ //============================================================================== ++ // Juce calls ++ ++ void audioProcessorParameterChanged (AudioProcessor*, int index, float newValue) ++ { ++ if (writeFunction != nullptr && controller != nullptr) ++ writeFunction (controller, index + controlPortOffset, sizeof (float), 0, &newValue); ++ } ++ ++ void audioProcessorChanged (AudioProcessor*) ++ { ++ if (filter != nullptr && programsHost != nullptr) ++ { ++ if (filter->getNumPrograms() != lastProgramCount) ++ { ++ programsHost->program_changed (programsHost->handle, -1); ++ lastProgramCount = filter->getNumPrograms(); ++ } ++ else ++ programsHost->program_changed (programsHost->handle, filter->getCurrentProgram()); ++ } ++ } ++ ++ void audioProcessorParameterChangeGestureBegin (AudioProcessor*, int parameterIndex) ++ { ++ if (uiTouch != nullptr) ++ uiTouch->touch (uiTouch->handle, parameterIndex + controlPortOffset, true); ++ } ++ ++ void audioProcessorParameterChangeGestureEnd (AudioProcessor*, int parameterIndex) ++ { ++ if (uiTouch != nullptr) ++ uiTouch->touch (uiTouch->handle, parameterIndex + controlPortOffset, false); ++ } ++ ++ void timerCallback() ++ { ++ if (externalUI != nullptr && externalUI->isClosed()) ++ { ++ if (externalUIHost != nullptr) ++ externalUIHost->ui_closed (controller); ++ ++ if (isTimerRunning()) ++ stopTimer(); ++ } ++ } ++ ++ //============================================================================== ++ void resetIfNeeded (LV2UI_Write_Function writeFunction_, LV2UI_Controller controller_, LV2UI_Widget* widget, ++ const LV2_Feature* const* features) ++ { ++ writeFunction = writeFunction_; ++ controller = controller_; ++ uiTouch = nullptr; ++ programsHost = nullptr; ++ ++ for (int i = 0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_UI__touch) == 0) ++ uiTouch = (const LV2UI_Touch*)features[i]->data; ++ ++ else if (strcmp(features[i]->URI, LV2_PROGRAMS__Host) == 0) ++ programsHost = (const LV2_Programs_Host*)features[i]->data; ++ } ++ ++ if (isExternal) ++ { ++ resetExternalUI (features); ++ *widget = externalUI; ++ } ++ else ++ { ++ resetParentUI (features); ++ *widget = parentContainer->getWindowHandle(); ++ } ++ } ++ ++ void repaint() ++ { ++ const MessageManagerLock mmLock; ++ ++ if (editor != nullptr) ++ editor->repaint(); ++ ++ if (parentContainer != nullptr) ++ parentContainer->repaint(); ++ ++ if (externalUI != nullptr) ++ externalUI->repaint(); ++ } ++ ++private: ++ AudioProcessor* const filter; ++ ScopedPointer editor; ++ ++ LV2UI_Write_Function writeFunction; ++ LV2UI_Controller controller; ++ const bool isExternal; ++ ++ uint32 controlPortOffset; ++ int lastProgramCount; ++ ++ const LV2UI_Touch* uiTouch; ++ const LV2_Programs_Host* programsHost; ++ ++ ScopedPointer externalUI; ++ const LV2_External_UI_Host* externalUIHost; ++ Point lastExternalUIPos; ++ ++ ScopedPointer parentContainer; ++ const LV2UI_Resize* uiResize; ++ ++#if JUCE_LINUX ++ ScopedXDisplay display; ++#endif ++ ++ //============================================================================== ++ void resetExternalUI (const LV2_Feature* const* features) ++ { ++ externalUIHost = nullptr; ++ ++ for (int i = 0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_EXTERNAL_UI__Host) == 0) ++ { ++ externalUIHost = (const LV2_External_UI_Host*)features[i]->data; ++ break; ++ } ++ } ++ ++ if (externalUI != nullptr) ++ { ++ String title(filter->getName()); ++ ++ if (externalUIHost->plugin_human_id != nullptr) ++ title = externalUIHost->plugin_human_id; ++ ++ if (lastExternalUIPos.getX() != -1 && lastExternalUIPos.getY() != -1) ++ externalUI->setScreenPos(lastExternalUIPos.getX(), lastExternalUIPos.getY()); ++ ++ externalUI->reset(title); ++ startTimer (100); ++ } ++ } ++ ++ void resetParentUI (const LV2_Feature* const* features) ++ { ++ void* parent = nullptr; ++ uiResize = nullptr; ++ ++ for (int i = 0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_UI__parent) == 0) ++ parent = features[i]->data; ++ ++ else if (strcmp(features[i]->URI, LV2_UI__resize) == 0) ++ uiResize = (const LV2UI_Resize*)features[i]->data; ++ } ++ ++ if (parent != nullptr) ++ { ++ if (parentContainer == nullptr) ++ parentContainer = new JuceLv2ParentContainer (editor, uiResize); ++ ++ parentContainer->setVisible (false); ++ ++ if (parentContainer->isOnDesktop()) ++ parentContainer->removeFromDesktop(); ++ ++ parentContainer->addToDesktop (0, parent); ++ ++#if JUCE_LINUX ++ Window hostWindow = (Window) parent; ++ Window editorWnd = (Window) parentContainer->getWindowHandle(); ++ XReparentWindow (display.display, editorWnd, hostWindow, 0, 0); ++#endif ++ ++ parentContainer->reset (uiResize); ++ parentContainer->setVisible (true); ++ } ++ } ++ ++ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2UIWrapper) ++}; ++ ++#endif /* JUCE_AUDIOPROCESSOR_NO_GUI */ ++ ++//============================================================================== ++/** ++ Juce LV2 handle ++*/ ++class JuceLv2Wrapper : public AudioPlayHead ++{ ++public: ++ //============================================================================== ++ JuceLv2Wrapper (double sampleRate_, const LV2_Feature* const* features) ++ : numInChans (JucePlugin_MaxNumInputChannels), ++ numOutChans (JucePlugin_MaxNumOutputChannels), ++ bufferSize (2048), ++ sampleRate (sampleRate_), ++ uridMap (nullptr), ++ uridAtomBlank (0), ++ uridAtomObject (0), ++ uridAtomDouble (0), ++ uridAtomFloat (0), ++ uridAtomInt (0), ++ uridAtomLong (0), ++ uridAtomSequence (0), ++ uridMidiEvent (0), ++ uridTimePos (0), ++ uridTimeBar (0), ++ uridTimeBarBeat (0), ++ uridTimeBeatsPerBar (0), ++ uridTimeBeatsPerMinute (0), ++ uridTimeBeatUnit (0), ++ uridTimeFrame (0), ++ uridTimeSpeed (0), ++ usingNominalBlockLength (false) ++ { ++ { ++ const MessageManagerLock mmLock; ++ filter = createPluginFilterOfType (AudioProcessor::wrapperType_LV2); ++ } ++ jassert (filter != nullptr); ++ ++ filter->setPlayConfigDetails (numInChans, numOutChans, 0, 0); ++ filter->setPlayHead (this); ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ portEventsIn = nullptr; ++#endif ++#if JucePlugin_ProducesMidiOutput ++ portMidiOut = nullptr; ++#endif ++ ++ portFreewheel = nullptr; ++ ++#if JucePlugin_WantsLV2Latency ++ portLatency = nullptr; ++#endif ++ ++ for (int i=0; i < numInChans; ++i) ++ portAudioIns[i] = nullptr; ++ for (int i=0; i < numOutChans; ++i) ++ portAudioOuts[i] = nullptr; ++ ++ portControls.insertMultiple (0, nullptr, filter->getNumParameters()); ++ ++ for (int i=0; i < filter->getNumParameters(); ++i) ++ lastControlValues.add (filter->getParameter(i)); ++ ++ curPosInfo.resetToDefault(); ++ ++ // we need URID_Map first ++ for (int i=0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_URID__map) == 0) ++ { ++ uridMap = (const LV2_URID_Map*)features[i]->data; ++ break; ++ } ++ } ++ ++ // we require uridMap to work properly (it's set as required feature) ++ jassert (uridMap != nullptr); ++ ++ if (uridMap != nullptr) ++ { ++ uridAtomBlank = uridMap->map(uridMap->handle, LV2_ATOM__Blank); ++ uridAtomObject = uridMap->map(uridMap->handle, LV2_ATOM__Object); ++ uridAtomDouble = uridMap->map(uridMap->handle, LV2_ATOM__Double); ++ uridAtomFloat = uridMap->map(uridMap->handle, LV2_ATOM__Float); ++ uridAtomInt = uridMap->map(uridMap->handle, LV2_ATOM__Int); ++ uridAtomLong = uridMap->map(uridMap->handle, LV2_ATOM__Long); ++ uridAtomSequence = uridMap->map(uridMap->handle, LV2_ATOM__Sequence); ++ uridMidiEvent = uridMap->map(uridMap->handle, LV2_MIDI__MidiEvent); ++ uridTimePos = uridMap->map(uridMap->handle, LV2_TIME__Position); ++ uridTimeBar = uridMap->map(uridMap->handle, LV2_TIME__bar); ++ uridTimeBarBeat = uridMap->map(uridMap->handle, LV2_TIME__barBeat); ++ uridTimeBeatsPerBar = uridMap->map(uridMap->handle, LV2_TIME__beatsPerBar); ++ uridTimeBeatsPerMinute = uridMap->map(uridMap->handle, LV2_TIME__beatsPerMinute); ++ uridTimeBeatUnit = uridMap->map(uridMap->handle, LV2_TIME__beatUnit); ++ uridTimeFrame = uridMap->map(uridMap->handle, LV2_TIME__frame); ++ uridTimeSpeed = uridMap->map(uridMap->handle, LV2_TIME__speed); ++ ++ for (int i=0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_OPTIONS__options) == 0) ++ { ++ const LV2_Options_Option* options = (const LV2_Options_Option*)features[i]->data; ++ ++ for (int j=0; options[j].key != 0; ++j) ++ { ++ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__nominalBlockLength)) ++ { ++ if (options[j].type == uridAtomInt) ++ { ++ bufferSize = *(int*)options[j].value; ++ usingNominalBlockLength = true; ++ } ++ else ++ { ++ std::cerr << "Host provides nominalBlockLength but has wrong value type" << std::endl; ++ } ++ break; ++ } ++ ++ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__maxBlockLength)) ++ { ++ if (options[j].type == uridAtomInt) ++ bufferSize = *(int*)options[j].value; ++ else ++ std::cerr << "Host provides maxBlockLength but has wrong value type" << std::endl; ++ ++ // no break, continue in case host supports nominalBlockLength ++ } ++ } ++ break; ++ } ++ } ++ } ++ ++ progDesc.bank = 0; ++ progDesc.program = 0; ++ progDesc.name = nullptr; ++ } ++ ++ ~JuceLv2Wrapper () ++ { ++ const MessageManagerLock mmLock; ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ ui = nullptr; ++#endif ++ filter = nullptr; ++ ++ if (progDesc.name != nullptr) ++ free((void*)progDesc.name); ++ ++ portControls.clear(); ++ lastControlValues.clear(); ++ } ++ ++ //============================================================================== ++ // LV2 core calls ++ ++ void lv2ConnectPort (uint32 portId, void* dataLocation) ++ { ++ uint32 index = 0; ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ if (portId == index++) ++ { ++ portEventsIn = (LV2_Atom_Sequence*)dataLocation; ++ return; ++ } ++#endif ++ ++#if JucePlugin_ProducesMidiOutput ++ if (portId == index++) ++ { ++ portMidiOut = (LV2_Atom_Sequence*)dataLocation; ++ return; ++ } ++#endif ++ ++ if (portId == index++) ++ { ++ portFreewheel = (float*)dataLocation; ++ return; ++ } ++ ++#if JucePlugin_WantsLV2Latency ++ if (portId == index++) ++ { ++ portLatency = (float*)dataLocation; ++ return; ++ } ++#endif ++ ++ for (int i=0; i < numInChans; ++i) ++ { ++ if (portId == index++) ++ { ++ portAudioIns[i] = (float*)dataLocation; ++ return; ++ } ++ } ++ ++ for (int i=0; i < numOutChans; ++i) ++ { ++ if (portId == index++) ++ { ++ portAudioOuts[i] = (float*)dataLocation; ++ return; ++ } ++ } ++ ++ for (int i=0; i < filter->getNumParameters(); ++i) ++ { ++ if (portId == index++) ++ { ++ portControls.set(i, (float*)dataLocation); ++ return; ++ } ++ } ++ } ++ ++ void lv2Activate() ++ { ++ jassert (filter != nullptr); ++ ++ filter->prepareToPlay (sampleRate, bufferSize); ++ filter->setPlayConfigDetails (numInChans, numOutChans, sampleRate, bufferSize); ++ ++ channels.calloc (numInChans + numOutChans); ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_ProducesMidiOutput) ++ midiEvents.ensureSize (2048); ++ midiEvents.clear(); ++#endif ++ } ++ ++ void lv2Deactivate() ++ { ++ jassert (filter != nullptr); ++ ++ filter->releaseResources(); ++ ++ channels.free(); ++ } ++ ++ void lv2Run (uint32 sampleCount) ++ { ++ jassert (filter != nullptr); ++ ++#if JucePlugin_WantsLV2Latency ++ if (portLatency != nullptr) ++ *portLatency = filter->getLatencySamples(); ++#endif ++ ++ if (portFreewheel != nullptr) ++ filter->setNonRealtime (*portFreewheel >= 0.5f); ++ ++ if (sampleCount == 0) ++ { ++ /** ++ LV2 pre-roll ++ Hosts might use this to force plugins to update its output control ports. ++ (plugins can only access port locations during run) */ ++ return; ++ } ++ ++ // Check for updated parameters ++ { ++ float curValue; ++ ++ for (int i = 0; i < portControls.size(); ++i) ++ { ++ if (portControls[i] != nullptr) ++ { ++ curValue = *portControls[i]; ++ ++ if (lastControlValues[i] != curValue) ++ { ++ filter->setParameter (i, curValue); ++ lastControlValues.setUnchecked (i, curValue); ++ } ++ } ++ } ++ } ++ ++ { ++ const ScopedLock sl (filter->getCallbackLock()); ++ ++ if (filter->isSuspended() && false) ++ { ++ for (int i = 0; i < numOutChans; ++i) ++ zeromem (portAudioOuts[i], sizeof (float) * sampleCount); ++ } ++ else ++ { ++ int i; ++ for (i = 0; i < numOutChans; ++i) ++ { ++ channels[i] = portAudioOuts[i]; ++ ++ if (i < numInChans && portAudioIns[i] != portAudioOuts[i]) ++ FloatVectorOperations::copy (portAudioOuts [i], portAudioIns[i], sampleCount); ++ } ++ ++ for (; i < numInChans; ++i) ++ channels [i] = portAudioIns[i]; ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ if (portEventsIn != nullptr) ++ { ++ midiEvents.clear(); ++ ++ LV2_ATOM_SEQUENCE_FOREACH(portEventsIn, iter) ++ { ++ const LV2_Atom_Event* event = (const LV2_Atom_Event*)iter; ++ ++ if (event == nullptr) ++ continue; ++ if (event->time.frames >= sampleCount) ++ break; ++ ++ #if JucePlugin_WantsMidiInput ++ if (event->body.type == uridMidiEvent) ++ { ++ const uint8* data = (const uint8*)(event + 1); ++ midiEvents.addEvent(data, event->body.size, event->time.frames); ++ continue; ++ } ++ #endif ++ #if JucePlugin_WantsLV2TimePos ++ if (event->body.type == uridAtomBlank || event->body.type == uridAtomObject) ++ { ++ const LV2_Atom_Object* obj = (LV2_Atom_Object*)&event->body; ++ ++ if (obj->body.otype != uridTimePos) ++ continue; ++ ++ LV2_Atom* bar = nullptr; ++ LV2_Atom* barBeat = nullptr; ++ LV2_Atom* beatUnit = nullptr; ++ LV2_Atom* beatsPerBar = nullptr; ++ LV2_Atom* beatsPerMinute = nullptr; ++ LV2_Atom* frame = nullptr; ++ LV2_Atom* speed = nullptr; ++ ++ lv2_atom_object_get (obj, ++ uridTimeBar, &bar, ++ uridTimeBarBeat, &barBeat, ++ uridTimeBeatUnit, &beatUnit, ++ uridTimeBeatsPerBar, &beatsPerBar, ++ uridTimeBeatsPerMinute, &beatsPerMinute, ++ uridTimeFrame, &frame, ++ uridTimeSpeed, &speed, ++ nullptr); ++ ++ // need to handle this first as other values depend on it ++ if (speed != nullptr) ++ { ++ /**/ if (speed->type == uridAtomDouble) ++ lastPositionData.speed = ((LV2_Atom_Double*)speed)->body; ++ else if (speed->type == uridAtomFloat) ++ lastPositionData.speed = ((LV2_Atom_Float*)speed)->body; ++ else if (speed->type == uridAtomInt) ++ lastPositionData.speed = ((LV2_Atom_Int*)speed)->body; ++ else if (speed->type == uridAtomLong) ++ lastPositionData.speed = ((LV2_Atom_Long*)speed)->body; ++ ++ curPosInfo.isPlaying = lastPositionData.speed != 0.0; ++ } ++ ++ if (bar != nullptr) ++ { ++ /**/ if (bar->type == uridAtomDouble) ++ lastPositionData.bar = ((LV2_Atom_Double*)bar)->body; ++ else if (bar->type == uridAtomFloat) ++ lastPositionData.bar = ((LV2_Atom_Float*)bar)->body; ++ else if (bar->type == uridAtomInt) ++ lastPositionData.bar = ((LV2_Atom_Int*)bar)->body; ++ else if (bar->type == uridAtomLong) ++ lastPositionData.bar = ((LV2_Atom_Long*)bar)->body; ++ } ++ ++ if (barBeat != nullptr) ++ { ++ /**/ if (barBeat->type == uridAtomDouble) ++ lastPositionData.barBeat = ((LV2_Atom_Double*)barBeat)->body; ++ else if (barBeat->type == uridAtomFloat) ++ lastPositionData.barBeat = ((LV2_Atom_Float*)barBeat)->body; ++ else if (barBeat->type == uridAtomInt) ++ lastPositionData.barBeat = ((LV2_Atom_Int*)barBeat)->body; ++ else if (barBeat->type == uridAtomLong) ++ lastPositionData.barBeat = ((LV2_Atom_Long*)barBeat)->body; ++ } ++ ++ if (beatUnit != nullptr) ++ { ++ /**/ if (beatUnit->type == uridAtomDouble) ++ lastPositionData.beatUnit = ((LV2_Atom_Double*)beatUnit)->body; ++ else if (beatUnit->type == uridAtomFloat) ++ lastPositionData.beatUnit = ((LV2_Atom_Float*)beatUnit)->body; ++ else if (beatUnit->type == uridAtomInt) ++ lastPositionData.beatUnit = ((LV2_Atom_Int*)beatUnit)->body; ++ else if (beatUnit->type == uridAtomLong) ++ lastPositionData.beatUnit = ((LV2_Atom_Long*)beatUnit)->body; ++ ++ if (lastPositionData.beatUnit > 0) ++ curPosInfo.timeSigDenominator = lastPositionData.beatUnit; ++ } ++ ++ if (beatsPerBar != nullptr) ++ { ++ /**/ if (beatsPerBar->type == uridAtomDouble) ++ lastPositionData.beatsPerBar = ((LV2_Atom_Double*)beatsPerBar)->body; ++ else if (beatsPerBar->type == uridAtomFloat) ++ lastPositionData.beatsPerBar = ((LV2_Atom_Float*)beatsPerBar)->body; ++ else if (beatsPerBar->type == uridAtomInt) ++ lastPositionData.beatsPerBar = ((LV2_Atom_Int*)beatsPerBar)->body; ++ else if (beatsPerBar->type == uridAtomLong) ++ lastPositionData.beatsPerBar = ((LV2_Atom_Long*)beatsPerBar)->body; ++ ++ if (lastPositionData.beatsPerBar > 0.0f) ++ curPosInfo.timeSigNumerator = lastPositionData.beatsPerBar; ++ } ++ ++ if (beatsPerMinute != nullptr) ++ { ++ /**/ if (beatsPerMinute->type == uridAtomDouble) ++ lastPositionData.beatsPerMinute = ((LV2_Atom_Double*)beatsPerMinute)->body; ++ else if (beatsPerMinute->type == uridAtomFloat) ++ lastPositionData.beatsPerMinute = ((LV2_Atom_Float*)beatsPerMinute)->body; ++ else if (beatsPerMinute->type == uridAtomInt) ++ lastPositionData.beatsPerMinute = ((LV2_Atom_Int*)beatsPerMinute)->body; ++ else if (beatsPerMinute->type == uridAtomLong) ++ lastPositionData.beatsPerMinute = ((LV2_Atom_Long*)beatsPerMinute)->body; ++ ++ if (lastPositionData.beatsPerMinute > 0.0f) ++ { ++ curPosInfo.bpm = lastPositionData.beatsPerMinute; ++ ++ if (lastPositionData.speed != 0) ++ curPosInfo.bpm *= std::abs(lastPositionData.speed); ++ } ++ } ++ ++ if (frame != nullptr) ++ { ++ /**/ if (frame->type == uridAtomDouble) ++ lastPositionData.frame = ((LV2_Atom_Double*)frame)->body; ++ else if (frame->type == uridAtomFloat) ++ lastPositionData.frame = ((LV2_Atom_Float*)frame)->body; ++ else if (frame->type == uridAtomInt) ++ lastPositionData.frame = ((LV2_Atom_Int*)frame)->body; ++ else if (frame->type == uridAtomLong) ++ lastPositionData.frame = ((LV2_Atom_Long*)frame)->body; ++ ++ if (lastPositionData.frame >= 0) ++ { ++ curPosInfo.timeInSamples = lastPositionData.frame; ++ curPosInfo.timeInSeconds = double(curPosInfo.timeInSamples)/sampleRate; ++ } ++ } ++ ++ if (lastPositionData.bar >= 0 && lastPositionData.beatsPerBar > 0.0f) ++ { ++ curPosInfo.ppqPositionOfLastBarStart = lastPositionData.bar * lastPositionData.beatsPerBar; ++ ++ if (lastPositionData.barBeat >= 0.0f) ++ curPosInfo.ppqPosition = curPosInfo.ppqPositionOfLastBarStart + lastPositionData.barBeat; ++ } ++ ++ lastPositionData.extraValid = (lastPositionData.beatsPerMinute > 0.0 && ++ lastPositionData.beatUnit > 0 && ++ lastPositionData.beatsPerBar > 0.0f); ++ } ++ #endif ++ } ++ } ++#endif ++ { ++ AudioSampleBuffer chans (channels, jmax (numInChans, numOutChans), sampleCount); ++ filter->processBlock (chans, midiEvents); ++ } ++ } ++ } ++ ++#if JucePlugin_WantsLV2TimePos ++ // update timePos for next callback ++ if (lastPositionData.speed != 0.0) ++ { ++ if (lastPositionData.speed > 0.0) ++ { ++ // playing forwards ++ lastPositionData.frame += sampleCount; ++ } ++ else ++ { ++ // playing backwards ++ lastPositionData.frame -= sampleCount; ++ ++ if (lastPositionData.frame < 0) ++ lastPositionData.frame = 0; ++ } ++ ++ curPosInfo.timeInSamples = lastPositionData.frame; ++ curPosInfo.timeInSeconds = double(curPosInfo.timeInSamples)/sampleRate; ++ ++ if (lastPositionData.extraValid) ++ { ++ const double beatsPerMinute = lastPositionData.beatsPerMinute * lastPositionData.speed; ++ const double framesPerBeat = 60.0 * sampleRate / beatsPerMinute; ++ const double addedBarBeats = double(sampleCount) / framesPerBeat; ++ ++ if (lastPositionData.bar >= 0 && lastPositionData.barBeat >= 0.0f) ++ { ++ lastPositionData.bar += std::floor((lastPositionData.barBeat+addedBarBeats)/ ++ lastPositionData.beatsPerBar); ++ lastPositionData.barBeat = std::fmod(lastPositionData.barBeat+addedBarBeats, ++ lastPositionData.beatsPerBar); ++ ++ if (lastPositionData.bar < 0) ++ lastPositionData.bar = 0; ++ ++ curPosInfo.ppqPositionOfLastBarStart = lastPositionData.bar * lastPositionData.beatsPerBar; ++ curPosInfo.ppqPosition = curPosInfo.ppqPositionOfLastBarStart + lastPositionData.barBeat; ++ } ++ ++ curPosInfo.bpm = std::abs(beatsPerMinute); ++ } ++ } ++#endif ++ ++#if JucePlugin_ProducesMidiOutput ++ if (portMidiOut != nullptr) ++ { ++ const uint32_t capacity = portMidiOut->atom.size; ++ ++ portMidiOut->atom.size = sizeof(LV2_Atom_Sequence_Body); ++ portMidiOut->atom.type = uridAtomSequence; ++ portMidiOut->body.unit = 0; ++ portMidiOut->body.pad = 0; ++ ++ if (! midiEvents.isEmpty()) ++ { ++ const uint8* midiEventData; ++ int midiEventSize, midiEventPosition; ++ MidiBuffer::Iterator i (midiEvents); ++ ++ uint32_t size, offset = 0; ++ LV2_Atom_Event* aev; ++ ++ while (i.getNextEvent (midiEventData, midiEventSize, midiEventPosition)) ++ { ++ jassert (midiEventPosition >= 0 && midiEventPosition < (int)sampleCount); ++ ++ if (sizeof(LV2_Atom_Event) + midiEventSize > capacity - offset) ++ break; ++ ++ aev = (LV2_Atom_Event*)((char*)LV2_ATOM_CONTENTS(LV2_Atom_Sequence, portMidiOut) + offset); ++ aev->time.frames = midiEventPosition; ++ aev->body.type = uridMidiEvent; ++ aev->body.size = midiEventSize; ++ memcpy(LV2_ATOM_BODY(&aev->body), midiEventData, midiEventSize); ++ ++ size = lv2_atom_pad_size(sizeof(LV2_Atom_Event) + midiEventSize); ++ offset += size; ++ portMidiOut->atom.size += size; ++ } ++ ++ midiEvents.clear(); ++ } ++ } else ++#endif ++ if (! midiEvents.isEmpty()) ++ { ++ midiEvents.clear(); ++ } ++ } ++ ++ //============================================================================== ++ // LV2 extended calls ++ ++ uint32_t lv2GetOptions (LV2_Options_Option* options) ++ { ++ // currently unused ++ ignoreUnused(options); ++ ++ return LV2_OPTIONS_SUCCESS; ++ } ++ ++ uint32_t lv2SetOptions (const LV2_Options_Option* options) ++ { ++ for (int j=0; options[j].key != 0; ++j) ++ { ++ if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__nominalBlockLength)) ++ { ++ if (options[j].type == uridAtomInt) ++ bufferSize = *(int*)options[j].value; ++ else ++ std::cerr << "Host changed nominalBlockLength but with wrong value type" << std::endl; ++ } ++ else if (options[j].key == uridMap->map(uridMap->handle, LV2_BUF_SIZE__maxBlockLength) && ! usingNominalBlockLength) ++ { ++ if (options[j].type == uridAtomInt) ++ bufferSize = *(int*)options[j].value; ++ else ++ std::cerr << "Host changed maxBlockLength but with wrong value type" << std::endl; ++ } ++ else if (options[j].key == uridMap->map(uridMap->handle, LV2_CORE__sampleRate)) ++ { ++ if (options[j].type == uridAtomDouble) ++ sampleRate = *(double*)options[j].value; ++ else ++ std::cerr << "Host changed sampleRate but with wrong value type" << std::endl; ++ } ++ } ++ ++ return LV2_OPTIONS_SUCCESS; ++ } ++ ++ const LV2_Program_Descriptor* lv2GetProgram (uint32_t index) ++ { ++ jassert (filter != nullptr); ++ ++ if (progDesc.name != nullptr) ++ { ++ free((void*)progDesc.name); ++ progDesc.name = nullptr; ++ } ++ ++ if ((int)index < filter->getNumPrograms()) ++ { ++ progDesc.bank = index / 128; ++ progDesc.program = index % 128; ++ progDesc.name = strdup(filter->getProgramName(index).toUTF8()); ++ return &progDesc; ++ } ++ ++ return nullptr; ++ } ++ ++ void lv2SelectProgram (uint32_t bank, uint32_t program) ++ { ++ jassert (filter != nullptr); ++ ++ int realProgram = bank * 128 + program; ++ ++ if (realProgram < filter->getNumPrograms()) ++ { ++ filter->setCurrentProgram(realProgram); ++ ++ // update input control ports now ++ for (int i = 0; i < portControls.size(); ++i) ++ { ++ float value = filter->getParameter(i); ++ ++ if (portControls[i] != nullptr) ++ *portControls[i] = value; ++ ++ lastControlValues.set(i, value); ++ } ++ } ++ } ++ ++ LV2_State_Status lv2SaveState (LV2_State_Store_Function store, LV2_State_Handle stateHandle) ++ { ++ jassert (filter != nullptr); ++ ++#if JucePlugin_WantsLV2StateString ++ String stateData(filter->getStateInformationString().replace("\r\n","\n")); ++ CharPointer_UTF8 charData(stateData.toUTF8()); ++ ++ store (stateHandle, ++ uridMap->map(uridMap->handle, JUCE_LV2_STATE_STRING_URI), ++ charData.getAddress(), ++ charData.sizeInBytes(), ++ uridMap->map(uridMap->handle, LV2_ATOM__String), ++ LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); ++#else ++ MemoryBlock chunkMemory; ++ filter->getCurrentProgramStateInformation (chunkMemory); ++ ++ store (stateHandle, ++ uridMap->map(uridMap->handle, JUCE_LV2_STATE_BINARY_URI), ++ chunkMemory.getData(), ++ chunkMemory.getSize(), ++ uridMap->map(uridMap->handle, LV2_ATOM__Chunk), ++ LV2_STATE_IS_POD|LV2_STATE_IS_PORTABLE); ++#endif ++ ++ return LV2_STATE_SUCCESS; ++ } ++ ++ LV2_State_Status lv2RestoreState (LV2_State_Retrieve_Function retrieve, LV2_State_Handle stateHandle, uint32_t flags) ++ { ++ jassert (filter != nullptr); ++ ++ size_t size = 0; ++ uint32 type = 0; ++ const void* data = retrieve (stateHandle, ++#if JucePlugin_WantsLV2StateString ++ uridMap->map(uridMap->handle, JUCE_LV2_STATE_STRING_URI), ++#else ++ uridMap->map(uridMap->handle, JUCE_LV2_STATE_BINARY_URI), ++#endif ++ &size, &type, &flags); ++ ++ if (data == nullptr || size == 0 || type == 0) ++ return LV2_STATE_ERR_UNKNOWN; ++ ++#if JucePlugin_WantsLV2StateString ++ if (type == uridMap->map (uridMap->handle, LV2_ATOM__String)) ++ { ++ String stateData (CharPointer_UTF8(static_cast(data))); ++ filter->setStateInformationString (stateData); ++ ++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ if (ui != nullptr) ++ ui->repaint(); ++ #endif ++ ++ return LV2_STATE_SUCCESS; ++ } ++#else ++ if (type == uridMap->map (uridMap->handle, LV2_ATOM__Chunk)) ++ { ++ filter->setCurrentProgramStateInformation (data, size); ++ ++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ if (ui != nullptr) ++ ui->repaint(); ++ #endif ++ ++ return LV2_STATE_SUCCESS; ++ } ++#endif ++ ++ return LV2_STATE_ERR_BAD_TYPE; ++ } ++ ++ //============================================================================== ++ // Juce calls ++ ++ bool getCurrentPosition (AudioPlayHead::CurrentPositionInfo& info) ++ { ++#if JucePlugin_WantsLV2TimePos ++ info = curPosInfo; ++ return true; ++#else ++ ignoreUnused(info); ++ return false; ++#endif ++ } ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ //============================================================================== ++ JuceLv2UIWrapper* getUI (LV2UI_Write_Function writeFunction, LV2UI_Controller controller, LV2UI_Widget* widget, ++ const LV2_Feature* const* features, bool isExternal) ++ { ++ const MessageManagerLock mmLock; ++ ++ if (ui != nullptr) ++ ui->resetIfNeeded (writeFunction, controller, widget, features); ++ else ++ ui = new JuceLv2UIWrapper (filter, writeFunction, controller, widget, features, isExternal); ++ ++ return ui; ++ } ++#endif ++ ++private: ++#if JUCE_LINUX ++ SharedResourcePointer msgThread; ++#else ++ SharedResourcePointer sharedJuceGUI; ++#endif ++ ++ ScopedPointer filter; ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ ScopedPointer ui; ++#endif ++ HeapBlock channels; ++ MidiBuffer midiEvents; ++ int numInChans, numOutChans; ++ ++#if (JucePlugin_WantsMidiInput || JucePlugin_WantsLV2TimePos) ++ LV2_Atom_Sequence* portEventsIn; ++#endif ++#if JucePlugin_ProducesMidiOutput ++ LV2_Atom_Sequence* portMidiOut; ++#endif ++ float* portFreewheel; ++#if JucePlugin_WantsLV2Latency ++ float* portLatency; ++#endif ++ float* portAudioIns[JucePlugin_MaxNumInputChannels]; ++ float* portAudioOuts[JucePlugin_MaxNumOutputChannels]; ++ Array portControls; ++ ++ uint32 bufferSize; ++ double sampleRate; ++ Array lastControlValues; ++ AudioPlayHead::CurrentPositionInfo curPosInfo; ++ ++ struct Lv2PositionData { ++ int64_t bar; ++ float barBeat; ++ uint32_t beatUnit; ++ float beatsPerBar; ++ float beatsPerMinute; ++ int64_t frame; ++ double speed; ++ bool extraValid; ++ ++ Lv2PositionData() ++ : bar(-1), ++ barBeat(-1.0f), ++ beatUnit(0), ++ beatsPerBar(0.0f), ++ beatsPerMinute(0.0f), ++ frame(-1), ++ speed(0.0), ++ extraValid(false) {} ++ }; ++ Lv2PositionData lastPositionData; ++ ++ const LV2_URID_Map* uridMap; ++ LV2_URID uridAtomBlank; ++ LV2_URID uridAtomObject; ++ LV2_URID uridAtomDouble; ++ LV2_URID uridAtomFloat; ++ LV2_URID uridAtomInt; ++ LV2_URID uridAtomLong; ++ LV2_URID uridAtomSequence; ++ LV2_URID uridMidiEvent; ++ LV2_URID uridTimePos; ++ LV2_URID uridTimeBar; ++ LV2_URID uridTimeBarBeat; ++ LV2_URID uridTimeBeatsPerBar; // timeSigNumerator ++ LV2_URID uridTimeBeatsPerMinute; // bpm ++ LV2_URID uridTimeBeatUnit; // timeSigDenominator ++ LV2_URID uridTimeFrame; // timeInSamples ++ LV2_URID uridTimeSpeed; ++ ++ bool usingNominalBlockLength; // if false use maxBlockLength ++ ++ LV2_Program_Descriptor progDesc; ++ ++ JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (JuceLv2Wrapper) ++}; ++ ++//============================================================================== ++// LV2 descriptor functions ++ ++static LV2_Handle juceLV2_Instantiate (const LV2_Descriptor*, double sampleRate, const char*, const LV2_Feature* const* features) ++{ ++ return new JuceLv2Wrapper (sampleRate, features); ++} ++ ++#define handlePtr ((JuceLv2Wrapper*)handle) ++ ++static void juceLV2_ConnectPort (LV2_Handle handle, uint32 port, void* dataLocation) ++{ ++ handlePtr->lv2ConnectPort (port, dataLocation); ++} ++ ++static void juceLV2_Activate (LV2_Handle handle) ++{ ++ handlePtr->lv2Activate(); ++} ++ ++static void juceLV2_Run( LV2_Handle handle, uint32 sampleCount) ++{ ++ handlePtr->lv2Run (sampleCount); ++} ++ ++static void juceLV2_Deactivate (LV2_Handle handle) ++{ ++ handlePtr->lv2Deactivate(); ++} ++ ++static void juceLV2_Cleanup (LV2_Handle handle) ++{ ++ delete handlePtr; ++} ++ ++//============================================================================== ++// LV2 extended functions ++ ++static uint32_t juceLV2_getOptions (LV2_Handle handle, LV2_Options_Option* options) ++{ ++ return handlePtr->lv2GetOptions(options); ++} ++ ++static uint32_t juceLV2_setOptions (LV2_Handle handle, const LV2_Options_Option* options) ++{ ++ return handlePtr->lv2SetOptions(options); ++} ++ ++static const LV2_Program_Descriptor* juceLV2_getProgram (LV2_Handle handle, uint32_t index) ++{ ++ return handlePtr->lv2GetProgram(index); ++} ++ ++static void juceLV2_selectProgram (LV2_Handle handle, uint32_t bank, uint32_t program) ++{ ++ handlePtr->lv2SelectProgram(bank, program); ++} ++ ++static LV2_State_Status juceLV2_SaveState (LV2_Handle handle, LV2_State_Store_Function store, LV2_State_Handle stateHandle, ++ uint32_t, const LV2_Feature* const*) ++{ ++ return handlePtr->lv2SaveState(store, stateHandle); ++} ++ ++static LV2_State_Status juceLV2_RestoreState (LV2_Handle handle, LV2_State_Retrieve_Function retrieve, LV2_State_Handle stateHandle, ++ uint32_t flags, const LV2_Feature* const*) ++{ ++ return handlePtr->lv2RestoreState(retrieve, stateHandle, flags); ++} ++ ++#undef handlePtr ++ ++static const void* juceLV2_ExtensionData (const char* uri) ++{ ++ static const LV2_Options_Interface options = { juceLV2_getOptions, juceLV2_setOptions }; ++ static const LV2_Programs_Interface programs = { juceLV2_getProgram, juceLV2_selectProgram }; ++ static const LV2_State_Interface state = { juceLV2_SaveState, juceLV2_RestoreState }; ++ ++ if (strcmp(uri, LV2_OPTIONS__interface) == 0) ++ return &options; ++ if (strcmp(uri, LV2_PROGRAMS__Interface) == 0) ++ return &programs; ++ if (strcmp(uri, LV2_STATE__interface) == 0) ++ return &state; ++ ++ return nullptr; ++} ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++//============================================================================== ++// LV2 UI descriptor functions ++ ++static LV2UI_Handle juceLV2UI_Instantiate (LV2UI_Write_Function writeFunction, LV2UI_Controller controller, ++ LV2UI_Widget* widget, const LV2_Feature* const* features, bool isExternal) ++{ ++ for (int i = 0; features[i] != nullptr; ++i) ++ { ++ if (strcmp(features[i]->URI, LV2_INSTANCE_ACCESS_URI) == 0 && features[i]->data != nullptr) ++ { ++ JuceLv2Wrapper* wrapper = (JuceLv2Wrapper*)features[i]->data; ++ return wrapper->getUI(writeFunction, controller, widget, features, isExternal); ++ } ++ } ++ ++ std::cerr << "Host does not support instance-access, cannot use UI" << std::endl; ++ return nullptr; ++} ++ ++static LV2UI_Handle juceLV2UI_InstantiateExternal (const LV2UI_Descriptor*, const char*, const char*, LV2UI_Write_Function writeFunction, ++ LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) ++{ ++ return juceLV2UI_Instantiate(writeFunction, controller, widget, features, true); ++} ++ ++static LV2UI_Handle juceLV2UI_InstantiateParent (const LV2UI_Descriptor*, const char*, const char*, LV2UI_Write_Function writeFunction, ++ LV2UI_Controller controller, LV2UI_Widget* widget, const LV2_Feature* const* features) ++{ ++ return juceLV2UI_Instantiate(writeFunction, controller, widget, features, false); ++} ++ ++static void juceLV2UI_Cleanup (LV2UI_Handle handle) ++{ ++ ((JuceLv2UIWrapper*)handle)->lv2Cleanup(); ++} ++#endif ++ ++//============================================================================== ++// static LV2 Descriptor objects ++ ++static const LV2_Descriptor JuceLv2Plugin = { ++ strdup(getPluginURI().toRawUTF8()), ++ juceLV2_Instantiate, ++ juceLV2_ConnectPort, ++ juceLV2_Activate, ++ juceLV2_Run, ++ juceLV2_Deactivate, ++ juceLV2_Cleanup, ++ juceLV2_ExtensionData ++}; ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++static const LV2UI_Descriptor JuceLv2UI_External = { ++ strdup(String(getPluginURI() + "#ExternalUI").toRawUTF8()), ++ juceLV2UI_InstantiateExternal, ++ juceLV2UI_Cleanup, ++ nullptr, ++ nullptr ++}; ++ ++static const LV2UI_Descriptor JuceLv2UI_Parent = { ++ strdup(String(getPluginURI() + "#ParentUI").toRawUTF8()), ++ juceLV2UI_InstantiateParent, ++ juceLV2UI_Cleanup, ++ nullptr, ++ nullptr ++}; ++#endif ++ ++static const struct DescriptorCleanup { ++ DescriptorCleanup() {} ++ ~DescriptorCleanup() ++ { ++ free((void*)JuceLv2Plugin.URI); ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ free((void*)JuceLv2UI_External.URI); ++ free((void*)JuceLv2UI_Parent.URI); ++#endif ++ } ++} _descCleanup; ++ ++#if JUCE_WINDOWS ++ #define JUCE_EXPORTED_FUNCTION extern "C" __declspec (dllexport) ++#else ++ #define JUCE_EXPORTED_FUNCTION extern "C" __attribute__ ((visibility("default"))) ++#endif ++ ++//============================================================================== ++// startup code.. ++ ++JUCE_EXPORTED_FUNCTION void lv2_generate_ttl (const char* basename); ++JUCE_EXPORTED_FUNCTION void lv2_generate_ttl (const char* basename) ++{ ++ createLv2Files (basename); ++} ++ ++JUCE_EXPORTED_FUNCTION const LV2_Descriptor* lv2_descriptor (uint32 index); ++JUCE_EXPORTED_FUNCTION const LV2_Descriptor* lv2_descriptor (uint32 index) ++{ ++ return (index == 0) ? &JuceLv2Plugin : nullptr; ++} ++ ++#if ! JUCE_AUDIOPROCESSOR_NO_GUI ++JUCE_EXPORTED_FUNCTION const LV2UI_Descriptor* lv2ui_descriptor (uint32 index); ++JUCE_EXPORTED_FUNCTION const LV2UI_Descriptor* lv2ui_descriptor (uint32 index) ++{ ++ switch (index) ++ { ++ case 0: ++ return &JuceLv2UI_External; ++ case 1: ++ return &JuceLv2UI_Parent; ++ default: ++ return nullptr; ++ } ++} ++#endif ++ ++#endif diff --cc debian/extra/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp index 00000000,00000000..dc507e12 new file mode 100644 --- /dev/null +++ b/debian/extra/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp @@@ -1,0 -1,0 +1,27 @@@ ++/* ++ ============================================================================== ++ ++ This file is part of the JUCE library. ++ Copyright (c) 2017 - ROLI Ltd. ++ ++ JUCE is an open source library subject to commercial or open-source ++ licensing. ++ ++ By using JUCE, you agree to the terms of both the JUCE 5 End-User License ++ Agreement and JUCE 5 Privacy Policy (both updated and effective as of the ++ 27th April 2017). ++ ++ End User License Agreement: www.juce.com/juce-5-licence ++ Privacy Policy: www.juce.com/juce-5-privacy-policy ++ ++ Or: You may also use this code under the terms of the GPL v3 (see ++ www.gnu.org/licenses). ++ ++ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER ++ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE ++ DISCLAIMED. ++ ++ ============================================================================== ++*/ ++ ++#include "LV2/juce_LV2_Wrapper.cpp" diff --cc debian/extra/juce_audio_processors/format_types/juce_VSTInterface.h index 00000000,00000000..f531e638 new file mode 100644 --- /dev/null +++ b/debian/extra/juce_audio_processors/format_types/juce_VSTInterface.h @@@ -1,0 -1,0 +1,813 @@@ ++/* ++ ============================================================================== ++ ++ This file is part of the JUCE library. ++ Copyright (c) 2017 - ROLI Ltd. ++ ++ JUCE is an open source library subject to commercial or open-source ++ licensing. ++ ++ By using JUCE, you agree to the terms of both the JUCE 5 End-User License ++ Agreement and JUCE 5 Privacy Policy (both updated and effective as of the ++ 27th April 2017). ++ ++ End User License Agreement: www.juce.com/juce-5-licence ++ Privacy Policy: www.juce.com/juce-5-privacy-policy ++ ++ Or: You may also use this code under the terms of the GPL v3 (see ++ www.gnu.org/licenses). ++ ++ JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER ++ EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE ++ DISCLAIMED. ++ ++ ============================================================================== ++*/ ++ ++/* ++ Copyright © 2019 IOhannes m zmölnig ++ ++ Provide additional structs & enum-aliases, to allow compilation with JUCE-5.4.1 ++ ++ The names of the struct-members and enum-aliases have been derived by comparing ++ juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp of ++ both JUCE-5.3.2 and JUCE-5.4.1 ++ */ ++ ++#define JUCE_VSTINTERFACE_H_INCLUDED ++ ++using namespace juce; ++ ++#if JUCE_MSVC ++ #define VSTINTERFACECALL __cdecl ++ #pragma pack(push) ++ #pragma pack(8) ++#elif JUCE_MAC || JUCE_IOS ++ #define VSTINTERFACECALL ++ #if JUCE_64BIT ++ #pragma options align=power ++ #else ++ #pragma options align=mac68k ++ #endif ++#else ++ #define VSTINTERFACECALL ++ #pragma pack(push, 8) ++#endif ++ ++#define VSTCALLBACK VSTINTERFACECALL ++ ++const int32 juceVstInterfaceVersion = 2400; ++#define kVstVersion 2400 ++const int32 juceVstInterfaceIdentifier = 0x56737450; // The "magic" identifier in the SDK is 'VstP'. ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstEffectInterface ++{ ++ int32 interfaceIdentifier; ++ pointer_sized_int (VSTINTERFACECALL* dispatchFunction) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt); ++ void (VSTINTERFACECALL* processAudioFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples); ++ void (VSTINTERFACECALL* setParameterValueFunction) (VstEffectInterface*, int32 parameterIndex, float value); ++ float (VSTINTERFACECALL* getParameterValueFunction) (VstEffectInterface*, int32 parameterIndex); ++ int32 numPrograms; ++ int32 numParameters; ++ int32 numInputChannels; ++ int32 numOutputChannels; ++ int32 flags; ++ pointer_sized_int hostSpace1; ++ pointer_sized_int hostSpace2; ++ int32 latency; ++ int32 deprecated1; ++ int32 deprecated2; ++ float deprecated3; ++ void* effectPointer; ++ void* userPointer; ++ int32 plugInIdentifier; ++ int32 plugInVersion; ++ void (VSTINTERFACECALL* processAudioInplaceFunction) (VstEffectInterface*, float** inputs, float** outputs, int32 numSamples); ++ void (VSTINTERFACECALL* processDoubleAudioInplaceFunction) (VstEffectInterface*, double** inputs, double** outputs, int32 numSamples); ++ char emptySpace[56]; ++}; ++ ++struct AEffect; ++typedef pointer_sized_int (VSTINTERFACECALL*AEffectDispatcherProc)(AEffect*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt); ++typedef void (VSTINTERFACECALL*AEffectProcessProc)(AEffect*, float** inputs, float** outputs, int32 numSamples); ++typedef void (VSTINTERFACECALL*AEffectProcessDoubleProc)(AEffect*, double** inputs, double** outputs, int32 numSamples); ++typedef float (VSTINTERFACECALL*AEffectGetParameterProc)(AEffect*, int32 parameterIndex); ++typedef void (VSTINTERFACECALL*AEffectSetParameterProc)(AEffect*, int32 parameterIndex, float value); ++ ++struct AEffect ++{ ++ int32 magic; ++ AEffectDispatcherProc dispatcher; ++ AEffectProcessProc process; ++ AEffectSetParameterProc setParameter; ++ AEffectGetParameterProc getParameter; ++ int32 numPrograms; ++ int32 numParams; ++ int32 numInputs; ++ int32 numOutputs; ++ int32 flags; ++ pointer_sized_int hostSpace1; ++ pointer_sized_int hostSpace2; ++ int32 initialDelay; ++ int32 deprecated1; ++ int32 deprecated2; ++ float deprecated3; ++ void* object; ++ void* userPointer; ++ int32 uniqueID; ++ int32 version; ++ AEffectProcessProc processReplacing; ++ AEffectProcessDoubleProc processDoubleReplacing; ++ char emptySpace[56]; ++}; ++ ++ ++typedef pointer_sized_int (VSTINTERFACECALL* VstHostCallback) (VstEffectInterface*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt); ++typedef pointer_sized_int (VSTINTERFACECALL* audioMasterCallback) (AEffect*, int32 op, int32 index, pointer_sized_int value, void* ptr, float opt); ++ ++enum VstEffectInterfaceFlags ++{ ++ vstEffectFlagHasEditor = 1, ++ vstEffectFlagInplaceAudio = 16, ++ vstEffectFlagDataInChunks = 32, ++ vstEffectFlagIsSynth = 256, ++ vstEffectFlagInplaceDoubleAudio = 4096 ++ ++ , effFlagsHasEditor = vstEffectFlagHasEditor ++ , effFlagsNoSoundInStop = 0 // FIXXME ++ , effFlagsProgramChunks = vstEffectFlagDataInChunks ++ ++ , effFlagsCanReplacing = vstEffectFlagInplaceAudio ++ , effFlagsIsSynth = vstEffectFlagIsSynth ++ , effFlagsCanDoubleReplacing = vstEffectFlagInplaceDoubleAudio ++}; ++ ++//============================================================================== ++enum VstHostToPlugInOpcodes ++{ ++ plugInOpcodeOpen, ++ plugInOpcodeClose, ++ plugInOpcodeSetCurrentProgram, ++ plugInOpcodeGetCurrentProgram, ++ plugInOpcodeSetCurrentProgramName, ++ plugInOpcodeGetCurrentProgramName, ++ plugInOpcodeGetParameterLabel, ++ plugInOpcodeGetParameterText, ++ plugInOpcodeGetParameterName, ++ plugInOpcodeSetSampleRate = plugInOpcodeGetParameterName + 2, ++ plugInOpcodeSetBlockSize, ++ plugInOpcodeResumeSuspend, ++ plugInOpcodeGetEditorBounds, ++ plugInOpcodeOpenEditor, ++ plugInOpcodeCloseEditor, ++ plugInOpcodeDrawEditor, ++ plugInOpcodeGetMouse, ++ plugInOpcodeEditorIdle = plugInOpcodeGetMouse + 2, ++ plugInOpcodeeffEditorTop, ++ plugInOpcodeSleepEditor, ++ plugInOpcodeIdentify, ++ plugInOpcodeGetData, ++ plugInOpcodeSetData, ++ plugInOpcodePreAudioProcessingEvents, ++ plugInOpcodeIsParameterAutomatable, ++ plugInOpcodeParameterValueForText, ++ plugInOpcodeGetProgramName = plugInOpcodeParameterValueForText + 2, ++ plugInOpcodeConnectInput = plugInOpcodeGetProgramName + 2, ++ plugInOpcodeConnectOutput, ++ plugInOpcodeGetInputPinProperties, ++ plugInOpcodeGetOutputPinProperties, ++ plugInOpcodeGetPlugInCategory, ++ plugInOpcodeSetSpeakerConfiguration = plugInOpcodeGetPlugInCategory + 7, ++ plugInOpcodeSetBypass = plugInOpcodeSetSpeakerConfiguration + 2, ++ plugInOpcodeGetPlugInName, ++ plugInOpcodeGetManufacturerName = plugInOpcodeGetPlugInName + 2, ++ plugInOpcodeGetManufacturerProductName, ++ plugInOpcodeGetManufacturerVersion, ++ plugInOpcodeManufacturerSpecific, ++ plugInOpcodeCanPlugInDo, ++ plugInOpcodeGetTailSize, ++ plugInOpcodeIdle, ++ plugInOpcodeKeyboardFocusRequired = plugInOpcodeIdle + 4, ++ plugInOpcodeGetVstInterfaceVersion, ++ plugInOpcodeGetCurrentMidiProgram = plugInOpcodeGetVstInterfaceVersion + 5, ++ plugInOpcodeGetSpeakerArrangement = plugInOpcodeGetCurrentMidiProgram + 6, ++ plugInOpcodeNextPlugInUniqueID, ++ plugInOpcodeStartProcess, ++ plugInOpcodeStopProcess, ++ plugInOpcodeSetNumberOfSamplesToProcess, ++ plugInOpcodeSetSampleFloatType = plugInOpcodeSetNumberOfSamplesToProcess + 4, ++ pluginOpcodeGetNumMidiInputChannels, ++ pluginOpcodeGetNumMidiOutputChannels, ++ plugInOpcodeMaximum = pluginOpcodeGetNumMidiOutputChannels ++ ++ , effOpen = plugInOpcodeOpen ++ , effClose = plugInOpcodeClose ++ , effSetProgram = plugInOpcodeSetCurrentProgram ++ , effGetProgram = plugInOpcodeGetCurrentProgram ++ , effSetProgramName = plugInOpcodeSetCurrentProgramName ++ , effGetProgramName = plugInOpcodeGetCurrentProgramName ++ , effGetParamLabel = plugInOpcodeGetParameterLabel ++ , effGetParamDisplay = plugInOpcodeGetParameterText ++ , effGetParamName = plugInOpcodeGetParameterName ++ , effSetSampleRate = plugInOpcodeSetSampleRate ++ , effSetBlockSize = plugInOpcodeSetBlockSize ++ , effMainsChanged = plugInOpcodeResumeSuspend ++ , effEditGetRect = plugInOpcodeGetEditorBounds ++ , effEditOpen = plugInOpcodeOpenEditor ++ , effEditClose = plugInOpcodeCloseEditor ++ , effIdentify = plugInOpcodeIdentify ++ , effGetChunk = plugInOpcodeGetData ++ , effSetChunk = plugInOpcodeSetData ++ , effProcessEvents = plugInOpcodePreAudioProcessingEvents ++ , effCanBeAutomated = plugInOpcodeIsParameterAutomatable ++ , effString2Parameter = plugInOpcodeParameterValueForText ++ , effGetProgramNameIndexed = plugInOpcodeGetProgramName ++ , effGetInputProperties = plugInOpcodeGetInputPinProperties ++ , effGetOutputProperties = plugInOpcodeGetOutputPinProperties ++ , effGetPlugCategory = plugInOpcodeGetPlugInCategory ++ , effSetSpeakerArrangement = plugInOpcodeSetSpeakerConfiguration ++ , effSetBypass = plugInOpcodeSetBypass ++ , effGetEffectName = plugInOpcodeGetPlugInName ++ , effGetProductString = plugInOpcodeGetManufacturerProductName ++ , effGetVendorString = plugInOpcodeGetManufacturerName ++ , effGetVendorVersion = plugInOpcodeGetManufacturerVersion ++ , effVendorSpecific = plugInOpcodeManufacturerSpecific ++ , effCanDo = plugInOpcodeCanPlugInDo ++ , effGetTailSize = plugInOpcodeGetTailSize ++ , effKeysRequired = plugInOpcodeKeyboardFocusRequired ++ , effGetVstVersion = plugInOpcodeGetVstInterfaceVersion ++ , effGetCurrentMidiProgram = plugInOpcodeGetCurrentMidiProgram ++ , effGetSpeakerArrangement = plugInOpcodeGetSpeakerArrangement ++ , effSetTotalSampleToProcess = plugInOpcodeSetNumberOfSamplesToProcess ++ , effSetProcessPrecision = plugInOpcodeSetSampleFloatType ++ , effGetNumMidiInputChannels = pluginOpcodeGetNumMidiInputChannels ++ , effGetNumMidiOutputChannels = pluginOpcodeGetNumMidiOutputChannels ++ ++ , effConnectInput = plugInOpcodeConnectInput ++ , effConnectOutput = plugInOpcodeConnectOutput ++ , effEditIdle = plugInOpcodeEditorIdle ++ , effIdle = plugInOpcodeIdle ++ , effShellGetNextPlugin = plugInOpcodeNextPlugInUniqueID ++ , effStartProcess = plugInOpcodeStartProcess ++ , effStopProcess = plugInOpcodeStopProcess ++}; ++ ++ ++enum VstPlugInToHostOpcodes ++{ ++ hostOpcodeParameterChanged, ++ hostOpcodeVstVersion, ++ hostOpcodeCurrentId, ++ hostOpcodeIdle, ++ hostOpcodePinConnected, ++ hostOpcodePlugInWantsMidi = hostOpcodePinConnected + 2, ++ hostOpcodeGetTimingInfo, ++ hostOpcodePreAudioProcessingEvents, ++ hostOpcodeSetTime, ++ hostOpcodeTempoAt, ++ hostOpcodeGetNumberOfAutomatableParameters, ++ hostOpcodeGetParameterInterval, ++ hostOpcodeIOModified, ++ hostOpcodeNeedsIdle, ++ hostOpcodeWindowSize, ++ hostOpcodeGetSampleRate, ++ hostOpcodeGetBlockSize, ++ hostOpcodeGetInputLatency, ++ hostOpcodeGetOutputLatency, ++ hostOpcodeGetPreviousPlugIn, ++ hostOpcodeGetNextPlugIn, ++ hostOpcodeWillReplace, ++ hostOpcodeGetCurrentAudioProcessingLevel, ++ hostOpcodeGetAutomationState, ++ hostOpcodeOfflineStart, ++ hostOpcodeOfflineReadSource, ++ hostOpcodeOfflineWrite, ++ hostOpcodeOfflineGetCurrentPass, ++ hostOpcodeOfflineGetCurrentMetaPass, ++ hostOpcodeSetOutputSampleRate, ++ hostOpcodeGetOutputSpeakerConfiguration, ++ hostOpcodeGetManufacturerName, ++ hostOpcodeGetProductName, ++ hostOpcodeGetManufacturerVersion, ++ hostOpcodeManufacturerSpecific, ++ hostOpcodeSetIcon, ++ hostOpcodeCanHostDo, ++ hostOpcodeGetLanguage, ++ hostOpcodeOpenEditorWindow, ++ hostOpcodeCloseEditorWindow, ++ hostOpcodeGetDirectory, ++ hostOpcodeUpdateView, ++ hostOpcodeParameterChangeGestureBegin, ++ hostOpcodeParameterChangeGestureEnd ++ ++ , audioMasterProcessEvents = hostOpcodePreAudioProcessingEvents ++ , audioMasterWantMidi = hostOpcodePlugInWantsMidi ++ , audioMasterVendorSpecific = hostOpcodeManufacturerSpecific ++ , audioMasterAutomate = hostOpcodeParameterChanged ++ , audioMasterBeginEdit = hostOpcodeParameterChangeGestureBegin ++ , audioMasterEndEdit = hostOpcodeParameterChangeGestureEnd ++ , audioMasterUpdateDisplay = hostOpcodeUpdateView ++ , audioMasterIOChanged = hostOpcodeIOModified ++ , audioMasterCanDo = hostOpcodeCanHostDo ++ , audioMasterGetCurrentProcessLevel = hostOpcodeGetCurrentAudioProcessingLevel ++ , audioMasterGetTime = hostOpcodeGetTimingInfo ++ , audioMasterSizeWindow = hostOpcodeWindowSize ++ , audioMasterVersion = hostOpcodeVstVersion ++ ++ , audioMasterCloseWindow = hostOpcodeCloseEditorWindow ++ , audioMasterCurrentId = hostOpcodeCurrentId ++ , audioMasterGetAutomationState = hostOpcodeGetAutomationState ++ , audioMasterGetBlockSize = hostOpcodeGetBlockSize ++ , audioMasterGetDirectory = hostOpcodeGetDirectory ++ , audioMasterGetInputLatency = hostOpcodeGetInputLatency ++ , audioMasterGetLanguage = hostOpcodeGetLanguage ++ , audioMasterGetNextPlug = hostOpcodeGetNextPlugIn ++ , audioMasterGetNumAutomatableParameters = hostOpcodeGetNumberOfAutomatableParameters ++ , audioMasterGetOutputLatency = hostOpcodeGetOutputLatency ++ , audioMasterGetOutputSpeakerArrangement = hostOpcodeGetOutputSpeakerConfiguration ++ , audioMasterGetParameterQuantization = hostOpcodeGetParameterInterval ++ , audioMasterGetPreviousPlug = hostOpcodeGetPreviousPlugIn ++ , audioMasterGetProductString = hostOpcodeGetProductName ++ , audioMasterGetSampleRate = hostOpcodeGetSampleRate ++ , audioMasterGetVendorString = hostOpcodeGetManufacturerName ++ , audioMasterGetVendorVersion = hostOpcodeGetManufacturerVersion ++ , audioMasterIdle = hostOpcodeIdle ++ , audioMasterNeedIdle = hostOpcodeNeedsIdle ++ , audioMasterOfflineGetCurrentMetaPass = hostOpcodeOfflineGetCurrentMetaPass ++ , audioMasterOfflineGetCurrentPass = hostOpcodeOfflineGetCurrentPass ++ , audioMasterOfflineRead = hostOpcodeOfflineReadSource ++ , audioMasterOfflineStart = hostOpcodeOfflineStart ++ , audioMasterOfflineWrite = hostOpcodeOfflineWrite ++ , audioMasterOpenWindow = hostOpcodeOpenEditorWindow ++ , audioMasterPinConnected = hostOpcodePinConnected ++ , audioMasterSetIcon = hostOpcodeSetIcon ++ , audioMasterSetOutputSampleRate = hostOpcodeSetOutputSampleRate ++ , audioMasterSetTime = hostOpcodeSetTime ++ , audioMasterTempoAt = hostOpcodeTempoAt ++ , audioMasterWillReplaceOrAccumulate = hostOpcodeWillReplace ++ ++}; ++ ++//============================================================================== ++enum VstProcessingSampleType ++{ ++ vstProcessingSampleTypeFloat, ++ vstProcessingSampleTypeDouble ++ ++ , kVstProcessPrecision32 = vstProcessingSampleTypeFloat ++ , kVstProcessPrecision64 = vstProcessingSampleTypeDouble ++}; ++ ++//============================================================================== ++// These names must be identical to the Steinberg SDK so JUCE users can set ++// exactly what they want. ++typedef enum VstPlugInCategory ++{ ++ kPlugCategUnknown, ++ kPlugCategEffect, ++ kPlugCategSynth, ++ kPlugCategAnalysis, ++ kPlugCategMastering, ++ kPlugCategSpacializer, ++ kPlugCategRoomFx, ++ kPlugSurroundFx, ++ kPlugCategRestoration, ++ kPlugCategOfflineProcess, ++ kPlugCategShell, ++ kPlugCategGenerator ++} VstPlugCategory; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstEditorBounds ++{ ++ int16 upper; ++ int16 leftmost; ++ int16 lower; ++ int16 rightmost; ++}; ++struct ERect { ++ int16 top; ++ int16 left; ++ int16 bottom; ++ int16 right; ++}; ++ ++//============================================================================== ++enum VstMaxStringLengths ++{ ++ vstMaxNameLength = 64, ++ vstMaxParameterOrPinLabelLength = 64, ++ vstMaxParameterOrPinShortLabelLength = 8, ++ vstMaxCategoryLength = 24, ++ vstMaxManufacturerStringLength = 64, ++ vstMaxPlugInNameStringLength = 64 ++ ++ , kVstMaxLabelLen = vstMaxParameterOrPinLabelLength ++ , kVstMaxShortLabelLen = vstMaxParameterOrPinShortLabelLength ++ , kVstMaxProductStrLen = vstMaxPlugInNameStringLength ++ , kVstMaxVendorStrLen = vstMaxManufacturerStringLength ++}; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstPinInfo ++{ ++ char text[vstMaxParameterOrPinLabelLength]; ++ int32 flags; ++ int32 configurationType; ++ char shortText[vstMaxParameterOrPinShortLabelLength]; ++ char unused[48]; ++}; ++struct VstPinProperties ++{ ++ char label[vstMaxParameterOrPinLabelLength]; ++ int32 flags; ++ int32 arrangementType; ++ char shortLabel[vstMaxParameterOrPinShortLabelLength]; ++ char unused[48]; ++}; ++ ++enum VstPinInfoFlags ++{ ++ vstPinInfoFlagIsActive = 1, ++ vstPinInfoFlagIsStereo = 2, ++ vstPinInfoFlagValid = 4 ++ ++ , kVstPinIsActive = vstPinInfoFlagIsActive ++ , kVstPinUseSpeaker = vstPinInfoFlagValid ++ , kVstPinIsStereo = vstPinInfoFlagIsStereo ++}; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstEvent ++{ ++ int32 type; ++ int32 byteSize; // size; ++ int32 deltaFrames; //? sampleOffset; ++ int32 flags; ++ char content[16]; ++}; ++ ++enum VstEventTypes ++{ ++ vstMidiEventType = 1, ++ vstSysExEventType = 6, ++ kVstMidiType = vstMidiEventType, ++ kVstSysExType = vstSysExEventType ++}; ++ ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstEvents ++{ ++ int32 numEvents; ++ pointer_sized_int future; ++ VstEvent* events[2]; ++}; ++ ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstMidiEvent ++{ ++ int32 type; ++ int32 byteSize; // size; ++ int32 deltaFrames; //? sampleOffset; ++ int32 flags; ++ int32 noteLength; // noteSampleLength; ++ int32 noteOffset; // noteSampleOffset; ++ char midiData[4]; ++ char detune; // tuning; ++ char noteOffVelocity; // noteVelocityOff; ++ char future1; ++ char future2; ++}; ++ ++enum VstMidiEventFlags ++{ ++ vstMidiEventIsRealtime = 1 ++}; ++ ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstSysExEvent ++{ ++ int32 type; ++ int32 byteSize; // size; ++ int32 deltaFrames; //? offsetSamples; ++ int32 flags; ++ int32 dumpBytes; // sysExDumpSize; ++ pointer_sized_int resvd1; // future1; ++ char* sysexDump; // sysExDump; ++ pointer_sized_int resvd2; // future2; ++}; ++typedef VstSysExEvent VstMidiSysexEvent; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstTimingInformation ++{ ++ double samplePosition; ++ double sampleRate; ++ double systemTimeNanoseconds; ++ double musicalPosition; ++ double tempoBPM; ++ double lastBarPosition; ++ double loopStartPosition; ++ double loopEndPosition; ++ int32 timeSignatureNumerator; ++ int32 timeSignatureDenominator; ++ int32 smpteOffset; ++ int32 smpteRate; ++ int32 samplesToNearestClock; ++ int32 flags; ++}; ++struct VstTimeInfo ++{ ++ double samplePos; ++ double sampleRate; ++ double systemTimeNanoseconds; ++ double ppqPos; ++ double tempo; ++ double barStartPos; ++ double cycleStartPos; ++ double cycleEndPos; ++ int32 timeSigNumerator; ++ int32 timeSigDenominator; ++ int32 smpteOffset; ++ int32 smpteFrameRate; ++ int32 samplesToNearestClock; ++ int32 flags; ++}; ++ ++enum VstTimingInformationFlags ++{ ++ vstTimingInfoFlagTransportChanged = 1, ++ vstTimingInfoFlagCurrentlyPlaying = 2, ++ vstTimingInfoFlagLoopActive = 4, ++ vstTimingInfoFlagCurrentlyRecording = 8, ++ vstTimingInfoFlagAutomationWriteModeActive = 64, ++ vstTimingInfoFlagAutomationReadModeActive = 128, ++ vstTimingInfoFlagNanosecondsValid = 256, ++ vstTimingInfoFlagMusicalPositionValid = 512, ++ vstTimingInfoFlagTempoValid = 1024, ++ vstTimingInfoFlagLastBarPositionValid = 2048, ++ vstTimingInfoFlagLoopPositionValid = 4096, ++ vstTimingInfoFlagTimeSignatureValid = 8192, ++ vstTimingInfoFlagSmpteValid = 16384, ++ vstTimingInfoFlagNearestClockValid = 32768 ++ ++ , kVstTransportPlaying = vstTimingInfoFlagCurrentlyPlaying ++ , kVstTransportCycleActive = vstTimingInfoFlagLoopActive ++ , kVstTransportRecording = vstTimingInfoFlagCurrentlyRecording ++ , kVstPpqPosValid = vstTimingInfoFlagMusicalPositionValid ++ , kVstTempoValid = vstTimingInfoFlagTempoValid ++ , kVstBarsValid = vstTimingInfoFlagLastBarPositionValid ++ , kVstCyclePosValid = vstTimingInfoFlagLoopPositionValid ++ , kVstTimeSigValid = vstTimingInfoFlagTimeSignatureValid ++ , kVstSmpteValid = vstTimingInfoFlagSmpteValid ++ , kVstClockValid = vstTimingInfoFlagNearestClockValid ++ ++ , kVstAutomationReading = vstTimingInfoFlagAutomationReadModeActive ++ , kVstAutomationWriting = vstTimingInfoFlagAutomationWriteModeActive ++ , kVstNanosValid = vstTimingInfoFlagNanosecondsValid ++ , kVstTransportChanged = vstTimingInfoFlagTransportChanged ++}; ++ ++//============================================================================== ++enum VstSmpteRates ++{ ++ vstSmpteRateFps24, ++ vstSmpteRateFps25, ++ vstSmpteRateFps2997, ++ vstSmpteRateFps30, ++ vstSmpteRateFps2997drop, ++ vstSmpteRateFps30drop, ++ ++ vstSmpteRate16mmFilm, ++ vstSmpteRate35mmFilm, ++ ++ vstSmpteRateFps239 = vstSmpteRate35mmFilm + 3, ++ vstSmpteRateFps249, ++ vstSmpteRateFps599, ++ vstSmpteRateFps60 ++ ++ , kVstSmpte239fps = vstSmpteRateFps239 ++ , kVstSmpte24fps = vstSmpteRateFps24 ++ , kVstSmpte25fps = vstSmpteRateFps25 ++ , kVstSmpte2997fps = vstSmpteRateFps2997 ++ , kVstSmpte30fps = vstSmpteRateFps30 ++ , kVstSmpte2997dfps = vstSmpteRateFps2997drop ++ , kVstSmpte30dfps = vstSmpteRateFps30drop ++ , kVstSmpteFilm16mm = vstSmpteRate16mmFilm ++ , kVstSmpteFilm35mm = vstSmpteRate35mmFilm ++ , kVstSmpte249fps = vstSmpteRateFps249 ++ , kVstSmpte599fps = vstSmpteRateFps599 ++ , kVstSmpte60fps = vstSmpteRateFps60 ++}; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstIndividualSpeakerInfo ++{ ++ float azimuthalAngle; ++ float elevationAngle; ++ float radius; ++ float reserved; ++ char label[vstMaxNameLength]; ++ int32 type; ++ char unused[28]; ++}; ++typedef VstIndividualSpeakerInfo VstSpeakerProperties; ++ ++enum VstIndividualSpeakerType ++{ ++ vstIndividualSpeakerTypeUndefined = 0x7fffffff, ++ vstIndividualSpeakerTypeMono = 0, ++ vstIndividualSpeakerTypeLeft, ++ vstIndividualSpeakerTypeRight, ++ vstIndividualSpeakerTypeCentre, ++ vstIndividualSpeakerTypeLFE, ++ vstIndividualSpeakerTypeLeftSurround, ++ vstIndividualSpeakerTypeRightSurround, ++ vstIndividualSpeakerTypeLeftCentre, ++ vstIndividualSpeakerTypeRightCentre, ++ vstIndividualSpeakerTypeSurround, ++ vstIndividualSpeakerTypeCentreSurround = vstIndividualSpeakerTypeSurround, ++ vstIndividualSpeakerTypeLeftRearSurround, ++ vstIndividualSpeakerTypeRightRearSurround, ++ vstIndividualSpeakerTypeTopMiddle, ++ vstIndividualSpeakerTypeTopFrontLeft, ++ vstIndividualSpeakerTypeTopFrontCentre, ++ vstIndividualSpeakerTypeTopFrontRight, ++ vstIndividualSpeakerTypeTopRearLeft, ++ vstIndividualSpeakerTypeTopRearCentre, ++ vstIndividualSpeakerTypeTopRearRight, ++ vstIndividualSpeakerTypeLFE2 ++ ++ , kSpeakerL = vstIndividualSpeakerTypeLeft ++ , kSpeakerR = vstIndividualSpeakerTypeRight ++ , kSpeakerC = vstIndividualSpeakerTypeCentre ++ , kSpeakerLfe = vstIndividualSpeakerTypeLFE ++ , kSpeakerLs = vstIndividualSpeakerTypeLeftSurround ++ , kSpeakerRs = vstIndividualSpeakerTypeRightSurround ++ , kSpeakerLc = vstIndividualSpeakerTypeLeftCentre ++ , kSpeakerRc = vstIndividualSpeakerTypeRightCentre ++ , kSpeakerS = vstIndividualSpeakerTypeSurround ++ , kSpeakerSl = vstIndividualSpeakerTypeLeftRearSurround ++ , kSpeakerSr = vstIndividualSpeakerTypeRightRearSurround ++ , kSpeakerTm = vstIndividualSpeakerTypeTopMiddle ++ , kSpeakerTfl = vstIndividualSpeakerTypeTopFrontLeft ++ , kSpeakerTfc = vstIndividualSpeakerTypeTopFrontCentre ++ , kSpeakerTfr = vstIndividualSpeakerTypeTopFrontRight ++ , kSpeakerTrl = vstIndividualSpeakerTypeTopRearLeft ++ , kSpeakerTrc = vstIndividualSpeakerTypeTopRearCentre ++ , kSpeakerTrr = vstIndividualSpeakerTypeTopRearRight ++ , kSpeakerLfe2 = vstIndividualSpeakerTypeLFE2 ++}; ++ ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct VstSpeakerConfiguration ++{ ++ int32 type; ++ int32 numChannels; // numberOfChannels; ++ VstIndividualSpeakerInfo speakers[8]; ++}; ++typedef VstSpeakerConfiguration VstSpeakerArrangement; ++ ++enum VstSpeakerConfigurationType ++{ ++ vstSpeakerConfigTypeUser = -2, ++ vstSpeakerConfigTypeEmpty = -1, ++ vstSpeakerConfigTypeMono = 0, ++ vstSpeakerConfigTypeLR, ++ vstSpeakerConfigTypeLsRs, ++ vstSpeakerConfigTypeLcRc, ++ vstSpeakerConfigTypeSlSr, ++ vstSpeakerConfigTypeCLfe, ++ vstSpeakerConfigTypeLRC, ++ vstSpeakerConfigTypeLRS, ++ vstSpeakerConfigTypeLRCLfe, ++ vstSpeakerConfigTypeLRLfeS, ++ vstSpeakerConfigTypeLRCS, ++ vstSpeakerConfigTypeLRLsRs, ++ vstSpeakerConfigTypeLRCLfeS, ++ vstSpeakerConfigTypeLRLfeLsRs, ++ vstSpeakerConfigTypeLRCLsRs, ++ vstSpeakerConfigTypeLRCLfeLsRs, ++ vstSpeakerConfigTypeLRCLsRsCs, ++ vstSpeakerConfigTypeLRLsRsSlSr, ++ vstSpeakerConfigTypeLRCLfeLsRsCs, ++ vstSpeakerConfigTypeLRLfeLsRsSlSr, ++ vstSpeakerConfigTypeLRCLsRsLcRc, ++ vstSpeakerConfigTypeLRCLsRsSlSr, ++ vstSpeakerConfigTypeLRCLfeLsRsLcRc, ++ vstSpeakerConfigTypeLRCLfeLsRsSlSr, ++ vstSpeakerConfigTypeLRCLsRsLcRcCs, ++ vstSpeakerConfigTypeLRCLsRsCsSlSr, ++ vstSpeakerConfigTypeLRCLfeLsRsLcRcCs, ++ vstSpeakerConfigTypeLRCLfeLsRsCsSlSr, ++ vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2 ++ ++ , kSpeakerArrMono = vstSpeakerConfigTypeMono ++ , kSpeakerArrStereo = vstSpeakerConfigTypeLR ++ , kSpeakerArrStereoCLfe = vstSpeakerConfigTypeCLfe ++ , kSpeakerArrStereoCenter = vstSpeakerConfigTypeLcRc ++ , kSpeakerArrStereoSide = vstSpeakerConfigTypeSlSr ++ , kSpeakerArrStereoSurround = vstSpeakerConfigTypeLsRs ++ , kSpeakerArr30Cine = vstSpeakerConfigTypeLRC ++ , kSpeakerArr31Cine = vstSpeakerConfigTypeLRCLfe ++ , kSpeakerArr40Cine = vstSpeakerConfigTypeLRCS ++ , kSpeakerArr41Cine = vstSpeakerConfigTypeLRCLfeS ++ , kSpeakerArr60Cine = vstSpeakerConfigTypeLRCLsRsCs ++ , kSpeakerArr61Cine = vstSpeakerConfigTypeLRCLfeLsRsCs ++ , kSpeakerArr70Cine = vstSpeakerConfigTypeLRCLsRsLcRc // create7point0SDDS ++ , kSpeakerArr71Cine = vstSpeakerConfigTypeLRCLfeLsRsLcRc ++ , kSpeakerArr80Cine = vstSpeakerConfigTypeLRCLsRsLcRcCs ++ , kSpeakerArr81Cine = vstSpeakerConfigTypeLRCLfeLsRsLcRcCs ++ , kSpeakerArr30Music = vstSpeakerConfigTypeLRS ++ , kSpeakerArr31Music = vstSpeakerConfigTypeLRLfeS ++ , kSpeakerArr40Music = vstSpeakerConfigTypeLRLsRs ++ , kSpeakerArr41Music = vstSpeakerConfigTypeLRLfeLsRs ++ , kSpeakerArr60Music = vstSpeakerConfigTypeLRLsRsSlSr ++ , kSpeakerArr61Music = vstSpeakerConfigTypeLRLfeLsRsSlSr ++ , kSpeakerArr70Music = vstSpeakerConfigTypeLRCLsRsSlSr // create7point0 ++ , kSpeakerArr71Music = vstSpeakerConfigTypeLRCLfeLsRsSlSr ++ , kSpeakerArr80Music = vstSpeakerConfigTypeLRCLsRsCsSlSr ++ , kSpeakerArr81Music = vstSpeakerConfigTypeLRCLfeLsRsCsSlSr ++ , kSpeakerArr50 = vstSpeakerConfigTypeLRCLsRs ++ , kSpeakerArr51 = vstSpeakerConfigTypeLRCLfeLsRs ++ , kSpeakerArr102 = vstSpeakerConfigTypeLRCLfeLsRsTflTfcTfrTrlTrrLfe2 ++ , kSpeakerArrEmpty = vstSpeakerConfigTypeEmpty ++ , kSpeakerArrUserDefined = vstSpeakerConfigTypeUser ++}; ++ ++#if JUCE_BIG_ENDIAN ++ #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (a | (((uint32) b) << 8) | (((uint32) c) << 16) | (((uint32) d) << 24)) ++#else ++ #define JUCE_MULTICHAR_CONSTANT(a, b, c, d) (d | (((uint32) c) << 8) | (((uint32) b) << 16) | (((uint32) a) << 24)) ++#endif ++ ++enum PresonusExtensionConstants ++{ ++ presonusVendorID = JUCE_MULTICHAR_CONSTANT ('P', 'r', 'e', 'S'), ++ presonusSetContentScaleFactor = JUCE_MULTICHAR_CONSTANT ('A', 'e', 'C', 's') ++}; ++ ++//============================================================================== ++/** Structure used for VSTs ++ ++ @tags{Audio} ++*/ ++struct vst2FxBank ++{ ++ int32 magic1; ++ int32 size; ++ int32 magic2; ++ int32 version1; ++ int32 fxID; ++ int32 version2; ++ int32 elements; ++ int32 current; ++ char shouldBeZero[124]; ++ int32 chunkSize; ++ char chunk[1]; ++}; ++ ++#if JUCE_MSVC ++ #pragma pack(pop) ++#elif JUCE_MAC || JUCE_IOS ++ #pragma options align=reset ++#else ++ #pragma pack(pop) ++#endif diff --cc debian/extra/lv2-ttl-generator/GNUmakefile index 00000000,00000000..024f2a1f new file mode 100644 --- /dev/null +++ b/debian/extra/lv2-ttl-generator/GNUmakefile @@@ -1,0 -1,0 +1,16 @@@ ++#!/usr/bin/makefile -f ++ ++all: build ++ ++build: lv2_ttl_generator ++mingw: lv2_ttl_generator.exe ++ ++lv2_ttl_generator: lv2_ttl_generator.c ++ $(CXX) lv2_ttl_generator.c -o lv2_ttl_generator -ldl ++ ++lv2_ttl_generator.exe: lv2_ttl_generator.c ++ $(CXX) lv2_ttl_generator.c -o lv2_ttl_generator.exe -static ++ touch lv2_ttl_generator ++ ++clean: ++ rm -f lv2_ttl_generator lv2_ttl_generator.exe diff --cc debian/extra/lv2-ttl-generator/generate-ttl.sh index 00000000,00000000..d5ef597e new file mode 100755 --- /dev/null +++ b/debian/extra/lv2-ttl-generator/generate-ttl.sh @@@ -1,0 -1,0 +1,40 @@@ ++#!/bin/sh ++ ++#set -e ++#echo "Please run this script from the _bin folder" ++ ++error() { ++ echo "$@" 1>&2 ++} ++ ++SCRIPTPATH=$(cd ${0%/*}; pwd) ++ ++if [ -f ${SCRIPTPATH}/lv2_ttl_generator.exe ]; then ++ GEN=${SCRIPTPATH}/lv2_ttl_generator.exe ++ EXT=dll ++else ++ GEN=${SCRIPTPATH}/lv2_ttl_generator ++ EXT=so ++fi ++if [ ! -x "${GEN}" ]; then ++ error "unable to find lv2_ttl_generator" ++ exit 1 ++fi ++ ++SEARCHPATH=$1 ++if [ "x${SEARCHPATH}" = "x" ]; then ++ if [ -d "lv2" ]; then ++ SEARCHPATH="lv2" ++ fi ++ if [ ! -d "${SEARCHPATH}" ]; then ++ SEARCHPATH=. ++ fi ++fi ++if [ ! -d "${SEARCHPATH}" ]; then ++ error "cannot search plugins in non-existing directory ${SEARCHPATH}" ++ exit 1 ++fi ++ ++ ++find ${SEARCHPATH} -type d -name "*.lv2" -exec /bin/sh -c "cd {}; ${GEN} ./*.${EXT}" \; ++ diff --cc debian/extra/lv2-ttl-generator/lv2_ttl_generator.c index 00000000,00000000..bd19f416 new file mode 100644 --- /dev/null +++ b/debian/extra/lv2-ttl-generator/lv2_ttl_generator.c @@@ -1,0 -1,0 +1,81 @@@ ++/* ++ * JUCE LV2 *.ttl generator ++ */ ++ ++#include ++#include ++ ++#ifdef _WIN32 ++ #include ++ #define TTL_GENERATOR_WINDOWS ++#else ++ #include ++#endif ++ ++#ifndef nullptr ++ #define nullptr (0) ++#endif ++ ++typedef void (*TTL_Generator_Function)(const char* basename); ++ ++int main(int argc, char* argv[]) ++{ ++ if (argc != 2) ++ { ++ printf("usage: %s /path/to/plugin-DLL\n", argv[0]); ++ return 1; ++ } ++ ++#ifdef TTL_GENERATOR_WINDOWS ++ const HMODULE handle = LoadLibraryA(argv[1]); ++#else ++ void* const handle = dlopen(argv[1], RTLD_LAZY); ++#endif ++ ++ if (! handle) ++ { ++#ifdef TTL_GENERATOR_WINDOWS ++ printf("Failed to open plugin DLL\n"); ++#else ++ printf("Failed to open plugin DLL, error was:\n%s\n", dlerror()); ++#endif ++ return 2; ++ } ++ ++#ifdef TTL_GENERATOR_WINDOWS ++ const TTL_Generator_Function ttlFn = (TTL_Generator_Function)GetProcAddress(handle, "lv2_generate_ttl"); ++#else ++ const TTL_Generator_Function ttlFn = (TTL_Generator_Function)dlsym(handle, "lv2_generate_ttl"); ++#endif ++ ++ if (ttlFn != NULL) ++ { ++ char basename[strlen(argv[1])+1]; ++ ++#ifdef TTL_GENERATOR_WINDOWS ++ if (char* base2 = strrchr(argv[1], '\\')) ++#else ++ if (char* base2 = strrchr(argv[1], '/')) ++#endif ++ { ++ strcpy(basename, base2+1); ++ basename[strrchr(base2, '.')-base2-1] = '\0'; ++ } ++ else ++ strcpy(basename, argv[1]); ++ ++ printf("Generate ttl data for '%s', basename: '%s'\n", argv[1], basename); ++ ++ ttlFn(basename); ++ } ++ else ++ printf("Failed to find 'lv2_generate_ttl' function\n"); ++ ++#ifdef TTL_GENERATOR_WINDOWS ++ FreeLibrary(handle); ++#else ++ dlclose(handle); ++#endif ++ ++ return 0; ++} diff --cc debian/extra/lv2-ttl-generator/readme.txt index 00000000,00000000..0bd3ab5e new file mode 100644 --- /dev/null +++ b/debian/extra/lv2-ttl-generator/readme.txt @@@ -1,0 -1,0 +1,7 @@@ ++this lv2_ttl_generator is taken from DISTRHO by Filipe Coelho (aka 'falkTX') ++ ++http://distrho.sourceforge.net ++https://github.com/falkTX/DISTRHO ++ ++ ++this small tool creates the needed .ttl files out of the plug-in binaries (.so) for the .lv2 bundle diff --cc debian/gbp.conf index 00000000,00000000..cd3fa3d5 new file mode 100644 --- /dev/null +++ b/debian/gbp.conf @@@ -1,0 -1,0 +1,6 @@@ ++# Configuration file for git-buildpackage and friends ++ ++[DEFAULT] ++pristine-tar = True ++sign-tags = True ++compression = xz diff --cc debian/gbp/postclone.sh index 00000000,00000000..5790ec6d new file mode 100755 --- /dev/null +++ b/debian/gbp/postclone.sh @@@ -1,0 -1,0 +1,14 @@@ ++#!/bin/sh ++ ++## script to initialize a cloned repository ++## with per (local) repository settings. ++ ++# - ignore quilt's .pc/ directory ++# - enable the "--follow-tags" mode for pushing ++ ++echo "tuning git-repository for ${NAME}" ++git config push.followTags true && echo "enabled push.followTags" ++ ++GITEXCLUDE=".git/info/exclude" ++egrep "^/?\.pc/?$" "${GITEXCLUDE}" >/dev/null 2>&1 \ ++ || (echo "/.pc/" >> "${GITEXCLUDE}" && echo "ignoring /.pc/") diff --cc debian/juce-modules-source.doc index 00000000,00000000..ab3c3307 new file mode 100644 --- /dev/null +++ b/debian/juce-modules-source.doc @@@ -1,0 -1,0 +1,1 @@@ ++BREAKING-CHANGES.txt diff --cc debian/juce-modules-source.install index 00000000,00000000..4899195b new file mode 100644 --- /dev/null +++ b/debian/juce-modules-source.install @@@ -1,0 -1,0 +1,3 @@@ ++modules/* /usr/share/juce/modules ++debian/extra/juce_audio_plugin_client/* /usr/share/juce/modules/juce_audio_plugin_client/ ++debian/extra/juce_audio_processors/format_types/juce_VSTInterface.h /usr/share/juce/modules/juce_audio_processors/format_types/ diff --cc debian/juce-tools.install index 00000000,00000000..055151eb new file mode 100644 --- /dev/null +++ b/debian/juce-tools.install @@@ -1,0 -1,0 +1,4 @@@ ++extras/Projucer/Builds/LinuxMakefile/build/Projucer usr/bin ++debian/artifacts/juce.png usr/share/pixmaps/ ++debian/Projucer.desktop usr/share/applications/ ++usr/lib diff --cc debian/juce-tools.manpages index 00000000,00000000..08dbe247 new file mode 100644 --- /dev/null +++ b/debian/juce-tools.manpages @@@ -1,0 -1,0 +1,1 @@@ ++debian/artifacts/Projucer.1 diff --cc debian/juce-tools.mime index 00000000,00000000..643f3da6 new file mode 100644 --- /dev/null +++ b/debian/juce-tools.mime @@@ -1,0 -1,0 +1,1 @@@ ++application/x-juce; Projucer '%s'; edit=Projucer '%s'; test=test "$DISPLAY" != ""; priority=2 diff --cc debian/juce-tools.sharedmimeinfo index 00000000,00000000..043dfa0b new file mode 100644 --- /dev/null +++ b/debian/juce-tools.sharedmimeinfo @@@ -1,0 -1,0 +1,8 @@@ ++ ++ ++ ++ ++ JUCE project ++ ++ ++ diff --cc debian/libjuce-doc.doc-base index 00000000,00000000..6c987e32 new file mode 100644 --- /dev/null +++ b/debian/libjuce-doc.doc-base @@@ -1,0 -1,0 +1,12 @@@ ++Document: libjuce-doc ++Title: JUCE - reference manual ++Author: Julian Storer / ROLI Ltd. ++Abstract: This is the API documentation for JUCE (Jules' Utility Class ++ Extensions), an all-encompassing C++ framework for developing cross-platform ++ software (with a special focus on GUI, graphics and sound) ++Section: Programming ++ ++Format: HTML ++Index: /usr/share/doc/juce-modules-source/apiref/index.html ++Files: /usr/share/doc/juce-modules-source/apiref/*.html ++ diff --cc debian/libjuce-doc.install index 00000000,00000000..49e157f2 new file mode 100644 --- /dev/null +++ b/debian/libjuce-doc.install @@@ -1,0 -1,0 +1,1 @@@ ++doxygen/doc/* /usr/share/doc/juce-modules-source/apiref diff --cc debian/patches/LV2-audioprocessor.patch index 00000000,00000000..e8cf7b34 new file mode 100644 --- /dev/null +++ b/debian/patches/LV2-audioprocessor.patch @@@ -1,0 -1,0 +1,73 @@@ ++From: Filipe Coelho ++Date: Sat, 10 Feb 2018 00:00:00 +0100 ++Subject: LV2 fixes for autiodprocessor ++MIME-Version: 1.0 ++Content-Type: text/plain; charset="utf-8" ++Content-Transfer-Encoding: 8bit ++ ++Origin: https://github.com/DISTRHO/juce/tree/9f6cdc3659df13169285464ee1d13ef14357f833 ++Reviewed-by: IOhannes m zmölnig ++--- ++ .../juce_audio_processors/processors/juce_AudioProcessor.h | 12 ++++++++++++ ++ 1 file changed, 12 insertions(+) ++ ++--- juce.orig/modules/juce_audio_processors/processors/juce_AudioProcessor.h +++++ juce/modules/juce_audio_processors/processors/juce_AudioProcessor.h ++@@ -927,6 +927,7 @@ ++ */ ++ virtual void setNonRealtime (bool isNonRealtime) noexcept; ++ +++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ //============================================================================== ++ /** Creates the processor's GUI. ++ ++@@ -973,6 +974,7 @@ ++ This may call createEditor() internally to create the component. ++ */ ++ AudioProcessorEditor* createEditorIfNeeded(); +++ #endif ++ ++ //============================================================================== ++ /** Returns the default number of steps for a parameter. ++@@ -1108,6 +1110,11 @@ ++ virtual void processorLayoutsChanged(); ++ ++ //============================================================================== +++ /** LV2 specific calls, saving/restore as string. */ +++ virtual String getStateInformationString () { return String(); } +++ virtual void setStateInformationString (const String&) {} +++ +++ //============================================================================== ++ /** Adds a listener that will be called when an aspect of this processor changes. */ ++ virtual void addListener (AudioProcessorListener* newListener); ++ ++@@ -1177,9 +1184,11 @@ ++ ++ virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const { return {}; } ++ +++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ //============================================================================== ++ /** Not for public use - this is called before deleting an editor component. */ ++ void editorBeingDeleted (AudioProcessorEditor*) noexcept; +++ #endif ++ ++ /** Flags to indicate the type of plugin context in which a processor is being used. */ ++ enum WrapperType ++@@ -1193,6 +1202,7 @@ ++ wrapperType_AAX, ++ wrapperType_Standalone, ++ wrapperType_Unity +++ , wrapperType_LV2 ++ }; ++ ++ /** When loaded by a plugin wrapper, this flag will be set to indicate the type ++@@ -1453,7 +1463,9 @@ ++ ++ //============================================================================== ++ Array listeners; +++ #if ! JUCE_AUDIOPROCESSOR_NO_GUI ++ Component::SafePointer activeEditor; +++ #endif ++ double currentSampleRate = 0; ++ int blockSize = 0, latencySamples = 0; ++ bool suspended = false, nonRealtime = false; diff --cc debian/patches/debian_fixed-defines.patch index 00000000,00000000..7486e104 new file mode 100644 --- /dev/null +++ b/debian/patches/debian_fixed-defines.patch @@@ -1,0 -1,0 +1,102 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Sun, 11 Feb 2018 00:00:00 +0100 ++Subject: clamp a few defines to fixed values ++ ++ on Debian we only ever allow using the system provided libraries ++ (zlib, flac, oggvorbis,...) ++Origin: Debian ++Forwarded: not-needed ++--- ++ .../utility/juce_CheckSettingMacros.h | 25 +++++++++++++++++ ++ modules/juce_core/juce_core.h | 32 +++++++++++++++++++++- ++ 2 files changed, 56 insertions(+), 1 deletion(-) ++ ++--- juce.orig/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h +++++ juce/modules/juce_audio_plugin_client/utility/juce_CheckSettingMacros.h ++@@ -24,6 +24,30 @@ ++ ============================================================================== ++ */ ++ +++/* Debian specific overrides */ +++#if JucePlugin_Build_LV2 && ! defined (JucePlugin_LV2URI) +++# warning JUCE/Debian using default LV2URI +++# define JucePlugin_LV2URI JucePlugin_Name +++#endif +++ +++#if JucePlugin_Build_AU +++# warning JUCE/Debian disabled AU support +++# undef JucePlugin_Build_AU +++# define JucePlugin_Build_AU 0 +++#endif +++ +++#if JucePlugin_Build_RTAS +++# warning JUCE/Debian disabled RTAS support +++# undef JucePlugin_Build_RTAS +++# define JucePlugin_Build_RTAS 0 +++#endif +++ +++#if JucePlugin_Build_AAX +++# warning JUCE/Debian disabled AAX support +++# undef JucePlugin_Build_AAX +++# define JucePlugin_Build_AAX 0 +++#endif +++ ++ // The following checks should cause a compile error if you've forgotten to ++ // define all your plugin settings properly.. ++ ++@@ -40,6 +64,7 @@ ++ #endif ++ #define JUCE_CHECKSETTINGMACROS_H ++ +++ ++ #ifndef JucePlugin_IsSynth ++ #error "You need to define the JucePlugin_IsSynth value!" ++ #endif ++--- juce.orig/modules/juce_core/juce_core.h +++++ juce/modules/juce_core/juce_core.h ++@@ -64,6 +64,36 @@ ++ ++ #include "system/juce_TargetPlatform.h" ++ +++/** Debian specific constants +++ - Debian, we don't use embedded libraries +++*/ +++#ifdef JUCE_INCLUDE_ZLIB_CODE +++# undef JUCE_INCLUDE_ZLIB_CODE +++#endif +++#define JUCE_INCLUDE_ZLIB_CODE 0 +++ +++#ifdef JUCE_INCLUDE_FLAC_CODE +++# undef JUCE_INCLUDE_FLAC_CODE +++#endif +++#define JUCE_INCLUDE_FLAC_CODE 0 +++ +++#ifdef JUCE_INCLUDE_OGGVORBIS_CODE +++# undef JUCE_INCLUDE_OGGVORBIS_CODE +++#endif +++#define JUCE_INCLUDE_OGGVORBIS_CODE 0 +++ +++#ifdef JUCE_INCLUDE_JPEGLIB_CODE +++# undef JUCE_INCLUDE_JPEGLIB_CODE +++#endif +++#define JUCE_INCLUDE_JPEGLIB_CODE 0 +++ +++#ifdef JUCE_INCLUDE_PNGLIB_CODE +++# undef JUCE_INCLUDE_PNGLIB_CODE +++#endif +++#define JUCE_INCLUDE_PNGLIB_CODE 0 +++/** Debian specifics END +++*/ +++ ++ //============================================================================== ++ /** Config: JUCE_FORCE_DEBUG ++ ++@@ -123,7 +153,7 @@ ++ specify the path where your zlib headers live. ++ */ ++ #ifndef JUCE_INCLUDE_ZLIB_CODE ++- #define JUCE_INCLUDE_ZLIB_CODE 1 +++ #define JUCE_INCLUDE_ZLIB_CODE 0 ++ #endif ++ ++ #ifndef JUCE_ZLIB_INCLUDE_PATH diff --cc debian/patches/debian_gpl_variant.patch index 00000000,00000000..22499ffe new file mode 100644 --- /dev/null +++ b/debian/patches/debian_gpl_variant.patch @@@ -1,0 -1,0 +1,20 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Thu, 9 Nov 2017 00:00:00 +0100 ++Subject: Build GPL-3 variant of Projucer ++ ++Forwarded: not-needed ++--- ++ extras/Projucer/JuceLibraryCode/AppConfig.h | 2 +- ++ 1 file changed, 1 insertion(+), 1 deletion(-) ++ ++--- juce.orig/extras/Projucer/JuceLibraryCode/AppConfig.h +++++ juce/extras/Projucer/JuceLibraryCode/AppConfig.h ++@@ -32,7 +32,7 @@ ++ // BEGIN SECTION A ++ ++ #ifndef JUCER_ENABLE_GPL_MODE ++- #define JUCER_ENABLE_GPL_MODE 0 +++ #define JUCER_ENABLE_GPL_MODE 1 ++ #endif ++ ++ // END SECTION A diff --cc debian/patches/debian_link_systemlibs.patch index 00000000,00000000..4be7166e new file mode 100644 --- /dev/null +++ b/debian/patches/debian_link_systemlibs.patch @@@ -1,0 -1,0 +1,61 @@@ ++Description: have Projucer link against the system libraries ++ since the Debian package has removed 3rd-party libraries (jpeg, png, flag, ++ ogg/vorbis), we must use against the system libraries. ++Author: IOhannes m zmölnig ++Origin: Debian ++Forwarded: no ++Last-Update: 2019-08-21 ++--- ++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ++--- juce.orig/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h +++++ juce/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Make.h ++@@ -464,6 +464,39 @@ ++ if (isCurlEnabled() && ! isLoadCurlSymbolsLazilyEnabled()) ++ packages.add ("libcurl"); ++ +++ // on Debian, a number of 3rd-party libs have been stripped away, +++ // so we need to link to the system libraries +++ if (project.getEnabledModules().isModuleEnabled ("juce_core")) +++ { +++ packages.add ("zlib"); +++ } +++ if (project.getEnabledModules().isModuleEnabled ("juce_graphics")) +++ { +++ packages.add ("libjpeg"); +++ packages.add ("libpng"); +++ } +++ if (project.getEnabledModules().isModuleEnabled ("juce_audio_formats")) +++ { +++ if(project.isConfigFlagEnabled ("JUCE_USE_FLAC", true)) +++ { +++ packages.add ("flac"); +++ } +++ +++ if(project.isConfigFlagEnabled ("JUCE_USE_OGGVORBIS", true)) +++ { +++ packages.add ("vorbis"); +++ packages.add ("vorbisfile"); +++ packages.add ("vorbisenc"); +++ packages.add ("ogg"); +++ } +++ } +++ if (project.getEnabledModules().isModuleEnabled ("juce_audio_devices")) +++ { +++ if(project.isConfigFlagEnabled ("JUCE_JACK", true)) +++ { +++ packages.add ("jack"); +++ } +++ } ++ packages.removeDuplicates (false); ++ ++ return packages; ++@@ -563,6 +596,9 @@ ++ StringArray result (linuxLibs); ++ ++ auto libraries = StringArray::fromTokens (getExternalLibrariesString(), ";", "\"'"); +++#ifdef DEBIAN_JUCERPROJECT_LIBS +++ libraries.addArray(StringArray::fromTokens (DEBIAN_JUCERPROJECT_LIBS, ";", "\"'")); +++#endif ++ libraries.removeEmptyStrings(); ++ ++ for (auto& lib : libraries) diff --cc debian/patches/debian_no-update-check.patch index 00000000,00000000..3cf23572 new file mode 100644 --- /dev/null +++ b/debian/patches/debian_no-update-check.patch @@@ -1,0 -1,0 +1,21 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Thu, 9 Nov 2017 00:00:00 +0100 ++Subject: prevent Projucer from checking for updates ++ ++ The check-for-updates only makes sense for user-installed Projucer, not for ++ the Debian packaged version. ++Forwarded: not-needed ++--- ++ extras/Projucer/Source/Application/jucer_AutoUpdater.cpp | 1 + ++ 1 file changed, 1 insertion(+) ++ ++--- juce.orig/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp +++++ juce/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp ++@@ -42,6 +42,7 @@ ++ ++ void LatestVersionCheckerAndUpdater::checkForNewVersion (bool showAlerts) ++ { +++ return; // DONT check for new versions on Debian ++ if (! isThreadRunning()) ++ { ++ showAlertWindows = showAlerts; diff --cc debian/patches/debian_no-usagedata.patch index 00000000,00000000..c3ae4901 new file mode 100644 --- /dev/null +++ b/debian/patches/debian_no-usagedata.patch @@@ -1,0 -1,0 +1,26 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Mon, 26 Mar 2018 00:00:00 +0200 ++Subject: default to not-sending usage-data to ROLI ++ ++ we prefer to have privacy enabled by default... ++Forwarded: no ++--- ++ .../Application/Windows/jucer_ApplicationUsageDataWindowComponent.h | 6 +++--- ++ 1 file changed, 3 insertions(+), 3 deletions(-) ++ ++--- juce.orig/extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h +++++ juce/extras/Projucer/Source/Application/Windows/jucer_ApplicationUsageDataWindowComponent.h ++@@ -69,10 +69,10 @@ ++ ++ auto* controller = ProjucerApplication::getApp().licenseController.get(); ++ ++- if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::disabled) ++- shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification); ++- else +++ if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::enabled) ++ shareApplicationUsageDataToggle->setToggleState (true, dontSendNotification); +++ else +++ shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification); ++ ++ addAndMakeVisible (shareApplicationUsageDataLabel); ++ shareApplicationUsageDataLabel.setFont (Font (14.0f)); diff --cc debian/patches/debian_python3.patch index 00000000,00000000..3136281d new file mode 100644 --- /dev/null +++ b/debian/patches/debian_python3.patch @@@ -1,0 -1,0 +1,21 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Sat, 10 Feb 2018 00:00:00 +0100 ++Subject: use Python3 rather than Python2 ++ ++ for building the documentation ++Forwarded: no ++--- ++ doxygen/Makefile | 2 +- ++ 1 file changed, 1 insertion(+), 1 deletion(-) ++ ++--- juce.orig/doxygen/Makefile +++++ juce/doxygen/Makefile ++@@ -8,7 +8,7 @@ ++ doxygen ++ ++ build/juce_modules.dox: process_source_files.py $(SOURCE_FILES) ++- python $< ../modules build +++ python3 $< ../modules build ++ ++ clean: ++ rm -rf build doc diff --cc debian/patches/debian_system_modules.patch index 00000000,00000000..38bfb382 new file mode 100644 --- /dev/null +++ b/debian/patches/debian_system_modules.patch @@@ -1,0 -1,0 +1,22 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Tue, 19 Dec 2017 00:00:00 +0100 ++Subject: default JUCE-module path for Projucer ++ ++ On Debian we have the module-sources installed in /usr/share/juce/modules ++ and should use those if possible. ++Forwarded: not-needed ++--- ++ extras/Projucer/Source/Settings/jucer_StoredSettings.cpp | 2 +- ++ 1 file changed, 1 insertion(+), 1 deletion(-) ++ ++--- juce.orig/extras/Projucer/Source/Settings/jucer_StoredSettings.cpp +++++ juce/extras/Projucer/Source/Settings/jucer_StoredSettings.cpp ++@@ -385,7 +385,7 @@ ++ } ++ else if (key == Ids::defaultJuceModulePath) ++ { ++- return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "~/JUCE/modules"); +++ return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "/usr/share/juce/modules"); ++ } ++ else if (key == Ids::defaultUserModulePath) ++ { diff --cc debian/patches/debian_unittests_globalpaths.patch index 00000000,00000000..fb6094d2 new file mode 100644 --- /dev/null +++ b/debian/patches/debian_unittests_globalpaths.patch @@@ -1,0 -1,0 +1,57 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Wed, 11 Apr 2018 00:00:00 +0200 ++Subject: Use global paths for JUCE modules in UnitTests ++ ++Forwarded: not-needed ++--- ++ extras/UnitTestRunner/UnitTestRunner.jucer | 38 +++++++++++++++--------------- ++ 1 file changed, 19 insertions(+), 19 deletions(-) ++ ++--- juce.orig/extras/UnitTestRunner/UnitTestRunner.jucer +++++ juce/extras/UnitTestRunner/UnitTestRunner.jucer ++@@ -123,26 +123,26 @@ ++ ++ ++ ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- ++- +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ +++ ++ ++- +++ useGlobalPath="1"/> +++ ++ ++ ++ diff --cc debian/patches/debian_vst.patch index 00000000,00000000..2ff02c5e new file mode 100644 --- /dev/null +++ b/debian/patches/debian_vst.patch @@@ -1,0 -1,0 +1,56 @@@ ++Description: provide missing VST2 replacement header ++ backprted from the original JUCE-5.3.1 header ++Author: IOhannes m zmölnig ++Last-Update: 2019-01-12 ++--- ++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ++--- juce.orig/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++++ juce/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp ++@@ -101,8 +101,7 @@ ++ // field in the Projucer. The VST2 SDK can be obtained from the ++ // vstsdk3610_11_06_2018_build_37 (or older) VST3 SDK or JUCE version 5.3.2. You ++ // also need a VST2 license from Steinberg to distribute VST2 plug-ins. ++-#include "pluginterfaces/vst2.x/aeffect.h" ++-#include "pluginterfaces/vst2.x/aeffectx.h" +++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" ++ } ++ ++ using namespace juce; ++@@ -124,7 +123,6 @@ ++ #pragma pack (push, 8) ++ #endif ++ ++-#define JUCE_VSTINTERFACE_H_INCLUDED 1 ++ ++ #include "../utility/juce_IncludeModuleHeaders.h" ++ #include "../utility/juce_FakeMouseMoveGenerator.h" ++--- juce.orig/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++++ juce/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp ++@@ -49,7 +49,6 @@ ++ #endif ++ ++ #define VST_FORCE_DEPRECATED 0 ++-#define JUCE_VSTINTERFACE_H_INCLUDED 1 ++ ++ namespace Vst2 ++ { ++@@ -58,8 +57,7 @@ ++ // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2 ++ // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3 ++ // SDK or JUCE version 5.3.2. ++-#include ++-#include +++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h" ++ } ++ ++ #include "juce_VSTCommon.h" ++@@ -81,6 +79,9 @@ ++ ++ #include "juce_VSTMidiEventList.h" ++ +++#define resvd2 hostSpace2 +++#define nanoSeconds systemTimeNanoseconds +++ ++ #if JUCE_MINGW ++ #ifndef WM_APPCOMMAND ++ #define WM_APPCOMMAND 0x0319 diff --cc debian/patches/jack-client-name.patch index 00000000,00000000..ab7c4164 new file mode 100644 --- /dev/null +++ b/debian/patches/jack-client-name.patch @@@ -1,0 -1,0 +1,28 @@@ ++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= ++Date: Thu, 12 Apr 2018 00:00:00 +0200 ++Subject: meaningful default JACK client name ++ ++ rather than "JUCEJack" for all jack standalone apps, ++ use the . ++ ++Bug: https://github.com/WeAreROLI/JUCE/issues/331 ++Forwarded: https://github.com/WeAreROLI/JUCE/pull/351 ++--- ++ modules/juce_audio_devices/native/juce_linux_JackAudio.cpp | 6 +++++- ++ 1 file changed, 5 insertions(+), 1 deletion(-) ++ ++--- juce.orig/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp +++++ juce/modules/juce_audio_devices/native/juce_linux_JackAudio.cpp ++@@ -105,7 +105,11 @@ ++ ++ //============================================================================== ++ #ifndef JUCE_JACK_CLIENT_NAME ++- #define JUCE_JACK_CLIENT_NAME "JUCEJack" +++ #ifdef JucePlugin_Name +++ # define JUCE_JACK_CLIENT_NAME JucePlugin_Name +++ #else +++ # define JUCE_JACK_CLIENT_NAME "JUCEJack" +++ #endif ++ #endif ++ ++ struct JackPortIterator diff --cc debian/patches/series index 00000000,00000000..78e70087 new file mode 100644 --- /dev/null +++ b/debian/patches/series @@@ -1,0 -1,0 +1,12 @@@ ++jack-client-name.patch ++LV2-audioprocessor.patch ++debian_fixed-defines.patch ++debian_gpl_variant.patch ++debian_no-update-check.patch ++debian_no-usagedata.patch ++debian_system_modules.patch ++debian_python3.patch ++debian_unittests_globalpaths.patch ++debian_vst.patch ++debian_link_systemlibs.patch ++spelling.patch diff --cc debian/patches/spelling.patch index 00000000,00000000..ba5f005c new file mode 100644 --- /dev/null +++ b/debian/patches/spelling.patch @@@ -1,0 -1,0 +1,17 @@@ ++Description: fixed spelling mistakes ++Author: IOhannes m zmölnig ++Forwarded: no ++Last-Update: 2019-01-12 ++--- ++This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ ++--- juce.orig/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h +++++ juce/extras/Projucer/Source/ProjectSaving/jucer_ProjectExport_Xcode.h ++@@ -453,7 +453,7 @@ ++ ++ props.add (new TextPropertyComponent (subprojectsValue, "Xcode Subprojects", 8192, true), ++ "Paths to Xcode projects that should be added to the build (one per line). " ++- "The names of the required build products can be specified after a colon, comma seperated, " +++ "The names of the required build products can be specified after a colon, comma separated, " ++ "e.g. \"path/to/MySubProject.xcodeproj: MySubProject, OtherTarget\". " ++ "If no build products are specified, all build products associated with a subproject will be added."); ++ diff --cc debian/rules index 00000000,00000000..79422bef new file mode 100755 --- /dev/null +++ b/debian/rules @@@ -1,0 -1,0 +1,87 @@@ ++#!/usr/bin/make -f ++# -*- mode: makefile; coding: utf-8 -*- ++# Copyright © 2015 IOhannes m zmölnig ++# Description: Main Debian packaging script for JUCE ++ ++## export dummy TARGET_ARCH that doesn't do much, ++## but disables "-march=native" optimization ++export TARGET_ARCH=-Wl,--as-needed ++ ++DEB_SRCDIR=extras/Projucer/Builds/LinuxMakefile ++DEBIAN_BUILD_ARTIFACTS = debian/artifacts ++ ++DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \ ++ \.git/.*|debian/.*|.*\.gif|.*\.jpg|.*\.JPG|.*\.png|.*\.ico|.*\.icns|.*\.wav|.*\.caf|.*\.ogg|.*\.mp3|.*\.pdf|.*\.keystore|.*\.nib|.*/gradle-wrapper\.jar|.*\.zip ++ ++ ++#DEB_COPYRIGHT_CHECK_IGNORE_REGEX = \ ++#^((.*\.jpg)|(.*\.JPG)|(.*\.gif)|(.*\.png)|(.*\.ico)|(.*\.icns)|(gradle-wrapper\.jar)|(.*\.mp3)|(.*\.caf)|(.*\.nib)|examples/InAppPurchase/Signing/InAppPurchase\.keystore|examples/(InAppPurchase/BinaryData/(Robot|Ed|Jules|JB|Fabian|Lukasz)[012]\.ogg|AUv3Synth|PlugInSamples/MultiOutSynth)/Source/BinaryData/singing\.ogg|examples/Demo/Resources/cello\.wav|examples/Demo/Resources/icons\.zip|modules/juce_audio_plugin_client/RTAS/juce_RTAS_WinResources\.rsr|examples/ComponentTutorialExample/Introduction to Components - Part 1\.pdf|debian/(changelog|copyright(|_hints|_newhints)))$ ++ ++LDFLAGS += $(shell pkg-config --libs libjpeg libpng zlib) ++ ++# JUCE uses some c++11 features requiring atomic_store_8 and ++# atomic_load_8, so we need to link with libatomic on ++# armel, powerpc, powerpcspe, m68k, mips, mipsel, sh4, ... ++# see also: ++# - https://gcc.gnu.org/wiki/Atomic ++# - https://gcc.gnu.org/wiki/Atomic/GCCMM/LIbrary ++# - the 'clasp' packaging ++noatomicarch = $(shell dpkg-architecture -qDEB_HOST_ARCH | egrep -x "(armel|armhf|powerpc|powerpcspe|m68k|mips|mipsel|sh4|riscv64)") ++# link with libatomic on architectures without built-in atomic ++ifeq ($(if $(noatomicarch),atomic), atomic) ++ LDFLAGS += -latomic ++ CPPFLAGS += -DDEBIAN_JUCERPROJECT_LIBS='\"atomic\"' ++endif ++ ++%: ++ dh $@ ++ ++override_dh_auto_build-arch: ++ cp $(CURDIR)/examples/DemoRunner/Builds/iOS/DemoRunner/Images.xcassets/AppIcon.appiconset/Icon.png \ ++ $(DEBIAN_BUILD_ARTIFACTS)/juce.png ++ dh_auto_build -D $(DEB_SRCDIR) -- \ ++ V=1 \ ++ LDFLAGS="$(LDFLAGS)" \ ++ CPPFLAGS="$(CPPFLAGS)" \ ++ $(empty) ++ make -C debian/extra/lv2-ttl-generator/ ++ help2man -N \ ++ --version-string="Projucer $(DEB_UPSTREAM_VERSION)" \ ++ -n "the JUCE project-management tool" \ ++ debian/scripts/Projucer-help2man \ ++ > $(DEBIAN_BUILD_ARTIFACTS)/Projucer.1 ++ ++override_dh_auto_build-indep: ++ make -C doxygen ++ ++override_dh_auto_install-arch: ++ install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator ++ install debian/extra/lv2-ttl-generator/lv2_ttl_generator debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator/lv2_ttl_generator ++ install debian/extra/lv2-ttl-generator/generate-ttl.sh debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/juce/lv2-ttl-generator/generate-ttl.sh ++ ++override_dh_auto_install-indep: ++ -dh_doxygen doxygen/doc/ ++ ++override_dh_install-indep: ++ dh_install --indep -X.tag ++ -find $(CURDIR)/debian/juce-modules-source/usr/share/juce \ ++ -type f -executable \ ++ '(' -name "*.h" -or -name "*.cpp" ')' \ ++ -exec chmod -c 0644 {} + ++ ++override_dh_installchangelogs: ++ dh_installchangelogs ChangeList.txt ++ ++override_dh_clean: ++ dh_clean ++ make -C doxygen/ clean ++ make -C debian/extra/lv2-ttl-generator/ clean ++ rm -rf build $(DEB_SRCDIR)/build ++ rm -f $(DEBIAN_BUILD_ARTIFACTS)/* ++ ++ ++licensecheck: ++ licensecheck -i "^\./($(DEB_COPYRIGHT_CHECK_IGNORE_REGEX))$$" --deb-machine -r . \ ++ > debian/copyright_newhints ++ cmp debian/copyright_hints debian/copyright_newhints \ ++ && rm debian/copyright_newhints diff --cc debian/scripts/Projucer-help2man index 00000000,00000000..6e955d04 new file mode 100755 --- /dev/null +++ b/debian/scripts/Projucer-help2man @@@ -1,0 -1,0 +1,38 @@@ ++#!/bin/sh ++PROJUCER=$(pwd)/extras/Projucer/Builds/Linux/build/Projucer ++LIBJUCE_PATH=$(pwd)/debian/libbuilder/build ++ ++if [ -d "${LIBJUCE_PATH}" ]; then ++ LD_LIBRARY_PATH=${LIBJUCE_PATH}${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} ++ export LD_LIBRARY_PATH ++fi ++ ++#PROJUCER=Projucer ++ ++case "$1" in ++ -h|--help) ++ #${PROJUCER} -h 2>/dev/null | sed -e 's|^ Projucer --| --|' ++ cat <