X-Git-Url: https://git.ladys.computer/WWW/blobdiff_plain/86942bda88e834ee9fd5129483d38be15fe5950f..HEAD:/GNUmakefile diff --git a/GNUmakefile b/GNUmakefile index b40c209..8486bff 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -6,48 +6,48 @@ SHELL = /bin/sh # License, v. 2.0. If a copy of the MPL was not distributed with this # file, You can obtain one at https://mozilla.org/MPL/2.0/. -# This Makefile requires rsync 3 or newer. -RSYNC = rsync -RSYNC_FLAGS = -Oclmrtvz -RSYNC_OPTIONS = -RSYNC_FILTER = .rsync-filter +SRCDIR := sources +BUILDDIR := build +BUILDTARGET := .grass +DESTDIR := public -SOURCE_CHARSET = utf-8-mac +SHUSHE := .β›©πŸ“° +SHUSHEOPTS := SRCDIR='$(SRCDIR)' INCLUDEDIR='$(SRCDIR)/{include}' EXTRAPARSERS='$(wildcard parsers/*.xslt)' EXTRATRANSFORMS='$(wildcard transforms/*.xslt)' -DESTINATION_HOST = computer -DESTINATION_PATH = lady/www -DESTINATION = $(DESTINATION_HOST):$(DESTINATION_PATH) -DESTINATION_CHARSET = utf-8 +YSEME := .πŸ‘₯πŸ“€ +YSEMEOPTS := BUILDTARGET='.grass' DESTDIR='$(DESTDIR)' SERVERPATH='lady/www' -GIT_FORCE = +# ━ Β§ Call out to β›©πŸ“° δΉ¦η€Ύ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -SHUSHE = .shushe -SHUSHE_OPTIONS = 'INCLUDEDIR=sources/INCLUDE' 'TRANSFORMS=$(wildcard transforms/*.xslt) $(wildcard $(SHUSHE)/transforms/*.xslt)' +build : $(SHUSHE)/GNUmakefile prebuild + @for publicfile in $(patsubst %,"%",$(wildcard $(DESTDIR)/*)); do if git check-ignore -q "$$publicfile"; then rm -rf "$$publicfile"; fi; done + @$(MAKE) -f '$<' install $(SHUSHEOPTS) + @touch '$(BUILDTARGET)' -build: - rm -rf ./public - @$(MAKE) -f $(SHUSHE)/GNUmakefile install $(SHUSHE_OPTIONS) - touch .grass +prebuild : $(SHUSHE)/GNUmakefile + @$(MAKE) -f '$<' $(SHUSHEOPTS) -list: - @$(MAKE) -f $(SHUSHE)/GNUmakefile list $(SHUSHE_OPTIONS) +list : $(SHUSHE)/GNUmakefile + @$(MAKE) -f '$<' $@ $(SHUSHEOPTS) -ensure-build: - @if [ ! -f .grass ]; then echo 'Error: The website has not been built yet!' >&2; echo 'Run `make` before syncing.' >&2; exit 1; fi - @if buildtime=$$(stat -f '%m' .grass) && committime=$$(git log -1 --format='%ct' | awk '{print $$NF}') && [ "$$committime" -gt "$$buildtime" ]; then echo 'Error: A commit was made after the last build!' >&2; echo 'Run `make` before syncing.' >&2; exit 1; fi +$(BUILDDIR)/% $(DESTDIR)/% : $(SHUSHE)/GNUmakefile + @$(MAKE) -f '$<' $@ $(SHUSHEOPTS) -ensure-branch-up-to-date: - git fetch - @if ! git merge-base --is-ancestor @{u} HEAD; then echo 'Error: This branch is currently out‐of‐date!' >&2; echo 'Pull in changes with `git pull` before syncing.' >&2; exit 1; fi +# ━ Β§ Call out to πŸ‘₯πŸ“€ Yseme ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -ensure-clean: - @if output=$$(git status --porcelain) && [ ! -z "$$output" ]; then echo 'Error: There are uncommitted changes!' >&2; echo 'Commit changes and run `make` before syncing.' >&2; exit 1; fi +dry-sync sync : $(YSEME)/GNUmakefile + $(MAKE) -f '$<' $@ $(YSEMEOPTS) -dry-sync: ensure-clean$(if $(GIT_FORCE),, ensure-branch-up-to-date) ensure-build - cd public && $(RSYNC) $(RSYNC_FLAGS) --del --dry-run --filter=". ../$(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION) +# ━ Β§ Special targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ -sync: ensure-clean$(if $(GIT_FORCE),, ensure-branch-up-to-date) ensure-build - cd public && $(RSYNC) $(RSYNC_FLAGS) --del --filter=". ../$(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION) - git push$(if $(GIT_FORCE), --force,) +gone : + @for publicfile in $(patsubst %,"%",$(wildcard $(DESTDIR)/*)); do if git check-ignore -q "$$publicfile"; then rm -rf "$$publicfile"; fi; done -.PHONY: build dry-sync ensure-branch-up-to-date ensure-build ensure-clean sync; +FORCE : ; + +.PHONY : FORCE build dry-sync gone list prebuild sync ; + +# ━ Β§ MakeΒ·file targets ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ + +$(SHUSHE)/GNUmakefile $(YSEME)/GNUmakefile : %/GNUmakefile : FORCE + git submodule update --init '$*'