diff options
| -rw-r--r-- | README.md | 2 | ||||
| -rw-r--r-- | common.pri | 2 | ||||
| -rw-r--r-- | doc/testing.txt | 4 | ||||
| -rw-r--r-- | eigen.pri | 72 | ||||
| -rw-r--r-- | eigen2.pri | 44 | ||||
| -rw-r--r-- | openscad.pro | 4 | ||||
| -rwxr-xr-x | scripts/linux-build-dependencies.sh | 21 | ||||
| -rwxr-xr-x | scripts/macosx-build-dependencies.sh | 21 | ||||
| -rw-r--r-- | src/csgterm.cc | 42 | ||||
| -rw-r--r-- | src/dxfdim.cc | 11 | ||||
| -rw-r--r-- | src/handle_dep.cc | 8 | ||||
| -rw-r--r-- | src/import.cc | 4 | ||||
| -rw-r--r-- | src/linalg.h | 4 | ||||
| -rw-r--r-- | tests/CMakeLists.txt | 109 | 
14 files changed, 234 insertions, 114 deletions
| @@ -92,7 +92,7 @@ Follow the instructions for the platform you're compiling on below.   * [boost (1.35 - 1.47)](http://www.boost.org/)  * [OpenCSG (1.3.2)](http://www.opencsg.org/)  * [GLEW (1.6 ->)](http://glew.sourceforge.net/) -* [Eigen2 (2.0.13->)](http://eigen.tuxfamily.org/) +* [Eigen (2.0.13->3.1.1)](http://eigen.tuxfamily.org/)  * [GCC C++ Compiler (4.2 ->)](http://gcc.gnu.org/)  * [Bison (2.4)](http://www.gnu.org/software/bison/)  * [Flex (2.5.35)](http://flex.sourceforge.net/) @@ -9,5 +9,5 @@ include(bison.pri)  include(cgal.pri)  include(opencsg.pri)  include(glew.pri) -include(eigen2.pri) +include(eigen.pri)  include(boost.pri) diff --git a/doc/testing.txt b/doc/testing.txt index 8ab1cee..bbd7c18 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -85,7 +85,7 @@ Some versions of Xvfb may fail, however.  1. Trouble finding libraries on unix - To help CMAKE find eigen2, OpenCSG, CGAL, Boost, and GLEW, you can use  + To help CMAKE find eigen, OpenCSG, CGAL, Boost, and GLEW, you can use    environment variables, just like for the main qmake & openscad.pro. Examples:   OPENSCAD_LIBRARIES=$HOME cmake . @@ -93,7 +93,7 @@ Some versions of Xvfb may fail, however.   Valid variables are as follows: - BOOSTDIR, CGALDIR, EIGEN2DIR, GLEWDIR, OPENCSGDIR, OPENSCAD_LIBRARIES + BOOSTDIR, CGALDIR, EIGENDIR, GLEWDIR, OPENCSGDIR, OPENSCAD_LIBRARIES   When running, this might help find your locally built libraries (assuming   you installed into $HOME) diff --git a/eigen.pri b/eigen.pri new file mode 100644 index 0000000..b7fe366 --- /dev/null +++ b/eigen.pri @@ -0,0 +1,72 @@ +# Detect eigen3 + eigen2, then use this priority list to determine +# which eigen to use: +# +# Priority +# 0. EIGENDIR if set (also EIGEN2DIR for backwards compatability) +# 1. OPENSCAD_LIBRARIES eigen3 +# 2. OPENSCAD_LIBRARIES eigen2 +# 3. system's standard include paths for eigen3 +# 4. system's standard include paths for eigen2 + +eigen { + +# read environment variables +OPENSCAD_LIBRARIES_DIR = $$(OPENSCAD_LIBRARIES) +EIGEN2_DIR = $$(EIGEN2DIR) +EIGEN_DIR = $$(EIGENDIR) + +CONFIG(mingw-cross-env) { +  EIGEN_INCLUDEPATH = mingw-cross-env/include/eigen2 +} + +# Optionally specify location of Eigen3 using the  +# OPENSCAD_LIBRARIES env. variable +!isEmpty(OPENSCAD_LIBRARIES_DIR) { +  isEmpty(EIGEN_INCLUDEPATH) { +    exists($$OPENSCAD_LIBRARIES_DIR/include/eigen3) { +      EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen3 +    }  +  } +  isEmpty(EIGEN_INCLUDEPATH) { +    exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { +      EIGEN_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 +    }  +  } +} + + +# Optionally specify location of Eigen using the  +# EIGENDIR env. variable (EIGEN2 for backwards compatability) +!isEmpty(EIGEN2_DIR) {  +  EIGEN_INCLUDEPATH = $$EIGEN2_DIR +  message("User set EIGEN location: $$EIGEN_INCLUDEPATH") +} +!isEmpty(EIGEN_DIR) {  +  EIGEN_INCLUDEPATH = $$EIGEN_DIR +  message("User set EIGEN location: $$EIGEN_INCLUDEPATH") +} + +isEmpty(EIGEN_INCLUDEPATH) { +  freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen3 +  macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen3 +  linux*|hurd*: EIGEN_INCLUDEPATH = /usr/include/eigen3 +  netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen3 +  !exists($$EIGEN_INCLUDEPATH) { +    freebsd-g++: EIGEN_INCLUDEPATH = /usr/local/include/eigen2 +    macx: EIGEN_INCLUDEPATH = /opt/local/include/eigen2 +    linux*|hurd*: EIGEN_INCLUDEPATH = /usr/include/eigen2 +    netbsd*: EIGEN_INCLUDEPATH = /usr/pkg/include/eigen2 +  } +} + +# disable Eigen SIMD optimizations for platforms where it breaks compilation +!macx { +  !freebsd-g++ { +    QMAKE_CXXFLAGS += -DEIGEN_DONT_ALIGN +  } +} + +# EIGEN being under 'include/eigen[2-3]' needs special prepending +QMAKE_INCDIR_QT = $$EIGEN_INCLUDEPATH $$QMAKE_INCDIR_QT + +} # eigen diff --git a/eigen2.pri b/eigen2.pri deleted file mode 100644 index 0bda55b..0000000 --- a/eigen2.pri +++ /dev/null @@ -1,44 +0,0 @@ -eigen2 { - -  CONFIG(mingw-cross-env) { -    EIGEN2_INCLUDEPATH = mingw-cross-env/include/eigen2 -  } - -  # Optionally specify location of Eigen2 using the  -  # OPENSCAD_LIBRARIES env. variable -  isEmpty(EIGEN2_INCLUDEPATH) { -    OPENSCAD_LIBRARIES_DIR = $$(OPENSCAD_LIBRARIES) -    !isEmpty(OPENSCAD_LIBRARIES_DIR) { -      exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { -        EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 -      } -    } -  } - -  # Optionally specify location of Eigen2 using the  -  # EIGEN2DIR env. variable -  isEmpty(EIGEN2_INCLUDEPATH) { -    EIGEN2_DIR = $$(EIGEN2DIR) -    !isEmpty(EIGEN2_DIR) {  -      EIGEN2_INCLUDEPATH = $$EIGEN2_DIR -      message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") -    } -  } - -  isEmpty(EIGEN2_INCLUDEPATH) { -    freebsd-g++: EIGEN2_INCLUDEPATH = /usr/local/include/eigen2 -    macx: EIGEN2_INCLUDEPATH = /opt/local/include/eigen2 -    linux*|hurd*: EIGEN2_INCLUDEPATH = /usr/include/eigen2 -    netbsd*: EIGEN2_INCLUDEPATH = /usr/pkg/include/eigen2 -  } - -  # eigen2 being under 'include/eigen2' needs special prepending -  QMAKE_INCDIR_QT = $$EIGEN2_INCLUDEPATH $$QMAKE_INCDIR_QT - -  # disable Eigen SIMD optimizations for platforms where it breaks compilation -  !macx { -    !freebsd-g++ { -      QMAKE_CXXFLAGS += -DEIGEN_DONT_ALIGN -    } -  } -} diff --git a/openscad.pro b/openscad.pro index f11a494..024b788 100644 --- a/openscad.pro +++ b/openscad.pro @@ -3,7 +3,7 @@  #   MPFRDIR  #   BOOSTDIR  #   CGALDIR -#   EIGEN2DIR +#   EIGENDIR  #   GLEWDIR  #   OPENCSGDIR  #   OPENSCAD_LIBRARIES @@ -123,7 +123,7 @@ macx:CONFIG += mdi  CONFIG += cgal  CONFIG += opencsg  CONFIG += boost -CONFIG += eigen2 +CONFIG += eigen  #Uncomment the following line to enable QCodeEdit  #CONFIG += qcodeedit diff --git a/scripts/linux-build-dependencies.sh b/scripts/linux-build-dependencies.sh index aee423c..be678d3 100755 --- a/scripts/linux-build-dependencies.sh +++ b/scripts/linux-build-dependencies.sh @@ -124,7 +124,7 @@ build_boost()    # We only need certain portions of boost    ./bootstrap.sh --prefix=$DEPLOYDIR --with-libraries=thread,program_options,filesystem,system,regex  	if [ $CXX ]; then -		if [ $CXX = "clang" ]; then +		if [ $CXX = "clang++" ]; then  		  ./b2 -j$NUMCPU toolset=clang install  		  # ./b2 -j$NUMCPU toolset=clang cxxflags="-stdlib=libc++" linkflags="-stdlib=libc++" install  		fi @@ -246,17 +246,24 @@ build_eigen()    echo "Building eigen" $version "..."    cd $BASEDIR/src    rm -rf eigen-$version -  ## Directory name for v2.0.17 -  rm -rf eigen-eigen-b23437e61a07 +  EIGENDIR="none" +  if [ $version = "2.0.17" ]; then EIGENDIR=eigen-eigen-b23437e61a07; fi +  if [ $version = "3.1.1" ]; then EIGENDIR=eigen-eigen-43d9075b23ef; fi +  if [ $EIGENDIR = "none" ]; then +    echo Unknown eigen version. Please edit script. +    exit 1 +  fi +  rm -rf ./$EIGENDIR    if [ ! -f eigen-$version.tar.bz2 ]; then      curl -LO http://bitbucket.org/eigen/eigen/get/$version.tar.bz2      mv $version.tar.bz2 eigen-$version.tar.bz2    fi    tar xjf eigen-$version.tar.bz2 -  ## File name for v2.0.17 -  ln -s eigen-eigen-b23437e61a07 eigen-$version +  ln -s ./$EIGENDIR eigen-$version    cd eigen-$version -  cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR +  mkdir build +  cd build +  cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR ..    make -j$NUMCPU    make install  } @@ -320,7 +327,7 @@ fi  # edit version numbers here as needed.  # -build_eigen 2.0.17 +build_eigen 3.1.1  build_gmp 5.0.5  build_mpfr 3.1.1  build_boost 1.47.0 diff --git a/scripts/macosx-build-dependencies.sh b/scripts/macosx-build-dependencies.sh index 20ed1f2..2d7275c 100755 --- a/scripts/macosx-build-dependencies.sh +++ b/scripts/macosx-build-dependencies.sh @@ -271,20 +271,29 @@ build_eigen()    echo "Building eigen" $version "..."    cd $BASEDIR/src    rm -rf eigen-$version -  ## Directory name for v2.0.17 -  rm -rf eigen-eigen-b23437e61a07 + +  EIGENDIR="none" +  if [ $version = "2.0.17" ]; then EIGENDIR=eigen-eigen-b23437e61a07; fi +  if [ $version = "3.1.1" ]; then EIGENDIR=eigen-eigen-43d9075b23ef; fi +  if [ $EIGENDIR = "none" ]; then +    echo Unknown eigen version. Please edit script. +    exit 1 +  fi +  rm -rf ./$EIGENDIR +    if [ ! -f eigen-$version.tar.bz2 ]; then      curl -LO http://bitbucket.org/eigen/eigen/get/$version.tar.bz2      mv $version.tar.bz2 eigen-$version.tar.bz2    fi    tar xjf eigen-$version.tar.bz2 -  ## File name for v2.0.17 -  ln -s eigen-eigen-b23437e61a07 eigen-$version +  ln -s ./$EIGENDIR eigen-$version    cd eigen-$version +  mkdir build +  cd build    if $OPTION_32BIT; then      EIGEN_EXTRA_FLAGS=";i386"    fi -  cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DEIGEN_BUILD_LIB=ON -DBUILD_SHARED_LIBS=FALSE -DCMAKE_OSX_DEPLOYMENT_TARGET="$MAC_OSX_VERSION_MIN" -DCMAKE_OSX_ARCHITECTURES="x86_64$EIGEN_EXTRA_FLAGS" +  cmake -DCMAKE_INSTALL_PREFIX=$DEPLOYDIR -DEIGEN_BUILD_LIB=ON -DBUILD_SHARED_LIBS=FALSE -DCMAKE_OSX_DEPLOYMENT_TARGET="$MAC_OSX_VERSION_MIN" -DCMAKE_OSX_ARCHITECTURES="x86_64$EIGEN_EXTRA_FLAGS" ..    make -j4    make install  } @@ -325,7 +334,7 @@ fi  echo "Using basedir:" $BASEDIR  mkdir -p $SRCDIR $DEPLOYDIR -build_eigen 2.0.17 +build_eigen 3.1.1  build_gmp 5.0.5  build_mpfr 3.1.0  build_boost 1.47.0 diff --git a/src/csgterm.cc b/src/csgterm.cc index 0e68320..aed97b2 100644 --- a/src/csgterm.cc +++ b/src/csgterm.cc @@ -66,16 +66,29 @@ shared_ptr<CSGTerm> CSGTerm::createCSGTerm(type_e type, shared_ptr<CSGTerm> left    // http://www.cc.gatech.edu/~turk/my_papers/pxpl_csg.pdf  	const BoundingBox &leftbox = left->getBoundingBox();  	const BoundingBox &rightbox = right->getBoundingBox(); +	Vector3d newmin, newmax;  	if (type == TYPE_INTERSECTION) { -		BoundingBox newbox(leftbox.min().cwise().max(rightbox.min()), -											 leftbox.max().cwise().min(rightbox.max())); +#if EIGEN_WORLD_VERSION == 2 +		newmin = leftbox.min().cwise().max( rightbox.min() ); +		newmax = leftbox.max().cwise().min( rightbox.max() ); +#else +		newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); +		newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); +#endif +		BoundingBox newbox( newmin, newmax );  		if (newbox.isNull()) {  			return shared_ptr<CSGTerm>(); // Prune entire product  		}  	}  	else if (type == TYPE_DIFFERENCE) { -		BoundingBox newbox(leftbox.min().cwise().max(rightbox.min()), -											 leftbox.max().cwise().min(rightbox.max())); +#if EIGEN_WORLD_VERSION == 2 +		newmin = leftbox.min().cwise().max( rightbox.min() ); +		newmax = leftbox.max().cwise().min( rightbox.max() ); +#else +		newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); +		newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); +#endif +		BoundingBox newbox( newmin, newmax );  		if (newbox.isNull()) {  			return left; // Prune the negative component  		} @@ -119,14 +132,27 @@ void CSGTerm::initBoundingBox()  	else {  		const BoundingBox &leftbox = this->left->getBoundingBox();  		const BoundingBox &rightbox = this->right->getBoundingBox(); +		Vector3d newmin, newmax;  		switch (this->type) {  		case TYPE_UNION: -			this->bbox = this->m * BoundingBox(leftbox.min().cwise().min(rightbox.min()),  -																				 leftbox.max().cwise().max(rightbox.max())); +#if EIGEN_WORLD_VERSION == 2 +			newmin = leftbox.min().cwise().min( rightbox.min() ); +			newmax = leftbox.max().cwise().max( rightbox.max() ); +#else +			newmin = leftbox.min().array().cwiseMin( rightbox.min().array() ); +			newmax = leftbox.max().array().cwiseMax( rightbox.max().array() ); +#endif +			this->bbox = this->m * BoundingBox( newmin, newmax );  			break;  		case TYPE_INTERSECTION: -			this->bbox = this->m * BoundingBox(leftbox.min().cwise().max(rightbox.min()), -																				 leftbox.max().cwise().min(rightbox.max())); +#if EIGEN_WORLD_VERSION == 2 +			newmin = leftbox.min().cwise().max( rightbox.min() ); +			newmax = leftbox.max().cwise().min( rightbox.max() ); +#else +			newmin = leftbox.min().array().cwiseMax( rightbox.min().array() ); +			newmax = leftbox.max().array().cwiseMin( rightbox.max().array() ); +#endif +			this->bbox = this->m * BoundingBox( newmin, newmax );  			break;  		case TYPE_DIFFERENCE:  			this->bbox = this->m * leftbox; diff --git a/src/dxfdim.cc b/src/dxfdim.cc index 8f68ac6..1ed37fa 100644 --- a/src/dxfdim.cc +++ b/src/dxfdim.cc @@ -36,10 +36,9 @@  #include <sstream>  #include <boost/filesystem.hpp> -using namespace boost::filesystem; -  boost::unordered_map<std::string,Value> dxf_dim_cache;  boost::unordered_map<std::string,Value> dxf_cross_cache; +namespace fs = boost::filesystem;  Value builtin_dxf_dim(const Context *ctx, const std::vector<std::string> &argnames, const std::vector<Value> &args)  { @@ -65,8 +64,8 @@ Value builtin_dxf_dim(const Context *ctx, const std::vector<std::string> &argnam  	std::stringstream keystream;  	keystream << filename << "|" << layername << "|" << name << "|" << xorigin -						<< "|" << yorigin <<"|" << scale << "|" << last_write_time(filename) -						<< "|" << file_size(filename); +						<< "|" << yorigin <<"|" << scale << "|" << fs::last_write_time(filename) +						<< "|" << fs::file_size(filename);  	std::string key = keystream.str();  	if (dxf_dim_cache.find(key) != dxf_dim_cache.end())  		return dxf_dim_cache.find(key)->second; @@ -147,8 +146,8 @@ Value builtin_dxf_cross(const Context *ctx, const std::vector<std::string> &argn  	std::stringstream keystream;  	keystream << filename << "|" << layername << "|" << xorigin << "|" << yorigin -						<< "|" << scale << "|" << last_write_time(filename) -						<< "|" << file_size(filename); +						<< "|" << scale << "|" << fs::last_write_time(filename) +						<< "|" << fs::file_size(filename);  	std::string key = keystream.str();  	if (dxf_cross_cache.find(key) != dxf_cross_cache.end()) diff --git a/src/handle_dep.cc b/src/handle_dep.cc index cbf7157..2d6f3ff 100644 --- a/src/handle_dep.cc +++ b/src/handle_dep.cc @@ -6,7 +6,7 @@  #include <boost/foreach.hpp>  #include <boost/regex.hpp>  #include <boost/filesystem.hpp> -using namespace boost::filesystem; +namespace fs = boost::filesystem;  #include "boosty.h"  boost::unordered_set<std::string> dependencies; @@ -14,14 +14,14 @@ const char *make_command = NULL;  void handle_dep(const std::string &filename)  { -	path filepath(filename); +	fs::path filepath(filename);  	if ( boosty::is_absolute( filepath )) {  		dependencies.insert(filename);  	}  	else { -		dependencies.insert((current_path() / filepath).string()); +		dependencies.insert((fs::current_path() / filepath).string());  	} -	if (!exists(filepath) && make_command) { +	if (!fs::exists(filepath) && make_command) {  		std::stringstream buf;  		buf << make_command << " '" << boost::regex_replace(filename, boost::regex("'"), "'\\''") << "'";  		system(buf.str().c_str()); // FIXME: Handle error diff --git a/src/import.cc b/src/import.cc index dc40c8d..1073459 100644 --- a/src/import.cc +++ b/src/import.cc @@ -47,7 +47,7 @@  #include <boost/regex.hpp>  #include <boost/lexical_cast.hpp>  #include <boost/filesystem.hpp> -using namespace boost::filesystem; +namespace fs = boost::filesystem;  #include <boost/assign/std/vector.hpp>  using namespace boost::assign; // bring 'operator+=()' into scope  #include "boosty.h" @@ -80,7 +80,7 @@ AbstractNode *ImportModule::evaluate(const Context *ctx, const ModuleInstantiati  	std::string filename = c.getAbsolutePath(v.isUndefined() ? "" : v.toString());  	import_type_e actualtype = this->type;  	if (actualtype == TYPE_UNKNOWN) { -		std::string extraw = boosty::extension_str( path(filename) ); +		std::string extraw = boosty::extension_str( fs::path(filename) );  		std::string ext = boost::algorithm::to_lower_copy( extraw );  		if (ext == ".stl") actualtype = TYPE_STL;  		else if (ext == ".off") actualtype = TYPE_OFF; diff --git a/src/linalg.h b/src/linalg.h index baff7f1..450e593 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -12,7 +12,11 @@ typedef Eigen::AlignedBox<double, 3> BoundingBox;  using Eigen::Matrix3f;  using Eigen::Matrix3d;  using Eigen::Matrix4d; +#if EIGEN_WORLD_VERSION >= 3 +#define Transform3d Eigen::Affine3d +#else  using Eigen::Transform3d; +#endif  bool matrix_contains_infinity( const Eigen::Transform3d &m );  bool matrix_contains_nan( const Eigen::Transform3d &m ); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index bb7738a..33f3547 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -86,6 +86,17 @@ if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX)    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -frounding-math")  endif() +# Clang compiler + +if(CMAKE_CXX_COMPILER MATCHES ".*clang.*") +  # disable enormous amount of warnings about CGAL +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-parameter") +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-variable") +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-unused-function") +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-c++11-extensions") +  set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-sign-compare") +endif() +  #  # Build test apps  # @@ -176,7 +187,8 @@ endif()  set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF) -# Eigen2 + +# Eigen  # Turn off Eigen SIMD optimization  if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") @@ -185,34 +197,63 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin")    endif()  endif() -if (NOT $ENV{EIGEN2DIR} STREQUAL "") -  set(EIGEN2_DIR "$ENV{EIGEN2DIR}") -elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") -  set(EIGEN2_DIR "$ENV{OPENSCAD_LIBRARIES}") +# Priority +# 3. EIGENDIR if set (EIGEN2DIR for backwards compatability) +# 1. OPENSCAD_LIBRARIES eigen3 +# 2. OPENSCAD_LIBRARIES eigen2 +# 4. system's standard include paths for eigen3 +# 5. system's standard include paths for eigen2 + +set(EIGEN2_DIR "$ENV{EIGEN2DIR}") +set(EIGEN_DIR "$ENV{EIGENDIR}") +set(OPENSCAD_LIBDIR "$ENV{OPENSCAD_LIBRARIES}") + +if (EIGEN_DIR) +  set(EIGHINT ${EIGEN_DIR}/include/eigen3 ${EIGEN_DIR}/include/eigen2 ${EIGEN_DIR}) +  find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${EIGHINT}) +endif() +if (EIGEN2_DIR) +  find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${EIGEN2_DIR}/include/eigen2 ${EIGEN2_DIR})  endif() -if (NOT EIGEN2_INCLUDE_DIR) -  if (EIGEN2_DIR) -    set(EIGEN2_FIND_HINTS "${EIGEN2_DIR}/include/eigen2") -  endif() +if (NOT EIGEN_INCLUDE_DIR) +  find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${OPENSCAD_LIBDIR}/include/eigen3) +endif() +if (NOT EIGEN_INCLUDE_DIR) +  find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS ${OPENSCAD_LIBDIR}/include/eigen2) +endif() + +if (NOT EIGEN_INCLUDE_DIR)    if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") -    set(EIGEN2_FIND_PATHS /usr/local/include/eigen2) +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/local/include/eigen3)    elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") -    set(EIGEN2_FIND_PATHS /usr/pkg/include/eigen2) +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/pkg/include/eigen3) +  elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /opt/local/include/eigen3)    else() -    set(EIGEN2_FIND_PATHS /opt/local/include/eigen2 /usr/include/eigen2) +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/include/eigen3)    endif() -  find_path(EIGEN2_INCLUDE_DIR -            Eigen/Core  -            HINTS ${EIGEN2_FIND_HINTS} -            PATHS ${EIGEN2_FIND_PATHS}) -  if (NOT EIGEN2_INCLUDE_DIR) -    message(FATAL_ERROR "Eigen2 not found") +endif() + +if (NOT EIGEN_INCLUDE_DIR) +  if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/local/include/eigen2) +  elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/pkg/include/eigen2) +  elseif (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /opt/local/include/eigen2)    else() -    message(STATUS "Eigen2 found in " ${EIGEN2_INCLUDE_DIR}) +    find_path(EIGEN_INCLUDE_DIR Eigen/Core HINTS /usr/include/eigen2)    endif()  endif() -inclusion(EIGEN2_DIR EIGEN2_INCLUDE_DIR) + +if (NOT EIGEN_INCLUDE_DIR) +  message(STATUS "Eigen not found") +else() +  message(STATUS "Eigen found in " ${EIGEN_INCLUDE_DIR}) +  inclusion(EIGEN_DIR EIGEN_INCLUDE_DIR) +endif() +  # OpenCSG  if (NOT $ENV{OPENCSGDIR} STREQUAL "") @@ -417,73 +458,79 @@ set(OFFSCREEN_SOURCES  add_library(tests-core STATIC ${CORE_SOURCES})  target_link_libraries(tests-core ${OPENGL_LIBRARY}) +set(TESTS-CORE-LIBRARIES ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +  add_library(tests-common STATIC ${COMMON_SOURCES})  target_link_libraries(tests-common tests-core) +  add_library(tests-cgal STATIC ${CGAL_SOURCES})  set_target_properties(tests-cgal PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}")  target_link_libraries(tests-cgal tests-common) +set(TESTS-CGAL-LIBRARIES ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${GMP_LIBRARIES} ${MPFR_LIBRARIES} ${TESTS-CORE-LIBRARIES}) +  add_library(tests-nocgal STATIC ${NOCGAL_SOURCES})  target_link_libraries(tests-nocgal tests-common)  add_library(tests-offscreen STATIC ${OFFSCREEN_SOURCES})  # set_target_properties(tests-offscreen PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") +set(TESTS-NOCGAL-LIBRARIES ${TESTS-CORE-LIBRARIES})  #  # echotest  #  add_executable(echotest echotest.cc) -target_link_libraries(echotest tests-nocgal tests-core ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(echotest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})  #  # dumptest  #  add_executable(dumptest dumptest.cc) -target_link_libraries(dumptest tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(dumptest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})  #  # modulecachetest  #  add_executable(modulecachetest modulecachetest.cc) -target_link_libraries(modulecachetest tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(modulecachetest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})  #  # csgtexttest  #  add_executable(csgtexttest csgtexttest.cc CSGTextRenderer.cc CSGTextCache.cc) -target_link_libraries(csgtexttest tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(csgtexttest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})  #  # csgtermtest  #  add_executable(csgtermtest csgtermtest.cc ../src/CSGTermEvaluator.cc) -target_link_libraries(csgtermtest tests-nocgal ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(csgtermtest tests-nocgal ${TESTS-NOCGAL-LIBRARIES})  #  # cgaltest  #  add_executable(cgaltest cgaltest.cc)  set_target_properties(cgaltest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(cgaltest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(cgaltest tests-cgal ${TESTS-CGAL-LIBRARIES})  #  # cgalstlsanitytest  #  add_executable(cgalstlsanitytest cgalstlsanitytest.cc)  set_target_properties(cgalstlsanitytest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(cgalstlsanitytest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(cgalstlsanitytest tests-cgal ${TESTS-CGAL-LIBRARIES})  #  # cgalpngtest  #  add_executable(cgalpngtest cgalpngtest.cc bboxhelp.cc ../src/CGALRenderer.cc ../src/renderer.cc ../src/rendersettings.cc)  set_target_properties(cgalpngtest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(cgalpngtest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES}  ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(cgalpngtest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})  #  # cgalcachetest  #  add_executable(cgalcachetest cgalcachetest.cc bboxhelp.cc)  set_target_properties(cgalcachetest PROPERTIES COMPILE_FLAGS "-DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(cgalcachetest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES}  ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(cgalcachetest tests-cgal ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})  #  # opencsgtest @@ -491,7 +538,7 @@ target_link_libraries(cgalcachetest tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_  add_executable(opencsgtest opencsgtest.cc csgtestcore.cc ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc ../src/renderer.cc ../src/rendersettings.cc)  set_target_properties(opencsgtest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(opencsgtest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENCSG_LIBRARY} ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(opencsgtest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})  #  # throwntogethertest @@ -499,7 +546,7 @@ target_link_libraries(opencsgtest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${C  add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/OpenCSGRenderer.cc ../src/ThrownTogetherRenderer.cc ../src/renderer.cc ../src/rendersettings.cc)  set_target_properties(throwntogethertest PROPERTIES COMPILE_FLAGS "-DENABLE_OPENCSG -DENABLE_CGAL ${CGAL_CXX_FLAGS_INIT}") -target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${CGAL_LIBRARY} ${CGAL_3RD_PARTY_LIBRARIES} ${QT_LIBRARIES} ${OPENCSG_LIBRARY} ${GLEW_LIBRARY} ${COCOA_LIBRARY} ${OPENGL_LIBRARY} ${Boost_LIBRARIES}) +target_link_libraries(throwntogethertest tests-offscreen tests-cgal ${OPENCSG_LIBRARY} ${TESTS-CGAL-LIBRARIES} ${GLEW_LIBRARY} ${COCOA_LIBRARY})  #  # Tags tests as disabled. This is more convenient than removing them manually | 
