[coin-or-Ipopt] Build openmpi sub-package.

Antonio Trande sagitter at fedoraproject.org
Tue Sep 23 08:44:00 UTC 2014


commit 4b72e3cc347f68db4ec2a4bfcd87867e396e8670
Author: sagitter <anto.trande at gmail.com>
Date:   Tue Sep 23 10:43:54 2014 +0200

    Build openmpi sub-package.

 coin-or-Ipopt-mumps.patch |   13 +-
 coin-or-Ipopt.spec        |  278 +++++++++++++++++++++++++++++++++------------
 2 files changed, 213 insertions(+), 78 deletions(-)
---
diff --git a/coin-or-Ipopt-mumps.patch b/coin-or-Ipopt-mumps.patch
index f75c2a6..fffe0a9 100644
--- a/coin-or-Ipopt-mumps.patch
+++ b/coin-or-Ipopt-mumps.patch
@@ -1,6 +1,6 @@
-diff -up Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp.orig Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
---- Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp.orig	2014-07-09 23:21:29.088802597 -0300
-+++ Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp	2014-07-09 23:27:02.036815347 -0300
+diff -up Ipopt-3.11.9/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp.orig Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp
+--- Ipopt-3.11.9/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp.orig	2014-07-09 23:21:29.088802597 -0300
++++ Ipopt-3.11.9/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp	2014-07-09 23:27:02.036815347 -0300
 @@ -10,11 +10,8 @@
  //           (major revision)
  //           (incorporated by AW on 2006-11-11 into Ipopt package)
@@ -15,9 +15,10 @@ diff -up Ipopt-3.11.8/src/Algorithm/LinearSolvers/IpMumpsSolverInterface.cpp.ori
  
  #include "IpMumpsSolverInterface.hpp"
  
-diff -up Ipopt-3.11.8/src/Interfaces/Makefile.in.orig Ipopt-3.11.8/src/Interfaces/Makefile.in
---- Ipopt-3.11.8/src/Interfaces/Makefile.in.orig	2014-07-09 23:22:07.832804081 -0300
-+++ Ipopt-3.11.8/src/Interfaces/Makefile.in	2014-07-09 23:22:11.020804203 -0300
+
+diff -up Ipopt-3.11.9/src/Interfaces/Makefile.in.orig Ipopt-3.11.8/src/Interfaces/Makefile.in
+--- Ipopt-3.11.9/src/Interfaces/Makefile.in.orig	2014-07-09 23:22:07.832804081 -0300
++++ Ipopt-3.11.9/src/Interfaces/Makefile.in	2014-07-09 23:22:11.020804203 -0300
 @@ -391,7 +391,7 @@ libipopt_la_DEPENDENCIES = $(IPALLLIBS)
  libipopt_la_LDFLAGS = $(LT_LDFLAGS)
  
diff --git a/coin-or-Ipopt.spec b/coin-or-Ipopt.spec
index 565e32d..1866027 100644
--- a/coin-or-Ipopt.spec
+++ b/coin-or-Ipopt.spec
@@ -1,42 +1,49 @@
-%global		module		Ipopt
-
-Name:		coin-or-%{module}
-Group:		Applications/Engineering
-Summary:	Interior Point OPTimizer
-Version:	3.11.9
-Release:	1%{?dist}
-License:	EPL and GPLv2+
-URL:		https://projects.coin-or.org/%{module}
-Source0:	http://www.coin-or.org/download/pkgsource/%{module}/%{module}-%{version}.tgz
-BuildRequires:	atlas-devel
-BuildRequires:	blas-devel
-BuildRequires:	blacs-openmpi-devel
-BuildRequires:	gcc-gfortran
-BuildRequires:	doxygen
-BuildRequires:	glpk-devel
-BuildRequires:	graphviz
-BuildRequires:	lapack-devel
-BuildRequires:	MUMPS-devel
-%if 0%{?fedora} >= 21
-BuildRequires:	MUMPS-openmpi-devel
-%endif
-BuildRequires:	openmpi-devel
-BuildRequires:	scalapack-openmpi-devel
-BuildRequires:	openssh-clients
-BuildRequires:	pkgconfig
-BuildRequires:	readline-devel
+%global module Ipopt
+
+# Define a macro for calling ../configure instead of ./configure
+%global dconfigure %(printf %%s '%configure' | sed 's!\./configure!../configure!g')
+
+## Define libraries' destination
+%global _incmpidir %{_includedir}/openmpi-%{_arch}
+%global _libmpidir %{_libdir}/openmpi/lib
+
+## Define if use openmpi or not
+%global with_openmpi 1
+
+Name:           coin-or-%{module}
+Group:          Applications/Engineering
+Summary:        Interior Point OPTimizer
+Version:        3.11.9
+Release:        2%{?dist}
+License:        EPL and GPLv2+
+URL:            https://projects.coin-or.org/%{module}
+Source0:        http://www.coin-or.org/download/pkgsource/%{module}/%{module}-%{version}.tgz
+BuildRequires:  atlas-devel
+BuildRequires:  blas-devel
+BuildRequires:  gcc-gfortran
+BuildRequires:  doxygen
+BuildRequires:  glpk-devel
+BuildRequires:  graphviz
+BuildRequires:  lapack-devel
+BuildRequires:  MUMPS-devel >= 4.10.0-21
+BuildRequires:  openssh-clients
+BuildRequires:  pkgconfig
+BuildRequires:  readline-devel
+
+Requires:       %{name}-common = %{version}-%{release}
 
 # Properly handle DESTDIR
