#!/usr/bin/make -f

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

DEB_HOST_GNU_TYPE  ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE)
XXBITS ?= $(shell getconf LONG_BIT)
HOSTNAME ?= $(shell hostname)

PYVERS := $(shell pyversions -vr debian/control)

MPICC_COMPILE_FLAGS ?= $(shell mpicc --showme:compile)
MPIF77_COMPILE_FLAGS ?= $(shell mpif77 --showme:compile)
MPIF90_COMPILE_FLAGS ?= $(shell mpif90 --showme:compile)
MPICC_LINK_FLAGS ?= $(shell mpicc --showme:link)

# hardening flags
CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS)
CFLAGS:=$(shell dpkg-buildflags --get CFLAGS)
CXXFLAGS:=$(shell dpkg-buildflags --get CXXFLAGS)
LDFLAGS:=$(shell dpkg-buildflags --get LDFLAGS)

STA_UPSTREAM_VERSION=STA11.3
STA_VERSION=STABLE
PTA_VERSION=STABLE_MPI
ASTER_VERSION=11.3.0
# the version of the upstream source FULL tarball (CA and all the other stuff)
ASTER_VERSION_FULL=$(ASTER_VERSION)-2

DEB_SOURCE_PACKAGE := aster
# the version of upstream source tarball ONLY FOR Code Aster
DEB_UPSTREAM_VERSION := $(ASTER_VERSION)-2

ASTER_ROOT=$(shell echo `grep "export ASTER_ROOT=" /etc/codeaster/profile.sh | sed 's/export ASTER_ROOT=//'`)
export ASTER_ROOT

ASTER_VAR_ROOT=var/lib/codeaster
export ASTER_VAR_ROOT

export DEB_DESTDIR=$(CURDIR)/debian/tmp

ASTER_SHARE_DIR=usr/share/codeaster
ASTOUT_EXPORT=astout.export

build: build-stamp

build-stamp: build-indep build-arch

build-arch: build-serial build-mpi

build-serial:
	mkdir -p $(DEB_DESTDIR)/$(ASTER_ROOT)/$(STA_VERSION)/dtag
	cp -r $(STA_VERSION) $(DEB_DESTDIR)/$(ASTER_ROOT)
# Remove extra license file
	rm -f $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/LICENSE.TERMS
	rm -f $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/GPL.txt
