Add initial support for *-mingw* CHOST

This is a direct copy of the Gentoo boost-1.53.0 ebuild, with only minor
differences to support mingw targets.

* specify target-os in bjam options
* disable builds with threads and shared linking due to unresolved
  linking errors.
This commit is contained in:
Danny Robson 2013-08-01 17:52:02 +10:00
parent 5e51448630
commit 01f1094931
14 changed files with 860 additions and 0 deletions

14
dev-libs/boost/Manifest Normal file
View File

@ -0,0 +1,14 @@
AUX boost-1.48.0-disable_icu_rpath.patch 1073 SHA256 e1c947d20f0864e22f6dd2b091da6948bb51aec0d3323c37fe4264ddf57204b4 SHA512 efb62b65dbcb52258dcca074997a0380dfc52f48161777a8b6f9672179247e534e098784dcbb574826f495981fd2189290c7fe733d943bba2b668bb62ef50087 WHIRLPOOL 6f9a142e15bf3674114f2b07c8708055888e74cda4c3c775ca5470e8f54c921aa12660a1f905a370ec5f44f16b73f05025d3ff1ccad557d379ff55ad3ad0a8f0
AUX boost-1.48.0-disable_libboost_python3.patch 1509 SHA256 0b229762863b72a5faa39ea57538f757548abc492325e6458d3801fd49e4804e SHA512 5aa0eb72365a0674d7d654b924c3189501495c22cc1eb50dc1ce7aaee941ba418c17857475ebbcc4d8f8102100d889aa1c059e3782dbff9eb03ff101bea2ffbb WHIRLPOOL 5710ac3ecf1f6d18db0307f07c720d12646666ec83adde2b2464cb87c901d57088e98801720efb176420f9728967c8752382b15ca69f632b00852d51be412795
AUX boost-1.48.0-mpi_python3.patch 2549 SHA256 9120a660469fba15554e790150e03a665ea5497e94a79469053506147bd7dad1 SHA512 7c8aa497ceba42319194dd6400ea8af883656c79e4f697d87c5e825cfdef5733bce91c3e930b504b264cae80f582c85f2c2b29d5f8db11ebcabeb744c888096e WHIRLPOOL 1b740f102467c787bd45813ecf085297171892c1126675f1abd501c11dc9a56506d0cb32222239f4e4bb1e6913533b3884acd2a749633f781c53a6529106264c
AUX boost-1.48.0-no_strict_aliasing_python2.patch 741 SHA256 d11db74992a7a692f655b36c1cd78355fcec6703007fde522b6a82c88f171689 SHA512 cd06ba8bf5623a5ca590cbd024ba27fae14d1d2a193ccd4baf91b06c5d41b6442f40561fa49b5ba14deb0c156d5773fc4a15890a85b6cea35cab91d54e94aa6e WHIRLPOOL 1b5cce1374f56d702213d7479beb90d15413c90010442a37a46821f383afa371aac3de49e657e7623d6e9079d1e3b07353233aa40218b760042161effedd813a
AUX boost-1.48.0-python_linking.patch 1278 SHA256 5bb937bd4423e039aa406ee4a366c61542a8067ec96b22dbcc48e8826bb7b1f8 SHA512 d588d9391c654a0c3cd49078933563705da4157cd79929ac2ff2021a2e86eec1b87ed85f5ec6d2028b76974abe7e947bd379d78aa60d97da9dc23a6f74c77ec2 WHIRLPOOL 879318dd228ca01841dd3ef0d8020810357c4699fbd1d9f164b0db07319b599634bd823f0e06dd462157d81550bc9f101506d0a7469ad2352d4b1b366bb7fb00
AUX boost-1.48.0-respect_python-buildid.patch 1648 SHA256 996395941b5518dd2782cb18ed937273ccb256d5c5e64301b1d152dc81be39cd SHA512 b53432893fb390354dfd98a88a7905b523e528780c349e3d0da2b019255cbc58b3b987065fdef903d4959387994fdf240f7cd87c53f801e485a0811a2da56316 WHIRLPOOL 72ef562edf844944c9d7bf7931819522984dcffb7af43ef8c9d7a41fd0272ef1ebca99fffdd67654ab4564e8899aa6e0acafa27f72c8f7c06e582a0d211dfd91
AUX boost-1.48.0-support_dots_in_python-buildid.patch 625 SHA256 da1a6c1b501f6c3bd152b2d13ec690adc2566b159f0e489723ea84865d43b88d SHA512 3a8c3efd11eba1097312dd3141f8846e23578a0386701348ebc77279a02fecf4b715de2231c998bd426b0b63f3f1875f5f47833835a4b41b8e0723b9b5b35399 WHIRLPOOL cf9ad2c82ff1c68ce4ac6a685875e53b00d5f88aa0c562007c4dbe73610811eeaf9ce93a706d0fad46aea4322fe10e9b0bc4a73659d8b98540ebf96bb5288adb
AUX boost-1.51.0-respect_python-buildid.patch 1565 SHA256 a783cd262cfda7c0046a9a9f34dd91cdc48bc2442c4c466873e85ead818326bb SHA512 65a7456c63db5eeab862fdb6245ba3a26536e26b56be9ed7a502a3d5be91bc278cd4a22cf1c5a1d8917bdeaa6575cbf37a11bfc3e982272f56308117fd2b230e WHIRLPOOL fb430e9c5368540493e13fdadff94df426203c9e6776891a3fc421488266b39f7e5720e5f5d289665d62d753c9bce7a33198cf6e911d94961714c22d1452ac92
AUX boost-1.51.0-support_dots_in_python-buildid.patch 609 SHA256 189299e2ef3cde98584e60a5bdd8606894c19bceb0c4d40b38f04aae0aed0edd SHA512 0bf1e4cae598a098b8c252bab1938b29dd5d3ea19d9355156b14add27238e9359ad39a73d3afecb031efebd801215804ecebc11ca8fa6ac2b7b3c2f5ff9bc32f WHIRLPOOL ffc318bc06c33263906be6d0e565ef4c2e3fde9f6224cc5413c02cbe446d9f286c69153f4aee6f588472b058b9b4a37110b0be696bd22362989f1b6a8c8fc13e
AUX boost-1.52.0-locale-utf.patch 2062 SHA256 8212150730073ba5b08aa9808afcb45d5ce90109cfc1ba90d22a673418ea003c SHA512 641a56541efb51e7db66c6c9eac65f8e0e62b4ad2c1b792ea573ce86fc62cd94327be75d22b8fdb84128e792977a2b450681d729a85b143146dc79a007ecefc4 WHIRLPOOL 67cfd6bd4591c3dcc47ad06aaa634e9c1598e0214635a66a1e57fb933b025aebc05cf3ddadd7309fdab353daa7b7880e468874c958e641604d4a7e3fa986fd96
AUX boost-1.52.0-tuple.patch 500 SHA256 dbf631c8c412ea12b3d63dd4b515e0d5f1383a13db18e13696bd33dee91645d7 SHA512 ed2790b35058a3bf91b49e5e1b61f1861e2ba8d8ec6f885e85d74d62e2182fd1768099660712a900e29a505fbf568f0235c748cca801ede836f67d2adbc6bcd1 WHIRLPOOL be88916331907ad528983e370619c9e734e122c7a1a0a2fb4a6df30f5ca9567884bfece928cab314ecdb425e6195a1b154a6c15722c6c860946ad356b4a4b502
AUX remove-toolset-1.48.0.patch 396 SHA256 59af4c05d71def0b14e22a7a5f756a054ca82e3f9686b7668335af7d9bed28fa SHA512 bbb01be2e4b4807eeb19faf13fc6c73e3cb8843953586312076a15c67ad5c5cac683fc3fb26f4e2902c60ab7930e83922f4d499756a85f78a20ac53399329f61 WHIRLPOOL 2490dac69a45b3f48e2513b4f21d75dc7cf5361411541dde96f027c66ca459df5390708902c86f11577d1129410f52d20de1ff275524fb51083a17eee6adc332
DIST boost_1_53_0.tar.bz2 55765258 SHA256 f88a041b01882b0c9c5c05b39603ec8383fb881f772f6f9e6e6fd0e0cddb9196 SHA512 8cd7806653cb6ea4a1c6862796ef698de5ae0bdbda96954fedbe090c59e3e6cb8f8d385df35183e9063ac4e2c2fccf10744516c47a994cde5f1d1cba1b07e522 WHIRLPOOL e8c5ed6b34dd5f68dc7e102a9e22b302616a65077d3f4af370ece6352b02a866e04294a4fc76bbd5555b6a4131f590e6455e6a74b5f12c4ffc2dd15af0bc8746
EBUILD boost-1.53.0.ebuild 10218 SHA256 747e8e919a99cbee09fcbd01ace01490b1411f71833a803777e40303fc221253 SHA512 6a727efd93fcd67ccd23f1461514b222341890fe2ae30d220eac266f9b02c22ea1d6f02752dfe5ddcd20a5d7b19c87cc3a1fd98147b827cbb9efff1adfee5e77 WHIRLPOOL d35172a226cffa1dbde2c78b49f2e3b50f4f087ce26676239124b1bf369493b980d5abc7452cdecc851971130791289680037b3ae0693747f4f1cbc3f9225132

