#!/usr/bin/make -f export DH_VERBOSE=1 DPKG_EXPORT_BUILDFLAGS = 1 include /usr/share/dpkg/buildflags.mk DESTDIR:=`pwd`/debian/tmp/ DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) LIBDIR:=/usr/lib/$(DEB_HOST_MULTIARCH) AUTOGENERATED:= libopenmpi3.links libopenmpi-dev.links libopenmpi-dev.postinst \ libopenmpi-dev.prerm openmpi-bin.preinst libopenmpi-dev.preinst ### Arch-specific stuff # No ibverbs support available on kFreeBSD, Hurd NO_VERBS_ARCH:= hurd-i386 kfreebsd-amd64 kfreebsd-i386 s390x FABRIC_ARCH:= amd64 i386 PSM_ARCH:= amd64 i386 PSM2_ARCH:= amd64 BUILTIN_ATOMICS_ARCH:= s390x riscv64 NO_CMA_ARCH:= s390x mipsel hppa alpha armhf armel m68k sparc64 NO_JAVA_ARCH:= hppa hurd-i386 ia64 riscv64 NO_TEST_ARCH:= hppa hurd-i386 GCC7_ARCH:= ia64 FORTRAN:=$(shell basename $(shell readlink /etc/alternatives/f95)) FC ?= $(FORTRAN) # Drop '-g' flag with flang. Known failure with 2018122 version ifneq ($(filter flang,$(FC)),) FCFLAGS=$(shell dpkg-buildflags --get FCLAGS | sed -e 's/-g //') endif ifeq (sparc,$(DEB_HOST_GNU_CPU)) CFLAGS += -mcpu=v9 endif # Use -O3 recommended by upstream CFLAGS += -O3 CXXFLAGS += -O3 FCFLAGS += -O3 ifeq ($(filter $(NO_VERBS_ARCH),$(DEB_HOST_ARCH)),) VERBS := --with-verbs endif # Use gcc-7 on ia64; ICE on gcc 8.* ifneq ($(filter $(GCC7_ARCH),$(DEB_HOST_ARCH)),) export CC=gcc-7 endif ifneq ($(filter $(BUILTIN_ATOMICS_ARCH),$(DEB_HOST_ARCH)),) ENABLE_BUILTIN_ATOMICS:= --enable-builtin-atomics endif ifneq ($(filter $(FABRIC_ARCH),$(DEB_HOST_ARCH)),) FABRIC := --with-libfabric endif ifneq ($(filter $(PSM_ARCH),$(DEB_HOST_ARCH)),) PSM:= --with-psm endif ifneq ($(filter $(PSM2_ARCH),$(DEB_HOST_ARCH)),) PSM:= --with-psm2 endif ifeq ($(filter $(NO_JAVA_ARCH),$(DEB_HOST_ARCH)),) ifeq ($(filter stage1,$(DEB_BUILD_PROFILES)),) JAVA := --with-jdk-dir=/usr/lib/jvm/default-java --enable-mpi-java endif endif ifneq (,$(findstring $(DEB_HOST_ARCH),$(NO_TEST_ARCH))) DO_TEST := false BTL_TESTS := else DO_TEST := true BTL_TESTS:= --enable-opal-btl-usnic-unit-tests endif ifneq ($(filter $(NO_CMA_ARCH),$(DEB_HOST_ARCH)),) CMA:= --without-cma endif # Flags for the static build: see bug #502232 #STATIC_CONFIG_PARAMS = --enable-static STATIC_CONFIG_PARAMS = %: dh $@ --no-parallel --with=fortran_mod override_dh_auto_clean: dh_clean find . -name .libs -exec rm -rf {} \; || true find . -name .dirstamp -delete find . -type l -delete find . -name '*.o' -delete rm -f $(patsubst %, debian/%, ${AUTOGENERATED}) override_dh_update_autotools_config: (cd config && autom4te --language=m4sh opal_get_version.m4sh -o opal_get_version.sh) ./autogen.pl --force override_dh_auto_configure: for f in ${AUTOGENERATED} ; do \ sed -e 's%@TRIPLET@%${DEB_HOST_MULTIARCH}%g' < debian/$$f.in > debian/$$f ; \ done dh_auto_configure -- \ --disable-silent-rules \ --disable-wrapper-runpath \ --with-package-string="Debian OpenMPI" \ $(VERBS) $(FABRIC) $(PSM) $(PSM2) $(CMA) \ $(ENABLE_BUILTIN_ATOMICS) \ $(JAVA) \ $(STATIC_CONFIG_PARAMS) \ $(BTL_TESTS) \ --with-libevent=external \ --with-pmix=${LIBDIR}/pmix \ --disable-silent-rules \ --enable-mpi-cxx \ --with-hwloc=/usr \ --with-libltdl \ --with-devel-headers \ --with-slurm \ --with-sge \ --without-tm \ --sysconfdir=/etc/openmpi \ --libdir=\$${prefix}/lib/${DEB_HOST_MULTIARCH}/openmpi/lib \ --includedir=\$${prefix}/lib/${DEB_HOST_MULTIARCH}/openmpi/include # Extra debugging for non-deterministic FTBFS on some archs override_dh_auto_build: dh_auto_build || ( \ cat config.log ; \ cat libtool ; \ find . -name '*.la' -exec cat {} \; \ ) override_dh_install: # Strip rpath info from all executables and libraries. find debian/tmp/ -type f -perm -+x -a ! -name '*.la' -a ! -name '*.mod' -exec chrpath -d '{}' \; # Rename the compiler and startup wrappers. for f in mpic++ mpicc mpiCC mpicxx mpiexec mpif77 mpif90 mpirun mpifort ; do \ if test -f debian/tmp/usr/bin/$${f}; then \ mv debian/tmp/usr/bin/$${f} debian/tmp/usr/bin/$${f}.openmpi ; \ fi; \ done # Strip rpath from pc,wrapper files for f in ompi-c.pc ompi-cxx.pc ompi-f77.pc ompi-f90.pc ompi-fort.pc ompi.pc opal.pc orte.pc ; do \ sed -e 's/-Wl,-rpath -Wl,$${libdir}//' < $(DESTDIR)/$(LIBDIR)/openmpi/lib/pkgconfig/$${f} > debian/tmp.x ; \ mv debian/tmp.x $(DESTDIR)/$(LIBDIR)/openmpi/lib/pkgconfig/$${f} ; \ done find . -name '*wrapper-data.txt' | while read f; do \ sed -e 's/-Wl,-rpath -Wl,@{libdir}//' < $$f > debian/tmp.x ; \ mv debian/tmp.x $$f ; done # Rename the compiler wrapper man pages. for f in mpic++ mpicc mpicxx mpiexec mpif77 mpif90 mpirun mpifort ; do \ if test -f debian/tmp/usr/share/man/man1/$${f}.1; then \ mv debian/tmp/usr/share/man/man1/$${f}.1 debian/tmp/usr/share/man/man1/$${f}.openmpi.1 ; \ fi; \ if test -f debian/tmp/usr/share/man/man1/$${f}.3; then \ mv debian/tmp/usr/share/man/man3/$${f}.3 debian/tmp/usr/share/man/man1/$${f}.openmpi.3 ; \ fi; \ done cd debian/tmp/usr/share/man/man3; \ for f in *.3; do \ mv $$f $$(echo $$f|sed -e "s|\.3|.openmpi.3|g"); \ done; \ # Rename orte-bootproxy.sh to orte-bootproxy if test -f debian/tmp/usr/bin/orte-bootproxy.sh; then \ mv debian/tmp/usr/bin/orte-bootproxy.sh debian/tmp/usr/bin/orte-bootproxy; \ fi # Remove dangling symlink(s) rm -f debian/tmp/usr/share/man/man1/mpiCC.1 rm -f debian/tmp/usr/share/man/man1/orteCC.1 # Remove COPYRIGHT file of ptmalloc2. It's reproduced in debian/copyright. rm -f -r debian/tmp/usr/share/openmpi/doc/ # Remove pmi2, pmix now in separate package rm -rf debian/tmp/usr/lib/*/openmpi/include/pmi* # Remove buggy ${pkgincludedir} refs from pkg-config files. #837062 find . -name '*.pc' | while read f ; do \ cat $${f} | sed -e 's%-I$${pkgincludedir}[a-zA-Z0-9/]* %%g' > x ; \ mv x $${f}; done # sanitize build paths for bit-reproducibility if test ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h ; then \ sed -e 's%${CURDIR}%/build/openmpi%g' < ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h \ > debian/tmp/x ; \ mv debian/tmp/x ./debian/tmp/${LIBDIR}/openmpi/include/openmpi/opal_config.h ; \ fi # Continue as usual dh_install # oshmem, shmem only built on Linux so do by hand or it may fail ... mkdir -p debian/libopenmpi3/${LIBDIR}/openmpi/lib if test -f debian/tmp/usr/bin/oshmem_info ; then \ mkdir -p debian/openmpi-bin/usr/share/man/man1 ; \ cp -a debian/tmp/usr/bin/oshrun debian/openmpi-bin//usr/bin/ ; \ cp -a debian/tmp/usr/bin/oshmem_info debian/openmpi-bin//usr/bin/ ; \ cp -a debian/tmp/usr/bin/oshcc debian/libopenmpi-dev/usr/bin ; \ cp -a debian/tmp/usr/bin/oshfort debian/libopenmpi-dev/usr/bin ; \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/liboshmem.so.40.10.1 debian/libopenmpi3/${LIBDIR}/openmpi/lib ; \ cp -a debian/tmp/usr/share/man/man1/oshcc.1 debian/libopenmpi-dev/usr/share/man/man1 ; \ cp -a debian/tmp/usr/share/man/man1/oshfort.1 debian/libopenmpi-dev/usr/share/man/man1 ; \ cp -a debian/tmp/usr/share/man/man1/oshrun.1 debian/openmpi-bin/usr/share/man/man1 ; \ cp -a debian/tmp/usr/share/man/man1/oshmem_info.1 debian/openmpi-bin/usr/share/man/man1 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/liboshmem.so.40 ${LIBDIR}/liboshmem.so ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/liboshmem.so.40.10.1 ${LIBDIR}/liboshmem.so.40 ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmpi_java.so.40.10.0 ${LIBDIR}/libmpi_java.so.40 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmpi_java.so.40.10.0 ${LIBDIR}/libmpi_java.so.40.10.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmpi_java.so.40 ${LIBDIR}/libmpi_java.so ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_monitoring.so.50.0.0 ${LIBDIR}/libmca_common_monitoring.so.50 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_monitoring.so.50.0.0 ${LIBDIR}/libmca_common_monitoring.so.50.0.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_monitoring.so.50 ${LIBDIR}/libmca_common_monitoring.so ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_ofi.so.40.10.0 ${LIBDIR}/libmca_common_ofi.so.40 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_ofi.so.40.10.0 ${LIBDIR}/libmca_common_ofi.so.40.10.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_ofi.so.40 ${LIBDIR}/libmca_common_ofi.so ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_ompio.so.41.9.0 ${LIBDIR}/libmca_common_ompio.so.41 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_ompio.so.41.9.0 ${LIBDIR}/libmca_common_ompio.so.41.9.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_ompio.so.41 ${LIBDIR}/libmca_common_ompio.so ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_verbs.so.40.10.0 ${LIBDIR}/libmca_common_verbs.so.40 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_verbs.so.40.10.0 ${LIBDIR}/libmca_common_verbs.so.40.10.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_verbs.so.40 ${LIBDIR}/libmca_common_verbs.so ; \ fi if test -f debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 ; then \ cp -a debian/tmp/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 \ debian/libopenmpi3/${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.i10.0 ; \ dh_link -p libopenmpi3 ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so.40 ; \ dh_link -p libopenmpi3 ${LIBDIR}/openmpi/lib/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ; \ dh_link -p libopenmpi-dev ${LIBDIR}/libmca_common_libfabric.so.40.10.0 ${LIBDIR}/libmca_common_libfabric.so ; \ fi if test -f debian/tmp/usr/bin/shmemrun ; then \ cp -a debian/tmp/usr/bin/shmemrun debian/openmpi-bin/usr/bin/shmemrun ;\ cp -a debian/tmp/usr/share/man/man1/shmemrun.1 debian/openmpi-bin/usr/share/man/man1 ; \ cp -a debian/tmp/usr/bin/shmemcc debian/openmpi-bin/usr/bin/shmemcc ; \ cp -a debian/tmp/usr/bin/shmemfort debian/openmpi-bin/usr/bin/shmemfort ; \ cp -a debian/tmp/usr/share/man/man1/shmemcc.1 debian/openmpi-bin/usr/share/man/man1 ; \ cp -a debian/tmp/usr/share/man/man1/shmemfort.1 debian/openmpi-bin/usr/share/man/man1 ; \ fi override_dh_fixperms-arch: chmod 0644 debian/libopenmpi*/${LIBDIR}/openmpi/lib/*.mod rm -f debian/libopenmpi-dev/usr/lib/*/openmpi/lib/ompi_monitoring_prof.so # TODO: whats causing this? rm -f debian/libopenmpi-dev/usr/bin dh_fixperms override_dh_auto_test: $(DO_TEST) && dh_auto_test || echo "Tests disabled on ${NO_TEST_ARCH} systems for the moment" override_dh_installdocs: dh_installdocs --all NEWS README override_dh_shlibdeps: dh_shlibdeps -l$(CURDIR)/debian/tmp/${LIBDIR}/openmpi/lib -- --ignore-missing-info