diff --git a/CMakeLists.txt b/CMakeLists.txt index 7f69baa0d2f..7999f9a2a5d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -544,7 +544,7 @@ if(NOT WITH_PYTHON) set(WITH_CYCLES OFF) endif() -# enable boost for cycles, booleans, audaspace or i18n +# enable boost for cycles, audaspace or i18n # otherwise if the user disabled if(NOT WITH_BOOST) # Explicitly disabled. so disable all deps. @@ -557,13 +557,12 @@ if(NOT WITH_BOOST) endmacro() set_and_warn(WITH_CYCLES OFF) - set_and_warn(WITH_MOD_BOOLEAN OFF) set_and_warn(WITH_AUDASPACE OFF) set_and_warn(WITH_INTERNATIONAL OFF) set_and_warn(WITH_OPENAL OFF) # depends on AUDASPACE set_and_warn(WITH_GAMEENGINE OFF) # depends on AUDASPACE -elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_MOD_BOOLEAN OR WITH_AUDASPACE OR WITH_INTERNATIONAL) +elseif(WITH_CYCLES OR WITH_OPENIMAGEIO OR WITH_AUDASPACE OR WITH_INTERNATIONAL) # Keep enabled else() # Enabled but we don't need it diff --git a/extern/carve/CMakeLists.txt b/extern/carve/CMakeLists.txt index 5754290d710..643bd423546 100644 --- a/extern/carve/CMakeLists.txt +++ b/extern/carve/CMakeLists.txt @@ -161,6 +161,7 @@ if(WITH_BOOST) add_definitions( -DCARVE_SYSTEM_BOOST + -DHAVE_BOOST_LIBRARY ) list(APPEND INC_SYS diff --git a/extern/carve/SConscript b/extern/carve/SConscript index f975e253d60..e08e75e6640 100644 --- a/extern/carve/SConscript +++ b/extern/carve/SConscript @@ -19,6 +19,7 @@ if env['WITH_BF_BOOST']: defs.append('HAVE_BOOST_UNORDERED_COLLECTIONS') defs.append('CARVE_SYSTEM_BOOST') + defs.append('HAVE_BOOST_LIBRARY') incs.append(env['BF_BOOST_INC']) env.BlenderLib ('extern_carve', Split(sources), incs, defs, libtype=['extern'], priority=[40] ) diff --git a/extern/carve/bundle.sh b/extern/carve/bundle.sh index 2a3e621fab0..236720f740d 100755 --- a/extern/carve/bundle.sh +++ b/extern/carve/bundle.sh @@ -31,6 +31,8 @@ headers=`find ./lib -type f -iname '*.h' -or -iname '*.hpp' | sed -r 's/^\.\//\t includes=`find ./include -type f -iname '*.h' -or -iname '*.hpp' | sed -r 's/^\.\//\t/' | sort -d` cp patches/files/config.h include/carve/config.h +mkdir -p include/carve/random +cp patches/files/random.h include/carve/random/random.h cat > CMakeLists.txt << EOF # ***** BEGIN GPL LICENSE BLOCK ***** @@ -91,6 +93,7 @@ if(WITH_BOOST) add_definitions( -DCARVE_SYSTEM_BOOST + -DHAVE_BOOST_LIBRARY ) list(APPEND INC_SYS @@ -123,6 +126,7 @@ if env['WITH_BF_BOOST']: defs.append('HAVE_BOOST_UNORDERED_COLLECTIONS') defs.append('CARVE_SYSTEM_BOOST') + defs.append('HAVE_BOOST_LIBRARY') incs.append(env['BF_BOOST_INC']) env.BlenderLib ('extern_carve', Split(sources), incs, defs, libtype=['extern'], priority=[40] ) diff --git a/extern/carve/include/carve/random/random.h b/extern/carve/include/carve/random/random.h new file mode 100644 index 00000000000..634063cb90c --- /dev/null +++ b/extern/carve/include/carve/random/random.h @@ -0,0 +1,61 @@ +#include +#include +#include + +namespace boost { +#if __cplusplus > 199711L +# include +typedef std::mt19937 mt19937; +#else +# include +struct mt19937 { + int operator()() { + return rand(); + } + + int max() { + return RAND_MAX; + } +}; +#endif + +template +struct uniform_on_sphere { + typedef std::vector result_type; + + uniform_on_sphere(int dimension) { + assert(dimension == 3); + } + + std::vector + operator()(float u1, float u2) { + T z = 1.0 - 2.0*u1; + T r = std::sqrt(std::max(0.0, 1.0 - z*z)); + T phi = 2.0*M_PI*u2; + T x = r*std::cos(phi); + T y = r*std::sin(phi); + std::vector result; + result.push_back(x); + result.push_back(y); + result.push_back(z); + return result; + } +}; + +template +struct variate_generator { + + variate_generator(RNG rng, DISTR distr) + : rng_(rng), distr_(distr) {} + + typename DISTR::result_type + operator()() { + float rng_max_inv = 1.0 / rng_.max(); + return distr_(rng_() * rng_max_inv, rng_() * rng_max_inv); + } + + RNG rng_; + DISTR distr_; +}; + +} diff --git a/extern/carve/lib/polyhedron.cpp b/extern/carve/lib/polyhedron.cpp index 7f65da8c125..d402fce36df 100644 --- a/extern/carve/lib/polyhedron.cpp +++ b/extern/carve/lib/polyhedron.cpp @@ -36,7 +36,11 @@ #include -#include BOOST_INCLUDE(random.hpp) +#ifdef HAVE_BOOST_LIBRARY +# include BOOST_INCLUDE(random.hpp) +#else +# include +#endif namespace { bool emb_test(carve::poly::Polyhedron *poly, diff --git a/extern/carve/patches/files/random.h b/extern/carve/patches/files/random.h new file mode 100644 index 00000000000..634063cb90c --- /dev/null +++ b/extern/carve/patches/files/random.h @@ -0,0 +1,61 @@ +#include +#include +#include + +namespace boost { +#if __cplusplus > 199711L +# include +typedef std::mt19937 mt19937; +#else +# include +struct mt19937 { + int operator()() { + return rand(); + } + + int max() { + return RAND_MAX; + } +}; +#endif + +template +struct uniform_on_sphere { + typedef std::vector result_type; + + uniform_on_sphere(int dimension) { + assert(dimension == 3); + } + + std::vector + operator()(float u1, float u2) { + T z = 1.0 - 2.0*u1; + T r = std::sqrt(std::max(0.0, 1.0 - z*z)); + T phi = 2.0*M_PI*u2; + T x = r*std::cos(phi); + T y = r*std::sin(phi); + std::vector result; + result.push_back(x); + result.push_back(y); + result.push_back(z); + return result; + } +}; + +template +struct variate_generator { + + variate_generator(RNG rng, DISTR distr) + : rng_(rng), distr_(distr) {} + + typename DISTR::result_type + operator()() { + float rng_max_inv = 1.0 / rng_.max(); + return distr_(rng_() * rng_max_inv, rng_() * rng_max_inv); + } + + RNG rng_; + DISTR distr_; +}; + +} diff --git a/extern/carve/patches/random.patch b/extern/carve/patches/random.patch new file mode 100644 index 00000000000..36cc8d10430 --- /dev/null +++ b/extern/carve/patches/random.patch @@ -0,0 +1,16 @@ +diff -r 9a85d733a43d lib/polyhedron.cpp +--- a/lib/polyhedron.cpp Tue Jun 24 11:15:23 2014 +1000 ++++ b/lib/polyhedron.cpp Thu Nov 13 17:36:06 2014 +0500 +@@ -36,7 +36,11 @@ + + #include + +-#include BOOST_INCLUDE(random.hpp) ++#ifdef HAVE_BOOST_LIBRARY ++# include BOOST_INCLUDE(random.hpp) ++#else ++# include ++#endif + + namespace { + bool emb_test(carve::poly::Polyhedron *poly, diff --git a/extern/carve/patches/series b/extern/carve/patches/series index 4691339b419..b7e97d68c4c 100644 --- a/extern/carve/patches/series +++ b/extern/carve/patches/series @@ -11,3 +11,4 @@ mesh_simplify_uninitialized_var.patch memory_leak_fix.patch msvc_fix.patch face_hole_merge_workaround.patch +random.patch