[boost] Enable Python 3 builds
Petr Machata
pmachata at fedoraproject.org
Tue Aug 7 23:58:39 UTC 2012
commit 2dcacf6f3c9da7448f8552a715e908a1c736c2bd
Author: Petr Machata <pmachata at redhat.com>
Date: Wed Aug 8 00:34:36 2012 +0200
Enable Python 3 builds
boost-1.48.0-python3.patch | 15 -------
boost.spec | 100 +++++++++++++++++++++++---------------------
ver.py | 5 ++
3 files changed, 57 insertions(+), 63 deletions(-)
---
diff --git a/boost.spec b/boost.spec
index 0b8a99d..e1db41b 100644
--- a/boost.spec
+++ b/boost.spec
@@ -19,15 +19,13 @@
%endif
# Configuration of Python 3
-# xxx note this is not supported with jam-based builds yet
-%bcond_with python3
-%define python3_version 3.2mu
+%bcond_without python3
Name: boost
Summary: The free peer-reviewed portable C++ source libraries
Version: 1.50.0
%define version_enc 1_50_0
-Release: 1%{?dist}
+Release: 2%{?dist}
License: Boost and MIT and Python
# The CMake build framework (set of CMakeLists.txt and module.cmake files) is
@@ -43,6 +41,7 @@ License: Boost and MIT and Python
URL: http://www.boost.org
Group: System Environment/Libraries
Source0: http://downloads.sourceforge.net/%{name}/%{toplev_dirname}.tar.bz2
+Source1: ver.py
# From the version 13 of Fedora, the Boost libraries are delivered
# with sonames equal to the Boost version (e.g., 1.41.0). On EPEL versions
@@ -120,9 +119,6 @@ Patch10: boost-1.50.0-long-double-1.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=784654
Patch12: boost-1.50.0-polygon.patch
-# https://bugzilla.redhat.com/show_bug.cgi?id=807780
-#Patch13: boost-1.48.0-python3.patch
-
# https://bugzilla.redhat.com/show_bug.cgi?id=828856
# https://bugzilla.redhat.com/show_bug.cgi?id=828857
Patch15: boost-1.50.0-pool.patch
@@ -505,12 +501,24 @@ a number of significant features and is now developed independently
%patch9 -p1
%patch10 -p1
%patch12 -p3
-#%patch13 -p1
%patch15 -p0
%build
+
+PYTHON2_VERSION=$(/usr/bin/python2 %{SOURCE1})
+
+%if %{with python3}
+PYTHON3_VERSION=$(/usr/bin/python3 %{SOURCE1})
+PYTHON3_ABIFLAGS=$(/usr/bin/python3-config --abiflags)
+%endif
+
cat >> ./tools/build/v2/user-config.jam << EOF
using mpi ;
+%if %{with python3}
+# This _adds_ extra python version. It doesn't replace whatever
+# python 2.X is default on the system.
+using python : ${PYTHON3_VERSION} : /usr/bin/python3 : /usr/include/python${PYTHON3_VERSION}${PYTHON3_ABIFLAGS} ;
+%endif
EOF
./bootstrap.sh --with-toolset=gcc --with-icu
@@ -519,38 +527,33 @@ EOF
# library in particular) end up being built second time during
# installation. Unsure why that is, but all sub-builds need to be
# built with pch=off to avoid this.
+#
+# 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
+# assume this is for backward compatibility for apps that are used to
+# linking against -lboost_python, for when 2->3 transition is
+# eventually done.
echo ============================= build serial ==================
./b2 -d+2 -q %{?_smp_mflags} --layout=tagged \
- --without-mpi --without-graph_parallel --build-dir=serial \
- variant=release threading=single,multi debug-symbols=on pch=off stage
-
-%if %{with python3}
-
-# Build boost-python for Python 3
-( echo ============================= build Python 3 ==================
- mkdir serial-python3
- cd serial-python3
- %cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo %{boost_testflags} \
- -DENABLE_SINGLE_THREADED=YES -DINSTALL_VERSIONED=OFF \
- -DBUILD_PROJECTS="python" -DWITH_MPI=OFF \
- -DPython_ADDITIONAL_VERSIONS=%{python3_version} \
- -DPYTHON_EXECUTABLE=python%{python3_version} \
- -DBOOST_PYTHON_SUFFIX=3 \
- ..
- make VERBOSE=1 %{?_smp_mflags}
-)
-
-%endif
+ --without-mpi --without-graph_parallel --build-dir=serial \
+ variant=release threading=single,multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} stage
# Build MPI parts of Boost with OpenMPI support
+#
+# N.B. python=2.* here behaves differently: it exactly selects a
+# version that we want to build against. Boost MPI is not portable to
+# Python 3 due to API changes in Python, so this suits us.
%if %{with openmpi}
%{_openmpi_load}
echo ============================= build $MPI_COMPILER ==================
# This doesn't seem to allow single-threaded builds anymore.
./b2 -d+2 -q %{?_smp_mflags} --layout=tagged \
--with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
- variant=release threading=multi debug-symbols=on pch=off stage
+ variant=release threading=multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} stage
%{_openmpi_unload}
export PATH=/bin${PATH:+:}$PATH
%endif
@@ -561,7 +564,8 @@ export PATH=/bin${PATH:+:}$PATH
echo ============================= build $MPI_COMPILER ==================
./b2 -d+2 -q %{?_smp_mflags} --layout=tagged \
--with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
- variant=release threading=multi debug-symbols=on pch=off stage
+ variant=release threading=multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} stage
%{_mpich2_unload}
export PATH=/bin${PATH:+:}$PATH
%endif
@@ -600,6 +604,7 @@ cd %{_builddir}/%{toplev_dirname}
%install
rm -rf $RPM_BUILD_ROOT
+PYTHON2_VERSION=$(/usr/bin/python2 %{SOURCE1})
cd %{_builddir}/%{toplev_dirname}
@@ -607,9 +612,10 @@ cd %{_builddir}/%{toplev_dirname}
%{_openmpi_load}
echo ============================= install $MPI_COMPILER ==================
./b2 -q %{?_smp_mflags} --layout=tagged \
- --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
- --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \
- variant=release threading=multi debug-symbols=on pch=off stage
+ --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
+ --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \
+ variant=release threading=multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} stage
# Remove generic parts of boost that were built for dependencies.
rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_{python,{w,}serialization}*
@@ -622,9 +628,10 @@ export PATH=/bin${PATH:+:}$PATH
%{_mpich2_load}
echo ============================= install $MPI_COMPILER ==================
./b2 -q %{?_smp_mflags} --layout=tagged \
- --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
- --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \
- variant=release threading=multi debug-symbols=on pch=off stage
+ --with-mpi --with-graph_parallel --build-dir=$MPI_COMPILER \
+ --stagedir=${RPM_BUILD_ROOT}${MPI_HOME} \
+ variant=release threading=multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} stage
# Remove generic parts of boost that were built for dependencies.
rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_{python,{w,}serialization}*
@@ -633,20 +640,13 @@ rm -f ${RPM_BUILD_ROOT}${MPI_HOME}/lib/libboost_{python,{w,}serialization}*
export PATH=/bin${PATH:+:}$PATH
%endif
-if false; then :
-%if %{with python3}
-echo ============================= install Python 3 ==================
-DESTDIR=$RPM_BUILD_ROOT make -C serial-python3 VERBOSE=1 install
-%endif
-
-fi
-
echo ============================= install serial ==================
./b2 -d+2 -q %{?_smp_mflags} --layout=tagged \
- --without-mpi --without-graph_parallel --build-dir=serial \
- --prefix=$RPM_BUILD_ROOT%{_prefix} \
- --libdir=$RPM_BUILD_ROOT%{_libdir} \
- variant=release threading=single,multi debug-symbols=on pch=off install
+ --without-mpi --without-graph_parallel --build-dir=serial \
+ --prefix=$RPM_BUILD_ROOT%{_prefix} \
+ --libdir=$RPM_BUILD_ROOT%{_libdir} \
+ variant=release threading=single,multi debug-symbols=on pch=off \
+ python=${PYTHON2_VERSION} install
echo ============================= install Boost.Build ==================
(cd tools/build/v2
@@ -999,6 +999,10 @@ rm -rf $RPM_BUILD_ROOT
%{_mandir}/man1/bjam.1*
%changelog
+* Tue Aug 7 2012 Petr Machata <pmachata at redhat.com> - 1.50.0-2
+- Enable Python 3 builds. This is still disabled in Boost MPI, which
+ doesn't seem to support Python 3
+
* Thu Jul 26 2012 Petr Machata <pmachata at redhat.com> - 1.50.0-1
- Upstream 1.50
- boost-cmake-soname.patch drop, upstream handles soname well, and
diff --git a/ver.py b/ver.py
new file mode 100644
index 0000000..ef88aea
--- /dev/null
+++ b/ver.py
@@ -0,0 +1,5 @@
+import platform
+import sys
+
+sys.stdout.write (".".join (platform.python_version_tuple ()[:2]))
+sys.stdout.write ("\n")
More information about the scm-commits
mailing list