152 lines
4.3 KiB
Makefile
152 lines
4.3 KiB
Makefile
# Makefile
|
|
|
|
## Tools and flags
|
|
SHELL := /bin/sh
|
|
|
|
PORT := 8080
|
|
|
|
STE := ste
|
|
STG := stg
|
|
STS := sts
|
|
STX := stx
|
|
XIPP := xipp
|
|
|
|
GUILE_FLAGS := ""
|
|
STS_FLAGS = --title $(TITLE) --style $$STYLE_REL --favicon $$FAVICON_REL
|
|
XIPP_FLAGS = --relative-to $(WWW_DIR) --prefix '$(CAPSULE_NAME)'
|
|
|
|
CAPSULE_NAME := ~snit
|
|
TITLE := "isekai.rocks/$(CAPSULE_NAME)"
|
|
|
|
|
|
## Directories and files and such
|
|
SITE_DIR := site
|
|
INCL_DIR := incl
|
|
SGT_DIR := build/sgt
|
|
SXML_DIR := build/sxml
|
|
GMI_DIR := dist/gmi
|
|
WWW_DIR := dist/www
|
|
ASST_DIR := asst
|
|
|
|
SCM := scm
|
|
SGT := sgt
|
|
SXM := sxml
|
|
GMI := gmi
|
|
HTM := xhtml
|
|
|
|
ROOT_NAME := index
|
|
|
|
STYLE_SRC := $(ASST_DIR)/style.css
|
|
STYLE_DST := $(WWW_DIR)/style.css
|
|
|
|
FAVICON_SRC := $(ASST_DIR)/favicon.ico
|
|
FAVICON_DST := $(WWW_DIR)/favicon.ico
|
|
|
|
## Source files
|
|
INCLUDE_FILES := $(shell find $(INCL_DIR) -type f -name '*.$(SCM)')
|
|
SITE_FILES := $(shell find $(SITE_DIR) -type f -name '*.$(SCM)')
|
|
|
|
ASSET_FILES := $(shell find $(ASST_DIR) -type f)
|
|
|
|
BANNERS := $(WWW_DIR)/meta/27x81/index.$(HTM)
|
|
|
|
CHILD_FILES := $(filter-out $(SITE_DIR)/$(ROOT_NAME).$(SCM),$(SITE_FILES))
|
|
|
|
SGT_FILES := $(patsubst $(SITE_DIR)/%.$(SCM),$(SGT_DIR)/%.$(SGT),$(CHILD_FILES)) $(SGT_DIR)/$(ROOT_NAME).$(SGT)
|
|
SXML_FILES := $(patsubst $(SITE_DIR)/%.$(SCM),$(SXML_DIR)/%.$(SXM),$(CHILD_FILES)) $(SXML_DIR)/$(ROOT_NAME).$(SXM)
|
|
GMI_FILES := $(patsubst $(SITE_DIR)/%.$(SCM),$(GMI_DIR)/%/index.$(GMI),$(CHILD_FILES)) $(GMI_DIR)/$(ROOT_NAME).$(GMI)
|
|
WWW_FILES := $(patsubst $(SITE_DIR)/%.$(SCM),$(WWW_DIR)/%/index.$(HTM),$(CHILD_FILES)) $(WWW_DIR)/$(ROOT_NAME).$(HTM)
|
|
|
|
GMI_ASST := $(patsubst $(ASST_DIR)/%,$(GMI_DIR)/%,$(ASSET_FILES))
|
|
WWW_ASST := $(patsubst $(ASST_DIR)/%,$(WWW_DIR)/%,$(ASSET_FILES))
|
|
|
|
|
|
|
|
## Build rules (both, gemini-only, http-only)
|
|
all: gmi web
|
|
gmi: $(GMI_FILES) $(GMI_ASST)
|
|
web: $(WWW_FILES) $(WWW_ASST)
|
|
|
|
## Copy assets
|
|
$(GMI_DIR)/%: $(ASST_DIR)/%
|
|
@mkdir -p $(dir $@)
|
|
cp $< $@
|
|
|
|
$(WWW_DIR)/%: $(ASST_DIR)/%
|
|
@mkdir -p $(dir $@)
|
|
cp $< $@
|
|
|
|
|
|
## Evaluate templates (.scm -> .sgt)
|
|
$(SGT_DIR)/%.$(SGT): $(SITE_DIR)/%.$(SCM) $(INCLUDE_FILES)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STE) -I $(INCL_DIR) $< > $@
|
|
|
|
$(SGT_DIR)/$(ROOT_NAME).$(SGT): $(SITE_DIR)/$(ROOT_NAME).$(SCM) $(INCLUDE_FILES)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STE) -I $(INCL_DIR) $< > $@
|
|
|
|
|
|
## Render GemText from SGT data (.sgt -> .gmi)
|
|
$(GMI_DIR)/%/index.$(GMI): $(SGT_DIR)/%.$(SGT) $(INCLUDE_FILES)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STG) $< > $@
|
|
|
|
$(GMI_DIR)/$(ROOT_NAME).$(GMI): $(SGT_DIR)/$(ROOT_NAME).$(SGT) $(INCLUDE_FILES)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STG) $< > $@
|
|
|
|
|
|
## Render SXML data from SGT data (.sgt -> .sxml)
|
|
$(SXML_DIR)/%.$(SXM): $(SGT_DIR)/%.$(SGT) $(STYLE_DST) $(FAVICON_DST) $(WWW_ASST)
|
|
@mkdir -p $(dir $@)
|
|
STYLE_REL=$$(realpath -m --relative-to=$(WWW_DIR)/$* $(STYLE_DST)); \
|
|
FAVICON_REL=$$(realpath -m --relative-to=$(WWW_DIR)/$* $(FAVICON_DST)); \
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STS) $(STS_FLAGS) $< | \
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(XIPP) $(XIPP_FLAGS) > $@
|
|
|
|
$(SXML_DIR)/$(ROOT_NAME).$(SXM): $(SGT_DIR)/$(ROOT_NAME).$(SGT) $(STYLE_DST) $(FAVICON_DST) $(WWW_ASST)
|
|
@mkdir -p $(dir $@)
|
|
STYLE_REL=$$(realpath -m --relative-to=$(WWW_DIR)/$* $(STYLE_DST)); \
|
|
FAVICON_REL=$$(realpath -m --relative-to=$(WWW_DIR)/$* $(FAVICON_DST)); \
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STS) $(STS_FLAGS) $< | \
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(XIPP) $(XIPP_FLAGS) > $@
|
|
|
|
$(BANNERS): XIPP_FLAGS += --replace --button
|
|
|
|
|
|
## Render XHTML from SGT data (.sgt -> .xhtml)
|
|
$(WWW_DIR)/%/index.$(HTM): $(SXML_DIR)/%.$(SXM)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STX) $< > $@
|
|
|
|
$(WWW_DIR)/$(ROOT_NAME).$(HTM): $(SXML_DIR)/$(ROOT_NAME).$(SXM)
|
|
@mkdir -p $(dir $@)
|
|
GUILE_FLAGS=$(GUILE_FLAGS) $(STX) $< > $@
|
|
|
|
|
|
## We want to keep intermediary files
|
|
.SECONDARY: $(SGT_FILES) $(SXML_FILES)
|
|
|
|
|
|
## Delete rendered files or both
|
|
clean:
|
|
rm -rf $(GMI_DIR) $(WWW_DIR)
|
|
|
|
distclean: clean
|
|
rm -rf $(SGT_DIR) $(SXML_DIR)
|
|
|
|
|
|
## Run a local web server to view changes
|
|
wwwsrv:
|
|
@$(MAKE) HTM=html web
|
|
@echo
|
|
@echo "This is a long-running server; you may wish to run inside tmux/screen"
|
|
@echo "Visit http://localhost:$(PORT)/$(CAPSULE_NAME) to view your changes"
|
|
@TMPDIR=$$(mktemp -d); \
|
|
trap "rm -r $$TMPDIR" EXIT; \
|
|
ln -s $$(realpath $(WWW_DIR)) $$TMPDIR/$(CAPSULE_NAME); \
|
|
cd $$TMPDIR; \
|
|
python -m http.server $(PORT)
|
|
|
|
.PHONY: all gmi web clean distclean wwwsrv
|