################################################################################ # Target Host Architecture ARCH ?= x86_64 # docker / podman DOCKER ?= podman DOCKER_COMPOSE ?= podman-compose # Other programs LISP ?= sbcl RM ?= rm -f ################################################################################ # Git Revision Info GIT_REV ?= $(shell git rev-parse master) # Influences the Docker Image Name IMAGE_NAME ?= cl-deck-builder2-$(GIT_REV) # For bind to this external address for docker-run EXTERNAL_ADDR ?= 5005 EXTERNAL_SLYNK_ADDR ?= 4005 # Platform passed to Dockerfile PLATFORM.x86_64 ?= linux/amd64 PLATFORM.aarch64 ?= linux/arm64/v8 PLATFORM ?= $(PLATFORM.$(ARCH)) ################################################################################ # Code Borrwed from openbookstore # List lisp files, unless they contains a # SRC += $(shell find src/ -name '*.lisp' -a ! -name '*#*') HTML += $(shell find templates/ -name '*.html' -a ! -name '*#*') DEPS += $(SRC) $(HTML) $(wildcard *.asd) # list of supported locales LOCALES := en_US # Example of how the variable should look after adding a new locale: # LOCALES := en_US en_GB fr_FR es_ES # list of .po files (computed from the LOCALES variable) PO_FILES := $(foreach locale,$(LOCALES),locale/$(locale)/LC_MESSAGES/cl-deck-builder2.po) # list of .mo files (computed from the LOCALES variable) MO_FILES := $(foreach locale,$(LOCALES),locale/$(locale)/LC_MESSAGES/cl-deck-builder2.mo) ################################################################################ all: docker-build: Dockerfile test $(DOCKER) buildx build --platform $(PLATFORM) -t $(IMAGE_NAME) . docker-run: $(DOCKER) run --platform $(PLATFORM) \ --rm -it -P -p $(EXTERNAL_SLYNK_ADDR):4005 -p $(EXTERNAL_ADDR):5005 \ --userns=keep-id -v $(HOME)/public:/home/quicklisp/public:z $(IMAGE_NAME) docker-clean: -$(DOCKER) image rm -f $(IMAGE_NAME) clean-fasl: -find -name '*.fasl' | xargs $(RM) -fv clean: clean-fasl -find -name '*~' | xargs $(RM) -fv $(RM) -rf bin/ # I use a feature flag, bc using djula:*recompile-templates-on-change* # requires to load Djula before our app, and it isn't exactly the same meaning. build-lisp-image: ${MO_FILES} $(LISP) --non-interactive \ --eval '(ql:quickload "deploy")' \ --load cl-deck-builder2.asd \ --eval '(push :djula-binary *features*)' \ --eval '(ql:quickload :cl-deck-builder2)' \ --eval '(asdf:make :cl-deck-builder2)' # This must use a custom-built SBCL with a special parameter, # see linux-packaging README. # I have it under ~/.local/bin/bin/sbcl build-package: $(LISP) --non-interactive \ --load cl-deck-builder2.asd \ --eval '(ql:quickload :cl-deck-builder2)' \ --eval '(setf *debugger-hook* (lambda (c h) (declare (ignore h)) (format t "~A~%" c) (sb-ext:quit :unix-status -1)))' \ --eval '(asdf:make :cl-deck-builder2)' # build-gui: # $(LISP) --non-interactive \ # --load cl-deck-builder2.asd \ # --eval '(ql:quickload :bookshops/gui)' \ # --eval '(asdf:make :bookshops/gui)' test: $(LISP) --non-interactive \ --load cl-deck-builder2.asd \ --load cl-deck-builder2-test.asd \ --eval "(ql:quickload '(:cl-deck-builder2 :cl-deck-builder2-test))" \ --eval "(asdf:test-system :cl-deck-builder2)" .PHONY: tr tr: ${MO_FILES} PO_TEMPLATE_DIR := locale/templates/LC_MESSAGES PO_TEMPLATE := ${PO_TEMPLATE_DIR}/cl-deck-builder2.pot # Rule to extract translatable strings from SRC ${PO_TEMPLATE_DIR}/lisp.pot: $(SRC) mkdir -p $(@D) xgettext -k_ -kN_ --language=lisp -o $@ $^ # Rule to extract translatable strings from djula templates ${PO_TEMPLATE_DIR}/djula.pot: $(HTML) src/i18n.lisp $(LISP) --non-interactive \ --eval '(ql:quickload "deploy")' \ --eval '(asdf:load-asd (truename "cl-deck-builder2.asd"))' \ --eval '(push :djula-binary *features*)' \ --eval '(ql:quickload :cl-deck-builder2)' \ --eval '(cl-deck-builder2.i18n:update-djula.pot)' # Rule to combine djula.pot and lisp.pot into cl-deck-builder2.pot ${PO_TEMPLATE}: ${PO_TEMPLATE_DIR}/djula.pot ${PO_TEMPLATE_DIR}/lisp.pot msgcat --use-first $^ > $@ # Rule to generate or update the .po files from the .pot file locale/%/LC_MESSAGES/cl-deck-builder2.po: ${PO_TEMPLATE} mkdir -p $(@D) [ -f $@ ] || msginit --locale=$* \ --no-translator \ -i $< \ -o $@ \ && msgmerge --update $@ $< # Rule to create the .mo files from the .po files locale/%/LC_MESSAGES/cl-deck-builder2.mo: locale/%/LC_MESSAGES/cl-deck-builder2.po mkdir -p $(@D) msgfmt -o $@ $<