GEOMAPFISH_VERSION ?= {{geomapfish_version}}
export GEOMAPFISH_VERSION
export PACKAGE = {{package}}

INSTANCE ?= main
export INSTANCE

DOCKER ?= TRUE
ifeq ($(INSTANCE), main)
DOCKER_ENTRY_POINT ?= /
else
DOCKER_ENTRY_POINT ?= /$(INSTANCE)/
endif
DOCKER_WEB_HOST ?= localhost
DOCKER_WEB_PROTOCOL ?= https
export DOCKER_ENTRY_POINT
export DOCKER_WEB_HOST
export DOCKER_WEB_PROTOCOL

DOCKER_PORT ?= 8480
export DOCKER_PORT

ifeq ($(DEBUG), TRUE)
PRERULE_CMD ?= @echo "Build \033[1;34m$@\033[0m due modification on \033[1;34m$?\033[0m" 1>&2; ls -t --full-time --reverse $? $@ 1>&2 || true
endif

VENV_BIN ?= /build/venv/bin
# Use TileCloud chain
TILECLOUD_CHAIN ?= TRUE
TILECLOUD_CHAIN_LOCAL ?= FALSE

TEMPLATE_EXCLUDE += /build node_modules \
	print/templates \
	CONST_create_template \
	geoportal/$(PACKAGE)_geoportal/static/lib
FIND_OPTS = $(foreach ELEM, $(TEMPLATE_EXCLUDE),-path ./$(ELEM) -prune -o) -type f

# If TRUE do not minify the js / css, ...
DEVELOPMENT ?= FALSE
export DEVELOPMENT
# Language provided by the application
LANGUAGES ?= en fr de
NGEO_INTERFACES ?= desktop mobile
CGXP_INTERFACES ?=
CGXP_API ?= TRUE
CGXP_XAPI ?= FALSE
INTERFACES += $(NGEO_INTERFACES) $(CGXP_INTERFACES)
export INTERFACES
# Use print
PRINT ?= TRUE
# Enable Docker target
DOCKER_BASE ?= camptocamp/{{package}}
export DOCKER_BASE
DOCKER_TAG ?= latest
export DOCKER_TAG

PGHOST ?= localhost
export PGHOST
PGHOST_SLAVE ?= localhost
export PGHOST_SLAVE
PGPORT ?= 5432
export PGPORT
PGUSER ?= www-data
export PGUSER
PGPASSWORD ?= www-data
export PGPASSWORD
PGDATABASE ?= geomapfish
export PGDATABASE
PGSCHEMA ?= main
export PGSCHEMA
PGSCHEMA_STATIC ?= main_static
export PGSCHEMA_STATIC

DEFAULT_WEB_RULE += $(JSBUILD_OUTPUT_FILES) $(CSS_CGXP_OUTPUT) $(CSS_API_OUTPUT) $(CSS_XAPI_OUTPUT)
ifneq ($(NGEO_INTERFACES), "")
DEFAULT_WEB_RULE += $(NGEO_OUTPUT_FILES)
CLIENT_CHECK_RULE ?= lint-ngeo
endif
WEB_RULE ?= $(DEFAULT_WEB_RULE)

DEFAULT_BUILD_RULES ?= docker-build-geoportal \
	docker-build-config \
	project.yaml \
	geoportal/alembic.ini \
	geoportal/alembic.yaml \
	docker-compose.yaml \
	.env \
	docker-compose-build.yaml \
	docker-compose-dev.yaml

# TileCloud-chain
WMTSCAPABILITIES_PATH ?= 1.0.0/WMTSCapabilities-$(ENVIRONMENT).xml
export WMTSCAPABILITIES_PATH
ifeq ($(TILECLOUD_CHAIN), TRUE)
WMTSCAPABILITIES_FILE ?= /var/sig/tiles/$(WMTSCAPABILITIES_PATH)
MAPCACHE_FILE ?= mapcache/mapcache.xml.tmpl
GEN_MAPCACHE_ARGS ?= --generate-mapcache-config
ifeq ($(DOCKER), TRUE)
GEN_MAPCACHE_ARGS += --mapcache-version=1.6
endif

TILEGENERATION_CONFIG_FILE ?= tilegeneration/config.yaml.tmpl
DEFAULT_BUILD_RULES += $(TILEGENERATION_CONFIG_FILE)
ifeq ($(TILECLOUD_CHAIN_LOCAL), TRUE)
DEFAULT_BUILD_RULES += $(WMTSCAPABILITIES_FILE)
endif
endif


# Make rules
ifeq (${DEVELOPMENT}, TRUE)
DEFAULT_BUILD_RULES += docker-build-testdb
endif

BUILD_RULES ?= $(filter-out $(DISABLE_BUILD_RULES),$(DEFAULT_BUILD_RULES))

