#!/usr/bin/make -f
# Made with the aid of debmake, by Christoph Lameter,
# based on the sample debian/rules file for GNU hello by Ian Jackson.

package=salome
SALOME_VERSION=5.1.3
LIB_VERSION=0.0.0

# Support multiple makes at once
ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
NJOBS := $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS)))
else
NJOBS := 1
endif

# These are the modules which require build_configure to build.  They are
# ordered by priority and then dependency: KERNEL through NETGENPLUGIN are
# core; MULTIPR through SIERPINSKY are optional
# modules; LIGHT and PYLIGHT are alternate non-CORBA interface shells;
# HELLO through PYCALCULATOR are module examples; HXX2SALOME 
# and XDATA are module development tools.  In terms of dependency, KERNEL and
# HXX2SALOME are at the bottom, GUI depends on KERNEL, GEOM and MED also depend
# on GUI, VISU on MED and GUI, SMESH on GEOM MED and GUI, etc.
# Notes:
# - See ChangeLog regarding VISU, NETGENPLUGIN and SIERPINSKY modules.
# - XDATA is not a normal module, it needs special treatment.
# - BLSURFPLUGIN, GHS3D[PRL]PLUGIN and HexoticPLUGIN require non-free
#   libraries, and will not be part of the Debian package.
SALOME_MODULES = KERNEL_SRC_$(SALOME_VERSION) \
  GUI_SRC_$(SALOME_VERSION) \
  GEOM_SRC_$(SALOME_VERSION) \
  MED_SRC_$(SALOME_VERSION) \
  VISU_SRC_$(SALOME_VERSION) \
  SMESH_SRC_$(SALOME_VERSION) \
  YACS_SRC_$(SALOME_VERSION) \
  MULTIPR_SRC_$(SALOME_VERSION) \
  COMPONENT_SRC_$(SALOME_VERSION) \
  RANDOMIZER_SRC_$(SALOME_VERSION) \
  LIGHT_SRC_$(SALOME_VERSION) \
  PYLIGHT_SRC_$(SALOME_VERSION) \
  HELLO_SRC_$(SALOME_VERSION) \
  PYHELLO_SRC_$(SALOME_VERSION) \
  CALCULATOR_SRC_$(SALOME_VERSION) \
  PYCALCULATOR_SRC_$(SALOME_VERSION) \
  HXX2SALOME_SRC_$(SALOME_VERSION)
# XDATA_SRC_$(SALOME_VERSION) \
  BLSURFPLUGIN_SRC_$(SALOME_VERSION) \
  GHS3DPLUGIN_SRC_$(SALOME_VERSION) \
  GHS3DPRLPLUGIN_SRC_$(SALOME_VERSION) \
  HexoticPLUGIN_SRC_$(SALOME_VERSION)

clean:
	dh_testdir
	for skipfile in GEOM_SRC_$(SALOME_VERSION)/src/PARTITION/Makefile.in \
	    KERNEL_SRC_$(SALOME_VERSION)/DEPRECATED/Makefile.in; do \
	  mv $$skipfile $$skipfile.skip; \
	done
	for salomodule in $(SALOME_MODULES); do \
	  if [ -e $$salomodule/Makefile ]; then \
	    $(MAKE) -C $$salomodule maintainer-clean; \
	  fi; \
	  rm -f `find $$salomodule -name Makefile.in -print`; \
	done
	if [ -e XDATA_SRC_$(SALOME_VERSION)/Makefile ]; then \
	  make -C XDATA_SRC_$(SALOME_VERSION) maintainer-clean; \
	fi
	for skipfile in GEOM_SRC_$(SALOME_VERSION)/src/PARTITION/Makefile.in \
	    KERNEL_SRC_$(SALOME_VERSION)/DEPRECATED/Makefile.in; do \
	  mv $$skipfile.skip $$skipfile; \
	done

