File boehm-gc.spec of Package boehm-gc
%define realname gc
%define realver 8.2.2
%define srcext tar.gz
%define so_ver 1
# turn off the generation of debuginfo rpm (RH9) ??
%global debug_package %{nil}
# Common info
Name: libgc%{?so_ver}
Version: %{realver}%{?extraver}
Release: wiz%{?extraver:0.}1%{?dist}
License: X11
Group: Development/Languages/C and C++
URL: http://www.hboehm.info/gc/
Summary: A garbage collector for C
# Install-time parameters
Provides: boehm-gc = %{version}-%{release}
Provides: boehmgc = %{version}-%{release}
Provides: bdw-gc = %{version}-%{release}
Provides: bdwgc = %{version}-%{release}
Provides: libgc = %{version}-%{release}
Obsoletes: libgc < %{version}-%{release}
# Build-time parameters
BuildRequires: gcc-c++
BuildRequires: pkg-config
BuildRequires: pkgconfig(atomic_ops)
BuildRoot: %{_tmppath}/%{name}-root
Source0: https://github.com/ivmai/bdwgc/releases/download/v%{realver}/%{realname}-%{realver}%{?extraver}.%{srcext}
Source999: baselibs.conf
%description
The Boehm-Demers-Weiser conservative garbage collector can be used as a garbage
collecting replacement for C malloc or C++ new. It allows you to allocate memory
basically as you normally would, without explicitly deallocating memory that is
no longer useful. The collector automatically recycles memory when it determines
that it can no longer be otherwise accessed.
The collector is also used by a number of programming language implementations
that either use C as intermediate code, want to facilitate easier interoperation
with C libraries, or just prefer the simple collector interface.
Alternatively, the garbage collector may be used as a leak detector for C or
C++ programs, though that is not its primary goal.
Empirically, this collector works with most unmodified C programs, simply by
replacing malloc with GC_malloc calls, replacing realloc with GC_realloc calls,
and removing free calls.
%package -n libgccpp%{?so_ver}
Group: Development/Languages/C and C++
Summary: A garbage collector for C++
Provides: libgctba%{?so_ver} = %{version}-%{release}
%description -n libgccpp%{?so_ver}
The Boehm-Demers-Weiser conservative garbage collector can be used as a garbage
collecting replacement for C malloc or C++ new. It allows you to allocate memory
basically as you normally would, without explicitly deallocating memory that is
no longer useful. The collector automatically recycles memory when it determines
that it can no longer be otherwise accessed.
The collector is also used by a number of programming language implementations
that either use C as intermediate code, want to facilitate easier interoperation
with C libraries, or just prefer the simple collector interface.
Alternatively, the garbage collector may be used as a leak detector for C or
C++ programs, though that is not its primary goal.
Empirically, this collector works with most unmodified C programs, simply by
replacing malloc with GC_malloc calls, replacing realloc with GC_realloc calls,
and removing free calls.
This package provides C++ shared library.
%package -n libcord%{?so_ver}
Group: Development/Languages/C and C++
Summary: Implementation of Cords - immutable character strings
%description -n libcord%{?so_ver}
Cords are immutable character strings. A number of operations
on long cords are much more efficient than their strings.h counterpart.
In particular, concatenation takes constant time independent of the length
of the arguments. (Cords are represented as trees, with internal
nodes representing concatenation and leaves consisting of either C
strings or a functional description of the string.)
The following are reasonable applications of cords. They would perform
unacceptably if C strings were used:
- A compiler that produces assembly language output by repeatedly
concatenating instructions onto a cord representing the output file.
- A text editor that converts the input file to a cord, and then
performs editing operations by producing a new cord representing
the file after echa character change (and keeping the old ones in an
edit history)
%package -n libgc-devel
Group: Development/Languages/C and C++
Summary: Development stuff for The Boehm-Demers-Weiser conservative garbage collector
Provides: boehm-gc-devel = %{version}-%{release}
Provides: boehmgc-devel = %{version}-%{release}
Provides: bdw-gc-devel = %{version}-%{release}
Provides: bdwgc-devel = %{version}-%{release}
Provides: %{name}-devel = %{version}-%{release}
Provides: libgccpp-devel = %{version}-%{release}
Provides: libgccpp%{?so_ver}-devel = %{version}-%{release}
Provides: libgctba-devel = %{version}-%{release}
Provides: libgctba%{?so_ver}-devel = %{version}-%{release}
Provides: libcord-devel = %{version}-%{release}
Provides: libcord%{?so_ver}-devel = %{version}-%{release}
Requires: %{name} = %{version}-%{release}
Requires: libgccpp%{?so_ver} = %{version}-%{release}
Requires: libcord%{?so_ver} = %{version}-%{release}
%description -n libgc-devel
This package provides headers and libraries required to use
the Boehm-Demers-Weiser conservative garbage collector.
# Preparation step (unpackung and patching if necessary)
%prep
%setup -q -n %{realname}-%{realver}
%build
%configure \
--enable-rpath \
--enable-cplusplus \
--enable-large-config \
--with-libatomic-ops \
CFLAGS="%{optflags} %{?gcc_lto}" \
CXXFLAGS="%{optflags} %{?gcc_lto}" \
LDFLAGS="-Wl,--as-needed -Wl,--strip-all %{?gcc_lto}"
%{__make} %{?_smp_mflags}
%install
%{__make} install DESTDIR=%{buildroot}
%{__install} -D -m0644 doc/gc.man %{buildroot}%{_mandir}/man1/gc.1
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}%{_datadir}/doc
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}%{_datadir}/gc
%clean
[ "%{buildroot}" != "/" ] && %{__rm} -rf %{buildroot}
%files
%defattr(-,root,root)
%doc README.md
%{_libdir}/libgc.so.%{?so_ver}*
%files -n libgccpp%{?so_ver}
%defattr(-,root,root)
%doc README.md
%{_libdir}/libgccpp.so.%{?so_ver}*
%{_libdir}/libgctba.so.%{?so_ver}*
%files -n libcord%{?so_ver}
%defattr(-,root,root)
%doc doc/README.cords
%{_libdir}/libcord.so.%{?so_ver}*
%files -n libgc-devel
%defattr(-,root,root)
%doc README.md doc/README.cords doc/README.%{_target_os}
%doc doc/README.environment doc/README.macros doc/*.md
%{_libdir}/pkgconfig/*.pc
%dir %{_includedir}/gc
%{_includedir}/gc/*.h
%{_includedir}/*.h
%{_libdir}/*.so
%exclude %{_libdir}/*.la
%doc %{_mandir}/man1/gc.1*
%doc %{_mandir}/man3/gc.3*
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%post -n libgccpp%{?so_ver} -p /sbin/ldconfig
%postun -n libgccpp%{?so_ver} -p /sbin/ldconfig
%post -n libcord%{?so_ver} -p /sbin/ldconfig
%postun -n libcord%{?so_ver} -p /sbin/ldconfig
%changelog