#!/usr/bin/make -f include /usr/share/dpkg/default.mk SO:=3 # xerblas_ and LAPACK_xerblas must be overrideable by applications # --dynamic-list does not work with gold, so drop the flag completely BUILDFLAGS_ENV:=DEB_LDFLAGS_MAINT_STRIP="-Wl,-Bsymbolic-functions" LDFLAGS:=$(shell $(BUILDFLAGS_ENV) dpkg-buildflags --get LDFLAGS) # if F77 isn't explicitly set (default or undefined), set it to the compiler for # our host architecture. This may be a cross compiler ifneq ($(filter default undefined,$(origin F77)),) F77 := $(DEB_HOST_GNU_TYPE)-gfortran endif FFLAGS:=$(shell dpkg-buildflags --get FFLAGS) FFLAGS_NOOPT:=$(shell DEB_BUILD_OPTIONS=noopt dpkg-buildflags --get FFLAGS) # if CC isn't explicitly set (default or undefined), set it to the compiler for # our host architecture. This may be a cross compiler ifneq ($(filter default undefined,$(origin CC)),) CC := $(DEB_HOST_GNU_TYPE)-gcc endif CFLAGS:=$(shell dpkg-buildflags --get CFLAGS) CPPFLAGS:=$(shell dpkg-buildflags --get CPPFLAGS) ifeq ($(DEB_HOST_ARCH),alpha) FFLAGS += -mieee FFLAGS_NOOPT += -mieee endif # On arches with extended precision, this flag is used # for BLAS when compiling i{c,z}amax.f and the BLAS testsuite, # in order to avoid test failures. # See also debian/patches/icamax-izamax-extended-precision.patch ifneq (,$(filter $(DEB_HOST_ARCH_CPU),i386 m68k)) FFLAGS_FLOAT_STORE := -ffloat-store export FFLAGS_FLOAT_STORE endif FFLAGS_BLAS_TESTSUITE := $(FFLAGS) $(FFLAGS_FLOAT_STORE) # Using the -frecursive flag is the solution recommended by upstream for #693269 # However, we don't want to use -frecursive for the LAPACK testsuite, it leads to # segfaults on mips{,el} (xeigtstz allocates too much space on the stack) FFLAGS_LAPACK_TESTSUITE := $(FFLAGS) FFLAGS += -frecursive FFLAGS_NOOPT += -frecursive # Support parallel build ifneq (,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) NUMJOBS = $(patsubst parallel=%,%,$(filter parallel=%,$(DEB_BUILD_OPTIONS))) MAKEFLAGS += -j$(NUMJOBS) endif %: dh $@ make.inc: INSTALL/make.inc.gfortran sed -e "s%\(^CC *=\).*%\1 $(CC)%1" \ -e "s%\(^FORTRAN *=\).*%\1 $(F77)%1" \ -e "s%\(^NOOPT *=\).*%\1 \$$(PICOPTS) $(FFLAGS_NOOPT)%1" \ -e "s%\(^OPTS *=\).*%\1 \$$(PICOPTS) $(FFLAGS)%1" \ -e "s%\(^LOADER *=\).*%\1 $(F77)%1" \ -e "s%\(^LOADOPTS *=\).*%\1 $(LDFLAGS)%1" \ -e "s%\(^ARCH *=\).*%\1 $(DEB_HOST_GNU_TYPE)-ar%1" \ -e "s%\(^RANLIB *=\).*%\1 $(DEB_HOST_GNU_TYPE)-ranlib%1" \ -e "s%\(^CFLAGS *=\).*%\1 $(CPPFLAGS) \$$(PICOPTS) $(CFLAGS)%1" \ -e "s%^#\(LAPACKE_WITH_TMG *=\)%\1%1" \ < $< > $@ # Build deprecated routines (see #810143) echo "BUILD_DEPRECATED=1" >> $@ override_dh_auto_clean: make.inc $(MAKE) clean rm -rf debian/*_stamp debian/*_results lib*.so* pic/ rm -rf debian/test/ debian/time/ rm -f TESTING/tmp TESTING/testing_results.txt rm -f LAPACKE/include/lapacke_mangling.h rm -f CBLAS/include/cblas_mangling.h rm -rf DOCS/explore-html/ DOCS/man/ rm -f output_err rm -f lapack-netlib.pc LAPACKE/lapacke.pc BLAS/blas-netlib.pc rm -f make.inc override_dh_auto_configure: make.inc # Create lapack-netlib.pc sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \ -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%" \ -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < lapack.pc.in > lapack-netlib.pc # Create lapacke.pc sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \ -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%" \ -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < LAPACKE/lapacke.pc.in > LAPACKE/lapacke.pc # Create blas-netlib.pc sed -e "s%@LAPACK_VERSION@%$(DEB_VERSION_UPSTREAM)%" \ -e "s%@CMAKE_INSTALL_FULL_INCLUDEDIR@%/usr/include/$(DEB_HOST_MULTIARCH)%" \ -e "s%@CMAKE_INSTALL_FULL_LIBDIR@%/usr/lib/$(DEB_HOST_MULTIARCH)%" < BLAS/blas.pc.in > BLAS/blas-netlib.pc override_dh_auto_build-arch: # Build pic libraries $(MAKE) cleanlib $(MAKE) blaslib cblaslib lapacklib tmglib lapackelib PICOPTS=-fPIC mkdir -p pic mv librefblas.a pic/librefblas_pic.a mv libcblas.a pic/libcblas_pic.a mv liblapack.a pic/liblapack_pic.a mv libtmglib.a pic/libtmglib_pic.a mv liblapacke.a pic/liblapacke_pic.a # Build libblas.so.* ar d pic/librefblas_pic.a xerbla.o # We want to use the xerbla.o from libcblas_pic.a mkdir -p tmp cd tmp && ar x ../pic/librefblas_pic.a && ar x ../pic/libcblas_pic.a $(F77) -shared -Wl,-soname=libblas.so.$(SO) -o libblas.so.$(DEB_VERSION_UPSTREAM) tmp/*.o $(LDFLAGS) rm -rf tmp ln -s libblas.so.$(DEB_VERSION_UPSTREAM) libblas.so.$(SO) ln -s libblas.so.$(DEB_VERSION_UPSTREAM) libblas.so # Build liblapack.so.* mkdir -p tmp cd tmp && ar x ../pic/liblapack_pic.a $(F77) -shared -Wl,-soname=liblapack.so.$(SO) -o liblapack.so.$(DEB_VERSION_UPSTREAM) tmp/*.o -L. -lblas $(LDFLAGS) rm -rf tmp ln -s liblapack.so.$(DEB_VERSION_UPSTREAM) liblapack.so.$(SO) ln -s liblapack.so.$(DEB_VERSION_UPSTREAM) liblapack.so # Build libtmglib.so.* mkdir -p tmp cd tmp && ar x ../pic/libtmglib_pic.a $(F77) -shared -Wl,-soname=libtmglib.so.$(SO) -o libtmglib.so.$(DEB_VERSION_UPSTREAM) tmp/*.o -L. -lblas -llapack $(LDFLAGS) rm -rf tmp ln -s libtmglib.so.$(DEB_VERSION_UPSTREAM) libtmglib.so.$(SO) ln -s libtmglib.so.$(DEB_VERSION_UPSTREAM) libtmglib.so # Build liblapacke.so.* mkdir -p tmp cd tmp && ar x ../pic/liblapacke_pic.a $(CC) -shared -Wl,-soname=liblapacke.so.$(SO) -o liblapacke.so.$(DEB_VERSION_UPSTREAM) tmp/*.o -L. -lblas -llapack -ltmglib $(LDFLAGS) rm -rf tmp ln -s liblapacke.so.$(DEB_VERSION_UPSTREAM) liblapacke.so.$(SO) ln -s liblapacke.so.$(DEB_VERSION_UPSTREAM) liblapacke.so # Build static versions $(MAKE) cleanlib $(MAKE) blaslib cblaslib lapacklib tmglib lapackelib # Build libblas.a ar d librefblas.a xerbla.o # We want to use the xerbla.o from libcblas.a mkdir -p tmp cd tmp && ar x ../librefblas.a && ar x ../libcblas.a ar r libblas.a $$(env LC_ALL=C ls tmp/*.o) rm -rf tmp # Build the test programs, in order to avoid FTBFS if DEB_BUILD_OPTIONS contains nocheck $(MAKE) OPTS="$(FFLAGS_BLAS_TESTSUITE)" BLASLIB="../../libblas.so" -C BLAS/TESTING $(MAKE) OPTS="$(FFLAGS_BLAS_TESTSUITE)" BLASLIB="../../libblas.so" CBLASLIB="" -C CBLAS/testing $(MAKE) OPTS="$(FFLAGS_LAPACK_TESTSUITE)" BLASLIB="../../libblas.so" LAPACKLIB="liblapack.so" TMGLIB="libtmglib.so" -C TESTING EIG/xeigtstc EIG/xeigtstd EIG/xeigtsts EIG/xeigtstz LIN/xlintstc LIN/xlintstd LIN/xlintsts LIN/xlintstz LIN/xlintstds LIN/xlintstrfc LIN/xlintstrfd LIN/xlintstrfs LIN/xlintstrfz LIN/xlintstzc override_dh_auto_build-indep: ifeq (,$(filter nodoc,$(DEB_BUILD_OPTIONS))) $(MAKE) html # Remove useless doxygen-generated files find DOCS/explore-html/ \( -name '*.map' -or -name '*.md5' \) -delete $(MAKE) man # Remove directory reference files, because they include local build pathnames # (but don't delete some __*__.3 files) rm DOCS/man/man3/_[a-zA-Z]* endif override_dh_auto_test-arch: ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS))) # Run BLAS tests, output the result, and stop if one test fails LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) blas_testing cat BLAS/TESTING/*.out ! grep -q -i fail BLAS/TESTING/*.out # Run CBLAS tests, output the result, and stop if one test fails LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) cblas_testing cat CBLAS/testing/*.out ! grep -q -i fail CBLAS/testing/*.out # Run LAPACK tests, but don't stop if one test fails # Only a summary is displayed; full test results in TESTING/testing_results.txt LD_LIBRARY_PATH=$$(pwd):$$LD_LIBRARY_PATH $(MAKE) lapack_testing endif override_dh_makeshlibs: dh_makeshlibs -pliblapack3 -V "liblapack3 | liblapack.so.3" -n dh_makeshlibs -plibblas3 -V "libblas3 | libblas.so.3" -n dh_makeshlibs -a -Nliblapack3 -Nlibblas3 override_dh_shlibdeps: dh_shlibdeps -a -l $$(pwd) GENERATED_MAINTAINER_SCRIPTS := $(patsubst %.in,%,$(wildcard debian/*.postinst.in debian/*.prerm.in)) $(GENERATED_MAINTAINER_SCRIPTS): %: %.in sed "s%@DEB_HOST_MULTIARCH@%$(DEB_HOST_MULTIARCH)%g" < $< > $@ override_dh_install: $(GENERATED_MAINTAINER_SCRIPTS) dh_install override_dh_clean: dh_clean rm -f $(GENERATED_MAINTAINER_SCRIPTS)