-Patch0:		%{name}-pkgconfig.patch
+Patch0:	%{name}-pkgconfig.patch
 
 # Install documentation in standard rpm directory
-Patch1:		%{name}-docdir.patch
+Patch1:	%{name}-docdir.patch
 
 # Build with parallel mumps solver
-Patch2:		%{name}-mumps.patch
+Patch2:	%{name}-mumps.patch
 
 # Correct underlink of libdl
-Patch3:		%{name}-underlink.patch
+Patch3:	%{name}-underlink.patch
+
 
 %description
 Ipopt (Interior Point OPTimizer, pronounced eye-pea-Opt) is a software
@@ -61,88 +68,215 @@ corresponding components of g_L and g_U to the same value.
 Summary:	Development files for %{name}
 Group:		Development/Libraries
 Requires:	coin-or-CoinUtils-devel
-Requires:	MUMPS-devel
-%if 0%{?fedora} >= 21
-Requires:	MUMPS-openmpi-devel
-%endif
+Requires:	MUMPS-devel >= 4.10.0-21
 Requires:	%{name}%{?_isa} = %{version}-%{release}
 
 %description    devel
 The %{name}-devel package contains libraries and header files for
 developing applications that use %{name}.
 
-%package	doc
+%package	common
 Summary:	Documentation files for %{name}
-Group:		Documentation
-Requires:	%{name} = %{version}-%{release}
 BuildArch:	noarch
 
-%description	doc
-This package contains the documentation for %{name}.
+%description	common
+This package contains the documentation
+and license files for %{name}.
+
+########################################################
+%if 0%{?with_openmpi}
+%package openmpi
+Summary: %{name} compiled against openmpi
+BuildRequires:	MUMPS-openmpi-devel >= 4.10.0-21
+BuildRequires:	blacs-openmpi-devel
+BuildRequires:	openmpi-devel
+BuildRequires:	scalapack-openmpi-devel
+
+Requires: %{name}-common = %{version}-%{release}
+Requires: openmpi
+%description openmpi
+%{name} libraries compiled against openmpi
+
+%package openmpi-devel
+Summary: The %{name} headers and development-related files
+Requires: %{name}-openmpi%{?_isa} = %{version}-%{release}
+%description openmpi-devel
+Shared links, header files for %{name}.
+%endif
+##########################################################
 
 %prep
 %setup -q -n %{module}-%{version}
 %patch0 -p1
 %patch1 -p1
-%patch2 -p1
 %patch3 -p1
 
 %build
-CFLAGS="%{optflags} -DHAVE_MPI_INITIALIZED=1"
-CXXFLAGS="%{optflags} -DHAVE_MPI_INITIALIZED=1"
-%_openmpi_load
-%configure							\
-%if 0%{?fedora} >= 21
-	--with-mumps-lib="-L$MPI_LIB -ldmumps"			\
-%else
-	--with-mumps-lib="-ldmumps"				\
-%endif
-	--with-mumps-incdir=%{_includedir}/MUMPS
 
