juce (5.4.4~repack0-3+rpi1) bullseye-staging; urgency=medium
authorPeter Michael Green <plugwash@raspbian.org>
Sat, 30 Nov 2019 15:26:20 +0000 (15:26 +0000)
committerPeter Michael Green <plugwash@raspbian.org>
Sat, 30 Nov 2019 15:26:20 +0000 (15:26 +0000)
  * Link with libatomic on armhf too.

[dgit import unpatched juce 5.4.4~repack0-3+rpi1]

49 files changed:
1  2 
debian/NEWS
debian/Projucer.desktop
debian/README.Debian
debian/README.libjuce-doc
debian/README.source
debian/TODO.Debian
debian/artifacts/.empty
debian/changelog
debian/control
debian/copyright
debian/copyright_hints
debian/extra/juce_audio_plugin_client/LV2/includes/lv2_external_ui.h
debian/extra/juce_audio_plugin_client/LV2/includes/lv2_programs.h
debian/extra/juce_audio_plugin_client/LV2/juce_LV2_Wrapper.cpp
debian/extra/juce_audio_plugin_client/juce_audio_plugin_client_LV2.cpp
debian/extra/juce_audio_processors/format_types/juce_VSTInterface.h
debian/extra/lv2-ttl-generator/GNUmakefile
debian/extra/lv2-ttl-generator/generate-ttl.sh
debian/extra/lv2-ttl-generator/lv2_ttl_generator.c
debian/extra/lv2-ttl-generator/readme.txt
debian/gbp.conf
debian/gbp/postclone.sh
debian/juce-modules-source.doc
debian/juce-modules-source.install
debian/juce-tools.install
debian/juce-tools.manpages
debian/juce-tools.mime
debian/juce-tools.sharedmimeinfo
debian/libjuce-doc.doc-base
debian/libjuce-doc.install
debian/patches/LV2-audioprocessor.patch
debian/patches/debian_fixed-defines.patch
debian/patches/debian_gpl_variant.patch
debian/patches/debian_link_systemlibs.patch
debian/patches/debian_no-update-check.patch
debian/patches/debian_no-usagedata.patch
debian/patches/debian_python3.patch
debian/patches/debian_system_modules.patch
debian/patches/debian_unittests_globalpaths.patch
debian/patches/debian_vst.patch
debian/patches/jack-client-name.patch
debian/patches/series
debian/patches/spelling.patch
debian/rules
debian/scripts/Projucer-help2man
debian/source/format
debian/tests/control
debian/tests/juce-unit-tests
debian/watch

