#!/usr/bin/make -f VERSION ?= "$(shell git describe --tags --match "v*" --dirty --always --abbrev=8 2>/dev/null || cat VERSION 2>/dev/null || echo "develop")" FROST_LOCODE = ./frostfs-locode-db .PHONY: all clean version help update debpackage DIRS = in tmp # IGNORE space := $(subst ,, ) # .deb package versioning OS_RELEASE = $(shell lsb_release -cs) PKG_VERSION ?= $(shell echo $(VERSION) | sed "s/^v//" | \ sed -E "s/(.*)-(g[a-fA-F0-9]{6,8})(.*)/\1\3~\2/" | \ sed "s/-/~/")-${OS_RELEASE} # Generate locode_db BoltDB file all: $(DIRS) $(FROST_LOCODE) locode_db $(FROST_LOCODE): go build . $(DIRS): @echo "⇒ Ensure dir: $@" @mkdir -p $@ in/airports.dat: $(DIRS) zcat data/airports.dat.gz > in/airports.dat in/countries.dat: $(DIRS) zcat data/countries.dat.gz > in/countries.dat in/continents.geojson: $(DIRS) zcat data/continents.geojson.gz > in/continents.geojson in/unlocode-SubdivisionCodes.csv: $(DIRS) zcat data/unlocode-SubdivisionCodes.csv.gz > in/unlocode-SubdivisionCodes.csv in/unlocode-CodeList.csv: $(DIRS) zcat data/unlocode-CodeList.csv.gz > in/unlocode-CodeList.csv # Generate locode_db BoltDB file locode_db: in/unlocode-CodeList.csv in/unlocode-SubdivisionCodes.csv in/continents.geojson in/airports.dat in/countries.dat $(FROST_LOCODE) $(FROST_LOCODE) generate \ --airports in/airports.dat \ --continents in/continents.geojson \ --countries in/countries.dat \ --in in/unlocode-CodeList.csv \ --subdiv in/unlocode-SubdivisionCodes.csv \ --out locode_db chmod 644 locode_db # IGNORE # Openflights doesn't have tags or releases, so update would always take latest master version. # See https://github.com/jpatokal/openflights data/airports.dat.gz: $(DIRS) wget -c https://raw.githubusercontent.com/jpatokal/openflights/master/data/airports.dat -O tmp/airports.dat && \ gzip -c tmp/airports.dat > data/airports.dat.gz data/countries.dat.gz: $(DIRS) wget -c https://raw.githubusercontent.com/jpatokal/openflights/master/data/countries.dat -O tmp/countries.dat && \ gzip -c tmp/countries.dat > data/countries.dat.gz # IGNORE # See https://unece.org/trade/cefact/UNLOCODE-Download tmp/locode.csv.zip :$(DIRS) DOWNLOADURL=$$(wget -O - https://unece.org/trade/cefact/UNLOCODE-Download \ | grep -oP '(?<=href=")\S+loc\d+csv\.zip'); \ echo "$$DOWNLOADURL" | grep -oP '(?<=loc)\d+' > tmp/locode-version.txt; \ wget -c "$$DOWNLOADURL" -O tmp/locode.csv.zip data/unlocode-SubdivisionCodes.csv.gz: tmp/locode.csv.zip unzip -p tmp/locode.csv.zip "*SubdivisionCodes.csv" | gzip > data/unlocode-SubdivisionCodes.csv.gz data/unlocode-CodeList.csv.gz: tmp/locode.csv.zip unzip -p tmp/locode.csv.zip "*CodeListPart*" | gzip > data/unlocode-CodeList.csv.gz # Download and repack external data-sources update: data/unlocode-CodeList.csv.gz data/unlocode-SubdivisionCodes.csv.gz data/countries.dat.gz data/airports.dat.gz # Print version version: @echo $(VERSION) # Show this help prompt help: @echo ' Usage:' @echo '' @echo ' make ' @echo '' @echo ' Targets:' @echo '' @awk '/^#/{ comment = substr($$0,3) } comment && /^[a-zA-Z][a-zA-Z0-9_-]+ ?:/{ print " ", $$1, comment }' $(MAKEFILE_LIST) | column -t -s ':' | grep -v 'IGNORE' | sort -u # Run tests test: locode_db test -n "$$($(FROST_LOCODE) info --db locode_db --locode "US NYC" 2>&1 | grep "New York")" test -n "$$($(FROST_LOCODE) info --db locode_db --locode "RU LED" 2>&1 | grep "Leningrad")" test -n "$$($(FROST_LOCODE) info --db locode_db --locode "RU KUF" 2>&1 | grep "Samara")" test -n "$$($(FROST_LOCODE) info --db locode_db --locode "VN DAN" 2>&1 | grep "Binh Hoa")" test -n "$$($(FROST_LOCODE) info --db locode_db --locode "FR PAR" 2>&1 | grep "Paris")" # Clean data directory before update clean_data: rm -f data/unlocode-CodeList.csv.gz rm -f data/unlocode-SubdivisionCodes.csv.gz rm -f data/countries.dat.gz rm -f data/airports.dat.gz # Clean up clean: rm -f in/* rm -f tmp/* rm -f locode_db rm -f $(FROST_LOCODE) # Package for Debian debpackage: dch --package frostfs-locode-db \ --controlmaint \ --newversion $(PKG_VERSION) \ --force-bad-version \ --distribution $(OS_RELEASE) \ "Please see CHANGELOG.md for code changes for $(VERSION)" dpkg-buildpackage --no-sign -b # Clean up debian packaging leftovers debclean: dh clean