OUTPUT_DIR = geoportal/$(PACKAGE)_geoportal/static/build

# Git
GIT_REMOTE ?= origin
GIT_BRANCH = $(shell git rev-parse --abbrev-ref HEAD)
GIT_HASH ?= $(shell git rev-parse HEAD)

# ngeo
NODE_ENV ?= production
export NODE_ENV
NO_DEV_SERVER ?= TRUE
export NO_DEV_SERVER
ANGULAR_VERSION = 1.6
APP_OUTPUT_DIR = geoportal/$(PACKAGE)_geoportal/static-ngeo/build
GCC_JS_FILES = $(shell find /usr/lib/node_modules/openlayers/src/ol /usr/lib/node_modules/ngeo/src /usr/lib/node_modules/ol-cesium/src -type f -name '*.js' 2> /dev/null)
APP_JS_FILES = $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js -type f -name '*.js' 2> /dev/null)
APP_JS_MAKO_FILES += $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js $(FIND_OPTS) -name "*.js.mako" -print 2> /dev/null)
APP_JS_JINJA_FILES += $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js $(FIND_OPTS) -name "*.js.jinja" -print 2> /dev/null)
APP_JS_FILES +=  $(APP_JS_MAKO_FILES:.mako=) $(APP_JS_JINJA_FILES:.jinja=)
APP_HTML_FILES += $(addprefix geoportal/$(PACKAGE)_geoportal/static-ngeo/js/apps/, $(addsuffix .html.ejs, $(NGEO_INTERFACES)))
APP_DIRECTIVES_PARTIALS_FILES = $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js -type f -name '*.html' 2> /dev/null)
HTML_FILES += $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js -type f -name '*.html' 2> /dev/null)
LESS_FILES += $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js -type f -name '*.less' 2> /dev/null)
CSS_FILES += $(shell find geoportal/$(PACKAGE)_geoportal/static-ngeo/js -type f -name '*.css' 2> /dev/null)
NGEO_GMF_FONTS = $(addprefix geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/gmf-icons, .woff .ttf .eot)
NGEO_FONTAWESOME_FONTS = $(addprefix geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/fontawesome-webfont, .woff .woff2 .ttf .eot)
NGEO_FONTS = $(NGEO_GMF_FONTS) $(NGEO_FONTAWESOME_FONTS)
JSON_CLIENT_LOCALISATION_FILES = $(addprefix $(APP_OUTPUT_DIR)/, $(addsuffix .json, $(LANGUAGES)))
L10N_CLIENT_POSTFIX ?= client
L10N_SERVER_POSTFIX ?= server
CLIENT_LOCALISATION_RULES = $(addprefix /build/lang-client-, $(LANGUAGES))
ANGULAR_LOCALES_FILES = $(addprefix $(APP_OUTPUT_DIR)/angular-locale_, $(addsuffix .js, $(LANGUAGES)))
NGEO_OUTPUT_FILES = $(JSON_CLIENT_LOCALISATION_FILES) \
	$(ANGULAR_LOCALES_FILES)
NGEO_OUTPUT_FILES += /build/apps.timestamp

ifdef CI
WEBPACK_ARGS ?= --debug
else
WEBPACK_ARGS ?= --progress --debug
endif

# i18n
I18N_SOURCE_FILES += $(APP_HTML_FILES) \
	$(APP_JS_FILES) \
	$(APP_DIRECTIVES_PARTIALS_FILES) \
	geoportal/config.yaml
# The theme from the database
I18N_SOURCE_FILES += geoportal/development.ini
I18N_DEPENDENCIES += project.yaml /build/requirements.timestamp


# Alembic
ALEMBIC_YAML_FILE ?= $(VARS_FILE)

# CGXP
JSBUILD_MAIN_FILES = $(shell find geoportal/$(PACKAGE)_geoportal/static/lib/cgxp geoportal/$(PACKAGE)_geoportal/static/js -name "*.js" -print 2> /dev/null)
JSBUILD_MAIN_CONFIG = geoportal/jsbuild/app.cfg
ifdef CGXP_INTERFACES
JSBUILD_OUTPUT_FILES ?= $(addsuffix .js, $(CGXP_INTERFACES))
JSBUILD_OUTPUT_FILES += $(addprefix lang-, $(addsuffix .js, $(LANGUAGES)))
CSS_CGXP_OUTPUT = $(OUTPUT_DIR)/app.css
endif
ifeq ($(CGXP_XAPI), TRUE)
JSBUILD_OUTPUT_FILES += xapi.js
JSBUILD_OUTPUT_FILES += $(addprefix lang-, $(addsuffix .js, $(LANGUAGES)))
CSS_XAPI_OUTPUT = $(OUTPUT_DIR)/xapi.css
endif
ifeq ($(CGXP_API), TRUE)
JSBUILD_OUTPUT_FILES += api.js
JSBUILD_OUTPUT_FILES += $(addprefix api-lang-, $(addsuffix .js, $(LANGUAGES)))
CSS_API_OUTPUT = $(OUTPUT_DIR)/api.css
endif
JSBUILD_OUTPUT_FILES := $(addprefix $(OUTPUT_DIR)/, $(JSBUILD_OUTPUT_FILES))
ifeq ($(DEVELOPMENT), TRUE)
JSBUILD_ARGS += --uncompress
endif
CGXP_GIT_REMOTE ?= https://github.com/camptocamp/cgxp.git


