wm/Makefile

193 lines
6.8 KiB
Makefile
Raw Normal View History

2021-05-19 22:57:48 +03:00
OSM ?= lithuania-latest.osm.pbf
WHERE ?= name='Visinčia' OR name='Šalčia' OR name='Nemunas'
2021-05-19 22:57:48 +03:00
#WHERE ?= name like '%'
2021-05-19 22:57:46 +03:00
SLIDES = slides-2021-03-29.pdf
2021-05-19 22:57:47 +03:00
2021-05-19 22:57:48 +03:00
##############################################################################
# These variables have to come before first use due to how macros are expanded
##############################################################################
NON_ARCHIVABLES = notes.txt referatui.txt slides-2021-03-29.txt
ARCHIVABLES = $(filter-out $(NON_ARCHIVABLES),$(shell git ls-files .))
2021-05-19 22:57:47 +03:00
FIGURES = test-figures \
fig8-definition-of-a-bend \
fig5-gentle-inflection-before \
fig5-gentle-inflection-after \
inflection-1-gentle-inflection-before \
2021-05-19 22:57:47 +03:00
inflection-1-gentle-inflection-after \
2021-05-19 22:57:48 +03:00
fig6-selfcrossing-before \
fig6-selfcrossing-after \
2021-05-19 22:57:48 +03:00
selfcrossing-1-before \
selfcrossing-1-after
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:48 +03:00
#################################
# The thesis, publishable version
#################################
mj-msc-full.pdf: mj-msc.pdf version.inc.tex $(ARCHIVABLES) ## Thesis for publishing
cp $< .tmp-$@
for f in $^; do \
if [ "$$f" = "$<" ]; then continue; fi; \
pdfattach .tmp-$@ $$f .tmp2-$@; \
mv .tmp2-$@ .tmp-$@; \
done
mv .tmp-$@ $@
###############################
# Auxiliary targets for humans
###############################
2021-05-19 22:57:46 +03:00
.PHONY: test
2021-05-19 22:57:48 +03:00
test: .faux_test ## Unit tests (fast)
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:46 +03:00
.PHONY: test-integration
2021-05-19 22:57:48 +03:00
test-integration: .faux_test-integration ## Integration tests (slow)
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:46 +03:00
.PHONY: slides
2021-05-19 22:57:46 +03:00
slides: $(SLIDES)
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:48 +03:00
###########################
# The report, quick version
###########################
2021-05-19 22:57:47 +03:00
mj-msc.pdf: mj-msc.tex version.inc.tex vars.inc.tex bib.bib $(addsuffix .pdf,$(FIGURES))
2021-05-19 22:57:46 +03:00
latexmk -shell-escape -g -pdf $<
2021-05-19 22:57:48 +03:00
############################
# Report's test dependencies
############################
2021-05-19 22:57:47 +03:00
define FIG_template
$(1).pdf: layer2img.py Makefile .faux_test
2021-05-19 22:57:47 +03:00
python ./layer2img.py --outfile=$(1).pdf \
2021-05-19 22:57:47 +03:00
$$(if $$($(1)_WIDTHDIV),--widthdiv=$$($(1)_WIDTHDIV)) \
$$(foreach i,1 2 3, \
2021-05-19 22:57:47 +03:00
$$(if $$($(1)_$$(i)CMAP),--group$$(i)-cmap="$$($(1)_$$(i)CMAP)") \
$$(if $$($(1)_$$(i)SELECT),--group$$(i)-select="$$($(1)_$$(i)SELECT)") \
$$(if $$($(1)_$$(i)LINESTYLE),--group$$(i)-linestyle="$$($(1)_$$(i)LINESTYLE)") \
2021-05-19 22:57:47 +03:00
)
endef
$(foreach fig,$(FIGURES),$(eval $(call FIG_template,$(fig))))
2021-05-19 22:57:47 +03:00
test-figures_1SELECT = wm_figures
2021-05-19 22:57:47 +03:00
2021-05-19 22:57:47 +03:00
fig8-definition-of-a-bend_1SELECT = wm_debug where name='fig8' AND stage='bbends' AND gen=1
fig8-definition-of-a-bend_2CMAP = 1
fig8-definition-of-a-bend_2SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=1
2021-05-19 22:57:47 +03:00
fig5-gentle-inflection-before_WITHDIV = 2
2021-05-19 22:57:47 +03:00
fig5-gentle-inflection-before_1SELECT = wm_debug where name='fig5' AND stage='bbends' AND gen=1
fig5-gentle-inflection-before_2CMAP = 1
fig5-gentle-inflection-before_2SELECT = wm_debug where name='fig5' AND stage='bbends-polygon' AND gen=1
2021-05-19 22:57:47 +03:00
fig5-gentle-inflection-after_WITHDIV = 2
2021-05-19 22:57:47 +03:00
fig5-gentle-inflection-after_1SELECT = wm_debug where name='fig5' AND stage='cinflections' AND gen=1
fig5-gentle-inflection-after_2SELECT = wm_debug where name='fig5' AND stage='cinflections-polygon' AND gen=1
fig5-gentle-inflection-after_2CMAP = 1
2021-05-19 22:57:47 +03:00
inflection-1-gentle-inflection-before_WIDTHDIV = 2
2021-05-19 22:57:47 +03:00
inflection-1-gentle-inflection-before_1SELECT = wm_debug where name='inflection-1' AND stage='bbends' AND gen=1
inflection-1-gentle-inflection-before_2SELECT = wm_debug where name='inflection-1' AND stage='bbends-polygon' AND gen=1
inflection-1-gentle-inflection-before_2CMAP = 1
2021-05-19 22:57:47 +03:00
inflection-1-gentle-inflection-after_WIDTHDIV = 2
2021-05-19 22:57:47 +03:00
inflection-1-gentle-inflection-after_1SELECT = wm_debug where name='inflection-1' AND stage='cinflections' AND gen=1
inflection-1-gentle-inflection-after_2SELECT = wm_debug where name='inflection-1' AND stage='cinflections-polygon' AND gen=1
inflection-1-gentle-inflection-after_2CMAP = 1
2021-05-19 22:57:47 +03:00
2021-05-19 22:57:48 +03:00
fig6-selfcrossing-before_WIDTHDIV = 4
fig6-selfcrossing-before_1SELECT = wm_debug where name='fig6' AND stage='bbends' AND gen=1
fig6-selfcrossing-before_2SELECT = wm_visuals where name='fig6-baseline'
fig6-selfcrossing-before_2LINESTYLE = dotted
fig6-selfcrossing-before_3SELECT = wm_visuals where name='fig6-newline'
fig6-selfcrossing-after_WIDTHDIV = 4
fig6-selfcrossing-after_1SELECT = wm_debug where name='fig6' AND stage='dcrossings' AND gen=1
selfcrossing-1-before_WIDTHDIV = 4
selfcrossing-1-before_1SELECT = wm_debug where name='selfcrossing-1' AND stage='bbends' AND gen=1
selfcrossing-1-before_2SELECT = wm_visuals where name='selfcrossing-1-baseline'
selfcrossing-1-before_2LINESTYLE = dotted
selfcrossing-1-before_3SELECT = wm_visuals where name='selfcrossing-1-newline'
2021-05-19 22:57:48 +03:00
selfcrossing-1-after_WIDTHDIV = 4
selfcrossing-1-after_1SELECT = wm_debug where name='selfcrossing-1' AND stage='dcrossings' AND gen=1
2021-05-19 22:57:48 +03:00
selfcrossing-1-after_2SELECT = wm_debug where name='selfcrossing-1' AND stage='bbends' AND gen=1
selfcrossing-1-after_2LINESTYLE = invisible
2021-05-19 22:57:48 +03:00
2021-05-19 22:57:48 +03:00
.faux_test-integration: tests-integration.sql wm.sql .faux_db
2021-05-19 22:57:48 +03:00
./db -f $<
touch $@
2021-05-19 22:57:47 +03:00
.faux_test: tests.sql wm.sql .faux_db
2021-05-19 22:57:48 +03:00
./db -f $<
2021-05-19 22:57:46 +03:00
touch $@
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:48 +03:00
.faux_db: db init.sql
2021-05-19 22:57:46 +03:00
./db start
2021-05-19 22:57:48 +03:00
./db -f init.sql -f rivers.sql
2021-05-19 22:57:48 +03:00
touch $@
################################
# Report's non-test dependencies
################################
2021-05-19 22:57:46 +03:00
REF = $(shell git describe --abbrev=12 --always --dirty)
2021-05-19 22:57:47 +03:00
version.inc.tex: Makefile $(shell git rev-parse --git-dir 2>/dev/null)
2021-05-19 22:57:47 +03:00
TZ=UTC date '+\gdef\VCDescribe{%F ($(REF))}%' > $@
2021-05-19 22:57:46 +03:00
2021-05-19 22:57:47 +03:00
vars.inc.tex: vars.awk wm.sql Makefile
2021-05-19 22:57:47 +03:00
awk -f $< wm.sql
2021-05-19 22:57:47 +03:00
2021-05-19 22:57:48 +03:00
###############
# Misc commands
###############
2021-05-19 22:57:48 +03:00
slides-2021-03-29.pdf: slides-2021-03-29.txt
pandoc -t beamer -i $< -o $@
dump-debug_wm.sql.xz:
2021-05-19 22:57:48 +03:00
docker exec -ti wm-mj pg_dump -Uosm osm -t wm_devug | xz -v > $@
2021-05-19 22:57:48 +03:00
2021-05-19 22:57:47 +03:00
mj-msc-gray.pdf: mj-msc.pdf
gs \
-sOutputFile=$@ \
-sDEVICE=pdfwrite \
-sColorConversionStrategy=Gray \
-dProcessColorModel=/DeviceGray \
-dCompatibilityLevel=1.4 \
-dNOPAUSE \
-dBATCH \
$<
2021-05-19 22:57:47 +03:00
.PHONY: clean
2021-05-19 22:57:48 +03:00
clean: ## Clean the current working directory
2021-05-19 22:57:47 +03:00
-./db stop
2021-05-19 22:57:48 +03:00
-rm -r .faux_test .faux_aggregate-rivers .faux_test-integration .faux_db \
2021-05-19 22:57:47 +03:00
version.inc.tex vars.inc.tex version.aux version.fdb_latexmk \
_minted-mj-msc \
$(shell git ls-files -o mj-msc*) \
$(addsuffix .pdf,$(FIGURES)) \
$(SLIDES)
.PHONY: clean-tables
2021-05-19 22:57:48 +03:00
clean-tables: ## Remove tables created during unit or integration tests
2021-05-19 22:57:48 +03:00
./db -c '\dt wm_*' | awk '/_/{print "drop table "$$3";"}' | ./db -f -
2021-05-19 22:57:48 +03:00
-rm .faux_db
2021-05-19 22:57:47 +03:00
2021-05-19 22:57:48 +03:00
.PHONY: help
help: ## Print this help message
@awk -F':.*?## ' '/^[a-z0-9.-]*: *.*## */{printf "%-18s %s\n",$$1,$$2}' $(MAKEFILE_LIST)
2021-05-19 22:57:48 +03:00
$(OSM):
wget http://download.geofabrik.de/europe/$@
.PHONY: refresh-rivers
refresh-rivers: aggregate-rivers.sql $(OSM) .faux_db ## Refresh rivers.sql from Open Street Maps
PGPASSWORD=osm osm2pgsql -c --multi-geometry -H 127.0.0.1 -d osm -U osm $(OSM)
./db -v where="$(WHERE)" -f $<
(\
echo '-- Generated at $(shell TZ=UTC date +"%FT%TZ") on $(shell whoami)@$(shell hostname -f)'; \
echo '-- Select: $(WHERE)'; \
2021-05-19 22:57:48 +03:00
docker exec wm-mj pg_dump --clean -Uosm osm -t wm_rivers | tr -d '\r' \
2021-05-19 22:57:48 +03:00
) > rivers.sql.tmp
mv rivers.sql.tmp rivers.sql