[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