SHELL := bash
.ONESHELL:
.SILENT:

GUIX_SCM := guix.scm

ORG := org
ORG_FILES := $(shell fd -t f -g '*.el.org' ${ORG})

SEARCH_GROUP := rg --trim --no-filename --no-line-number -m 1 -r
PKG_NAME := $(shell ${SEARCH_GROUP} '$$1' ';;; +(.*)\.el.*' ${ORG})
PKG_VERSION := $(shell ${SEARCH_GROUP} '$$1' ';; +Version: +(.*)' ${ORG})

SRC := .
SRC_FILES := ${ORG_FILES:${ORG}/%.el.org=${SRC}/%.el}

TEST := test

.PHONY: env
env:
	guix shell -C

.PHONY: check
check: ${SRC_FILES}
	echo "Tests are successful !"

.PHONY: tangle
tangle: ${SRC_FILES}
${SRC}/%.el: ${ORG}/%.el.org
	IN="$<"
	OUT="$@"
	OUT_NAME="$${OUT##*/}"
	TARGET="$${IN%/*}/$${OUT_NAME}"
	emacs -Q --batch --file "$<" --eval "(org-babel-tangle)"
	if [[ ! -f "$${TARGET}" ]]; then
		echo "Assertion error."
		echo "Assertion = TARGET exists."
		echo "TARGET = $${TARGET}"
		exit 1
	fi
	mv -vf "$${TARGET}" "$${OUT}"

.PHONY: inspect
inspect:
	guix shell --rebuild-cache --preserve="^TERM$$" -C -f ${GUIX_SCM} emacs -- emacs --eval "(require '${PKG_NAME})"

.PHONY: build
build:
	guix build -f ${GUIX_SCM}

.PHONY: clean
clean:
	rm -rvf ${SRC_FILES}