ifeq ($(DEVELOPMENT), FALSE)
CSSMIN_ARGS += --compress
LESS_ARGS += --clean-css="--s0"
endif
LESS_ARGS += --autoprefix
DEFAULT_CSS_BASE_FILES += \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/ext-all.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/xtheme-gray.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/openlayers/theme/default/style.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/geoext/resources/css/popup.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/geoext/resources/css/gxtheme-gray.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/geoext.ux/ux/Measure/resources/css/measure.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/sandbox/FeatureEditing/resources/css/feature-editing.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/styler/theme/css/styler.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/gxp/src/theme/all.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/core/src/theme/all.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext.ux/ColorPicker/ressources/colorpicker.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/examples/ux/css/Spinner.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj-widgets.css
ifdef CSS_BASE_FILES
CSS_BASE_FILES := $(DEFAULT_CSS_BASE_FILES) $(CSS_BASE_FILES)
else
CSS_BASE_FILES := $(DEFAULT_CSS_BASE_FILES)
endif

DEFAULT_CSS_API_FILES += \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/openlayers/theme/default/style.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css
ifdef CSS_API_FILES
CSS_API_FILES := $(DEFAULT_CSS_API_FILES) $(CSS_API_FILES)
else
CSS_API_FILES := $(DEFAULT_CSS_API_FILES)
endif

DEFAULT_CSS_XAPI_FILES += \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/core/src/theme/reset.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/editor.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/pivotgrid.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/menu.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/panel.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/grid.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/debug.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/qtips.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/dd.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/form.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/resizable.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/toolbar.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/slider.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/combo.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/layout.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/dialog.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/core.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/button.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/progress.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/tabs.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/box.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/borders.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/date-picker.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/tree.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/window.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/visual/list-view.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/editor.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/pivotgrid.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/menu.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/panel.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/grid.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/debug.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/qtips.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/dd.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/form.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/resizable.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/toolbar.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/panel-reset.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/slider.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/combo.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/layout.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/dialog.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/core.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/button.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/progress.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/tabs.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/box.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/borders.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/date-picker.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/tree.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/window.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/structure/list-view.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ext/Ext/resources/css/xtheme-gray.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/openlayers/theme/default/style.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/geoext/resources/css/gxtheme-gray.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/geoext.ux/ux/Measure/resources/css/measure.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/gxp/src/theme/all.css \
	geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/core/src/theme/all.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css \
	geoportal/$(PACKAGE)_geoportal/static/css/proj-widgets.css
ifdef CSS_XAPI_FILES
CSS_XAPI_FILES := $(DEFAULT_CSS_XAPI_FILES) $(CSS_XAPI_FILES)
else
CSS_XAPI_FILES := $(DEFAULT_CSS_XAPI_FILES)
endif

