diff options
Diffstat (limited to 'Makefile')
| -rw-r--r-- | Makefile | 126 |
1 files changed, 116 insertions, 10 deletions
@@ -1,16 +1,122 @@ .POSIX: -.DEFAULT: - $(MAKE) generated.mk - $(MAKE) -f dynamic.mk $< +DATE = 1970-01-01 +VERSION = 0.1.0 +NAME = euandre.org +NAME_UC = $(NAME) +PORT = 3333 +LANGUAGES = en -all: generated.mk - $(MAKE) -f dynamic.mk all -generated.mk: ALWAYS JEKYLL_COMPAT - sh src/development/dynmake.sh > $@ +all: +include deps.mk +$(derived-assets): Makefile deps.mk -ALWAYS: +## ---- what this site has beyond the canonical rules ------------- + +## The favicons this site renders from img/favicon.svg, rather than +## carrying as sources the way papo.im does: derived, so clean takes +## them. +side-assets += src/content/favicon.ico src/content/favicon.png +side-assets += have.txt want.txt stale.txt kept.txt dirs.txt rmlist.txt + +integration-tests = \ + +.PRECIOUS: $(integration-tests) +$(integration-tests): ALWAYS + sh $@ + +check-integration: $(integration-tests) + +check: check-unit check-integration + + + +i18n: + po4a po/po4a.cfg + + + +run: + serve -n -p $(PORT) -d '$(DESTDIR)$(HTMLDIR)' + +want.txt: install.txt + sort install.txt | sed 's|^|/srv/www/|' > $@ + +## Files and links only: install.txt names no directories, so an +## unfiltered find would call every one of them stale --- /srv/www +## among them. +have.txt: + ssh euandre.org 'find /srv/www \( -type f -o -type l \)' | sort > $@ -JEKYLL_COMPAT: - sh src/development/JEKYLL_COMPAT/copy-content.sh +stale.txt: have.txt want.txt + comm -23 have.txt want.txt > $@ + +## Which directories the pruning empties: those that held something +## stale and hold nothing that stays. Both are read off the two +## lists already in hand, so nothing has to walk the tree over there +## asking rmdir to refuse most of what it is offered. +## +## In no particular order: rm -rf takes a directory with whatever is +## under it, so a parent reached before its child carries the child +## away and the child's own turn finds nothing left to do. The +## sorting that remains is comm's, which needs both sides ordered. +kept.txt: have.txt want.txt stale.txt + comm -12 have.txt want.txt | ancestors /srv/www | sort -u > $@ + +dirs.txt: stale.txt kept.txt + ancestors /srv/www < stale.txt | sort -u | comm -23 - kept.txt > $@ + +rmlist.txt: stale.txt dirs.txt + cat stale.txt dirs.txt > $@ + +## Prune, then send. Ask the server what it has, take away the list +## "all" already wrote, and delete what is left over; then extract. +## +## Only the stale names go, so a page that stays is never taken from +## under a reader, and there is no moment when the site is missing. +## The comparison is comm here rather than a script over there, and +## every step lands in a file that says what it holds, so what is +## about to be removed can be read before it is. +## +## Emptied by name rather than replaced wholesale: /srv is root's, so +## /srv/www's own directory entry cannot be removed or remade. +upload: rmlist.txt install.tar + cat rmlist.txt | ssh euandre.org xargs rm -rf + cat install.tar | ssh euandre.org tar -xf - -C /srv/www + + + +## Remove all derived artifacts produced during the build. +clean: + rm -rf $(derived-assets) $(side-assets) + ## The legacy-URL symlinks sit in directories mkwb symlinks had + ## to create; removing the links leaves those empty. Naming + ## them drifts the moment a link is added --- which it did --- + ## so let rmdir decide: git cannot track an empty directory, so + ## under the content root an empty one is always residue. + ## -depth walks bottom-up, which is what prunes a whole branch. + find src/content -depth -type d -exec rmdir {} + 2>/dev/null || true + + +## Install into $(DESTDIR)$(PREFIX) by extracting what "all" +## already packed: the same two tarballs that go to a server, so +## installing next door and deploying across a network are the one +## operation. tar(1) rather than rsync(1), one fewer dependency +## outside the fleet. Unlike rsync --delete it adds without +## pruning --- an install over a tree still holding a page whose +## source is gone leaves that page there --- so install into an +## empty $(DESTDIR), or uninstall first. +install: all + mkdir -p '$(DESTDIR)$(HTMLDIR)' '$(DESTDIR)$(SRCDIR)' + cat install.tar | tar -xf - -C '$(DESTDIR)$(HTMLDIR)' + cat sources.tar | tar -xf - -C '$(DESTDIR)$(SRCDIR)' + +## Remove what install placed. +uninstall: + rm -rf \ + '$(DESTDIR)$(SRCDIR)' \ + '$(DESTDIR)$(HTMLDIR)' \ + + +ALWAYS: |
