# RMX-19 build & install Makefile (macOS arm64 and Linux)
#
#   make            configure + build (VST3 everywhere; AU additionally on macOS)
#   make install    build and install the VST3 (and AU on macOS). macOS bundles
#                   are ad-hoc codesigned and de-quarantined; on Linux the plug-in
#                   is copied to ~/.vst3
#   make uninstall  remove installed bundles
#   make clean      delete the CMake build tree
#
# Note (macOS): after install, restart (or cold-start) the audio host so it
# rescans AudioComponents. A fresh AU/AUv3 may first appear after a host relaunch.

BUILD_DIR  ?= build
CONFIG     ?= Release
PLUGIN_BASE = RMX-19

CMAKE      := cmake
BUILD_DIR_ABSPATH := $(abspath $(BUILD_DIR))
ARTEFACTS  := $(BUILD_DIR)/RMX19_artefacts/$(CONFIG)

JUCE_DIR   := $(BUILD_DIR)/JUCE
JUCE_REPO  := https://github.com/juce-framework/JUCE.git
JUCE_TAG   := 8.0.4

VST3_SRC   := $(ARTEFACTS)/VST3/$(PLUGIN_BASE).vst3
AU_SRC     := $(ARTEFACTS)/AU/$(PLUGIN_BASE).component

UNAME_S    := $(shell uname -s)

ifeq ($(UNAME_S),Darwin)
VST3_DEST  := $(HOME)/Library/Audio/Plug-Ins/VST3/$(PLUGIN_BASE).vst3
AU_DEST    := $(HOME)/Library/Audio/Plug-Ins/Components/$(PLUGIN_BASE).component
USER_PLUGIN_DIRS := $(HOME)/Library/Audio/Plug-Ins/VST3 $(HOME)/Library/Audio/Plug-Ins/Components
else
# Linux/BSD: the VST3 SDK scans ~/.vst3 by default. No AU, no codesigning.
VST3_DEST  := $(HOME)/.vst3/$(PLUGIN_BASE).vst3
AU_DEST    :=
USER_PLUGIN_DIRS := $(HOME)/.vst3
endif

.EXPORT_ALL_VARIABLES:
CMAKE_BUILD_TYPE := $(CONFIG)

.PHONY: all configure build install uninstall clean info juce

all: build

build: configure
	$(CMAKE) --build $(BUILD_DIR) --config $(CONFIG) --parallel

juce:
	@if [ ! -d "$(JUCE_DIR)" ]; then \
		echo "Fetching JUCE $(JUCE_TAG)..."; \
		git clone -c advice.detachedHead=false --branch $(JUCE_TAG) --depth 1 $(JUCE_REPO) $(JUCE_DIR); \
	else \
		echo "JUCE already present at $(JUCE_DIR)"; \
	fi

# Re-run cmake on every invocation: it is cheap when nothing changed and keeps
# the footer's git branch/hash and local build timestamp fresh.
configure: juce
	$(CMAKE) -S . -B $(BUILD_DIR) -DCMAKE_BUILD_TYPE=$(CONFIG) -DJUCE_ROOT=$(JUCE_DIR)

ifeq ($(UNAME_S),Darwin)
install: build
	@codesign --force --deep --sign - "$(VST3_SRC)" >/dev/null 2>&1 || true
	@codesign --force --deep --sign - "$(AU_SRC)"   >/dev/null 2>&1 || true
	@mkdir -p $(USER_PLUGIN_DIRS)
	@cp -Rf "$(VST3_SRC)" "$(HOME)/Library/Audio/Plug-Ins/VST3/"
	@cp -Rf "$(AU_SRC)"   "$(HOME)/Library/Audio/Plug-Ins/Components/"
	@xattr -dr com.apple.quarantine "$(VST3_DEST)" 2>/dev/null || true
	@xattr -dr com.apple.quarantine "$(AU_DEST)"   2>/dev/null || true
	@echo "installed:"
	@echo "  $(VST3_DEST)"
	@echo "  $(AU_DEST)"
	@echo ""
	@echo "audiosignature:"
	@codesign -dv "$(VST3_DEST)" 2>&1 | head -1
	@echo ""
	@echo "Restart your DAW / AudioHost to make the AU rescan."
else
install: build
	@mkdir -p $(USER_PLUGIN_DIRS)
	@rm -rf "$(VST3_DEST)"
	@cp -Rf "$(VST3_SRC)" "$(USER_PLUGIN_DIRS)/"
	@echo "installed:"
	@echo "  $(VST3_DEST)"
endif

uninstall:
	@rm -rf "$(VST3_DEST)" "$(AU_DEST)"
	@echo "removed RMX-19 from user plug-in folder(s)."

clean:
	@rm -rf $(BUILD_DIR)
	@echo "removed $(BUILD_DIR)."

info:
	@echo "BUILD_DIR   : $(BUILD_DIR_ABSPATH)"
	@echo "CONFIG      : $(CONFIG)"
	@echo "VST3        : $(VST3_SRC)"
	@echo "AU          : $(AU_SRC)"