%global octavedir %{_datadir}/octave/site/m/Csdp Name: csdp Version: 6.2.0 Release: 2%{?dist} Summary: C library for SemiDefinite Programming License: CPL URL: https://projects.coin-or.org/Csdp/ Source0: http://www.coin-or.org/download/source/Csdp/Csdp-%{version}.tgz # Written by Jerry James for Octave Source1: Csdp.INDEX # Man pages written by Jerry James with text borrowed freely from the sources. # These man pages therefore have the same copyright and license as the code. Source2: %{name}.1 Source3: %{name}-theta.1 Source4: %{name}-graphtoprob.1 Source5: %{name}-complement.1 Source6: %{name}-rand_graph.1 # Fix a missing printf prototype Patch0: %{name}-printf.patch BuildRequires: gcc BuildRequires: openblas-devel Provides: coin-or-Csdp %description CSDP is a library of routines that implements a predictor corrector variant of the semidefinite programming algorithm of Helmberg, Rendl, Vanderbei, and Wolkowicz. The main advantages of this code are that it is written to be used as a callable subroutine, it is written in C for efficiency, the code runs in parallel on shared memory multiprocessor systems, and it makes effective use of sparsity in the constraint matrices. %package devel Summary: Header files for CSDP Requires: %{name}%{?_isa} = %{version}-%{release} %description devel This package contains the header files necessary to develop programs that use the CSDP library. %package tools Summary: Command line tools for working with CSDP Requires: %{name}%{?_isa} = %{version}-%{release} %description tools This package contains command-line wrappers around the CSDP library, including a solver, a program for computing the Lovasz Theta number of a graph, and some graph manipulation programs. Note that "csdp-" has been prefixed to some of the binary names, due to the generic nature of the names. %package octave Summary: Octave interface to CSDP Requires: %{name}-tools = %{version}-%{release}, octave BuildArch: noarch %description octave This package contains an Octave interface to the C library for SemiDefinite Programming. %prep %setup -q -n Csdp-%{version} %patch0 %build # We can't use the shipped build system. First, a static library is built, # but we want a shared library. Second, parallel make is broken; there are no # explicit dependencies between subdirectories. Third, the CFLAGS need to be # altered in various more-or-less drastic ways. Fourth, the existing makefiles # link all binaries with the entire set of libs, but not all binaries need all # libs. We build by hand to contain the pain. # Choose the CFLAGS we want CFLAGS="%{optflags} -I../include -I%{_includedir}/openblas -DNOSHORTS -DUSESIGTERM -DUSEGETTIME" if [ %{__isa_bits} = "64" ]; then CFLAGS+=" -DBIT64" fi sed -i -e "s|^CFLAGS=.*|CFLAGS=${CFLAGS}|" \ -e "s|^LIBS=.*|LIBS=-Wl,--as-needed $RPM_LD_FLAGS -L../lib -lsdp -lopenblas -lm|" \ solver/Makefile theta/Makefile # Build the shared library cd lib gcc ${CFLAGS} -DUSEOPENMP -fopenmp -fPIC -shared -Wl,--soname=libsdp.so.6 *.c \ -o libsdp.so.%{version} -Wl,--as-needed $RPM_LD_FLAGS -lgomp -lopenblas -lm ln -s libsdp.so.%{version} libsdp.so.6 ln -s libsdp.so.6 libsdp.so # Build the solver cd ../solver make %{?_smp_mflags} CFLAGS="$CFLAGS" LIBS="-L../lib -lsdp" # Build theta, but don't necessarily link with everything cd ../theta gcc $CFLAGS -c complement.c gcc $CFLAGS -o complement $RPM_LD_FLAGS complement.o gcc $CFLAGS -c rand_graph.c gcc $CFLAGS -o rand_graph $RPM_LD_FLAGS rand_graph.o make %{?_smp_mflags} CFLAGS="$CFLAGS" LIBS="-L../lib -lsdp" %install # Install the library mkdir -p $RPM_BUILD_ROOT%{_libdir} cp -pP lib/libsdp* $RPM_BUILD_ROOT%{_libdir} # Install the binaries mkdir -p $RPM_BUILD_ROOT%{_bindir} cp -p solver/csdp $RPM_BUILD_ROOT%{_bindir} cp -p theta/theta $RPM_BUILD_ROOT%{_bindir}/csdp-theta cp -p theta/graphtoprob $RPM_BUILD_ROOT%{_bindir}/csdp-graphtoprob cp -p theta/complement $RPM_BUILD_ROOT%{_bindir}/csdp-complement cp -p theta/rand_graph $RPM_BUILD_ROOT%{_bindir}/csdp-rand_graph # Install the header files mkdir -p $RPM_BUILD_ROOT%{_includedir}/csdp cp -p include/*.h $RPM_BUILD_ROOT%{_includedir}/csdp # Install the Octave interface mkdir -p $RPM_BUILD_ROOT%{octavedir} cp -p matlab/*.m $RPM_BUILD_ROOT%{octavedir} cp -p %{SOURCE1} $RPM_BUILD_ROOT%{octavedir}/INDEX # Install the man pages mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1 cp -p %{SOURCE2} %{SOURCE3} %{SOURCE4} %{SOURCE5} %{SOURCE6} \ $RPM_BUILD_ROOT%{_mandir}/man1 %post -p /sbin/ldconfig %postun -p /sbin/ldconfig %files %doc AUTHORS README doc/csdpuser.pdf %license LICENSE %{_libdir}/libsdp.so.* %files devel %doc doc/example.c %{_libdir}/libsdp.so %{_includedir}/%{name} %files tools %doc theta/README %{_bindir}/* %{_mandir}/man1/* %files octave %doc matlab/README %{octavedir} %changelog * Wed Aug 16 2017 Jerry James - 6.2.0-2 - Build with openblas instead of atlas * Sat Aug 5 2017 Jerry James - 6.2.0-1 - New upstream version - Provide coin-or-Csdp for parity with other coin-or packages - Add -printf patch to fix build failure - Switch from multithreaded atlas to single-threaded atlas * Wed Aug 02 2017 Fedora Release Engineering - 6.1.1-15 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild * Wed Jul 26 2017 Fedora Release Engineering - 6.1.1-14 - Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild * Fri Feb 10 2017 Fedora Release Engineering - 6.1.1-13 - Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild * Wed Dec 07 2016 Orion Poplawski - 6.1.1-12 - Rebuild for octave 4.2 * Wed Feb 03 2016 Fedora Release Engineering - 6.1.1-11 - Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild * Wed Jun 17 2015 Fedora Release Engineering - 6.1.1-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild * Thu Feb 12 2015 Jerry James - 6.1.1-9 - Link with RPM_LD_FLAGS - Use license macro - Minor spec file cleanups * Sat Aug 16 2014 Fedora Release Engineering - 6.1.1-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild * Sat Jun 07 2014 Fedora Release Engineering - 6.1.1-7 - Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild * Sat Sep 21 2013 Jerry James - 6.1.1-6 - Rebuild for atlas 3.10.1 * Sat Aug 03 2013 Fedora Release Engineering - 6.1.1-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild * Wed Feb 13 2013 Fedora Release Engineering - 6.1.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild * Wed Jul 18 2012 Fedora Release Engineering - 6.1.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild * Sat Jan 7 2012 Jerry James - 6.1.1-2 - Rebuild for GCC 4.7 * Fri Mar 18 2011 Jerry James - 6.1.1-1 - Initial RPM