diff options
author | EuAndreh <eu@euandre.org> | 2025-05-01 21:13:25 -0300 |
---|---|---|
committer | EuAndreh <eu@euandre.org> | 2025-05-01 21:13:25 -0300 |
commit | cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55 (patch) | |
tree | 6456f83c69227177b7eb1faf3f226f46ae6e92a2 /Makefile | |
parent | src/content/incidents/index.adoc: Hoist links to variables (diff) | |
download | papo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.gz papo.im-cc45d895ccf6d6a64ef0c9ad9cc3ec42ac45fa55.tar.xz |
Update to support i18n
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 198 |
1 files changed, 145 insertions, 53 deletions
@@ -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 = \ |