SHELL := /bin/bash

.PHONY: help format lint test build imsg clean build-dylib docs-site

help:
	@printf "%s\n" \
		"make format     - swift format in-place" \
		"make lint       - swift format lint + swiftlint" \
		"make test       - sync version, patch deps, run swift test" \
		"make build      - universal release build into bin/" \
		"make build-dylib - build injectable dylib for Messages.app" \
		"make imsg       - clean rebuild + run debug binary (ARGS=...)" \
		"make docs-site  - build the imsg.sh docs site into dist/docs-site" \
		"make clean      - swift package clean"

format:
	swift format --in-place --recursive Sources Tests TestsLinux

lint:
	swift format lint --recursive Sources Tests TestsLinux
	swiftlint

test:
	scripts/generate-version.sh
	swift package resolve
	scripts/patch-deps.sh
	swift test

build:
	scripts/generate-version.sh
	swift package resolve
	scripts/patch-deps.sh
	scripts/build-universal.sh

# Build injectable dylib for Messages.app (DYLD_INSERT_LIBRARIES).
# Uses arm64e architecture to match Messages.app on Apple Silicon.
# Requires SIP disabled on the target machine to inject into system apps.
build-dylib:
	@echo "Building imsg-bridge-helper.dylib (injectable)..."
	@mkdir -p .build/release
	@clang -dynamiclib -arch arm64e -fobjc-arc \
		-Wno-arc-performSelector-leaks \
		-framework Foundation \
		-o .build/release/imsg-bridge-helper.dylib \
		Sources/IMsgHelper/IMsgInjected.m
	@echo "Built .build/release/imsg-bridge-helper.dylib"

imsg:
	scripts/generate-version.sh
	swift package resolve
	scripts/patch-deps.sh
	swift package clean
	swift build -c debug --product imsg
	./.build/debug/imsg $(ARGS)

docs-site:
	node scripts/build-docs-site.mjs

clean:
	swift package clean
	@rm -f .build/release/imsg-bridge-helper.dylib
	@rm -rf dist/docs-site