# create status file in /var/lib/codeaster
	mkdir -p $(DEB_DESTDIR)/$(ASTER_VAR_ROOT)
	touch $(DEB_DESTDIR)/$(ASTER_VAR_ROOT)/$(STA_VERSION)

	HOME=$(DEB_DESTDIR); \
	set -ex; \
	for v in $(PYVERS); do \
	   cp -f debian/profile.sh $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/profile_py$$v.sh; \
	   cp -f debian/config_$(XXBITS).txt  $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
           perl -pi -e "s|STA_VERSION|$(STA_VERSION)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|HOSTNAME|$(HOSTNAME)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|PYVER|$$v|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/profile_py$$v.sh; \
	   perl -pi -e "s|PYVER|$$v|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|DEB_DESTDIR|$(DEB_DESTDIR)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|ASTER_ROOT|$(ASTER_ROOT)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CPPFLAGS|$(CPPFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CFLAGS|$(CFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CXXFLAGS|$(CXXFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|LDFLAGS|$(LDFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   python$$v -c 'import sys, asrun ; from asrun.main import main,start; del sys.argv[0]; main()' /usr/bin/as_run --make --vers=$(STA_VERSION) --destdir=$(DEB_DESTDIR) --config=$(DEB_DESTDIR)/$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   find $(DEB_DESTDIR)/$(ASTER_ROOT)/$(STA_VERSION) -name \*.o | xargs rm; \
	   perl -pi -e "s|$(DEB_DESTDIR)||g" $(DEB_DESTDIR)/$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|$(HOSTNAME)|HOSTNAME|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	done

	mkdir -p $(DEB_DESTDIR)/$(ASTER_ROOT)/outils
	ln -sf /usr/bin/onmetis $(DEB_DESTDIR)/$(ASTER_ROOT)/outils
	ln -sf /usr/bin/onmetis.exe $(DEB_DESTDIR)/$(ASTER_ROOT)/outils

	touch $@

build-mpi:
	mkdir -p $(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)/dtag
	cp -r $(STA_VERSION)/* $(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)
# Remove extra license file
	rm -f $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/LICENSE.TERMS
	rm -f $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/GPL.txt
# create status file in /var/lib/codeaster
	mkdir -p $(DEB_DESTDIR)/$(ASTER_VAR_ROOT)
	touch $(DEB_DESTDIR)/$(ASTER_VAR_ROOT)/$(PTA_VERSION)

# For MPI version
	HOME=$(DEB_DESTDIR); \
	set -ex; \
	for v in $(PYVERS); do \
	   cp -f debian/profile.sh $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/profile_py$$v.sh; \
	   cp -f debian/config-mpi_$(XXBITS).txt  $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
           perl -pi -e "s|STA_VERSION|$(PTA_VERSION)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|HOSTNAME|$(HOSTNAME)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|PYVER|$$v|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/profile_py$$v.sh; \
	   perl -pi -e "s|PYVER|$$v|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|DEB_DESTDIR|$(DEB_DESTDIR)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|ASTER_ROOT|$(ASTER_ROOT)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|MPICC_COMPILE_FLAGS|$(MPICC_COMPILE_FLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|MPIF77_COMPILE_FLAGS|$(MPIF77_COMPILE_FLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|MPIF90_COMPILE_FLAGS|$(MPIF90_COMPILE_FLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|MPICC_LINK_FLAGS|$(MPICC_LINK_FLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CPPFLAGS|$(CPPFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CFLAGS|$(CFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|CXXFLAGS|$(CXXFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|LDFLAGS|$(LDFLAGS)|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   python$$v -c 'import sys, asrun ; from asrun.main import main,start; del sys.argv[0]; main()' /usr/bin/as_run --make clean --vers=$(PTA_VERSION) --destdir=$(DEB_DESTDIR) --config=$(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   mkdir -p $(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)/dtag; \
	   python$$v -c 'import sys, asrun ; from asrun.main import main,start; del sys.argv[0]; main()' /usr/bin/as_run --make --vers=$(PTA_VERSION) --destdir=$(DEB_DESTDIR) --config=$(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   find $(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION) -name \*.o | xargs rm; \
	   perl -pi -e "s|$(DEB_DESTDIR)||g" $(DEB_DESTDIR)/$(ASTER_ROOT)/$(PTA_VERSION)/config-py$$v.txt; \
	   perl -pi -e "s|$(HOSTNAME)|HOSTNAME|g" $(DEB_DESTDIR)$(ASTER_ROOT)/$(STA_VERSION)/config-py$$v.txt; \
	done
#
# 4. change mumps_scotch to mumps_ptscotch?
# 5. disable openmp?
	touch $@

build-indep:
	mkdir -p $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest
	cp $(STA_VERSION)/astout.export $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/
	cp -r $(STA_VERSION)/astest/* $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest
# Export file replacements for running tests 
	sed -i 's:?ASTER_ROOT?:$(ASTER_SHARE_DIR):' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)
	sed -i 's:?ASTER_VERSION?:$(STA_VERSION):' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)

# remove the tests failing because of missing features from liste_short
	cat $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/liste_short | grep -v -f debian/liste_missing_debian > $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/liste_short_debian
# remove the tests failing because of missing features from liste_internet
	cat $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/liste_internet | grep -v -f debian/liste_missing_debian > $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/liste_internet_debian
# Use the short test list without failing cases by default
	sed -i '/liste_internet/ s/^/#/' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)
	sed -i 's:#\(.*liste_short.*\):#\1\n\1:' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)
	sed -i '/^F/ s:liste_short:&_debian:' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)
# Results will be in /tmp for writing permission
	sed -i '/resu_test/ s:$(ASTER_SHARE_DIR)/$(STA_VERSION):/tmp:' $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/$(ASTOUT_EXPORT)

# Remove UMAT binaries from test cases
	rm -fv $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/umat001a.44
	rm -fv $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/umat001b.44
	rm -fv $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/umat002a.44
	rm -fv $(DEB_DESTDIR)/$(ASTER_SHARE_DIR)/astest/umat002a.46

# Add as_test.sh 
	mkdir -p $(DEB_DESTDIR)/usr/bin
	cp debian/as_test.sh $(DEB_DESTDIR)/usr/bin/as_test
	chmod 755 $(DEB_DESTDIR)/usr/bin/as_test
	touch $@

clean:
	dh_testdir
	dh_testroot
# Default cleaning
	rm -f setup.cache setup.dbg* setup.log*
	rm -f variables.init cfg___main__ cfg_aster
	-find . -name "*.pyc" -exec rm {} \;
	-rm -rf *-stamp
# Removing build and install tree
	rm -rf $(DEB_DESTDIR)
	dh_clean

install: build
	dh_testdir
	dh_testroot

	find . -name "*.pyc" -exec rm {} \;
	find . -type d -empty -delete
	dh_install --sourcedir=debian/tmp --list-missing

# Build architecture-independent files here.
binary-indep: build-indep
	dh_testdir -i
	dh_testroot -i
	dh_installdirs -i
	dh_installdocs -i
	dh_installexamples -i
	dh_installman -i
	dh_installchangelogs -i

#install aster-test
	dh_install --sourcedir=debian/tmp -pcode-aster-test
	dh_link -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

# Build architecture-dependent files here.
binary-arch: build-arch
	dh_testdir -a
	dh_testroot -a
	dh_installdirs -a
	dh_installdocs -a
	dh_installexamples -a
	dh_installman -a
	dh_installchangelogs -a
	dh_strip -pcode-aster-engine --dbg-package=code-aster-engine-dbg
	dh_strip -pcode-aster-mpi-engine --dbg-package=code-aster-mpi-engine-dbg
	dh_link -a
	dh_compress -a
	dh_fixperms -a
	dh_pysupport -pcode-aster-engine
	dh_pysupport -pcode-aster-mpi-engine
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

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

get-orig-source:
# Retreive aster-full-src-$(ASTER_VERSION_FULL).noarch.tar.gz
	mkdir -p tmp
	cd tmp && wget "http://www.code-aster.org/FICHIERS/aster-full-src-$(ASTER_VERSION_FULL).noarch.tar.gz"

# Go to SRC directory and retreive aster source
	cd tmp && tar xzf aster-full-src-$(ASTER_VERSION_FULL).noarch.tar.gz
	cd tmp/aster-full-src-$(ASTER_VERSION)/SRC && tar zxf $(DEB_SOURCE_PACKAGE)-src-$(DEB_UPSTREAM_VERSION).noarch.tar.gz
	mkdir -p tmp/aster-full-src-$(ASTER_VERSION)/SRC/$(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION)/$(STA_VERSION)
	cd tmp/aster-full-src-$(ASTER_VERSION)/SRC && mv $(STA_UPSTREAM_VERSION)/* $(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION)/$(STA_VERSION)
	cd tmp/aster-full-src-$(ASTER_VERSION)/SRC && tar zcf $(CURDIR)/$(DEB_SOURCE_PACKAGE)_$(DEB_UPSTREAM_VERSION).orig.tar.gz $(DEB_SOURCE_PACKAGE)-$(DEB_UPSTREAM_VERSION)

	rm -rf tmp
