-include build/base.Makefile
-include build/docker.Makefile
-include build/audio.Makefile


help::
	@echo "$(APP_NAME) targets:"
	@echo "    init.app        	- init application environment"
	@echo "    init.dev        	- init development environment"
	@echo "    lint            	- verify code style"
	@echo "    spell           	- check spelling of text"
	@echo "    test            	- run test suite"
	@echo "    log             	- tail log file"
	@echo "    tns             	- connect to telnet server"
	@echo "    run             	- start app"
	@echo "    run.debug       	- start app in debug mode"
	@echo "    release         	- tag and push release with current version"
	@echo "    docker.init     	- create docker volume for engine socket"
	$(call docker_help)
	$(call audio_help)
	@echo "    audio.lqs.test  	- test audio device using liquidsoap"


# Settings

AURA_ENGINE_CORE_ALSA_CONFIG := ${CURDIR}/config/asound.conf
AURA_ENGINE_CORE_SOCKET := "aura_engine_socket"
AURA_ENGINE_CORE_CONFIG := ${CURDIR}/config/engine-core.docker.ini
AURA_AUDIO_STORE_SOURCE := ${CURDIR}/audio/source
AURA_AUDIO_STORE_PLAYLIST := ${CURDIR}/audio/playlist
AURA_AUDIO_STORE_FALLBACK := ${CURDIR}/audio/fallback
AURA_LOGS := ${CURDIR}/logs
AURA_UID := 2872
AURA_GID := 2872

DOCKER_RUN = @docker run \
		--name $(APP_NAME) \
		--network="host" \
		--mount type=tmpfs,destination=/tmp \
		--device /dev/snd \
		--group-add audio \
		--ulimit rtprio=95 --ulimit memlock=-1 --shm-size=512m \
		--env-file docker.env \
		-v "$(AURA_ENGINE_CORE_ALSA_CONFIG)":"/etc/asound.conf" \
		-v "$(AURA_ENGINE_CORE_SOCKET)":"/srv/socket" \
		-v "$(AURA_ENGINE_CORE_CONFIG)":"/etc/aura/engine-core.ini":ro \
		-v "$(AURA_AUDIO_STORE_SOURCE)":"/var/audio/source":ro \
		-v "$(AURA_AUDIO_STORE_PLAYLIST)":"/var/audio/playlist":ro \
		-v "$(AURA_AUDIO_STORE_FALLBACK)":"/var/audio/fallback":ro \
		-v "$(AURA_LOGS)":"/srv/logs" \
		-p 1234:1234 \
		-u $(AURA_UID):$(AURA_GID) \
		$(DOCKER_ENTRY_POINT) \
		autoradio/$(APP_NAME)

# Targets

lint::
	liquidsoap --check src/engine.liq

spell::
	codespell $(wildcard *.md) docs src tests config contrib

init.app::
	cp -n config/sample.engine-core.ini config/engine-core.ini || true
	mkdir -p audio/fallback
	mkdir -p audio/playlist
	mkdir -p audio/source

init.dev:: init.app
	sudo apt install -y codespell
	sudo apt install -y pre-commit
	pre-commit autoupdate
	pre-commit install

test::
	(cd tests && pw-jack liquidsoap engine_test_suite.liq)

log::
	tail -f logs/$(APP_NAME).log

tns::
	telnet 0.0.0.0 1234

run::
	(cd src && pw-jack liquidsoap ./engine.liq)

run.debug::
	(cd src && pw-jack liquidsoap --verbose --debug ./engine.liq)

docker.init::
	@echo "Creating Docker Volume for Engine Socket at '$(AURA_ENGINE_CORE_SOCKET)'"
	docker volume create aura_engine_socket

audio.lqs.test::
	pw-jack liquidsoap tests/device/alsa_device_aura_engine.liq

release:: VERSION = $$(cat ${CURDIR}/VERSION)
release::
	git tag $(VERSION)
	git push origin $(VERSION)
	@echo "Release '$(VERSION)' tagged and pushed successfully."