#	Remove new .in files
	rm -f KERNEL_SRC_$(SALOME_VERSION)/bin/runSalome.in \
	  KERNEL_SRC_$(SALOME_VERSION)/bin/killSalome.in \
	  KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/envProducts.sh.in
#	Restore obsolete files
	for obsoletefile in `find . -name \*.obs -print`; do \
	  mv -f $$obsoletefile `echo $$obsoletefile | sed s/.obs//`; \
	done
	QUILT_PATCHES=debian/patches quilt pop -a || test $$? = 2
	-rm -rf .pc

	rm -f *-stamp
	dh_clean

patch-stamp:
	QUILT_PATCHES=debian/patches quilt push -a || test $$? = 2
	touch $@

configure-stamp: patch-stamp
	dh_testdir
#	Move aside obsolete files
	for obsoletefile in KERNEL_SRC_$(SALOME_VERSION)/bin/runSalome \
	  KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/envProducts.sh \
	  YACS_SRC_$(SALOME_VERSION)/doc/Doxyfile \
	  XDATA_SRC_$(SALOME_VERSION)/aclocal.m4 \
	  XDATA_SRC_$(SALOME_VERSION)/configure \
	  `find XDATA_SRC_$(SALOME_VERSION) -name Makefile.in -print`; do \
	  if [ ! -e $$obsoletefile.obs ]; then \
	    mv $$obsoletefile $$obsoletefile.obs; \
	  fi; \
	done
#	Install new .in files
	cp -fp debian/runSalome.in debian/killSalome.in KERNEL_SRC_$(SALOME_VERSION)/bin/
	cp -fp debian/envProducts.sh.in KERNEL_SRC_$(SALOME_VERSION)/bin/appliskel/env.d/

	set -e; for salomodule in $(SALOME_MODULES); do \
	  echo; echo CONFIGURING SALOME MODULE $$salomodule; echo; \
	  cd $$salomodule; \
	   KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION) \
	     GUI_ROOT_DIR=$(CURDIR)/GUI_SRC_$(SALOME_VERSION) \
	     MED_ROOT_DIR=$(CURDIR)/MED_SRC_$(SALOME_VERSION) \
	     GEOM_ROOT_DIR=$(CURDIR)/GEOM_SRC_$(SALOME_VERSION) \
	     RANDOMIZER_ROOT_DIR=$(CURDIR)/RANDOMIZER_SRC_$(SALOME_VERSION) \
	     COMPONENT_ROOT_DIR=$(CURDIR)/COMPONENT_SRC_$(SALOME_VERSION) \
	     CALCULATOR_ROOT_DIR=$(CURDIR)/CALCULATOR_SRC_$(SALOME_VERSION) \
	     PYCALCULATOR_ROOT_DIR=$(CURDIR)/PYCALCULATOR_SRC_$(SALOME_VERSION) \
	     SMESH_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \
	     SIERPINSKY_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \
	     ./build_configure; \
	   ./configure --prefix=/usr CASROOT=/usr VTKSUFFIX=-5.4 \
	     NETGENHOME=/usr \
	     --with-mpi=/usr --with-mpi_include=/usr/include/mpi \
	     KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION) \
	     GUI_ROOT_DIR=$(CURDIR)/GUI_SRC_$(SALOME_VERSION) \
	     MED_ROOT_DIR=$(CURDIR)/MED_SRC_$(SALOME_VERSION) \
	     GEOM_ROOT_DIR=$(CURDIR)/GEOM_SRC_$(SALOME_VERSION) \
	     RANDOMIZER_ROOT_DIR=$(CURDIR)/RANDOMIZER_SRC_$(SALOME_VERSION) \
	     COMPONENT_ROOT_DIR=$(CURDIR)/COMPONENT_SRC_$(SALOME_VERSION) \
	     CALCULATOR_ROOT_DIR=$(CURDIR)/CALCULATOR_SRC_$(SALOME_VERSION) \
	     PYCALCULATOR_ROOT_DIR=$(CURDIR)/PYCALCULATOR_SRC_$(SALOME_VERSION) \
	     SMESH_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION) \
	     SIERPINSKY_ROOT_DIR=$(CURDIR)/SMESH_SRC_$(SALOME_VERSION); \
	  cd ..; \
	done
