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
openSUSE Build Service is sponsored by