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 | 81 |
14 files changed, 217 insertions, 103 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 65243dc..7f12a2e 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 BoundingBox operator*(const Transform3d &m, const BoundingBox &box); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 34a76a9..12fca3c 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 "") |