#!/usr/bin/make -f

# add DEB_* variables to the environment
include /usr/share/dpkg/architecture.mk
include /usr/share/dpkg/pkg-info.mk
include /usr/share/dpkg/vendor.mk

# determine whether this is a stable or development build
VERSION=$(shell echo $(DEB_SOURCE) | sed s/wine//g)
ifeq (x$(VERSION), x)
DEBSUFFIX=-stable
else
DEBSUFFIX=$(VERSION)
endif
export DEBSUFFIX

# installation paths
MANDIR=usr/share/man
BINDIR=usr/lib/wine$(VERSION)
DATDIR=usr/share/wine$(VERSION)
INCDIR=usr/include/wine$(VERSION)
LIBDIR=usr/lib/$(DEB_HOST_MULTIARCH)/wine$(VERSION)

# extra information to add to the version string
export VENDOR=$(DEB_VENDOR) $(DEB_VERSION)

# enable verbose build log
export DH_VERBOSE=1

# indicate that binary targets do not require root
export DEB_RULES_REQUIRES_ROOT=no

# enable hardening buildflags (fortify is not yet supported upstream)
export DEB_BUILD_MAINT_OPTIONS=hardening=+all,-fortify

# linker options
export DEB_LDFLAGS_MAINT_APPEND+=-Wl,-rpath,/$(LIBDIR)

# configure options
CONFLAGS=--with-gnutls \
         --without-hal \
         --without-netapi \
         --disable-tests \
         --enable-maintainer-mode \
         --libdir=/$(LIBDIR) \
         --bindir=/$(BINDIR) \
         --mandir=/$(MANDIR) \
         --includedir=/$(INCDIR) \
         --datarootdir=/$(DATDIR) \
         $(shell dpkg-buildflags --export=cmdline) \

# flags specific to kfreebsd
ifeq ($(DEB_BUILD_ARCH_OS), kfreebsd)
export DEB_LDFLAGS_MAINT_APPEND+=-lfreebsd-glue
endif

# enable oss only on kfreebsd
ifneq ($(DEB_HOST_ARCH_OS), kfreebsd)
CONFLAGS+=--without-oss
endif

# enable wine64 on 64-bit architectures
ifeq ($(DEB_BUILD_ARCH_BITS), 64)
CONFLAGS+=--enable-win64
endif

# on armel build for armv5t
ifeq ($(DEB_HOST_ARCH), armel)
CONFLAGS+=--with-float-abi=soft
export DEB_CFLAGS_MAINT_APPEND+=-march=armv5t
export DEB_LDFLAGS_MAINT_APPEND+=-march=armv5t
endif

# on arm64 build using clang
ifeq ($(DEB_HOST_ARCH), arm64)
export CC=clang-6.0
export CXX=clang++-6.0
endif

# use date of the latest changelog update as the build date
export WIDL_TIME_OVERRIDE=$(SOURCE_DATE_EPOCH)

# additional files to generate
INSTALLS=$(shell ls debian/*VERSION* | sed s/VERSION/$(VERSION)/) \
         debian/bug-control \

# sonames to compute additional dependencies
sonamesDepends=$(shell \
    grep "^\#define SONAME_" include/config.h | \
    grep -E "libfontconfig|libfreetype|libncurses" | \
    cut -d\" -f2)
sonamesRecommends=$(shell \
    grep "^\#define SONAME_" include/config.h | \
    grep -v libnetapi | \
    cut -d\" -f2)

debian/control: debian/control.in
	sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@

debian/wine$(VERSION)%: debian/wineVERSION%
	sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@

debian/wine32$(VERSION)%: debian/wine32VERSION%
	sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@

debian/wine64$(VERSION)%: debian/wine64VERSION%
	sed "s/VERSION/$(VERSION)/g;s/DEBSUFFIX/$(DEBSUFFIX)/g" < $< > $@

debian/libwine$(VERSION)%: debian/libwineVERSION%
	sed s/VERSION/$(VERSION)/g < $< > $@

debian/bug-control: debian/bug-control.in
	sed s/VERSION/$(VERSION)/g < $< > $@

%:
	dh $@

override_dh_auto_configure:
	# output compiler information
	$(CXX) --version
	# automatically generated files
	./debian/scripts/generate libs/port/cptable.generated cpmap
	./debian/scripts/generate server/trace.generated make_requests
	./debian/scripts/generate server/request.generated make_requests
	./tools/make_fir
	./tools/make_unicode
	./tools/make_requests
	cd dlls/opengl32 && ./make_opengl
	ln -s /usr/share/misc/config.sub tools || true
	ln -s /usr/share/misc/config.guess tools || true
	# execute wine's configure script
	./configure $(CONFLAGS)

override_dh_auto_build-indep:
	./tools/makedep libs/port tools/sfnt2fon fonts
	make -C libs/port
	make -C tools/sfnt2fon
	make -C fonts

override_dh_auto_install-indep: $(INSTALLS)
	mkdir -p debian/tmp
	cp ANNOUNCE debian/tmp/changelog
	cp programs/winedbg/README debian/tmp/README.winedbg
	sed "s|BINDIR|$(BINDIR)|g" debian/scripts/wineserver.in > debian/tmp/wineserver
	chmod 755 debian/tmp/wineserver
	sed "s|DEBSUFFIX|$(DEBSUFFIX)|g" debian/scripts/wineapploader.in > debian/tmp/wineapploader
	chmod 755 debian/tmp/wineapploader
	sed "s|BINDIR|$(BINDIR)|g;s|VERSION|$(VERSION)|g" debian/scripts/wine.in > debian/tmp/wine$(DEBSUFFIX)
	for dir in loader server programs/msiexec programs/winedbg \
	    programs/wineconsole programs/regedit programs/regsvr32 \
	    programs/wineboot programs/winefile programs/winepath \
	    programs/winecfg; do \
	    ./tools/makedep $$dir; \
	    make -C $$dir install-man; \
	    done
	for file in $$(find . ! -path "./debian/*" -name \*.man); do \
	    rename=$$(basename $$file | sed "s/\\./$(DEBSUFFIX)./;s/UTF-8\\.//"); \
	    cp $$file debian/tmp/$$rename || true; \
	    done
	# extract hicolor icon from logo.svg
	sed '/image\/png/d;s|width="611"|width="209"|' programs/winecfg/logo.svg > debian/tmp/wine$(DEBSUFFIX).svg

override_dh_auto_install-arch: $(INSTALLS)
	mkdir -p debian/tmp
	cp ANNOUNCE debian/tmp/changelog
	cp tools/winedump/README debian/tmp/README.winedump
	cp server/wineserver debian/tmp/wineserver$(DEB_BUILD_ARCH_BITS)
	sed "s|BINDIR|$(BINDIR)|g" debian/scripts/winegcc.in > debian/tmp/winegcc$(DEBSUFFIX)
	dh_auto_install
	for file in $$(find . ! -path "./debian/*" -name \*.man); do \
	    rename=$$(basename $$file | sed "s/\\./$(DEBSUFFIX)./;s/UTF-8\\.//"); \
	    cp $$file debian/tmp/$$rename || true; \
	    done
	cp loader/wine.man debian/tmp/usr/share/man/man1/wine64$(DEBSUFFIX).1
	test -f debian/tmp/$(BINDIR)/wine-preloader || \
	    cp debian/scripts/wine-preloader debian/tmp/$(BINDIR)

override_dh_shlibdeps:
	mkdir -p debian/tmp
	./debian/scripts/sonames2elf $(sonamesDepends) > debian/tmp/elf.depends
	./debian/scripts/sonames2elf $(sonamesRecommends) > debian/tmp/elf.recommends
	dpkg-shlibdeps --warnings=1 \
	    -pdlopen \
	    -dDepends -edebian/tmp/elf.depends \
	    -dRecommends -edebian/tmp/elf.recommends \
	    -Tdebian/libwine$(VERSION).substvars
	dh_shlibdeps

override_dh_gencontrol:
	dh_gencontrol -- \
	    -Vbuilt:Using="$(shell dpkg-query -f '$${source:Package} (= $${source:Version}), ' -W khronos-api unicode-data)" \

override_dh_bugfiles:
	dh_bugfiles -A

override_dh_clean:
	dh_clean -- $(INSTALLS)
	make -f debian/rules debian/control

override_dh_auto_clean:
	QUILT_PATCHES=debian/patches quilt push -af || true
	dh_auto_clean
