#!/usr/bin/make -f
# Made with the iad of dh_make, by Craig Small
# Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
# Also some stuff taken from debmake scripts, by Cristopt Lameter.
# hacking on for MPICH done since 13 June 2000 by Junichi Uekawa
# (dancer@netfort.gr.jp)

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

# parameters accepted for DEB_BUILD_OPTIONS: 
#  experimental-shlibs-support
#  debug

INSTALL_DIR=install -m 755 -d 
INSTALL_FILE=install -m 644

CONFIGURE_ENVIRONMENT= RSHCOMMAND=/usr/bin/rsh FC=gfortran F90=gfortran \
	F77_GETARGDECL="intrinsic GETARG" NOG2C=1 FC_SHARED_OPT=-fPIC

CONFIG_SG_DIRS= mpe mpe/slog2sdk mpe/slog2sdk/trace_rlog mpe/slog2sdk/trace_sample \
		examples/perftest/config/confdb src/fortran/config MPI-2-C++ romio/confdb

# checks the environmental variable DEB_BUILD_OPTIONS
ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
CONFIGURE_OPTIONS+= --enable-devdebug --enable-debug 
#--enable-mpedbg  # this kills the build machine very badly with ed.
else
CONFIGURE_OPTIONS+= --disable-devdebug --disable-debug --disable-mpedbg
endif

CONFIGURE_OPTIONS_P4=--with-device=ch_p4 \
	-prefix=/usr/lib/mpich --enable-sharedlib=/usr/lib/mpich/lib/shared/ \
	-mpe_opts="--with-mpelibname=mpe"
CONFIGURE_OPTIONS_MPD=--with-device=ch_p4mpd \
	-prefix=/usr/lib/mpich-mpd -mpilibname=mpich-p4mpd \
	--enable-sharedlib=/usr/lib/mpich-mpd/lib/shared/ \
	-mpe_opts="--with-mpelibname=mpe-p4mpd"
CONFIGURE_OPTIONS_SHMEM=--with-device=ch_shmem \
	-prefix=/usr/lib/mpich-shmem -mpilibname=mpich-shmem \
	--enable-sharedlib=/usr/lib/mpich-shmem/lib/shared/ \
	-mpe_opts="--with-mpelibname=mpe-shmem"

include /usr/share/dpatch/dpatch.make

build: build-stamp
build-stamp: patch-stamp
	dh_testdir
	for CFGAUXDIR in $(CONFIG_SG_DIRS) ; do \
	    cp -f /usr/share/misc/config.sub $$CFGAUXDIR ; \
	    cp -f /usr/share/misc/config.guess $$CFGAUXDIR ; \
	done
	# make mpich normal
	(test -d image_mpich || mkdir image_mpich; cd image_mpich && \
	$(CONFIGURE_ENVIRONMENT) ../configure $(CONFIGURE_OPTIONS_P4) && \
	F77_GETARGDECL="intrinsic GETARG" $(MAKE) )
	# make mpich MPD version
	(test -d image_mpich-mpd || mkdir image_mpich-mpd; \
	cd image_mpich-mpd && \
	$(CONFIGURE_ENVIRONMENT) ../configure $(CONFIGURE_OPTIONS_MPD) && \
	F77_GETARGDECL="intrinsic GETARG" $(MAKE) )
	# make mpich SHMEM version
	(test -d image_mpich-shmem || mkdir image_mpich-shmem; \
	cd image_mpich-shmem && \
	$(CONFIGURE_ENVIRONMENT) ../configure $(CONFIGURE_OPTIONS_SHMEM) && \
	F77_GETARGDECL="intrinsic GETARG" $(MAKE) )
	# make some debhelper files.
	(set -e; for INST in mpich mpich-mpd mpich-shmem ; do \
	  for FILES in dirs preinst postinst prerm links; do \
	    sed 's/#MPICH#/'$$INST'/g' < debian/mpich-bin.$$FILES.in >debian/$$INST-bin.$$FILES;\
	    done;\
	  for FILES in postinst prerm links; do \
	    sed 's/#MPICH#/'$$INST'/g' < debian/libmpich1.0-dev.$$FILES.in >debian/lib"$$INST"1.0-dev.$$FILES;\
	    done;\
	  done;\
	 sed -i 's/\(.*lib.*\)mpich-mpd\([^/]\)/\1mpich-p4mpd\2/' debian/libmpich-mpd1.0-dev.postinst;\
	)
	echo usr/lib/mpich-mpd/bin/mpichboot usr/bin/mpichboot >> debian/mpich-mpd-bin.links
	echo usr/lib/mpich-mpd/bin/mpichstop usr/bin/mpichstop >> debian/mpich-mpd-bin.links
	echo usr/share/man/man7/undocumented.7.gz usr/share/man/man1/mpichboot.1.gz >> debian/mpich-mpd-bin.links
	echo usr/share/man/man7/undocumented.7.gz usr/share/man/man1/mpichstop.1.gz >> debian/mpich-mpd-bin.links
	touch build-stamp

