From 0a4b2ae3b606fbd4760dd0432d8e2deeec2970ea Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 5 Jul 2016 16:27:51 +0100 Subject: [PATCH 001/172] Return parent row number if any of the tree view item's paraents are closed --- modules/juce_gui_basics/widgets/juce_TreeView.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/juce_gui_basics/widgets/juce_TreeView.cpp b/modules/juce_gui_basics/widgets/juce_TreeView.cpp index 973808274f..e2ab3af641 100644 --- a/modules/juce_gui_basics/widgets/juce_TreeView.cpp +++ b/modules/juce_gui_basics/widgets/juce_TreeView.cpp @@ -1755,6 +1755,9 @@ int TreeViewItem::getRowNumberInTree() const noexcept { if (parentItem != nullptr && ownerView != nullptr) { + if (! parentItem->isOpen()) + return parentItem->getRowNumberInTree(); + int n = 1 + parentItem->getRowNumberInTree(); int ourIndex = parentItem->subItems.indexOf (this); From ed67e40b8d084cdc31c68c273794d52564b37252 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 5 Jul 2016 16:43:49 +0100 Subject: [PATCH 002/172] Added a customisable callback object to PopupMenu --- .../juce_gui_basics/menus/juce_PopupMenu.cpp | 20 +++++++++++++++- .../juce_gui_basics/menus/juce_PopupMenu.h | 24 +++++++++++++++++++ 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp index 004bfff33f..ed08a09f54 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.cpp +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.cpp @@ -321,13 +321,25 @@ public: *managerOfChosenCommand = item->commandManager; } - exitModalState (item != nullptr ? item->itemID : 0); + exitModalState (getResultItemID (item)); if (makeInvisible && (deletionChecker != nullptr)) setVisible (false); } } + static int getResultItemID (const PopupMenu::Item* item) + { + if (item == nullptr) + return 0; + + if (CustomCallback* cc = item->customCallback) + if (! cc->menuItemTriggered()) + return 0; + + return item->itemID; + } + void dismissMenu (const PopupMenu::Item* const item) { if (parent != nullptr) @@ -1279,6 +1291,7 @@ PopupMenu::Item::Item (const Item& other) subMenu (createCopyIfNotNull (other.subMenu.get())), image (other.image != nullptr ? other.image->createCopy() : nullptr), customComponent (other.customComponent), + customCallback (other.customCallback), commandManager (other.commandManager), shortcutKeyDescription (other.shortcutKeyDescription), colour (other.colour), @@ -1296,6 +1309,7 @@ PopupMenu::Item& PopupMenu::Item::operator= (const Item& other) subMenu = createCopyIfNotNull (other.subMenu.get()); image = (other.image != nullptr ? other.image->createCopy() : nullptr); customComponent = other.customComponent; + customCallback = other.customCallback; commandManager = other.commandManager; shortcutKeyDescription = other.shortcutKeyDescription; colour = other.colour; @@ -1777,6 +1791,10 @@ void PopupMenu::CustomComponent::triggerMenuItem() } } +//============================================================================== +PopupMenu::CustomCallback::CustomCallback() {} +PopupMenu::CustomCallback::~CustomCallback() {} + //============================================================================== PopupMenu::MenuItemIterator::MenuItemIterator (const PopupMenu& m) : menu (m), index (0) {} PopupMenu::MenuItemIterator::~MenuItemIterator() {} diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index 0a7f2778a6..af7acea69d 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -81,6 +81,7 @@ private: public: class CustomComponent; + class CustomCallback; //============================================================================== /** Creates an empty popup menu. */ @@ -134,6 +135,9 @@ public: /** A custom component for the item to display, or nullptr if there isn't one. */ ReferenceCountedObjectPtr customComponent; + /** A custom callback for the item to use, or nullptr if there isn't one. */ + ReferenceCountedObjectPtr customCallback; + /** A command manager to use to automatically invoke the command, or nullptr if none is specified. */ ApplicationCommandManager* commandManager; @@ -625,6 +629,26 @@ public: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomComponent) }; + //============================================================================== + /** A user-defined component that can be used as an item in a popup menu. + @see PopupMenu::addCustomItem + */ + class JUCE_API CustomCallback : public SingleThreadedReferenceCountedObject + { + public: + CustomCallback(); + ~CustomCallback(); + + /** Callback to indicate this object has been triggered. + @returns true if the itemID should be sent to the existModalState method, false + if it should send 0, indicating no further action should be taken + */ + virtual bool menuItemTriggered() = 0; + + private: + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (CustomCallback) + }; + //============================================================================== /** This abstract base class is implemented by LookAndFeel classes to provide menu drawing functionality. From a700774d6f1ad7cbaef919f6e088046e32653f90 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 5 Jul 2016 16:48:51 +0100 Subject: [PATCH 003/172] Tidied up a comment --- modules/juce_gui_basics/menus/juce_PopupMenu.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/juce_gui_basics/menus/juce_PopupMenu.h b/modules/juce_gui_basics/menus/juce_PopupMenu.h index af7acea69d..6309250a2d 100644 --- a/modules/juce_gui_basics/menus/juce_PopupMenu.h +++ b/modules/juce_gui_basics/menus/juce_PopupMenu.h @@ -630,8 +630,8 @@ public: }; //============================================================================== - /** A user-defined component that can be used as an item in a popup menu. - @see PopupMenu::addCustomItem + /** A user-defined callback that can be used for specific items in a popup menu. + @see PopupMenu::Item::customCallback */ class JUCE_API CustomCallback : public SingleThreadedReferenceCountedObject { @@ -639,9 +639,9 @@ public: CustomCallback(); ~CustomCallback(); - /** Callback to indicate this object has been triggered. - @returns true if the itemID should be sent to the existModalState method, false - if it should send 0, indicating no further action should be taken + /** Callback to indicate this item has been triggered. + @returns true if the itemID should be sent to the exitModalState method, or + false if it should send 0, indicating no further action should be taken */ virtual bool menuItemTriggered() = 0; From 01c73ff0a633f5de9c61ec8a7186fa10de2c934d Mon Sep 17 00:00:00 2001 From: jules Date: Wed, 6 Jul 2016 12:36:56 +0100 Subject: [PATCH 004/172] Optimisation for look and feel drawing of zero-size title bars --- modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp index 718496c699..ba5533eb52 100644 --- a/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp +++ b/modules/juce_gui_basics/lookandfeel/juce_LookAndFeel_V2.cpp @@ -1726,6 +1726,9 @@ void LookAndFeel_V2::drawDocumentWindowTitleBar (DocumentWindow& window, Graphic int w, int h, int titleSpaceX, int titleSpaceW, const Image* icon, bool drawTitleTextOnLeft) { + if (w * h == 0) + return; + const bool isActive = window.isActiveWindow(); g.setGradientFill (ColourGradient (window.getBackgroundColour(), From c552872fd6242be8f04b8d3d432b7eb5eb3a3857 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 09:47:08 +0100 Subject: [PATCH 005/172] Never define JUCE_SUPPORT_CARBON on iOS --- modules/juce_audio_processors/juce_audio_processors.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_audio_processors/juce_audio_processors.h b/modules/juce_audio_processors/juce_audio_processors.h index 3d72d4b0fe..3f332da8bf 100644 --- a/modules/juce_audio_processors/juce_audio_processors.h +++ b/modules/juce_audio_processors/juce_audio_processors.h @@ -89,7 +89,7 @@ // #error "You need to set either the JUCE_PLUGINHOST_AU and/or JUCE_PLUGINHOST_VST and/or JUCE_PLUGINHOST_VST3 flags if you're using this module!" #endif -#if ! (defined (JUCE_SUPPORT_CARBON) || JUCE_64BIT) +#if ! (defined (JUCE_SUPPORT_CARBON) || JUCE_64BIT || JUCE_IOS) #define JUCE_SUPPORT_CARBON 1 #endif From f83554c966967f59d14038ca99194c5c53fc61fa Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 09:47:43 +0100 Subject: [PATCH 006/172] Add a User-Agent http header to curl requests --- modules/juce_core/native/juce_curl_Network.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/modules/juce_core/native/juce_curl_Network.cpp b/modules/juce_core/native/juce_curl_Network.cpp index 5d6a2415dc..e9f884869e 100644 --- a/modules/juce_core/native/juce_curl_Network.cpp +++ b/modules/juce_core/native/juce_curl_Network.cpp @@ -133,10 +133,16 @@ private: const int maxRedirects, const String& headers, bool isPost, const String& httpRequest, size_t postSize) { + curl_version_info_data* data = curl_version_info (CURLVERSION_NOW); + jassert (data != nullptr); + + String userAgent = String ("curl/") + data->version; + if (curl_easy_setopt (curl, CURLOPT_URL, address.toRawUTF8()) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_WRITEDATA, this) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, StaticCurlWrite) == CURLE_OK - && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast (maxRedirects)) == CURLE_OK) + && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast (maxRedirects)) == CURLE_OK + && curl_easy_setopt (curl, CURLOPT_USERAGENT, userAgent.toRawUTF8()) == CURLE_OK) { if (isPost) { From c9aca28d00b8193e0cf6c852c9eac180f113c5c4 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 10:37:58 +0100 Subject: [PATCH 007/172] Add pkg-config support for linux --- .../Builds/Linux/Makefile | 182 ++++--- examples/Demo/Builds/Linux/Makefile | 510 +++++++++--------- examples/HelloWorld/Builds/Linux/Makefile | 126 +++-- .../MPETest/Builds/LinuxMakefile/Makefile | 182 ++++--- .../MidiTest/Builds/LinuxMakefile/Makefile | 166 +++--- .../Builds/LinuxMakefile/Makefile | 190 ++++--- .../OSCMonitor/Builds/LinuxMakefile/Makefile | 182 ++++--- .../OSCReceiver/Builds/LinuxMakefile/Makefile | 134 ++--- .../OSCSender/Builds/LinuxMakefile/Makefile | 118 ++-- .../Surround/Builds/LinuxMakefile/Makefile | 190 ++++--- .../audio plugin demo/Builds/Linux/Makefile | 182 ++++--- .../audio plugin host/Builds/Linux/Makefile | 214 ++++---- .../Builds/LinuxMakefile/Makefile | 158 +++--- extras/Projucer/Builds/LinuxMakefile/Makefile | 502 ++++++++--------- extras/Projucer/Projucer.jucer | 9 +- .../Project Saving/jucer_ProjectExport_Make.h | 128 ++++- .../Project Saving/jucer_ProjectExporter.cpp | 2 +- .../Project Saving/jucer_ProjectExporter.h | 2 +- .../Project Saving/jucer_ProjectSaver.h | 5 +- .../Projucer/Source/Project/jucer_Module.cpp | 1 + extras/Projucer/Source/Project/jucer_Module.h | 1 + .../Projucer/Source/Project/jucer_Project.h | 3 +- .../Projucer/Source/Utility/jucer_PresetIDs.h | 1 + .../Builds/LinuxMakefile/Makefile | 182 ++++--- extras/binarybuilder/Builds/Linux/Makefile | 78 +-- modules/JUCE Module Format.txt | 4 +- .../juce_audio_devices/juce_audio_devices.h | 2 +- modules/juce_core/juce_core.h | 3 +- modules/juce_events/juce_events.h | 2 +- modules/juce_graphics/juce_graphics.h | 2 +- modules/juce_gui_basics/juce_gui_basics.h | 2 +- 31 files changed, 1869 insertions(+), 1594 deletions(-) diff --git a/examples/BouncingBallWavetableDemo/Builds/Linux/Makefile b/examples/BouncingBallWavetableDemo/Builds/Linux/Makefile index d0ea1f4445..5a4a7c51ff 100644 --- a/examples/BouncingBallWavetableDemo/Builds/Linux/Makefile +++ b/examples/BouncingBallWavetableDemo/Builds/Linux/Makefile @@ -4,157 +4,169 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := WavetableBouncingEditor - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := WavetableBouncingEditor - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/MainComponent_a6ffb4a5.o \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking BouncingBallWavetableDemo - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning BouncingBallWavetableDemo @$(CLEANCMD) strip: @echo Stripping BouncingBallWavetableDemo - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MainComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/Demo/Builds/Linux/Makefile b/examples/Demo/Builds/Linux/Makefile index 8f73ad3b58..3876b63560 100644 --- a/examples/Demo/Builds/Linux/Makefile +++ b/examples/Demo/Builds/Linux/Makefile @@ -4,403 +4,415 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := JuceDemo - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=3.0.0 -DJUCE_APP_VERSION_HEX=0x30000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := JuceDemo - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/MainWindow_499ac812.o \ - $(OBJDIR)/IntroScreen_73347059.o \ - $(OBJDIR)/AnimationDemo_9fc7e4e9.o \ - $(OBJDIR)/AudioLatencyDemo_78d49233.o \ - $(OBJDIR)/AudioPlaybackDemo_ea12adf6.o \ - $(OBJDIR)/AudioRecordingDemo_435914e6.o \ - $(OBJDIR)/AudioSettingsDemo_6d710bfe.o \ - $(OBJDIR)/AudioSynthesiserDemo_1b3666f6.o \ - $(OBJDIR)/Box2DDemo_51053c42.o \ - $(OBJDIR)/CameraDemo_a10f7e50.o \ - $(OBJDIR)/ChildProcessDemo_2c2b949e.o \ - $(OBJDIR)/CodeEditorDemo_d5c17a65.o \ - $(OBJDIR)/ComponentTransformsDemo_377f7889.o \ - $(OBJDIR)/CryptographyDemo_232d46d7.o \ - $(OBJDIR)/DialogsDemo_19d585d0.o \ - $(OBJDIR)/FontsDemo_6da1e5e9.o \ - $(OBJDIR)/GraphicsDemo_85142ef6.o \ - $(OBJDIR)/ImagesDemo_ecf13aa3.o \ - $(OBJDIR)/JavaScript_d6e42eb5.o \ - $(OBJDIR)/KeyMappingsDemo_cf05c709.o \ - $(OBJDIR)/LiveConstantDemo_e3b18a9b.o \ - $(OBJDIR)/LookAndFeelDemo_25c558a3.o \ - $(OBJDIR)/MDIDemo_c476c2d7.o \ - $(OBJDIR)/MidiDemo_75ebc30c.o \ - $(OBJDIR)/MultithreadingDemo_ff566eaa.o \ - $(OBJDIR)/MultiTouch_595f3a2e.o \ - $(OBJDIR)/NetworkingDemo_fbd1b19f.o \ - $(OBJDIR)/OpenGLDemo_fdac55da.o \ - $(OBJDIR)/OpenGLDemo2D_48eeadec.o \ - $(OBJDIR)/PropertiesDemo_8ff1a8de.o \ - $(OBJDIR)/SystemInfoDemo_984acd28.o \ - $(OBJDIR)/TimersAndEventsDemo_f2656547.o \ - $(OBJDIR)/UnitTestsDemo_5c21762.o \ - $(OBJDIR)/ValueTreesDemo_9657d84f.o \ - $(OBJDIR)/VideoDemo_b55a1560.o \ - $(OBJDIR)/WebBrowserDemo_3df2dbdf.o \ - $(OBJDIR)/WidgetsDemo_fb0454.o \ - $(OBJDIR)/WindowsDemo_e8cfa428.o \ - $(OBJDIR)/XMLandJSONDemo_5bc88df3.o \ - $(OBJDIR)/BinaryData_ce4232d4.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_box2d_95719d14.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/MainWindow_499ac812.o \ + $(JUCE_OBJDIR)/IntroScreen_73347059.o \ + $(JUCE_OBJDIR)/AnimationDemo_9fc7e4e9.o \ + $(JUCE_OBJDIR)/AudioLatencyDemo_78d49233.o \ + $(JUCE_OBJDIR)/AudioPlaybackDemo_ea12adf6.o \ + $(JUCE_OBJDIR)/AudioRecordingDemo_435914e6.o \ + $(JUCE_OBJDIR)/AudioSettingsDemo_6d710bfe.o \ + $(JUCE_OBJDIR)/AudioSynthesiserDemo_1b3666f6.o \ + $(JUCE_OBJDIR)/Box2DDemo_51053c42.o \ + $(JUCE_OBJDIR)/CameraDemo_a10f7e50.o \ + $(JUCE_OBJDIR)/ChildProcessDemo_2c2b949e.o \ + $(JUCE_OBJDIR)/CodeEditorDemo_d5c17a65.o \ + $(JUCE_OBJDIR)/ComponentTransformsDemo_377f7889.o \ + $(JUCE_OBJDIR)/CryptographyDemo_232d46d7.o \ + $(JUCE_OBJDIR)/DialogsDemo_19d585d0.o \ + $(JUCE_OBJDIR)/FontsDemo_6da1e5e9.o \ + $(JUCE_OBJDIR)/GraphicsDemo_85142ef6.o \ + $(JUCE_OBJDIR)/ImagesDemo_ecf13aa3.o \ + $(JUCE_OBJDIR)/JavaScript_d6e42eb5.o \ + $(JUCE_OBJDIR)/KeyMappingsDemo_cf05c709.o \ + $(JUCE_OBJDIR)/LiveConstantDemo_e3b18a9b.o \ + $(JUCE_OBJDIR)/LookAndFeelDemo_25c558a3.o \ + $(JUCE_OBJDIR)/MDIDemo_c476c2d7.o \ + $(JUCE_OBJDIR)/MidiDemo_75ebc30c.o \ + $(JUCE_OBJDIR)/MultithreadingDemo_ff566eaa.o \ + $(JUCE_OBJDIR)/MultiTouch_595f3a2e.o \ + $(JUCE_OBJDIR)/NetworkingDemo_fbd1b19f.o \ + $(JUCE_OBJDIR)/OpenGLDemo_fdac55da.o \ + $(JUCE_OBJDIR)/OpenGLDemo2D_48eeadec.o \ + $(JUCE_OBJDIR)/PropertiesDemo_8ff1a8de.o \ + $(JUCE_OBJDIR)/SystemInfoDemo_984acd28.o \ + $(JUCE_OBJDIR)/TimersAndEventsDemo_f2656547.o \ + $(JUCE_OBJDIR)/UnitTestsDemo_5c21762.o \ + $(JUCE_OBJDIR)/ValueTreesDemo_9657d84f.o \ + $(JUCE_OBJDIR)/VideoDemo_b55a1560.o \ + $(JUCE_OBJDIR)/WebBrowserDemo_3df2dbdf.o \ + $(JUCE_OBJDIR)/WidgetsDemo_fb0454.o \ + $(JUCE_OBJDIR)/WindowsDemo_e8cfa428.o \ + $(JUCE_OBJDIR)/XMLandJSONDemo_5bc88df3.o \ + $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_box2d_95719d14.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking JuceDemo - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning JuceDemo @$(CLEANCMD) strip: @echo Stripping JuceDemo - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MainWindow_499ac812.o: ../../Source/MainWindow.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MainWindow_499ac812.o: ../../Source/MainWindow.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MainWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/IntroScreen_73347059.o: ../../Source/IntroScreen.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/IntroScreen_73347059.o: ../../Source/IntroScreen.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling IntroScreen.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AnimationDemo_9fc7e4e9.o: ../../Source/Demos/AnimationDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AnimationDemo_9fc7e4e9.o: ../../Source/Demos/AnimationDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AnimationDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioLatencyDemo_78d49233.o: ../../Source/Demos/AudioLatencyDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AudioLatencyDemo_78d49233.o: ../../Source/Demos/AudioLatencyDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AudioLatencyDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioPlaybackDemo_ea12adf6.o: ../../Source/Demos/AudioPlaybackDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AudioPlaybackDemo_ea12adf6.o: ../../Source/Demos/AudioPlaybackDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AudioPlaybackDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioRecordingDemo_435914e6.o: ../../Source/Demos/AudioRecordingDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AudioRecordingDemo_435914e6.o: ../../Source/Demos/AudioRecordingDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AudioRecordingDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioSettingsDemo_6d710bfe.o: ../../Source/Demos/AudioSettingsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AudioSettingsDemo_6d710bfe.o: ../../Source/Demos/AudioSettingsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AudioSettingsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/AudioSynthesiserDemo_1b3666f6.o: ../../Source/Demos/AudioSynthesiserDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/AudioSynthesiserDemo_1b3666f6.o: ../../Source/Demos/AudioSynthesiserDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling AudioSynthesiserDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/Box2DDemo_51053c42.o: ../../Source/Demos/Box2DDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Box2DDemo_51053c42.o: ../../Source/Demos/Box2DDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Box2DDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/CameraDemo_a10f7e50.o: ../../Source/Demos/CameraDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/CameraDemo_a10f7e50.o: ../../Source/Demos/CameraDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling CameraDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/ChildProcessDemo_2c2b949e.o: ../../Source/Demos/ChildProcessDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/ChildProcessDemo_2c2b949e.o: ../../Source/Demos/ChildProcessDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling ChildProcessDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/CodeEditorDemo_d5c17a65.o: ../../Source/Demos/CodeEditorDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/CodeEditorDemo_d5c17a65.o: ../../Source/Demos/CodeEditorDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling CodeEditorDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/ComponentTransformsDemo_377f7889.o: ../../Source/Demos/ComponentTransformsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/ComponentTransformsDemo_377f7889.o: ../../Source/Demos/ComponentTransformsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling ComponentTransformsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/CryptographyDemo_232d46d7.o: ../../Source/Demos/CryptographyDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/CryptographyDemo_232d46d7.o: ../../Source/Demos/CryptographyDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling CryptographyDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/DialogsDemo_19d585d0.o: ../../Source/Demos/DialogsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/DialogsDemo_19d585d0.o: ../../Source/Demos/DialogsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling DialogsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/FontsDemo_6da1e5e9.o: ../../Source/Demos/FontsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/FontsDemo_6da1e5e9.o: ../../Source/Demos/FontsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling FontsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/GraphicsDemo_85142ef6.o: ../../Source/Demos/GraphicsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/GraphicsDemo_85142ef6.o: ../../Source/Demos/GraphicsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling GraphicsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/ImagesDemo_ecf13aa3.o: ../../Source/Demos/ImagesDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/ImagesDemo_ecf13aa3.o: ../../Source/Demos/ImagesDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling ImagesDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/JavaScript_d6e42eb5.o: ../../Source/Demos/JavaScript.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/JavaScript_d6e42eb5.o: ../../Source/Demos/JavaScript.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling JavaScript.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/KeyMappingsDemo_cf05c709.o: ../../Source/Demos/KeyMappingsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/KeyMappingsDemo_cf05c709.o: ../../Source/Demos/KeyMappingsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling KeyMappingsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/LiveConstantDemo_e3b18a9b.o: ../../Source/Demos/LiveConstantDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/LiveConstantDemo_e3b18a9b.o: ../../Source/Demos/LiveConstantDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling LiveConstantDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/LookAndFeelDemo_25c558a3.o: ../../Source/Demos/LookAndFeelDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/LookAndFeelDemo_25c558a3.o: ../../Source/Demos/LookAndFeelDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling LookAndFeelDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MDIDemo_c476c2d7.o: ../../Source/Demos/MDIDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MDIDemo_c476c2d7.o: ../../Source/Demos/MDIDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MDIDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MidiDemo_75ebc30c.o: ../../Source/Demos/MidiDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MidiDemo_75ebc30c.o: ../../Source/Demos/MidiDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MidiDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MultithreadingDemo_ff566eaa.o: ../../Source/Demos/MultithreadingDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MultithreadingDemo_ff566eaa.o: ../../Source/Demos/MultithreadingDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MultithreadingDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MultiTouch_595f3a2e.o: ../../Source/Demos/MultiTouch.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MultiTouch_595f3a2e.o: ../../Source/Demos/MultiTouch.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MultiTouch.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/NetworkingDemo_fbd1b19f.o: ../../Source/Demos/NetworkingDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/NetworkingDemo_fbd1b19f.o: ../../Source/Demos/NetworkingDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling NetworkingDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/OpenGLDemo_fdac55da.o: ../../Source/Demos/OpenGLDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/OpenGLDemo_fdac55da.o: ../../Source/Demos/OpenGLDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling OpenGLDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/OpenGLDemo2D_48eeadec.o: ../../Source/Demos/OpenGLDemo2D.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/OpenGLDemo2D_48eeadec.o: ../../Source/Demos/OpenGLDemo2D.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling OpenGLDemo2D.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/PropertiesDemo_8ff1a8de.o: ../../Source/Demos/PropertiesDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling PropertiesDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/SystemInfoDemo_984acd28.o: ../../Source/Demos/SystemInfoDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/SystemInfoDemo_984acd28.o: ../../Source/Demos/SystemInfoDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling SystemInfoDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/TimersAndEventsDemo_f2656547.o: ../../Source/Demos/TimersAndEventsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/TimersAndEventsDemo_f2656547.o: ../../Source/Demos/TimersAndEventsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling TimersAndEventsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/UnitTestsDemo_5c21762.o: ../../Source/Demos/UnitTestsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/UnitTestsDemo_5c21762.o: ../../Source/Demos/UnitTestsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling UnitTestsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/ValueTreesDemo_9657d84f.o: ../../Source/Demos/ValueTreesDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/ValueTreesDemo_9657d84f.o: ../../Source/Demos/ValueTreesDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling ValueTreesDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/VideoDemo_b55a1560.o: ../../Source/Demos/VideoDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/VideoDemo_b55a1560.o: ../../Source/Demos/VideoDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling VideoDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/WebBrowserDemo_3df2dbdf.o: ../../Source/Demos/WebBrowserDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/WebBrowserDemo_3df2dbdf.o: ../../Source/Demos/WebBrowserDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling WebBrowserDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/WidgetsDemo_fb0454.o: ../../Source/Demos/WidgetsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/WidgetsDemo_fb0454.o: ../../Source/Demos/WidgetsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling WidgetsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/WindowsDemo_e8cfa428.o: ../../Source/Demos/WindowsDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/WindowsDemo_e8cfa428.o: ../../Source/Demos/WindowsDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling WindowsDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/XMLandJSONDemo_5bc88df3.o: ../../Source/Demos/XMLandJSONDemo.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/XMLandJSONDemo_5bc88df3.o: ../../Source/Demos/XMLandJSONDemo.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling XMLandJSONDemo.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling BinaryData.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_box2d_95719d14.o: ../../JuceLibraryCode/juce_box2d.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_box2d_95719d14.o: ../../JuceLibraryCode/juce_box2d.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_box2d.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/HelloWorld/Builds/Linux/Makefile b/examples/HelloWorld/Builds/Linux/Makefile index da1622d58e..9c09d22d56 100644 --- a/examples/HelloWorld/Builds/Linux/Makefile +++ b/examples/HelloWorld/Builds/Linux/Makefile @@ -4,115 +4,127 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := HelloWorld - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := HelloWorld - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/MainComponent_a6ffb4a5.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking HelloWorld - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning HelloWorld @$(CLEANCMD) strip: @echo Stripping HelloWorld - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MainComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/MPETest/Builds/LinuxMakefile/Makefile b/examples/MPETest/Builds/LinuxMakefile/Makefile index 549c25af42..31ead7e6de 100644 --- a/examples/MPETest/Builds/LinuxMakefile/Makefile +++ b/examples/MPETest/Builds/LinuxMakefile/Makefile @@ -4,157 +4,169 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := MPETest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := MPETest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking MPETest - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning MPETest @$(CLEANCMD) strip: @echo Stripping MPETest - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/MidiTest/Builds/LinuxMakefile/Makefile b/examples/MidiTest/Builds/LinuxMakefile/Makefile index 12b7004609..7e88d199f3 100644 --- a/examples/MidiTest/Builds/LinuxMakefile/Makefile +++ b/examples/MidiTest/Builds/LinuxMakefile/Makefile @@ -4,145 +4,157 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := MidiTest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := MidiTest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/MainComponent_a6ffb4a5.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking MidiTest - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning MidiTest @$(CLEANCMD) strip: @echo Stripping MidiTest - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MainComponent_a6ffb4a5.o: ../../Source/MainComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MainComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile b/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile index e95df255ac..b113dbc324 100644 --- a/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile +++ b/examples/NetworkGraphicsDemo/Builds/LinuxMakefile/Makefile @@ -4,163 +4,175 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := JUCE\ Network\ Graphics\ Demo - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := JUCE\ Network\ Graphics\ Demo - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/BinaryData_ce4232d4.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_osc_be4cee16.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_osc_be4cee16.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking JUCE Network Graphics Demo - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning JUCE Network Graphics Demo @$(CLEANCMD) strip: @echo Stripping JUCE Network Graphics Demo - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling BinaryData.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_osc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/OSCMonitor/Builds/LinuxMakefile/Makefile b/examples/OSCMonitor/Builds/LinuxMakefile/Makefile index 40905c5373..dbca80add3 100644 --- a/examples/OSCMonitor/Builds/LinuxMakefile/Makefile +++ b/examples/OSCMonitor/Builds/LinuxMakefile/Makefile @@ -4,157 +4,169 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := OSCMonitor - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := OSCMonitor - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_osc_be4cee16.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_osc_be4cee16.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking OSCMonitor - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning OSCMonitor @$(CLEANCMD) strip: @echo Stripping OSCMonitor - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_osc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/OSCReceiver/Builds/LinuxMakefile/Makefile b/examples/OSCReceiver/Builds/LinuxMakefile/Makefile index ee6a4fc0e3..2c0117832e 100644 --- a/examples/OSCReceiver/Builds/LinuxMakefile/Makefile +++ b/examples/OSCReceiver/Builds/LinuxMakefile/Makefile @@ -4,121 +4,133 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := OSCReceiver - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := OSCReceiver - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_osc_be4cee16.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_osc_be4cee16.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking OSCReceiver - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning OSCReceiver @$(CLEANCMD) strip: @echo Stripping OSCReceiver - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_osc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/OSCSender/Builds/LinuxMakefile/Makefile b/examples/OSCSender/Builds/LinuxMakefile/Makefile index 7f0f27a315..1600076d3d 100644 --- a/examples/OSCSender/Builds/LinuxMakefile/Makefile +++ b/examples/OSCSender/Builds/LinuxMakefile/Makefile @@ -4,109 +4,121 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := OSCSender - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := OSCSender - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_osc_be4cee16.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_osc_be4cee16.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking OSCSender - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning OSCSender @$(CLEANCMD) strip: @echo Stripping OSCSender - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_osc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile b/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile index f3d05d2d5b..6f79d67969 100644 --- a/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile +++ b/examples/PlugInSamples/Surround/Builds/LinuxMakefile/Makefile @@ -4,163 +4,175 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := Surround.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 -Wall -Wshadow -Wno-missing-field-initializers -Wshadow -Wshorten-64-to-32 -Wstrict-aliasing -Wuninitialized -Wunused-parameter -Wconversion -Wsign-compare -Wint-conversion -Woverloaded-virtual -Wreorder -Wconstant-conversion -Wsign-conversion + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := Surround.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/SurroundProcessor_c7ed9c55.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \ - $(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/SurroundProcessor_c7ed9c55.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \ + $(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking Surround - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning Surround @$(CLEANCMD) strip: @echo Stripping Surround - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/SurroundProcessor_c7ed9c55.o: ../../Source/SurroundProcessor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/SurroundProcessor_c7ed9c55.o: ../../Source/SurroundProcessor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling SurroundProcessor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_plugin_client_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_plugin_client_VST2.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/audio plugin demo/Builds/Linux/Makefile b/examples/audio plugin demo/Builds/Linux/Makefile index fa163ac657..9725e870b1 100644 --- a/examples/audio plugin demo/Builds/Linux/Makefile +++ b/examples/audio plugin demo/Builds/Linux/Makefile @@ -4,157 +4,169 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -fPIC -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := JuceDemoPlugin.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -fPIC -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -Wl,--no-undefined -shared -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := JuceDemoPlugin.so - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/PluginEditor_94d4fb09.o \ - $(OBJDIR)/PluginProcessor_a059e380.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \ - $(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/PluginEditor_94d4fb09.o \ + $(JUCE_OBJDIR)/PluginProcessor_a059e380.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o \ + $(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking JuceDemoPlugin - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning JuceDemoPlugin @$(CLEANCMD) strip: @echo Stripping JuceDemoPlugin - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/PluginEditor_94d4fb09.o: ../../Source/PluginEditor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling PluginEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/PluginProcessor_a059e380.o: ../../Source/PluginProcessor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling PluginProcessor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_plugin_client_utils_35fbf7.o: ../../JuceLibraryCode/juce_audio_plugin_client_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_plugin_client_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_plugin_client_VST2_fd137df.o: ../../JuceLibraryCode/juce_audio_plugin_client_VST2.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_plugin_client_VST2.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/examples/audio plugin host/Builds/Linux/Makefile b/examples/audio plugin host/Builds/Linux/Makefile index 2257e6f557..06bdf5eee9 100644 --- a/examples/audio plugin host/Builds/Linux/Makefile +++ b/examples/audio plugin host/Builds/Linux/Makefile @@ -4,181 +4,193 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := Plugin\ Host - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ~/SDKs/VST3\ SDK -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I$(HOME)/SDKs/VST3\ SDK -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := Plugin\ Host - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/FilterGraph_62e9c017.o \ - $(OBJDIR)/GraphEditorPanel_3dbd4872.o \ - $(OBJDIR)/HostStartup_5ce96f96.o \ - $(OBJDIR)/InternalFilters_beb54bdf.o \ - $(OBJDIR)/MainHostWindow_e920295a.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/FilterGraph_62e9c017.o \ + $(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o \ + $(JUCE_OBJDIR)/HostStartup_5ce96f96.o \ + $(JUCE_OBJDIR)/InternalFilters_beb54bdf.o \ + $(JUCE_OBJDIR)/MainHostWindow_e920295a.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking Plugin Host - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning Plugin Host @$(CLEANCMD) strip: @echo Stripping Plugin Host - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/FilterGraph_62e9c017.o: ../../Source/FilterGraph.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/FilterGraph_62e9c017.o: ../../Source/FilterGraph.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling FilterGraph.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/GraphEditorPanel_3dbd4872.o: ../../Source/GraphEditorPanel.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/GraphEditorPanel_3dbd4872.o: ../../Source/GraphEditorPanel.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling GraphEditorPanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/HostStartup_5ce96f96.o: ../../Source/HostStartup.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/HostStartup_5ce96f96.o: ../../Source/HostStartup.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling HostStartup.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/InternalFilters_beb54bdf.o: ../../Source/InternalFilters.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/InternalFilters_beb54bdf.o: ../../Source/InternalFilters.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling InternalFilters.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/MainHostWindow_e920295a.o: ../../Source/MainHostWindow.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/MainHostWindow_e920295a.o: ../../Source/MainHostWindow.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling MainHostWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile index adb768928e..86ac13bd2a 100644 --- a/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile +++ b/extras/AudioPerformanceTest/Builds/LinuxMakefile/Makefile @@ -4,139 +4,151 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := AudioPerformanceTest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := AudioPerformanceTest - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_audio_utils_c7eb679f.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking AudioPerformanceTest - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning AudioPerformanceTest @$(CLEANCMD) strip: @echo Stripping AudioPerformanceTest - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_utils_c7eb679f.o: ../../JuceLibraryCode/juce_audio_utils.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_utils.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/Projucer/Builds/LinuxMakefile/Makefile b/extras/Projucer/Builds/LinuxMakefile/Makefile index dd33a82640..76e5148d4d 100644 --- a/extras/Projucer/Builds/LinuxMakefile/Makefile +++ b/extras/Projucer/Builds/LinuxMakefile/Makefile @@ -4,397 +4,409 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 -std=c++11 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := Projucer - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lX11 -lXext -lXinerama -ldl -lfreetype -lpthread -lrt -lcurl + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=4.2.3 -DJUCE_APP_VERSION_HEX=0x40203 $(shell pkg-config --cflags freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 -std=c++11 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden $(shell pkg-config --libs freetype2 libcurl x11 xext xinerama) -ldl -lpthread -lrt TARGET := Projucer - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/jucer_AppearanceSettings_788d9889.o \ - $(OBJDIR)/jucer_AutoUpdater_ca658dc2.o \ - $(OBJDIR)/jucer_CommandLine_f35de107.o \ - $(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o \ - $(OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o \ - $(OBJDIR)/jucer_Main_f8488f5b.o \ - $(OBJDIR)/jucer_MainWindow_1e163aeb.o \ - $(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \ - $(OBJDIR)/projucer_CompileEngineClient_542e6b2d.o \ - $(OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o \ - $(OBJDIR)/jucer_SourceCodeEditor_461f5487.o \ - $(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o \ - $(OBJDIR)/jucer_ButtonDocument_56c341cc.o \ - $(OBJDIR)/jucer_ComponentDocument_92868083.o \ - $(OBJDIR)/jucer_ColouredElement_70cbc839.o \ - $(OBJDIR)/jucer_PaintElement_653460.o \ - $(OBJDIR)/jucer_PaintElementPath_908894a5.o \ - $(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o \ - $(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o \ - $(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o \ - $(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o \ - $(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o \ - $(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o \ - $(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o \ - $(OBJDIR)/jucer_TestComponent_db757dc4.o \ - $(OBJDIR)/jucer_BinaryResources_e0f99b46.o \ - $(OBJDIR)/jucer_ComponentLayout_6ea00129.o \ - $(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o \ - $(OBJDIR)/jucer_JucerDocument_ff8afcc2.o \ - $(OBJDIR)/jucer_ObjectTypes_4406f01c.o \ - $(OBJDIR)/jucer_PaintRoutine_e1e891ee.o \ - $(OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o \ - $(OBJDIR)/jucer_Module_3f7666a5.o \ - $(OBJDIR)/jucer_Project_c131864a.o \ - $(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \ - $(OBJDIR)/jucer_ProjectSaver_38b16c25.o \ - $(OBJDIR)/jucer_ResourceFile_6af120d3.o \ - $(OBJDIR)/jucer_CodeHelpers_c317179c.o \ - $(OBJDIR)/jucer_FileHelpers_f98ed0ad.o \ - $(OBJDIR)/jucer_Icons_9db2f51e.o \ - $(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o \ - $(OBJDIR)/jucer_MiscUtilities_25b68c82.o \ - $(OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o \ - $(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o \ - $(OBJDIR)/jucer_StoredSettings_26078d2c.o \ - $(OBJDIR)/jucer_NewFileWizard_fac97f47.o \ - $(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \ - $(OBJDIR)/BinaryData_ce4232d4.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/jucer_AppearanceSettings_788d9889.o \ + $(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o \ + $(JUCE_OBJDIR)/jucer_CommandLine_f35de107.o \ + $(JUCE_OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o \ + $(JUCE_OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o \ + $(JUCE_OBJDIR)/jucer_Main_f8488f5b.o \ + $(JUCE_OBJDIR)/jucer_MainWindow_1e163aeb.o \ + $(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o \ + $(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o \ + $(JUCE_OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o \ + $(JUCE_OBJDIR)/jucer_SourceCodeEditor_461f5487.o \ + $(JUCE_OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o \ + $(JUCE_OBJDIR)/jucer_ButtonDocument_56c341cc.o \ + $(JUCE_OBJDIR)/jucer_ComponentDocument_92868083.o \ + $(JUCE_OBJDIR)/jucer_ColouredElement_70cbc839.o \ + $(JUCE_OBJDIR)/jucer_PaintElement_653460.o \ + $(JUCE_OBJDIR)/jucer_PaintElementPath_908894a5.o \ + $(JUCE_OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o \ + $(JUCE_OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o \ + $(JUCE_OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o \ + $(JUCE_OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o \ + $(JUCE_OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o \ + $(JUCE_OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o \ + $(JUCE_OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o \ + $(JUCE_OBJDIR)/jucer_TestComponent_db757dc4.o \ + $(JUCE_OBJDIR)/jucer_BinaryResources_e0f99b46.o \ + $(JUCE_OBJDIR)/jucer_ComponentLayout_6ea00129.o \ + $(JUCE_OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o \ + $(JUCE_OBJDIR)/jucer_JucerDocument_ff8afcc2.o \ + $(JUCE_OBJDIR)/jucer_ObjectTypes_4406f01c.o \ + $(JUCE_OBJDIR)/jucer_PaintRoutine_e1e891ee.o \ + $(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o \ + $(JUCE_OBJDIR)/jucer_Module_3f7666a5.o \ + $(JUCE_OBJDIR)/jucer_Project_c131864a.o \ + $(JUCE_OBJDIR)/jucer_ProjectExporter_eefe2e5b.o \ + $(JUCE_OBJDIR)/jucer_ProjectSaver_38b16c25.o \ + $(JUCE_OBJDIR)/jucer_ResourceFile_6af120d3.o \ + $(JUCE_OBJDIR)/jucer_CodeHelpers_c317179c.o \ + $(JUCE_OBJDIR)/jucer_FileHelpers_f98ed0ad.o \ + $(JUCE_OBJDIR)/jucer_Icons_9db2f51e.o \ + $(JUCE_OBJDIR)/jucer_JucerTreeViewBase_d043309d.o \ + $(JUCE_OBJDIR)/jucer_MiscUtilities_25b68c82.o \ + $(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o \ + $(JUCE_OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o \ + $(JUCE_OBJDIR)/jucer_StoredSettings_26078d2c.o \ + $(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o \ + $(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o \ + $(JUCE_OBJDIR)/BinaryData_ce4232d4.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking Projucer - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning Projucer @$(CLEANCMD) strip: @echo Stripping Projucer - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/jucer_AppearanceSettings_788d9889.o: ../../Source/Application/jucer_AppearanceSettings.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_AppearanceSettings_788d9889.o: ../../Source/Application/jucer_AppearanceSettings.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_AppearanceSettings.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_AutoUpdater_ca658dc2.o: ../../Source/Application/jucer_AutoUpdater.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_AutoUpdater_ca658dc2.o: ../../Source/Application/jucer_AutoUpdater.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_AutoUpdater.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_CommandLine_f35de107.o: ../../Source/Application/jucer_CommandLine.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_CommandLine_f35de107.o: ../../Source/Application/jucer_CommandLine.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_CommandLine.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o: ../../Source/Application/jucer_DocumentEditorComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_DocumentEditorComponent_695dff1d.o: ../../Source/Application/jucer_DocumentEditorComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_DocumentEditorComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o: ../../Source/Application/jucer_GlobalPreferences.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_GlobalPreferences_b0f1bd3d.o: ../../Source/Application/jucer_GlobalPreferences.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_GlobalPreferences.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_Main_f8488f5b.o: ../../Source/Application/jucer_Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_Main_f8488f5b.o: ../../Source/Application/jucer_Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_MainWindow_1e163aeb.o: ../../Source/Application/jucer_MainWindow.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_MainWindow_1e163aeb.o: ../../Source/Application/jucer_MainWindow.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_MainWindow.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_OpenDocumentManager.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_OpenDocumentManager_4c72d210.o: ../../Source/Application/jucer_OpenDocumentManager.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_OpenDocumentManager.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/projucer_CompileEngineClient_542e6b2d.o: ../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/projucer_CompileEngineClient_542e6b2d.o: ../../Source/LiveBuildEngine/projucer_CompileEngineClient.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling projucer_CompileEngineClient.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o: ../../Source/LiveBuildEngine/projucer_CompileEngineServer.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/projucer_CompileEngineServer_a5a32aa5.o: ../../Source/LiveBuildEngine/projucer_CompileEngineServer.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling projucer_CompileEngineServer.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_SourceCodeEditor_461f5487.o: ../../Source/Code\ Editor/jucer_SourceCodeEditor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_SourceCodeEditor_461f5487.o: ../../Source/Code\ Editor/jucer_SourceCodeEditor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_SourceCodeEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o: ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ComponentTypeHandler_6bec6262.o: ../../Source/ComponentEditor/components/jucer_ComponentTypeHandler.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ComponentTypeHandler.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ButtonDocument_56c341cc.o: ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ButtonDocument_56c341cc.o: ../../Source/ComponentEditor/documents/jucer_ButtonDocument.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ButtonDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ComponentDocument_92868083.o: ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ComponentDocument_92868083.o: ../../Source/ComponentEditor/documents/jucer_ComponentDocument.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ComponentDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ColouredElement_70cbc839.o: ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ColouredElement_70cbc839.o: ../../Source/ComponentEditor/paintelements/jucer_ColouredElement.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ColouredElement.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_PaintElement_653460.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_PaintElement_653460.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElement.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_PaintElement.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_PaintElementPath_908894a5.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_PaintElementPath_908894a5.o: ../../Source/ComponentEditor/paintelements/jucer_PaintElementPath.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_PaintElementPath.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o: ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ComponentLayoutEditor_aeb44f8d.o: ../../Source/ComponentEditor/ui/jucer_ComponentLayoutEditor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ComponentLayoutEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o: ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ComponentOverlayComponent_fd508d63.o: ../../Source/ComponentEditor/ui/jucer_ComponentOverlayComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ComponentOverlayComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o: ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_EditingPanelBase_6c2ed9ee.o: ../../Source/ComponentEditor/ui/jucer_EditingPanelBase.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_EditingPanelBase.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o: ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_JucerDocumentEditor_2c581e26.o: ../../Source/ComponentEditor/ui/jucer_JucerDocumentEditor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_JucerDocumentEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_PaintRoutineEditor_f6ac0344.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutineEditor.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_PaintRoutineEditor.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_PaintRoutinePanel_c309a0d7.o: ../../Source/ComponentEditor/ui/jucer_PaintRoutinePanel.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_PaintRoutinePanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o: ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ResourceEditorPanel_a558f2e2.o: ../../Source/ComponentEditor/ui/jucer_ResourceEditorPanel.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ResourceEditorPanel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_TestComponent_db757dc4.o: ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_TestComponent_db757dc4.o: ../../Source/ComponentEditor/ui/jucer_TestComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_TestComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_BinaryResources_e0f99b46.o: ../../Source/ComponentEditor/jucer_BinaryResources.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_BinaryResources_e0f99b46.o: ../../Source/ComponentEditor/jucer_BinaryResources.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_BinaryResources.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ComponentLayout_6ea00129.o: ../../Source/ComponentEditor/jucer_ComponentLayout.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ComponentLayout_6ea00129.o: ../../Source/ComponentEditor/jucer_ComponentLayout.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ComponentLayout.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o: ../../Source/ComponentEditor/jucer_GeneratedCode.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_GeneratedCode_9ca4ef7e.o: ../../Source/ComponentEditor/jucer_GeneratedCode.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_GeneratedCode.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_JucerDocument_ff8afcc2.o: ../../Source/ComponentEditor/jucer_JucerDocument.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_JucerDocument_ff8afcc2.o: ../../Source/ComponentEditor/jucer_JucerDocument.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_JucerDocument.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ObjectTypes_4406f01c.o: ../../Source/ComponentEditor/jucer_ObjectTypes.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ObjectTypes_4406f01c.o: ../../Source/ComponentEditor/jucer_ObjectTypes.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ObjectTypes.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_PaintRoutine_e1e891ee.o: ../../Source/ComponentEditor/jucer_PaintRoutine.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_PaintRoutine_e1e891ee.o: ../../Source/ComponentEditor/jucer_PaintRoutine.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_PaintRoutine.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o: ../../Source/Project/jucer_DependencyPathPropertyComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_DependencyPathPropertyComponent_4d137229.o: ../../Source/Project/jucer_DependencyPathPropertyComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_DependencyPathPropertyComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_Module_3f7666a5.o: ../../Source/Project/jucer_Module.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_Module.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_Project_c131864a.o: ../../Source/Project/jucer_Project.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_Project_c131864a.o: ../../Source/Project/jucer_Project.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_Project.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ProjectExporter_eefe2e5b.o: ../../Source/Project\ Saving/jucer_ProjectExporter.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ProjectExporter.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ProjectSaver_38b16c25.o: ../../Source/Project\ Saving/jucer_ProjectSaver.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ProjectSaver_38b16c25.o: ../../Source/Project\ Saving/jucer_ProjectSaver.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ProjectSaver.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ResourceFile_6af120d3.o: ../../Source/Project\ Saving/jucer_ResourceFile.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ResourceFile_6af120d3.o: ../../Source/Project\ Saving/jucer_ResourceFile.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ResourceFile.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_CodeHelpers_c317179c.o: ../../Source/Utility/jucer_CodeHelpers.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_CodeHelpers_c317179c.o: ../../Source/Utility/jucer_CodeHelpers.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_CodeHelpers.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_FileHelpers_f98ed0ad.o: ../../Source/Utility/jucer_FileHelpers.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_FileHelpers_f98ed0ad.o: ../../Source/Utility/jucer_FileHelpers.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_FileHelpers.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_Icons_9db2f51e.o: ../../Source/Utility/jucer_Icons.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_Icons_9db2f51e.o: ../../Source/Utility/jucer_Icons.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_Icons.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_JucerTreeViewBase_d043309d.o: ../../Source/Utility/jucer_JucerTreeViewBase.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_JucerTreeViewBase_d043309d.o: ../../Source/Utility/jucer_JucerTreeViewBase.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_JucerTreeViewBase.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_MiscUtilities_25b68c82.o: ../../Source/Utility/jucer_MiscUtilities.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_MiscUtilities_25b68c82.o: ../../Source/Utility/jucer_MiscUtilities.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_MiscUtilities.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o: ../../Source/Utility/jucer_ProjucerLookAndFeel.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_ProjucerLookAndFeel_d6c6b28a.o: ../../Source/Utility/jucer_ProjucerLookAndFeel.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_ProjucerLookAndFeel.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o: ../../Source/Utility/jucer_SlidingPanelComponent.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_SlidingPanelComponent_9aa7a2ab.o: ../../Source/Utility/jucer_SlidingPanelComponent.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_SlidingPanelComponent.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_StoredSettings_26078d2c.o: ../../Source/Utility/jucer_StoredSettings.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_StoredSettings_26078d2c.o: ../../Source/Utility/jucer_StoredSettings.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_StoredSettings.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_NewFileWizard_fac97f47.o: ../../Source/Wizards/jucer_NewFileWizard.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_NewFileWizard.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/jucer_NewProjectWizardClasses_891f6fa2.o: ../../Source/Wizards/jucer_NewProjectWizardClasses.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling jucer_NewProjectWizardClasses.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/BinaryData_ce4232d4.o: ../../JuceLibraryCode/BinaryData.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling BinaryData.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/Projucer/Projucer.jucer b/extras/Projucer/Projucer.jucer index 5fc7dd25ad..02a1ce8eb9 100644 --- a/extras/Projucer/Projucer.jucer +++ b/extras/Projucer/Projucer.jucer @@ -70,10 +70,10 @@ - - + + @@ -626,5 +626,6 @@ + diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h index 4a43c7903f..e4f94e9e2e 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_Make.h @@ -29,6 +29,9 @@ public: static const char* getNameLinux() { return "Linux Makefile"; } static const char* getValueTreeTypeName() { return "LINUX_MAKE"; } + Value getExtraPkgConfig() { return getSetting (Ids::linuxExtraPkgConfig); } + String getExtraPkgConfigString() const { return getSettingString (Ids::linuxExtraPkgConfig); } + static MakefileProjectExporter* createForSettings (Project& project, const ValueTree& settings) { if (settings.hasType (getValueTreeTypeName())) @@ -90,6 +93,9 @@ public: StringArray (cppStandardNames), Array (cppStandardValues)), "The C++ standard to specify in the makefile"); + + properties.add (new TextPropertyComponent (getExtraPkgConfig(), "pkg-config libraries", 8192, false), + "Extra pkg-config libraries for you application. Each package should be space separated."); } //============================================================================== @@ -126,7 +132,6 @@ protected: MakeBuildConfiguration (Project& p, const ValueTree& settings, const ProjectExporter& e) : BuildConfiguration (p, settings, e) { - setValueIfVoid (getLibrarySearchPathValue(), "/usr/X11R6/lib/"); } Value getArchitectureType() { return getValue (Ids::linuxArchitecture); } @@ -191,18 +196,36 @@ private: StringArray searchPaths (extraSearchPaths); searchPaths.addArray (config.getHeaderSearchPaths()); - searchPaths.insert (0, "/usr/include/freetype2"); - searchPaths.insert (0, "/usr/include"); + StringArray packages; + packages.addTokens (getExtraPkgConfigString(), " ", "\"'"); + packages.removeEmptyStrings(); + + if (linuxPackages.size() > 0 || packages.size() > 0) + { + out << " $(shell pkg-config --cflags"; + + for (int i = 0; i < linuxPackages.size(); ++i) + out << " " << linuxPackages[i]; + + for (int i = 0; i < packages.size(); ++i) + out << " " << packages[i]; + + out << ")"; + } + + if (linuxLibs.contains("pthread")) + out << " -pthread"; searchPaths = getCleanedStringArray (searchPaths); + // Replace ~ character with $(HOME) environment variable for (int i = 0; i < searchPaths.size(); ++i) - out << " -I " << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))); + out << " -I" << escapeSpaces (FileHelpers::unixStylePath (replacePreprocessorTokens (config, searchPaths[i]))).replace ("~", "$(HOME)"); } void writeCppFlags (OutputStream& out, const BuildConfiguration& config) const { - out << " CPPFLAGS := $(DEPFLAGS)"; + out << " JUCE_CPPFLAGS := $(DEPFLAGS)"; writeDefineFlags (out, config); writeHeaderPathFlags (out, config); out << newLine; @@ -210,7 +233,7 @@ private: void writeLinkerFlags (OutputStream& out, const BuildConfiguration& config) const { - out << " LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR)"; + out << " JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR)"; { StringArray flags (makefileExtraLinkerFlags); @@ -227,12 +250,26 @@ private: out << config.getGCCLibraryPathFlags(); + StringArray packages; + packages.addTokens (getExtraPkgConfigString(), " ", "\"'"); + packages.removeEmptyStrings(); + + if (linuxPackages.size() > 0 || packages.size() > 0) + { + out << " $(shell pkg-config --libs"; + + for (int i = 0; i < linuxPackages.size(); ++i) + out << " " << linuxPackages[i]; + + for (int i = 0; i < packages.size(); ++i) + out << " " << packages[i]; + + out << ")"; + } + for (int i = 0; i < linuxLibs.size(); ++i) out << " -l" << linuxLibs[i]; - if (getProject().isConfigFlagEnabled ("JUCE_USE_CURL")) - out << " -lcurl"; - StringArray libraries; libraries.addTokens (getExternalLibrariesString(), ";", "\"'"); libraries.removeEmptyStrings(); @@ -257,10 +294,10 @@ private: } out << "ifeq ($(CONFIG)," << escapeSpaces (config.getName()) << ")" << newLine; - out << " BINDIR := " << escapeSpaces (buildDirName) << newLine - << " LIBDIR := " << escapeSpaces (buildDirName) << newLine - << " OBJDIR := " << escapeSpaces (intermediatesDirName) << newLine - << " OUTDIR := " << escapeSpaces (outputDir) << newLine + out << " JUCE_BINDIR := " << escapeSpaces (buildDirName) << newLine + << " JUCE_LIBDIR := " << escapeSpaces (buildDirName) << newLine + << " JUCE_OBJDIR := " << escapeSpaces (intermediatesDirName) << newLine + << " JUCE_OUTDIR := " << escapeSpaces (outputDir) << newLine << newLine << " ifeq ($(TARGET_ARCH),)" << newLine << " TARGET_ARCH := " << getArchFlags (config) << newLine @@ -269,7 +306,7 @@ private: writeCppFlags (out, config); - out << " CFLAGS += $(CPPFLAGS) $(TARGET_ARCH)"; + out << " JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH)"; if (config.isDebug()) out << " -g -ggdb"; @@ -286,7 +323,7 @@ private: if (cppStandardToUse.isEmpty()) cppStandardToUse = "-std=c++11"; - out << " CXXFLAGS += $(CFLAGS) " + out << " JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) " << cppStandardToUse << newLine; @@ -304,11 +341,11 @@ private: out << " TARGET := " << escapeSpaces (targetName) << newLine; if (projectType.isStaticLibrary()) - out << " BLDCMD = ar -rcs $(OUTDIR)/$(TARGET) $(OBJECTS)" << newLine; + out << " BLDCMD = $(AR) -rcs $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS)" << newLine; else - out << " BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH)" << newLine; + out << " BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH)" << newLine; - out << " CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR)" << newLine + out << " CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR)" << newLine << "endif" << newLine << newLine; } @@ -319,7 +356,7 @@ private: for (int i = 0; i < files.size(); ++i) if (shouldFileBeCompiledByDefault (files.getReference(i))) - out << " $(OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) << " \\" << newLine; + out << " $(JUCE_OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) << " \\" << newLine; out << newLine; } @@ -334,6 +371,16 @@ private: << "DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD)" << newLine << newLine; + out << "ifndef STRIP" << newLine + << " STRIP=strip" << newLine + << "endif" << newLine + << newLine; + + out << "ifndef AR" << newLine + << " AR=ar" << newLine + << "endif" << newLine + << newLine; + out << "ifndef CONFIG" << newLine << " CONFIG=" << escapeSpaces (getConfiguration(0)->getName()) << newLine << "endif" << newLine @@ -347,14 +394,39 @@ private: out << ".PHONY: clean" << newLine << newLine; - out << "$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES)" << newLine + StringArray packages; + packages.addTokens (getExtraPkgConfigString(), " ", "\"'"); + packages.removeEmptyStrings(); + + bool useLinuxPackages = (linuxPackages.size() > 0 || packages.size() > 0); + + out << "$(JUCE_OUTDIR)/$(TARGET): " + << ((useLinuxPackages) ? "check-pkg-config " : "") + << "$(OBJECTS) $(RESOURCES)" << newLine << "\t@echo Linking " << projectName << newLine - << "\t-@mkdir -p $(BINDIR)" << newLine - << "\t-@mkdir -p $(LIBDIR)" << newLine - << "\t-@mkdir -p $(OUTDIR)" << newLine + << "\t-@mkdir -p $(JUCE_BINDIR)" << newLine + << "\t-@mkdir -p $(JUCE_LIBDIR)" << newLine + << "\t-@mkdir -p $(JUCE_OUTDIR)" << newLine << "\t@$(BLDCMD)" << newLine << newLine; + if (useLinuxPackages) + { + out << "check-pkg-config:" << newLine + << "\t@command -v pkg-config >/dev/null 2>&1 || " + "{ echo >&2 \"pkg-config not installed. Please, install it.\"; " + "exit 1; }" << newLine + << "\t@pkg-config --print-errors"; + + for (int i = 0; i < linuxPackages.size(); ++i) + out << " " << linuxPackages[i]; + + for (int i = 0; i < packages.size(); ++i) + out << " " << packages[i]; + + out << newLine << newLine; + } + out << "clean:" << newLine << "\t@echo Cleaning " << projectName << newLine << "\t@$(CLEANCMD)" << newLine @@ -362,7 +434,7 @@ private: out << "strip:" << newLine << "\t@echo Stripping " << projectName << newLine - << "\t-@strip --strip-unneeded $(OUTDIR)/$(TARGET)" << newLine + << "\t-@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET)" << newLine << newLine; for (int i = 0; i < files.size(); ++i) @@ -371,12 +443,12 @@ private: { jassert (files.getReference(i).getRoot() == RelativePath::buildTargetFolder); - out << "$(OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) + out << "$(JUCE_OBJDIR)/" << escapeSpaces (getObjectFileFor (files.getReference(i))) << ": " << escapeSpaces (files.getReference(i).toUnixStyle()) << newLine - << "\t-@mkdir -p $(OBJDIR)" << newLine + << "\t-@mkdir -p $(JUCE_OBJDIR)" << newLine << "\t@echo \"Compiling " << files.getReference(i).getFileName() << "\"" << newLine - << (files.getReference(i).hasFileExtension ("c;s;S") ? "\t@$(CC) $(CFLAGS) -o \"$@\" -c \"$<\"" - : "\t@$(CXX) $(CXXFLAGS) -o \"$@\" -c \"$<\"") + << (files.getReference(i).hasFileExtension ("c;s;S") ? "\t@$(CC) $(JUCE_CFLAGS) -o \"$@\" -c \"$<\"" + : "\t@$(CXX) $(JUCE_CXXFLAGS) -o \"$@\" -c \"$<\"") << newLine << newLine; } } diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp index faa0934f6e..2257e3025b 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp @@ -831,7 +831,7 @@ String ProjectExporter::BuildConfiguration::getGCCLibraryPathFlags() const const StringArray libraryPaths (getLibrarySearchPaths()); for (int i = 0; i < libraryPaths.size(); ++i) - s << " -L" << escapeSpaces (libraryPaths[i]); + s << " -L" << escapeSpaces (libraryPaths[i]).replace ("~", "$(HOME)"); return s; } diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.h index b99519ded2..15c85d744d 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.h @@ -189,7 +189,7 @@ public: //============================================================================== String makefileTargetSuffix; bool makefileIsDLL; - StringArray linuxLibs, makefileExtraLinkerFlags; + StringArray linuxLibs, linuxPackages, makefileExtraLinkerFlags; //============================================================================== String msvcTargetSuffix; diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h index 4d5307ebac..3c4255f3db 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectSaver.h @@ -432,8 +432,11 @@ private: out << " #define " << f->symbol << " 1"; else if (value == Project::configFlagDisabled) out << " #define " << f->symbol << " 0"; - else + else if (f->defaultValue.isEmpty()) out << " //#define " << f->symbol; + else + out << " #define " << f->symbol << " " << f->defaultValue; + out << newLine << "#endif" << newLine diff --git a/extras/Projucer/Source/Project/jucer_Module.cpp b/extras/Projucer/Source/Project/jucer_Module.cpp index ff59f9f0f4..5ee67e1dbf 100644 --- a/extras/Projucer/Source/Project/jucer_Module.cpp +++ b/extras/Projucer/Source/Project/jucer_Module.cpp @@ -338,6 +338,7 @@ void LibraryModule::addSettingsForModuleToExporter (ProjectExporter& exporter, P else if (exporter.isLinux()) { parseAndAddLibs (exporter.linuxLibs, moduleInfo.moduleInfo ["linuxLibs"].toString()); + parseAndAddLibs (exporter.linuxPackages, moduleInfo.moduleInfo ["linuxPackages"].toString()); } else if (exporter.isCodeBlocks() && exporter.isWindows()) { diff --git a/extras/Projucer/Source/Project/jucer_Module.h b/extras/Projucer/Source/Project/jucer_Module.h index 49d2037088..3c6c524a83 100644 --- a/extras/Projucer/Source/Project/jucer_Module.h +++ b/extras/Projucer/Source/Project/jucer_Module.h @@ -118,6 +118,7 @@ public: private: mutable Array sourceFiles; + OwnedArray configFlags; void addBrowseableCode (ProjectExporter&, const Array& compiled, const File& localModuleFolder) const; }; diff --git a/extras/Projucer/Source/Project/jucer_Project.h b/extras/Projucer/Source/Project/jucer_Project.h index f923408c8b..f0ac122aab 100644 --- a/extras/Projucer/Source/Project/jucer_Project.h +++ b/extras/Projucer/Source/Project/jucer_Project.h @@ -278,13 +278,14 @@ public: //============================================================================== struct ConfigFlag { - String symbol, description, sourceModuleID; + String symbol, description, sourceModuleID, defaultValue; Value value; // 1 = true, 2 = false, anything else = use default }; static const char* const configFlagDefault; static const char* const configFlagEnabled; static const char* const configFlagDisabled; + Value getConfigFlag (const String& name); bool isConfigFlagEnabled (const String& name) const; diff --git a/extras/Projucer/Source/Utility/jucer_PresetIDs.h b/extras/Projucer/Source/Utility/jucer_PresetIDs.h index f9203f3323..0d60ce1127 100644 --- a/extras/Projucer/Source/Utility/jucer_PresetIDs.h +++ b/extras/Projucer/Source/Utility/jucer_PresetIDs.h @@ -177,6 +177,7 @@ namespace Ids DECLARE_ID (gradleWrapperVersion); DECLARE_ID (gradleToolchain); DECLARE_ID (gradleToolchainVersion); + DECLARE_ID (linuxExtraPkgConfig); DECLARE_ID (font); DECLARE_ID (colour); DECLARE_ID (userNotes); diff --git a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile index 68cd0d738b..99761d265c 100644 --- a/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile +++ b/extras/UnitTestRunner/Builds/LinuxMakefile/Makefile @@ -4,157 +4,169 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := UnitTestRunner - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -lGL -lX11 -lXext -lXinerama -lasound -ldl -lfreetype -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCE_UNIT_TESTS=1 -DJUCER_LINUX_MAKE_6D53C8B4=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags alsa freetype2 libcurl x11 xext xinerama) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -O3 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs alsa freetype2 libcurl x11 xext xinerama) -lGL -ldl -lpthread -lrt TARGET := UnitTestRunner - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_audio_basics_6b797ca1.o \ - $(OBJDIR)/juce_audio_devices_a742c38b.o \ - $(OBJDIR)/juce_audio_formats_5a29c68a.o \ - $(OBJDIR)/juce_audio_processors_dea3173d.o \ - $(OBJDIR)/juce_core_75b14332.o \ - $(OBJDIR)/juce_cryptography_6de2ebff.o \ - $(OBJDIR)/juce_data_structures_72d3da2c.o \ - $(OBJDIR)/juce_events_d2be882c.o \ - $(OBJDIR)/juce_graphics_9c18891e.o \ - $(OBJDIR)/juce_gui_basics_8a6da59c.o \ - $(OBJDIR)/juce_gui_extra_4a026f23.o \ - $(OBJDIR)/juce_opengl_cd70b4c2.o \ - $(OBJDIR)/juce_osc_be4cee16.o \ - $(OBJDIR)/juce_video_f128c512.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o \ + $(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o \ + $(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o \ + $(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o \ + $(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o \ + $(JUCE_OBJDIR)/juce_events_d2be882c.o \ + $(JUCE_OBJDIR)/juce_graphics_9c18891e.o \ + $(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o \ + $(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o \ + $(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o \ + $(JUCE_OBJDIR)/juce_osc_be4cee16.o \ + $(JUCE_OBJDIR)/juce_video_f128c512.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking UnitTestRunner - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors alsa freetype2 libcurl x11 xext xinerama + clean: @echo Cleaning UnitTestRunner @$(CLEANCMD) strip: @echo Stripping UnitTestRunner - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_basics_6b797ca1.o: ../../JuceLibraryCode/juce_audio_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_devices_a742c38b.o: ../../JuceLibraryCode/juce_audio_devices.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_devices.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_formats_5a29c68a.o: ../../JuceLibraryCode/juce_audio_formats.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_formats.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_audio_processors_dea3173d.o: ../../JuceLibraryCode/juce_audio_processors.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_audio_processors.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_cryptography_6de2ebff.o: ../../JuceLibraryCode/juce_cryptography.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_cryptography.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_data_structures_72d3da2c.o: ../../JuceLibraryCode/juce_data_structures.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_data_structures.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_events_d2be882c.o: ../../JuceLibraryCode/juce_events.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_events.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_graphics_9c18891e.o: ../../JuceLibraryCode/juce_graphics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_graphics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_basics_8a6da59c.o: ../../JuceLibraryCode/juce_gui_basics.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_basics.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_gui_extra_4a026f23.o: ../../JuceLibraryCode/juce_gui_extra.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_gui_extra.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_opengl_cd70b4c2.o: ../../JuceLibraryCode/juce_opengl.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_opengl.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_osc_be4cee16.o: ../../JuceLibraryCode/juce_osc.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_osc.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_video_f128c512.o: ../../JuceLibraryCode/juce_video.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_video.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/extras/binarybuilder/Builds/Linux/Makefile b/extras/binarybuilder/Builds/Linux/Makefile index 2e152dae8b..8fd346f614 100644 --- a/extras/binarybuilder/Builds/Linux/Makefile +++ b/extras/binarybuilder/Builds/Linux/Makefile @@ -4,79 +4,91 @@ # (this disables dependency generation if multiple architectures are set) DEPFLAGS := $(if $(word 2, $(TARGET_ARCH)), , -MMD) +ifndef STRIP + STRIP=strip +endif + +ifndef AR + AR=ar +endif + ifndef CONFIG CONFIG=Debug endif ifeq ($(CONFIG),Debug) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Debug - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Debug + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -L/usr/X11R6/lib/ -ldl -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DDEBUG=1 -D_DEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -L/usr/X11R6/lib/ $(shell pkg-config --libs libcurl) -ldl -lpthread -lrt TARGET := BinaryBuilder - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif ifeq ($(CONFIG),Release) - BINDIR := build - LIBDIR := build - OBJDIR := build/intermediate/Release - OUTDIR := build + JUCE_BINDIR := build + JUCE_LIBDIR := build + JUCE_OBJDIR := build/intermediate/Release + JUCE_OUTDIR := build ifeq ($(TARGET_ARCH),) TARGET_ARCH := -march=native endif - CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 -I /usr/include -I /usr/include/freetype2 -I ../../JuceLibraryCode -I ../../../../modules - CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -Os - CXXFLAGS += $(CFLAGS) -std=c++11 - LDFLAGS += $(TARGET_ARCH) -L$(BINDIR) -L$(LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ -ldl -lpthread -lrt + JUCE_CPPFLAGS := $(DEPFLAGS) -DLINUX=1 -DNDEBUG=1 -DJUCER_LINUX_MAKE_7346DA2A=1 -DJUCE_APP_VERSION=1.0.0 -DJUCE_APP_VERSION_HEX=0x10000 $(shell pkg-config --cflags libcurl) -pthread -I../../JuceLibraryCode -I../../../../modules + JUCE_CFLAGS += $(CFLAGS) $(JUCE_CPPFLAGS) $(TARGET_ARCH) -Os + JUCE_CXXFLAGS += $(CXXFLAGS) $(JUCE_CFLAGS) -std=c++11 + JUCE_LDFLAGS += $(LDFLAGS) $(TARGET_ARCH) -L$(JUCE_BINDIR) -L$(JUCE_LIBDIR) -fvisibility=hidden -L/usr/X11R6/lib/ $(shell pkg-config --libs libcurl) -ldl -lpthread -lrt TARGET := BinaryBuilder - BLDCMD = $(CXX) -o $(OUTDIR)/$(TARGET) $(OBJECTS) $(LDFLAGS) $(RESOURCES) $(TARGET_ARCH) - CLEANCMD = rm -rf $(OUTDIR)/$(TARGET) $(OBJDIR) + BLDCMD = $(CXX) -o $(JUCE_OUTDIR)/$(TARGET) $(OBJECTS) $(JUCE_LDFLAGS) $(RESOURCES) $(TARGET_ARCH) + CLEANCMD = rm -rf $(JUCE_OUTDIR)/$(TARGET) $(JUCE_OBJDIR) endif OBJECTS := \ - $(OBJDIR)/Main_90ebc5c2.o \ - $(OBJDIR)/juce_core_75b14332.o \ + $(JUCE_OBJDIR)/Main_90ebc5c2.o \ + $(JUCE_OBJDIR)/juce_core_75b14332.o \ .PHONY: clean -$(OUTDIR)/$(TARGET): $(OBJECTS) $(RESOURCES) +$(JUCE_OUTDIR)/$(TARGET): check-pkg-config $(OBJECTS) $(RESOURCES) @echo Linking BinaryBuilder - -@mkdir -p $(BINDIR) - -@mkdir -p $(LIBDIR) - -@mkdir -p $(OUTDIR) + -@mkdir -p $(JUCE_BINDIR) + -@mkdir -p $(JUCE_LIBDIR) + -@mkdir -p $(JUCE_OUTDIR) @$(BLDCMD) +check-pkg-config: + @command -v pkg-config >/dev/null 2>&1 || { echo >&2 "pkg-config not installed. Please, install it."; exit 1; } + @pkg-config --print-errors libcurl + clean: @echo Cleaning BinaryBuilder @$(CLEANCMD) strip: @echo Stripping BinaryBuilder - -@strip --strip-unneeded $(OUTDIR)/$(TARGET) + -@$(STRIP) --strip-unneeded $(JUCE_OUTDIR)/$(TARGET) -$(OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/Main_90ebc5c2.o: ../../Source/Main.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling Main.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -$(OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp - -@mkdir -p $(OBJDIR) +$(JUCE_OBJDIR)/juce_core_75b14332.o: ../../JuceLibraryCode/juce_core.cpp + -@mkdir -p $(JUCE_OBJDIR) @echo "Compiling juce_core.cpp" - @$(CXX) $(CXXFLAGS) -o "$@" -c "$<" + @$(CXX) $(JUCE_CXXFLAGS) -o "$@" -c "$<" -include $(OBJECTS:%.o=%.d) diff --git a/modules/JUCE Module Format.txt b/modules/JUCE Module Format.txt index 164777db08..28275691bc 100644 --- a/modules/JUCE Module Format.txt +++ b/modules/JUCE Module Format.txt @@ -133,8 +133,10 @@ Possible values: OSXFrameworks: (Optional) A list (space or comma-separated) of OSX frameworks that are needed by this module iOSFrameworks: (Optional) Like OSXFrameworks, but for iOS targets - linuxLibs: (Optional) A list (space or comma-separated) of static libs that should be linked in a + linuxLibs: (Optional) A list (space or comma-separated) of static or dynamic libs that should be linked in a linux build (these are passed to the linker via the -l flag) + linuxPackages: (Optional) A list (space or comma-separated) pkg-config packages that should be used to pass + compiler (CFLAGS) and linker (LDFLAGS) flags mingwLibs: (Optional) A list (space or comma-separated) of static libs that should be linked in a win32 mingw build (these are passed to the linker via the -l flag) diff --git a/modules/juce_audio_devices/juce_audio_devices.h b/modules/juce_audio_devices/juce_audio_devices.h index a342c9cb88..51c4b599e4 100644 --- a/modules/juce_audio_devices/juce_audio_devices.h +++ b/modules/juce_audio_devices/juce_audio_devices.h @@ -42,7 +42,7 @@ dependencies: juce_audio_basics, juce_audio_formats, juce_events OSXFrameworks: CoreAudio CoreMIDI DiscRecording iOSFrameworks: CoreAudio CoreMIDI AudioToolbox AVFoundation - linuxLibs: asound + linuxPackages: alsa mingwLibs: winmm END_JUCE_MODULE_DECLARATION diff --git a/modules/juce_core/juce_core.h b/modules/juce_core/juce_core.h index e27cdc89df..39469a0deb 100644 --- a/modules/juce_core/juce_core.h +++ b/modules/juce_core/juce_core.h @@ -48,6 +48,7 @@ OSXFrameworks: Cocoa IOKit iOSFrameworks: Foundation linuxLibs: rt dl pthread + linuxPackages: libcurl mingwLibs: uuid wsock32 wininet version ole32 ws2_32 oleaut32 imm32 comdlg32 shlwapi rpcrt4 winmm END_JUCE_MODULE_DECLARATION @@ -138,7 +139,7 @@ /** Config: JUCE_USE_CURL Enables http/https support via libcurl (Linux only). Enabling this will add an additional - run-time dynmic dependency to libcurl. + run-time dynamic dependency to libcurl. If you disable this then https/ssl support will not be available on linux. */ diff --git a/modules/juce_events/juce_events.h b/modules/juce_events/juce_events.h index b2e6c5e467..1b1ce2ae5c 100644 --- a/modules/juce_events/juce_events.h +++ b/modules/juce_events/juce_events.h @@ -40,7 +40,7 @@ license: GPL/Commercial dependencies: juce_core - linuxLibs: X11 + linuxPackages: x11 END_JUCE_MODULE_DECLARATION diff --git a/modules/juce_graphics/juce_graphics.h b/modules/juce_graphics/juce_graphics.h index e367bde038..5b60e6cd9a 100644 --- a/modules/juce_graphics/juce_graphics.h +++ b/modules/juce_graphics/juce_graphics.h @@ -42,7 +42,7 @@ dependencies: juce_events OSXFrameworks: Cocoa QuartzCore iOSFrameworks: CoreGraphics CoreText QuartzCore - linuxLibs: X11 Xinerama Xext freetype + linuxPackages: x11 xinerama xext freetype2 END_JUCE_MODULE_DECLARATION diff --git a/modules/juce_gui_basics/juce_gui_basics.h b/modules/juce_gui_basics/juce_gui_basics.h index b0e31ed6ab..f436fa5e27 100644 --- a/modules/juce_gui_basics/juce_gui_basics.h +++ b/modules/juce_gui_basics/juce_gui_basics.h @@ -42,7 +42,7 @@ dependencies: juce_events juce_graphics juce_data_structures OSXFrameworks: Cocoa Carbon QuartzCore iOSFrameworks: UIKit - linuxLibs: X11 Xinerama Xext + linuxPackages: x11 xinerama xext END_JUCE_MODULE_DECLARATION From 332dcac07d8104491b499bae37fd9a43c355f3e6 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 7 Jul 2016 11:10:35 +0100 Subject: [PATCH 008/172] Added a method Range::expanded() --- modules/juce_core/maths/juce_Range.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/modules/juce_core/maths/juce_Range.h b/modules/juce_core/maths/juce_Range.h index 67a4324b95..5f9d409e47 100644 --- a/modules/juce_core/maths/juce_Range.h +++ b/modules/juce_core/maths/juce_Range.h @@ -172,6 +172,15 @@ public: return Range (start, start + newLength); } + /** Returns a range which has its start moved down and its end moved up by the + given amount. + @returns The returned range will be (start - amount, end + amount) + */ + Range expanded (ValueType amount) const noexcept + { + return Range (start - amount, end + amount); + } + //============================================================================== /** Adds an amount to the start and end of the range. */ inline Range operator+= (const ValueType amountToAdd) noexcept From dd245effd2469bb4058be4d65750a85be5fbb1c8 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 14:37:58 +0100 Subject: [PATCH 009/172] Have curl follow re-directions automatically --- modules/juce_core/native/juce_curl_Network.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modules/juce_core/native/juce_curl_Network.cpp b/modules/juce_core/native/juce_curl_Network.cpp index e9f884869e..b06756f5b8 100644 --- a/modules/juce_core/native/juce_curl_Network.cpp +++ b/modules/juce_core/native/juce_curl_Network.cpp @@ -142,7 +142,8 @@ private: && curl_easy_setopt (curl, CURLOPT_WRITEDATA, this) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, StaticCurlWrite) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast (maxRedirects)) == CURLE_OK - && curl_easy_setopt (curl, CURLOPT_USERAGENT, userAgent.toRawUTF8()) == CURLE_OK) + && curl_easy_setopt (curl, CURLOPT_USERAGENT, userAgent.toRawUTF8()) == CURLE_OK + && curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1) == CURLE_OK) { if (isPost) { From b439452edda2118975f2d11e50976f8715187d78 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 7 Jul 2016 15:02:05 +0100 Subject: [PATCH 010/172] Changed the Array::remove() method to return void, and added an Array::removeAndReturn() method to replace the old functionality --- .../Application/jucer_OpenDocumentManager.cpp | 4 ++-- modules/juce_core/containers/juce_Array.h | 22 ++++++++++++++++++- .../juce_core/containers/juce_ListenerList.h | 5 ++--- .../mouse/juce_SelectedItemSet.h | 6 ++--- .../juce_gui_basics/widgets/juce_Toolbar.cpp | 2 +- 5 files changed, 29 insertions(+), 10 deletions(-) diff --git a/extras/Projucer/Source/Application/jucer_OpenDocumentManager.cpp b/extras/Projucer/Source/Application/jucer_OpenDocumentManager.cpp index 81b55af4f3..2c185733a2 100644 --- a/extras/Projucer/Source/Application/jucer_OpenDocumentManager.cpp +++ b/extras/Projucer/Source/Application/jucer_OpenDocumentManager.cpp @@ -333,7 +333,7 @@ OpenDocumentManager::Document* RecentDocumentList::getPrevious() if (! canGoToPrevious()) return nullptr; - nextDocs.insert (0, previousDocs.remove (previousDocs.size() - 1)); + nextDocs.insert (0, previousDocs.removeAndReturn (previousDocs.size() - 1)); return previousDocs.getLast(); } @@ -342,7 +342,7 @@ OpenDocumentManager::Document* RecentDocumentList::getNext() if (! canGoToNext()) return nullptr; - OpenDocumentManager::Document* d = nextDocs.remove (0); + OpenDocumentManager::Document* d = nextDocs.removeAndReturn (0); previousDocs.add (d); return d; } diff --git a/modules/juce_core/containers/juce_Array.h b/modules/juce_core/containers/juce_Array.h index 7b536e26b1..ac121e51f1 100644 --- a/modules/juce_core/containers/juce_Array.h +++ b/modules/juce_core/containers/juce_Array.h @@ -791,6 +791,26 @@ public: } //============================================================================== + /** Removes an element from the array. + + This will remove the element at a given index, and move back + all the subsequent elements to close the gap. + If the index passed in is out-of-range, nothing will happen. + + @param indexToRemove the index of the element to remove + @see removeAndReturn, removeFirstMatchingValue, removeAllInstancesOf, removeRange + */ + void remove (int indexToRemove) + { + const ScopedLockType lock (getLock()); + + if (isPositiveAndBelow (indexToRemove, numUsed)) + { + jassert (data.elements != nullptr); + removeInternal (indexToRemove); + } + } + /** Removes an element from the array. This will remove the element at a given index, and move back @@ -801,7 +821,7 @@ public: @returns the element that has been removed @see removeFirstMatchingValue, removeAllInstancesOf, removeRange */ - ElementType remove (const int indexToRemove) + ElementType removeAndReturn (const int indexToRemove) { const ScopedLockType lock (getLock()); diff --git a/modules/juce_core/containers/juce_ListenerList.h b/modules/juce_core/containers/juce_ListenerList.h index edc08771b7..405ddc8770 100644 --- a/modules/juce_core/containers/juce_ListenerList.h +++ b/modules/juce_core/containers/juce_ListenerList.h @@ -292,10 +292,9 @@ public: /** A dummy bail-out checker that always returns false. See the ListenerList notes for more info about bail-out checkers. */ - class DummyBailOutChecker + struct DummyBailOutChecker { - public: - inline bool shouldBailOut() const noexcept { return false; } + bool shouldBailOut() const noexcept { return false; } }; //============================================================================== diff --git a/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h b/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h index 764191b85c..6535e82956 100644 --- a/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h +++ b/modules/juce_gui_basics/mouse/juce_SelectedItemSet.h @@ -75,7 +75,7 @@ public: for (int i = selectedItems.size(); --i >= 0;) if (! other.isSelected (selectedItems.getReference (i))) - itemDeselected (selectedItems.remove (i)); + itemDeselected (selectedItems.removeAndReturn (i)); for (SelectableItemType* i = other.selectedItems.begin(), *e = other.selectedItems.end(); i != e; ++i) { @@ -235,7 +235,7 @@ public: if (i >= 0) { changed(); - itemDeselected (selectedItems.remove (i)); + itemDeselected (selectedItems.removeAndReturn (i)); } } @@ -248,7 +248,7 @@ public: for (int i = selectedItems.size(); --i >= 0;) { - itemDeselected (selectedItems.remove (i)); + itemDeselected (selectedItems.removeAndReturn (i)); i = jmin (i, selectedItems.size()); } } diff --git a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp index c9362c23b5..9d89ca8e64 100644 --- a/modules/juce_gui_basics/widgets/juce_Toolbar.cpp +++ b/modules/juce_gui_basics/widgets/juce_Toolbar.cpp @@ -178,7 +178,7 @@ public: if (ToolbarItemComponent* const tc = dynamic_cast (getChildComponent (i))) { tc->setVisible (false); - const int index = oldIndexes.remove (i); + const int index = oldIndexes.removeAndReturn (i); owner->addChildComponent (tc, index); --i; } From c6249d2214d0d01ba58d1866cf32f637bccc82d2 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 15:31:14 +0100 Subject: [PATCH 011/172] Clear http headers after redirects --- modules/juce_core/native/juce_curl_Network.cpp | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/juce_core/native/juce_curl_Network.cpp b/modules/juce_core/native/juce_curl_Network.cpp index b06756f5b8..8051ed4a0b 100644 --- a/modules/juce_core/native/juce_curl_Network.cpp +++ b/modules/juce_core/native/juce_curl_Network.cpp @@ -143,7 +143,7 @@ private: && curl_easy_setopt (curl, CURLOPT_WRITEFUNCTION, StaticCurlWrite) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_MAXREDIRS, static_cast (maxRedirects)) == CURLE_OK && curl_easy_setopt (curl, CURLOPT_USERAGENT, userAgent.toRawUTF8()) == CURLE_OK - && curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, 1) == CURLE_OK) + && curl_easy_setopt (curl, CURLOPT_FOLLOWLOCATION, (maxRedirects > 0 ? 1 : 0)) == CURLE_OK) { if (isPost) { @@ -441,10 +441,17 @@ private: size_t len = size * nmemb; - curlHeaders += String (ptr, len); + String header (ptr, len); + + if (! header.contains (":") && header.startsWithIgnoreCase ("HTTP/")) + curlHeaders.clear(); + else + curlHeaders += header; + return len; } + //============================================================================== // Static method wrappers static size_t StaticCurlWrite (char* ptr, size_t size, size_t nmemb, void* userdata) From 0df194d33ea0b47877664409545c5422c433bd76 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 7 Jul 2016 15:53:01 +0100 Subject: [PATCH 012/172] Added method URL::withNewDomainAndPath() --- modules/juce_core/network/juce_URL.cpp | 7 +++++++ modules/juce_core/network/juce_URL.h | 11 ++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/juce_core/network/juce_URL.cpp b/modules/juce_core/network/juce_URL.cpp index 2350e8a135..46b1d3cf04 100644 --- a/modules/juce_core/network/juce_URL.cpp +++ b/modules/juce_core/network/juce_URL.cpp @@ -222,6 +222,13 @@ int URL::getPort() const return colonPos > 0 ? url.substring (colonPos + 1).getIntValue() : 0; } +URL URL::withNewDomainAndPath (const String& newURL) const +{ + URL u (*this); + u.url = newURL; + return u; +} + URL URL::withNewSubPath (const String& newPath) const { const int startOfPath = URLHelpers::findStartOfPath (url); diff --git a/modules/juce_core/network/juce_URL.h b/modules/juce_core/network/juce_URL.h index a2b3cb7657..aa7c154aa1 100644 --- a/modules/juce_core/network/juce_URL.h +++ b/modules/juce_core/network/juce_URL.h @@ -106,10 +106,19 @@ public: */ int getPort() const; - /** Returns a new version of this URL that uses a different sub-path. + /** Returns a new version of this URL with a different domain and path. + + E.g. if the URL is "http://www.xyz.com/foo?x=1" and you call this with + "abc.com/zzz", it'll return "http://abc.com/zzz?x=1". + @see withNewSubPath + */ + URL withNewDomainAndPath (const String& newFullPath) const; + + /** Returns a new version of this URL with a different sub-path. E.g. if the URL is "http://www.xyz.com/foo?x=1" and you call this with "bar", it'll return "http://www.xyz.com/bar?x=1". + @see withNewDomainAndPath */ URL withNewSubPath (const String& newPath) const; From 437cb4e9a4960be332f0e9bf7ae82a1dc559fa1e Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 16:14:32 +0100 Subject: [PATCH 013/172] Only detect which corner is being resized on the first live resize callback --- .../native/juce_mac_NSViewComponentPeer.mm | 37 +++++++++++-------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index a4cea29ef2..a19e2b8bd2 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -75,7 +75,10 @@ public: usingCoreGraphics (false), #endif isZooming (false), + isFirstLiveResize (false), textWasInserted (false), + isStretchingTop (false), isStretchingLeft (false), + isStretchingBottom (false), isStretchingRight (false), notificationCenter (nil) { appFocusChangeCallback = appFocusChanged; @@ -986,7 +989,10 @@ public: void liveResizingStart() { if (constrainer != nullptr) + { constrainer->resizeStart(); + isFirstLiveResize = true; + } } void liveResizingEnd() @@ -1007,26 +1013,26 @@ public: const Rectangle screenBounds (Desktop::getInstance().getDisplays().getTotalBounds (true)); #if defined (MAC_OS_X_VERSION_10_6) && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_6 - if ([window inLiveResize]) + const bool inLiveResize = [window inLiveResize]; #else - if ([window respondsToSelector: @selector (inLiveResize)] - && [window performSelector: @selector (inLiveResize)]) + const bool inLiveResize = [window respondsToSelector: @selector (inLiveResize)] + && [window performSelector: @selector (inLiveResize)]; #endif + + if (! inLiveResize || isFirstLiveResize) { - constrainer->checkBounds (pos, original, screenBounds, - false, false, true, true); - } - else - { - constrainer->checkBounds (pos, original, screenBounds, - pos.getY() != original.getY() && pos.getBottom() == original.getBottom(), - pos.getX() != original.getX() && pos.getRight() == original.getRight(), - pos.getY() == original.getY() && pos.getBottom() != original.getBottom(), - pos.getX() == original.getX() && pos.getRight() != original.getRight()); + isFirstLiveResize = false; + + isStretchingTop = (pos.getY() != original.getY() && pos.getBottom() == original.getBottom()); + isStretchingLeft = (pos.getX() != original.getX() && pos.getRight() == original.getRight()); + isStretchingBottom = (pos.getY() == original.getY() && pos.getBottom() != original.getBottom()); + isStretchingRight = (pos.getX() == original.getX() && pos.getRight() != original.getRight()); } + constrainer->checkBounds (pos, original, screenBounds, + isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight); + pos = ScalingHelpers::scaledScreenPosToUnscaled (scale, pos); - r = flippedScreenRect (makeNSRect (pos)); } @@ -1318,7 +1324,8 @@ public: NSWindow* window; NSView* view; bool isSharedWindow, fullScreen; - bool usingCoreGraphics, isZooming, textWasInserted; + bool usingCoreGraphics, isZooming, isFirstLiveResize, textWasInserted; + bool isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight; String stringBeingComposed; NSNotificationCenter* notificationCenter; From 3791939923a0c4a56782d000c0702042ea2ef6c4 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 16:21:55 +0100 Subject: [PATCH 014/172] Fix unused warning in AU plugin client release build --- modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 86b635e691..7c8d51d3ea 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1495,6 +1495,8 @@ private: for (MidiBuffer::Iterator i (midiEvents); i.getNextEvent (midiEventData, midiEventSize, midiEventPosition);) { jassert (isPositiveAndBelow (midiEventPosition, (int) nFrames)); + ignoreUnused (nFrames); + dataSize += (size_t) midiEventSize; ++numPackets; } From 3ff5ed0f44a2456c28793fb2ec700034c3ab5e74 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 7 Jul 2016 17:41:23 +0100 Subject: [PATCH 015/172] Reject any inconsistent VST-2 channel layout requests --- .../VST/juce_VST_Wrapper.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 7d671525bc..83b1ecf02e 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -938,6 +938,20 @@ public: if (pluginOutput != nullptr && numOuts == 0) return false; + if (pluginInput != nullptr && pluginInput->type >= 0) + { + // inconsistent request? + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginInput).size() != pluginInput->numChannels) + return false; + } + + if (pluginOutput != nullptr && pluginOutput->type >= 0) + { + // inconsistent request? + if (SpeakerMappings::vstArrangementTypeToChannelSet (*pluginOutput).size() != pluginOutput->numChannels) + return false; + } + if (numIns > 1 || numOuts > 1) { int newNumInChannels = (pluginInput != nullptr && pluginInput-> numChannels >= 0) ? pluginInput-> numChannels From a050e0700ba910fe468c4b90df209b75f810952d Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 8 Jul 2016 09:03:50 +0100 Subject: [PATCH 016/172] Fix incorrect parameter id <-> index conversion when hosting AUs --- .../juce_AudioUnitPluginFormat.mm | 33 ++++++++++++------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index 552d4154f3..fce17370dd 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -1080,28 +1080,39 @@ private: void eventCallback (const AudioUnitEvent& event, AudioUnitParameterValue newValue) { + int paramIndex = -1; + + if (event.mEventType == kAudioUnitEvent_ParameterValueChange + || event.mEventType == kAudioUnitEvent_BeginParameterChangeGesture + || event.mEventType == kAudioUnitEvent_EndParameterChangeGesture) + { + for (paramIndex = 0; paramIndex < parameters.size(); ++paramIndex) + { + const ParamInfo& p = *parameters.getUnchecked(paramIndex); + + if (p.paramID == event.mArgument.mParameter.mParameterID) + break; + } + + if (! isPositiveAndBelow (paramIndex, parameters.size())) + return; + } + switch (event.mEventType) { case kAudioUnitEvent_ParameterValueChange: - for (int i = 0; i < parameters.size(); ++i) { - const ParamInfo& p = *parameters.getUnchecked(i); - - if (p.paramID == event.mArgument.mParameter.mParameterID) - { - sendParamChangeMessageToListeners (i, (newValue - p.minValue) / (p.maxValue - p.minValue)); - break; - } + const ParamInfo& p = *parameters.getUnchecked(paramIndex); + sendParamChangeMessageToListeners (paramIndex, (newValue - p.minValue) / (p.maxValue - p.minValue)); } - break; case kAudioUnitEvent_BeginParameterChangeGesture: - beginParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID); + beginParameterChangeGesture (paramIndex); break; case kAudioUnitEvent_EndParameterChangeGesture: - endParameterChangeGesture ((int) event.mArgument.mParameter.mParameterID); + endParameterChangeGesture (paramIndex); break; default: From ab3e628f36885dfb23a65f8254418d8d776c1929 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 8 Jul 2016 12:33:58 +0100 Subject: [PATCH 017/172] Added mouse-up event pressure handling --- modules/juce_gui_basics/components/juce_Component.cpp | 4 ++-- modules/juce_gui_basics/components/juce_Component.h | 2 +- modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_basics/components/juce_Component.cpp b/modules/juce_gui_basics/components/juce_Component.cpp index f96dadccfc..38438b1a73 100644 --- a/modules/juce_gui_basics/components/juce_Component.cpp +++ b/modules/juce_gui_basics/components/juce_Component.cpp @@ -2489,7 +2489,7 @@ void Component::internalMouseDown (MouseInputSource source, Point relativ } void Component::internalMouseUp (MouseInputSource source, Point relativePos, - Time time, const ModifierKeys oldModifiers) + Time time, const ModifierKeys oldModifiers, float pressure) { if (flags.mouseDownWasBlocked && isCurrentlyBlockedByAnotherModalComponent()) return; @@ -2500,7 +2500,7 @@ void Component::internalMouseUp (MouseInputSource source, Point relativeP repaint(); const MouseEvent me (source, relativePos, - oldModifiers, MouseInputSource::invalidPressure, this, this, time, + oldModifiers, pressure, this, this, time, getLocalPoint (nullptr, source.getLastMouseDownPosition()), source.getLastMouseDownTime(), source.getNumberOfMultipleClicks(), diff --git a/modules/juce_gui_basics/components/juce_Component.h b/modules/juce_gui_basics/components/juce_Component.h index 4f7750f42d..3852448e29 100644 --- a/modules/juce_gui_basics/components/juce_Component.h +++ b/modules/juce_gui_basics/components/juce_Component.h @@ -2301,7 +2301,7 @@ private: void internalMouseEnter (MouseInputSource, Point, Time); void internalMouseExit (MouseInputSource, Point, Time); void internalMouseDown (MouseInputSource, Point, Time, float); - void internalMouseUp (MouseInputSource, Point, Time, const ModifierKeys oldModifiers); + void internalMouseUp (MouseInputSource, Point, Time, const ModifierKeys oldModifiers, float); void internalMouseDrag (MouseInputSource, Point, Time, float); void internalMouseMove (MouseInputSource, Point, Time); void internalMouseWheel (MouseInputSource, Point, Time, const MouseWheelDetails&); diff --git a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp index 3f83081a4b..bcc4e8488b 100644 --- a/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp +++ b/modules/juce_gui_basics/mouse/juce_MouseInputSource.cpp @@ -146,7 +146,7 @@ public: void sendMouseUp (Component& comp, Point screenPos, Time time, const ModifierKeys oldMods) { JUCE_MOUSE_EVENT_DBG ("up") - comp.internalMouseUp (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, oldMods); + comp.internalMouseUp (MouseInputSource (this), screenPosToLocalPos (comp, screenPos), time, oldMods, pressure); } void sendMouseWheel (Component& comp, Point screenPos, Time time, const MouseWheelDetails& wheel) From 5e9c2566e3bd65b146e0641c443258710e2c20e7 Mon Sep 17 00:00:00 2001 From: hogliux Date: Sun, 10 Jul 2016 09:29:06 +0100 Subject: [PATCH 018/172] Label attribute of AudioProcessorParamater should be public --- .../utilities/juce_AudioProcessorParameterWithID.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h b/modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h index a1d877a2cb..8fd62d1a98 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorParameterWithID.h @@ -44,9 +44,10 @@ public: /** Provides access to the parameter's name. */ const String name; -private: - String label; + /** Provides access to the parameter's label. */ + const String label; +private: String getName (int) const override; String getLabel() const override; From 872f84dfd96bb63b99981c7a7b3def622079b9e8 Mon Sep 17 00:00:00 2001 From: hogliux Date: Sun, 10 Jul 2016 10:10:20 +0100 Subject: [PATCH 019/172] Check for hash collisions when generating integer parameter ids from parameter id strings --- modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm | 4 ++++ modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm | 5 +++++ modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp | 4 ++++ 3 files changed, 13 insertions(+) diff --git a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm index 7c8d51d3ea..9523cdc3fc 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AU_Wrapper.mm @@ -1578,6 +1578,10 @@ private: { const AudioUnitParameterID auParamID = generateAUParameterIDForIndex (i); + // Consider yourself very unlucky if you hit this assertion. The hash code of your + // parameter ids are not unique. + jassert (! paramMap.contains (static_cast (auParamID))); + auParamIDs.add (auParamID); paramMap.set (static_cast (auParamID), i); diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index baa55f7624..09e5da016d 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -845,6 +845,11 @@ private: AUParameterAddress address = static_cast (idx); #else AUParameterAddress address = generateAUParameterAddressForIndex (idx); + + // Consider yourself very unlucky if you hit this assertion. The hash code of your + // parameter ids are not unique. + jassert (! paramMap.contains (static_cast (address))); + paramAddresses.add (address); paramMap.set (static_cast (address), idx); #endif diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 794f791a38..5bbf38adf4 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -2093,6 +2093,10 @@ private: { const Vst::ParamID paramID = JuceVST3EditController::generateVSTParamIDForIndex (pluginInstance, i); + // Consider yourself very unlucky if you hit this assertion. The hash code of your + // parameter ids are not unique. + jassert (! vstParamIDs.contains (static_cast (paramID))); + vstParamIDs.add (paramID); paramMap.set (static_cast (paramID), i); } From 76007233aee981d8982eca6b1c4444e03a106fc2 Mon Sep 17 00:00:00 2001 From: hogliux Date: Mon, 11 Jul 2016 15:27:35 +0100 Subject: [PATCH 020/172] Correctly account for midi ports in Alsa when listing/opening devices and other ALSA midi cleanups --- .../native/juce_linux_Midi.cpp | 49 +++++++++---------- 1 file changed, 22 insertions(+), 27 deletions(-) diff --git a/modules/juce_audio_devices/native/juce_linux_Midi.cpp b/modules/juce_audio_devices/native/juce_linux_Midi.cpp index 9ec37a64ed..04b9e89e49 100644 --- a/modules/juce_audio_devices/native/juce_linux_Midi.cpp +++ b/modules/juce_audio_devices/native/juce_linux_Midi.cpp @@ -50,6 +50,9 @@ public: { snd_seq_open (&handle, "default", forInput ? SND_SEQ_OPEN_INPUT : SND_SEQ_OPEN_OUTPUT, 0); + + snd_seq_set_client_name (handle, forInput ? JUCE_ALSA_MIDI_INPUT_NAME + : JUCE_ALSA_MIDI_OUTPUT_NAME); } ~AlsaClient() @@ -71,11 +74,6 @@ public: bool isInput() const noexcept { return input; } - void setName (const String& name) - { - snd_seq_set_client_name (handle, name.toUTF8()); - } - void registerCallback (AlsaPortAndCallback* cb) { if (cb != nullptr) @@ -336,19 +334,23 @@ static AlsaPort iterateMidiClient (const AlsaClient::Ptr& seq, && (snd_seq_port_info_get_capability (portInfo) & (forInput ? SND_SEQ_PORT_CAP_READ : SND_SEQ_PORT_CAP_WRITE)) != 0) { - deviceNamesFound.add (snd_seq_client_info_get_name (clientInfo)); + const String clientName = snd_seq_client_info_get_name (clientInfo); + const String portName = snd_seq_port_info_get_name(portInfo); + + if (clientName == portName) + deviceNamesFound.add (clientName); + else + deviceNamesFound.add (clientName + ": " + portName); if (deviceNamesFound.size() == deviceIndexToOpen + 1) { const int sourcePort = snd_seq_port_info_get_port (portInfo); - const int sourceClient = snd_seq_client_info_get_client (clientInfo); if (sourcePort != -1) { - const String name (forInput ? JUCE_ALSA_MIDI_INPUT_NAME - : JUCE_ALSA_MIDI_OUTPUT_NAME); - seq->setName (name); - port.createPort (seq, name, forInput); + const int sourceClient = snd_seq_client_info_get_client (clientInfo); + + port.createPort (seq, portName, forInput); port.connectWith (sourceClient, sourcePort); } } @@ -398,19 +400,6 @@ static AlsaPort iterateMidiDevices (const bool forInput, return port; } -AlsaPort createMidiDevice (const bool forInput, const String& deviceNameToOpen) -{ - AlsaPort port; - AlsaClient::Ptr client (new AlsaClient (forInput)); - - if (client->get()) - { - client->setName (deviceNameToOpen + (forInput ? " Input" : " Output")); - port.createPort (client, forInput ? "in" : "out", forInput); - } - - return port; -} //============================================================================== class MidiOutputDevice @@ -461,7 +450,7 @@ public: numBytes -= numSent; data += numSent; - snd_seq_ev_set_source (&event, 0); + snd_seq_ev_set_source (&event, port.portId); snd_seq_ev_set_subs (&event); snd_seq_ev_set_direct (&event); @@ -518,8 +507,11 @@ MidiOutput* MidiOutput::openDevice (int deviceIndex) MidiOutput* MidiOutput::createNewDevice (const String& deviceName) { MidiOutput* newDevice = nullptr; + AlsaPort port; - AlsaPort port (createMidiDevice (false, deviceName)); + const AlsaClient::Ptr client (globalAlsaSequencer (false)); + + port.createPort (client, deviceName, false); if (port.isValid()) { @@ -595,8 +587,11 @@ MidiInput* MidiInput::openDevice (int deviceIndex, MidiInputCallback* callback) MidiInput* MidiInput::createNewDevice (const String& deviceName, MidiInputCallback* callback) { MidiInput* newDevice = nullptr; + AlsaPort port; - AlsaPort port (createMidiDevice (true, deviceName)); + const AlsaClient::Ptr client (globalAlsaSequencer (true)); + + port.createPort (client, deviceName, true); if (port.isValid()) { From 6039a19b1adc8061c0c2798ecee8ee34b10fcca5 Mon Sep 17 00:00:00 2001 From: hogliux Date: Mon, 11 Jul 2016 16:17:33 +0100 Subject: [PATCH 021/172] Add new line to end of juce_AAX_Modifier_Injector.h --- .../juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h b/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h index db3ae30f6d..9261ec7271 100644 --- a/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h +++ b/modules/juce_audio_plugin_client/AAX/juce_AAX_Modifier_Injector.h @@ -38,4 +38,4 @@ struct ModifierKeyReceiver virtual void removeModifierKeyProvider () = 0; }; -#endif \ No newline at end of file +#endif From ebb60c71d9cef988aa6503fc23cc018d954309c5 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 12 Jul 2016 08:44:58 +0100 Subject: [PATCH 022/172] Add missing new line at end of file --- modules/juce_data_structures/values/juce_CachedValue.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_data_structures/values/juce_CachedValue.cpp b/modules/juce_data_structures/values/juce_CachedValue.cpp index becf90cb9e..5ef3373494 100644 --- a/modules/juce_data_structures/values/juce_CachedValue.cpp +++ b/modules/juce_data_structures/values/juce_CachedValue.cpp @@ -149,4 +149,4 @@ public: static CachedValueTests cachedValueTests; -#endif \ No newline at end of file +#endif From a604c03bd26a79acc7894c4df38ac86645fcef94 Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 12 Jul 2016 09:01:10 +0100 Subject: [PATCH 023/172] Added a definition that's missing in some very obscure win32 setups --- modules/juce_core/native/juce_BasicNativeHeaders.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/modules/juce_core/native/juce_BasicNativeHeaders.h b/modules/juce_core/native/juce_BasicNativeHeaders.h index 5f778827c7..6b05033551 100644 --- a/modules/juce_core/native/juce_BasicNativeHeaders.h +++ b/modules/juce_core/native/juce_BasicNativeHeaders.h @@ -117,6 +117,10 @@ #include #endif + #ifndef S_FALSE + #define S_FALSE (1) // (apparently some obscure win32 dev environments don't define this) + #endif + #undef PACKED #if JUCE_MSVC From 6b8c7208b3fa6ccb52559f49c7301aa6e08b871f Mon Sep 17 00:00:00 2001 From: jules Date: Tue, 12 Jul 2016 09:50:52 +0100 Subject: [PATCH 024/172] Tidied up a few things in the Line class, and added a Line::fromStartAndAngle method --- modules/juce_graphics/geometry/juce_Line.h | 53 +++++++++++++--------- 1 file changed, 32 insertions(+), 21 deletions(-) diff --git a/modules/juce_graphics/geometry/juce_Line.h b/modules/juce_graphics/geometry/juce_Line.h index a6dfadf378..3223f836fd 100644 --- a/modules/juce_graphics/geometry/juce_Line.h +++ b/modules/juce_graphics/geometry/juce_Line.h @@ -50,23 +50,20 @@ public: /** Creates a copy of another line. */ Line (const Line& other) noexcept - : start (other.start), - end (other.end) + : start (other.start), end (other.end) { } /** Creates a line based on the coordinates of its start and end points. */ Line (ValueType startX, ValueType startY, ValueType endX, ValueType endY) noexcept - : start (startX, startY), - end (endX, endY) + : start (startX, startY), end (endX, endY) { } /** Creates a line from its start and end points. */ - Line (const Point startPoint, - const Point endPoint) noexcept - : start (startPoint), - end (endPoint) + Line (Point startPoint, + Point endPoint) noexcept + : start (startPoint), end (endPoint) { } @@ -113,7 +110,7 @@ public: void setEnd (const Point newEnd) noexcept { end = newEnd; } /** Returns a line that is the same as this one, but with the start and end reversed, */ - const Line reversed() const noexcept { return Line (end, start); } + Line reversed() const noexcept { return Line (end, start); } /** Applies an affine transform to the line's start and end points. */ void applyTransform (const AffineTransform& transform) noexcept @@ -142,6 +139,17 @@ public: */ typename Point::FloatType getAngle() const noexcept { return start.getAngleToPoint (end); } + /** Creates a line from a start point, length and angle. + + This angle is the number of radians clockwise from the 12 o'clock direction, + where the line's start point is considered to be at the centre. + */ + static Line fromStartAndAngle (Point startPoint, ValueType length, ValueType angle) noexcept + { + return Line (startPoint, startPoint.getPointOnCircumference (length, angle)); + } + + //============================================================================== /** Casts this line to float coordinates. */ Line toFloat() const noexcept { return Line (start.toFloat(), end.toFloat()); } @@ -150,10 +158,10 @@ public: //============================================================================== /** Compares two lines. */ - bool operator== (const Line& other) const noexcept { return start == other.start && end == other.end; } + bool operator== (Line other) const noexcept { return start == other.start && end == other.end; } /** Compares two lines. */ - bool operator!= (const Line& other) const noexcept { return start != other.start || end != other.end; } + bool operator!= (Line other) const noexcept { return start != other.start || end != other.end; } //============================================================================== /** Finds the intersection between two lines. @@ -161,7 +169,7 @@ public: @param line the line to intersect with @returns the point at which the lines intersect, even if this lies beyond the end of the lines */ - Point getIntersection (const Line& line) const noexcept + Point getIntersection (Line line) const noexcept { Point p; findIntersection (start, end, line.start, line.end, p); @@ -180,13 +188,13 @@ public: don't intersect, the intersection coordinates returned will still be valid */ - bool intersects (const Line& line, Point& intersection) const noexcept + bool intersects (Line line, Point& intersection) const noexcept { return findIntersection (start, end, line.start, line.end, intersection); } /** Returns true if this line intersects another. */ - bool intersects (const Line& other) const noexcept + bool intersects (Line other) const noexcept { Point ignored; return findIntersection (start, end, other.start, other.end, ignored); @@ -257,7 +265,7 @@ public: @returns the point's distance from the line @see getPositionAlongLineOfNearestPoint */ - ValueType getDistanceFromPoint (const Point targetPoint, + ValueType getDistanceFromPoint (Point targetPoint, Point& pointOnLine) const noexcept { const Point delta (end - start); @@ -298,7 +306,7 @@ public: turn this number into a position, use getPointAlongLineProportionally(). @see getDistanceFromPoint, getPointAlongLineProportionally */ - ValueType findNearestProportionalPositionTo (const Point point) const noexcept + ValueType findNearestProportionalPositionTo (Point point) const noexcept { const Point delta (end - start); const double length = delta.x * delta.x + delta.y * delta.y; @@ -312,7 +320,7 @@ public: /** Finds the point on this line which is nearest to a given point. @see getDistanceFromPoint, findNearestProportionalPositionTo */ - Point findNearestPointTo (const Point point) const noexcept + Point findNearestPointTo (Point point) const noexcept { return getPointAlongLineProportionally (findNearestProportionalPositionTo (point)); } @@ -323,7 +331,7 @@ public: coordinate of this line at the given x (assuming the line extends infinitely in both directions). */ - bool isPointAbove (const Point point) const noexcept + bool isPointAbove (Point point) const noexcept { return start.x != end.x && point.y < ((end.y - start.y) @@ -380,19 +388,22 @@ private: intersection = p1.withX (p3.x + along * d2.x); return along >= 0 && along <= static_cast (1); } - else if (d2.y == 0 && d1.y != 0) + + if (d2.y == 0 && d1.y != 0) { const ValueType along = (p3.y - p1.y) / d1.y; intersection = p3.withX (p1.x + along * d1.x); return along >= 0 && along <= static_cast (1); } - else if (d1.x == 0 && d2.x != 0) + + if (d1.x == 0 && d2.x != 0) { const ValueType along = (p1.x - p3.x) / d2.x; intersection = p1.withY (p3.y + along * d2.y); return along >= 0 && along <= static_cast (1); } - else if (d2.x == 0 && d1.x != 0) + + if (d2.x == 0 && d1.x != 0) { const ValueType along = (p3.x - p1.x) / d1.x; intersection = p3.withY (p1.y + along * d1.y); From 8b1b85565440034798f4e0cd8ef79cc88d358e98 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 12 Jul 2016 12:33:36 +0100 Subject: [PATCH 025/172] Throttle repaints when repainting in a plug-in to avoid steppy automation --- .../native/juce_mac_NSViewComponentPeer.mm | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm index a19e2b8bd2..341eb1006f 100644 --- a/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm +++ b/modules/juce_gui_basics/native/juce_mac_NSViewComponentPeer.mm @@ -877,9 +877,16 @@ public: void handleAsyncUpdate() override { + #if JucePlugin_Build_AAX || JucePlugin_Build_RTAS || JucePlugin_Build_AUv3 || JucePlugin_Build_AU || JucePlugin_Build_VST3 || JucePlugin_Build_VST + const bool shouldThrottle = true; + #else + const bool shouldThrottle = areAnyWindowsInLiveResize(); + #endif + // When windows are being resized, artificially throttling high-frequency repaints helps - // to stop the event queue getting clogged, and keeps everything working smoothly - if (areAnyWindowsInLiveResize() + // to stop the event queue getting clogged, and keeps everything working smoothly. + // For some reason Logic also needs this throttling to recored parameter events correctly. + if (shouldThrottle && Time::getCurrentTime() < lastRepaintTime + RelativeTime::milliseconds (1000 / 30)) { triggerAsyncUpdate(); From 70f4b0d5dc7ab3f0d9745b8377cbf3c2a8043157 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 12 Jul 2016 14:29:22 +0100 Subject: [PATCH 026/172] Add more details to the documentation of the setResizable method in the AudioProcessorEditor --- .../processors/juce_AudioProcessorEditor.h | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h index e28de0a348..e6be249be3 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorEditor.h @@ -85,14 +85,22 @@ public: virtual int getControlParameterIndex (Component&); //============================================================================== - /** Make the editor resizable or fixed. + /** Marks the host's editor window as resizable - @param shouldBeResizable whether it's resizable at all + @param allowHostToResize whether the editor's parent window can be resized + by the user or the host. Even if this is false, you + can still resize your window yourself by calling + setBounds (for example, when a user clicks on a button + in your editor to drop out a panel) which will bypass any + resizable/constraints checks. If you are using + your own corner resizer than this will also bypass + any checks. + @param useBottomRightCornerResizer @see setResizeLimits, isResizable */ - void setResizable (bool shouldBeResizable, bool useBottomRightCornerResizer); + void setResizable (bool allowHostToResize, bool useBottomRightCornerResizer); - /** Returns true if resizing is enabled. + /** Returns true if the host is allowed to resize editor's parent window @see setResizable */ From d4933111dbf487d42dcbc8ca87731708f01500c4 Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 13 Jul 2016 11:59:26 +0100 Subject: [PATCH 027/172] Only reopen stdout, stderr, stdin if they haven't already been opened by a redirect And fix a warning along the way --- modules/juce_events/messages/juce_ApplicationBase.cpp | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/modules/juce_events/messages/juce_ApplicationBase.cpp b/modules/juce_events/messages/juce_ApplicationBase.cpp index f130bf4199..72657e02f5 100644 --- a/modules/juce_events/messages/juce_ApplicationBase.cpp +++ b/modules/juce_events/messages/juce_ApplicationBase.cpp @@ -261,9 +261,13 @@ bool JUCEApplicationBase::initialiseApp() if (AttachConsole (ATTACH_PARENT_PROCESS) != 0) { // if we've launched a GUI app from cmd.exe or PowerShell, we need this to enable printf etc. - freopen("CON", "w", stdout); - freopen("CON", "w", stderr); - freopen("CON", "r", stdin); + // However, only reassign stdout, stderr, stdin if they have not been already opened by + // a redirect or similar. + FILE* ignore; + + if (_fileno(stdout) < 0) freopen_s (&ignore, "CONOUT$", "w", stdout); + if (_fileno(stderr) < 0) freopen_s (&ignore, "CONOUT$", "w", stderr); + if (_fileno(stdin) < 0) freopen_s (&ignore, "CONIN$", "r", stdin); } #endif From 97e058bbd2b19557d7c7ed5f99cf62863f5bb2f7 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 14 Jul 2016 09:34:29 +0100 Subject: [PATCH 028/172] Added a couple of proportional Rectangle methods --- .../juce_graphics/geometry/juce_Rectangle.h | 65 ++++++++++++++----- 1 file changed, 47 insertions(+), 18 deletions(-) diff --git a/modules/juce_graphics/geometry/juce_Rectangle.h b/modules/juce_graphics/geometry/juce_Rectangle.h index 8f00a8110e..ddb53d4efa 100644 --- a/modules/juce_graphics/geometry/juce_Rectangle.h +++ b/modules/juce_graphics/geometry/juce_Rectangle.h @@ -538,6 +538,53 @@ public: return r; } + //============================================================================== + /** Returns the nearest point to the specified point that lies within this rectangle. */ + Point getConstrainedPoint (Point point) const noexcept + { + return Point (jlimit (pos.x, pos.x + w, point.x), + jlimit (pos.y, pos.y + h, point.y)); + } + + /** Returns a point within this rectangle, specified as proportional coordinates. + The relative X and Y values should be between 0 and 1, where 0 is the left or + top of this rectangle, and 1 is the right or bottom. (Out-of-bounds values + will return a point outside the rectangle). + */ + template + Point getRelativePoint (FloatType relativeX, FloatType relativeY) const noexcept + { + return Point (pos.x + static_cast (w * relativeX), + pos.y + static_cast (h * relativeY)); + } + + /** Returns a proportion of the width of this rectangle. */ + template + ValueType proportionOfWidth (FloatType proportion) const noexcept + { + return static_cast (w * proportion); + } + + /** Returns a proportion of the height of this rectangle. */ + template + ValueType proportionOfHeight (FloatType proportion) const noexcept + { + return static_cast (h * proportion); + } + + /** Returns a rectangle based on some proportional coordinates relative to this one. + So for example getProportion ({ 0.25f, 0.25f, 0.5f, 0.5f }) would return a rectangle + of half the original size, with the same centre. + */ + template + Rectangle getProportion (Rectangle proportionalRect) const noexcept + { + return Rectangle (pos.x + static_cast (w * proportionalRect.pos.x), + pos.y + static_cast (h * proportionalRect.pos.y), + proportionOfWidth (proportionalRect.w), + proportionOfWidth (proportionalRect.h)); + } + //============================================================================== /** Returns true if the two rectangles are identical. */ bool operator== (const Rectangle& other) const noexcept { return pos == other.pos && w == other.w && h == other.h; } @@ -564,24 +611,6 @@ public: && pos.x + w >= other.pos.x + other.w && pos.y + h >= other.pos.y + other.h; } - /** Returns the nearest point to the specified point that lies within this rectangle. */ - Point getConstrainedPoint (Point point) const noexcept - { - return Point (jlimit (pos.x, pos.x + w, point.x), - jlimit (pos.y, pos.y + h, point.y)); - } - - /** Returns a point within this rectangle, specified as proportional coordinates. - The relative X and Y values should be between 0 and 1, where 0 is the left or - top of this rectangle, and 1 is the right or bottom. (Out-of-bounds values - will return a point outside the rectangle). - */ - Point getRelativePoint (double relativeX, double relativeY) const noexcept - { - return Point (pos.x + static_cast (w * relativeX), - pos.y + static_cast (h * relativeY)); - } - /** Returns true if any part of another rectangle overlaps this one. */ bool intersects (const Rectangle& other) const noexcept { From 9e6988acaabd1f0d6f0451a9595eef5b4512259a Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 14 Jul 2016 09:35:40 +0100 Subject: [PATCH 029/172] For drag-and-drop on win32, prioritised file-drag mode over text-drag mode if both are available --- .../native/juce_win32_Windowing.cpp | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index 264b81bd7e..b86f26de2b 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -1117,14 +1117,6 @@ public: ownerInfo->dragInfo.clear(); - DroppedData textData (dataObject, CF_UNICODETEXT); - - if (SUCCEEDED (textData.error)) - { - ownerInfo->dragInfo.text = String (CharPointer_UTF16 ((const WCHAR*) textData.data), - CharPointer_UTF16 ((const WCHAR*) addBytesToPointer (textData.data, textData.dataSize))); - } - else { DroppedData fileData (dataObject, CF_HDROP); @@ -1137,14 +1129,21 @@ public: ownerInfo->parseFileList (static_cast (names), fileData.dataSize); else ownerInfo->parseFileList (static_cast (names), fileData.dataSize); - } - else - { - return fileData.error; + + return S_OK; } } - return S_OK; + DroppedData textData (dataObject, CF_UNICODETEXT); + + if (SUCCEEDED (textData.error)) + { + ownerInfo->dragInfo.text = String (CharPointer_UTF16 ((const WCHAR*) textData.data), + CharPointer_UTF16 ((const WCHAR*) addBytesToPointer (textData.data, textData.dataSize))); + return S_OK; + } + + return textData.error; } JUCE_DECLARE_NON_COPYABLE (JuceDropTarget) From 05835ecfa1a1da3c6194bbb0cf45a7625102e068 Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 14 Jul 2016 10:05:04 +0100 Subject: [PATCH 030/172] Generate bitcode bundles on iOS --- .../Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h index 632b520fce..c4dcfe36a7 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h @@ -1093,7 +1093,7 @@ public: void getLinkerSettings (const BuildConfiguration& config, StringArray& flags, StringArray& librarySearchPaths) const { if (xcodeIsBundle) - flags.add ("-bundle"); + flags.add (owner.isiOS() ? "-bitcode_bundle" : "-bundle"); const Array& extraLibs = config.isDebug() ? xcodeExtraLibrariesDebug : xcodeExtraLibrariesRelease; From 49989308b71822a2835a17db8fece102e57e9bf8 Mon Sep 17 00:00:00 2001 From: jules Date: Thu, 14 Jul 2016 10:05:50 +0100 Subject: [PATCH 031/172] Added expiry time support to the juce_tracktion_marketplace module --- .../marketplace/juce_KeyFileGeneration.h | 16 +++ .../marketplace/juce_OnlineUnlockForm.cpp | 4 +- .../marketplace/juce_OnlineUnlockStatus.cpp | 121 ++++++++++++++---- .../marketplace/juce_OnlineUnlockStatus.h | 11 +- 4 files changed, 124 insertions(+), 28 deletions(-) diff --git a/modules/juce_tracktion_marketplace/marketplace/juce_KeyFileGeneration.h b/modules/juce_tracktion_marketplace/marketplace/juce_KeyFileGeneration.h index aab19a9a6b..0178a4ad53 100644 --- a/modules/juce_tracktion_marketplace/marketplace/juce_KeyFileGeneration.h +++ b/modules/juce_tracktion_marketplace/marketplace/juce_KeyFileGeneration.h @@ -51,6 +51,22 @@ public: const String& machineNumbers, const RSAKey& privateKey); + /** Similar to the above key file generation method but with an expiry time. + You must supply a Time after which this key file should no longer be considered as active. + + N.B. when an app is unlocked with an expiring key file, OnlineUnlockStatus::isUnlocked will + still return false. You must then check OnlineUnlockStatus::getExpiryTime to see if this + expiring key file is still in date and act accordingly. + + @see OnlineUnlockStatus + */ + static String JUCE_CALLTYPE generateExpiringKeyFile (const String& appName, + const String& userEmail, + const String& userName, + const String& machineNumbers, + const Time expiryTime, + const RSAKey& privateKey); + //============================================================================== /** This is a simple implementation of a key-generator that you could easily wrap in a command-line main() function for use on your server. diff --git a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockForm.cpp b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockForm.cpp index 8ef5920bc0..9c6b43641b 100644 --- a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockForm.cpp +++ b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockForm.cpp @@ -207,12 +207,12 @@ void OnlineUnlockForm::resized() passwordBox.setInputRestrictions (64); passwordBox.setFont (font); - r.removeFromBottom (30); + r.removeFromBottom (20); emailBox.setBounds (r.removeFromBottom (boxHeight)); emailBox.setInputRestrictions (512); emailBox.setFont (font); - r.removeFromBottom (30); + r.removeFromBottom (20); message.setBounds (r); diff --git a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp index 739da1f653..e7a7cfa384 100644 --- a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp +++ b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp @@ -29,6 +29,42 @@ struct KeyFileUtils { + static XmlElement createKeyFileContent (const String& appName, + const String& userEmail, + const String& userName, + const String& machineNumbers, + const String& machineNumbersAttributeName) + { + XmlElement xml ("key"); + + xml.setAttribute ("user", userName); + xml.setAttribute ("email", userEmail); + xml.setAttribute (machineNumbersAttributeName, machineNumbers); + xml.setAttribute ("app", appName); + xml.setAttribute ("date", String::toHexString (Time::getCurrentTime().toMilliseconds())); + + return xml; + } + + static String createKeyFileComment (const String& appName, + const String& userEmail, + const String& userName, + const String& machineNumbers) + { + String comment; + comment << "Keyfile for " << appName << newLine; + + if (userName.isNotEmpty()) + comment << "User: " << userName << newLine; + + comment << "Email: " << userEmail << newLine + << "Machine numbers: " << machineNumbers << newLine + << "Created: " << Time::getCurrentTime().toString (true, true); + + return comment; + } + + //============================================================================== static String encryptXML (const XmlElement& xml, RSAKey privateKey) { MemoryOutputStream text; @@ -93,10 +129,10 @@ struct KeyFileUtils return decryptXML (keyFileText.fromLastOccurrenceOf ("#", false, false).trim(), rsaPublicKey); } - static StringArray getMachineNumbers (XmlElement xml) + static StringArray getMachineNumbers (XmlElement xml, StringRef attributeName) { StringArray numbers; - numbers.addTokens (xml.getStringAttribute ("mach"), ",; ", StringRef()); + numbers.addTokens (xml.getStringAttribute (attributeName), ",; ", StringRef()); numbers.trim(); numbers.removeEmptyStrings(); return numbers; @@ -110,6 +146,9 @@ struct KeyFileUtils { String licensee, email, appID; StringArray machineNumbers; + + bool keyFileExpires; + Time expiryTime; }; static KeyFileData getDataFromKeyFile (XmlElement xml) @@ -119,7 +158,18 @@ struct KeyFileUtils data.licensee = getLicensee (xml); data.email = getEmail (xml); data.appID = getAppID (xml); - data.machineNumbers.addArray (getMachineNumbers (xml)); + + if (xml.hasAttribute ("expiryTime") && xml.hasAttribute ("expiring_mach")) + { + data.keyFileExpires = true; + data.machineNumbers.addArray (getMachineNumbers (xml, "expiring_mach")); + data.expiryTime = Time (xml.getStringAttribute ("expiryTime").getHexValue64()); + } + else + { + data.keyFileExpires = false; + data.machineNumbers.addArray (getMachineNumbers (xml, "mach")); + } return data; } @@ -127,6 +177,7 @@ struct KeyFileUtils //============================================================================== const char* OnlineUnlockStatus::unlockedProp = "u"; +const char* OnlineUnlockStatus::expiryTimeProp = "t"; static const char* stateTagName = "REG"; static const char* userNameProp = "user"; static const char* keyfileDataProp = "key"; @@ -183,11 +234,22 @@ void OnlineUnlockStatus::load() KeyFileUtils::KeyFileData data; data = KeyFileUtils::getDataFromKeyFile (KeyFileUtils::getXmlFromKeyFile (status[keyfileDataProp], getPublicKey())); - if (! doesProductIDMatch (data.appID)) - status.removeProperty (unlockedProp, nullptr); + if (data.keyFileExpires) + { + if (! doesProductIDMatch (data.appID)) + status.removeProperty (expiryTimeProp, nullptr); - if (! machineNumberAllowed (data.machineNumbers, localMachineNums)) - status.removeProperty (unlockedProp, nullptr); + if (! machineNumberAllowed (data.machineNumbers, localMachineNums)) + status.removeProperty (expiryTimeProp, nullptr); + } + else + { + if (! doesProductIDMatch (data.appID)) + status.removeProperty (unlockedProp, nullptr); + + if (! machineNumberAllowed (data.machineNumbers, localMachineNums)) + status.removeProperty (unlockedProp, nullptr); + } } void OnlineUnlockStatus::save() @@ -289,7 +351,7 @@ bool OnlineUnlockStatus::applyKeyFile (String keyFileContent) { setUserEmail (data.email); status.setProperty (keyfileDataProp, keyFileContent, nullptr); - status.removeProperty (unlockedProp, nullptr); + status.removeProperty (data.keyFileExpires ? expiryTimeProp : unlockedProp, nullptr); var actualResult (0), dummyResult (1.0); var v (machineNumberAllowed (data.machineNumbers, getLocalMachineIDs())); @@ -298,6 +360,14 @@ bool OnlineUnlockStatus::applyKeyFile (String keyFileContent) dummyResult.swapWith (v); jassert (! dummyResult); + if (data.keyFileExpires) + { + if ((! dummyResult) && actualResult) + status.setProperty (expiryTimeProp, data.expiryTime.toMilliseconds(), nullptr); + + return getExpiryTime().toMilliseconds() > 0; + } + if ((! dummyResult) && actualResult) status.setProperty (unlockedProp, actualResult, nullptr); @@ -395,23 +465,24 @@ String KeyGeneration::generateKeyFile (const String& appName, const String& machineNumbers, const RSAKey& privateKey) { - XmlElement xml ("key"); - - xml.setAttribute ("user", userName); - xml.setAttribute ("email", userEmail); - xml.setAttribute ("mach", machineNumbers); - xml.setAttribute ("app", appName); - xml.setAttribute ("date", String::toHexString (Time::getCurrentTime().toMilliseconds())); - - String comment; - comment << "Keyfile for " << appName << newLine; - - if (userName.isNotEmpty()) - comment << "User: " << userName << newLine; - - comment << "Email: " << userEmail << newLine - << "Machine numbers: " << machineNumbers << newLine - << "Created: " << Time::getCurrentTime().toString (true, true); + XmlElement xml (KeyFileUtils::createKeyFileContent (appName, userEmail, userName, machineNumbers, "mach")); + const String comment (KeyFileUtils::createKeyFileComment (appName, userEmail, userName, machineNumbers)); + + return KeyFileUtils::createKeyFile (comment, xml, privateKey); +} + +String KeyGeneration::generateExpiringKeyFile (const String& appName, + const String& userEmail, + const String& userName, + const String& machineNumbers, + const Time expiryTime, + const RSAKey& privateKey) +{ + XmlElement xml (KeyFileUtils::createKeyFileContent (appName, userEmail, userName, machineNumbers, "expiring_mach")); + xml.setAttribute ("expiryTime", String::toHexString (expiryTime.toMilliseconds())); + + String comment (KeyFileUtils::createKeyFileComment (appName, userEmail, userName, machineNumbers)); + comment << "Expires: " << expiryTime.toString (true, true); return KeyFileUtils::createKeyFile (comment, xml, privateKey); } diff --git a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.h b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.h index 2bf8193642..18efa9f397 100644 --- a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.h +++ b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.h @@ -126,7 +126,15 @@ public: changed by a cracker in order to unlock your app, so the more places you call this method, the more hassle it will be for them to find and crack them all. */ - inline var isUnlocked() const { return status[unlockedProp]; } + inline var isUnlocked() const { return status[unlockedProp]; } + + /** Returns the Time when the keyfile expires. + + If a the key file obtained has an expiry time, isUnlocked will return false and this + will return a non-zero time. The interpretation of this is up to your app but could + be used for subscription based models or trial periods. + */ + inline Time getExpiryTime() const { return Time (static_cast (status[expiryTimeProp])); } /** Optionally allows the app to provide the user's email address if it is known. @@ -244,6 +252,7 @@ private: UnlockResult handleFailedConnection(); static const char* unlockedProp; + static const char* expiryTimeProp; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (OnlineUnlockStatus) }; From a8a7fa28e2e9cb19db6a27fcccb567a8ccfe6109 Mon Sep 17 00:00:00 2001 From: jules Date: Fri, 15 Jul 2016 11:36:18 +0100 Subject: [PATCH 032/172] Added a missing newline in the juce_tracktion_marketplace keygen --- .../marketplace/juce_OnlineUnlockStatus.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp index e7a7cfa384..0c12a6ab03 100644 --- a/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp +++ b/modules/juce_tracktion_marketplace/marketplace/juce_OnlineUnlockStatus.cpp @@ -482,7 +482,7 @@ String KeyGeneration::generateExpiringKeyFile (const String& appName, xml.setAttribute ("expiryTime", String::toHexString (expiryTime.toMilliseconds())); String comment (KeyFileUtils::createKeyFileComment (appName, userEmail, userName, machineNumbers)); - comment << "Expires: " << expiryTime.toString (true, true); + comment << newLine << "Expires: " << expiryTime.toString (true, true); return KeyFileUtils::createKeyFile (comment, xml, privateKey); } From ca62e560f38b8c5b0e5b48567853895fc5fcde1b Mon Sep 17 00:00:00 2001 From: hogliux Date: Sat, 16 Jul 2016 16:13:54 +0200 Subject: [PATCH 033/172] Revert support for hosting your own VST bundles on iOS --- .../jucer_ProjectExport_XCode.h | 2 +- .../VST/juce_VST_Wrapper.cpp | 35 +++-------- .../format/juce_AudioPluginFormatManager.cpp | 4 +- .../format_types/juce_VSTPluginFormat.cpp | 58 ++++--------------- .../format_types/juce_VSTPluginFormat.h | 2 +- .../scanning/juce_PluginListComponent.cpp | 2 - 6 files changed, 22 insertions(+), 81 deletions(-) diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h index c4dcfe36a7..03ce09297f 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_XCode.h @@ -124,7 +124,7 @@ public: bool isOSX() const override { return ! iOS; } bool isiOS() const override { return iOS; } - bool supportsVST() const override { return true; } + bool supportsVST() const override { return ! iOS; } bool supportsVST3() const override { return ! iOS; } bool supportsAAX() const override { return ! iOS; } bool supportsRTAS() const override { return ! iOS; } diff --git a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp index 83b1ecf02e..0d045bb51a 100644 --- a/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST/juce_VST_Wrapper.cpp @@ -270,13 +270,11 @@ public: firstProcessCallback (true), shouldDeleteEditor (false), #if JUCE_64BIT - useNSView (true) + useNSView (true), #else - useNSView (false) - #endif - #if ! JUCE_IOS - , hostWindow (0) + useNSView (false), #endif + hostWindow (0) { busUtils.init(); @@ -343,9 +341,7 @@ public: delete filter; filter = nullptr; - #if ! JUCE_IOS jassert (editorComp == 0); - #endif deleteTempChannels(); @@ -1347,7 +1343,6 @@ public: void createEditorComp() { - #if ! JUCE_IOS if (hasShutdown || filter == nullptr) return; @@ -1366,16 +1361,12 @@ public: cEffect.flags &= ~effFlagsHasEditor; } } - #endif shouldDeleteEditor = false; } void deleteEditor (bool canDeleteLaterIfModal) { - #if JUCE_IOS - ignoreUnused (canDeleteLaterIfModal); - #else JUCE_AUTORELEASEPOOL { PopupMenu::dismissAllActiveMenus(); @@ -1417,7 +1408,6 @@ public: hostWindow = 0; #endif } - #endif } VstIntPtr dispatcher (VstInt32 opCode, VstInt32 index, VstIntPtr value, void* ptr, float opt) override @@ -1425,7 +1415,6 @@ public: if (hasShutdown) return 0; - #if ! JUCE_IOS if (opCode == effEditIdle) { doIdleCallback(); @@ -1455,7 +1444,7 @@ public: hostWindow = (Window) ptr; Window editorWnd = (Window) editorComp->getWindowHandle(); XReparentWindow (display, editorWnd, hostWindow, 0, 0); - #elif JUCE_MAC + #else hostWindow = attachComponentToWindowRefVST (editorComp, ptr, useNSView); #endif editorComp->setVisible (true); @@ -1490,11 +1479,10 @@ public: return 0; } - #endif + return AudioEffectX::dispatcher (opCode, index, value, ptr, opt); } - #if ! JUCE_IOS void resizeHostWindow (int newWidth, int newHeight) { if (editorComp != nullptr) @@ -1683,7 +1671,6 @@ public: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (EditorCompWrapper) }; - #endif //============================================================================== private: @@ -1691,10 +1678,8 @@ private: PluginBusUtilities busUtils; juce::MemoryBlock chunkMemory; juce::uint32 chunkMemoryTime; - #if ! JUCE_IOS ScopedPointer editorComp; ERect editorSize; - #endif MidiBuffer midiEvents; VSTMidiEventList outgoingEvents; bool isProcessing, isBypassed, hasShutdown, isInSizeWindow, firstProcessCallback; @@ -1707,7 +1692,7 @@ private: void* hostWindow; #elif JUCE_LINUX Window hostWindow; - #elif JUCE_WINDOWS + #else HWND hostWindow; #endif @@ -2001,17 +1986,14 @@ namespace //============================================================================== // Mac startup code.. -#if JUCE_MAC || JUCE_IOS +#if JUCE_MAC JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster); JUCE_EXPORTED_FUNCTION AEffect* VSTPluginMain (audioMasterCallback audioMaster) { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - #if JUCE_MAC initialiseMacVST(); - #endif - return pluginEntryPoint (audioMaster); } @@ -2020,10 +2002,7 @@ namespace { PluginHostType::jucePlugInClientCurrentWrapperType = AudioProcessor::wrapperType_VST; - #if JUCE_MAC initialiseMacVST(); - #endif - return pluginEntryPoint (audioMaster); } diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp index a6f8f1e3b2..1235e0608b 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp @@ -65,7 +65,7 @@ void AudioPluginFormatManager::addDefaultFormats() // you should only call this method once! for (int i = formats.size(); --i >= 0;) { - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) jassert (dynamic_cast (formats[i]) == nullptr); #endif @@ -87,7 +87,7 @@ void AudioPluginFormatManager::addDefaultFormats() formats.add (new AudioUnitPluginFormat()); #endif - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) formats.add (new VSTPluginFormat()); #endif diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index 46adb5c00b..74700d03d5 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -22,7 +22,7 @@ ============================================================================== */ -#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) +#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) //============================================================================== #if JUCE_MAC && JUCE_SUPPORT_CARBON @@ -165,7 +165,7 @@ namespace { #if JUCE_WINDOWS return timeGetTime() * 1000000.0; - #elif JUCE_LINUX || JUCE_IOS + #elif JUCE_LINUX timeval micro; gettimeofday (µ, 0); return micro.tv_usec * 1000.0; @@ -378,7 +378,7 @@ public: { getActiveModules().add (this); - #if JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS + #if JUCE_WINDOWS || JUCE_LINUX fullParentDirectoryPathName = f.getParentDirectory().getFullPathName(); #elif JUCE_MAC FSRef ref; @@ -394,12 +394,9 @@ public: } //============================================================================== - #if ! JUCE_MAC - String fullParentDirectoryPathName; - #endif - - #if JUCE_WINDOWS || JUCE_LINUX +#if JUCE_WINDOWS || JUCE_LINUX DynamicLibrary module; + String fullParentDirectoryPathName; bool open() { @@ -463,14 +460,11 @@ public: return String(); } #endif - #else +#else Handle resHandle; CFBundleRef bundleRef; - - #if JUCE_MAC - CFBundleRefNum resFileId; FSSpec parentDirFSSpec; - #endif + ResFileRefNum resFileId; bool open() { @@ -516,18 +510,13 @@ public: if (pluginName.isEmpty()) pluginName = file.getFileNameWithoutExtension(); - #if JUCE_MAC resFileId = CFBundleOpenBundleResourceMap (bundleRef); - #endif ok = true; Array vstXmlFiles; - file - #if JUCE_MAC - .getChildFile ("Contents") + file.getChildFile ("Contents") .getChildFile ("Resources") - #endif .findChildFiles (vstXmlFiles, File::findFiles, false, "*.vstxml"); if (vstXmlFiles.size() > 0) @@ -552,9 +541,7 @@ public: { if (bundleRef != 0) { - #if JUCE_MAC CFBundleCloseBundleResourceMap (bundleRef, resFileId); - #endif if (CFGetRetainCount (bundleRef) == 1) CFBundleUnloadExecutable (bundleRef); @@ -569,7 +556,7 @@ public: eff->dispatcher (eff, effClose, 0, 0, 0, 0); } - #endif +#endif private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle) @@ -888,12 +875,7 @@ public: } //============================================================================== - #if JUCE_IOS - bool hasEditor() const override { return false; } - #else bool hasEditor() const override { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; } - #endif - AudioProcessorEditor* createEditor() override; //============================================================================== @@ -1824,7 +1806,6 @@ private: }; //============================================================================== -#if ! JUCE_IOS class VSTPluginWindow; static Array activeVSTWindows; @@ -2563,7 +2544,7 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow) }; -#endif + #if JUCE_MSVC #pragma warning (pop) #endif @@ -2571,12 +2552,8 @@ private: //============================================================================== AudioProcessorEditor* VSTPluginInstance::createEditor() { - #if JUCE_IOS - return nullptr; - #else return hasEditor() ? new VSTPluginWindow (*this) : nullptr; - #endif } //============================================================================== @@ -2713,7 +2690,7 @@ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdenti { const File f (File::createFileWithoutCheckingPath (fileOrIdentifier)); - #if JUCE_MAC || JUCE_IOS + #if JUCE_MAC return f.isDirectory() && f.hasFileExtension (".vst"); #elif JUCE_WINDOWS return f.existsAsFile() && f.hasFileExtension (".dll"); @@ -2788,19 +2765,6 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() paths.add (WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\Software\\VST\\VSTPluginsPath", programFiles + "\\VstPlugins")); return paths; - #elif JUCE_IOS - // on iOS you can only load plug-ins inside the hosts bundle folder - CFURLRef relativePluginDir = CFBundleCopyBuiltInPlugInsURL (CFBundleGetMainBundle()); - CFURLRef pluginDir = CFURLCopyAbsoluteURL (relativePluginDir); - CFRelease (relativePluginDir); - - CFStringRef path = CFURLCopyFileSystemPath (pluginDir, kCFURLPOSIXPathStyle); - CFRelease (pluginDir); - - FileSearchPath retval (String (CFStringGetCStringPtr (path, kCFStringEncodingUTF8))); - CFRelease (path); - - return retval; #endif } diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index 02f4a57f57..f81fa5dd37 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -22,7 +22,7 @@ ============================================================================== */ -#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)) || DOXYGEN +#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)) || DOXYGEN //============================================================================== /** diff --git a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp index a321a5da30..37adaa376c 100644 --- a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp +++ b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp @@ -348,10 +348,8 @@ public: if (path.getNumPaths() > 0) // if the path is empty, then paths aren't used for this format. { - #if ! JUCE_IOS if (propertiesToUse != nullptr) path = getLastSearchPath (*propertiesToUse, formatToScan); - #endif pathList.setSize (500, 300); pathList.setPath (path); From e5f306e1d1e6ac373b67ea1bbe901d33e32503e1 Mon Sep 17 00:00:00 2001 From: hogliux Date: Sat, 16 Jul 2016 18:18:57 +0200 Subject: [PATCH 034/172] Fix bad property id when registering AU event listener --- .../format_types/juce_AudioUnitPluginFormat.mm | 1 - 1 file changed, 1 deletion(-) diff --git a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm index fce17370dd..5e47638253 100644 --- a/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm +++ b/modules/juce_audio_processors/format_types/juce_AudioUnitPluginFormat.mm @@ -1072,7 +1072,6 @@ private: event.mEventType = kAudioUnitEvent_PropertyChange; event.mArgument.mProperty.mPropertyID = type; event.mArgument.mProperty.mAudioUnit = audioUnit; - event.mArgument.mProperty.mPropertyID = kAudioUnitProperty_PresentPreset; event.mArgument.mProperty.mScope = kAudioUnitScope_Global; event.mArgument.mProperty.mElement = 0; AUEventListenerAddEventType (eventListenerRef, nullptr, &event); From 88803f6378ac00cfc2367d6a9aa5d1121ee5bfb4 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 19 Jul 2016 10:24:48 +0100 Subject: [PATCH 035/172] Don't call methods that require modal loops in Standalone filter windows --- .../Standalone/juce_StandaloneFilterWindow.h | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h index d1f3ea0326..6ee1b21303 100644 --- a/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h +++ b/modules/juce_audio_plugin_client/Standalone/juce_StandaloneFilterWindow.h @@ -133,6 +133,7 @@ public: /** Pops up a dialog letting the user save the processor's state to a file. */ void askUserToSaveState (const String& fileSuffix = String()) { + #if JUCE_MODAL_LOOPS_PERMITTED FileChooser fc (TRANS("Save current state"), getLastFile(), getFilePatterns (fileSuffix)); if (fc.browseForFileToSave (true)) @@ -147,11 +148,15 @@ public: TRANS("Error whilst saving"), TRANS("Couldn't write to the specified file!")); } + #else + ignoreUnused (fileSuffix); + #endif } /** Pops up a dialog letting the user re-load the processor's state from a file. */ void askUserToLoadState (const String& fileSuffix = String()) { + #if JUCE_MODAL_LOOPS_PERMITTED FileChooser fc (TRANS("Load a saved state"), getLastFile(), getFilePatterns (fileSuffix)); if (fc.browseForFileToOpen()) @@ -167,6 +172,9 @@ public: TRANS("Error whilst loading"), TRANS("Couldn't read from the specified file!")); } + #else + ignoreUnused (fileSuffix); + #endif } //============================================================================== From 69cd509e4c470135f46fbc01f60003b6c5e959aa Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 19 Jul 2016 11:03:43 +0100 Subject: [PATCH 036/172] Add missing getNumSteps override to AudioProcessorValueTree parameters --- .../utilities/juce_AudioProcessorValueTreeState.cpp | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp index 1cbbadd92c..a1ac8f948b 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp @@ -66,6 +66,14 @@ struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParamete : AudioProcessorParameter::getText (v, length); } + int getNumSteps () const override + { + if (range.interval > 0) + return (((range.end - range.start) / range.interval) + 1); + else + return AudioProcessor::getDefaultNumParameterSteps (); + } + void setValue (float newValue) override { newValue = range.snapToLegalValue (range.convertFrom0to1 (newValue)); From 142ce5eb84c1c26356022d03c04fc67735cc3a89 Mon Sep 17 00:00:00 2001 From: hogliux Date: Tue, 19 Jul 2016 16:15:41 +0100 Subject: [PATCH 037/172] Fix a typo in the previous commit --- .../utilities/juce_AudioProcessorValueTreeState.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp index a1ac8f948b..d194d5ad10 100644 --- a/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp +++ b/modules/juce_audio_processors/utilities/juce_AudioProcessorValueTreeState.cpp @@ -69,7 +69,7 @@ struct AudioProcessorValueTreeState::Parameter : public AudioProcessorParamete int getNumSteps () const override { if (range.interval > 0) - return (((range.end - range.start) / range.interval) + 1); + return (static_cast ((range.end - range.start) / range.interval) + 1); else return AudioProcessor::getDefaultNumParameterSteps (); } From 035f8650997a656b8c092166e97b9e2ef8ea6515 Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 20 Jul 2016 17:04:55 +0100 Subject: [PATCH 038/172] Fix steppy scrolling if the content component of a viewport was transformed --- modules/juce_gui_basics/layout/juce_Viewport.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/layout/juce_Viewport.cpp b/modules/juce_gui_basics/layout/juce_Viewport.cpp index bc8a8c92d0..edb0ba2503 100644 --- a/modules/juce_gui_basics/layout/juce_Viewport.cpp +++ b/modules/juce_gui_basics/layout/juce_Viewport.cpp @@ -110,8 +110,13 @@ int Viewport::getMaximumVisibleHeight() const { return contentHolder.getHeight Point Viewport::viewportPosToCompPos (Point pos) const { jassert (contentComp != nullptr); - return Point (jmax (jmin (0, contentHolder.getWidth() - contentComp->getWidth()), jmin (0, -(pos.x))), - jmax (jmin (0, contentHolder.getHeight() - contentComp->getHeight()), jmin (0, -(pos.y)))); + + Rectangle contentBounds = contentHolder.getLocalArea (contentComp, contentComp->getLocalBounds()); + Point p (jmax (jmin (0, contentHolder.getWidth() - contentBounds.getWidth()), jmin (0, -(pos.x))), + jmax (jmin (0, contentHolder.getHeight() - contentBounds.getHeight()), jmin (0, -(pos.y)))); + + + return p.transformedBy (contentComp->getTransform().inverted()); } void Viewport::setViewPosition (const int xPixelsOffset, const int yPixelsOffset) From cdf899c47e34ba6dfcf786ab627caafc1403150e Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 20 Jul 2016 18:06:53 +0100 Subject: [PATCH 039/172] Don't keep on showing the auto-updater dialog box if the user clicks cancel --- .../Source/Application/jucer_AutoUpdater.cpp | 23 +++++++++++++++---- .../Source/Application/jucer_AutoUpdater.h | 4 ++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp b/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp index 455efdfa2a..72d4270e37 100644 --- a/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp +++ b/extras/Projucer/Source/Application/jucer_AutoUpdater.cpp @@ -642,7 +642,7 @@ void LatestVersionChecker::checkForNewVersion() startTimer (100); } - void LatestVersionChecker::processResult (var reply, const String& downloadPath) + bool LatestVersionChecker::processResult (var reply, const String& downloadPath) { if (statusCode == 303) { @@ -657,7 +657,7 @@ void LatestVersionChecker::checkForNewVersion() String extraHeaders; URL newVersionToDownload = getLatestVersionURL (extraHeaders, downloadPath); - askUserAboutNewVersion (version, releaseNotes, newVersionToDownload, extraHeaders); + return askUserAboutNewVersion (version, releaseNotes, newVersionToDownload, extraHeaders); } } } @@ -677,12 +677,17 @@ void LatestVersionChecker::checkForNewVersion() AlertWindow::showMessageBox (AlertWindow::WarningIcon, TRANS("JUCE Updater"), message); + + return false; } } } + + // try again + return true; } -void LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::JuceVersionTriple& version, +bool LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::JuceVersionTriple& version, const String& releaseNotes, URL& newVersionToDownload, const String& extraHeaders) @@ -715,7 +720,11 @@ void LatestVersionChecker::askUserAboutNewVersion (const LatestVersionChecker::J if (ModalComponentManager* mm = ModalComponentManager::getInstance()) mm->attachCallback (modalDialog, callback); } + + return false; } + + return true; } void LatestVersionChecker::modalStateFinished (int result, @@ -723,6 +732,7 @@ void LatestVersionChecker::modalStateFinished (int result, const String& extraHeaders, File appParentFolder) { + if (result == 1 || result == 2) { if (result == 1 || ! allowCustomLocation()) @@ -800,11 +810,14 @@ void LatestVersionChecker::timerCallback() if (hasAttemptedToReadWebsite) { + bool restartTimer = true; if (jsonReply.isObject()) - processResult (jsonReply, newRelativeDownloadPath); + restartTimer = processResult (jsonReply, newRelativeDownloadPath); hasAttemptedToReadWebsite = false; - startTimer (7200000); + + if (restartTimer) + startTimer (7200000); } else { diff --git a/extras/Projucer/Source/Application/jucer_AutoUpdater.h b/extras/Projucer/Source/Application/jucer_AutoUpdater.h index cdc4ef27b8..47426b428d 100644 --- a/extras/Projucer/Source/Application/jucer_AutoUpdater.h +++ b/extras/Projucer/Source/Application/jucer_AutoUpdater.h @@ -65,9 +65,9 @@ public: URL getLatestVersionURL (String& headers) const; void checkForNewVersion(); - void processResult (var reply, const String& downloadPath); + bool processResult (var reply, const String& downloadPath); - void askUserAboutNewVersion (const JuceVersionTriple& version, + bool askUserAboutNewVersion (const JuceVersionTriple& version, const String& releaseNotes, URL& newVersionToDownload, const String& extraHeaders); From 8b1374d4b70399f00c1d7c5e63b697087beca4a1 Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 20 Jul 2016 18:12:52 +0100 Subject: [PATCH 040/172] Don't call processBlock on a AudioProcessorGraph's node if it is suspended --- .../processors/juce_AudioProcessorGraph.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index 75bab69aef..5deaec0d8f 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -264,7 +264,14 @@ struct ProcessBufferOp : public AudioGraphRenderingOp AudioBuffer buffer (channels, totalChans, numSamples); - callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); + { + ScopedLock callbackLock (processor->getCallbackLock()); + + if (processor->isSuspended()) + buffer.clear(); + else + callProcess (buffer, *sharedMidiBuffers.getUnchecked (midiBufferToUse)); + } } void callProcess (AudioBuffer& buffer, MidiBuffer& midiMessages) From 56d5f7bab0758a945d2f763ab2b21fb055adfac1 Mon Sep 17 00:00:00 2001 From: hogliux Date: Wed, 20 Jul 2016 18:19:06 +0100 Subject: [PATCH 041/172] Don't update the rendering graph if the graph is not prepared --- .../processors/juce_AudioProcessorGraph.cpp | 23 +++++++++++++++---- .../processors/juce_AudioProcessorGraph.h | 2 ++ 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp index 5deaec0d8f..a493ce1d58 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.cpp @@ -1042,7 +1042,7 @@ struct AudioProcessorGraph::AudioProcessorGraphBufferHelpers //============================================================================== AudioProcessorGraph::AudioProcessorGraph() : lastNodeId (0), audioBuffers (new AudioProcessorGraphBufferHelpers), - currentMidiInputBuffer (nullptr) + currentMidiInputBuffer (nullptr), isPrepared (false) { } @@ -1109,7 +1109,9 @@ AudioProcessorGraph::Node* AudioProcessorGraph::addNode (AudioProcessor* const n Node* const n = new Node (nodeId, newProcessor); nodes.add (n); - triggerAsyncUpdate(); + + if (isPrepared) + triggerAsyncUpdate(); n->setParentGraph (this); return n; @@ -1124,7 +1126,9 @@ bool AudioProcessorGraph::removeNode (const uint32 nodeId) if (nodes.getUnchecked(i)->nodeId == nodeId) { nodes.remove (i); - triggerAsyncUpdate(); + + if (isPrepared) + triggerAsyncUpdate(); return true; } @@ -1210,14 +1214,19 @@ bool AudioProcessorGraph::addConnection (const uint32 sourceNodeId, GraphRenderingOps::ConnectionSorter sorter; connections.addSorted (sorter, new Connection (sourceNodeId, sourceChannelIndex, destNodeId, destChannelIndex)); - triggerAsyncUpdate(); + + if (isPrepared) + triggerAsyncUpdate(); + return true; } void AudioProcessorGraph::removeConnection (const int index) { connections.remove (index); - triggerAsyncUpdate(); + + if (isPrepared) + triggerAsyncUpdate(); } bool AudioProcessorGraph::removeConnection (const uint32 sourceNodeId, const int sourceChannelIndex, @@ -1399,6 +1408,8 @@ void AudioProcessorGraph::prepareToPlay (double /*sampleRate*/, int estimatedSam clearRenderingSequence(); buildRenderingSequence(); + + isPrepared = true; } bool AudioProcessorGraph::supportsDoublePrecisionProcessing() const @@ -1408,6 +1419,8 @@ bool AudioProcessorGraph::supportsDoublePrecisionProcessing() const void AudioProcessorGraph::releaseResources() { + isPrepared = false; + for (int i = 0; i < nodes.size(); ++i) nodes.getUnchecked(i)->unprepare(); diff --git a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h index 00c09d98fe..b3676e0050 100644 --- a/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h +++ b/modules/juce_audio_processors/processors/juce_AudioProcessorGraph.h @@ -392,6 +392,8 @@ private: MidiBuffer* currentMidiInputBuffer; MidiBuffer currentMidiOutputBuffer; + bool isPrepared; + void handleAsyncUpdate() override; void clearRenderingSequence(); void buildRenderingSequence(); From 4b6458438f18bfc18d33b1aac7d5b70fcd14336a Mon Sep 17 00:00:00 2001 From: hogliux Date: Thu, 21 Jul 2016 15:29:52 +0100 Subject: [PATCH 042/172] Fix small typo --- modules/juce_graphics/geometry/juce_Rectangle.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/juce_graphics/geometry/juce_Rectangle.h b/modules/juce_graphics/geometry/juce_Rectangle.h index ddb53d4efa..d37062c6dc 100644 --- a/modules/juce_graphics/geometry/juce_Rectangle.h +++ b/modules/juce_graphics/geometry/juce_Rectangle.h @@ -581,8 +581,8 @@ public: { return Rectangle (pos.x + static_cast (w * proportionalRect.pos.x), pos.y + static_cast (h * proportionalRect.pos.y), - proportionOfWidth (proportionalRect.w), - proportionOfWidth (proportionalRect.h)); + proportionOfWidth (proportionalRect.w), + proportionOfHeight (proportionalRect.h)); } //============================================================================== From 65e1b6008c77d95ad2eb6baacb6dac73b0b2f102 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 22 Jul 2016 09:22:35 +0100 Subject: [PATCH 043/172] Add missing overrides in FileTreeComponent --- .../filebrowser/juce_FileTreeComponent.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h index 833556fd81..7f45f67d79 100644 --- a/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h +++ b/modules/juce_gui_basics/filebrowser/juce_FileTreeComponent.h @@ -54,23 +54,23 @@ public: /** Returns the number of files the user has got selected. @see getSelectedFile */ - int getNumSelectedFiles() const { return TreeView::getNumSelectedItems(); } + int getNumSelectedFiles() const override { return TreeView::getNumSelectedItems(); } /** Returns one of the files that the user has currently selected. The index should be in the range 0 to (getNumSelectedFiles() - 1). @see getNumSelectedFiles */ - File getSelectedFile (int index = 0) const; + File getSelectedFile (int index = 0) const override; /** Deselects any files that are currently selected. */ - void deselectAllFiles(); + void deselectAllFiles() override; /** Scrolls the list to the top. */ - void scrollToTop(); + void scrollToTop() override; /** If the specified file is in the list, it will become the only selected item (and if the file isn't in the list, all other items will be deselected). */ - void setSelectedFile (const File&); + void setSelectedFile (const File&) override; /** Updates the files in the list. */ void refresh(); From 88736e34dc1cc1e4209b5a9851d4f53769b374f9 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 22 Jul 2016 10:12:44 +0100 Subject: [PATCH 044/172] Make splash screens fullscreen on mobile platforms --- .../juce_gui_extra/misc/juce_SplashScreen.cpp | 28 +++++++++++++------ .../juce_gui_extra/misc/juce_SplashScreen.h | 2 +- 2 files changed, 21 insertions(+), 9 deletions(-) diff --git a/modules/juce_gui_extra/misc/juce_SplashScreen.cpp b/modules/juce_gui_extra/misc/juce_SplashScreen.cpp index 0375c37a19..2188c6acd7 100644 --- a/modules/juce_gui_extra/misc/juce_SplashScreen.cpp +++ b/modules/juce_gui_extra/misc/juce_SplashScreen.cpp @@ -31,25 +31,40 @@ SplashScreen::SplashScreen (const String& title, const Image& image, bool useDro jassert (backgroundImage.isValid()); setOpaque (! backgroundImage.hasAlphaChannel()); - makeVisible (image.getWidth(), image.getHeight(), useDropShadow); + + #if JUCE_IOS || JUCE_ANDROID + const bool useFullScreen = true; + #else + const bool useFullScreen = false; + #endif + + makeVisible (image.getWidth(), image.getHeight(), useDropShadow, useFullScreen); } SplashScreen::SplashScreen (const String& title, int width, int height, bool useDropShadow) : Component (title), clickCountToDelete (0) { - makeVisible (width, height, useDropShadow); + makeVisible (width, height, useDropShadow, false); } -void SplashScreen::makeVisible (int w, int h, bool useDropShadow) +void SplashScreen::makeVisible (int w, int h, bool useDropShadow, bool fullscreen) { clickCountToDelete = Desktop::getInstance().getMouseButtonClickCounter(); creationTime = Time::getCurrentTime(); + const Rectangle screenSize = Desktop::getInstance().getDisplays().getMainDisplay().userArea; + const int width = (fullscreen ? screenSize.getWidth() : w); + const int height = (fullscreen ? screenSize.getHeight() : h); + setAlwaysOnTop (true); setVisible (true); - centreWithSize (w, h); + centreWithSize (width, height); addToDesktop (useDropShadow ? ComponentPeer::windowHasDropShadow : 0); + + if (fullscreen) + getPeer()->setFullScreen (true); + toFront (false); } @@ -69,10 +84,7 @@ void SplashScreen::deleteAfterDelay (RelativeTime timeout, bool removeOnMouseCli void SplashScreen::paint (Graphics& g) { g.setOpacity (1.0f); - - g.drawImage (backgroundImage, - 0, 0, getWidth(), getHeight(), - 0, 0, backgroundImage.getWidth(), backgroundImage.getHeight()); + g.drawImage (backgroundImage, getLocalBounds().toFloat(), RectanglePlacement (RectanglePlacement::fillDestination)); } void SplashScreen::timerCallback() diff --git a/modules/juce_gui_extra/misc/juce_SplashScreen.h b/modules/juce_gui_extra/misc/juce_SplashScreen.h index ae2b77bf84..d65d136ab0 100644 --- a/modules/juce_gui_extra/misc/juce_SplashScreen.h +++ b/modules/juce_gui_extra/misc/juce_SplashScreen.h @@ -146,7 +146,7 @@ private: int clickCountToDelete; void timerCallback() override; - void makeVisible (int w, int h, bool shadow); + void makeVisible (int w, int h, bool shadow, bool fullscreen); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SplashScreen) }; From 1696c23fb96fa8364acb59e72a984d1633e8a57e Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 22 Jul 2016 10:14:48 +0100 Subject: [PATCH 045/172] Add support for hosting staticly linked VSTs --- .../format/juce_AudioPluginFormatManager.cpp | 4 +- .../format_types/juce_VSTPluginFormat.cpp | 58 +++++++++++++++---- .../format_types/juce_VSTPluginFormat.h | 2 +- .../scanning/juce_PluginListComponent.cpp | 2 + 4 files changed, 52 insertions(+), 14 deletions(-) diff --git a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp index 1235e0608b..a6f8f1e3b2 100644 --- a/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp +++ b/modules/juce_audio_processors/format/juce_AudioPluginFormatManager.cpp @@ -65,7 +65,7 @@ void AudioPluginFormatManager::addDefaultFormats() // you should only call this method once! for (int i = formats.size(); --i >= 0;) { - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) jassert (dynamic_cast (formats[i]) == nullptr); #endif @@ -87,7 +87,7 @@ void AudioPluginFormatManager::addDefaultFormats() formats.add (new AudioUnitPluginFormat()); #endif - #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) + #if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) formats.add (new VSTPluginFormat()); #endif diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp index 74700d03d5..46adb5c00b 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.cpp @@ -22,7 +22,7 @@ ============================================================================== */ -#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX) +#if JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS) //============================================================================== #if JUCE_MAC && JUCE_SUPPORT_CARBON @@ -165,7 +165,7 @@ namespace { #if JUCE_WINDOWS return timeGetTime() * 1000000.0; - #elif JUCE_LINUX + #elif JUCE_LINUX || JUCE_IOS timeval micro; gettimeofday (µ, 0); return micro.tv_usec * 1000.0; @@ -378,7 +378,7 @@ public: { getActiveModules().add (this); - #if JUCE_WINDOWS || JUCE_LINUX + #if JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS fullParentDirectoryPathName = f.getParentDirectory().getFullPathName(); #elif JUCE_MAC FSRef ref; @@ -394,9 +394,12 @@ public: } //============================================================================== -#if JUCE_WINDOWS || JUCE_LINUX - DynamicLibrary module; + #if ! JUCE_MAC String fullParentDirectoryPathName; + #endif + + #if JUCE_WINDOWS || JUCE_LINUX + DynamicLibrary module; bool open() { @@ -460,11 +463,14 @@ public: return String(); } #endif -#else + #else Handle resHandle; CFBundleRef bundleRef; + + #if JUCE_MAC + CFBundleRefNum resFileId; FSSpec parentDirFSSpec; - ResFileRefNum resFileId; + #endif bool open() { @@ -510,13 +516,18 @@ public: if (pluginName.isEmpty()) pluginName = file.getFileNameWithoutExtension(); + #if JUCE_MAC resFileId = CFBundleOpenBundleResourceMap (bundleRef); + #endif ok = true; Array vstXmlFiles; - file.getChildFile ("Contents") + file + #if JUCE_MAC + .getChildFile ("Contents") .getChildFile ("Resources") + #endif .findChildFiles (vstXmlFiles, File::findFiles, false, "*.vstxml"); if (vstXmlFiles.size() > 0) @@ -541,7 +552,9 @@ public: { if (bundleRef != 0) { + #if JUCE_MAC CFBundleCloseBundleResourceMap (bundleRef, resFileId); + #endif if (CFGetRetainCount (bundleRef) == 1) CFBundleUnloadExecutable (bundleRef); @@ -556,7 +569,7 @@ public: eff->dispatcher (eff, effClose, 0, 0, 0, 0); } -#endif + #endif private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (ModuleHandle) @@ -875,7 +888,12 @@ public: } //============================================================================== + #if JUCE_IOS + bool hasEditor() const override { return false; } + #else bool hasEditor() const override { return effect != nullptr && (effect->flags & effFlagsHasEditor) != 0; } + #endif + AudioProcessorEditor* createEditor() override; //============================================================================== @@ -1806,6 +1824,7 @@ private: }; //============================================================================== +#if ! JUCE_IOS class VSTPluginWindow; static Array activeVSTWindows; @@ -2544,7 +2563,7 @@ private: JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (VSTPluginWindow) }; - +#endif #if JUCE_MSVC #pragma warning (pop) #endif @@ -2552,8 +2571,12 @@ private: //============================================================================== AudioProcessorEditor* VSTPluginInstance::createEditor() { + #if JUCE_IOS + return nullptr; + #else return hasEditor() ? new VSTPluginWindow (*this) : nullptr; + #endif } //============================================================================== @@ -2690,7 +2713,7 @@ bool VSTPluginFormat::fileMightContainThisPluginType (const String& fileOrIdenti { const File f (File::createFileWithoutCheckingPath (fileOrIdentifier)); - #if JUCE_MAC + #if JUCE_MAC || JUCE_IOS return f.isDirectory() && f.hasFileExtension (".vst"); #elif JUCE_WINDOWS return f.existsAsFile() && f.hasFileExtension (".dll"); @@ -2765,6 +2788,19 @@ FileSearchPath VSTPluginFormat::getDefaultLocationsToSearch() paths.add (WindowsRegistry::getValue ("HKEY_LOCAL_MACHINE\\Software\\VST\\VSTPluginsPath", programFiles + "\\VstPlugins")); return paths; + #elif JUCE_IOS + // on iOS you can only load plug-ins inside the hosts bundle folder + CFURLRef relativePluginDir = CFBundleCopyBuiltInPlugInsURL (CFBundleGetMainBundle()); + CFURLRef pluginDir = CFURLCopyAbsoluteURL (relativePluginDir); + CFRelease (relativePluginDir); + + CFStringRef path = CFURLCopyFileSystemPath (pluginDir, kCFURLPOSIXPathStyle); + CFRelease (pluginDir); + + FileSearchPath retval (String (CFStringGetCStringPtr (path, kCFStringEncodingUTF8))); + CFRelease (path); + + return retval; #endif } diff --git a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h index f81fa5dd37..02f4a57f57 100644 --- a/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h +++ b/modules/juce_audio_processors/format_types/juce_VSTPluginFormat.h @@ -22,7 +22,7 @@ ============================================================================== */ -#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX)) || DOXYGEN +#if (JUCE_PLUGINHOST_VST && (JUCE_MAC || JUCE_WINDOWS || JUCE_LINUX || JUCE_IOS)) || DOXYGEN //============================================================================== /** diff --git a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp index 37adaa376c..a321a5da30 100644 --- a/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp +++ b/modules/juce_audio_processors/scanning/juce_PluginListComponent.cpp @@ -348,8 +348,10 @@ public: if (path.getNumPaths() > 0) // if the path is empty, then paths aren't used for this format. { + #if ! JUCE_IOS if (propertiesToUse != nullptr) path = getLastSearchPath (*propertiesToUse, formatToScan); + #endif pathList.setSize (500, 300); pathList.setPath (path); From 9e1edc7a6e6cf2dd4e1d988de3e84872da2fdc47 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 22 Jul 2016 10:28:00 +0100 Subject: [PATCH 046/172] Add support for hosting staticly compiled VSTs on all platforms --- .../Source/Project Saving/jucer_ProjectExporter.cpp | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp index 2257e3025b..2a948ed75b 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExporter.cpp @@ -242,7 +242,7 @@ void ProjectExporter::createPropertyEditors (PropertyListBuilder& props) void ProjectExporter::createDependencyPathProperties (PropertyListBuilder& props) { - if (supportsVST() && (project.shouldBuildVST().getValue() || project.isVSTPluginHost())) + if (project.shouldBuildVST().getValue() || project.isVSTPluginHost()) { props.add (new DependencyPathPropertyComponent (getVSTPathValue (false), "VST SDK Folder"), "If you're building a VST plugin or host, this must be the folder containing the VST SDK. This can be an absolute path, or a path relative to the Projucer project file."); @@ -306,14 +306,11 @@ void ProjectExporter::addSettingsForProjectType (const ProjectType& type) void ProjectExporter::addVSTPathsIfPluginOrHost() { - if (supportsVST()) - { - if (project.shouldBuildVST().getValue()) - makefileTargetSuffix = ".so"; + if (supportsVST() && project.shouldBuildVST().getValue()) + makefileTargetSuffix = ".so"; - if (project.shouldBuildVST().getValue() || project.isVSTPluginHost()) - addVSTFolderToPath (false); - } + if (project.shouldBuildVST().getValue() || project.isVSTPluginHost()) + addVSTFolderToPath (false); if (supportsVST3()) { From f5398fcab2b1672f10024df12a6dc8834292ecf9 Mon Sep 17 00:00:00 2001 From: luigisambuy Date: Mon, 25 Jul 2016 11:03:37 +0100 Subject: [PATCH 047/172] Added additional dontScrollToShowThisRange parameter to selectRangeOfRows in ListBox --- modules/juce_gui_basics/widgets/juce_ListBox.cpp | 4 ++-- modules/juce_gui_basics/widgets/juce_ListBox.h | 10 +++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/modules/juce_gui_basics/widgets/juce_ListBox.cpp b/modules/juce_gui_basics/widgets/juce_ListBox.cpp index 6445402f7e..e026d3d7fc 100644 --- a/modules/juce_gui_basics/widgets/juce_ListBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ListBox.cpp @@ -552,7 +552,7 @@ SparseSet ListBox::getSelectedRows() const return selected; } -void ListBox::selectRangeOfRows (int firstRow, int lastRow) +void ListBox::selectRangeOfRows (int firstRow, int lastRow, bool dontScrollToShowThisRange) { if (multipleSelection && (firstRow != lastRow)) { @@ -566,7 +566,7 @@ void ListBox::selectRangeOfRows (int firstRow, int lastRow) selected.removeRange (Range (lastRow, lastRow + 1)); } - selectRowInternal (lastRow, false, false, true); + selectRowInternal (lastRow, dontScrollToShowThisRange, false, true); } void ListBox::flipRowSelection (const int row) diff --git a/modules/juce_gui_basics/widgets/juce_ListBox.h b/modules/juce_gui_basics/widgets/juce_ListBox.h index 5a5c3a4a4f..ada3b5f65b 100644 --- a/modules/juce_gui_basics/widgets/juce_ListBox.h +++ b/modules/juce_gui_basics/widgets/juce_ListBox.h @@ -265,11 +265,15 @@ public: This will add these rows to the current selection, so you might need to clear the current selection first with deselectAllRows() - @param firstRow the first row to select (inclusive) - @param lastRow the last row to select (inclusive) + @param firstRow the first row to select (inclusive) + @param lastRow the last row to select (inclusive) + @param dontScrollToShowThisRange if true, the list's position won't change; if false and + the selected range is off-screen, it'll scroll to make + sure that the range of rows is on-screen */ void selectRangeOfRows (int firstRow, - int lastRow); + int lastRow, + bool dontScrollToShowThisRange = false); /** Deselects a row. If it's not currently selected, this will do nothing. From 72878309f898d5e3022c9efad796e47dbd6a36ff Mon Sep 17 00:00:00 2001 From: hogliux Date: Mon, 25 Jul 2016 14:58:01 +0100 Subject: [PATCH 048/172] Fix AUv3 OS X version compiler error message --- modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm index 09e5da016d..b2278b4c7c 100644 --- a/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm +++ b/modules/juce_audio_plugin_client/AU/juce_AUv3_Wrapper.mm @@ -33,7 +33,7 @@ #if JUCE_MAC #if (! defined MAC_OS_X_VERSION_MIN_REQUIRED) || (! defined MAC_OS_X_VERSION_10_11) || (MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_11) - #error AUv3 needs Deployment Target OS X 10.8 or higher to compile + #error AUv3 needs Deployment Target OS X 10.11 or higher to compile #endif #endif From 6fdb7e33bc50acd44424aa28ca9bbe182ea0a1a6 Mon Sep 17 00:00:00 2001 From: hogliux Date: Mon, 25 Jul 2016 16:37:29 +0100 Subject: [PATCH 049/172] Also add assembler files to MSVC projects --- .../Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h index 9f741b3e41..3327a06a28 100644 --- a/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h +++ b/extras/Projucer/Source/Project Saving/jucer_ProjectExport_MSVC.h @@ -1665,7 +1665,7 @@ protected: jassert (path.getRoot() == RelativePath::buildTargetFolder); - if (path.hasFileExtension (cOrCppFileExtensions)) + if (path.hasFileExtension (cOrCppFileExtensions) || path.hasFileExtension (asmFileExtensions)) { XmlElement* e = cpps.createNewChildElement ("ClCompile"); e->setAttribute ("Include", path.toWindowsStyle()); From 9100d1c89ef2d39157d0b956b85051738dc9216d Mon Sep 17 00:00:00 2001 From: Timur Doumler Date: Thu, 28 Jul 2016 17:52:09 +0100 Subject: [PATCH 050/172] Synthesiser and MPESynthesiser: added an additional parameter to setMinimumRenderingSubdivisionSize to allow for both the legacy behaviour (setting the strict minimum on subdivision size) and the current behaviour (first sample will always be sample-accurate, but then the first subdivision may be < minimum). --- .../juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp | 8 +++++--- modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h | 9 ++++++++- .../juce_audio_basics/synthesisers/juce_Synthesiser.cpp | 6 ++++-- .../juce_audio_basics/synthesisers/juce_Synthesiser.h | 9 ++++++++- 4 files changed, 25 insertions(+), 7 deletions(-) diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp b/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp index 919b984329..30e2411a25 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.cpp @@ -25,7 +25,8 @@ MPESynthesiserBase::MPESynthesiserBase() : instrument (new MPEInstrument), sampleRate (0), - minimumSubBlockSize (32) + minimumSubBlockSize (32), + subBlockSubdivisionIsStrict (false) { instrument->addListener (this); } @@ -123,7 +124,7 @@ void MPESynthesiserBase::renderNextBlock (AudioBuffer& outputAudio, break; } - if (samplesToNextMidiMessage < (firstEvent ? 1 : minimumSubBlockSize)) + if (samplesToNextMidiMessage < ((firstEvent && ! subBlockSubdivisionIsStrict) ? 1 : minimumSubBlockSize)) { handleMidiEvent (m); continue; @@ -157,8 +158,9 @@ void MPESynthesiserBase::setCurrentPlaybackSampleRate (const double newRate) } //============================================================================== -void MPESynthesiserBase::setMinimumRenderingSubdivisionSize (int numSamples) noexcept +void MPESynthesiserBase::setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict) noexcept { jassert (numSamples > 0); // it wouldn't make much sense for this to be less than 1 minimumSubBlockSize = numSamples; + subBlockSubdivisionIsStrict = shouldBeStrict; } diff --git a/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h b/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h index ad49284535..d85a9a4324 100644 --- a/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h +++ b/modules/juce_audio_basics/mpe/juce_MPESynthesiserBase.h @@ -127,8 +127,14 @@ public: The default setting is 32, which means that midi messages are accurate to about < 1ms accuracy, which is probably fine for most purposes, but you may want to increase or decrease this value for your synth. + + If shouldBeStrict is true, the audio sub-blocks will strictly never be smaller than numSamples. + + If shouldBeStrict is false (default), the first audio sub-block in the buffer is allowed + to be smaller, to make sure that the first MIDI event in a buffer will always be sample-accurate + (this can sometimes help to avoid quantisation or phasing issues). */ - void setMinimumRenderingSubdivisionSize (int numSamples) noexcept; + void setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict = false) noexcept; //============================================================================== /** Puts the synthesiser into legacy mode. @@ -185,6 +191,7 @@ private: CriticalSection noteStateLock; double sampleRate; int minimumSubBlockSize; + bool subBlockSubdivisionIsStrict; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (MPESynthesiserBase) }; diff --git a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp index bd92836af2..8bc95838b1 100644 --- a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp +++ b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.cpp @@ -88,6 +88,7 @@ Synthesiser::Synthesiser() : sampleRate (0), lastNoteOnCounter (0), minimumSubBlockSize (32), + subBlockSubdivisionIsStrict (false), shouldStealNotes (true) { for (int i = 0; i < numElementsInArray (lastPitchWheelValues); ++i) @@ -147,10 +148,11 @@ void Synthesiser::setNoteStealingEnabled (const bool shouldSteal) shouldStealNotes = shouldSteal; } -void Synthesiser::setMinimumRenderingSubdivisionSize (int numSamples) noexcept +void Synthesiser::setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict) noexcept { jassert (numSamples > 0); // it wouldn't make much sense for this to be less than 1 minimumSubBlockSize = numSamples; + subBlockSubdivisionIsStrict = shouldBeStrict; } //============================================================================== @@ -204,7 +206,7 @@ void Synthesiser::processNextBlock (AudioBuffer& outputAudio, break; } - if (samplesToNextMidiMessage < (firstEvent ? 1 : minimumSubBlockSize)) + if (samplesToNextMidiMessage < ((firstEvent && ! subBlockSubdivisionIsStrict) ? 1 : minimumSubBlockSize)) { handleMidiEvent (m); continue; diff --git a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h index 0cf92dc7d4..9cb2f053dc 100644 --- a/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h +++ b/modules/juce_audio_basics/synthesisers/juce_Synthesiser.h @@ -539,8 +539,14 @@ public: The default setting is 32, which means that midi messages are accurate to about < 1ms accuracy, which is probably fine for most purposes, but you may want to increase or decrease this value for your synth. + + If shouldBeStrict is true, the audio sub-blocks will strictly never be smaller than numSamples. + + If shouldBeStrict is false (default), the first audio sub-block in the buffer is allowed + to be smaller, to make sure that the first MIDI event in a buffer will always be sample-accurate + (this can sometimes help to avoid quantisation or phasing issues). */ - void setMinimumRenderingSubdivisionSize (int numSamples) noexcept; + void setMinimumRenderingSubdivisionSize (int numSamples, bool shouldBeStrict = false) noexcept; protected: //============================================================================== @@ -615,6 +621,7 @@ private: double sampleRate; uint32 lastNoteOnCounter; int minimumSubBlockSize; + bool subBlockSubdivisionIsStrict; bool shouldStealNotes; BigInteger sustainPedalsDown; From 962cfc7aff00e8dbcdaa375c8e14aed187c599a7 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 29 Jul 2016 09:57:54 +0100 Subject: [PATCH 051/172] Clarify what happens when maxNumChars is zero in the TextPropertyComponent constructor --- .../properties/juce_TextPropertyComponent.h | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h index 2b16bbdc53..de9d467dd4 100644 --- a/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h +++ b/modules/juce_gui_basics/properties/juce_TextPropertyComponent.h @@ -38,8 +38,10 @@ protected: //============================================================================== /** Creates a text property component. - The maxNumChars is used to set the length of string allowable, and isMultiLine - sets whether the text editor allows carriage returns. + @param propertyName The name of the property + @param maxNumChars If not zero, then this specifies the maximum allowable length of + the string. If zero, then the string will have no length limit. + @param isMultiLine isMultiLine sets whether the text editor allows carriage returns. @see TextEditor */ @@ -50,8 +52,11 @@ protected: public: /** Creates a text property component. - The maxNumChars is used to set the length of string allowable, and isMultiLine - sets whether the text editor allows carriage returns. + @param valueToControl The Value that is controlled by the TextPropertyCOmponent + @param propertyName The name of the property + @param maxNumChars If not zero, then this specifies the maximum allowable length of + the string. If zero, then the string will have no length limit. + @param isMultiLine isMultiLine sets whether the text editor allows carriage returns. @see TextEditor */ From a258295481ea4d9c12115dfe0d42f58aa72b5aa1 Mon Sep 17 00:00:00 2001 From: hogliux Date: Fri, 29 Jul 2016 12:19:16 +0100 Subject: [PATCH 052/172] Don't repeatedly set the wantsFocus flag if it hasn't changed --- .../juce_gui_basics/widgets/juce_ComboBox.cpp | 16 +++++++++++++--- modules/juce_gui_basics/widgets/juce_ComboBox.h | 8 ++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp index 68e1c23890..85e67108b3 100644 --- a/modules/juce_gui_basics/widgets/juce_ComboBox.cpp +++ b/modules/juce_gui_basics/widgets/juce_ComboBox.cpp @@ -46,7 +46,8 @@ ComboBox::ComboBox (const String& name) menuActive (false), scrollWheelEnabled (false), mouseWheelAccumulator (0), - noChoicesMessage (TRANS("(no choices)")) + noChoicesMessage (TRANS("(no choices)")), + labelEditableState (editableUnknown) { setRepaintsOnMouseActivity (true); lookAndFeelChanged(); @@ -66,7 +67,9 @@ void ComboBox::setEditableText (const bool isEditable) if (label->isEditableOnSingleClick() != isEditable || label->isEditableOnDoubleClick() != isEditable) { label->setEditable (isEditable, isEditable, false); - setWantsKeyboardFocus (! isEditable); + labelEditableState = (isEditable ? labelIsEditable : labelIsNotEditable); + + setWantsKeyboardFocus (labelEditableState == labelIsNotEditable); resized(); } } @@ -437,7 +440,14 @@ void ComboBox::lookAndFeelChanged() } addAndMakeVisible (label); - setWantsKeyboardFocus (! label->isEditable()); + + EditableState newEditableState = (label->isEditable() ? labelIsEditable : labelIsNotEditable); + + if (newEditableState != labelEditableState) + { + labelEditableState = newEditableState; + setWantsKeyboardFocus (labelEditableState == labelIsNotEditable); + } label->addListener (this); label->addMouseListener (this, false); diff --git a/modules/juce_gui_basics/widgets/juce_ComboBox.h b/modules/juce_gui_basics/widgets/juce_ComboBox.h index 515e5d2e5f..1e876cbac2 100644 --- a/modules/juce_gui_basics/widgets/juce_ComboBox.h +++ b/modules/juce_gui_basics/widgets/juce_ComboBox.h @@ -427,6 +427,13 @@ private: bool isEnabled : 1, isHeading : 1; }; + enum EditableState + { + editableUnknown, + labelIsNotEditable, + labelIsEditable + }; + OwnedArray items; Value currentId; int lastCurrentId; @@ -435,6 +442,7 @@ private: ListenerList listeners; ScopedPointer