# using bashisms

SHELL    = /bin/bash

# notes:
# - "75" in fact means 7.5 (30 means 30 ;-)
# - mn = mean average

SRC_GMTED2010_30     = http://igskmncngs506.cr.usgs.gov/gmted/Grid_ZipFiles/mn30_grd.zip
SRC_GMTED2010_30_MD5 = 8c7a1564b7ac516d3274203f0f4464b7
SRC_GMTED2010_75     = http://igskmncngs506.cr.usgs.gov/gmted/Grid_ZipFiles/mn75_grd.zip
SRC_GMTED2010_75_MD5 = 06c76ac6c5c2aa026404f3a803d66600

SRC_SRTM3 = http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/
SRC_SRTM3_MD5 = e7e821379b425d62e480bdf792439130

PACKAGE  = freedem
VERSION  = 1.0

INSTALL = install
INSTALL_DATA = $(INSTALL) -m 644

GEOTIFF_OPTIONS    = -of GTiff -co "TILED=YES" -co "COMPRESS=DEFLATE" -co "ZLEVEL=7" -co "PREDICTOR=2"
#GDAL_TRANSLATE     = CPL_DEBUG=ON time gdal_translate -a_srs epsg:4326 --debug on $(GEOTIFF_OPTIONS)
GDAL_TRANSLATE     = time gdal_translate -a_srs epsg:4326 $(GEOTIFF_OPTIONS)
GDAL_TRANSLATE_VRT = CPL_DEBUG=ON time gdal_translate --debug on -of vrt
GDAL_WARP          = CPL_DEBUG=ON time gdalwarp -multi -of vrt -overwrite
GDAL_HILLSHADE     = CPL_DEBUG=ON time gdaldem hillshade

DATAFILES = gmted2010_mn.tif.aux.xml gmted2010_mn.tif gmted2010_mn_grass.vrt gmted2010_upsampled.vrt gmted2010_mn_remote.vrt srtm3.tif.aux.xml srtm3.tif srtm3_remote.vrt freedem.tif.aux.xml freedem.tif freedem_remote.vrt freedem_grass.vrt

# to enable hill shading uncomment (not yet ready):
# DATAFILES += gmted2010_mn_hill.tif.aux.xml gmted2010_mn_hill_grass.vrt

all: $(DATAFILES)

download30.stamp:
	[ "$$(md5sum mn30_grd.zip |cut -f 1 -d " ")" = "$(SRC_GMTED2010_30_MD5)" ] || { wget -nc "$(SRC_GMTED2010_30)" && [ "$$(md5sum mn30_grd.zip |cut -f 1 -d " ")" = "$(SRC_GMTED2010_30_MD5)" ] ; } && touch $@ || { echo "Checksum mismatch" >&2 ; false ; }

download75.stamp:
	[ "$$(md5sum mn75_grd.zip |cut -f 1 -d " ")" = "$(SRC_GMTED2010_75_MD5)" ] || { wget -nc "$(SRC_GMTED2010_75)" && [ "$$(md5sum mn75_grd.zip |cut -f 1 -d " ")" = "$(SRC_GMTED2010_75_MD5)" ] ; } && touch $@ || { echo "Checksum mismatch" >&2 ; false ; }

unpack30.stamp: download30.stamp
	mkdir mn30 && cd mn30 && unzip ../mn30_grd.zip && cd .. && touch $@

unpack75.stamp: download75.stamp
	mkdir mn75 && cd mn75 && unzip ../mn75_grd.zip && cd .. && touch $@

gmted2010_mn30.tif: unpack30.stamp
	$(GDAL_TRANSLATE) mn30/mn30_grd/prj.adf $@
	gdalinfo $@ | grep 'Left\|Right\|Size'
	# todo: maybe remove again / gdal is right? (i don't think so / i hate those pixel shift issues)
	gdal_edit.py -a_ullr -180.0001388888 83.9998611111 179.9998611111 -90.0001388888 $@
	gdalinfo $@ | grep 'Left\|Right\|Size'

gmted2010_mn30_needed.vrt: gmted2010_mn30.tif
	$(GDAL_TRANSLATE_VRT) -srcwin 0 16800 43200 4080 $< $@

gmted2010_mn30_upsampled.vrt: gmted2010_mn30_needed.vrt
	# todo: cubic really good idea?
	$(GDAL_WARP) -r cubic -ts 172800 16320 -dstnodata -32768 $< $@
	sed -i 's,</NoDataValue>,</NoDataValue>\n<ColorInterp>Gray</ColorInterp>,g' $@

gmted2010_mn30_greenland.vrt: gmted2010_mn30.tif
	$(GDAL_TRANSLATE_VRT) -projwin -73.06 83.9998611 -11.5 59.475 $< $@