clean: unpatch
	dh_testdir
	dh_testroot
	for CFGAUXDIR in $(CONFIG_SG_DIRS) ; do \
	    rm -f $$CFGAUXDIR/config.sub ; \
	    rm -f $$CFGAUXDIR/config.guess ; \
	done
	rm -f build-stamp install-stamp
	# clean up the build directory
	(set -e; for INST in mpich mpich-mpd mpich-shmem ; do \
	  for FILES in dirs preinst postinst prerm links doc-base; do \
	    rm -f debian/$$INST-bin.$$FILES;\
	  done;\
	done;\
	)
	for INST in mpich mpich-mpd mpich-shmem; do \
	  for FILES in postinst prerm links; do \
	    rm -f debian/lib$${INST}1.0-dev.$$FILES; \
	  done; \
	done
	rm -rf image_mpich image_mpich-mpd image_mpich-shmem
	# cleaning cruft created by MPD.
	rm -f mpid/ch_p4mpd/p4mpd/lib/p4_MD.c mpid/ch_p4mpd/p4mpd/lib/p4_MD.h mpid/ch_p4mpd/p4mpd/lib/p4_alloc.c mpid/ch_p4mpd/p4mpd/lib/p4_args.c mpid/ch_p4mpd/p4mpd/lib/p4_broadcast.c mpid/ch_p4mpd/p4mpd/lib/p4_debug.c mpid/ch_p4mpd/p4mpd/lib/p4_defs.h mpid/ch_p4mpd/p4mpd/lib/p4_funcs.h mpid/ch_p4mpd/p4mpd/lib/p4_error.c mpid/ch_p4mpd/p4mpd/lib/p4_rm.c mpid/ch_p4mpd/p4mpd/lib/p4_secure.c mpid/ch_p4mpd/p4mpd/lib/p4_sock_conn.c mpid/ch_p4mpd/p4mpd/lib/p4_sock_cr.c mpid/ch_p4mpd/p4mpd/lib/p4_sock_sr.c mpid/ch_p4mpd/p4mpd/lib/p4_sock_util.c mpid/ch_p4mpd/p4mpd/lib/p4_sock_util.h mpid/ch_p4mpd/p4mpd/lib/p4_sys.h mpid/ch_p4mpd/p4mpd/lib/p4_sys_funcs.h mpid/ch_p4mpd/p4mpd/lib/xdr_float.c mpid/ch_p4mpd/p4mpd/lib/listener_p4.c mpid/ch_p4mpd/p4mpd/lib/p4.h mpid/ch_p4mpd/p4mpd/lib/p4_fc.c mpid/ch_p4mpd/p4mpd/lib/p4_globals.c mpid/ch_p4mpd/p4mpd/lib/p4_globals.h mpid/ch_p4mpd/p4mpd/lib/p4_macros.h mpid/ch_p4mpd/p4mpd/lib/p4_mon.c mpid/ch_p4mpd/p4mpd/lib/p4_mon.h mpid/ch_p4mpd/p4mpd/lib/p4_patchlevel.h mpid/ch_p4mpd/p4mpd/lib/p4_procgroup.c mpid/ch_p4mpd/p4mpd/lib/p4_shmem_sr.c mpid/ch_p4mpd/p4mpd/lib/p4_sr.h mpid/ch_p4mpd/p4mpd/lib/sfcdchi.h mpid/ch_p4mpd/p4mpd/lib/makefile.proto mpid/ch_p4mpd/p4mpd/monitors mpid/ch_p4mpd/p4mpd/CHANGES mpid/ch_p4mpd/p4mpd/MACHINES mpid/ch_p4mpd/p4mpd/OPTIONS mpid/ch_p4mpd/p4mpd/README mpid/ch_p4mpd/p4mpd/config.guess mpid/ch_p4mpd/p4mpd/defs.all mpid/ch_p4mpd/p4mpd/p4_config.h.in mpid/ch_p4mpd/p4mpd/configure mpid/ch_p4mpd/p4mpd/configure.in  mpid/ch_p4mpd/p4mpd/alog mpid/ch_p4mpd/p4mpd/bin mpid/ch_p4mpd/p4mpd/servers  mpid/ch_p4mpd/p4mpd/usc mpid/ch_p4mpd/p4mpd/doc mpid/ch_p4mpd/p4mpd/messages mpid/ch_p4mpd/p4mpd/contrib mpid/ch_p4mpd/p4mpd/contrib_f mpid/ch_p4mpd/p4mpd/messages_f mpid/ch_p4mpd/p4mpd/misc
	# cleaning mpe things
	rm -f mpe/tmp/config.log
	dh_clean

