Initial import.

This commit is contained in:
Jerry James 2011-06-07 21:03:30 -06:00
commit 57a046cf87
5 changed files with 217 additions and 0 deletions

2
.gitignore vendored
View file

@ -0,0 +1,2 @@
/DSDP-man.tar.xz
/DSDP5.8.tar.gz

11
DSDP-overflow.patch Normal file
View file

@ -0,0 +1,11 @@
--- examples/readsdpa.c.orig 2005-10-21 13:31:14.000000000 -0600
+++ examples/readsdpa.c 2011-05-21 13:26:38.967119006 -0600
@@ -107,7 +107,7 @@ int ReadSDPAFile(int argc,char *argv[]){
strncpy(thisline,argv[i+1],90); fp1=fopen(thisline,"r");runbenchmark=1; justone=0;
};
if (strncmp(argv[i],"-directory",8)==0){strncpy(directory,argv[i+1],90);}
- if (strncmp(argv[i],"-table",4)==0){strncpy(tablename,argv[i+1],90);};
+ if (strncmp(argv[i],"-table",4)==0){strncpy(tablename,argv[i+1],20);};
if (strncmp(argv[i],"-suffix",4)==0){strncpy(suffix,argv[i+1],20);};
if (strncmp(argv[i],"-save",5)==0){ strncpy(savefile,argv[i+1],40);saveit=1;};
if (strncmp(argv[i],"-dlogsummary",8)==0){printsummary=atoi(argv[i+1]);}

79
DSDP.Makefile Normal file
View file

@ -0,0 +1,79 @@
# The upstream Makefile is broken in multiple ways.
# 1. It doesn't allow for parallel building, due to many missing dependencies.
# 2. It only builds static libraries. Yes, there is an "oshared" target that
# supposedly builds a shared library. Try it and see how it works for you.
# 3. Each target starts by doing a clean. That means that if you want to build
# more than one target (we want to build 3), then each invocation of make
# destroys all the work you did in the previous target.
# 4. A number of targets explicitly invoke make, when they should have done
# their work in the context of the current invocation of make.
#
# Forget it! I'm writing my own Makefile.
CC = gcc
INCLUDES = -I/usr/include/atlas -Iinclude -Isrc/solver -Isrc/sdp -Isrc/vecmat
CFLAGS = @RPM_OPT_FLAGS@ -fPIC -DDSDP_TIME $(INCLUDES)
BFLAGS = @RPM_OPT_FLAGS@ -DDSDP_TIME -Iinclude -Lsrc
SONAME = -Wl,-h,libdsdp.so.5
SOLVER_OBJS = src/solver/dualalg.o src/solver/dualimpl.o \
src/solver/dsdpcops.o src/solver/dsdpschurmat.o src/solver/dsdpcg.o \
src/solver/dsdpconverge.o src/solver/dsdpsetup.o \
src/solver/dsdpcone.o src/solver/dsdpsetoptions.o \
src/solver/dsdpsetdata.o src/solver/dsdprescone.o \
src/solver/dsdpobjcone.o src/solver/dsdpprintout.o \
src/solver/dsdpschurmatadd.o src/solver/dsdpx.o
SDP_OBJS = src/sdp/dsdpstep.o src/sdp/printsdpa.o src/sdp/sdpconevec.o \
src/sdp/sdpsss.o src/sdp/dsdpadddata.o src/sdp/dsdpadddatamat.o \
src/sdp/dsdpblock.o src/sdp/sdpcone.o src/sdp/sdpkcone.o \
src/sdp/sdpcompute.o src/sdp/sdpconesetup.o src/sdp/dsdpdsmat.o \
src/sdp/dsdpdatamat.o src/sdp/dsdpdualmat.o src/sdp/dsdpxmat.o
LP_OBJS = src/lp/dsdplp.o
VECMAT_OBJS = src/vecmat/vech.o src/vecmat/vechu.o src/vecmat/drowcol.o \
src/vecmat/dlpack.o src/vecmat/dufull.o src/vecmat/sdpvec.o \
src/vecmat/identity.o src/vecmat/spds.o src/vecmat/zeromat.o \
src/vecmat/onemat.o src/vecmat/diag.o src/vecmat/rmmat.o \
src/vecmat/cholmat.o src/vecmat/cholmat2.o src/vecmat/dtrsm2.o \
src/vecmat/sdpmatx.o src/vecmat/sdpnfac.o src/vecmat/sdporder.o \
src/vecmat/sdpalloc.o src/vecmat/sdpsymb.o src/vecmat/sdpxlist.o \
src/vecmat/sdpdvct.o src/vecmat/sdpexit.o
SYS_OBJS = src/sys/dsdperror.o src/sys/dsdploginfo.o src/sys/dsdplog.o \
src/sys/dsdptime.o
BOUNDS_OBJS = src/bounds/dbounds.o src/bounds/allbounds.o
LIB_OBJS = $(SOLVER_OBJS) $(SDP_OBJS) $(LP_OBJS) $(VECMAT_OBJS) $(SYS_OBJS) \
$(BOUNDS_OBJS)
EXAMPLES = examples/maxcut examples/theta examples/dsdp5 examples/stable \
examples/color
all: $(EXAMPLES)
src/libdsdp.so.@version@: $(LIB_OBJS)
$(CC) $(CFLAGS) -shared $(SONAME) -o $@ $^ -L@libdir@/atlas -llapack
src/libdsdp.so.5: src/libdsdp.so.@version@
ln -s libdsdp.so.@version@ $@
src/libdsdp.so: src/libdsdp.so.5
ln -s libdsdp.so.5 $@
examples/maxcut: examples/maxcut.c src/libdsdp.so
$(CC) $(BFLAGS) $< -o $@ -ldsdp
examples/theta: examples/theta.c src/libdsdp.so
$(CC) $(BFLAGS) $< -o $@ -ldsdp
examples/dsdp5: examples/readsdpa.c src/libdsdp.so
$(CC) $(BFLAGS) $< -o $@ -ldsdp
examples/stable: examples/stable.c src/libdsdp.so
$(CC) $(BFLAGS) $< -o $@ -ldsdp
examples/color: examples/color.c src/libdsdp.so
$(CC) $(BFLAGS) $< -o $@ -ldsdp

