File dyninst.spec of Package dyninst
Summary: An API for Run-time Code Generation
License: LGPL-2.1-or-later AND GPL-3.0-or-later WITH Bison-exception-2.2 AND LicenseRef-Fedora-Public-Domain AND BSD-3-Clause
Name: dyninst
Group: Development/Libraries
Release: 0%{?dist}
URL: http://www.dyninst.org
Version: 13.0.0
ExclusiveArch: %{ix86} x86_64 ppc64le aarch64
Source0: %{!?suse_version:https://github.com/dyninst/dyninst/archive/v%{version}/}dyninst-%{version}.tar.gz
#Patch1: dwarf-error.patch
#Patch2: onetbb.patch
# Support cmake 3.27 - https://github.com/dyninst/dyninst/pull/1438
#Patch3: dyninst-cmake3.27.patch
%global dyninst_base dyninst-%{version}
%if 0%{?suse_version}
BuildRequires: libdw-devel
BuildRequires: libelf-devel
BuildRequires: libboost_thread-devel
BuildRequires: libboost_timer-devel
BuildRequires: libboost_filesystem-devel
BuildRequires: libboost_date_time-devel
BuildRequires: libboost_chrono-devel
BuildRequires: libboost_atomic-devel
BuildRequires: libdebuginfod-devel
%else
BuildRequires: elfutils-devel
BuildRequires: elfutils-libelf-devel
BuildRequires: elfutils-debuginfod-client-devel
%endif
BuildRequires: gcc-c++
BuildRequires: boost-devel
BuildRequires: binutils-devel
BuildRequires: cmake
BuildRequires: libtirpc-devel
BuildRequires: tbb
BuildRequires: tbb-devel
BuildRequires: libxml2-devel
BuildRequires: make
%description
Dyninst is an Application Program Interface (API) to permit the insertion of
code into a running program. The API also permits changing or removing
subroutine calls from the application program. Run-time code changes are
useful to support a variety of applications including debugging, performance
monitoring, and to support composing applications out of existing packages.
The goal of this API is to provide a machine independent interface to permit
the creation of tools and applications that use run-time code patching.
%if 0%{suse_version}
%{lua:
rpm.define('so_ver '..rpm.expand('%{version}'):gsub('%.','_',1):gsub('%..*',''))
}
%define dyninst libdyninst%{so_ver}
%define dyninst_devel libdyninst-devel
%package -n %{dyninst}
Summary: Runtime library for dyninst
%description -n %{dyninst}
%{dyninst} contains runtime library
%else
%define dyninst dyninst
%define dyninst dyninst-devel
%endif
%package doc
BuildArch: noarch
Summary: Documentation for using the Dyninst API
Group: Documentation
%description doc
dyninst-doc contains API documentation for the Dyninst libraries.
License: LGPL-2.1-or-later
%package -n %{dyninst_devel}
Summary: Header files for compiling programs with Dyninst
Group: Development/System
Requires: %{dyninst} = %{version}-%{release}
Requires: boost-devel
Requires: tbb-devel
License: LGPL-2.1-or-later AND BSD-3-Clause AND MIT
# FindTBB.cmake: presumed MIT, removed in next version of dyninst
%description -n %{dyninst_devel}
dyninst-devel includes the C header files that specify the Dyninst user-space
libraries and interfaces. This is required for rebuilding any program
that uses Dyninst.
%prep
%setup -q -n %{name}-%{version} -c
#pushd %{dyninst_base}
#%patch -P1 -p1
#%patch -P2 -p1
#%patch -P3 -p1
#popd
# cotire seems to cause non-deterministic gcc errors
# https://bugzilla.redhat.com/show_bug.cgi?id=1420551
#sed -i.cotire -e 's/USE_COTIRE true/USE_COTIRE false/' \
# %{dyninst_base}/cmake/shared.cmake
%build
cd %{dyninst_base}
CFLAGS="$CFLAGS $RPM_OPT_FLAGS"
LDFLAGS="$LDFLAGS $RPM_LD_FLAGS"
%ifarch %{ix86}
CFLAGS="$CFLAGS -fno-lto -march=i686"
LDFLAGS="$LDFLAGS -fno-lto"
%endif
CXXFLAGS="$CFLAGS"
export CFLAGS CXXFLAGS LDFLAGS
%cmake \
-DENABLE_DEBUGINFOD=1 \
-DINSTALL_LIB_DIR:PATH=%{_libdir}/dyninst \
-DINSTALL_INCLUDE_DIR:PATH=%{_includedir}/dyninst \
-DINSTALL_CMAKE_DIR:PATH=%{_libdir}/cmake/Dyninst \
-DCMAKE_BUILD_TYPE=None \
-DCMAKE_SKIP_RPATH:BOOL=YES
%cmake_build
%install
cd %{dyninst_base}
%cmake_install
rm %{buildroot}%{_bindir}/parseThat
%post -p /sbin/ldconfig
%postun -p /sbin/ldconfig
%check
%if 0%{suse_version}
%files -n %{dyninst}
%else
%files
%endif
#%dir %{_libdir}/dyninst
%{_libdir}/*.so.*
# dyninst mutators dlopen the runtime library
%{_libdir}/libdyninstAPI_RT.so
%{_libdir}/libdyninstAPI_RT.a
%doc %{dyninst_base}/COPYRIGHT
%doc %{dyninst_base}/LICENSE.md
#%config(noreplace) /etc/ld.so.conf.d/*
%files doc
%doc %{dyninst_base}/dataflowAPI/doc/dataflowAPI.pdf
%doc %{dyninst_base}/dynC_API/doc/dynC_API.pdf
%doc %{dyninst_base}/dyninstAPI/doc/dyninstAPI.pdf
%doc %{dyninst_base}/instructionAPI/doc/instructionAPI.pdf
%doc %{dyninst_base}/parseAPI/doc/parseAPI.pdf
%doc %{dyninst_base}/patchAPI/doc/patchAPI.pdf
%doc %{dyninst_base}/proccontrol/doc/proccontrol.pdf
%doc %{dyninst_base}/stackwalk/doc/stackwalk.pdf
%doc %{dyninst_base}/symtabAPI/doc/symtabAPI.pdf
%files -n %{dyninst_devel}
%{_includedir}/*
%{_libdir}/*.so
%{_libdir}/cmake/Dyninst