[Bf-blender-cvs] [f82f151] master: Booleans: Boost is no longer a dependency for Carve

Sergey Sharybin noreply at git.blender.org
Thu Nov 13 14:26:37 CET 2014


Commit: f82f1513e06c7680d358c0ecd94ad36187225273
Author: Sergey Sharybin
Date:   Thu Nov 13 17:36:33 2014 +0500
Branches: master
https://developer.blender.org/rBf82f1513e06c7680d358c0ecd94ad36187225273

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.

===================================================================

M	CMakeLists.txt
M	extern/carve/CMakeLists.txt
M	extern/carve/SConscript
M	extern/carve/bundle.sh
A	extern/carve/include/carve/random/random.h
M	extern/carve/lib/polyhedron.cpp
A	extern/carve/patches/files/random.h
A	extern/carve/patches/random.patch
M	extern/carve/patches/series

===================================================================

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 7f69baa..7999f9a 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 5754290..643bd42 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 f975e25..e08e75e 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 2a3e621..236720f 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 0000000..634063c
--- /dev/null
+++ b/extern/carve/include/carve/random/random.h
@@ -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_;
+};
+
+}
diff --git a/extern/carve/lib/polyhedron.cpp b/extern/carve/lib/polyhedron.cpp
index 7f65da8..d402fce 100644
--- a/extern/carve/lib/polyhedron.cpp
+++ b/extern/carve/lib/polyhedron.cpp
@@ -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,
diff --git a/extern/carve/patches/files/random.h b/extern/carve/patches/files/random.h
new file mode 100644
index 0000000..634063c
--- /dev/null
+++ b/extern/carve/patches/files/random.h
@@ -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_;
+};
+
+}
diff --git a/extern/carve/patches/random.patch b/extern/carve/patches/random.patch
new file mode 100644
index 0000000..36cc8d1
--- /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 <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,
diff --git a/extern/carve/patches/series b/extern/carve/patches/series
index 4691339..b7e97d6 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




More information about the Bf-blender-cvs mailing list