123
DSDP.spec Normal file
View file

@ -0,0 +1,123 @@
Name: DSDP
Version: 5.8
Release: 2%{?dist}
Summary: Software for semidefinite programming
Group: Applications/Engineering
License: DSDP
URL: http://www.mcs.anl.gov/hs/software/DSDP/
Source0: http://www.mcs.anl.gov/hs/software/DSDP/DSDP%{version}.tar.gz
# Man pages written by Jerry James using text from the sources.
# Therefore, the man pages have the same copyright and license as the source.
Source1: DSDP-man.tar.xz
# A substitute makefile to fix the brokenness of the distributed Makefiles
Source2: DSDP.Makefile
# This patch fixes a buffer overflow in one of the examples. It has not yet
# been sent upstream.
Patch0: DSDP-overflow.patch
BuildRequires: atlas-devel
BuildRequires: doxygen
BuildRequires: tex(latex)
%description
DSDP is a free open source implementation of an interior-point method
for semidefinite programming. It provides primal and dual solutions,
exploits low-rank structure and sparsity in the data, and has relatively
low memory requirements for an interior-point method. It allows
feasible and infeasible starting points and provides approximate
certificates of infeasibility when no feasible solution exists. The
dual-scaling algorithm implemented in this package has a convergence
proof and worst-case polynomial complexity under mild assumptions on the
data. The software can be used as a set of subroutines, through Matlab,
or by reading and writing to data files. Furthermore, the solver offers
scalable parallel performance for large problems and a well documented
interface. Some of the most popular applications of semidefinite
programming and linear matrix inequalities (LMI) are model control,
truss topology design, and semidefinite relaxations of combinatorial and
global optimization problems.
%package devel
Summary: Headers and libraries for developing with DSDP
Group: Development/Libraries
Requires: %{name}%{?_isa} = %{version}-%{release}
%description devel
Headers and libraries for developing with DSDP.
%package examples
Summary: Example programs that use DSDP
Group: Applications/Engineering
Requires: %{name}%{?_isa} = %{version}-%{release}
%description examples
Examples programs that use the DSDP library.
%prep
%setup -q -n %{name}%{version}
%setup -q -n %{name}%{version} -T -D -a 1
%patch0
sed -e "s|@RPM_OPT_FLAGS@|${RPM_OPT_FLAGS}|" \
-e "s|@libdir@|%{_libdir}|" \
-e "s|@version@|%{version}|" \
%{SOURCE2} > Makefile
%build
make %{?_smp_mflags}
cd docs
unzip DSDP5-api-html.zip
cd dox
rm -fr html images
doxygen
%install
# Install the library
mkdir -p $RPM_BUILD_ROOT%{_libdir}
install -p -m 0755 src/libdsdp.so.%{version} $RPM_BUILD_ROOT%{_libdir}
ln -s libdsdp.so.%{version} $RPM_BUILD_ROOT%{_libdir}/libdsdp.so.5
ln -s libdsdp.so.5 $RPM_BUILD_ROOT%{_libdir}/libdsdp.so
# Install the header files
mkdir -p $RPM_BUILD_ROOT%{_includedir}
cp -a include $RPM_BUILD_ROOT%{_includedir}/DSDP
# Install the example programs with a dsdp- prefix, except for dsdp5
mkdir -p $RPM_BUILD_ROOT%{_bindir}
for f in maxcut theta stable color; do
install -p -m 0755 examples/$f $RPM_BUILD_ROOT%{_bindir}/dsdp-$f
done
install -p -m 0755 examples/dsdp5 $RPM_BUILD_ROOT%{_bindir}
# Install the man pages
mkdir -p $RPM_BUILD_ROOT%{_mandir}/man1
cd man
for f in *.1; do
sed "s/@VERSION@/%{version}/" $f > $RPM_BUILD_ROOT%{_mandir}/man1/$f
done
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%files
%doc dsdp-license docs/DSDP5-Exe-UserGuide.pdf docs/DSDP5-P1289-0905.pdf
%{_libdir}/libdsdp.so.*
%files devel
%doc docs/DSDP5-API-UserGuide.pdf docs/dox
%{_libdir}/libdsdp.so
%{_includedir}/DSDP
%files examples
%doc examples/Contents
%{_bindir}/*
%{_mandir}/man1/*
%changelog
* Tue Jun 7 2011 Jerry James <loganjerry@gmail.com> - 5.8-2
- Ensure the libraries are installed with the execute bit on
- Name the license according to the response from Fedora-Legal
* Wed May 25 2011 Jerry James <loganjerry@gmail.com> - 5.8-1
- Initial RPM

View file

@ -0,0 +1,2 @@
faf430dc765c97f0c60737e8d85d09aa DSDP-man.tar.xz
37c15a3c6c3f13e31262f65ac4364b5e DSDP5.8.tar.gz