Booleans: Boost is no longer a dependency for Carve

SCons is currently broken on my laptop, so can't test if it works for sure,
so please do tests of that.
This commit is contained in:
Sergey Sharybin 2014-11-13 17:36:33 +05:00
parent 4d35ecc3bb
commit f82f1513e0
9 changed files with 152 additions and 4 deletions

View File

@ -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

View File

@ -161,6 +161,7 @@ if(WITH_BOOST)
add_definitions(
-DCARVE_SYSTEM_BOOST
-DHAVE_BOOST_LIBRARY
)
list(APPEND INC_SYS

View File

@ -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] )

View File

@ -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] )

View File

@ -0,0 +1,61 @@
#include <cassert>
#include <cmath>
#include <vector>
namespace boost {
#if __cplusplus > 199711L
# include <random>
typedef std::mt19937 mt19937;
#else
# include <stdlib.h>
struct mt19937 {
int operator()() {
return rand();
}
int max() {
return RAND_MAX;
}
};
#endif
template<typename T>
struct uniform_on_sphere {
typedef std::vector<T> result_type;
uniform_on_sphere(int dimension) {
assert(dimension == 3);
}
std::vector<T>
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<T> result;
result.push_back(x);
result.push_back(y);
result.push_back(z);
return result;
}
};
template<typename RNG, typename DISTR>
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_;
};
}

View File

@ -36,7 +36,11 @@
#include <carve/mesh.hpp>
#include BOOST_INCLUDE(random.hpp)
#ifdef HAVE_BOOST_LIBRARY
# include BOOST_INCLUDE(random.hpp)
#else
# include <carve/random/random.h>
#endif
namespace {
bool emb_test(carve::poly::Polyhedron *poly,

61
extern/carve/patches/files/random.h vendored Normal file
View File

@ -0,0 +1,61 @@
#include <cassert>
#include <cmath>
#include <vector>
namespace boost {
#if __cplusplus > 199711L
# include <random>
typedef std::mt19937 mt19937;
#else
# include <stdlib.h>
struct mt19937 {
int operator()() {
return rand();
}
int max() {
return RAND_MAX;
}
};
#endif
template<typename T>
struct uniform_on_sphere {
typedef std::vector<T> result_type;
uniform_on_sphere(int dimension) {
assert(dimension == 3);
}
std::vector<T>
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<T> result;
result.push_back(x);
result.push_back(y);
result.push_back(z);
return result;
}
};
template<typename RNG, typename DISTR>
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_;
};
}

16
extern/carve/patches/random.patch vendored Normal file
View File

@ -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 <carve/mesh.hpp>
-#include BOOST_INCLUDE(random.hpp)
+#ifdef HAVE_BOOST_LIBRARY
+# include BOOST_INCLUDE(random.hpp)
+#else
+# include <carve/random/random.h>
+#endif
namespace {
bool emb_test(carve::poly::Polyhedron *poly,

View File

@ -11,3 +11,4 @@ mesh_simplify_uninitialized_var.patch
memory_leak_fix.patch
msvc_fix.patch
face_hole_merge_workaround.patch
random.patch