-# Kill rpaths
+#######################################################
+## Build serial version
+
+mkdir -p %{name}-%{version}-serial
+cd %{name}-%{version}-serial
+CFLAGS="%{optflags} -DIPOPT_BUILD -DHAVE_MPI_INITIALIZED=0 -I%{_includedir}/MUMPS"
+LDFLAGS="-L%{_libdir} -ldmumps -lblas -llapack"
+CXXFLAGS="%{optflags} -DIPOPT_BUILD -DHAVE_MPI_INITIALIZED=0 -I%{_includedir}/MUMPS"
+CXXLIBS="-L%{_libdir} -ldmumps -lblas -llapack"
+%dconfigure CC=gcc CXX=g++ F77=gfortran CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
+            LDFLAGS="$LDFLAGS" CXXLIBS="$CXXLIBS" \
+ --with-mumps-incdir=%{_includedir}/MUMPS --with-mumps-lib="-L%{_libdir} -ldmumps" \
+ --with-blas-incdir=%{_includedir}/lapacke --with-blas-lib="-L%{_libdir} -lblas" \
+ --with-lapack-incdir=%{_includedir}/lapacke --with-lapack-lib="-L%{_libdir} -llapack"
+
 sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
 sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
 
-# do not block waiting for input
 echo 'LATEX_BATCHMODE = YES' >> doxydoc/doxygen.conf
 
-make %{?_smp_mflags}						\
-	CFLAGS="$CFLAGS -I$MPI_INCLUDE -DIPOPT_BUILD"		\
-	CXXFLAGS="$CXXFLAGS -I$MPI_INCLUDE -DIPOPT_BUILD"	\
-	all doxydoc
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{_libdir}
+make %{?_smp_mflags} all doxydoc
+cd ..
+
+
+#######################################################
+
+#######################################################
+## Build MPI version
+%if 0%{?with_openmpi}
+patch -p1 < %{PATCH2}
+
+mkdir -p %{name}-%{version}-openmpi
+cd %{name}-%{version}-openmpi
+%{_openmpi_load}
+CFLAGS="%{optflags} -DHAVE_MPI_INITIALIZED=1 -I%{_includedir}/openmpi-%{_arch} -DIPOPT_BUILD"
+LDFLAGS="-L%{_libdir}/openmpi/lib -lmpi -lmpi_cxx -lmpi_mpifh -lmpiblacs -lscalapack -ldmumps"
+CXXFLAGS="%{optflags} -DHAVE_MPI_INITIALIZED=1 -I%{_includedir}/openmpi-%{_arch} -DIPOPT_BUILD"
+CXXLIBS="-L%{_libdir}/openmpi/lib -lmpi -lmpi_cxx -lmpi_mpifh -lmpiblacs -lscalapack -ldmumps" 
+%dconfigure --with-mumps-incdir=%{_includedir}/openmpi-%{_arch} --with-mumps-lib="-L%{_libdir}/openmpi/lib -ldmumps" \
+            MPICC=%{_libdir}/openmpi/bin/mpicc \
+            MPICXX=%{_libdir}/openmpi/bin/mpic++ \
+            MPIF77=%{_libdir}/openmpi/bin/mpifort \
+            ADD_CFLAGS="-fopenmp" \
+            ADD_FFLAGS="-fopenmp" \
+            ADD_CXXFLAGS="-fopenmp" \ 
+            CFLAGS="$CFLAGS" CXXFLAGS="$CXXFLAGS" \
+            LDFLAGS="$LDFLAGS" CXXLIBS="$CXXLIBS" 
+sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
+sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
+export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:%{_libdir}/openmpi/lib 
+make %{?_smp_mflags} all
+%{_openmpi_unload}
+cd ..
+%endif
+
+%clean
+rm -rf $RPM_BUILD_ROOT
 
 %install
