JUCE for Debian =============== upstream's preferred form of usage of JUCE is to include a verbatim copy of all used JUCE modules in your application. This is made explicit in the 'Projucer', JUCE's own software project management workbench, that will copy (or symlink, or include otherwise) the modules' source code into your project. # Projucer for Debian Installing the following packages will give you the 'Projucer' as Debian packages while keeping your embedded-module-code workflow: - juce-tools (contains the Projucer) - juce-modules-source (contains the source-code for the JUCE modules) The 'Projucer' as shipped with Debian has the following modification regarding the once shipped by upstream: # Debian packages that depend on JUCE This is a quick guideline for packaging upstream software that uses JUCE for Debian. For further implementation details check out the 'iem-plugin-suite' package. - Build-Depend on 'juce-modules-source' - Add 'Built-Using: juce-modules-source (= <>)' to debian/control The simplest way to do this is to build-deped on 'dh-sequence-builtusing' and then add 'Built-Using: ${dh-builtusing:juce-modules-source}' and/or 'Static-Built-Using: ${dh-builtusing:juce-modules-source}' to d/control. When targetting older Debian releases (pre-trixie), you can manually perform this with something like the following in debian/rules: 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 -- -Vdh-builtusing:juce-modules-source="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 - libwebp - libflac - libvorbis libvorbisenc libvorbisfile - libogg - libopus libopusenc libopusfile - zlib E.g. using something like: make LDFLAGS="$(pkg-config --libs libpng libjpeg libwebp flac vorbis vorbisfile vorbisenc opus opusfile libopusenc 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. The provided CMake snippets also take care of adding these libraries unconditionally to the 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=""