Jerry James 575c8c7
# Python packaging notes:
Jerry James 575c8c7
# 1. Upstream does not yet support python 3, so we build for python 2 only.
Jerry James 575c8c7
# 2. The python build does not link against the library stored in _libdir,
Jerry James 575c8c7
#    because it has to be built differently.  Look for instances of
Jerry James 575c8c7
#    "#ifdef ABC_PYTHON_EMBED ... #endif" in the source code.  Hence, the
Jerry James 575c8c7
#    python2 subpackage is indepedent of the -libs subpackage.
Jerry James 575c8c7
Jerry James 575c8c7
# Upstream doesn't make releases.  We have to check the code out of Mercurial.
Jerry James 575c8c7
%global owner   alanmi
0adf615
%global commit  13cb576b8538
0adf615
%global hgdate  20150306
Jerry James 575c8c7
Jerry James 575c8c7
Name:           abc
Jerry James 575c8c7
Version:        1.01
0adf615
Release:        4.hg%{hgdate}%{?dist}
Jerry James 575c8c7
Summary:        Sequential logic synthesis and formal verification
Jerry James 575c8c7
Jerry James 575c8c7
# This would be MIT, but we link with readline
Jerry James 575c8c7
License:        GPLv3+
Jerry James 575c8c7
URL:            http://www.eecs.berkeley.edu/~alanmi/abc/abc.htm
Jerry James 575c8c7
Source0:        https://bitbucket.org/%{owner}/%{name}/get/%{commit}.zip
Jerry James 575c8c7
# Man page created by Jerry James using upstream text; hence, it is covered by
Jerry James 575c8c7
# the same copyright and license as the code.
Jerry James 575c8c7
Source1:        %{name}.1
Jerry James 575c8c7
# Fedora-specific patch: do not use the bundled libraries
Jerry James 575c8c7
Patch0:         %{name}-bundlelib.patch
Jerry James 575c8c7
# Fedora-specific patch: build a shared library instead of a static library
Jerry James 575c8c7
Patch1:         %{name}-sharedlib.patch
Jerry James 575c8c7
Jerry James 575c8c7
BuildRequires:  bzip2-devel
Jerry James 575c8c7
BuildRequires:  python2-devel
Jerry James 575c8c7
BuildRequires:  readline-devel
Jerry James 575c8c7
BuildRequires:  swig
Jerry James 575c8c7
BuildRequires:  zlib-devel
Jerry James 575c8c7
Jerry James 575c8c7
Requires:       %{name}-libs%{?_isa} = %{version}-%{release}
Jerry James 575c8c7
Jerry James 575c8c7
%description
Jerry James 575c8c7
ABC is a growing software system for synthesis and verification of
Jerry James 575c8c7
binary sequential logic circuits appearing in synchronous hardware
Jerry James 575c8c7
designs.  ABC combines scalable logic optimization based on And-Inverter
Jerry James 575c8c7
Graphs (AIGs), optimal-delay DAG-based technology mapping for look-up
Jerry James 575c8c7
tables and standard cells, and innovative algorithms for sequential
Jerry James 575c8c7
synthesis and verification.
Jerry James 575c8c7
Jerry James 575c8c7
ABC provides an experimental implementation of these algorithms and a
Jerry James 575c8c7
programming environment for building similar applications.  Future
Jerry James 575c8c7
development will focus on improving the algorithms and making most of
Jerry James 575c8c7
the packages stand-alone.  This will allow the user to customize ABC for
Jerry James 575c8c7
their needs as if it were a toolbox rather than a complete tool.
Jerry James 575c8c7
Jerry James 575c8c7
%package libs
Jerry James 575c8c7
Summary:        Library for sequential synthesis and verification
Jerry James 575c8c7
Jerry James 575c8c7
%description libs
Jerry James 575c8c7
This package contains the core functionality of ABC as a shared library.
Jerry James 575c8c7
Jerry James 575c8c7
%package devel
Jerry James 575c8c7
Summary:        Headers and libraries for developing with ABC
Jerry James 575c8c7
Requires:       %{name}-libs%{?_isa} = %{version}-%{release}
Jerry James 575c8c7
Jerry James 575c8c7
%description devel
Jerry James 575c8c7
Headers and libraries for developing applications that use ABC.
Jerry James 575c8c7
Jerry James 575c8c7
%package python2
Jerry James 575c8c7
Summary:        Python 2 interface to ABC
Jerry James 575c8c7
Jerry James 575c8c7
%description python2
Jerry James 575c8c7
Python 2 interface to ABC
Jerry James 575c8c7
Jerry James 575c8c7
%prep
Jerry James 575c8c7
%setup -q -c
Jerry James 575c8c7
pushd %{owner}-%{name}-%{commit}
Jerry James 575c8c7
%patch0
Jerry James 575c8c7
%patch1
Jerry James 575c8c7
Jerry James 575c8c7
# Do not use the bundled libraries
Jerry James 575c8c7
rm -fr lib src/misc/{bzlib,zlib} src/sat/bsat2
Jerry James 575c8c7
Jerry James 575c8c7
# Fix end of line encodings
Jerry James 575c8c7
for fil in readme.md readmeaig; do
Jerry James 575c8c7
  sed -i.orig 's/\r//' ${fil}
