diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk index d08c8b9e..50a1abcb 100644 --- a/Makefile.plugins.mk +++ b/Makefile.plugins.mk @@ -188,6 +188,11 @@ $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp @echo "Compiling DistrhoUIMain.cpp (DSSI)" @$(CXX) $< $(BUILD_CXX_FLAGS) $(shell $(PKG_CONFIG) --cflags liblo) -DDISTRHO_PLUGIN_TARGET_DSSI -c -o $@ +$(BUILD_DIR)/DistrhoPluginAUexport.cpp.o: $(DPF_PATH)/distrho/src/DistrhoPluginAUexport.cpp + -@mkdir -p $(BUILD_DIR) + @echo "Compiling DistrhoPluginAUexport.cpp" + $(CXX) $< $(BUILD_CXX_FLAGS) -c -o $@ + # --------------------------------------------------------------------------------------------------------------------- # JACK @@ -299,7 +304,7 @@ $(BUILD_DIR)/step2.rsrc: $(BUILD_DIR)/step1.rsrc @echo "Creating AU rsrc for $(NAME) (part 2/3)" ResMerger -dstIs DF $< -o $@ -$(BUILD_DIR)/step1.rsrc: $(DPF_PATH)/distrho/src/DistrhoPluginAU.r $(OBJS_DSP) $(au_pkginfo) $(au_plist) +$(BUILD_DIR)/step1.rsrc: $(DPF_PATH)/distrho/src/DistrhoPluginAU.r $(BUILD_DIR)/DistrhoPluginInfo.r $(OBJS_DSP) -@mkdir -p $(shell dirname $@) @echo "Creating AU rsrc for $(NAME) (part 1/3)" Rez $< \ @@ -307,6 +312,7 @@ $(BUILD_DIR)/step1.rsrc: $(DPF_PATH)/distrho/src/DistrhoPluginAU.r $(OBJS_DSP) $ -useDF -script Roman \ -d x86_64_YES -d i386_YES -arch x86_64 -arch i386 \ -i . \ + -i $(BUILD_DIR) \ -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic \ -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/AUBase \ -i $(DPF_PATH)/distrho/src/CoreAudio106/AudioUnits/AUPublic/OtherBases \ @@ -315,6 +321,13 @@ $(BUILD_DIR)/step1.rsrc: $(DPF_PATH)/distrho/src/DistrhoPluginAU.r $(OBJS_DSP) $ -I /System/Library/Frameworks/CoreServices.framework/Frameworks/CarbonCore.framework/Versions/A/Headers \ -o $@ +$(BUILD_DIR)/DistrhoPluginInfo.r: $(OBJS_DSP) $(BUILD_DIR)/DistrhoPluginAUexport.cpp.o + -@mkdir -p $(shell dirname $@) + @echo "Creating DistrhoPluginInfo.r for $(NAME)" + $(CXX) $^ $(BUILD_CXX_FLAGS) $(LINK_FLAGS) -o $(BUILD_DIR)/DistrhoPluginInfoGenerator && \ + $(BUILD_DIR)/DistrhoPluginInfoGenerator "$(BUILD_DIR)" && \ + rm $(BUILD_DIR)/DistrhoPluginInfoGenerator + # --------------------------------------------------------------------------------------------------------------------- -include $(OBJS_DSP:%.o=%.d) diff --git a/distrho/src/DistrhoPluginAU.r b/distrho/src/DistrhoPluginAU.r index da7aa1b2..59badc71 100644 --- a/distrho/src/DistrhoPluginAU.r +++ b/distrho/src/DistrhoPluginAU.r @@ -2,25 +2,34 @@ #include #include "DistrhoPluginInfo.h" +#include "DistrhoPluginInfo.r" -#ifdef DEBUG - #define VERSION 0xFFFFFFFF -#else - #define VERSION 0x00010000 +#ifndef DISTRHO_PLUGIN_AU_TYPE + #define DISTRHO_PLUGIN_AU_TYPE kAudioUnitType_Effect #endif -// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description -#define kAudioUnitResID_dpfplugin 1000 +#ifndef DISTRHO_PLUGIN_AU_SUBTYPE + #define DISTRHO_PLUGIN_AU_SUBTYPE '????' +#endif + +#ifndef DISTRHO_PLUGIN_AU_MANUF + #define DISTRHO_PLUGIN_AU_MANUF '????' +#endif -//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ dpfplugin~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#ifndef DISTRHO_PLUGIN_AU_RES_ID + #define DISTRHO_PLUGIN_AU_RES_ID 1000 +#endif + +// Note that resource IDs must be spaced 2 apart for the 'STR ' name and description +#define RES_ID DISTRHO_PLUGIN_AU_RES_ID -#define RES_ID kAudioUnitResID_dpfplugin -#define COMP_TYPE kAudioUnitType_Effect -#define COMP_SUBTYPE 'FuCk' -#define COMP_MANUF 'ShIt' +#define COMP_TYPE DISTRHO_PLUGIN_AU_TYPE +#define COMP_SUBTYPE DISTRHO_PLUGIN_AU_SUBTYPE +#define COMP_MANUF DISTRHO_PLUGIN_AU_MANUF -#define NAME DISTRHO_PLUGIN_BRAND ": " DISTRHO_PLUGIN_NAME -#define DESCRIPTION DISTRHO_PLUGIN_NAME " AU" +#define NAME DISTRHO_PLUGIN_FULL_NAME +#define DESCRIPTION DISTRHO_PLUGIN_DESCRIPTION +#define VERSION DISTRHO_PLUGIN_VERSION #define ENTRY_POINT "PluginAUEntry" #include "AUResources.r" diff --git a/distrho/src/DistrhoPluginAUexport.cpp b/distrho/src/DistrhoPluginAUexport.cpp new file mode 100644 index 00000000..2c1f749f --- /dev/null +++ b/distrho/src/DistrhoPluginAUexport.cpp @@ -0,0 +1,111 @@ +/* + * DISTRHO Plugin Framework (DPF) + * Copyright (C) 2012-2019 Filipe Coelho + * + * Permission to use, copy, modify, and/or distribute this software for any purpose with + * or without fee is hereby granted, provided that the above copyright notice and this + * permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD + * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN + * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER + * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN + * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include "DistrhoPluginInternal.hpp" + +#include +#include + +// ----------------------------------------------------------------------- + +void au_generate_r(const char* const basename) +{ + USE_NAMESPACE_DISTRHO + + // Dummy plugin to get data from + d_lastBufferSize = 512; + d_lastSampleRate = 44100.0; + PluginExporter plugin(nullptr, nullptr); + d_lastBufferSize = 0; + d_lastSampleRate = 0.0; + + String filename(basename); + if (! filename.endsWith("/")) + filename += "/"; + filename += "DistrhoPluginInfo.r"; + + // --------------------------------------------- + + std::cout << "Writing DistrhoPluginInfo.r..."; std::cout.flush(); + std::fstream rFile(filename, std::ios::out); + + // full name + { + String fullname(plugin.getMaker()); + + if (fullname.isEmpty()) + fullname = "DPF"; + + fullname += ": "; + fullname += plugin.getName(); + + rFile << "#define DISTRHO_PLUGIN_FULL_NAME \"" + fullname + "\"\n"; + } + + // description + { + String description(plugin.getDescription()); + + if (description.isNotEmpty()) + { + description.replace('\n', ' ').replace('"', '\''); + } + else + { + description = plugin.getName(); + description += " AU"; + } + + rFile << "#define DISTRHO_PLUGIN_DESCRIPTION \"" + description + "\"\n"; + } + +#ifndef DEBUG + // version + { + String version(plugin.getVersion()); + + if (version.isEmpty()) + version = "0"; + + rFile << "#define DISTRHO_PLUGIN_VERSION " + version + "\n"; + } +#else + rFile << "#define DISTRHO_PLUGIN_VERSION 0xFFFFFFFF\n"; +#endif + + rFile.close(); + std::cout << " done!" << std::endl; +} + +// ----------------------------------------------------------------------- + +int main(int argc, char* argv[]) +{ + if (argc != 2) + { + std::cout << "Single argument (output path) required!" << std::endl; + return 1; + } + + au_generate_r(argv[1]); + return 0; +} + +// ----------------------------------------------------------------------- + +#include "DistrhoPlugin.cpp" + +// -----------------------------------------------------------------------