#!/usr/bin/make -f

include /usr/share/quilt/quilt.make

ARCHITECTURE := $(shell dpkg-architecture -qDEB_HOST_ARCH)
DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)

CFLAGS := -g -Wall

# old configure stuff needs a --target
ifeq ($(DEB_BUILD_GNU_TYPE), $(DEB_HOST_GNU_TYPE))
  archconfflags := $(archconfflags) --build $(DEB_HOST_GNU_TYPE)
else
  archconfflags := $(archconfflags) --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE)
endif

#--enable-k7             enable AMD K7 optimizations, including 3dNow! (single precision)
#--enable-sse            enable SSE optimizations (single precision only)
#--enable-sse2           enable SSE2 optimizations (double precision only)
#--enable-altivec        enable Altivec optimizations (single precision only)

ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
	CFLAGS += -O0
else
	CFLAGS += -O2
ifeq ($(ARCHITECTURE), i386)
	archconfflags_single := --enable-sse
	archconfflags_double := --enable-sse2
	archconfflags := $(archconfflags) --with-gcc-arch=pentium4
endif
ifeq ($(ARCHITECTURE), amd64)
	archconfflags_single := --enable-sse
	archconfflags_double := --enable-sse2
endif
ifeq ($(ARCHITECTURE), amd64)
	archconfflags_single := --enable-sse
	archconfflags_double := --enable-sse2
endif
ifeq ($(ARCHITECTURE), m68k)
	#CFLAGS='-g -Wall -O0'
	#archconfflags :=
endif
ifeq ($(ARCHITECTURE), powerpc)
	# altivec detection and compilation broken
	archconfflags_single := --enable-altivec
	archconfflags := $(archconfflags) --with-gcc-arch=G5
	# Disabled (FTBFS, #532340):
	# CFLAGS += -maltivec
endif
endif

ifneq (,$(findstring nog77,$(DEB_BUILD_OPTIONS)))
	archconfflags := $(archconfflags) F77="gfortran" 
else
	archconfflags := $(archconfflags) F77="gfortran -ff2c"
endif

SETCFLAGS := CFLAGS='$(CFLAGS)'

# common configure options
archconfflags := $(archconfflags) --prefix=/usr --enable-shared --enable-threads --enable-portable-binary --enable-mpi

build-arch:
	# single precision
	$(SETCFLAGS) ./configure --enable-single $(archconfflags) $(archconfflags_single)
	$(MAKE)
	( cd tests ; $(MAKE) smallcheck )
	$(MAKE) install DESTDIR=`pwd`/debian/tmp-single
	#
	# double precision
	$(SETCFLAGS) ./configure $(archconfflags) $(archconfflags_double)
ifneq (,$(filter $(ARCHITECTURE), armel armhf))
	# work around LP: #841437
	$(MAKE) -C rdft/scalar/r2cf r2cf_64.lo CFLAGS='-g -Wall -O1 -pthread'
	$(MAKE) -C rdft/scalar/r2cb r2cb_64.lo CFLAGS='-g -Wall -O1 -pthread'
endif
	$(MAKE)
	( cd tests ; $(MAKE) smallcheck )
	$(MAKE) install DESTDIR=`pwd`/debian/tmp-double
	#
	# long double precision
	# build only on architectures where double != long-double
	gcc -o test_long_long-double debian/test_long_long-double.c 
	if ! ./test_long_long-double; then \
		$(SETCFLAGS) ./configure --enable-long-double $(archconfflags) && \
		$(MAKE) && \
		( cd tests ; $(MAKE) smallcheck ) && \
		$(MAKE) install DESTDIR=`pwd`/debian/tmp-long-double; \
	fi
	touch build-arch

build-indep:
	-(cd doc ; $(MAKE) -k clean)
	-rm -f doc/*.info* doc/rfftwnd.png doc/html/*
	cd doc/FAQ && $(MAKE) fftw-faq.html fftw-faq.ascii
	cd doc && $(MAKE) && $(MAKE) html
	touch build-indep

build: build-stamp
build-stamp: patch build-arch

clean: clean1st unpatch
clean1st:
	dh_testdir
	dh_testroot
	rm -f build-arch build-indep
	(cd doc ; [ ! -f Makefile ] || $(MAKE) -k clean)
	[ ! -f Makefile ] || $(MAKE) distclean
	-rm -f doc/*.info* doc/rfftwnd.png doc/html/*
	-rm -f tools/*-wisdom.1 tools/fftw*-wisdom
	-rm -f *.la threads/*.la *.pc
	-rm -f test_long_long-double
	-rm -f config.cache config.status config.log
	-rm -rf debian/tmp-single debian/tmp-double debian/tmp-long-double
	chmod -R g-s .
	dh_clean

binary-indep: build-indep
	# build fftw3-doc
	dh_prep -i
	dh_testdir
	dh_testroot
	dh_installdocs -i README NEWS
	dh_installinfo -i
	dh_installchangelogs -i ChangeLog
	dh_compress -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary-arch: build-arch
	# build fftw3
	dh_prep -a
	dh_installdocs -a README NEWS
	dh_installchangelogs -a ChangeLog
	dh_installexamples -a
	dh_installdirs -a
	dh_install -a --sourcedir=debian/tmp-single
	dh_install -a --sourcedir=debian/tmp-double
	if ! ./test_long_long-double; then \
		dh_install -a --sourcedir=debian/tmp-long-double; \
	fi
	rm debian/libfftw3-3/usr/lib/libfftw3*mpi* debian/libfftw3-dev/usr/lib/libfftw3*mpi* debian/libfftw3-dev/usr/include/*mpi*


	dh_installman -a
	dh_strip --dbg-package=libfftw3-dbg -a
	dh_compress -a -X.c -X.pl -X.am -X.in
	dh_fixperms -a
	dh_makeshlibs -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary: binary-indep binary-arch

.PHONY: binary binary-arch binary-indep clean