Jerry James 575c8c7
  touch -r ${fil}.orig ${fil}
Jerry James 575c8c7
  rm -f ${fil}.orig
Jerry James 575c8c7
done
Jerry James 575c8c7
popd
Jerry James 575c8c7
Jerry James 575c8c7
# Prepare for the python 2 build
Jerry James 575c8c7
cp -a %{owner}-%{name}-%{commit} %{name}-python2
Jerry James 575c8c7
Jerry James 575c8c7
# Set the version number in the man page
Jerry James 575c8c7
sed 's/@VERSION@/%{version} (%{hgdate})/' %{SOURCE1} > %{name}.1
Jerry James 575c8c7
touch -r %{SOURCE1} %{name}.1
Jerry James 575c8c7
Jerry James 575c8c7
%build
Jerry James 575c8c7
# Build the library and binary
Jerry James 575c8c7
pushd %{owner}-%{name}-%{commit}
Jerry James 575c8c7
make %{?_smp_mflags} libabc.so OPTFLAGS="%{optflags} -fPIC -DNDEBUG" \
Jerry James 575c8c7
  LD="g++ $RPM_LD_FLAGS"
Jerry James 575c8c7
g++ src/base/main/main.o -o %{name} -L. -labc
Jerry James 575c8c7
popd
Jerry James 575c8c7
Jerry James 575c8c7
# Build for python 2
Jerry James 575c8c7
pushd %{name}-python2
Jerry James 575c8c7
make libabc.a %{?_smp_mflags} OPTFLAGS="%{optflags} -fPIC -DNDEBUG" \
Jerry James 575c8c7
  LD="g++ $RPM_LD_FLAGS" ABC_PYTHON="%{__python2}"
Jerry James 575c8c7
cd src/python
Jerry James 575c8c7
%{__python2} setup.py build
Jerry James 575c8c7
popd
Jerry James 575c8c7
Jerry James 575c8c7
%install
Jerry James 575c8c7
pushd %{owner}-%{name}-%{commit}
Jerry James 575c8c7
# Install the library
Jerry James 575c8c7
mkdir -p %{buildroot}%{_libdir}
Jerry James 575c8c7
install -p -m 0755 lib%{name}.so.0.0.0 %{buildroot}%{_libdir}
Jerry James 575c8c7
ln -s lib%{name}.so.0.0.0 %{buildroot}%{_libdir}/lib%{name}.so.0
Jerry James 575c8c7
ln -s lib%{name}.so.0 %{buildroot}%{_libdir}/lib%{name}.so
Jerry James 575c8c7
Jerry James 575c8c7
# Install the header files
270dae4
pushd src
Jerry James 575c8c7
mkdir -p %{buildroot}%{_includedir}/%{name}
270dae4
tar -cBf - $(find -O3 . -name \*.h) | \
270dae4
  (cd %{buildroot}%{_includedir}/%{name}; tar -xBf -)