VALIDATE_PY_FOLDERS = admin/$(PACKAGE)_admin \
	geoportal/$(PACKAGE)_geoportal/*.py geoportal/$(PACKAGE)_geoportal/lib \
	geoportal/$(PACKAGE)_geoportal/scripts geoportal/$(PACKAGE)_geoportal/views
VALIDATE_PY_TEST_FOLDERS = geoportal/$(PACKAGE)_geoportal/tests

# Documentation
SPHINX_FILES = $(shell find doc -name "*.rst" -print)

# Server localisation
ifdef CGXP_INTERFACES
SERVER_LOCALISATION_SOURCES_FILES += geoportal/$(PACKAGE)_geoportal/models.py $(shell find geoportal/$(PACKAGE)_geoportal/templates -type f -name '*.html')
SERVER_LOCALISATION_RULES = $(addprefix /build/lang-server-, $(LANGUAGES))
endif

# Print
ifeq ($(PRINT), TRUE)
PRINT_BASE_DIR ?= print
PRINT_CONFIG_FILE ?= print/print-apps/$(PACKAGE)/config.yaml.tmpl
I18N_SOURCE_FILES += $(PRINT_CONFIG_FILE)
endif

PY_FILES = $(shell find $(PACKAGE) -type f -name '*.py' -print)

# Templates
ALL_MAKO_FILES = $(shell find $(FIND_OPTS) -name "*.mako" -print)
ALL_JINJA_FILES = $(shell find $(FIND_OPTS) -name "*.jinja" -print)
EXTRA_EXCLUDE = $(foreach ELEM, print mapfile jsbuild tilegeneration,-path ./$(ELEM) -prune -o)
VARS_FILES += CONST_vars.yaml $(VARS_FILE)
CONFIG_VARS += sqlalchemy.url sqlalchemy.pool_recycle sqlalchemy.pool_size sqlalchemy.max_overflow \
	sqlalchemy.use_batch_mode sqlalchemy_slave.url sqlalchemy_slave.pool_recycle sqlalchemy_slave.pool_size \
	sqlalchemy_slave.max_overflow sqlalchemy_slave.use_batch_mode schema schema_static enable_admin_interface \
	default_locale_name servers layers available_locale_names cache admin_interface functionalities \
	raster shortener hide_capabilities mapserverproxy tinyowsproxy resourceproxy print_url \
	tiles_url checker check_collector default_max_age jsbuild package srid \
	reset_password fulltextsearch global_headers headers authorized_referers hooks stats db_chooser \
	ogcproxy_enable dbsessions urllogin host_forward_host smtp c2c.base_path welcome_email host \
	lingua_extractor interfaces_config interfaces default_interface devserver_url

# Secrets

ifndef DISABLE_DEFAULT_GPG_KEYS
GPG_KEYS += D1D6A94C # Stéphane Brunner
GPG_KEYS += B42AF223 # Patrick Valsecchi
GPG_KEYS += C27D570B # Roman Zoller
GPG_KEYS += CF8E9976 # Guillaume Beraudo
GPG_KEYS += 3EA11D26 # Elisabeth Leu
GPG_KEYS += 0875810F # Frederic Junod
GPG_KEYS += 1DAFEE6A # Oliver Christen
GPG_KEYS += C8A0FF72 # Wolfgang Kaltz
GPG_KEYS += A510717D # Michael Künzli
GPG_KEYS += A68C2F5F # Arnaud Morvan
endif

# Disabling Make built-in rules to speed up execution time
.SUFFIXES:

.PHONY: help
help:
	@echo  "Usage: make <target>"
	@echo
	@echo  "Main targets:"
	@echo
	@echo  "- docker-build   	Pull all the needed Docker images, build all (Outside Docker)"
	@echo  "- build			Build and configure the project"
	@echo  "- checks		Perform a number of checks on the code"
	@echo  "- serve			Run the development server (Outside Docker)"
	@echo  "- clean			Remove generated files"
	@echo  "- clean-all		Remove all the build artifacts"
	@echo  "- clean-all-cache	Remove all the build artifacts and the extra caches (npm and pip)"
	@echo
	@echo  "Utility targets:"
	@echo
	@echo  "- update		Update and clean the project (Git, Node, Pip)"
	@echo  "- upgrade-db		Upgrade the database to the latest version"
	@echo  "- upgrade		Launch the upgrade process"
	@echo  "- theme2fts		Import the theme in the full-text search"
	@echo  "- update-po		Update the localisations files"

ifdef UTILITY_HELP
	@echo $(UTILITY_HELP)
endif
	@echo
	@echo  "Secondary targets:"
	@echo
	@echo  "- build-cgxp		Build the javascript and the css for cgxp"
	@echo  "- build-ngeo		Build the javascript and the css for ngeo"
	@echo  "- flake8		Run Flake8 checker on the Python code"
	@echo  "- lint-ngeo		Check the JavaScript code with linters for ngeo"
	@echo  "- template-clean	Clean the template file"
ifdef SECONDARY_HELP
	@echo $(SECONDARY_HELP)
endif
	@echo

.PHONY: docker-build
docker-build:
	docker pull camptocamp/geomapfish-build:${MAJOR_VERSION}
	for image in `find -name Dockerfile -o -name Dockerfile.mako | xargs grep --no-filename FROM | awk '{print $$2}' | sort -u`; do docker pull $$image; done
	./docker-run make build

.PHONY: build
build: $(BUILD_RULES)

.PHONY: checks
checks: flake8 $(CLIENT_CHECK_RULE) git-attributes yamllint spell printlint

.PHONY: git-attributes
git-attributes:
	git --no-pager diff --check `git log --oneline | tail -1 | cut --fields=1 --delimiter=' '`

PRINT_REPORTS_FILES ?= $(shell find print/print-apps -name "*.jrxml" -print)
.PHONY: printlint
printlint: $(PRINT_REPORTS_FILES)
	xmllint --noout --schema http://jasperreports.sourceforge.net/xsd/jasperreport.xsd --encode utf-8 $(PRINT_REPORTS_FILES)

YAML_FILES ?= $(filter-out ./tilegeneration/config.yaml ./geoportal/config.yaml \
	./qgisserver/geomapfish.yaml ./geoportal/alembic.yaml \
	./docker-compose-dev.yaml ./docker-compose.yaml, \
	$(shell find \
		-name .build -prune -or \
		-name cgxp -prune -or \
		-name node_modules -prune -or \
		\( -name "*.yml" -or -name "*.yaml" \) -print \
	))
.PHONY: yamllint
yamllint: $(YAML_FILES)
	yamllint --strict --config-file=yamllint.yaml -s $(YAML_FILES)

.PHONY: spell
spell:
	codespell --quiet-level=2 --check-filenames --ignore-words=spell-ignore-words.txt \
		$(shell find \
		-name node_modules -prune -or \
		-name .git -prune -or \
		-name '__pycache__' -prune -or \
		-name 'build' -prune -or \
		-name '.build' -prune -or \
		-name 'cgxp' -prune -or \
		-name 'c2cgeoportal_*' -prune -or \( \
		-type f -and \
		-not -name '*.png' -and \
		-not -name '*.mo' -and \
		-not -name '*.po*' -and \
		-not -name '*.qgs*' -and \
		-not -name 'CONST_Makefile' -and \
		-not -name 'package-lock.json' \) -print)

.PHONY: clean
clean: template-clean
	rm --recursive --force /build/*.timestamp \
		$(MAPCACHE_FILE) \
		$(OUTPUT_DIR)/ \
		$(APP_OUTPUT_DIR)/ \
		geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)-*.pot \
		geoportal/alembic.yaml \
		qgisserver/geomapfish.yaml \
		.UPGRADE* \
		mapcache \
		$(addprefix geoportal/$(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).mo, $(LANGUAGES))) \
		$(addprefix geoportal/$(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).mo, $(LANGUAGES)))
ifeq ($(TILECLOUD_CHAIN_LOCAL), TRUE)
	rm --force $(WMTSCAPABILITIES_FILE)
endif

.PHONY: clean-all
clean-all: clean
	rm --recursive --force /build/* \
		geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/ \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ \
		$(ANGULAR_LOCALES_FILES) \
		`find -name __pycache__` \
		node_modules  # for nondocker

.PHONY: clean-all-cache
clean-all-cache: clean-all
	rm  --recursive --force $(HOME)/.npm \
		$(HOME)/.cache/pip

.PHONY: theme2fts
theme2fts: /build/requirements.timestamp geoportal/config.yaml \
		$(addprefix geoportal/$(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).mo, $(LANGUAGES)))
	$(VENV_BIN)/python /usr/local/bin/theme2fts

.PHONY: flake8
flake8:
	flake8 $(PACKAGE)

.PHONY: build-cgxp
build-cgxp: $(JSBUILD_OUTPUT_FILES) $(CSS_CGXP_OUTPUT) $(CSS_API_OUTPUT) $(CSS_XAPI_OUTPUT)

.PHONY: lint-ngeo
lint-ngeo: /build/eslint.timestamp

.PHONY: upgrade-db
upgrade-db: geoportal/alembic.ini geoportal/alembic.yaml
	alembic --config=$< --name=main upgrade head
	alembic --config=$< --name=static upgrade head

# Templates

.PHONY: template-clean
template-clean:
	rm --force /build/c2ctemplate-cache.json \
		$(ALL_MAKO_FILES:.mako=) \
		$(ALL_JINJA_FILES:.jinja=) \
		geoportal/config.yaml

/build/makefile-%:
	$(PRERULE_CMD)
	rm -f /build/makefile-*
	touch $@

/build/c2ctemplate-cache.json: \
		.config \
		$(VARS_FILES) \
		$(MAKEFILE_LIST) \
		/build/makefile-$(firstword $(MAKEFILE_LIST))
	$(PRERULE_CMD)
ifeq ($(origin VARS_FILE), undefined)
	@echo "Error: the variable VARS_FILE is required."
	exit 1
endif
	ALEMBIC_YAML_FILE=$(ALEMBIC_YAML_FILE) c2c-template --vars $(VARS_FILE) --get-cache $@

%: %.mako /build/c2ctemplate-cache.json
	$(PRERULE_CMD)
	c2c-template --cache /build/c2ctemplate-cache.json --engine mako \
		--runtime-environment-pattern '$${{'{{'}}{}}}' --files $<

%: %.jinja /build/c2ctemplate-cache.json
	$(PRERULE_CMD)
	c2c-template --cache /build/c2ctemplate-cache.json --engine jinja \
		--runtime-environment-pattern '$${{'{{'}}{}}}' --files $<

geoportal/config.yaml: /build/c2ctemplate-cache.json
	$(PRERULE_CMD)
	c2c-template --cache /build/c2ctemplate-cache.json --get-config /build/_config.yaml $(CONFIG_VARS)
	pykwalify --data-file /build/_config.yaml --schema-file CONST_config-schema.yaml
	mv /build/_config.yaml $@
	touch $@

qgisserver/geomapfish.yaml: /build/c2ctemplate-cache.json
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	c2c-template --cache /build/c2ctemplate-cache.json --get-config $@ \
		sqlalchemy_slave.url schema schema_static srid
	touch $@

# server localisation

.PRECIOUS: geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).pot
geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).pot: \
		lingua-server.cfg /build/requirements.timestamp \
		$(SERVER_LOCALISATION_SOURCES_FILES)
	$(PRERULE_CMD)
	rm -f $@ # Because of WindowsError, thus only problematic on Windows
	pot-create --keyword _ --config $< --output $@ $(SERVER_LOCALISATION_SOURCES_FILES) || true
	[ ! -f $@ ] || chmod go+r $@

.PRECIOUS: geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).pot
geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).pot: \
		lingua-client.cfg $(I18N_DEPENDENCIES) $(I18N_SOURCE_FILES)
	$(PRERULE_CMD)
	rm -f $@ # Because of WindowsError, thus only problematic on Windows
	$(VENV_BIN)/python /usr/local/bin/pot-create --config $< --output $@ $(I18N_SOURCE_FILES)
	chmod go+r $@

.PHONY: update-po
update-po: \
	$(CLIENT_LOCALISATION_RULES) \
	$(SERVER_LOCALISATION_RULES)

.PRECIOUS: /build/lang-server-%
/build/lang-server-%: \
		geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).pot
	$(PRERULE_CMD)
	mkdir --parent geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/
	[ -f geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).po ] || [ ! -f $< ] || msginit --no-translator --input=$< --output-file=geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).po -l $*
	touch --no-create geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).po
	[ ! -f $< ] || msgmerge --backup=none --update --sort-output --no-location geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).po $<
	touch geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).po

.PRECIOUS: /build/lang-client-%
/build/lang-client-%: \
		geoportal/$(PACKAGE)_geoportal/locale/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).pot
	$(PRERULE_CMD)
	mkdir --parent geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/
	[ -f geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po ] || msginit --no-translator --input=$< --output-file=geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po -l $*
	touch --no-create geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po
	msgmerge --backup=none --update --sort-output --no-location geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po $<
	touch geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po

.PRECIOUS: %.mo
%.mo: %.po
	$(PRERULE_CMD)
	msgfmt -o $@ $<
	touch --no-create $@

# ngeo

.PHONY: build-ngeo
build-ngeo: $(NGEO_OUTPUT_FILES)

.PRECIOUS: $(APP_OUTPUT_DIR)/%.json
$(APP_OUTPUT_DIR)/%.json: \
		geoportal/$(PACKAGE)_geoportal/locale/%/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po \
		/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal/locale/%/LC_MESSAGES/gmf.po \
		/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal/locale/%/LC_MESSAGES/ngeo.po
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	node /usr/bin/compile-catalog \
		/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal/locale/$*/LC_MESSAGES/ngeo.po \
		/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal/locale/$*/LC_MESSAGES/gmf.po \
		geoportal/$(PACKAGE)_geoportal/locale/$*/LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).po > $@