View File

@ -0,0 +1,357 @@
# Copyright 1999-2013 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/dev-libs/boost/boost-1.53.0.ebuild,v 1.5 2013/07/10 11:54:02 pinkbyte Exp $
EAPI="5"
PYTHON_COMPAT=( python{2_5,2_6,2_7,3_1,3_2,3_3} )
inherit eutils flag-o-matic multilib multiprocessing python-r1 toolchain-funcs versionator
MY_P=${PN}_$(replace_all_version_separators _)
DESCRIPTION="Boost Libraries for C++"
HOMEPAGE="http://www.boost.org/"
SRC_URI="mirror://sourceforge/boost/${MY_P}.tar.bz2"
LICENSE="Boost-1.0"
MAJOR_V="$(get_version_component_range 1-2)"
SLOT="0/${MAJOR_V}"
KEYWORDS="~alpha ~amd64 ~arm ~hppa ~ia64 ~mips ~ppc ~ppc64 ~s390 ~sh ~sparc ~x86 ~amd64-fbsd ~amd64-linux ~x86-fbsd ~x86-linux"
IUSE="debug doc icu +nls mpi python static-libs +threads tools"
RDEPEND="icu? ( >=dev-libs/icu-3.6:= )
!icu? ( virtual/libiconv )
mpi? ( || ( sys-cluster/openmpi[cxx] sys-cluster/mpich2[cxx,threads] ) )
python? ( ${PYTHON_DEPS} )
app-arch/bzip2
sys-libs/zlib
!app-admin/eselect-boost"
DEPEND="${RDEPEND}
=dev-util/boost-build-${MAJOR_V}*"
REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )"
S=${WORKDIR}/${MY_P}
create_user-config.jam() {
local compiler compiler_version compiler_executable
if [[ ${CHOST} == *-darwin* ]]; then
compiler="darwin"
compiler_version="$(gcc-fullversion)"
compiler_executable="$(tc-getCXX)"
else
compiler="gcc"
compiler_version="$(gcc-version)"
compiler_executable="$(tc-getCXX)"
fi
local mpi_configuration python_configuration
if use mpi; then
mpi_configuration="using mpi ;"
fi
if use python; then
python_configuration="using python : : ${PYTHON} ;"
fi
cat > user-config.jam << __EOF__
using ${compiler} : ${compiler_version} : ${compiler_executable} : <cflags>"${CFLAGS}" <cxxflags>"${CXXFLAGS}" <linkflags>"${LDFLAGS}" ;
${mpi_configuration}
${python_configuration}
__EOF__
}
src_prepare() {
epatch \
"${FILESDIR}/${PN}-1.48.0-mpi_python3.patch" \
"${FILESDIR}/${PN}-1.51.0-respect_python-buildid.patch" \
"${FILESDIR}/${PN}-1.51.0-support_dots_in_python-buildid.patch" \
"${FILESDIR}/${PN}-1.48.0-no_strict_aliasing_python2.patch" \
"${FILESDIR}/${PN}-1.48.0-disable_libboost_python3.patch" \
"${FILESDIR}/${PN}-1.48.0-python_linking.patch" \
"${FILESDIR}/${PN}-1.48.0-disable_icu_rpath.patch"
# Avoid a patch for now
for file in libs/context/src/asm/*.S; do
cat - >> $file <<EOF
#if defined(__linux__) && defined(__ELF__)
.section .note.GNU-stack,"",%progbits
#endif
EOF
done
}
ejam() {
echo b2 "$@"
b2 "$@"
}
src_configure() {
OPTIONS="$(usex debug gentoodebug gentoorelease) -j$(makeopts_jobs) -q -d+2 --user-config=${S}/user-config.jam"
if [[ ${CHOST} == *-darwin* ]]; then
# We need to add the prefix, and in two cases this exceeds, so prepare
# for the largest possible space allocation.
append-ldflags -Wl,-headerpad_max_install_names
elif [[ ${CHOST} == *-winnt* ]]; then
compiler=parity
if [[ $($(tc-getCXX) -v) == *trunk* ]]; then
compilerVersion=trunk
else
compilerVersion=$($(tc-getCXX) -v | sed '1q' \
| sed -e 's,\([a-z]*\) \([0-9]\.[0-9]\.[0-9][^ \t]*\) .*,\2,')
fi
compilerExecutable=$(tc-getCXX)
fi
# bug 298489
if use ppc || use ppc64; then
[[ $(gcc-version) > 4.3 ]] && append-flags -mno-altivec
fi
# Do _not_ use C++11 yet, make sure to force GNU C++ 98 standard.
append-cxxflags -std=gnu++98
use icu && OPTIONS+=" -sICU_PATH=${EPREFIX}/usr"
use icu || OPTIONS+=" --disable-icu boost.locale.icu=off"
use mpi || OPTIONS+=" --without-mpi"
use python || OPTIONS+=" --without-python"
use nls || OPTIONS+=" --without-locale"
# Set the valid link options when requesting static libs
local static_libs
if [[ ${CHOST} == *-mingw* ]]; then
# The build currently dies with undefined references to set_tss_data
# if threads are used with shared linking. Suggestions are to add
# BOOST_THREAD_USE_LIB to build flags, but it's been unsuccessful.
if use threads && ! use static-libs; then
die "this ebuild does not currently support shared linking and threads with mingw"
fi
static_libs="static"
else
static_libs="shared,static"
fi
OPTIONS+=" pch=off --boost-build=${EPREFIX}/usr/share/boost-build --prefix=\"${ED}usr\" --layout=system threading=$(usex threads multi single) link=$(usex static-libs $static_libs shared) --without-context"
[[ ${CHOST} == *-mingw* ]] && OPTIONS+=" target-os=windows"
[[ ${CHOST} == *-winnt* ]] && OPTIONS+=" -sNO_BZIP2=1"
}
src_compile() {
export BOOST_ROOT="${S}"
PYTHON_DIRS=""
MPI_PYTHON_MODULE=""
building() {
create_user-config.jam
ejam ${OPTIONS} \
$(use python && echo --python-buildid=${EPYTHON#python}) \
|| die "Building of Boost libraries failed"
if use python; then
if [[ -z "${PYTHON_DIRS}" ]]; then
PYTHON_DIRS="$(find bin.v2/libs -name python | sort)"
else
if [[ "${PYTHON_DIRS}" != "$(find bin.v2/libs -name python | sort)" ]]; then
die "Inconsistent structure of build directories"
fi
fi
local dir
for dir in ${PYTHON_DIRS}; do
mv ${dir} ${dir}-${EPYTHON} \
|| die "Renaming of '${dir}' to '${dir}-${EPYTHON}' failed"
done
if use mpi; then
if [[ -z "${MPI_PYTHON_MODULE}" ]]; then
MPI_PYTHON_MODULE="$(find bin.v2/libs/mpi/build/*/gentoo* -name mpi.so)"
if [[ "$(echo "${MPI_PYTHON_MODULE}" | wc -l)" -ne 1 ]]; then
die "Multiple mpi.so files found"
fi
else
if [[ "${MPI_PYTHON_MODULE}" != "$(find bin.v2/libs/mpi/build/*/gentoo* -name mpi.so)" ]]; then
die "Inconsistent structure of build directories"
fi
fi
mv stage/lib/mpi.so stage/lib/mpi.so-${EPYTHON} \
|| die "Renaming of 'stage/lib/mpi.so' to 'stage/lib/mpi.so-${EPYTHON}' failed"
fi
fi
}
if use python; then
python_foreach_impl building
else
building
fi
if use tools; then
pushd tools > /dev/null || die
ejam ${OPTIONS} \
|| die "Building of Boost tools failed"
popd > /dev/null || die
fi
}
src_install () {
installation() {
create_user-config.jam
if use python; then
local dir
for dir in ${PYTHON_DIRS}; do
cp -pr ${dir}-${EPYTHON} ${dir} \
|| die "Copying of '${dir}-${EPYTHON}' to '${dir}' failed"
done
if use mpi; then
cp -p stage/lib/mpi.so-${EPYTHON} "${MPI_PYTHON_MODULE}" \
|| die "Copying of 'stage/lib/mpi.so-${EPYTHON}' to '${MPI_PYTHON_MODULE}' failed"
cp -p stage/lib/mpi.so-${EPYTHON} stage/lib/mpi.so \
|| die "Copying of 'stage/lib/mpi.so-${EPYTHON}' to 'stage/lib/mpi.so' failed"
fi
fi
ejam ${OPTIONS} \
--includedir="${ED}usr/include" \
--libdir="${ED}usr/$(get_libdir)" \
$(use python && echo --python-buildid=${EPYTHON#python}) \
install || die "Installation of Boost libraries failed"
if use python; then
rm -r ${PYTHON_DIRS} || die
# Move mpi.so Python module to Python site-packages directory.
# https://svn.boost.org/trac/boost/ticket/2838
if use mpi; then
local moddir=$(python_get_sitedir)/boost
# moddir already includes eprefix
mkdir -p "${D}${moddir}" || die
mv "${ED}usr/$(get_libdir)/mpi.so" "${D}${moddir}" || die
cat << EOF > "${D}${moddir}/__init__.py" || die
import sys
if sys.platform.startswith('linux'):
import DLFCN
flags = sys.getdlopenflags()
sys.setdlopenflags(DLFCN.RTLD_NOW | DLFCN.RTLD_GLOBAL)
from . import mpi
sys.setdlopenflags(flags)
del DLFCN, flags
else:
from . import mpi
del sys
EOF
fi
python_optimize
fi
}
if use python; then
python_foreach_impl installation
else
installation
fi
if ! use python; then
rm -r "${ED}"/usr/include/boost/python* || die
fi
if ! use nls; then
rm -r "${ED}"/usr/include/boost/locale || die
fi
rm -r "${ED}"/usr/include/boost/context || die
if use doc; then
find libs/*/* -iname "test" -or -iname "src" | xargs rm -rf
dohtml \
-A pdf,txt,cpp,hpp \
*.{htm,html,png,css} \
-r doc
dohtml -A pdf,txt -r tools
insinto /usr/share/doc/${PF}/html
doins -r libs
doins -r more
# To avoid broken links
insinto /usr/share/doc/${PF}/html
doins LICENSE_1_0.txt
dosym /usr/include/boost /usr/share/doc/${PF}/html/boost
fi
pushd "${ED}usr/$(get_libdir)" > /dev/null || die
local ext=$(get_libname)
if use threads; then
local f
for f in *${ext}; do
dosym ${f} /usr/$(get_libdir)/${f/${ext}/-mt${ext}}
done
fi
popd > /dev/null || die
if use tools; then
dobin dist/bin/*
insinto /usr/share
doins -r dist/share/boostbook
fi
# boost's build system truely sucks for not having a destdir. Because for
# this reason we are forced to build with a prefix that includes the
# DESTROOT, dynamic libraries on Darwin end messed up, referencing the
# DESTROOT instread of the actual EPREFIX. There is no way out of here
# but to do it the dirty way of manually setting the right install_names.
if [[ ${CHOST} == *-darwin* ]]; then
einfo "Working around completely broken build-system(tm)"
local d
for d in "${ED}"usr/lib/*.dylib; do
if [[ -f ${d} ]]; then
# fix the "soname"
ebegin " correcting install_name of ${d#${ED}}"
install_name_tool -id "/${d#${D}}" "${d}"
eend $?
# fix references to other libs
refs=$(otool -XL "${d}" | \
sed -e '1d' -e 's/^\t//' | \
grep "^libboost_" | \
cut -f1 -d' ')
local r
for r in ${refs}; do
ebegin " correcting reference to ${r}"
install_name_tool -change \
"${r}" \
"${EPREFIX}/usr/lib/${r}" \
"${d}"
eend $?
done
fi
done
fi
}
pkg_preinst() {
# Yai for having symlinks that are nigh-impossible to remove without
# resorting to dirty hacks like these. Removes lingering symlinks
# from the slotted versions.
local symlink
for symlink in "${EROOT}usr/include/boost" "${EROOT}usr/share/boostbook"; do
[[ -L ${symlink} ]] && rm -f "${symlink}"
done
}
# the tests will never fail because these are not intended as sanity
# tests at all. They are more a way for upstream to check their own code
# on new compilers. Since they would either be completely unreliable
# (failing for no good reason) or completely useless (never failing)
# there is no point in having them in the ebuild to begin with.
src_test() { :; }

View File

@ -0,0 +1,29 @@
--- libs/locale/build/Jamfile.v2
+++ libs/locale/build/Jamfile.v2
@@ -58,8 +58,8 @@
if $(ICU_LINK)
{
- ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin <runtime-link>shared ;
- ICU64_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <dll-path>$(ICU_PATH)/bin64 <runtime-link>shared ;
+ ICU_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <runtime-link>shared ;
+ ICU64_OPTS = <include>$(ICU_PATH)/include <linkflags>$(ICU_LINK) <runtime-link>shared ;
}
else
{
@@ -117,7 +117,6 @@
<library>icuuc/<link>shared/<runtime-link>shared
<library>icudt/<link>shared/<runtime-link>shared
<library>icuin/<link>shared/<runtime-link>shared
- <dll-path>$(ICU_PATH)/bin
<runtime-link>shared ;
@@ -176,7 +175,6 @@
<library>icuuc_64/<link>shared/<runtime-link>shared
<library>icudt_64/<link>shared/<runtime-link>shared
<library>icuin_64/<link>shared/<runtime-link>shared
- <dll-path>$(ICU_PATH)/bin64
<runtime-link>shared ;

View File

@ -0,0 +1,62 @@
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -39,23 +39,6 @@
PYTHON_ID = [ regex.replace $(python-id) "[*\\/:\"\']" "_" ] ;
}
-
-rule find-py3-version
-{
- local versions = [ feature.values python ] ;
- local py3ver ;
- for local v in $(versions)
- {
- if $(v) >= 3.0
- {
- py3ver = $(v) ;
- }
- }
- return $(py3ver) ;
-}
-
-py3-version = [ find-py3-version ] ;
-
project boost/python
: source-location ../src
: requirements
@@ -82,7 +65,7 @@
rule cond ( test ? : yes * : no * ) { if $(test) { return $(yes) ; } else { return $(no) ; } }
rule unless ( test ? : yes * : no * ) { if ! $(test) { return $(yes) ; } else { return $(no) ; } }
-rule lib_boost_python ( is-py3 ? )
+rule lib_boost_python
{
local python_major_version = [ MATCH "^([^.]+)" : [ feature.values python ] ] ;
@@ -91,7 +74,7 @@
{
python2 = true ;
}
- lib [ cond $(is-py3) : boost_python3 : boost_python ]
+ lib boost_python
: # sources
numeric.cpp
list.cpp
@@ -148,7 +131,6 @@
<dependency>config-warning
<python-debugging>on:<define>BOOST_DEBUG_PYTHON
- [ cond $(is-py3) : <python>$(py3-version) ]
: # default build
<link>shared
: # usage requirements
@@ -160,9 +142,3 @@
lib_boost_python ;
boost-install boost_python ;
-
-if $(py3-version)
-{
- lib_boost_python yes ;
- boost-install boost_python3 ;
-}

View File

@ -0,0 +1,95 @@
https://svn.boost.org/trac/boost/ticket/4657
https://svn.boost.org/trac/boost/changeset/76290
--- libs/mpi/src/python/datatypes.cpp
+++ libs/mpi/src/python/datatypes.cpp
@@ -17,7 +17,9 @@
void export_datatypes()
{
+#if PY_MAJOR_VERSION < 3
register_serialized(long(0), &PyInt_Type);
+#endif
register_serialized(false, &PyBool_Type);
register_serialized(double(0.0), &PyFloat_Type);
}
--- libs/mpi/src/python/py_environment.cpp
+++ libs/mpi/src/python/py_environment.cpp
@@ -11,6 +11,9 @@
* This file reflects the Boost.MPI "environment" class into Python
* methods at module level.
*/
+
+#include <locale>
+#include <string>
#include <boost/python.hpp>
#include <boost/mpi.hpp>
@@ -50,11 +53,64 @@
// If anything changed, convert C-style argc/argv into Python argv
if (mpi_argv != my_argv)
+ {
+#if PY_MAJOR_VERSION >= 3
+
+ wchar_t **argv_copy = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*mpi_argc);
+ /* We need a second copy, as Python might modify the first one. */
+ wchar_t **argv_copy2 = (wchar_t **)PyMem_Malloc(sizeof(wchar_t*)*mpi_argc);
+
+ if (!argv_copy || !argv_copy2) {
+ fprintf(stderr, "out of memory\n");
+ return false;
+ }
+
+ std::locale mylocale;
+ mbstate_t mystate;
+
+ const std::codecvt<char, wchar_t, mbstate_t>& myfacet =
+ std::use_facet<std::codecvt<char, wchar_t, mbstate_t> >(mylocale);
+
+ for (int i = 0; i < mpi_argc; i++)
+ {
+ size_t length = strlen(mpi_argv[i]);
+
+ wchar_t *dest = (wchar_t *) PyMem_Malloc(sizeof(wchar_t) * (length + 1));
+
+ const char *from_next;
+ wchar_t *to_next;
+
+ std::codecvt<wchar_t,char,mbstate_t>::result myresult =
+ myfacet.out(mystate,
+ mpi_argv[i], mpi_argv[i] + length + 1, from_next,
+ dest, dest+length+1, to_next);
+
+ if (myresult != std::codecvt<wchar_t,char,mbstate_t>::ok )
+ {
+ fprintf(stderr, "failure translating argv\n");
+ return 1;
+ }
+
+ argv_copy2[i] = argv_copy[i] = dest;
+ if (!argv_copy[i])
+ return false;
+ }
+
+ PySys_SetArgv(mpi_argc, argv_copy);
+
+ for (int i = 0; i < mpi_argc; i++) {
+ PyMem_Free(argv_copy2[i]);
+ }
+ PyMem_Free(argv_copy);
+ PyMem_Free(argv_copy2);
+#else
PySys_SetArgv(mpi_argc, mpi_argv);
+#endif
+ }
- for (int arg = 0; arg < my_argc; ++arg)
- free(my_argv[arg]);
- delete [] my_argv;
+ for (int arg = 0; arg < mpi_argc; ++arg)
+ free(mpi_argv[arg]);
+ delete [] mpi_argv;
return true;
}

View File

@ -0,0 +1,23 @@
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -85,6 +85,12 @@
rule lib_boost_python ( is-py3 ? )
{
+ local python_major_version = [ MATCH "^([^.]+)" : [ feature.values python ] ] ;
+ local python2 ;
+ if $(python_major_version) = 2
+ {
+ python2 = true ;
+ }
lib [ cond $(is-py3) : boost_python3 : boost_python ]
: # sources
numeric.cpp
@@ -119,6 +125,7 @@
: # requirements
<link>static:<define>BOOST_PYTHON_STATIC_LIB
<define>BOOST_PYTHON_SOURCE
+ [ cond $(python2) : <cxxflags>-fno-strict-aliasing ]
# On Windows, all code using Python has to link to the Python
# import library.

View File

@ -0,0 +1,24 @@
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -109,20 +109,7 @@
<link>static:<define>BOOST_PYTHON_STATIC_LIB
<define>BOOST_PYTHON_SOURCE
[ cond $(python2) : <cxxflags>-fno-strict-aliasing ]
-
- # On Windows, all code using Python has to link to the Python
- # import library.
- #
- # On *nix we never link libboost_python to libpython. When
- # extending Python, all Python symbols are provided by the
- # Python interpreter executable. When embedding Python, the
- # client executable is expected to explicitly link to
- # /python//python (the target representing libpython) itself.
- #
- # python_for_extensions is a target defined by Boost.Build to
- # provide the Python include paths, and on Windows, the Python
- # import library, as usage requirements.
- [ cond [ python.configured ] : <library>/python//python_for_extensions ]
+ [ cond [ python.configured ] : <library>/python//python ]
# we prevent building when there is no python available
# as it's not possible anyway, and to cause dependents to

View File

@ -0,0 +1,69 @@
https://svn.boost.org/trac/boost/ticket/6286
--- boostcpp.jam
+++ boostcpp.jam
@@ -99,13 +99,6 @@
BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" "_" ] ;
}
-# Python build id (only for Python libraries)
-python-id = [ option.get "python-buildid" ] ;
-if $(python-id)
-{
- PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ;
-}
-
##############################################################################
#
# 1. The 'tag' function that adds decoration suitable to the properties if
--- libs/mpi/build/Jamfile.v2
+++ libs/mpi/build/Jamfile.v2
@@ -8,6 +8,8 @@
# Authors: Douglas Gregor
# Andrew Lumsdaine
+import option ;
+import regex ;
import mpi ;
import indirect ;
import python ;
@@ -24,6 +26,13 @@
<tag>@$(__name__).tag
;
+# Python build id (only for Python libraries)
+python-id = [ option.get "python-buildid" ] ;
+if $(python-id)
+{
+ PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ;
+}
+
rule tag ( name : type ? : property-set )
{
local result = $(name) ;
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -2,6 +2,8 @@
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+import option ;
+import regex ;
import os ;
import indirect ;
import modules ;
@@ -30,6 +32,14 @@
;
}
+# Python build id (only for Python libraries)
+python-id = [ option.get "python-buildid" ] ;
+if $(python-id)
+{
+ PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ;
+}
+
+
rule find-py3-version
{
local versions = [ feature.values python ] ;

View File

@ -0,0 +1,22 @@
--- libs/mpi/build/Jamfile.v2
+++ libs/mpi/build/Jamfile.v2
@@ -30,7 +30,7 @@
python-id = [ option.get "python-buildid" ] ;
if $(python-id)
{
- PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ;
+ PYTHON_ID = [ regex.replace $(python-id) "[*\\/:\"\']" "_" ] ;
}
rule tag ( name : type ? : property-set )
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -36,7 +36,7 @@
python-id = [ option.get "python-buildid" ] ;
if $(python-id)
{
- PYTHON_ID = [ regex.replace $(python-id) "[*\\/:.\"\']" "_" ] ;
+ PYTHON_ID = [ regex.replace $(python-id) "[*\\/:\"\']" "_" ] ;
}

View File

@ -0,0 +1,69 @@
https://svn.boost.org/trac/boost/ticket/6286
--- boostcpp.jam
+++ boostcpp.jam
@@ -99,13 +99,6 @@
BUILD_ID = [ regex.replace $(build-id) "[*\\/:.\"\' ]" _ ] ;
}
-# Python build id (for Python libraries only).
-python-id = [ option.get "python-buildid" ] ;
-if $(python-id)
-{
- PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
-}
-
################################################################################
#
--- libs/mpi/build/Jamfile.v2
+++ libs/mpi/build/Jamfile.v2
@@ -8,6 +8,8 @@
# Authors: Douglas Gregor
# Andrew Lumsdaine
+import option ;
+import regex ;
import mpi ;
import indirect ;
import python ;
@@ -24,6 +26,13 @@
<tag>@$(__name__).tag
;
+# Python build id (for Python libraries only).
+python-id = [ option.get "python-buildid" ] ;
+if $(python-id)
+{
+ PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
+}
+
rule tag ( name : type ? : property-set )
{
local result = $(name) ;
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -2,6 +2,8 @@
# Software License, Version 1.0. (See accompanying
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
+import option ;
+import regex ;
import os ;
import indirect ;
import modules ;
@@ -30,6 +32,14 @@
;
}
+# Python build id (for Python libraries only).
+python-id = [ option.get "python-buildid" ] ;
+if $(python-id)
+{
+ PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
+}
+
+
rule find-py3-version
{
local versions = [ feature.values python ] ;

View File

@ -0,0 +1,22 @@
--- libs/mpi/build/Jamfile.v2
+++ libs/mpi/build/Jamfile.v2
@@ -30,7 +30,7 @@
python-id = [ option.get "python-buildid" ] ;
if $(python-id)
{
- PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
+ PYTHON_ID = [ regex.replace $(python-id) [*\\/:\"\'] _ ] ;
}
rule tag ( name : type ? : property-set )
--- libs/python/build/Jamfile.v2
+++ libs/python/build/Jamfile.v2
@@ -36,7 +36,7 @@
python-id = [ option.get "python-buildid" ] ;
if $(python-id)
{
- PYTHON_ID = [ regex.replace $(python-id) [*\\/:.\"\'] _ ] ;
+ PYTHON_ID = [ regex.replace $(python-id) [*\\/:\"\'] _ ] ;
}

View File

@ -0,0 +1,52 @@
Index: boost/locale/utf.hpp
===================================================================
--- boost/locale/utf.hpp (revision 81589)
+++ boost/locale/utf.hpp (revision 81590)
@@ -219,16 +219,22 @@
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
case 2:
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
case 1:
if(BOOST_LOCALE_UNLIKELY(p==e))
return incomplete;
tmp = *p++;
+ if (!is_trail(tmp))
+ return illegal;
c = (c << 6) | ( tmp & 0x3F);
}
Index: libs/locale/test/test_codepage_converter.cpp
===================================================================
--- libs/locale/test/test_codepage_converter.cpp (revision 81589)
+++ libs/locale/test/test_codepage_converter.cpp (revision 81590)
@@ -140,6 +140,20 @@
TEST_TO("\xf8\x90\x80\x80\x80",illegal); // 400 0000
TEST_TO("\xfd\xbf\xbf\xbf\xbf\xbf",illegal); // 7fff ffff
+ std::cout << "-- Invalid trail" << std::endl;
+ TEST_TO("\xC2\x7F",illegal);
+ TEST_TO("\xdf\x7F",illegal);
+ TEST_TO("\xe0\x7F\x80",illegal);
+ TEST_TO("\xef\xbf\x7F",illegal);
+ TEST_TO("\xe0\x7F\x80",illegal);
+ TEST_TO("\xef\xbf\x7F",illegal);
+ TEST_TO("\xf0\x7F\x80\x80",illegal);
+ TEST_TO("\xf4\x7f\xbf\xbf",illegal);
+ TEST_TO("\xf0\x90\x7F\x80",illegal);
+ TEST_TO("\xf4\x8f\x7F\xbf",illegal);
+ TEST_TO("\xf0\x90\x80\x7F",illegal);
+ TEST_TO("\xf4\x8f\xbf\x7F",illegal);
+
std::cout << "-- Invalid length" << std::endl;
/// Test that this actually works

View File

@ -0,0 +1,11 @@
--- boost/signals2/detail/variadic_slot_invoker.hpp.org 2012-11-20 09:15:55.000000000 +0400
+++ boost/signals2/detail/variadic_slot_invoker.hpp 2012-11-20 09:19:56.000000000 +0400
@@ -20,7 +20,7 @@
// if compiler has std::tuple use it instead of boost::tuple
// because boost::tuple does not have variadic template support at present.
#ifdef BOOST_NO_CXX11_HDR_TUPLE
-#include <boost/tuple.hpp>
+#include <boost/tuple/tuple.hpp>
#define BOOST_SIGNALS2_TUPLE boost::tuple
#else
#include <tuple>

View File

@ -0,0 +1,11 @@
--- boostcpp.jam
+++ boostcpp.jam
@@ -377,7 +377,7 @@
if $(layout) = versioned
{
result = [ common.format-name
- <base> <toolset> <threading> <runtime> -$(BOOST_VERSION_TAG)
+ <base> <threading> <runtime> -$(BOOST_VERSION_TAG)
-$(BUILD_ID)
: $(name) : $(type) : $(property-set) ] ;
}