gmted2010_mn75.tif: unpack75.stamp
	$(GDAL_TRANSLATE) mn75/mn75_grd/prj.adf $@
	gdalinfo $@ | grep 'Left\|Right\|Size'
	# todo: maybe remove again / gdal is right? (i don't think so / i hate those pixel shift issues)
	gdal_edit.py -a_ullr -180.0001388888 83.9998611111 179.9998611111 -56.0001388888 $@
	gdalinfo $@ | grep 'Left\|Right\|Size'

gmted2010_mn75_greenland.vrt: gmted2010_mn75.tif
	$(GDAL_TRANSLATE_VRT) -projwin -73.06 83.9998611 -11.5 59.475 $< $@

gmted2010_mn30_greenland.tif: gmted2010_mn30_greenland.vrt gmted2010_mn75_greenland.vrt
	PATH=$$PATH:. ./extract-greenland $$PWD $^ $@

gmted2010_greenland_upsampled.vrt: gmted2010_mn30_greenland.tif
	# todo: make sure input size is correct?
	# note: cubic resampling produced artifacts
	$(GDAL_WARP) -r bilinear -ts $$[7387*4] $$[2943*4] -srcnodata -32768 -dstnodata -32768 $< $@
	sed -i 's,</NoDataValue>,</NoDataValue>\n<ColorInterp>Gray</ColorInterp>,g' $@

# note: we want to align to srtm3 grid!
gmted2010_upsampled.vrt: gmted2010_mn.tif.aux.xml
	$(GDAL_WARP) -r cubic -te -180.000416666666666666666666666666666666666 -90.000416666666666666666666666666666666666 180.000416666666666666666666666666666666666  83.999583333333333333333333333333333333333 -tr 0.00083333333333333333333333333333 -0.00083333333333333333333333333333 -dstnodata -32768 gmted2010_mn.tif $@
	sed -i 's,</NoDataValue>,</NoDataValue>\n<ColorInterp>Gray</ColorInterp>,g' $@