install: install-stamp 
install-stamp: build-stamp
	dh_testdir
	dh_testroot
	dh_prep
	dh_installdirs

	# make them sh +ex for debugging.

	# install the normal version.
	(cd image_mpich && \
	DESTDIR=$(CURDIR)/debian/mpich-bin/ /bin/sh -e bin/mpiinstall \
	)
	# install the ch_p4mpd version
	(cd image_mpich-mpd && \
	DESTDIR=$(CURDIR)/debian/mpich-mpd-bin/ /bin/sh -e bin/mpiinstall \
	)
	# install the ch_shmem version
	(cd image_mpich-shmem && \
	DESTDIR=$(CURDIR)/debian/mpich-shmem-bin/ /bin/sh -e bin/mpiinstall \
	)

	# NOW: We have all the dirs up, and working.

	# this is bulky... and scary. Fixes script paths.
	sh debian/fixup.sh

	# Move docs into mpi-doc
	cp -a debian/mpich-bin/usr/lib/mpich/doc/* \
	  debian/mpich-bin/usr/lib/mpich/www \
	  debian/mpi-doc/usr/share/doc/mpi-doc/
	cp -a debian/mpich-bin/usr/lib/mpich/man/man3 \
	  debian/mpich-bin/usr/lib/mpich/man/man4 \
	  debian/mpi-doc/usr/share/man/
	cp doc/mpichman-chp4.pdf doc/mpichman-chp4mpd.pdf \
	  doc/mpichman-chshmem.pdf debian/mpi-doc/usr/share/doc/mpi-doc/
	# Avoid conflict with lam4-dev MPI_Comm_set_name manpage (see postinst)
	mv debian/mpi-doc/usr/share/man/man3/MPI_Comm_set_name.3 \
	  debian/mpi-doc/usr/share/man/man3/MPI_Comm_set_name_mpi-doc.3

	# fix things up for MPICH ... it installs files in a very ugly way
	# -- make a config file DEBIAN WAY
	# and other misc stuff is done here.
	(set -e; for INST in mpich mpich-mpd mpich-shmem ; do \
	  cp debian/machines.LINUX debian/$$INST-bin/etc/$$INST/machines.LINUX;\
	  rm -f debian/$$INST-bin/usr/lib/$$INST/share/machines.LINUX;\
	  rm -f debian/$$INST-bin/usr/lib/$$INST/share/Makefile.sample;\
	  for A in mpiuninstall chkserv ; do rm -f debian/$$INST-bin/usr/lib/$$INST/sbin/$$A; done;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/doc;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/html;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/man/man3;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/man/man4;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/www;\
	  rm -rf debian/$$INST-bin/usr/lib/$$INST/share/upshot/sbin;\
	  cp man/mpiman.help debian/$$INST-bin/usr/lib/$$INST/man/;\
	  for A in man3 man4; do ln -s ../../../share/man/$$A debian/$$INST-bin/usr/lib/$$INST/man/$$A; done;\
	  $(INSTALL_DIR) debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev;\
	  mv debian/$$INST-bin/usr/lib/$$INST/share/examples debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev;\
	  mkdir debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev/examples/pi;\
	  mv debian/$$INST-bin/usr/lib/$$INST/examples/* debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev/examples/pi;\
	  rmdir debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev/examples/pi/MPI-2-C++;\
	  rmdir debian/$$INST-bin/usr/lib/$$INST/examples;\
	  rm debian/lib"$$INST"1.0-dev/usr/share/doc/lib"$$INST"1.0-dev/examples/pi/mpirun ;\
	  install -d debian/$$INST-bin/usr/lib/update-cluster;\
	  sed 's/#MPICHDIR#/'$$INST'/g' < debian/mpich-bin.updatelist.in > image_$$INST/$$INST.updatelist;\
	  install -m 755 image_$$INST/$$INST.updatelist debian/$$INST-bin/usr/lib/update-cluster;\
	done;\
	)
	# install libs to proper places.
	(set -e; for INST in mpich mpich-mpd mpich-shmem ; do \
	  $(INSTALL_DIR) debian/lib"$$INST"1.0gf/usr/lib/$$INST/lib/shared; \
	  $(INSTALL_DIR) debian/lib"$$INST"1.0-dev/usr/lib/$$INST/bin; \
	  $(INSTALL_DIR) debian/lib"$$INST"1.0-dev/usr/lib/$$INST/etc; \
	  $(INSTALL_DIR) debian/lib"$$INST"1.0-dev/usr/lib/$$INST/man/man1; \
	  rm -f debian/$$INST-bin/usr/lib/$$INST/lib/lib*.so.1 \
	    debian/$$INST-bin/usr/lib/$$INST/lib/lib*.so \
	    debian/$$INST-bin/usr/lib/$$INST/lib/shared/lib*.so.1 \
	    debian/$$INST-bin/usr/lib/$$INST/lib/shared/lib*.so; \
	  mv debian/$$INST-bin/usr/lib/$$INST/include debian/lib"$$INST"1.0-dev/usr/lib/$$INST/; \
	  mv debian/$$INST-bin/usr/lib/$$INST/lib debian/lib"$$INST"1.0-dev/usr/lib/$$INST/; \
	  mv debian/lib"$$INST"1.0-dev/usr/lib/$$INST/lib/lib*.so.1.0 debian/lib"$$INST"1.0-dev/usr/lib/$$INST/lib/shared/; \
	  mv debian/lib"$$INST"1.0-dev/usr/lib/$$INST/lib/shared/lib*.so.1.0 debian/lib"$$INST"1.0gf/usr/lib/$$INST/lib/shared/; \
	  for LIB in `(cd debian/lib"$$INST"1.0gf/usr/lib/$$INST/lib/shared && ls lib*.so.*)`; do \
	    ln -s $$INST/lib/shared/$$LIB debian/lib"$$INST"1.0gf/usr/lib/$$LIB; \
	  done; \
	done;\
	)
	# Properly install binaries, man pages and scripts
	(set -e; for INST in mpich mpich-mpd mpich-shmem ; do \
	  for BIN in mpicc mpicxx mpif77 mpif90 mpireconfig; do \
	    mv debian/$$INST-bin/usr/lib/$$INST/bin/$$BIN debian/lib"$$INST"1.0-dev/usr/lib/$$INST/bin; \
	  done; \
	  for MAN in mpicc mpiCC mpif77 mpif90 mpireconfig; do \
	    mv debian/$$INST-bin/usr/lib/$$INST/man/man1/$$MAN.1 debian/lib"$$INST"1.0-dev/usr/lib/$$INST/man/man1; \
	  done; \
	  for SCRIPT in mpichlib mpif77 mpif90; do \
	    mv debian/$$INST-bin/usr/lib/$$INST/etc/$$SCRIPT.conf debian/lib"$$INST"1.0-dev/usr/lib/$$INST/etc; \
	    chmod +x debian/lib"$$INST"1.0-dev/usr/lib/$$INST/etc/$$SCRIPT.conf; \
	  done; \
	  cp debian/*.1 debian/$$INST-bin/usr/lib/$$INST/man/man1/; \
	  gzip debian/$$INST-bin/usr/lib/$$INST/man/man1/*.1; \
	  gzip debian/lib"$$INST"1.0-dev/usr/lib/$$INST/man/man1/*.1; \
	done;\
	)
	#
	cp -r www/* debian/mpi-doc/usr/share/doc/mpi-doc/www/
	cp doc/mpiman.ps debian/mpi-doc/usr/share/doc/mpi-doc
	#cd man/man3/ && for A in *; do cat $$A | sed 's/^\(\.so .*3\)/\1mpich/' > ../../debian/mpi-doc/usr/share/man/man3/$${A}mpich; done
	# fixing mpd binaries up.
	for A in mpdallexit mpdbomb mpdclean mpdcleanup mpddump mpdexit mpdhelp \
	mpdkilljob mpdlistjobs mpdmandump  mpdmpexec mpdringsize mpdringtest mpdshutdown mpdtrace  mpigdb  mpirun ; do \
	ln -sf mpdcon ${CURDIR}/debian/mpich-mpd-bin/usr/lib/mpich-mpd/bin/$$A; done

	# mpich removal and lib symlinks
	rm -f debian/libmpich1.0-dev/usr/share/doc/libmpich1.0-dev/examples/mpirun
	for LIB in libmpich libfmpich libpmpich libpmpich++ libtvmpich libmpe; do\
	  ln -s $$LIB.so.1.0 debian/libmpich1.0-dev/usr/lib/mpich/lib/shared/$$LIB.so; \
	done; \

	# mpich-mpd lib symlinks
	for LIB in libmpich libfmpich libpmpich libtvmpich libmpe; do \
	  ln -s $$LIB-p4mpd.so.1.0 debian/libmpich-mpd1.0-dev/usr/lib/mpich-mpd/lib/shared/$$LIB-p4mpd.so; \
	done
	# libpmpich-p4mpd++.so.1.0 has a soname that does not suit the loop above
	ln -s libpmpich-p4mpd++.so.1.0 debian/libmpich-mpd1.0-dev/usr/lib/mpich-mpd/lib/shared/libpmpich-p4mpd++.so
	# hack mpe-mpd to have libmpe.so in their directory.
	ln -s libmpe-p4mpd.so.1.0 debian/libmpich-mpd1.0-dev/usr/lib/mpich-mpd/lib/shared/libmpe.so
	# -- end of custom installation

	# mpich-shmem lib symlinks
	for LIB in libmpich libfmpich libpmpich libpmpich++ libtvmpich libmpe; do \
	  ln -s $$LIB-shmem.so.1.0 debian/libmpich-shmem1.0-dev/usr/lib/mpich-shmem/lib/shared/$$LIB-shmem.so; \
	done
	# libpmpich-shmem++.so.1.0 has a soname that does not suit the loop above
	ln -s libpmpich-shmem++.so.1.0 debian/libmpich-shmem1.0-dev/usr/lib/mpich-shmem/lib/shared/libpmpich-shmem++.so
	# hack mpe-shmem to have libmpe.so in their directory.
	ln -s libmpe-shmem.so.1.0 debian/libmpich-shmem1.0-dev/usr/lib/mpich-shmem/lib/shared/libmpe.so
	# -- end of custom installation
	touch install-stamp

# Build architecture-independent files here.
binary-indep: build-stamp install-stamp
	dh_testdir -i
	dh_testroot -i
	# create the source archive, and do something.
	install -d debian/mpe-source/usr/share/mpe-source
	tar cf - mpe | bzip2 > debian/mpe-source/usr/share/mpe-source/mpe.tar.bz2
	dh_installdocs -i
	dh_installexamples -i
	dh_installmenu -i
	dh_installchangelogs -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-stamp install-stamp
	dh_testdir -a
	dh_testroot -a
	dh_installdocs -a 
	dh_installexamples -a
	dh_installmenu -a
	dh_link -a
	dh_installcron -a
	dh_installchangelogs -a 
	dh_strip -a
	dh_makeshlibs -a
	dh_compress -a
	dh_fixperms -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

source diff:
	@echo >&2 'source and diff are obsolete - use dpkg-source -b'; false

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