-make install DESTDIR=%{buildroot}
-rm -f %{buildroot}%{_libdir}/*.la
 
-cp -far doxydoc/html %{buildroot}%{_docdir}/%{name}
+#######################################################
+## Install MPI version
+%if 0%{?with_openmpi}
+
+mkdir -p $RPM_BUILD_ROOT%{_libmpidir}
+mkdir -p $RPM_BUILD_ROOT%{_incmpidir}
+mkdir -p %{name}-%{version}-openmpi/headers
+
+cp -p %{name}-%{version}-openmpi/src/Interfaces/.libs/libipopt.so* \
+       $RPM_BUILD_ROOT%{_libmpidir}
+
+cd %{name}-%{version}-openmpi
+ for i in `find ./.* -type f \( -name "*.h" -o -name "*.hpp" \)`; do
+ cp -p $i headers
+done
+cd ..
+
+##Copy MPI header files
+install -p -m 644 %{name}-%{version}-openmpi/headers/* $RPM_BUILD_ROOT%{_incmpidir}
+
+%endif
+
+#######################################################
+## Install serial version
+
+mkdir -p $RPM_BUILD_ROOT%{_libdir}
+mkdir -p $RPM_BUILD_ROOT%{_libdir}/pkgconfig
+mkdir -p $RPM_BUILD_ROOT%{_includedir}/coin
+mkdir -p $RPM_BUILD_ROOT%{_docdir}/%{name}
+
+mkdir -p %{name}-%{version}-serial/headers
+
+##Copy libraries
+cp -p %{name}-%{version}-serial/src/Interfaces/.libs/libipopt.so* \
+       $RPM_BUILD_ROOT%{_libdir}
+install -p -m 644 %{name}-%{version}-serial/ipopt.pc $RPM_BUILD_ROOT%{_libdir}/pkgconfig
+
+cd %{name}-%{version}-serial
+ for i in `find ./.* -type f \( -name "*.h" -o -name "*.hpp" \)`; do
+ cp -p $i headers
+done
+cd ..
+
+##Copy header and documentation files
+install -p -m 644 %{name}-%{version}-serial/headers/* $RPM_BUILD_ROOT%{_includedir}/coin
+cp -far %{name}-%{version}-serial/doxydoc/html $RPM_BUILD_ROOT%{_docdir}/%{name}
+cp AUTHORS LICENSE
+
+ln -sf %{_libdir}/libipopt.so.1.9.9 $RPM_BUILD_ROOT%{_libdir}/libipopt.so
+
+ln -sf %{_libmpidir}/libipopt.so.1.9.9 $RPM_BUILD_ROOT%{_libmpidir}/libipopt.so
+
+#######################################################
 
-# https://projects.coin-or.org/Ipopt/ticket/75
 %check
-%_openmpi_load
-LD_LIBRARY_PATH=%{buildroot}%{_libdir}:$LD_LIBRARY_PATH make test
 
-%post -p /sbin/ldconfig
+cd %{name}-%{version}-serial
+LD_LIBRARY_PATH=$RPM_BUILD_ROOT%{_libdir}:$LD_LIBRARY_PATH make test
+cd ..
+
+%{_openmpi_load}
+cd %{name}-%{version}-openmpi
+LD_LIBRARY_PATH=$RPM_BUILD_ROOT%{_libmpidir}:$LD_LIBRARY_PATH make test
+cd ..
+%{_openmpi_unload}
 
+%post -p /sbin/ldconfig
 %postun -p /sbin/ldconfig
 
 %files
-%dir %{_docdir}/%{name}
-%doc %{_docdir}/%{name}/AUTHORS
-%doc %{_docdir}/%{name}/ipopt*.txt
-%doc %{_docdir}/%{name}/LICENSE
-%doc %{_docdir}/%{name}/README
 %{_libdir}/*.so.*
 
-%files		devel
+%files	devel
 %{_includedir}/coin/*
 %{_libdir}/*.so
-%{_libdir}/pkgconfig/*
+%{_libdir}/pkgconfig/*.pc
+
+#######################################################
+## Install MPI version
+%if 0%{?with_openmpi}
+
+%files openmpi
+%{_libmpidir}/*.so.*
 
-%files		doc
+%files openmpi-devel
+%{_libmpidir}/*.so
+%{_incmpidir}/*
+
+%endif
+
+%files common
+%doc AUTHORS LICENSE README
+%dir %{_docdir}/%{name}
 %{_docdir}/%{name}/html
 
 %changelog
+* Tue Sep 09 2014 Antonio Trande <sagitterATfedoraproject.org> - 3.11.9-2
+- Performed conditional openmpi build macro
+- Built libraries against OpenMPI
+- Built -openmpi sub-packages
+- Built a common sub-package
+- Performed serial and parallel tests
+
 * Sat Aug 30 2014 pcpa <paulo.cesar.pereira.de.andrade at gmail.com> - 3.11.9-1
 - Update to latest upstream release (#1131008)
 


More information about the scm-commits mailing list