PREFIX ?= /usr
SBINDIR ?= $(PREFIX)/sbin
LIBEXECDIR ?= $(PREFIX)/lib

BUILDFLAGS = \
	-std=c99 \
	-D_XOPEN_SOURCE=500 \
	-DSBINDIR=\"$(SBINDIR)\" \
	-Wall \
	-Werror=incompatible-pointer-types \
	-Werror=implicit-function-declaration \
	-Werror=format \
	$(NULL)

SYSTEMD_GENERATOR_DIR=$(shell pkg-config --variable=systemdsystemgeneratordir systemd)

PYCODE = src/netplan $(wildcard src/*.py) $(wildcard tests/*.py)  $(wildcard tests/dbus/*.py)

default: generate doc/netplan.5 doc/netplan.html netplan-dbus dbus/io.netplan.Netplan.service

generate: src/generate.[hc] src/parse.[hc] src/util.[hc] src/networkd.[hc] src/nm.[hc]
	$(CC) $(BUILDFLAGS) $(CFLAGS) -o $@ $(filter %.c, $^) `pkg-config --cflags --libs glib-2.0 yaml-0.1 uuid`

netplan-dbus: src/dbus.c
	$(CC) $(BUILDFLAGS) $(CFLAGS) -o $@ $^ `pkg-config --cflags --libs libsystemd glib-2.0`

clean:
	rm -f netplan-dbus dbus/*.service
	rm -f generate doc/*.html doc/*.[1-9]
	rm -rf test-coverage .coverage

check: default
	tests/generate.py
	tests/cli.py
	$(shell which pyflakes3 || echo true) $(PYCODE)
	$(shell which pycodestyle || which pep8 || echo true) --max-line-length=130 $(PYCODE)

coverage:
	rm -f .coverage
	$(MAKE) CFLAGS="-g -O0 --coverage" clean check
	lcov --directory . --capture -o generate.info
	lcov --remove generate.info "/usr*" -o generate.info
	genhtml -o test-coverage -t "generate test coverage" generate.info
	@rm *.gcda *.gcno generate.info generate
	@echo "generated report: file://$(CURDIR)/test-coverage/index.html"
	@if grep headerCovTableEntryHi test-coverage/index.html | grep -qv '100.*%'; then \
	    echo "FAIL: Test coverage not 100%!" >&2; exit 1; \
	fi
	python3-coverage report --include=src/netplan --show-missing --fail-under=100

install: default
	mkdir -p $(DESTDIR)/usr/sbin $(DESTDIR)/lib/netplan $(DESTDIR)/$(SYSTEMD_GENERATOR_DIR)
	mkdir -p $(DESTDIR)/usr/share/man/man5 $(DESTDIR)/usr/share/doc/netplan
	install -m 755 generate $(DESTDIR)/lib/netplan/
	install -m 755 src/netplan $(DESTDIR)/usr/sbin/
	ln -s /lib/netplan/generate $(DESTDIR)/$(SYSTEMD_GENERATOR_DIR)/netplan
	install -m 644 doc/*.html $(DESTDIR)/usr/share/doc/netplan/
	install -m 644 doc/*.5 $(DESTDIR)/usr/share/man/man5/
	install -D -m 644 src/netplan-wpa@.service $(DESTDIR)/`pkg-config --variable=systemdsystemunitdir systemd`/netplan-wpa@.service
	# dbus
	mkdir -p $(DESTDIR)/usr/share/dbus-1/system.d $(DESTDIR)/usr/share/dbus-1/system-services
	install -m 755 netplan-dbus $(DESTDIR)/lib/netplan/
	install -m 644 dbus/io.netplan.Netplan.conf $(DESTDIR)/usr/share/dbus-1/system.d/
	install -m 644 dbus/io.netplan.Netplan.service $(DESTDIR)/usr/share/dbus-1/system-services/

%.service: %.service.in
	sed -e "s#@ROOTLIBEXECDIR@#/lib#" $< > $@

%.html: %.md
	pandoc -s --toc -o $@ $<

doc/netplan.5: doc/netplan.md
	pandoc -s -o $@ $<
	# add NAME section (looks ugly in HTML, thus only do it here)
	sed -i '/^.TH/ a\.SH NAME\nnetplan \\- YAML network configuration abstraction for various backends' $@

.PHONY: clean