diff --cc debian/NEWS
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..56aceb7741e6dd84a83d53d5084a46e6ae844396
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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) <umlaeute@debian.org>  Thu, 09 Nov 2017 13:46:52 +0100
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2b2a87994765f96272d25b881f52f28acb298bee
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..94066309f6bc7b2b60fb5197fa8e8bd1ffd7acf8
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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 (= <<version>>)' to debian/control
++  (replace '<<version>>' 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=""
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bd2012e2d1d112ddd10236e1af7fbb66c52b8686
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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) <umlaeute@debian.org>  Sun, 11 Feb 2018 10:42:03 +0100
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..86a78e2fdddb9120407c87b46ca1d7076b76db09
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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 <<EOF
++    [clone]
++    postclone = ~/bin/gbphook-postclone
++    EOF
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  Mon, 1 Aug 2016 12:15:50 +0200
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..efc9c4bb0bb70b51ff6d2e294bab8d554048e7aa
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
new file mode 100644 (file)
--- /dev/null
--- /dev/null
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..728cf49e212f507437ebd513029f740d8786df52
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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 <plugwash@raspbian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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 <lamby@debian.org> for the last two
++  * Re-enabled LV2 support (Closes: #889969)
++    * Refreshed LV2 sources
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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 <pabs@debian.org> (Closes: 820653)
++  * Set BUILD_TIME from d/changelog
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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 <tobi@debian.org> (Closes: #819438)
++
++ -- IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  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) <umlaeute@debian.org>  Fri, 12 Feb 2016 07:46:59 +0100
diff --cc debian/control
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e7bf27f12f55fa32b35760a7057b6ebe03b673e6
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,109 @@@
++Source: juce
++Section: devel
++Priority: optional
++Maintainer: Debian Multimedia Maintainers <debian-multimedia@lists.debian.org>
++Uploaders:
++ IOhannes m zmölnig (Debian/GNU) <umlaeute@debian.org>,
++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.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..07be548b1dd3901217016ff0f22a6f8f48651337
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,842 @@@
++Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
++Upstream-Name: JUCE
++Upstream-Contact: <umlaeute@debian.org>
++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 <umlaeute@debian.org>
++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 <falkTX>
++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) <falktx@falktx.com>
++ 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 <http://www.gnu.org/licenses/>.
++
++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 <http://www.gnu.org/licenses/>.
++
++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. <http://fsf.org/>
++ 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.
++ .
++ <one line to give the program's name and a brief idea of what it does.>
++ Copyright (C) <year>  <name of author>
++ .
++ 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
++ <http://www.gnu.org/licenses/>.
++ .
++ 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 <http://www.gnu.org/licenses/>.
++
++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.
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1f0c8d40a5a7719a1246786f4c7b91d9d9cf5200
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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.</string>
++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
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..789cd3fff18401294b198cad2183a3f235169aa4
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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) <falktx@falktx.com>
++  or ask in #lad channel, FreeNode IRC network.
++*/
++
++/**
++   @file lv2_external_ui.h
++   C header for the LV2 External UI extension <http://kxstudio.sf.net/ns/lv2ext/external-ui>.
++*/
++
++#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 */
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..01e287718da9998feb33bfc519ee5e76de8a935c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,174 @@@
++/*
++  LV2 Programs Extension
++  Copyright 2012 Filipe Coelho <falktx@falktx.com>
++
++  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 <http://kxstudio.sf.net/ns/lv2ext/programs>.
++*/
++
++#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 */
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..1c1f6162b129f6c6af159d6842e14180fc0e2ecb
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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 <X11/Xlib.h>
++ #undef KeyPress
++#endif
++
++#include <fstream>
++#include <iostream>
++
++// LV2 includes..
++#include <lv2/lv2plug.in/ns/lv2core/lv2.h>
++#include <lv2/lv2plug.in/ns/ext/atom/atom.h>
++#include <lv2/lv2plug.in/ns/ext/atom/util.h>
++#include <lv2/lv2plug.in/ns/ext/buf-size/buf-size.h>
++#include <lv2/lv2plug.in/ns/ext/instance-access/instance-access.h>
++#include <lv2/lv2plug.in/ns/ext/midi/midi.h>
++#include <lv2/lv2plug.in/ns/ext/options/options.h>
++#include <lv2/lv2plug.in/ns/ext/port-props/port-props.h>
++#include <lv2/lv2plug.in/ns/ext/presets/presets.h>
++#include <lv2/lv2plug.in/ns/ext/state/state.h>
++#include <lv2/lv2plug.in/ns/ext/time/time.h>
++#include <lv2/lv2plug.in/ns/extensions/ui/ui.h>
++#include <lv2/lv2plug.in/ns/ext/urid/urid.h>
++#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<String> 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: <http://www.w3.org/2000/01/rdf-schema#> .\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 <presets.ttl> .\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: <http://usefulinc.com/ns/doap#> .\n";
++    text += "@prefix foaf: <http://xmlns.com/foaf/0.1/> .\n";
++    text += "@prefix lv2:  <" LV2_CORE_PREFIX "> .\n";
++    text += "@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .\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:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .\n";
++    text += "@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .\n";
++    text += "@prefix state: <" LV2_STATE_PREFIX "> .\n";
++    text += "@prefix xsd:   <http://www.w3.org/2001/XMLSchema#> .\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<AudioProcessor> 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<int> getLastPos()
++    {
++        return lastPos;
++    }
++
++    bool isClosed()
++    {
++        return closed;
++    }
++
++    void reset()
++    {
++        closed = false;
++    }
++
++private:
++    bool closed;
++    Point<int> 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<int> 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<AudioProcessorEditor> 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<JuceLv2ExternalUIWrapper> externalUI;
++    const LV2_External_UI_Host* externalUIHost;
++    Point<int> lastExternalUIPos;
++
++    ScopedPointer<JuceLv2ParentContainer> 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<const char*>(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<SharedMessageThread> msgThread;
++#else
++    SharedResourcePointer<ScopedJuceInitialiser_GUI> sharedJuceGUI;
++#endif
++
++    ScopedPointer<AudioProcessor> filter;
++#if ! JUCE_AUDIOPROCESSOR_NO_GUI
++    ScopedPointer<JuceLv2UIWrapper> ui;
++#endif
++    HeapBlock<float*> 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<float*> portControls;
++
++    uint32 bufferSize;
++    double sampleRate;
++    Array<float> 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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..dc507e1257a05b210758846dc1921ccb19ece758
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,27 @@@
++/*\r
++  ==============================================================================\r
++\r
++   This file is part of the JUCE library.\r
++   Copyright (c) 2017 - ROLI Ltd.\r
++\r
++   JUCE is an open source library subject to commercial or open-source\r
++   licensing.\r
++\r
++   By using JUCE, you agree to the terms of both the JUCE 5 End-User License\r
++   Agreement and JUCE 5 Privacy Policy (both updated and effective as of the\r
++   27th April 2017).\r
++\r
++   End User License Agreement: www.juce.com/juce-5-licence\r
++   Privacy Policy: www.juce.com/juce-5-privacy-policy\r
++\r
++   Or: You may also use this code under the terms of the GPL v3 (see\r
++   www.gnu.org/licenses).\r
++\r
++   JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER\r
++   EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE\r
++   DISCLAIMED.\r
++\r
++  ==============================================================================\r
++*/\r
++\r
++#include "LV2/juce_LV2_Wrapper.cpp"\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..f531e6382f98239f4c3cf9736880b6ab71886aac
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..024f2a1f25b7d51587f17c22559d1d18e6de92d9
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..d5ef597e262fe2a12e12de3ccd10102da25e0b4a
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -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}" \;
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..bd19f416d08e0ab13ab7a8d97e532c3ad5e2f00a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,81 @@@
++/*
++ * JUCE LV2 *.ttl generator
++ */
++
++#include <stdio.h>
++#include <string.h>
++
++#ifdef _WIN32
++ #include <windows.h>
++ #define TTL_GENERATOR_WINDOWS
++#else
++ #include <dlfcn.h>
++#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;
++}
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..0bd3ab5e5de7aedc3fe7efaf74babcd6cebe7b78
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..cd3fa3d5368b971599c92276d7629544dc734114
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,6 @@@
++# Configuration file for git-buildpackage and friends
++
++[DEFAULT]
++pristine-tar = True
++sign-tags = True
++compression = xz
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..5790ec6df6a4448d15f02b26febd0c55bcb94ed1
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -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/")
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ab3c3307e5a2bfa6797ca3d285f7520dedc37b2a
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++BREAKING-CHANGES.txt
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4899195bae0a5360269ce8d0bc866328a218cb9f
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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/
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..055151eb4b180a591b33a1ecb73c9dca1f6aa094
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..08dbe247dea8beac3df8d903f49624e9b3d26368
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++debian/artifacts/Projucer.1
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..643f3da6fcb6fef06b2092c201c66adfad19c87c
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++application/x-juce; Projucer '%s'; edit=Projucer '%s'; test=test "$DISPLAY" != ""; priority=2
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..043dfa0b51be283f06bda2abc2793be5b11651a3
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,8 @@@
++<?xml version="1.0" encoding="UTF-8"?>
++<mime-info xmlns="http://www.freedesktop.org/standards/shared-mime-info">
++  <mime-type type="application/x-juce">
++    <sub-class-of type="text/xml"/>
++    <comment>JUCE project</comment>
++    <glob pattern="*.jucer"/>
++  </mime-type>
++</mime-info>
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6c987e320bcc5652125129bea485b7ef627b35ff
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
++
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..49e157f261fb751d105860d8d1c5e87405ede1e6
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++doxygen/doc/* /usr/share/doc/juce-modules-source/apiref
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..e8cf7b344ce2caa46fa989c412a488b4f6577709
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,73 @@@
++From: Filipe Coelho <falkTX>
++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 @@
++     */\r
++     virtual void setNonRealtime (bool isNonRealtime) noexcept;\r
++ \r
+++   #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
++     //==============================================================================\r
++     /** Creates the processor's GUI.\r
++ \r
++@@ -973,6 +974,7 @@
++         This may call createEditor() internally to create the component.\r
++     */\r
++     AudioProcessorEditor* createEditorIfNeeded();\r
+++   #endif\r
++ \r
++     //==============================================================================\r
++     /** Returns the default number of steps for a parameter.\r
++@@ -1108,6 +1110,11 @@
++     virtual void processorLayoutsChanged();\r
++ \r
++     //==============================================================================\r
+++    /** LV2 specific calls, saving/restore as string. */\r
+++    virtual String getStateInformationString () { return String(); }\r
+++    virtual void setStateInformationString (const String&) {}\r
+++\r
+++    //==============================================================================\r
++     /** Adds a listener that will be called when an aspect of this processor changes. */\r
++     virtual void addListener (AudioProcessorListener* newListener);\r
++ \r
++@@ -1177,9 +1184,11 @@
++ \r
++     virtual CurveData getResponseCurve (CurveData::Type /*curveType*/) const      { return {}; }\r
++ \r
+++   #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
++     //==============================================================================\r
++     /** Not for public use - this is called before deleting an editor component. */\r
++     void editorBeingDeleted (AudioProcessorEditor*) noexcept;\r
+++   #endif\r
++ \r
++     /** Flags to indicate the type of plugin context in which a processor is being used. */\r
++     enum WrapperType\r
++@@ -1193,6 +1202,7 @@
++         wrapperType_AAX,\r
++         wrapperType_Standalone,\r
++         wrapperType_Unity\r
+++        , wrapperType_LV2\r
++     };\r
++ \r
++     /** When loaded by a plugin wrapper, this flag will be set to indicate the type\r
++@@ -1453,7 +1463,9 @@
++ \r
++     //==============================================================================\r
++     Array<AudioProcessorListener*> listeners;\r
+++   #if ! JUCE_AUDIOPROCESSOR_NO_GUI\r
++     Component::SafePointer<AudioProcessorEditor> activeEditor;\r
+++   #endif\r
++     double currentSampleRate = 0;\r
++     int blockSize = 0, latencySamples = 0;\r
++     bool suspended = false, nonRealtime = false;\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..7486e104fb3a6158ed8677d358ed1e8fa69cd6ec
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,102 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 @@
++   ==============================================================================\r
++ */\r
++ \r
+++/* Debian specific overrides */\r
+++#if JucePlugin_Build_LV2 && ! defined (JucePlugin_LV2URI)\r
+++# warning JUCE/Debian using default LV2URI\r
+++# define JucePlugin_LV2URI               JucePlugin_Name\r
+++#endif\r
+++\r
+++#if JucePlugin_Build_AU\r
+++# warning JUCE/Debian disabled AU support\r
+++# undef JucePlugin_Build_AU\r
+++# define JucePlugin_Build_AU 0\r
+++#endif\r
+++\r
+++#if JucePlugin_Build_RTAS\r
+++# warning JUCE/Debian disabled RTAS support\r
+++# undef JucePlugin_Build_RTAS\r
+++# define JucePlugin_Build_RTAS 0\r
+++#endif\r
+++\r
+++#if JucePlugin_Build_AAX\r
+++# warning JUCE/Debian disabled AAX support\r
+++# undef JucePlugin_Build_AAX\r
+++# define JucePlugin_Build_AAX 0\r
+++#endif\r
+++\r
++ // The following checks should cause a compile error if you've forgotten to\r
++ // define all your plugin settings properly..\r
++ \r
++@@ -40,6 +64,7 @@
++ #endif\r
++ #define JUCE_CHECKSETTINGMACROS_H\r
++ \r
+++\r
++ #ifndef JucePlugin_IsSynth\r
++  #error "You need to define the JucePlugin_IsSynth value!"\r
++ #endif\r
++--- juce.orig/modules/juce_core/juce_core.h
+++++ juce/modules/juce_core/juce_core.h
++@@ -64,6 +64,36 @@
++ \r
++ #include "system/juce_TargetPlatform.h"\r
++ \r
+++/** Debian specific constants\r
+++  - Debian, we don't use embedded libraries\r
+++*/\r
+++#ifdef JUCE_INCLUDE_ZLIB_CODE\r
+++# undef JUCE_INCLUDE_ZLIB_CODE\r
+++#endif\r
+++#define JUCE_INCLUDE_ZLIB_CODE 0\r
+++\r
+++#ifdef JUCE_INCLUDE_FLAC_CODE\r
+++# undef JUCE_INCLUDE_FLAC_CODE\r
+++#endif\r
+++#define JUCE_INCLUDE_FLAC_CODE 0\r
+++\r
+++#ifdef JUCE_INCLUDE_OGGVORBIS_CODE\r
+++# undef JUCE_INCLUDE_OGGVORBIS_CODE\r
+++#endif\r
+++#define JUCE_INCLUDE_OGGVORBIS_CODE 0\r
+++\r
+++#ifdef JUCE_INCLUDE_JPEGLIB_CODE\r
+++# undef JUCE_INCLUDE_JPEGLIB_CODE\r
+++#endif\r
+++#define JUCE_INCLUDE_JPEGLIB_CODE 0\r
+++\r
+++#ifdef JUCE_INCLUDE_PNGLIB_CODE\r
+++# undef JUCE_INCLUDE_PNGLIB_CODE\r
+++#endif\r
+++#define JUCE_INCLUDE_PNGLIB_CODE 0\r
+++/** Debian specifics END\r
+++*/\r
+++\r
++ //==============================================================================\r
++ /** Config: JUCE_FORCE_DEBUG\r
++ \r
++@@ -123,7 +153,7 @@
++     specify the path where your zlib headers live.\r
++ */\r
++ #ifndef JUCE_INCLUDE_ZLIB_CODE\r
++- #define JUCE_INCLUDE_ZLIB_CODE 1\r
+++ #define JUCE_INCLUDE_ZLIB_CODE 0\r
++ #endif\r
++ \r
++ #ifndef JUCE_ZLIB_INCLUDE_PATH\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..22499ffedb95bb7aaa605d05345747345ead3f30
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,20 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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\r
++ \r
++ #ifndef JUCER_ENABLE_GPL_MODE\r
++- #define JUCER_ENABLE_GPL_MODE 0\r
+++ #define JUCER_ENABLE_GPL_MODE 1\r
++ #endif\r
++ \r
++ // END SECTION A\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..4be7166e2651d8f66992d88f8716933596ffd0ef
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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())\r
++             packages.add ("libcurl");\r
++ \r
+++        // on Debian, a number of 3rd-party libs have been stripped away,\r
+++        // so we need to link to the system libraries\r
+++        if (project.getEnabledModules().isModuleEnabled ("juce_core"))\r
+++        {\r
+++            packages.add ("zlib");\r
+++        }\r
+++        if (project.getEnabledModules().isModuleEnabled ("juce_graphics"))\r
+++        {\r
+++            packages.add ("libjpeg");\r
+++            packages.add ("libpng");\r
+++        }\r
+++        if (project.getEnabledModules().isModuleEnabled ("juce_audio_formats"))\r
+++        {\r
+++            if(project.isConfigFlagEnabled ("JUCE_USE_FLAC", true))\r
+++            {\r
+++                packages.add ("flac");\r
+++            }\r
+++\r
+++            if(project.isConfigFlagEnabled ("JUCE_USE_OGGVORBIS", true))\r
+++            {\r
+++                packages.add ("vorbis");\r
+++                packages.add ("vorbisfile");\r
+++                packages.add ("vorbisenc");\r
+++                packages.add ("ogg");\r
+++            }\r
+++        }\r
+++        if (project.getEnabledModules().isModuleEnabled ("juce_audio_devices"))\r
+++        {\r
+++            if(project.isConfigFlagEnabled ("JUCE_JACK", true))\r
+++            {\r
+++                packages.add ("jack");\r
+++            }\r
+++        }\r
++         packages.removeDuplicates (false);\r
++ \r
++         return packages;\r
++@@ -563,6 +596,9 @@
++         StringArray result (linuxLibs);\r
++ \r
++         auto libraries = StringArray::fromTokens (getExternalLibrariesString(), ";", "\"'");\r
+++#ifdef DEBIAN_JUCERPROJECT_LIBS\r
+++        libraries.addArray(StringArray::fromTokens (DEBIAN_JUCERPROJECT_LIBS, ";", "\"'"));\r
+++#endif\r
++         libraries.removeEmptyStrings();\r
++ \r
++         for (auto& lib : libraries)\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3cf2357222bb5bcc1fa52539b0886e61d65fed0e
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,21 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 @@
++ \r
++ void LatestVersionCheckerAndUpdater::checkForNewVersion (bool showAlerts)\r
++ {\r
+++    return; // DONT check for new versions on Debian\r
++     if (! isThreadRunning())\r
++     {\r
++         showAlertWindows = showAlerts;\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..c3ae4901bee47b5e8a6c635faf576b5320ca4976
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,26 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 @@
++ \r
++             auto* controller = ProjucerApplication::getApp().licenseController.get();\r
++ \r
++-            if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::disabled)\r
++-                shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification);\r
++-            else\r
+++            if (controller != nullptr && controller->getState().applicationUsageDataState == LicenseState::ApplicationUsageData::enabled)\r
++                 shareApplicationUsageDataToggle->setToggleState (true, dontSendNotification);\r
+++            else\r
+++                shareApplicationUsageDataToggle->setToggleState (false, dontSendNotification);\r
++ \r
++             addAndMakeVisible (shareApplicationUsageDataLabel);\r
++             shareApplicationUsageDataLabel.setFont (Font (14.0f));\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..3136281ddf362de262bfac75f10126a9392edaf5
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,21 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..38bfb38281589de21f62e7987bfc076314bef1b1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,22 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 @@
++     }\r
++     else if (key == Ids::defaultJuceModulePath)\r
++     {\r
++-        return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "~/JUCE/modules");\r
+++        return (os == TargetOS::windows ? "C:\\JUCE\\modules" : "/usr/share/juce/modules");\r
++     }\r
++     else if (key == Ids::defaultUserModulePath)\r
++     {\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..fb6094d2a74b5c31a39786e3ec6717d9eea621de
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,57 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 @@
++     </VS2019>\r
++   </EXPORTFORMATS>\r
++   <MODULES>\r
++-    <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
++-    <MODULES id="juce_audio_basics" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_audio_devices" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_audio_formats" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_audio_processors" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
++-    <MODULE id="juce_blocks_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
++-    <MODULES id="juce_core" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_cryptography" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_data_structures" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="0"/>\r
++-    <MODULES id="juce_events" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_graphics" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_gui_basics" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_gui_extra" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_opengl" showAllCode="1" useLocalCopy="0"/>\r
++-    <MODULES id="juce_osc" showAllCode="1" useLocalCopy="0"/>\r
+++    <MODULE id="juce_analytics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_audio_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_audio_devices" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_audio_formats" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_audio_processors" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULE id="juce_audio_utils" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULE id="juce_blocks_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_core" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_cryptography" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_data_structures" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULE id="juce_dsp" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_events" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_graphics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_gui_basics" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_gui_extra" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_opengl" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
+++    <MODULES id="juce_osc" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++     <MODULE id="juce_product_unlocking" showAllCode="1" useLocalCopy="0"\r
++-            useGlobalPath="0"/>\r
++-    <MODULES id="juce_video" showAllCode="1" useLocalCopy="0"/>\r
+++            useGlobalPath="1"/>\r
+++    <MODULES id="juce_video" showAllCode="1" useLocalCopy="0" useGlobalPath="1"/>\r
++   </MODULES>\r
++   <JUCEOPTIONS JUCE_STRICT_REFCOUNTEDPOINTER="1"/>\r
++   <LIVE_SETTINGS>\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..2ff02c5eed7eef1d0b84cd5241d2f1532893545d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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\r
++ // vstsdk3610_11_06_2018_build_37 (or older) VST3 SDK or JUCE version 5.3.2. You\r
++ // also need a VST2 license from Steinberg to distribute VST2 plug-ins.\r
++-#include "pluginterfaces/vst2.x/aeffect.h"\r
++-#include "pluginterfaces/vst2.x/aeffectx.h"\r
+++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h"\r
++ }\r
++ \r
++ using namespace juce;\r
++@@ -124,7 +123,6 @@
++  #pragma pack (push, 8)\r
++ #endif\r
++ \r
++-#define JUCE_VSTINTERFACE_H_INCLUDED 1\r
++ \r
++ #include "../utility/juce_IncludeModuleHeaders.h"\r
++ #include "../utility/juce_FakeMouseMoveGenerator.h"\r
++--- 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\r
++ \r
++ #define VST_FORCE_DEPRECATED 0\r
++-#define JUCE_VSTINTERFACE_H_INCLUDED 1\r
++ \r
++ namespace Vst2\r
++ {\r
++@@ -58,8 +57,7 @@
++ // paths or use the "VST (Legacy) SDK Folder" field in the Projucer. The VST2\r
++ // SDK can be obtained from the vstsdk3610_11_06_2018_build_37 (or older) VST3\r
++ // SDK or JUCE version 5.3.2.\r
++-#include <pluginterfaces/vst2.x/aeffect.h>\r
++-#include <pluginterfaces/vst2.x/aeffectx.h>\r
+++#include "../../juce_audio_processors/format_types/juce_VSTInterface.h"\r
++ }\r
++ \r
++ #include "juce_VSTCommon.h"\r
++@@ -81,6 +79,9 @@
++ \r
++ #include "juce_VSTMidiEventList.h"\r
++ \r
+++#define resvd2 hostSpace2\r
+++#define nanoSeconds systemTimeNanoseconds\r
+++\r
++ #if JUCE_MINGW\r
++  #ifndef WM_APPCOMMAND\r
++   #define WM_APPCOMMAND 0x0319\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ab7c41649334a59265937d54b0593ddafa237ce1
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,28 @@@
++From: =?utf-8?q?IOhannes_m_zm=C3=B6lnig?= <umlaeute@debian.org>
++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 <JucePlugin_Name>.
++
++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 @@
++ \r
++ //==============================================================================\r
++ #ifndef JUCE_JACK_CLIENT_NAME\r
++- #define JUCE_JACK_CLIENT_NAME "JUCEJack"\r
+++ #ifdef JucePlugin_Name\r
+++ # define JUCE_JACK_CLIENT_NAME JucePlugin_Name\r
+++ #else\r
+++ # define JUCE_JACK_CLIENT_NAME "JUCEJack"\r
+++ #endif\r
++ #endif\r
++ \r
++ struct JackPortIterator\r
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..78e70087917fa0c68c25939d8c5deeeef9a6399d
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..ba5f005c3579516fed0464f459d8e01ffa656cc4
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -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 @@
++ \r
++         props.add (new TextPropertyComponent (subprojectsValue, "Xcode Subprojects", 8192, true),\r
++                    "Paths to Xcode projects that should be added to the build (one per line). "\r
++-                   "The names of the required build products can be specified after a colon, comma seperated, "\r
+++                   "The names of the required build products can be specified after a colon, comma separated, "\r
++                    "e.g. \"path/to/MySubProject.xcodeproj: MySubProject, OtherTarget\". "\r
++                    "If no build products are specified, all build products associated with a subproject will be added.");\r
++ \r
diff --cc debian/rules
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..79422bef48390edbfcf859704fbf7b22fda0d54e
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,87 @@@
++#!/usr/bin/make -f
++# -*- mode: makefile; coding: utf-8 -*-
++# Copyright © 2015 IOhannes m zmölnig <umlaeute@debian.org>
++# 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
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..6e955d040ebc1c495c60793f38188530c964acf9
new file mode 100755 (executable)
--- /dev/null
--- /dev/null
@@@ -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 <<EOL
++Usage: Projucer [--help] [options]
++
++The Projucer is JUCE's own software project management workbench.
++It provides a Graphical User Interface to create your own JUCE based projects,
++and allows you to create various build systems (Makefiles, XCode projects,
++Visual Studio Projects,...).
++
++Generic Options:
++
++ --help
++    get a list of available cmdline arguments
++EOL
++    ;;
++  -v|-V|--version)
++    #${PROJUCER} -h
++cat <<EOL
++JUCE
++Copyright © ROLI Ltd.
++EOL
++    ;;
++  *)
++    ;;
++esac
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..163aaf8d82b6c54f23c45f32895dbdfdcc27b047
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,1 @@@
++3.0 (quilt)
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..424f4c1a64e52cff29769967e879a0348cf93a43
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,6 @@@
++Tests: juce-unit-tests
++Depends: @, @builddeps@,
++ libjack-dev,
++ libogg-dev,
++ xvfb, xauth,
++Restrictions: allow-stderr
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..efc0d6bc9a815409773a28a292168a8afb092b15
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,17 @@@
++#!/bin/sh
++set -e
++
++
++dpkg-source --before-build `pwd`
++PCDEPS="jack flac vorbis vorbisenc vorbisfile ogg libjpeg libpng zlib"
++
++# resave the project with the system module-paths
++xvfb-run -a Projucer --resave extras/UnitTestRunner/UnitTestRunner.jucer
++# build the UnitTests
++make -C extras/UnitTestRunner/Builds/LinuxMakefile \
++      CFLAGS="$(pkg-config --cflags ${PCDEPS})" \
++      LDFLAGS="$(pkg-config --libs ${PCDEPS})" \
++      CONFIG=Release \
++      V=1
++# run the UnitTests
++./extras/UnitTestRunner/Builds/LinuxMakefile/build/UnitTestRunner
diff --cc debian/watch
index 0000000000000000000000000000000000000000,0000000000000000000000000000000000000000..b04c177a7b72644680abe79d2c406ffdb608eb76
new file mode 100644 (file)
--- /dev/null
--- /dev/null
@@@ -1,0 -1,0 +1,4 @@@
++# Run the "uscan" command to check for upstream updates and more.
++version=3
++opts=dversionmangle=s/[~+](dfsg|repack|ds)(\.?[0-9]*)?$// \
++  https://github.com/julianstorer/JUCE/releases .*/v?(\d\S*)\.tar\.gz