#	Restore these when the XDATA clean target actually works
#	echo; echo CONFIGURING SALOME MODULE XDATA; echo
#	(cd XDATA_SRC_$(SALOME_VERSION) && \
	 aclocal -I adm/unix/config_files && autoconf && automake && \
	 ./configure --prefix=/usr VTKSUFFIX=-5.4 \
	   KERNEL_ROOT_DIR=$(CURDIR)/KERNEL_SRC_$(SALOME_VERSION))
	touch $@

build: build-arch build-indep
build-arch: build-arch-stamp
build-arch-stamp: configure-stamp
#	Add XDATA to list below when its clean target actually works
	set -e; for salomodule in $(SALOME_MODULES); do \
	  echo; echo COMPILING SALOME MODULE $$salomodule; echo; \
	  $(MAKE) -C $$salomodule -j $(NJOBS) bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc; \
	done
	touch $@

build-indep: build-indep-stamp
build-indep-stamp: configure-stamp
	echo; echo GENERATING DOCUMENTATION IN MODULE KERNEL; echo
	make -C KERNEL_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE GUI; echo
	make -C GUI_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE GEOM; echo
	make -C GEOM_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE MED; echo
	make -C MED_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE VISU; echo
	make -C VISU_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE HELLO; echo
	make -C HELLO_SRC_$(SALOME_VERSION)/doc usr_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE PYHELLO; echo
	make -C PYHELLO_SRC_$(SALOME_VERSION)/doc usr_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE PYCALCULATOR; echo
	make -C PYCALCULATOR_SRC_$(SALOME_VERSION)/doc dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE SMESH; echo
	make -C SMESH_SRC_$(SALOME_VERSION)/doc usr_docs dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	echo; echo GENERATING DOCUMENTATION IN MODULE YACS; echo
	make -C YACS_SRC_$(SALOME_VERSION)/doc dev_docs -j $(NJOBS) DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc
	touch $@

install: build install-stamp

install-arch: build-arch install-stamp

install-indep: install-indep-stamp

# Later maybe make this run make install only in the doc directories, so it
# doesn't try to build everything else
install-indep-stamp: build-indep install-stamp
	touch $@

# This installs everything, so it's not really install-arch-stamp
install-stamp:
	dh_testdir
#	Add XDATA to list below when its clean target actually works
	set -e; for salomodule in $(SALOME_MODULES); do \
	  echo; echo INSTALLING SALOME MODULE $$salomodule; echo; \
	  $(MAKE) -C $$salomodule install DESTDIR=$(CURDIR)/debian/tmp bindir=/usr/lib/salome/bin libdir=/usr/lib/salome/lib docdir=/usr/share/doc/salome-doc; \
	done
	mv debian/tmp/usr/idl debian/tmp/usr/share/
	install -d debian/tmp/usr/share/aclocal
	mv debian/tmp/usr/salome_adm/unix/config_files/check_Kernel.m4 debian/tmp/usr/share/aclocal/salome.m4
	for m4file in check_GUI.m4 check_GEOM.m4 check_Med.m4 check_RANDOMIZER.m4 check_SMESH.m4; do \
	  cat debian/tmp/usr/adm_local/unix/config_files/$$m4file >> debian/tmp/usr/share/aclocal/salome.m4; \
	done
