Blob Blame History Raw
Name:           libsemigroups
Version:        0.6.3
Release:        1%{?dist}
Summary:        C++ library for semigroups and monoids

License:        GPLv3+
URL:            https://github.com/james-d-mitchell/%{name}
Source0:        https://github.com/james-d-mitchell/%{name}/releases/download/v%{version}/%{name}-%{version}.tar.gz
# https://github.com/james-d-mitchell/libsemigroups/issues/60
Patch0:         %{name}-use-after-free.patch

BuildRequires:  doxygen
BuildRequires:  gcc-c++

%description
Libsemigroups is a C++ library for semigroups and monoids; it is partly
based on "Algorithms for computing finite semigroups", "Expository
Slides", and Semigroupe 2.01 by Jean-Eric Pin.

The libsemigroups library is used in the Semigroups package for GAP.

Some of the features of Semigroupe 2.01 are not yet implemented in
libsemigroups; this is a work in progress.  Missing features include
those for:

- Green's relations, or classes
- finding a zero
- minimal ideal, principal left/right ideals, or indeed any ideals
- inverses
- local submonoids
- the kernel
- variety tests.
These will be included in a future version.

Libsemigroups performs roughly the same as Semigroupe 2.01 when there is
a known upper bound on the size of the semigroup being enumerated, and
this is used to initialize the data structures for the semigroup; see
libsemigroups::Semigroup::reserve for more details.  Note that in
Semigroupe 2.01 it is always necessary to provide such an upper bound,
but in libsemigroups it is not.

Libsemigroups also has some advantages over Semigroupe 2.01:
- there is a (hopefully) convenient C++ API, which makes it relatively
  easy to create and manipulate semigroups and monoids
- there are some multithreaded methods for semigroups and their
  congruences
- you do not have to know/guess the size of a semigroup or monoid before
  you begin
- libsemigroups supports more types of elements than Semigroupe 2.01
- it is relatively straightforward to add support for further types of
  elements and semigroups
- it is possible to enumerate a certain number of elements of a
  semigroup or monoid (say if you are looking for an element with a
  particular property), to stop, and then to start the enumeration again
  at a later point
- you can instantiate as many semigroups and monoids as you can fit in
  memory
- it is possible to add more generators after a semigroup or monoid has
  been constructed, without losing or having to recompute any
  information that was previously known
- libsemigroups contains rudimentary implementations of the Todd-Coxeter
  and Knuth-Bendix algorithms for finitely presented semigroups, which
  can also be used to compute congruences of a (not necessarily finitely
  presented) semigroup or monoid.

%package devel
Summary:        Headers files for developing with %{name}
Requires:       %{name}%{?_isa} = %{version}-%{release}

%description devel
Header files for developing applications that use %{name}.

%package doc
Summary:        Documentation for %{name}
BuildArch:      noarch

%description doc
Documentation for %{name}.

%prep
%autosetup -p0

# Do not override Fedora CFLAGS
sed -i 's/ -g -O3 -march=native//' Makefile.in

%build
%configure --disable-silent-rules --disable-static

# Eliminate hardcoded rpaths
sed -e 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' \
    -e 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' \
    -i libtool
# The -pthread flag doesn't actually link with libpthread
sed -i 's/^LIBS =.*/&-lpthread/' Makefile

%make_build
%make_build doc

%install
%make_install
rm -f %{buildroot}%{_libdir}/*.la

%check
export LD_LIBRARY_PATH=$PWD/.libs
make check

%ldconfig_scriptlets

%files
%doc README.md
%license LICENSE
%{_libdir}/%{name}.so.*

%files devel
%{_includedir}/%{name}/
%{_libdir}/%{name}.so

%files doc
%doc html
%license LICENSE

%changelog
* Sat Mar 10 2018 Jerry James <loganjerry@gmail.com> - 0.6.3-1
- New upstream version

* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 0.6.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild

* Sat Jan 13 2018 Jerry James <loganjerry@gmail.com> - 0.6.2-1
- New upstream version

* Sat Dec 30 2017 Jerry James <loganjerry@gmail.com> - 0.6.1-1
- New upstream version
- Add -use-after-free patch to fix test failures

* Tue Dec 12 2017 Jerry James <loganjerry@gmail.com> - 0.6.0-1
- New upstream version

* Sat Oct  7 2017 Jerry James <loganjerry@gmail.com> - 0.5.2-1
- New upstream version

* Sat Sep 30 2017 Jerry James <loganjerry@gmail.com> - 0.5.0-1
- New upstream version

* Mon Sep  4 2017 Jerry James <loganjerry@gmail.com> - 0.3.2-1
- New upstream version

* Sun Jul 30 2017 Jerry James <loganjerry@gmail.com> - 0.3.1-3
- Install the license with the -doc subpackage
- Make -doc noarch

* Sat Jul 29 2017 Jerry James <loganjerry@gmail.com> - 0.3.1-2
- Move documentation to a -doc subpackage
- Link with libpthread to fix an undefined non-weak symbol
- Kill the rpath

* Thu Jul 27 2017 Jerry James <loganjerry@gmail.com> - 0.3.1-1
- Initial RPM