/opt/c2cgeoportal_geoportal/c2cgeoportal_geoportal/locale/en/LC_MESSAGES/%.po:
	echo "Nothing to do for $@"

$(APP_OUTPUT_DIR)/angular-locale_%.js: /usr/lib/node_modules/ngeo/package.json language_mapping
	mkdir --parent $(dir $@)
	rm --force $@
	cp /opt/angular-locale/angular-locale_`(grep $* language_mapping || echo $*) | cut --delimiter = --fields 2 | tr --delete '\r\n'`.js $@

.PRECIOUS: geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/gmf-icons.%
geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/gmf-icons.%: /usr/lib/node_modules/ngeo/contribs/gmf/fonts/gmf-icons.%
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	cp $< $@

.PRECIOUS: geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/fontawesome-webfont.%
geoportal/$(PACKAGE)_geoportal/static-ngeo/fonts/fontawesome-webfont.%: /usr/lib/node_modules/font-awesome/fonts/fontawesome-webfont.%
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	cp $< $@


$(APP_OUTPUT_DIR)/images/: /usr/lib/node_modules/jquery-ui/themes/base/images
	$(PRERULE_CMD)
	mkdir --parent $@
	cp -r $</* $@


.PRECIOUS: /build/apps.timestamp
/build/apps.timestamp: geoportal/webpack.apps.js $(addprefix /build/apps., $(addsuffix .timestamp, $(NGEO_INTERFACES)))
	touch $@

.PRECIOUS: /build/apps.%.timestamp
/build/apps.%.timestamp: $(OL_JS_FILES) $(NGEO_JS_FILES) \
			geoportal/webpack.config.js \
			$(APP_JS_FILES) \
			$(HTML_FILES) \
			$(APP_HTML_FILES) \
			$(LESS_FILES) \
			${CSS_FILES} \
			$(NGEO_FONTS) \
			$(APP_OUTPUT_DIR)/images/ \
			/build/npm-install.timestamp
	$(PRERULE_CMD)
	rm --force $(APP_OUTPUT_DIR)/$*.*
	(cd geoportal; INTERFACE=$* webpack $(WEBPACK_ARGS))
ifeq ($(DOCKER), TRUE)
	mv $(APP_OUTPUT_DIR)/$*.html $(APP_OUTPUT_DIR)/$*.html.tmpl
ifeq ($(NODE_ENV), development)
	mv $(APP_OUTPUT_DIR)/$*.css $(APP_OUTPUT_DIR)/$*.css.tmpl
else
	ls -1 $(APP_OUTPUT_DIR)/$*.*.css|while read file; do mv $${file} $${file}.tmpl; done
endif
endif
	touch $@

/build/npm-install.timestamp: geoportal/package.json
	cp geoportal/package.json /build
	(cd /build; HOME=/tmp npm install)
	touch $@

/build/eslint.timestamp: $(APP_JS_FILES)
	$(PRERULE_CMD)
	eslint $?
	touch $@


# Git

geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/: cgxp_revision
	$(PRERULE_CMD)
	# Sometimes we have an empty directory
	rmdir $@ || true
	if [ ! -e $@ ]; then git clone $(CGXP_GIT_ARGS) $(CGXP_GIT_REMOTE) $@; fi
	cd $@ && git fetch
	cd $@ && git reset --hard $(shell cat $<)
	cd $@ && git submodule foreach git submodule sync
	cd $@ && git submodule update --init


# CGXP build

# Workaround to fix strange Make missing rule error
$(OUTPUT_DIR)/api-lang-en.js: \
		$(JSBUILD_MAIN_CONFIG) \
		$(JSBUILD_MAIN_FILES) \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/

$(OUTPUT_DIR)/%.js: \
		$(JSBUILD_MAIN_CONFIG) \
		$(JSBUILD_MAIN_FILES) \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	jsbuild $< $(JSBUILD_ARGS) -j $(notdir $@) -o $(dir $@)

$(CSS_CGXP_OUTPUT): \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ \
		geoportal/$(PACKAGE)_geoportal/static/css/proj.css \
		geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css \
		geoportal/$(PACKAGE)_geoportal/static/css/proj-widgets.css
	$(PRERULE_CMD)
	c2c-cssmin $(CSSMIN_ARGS) $@ $(CSS_BASE_FILES)

$(CSS_API_OUTPUT): \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ \
		geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css
	$(PRERULE_CMD)
	c2c-cssmin $(CSSMIN_ARGS) $@ $(CSS_API_FILES)

$(CSS_XAPI_OUTPUT): \
		geoportal/$(PACKAGE)_geoportal/static/lib/cgxp/ \
		geoportal/$(PACKAGE)_geoportal/static/css/proj-map.css \
		geoportal/$(PACKAGE)_geoportal/static/css/proj-widgets.css
	$(PRERULE_CMD)
	c2c-cssmin $(CSSMIN_ARGS) $@ $(CSS_XAPI_FILES)

# Venv

/build/venv.timestamp-noclean:
	$(PRERULE_CMD)
	rm --recursive --force /build/venv
	virtualenv --system-site-packages /build/venv
	touch $@

/build/requirements.timestamp: /build/venv.timestamp-noclean geoportal/setup.py
	$(PRERULE_CMD)
	$(VENV_BIN)/pip install --editable=geoportal
	touch $@

# Docker

docker-compose-build.yaml: /build/requirements.timestamp

.PHONY: docker-build-config
docker-build-config: $(shell docker-required --path .) \
		$(PRINT_CONFIG_FILE) \
		$(MAPCACHE_FILE) \
		qgisserver/geomapfish.yaml
	docker build --tag=$(DOCKER_BASE)-config:$(DOCKER_TAG) .

.PHONY: docker-build-geoportal
docker-build-geoportal: $(shell docker-required --path geoportal) \
		$(WEB_RULE) \
		$(addprefix geoportal/$(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_CLIENT_POSTFIX).mo, $(LANGUAGES))) \
		geoportal/config.yaml \
		geoportal/alembic.yaml
	docker build --tag=$(DOCKER_BASE)-geoportal:$(DOCKER_TAG) --build-arg=GIT_HASH=$(GIT_HASH) geoportal
ifdef CGXP_INTERFACES
docker-build-geoportal: $(addprefix geoportal/$(PACKAGE)_geoportal/locale/, $(addsuffix /LC_MESSAGES/$(PACKAGE)_geoportal-$(L10N_SERVER_POSTFIX).mo, $(LANGUAGES)))
endif


.PHONY: push-docker
push-docker:
	docker push $(DOCKER_BASE)-config:$(DOCKER_TAG)
	docker push $(DOCKER_BASE)-geoportal:$(DOCKER_TAG)

geoportal/alembic.yaml: $(ALEMBIC_YAML_FILE) vars.yaml CONST_vars.yaml
	$(PRERULE_CMD)
	ALEMBIC_YAML_FILE=$(ALEMBIC_YAML_FILE) c2c-template --vars $< --get-config /build/_alembic.yaml srid schema schema_static sqlalchemy.url cache
	mv /build/_alembic.yaml $@

testdb/11-schemas.sql: vars_alembic.yaml $(ALEMBIC_YAML_FILE) testdb/11-schemas.sql_mako vars.yaml CONST_vars.yaml
	$(PRERULE_CMD)
	rm --force testdb/11-schemas.sql.mako
	ln -s 11-schemas.sql_mako testdb/11-schemas.sql.mako
	ALEMBIC_YAML_FILE=$(ALEMBIC_YAML_FILE) c2c-template --vars $< --engine mako --runtime-environment-pattern '$${{'{{'}}{}}}' \
		--files testdb/11-schemas.sql.mako
	rm testdb/11-schemas.sql.mako

testdb/12-alembic.sql: geoportal/alembic.ini geoportal/alembic.yaml $(shell ls -1 /opt/alembic/main/*.py)
	$(PRERULE_CMD)
	alembic --config=$< --name=main upgrade --sql head > $@

testdb/13-alembic-static.sql: geoportal/alembic.ini geoportal/alembic.yaml $(shell ls -1 /opt/alembic/static/*.py)
	$(PRERULE_CMD)
	alembic --config=$< --name=static upgrade --sql head > $@

.PHONY: docker-build-testdb
docker-build-testdb: testdb/11-schemas.sql testdb/12-alembic.sql testdb/13-alembic-static.sql \
		$(shell docker-required --path testdb)
	docker build --tag=$(DOCKER_BASE)-testdb:$(DOCKER_TAG) testdb

# Upgrade

UPGRADE_ARGS += --use-makefile

.PHONY: upgrade
upgrade: project.yaml
	c2cupgrade $(UPGRADE_ARGS)

.PHONY: upgrade%
upgrade%:
	c2cupgrade $(UPGRADE_ARGS) --step $*

# Tilecloud chain

$(MAPCACHE_FILE): $(TILEGENERATION_CONFIG_FILE)
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	generate_controller --config=$< $(GEN_MAPCACHE_ARGS)

$(WMTSCAPABILITIES_FILE): $(TILEGENERATION_CONFIG_FILE)
	$(PRERULE_CMD)
	mkdir --parent $(dir $@)
	generate_controller --config=$< --capabilities

# Secrets

secrets.tar.bz2.gpg:
	tar -jcf secrets.tar.bz2 $^
	gpg --keyserver pool.sks-keyservers.net --keyserver-options timeout=20 --recv-keys $(GPG_KEYS)
	rm -f $@
	gpg --always-trust --output $@ --encrypt $(addprefix --recipient ,$(GPG_KEYS)) secrets.tar.bz2
	rm secrets.tar.bz2

.PHONY: secrets
secrets:
	gpg --output secrets.tar.bz2 --decrypt secrets.tar.bz2.gpg
	tar --touch -jxf secrets.tar.bz2
	rm secrets.tar.bz2

# QGIS

.PHONY: edit-qgis-project
edit-qgis-project:
	IP=$$(ip addr show dev $$(route | grep default | awk '{print $$(NF)}' | head -1) | awk '$$1 ~ /^inet/ { sub("/.*", "", $$2); print $$2 }' | head -1); \
	docker run -ti \
		--add-host=db:$${IP} \
		--volume=$${PWD}/qgisserver:/etc/qgisserver \
		--volume=/tmp/.X11-unix:/tmp/.X11-unix \
		--volume=$${HOME}:$${HOME} \
		--env=DISPLAY=unix$${DISPLAY} \
		--env=PGSERVICEFILE=$$HOME/.pg_service.conf \
		--rm camptocamp/qgis-server:3.2 /usr/local/bin/start-client /etc/qgisserver/project.qgs
