summaryrefslogtreecommitdiff
path: root/Makefile
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2025-05-01 21:13:25 -0300
committerEuAndreh <eu@euandre.org>2025-05-01 21:13:25 -0300
commitcc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55 (patch)
tree6456f83c69227177b7eb1faf3f226f46ae6e92a2 /Makefile
parentsrc/content/incidents/index.adoc: Hoist links to variables (diff)
downloadpapo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.gz
papo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.xz
Update to support i18n
Diffstat (limited to 'Makefile')
-rw-r--r--Makefile198
1 files changed, 145 insertions, 53 deletions
diff --git a/Makefile b/Makefile
index 9284186..8679ad3 100644
--- a/Makefile
+++ b/Makefile
@@ -19,14 +19,16 @@ EXEC = ./
## Where to store the installation. Empty by default.
DESTDIR =
LDLIBS =
-PUBURL = public.asc
+PUBURL = public.asc.txt
+FFMFLAGS = -y -hide_banner -loglevel warning
+BASEURL = /
.SUFFIXES:
-.SUFFIXES: .adoc .conf .snippets .indexentry .feedentry .sortdata .xml .txt
+.SUFFIXES: .adoc .conf .snippets .indexentry .feedentry .mapentry .sortdata .xml
.SUFFIXES: .htmlbody .htmlheader .htmlfooter .htmllisting .html .links .caslinks
-.SUFFIXES: .categorydata .gz
+.SUFFIXES: .txt .categorydata .gz .torrent .flac .ogg .ps .pdf
.adoc.conf:
mkwb conf src/global.conf $< > $@
@@ -43,9 +45,6 @@ PUBURL = public.asc
.conf.htmlfooter:
mkwb html -F $< > $@
-.conf.htmllisting:
- mkwb indexbody $< > $@
-
.adoc.snippets:
mkwb snippets $< > $@
@@ -55,6 +54,9 @@ PUBURL = public.asc
.htmlbody.feedentry:
mkwb feedentry $< > $@
+.conf.mapentry:
+ mkwb mapentry $< > $@
+
.conf.sortdata:
mkwb sortdata $< > $@
@@ -69,47 +71,67 @@ PUBURL = public.asc
printf "%s\n" "_" | sha256sum | \
printf "%s\t%s\n" "`cut -d" " -f1`" "_"' > $@
+.flac.ogg:
+ ffmpeg $(FFMFLAGS) -i $< -ar 48000 -vn -c:a libvorbis -b:a 320k $@
+
+.adoc.ps:
+ eslaides < $< > $@
+
+.ps.pdf:
+ ps2pdf - < $< > $@
+
all:
include deps.mk
-sources.adoc = $(articles.adoc) $(listings.adoc) $(pages.adoc)
-sources.htmlbody = $(sources.adoc:.adoc=.htmlbody)
-sources.html = $(sources.adoc:.adoc=.html)
-sources.snippets = $(sources.adoc:.adoc=.snippets)
-sources.snippets.gz = $(sources.adoc:.adoc=.snippets.gz)
-sources.conf = $(sources.adoc:.adoc=.conf)
-sources.links = $(sources.adoc:.adoc=.links)
-sources.caslinks = $(sources.adoc:.adoc=.caslinks)
-articles.indexentry = $(articles.adoc:.adoc=.indexentry)
-articles.feedentry = $(articles.adoc:.adoc=.feedentry)
-articles.sortdata = $(articles.adoc:.adoc=.sortdata)
-articles.categorydata = $(articles.adoc:.adoc=.categorydata)
-listings.htmlheader = $(listings.adoc:.adoc=.htmlheader)
-listings.htmlfooter = $(listings.adoc:.adoc=.htmlfooter)
-listings.htmllisting = $(listings.adoc:.adoc=.htmllisting)
-listings.html = $(listings.adoc:.adoc=.html)
-categories.xml = $(categories.txt:.txt=.xml)
-categories.xml.gz = $(categories.txt:.txt=.xml.gz)
+listings.adoc = $(categories.adoc) $(indexes.adoc)
+sources.adoc = $(articles.adoc) $(listings.adoc) $(pages.adoc)
+sources.htmlbody = $(sources.adoc:.adoc=.htmlbody)
+sources.html = $(sources.adoc:.adoc=.html)
+sources.snippets = $(sources.adoc:.adoc=.snippets)
+sources.snippets.gz = $(sources.adoc:.adoc=.snippets.gz)
+sources.conf = $(sources.adoc:.adoc=.conf)
+sources.links = $(sources.adoc:.adoc=.links)
+sources.caslinks = $(sources.adoc:.adoc=.caslinks)
+sources.mapentry = $(sources.adoc:.adoc=.mapentry)
+articles.indexentry = $(articles.adoc:.adoc=.indexentry)
+articles.feedentry = $(articles.adoc:.adoc=.feedentry)
+articles.sortdata = $(articles.adoc:.adoc=.sortdata)
+articles.categorydata = $(articles.adoc:.adoc=.categorydata)
+listings.htmlheader = $(listings.adoc:.adoc=.htmlheader)
+listings.htmlfooter = $(listings.adoc:.adoc=.htmlfooter)
+listings.html = $(listings.adoc:.adoc=.html)
+indexes.htmllisting = $(indexes.adoc:.adoc=.htmllisting)
+categories.htmllisting = $(categories.adoc:.adoc=.htmllisting)
+categories.txt = $(categories.adoc:.adoc=.txt)
+categories.xml = $(categories.adoc:.adoc=.xml)
+categories.xml.gz = $(categories.adoc:.adoc=.xml.gz)
+sources.media.torrent = $(sources.media:=.torrent)
+slides.ps = $(slides.adoc:.adoc=.ps)
+slides.pdf = $(slides.adoc:.adoc=.pdf)
sources = \
$(sources.adoc) \
$(sources.extras) \
$(images.svg) \
src/content/favicon.ico \
+ src/content/favicon.png \
src/content/style.css \
src/content/$(PUBURL) \
dynamic-contents = \
$(sources.html) \
+ $(slides.pdf) \
$(feeds.xml) \
+ src/content/sitemap.xml \
static-contents = \
$(sources.extras) \
$(images.svg) \
src/content/favicon.ico \
+ src/content/favicon.png \
src/content/style.css \
src/content/$(PUBURL) \
src/content/.well-known/security.txt \
@@ -130,8 +152,6 @@ contents.gz = \
contents = \
$(dynamic-contents) \
$(static-contents) \
- src/content/security.txt \
- src/content/security.txt.gz \
all-filelists = \
$(sources.snippets) \
@@ -147,64 +167,84 @@ all-contents = \
derived-assets = \
$(dynamic-contents) \
$(contents.gz) \
+ $(sources.html) \
$(sources.htmlbody) \
$(sources.snippets) \
$(sources.snippets.gz) \
+ $(sources.conf) \
$(sources.links) \
$(sources.caslinks) \
- $(sources.conf) \
+ $(sources.mapentry) \
src/dyn.conf \
src/base.conf \
src/global.conf \
- $(listings.htmlheader) \
- $(listings.htmlfooter) \
- $(listings.htmllisting) \
$(articles.indexentry) \
$(articles.feedentry) \
$(articles.sortdata) \
$(articles.categorydata) \
+ $(listings.htmlheader) \
+ $(listings.htmlfooter) \
+ $(listings.html) \
+ $(indexes.htmllisting) \
+ $(categories.htmllisting) \
$(categories.txt) \
$(categories.xml) \
$(categories.xml.gz) \
+ $(slides.ps) \
+ $(slides.pdf) \
email.txt \
baseurl.txt \
fingerprint.txt \
expiry.txt \
- src/content/security.txt \
- src/content/security.txt.gz \
+ expiry-epoch.txt \
+ now.txt \
src/content/.well-known/security.txt \
src/all-contents.txt \
src/all-filelists.txt \
+ src/all-symlinks.txt \
src/install.txt \
src/sort-expected.txt \
src/sort-given.txt \
src/sources.txt \
install.txt \
sources.txt \
+ src/content/.gitignore \
+ i18n.sentinel \
+
+captured-assets = \
+ src/content/$(PUBURL) \
+ src/content/favicon.ico \
+ src/content/favicon.png \
+ $(sources.media.torrent) \
side-assets = \
- src/collections/*/*/*/*/*.html.*.txt \
- src/collections/*/*/*/*/*.html.*.txt.gz \
- src/collections/*/index.html.*.txt \
- src/collections/*/sortdata.txt \
- src/collections/*/feed.*.xml \
- src/collections/*/feed.*.xml.gz \
- src/collections/*/*.sortdata \
+ src/collections/*/*/*/*/*/*.html.*.txt \
+ src/collections/*/*/*/*/*/*.txt.gz \
+ src/collections/*/*/index.html.*.txt \
+ src/collections/*/*/sortdata.txt \
+ src/collections/*/*/feed.*.xml \
+ src/collections/*/*/feed.*.xml.gz \
+ src/collections/*/*/*.sortdata \
src/pages/*/*.html.*.txt \
src/content/.well-known/ \
+ `cat src/all-symlinks.txt 2>/dev/null` \
+ `cat src/linkonly-dirs.txt 2>/dev/null` \
## Default target. Builds all artifacts required for testing
## and installation.
all: $(derived-assets)
-all: src/content/$(PUBURL) src/content/favicon.ico
+all: $(captured-assets)
$(derived-assets): Makefile deps.mk
-$(sources.conf): src/global.conf src/headers.txt
+$(sources.conf): src/global.conf
+src/content/.gitignore: src/symlinks.txt
+ cd src/content/ && mkwb symlinks ../symlinks.txt > $(@F)
+
src/dyn.conf: email.txt baseurl.txt fingerprint.txt
printf "export url_pre='%s'\n" "`cat baseurl.txt`" > $@
printf "export email='%s'\n" "`cat email.txt`" >> $@
@@ -219,19 +259,25 @@ src/global.conf: src/base.conf
mkwb conf -G src/base.conf > $@
$(listings.html):
- cat $*.htmlheader $*.htmllisting $*.htmlbody $*.htmlfooter > $@
+ cat $*.htmlheader $*.htmlbody $*.htmllisting $*.htmlfooter > $@
+
+$(indexes.htmllisting):
+ mkwb indexbody $*.conf > $@
+
+$(categories.htmllisting):
+ mkwb categoriesbody $*.conf > $@
-$(categories.txt):
- mkwb categories $(@D) > $@
+$(categories.txt): src/global.conf
+ mkwb categories src/global.conf $(@D) > $@
-$(categories.xml):
+$(categories.xml): src/global.conf
for f in `cat $*.txt`; do \
c="`printf '%s\n' "$$f" | cut -d. -f2`"; \
mkwb feed src/global.conf "$$f" > $(@D)/feed."$$c".xml; \
printf '%s\n' $(@D)/feed."$$c".xml; \
done > $@
-$(feeds.xml):
+$(feeds.xml): src/global.conf
mkwb feed src/global.conf $(@D)/sortdata.txt > $@
$(contents.gz):
@@ -250,6 +296,17 @@ src/content/favicon.ico.gz: src/content/favicon.ico
src/content/favicon.ico: src/content/img/favicon.svg
convert src/content/img/favicon.svg $@
+src/content/favicon.png: src/content/img/favicon.svg
+ convert src/content/img/favicon.svg $@
+
+$(sources.media.torrent):
+ F="`printf '%s\n' $* | cut -d/ -f3-`" && \
+ mktorrent -xfd -n $(*F) -o $@ -w "https://$(NAME)$(BASEURL)$${F}" $*
+
+src/content/sitemap.xml.gz: src/content/sitemap.xml
+src/content/sitemap.xml: $(sources.mapentry)
+ mkwb sitemap $(sources.mapentry) > $@
+
email.txt: meta.json
jq -r '.email' < meta.json > $@
@@ -267,10 +324,11 @@ expiry.txt: src/content/$(PUBURL)
awk -F: '/^pub:/ { print $$7 }' | \
xargs -I% date -Is -d@% > $@
-src/content/security.txt.gz: src/content/.well-known/security.txt.gz
-src/content/security.txt: src/content/.well-known/security.txt
-src/content/security.txt src/content/security.txt.gz:
- ln -fs .well-known/$(@F) $@
+expiry-epoch.txt: expiry.txt
+ date -d "`cat expiry.txt`" '+%s' > $@
+
+now.txt:
+ now > $@
src/content/.well-known/security.txt.gz: src/content/.well-known/security.txt
src/content/.well-known/security.txt: email.txt baseurl.txt expiry.txt
@@ -278,7 +336,7 @@ src/content/.well-known/security.txt: email.txt baseurl.txt expiry.txt
printf 'Contact: mailto:%s\n' "`cat email.txt`" > $@
printf 'Expires: %s\n' "`cat expiry.txt`" >> $@
printf 'Encryption: %s/$(PUBURL)\n' "`cat baseurl.txt`" >> $@
- printf 'Preferred-Languages: en, pt, fr, eo, es\n' >> $@
+ printf 'Preferred-Languages: en, pt, fr, eo, es, de\n' >> $@
src/sources.txt:
printf '%s\n' $(sources) > $@
@@ -286,8 +344,11 @@ src/sources.txt:
src/all-contents.txt:
printf '%s\n' $(all-contents) > $@
-src/all-filelists.txt:
- printf '%s\n' $(all-filelists) > $@
+src/all-filelists.txt: src/all-symlinks.txt
+ printf '%s\n' $(all-filelists) src/all-symlinks.txt > $@
+
+src/all-symlinks.txt: src/content/.gitignore
+ sed 's|^|src/content|' src/content/.gitignore > $@
src/install.txt: src/all-contents.txt src/all-filelists.txt $(all-filelists)
cat src/all-contents.txt `cat src/all-filelists.txt` > $@
@@ -297,6 +358,10 @@ install.txt: src/install.txt
sources.txt install.txt:
sed 's|^src/content/||' src/$(@F) > $@
+i18n.sentinel: po/po4a.cfg po/note.txt $(sources.po) $(po4a.in)
+ po4a po/po4a.cfg
+ touch $@
+
src/sort-expected.txt:
@@ -334,9 +399,36 @@ check-unit-links-internal: $(sources.links-internal-check)
check-unit-links-external:
+symlink-deps = \
+ $(sources.html) \
+ $(feeds.xml) \
+ $(categories.xml) \
+ src/content/.well-known/security.txt \
+
+check-unit-symlinks: src/all-symlinks.txt $(symlink-deps)
+ find `cat src/all-symlinks.txt` | xargs -n1 test -e
+
+
check-unit-links: check-unit-links-internal check-unit-links-external
+check-unit-links: check-unit-symlinks
+
+
+MAXSIZE = 52428800 # from spec: https://www.sitemaps.org/protocol.html
+check-unit-sitemap-size: src/content/sitemap.xml
+ test "`stat --printf='%s' src/content/sitemap.xml`" -le $(MAXSIZE)
+
+check-unit-sitemap-count: src/content/sitemap.xml
+ test "`grep -cF '</url>' src/content/sitemap.xml`" -le 50000
+
+check-unit-sitemap: check-unit-sitemap-count check-unit-sitemap-size
+
+
+check-unit-expiry: expiry-epoch.txt now.txt
+ test "`cat expiry-epoch.txt`" -gt "`cat now.txt`"
+
check-unit: check-unit-sorting check-unit-updatedat check-unit-links
+check-unit: check-unit-sitemap check-unit-expiry
integration-tests = \