Blob Blame History Raw
Name:           python-polybori
Version:        0.7.1
Release:        3%{?dist}
Summary:        Framework for Boolean Rings
Group:          Development/Libraries
License:        GPLv2+
URL:            http://polybori.sourceforge.net/
Source0:        http://downloads.sourceforge.net/polybori/polybori-%{version}.tar.gz
Source1:        polybori.desktop
# Use system CUDD libraries instead of building the included CUDD sources
Patch0:         polybori-dont-build-libcudd.patch
# Adapt to m4ri 20110613
Patch1:         polybori-m4ri.patch
# Fix a broken import
Patch2:         polybori-import.patch

BuildRequires:  boost-devel
BuildRequires:  cudd-devel
BuildRequires:  cudd-static
BuildRequires:  desktop-file-utils
BuildRequires:  doxygen
BuildRequires:  gd-devel
BuildRequires:  m4ri-devel
BuildRequires:  pyparsing
BuildRequires:  PyQt4-devel
BuildRequires:  python2-devel
BuildRequires:  python-imaging-devel
BuildRequires:  scons
BuildRequires:  tex4ht
Requires:       ipython
Requires:       python-imaging
Requires:       pyparsing

%global __provides_exclude_from %{python_sitearch}/.*\\\.so$


%description
PolyBoRi is a special purpose computer algebra system for computations in
Boolean Rings. The core is a C++ library, which provides high-level data
types for Boolean polynomials and related structures. As a unique
approach, binary decision diagrams are used as internal storage type for
polynomial structures. On top of this, we provide a Python interface for
parsing of complex polynomial systems, as well as for sophisticated and
extendable strategies for Gröbner base computation.


%package        gui
Summary:        Qt GUI for %{name}
Group:          Applications/Engineering
Requires:       %{name}%{?_isa} = %{version}-%{release}
Requires:       PyQt4

%description    gui
Qt GUI for %{name}.


%package        docs
Summary:        Documentation for %{name}
Group:          Documentation

%description    docs
Documentation for %{name}.


%package        devel
Summary:        Development files for %{name}
Group:          Development/Libraries
Requires:       %{name}%{?_isa} = %{version}-%{release}
Requires:       boost-devel%{?_isa}
Requires:       cudd-devel%{?_isa}

%description    devel
Development headers and libraries for %{name}.


%package        static
Summary:        Static libraries for %{name}
Group:          Development/Libraries
Requires:       %{name}-devel%{?_isa} = %{version}-%{release}

%description    static
Static libraries for %{name}.


%prep
%setup -q -n polybori-0.7
%patch0
%patch1
%patch2

# Save a doc file
mv Singular/README README.Singular

# Remove private copy of system libs (cudd, m4ri, and singular)
rm -rf Cudd M4RI Singular
sed -r -i 's|^(#[[:blank:]]*include[[:blank:]]+)"(cudd.*)"|\1<\2>|' \
  polybori/include/CCuddDDFacade.h polybori/include/CCuddInterface.h \
  polybori/include/CDDOperations.h polybori/include/CRingCore.h \
  polybori/include/pbori_algo.h polybori/include/pbori_defs.h \
  polybori/src/BoolePolyRing.cc polybori/src/pbori_routines.cc \
  polybori/src/testobj.cc testsuite/src/monomial.cc

# Remove private copy of pyparsing
rm -f PyPolyBoRi/pyparsing.py

# Fix library path for 64 bit systems
if [ %{__isa_bits} = "64" ]; then
  sed -i -e "s|DevelInstPath('lib')|DevelInstPath('lib64')|" SConstruct
fi


%build
# scons = suck
# we have to build in the install section


%install
scons %{?_smp_mflags} install devel-install \
  PREFIX=$RPM_BUILD_ROOT%{_prefix} \
  INSTALLDIR=$RPM_BUILD_ROOT%{_datadir}/%{name} \
  DOCDIR=$RPM_BUILD_ROOT%{_docdir}/%{name} \
  MANDIR=$RPM_BUILD_ROOT%{_mandir} \
  PYINSTALLPREFIX=$RPM_BUILD_ROOT%{python_sitearch} \
  DEVEL_PREFIX=$RPM_BUILD_ROOT%{_prefix} \
  CCFLAGS="%{optflags} -I%{_includedir}/cudd -I%{_includedir}/m4ri" \
  LIBS="-lcudd -lcuddutil"

