#!/usr/bin/make -f
# -*- makefile -*-
# Build mingw-w64.
# Copyright © 2010, 2011 Stephen Kitt <steve@sk2.org>

SHELL=/bin/bash

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

top_dir := $(shell pwd)
build_dir := $(top_dir)/build
deb_version := $(shell dpkg-parsechangelog | sed -ne "s/^Version: \(.*\)/\1/p")
deb_upstream_version := $(shell echo $(deb_version) | cut -d- -f1)
gnu_upstream_version := $(shell echo $(deb_upstream_version) | cut -d. -f1-3)

# Target architectures
target32 := i686-w64-mingw32
target64 := x86_64-w64-mingw32
targets := $(target32) $(target64)

# No hardening support for now
dpkg_buildflags = DEB_BUILD_MAINT_OPTIONS="hardening=-all" dpkg-buildflags

CFLAGS = $(shell $(dpkg_buildflags) --get CFLAGS)
CPPFLAGS = $(shell $(dpkg_buildflags) --get CPPFLAGS)
CXXFLAGS = $(shell $(dpkg_buildflags) --get CXXFLAGS)
FFLAGS = $(shell $(dpkg_buildflags) --get FFLAGS)
LDFLAGS = $(shell $(dpkg_buildflags) --get LDFLAGS)
export CFLAGS CPPFLAGS CXXFLAGS FFLAGS LDFLAGS

clean:
	dh_testdir
	dh_testroot
	dh_clean
	rm -rf $(build_dir) $(upstream_dir) autotools_files series tmp *-stamp

CONFFLAGS = --prefix=/usr

# Build and install the headers first, so the remaining subprojects can use
# them during the build
headers-stamp:
	for target in $(targets); do \
		dh_auto_configure -D$(top_dir)/mingw-w64-headers -B$(build_dir)/$$target/headers -- --host=$$target --enable-sdk=all --enable-secure-api && \
		dh_auto_build -D$(top_dir)/mingw-w64-headers -B$(build_dir)/$$target/headers && \
		dh_auto_install -D$(top_dir)/mingw-w64-headers -B$(build_dir)/$$target/headers; \
	done
	touch $@

# Build the two arch-dependent subprojects
build-arch-stamp:
	for tool_dir in $(top_dir)/mingw-w64-tools/*; do \
		dh_auto_configure -D$$tool_dir -B$(build_dir)/$$(basename $$tool_dir) && \
		dh_auto_build -D$$tool_dir -B$(build_dir)/$$(basename $$tool_dir) && \
		dh_auto_install -D$$tool_dir -B$(build_dir)/$$(basename $$tool_dir); \
	done
	touch $@

# Build the arch-independent subprojects, with different options for each
# target architecture
build-indep-stamp: headers-stamp
	# When bootstrapping, the extra libraries can't be built, so try
	# configuring with libraries and if that fails without
	CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(target32)/include" dh_auto_configure -B$(build_dir)/$(target32)/all -- --host=$(target32) --with-libraries=all --enable-lib32 --disable-lib64 --enable-secure-api || \
	CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(target32)/include" dh_auto_configure -B$(build_dir)/$(target32)/all -- --host=$(target32) --enable-lib32 --disable-lib64 --enable-secure-api
	CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(target64)/include" dh_auto_configure -B$(build_dir)/$(target64)/all -- --host=$(target64) --with-libraries=libmangle --disable-lib32 --enable-lib64 --enable-secure-api || \
	CPPFLAGS="$(CPPFLAGS) -I$(top_dir)/debian/tmp/usr/$(target64)/include" dh_auto_configure -B$(build_dir)/$(target64)/all -- --host=$(target64) --disable-lib32 --enable-lib64 --enable-secure-api
# Move headers and libraries to target-specific folders
	set -e; \
	for target in $(targets); do \
		dh_auto_build -B$(build_dir)/$$target/all && \
		dh_auto_install -B$(build_dir)/$$target/all && \
		if [ -f $(top_dir)/debian/tmp/usr/include/libmangle.h ]; then \
			mv $(top_dir)/debian/tmp/usr/include/libmangle.h $(top_dir)/debian/tmp/usr/$$target/include/; \
		fi && \
		if [ -d $(top_dir)/debian/tmp/usr/include/pseh ]; then \
			mv $(top_dir)/debian/tmp/usr/include/pseh $(top_dir)/debian/tmp/usr/$$target/include/; \
		fi && \
		if [ -f $(top_dir)/debian/tmp/usr/lib/libmangle.a ]; then \
			mv $(top_dir)/debian/tmp/usr/lib/libmangle.a $(top_dir)/debian/tmp/usr/$$target/lib/; \
		fi && \
		if [ -f $(top_dir)/debian/tmp/usr/lib/libpseh.a ]; then \
			mv $(top_dir)/debian/tmp/usr/lib/libpseh.a $(top_dir)/debian/tmp/usr/$$target/lib/; \
		fi; \
	done
	touch $@

build: build-arch
build-arch: build-arch-stamp
build-indep: build-indep-stamp

binary-indep: build-indep
	dh $@

binary-arch: build-arch
	dh $@

binary: binary-indep binary-arch

.PHONY: binary-indep binary-arch binary clean build-indep build-arch build install
