X-Git-Url: https://git.ladys.computer/WWW/blobdiff_plain/ad249fcdf0bf13bc6abaa97a80fc63b8de002601..73fc43cc0e92049ffbe1c57fa31e87314c0b914d:/GNUmakefile?ds=sidebyside diff --git a/GNUmakefile b/GNUmakefile index 93fb66e..275f6ca 100644 --- a/GNUmakefile +++ b/GNUmakefile @@ -1,44 +1,36 @@ SHELL = /bin/sh -# © 2023 Lady [@ Lady’s Computer]. +# © 2023–2024 Lady [@ Lady’s Computer]. # # This Source Code Form is subject to the terms of the Mozilla Public # 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 +SHUSHE := .shushe +SHUSHE_OPTIONS := INCLUDEDIR='sources/INCLUDE' TRANSFORMS='$(wildcard transforms/*.xslt) $(wildcard $(SHUSHE)/transforms/*.xslt)' -SOURCE_CHARSET = utf-8-mac +YSEME := .yseme +YSEME_OPTIONS := DESTDIR=public SERVERPATH=lady/www -DESTINATION_HOST = computer -DESTINATION_PATH = lady/www -DESTINATION = $(DESTINATION_HOST):$(DESTINATION_PATH) -DESTINATION_CHARSET = utf-8 - -build: -# Put any necessary build scripts in here! +build: $(SHUSHE)/GNUmakefile + rm -rf ./public + @$(MAKE) -f $< install $(SHUSHE_OPTIONS) touch .grass -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 +list: $(SHUSHE)/GNUmakefile + @$(MAKE) -f $< $@ $(SHUSHE_OPTIONS) -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 +$(SHUSHE)/GNUmakefile $(YSEME)/GNUmakefile: %/GNUmakefile: + git submodule update --init $* -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 +GNUmakefile: $(SHUSHE)/GNUmakefile $(YSEME)/GNUmakefile + touch GNUmakefile -dry-sync: ensure-clean ensure-branch-up-to-date ensure-build - $(RSYNC) $(RSYNC_FLAGS) --del --dry-run --filter=". $(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION) +ifneq ($(wildcard $(YSEME)/GNUmakefile),) +YSEME_TARGETS := $(shell sed '/^\.PHONY[ :]/!d;/^\.PHONY[ :]/s/ *;.*//;/^\.PHONY[ :]/s/\.PHONY.*: *//' < $(YSEME)/GNUmakefile) -sync: ensure-clean ensure-branch-up-to-date ensure-build - $(RSYNC) $(RSYNC_FLAGS) --del --filter=". $(RSYNC_FILTER)" --iconv=$(SOURCE_CHARSET),$(DESTINATION_CHARSET) $(RSYNC_OPTIONS) . $(DESTINATION) - git push --force +$(YSEME_TARGETS): $(YSEME)/GNUmakefile + @$(MAKE) -f $< $@ $(YSEME_OPTIONS) +endif -.PHONY: build dry-sync ensure-branch-up-to-date ensure-build ensure-clean sync; +.PHONY: build list $(YSEME_TARGETS);