#	Temporary kludge until there's a more permanent way to install this
	cp KERNEL_SRC_$(SALOME_VERSION)/bin/killSalome debian/tmp/usr/bin/
	chmod +x debian/tmp/usr/bin/killSalome
	mv debian/tmp/usr/lib/salome/bin/runSalome debian/tmp/usr/bin/
	install -d debian/tmp/usr/share/applications
	cp -a debian/salome.desktop debian/tmp/usr/share/applications/
	rm -f debian/tmp/usr/bin/appliskel/env.d/*.in \
	  debian/tmp/usr/bin/appliskel/env.d/*.obs
	mv debian/tmp/usr/lib/salome/lib/SalomePyQt.so debian/tmp/usr/lib/salome/lib/SalomePyQt.so.0
	ln -s SalomePyQt.so.0 debian/tmp/usr/lib/salome/lib/SalomePyQt.so
	mv debian/tmp/usr/Tests debian/tmp/usr/share/salome/
	rm -rf debian/tmp/usr/lib64
	rm -rf debian/tmp/usr/doc
	rm -rf debian/tmp/usr/lib/salome/bin/appliskel
#	rm -rf debian/tmp/usr/lib/salome/bin/styles
	rm -rf debian/tmp/usr/lib/salome/bin/HXX2SALOME_GENERIC_CLASS*
	rm -f debian/tmp/usr/lib/salome/bin/*.pyo debian/tmp/usr/lib/salome/bin/*.pyc
	rm -f debian/tmp/usr/lib/salome/bin/*.csh debian/tmp/usr/lib/salome/bin/*.ksh debian/tmp/usr/lib/salome/bin/*.bat
	for shscript in `ls debian/tmp/usr/lib/salome/bin/*.sh`; do \
	  shbase=`basename $$shscript .sh`; \
	  mv debian/tmp/usr/lib/salome/bin/$$shbase.sh debian/tmp/usr/lib/salome/bin/$$shbase; \
	done
	mv debian/tmp/usr/lib/salome/bin/*.xml debian/tmp/usr/lib/salome/bin/VERSION \
	  debian/tmp/usr/lib/salome/bin/*.tgz debian/tmp/usr/lib/salome/bin/*.awk \
	  debian/tmp/usr/share/salome/
	install -d debian/salome/usr/lib/salome/bin
	mv debian/tmp/usr/lib/salome/bin/SALOME_ContainerPy.py debian/salome/usr/lib/salome/bin/SALOME_ContainerPy
	mv debian/tmp/usr/lib/salome/bin/*.py debian/tmp/usr/lib/python2.5/*-packages/salome/
	(cd debian/tmp/usr/lib/python2.5/*-packages/salome && \
	  chmod -x *.py *.so.$(LIB_VERSION) *.la *.a && rm -f *.pyc *.pyo)
	install -d debian/salome/usr/bin
	for pyscript in avs2med med2sauv salomeloader sauv2med; do \
	  mv debian/tmp/usr/lib/salome/bin/$$pyscript debian/salome/usr/bin/; \
	done
	(cd debian/tmp/usr/share/salome && \
	  chmod -x resources/*/*.xml *.awk *.tgz)
	install -d debian/salome-examples/usr/share/salome/examples
	cp -a SAMPLES_SRC_$(SALOME_VERSION)/* debian/salome-examples/usr/share/salome/examples/
	chmod -x `find debian/salome-examples/usr/share/salome/examples -type f`

# This installs everything that install-indep-stamp is supposed to install
	touch install-indep-stamp
	touch $@

binary-indep: install-indep
	dh_testdir -i
	dh_testroot -i
	dh_installdirs -i
	dh_movefiles -i
	dh_installdocs -i
	dh_installchangelogs -i
	dh_compress -i
	dh_fixperms -i
	dh_installdeb -i
	dh_gencontrol -i
	dh_md5sums -i
	dh_builddeb -i

binary-arch: install-arch
	dh_testdir -a
	dh_testroot -a
	dh_installdirs -a
	dh_movefiles -a
	dh_installdocs -a
	dh_installchangelogs -a
	dh_installmenu -a
	dh_strip -a
	dh_makeshlibs -a
	dh_compress -a
	dh_pycentral -psalome
	dh_fixperms -a
	dh_installdeb -a
	dh_shlibdeps -a
	dh_gencontrol -a
	dh_md5sums -a
	dh_builddeb -a

binary: binary-arch binary-indep

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