diff --git a/dyninst-12.1.0.tar.gz b/dyninst-12.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..c24a2f4923265b5832d6f656b5eb5eb3e319ff6f Binary files /dev/null and b/dyninst-12.1.0.tar.gz differ diff --git a/dyninst.spec b/dyninst.spec new file mode 100644 index 0000000000000000000000000000000000000000..b32f4c705e3dd077eda24f16efd8370050c19527 --- /dev/null +++ b/dyninst.spec @@ -0,0 +1,185 @@ +%define anolis_release 1 +Summary: An API for Run-time Code Generation +License: LGPLv2+ +Name: dyninst +Group: Development/Libraries +Release: %{anolis_release}%{?dist} +URL: http://www.dyninst.org +Version: 12.1.0 +ExclusiveArch: %{ix86} x86_64 ppc64le aarch64 + +%define __testsuite_version 12.1.0 +Source0: https://github.com/dyninst/dyninst/archive/v%{version}/dyninst-%{version}.tar.gz +Source1: https://github.com/dyninst/testsuite/archive/%{__testsuite_version}/testsuite-%{__testsuite_version}.tar.gz + +%global dyninst_base dyninst-%{version} +%global testsuite_base testsuite-%{__testsuite_version} + +BuildRequires: gcc-c++ +BuildRequires: elfutils-devel +BuildRequires: elfutils-libelf-devel +BuildRequires: elfutils-debuginfod-client-devel +BuildRequires: boost-devel +BuildRequires: binutils-devel +BuildRequires: cmake +BuildRequires: libtirpc-devel +BuildRequires: tbb tbb-devel +BuildRequires: tex-latex + +# Extra requires just for the testsuite +BuildRequires: gcc-gfortran libxml2-devel +BuildRequires: make + +# Testsuite files should not provide/require anything +%{?filter_setup: +%filter_provides_in %{_libdir}/dyninst/testsuite/ +%filter_requires_in %{_libdir}/dyninst/testsuite/ +%filter_setup +} + +%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. + +%package doc +Summary: Documentation for using the Dyninst API +Group: Documentation +%description doc +dyninst-doc contains API documentation for the Dyninst libraries. + +%package devel +Summary: Header files for compiling programs with Dyninst +Group: Development/System +Requires: dyninst = %{version}-%{release} +Requires: boost-devel +Requires: tbb-devel + +%description 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. + +%package testsuite +Summary: Programs for testing Dyninst +Group: Development/System +Requires: dyninst = %{version}-%{release} +Requires: dyninst-devel = %{version}-%{release} +%description testsuite +dyninst-testsuite includes the test harness and target programs for +making sure that dyninst works properly. + +%prep +%setup -q -n %{name}-%{version} -c +%setup -q -T -D -a 1 + +# cotire seems to cause non-deterministic gcc errors +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 + +# Hack to install dyninst nearby, so the testsuite can use it +DESTDIR="../install" %__cmake --install "%{__cmake_builddir}" +find ../install -name '*.cmake' -execdir \ + sed -i -e "s!%{_prefix}!$PWD/../install&!" '{}' '+' +# cmake mistakenly looks for libtbb.so in the dyninst install dir +sed -i '/libtbb.so/ s/".*usr/"\/usr/' $PWD/../install%{_libdir}/cmake/Dyninst/commonTargets.cmake + +cd ../%{testsuite_base} +# testsuite build sometimes encounters dependency issues with -jN +%define _smp_mflags -j1 +%cmake \ + -DDyninst_DIR:PATH=$PWD/../install%{_libdir}/cmake/Dyninst \ + -DINSTALL_DIR:PATH=%{_libdir}/dyninst/testsuite \ + -DCMAKE_BUILD_TYPE:STRING=Debug \ + -DCMAKE_SKIP_RPATH:BOOL=YES +%cmake_build + +%install + +cd %{dyninst_base} +%cmake_install + +# It doesn't install docs the way we want, so remove them. +# We'll just grab the pdfs later, directly from the build dir. +rm -v %{buildroot}%{_docdir}/*-%{version}.pdf + +cd ../%{testsuite_base} +%cmake_install + +mkdir -p %{buildroot}/etc/ld.so.conf.d +echo "%{_libdir}/dyninst" > %{buildroot}/etc/ld.so.conf.d/%{name}-%{_arch}.conf + +# Ugly hack to mask testsuite files from debuginfo extraction. Running the +# testsuite requires debuginfo, so extraction is useless. However, debuginfo +# extraction is still nice for the main libraries, so we don't want to disable +# it package-wide. The permissions are restored by attr(755,-,-) in files. +find %{buildroot}%{_libdir}/dyninst/testsuite/ \ + -type f '!' -name '*.a' -execdir chmod 644 '{}' '+' + +%post -p /sbin/ldconfig +%postun -p /sbin/ldconfig + +%files +%dir %{_libdir}/dyninst +%{_libdir}/dyninst/*.so.* +# dyninst mutators dlopen the runtime library +%{_libdir}/dyninst/libdyninstAPI_RT.so +%{_libdir}/dyninst/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 devel +%{_includedir}/dyninst +%{_libdir}/dyninst/*.so +%{_libdir}/cmake/Dyninst + +%files testsuite +%{_bindir}/parseThat +%dir %{_libdir}/dyninst/testsuite/ +%attr(755,root,root) %{_libdir}/dyninst/testsuite/*[!a] +%attr(644,root,root) %{_libdir}/dyninst/testsuite/*.a + +%changelog +* Mon May 16 2022 Chunmei Xu - 12.1.0-1 +- init from upstream diff --git a/testsuite-12.1.0.tar.gz b/testsuite-12.1.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..1eb8afbc15e90c2892b9b3ed06df6ab8d1570a54 Binary files /dev/null and b/testsuite-12.1.0.tar.gz differ