#!/usr/bin/make -f

# Copyright (C) 2006 Jeff Epler
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# When used to produce a debian package, this file is a script "used to
# control compilation and installation of the executable"

# Uncomment this to turn on verbose mode.
export DH_VERBOSE=1

include /usr/share/dpkg/pkg-info.mk

# Support more robust code and makes code modifications more difficult
# Compare https://wiki.debian.org/Hardening
export DEB_BUILD_MAINT_OPTIONS = hardening=+all

# Trigger other tools to use the timestamp from debian/changelog
# Compare https://reproducible-builds.org/docs/source-date-epoch/
export SOURCE_DATE_EPOCH ?= $(shell dpkg-parsechangelog -STimestamp)

# Set time & date to the most recent release, for repeatable builds.
TIMESTAMP=$(shell dpkg-parsechangelog -S timestamp)
export DATE=$(shell LANG=C date --date='@$(TIMESTAMP)' '+%d\ %b\ %Y')
export TIME=$(shell LANG=C date --date='@$(TIMESTAMP)' '+%T')

kernel_version = uspace
enable_build_documentation = --enable-build-documentation=pdf
configure_realtime_arg = --with-realtime=uspace
DESTDIR=$(CURDIR)/debian/linuxcnc-uspace
DEV_PACKAGE_NAME=linuxcnc-uspace-dev

%:
	# With debhelper 10 the --parallel becomes the default
	dh $@ --parallel

override_dh_auto_configure:
	cd src && ./autogen.sh
	cd src && PYTHON=/usr/bin/python3 ./configure \
	    --prefix=/usr --sysconfdir=/etc \
	    --mandir=/usr/share/man \
	    $(configure_realtime_arg) \
            $(enable_build_documentation) \
	    --disable-check-runtime-deps

override_dh_auto_build-arch:
	$(MAKE) PYTHON=/usr/bin/python3 -C src

override_dh_auto_build-indep:
ifneq "$(enable_build_documentation)" ""
	$(MAKE) PYTHON=/usr/bin/python3 -C src docs
endif

override_dh_auto_clean:
	dh_auto_clean
	py3clean .
	if [ -r src/Makefile.inc -a -r src/config.status ]; then cd src && $(MAKE) clean -s; fi
	rm -f Makefile.inc
	rm -f src/config.log src/config.status
	rm -f $(for i in $(find . -name "*.in"); do basename $i .in; done)
	dh_clean

