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