commit 2d5dd370c6c9f7528e29ebee8c686da9a909773d
parent 1cc5641ba765dcb22da32c66faf3a09f808bfb27
Author: falkTX <falktx@falktx.com>
Date: Tue, 2 Aug 2022 13:45:17 +0100
Create macOS app bundles for standalones with custom UI
Diffstat:
3 files changed, 139 insertions(+), 100 deletions(-)
diff --git a/Makefile.plugins.mk b/Makefile.plugins.mk
@@ -123,103 +123,6 @@ OBJS_UI += $(BUILD_DIR)/DistrhoUI_macOS_$(NAME).mm.o
endif
# ---------------------------------------------------------------------------------------------------------------------
-# Set VST2 filename, either single binary or inside a bundle
-
-ifeq ($(MACOS),true)
-VST2_CONTENTS = $(NAME).vst/Contents
-VST2_FILENAME = $(VST2_CONTENTS)/MacOS/$(NAME)
-else ifeq ($(USE_VST2_BUNDLE),true)
-VST2_FILENAME = $(NAME).vst/$(NAME)$(LIB_EXT)
-else
-VST2_FILENAME = $(NAME)-vst$(LIB_EXT)
-endif
-
-# ---------------------------------------------------------------------------------------------------------------------
-# Set VST3 filename, see https://vst3sdk-doc.diatonic.jp/doc/vstinterfaces/vst3loc.html
-
-ifeq ($(LINUX),true)
-VST3_FILENAME = $(NAME).vst3/Contents/$(TARGET_PROCESSOR)-linux/$(NAME).so
-else ifeq ($(MACOS),true)
-VST3_CONTENTS = $(NAME).vst3/Contents
-VST3_FILENAME = $(VST3_CONTENTS)/MacOS/$(NAME)
-else ifeq ($(WASM),true)
-VST3_FILENAME = $(NAME).vst3/Contents/wasm/$(NAME).vst3
-else ifeq ($(WINDOWS),true)
-ifeq ($(CPU_I386),true)
-VST3_FILENAME = $(NAME).vst3/Contents/x86-win/$(NAME).vst3
-else ifeq ($(CPU_X86_64),true)
-VST3_FILENAME = $(NAME).vst3/Contents/x86_64-win/$(NAME).vst3
-endif
-endif
-
-# ---------------------------------------------------------------------------------------------------------------------
-# Set plugin binary file targets
-
-jack = $(TARGET_DIR)/$(NAME)$(APP_EXT)
-ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
-dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT)
-dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT)
-lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT)
-lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT)
-lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT)
-vst2 = $(TARGET_DIR)/$(VST2_FILENAME)
-ifneq ($(VST3_FILENAME),)
-vst3 = $(TARGET_DIR)/$(VST3_FILENAME)
-endif
-shared = $(TARGET_DIR)/$(NAME)$(LIB_EXT)
-static = $(TARGET_DIR)/$(NAME).a
-
-ifeq ($(MACOS),true)
-vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/Info.plist
-vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/PkgInfo
-vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/Resources/empty.lproj
-vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/Info.plist
-vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/PkgInfo
-vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/Resources/empty.lproj
-endif
-
-# ---------------------------------------------------------------------------------------------------------------------
-# Set plugin symbols to export
-
-ifeq ($(MACOS),true)
-SYMBOLS_LADSPA = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/ladspa.exp
-SYMBOLS_DSSI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/dssi.exp
-SYMBOLS_LV2DSP = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-dsp.exp
-SYMBOLS_LV2UI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-ui.exp
-SYMBOLS_LV2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2.exp
-SYMBOLS_VST2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst2.exp
-SYMBOLS_VST3 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst3.exp
-SYMBOLS_SHARED = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/shared.exp
-else ifeq ($(WASM),true)
-SYMBOLS_LADSPA = -sEXPORTED_FUNCTIONS="['ladspa_descriptor']"
-SYMBOLS_DSSI = -sEXPORTED_FUNCTIONS="['ladspa_descriptor','dssi_descriptor']"
-SYMBOLS_LV2DSP = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl']"
-SYMBOLS_LV2UI = -sEXPORTED_FUNCTIONS="['lv2ui_descriptor']"
-SYMBOLS_LV2 = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl','lv2ui_descriptor']"
-SYMBOLS_VST2 = -sEXPORTED_FUNCTIONS="['VSTPluginMain']"
-SYMBOLS_VST3 = -sEXPORTED_FUNCTIONS="['GetPluginFactory','ModuleEntry','ModuleExit']"
-SYMBOLS_SHARED = -sEXPORTED_FUNCTIONS="['createSharedPlugin']"
-else ifeq ($(WINDOWS),true)
-SYMBOLS_LADSPA = $(DPF_PATH)/utils/symbols/ladspa.def
-SYMBOLS_DSSI = $(DPF_PATH)/utils/symbols/dssi.def
-SYMBOLS_LV2DSP = $(DPF_PATH)/utils/symbols/lv2-dsp.def
-SYMBOLS_LV2UI = $(DPF_PATH)/utils/symbols/lv2-ui.def
-SYMBOLS_LV2 = $(DPF_PATH)/utils/symbols/lv2.def
-SYMBOLS_VST2 = $(DPF_PATH)/utils/symbols/vst2.def
-SYMBOLS_VST3 = $(DPF_PATH)/utils/symbols/vst3.def
-SYMBOLS_SHARED = $(DPF_PATH)/utils/symbols/shared.def
-else ifneq ($(DEBUG),true)
-SYMBOLS_LADSPA = -Wl,--version-script=$(DPF_PATH)/utils/symbols/ladspa.version
-SYMBOLS_DSSI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/dssi.version
-SYMBOLS_LV2DSP = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-dsp.version
-SYMBOLS_LV2UI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-ui.version
-SYMBOLS_LV2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2.version
-SYMBOLS_VST2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst2.version
-SYMBOLS_VST3 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst3.version
-SYMBOLS_SHARED = -Wl,--version-script=$(DPF_PATH)/utils/symbols/shared.version
-endif
-
-# ---------------------------------------------------------------------------------------------------------------------
# Handle UI stuff, disable UI support automatically
ifeq ($(FILES_UI),)
@@ -318,6 +221,114 @@ endif
BASE_FLAGS += $(DGL_FLAGS)
# ---------------------------------------------------------------------------------------------------------------------
+# Set VST2 filename, either single binary or inside a bundle
+
+ifeq ($(MACOS),true)
+VST2_CONTENTS = $(NAME).vst/Contents
+VST2_FILENAME = $(VST2_CONTENTS)/MacOS/$(NAME)
+else ifeq ($(USE_VST2_BUNDLE),true)
+VST2_FILENAME = $(NAME).vst/$(NAME)$(LIB_EXT)
+else
+VST2_FILENAME = $(NAME)-vst$(LIB_EXT)
+endif
+
+# ---------------------------------------------------------------------------------------------------------------------
+# Set VST3 filename, see https://vst3sdk-doc.diatonic.jp/doc/vstinterfaces/vst3loc.html
+
+ifeq ($(LINUX),true)
+VST3_FILENAME = $(NAME).vst3/Contents/$(TARGET_PROCESSOR)-linux/$(NAME).so
+else ifeq ($(MACOS),true)
+VST3_CONTENTS = $(NAME).vst3/Contents
+VST3_FILENAME = $(VST3_CONTENTS)/MacOS/$(NAME)
+else ifeq ($(WASM),true)
+VST3_FILENAME = $(NAME).vst3/Contents/wasm/$(NAME).vst3
+else ifeq ($(WINDOWS),true)
+ifeq ($(CPU_I386),true)
+VST3_FILENAME = $(NAME).vst3/Contents/x86-win/$(NAME).vst3
+else ifeq ($(CPU_X86_64),true)
+VST3_FILENAME = $(NAME).vst3/Contents/x86_64-win/$(NAME).vst3
+endif
+endif
+
+# ---------------------------------------------------------------------------------------------------------------------
+# Set plugin binary file targets
+
+ifeq ($(MACOS),true)
+ifeq ($(HAVE_DGL),true)
+MACOS_APP_BUNDLE = true
+endif
+endif
+
+ifeq ($(MACOS_APP_BUNDLE),true)
+jack = $(TARGET_DIR)/$(NAME).app/Contents/MacOS/$(NAME)
+jackfiles = $(TARGET_DIR)/$(NAME).app/Contents/Info.plist
+else
+jack = $(TARGET_DIR)/$(NAME)$(APP_EXT)
+endif
+ladspa_dsp = $(TARGET_DIR)/$(NAME)-ladspa$(LIB_EXT)
+dssi_dsp = $(TARGET_DIR)/$(NAME)-dssi$(LIB_EXT)
+dssi_ui = $(TARGET_DIR)/$(NAME)-dssi/$(NAME)_ui$(APP_EXT)
+lv2 = $(TARGET_DIR)/$(NAME).lv2/$(NAME)$(LIB_EXT)
+lv2_dsp = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_dsp$(LIB_EXT)
+lv2_ui = $(TARGET_DIR)/$(NAME).lv2/$(NAME)_ui$(LIB_EXT)
+vst2 = $(TARGET_DIR)/$(VST2_FILENAME)
+ifneq ($(VST3_FILENAME),)
+vst3 = $(TARGET_DIR)/$(VST3_FILENAME)
+endif
+shared = $(TARGET_DIR)/$(NAME)$(LIB_EXT)
+static = $(TARGET_DIR)/$(NAME).a
+
+ifeq ($(MACOS),true)
+vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/Info.plist
+vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/PkgInfo
+vst2files += $(TARGET_DIR)/$(VST2_CONTENTS)/Resources/empty.lproj
+vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/Info.plist
+vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/PkgInfo
+vst3files += $(TARGET_DIR)/$(VST3_CONTENTS)/Resources/empty.lproj
+endif
+
+# ---------------------------------------------------------------------------------------------------------------------
+# Set plugin symbols to export
+
+ifeq ($(MACOS),true)
+SYMBOLS_LADSPA = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/ladspa.exp
+SYMBOLS_DSSI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/dssi.exp
+SYMBOLS_LV2DSP = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-dsp.exp
+SYMBOLS_LV2UI = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2-ui.exp
+SYMBOLS_LV2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/lv2.exp
+SYMBOLS_VST2 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst2.exp
+SYMBOLS_VST3 = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/vst3.exp
+SYMBOLS_SHARED = -Wl,-exported_symbols_list,$(DPF_PATH)/utils/symbols/shared.exp
+else ifeq ($(WASM),true)
+SYMBOLS_LADSPA = -sEXPORTED_FUNCTIONS="['ladspa_descriptor']"
+SYMBOLS_DSSI = -sEXPORTED_FUNCTIONS="['ladspa_descriptor','dssi_descriptor']"
+SYMBOLS_LV2DSP = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl']"
+SYMBOLS_LV2UI = -sEXPORTED_FUNCTIONS="['lv2ui_descriptor']"
+SYMBOLS_LV2 = -sEXPORTED_FUNCTIONS="['lv2_descriptor','lv2_generate_ttl','lv2ui_descriptor']"
+SYMBOLS_VST2 = -sEXPORTED_FUNCTIONS="['VSTPluginMain']"
+SYMBOLS_VST3 = -sEXPORTED_FUNCTIONS="['GetPluginFactory','ModuleEntry','ModuleExit']"
+SYMBOLS_SHARED = -sEXPORTED_FUNCTIONS="['createSharedPlugin']"
+else ifeq ($(WINDOWS),true)
+SYMBOLS_LADSPA = $(DPF_PATH)/utils/symbols/ladspa.def
+SYMBOLS_DSSI = $(DPF_PATH)/utils/symbols/dssi.def
+SYMBOLS_LV2DSP = $(DPF_PATH)/utils/symbols/lv2-dsp.def
+SYMBOLS_LV2UI = $(DPF_PATH)/utils/symbols/lv2-ui.def
+SYMBOLS_LV2 = $(DPF_PATH)/utils/symbols/lv2.def
+SYMBOLS_VST2 = $(DPF_PATH)/utils/symbols/vst2.def
+SYMBOLS_VST3 = $(DPF_PATH)/utils/symbols/vst3.def
+SYMBOLS_SHARED = $(DPF_PATH)/utils/symbols/shared.def
+else ifneq ($(DEBUG),true)
+SYMBOLS_LADSPA = -Wl,--version-script=$(DPF_PATH)/utils/symbols/ladspa.version
+SYMBOLS_DSSI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/dssi.version
+SYMBOLS_LV2DSP = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-dsp.version
+SYMBOLS_LV2UI = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2-ui.version
+SYMBOLS_LV2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/lv2.version
+SYMBOLS_VST2 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst2.version
+SYMBOLS_VST3 = -Wl,--version-script=$(DPF_PATH)/utils/symbols/vst3.version
+SYMBOLS_SHARED = -Wl,--version-script=$(DPF_PATH)/utils/symbols/shared.version
+endif
+
+# ---------------------------------------------------------------------------------------------------------------------
# Runtime test build
ifeq ($(DPF_RUNTIME_TESTING),true)
@@ -418,7 +429,7 @@ $(BUILD_DIR)/DistrhoUIMain_DSSI.cpp.o: $(DPF_PATH)/distrho/DistrhoUIMain.cpp $(E
# ---------------------------------------------------------------------------------------------------------------------
# JACK
-jack: $(jack)
+jack: $(jack) $(jackfiles)
ifeq ($(HAVE_DGL),true)
$(jack): $(OBJS_DSP) $(OBJS_UI) $(BUILD_DIR)/DistrhoPluginMain_JACK.cpp.o $(BUILD_DIR)/DistrhoUIMain_JACK.cpp.o $(DGL_LIB)
@@ -542,7 +553,15 @@ endif
# ---------------------------------------------------------------------------------------------------------------------
# macOS files
-$(TARGET_DIR)/%/Contents/Info.plist: $(DPF_PATH)/utils/plugin.vst/Contents/Info.plist
+$(TARGET_DIR)/%.app/Contents/Info.plist: $(DPF_PATH)/utils/plugin.app/Contents/Info.plist
+ -@mkdir -p $(shell dirname $@)
+ $(SILENT)sed -e "s/@INFO_PLIST_PROJECT_NAME@/$(NAME)/" $< > $@
+
+$(TARGET_DIR)/%.vst/Contents/Info.plist: $(DPF_PATH)/utils/plugin.vst/Contents/Info.plist
+ -@mkdir -p $(shell dirname $@)
+ $(SILENT)sed -e "s/@INFO_PLIST_PROJECT_NAME@/$(NAME)/" $< > $@
+
+$(TARGET_DIR)/%.vst3/Contents/Info.plist: $(DPF_PATH)/utils/plugin.vst/Contents/Info.plist
-@mkdir -p $(shell dirname $@)
$(SILENT)sed -e "s/@INFO_PLIST_PROJECT_NAME@/$(NAME)/" $< > $@
diff --git a/utils/plugin.app/Contents/Info.plist b/utils/plugin.app/Contents/Info.plist
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>CFBundleDevelopmentRegion</key>
+ <string>English</string>
+ <key>CFBundleExecutable</key>
+ <string>@INFO_PLIST_PROJECT_NAME@</string>
+ <key>CFBundleIconFile</key>
+ <string></string>
+ <key>CFBundleIdentifier</key>
+ <string>studio.kx.distrho.@INFO_PLIST_PROJECT_NAME@</string>
+ <key>NSHighResolutionCapable</key>
+ <true/>
+ <key>NSRequiresAquaSystemAppearance</key>
+ <false/>
+ <key>NSMicrophoneUsageDescription</key>
+ <string>@INFO_PLIST_PROJECT_NAME@ requires microphone permissions for audio input.</string>
+</dict>
+</plist>
diff --git a/utils/plugin.vst/Contents/Info.plist b/utils/plugin.vst/Contents/Info.plist
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>