From 01f10949313105be9c218e9436693e48c4f6baf1 Mon Sep 17 00:00:00 2001 From: Danny Robson Date: Thu, 1 Aug 2013 17:52:02 +1000 Subject: [PATCH] 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. --- dev-libs/boost/Manifest | 14 + dev-libs/boost/boost-1.53.0.ebuild | 357 ++++++++++++++++++ .../boost-1.48.0-disable_icu_rpath.patch | 29 ++ ...oost-1.48.0-disable_libboost_python3.patch | 62 +++ .../files/boost-1.48.0-mpi_python3.patch | 95 +++++ ...st-1.48.0-no_strict_aliasing_python2.patch | 23 ++ .../files/boost-1.48.0-python_linking.patch | 24 ++ .../boost-1.48.0-respect_python-buildid.patch | 69 ++++ ....48.0-support_dots_in_python-buildid.patch | 22 ++ .../boost-1.51.0-respect_python-buildid.patch | 69 ++++ ....51.0-support_dots_in_python-buildid.patch | 22 ++ .../boost/files/boost-1.52.0-locale-utf.patch | 52 +++ dev-libs/boost/files/boost-1.52.0-tuple.patch | 11 + .../boost/files/remove-toolset-1.48.0.patch | 11 + 14 files changed, 860 insertions(+) create mode 100644 dev-libs/boost/Manifest create mode 100644 dev-libs/boost/boost-1.53.0.ebuild create mode 100644 dev-libs/boost/files/boost-1.48.0-disable_icu_rpath.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-disable_libboost_python3.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-mpi_python3.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-no_strict_aliasing_python2.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-python_linking.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-respect_python-buildid.patch create mode 100644 dev-libs/boost/files/boost-1.48.0-support_dots_in_python-buildid.patch create mode 100644 dev-libs/boost/files/boost-1.51.0-respect_python-buildid.patch create mode 100644 dev-libs/boost/files/boost-1.51.0-support_dots_in_python-buildid.patch create mode 100644 dev-libs/boost/files/boost-1.52.0-locale-utf.patch create mode 100644 dev-libs/boost/files/boost-1.52.0-tuple.patch create mode 100644 dev-libs/boost/files/remove-toolset-1.48.0.patch diff --git a/dev-libs/boost/Manifest b/dev-libs/boost/Manifest new file mode 100644 index 0000000..dc3fada --- /dev/null +++ b/dev-libs/boost/Manifest @@ -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 diff --git a/dev-libs/boost/boost-1.53.0.ebuild b/dev-libs/boost/boost-1.53.0.ebuild new file mode 100644 index 0000000..53d24fb --- /dev/null +++ b/dev-libs/boost/boost-1.53.0.ebuild @@ -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}" "${CXXFLAGS}" "${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 < 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() { :; } diff --git a/dev-libs/boost/files/boost-1.48.0-disable_icu_rpath.patch b/dev-libs/boost/files/boost-1.48.0-disable_icu_rpath.patch new file mode 100644 index 0000000..a902d61 --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-disable_icu_rpath.patch @@ -0,0 +1,29 @@ +--- libs/locale/build/Jamfile.v2 ++++ libs/locale/build/Jamfile.v2 +@@ -58,8 +58,8 @@ + + if $(ICU_LINK) + { +- ICU_OPTS = $(ICU_PATH)/include $(ICU_LINK) $(ICU_PATH)/bin shared ; +- ICU64_OPTS = $(ICU_PATH)/include $(ICU_LINK) $(ICU_PATH)/bin64 shared ; ++ ICU_OPTS = $(ICU_PATH)/include $(ICU_LINK) shared ; ++ ICU64_OPTS = $(ICU_PATH)/include $(ICU_LINK) shared ; + } + else + { +@@ -117,7 +117,6 @@ + icuuc/shared/shared + icudt/shared/shared + icuin/shared/shared +- $(ICU_PATH)/bin + shared ; + + +@@ -176,7 +175,6 @@ + icuuc_64/shared/shared + icudt_64/shared/shared + icuin_64/shared/shared +- $(ICU_PATH)/bin64 + shared ; + + diff --git a/dev-libs/boost/files/boost-1.48.0-disable_libboost_python3.patch b/dev-libs/boost/files/boost-1.48.0-disable_libboost_python3.patch new file mode 100644 index 0000000..c24a56c --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-disable_libboost_python3.patch @@ -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 @@ + config-warning + + on:BOOST_DEBUG_PYTHON +- [ cond $(is-py3) : $(py3-version) ] + : # default build + 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 ; +-} diff --git a/dev-libs/boost/files/boost-1.48.0-mpi_python3.patch b/dev-libs/boost/files/boost-1.48.0-mpi_python3.patch new file mode 100644 index 0000000..a32eca9 --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-mpi_python3.patch @@ -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 ++#include + #include + #include + +@@ -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& myfacet = ++ std::use_facet >(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::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::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; + } diff --git a/dev-libs/boost/files/boost-1.48.0-no_strict_aliasing_python2.patch b/dev-libs/boost/files/boost-1.48.0-no_strict_aliasing_python2.patch new file mode 100644 index 0000000..89f8109 --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-no_strict_aliasing_python2.patch @@ -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 + static:BOOST_PYTHON_STATIC_LIB + BOOST_PYTHON_SOURCE ++ [ cond $(python2) : -fno-strict-aliasing ] + + # On Windows, all code using Python has to link to the Python + # import library. diff --git a/dev-libs/boost/files/boost-1.48.0-python_linking.patch b/dev-libs/boost/files/boost-1.48.0-python_linking.patch new file mode 100644 index 0000000..e7f4e7c --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-python_linking.patch @@ -0,0 +1,24 @@ +--- libs/python/build/Jamfile.v2 ++++ libs/python/build/Jamfile.v2 +@@ -109,20 +109,7 @@ + static:BOOST_PYTHON_STATIC_LIB + BOOST_PYTHON_SOURCE + [ cond $(python2) : -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 ] : /python//python_for_extensions ] ++ [ cond [ python.configured ] : /python//python ] + + # we prevent building when there is no python available + # as it's not possible anyway, and to cause dependents to diff --git a/dev-libs/boost/files/boost-1.48.0-respect_python-buildid.patch b/dev-libs/boost/files/boost-1.48.0-respect_python-buildid.patch new file mode 100644 index 0000000..51003db --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-respect_python-buildid.patch @@ -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 @@ + @$(__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 ] ; diff --git a/dev-libs/boost/files/boost-1.48.0-support_dots_in_python-buildid.patch b/dev-libs/boost/files/boost-1.48.0-support_dots_in_python-buildid.patch new file mode 100644 index 0000000..af65f64 --- /dev/null +++ b/dev-libs/boost/files/boost-1.48.0-support_dots_in_python-buildid.patch @@ -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) "[*\\/:\"\']" "_" ] ; + } + + diff --git a/dev-libs/boost/files/boost-1.51.0-respect_python-buildid.patch b/dev-libs/boost/files/boost-1.51.0-respect_python-buildid.patch new file mode 100644 index 0000000..327429e --- /dev/null +++ b/dev-libs/boost/files/boost-1.51.0-respect_python-buildid.patch @@ -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 @@ + @$(__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 ] ; diff --git a/dev-libs/boost/files/boost-1.51.0-support_dots_in_python-buildid.patch b/dev-libs/boost/files/boost-1.51.0-support_dots_in_python-buildid.patch new file mode 100644 index 0000000..c8dc6e1 --- /dev/null +++ b/dev-libs/boost/files/boost-1.51.0-support_dots_in_python-buildid.patch @@ -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) [*\\/:\"\'] _ ] ; + } + + diff --git a/dev-libs/boost/files/boost-1.52.0-locale-utf.patch b/dev-libs/boost/files/boost-1.52.0-locale-utf.patch new file mode 100644 index 0000000..7ef51e9 --- /dev/null +++ b/dev-libs/boost/files/boost-1.52.0-locale-utf.patch @@ -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 diff --git a/dev-libs/boost/files/boost-1.52.0-tuple.patch b/dev-libs/boost/files/boost-1.52.0-tuple.patch new file mode 100644 index 0000000..08bab86 --- /dev/null +++ b/dev-libs/boost/files/boost-1.52.0-tuple.patch @@ -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 ++#include + #define BOOST_SIGNALS2_TUPLE boost::tuple + #else + #include diff --git a/dev-libs/boost/files/remove-toolset-1.48.0.patch b/dev-libs/boost/files/remove-toolset-1.48.0.patch new file mode 100644 index 0000000..df91529 --- /dev/null +++ b/dev-libs/boost/files/remove-toolset-1.48.0.patch @@ -0,0 +1,11 @@ +--- boostcpp.jam ++++ boostcpp.jam +@@ -377,7 +377,7 @@ + if $(layout) = versioned + { + result = [ common.format-name +- -$(BOOST_VERSION_TAG) ++ -$(BOOST_VERSION_TAG) + -$(BUILD_ID) + : $(name) : $(type) : $(property-set) ] ; + }