270dae4
popd
Jerry James 575c8c7
Jerry James 575c8c7
# Install the binary
Jerry James 575c8c7
mkdir -p %{buildroot}%{_bindir}
Jerry James 575c8c7
install -p -m 0755 %{name} %{buildroot}%{_bindir}
Jerry James 575c8c7
popd
Jerry James 575c8c7
Jerry James 575c8c7
# Install the man page
Jerry James 575c8c7
mkdir -p %{buildroot}%{_mandir}/man1
Jerry James 575c8c7
install -p -m 0644 %{name}.1 %{buildroot}%{_mandir}/man1
Jerry James 575c8c7
Jerry James 575c8c7
# Install the python2 interface
Jerry James 575c8c7
pushd %{name}-python2
Jerry James 575c8c7
cd src/python
Jerry James 575c8c7
%{__python2} setup.py install -O1 --skip-build --root %{buildroot}
Jerry James 575c8c7
mkdir %{buildroot}%{python2_sitearch}/%{name}
Jerry James 575c8c7
mv %{buildroot}%{python2_sitearch}/*.py* %{buildroot}%{python2_sitearch}/*.so \
Jerry James 575c8c7
   %{buildroot}%{python2_sitearch}/%{name}
Jerry James 575c8c7
chmod 0755 %{buildroot}%{python2_sitearch}/%{name}/*.so
Jerry James 575c8c7
popd
Jerry James 575c8c7
Jerry James 575c8c7
%post libs -p /sbin/ldconfig
Jerry James 575c8c7
Jerry James 575c8c7
%postun libs -p /sbin/ldconfig
Jerry James 575c8c7
Jerry James 575c8c7
%files
Jerry James 575c8c7
%doc %{owner}-%{name}-%{commit}/readme.md %{owner}-%{name}-%{commit}/readmeaig
Jerry James 575c8c7
%{_bindir}/%{name}
Jerry James 575c8c7
%{_mandir}/man1/%{name}*
Jerry James 575c8c7
Jerry James 575c8c7
%files libs
Jerry James 575c8c7
%license %{owner}-%{name}-%{commit}/copyright.txt
Jerry James 575c8c7
%{_libdir}/lib%{name}.so.*
Jerry James 575c8c7
Jerry James 575c8c7
%files devel
Jerry James 575c8c7
%{_includedir}/%{name}/
Jerry James 575c8c7
%{_libdir}/lib%{name}.so
Jerry James 575c8c7
Jerry James 575c8c7
%files python2
Jerry James 575c8c7
%license %{owner}-%{name}-%{commit}/copyright.txt
Jerry James 575c8c7
%{python2_sitearch}/*
Jerry James 575c8c7
Jerry James 575c8c7
%changelog
0adf615
* Sat Mar  7 2015 Jerry James <loganjerry@gmail.com> - 1.01-4.hg20150306
0adf615
- Update to latest mercurial snapshot
0adf615
270dae4
* Thu Jan  1 2015 Jerry James <loganjerry@gmail.com> - 1.01-3.hg20150101
270dae4
- Update to latest mercurial snapshot
270dae4
- Fix installation of header files
270dae4
Jerry James 575c8c7
* Wed Dec  3 2014 Jerry James <loganjerry@gmail.com> - 1.01-2.hg20141130
Jerry James 575c8c7
- Drop unnecessary jquery Provides
Jerry James 575c8c7
- Fix file permissions
Jerry James 575c8c7
Jerry James 575c8c7
* Mon Dec  1 2014 Jerry James <loganjerry@gmail.com> - 1.01-1.hg20141130
Jerry James 575c8c7
- Initial RPM