# Relink against a minimal set of libraries to eliminate rpmlint warnings
# about unused direct dependencies on libraries.  Also, scons produces shared
# libraries such that libgroebner contains all of the individual object files
# of libpolybori (instead of being linked to libpolybori), and the python
# interface PyPolyBoRi.so contains all of the individual object files of both
# libpolybori and libgroebner (instead of being linked to libgroebner).
g++ -o $RPM_BUILD_ROOT%{_libdir}/libpolybori-%{version}.so.0.0.0 -shared \
  -Wl,-soname,libpolybori-%{version}.so.0 polybori/src/*.os -nodefaultlibs \
  -lcudd -lcuddutil -lstdc++ -lc

g++ -o $RPM_BUILD_ROOT%{_libdir}/libgroebner-%{version}.so.0.0.0 -shared \
  -Wl,-soname,libgroebner-%{version}.so.0 groebner/src/*.os \
  -L$RPM_BUILD_ROOT%{_libdir} -lpolybori-%{version} -lgd -lm4ri

g++ -o $RPM_BUILD_ROOT%{python_sitearch}/polybori/PyPolyBoRi.so -shared \
  PyPolyBoRi/*.os -L$RPM_BUILD_ROOT%{_libdir} -lboost_python -lgroebner

# Empty header --- seems to be used, keep it for now
#rm $RPM_BUILD_ROOT%%{_includedir}/polybori/cacheopts.h

# Remove buildroot from a generated file
sed -i -e 's|%{buildroot}||' %{buildroot}%{_datadir}/%{name}/ipbori/ipythonrc-polybori

# Install the desktop file
cp -p %{SOURCE1} .
desktop-file-install --dir=$RPM_BUILD_ROOT%{_datadir}/applications \
  polybori.desktop


%post -p /sbin/ldconfig


%posttrans
update-desktop-database -q >& /dev/null || :


%postun
/sbin/ldconfig
if [ $1 -eq 0 ]; then
  update-desktop-database -q >& /dev/null || :
fi


%files
%defattr(-,root,root,-)
%doc LICENSE README README.Singular
%{_bindir}/ipbori
%{_mandir}/man1/ipbori.1*
%{_datadir}/%{name}
%{python_sitearch}/polybori
%{_libdir}/lib*.so.*
%exclude %{_datadir}/%{name}/gui


%files gui
%{_bindir}/PolyGUI
%{_datadir}/applications/polybori.desktop
%{_datadir}/%{name}/gui
%{_mandir}/man1/PolyGUI.1*


%files docs
%{_docdir}/%{name}


%files devel
%doc ChangeLog
%{_libdir}/lib*.so
%{_includedir}/polybori


%files static
%{_libdir}/lib*.a


%changelog
* Thu Jul 21 2011 Jerry James <loganjerry@gmail.com> - 0.7.1-3
- Rebuild for new m4ri and new boost
- Use new rpm 4.9 filter scheme

* Fri Jun 17 2011 Jerry James <loganjerry@gmail.com> - 0.7.1-2
- Rebuild for new m4ri
- Fix a broken python import that crashes the GUI

* Mon May 23 2011 Jerry James <loganjerry@gmail.com> - 0.7.1-1
- New upstream version

* Wed Apr 20 2011 Jerry James <loganjerry@gmail.com> - 0.7-1
- New upstream version
- Drop BuildRoot tag, clean script, and clean at start of install script
- Adapt to latest version of m4ri
- Add -gui subpackage

* Tue Feb 08 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-13
- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild

* Sun Feb 06 2011 Thomas Spura <tomspur@fedoraproject.org> - 0.5-12
- rebuild for new boost

* Wed Sep 29 2010 jkeating - 0.5-11
- Rebuilt for gcc bug 634757

* Fri Sep 24 2010 Dan Horák <dan[at]danny.cz> - 0.5-10
- add s390x and sparc64 to 64-bit platforms

* Tue Sep 14 2010 Toshio Kuratomi <toshio@fedoraproject.org> - 0.5-9
- Rebuilt for broken deps on old boost

* Thu Jul 22 2010 David Malcolm <dmalcolm@redhat.com> - 0.5-8
- Rebuilt for https://fedoraproject.org/wiki/Features/Python_2.7/MassRebuild

* Fri Jan 22 2010 Rahul Sundaram <sundaram@fedoraproject.org> - 0.5-7
- Rebuild for Boost soname bump

* Sun Jul 26 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 0.5-6
- Rebuilt for https://fedoraproject.org/wiki/Fedora_12_Mass_Rebuild

* Sat Mar 28 2009 Conrad Meyer <konrad@tylerc.org> - 0.5-5
- Add cudd-devel Requires to -devel subpackage.
- Link against cudd at build time.
- Fixed encoding of ChangeLog.

* Tue Mar 24 2009 Conrad Meyer <konrad@tylerc.org> - 0.5-4
- Fix SF.net source0.
- Fix License.
- Fix rpm defines (should be globals).
- Don't strip debugging information.
- Fix Requires.

* Mon Mar 23 2009 Conrad Meyer <konrad@tylerc.org> - 0.5-3
- Remove buildroot from an installed file (thanks, Mamoru).

* Wed Mar 18 2009 Conrad Meyer <konrad@tylerc.org> - 0.5-2
- Add BR on scons.

* Mon Dec 8 2008 Conrad Meyer <konrad@tylerc.org> - 0.5-1
- Initial package.