wm

Wang–Müller line generalization algorithm in PostGIS
Log | Files | Refs | README | LICENSE

Makefile (16638B) - Raw


      1 # River selector (GNU Awk syntax) to refresh-rivers target.
      2 RIVERFILTER = Visinčia|Šalčia|Nemunas
      3 
      4 # Max figure size (in meters) is when it's width is TEXTWIDTH_CM on scale 1:25k
      5 SCALEDWIDTH = $(shell awk '/^TEXTWIDTH_CM/{print 25000/100*$$3}' layer2img.py)
      6 SLIDES_IN = slides-2021-03-29.txt slides-2021-06-02.tex
      7 SLIDES = slides-2021-03-29 slides-2021-06-02
      8 LISTINGS = aggregate-rivers.sql wm.sql extract-and-generate
      9 
     10 FIGURES = \
     11 		  test-figures \
     12 		  fig8-definition-of-a-bend \
     13 		  fig8-elimination-gen1 \
     14 		  fig8-elimination-gen2 \
     15 		  fig8-elimination-gen3 \
     16 		  fig5-gentle-inflection-before \
     17 		  fig5-gentle-inflection-after \
     18 		  inflection-1-gentle-inflection-before \
     19 		  inflection-1-gentle-inflection-after \
     20 		  fig6-selfcrossing \
     21 		  selfcrossing-1 \
     22 		  isolated-1-exaggerated
     23 
     24 FIGURES_SLIDES += isolated-1-before \
     25 				  isolated-1-after
     26 
     27 RIVERS = \
     28 		 salvis-25k \
     29 		 salvis-2x50k \
     30 		 salvis-250k-10x \
     31 		 salvis-grpk250-2x \
     32 		 salvis-dp64-2x50k \
     33 		 salvis-vw64-2x50k \
     34 		 salvis-dpchaikin64-2x50k \
     35 		 salvis-vwchaikin64-2x50k \
     36 		 salvis-overlaid-dpchaikin64-2x50k \
     37 		 salvis-overlaid-vwchaikin64-2x50k \
     38 		 salvis-wm220-10x \
     39 		 salvis-wm220-2x \
     40 		 salvis-wm-overlaid-250k-zoom \
     41 		 salvis-wm220
     42 
     43 RIVERS_SLIDES += salvis-dp64overlaid-2x50k \
     44 				 salvis-dpchaikin64overlaid-2x50k
     45 
     46 ################################################################################
     47 # FIGURES
     48 ################################################################################
     49 test-figures_1SELECT = wm_figures
     50 
     51 fig8-definition-of-a-bend_1SELECT = wm_debug where name='fig8' AND stage='afigures' AND gen=1
     52 fig8-definition-of-a-bend_2SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=1
     53 fig8-definition-of-a-bend_3SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=1
     54 fig8-definition-of-a-bend_3LINESTYLE = dotted
     55 
     56 fig8-elimination-gen1_1SELECT = wm_debug where name='fig8' AND stage='afigures' AND gen=1
     57 fig8-elimination-gen1_2SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=1
     58 fig8-elimination-gen1_3SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=1
     59 fig8-elimination-gen1_3LINESTYLE = dotted
     60 
     61 fig8-elimination-gen2_1SELECT = wm_debug where name='fig8' AND stage='afigures' AND gen=2
     62 fig8-elimination-gen2_2SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=2
     63 fig8-elimination-gen2_3SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=2
     64 fig8-elimination-gen2_3LINESTYLE = dotted
     65 fig8-elimination-gen3_1SELECT = wm_debug where name='fig8' AND stage='bbends' AND gen=3
     66 fig8-elimination-gen3_2SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=3
     67 fig8-elimination-gen3_3SELECT = wm_debug where name='fig8' AND stage='bbends-polygon' AND gen=3
     68 fig8-elimination-gen3_3LINESTYLE = dotted
     69 
     70 fig5-gentle-inflection-before_WITHDIV = 2
     71 fig5-gentle-inflection-before_1SELECT = wm_debug where name='fig5' AND stage='afigures' AND gen=1
     72 fig5-gentle-inflection-before_2SELECT = wm_debug where name='fig5' AND stage='bbends-polygon' AND gen=1
     73 fig5-gentle-inflection-before_3SELECT = wm_debug where name='fig5' AND stage='bbends-polygon' AND gen=1
     74 fig5-gentle-inflection-before_3LINESTYLE = dotted
     75 fig5-gentle-inflection-after_WITHDIV = 2
     76 fig5-gentle-inflection-after_1SELECT = wm_debug where name='fig5' AND stage='cinflections' AND gen=1
     77 fig5-gentle-inflection-after_2SELECT = wm_debug where name='fig5' AND stage='cinflections-polygon' AND gen=1
     78 fig5-gentle-inflection-after_3SELECT = wm_debug where name='fig5' AND stage='cinflections-polygon' AND gen=1
     79 fig5-gentle-inflection-after_3LINESTYLE = dotted
     80 
     81 inflection-1-gentle-inflection-before_WIDTHDIV = 2
     82 inflection-1-gentle-inflection-before_1SELECT = wm_debug where name='inflection-1' AND stage='afigures' AND gen=1
     83 inflection-1-gentle-inflection-before_2SELECT = wm_debug where name='inflection-1' AND stage='bbends-polygon' AND gen=1
     84 inflection-1-gentle-inflection-before_3SELECT = wm_debug where name='inflection-1' AND stage='bbends-polygon' AND gen=1
     85 inflection-1-gentle-inflection-before_3LINESTYLE = dotted
     86 inflection-1-gentle-inflection-after_WIDTHDIV = 2
     87 inflection-1-gentle-inflection-after_1SELECT = wm_debug where name='inflection-1' AND stage='cinflections' AND gen=1
     88 inflection-1-gentle-inflection-after_2SELECT = wm_debug where name='inflection-1' AND stage='cinflections-polygon' AND gen=1
     89 inflection-1-gentle-inflection-after_3SELECT = wm_debug where name='inflection-1' AND stage='cinflections-polygon' AND gen=1
     90 inflection-1-gentle-inflection-after_3LINESTYLE = dotted
     91 
     92 fig6-selfcrossing_WIDTHDIV = 2
     93 fig6-selfcrossing_1SELECT = wm_debug where name='fig6' AND stage='afigures' AND gen=1
     94 fig6-selfcrossing_1LINESTYLE = dotted
     95 fig6-selfcrossing_2SELECT = wm_debug where name='fig6' AND stage='dcrossings' AND gen=1
     96 fig6-selfcrossing_3SELECT = wm_visuals where name='fig6-baseline'
     97 fig6-selfcrossing_3COLOR = orange
     98 
     99 selfcrossing-1_WIDTHDIV = 2
    100 selfcrossing-1_1SELECT = wm_debug where name='selfcrossing-1' AND stage='afigures' AND gen=1
    101 selfcrossing-1_1LINESTYLE = dotted
    102 selfcrossing-1_2SELECT = wm_debug where name='selfcrossing-1' AND stage='dcrossings' AND gen=1
    103 selfcrossing-1_3SELECT = wm_visuals where name='selfcrossing-1-baseline'
    104 selfcrossing-1_3COLOR = orange
    105 
    106 isolated-1-exaggerated_WIDTHDIV = 2
    107 isolated-1-exaggerated_1SELECT = wm_debug where name='isolated-1' AND stage='afigures' AND gen=2
    108 isolated-1-exaggerated_2SELECT = wm_debug where name='isolated-1' AND stage='afigures' AND gen=1
    109 isolated-1-exaggerated_1COLOR = orange
    110 
    111 isolated-1-before_1SELECT = wm_debug where name='isolated-1' AND stage='afigures' AND gen=1
    112 isolated-1-before_2SELECT = wm_debug where name='isolated-1' AND stage='afigures' AND gen=2
    113 isolated-1-before_2LINESTYLE = invisible
    114 isolated-1-before_WIDTHDIV = 2
    115 isolated-1-after_1SELECT = wm_debug where name='isolated-1' AND stage='afigures' AND gen=2
    116 isolated-1-after_1COLOR = orange
    117 isolated-1-after_WIDTHDIV = 2
    118 
    119 
    120 ################################################################################
    121 # 250K
    122 ################################################################################
    123 
    124 salvis-wm220-250k-2x_1SELECT = wm_visuals where name='salvis-wm220'
    125 salvis-wm220-250k-2x_WIDTHDIV = 2
    126 
    127 salvis-wm220-250k-10x_1SELECT = wm_visuals where name='salvis-wm220'
    128 salvis-wm220-250k-10x_WIDTHDIV = 10
    129 
    130 salvis-250k-10x_1SELECT = wm_visuals where name='salvis-grpk10'
    131 salvis-250k-10x_WIDTHDIV = 10
    132 
    133 salvis-wm-overlaid-250k-zoom_1SELECT = wm_visuals where name='salvis-wm220'
    134 salvis-wm-overlaid-250k-zoom_2SELECT = wm_visuals where name='salvis-grpk10'
    135 salvis-wm-overlaid-250k-zoom_1COLOR = orange
    136 
    137 salvis-grpk250-2x_1SELECT = wm_visuals where name='salvis-grpk250'
    138 salvis-grpk250-2x_WIDTHDIV = 2
    139 
    140 ################################################################################
    141 # 50K
    142 ################################################################################
    143 
    144 label_wm75 = Wang--Müller 1:\numprint{50000}
    145 label_wm220 = Wang--Müller 1:\numprint{250000}
    146 label_vw64 = Visvalingam--Whyatt
    147 label_dp64 = Douglas \& Peucker
    148 label_grpk10 = GRPK 1:\numprint{10000}
    149 label_grpk50 = GRPK 1:\numprint{50000}
    150 label_vwchaikin64 = $(label_vw64) and Chaikin
    151 label_dpchaikin64 = $(label_dp64) and Chaikin
    152 label_vwchaikin64lt = $(label_vw64) ir Chaikin
    153 label_dpchaikin64lt = $(label_dp64) ir Chaikin
    154 legend_   = lower left
    155 legend_tr = lower right
    156 legend_tl = lower center
    157 
    158 define wm_vwdp50k
    159 RIVERS += salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)
    160 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_1SELECT    = wm_visuals where name='salvis-$(1)'
    161 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_1COLOR     = orange
    162 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_1LABEL     = $(label_$(1))
    163 $(if $(2),
    164 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_2SELECT    = wm_visuals where name='salvis-$(2)'
    165 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_2COLOR     = green
    166 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_2LABEL     = $(label_$(2))
    167 ,)
    168 $(if $(3),
    169 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_3SELECT    = wm_visuals where name='salvis-$(3)'
    170 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_3LINESTYLE = $(6)
    171 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_3LABEL     = $(label_$(3))
    172 ,)
    173 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_WIDTHDIV   = $(4)
    174 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_QUADRANT   = $(5)
    175 salvis-$(1)-$(2)-$(3)-$(4)x50k$(5)_LEGEND     = $(legend_$(5))
    176 endef
    177 
    178 wm_vwdp50kblack = $(call wm_vwdp50k,$(1),$(2),$(3),$(4),$(5))
    179 wm_vwdp50kdotted = $(call wm_vwdp50k,$(1),$(2),$(3),$(4),$(5),dotted)
    180 
    181 $(foreach x,vw64 dp64 vwchaikin64 dpchaikin64,\
    182 	$(eval $(call wm_vwdp50kdotted,wm75,$(x),grpk10,1,)) \
    183 )
    184 $(eval $(call wm_vwdp50kblack,wm75,grpk50,grpk10,1))
    185 $(eval $(call wm_vwdp50kblack,wm75,grpk50,grpk10,1,tr))
    186 $(eval $(call wm_vwdp50kblack,wm75,grpk50,grpk10,1,tl))
    187 
    188 $(eval $(call wm_vwdp50kblack,wm75,,grpk10,1))
    189 $(eval $(call wm_vwdp50kblack,wm75,,grpk10,1,tr))
    190 $(eval $(call wm_vwdp50kblack,wm75,,grpk10,1,tl))
    191 
    192 salvis-25k_1SELECT = wm_visuals where name='salvis-grpk10'
    193 salvis-25k_WIDTHDIV = 1
    194 
    195 salvis-2x50k_1SELECT = wm_visuals where name='salvis-grpk10'
    196 salvis-2x50k_WIDTHDIV = 2
    197 
    198 salvis-dp64overlaid-2x50k_1SELECT = wm_visuals where name='salvis-grpk10'
    199 salvis-dp64overlaid-2x50k_1LABEL = $(label_grpk10)
    200 salvis-dp64overlaid-2x50k_2SELECT = wm_visuals where name='salvis-dp64'
    201 salvis-dp64overlaid-2x50k_2LABEL = $(label_dp64)
    202 salvis-dp64overlaid-2x50k_2COLOR = orange
    203 salvis-dp64overlaid-2x50k_QUADRANT = tl
    204 salvis-dp64overlaid-2x50k_LEGEND = $(legend_tl)
    205 
    206 salvis-dpchaikin64overlaid-2x50k_1SELECT = wm_visuals where name='salvis-grpk10'
    207 salvis-dpchaikin64overlaid-2x50k_1LABEL = $(label_grpk10)
    208 salvis-dpchaikin64overlaid-2x50k_2SELECT = wm_visuals where name='salvis-dpchaikin64'
    209 salvis-dpchaikin64overlaid-2x50k_2COLOR = orange
    210 salvis-dpchaikin64overlaid-2x50k_2LABEL = $(label_dpchaikin64lt)
    211 salvis-dpchaikin64overlaid-2x50k_QUADRANT = tl
    212 salvis-dpchaikin64overlaid-2x50k_LEGEND = $(legend_tl)
    213 
    214 salvis-dp64-2x50k_1SELECT = wm_visuals where name='salvis-dp64'
    215 salvis-dp64-2x50k_WIDTHDIV = 2
    216 
    217 salvis-vw64-2x50k_1SELECT = wm_visuals where name='salvis-vw64'
    218 salvis-vw64-2x50k_WIDTHDIV = 2
    219 
    220 salvis-dpchaikin64-2x50k_2SELECT = wm_visuals where name='salvis-dpchaikin64'
    221 salvis-dpchaikin64-2x50k_WIDTHDIV = 2
    222 
    223 salvis-vwchaikin64-2x50k_2SELECT = wm_visuals where name='salvis-vwchaikin64'
    224 salvis-vwchaikin64-2x50k_WIDTHDIV = 2
    225 
    226 salvis-overlaid-dpchaikin64-2x50k_1SELECT = wm_visuals where name='salvis-dpchaikin64'
    227 salvis-overlaid-dpchaikin64-2x50k_2SELECT = wm_visuals where name='salvis-grpk10'
    228 salvis-overlaid-dpchaikin64-2x50k_1COLOR = orange
    229 salvis-overlaid-dpchaikin64-2x50k_WIDTHDIV = 2
    230 salvis-overlaid-dpchaikin64-2x50k_QUADRANT = tl
    231 
    232 salvis-overlaid-vwchaikin64-2x50k_1SELECT = wm_visuals where name='salvis-vwchaikin64'
    233 salvis-overlaid-vwchaikin64-2x50k_2SELECT = wm_visuals where name='salvis-grpk10'
    234 salvis-overlaid-vwchaikin64-2x50k_1COLOR = orange
    235 salvis-overlaid-vwchaikin64-2x50k_WIDTHDIV = 2
    236 salvis-overlaid-vwchaikin64-2x50k_QUADRANT = tl
    237 
    238 salvis-wm220_1SELECT = wm_visuals where name='salvis-wm220'
    239 salvis-wm220_WIDTHDIV = 2
    240 
    241 define FIG_template
    242 $(1).pdf: layer2img.py Makefile $(2)
    243 	python3 ./layer2img.py --outfile=$(1).pdf \
    244 		$$(if $$($(1)_LEGEND),--legend="$$($(1)_LEGEND)") \
    245 		$$(if $$($(1)_WIDTHDIV),--widthdiv=$$($(1)_WIDTHDIV)) \
    246 		$$(if $$($(1)_QUADRANT),--quadrant=$$($(1)_QUADRANT)) \
    247 		$$(foreach i,1 2 3, \
    248 			$$(if $$($(1)_$$(i)LABEL),--g$$(i)-label="$$($(1)_$$(i)LABEL)") \
    249 			$$(if $$($(1)_$$(i)COLOR),--g$$(i)-color="$$($(1)_$$(i)COLOR)") \
    250 			$$(if $$($(1)_$$(i)SELECT),--g$$(i)-select="$$($(1)_$$(i)SELECT)") \
    251 			$$(if $$($(1)_$$(i)LINESTYLE),--g$$(i)-linestyle="$$($(1)_$$(i)LINESTYLE)") \
    252 	)
    253 endef
    254 
    255 $(foreach fig,$(FIGURES),       $(eval $(call FIG_template,$(fig),.faux_test)))
    256 $(foreach fig,$(FIGURES_SLIDES),$(eval $(call FIG_template,$(fig),.faux_test)))
    257 $(foreach fig,$(RIVERS),        $(eval $(call FIG_template,$(fig),.faux_visuals)))
    258 $(foreach fig,$(RIVERS_SLIDES), $(eval $(call FIG_template,$(fig),.faux_visuals)))
    259 
    260 #################################
    261 # The thesis, publishable version
    262 #################################
    263 
    264 mj-msc-full.pdf: mj-msc.pdf version.inc.tex $(filter-out $(SLIDES_IN),$(shell git ls-files .)) ## Thesis for publishing
    265 	cp $< .tmp-$@
    266 	for f in $^; do \
    267 		if [ "$$f" = "$<" ]; then continue; fi; \
    268 		pdfattach .tmp-$@ $$f .tmp2-$@; \
    269 		mv .tmp2-$@ .tmp-$@; \
    270 	done
    271 	mv .tmp-$@ $@
    272 
    273 ###############################
    274 # Auxiliary targets for humans
    275 ###############################
    276 
    277 .PHONY: test
    278 test: .faux_test ## Unit tests (fast)
    279 
    280 .PHONY: visuals
    281 visuals: .faux_visuals  # Generate visuals for paper (fast)
    282 
    283 .PHONY: test-rivers
    284 test-rivers: .faux_test-rivers ## Rivers tests (slow)
    285 
    286 .PHONY: slides
    287 slides: $(addsuffix .pdf,$(SLIDES))
    288 
    289 .PHONY: refresh-rivers
    290 refresh-rivers: refresh-rivers-10.sql refresh-rivers-50.sql refresh-rivers-250.sql ## Refresh river data from national datasets
    291 
    292 ###########################
    293 # The report, quick version
    294 ###########################
    295 
    296 mj-msc.pdf: mj-msc.tex version.inc.tex vars.inc.tex bib.bib \
    297 	$(LISTINGS) $(addsuffix .pdf,$(FIGURES)) $(addsuffix .pdf,$(RIVERS))
    298 	latexmk -shell-escape -pdf $<
    299 
    300 ###################################
    301 # Report's DB and test dependencies
    302 ###################################
    303 
    304 .faux_db_pre: db init.sql
    305 	bash db start
    306 	bash db -f init.sql
    307 	touch $@
    308 
    309 .faux_db: rivers-10.sql rivers-50.sql rivers-250.sql
    310 	bash db $(addprefix -f ,$^)
    311 	touch $@
    312 .faux_db: .EXTRA_PREREQS = .faux_db_pre
    313 
    314 .faux_test: test.sql wm.sql .faux_db
    315 	bash db -f $<
    316 	touch $@
    317 
    318 .faux_visuals: visuals.sql .faux_test
    319 	bash db -v scaledwidth=$(SCALEDWIDTH) -f $<
    320 	touch $@
    321 
    322 .faux_test-rivers: test-rivers.sql wm.sql Makefile .faux_db
    323 	bash db -f $<
    324 	touch $@
    325 
    326 ################################
    327 # Report's non-test dependencies
    328 ################################
    329 
    330 REF = $(shell git describe --abbrev=12 --always --dirty)
    331 version.inc.tex: Makefile $(shell git rev-parse --git-dir 2>/dev/null)
    332 	TZ=UTC date '+\gdef\VCDescribe{%F (revision $(REF))}%' > $@
    333 
    334 vars.inc.tex: vars.awk wm.sql Makefile
    335 	awk -f $< wm.sql
    336 
    337 ###############
    338 # Misc commands
    339 ###############
    340 
    341 slides-2021-03-29.pdf: slides-2021-03-29.txt
    342 	pandoc -t beamer -i $< -o $@
    343 
    344 slides-2021-06-02.pdf: slides-2021-06-02.tex \
    345 	amalgamate1.png selfcrossing-1.pdf \
    346 	isolated-1-before.pdf isolated-1-after.pdf \
    347 	salvis-grpk250-2x.pdf \
    348 	salvis-wm220.pdf \
    349 	salvis-wm75--grpk10-1x50k.pdf \
    350 	salvis-wm75-grpk50-grpk10-1x50k.pdf \
    351 	salvis-wm75-dp64-grpk10-1x50k.pdf \
    352 	salvis-wm75-dpchaikin64-grpk10-1x50k.pdf \
    353 	salvis-dp64overlaid-2x50k.pdf \
    354 	salvis-dpchaikin64overlaid-2x50k.pdf \
    355 	$(wilcard *logo.pdf)
    356 	latexmk -shell-escape -pdf $<
    357 
    358 dump-debug_wm.sql.xz:
    359 	docker exec -ti wm-mj pg_dump -Uosm osm -t wm_devug | xz -v > $@
    360 
    361 mj-msc-gray.pdf: mj-msc.pdf ## Gray version, to inspect monochrome output
    362 	gs \
    363 		-sOutputFile=$@ \
    364 		-sDEVICE=pdfwrite \
    365 		-sColorConversionStrategy=Gray \
    366 		-dProcessColorModel=/DeviceGray \
    367 		-dCompatibilityLevel=1.4 \
    368 		-dNOPAUSE \
    369 		-dBATCH \
    370 		$<
    371 
    372 .PHONY: clean
    373 clean: ## Clean the current working directory
    374 	-bash db stop
    375 	-rm -r .faux_test .faux_aggregate-rivers .faux_test-rivers .faux_visuals \
    376 		.faux_db .faux_db_pre version.inc.tex vars.inc.tex version.aux \
    377 		version.fdb_latexmk _minted-* .tmp \
    378 		$(shell git ls-files -o mj-msc*) \
    379 		$(shell git ls-files -o slides-2021-06-02*) \
    380 		$(addsuffix .pdf,$(FIGURES) $(FIGURES_SLIDES)) \
    381 		$(addsuffix .pdf,$(RIVERS) $(RIVERS_SLIDES)) \
    382 		$(addsuffix .pdf,$(SLIDES))
    383 
    384 .PHONY: clean-tables
    385 clean-tables: ## Remove tables created during unit or rivers tests
    386 	bash db -c '\dt wm_*' | awk '/_/{print "drop table "$$3";"}' | bash db -f -
    387 	-rm .faux_db
    388 
    389 .PHONY: help
    390 help: ## Print this help message
    391 	@awk -F':.*?## ' '/^[a-z0-9.-]*: *.*## */{printf "%-18s %s\n",$$1,$$2}' \
    392 		$(MAKEFILE_LIST) | sort
    393 
    394 .PHONY: wc
    395 wc: mj-msc.pdf
    396 	@pdftotext $< - | \
    397 		awk '/\yReferences\y/{exit}; {print}' | \
    398 		tr -d '[:space:]' | wc -c | \
    399 		awk '{printf("Chars: %d, pages: %.1f\n", $$1, $$1/1500)}'
    400 
    401 define refresh_rivers_template
    402 .PHONY: refresh-$(1)
    403 refresh-$(1): aggregate-rivers.sql gdr2pgsql .faux_db_pre
    404 	@if [ ! -f "$$($(2))" ]; then \
    405 		echo "ERROR: $(2)-static-*.zip not found. Run env $(2)=<...>"; \
    406 		exit 1; \
    407 	fi
    408 	./gdr2pgsql "$$($(2))" "$(3)" "$(RIVERFILTER)" "$(1)"
    409 endef
    410 
    411 $(eval $(call refresh_rivers_template,rivers-10.sql,GDB10LT,wm_rivers))
    412 $(eval $(call refresh_rivers_template,rivers-50.sql,GDR50LT,wm_rivers_50))
    413 $(eval $(call refresh_rivers_template,rivers-250.sql,GDR250LT,wm_rivers_250))
    414 
    415 release.zip: mj-msc.tex mj-msc.bbl version.inc.tex vars.inc.tex \
    416 	$(addsuffix .pdf,$(FIGURES)) $(addsuffix .pdf,$(RIVERS)) \
    417 	$(shell git ls-files .)
    418 	-rm $@
    419 	mkdir -p .tmp; touch .tmp/editorial-version
    420 	zip $@ $^
    421 	zip $@ -j .tmp/editorial-version
    422 
    423 mj-msc.bbl: mj-msc.tex bib.bib
    424 	biber mj-msc