%.stats: %.tif.aux.xml
	gosh -u sxml.sxpath -u sxml.ssax -u sxml.serializer -e '(print (srl:sxml->xml-noindent `(*TOP* ,((car-sxpath '\''(// Metadata)) (ssax:xml->sxml (current-input-port) '\''())))))' < $< > $@

gmted2010_mn_remote.vrt: gmted2010_mn.tif.aux.xml gmted2010_mn.stats
	# todo:
	# - why does it loose statistics?
	# - how to include histogram in vrt?
	gdalbuildvrt $@ gmted2010_mn.tif
	sed -i '-e s,SourceFilename relativeToVRT="1">gmted2010_mn.tif</SourceFilename,SourceFilename>/vsicurl/http://karme.de/freedem/data/gmted2010_mn.tif</SourceFilename,g' -e 's,<VRTRasterBand dataType="Int16" band="1">,<VRTRasterBand dataType="Int16" band="1">\n'"$$(cat gmted2010_mn.stats)"',g' $@

# todo: use $^ ?
gmted2010_mn.vrt: gmted2010_mn75.tif gmted2010_mn30_upsampled.vrt gmted2010_greenland_upsampled.vrt
	gdalbuildvrt $@ gmted2010_mn75.tif gmted2010_mn30_upsampled.vrt gmted2010_greenland_upsampled.vrt

download_srtm3.stamp:
	wget --mirror --limit-rate=1m -A .hgt.zip -np "$(SRC_SRTM3)" && touch $@

# srtm3 specific stuff

srtm3.md5: download_srtm3.stamp
	find -wholename "*/SRTM3/*.hgt.zip" -exec md5sum \{\} \+ | sort > $@

srtm3_checksum.stamp: srtm3.md5
	[ "$$(md5sum $< |cut -f 1 -d " ")" = "$(SRC_SRTM3_MD5)" ] || { echo "Checksum mismatch" >&2 ; false ; }

srtm3.vrt: srtm3_checksum.stamp
	gdalbuildvrt $@ -input_file_list <(for i in $$(find -wholename "*/SRTM3/*.hgt.zip"); do b=$$(basename "$$i"); echo /vsizip/$$i/$$(echo $${b%*.zip}| sed -e s/N24e012.hgt/n24e012.hgt/ -e s/S17w069.hgt/s17w069.hgt/) ; done)

# todo: duplicate
srtm3_remote.vrt: srtm3.tif.aux.xml srtm3.stats
	gdalbuildvrt $@ srtm3.tif
	sed -i '-e s,SourceFilename relativeToVRT="1">srtm3.tif</SourceFilename,SourceFilename>/vsicurl/http://karme.de/freedem/data/srtm3.tif</SourceFilename,g' -e 's,<VRTRasterBand dataType="Int16" band="1">,<VRTRasterBand dataType="Int16" band="1">\n'"$$(cat srtm3.stats)"',g' $@

# combine srtm3 and gmted2010
freedem.vrt: gmted2010_upsampled.vrt srtm3.tif.aux.xml
	gdalbuildvrt $@ gmted2010_upsampled.vrt srtm3.tif

# todo: duplicate
freedem_remote.vrt: freedem.tif.aux.xml freedem.stats
	gdalbuildvrt $@ freedem.tif
	sed -i '-e s,SourceFilename relativeToVRT="1">freedem.tif</SourceFilename,SourceFilename>/vsicurl/http://karme.de/freedem/data/freedem.tif</SourceFilename,g' -e 's,<VRTRasterBand dataType="Int16" band="1">,<VRTRasterBand dataType="Int16" band="1">\n'"$$(cat freedem.stats)"',g' $@

# for testing
greenland.tif: gmted2010_mn.vrt
	$(GDAL_TRANSLATE) -projwin -73.06 83.9998611 -11.5 59.475 $< $@

foo.tif: gmted2010_mn75.tif
	$(GDAL_TRANSLATE) -projwin -43.43 60.07 -42.96 59.81 $< $@

%.tif.aux.xml: %.tif
	time gdaladdo -r average $< 2 4 8 16 32 64 128 256 512
	# force recalculation
	test -f $@ && rm -v $@ || true
	# this calculates statistics
	time gdalinfo -stats $<
	# only reports?
	time gdalinfo -mm $<
	# only reports?
	time gdalinfo -hist $<

%.tif : %.vrt
	$(GDAL_TRANSLATE) -co "BIGTIFF=YES" $< $@

# note: hill shading / huge and slow
# todo: maybe split into overlaping tiles, hillshade, combine
gmted2010_mn_hill_uncompressed.tif: gmted2010_mn.tif.aux.xml
	$(GDAL_HILLSHADE) gmted2010_mn.tif $@ -s 111120 -co "BIGTIFF=YES"

gmted2010_mn_hill.tif: gmted2010_mn_hill_uncompressed.tif
	$(GDAL_TRANSLATE) $< $@

# grass doesn't like sub-pixel extent overlap
# (s.a. http://trac.osgeo.org/grass/ticket/1734)
# todo: statistics? not used by grass anyway?
gmted2010_mn_grass.vrt: gmted2010_mn.tif.aux.xml
	# todo: check size?! 172800 83520
	$(GDAL_TRANSLATE_VRT) -srcwin 1 0 $$[172800-1] $$[83520-1] gmted2010_mn.tif $@

gmted2010_mn_hill_grass.vrt: gmted2010_mn_hill.tif.aux.xml
	$(GDAL_TRANSLATE_VRT) -srcwin 1 0 $$[172800-1] $$[83520-1] gmted2010_mn_hill.tif $@

# grass doesn't like sub-pixel extent overlap
# (s.a. http://trac.osgeo.org/grass/ticket/1734)
# todo: statistics? not used by grass anyway?
freedem_grass.vrt: freedem.tif.aux.xml
	# todo: check size?! 432001 208800
	$(GDAL_TRANSLATE_VRT) -srcwin 1 0 $$[432001-2] $$[208800-1] freedem.tif $@

# todo: include those?

gmted2010_mn_color.vrt : gmted2010_mn.tif.aux.xml
	gdaldem color-relief gmted2010_mn.tif /usr/lib/grass64/etc/colors/srtm gmted2010_mn_color.vrt -of vrt

# create contour shape? todo: really simplify?!
gmted2010_mn_contour.shp: gmted2010_mn.tif.aux.xml
	time gdal_contour gmted2010_mn.tif delme.shp -i 100 -a z
	time ogr2ogr -simplify 0.0005 $@ delme.shp
	rm -v delme.*

clean:
	rm -vf $(DATAFILES)
	rm -vf *.stamp *~ gmted2010*.tif gmted2010*.vrt *.stats *.aux.xml srtm3.md5
	rm -rvf mn30 mn75

dist-clean: clean
	rm -vf *.zip
	rm -rfv dds.cr.usgs.gov

installdirs:
	$(INSTALL) -d $(DESTDIR)/usr/share/freedem
	$(INSTALL) -d $(DESTDIR)/usr/share/doc/$(PACKAGE)

install: installdirs
	$(INSTALL_DATA) $(DATAFILES) $(DESTDIR)/usr/share/freedem
	$(INSTALL_DATA) README COPYING ChangeLog $(DESTDIR)/usr/share/doc/$(PACKAGE)

dist:
	mkdir $(PACKAGE)-$(VERSION) && cp -v Makefile README INSTALL COPYING TODO ChangeLog grass-script extract-greenland $(PACKAGE)-$(VERSION) && tar czvf $(PACKAGE)-$(VERSION).tar.gz $(PACKAGE)-$(VERSION) && rm -rf $(PACKAGE)-$(VERSION)