override_dh_auto_install:
	# avoid installing into already existing directory
	rm -rf $(DESTDIR)
	# executing regular installation with regular prefix but unterneath the debian folder
	DESTDIR=$(DESTDIR) $(MAKE) -C src install
	# Version 0.22 and newer of the desktop-file-validate program
	# (in Jessie and newer) can deal with multiple files specified
	# on the command line.	Version 0.20 (in Wheezy) says it can,
	# but can't.  So feed it the files one by one.
	for F in $(shell find debian/extras/ -name *.desktop); do \
		desktop-file-validate $$F; \
	done
	# Adding files that are Debian-specific
	cd debian/extras && cp -a * $(DESTDIR)
	DESTDIR=$(DESTDIR) $(MAKE) -C src INSTALL=install
	py3clean .
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/lib
	cp lib/*.a debian/$(DEV_PACKAGE_NAME)/usr/lib
	mkdir -p $(DESTDIR)/usr/share/doc/linuxcnc
	cp docs/html/gcode*.html $(DESTDIR)/usr/share/doc/linuxcnc/

	#  Moving all language-specific .desktop files to the respective -doc-$$lang package
	for lang in zh_CN es fr; do \
		p=$$(echo $$lang | tr _ - | tr A-Z a-z); \
		d=debian/linuxcnc-doc-$$p/usr/share/applications/ ; \
		mkdir -p $$d ; \
		mv -t $$d $(DESTDIR)/usr/share/applications/*_$${lang}.desktop ; \
	done
	#  Moving all remaining .desktop files to the default documentation
	d=debian/linuxcnc-doc-en/usr/share/applications/ ; \
	mkdir -p $$d ; \
	mv -t $$d $(DESTDIR)/usr/share/applications/linuxcnc-gettingstarted.desktop ; \
	mv -t $$d $(DESTDIR)/usr/share/applications/linuxcnc-documentation.desktop ; \
	mv -t $$d $(DESTDIR)/usr/share/applications/linuxcnc-integratorinfo.desktop ; \
	mv -t $$d $(DESTDIR)/usr/share/applications/linuxcnc-manualpages.desktop

ifneq "$(enable_build_documentation)" ""
	# Only the English developer documentation goes to the -dev package
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/share/doc/linuxcnc-dev
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/share/doc/linuxcnc-dev/ $(DESTDIR)/usr/share/doc/linuxcnc/LinuxCNC_Developer.pdf
	# The translated developer documentation goes to the respective regular -doc package
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/share/doc/linuxcnc-dev/ $(DESTDIR)/usr/share/doc/linuxcnc/LinuxCNC_Developer_*.pdf
	for lang in zh_CN es fr; do \
		p=$$(echo $$lang | tr _ - | tr A-Z a-z); \
		d=debian/linuxcnc-doc-$$p/usr/share/doc/linuxcnc ; \
		mkdir -p $$d ; \
		find $(DESTDIR)/usr/share/doc/linuxcnc -name "*_$${lang}.pdf" | xargs -r mv -t $$d ; \
	done
	# english documentation has no "en" suffix
	d=debian/linuxcnc-doc-en/usr/share/doc/linuxcnc && mkdir -p $$d && mv -t $$d $(DESTDIR)/usr/share/doc/linuxcnc/*.pdf
endif
	mkdir -p $(DESTDIR)/usr/share/doc/linuxcnc/examples 
	cd $(DESTDIR)/usr/share/doc/linuxcnc/examples && ln -sf ../../../linuxcnc/ncfiles ./nc_files

	# -dev
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/include
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/include $(DESTDIR)/usr/include/linuxcnc

	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/lib
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/lib/ $(DESTDIR)/usr/lib/*.a $(DESTDIR)/usr/lib/*.so
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/bin
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/bin $(DESTDIR)/usr/bin/halcompile
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/share/man/man1
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/share/man/man1  $(DESTDIR)/usr/share/man/man1/halcompile.1
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/share/man $(DESTDIR)/usr/share/man/man3
	mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/share/linuxcnc
	mv -t debian/$(DEV_PACKAGE_NAME)/usr/share/linuxcnc $(DESTDIR)/usr/share/linuxcnc/Makefile.modinc
	#mkdir -p debian/$(DEV_PACKAGE_NAME)/usr/share/doc/
	#mkdir -t debian/$(DEV_PACKAGE_NAME)/usr/share/doc/ $(DESTDIR)/usr/share/doc/linuxcnc-dev/
	# not a package: drivers
	#mkdir -p debian/drivers/usr/bin
	#mv -t debian/drivers/usr/bin $(DESTDIR)/usr/bin/pci_write $(DESTDIR)/usr/bin/pci_read

	# some clean-up
	#rm -rf $(DESTDIR)/usr/share/doc/linuxcnc/html
	rm -f $(DESTDIR)/usr/share/doc/linuxcnc/examples/sample-configs/*/*position*.txt

override_dh_compress:
	dh_compress -X.pdf -X.txt -X.hal -X.ini -X.clp -X.var -X.nml -X.tbl -X.xml -Xsample-configs

override_dh_fixperms:
	dh_fixperms -X/linuxcnc_module_helper -X/rtapi_app
	chmod -x $(DESTDIR)/usr/lib/tcltk/linuxcnc/linuxcnc.tcl
	# override_dh_python3: # not executed, so we attach it to fixperms
	DEB_HOST_ARCH=`dpkg-architecture -qDEB_HOST_ARCH` dh_python3

override_dh_shlibdeps:
	cat debian/linuxcnc-uspace/DEBIAN/shlibs debian/shlibs.pre > debian/shlibs.local
	dh_shlibdeps -u--warnings=0 -l debian/linuxcnc-uspace/usr/lib
