[boost/f18] Override boost_thread-mt.so with a linker script

Petr Machata pmachata at fedoraproject.org
Thu Aug 16 01:55:27 UTC 2012


commit 44a7aadaed87aa6d89c2d640f3aec0e3e557058f
Author: Petr Machata <pmachata at redhat.com>
Date:   Thu Aug 16 03:14:29 2012 +0200

    Override boost_thread-mt.so with a linker script

 boost.spec            |   15 +++++++++++++--
 libboost_thread-mt.so |   12 ++++++++++++
 2 files changed, 25 insertions(+), 2 deletions(-)
---
diff --git a/boost.spec b/boost.spec
index c2a8b70..3862d4b 100644
--- a/boost.spec
+++ b/boost.spec
@@ -25,7 +25,7 @@ Name: boost
 Summary: The free peer-reviewed portable C++ source libraries
 Version: 1.50.0
 %define version_enc 1_50_0
-Release: 3%{?dist}
+Release: 4%{?dist}
 License: Boost and MIT and Python
 
 %define toplev_dirname %{name}_%{version_enc}
@@ -33,6 +33,7 @@ URL: http://www.boost.org
 Group: System Environment/Libraries
 Source0: http://downloads.sourceforge.net/%{name}/%{toplev_dirname}.tar.bz2
 Source1: ver.py
+Source2: libboost_thread-mt.so
 
 # From the version 13 of Fedora, the Boost libraries are delivered
 # with sonames equal to the Boost version (e.g., 1.41.0).
@@ -517,7 +518,7 @@ EOF
 #
 # The "python=2.*" bit tells jam that we want to _also_ build 2.*, not
 # just 3.*.  When omitted, it just builds for python 3 twice, once
-# calling the library libbost_python and once libboost_python3.  I
+# calling the library libboost_python and once libboost_python3.  I
 # assume this is for backward compatibility for apps that are used to
 # linking against -lboost_python, for when 2->3 transition is
 # eventually done.
@@ -610,6 +611,12 @@ echo ============================= install serial ==================
 	variant=release threading=single,multi debug-symbols=on pch=off \
 	python=%{python2_version} install
 
+# Override DSO symlink with a linker script.  See the linker script
+# itself for details of why we need to do this.
+[ -f $RPM_BUILD_ROOT%{_libdir}/libboost_thread-mt.so ] # Must be present
+rm -f $RPM_BUILD_ROOT%{_libdir}/libboost_thread-mt.so
+install -p -m 644 %{SOURCE2} $RPM_BUILD_ROOT%{_libdir}/
+
 echo ============================= install Boost.Build ==================
 (cd tools/build/v2
  ./b2 --prefix=$RPM_BUILD_ROOT%{_prefix} install
@@ -961,6 +968,10 @@ rm -rf $RPM_BUILD_ROOT
 %{_mandir}/man1/bjam.1*
 
 %changelog
+* Wed Aug 15 2012 Petr Machata <pmachata at redhat.com> - 1.50.0-4
+- Override boost_thread-mt.so with a linker script that brings in
+  Boost.System DSO as well.
+
 * Wed Aug  8 2012 Petr Machata <pmachata at redhat.com> - 1.50.0-3
 - boost-python3 shouldn't be under the overall boost umbrella
 
diff --git a/libboost_thread-mt.so b/libboost_thread-mt.so
new file mode 100644
index 0000000..d3a44e4
--- /dev/null
+++ b/libboost_thread-mt.so
@@ -0,0 +1,12 @@
+/* GNU ld script
+
+   Boost.Thread header files pull in enough of Boost.System that
+   symbols from the latter library are referenced by a compiled object
+   that includes Boost.Thread headers.  libbost_system-mt.so is among
+   libbost_thread-mt.so's DT_NEEDED, but program linker requires that
+   missing symbols are satisfied by direct dependency, not a
+   transitive one.  Hence this linker script, which brings in the
+   Boost.System DSO.  */
+
+INPUT(libboost_thread-mt.so.1.50.0)
+INPUT(libboost_system-mt.so.1.50.0)


More information about the scm-commits mailing list