From b6d9a2368a86e38f97e28d595bd0cd5256ff4899 Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 24 Dec 2011 16:09:43 +0100 Subject: fix build when system boost is mt and local boost is not mt diff --git a/boost.pri b/boost.pri index c2f5d8e..284125e 100644 --- a/boost.pri +++ b/boost.pri @@ -6,35 +6,56 @@ boost { !isEmpty(BOOST_DIR) { QMAKE_INCDIR += $$BOOST_DIR message("boost location: $$BOOST_DIR") - win32:QMAKE_LIBDIR += -L$$BOOST_DIR/lib + win32: QMAKE_LIBDIR += -L$$BOOST_DIR/lib } - win32:!CONFIG(mingw-cross-env) { - LIBS += -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 - } - CONFIG(mingw-cross-env) { DEFINES += BOOST_STATIC DEFINES += BOOST_THREAD_USE_LIB DEFINES += Boost_USE_STATIC_LIBS - LIBS += -lboost_thread_win32-mt -lboost_program_options-mt + BOOST_LINK_FLAGS = -lboost_thread_win32-mt -lboost_program_options-mt } - unix { - BMT_TEST1 = /usr/lib64/libboost*thread-mt* - BMT_TEST2 = /usr/lib/libboost*thread-mt* - BMT_TEST3 = $$BOOST_DIR/lib/libboost*thread-mt* + isEmpty($$BOOST_LINK_FLAGS):win32 { + BOOST_LINK_FLAGS = -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 + } - exists($$BMT_TEST1)|exists($$BMT_TEST2)|exists($$BMT_TEST3) { - LIBS += -lboost_thread-mt -lboost_program_options-mt - BOOST_IS_MT = true - } + # check for OPENSCAD_LIBDIR + multithread + isEmpty($$BOOST_LINK_FLAGS) { + OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) + !isEmpty($$OPENSCAD_LIBDIR) { + exists($$OPENSCAD_LIBDIR/lib/libboost*thread-mt*) { + BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt + } + } } - unix|macx { - isEmpty(BOOST_IS_MT) { - LIBS += -lboost_thread -lboost_program_options + # check for BOOSTDIR + multithread + isEmpty($$BOOST_LINK_FLAGS) { + BOOST_DIR = $$(BOOSTDIR) + !isEmpty($$BOOST_DIR) { + exists($$BOOST_DIR/lib/libboost*thread-mt*) { + BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt + } } } + isEmpty($$BOOST_LINK_FLAGS) { + unix { + BMT_TEST1 = /usr/lib64/libboost*thread-mt* + BMT_TEST2 = /usr/lib/libboost*thread-mt* + exists($$BMT_TEST1)|exists($$BMT_TEST2) { + BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt + } + } + } + + isEmpty($$BOOST_LINK_FLAGS) { + unix|macx { + BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options + } + } + + LIBS += $$BOOST_LINK_FLAGS + } diff --git a/eigen2.pri b/eigen2.pri index 44649f8..e188eaf 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -1,20 +1,34 @@ eigen2 { + + CONFIG(mingw-cross-env) { + EIGEN2_INCLUDEPATH = mingw-cross-env/include/eigen2 + } + # Optionally specify location of Eigen2 using the - # EIGEN2DIR env. variable - EIGEN2_DIR = $$(EIGEN2DIR) - !isEmpty(EIGEN2_DIR) { - EIGEN2_INCLUDEPATH = $$EIGEN2_DIR + # OPENSCAD_LIBRARIES env. variable + isEmpty(EIGEN2_INCLUDEPATH) { + OPENSCAD_LIBRARIES_EIGEN2 = $$(OPENSCAD_LIBRARIES) + !isEmpty(OPENSCAD_LIBRARIES_EIGEN2) { + EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_EIGEN2/include/eigen2 + } } - else { - CONFIG(mingw-cross-env) { - EIGEN2_INCLUDEPATH = mingw-cross-env/include/eigen2 - } else { - freebsd-g++: EIGEN2_INCLUDEPATH *= /usr/local/include/eigen2 - macx: EIGEN2_INCLUDEPATH *= /opt/local/include/eigen2 - !macx:!freebsd-g++:!win32:EIGEN2_INCLUDEPATH *= /usr/include/eigen2 + + # Optionally specify location of Eigen2 using the + # EIGEN2DIR env. variable + isEmpty(EIGEN2_INCLUDEPATH) { + EIGEN2_DIR = $$(EIGEN2DIR) + !isEmpty(EIGEN2_DIR):isEmpty(EIGEN2_INCLUDE_PATH) { + message("EIGEN2: OPENSCAD_LIBRARIES NOT") + EIGEN2_INCLUDEPATH = $$EIGEN2_DIR } } + isEmpty(EIGEN2_INCLUDEPATH) { + freebsd-g++: EIGEN2_INCLUDEPATH *= /usr/local/include/eigen2 + macx: EIGEN2_INCLUDEPATH *= /opt/local/include/eigen2 + linux*: EIGEN2_INCLUDEPATH *= /usr/include/eigen2 + } + # eigen2 being under 'include/eigen2' needs special prepending QMAKE_INCDIR_QT = $$EIGEN2_INCLUDEPATH $$QMAKE_INCDIR_QT -- cgit v0.10.1 From a70715c309853ff9a47187d134649f27e4cb0867 Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 24 Dec 2011 07:22:18 -0800 Subject: fix eigen build on machine with system eigen + OPENSCAD_LIBRARIES without eigen diff --git a/boost.pri b/boost.pri index 284125e..2e8e3cb 100644 --- a/boost.pri +++ b/boost.pri @@ -16,12 +16,12 @@ boost { BOOST_LINK_FLAGS = -lboost_thread_win32-mt -lboost_program_options-mt } - isEmpty($$BOOST_LINK_FLAGS):win32 { + isEmpty(BOOST_LINK_FLAGS):win32 { BOOST_LINK_FLAGS = -llibboost_thread-vc90-mt-s-1_46_1 -llibboost_program_options-vc90-mt-s-1_46_1 } # check for OPENSCAD_LIBDIR + multithread - isEmpty($$BOOST_LINK_FLAGS) { + isEmpty(BOOST_LINK_FLAGS) { OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) !isEmpty($$OPENSCAD_LIBDIR) { exists($$OPENSCAD_LIBDIR/lib/libboost*thread-mt*) { @@ -31,7 +31,7 @@ boost { } # check for BOOSTDIR + multithread - isEmpty($$BOOST_LINK_FLAGS) { + isEmpty(BOOST_LINK_FLAGS) { BOOST_DIR = $$(BOOSTDIR) !isEmpty($$BOOST_DIR) { exists($$BOOST_DIR/lib/libboost*thread-mt*) { @@ -40,7 +40,7 @@ boost { } } - isEmpty($$BOOST_LINK_FLAGS) { + isEmpty(BOOST_LINK_FLAGS) { unix { BMT_TEST1 = /usr/lib64/libboost*thread-mt* BMT_TEST2 = /usr/lib/libboost*thread-mt* @@ -50,7 +50,7 @@ boost { } } - isEmpty($$BOOST_LINK_FLAGS) { + isEmpty(BOOST_LINK_FLAGS) { unix|macx { BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options } diff --git a/eigen2.pri b/eigen2.pri index e188eaf..6be642e 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -7,9 +7,11 @@ eigen2 { # Optionally specify location of Eigen2 using the # OPENSCAD_LIBRARIES env. variable isEmpty(EIGEN2_INCLUDEPATH) { - OPENSCAD_LIBRARIES_EIGEN2 = $$(OPENSCAD_LIBRARIES) - !isEmpty(OPENSCAD_LIBRARIES_EIGEN2) { - EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_EIGEN2/include/eigen2 + OPENSCAD_LIBRARIES_DIR = $$(OPENSCAD_LIBRARIES) + !isEmpty(OPENSCAD_LIBRARIES_DIR) { + exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { + EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 + } } } -- cgit v0.10.1 From 9a1834bb86b2cea2b8d26a506ca576918511ee5a Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 24 Dec 2011 16:39:34 +0100 Subject: boost fix for OPENSCAD_LIBRARIES and BOOSTDIR env vars usage diff --git a/boost.pri b/boost.pri index 2e8e3cb..19e4a64 100644 --- a/boost.pri +++ b/boost.pri @@ -23,9 +23,11 @@ boost { # check for OPENSCAD_LIBDIR + multithread isEmpty(BOOST_LINK_FLAGS) { OPENSCAD_LIBDIR = $$(OPENSCAD_LIBRARIES) - !isEmpty($$OPENSCAD_LIBDIR) { + !isEmpty(OPENSCAD_LIBDIR) { exists($$OPENSCAD_LIBDIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt + } else { + BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options } } } @@ -33,9 +35,11 @@ boost { # check for BOOSTDIR + multithread isEmpty(BOOST_LINK_FLAGS) { BOOST_DIR = $$(BOOSTDIR) - !isEmpty($$BOOST_DIR) { + !isEmpty(BOOST_DIR) { exists($$BOOST_DIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt + } else { + BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options } } } -- cgit v0.10.1 From 3c69b711288ad6f7c0290e8f907da5a988180e9d Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 24 Dec 2011 07:43:46 -0800 Subject: fix boost qmake on 64-bit fedora where OPENSCAD_LIBRARIES has been set diff --git a/boost.pri b/boost.pri index 19e4a64..02e4247 100644 --- a/boost.pri +++ b/boost.pri @@ -27,7 +27,9 @@ boost { exists($$OPENSCAD_LIBDIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt } else { - BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options + exists($$OPENSCAD_LIBDIR/lib/libboost*thread*) { + BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options + } } } } @@ -39,7 +41,9 @@ boost { exists($$BOOST_DIR/lib/libboost*thread-mt*) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt } else { - BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options + exists($$BOOST_DIR/lib/libboost*thread*) { + BOOST_LINK_FLAGS = -lboost_thread -lboost_program_options + } } } } -- cgit v0.10.1 From ac11243e993a8f0d38919abd6e7f9d47ceb9bc9e Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sat, 24 Dec 2011 10:06:54 -0600 Subject: cleanup eigen2 build, improve debug message diff --git a/eigen2.pri b/eigen2.pri index 6be642e..70985a1 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -13,22 +13,23 @@ eigen2 { EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 } } + message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } # Optionally specify location of Eigen2 using the # EIGEN2DIR env. variable isEmpty(EIGEN2_INCLUDEPATH) { EIGEN2_DIR = $$(EIGEN2DIR) - !isEmpty(EIGEN2_DIR):isEmpty(EIGEN2_INCLUDE_PATH) { - message("EIGEN2: OPENSCAD_LIBRARIES NOT") + !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*: EIGEN2_INCLUDEPATH *= /usr/include/eigen2 + freebsd-g++: EIGEN2_INCLUDEPATH = /usr/local/include/eigen2 + macx: EIGEN2_INCLUDEPATH = /opt/local/include/eigen2 + linux*: EIGEN2_INCLUDEPATH = /usr/include/eigen2 } # eigen2 being under 'include/eigen2' needs special prepending -- cgit v0.10.1 From 750957fcacbc4bd039d3a9219ba2d65aa9e572f1 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sat, 24 Dec 2011 10:08:23 -0600 Subject: further improve eigen2 build message diff --git a/eigen2.pri b/eigen2.pri index 70985a1..bc629d3 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -11,9 +11,9 @@ eigen2 { !isEmpty(OPENSCAD_LIBRARIES_DIR) { exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 + message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } } - message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } # Optionally specify location of Eigen2 using the @@ -22,8 +22,8 @@ eigen2 { EIGEN2_DIR = $$(EIGEN2DIR) !isEmpty(EIGEN2_DIR) { EIGEN2_INCLUDEPATH = $$EIGEN2_DIR + message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } - message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } isEmpty(EIGEN2_INCLUDEPATH) { -- cgit v0.10.1 From 1dfc184b7380600a1c13f85b6b6c0a9f92dcdbcd Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sat, 24 Dec 2011 10:09:55 -0600 Subject: make OPENSCAD_LIBRARIES not show a message for EIGEN2 include diff --git a/eigen2.pri b/eigen2.pri index bc629d3..6062c76 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -11,7 +11,6 @@ eigen2 { !isEmpty(OPENSCAD_LIBRARIES_DIR) { exists($$OPENSCAD_LIBRARIES_DIR/include/eigen2) { EIGEN2_INCLUDEPATH = $$OPENSCAD_LIBRARIES_DIR/include/eigen2 - message("EIGEN2 location: $$EIGEN2_INCLUDEPATH") } } } -- cgit v0.10.1 From c5511b05ecfc821d2c46912a9dd472df4dec956a Mon Sep 17 00:00:00 2001 From: don bright Date: Sun, 25 Dec 2011 03:10:22 +0100 Subject: find eigen2 when OPENSCAD_LIBRARIES is set in regression test build diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index a8ab9b9..ed5bdc0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -131,6 +131,10 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") endif() endif() +if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") + set(EIGEN2_INCLUDE_DIR "$ENV{OPENSCAD_LIBRARIES}/include/eigen2") +endif() + if (NOT EIGEN2_INCLUDE_DIR) find_path(EIGEN2_INCLUDE_DIR Eigen/Core -- cgit v0.10.1 From 0bbfa9efb0e03aad9f6242953aefd51a7d74b25e Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Sun, 25 Dec 2011 17:58:24 +0100 Subject: Modified eigen2 test to work for system-eigen2 and OPENSCAD_LIBRARIES without eigen2 diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index ed5bdc0..e3ebb02 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -131,21 +131,20 @@ if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin") endif() endif() -if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") - set(EIGEN2_INCLUDE_DIR "$ENV{OPENSCAD_LIBRARIES}/include/eigen2") -endif() - if (NOT EIGEN2_INCLUDE_DIR) + if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") + set(EIGEN2_FIND_HINTS "$ENV{OPENSCAD_LIBRARIES}/include/eigen2") + endif() + set(EIGEN2_FIND_HINTS ${EIGEN2_HINTS} $ENV{EIGEN2DIR}) + if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") + set(EIGEN2_FIND_PATHS /usr/local/include/eigen2) + else() + set(EIGEN2_FIND_PATHS /opt/local/include/eigen2 /usr/include/eigen2) + endif() find_path(EIGEN2_INCLUDE_DIR Eigen/Core - HINTS $ENV{EIGEN2DIR} - PATHS /opt/local/include/eigen2 /usr/include/eigen2) - if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - find_path(EIGEN2_INCLUDE_DIR - Eigen/Core - HINTS $ENV{EIGEN2DIR} - PATHS /usr/local/include/eigen2 ) - endif() + HINTS ${EIGEN2_FIND_HINTS} + PATHS ${EIGEN2_FIND_PATHS}) if (NOT EIGEN2_INCLUDE_DIR) message(FATAL_ERROR "Eigen2 not found") else() -- cgit v0.10.1 From c4bffdaf37fdf72a84a225ec584d3698fe398857 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 26 Dec 2011 00:38:03 +0100 Subject: Color overriding now works. The outermost color will win if multiple colors are specified for the same object diff --git a/openscad.pro b/openscad.pro index 50a419d..89804a7 100644 --- a/openscad.pro +++ b/openscad.pro @@ -187,8 +187,8 @@ HEADERS += src/renderer.h \ src/system-gl.h \ src/stl-utils.h -SOURCES += src/openscad.cc \ - src/mainwin.cc \ +SOURCES += src/mathc99.cc \ + src/linalg.cc \ src/handle_dep.cc \ src/renderer.cc \ src/rendersettings.cc \ @@ -231,10 +231,10 @@ SOURCES += src/openscad.cc \ src/nodedumper.cc \ src/CSGTermEvaluator.cc \ src/Tree.cc \ - src/mathc99.cc \ - src/linalg.cc \ src/PolySetCache.cc \ - src/PolySetEvaluator.cc + src/PolySetEvaluator.cc \ + src/openscad.cc \ + src/mainwin.cc opencsg { HEADERS += src/OpenCSGRenderer.h diff --git a/src/CSGTermEvaluator.cc b/src/CSGTermEvaluator.cc index fc76d56..34f22da 100644 --- a/src/CSGTermEvaluator.cc +++ b/src/CSGTermEvaluator.cc @@ -159,7 +159,7 @@ Response CSGTermEvaluator::visit(State &state, const TransformNode &node) Response CSGTermEvaluator::visit(State &state, const ColorNode &node) { if (state.isPrefix()) { - state.setColor(node.color); + if (!state.color().isValid()) state.setColor(node.color); } if (state.isPostfix()) { applyToChildren(node, CSGT_UNION); diff --git a/src/OpenCSGRenderer.cc b/src/OpenCSGRenderer.cc index 233124b..eb66687 100644 --- a/src/OpenCSGRenderer.cc +++ b/src/OpenCSGRenderer.cc @@ -86,7 +86,7 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo, if (shaderinfo) glUseProgram(shaderinfo[0]); for (; j < i; j++) { const Transform3d &m = chain->matrices[j]; - double *c = chain->colors[j]; + const Color4f &c = chain->colors[j]; glPushMatrix(); glMultMatrixd(m.data()); PolySet::csgmode_e csgmode = chain->types[j] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; @@ -99,7 +99,7 @@ void OpenCSGRenderer::renderCSGChain(CSGChain *chain, GLint *shaderinfo, csgmode = PolySet::csgmode_e(csgmode + 10); } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) { // User-defined color or alpha from source - setColor(c, shaderinfo); + setColor(c.data(), shaderinfo); } else if (chain->types[j] == CSGTerm::TYPE_DIFFERENCE) { setColor(COLORMODE_CUTOUT, shaderinfo); } else { diff --git a/src/ThrownTogetherRenderer.cc b/src/ThrownTogetherRenderer.cc index 36f7b95..146d2e1 100644 --- a/src/ThrownTogetherRenderer.cc +++ b/src/ThrownTogetherRenderer.cc @@ -67,7 +67,7 @@ void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight, if (polySetVisitMark[std::make_pair(chain->polysets[i].get(), &chain->matrices[i])]++ > 0) continue; const Transform3d &m = chain->matrices[i]; - double *c = chain->colors[i]; + const Color4f &c = chain->colors[i]; glPushMatrix(); glMultMatrixd(m.data()); PolySet::csgmode_e csgmode = chain->types[i] == CSGTerm::TYPE_DIFFERENCE ? PolySet::CSGMODE_DIFFERENCE : PolySet::CSGMODE_NORMAL; @@ -93,10 +93,10 @@ void ThrownTogetherRenderer::renderCSGChain(CSGChain *chain, bool highlight, else csgmode = PolySet::csgmode_e(csgmode); chain->polysets[i]->render_surface(csgmode, m); } else if (c[0] >= 0 || c[1] >= 0 || c[2] >= 0 || c[3] >= 0) { - setColor(c); + setColor(c.data()); chain->polysets[i]->render_surface(csgmode, m); if (showedges) { - glColor4d((c[0]+1)/2, (c[1]+1)/2, (c[2]+1)/2, 1.0); + glColor4f((c[0]+1)/2, (c[1]+1)/2, (c[2]+1)/2, 1.0); chain->polysets[i]->render_edges(csgmode); } } else if (chain->types[i] == CSGTerm::TYPE_DIFFERENCE) { diff --git a/src/colornode.h b/src/colornode.h index b41e2a9..9323638 100644 --- a/src/colornode.h +++ b/src/colornode.h @@ -3,6 +3,7 @@ #include "node.h" #include "visitor.h" +#include "linalg.h" class ColorNode : public AbstractNode { @@ -14,7 +15,7 @@ public: virtual std::string toString() const; virtual std::string name() const; - double color[4]; + Color4f color; }; #endif diff --git a/src/csgterm.cc b/src/csgterm.cc index 56fcbb5..890b0c9 100644 --- a/src/csgterm.cc +++ b/src/csgterm.cc @@ -89,10 +89,9 @@ shared_ptr CSGTerm::createCSGTerm(type_e type, CSGTerm *left, CSGTerm * return createCSGTerm(type, shared_ptr(left), shared_ptr(right)); } -CSGTerm::CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const double color[4], const std::string &label) - : type(TYPE_PRIMITIVE), polyset(polyset), label(label), m(matrix) +CSGTerm::CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const Color4f &color, const std::string &label) + : type(TYPE_PRIMITIVE), polyset(polyset), label(label), m(matrix), color(color) { - for (int i = 0; i < 4; i++) this->color[i] = color[i]; initBoundingBox(); } @@ -281,7 +280,7 @@ CSGChain::CSGChain() { } -void CSGChain::add(const shared_ptr &polyset, const Transform3d &m, double *color, CSGTerm::type_e type, std::string label) +void CSGChain::add(const shared_ptr &polyset, const Transform3d &m, const Color4f &color, CSGTerm::type_e type, std::string label) { polysets.push_back(polyset); matrices.push_back(m); diff --git a/src/csgterm.h b/src/csgterm.h index 4930349..570af53 100644 --- a/src/csgterm.h +++ b/src/csgterm.h @@ -28,7 +28,7 @@ public: shared_ptr right; BoundingBox bbox; - CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const double color[4], const std::string &label); + CSGTerm(const shared_ptr &polyset, const Transform3d &matrix, const Color4f &color, const std::string &label); ~CSGTerm(); const BoundingBox &getBoundingBox() const { return this->bbox; } @@ -44,7 +44,7 @@ private: void initBoundingBox(); Transform3d m; - double color[4]; + Color4f color; friend class CSGChain; }; @@ -54,13 +54,13 @@ class CSGChain public: std::vector > polysets; std::vector matrices; - std::vector colors; + std::vector colors; std::vector types; std::vector labels; CSGChain(); - void add(const shared_ptr &polyset, const Transform3d &m, double *color, CSGTerm::type_e type, std::string label); + void add(const shared_ptr &polyset, const Transform3d &m, const Color4f &color, CSGTerm::type_e type, std::string label); void import(shared_ptr term, CSGTerm::type_e type = CSGTerm::TYPE_UNION); std::string dump(); diff --git a/src/linalg.h b/src/linalg.h index c1a14d1..15ef870 100644 --- a/src/linalg.h +++ b/src/linalg.h @@ -15,4 +15,10 @@ using Eigen::Transform3d; BoundingBox operator*(const Transform3d &m, const BoundingBox &box); +class Color4f : public Eigen::Vector4f +{ +public: + bool isValid() const { return this->minCoeff() >= 0.0f; } +}; + #endif diff --git a/src/renderer.cc b/src/renderer.cc index b791673..5a767b8 100644 --- a/src/renderer.cc +++ b/src/renderer.cc @@ -2,7 +2,7 @@ #include "rendersettings.h" #include -void Renderer::setColor(const double color[4], GLint *shaderinfo) const +void Renderer::setColor(const float color[4], GLint *shaderinfo) const { QColor col = RenderSettings::inst()->color(RenderSettings::OPENCSG_FACE_FRONT_COLOR); double c[4] = {color[0], color[1], color[2], color[3]}; diff --git a/src/renderer.h b/src/renderer.h index 8deabe8..2bc482d 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -25,7 +25,7 @@ public: COLORMODE_BACKGROUND_EDGES }; - virtual void setColor(const double color[4], GLint *shaderinfo = NULL) const; + virtual void setColor(const float color[4], GLint *shaderinfo = NULL) const; virtual void setColor(ColorMode colormode, GLint *shaderinfo = NULL) const; }; diff --git a/src/state.h b/src/state.h index 5dc74df..df202aa 100644 --- a/src/state.h +++ b/src/state.h @@ -9,8 +9,8 @@ class State public: State(const class AbstractNode *parent) : parentnode(parent), isprefix(false), ispostfix(false), numchildren(0) { - m = Transform3d::Identity(); - for (int i=0;i<4;i++) this->c[i] = -1.0; + this->matrix_ = Transform3d::Identity(); + this->color_.fill(-1.0f); } virtual ~State() {} @@ -18,15 +18,15 @@ public: void setPostfix(bool on) { this->ispostfix = on; } void setNumChildren(unsigned int numc) { this->numchildren = numc; } void setParent(const AbstractNode *parent) { this->parentnode = parent; } - void setMatrix(const Transform3d &m) { this->m = m; } - void setColor(const double c[4]) { memcpy(this->c, c, 4*sizeof(double)); } + void setMatrix(const Transform3d &m) { this->matrix_ = m; } + void setColor(const Color4f &c) { this->color_ = c; } bool isPrefix() const { return this->isprefix; } bool isPostfix() const { return this->ispostfix; } unsigned int numChildren() const { return this->numchildren; } const AbstractNode *parent() const { return this->parentnode; } - const Transform3d &matrix() const { return this->m; } - const double *color() const { return this->c; } + const Transform3d &matrix() const { return this->matrix_; } + const Color4f &color() const { return this->color_; } private: const AbstractNode * parentnode; @@ -35,8 +35,8 @@ private: unsigned int numchildren; // Transformation matrix and color. FIXME: Generalize such state variables? - Transform3d m; - double c[4]; + Transform3d matrix_; + Color4f color_; }; #endif diff --git a/tests/regression/dumptest/testcolornames-expected.txt b/tests/regression/dumptest/testcolornames-expected.txt index 56e664f..63b5e70 100644 --- a/tests/regression/dumptest/testcolornames-expected.txt +++ b/tests/regression/dumptest/testcolornames-expected.txt @@ -49,7 +49,7 @@ } } multmatrix([[1, 0, 0, 1], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { - color([1, 0.713725, 0.756863, 1]) { + color([1, 0.713726, 0.756863, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } @@ -79,7 +79,7 @@ } } multmatrix([[1, 0, 0, 8], [0, 1, 0, 1], [0, 0, 1, 0], [0, 0, 0, 1]]) { - color([1, 0.498039, 0.313725, 1]) { + color([1, 0.498039, 0.313726, 1]) { sphere($fn = 5, $fa = 12, $fs = 2, r = 0.8); } } diff --git a/tests/regression/opencsgtest/color-tests-expected.png b/tests/regression/opencsgtest/color-tests-expected.png index 82ba36a..5b35312 100644 Binary files a/tests/regression/opencsgtest/color-tests-expected.png and b/tests/regression/opencsgtest/color-tests-expected.png differ diff --git a/tests/regression/throwntogethertest/color-tests-expected.png b/tests/regression/throwntogethertest/color-tests-expected.png index 5d4ed89..8fb69b1 100644 Binary files a/tests/regression/throwntogethertest/color-tests-expected.png and b/tests/regression/throwntogethertest/color-tests-expected.png differ -- cgit v0.10.1 From 1e57a14785c0d54b19e20972ca333ca003fe9761 Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 17:03:04 +0100 Subject: fix eigen2 finding bug diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e3ebb02..b6366d5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -135,7 +135,7 @@ if (NOT EIGEN2_INCLUDE_DIR) if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") set(EIGEN2_FIND_HINTS "$ENV{OPENSCAD_LIBRARIES}/include/eigen2") endif() - set(EIGEN2_FIND_HINTS ${EIGEN2_HINTS} $ENV{EIGEN2DIR}) + set(EIGEN2_FIND_HINTS ${EIGEN2_FIND_HINTS} $ENV{EIGEN2DIR}) if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(EIGEN2_FIND_PATHS /usr/local/include/eigen2) else() -- cgit v0.10.1 From 4f950c353863c66c39a0020ff7eaaccbbef31587 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 26 Dec 2011 17:18:56 +0100 Subject: Added test for hexagonal cylinder orientation, aka. captured nuts diff --git a/tests/regression/cgalpngtest/cylinder-tests-expected.png b/tests/regression/cgalpngtest/cylinder-tests-expected.png index 9d96df2..843d70f 100644 Binary files a/tests/regression/cgalpngtest/cylinder-tests-expected.png and b/tests/regression/cgalpngtest/cylinder-tests-expected.png differ diff --git a/tests/regression/dumptest/cylinder-tests-expected.txt b/tests/regression/dumptest/cylinder-tests-expected.txt index 2ac2549..b1e8b6e 100644 --- a/tests/regression/dumptest/cylinder-tests-expected.txt +++ b/tests/regression/dumptest/cylinder-tests-expected.txt @@ -29,4 +29,7 @@ multmatrix([[1, 0, 0, 22], [0, 1, 0, 11], [0, 0, 1, 0], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 15, r1 = 5, r2 = 5, center = false); } + multmatrix([[1, 0, 0, -10], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + cylinder($fn = 6, $fa = 12, $fs = 2, h = 2, r1 = 3, r2 = 3, center = false); + } diff --git a/tests/regression/opencsgtest/cylinder-tests-expected.png b/tests/regression/opencsgtest/cylinder-tests-expected.png index 17c10b8..4c7ab79 100644 Binary files a/tests/regression/opencsgtest/cylinder-tests-expected.png and b/tests/regression/opencsgtest/cylinder-tests-expected.png differ diff --git a/tests/regression/throwntogethertest/cylinder-tests-expected.png b/tests/regression/throwntogethertest/cylinder-tests-expected.png index 0a3ed33..4c7ab79 100644 Binary files a/tests/regression/throwntogethertest/cylinder-tests-expected.png and b/tests/regression/throwntogethertest/cylinder-tests-expected.png differ -- cgit v0.10.1 From 9e6cc9cebbfd5007a5fa9afabf57476676357193 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 26 Dec 2011 17:19:10 +0100 Subject: Added test for hexagonal cylinder orientation, aka. captured nuts diff --git a/doc/TODO.txt b/doc/TODO.txt index 4fac889..8f6d257 100644 --- a/doc/TODO.txt +++ b/doc/TODO.txt @@ -259,7 +259,6 @@ o variants of module transparent() { %child(); } o define modules o define functions o built-in variables and constants (builtin-tests.scad) -o Write a regression test for the hexagonal cylinder orientation issue o Caching - Test that caching is actually performed (speedup + same results) - Test the modifier characters correctly influence the cache (also when diff --git a/testdata/scad/features/cylinder-tests.scad b/testdata/scad/features/cylinder-tests.scad index 54e88cd..71f43a6 100644 --- a/testdata/scad/features/cylinder-tests.scad +++ b/testdata/scad/features/cylinder-tests.scad @@ -12,4 +12,9 @@ translate([22,-11,0]) cylinder(h=5, r=5, r1=0, center=true); translate([22,0,0]) cylinder(h=5, r=5, r2=0); translate([22,11,0]) cylinder(h=15, r=5, r2=5); +// This tests for hexagonal cylinder orientation, since people +// tend to "abuse" this for captured nut slots +translate([-10,0,0]) cylinder(h=2, r=3, $fn=6); + + // FIXME: We could test $fs, $fa, $fn as well -- cgit v0.10.1 From f6ba8cd53a34e4be676ab9217b87ff1de92ed9f1 Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 17:35:42 +0100 Subject: fix build w mult. versions of boost when OPENSCAD_LIBRARIES used diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b6366d5..5b323d7 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -66,18 +66,18 @@ endif() # Boost if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") - set(BOOST_ROOT "$ENV{OPENSCAD_LIBRARIES}") + set(BOOST_DIR "$ENV{OPENSCAD_LIBRARIES}") endif() if (NOT $ENV{BOOSTDIR} STREQUAL "") set(BOOST_DIR "$ENV{BOOSTDIR}") + set(Boost_DEBUG TRUE) endif() if (NOT ${BOOST_DIR} STREQUAL "") set(BOOST_ROOT ${BOOST_DIR}) message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) set(Boost_NO_SYSTEM_PATHS "TRUE") - set(Boost_DEBUG TRUE) endif() -- cgit v0.10.1 From 1aadb679de94108763445e6369447d02260e0130 Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 09:53:22 -0800 Subject: fix bug on system with OPENSCAD_LIBRARIES + mult versions of boost diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 5b323d7..6eb9610 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -65,30 +65,31 @@ endif() # # Boost -if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") - set(BOOST_DIR "$ENV{OPENSCAD_LIBRARIES}") -endif() +# Update this if FindBoost.cmake gets out of sync with the current boost release +# set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0") -if (NOT $ENV{BOOSTDIR} STREQUAL "") - set(BOOST_DIR "$ENV{BOOSTDIR}") - set(Boost_DEBUG TRUE) +if (WIN32) + set(Boost_USE_STATIC_LIBS TRUE) + set(BOOST_STATIC TRUE) + set(BOOST_THREAD_USE_LIB TRUE) endif() -if (NOT ${BOOST_DIR} STREQUAL "") - set(BOOST_ROOT ${BOOST_DIR}) +if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") + set(BOOST_ROOT "$ENV{OPENSCAD_LIBRARIES}") + if (EXISTS ${BOOST_ROOT}/include/boost) + # workaround bugs in FindBoost.cmake with multiple versions of boost + set(Boost_NO_SYSTEM_PATHS "TRUE") + endif() message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) - set(Boost_NO_SYSTEM_PATHS "TRUE") endif() - -if (WIN32) - set(Boost_USE_STATIC_LIBS TRUE) - set(BOOST_STATIC TRUE) - set(BOOST_THREAD_USE_LIB TRUE) +if (NOT $ENV{BOOSTDIR} STREQUAL "") + set(BOOST_ROOT "$ENV{BOOSTDIR}") + set(Boost_NO_SYSTEM_PATHS "TRUE") + set(Boost_DEBUG TRUE) + message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) endif() -# Update this if FindBoost.cmake gets out of sync with the current boost release -# set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0") find_package( Boost 1.35.0 COMPONENTS thread program_options REQUIRED) if(Boost_FOUND) message(STATUS "Boost includes found: " ${Boost_INCLUDE_DIRS}) -- cgit v0.10.1 From 3c3cf02f4a648ecd317d5246f9a694f2af850b45 Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 10:01:03 -0800 Subject: if CGAL's -DMAKE_INSTALL_PREFIX=$X, then enable finding of CGAL in $X diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 6eb9610..74670c5 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -215,8 +215,13 @@ set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/parser_yacc.c PROPERTIES if (NOT $ENV{CGALDIR} STREQUAL "") set(CGAL_DIR "$ENV{CGALDIR}") elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") - set(CGAL_DIR "$ENV{OPENSCAD_LIBRARIES}/lib/CGAL") - set(CMAKE_MODULE_PATH "${CGAL_DIR}") + if (EXISTS "$ENV{OPENSCAD_LIBRARIES}/lib/CGAL") + set(CGAL_DIR "$ENV{OPENSCAD_LIBRARIES}/lib/CGAL") + set(CMAKE_MODULE_PATH "${CGAL_DIR}") + elseif (EXISTS "$ENV{OPENSCAD_LIBRARIES}/include/CGAL") + set(CGAL_DIR "$ENV{OPENSCAD_LIBRARIES}") + set(CMAKE_MODULE_PATH "${CGAL_DIR}") + endif() endif() message(STATUS "CGAL_DIR: " ${CGAL_DIR}) find_package(CGAL REQUIRED) -- cgit v0.10.1 From bc3454f369a21cd689f42f5e9ec5cb316f9ebdd5 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Mon, 26 Dec 2011 19:15:51 +0100 Subject: Refactored normalization into a separate class, hard-limited normalization to stop at 5000 nodes to keep from normalizing 'forever' diff --git a/openscad.pro b/openscad.pro index 344363a..0feca74 100644 --- a/openscad.pro +++ b/openscad.pro @@ -146,6 +146,7 @@ HEADERS += src/renderer.h \ src/builtin.h \ src/context.h \ src/csgterm.h \ + src/csgtermnormalizer.h \ src/dxfdata.h \ src/dxfdim.h \ src/dxftess.h \ @@ -197,6 +198,7 @@ SOURCES += src/mathc99.cc \ src/node.cc \ src/context.cc \ src/csgterm.cc \ + src/csgtermnormalizer.cc \ src/polyset.cc \ src/csgops.cc \ src/transform.cc \ diff --git a/src/CGALCache.cc b/src/CGALCache.cc index 6bdad41..84de722 100644 --- a/src/CGALCache.cc +++ b/src/CGALCache.cc @@ -7,7 +7,9 @@ CGALCache *CGALCache::inst = NULL; void CGALCache::insert(const std::string &id, const CGAL_Nef_polyhedron &N) { this->cache.insert(id, new CGAL_Nef_polyhedron(N), N.weight()); +#ifdef DEBUG PRINTF("CGAL Cache insert: %s (%d verts)", id.substr(0, 40).c_str(), N.weight()); +#endif } void CGALCache::print() diff --git a/src/csgterm.cc b/src/csgterm.cc index 56fcbb5..b368072 100644 --- a/src/csgterm.cc +++ b/src/csgterm.cc @@ -140,127 +140,6 @@ void CSGTerm::initBoundingBox() } } -shared_ptr CSGTerm::normalize(shared_ptr term) -{ - // This function implements the CSG normalization - // Reference: - // Goldfeather, J., Molnar, S., Turk, G., and Fuchs, H. Near - // Realtime CSG Rendering Using Tree Normalization and Geometric - // Pruning. IEEE Computer Graphics and Applications, 9(3):20-28, - // 1989. - // http://www.cc.gatech.edu/~turk/my_papers/pxpl_csg.pdf - - if (term->type == TYPE_PRIMITIVE) { - return term; - } - - do { - while (term && normalize_tail(term)) { } - if (!term || term->type == TYPE_PRIMITIVE) return term; - term->left = normalize(term->left); - } while (term->type != TYPE_UNION && - (term->right->type != TYPE_PRIMITIVE || term->left->type == TYPE_UNION)); - term->right = normalize(term->right); - - // FIXME: Do we need to take into account any transformation of item here? - if (!term->right) { - if (term->type == TYPE_UNION || term->type == TYPE_DIFFERENCE) return term->left; - else return term->right; - } - if (!term->left) { - if (term->type == TYPE_UNION) return term->right; - else return term->left; - } - - return term; -} - -bool CSGTerm::normalize_tail(shared_ptr &term) -{ - if (term->type == TYPE_UNION || term->type == TYPE_PRIMITIVE) return false; - - // Part A: The 'x . (y . z)' expressions - - shared_ptr x = term->left; - shared_ptr y = term->right->left; - shared_ptr z = term->right->right; - - shared_ptr result = term; - - // 1. x - (y + z) -> (x - y) - z - if (term->type == TYPE_DIFFERENCE && term->right->type == TYPE_UNION) { - term = createCSGTerm(TYPE_DIFFERENCE, - createCSGTerm(TYPE_DIFFERENCE, x, y), - z); - return true; - } - // 2. x * (y + z) -> (x * y) + (x * z) - else if (term->type == TYPE_INTERSECTION && term->right->type == TYPE_UNION) { - term = createCSGTerm(TYPE_UNION, - createCSGTerm(TYPE_INTERSECTION, x, y), - createCSGTerm(TYPE_INTERSECTION, x, z)); - return true; - } - // 3. x - (y * z) -> (x - y) + (x - z) - else if (term->type == TYPE_DIFFERENCE && term->right->type == TYPE_INTERSECTION) { - term = createCSGTerm(TYPE_UNION, - createCSGTerm(TYPE_DIFFERENCE, x, y), - createCSGTerm(TYPE_DIFFERENCE, x, z)); - return true; - } - // 4. x * (y * z) -> (x * y) * z - else if (term->type == TYPE_INTERSECTION && term->right->type == TYPE_INTERSECTION) { - term = createCSGTerm(TYPE_INTERSECTION, - createCSGTerm(TYPE_INTERSECTION, x, y), - z); - return true; - } - // 5. x - (y - z) -> (x - y) + (x * z) - else if (term->type == TYPE_DIFFERENCE && term->right->type == TYPE_DIFFERENCE) { - term = createCSGTerm(TYPE_UNION, - createCSGTerm(TYPE_DIFFERENCE, x, y), - createCSGTerm(TYPE_INTERSECTION, x, z)); - return true; - } - // 6. x * (y - z) -> (x * y) - z - else if (term->type == TYPE_INTERSECTION && term->right->type == TYPE_DIFFERENCE) { - term = createCSGTerm(TYPE_DIFFERENCE, - createCSGTerm(TYPE_INTERSECTION, x, y), - z); - return true; - } - - // Part B: The '(x . y) . z' expressions - - x = term->left->left; - y = term->left->right; - z = term->right; - - // 7. (x - y) * z -> (x * z) - y - if (term->left->type == TYPE_DIFFERENCE && term->type == TYPE_INTERSECTION) { - term = createCSGTerm(TYPE_DIFFERENCE, - createCSGTerm(TYPE_INTERSECTION, x, z), - y); - return true; - } - // 8. (x + y) - z -> (x - z) + (y - z) - else if (term->left->type == TYPE_UNION && term->type == TYPE_DIFFERENCE) { - term = createCSGTerm(TYPE_UNION, - createCSGTerm(TYPE_DIFFERENCE, x, z), - createCSGTerm(TYPE_DIFFERENCE, y, z)); - return true; - } - // 9. (x + y) * z -> (x * z) + (y * z) - else if (term->left->type == TYPE_UNION && term->type == TYPE_INTERSECTION) { - term = createCSGTerm(TYPE_UNION, - createCSGTerm(TYPE_INTERSECTION, x, z), - createCSGTerm(TYPE_INTERSECTION, y, z)); - return true; - } - - return false; -} - std::string CSGTerm::dump() { std::stringstream dump; diff --git a/src/csgterm.h b/src/csgterm.h index 4930349..2e72dbc 100644 --- a/src/csgterm.h +++ b/src/csgterm.h @@ -33,9 +33,6 @@ public: const BoundingBox &getBoundingBox() const { return this->bbox; } - static shared_ptr normalize(shared_ptr term); - static bool normalize_tail(shared_ptr &term); - std::string dump(); private: CSGTerm(type_e type, shared_ptr left, shared_ptr right); diff --git a/src/csgtermnormalizer.cc b/src/csgtermnormalizer.cc new file mode 100644 index 0000000..a830422 --- /dev/null +++ b/src/csgtermnormalizer.cc @@ -0,0 +1,150 @@ +#include "csgtermnormalizer.h" +#include "csgterm.h" +#include "printutils.h" + +shared_ptr CSGTermNormalizer::normalize(const shared_ptr &root) +{ + shared_ptr temp = root; + while (1) { + shared_ptr n = normalizePass(temp); + if (temp == n) break; + temp = n; + + int num = count(temp); +#ifdef DEBUG + PRINTF("Normalize count: %d\n", num); +#endif + if (num > 5000) { + PRINTF("WARNING: Normalized tree is growing past 5000 elements. Aborting normalization.\n"); + return root; + } + } + return temp; +} + +shared_ptr CSGTermNormalizer::normalizePass(shared_ptr term) +{ + // This function implements the CSG normalization + // Reference: + // Goldfeather, J., Molnar, S., Turk, G., and Fuchs, H. Near + // Realtime CSG Rendering Using Tree Normalization and Geometric + // Pruning. IEEE Computer Graphics and Applications, 9(3):20-28, + // 1989. + // http://www.cc.gatech.edu/~turk/my_papers/pxpl_csg.pdf + + if (term->type == CSGTerm::TYPE_PRIMITIVE) { + return term; + } + + do { + while (term && normalize_tail(term)) { } + if (!term || term->type == CSGTerm::TYPE_PRIMITIVE) return term; + term->left = normalizePass(term->left); + } while (term->type != CSGTerm::TYPE_UNION && + (term->right->type != CSGTerm::TYPE_PRIMITIVE || term->left->type == CSGTerm::TYPE_UNION)); + term->right = normalizePass(term->right); + + // FIXME: Do we need to take into account any transformation of item here? + if (!term->right) { + if (term->type == CSGTerm::TYPE_UNION || term->type == CSGTerm::TYPE_DIFFERENCE) return term->left; + else return term->right; + } + if (!term->left) { + if (term->type == CSGTerm::TYPE_UNION) return term->right; + else return term->left; + } + + return term; +} + +bool CSGTermNormalizer::normalize_tail(shared_ptr &term) +{ + if (term->type == CSGTerm::TYPE_UNION || term->type == CSGTerm::TYPE_PRIMITIVE) return false; + + // Part A: The 'x . (y . z)' expressions + + shared_ptr x = term->left; + shared_ptr y = term->right->left; + shared_ptr z = term->right->right; + + shared_ptr result = term; + + // 1. x - (y + z) -> (x - y) - z + if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_UNION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), + z); + return true; + } + // 2. x * (y + z) -> (x * y) + (x * z) + else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_UNION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z)); + return true; + } + // 3. x - (y * z) -> (x - y) + (x - z) + else if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_INTERSECTION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, z)); + return true; + } + // 4. x * (y * z) -> (x * y) * z + else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_INTERSECTION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), + z); + return true; + } + // 5. x - (y - z) -> (x - y) + (x * z) + else if (term->type == CSGTerm::TYPE_DIFFERENCE && term->right->type == CSGTerm::TYPE_DIFFERENCE) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, y), + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z)); + return true; + } + // 6. x * (y - z) -> (x * y) - z + else if (term->type == CSGTerm::TYPE_INTERSECTION && term->right->type == CSGTerm::TYPE_DIFFERENCE) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, y), + z); + return true; + } + + // Part B: The '(x . y) . z' expressions + + x = term->left->left; + y = term->left->right; + z = term->right; + + // 7. (x - y) * z -> (x * z) - y + if (term->left->type == CSGTerm::TYPE_DIFFERENCE && term->type == CSGTerm::TYPE_INTERSECTION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z), + y); + return true; + } + // 8. (x + y) - z -> (x - z) + (y - z) + else if (term->left->type == CSGTerm::TYPE_UNION && term->type == CSGTerm::TYPE_DIFFERENCE) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, x, z), + CSGTerm::createCSGTerm(CSGTerm::TYPE_DIFFERENCE, y, z)); + return true; + } + // 9. (x + y) * z -> (x * z) + (y * z) + else if (term->left->type == CSGTerm::TYPE_UNION && term->type == CSGTerm::TYPE_INTERSECTION) { + term = CSGTerm::createCSGTerm(CSGTerm::TYPE_UNION, + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, x, z), + CSGTerm::createCSGTerm(CSGTerm::TYPE_INTERSECTION, y, z)); + return true; + } + + return false; +} + +int CSGTermNormalizer::count(const shared_ptr &term) const +{ + if (!term) return 0; + return term->type == CSGTerm::TYPE_PRIMITIVE ? 1 : 0 + count(term->left) + count(term->right); +} diff --git a/src/csgtermnormalizer.h b/src/csgtermnormalizer.h new file mode 100644 index 0000000..df37441 --- /dev/null +++ b/src/csgtermnormalizer.h @@ -0,0 +1,22 @@ +#ifndef CSGTERMNORMALIZER_H_ +#define CSGTERMNORMALIZER_H_ + +#include "memory.h" + +class CSGTermNormalizer +{ +public: + CSGTermNormalizer() : counter(0) {} + ~CSGTermNormalizer() {} + + shared_ptr normalize(const shared_ptr &term); + +private: + shared_ptr normalizePass(shared_ptr term) ; + bool normalize_tail(shared_ptr &term); + int count(const shared_ptr &term) const; + + int counter; +}; + +#endif diff --git a/src/mainwin.cc b/src/mainwin.cc index a169ab1..1b90b60 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -45,6 +45,7 @@ #include "ProgressWidget.h" #endif #include "ThrownTogetherRenderer.h" +#include "csgtermnormalizer.h" #include #include @@ -782,15 +783,8 @@ void MainWindow::compileCSG(bool procevents) if (procevents) QApplication::processEvents(); - this->root_norm_term = this->root_raw_term; - - // CSG normalization - while (1) { - shared_ptr n = CSGTerm::normalize(this->root_norm_term); - if (this->root_norm_term == n) break; - this->root_norm_term = n; - } - + CSGTermNormalizer normalizer; + this->root_norm_term = normalizer.normalize(this->root_raw_term); assert(this->root_norm_term); root_chain = new CSGChain(); @@ -804,11 +798,7 @@ void MainWindow::compileCSG(bool procevents) highlights_chain = new CSGChain(); for (unsigned int i = 0; i < highlight_terms.size(); i++) { - while (1) { - shared_ptr n = CSGTerm::normalize(highlight_terms[i]); - if (highlight_terms[i] == n) break; - highlight_terms[i] = n; - } + highlight_terms[i] = normalizer.normalize(highlight_terms[i]); highlights_chain->import(highlight_terms[i]); } } @@ -821,11 +811,7 @@ void MainWindow::compileCSG(bool procevents) background_chain = new CSGChain(); for (unsigned int i = 0; i < background_terms.size(); i++) { - while (1) { - shared_ptr n = CSGTerm::normalize(background_terms[i]); - if (background_terms[i] == n) break; - background_terms[i] = n; - } + background_terms[i] = normalizer.normalize(background_terms[i]); background_chain->import(background_terms[i]); } } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index b374188..2c49d94 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -253,6 +253,7 @@ set(CORE_SOURCES ../src/node.cc ../src/context.cc ../src/csgterm.cc + ../src/csgtermnormalizer.cc ../src/polyset.cc ../src/csgops.cc ../src/transform.cc diff --git a/tests/csgtestcore.cc b/tests/csgtestcore.cc index c2be326..e8a6878 100644 --- a/tests/csgtestcore.cc +++ b/tests/csgtestcore.cc @@ -19,6 +19,7 @@ #include "ThrownTogetherRenderer.h" #include "csgterm.h" +#include "csgtermnormalizer.h" #include "OffscreenView.h" #include @@ -315,12 +316,8 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) } // CSG normalization - csgInfo.root_norm_term = root_raw_term; - while (1) { - shared_ptr n = CSGTerm::normalize(csgInfo.root_norm_term); - if (csgInfo.root_norm_term == n) break; - csgInfo.root_norm_term = n; - } + CSGTermNormalizer normalizer; + csgInfo.root_norm_term = normalizer.normalize(root_raw_term); assert(csgInfo.root_norm_term); @@ -333,11 +330,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) csgInfo.highlights_chain = new CSGChain(); for (unsigned int i = 0; i < csgInfo.highlight_terms.size(); i++) { - while (1) { - shared_ptr n = CSGTerm::normalize(csgInfo.highlight_terms[i]); - if (csgInfo.highlight_terms[i] == n) break; - csgInfo.highlight_terms[i] = n; - } + csgInfo.highlight_terms[i] = normalizer.normalize(csgInfo.highlight_terms[i]); csgInfo.highlights_chain->import(csgInfo.highlight_terms[i]); } } @@ -347,11 +340,7 @@ int csgtestcore(int argc, char *argv[], test_type_e test_type) csgInfo.background_chain = new CSGChain(); for (unsigned int i = 0; i < csgInfo.background_terms.size(); i++) { - while (1) { - shared_ptr n = CSGTerm::normalize(csgInfo.background_terms[i]); - if (csgInfo.background_terms[i] == n) break; - csgInfo.background_terms[i] = n; - } + csgInfo.background_terms[i] = normalizer.normalize(csgInfo.background_terms[i]); csgInfo.background_chain->import(csgInfo.background_terms[i]); } } -- cgit v0.10.1 From 4a16db46574e3774df5f34d9a282d21fc291b243 Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 19:34:58 +0100 Subject: clarify and simplify the language used in the testing.txt document. diff --git a/doc/testing.txt b/doc/testing.txt index 4623a96..a50c95f 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -50,26 +50,33 @@ Adding a new regression test: Troubleshooting: ------------------------------ -0. Headless unix servers (no X11) +0. Headless unix servers -$ Xvfb :5 -screen 0 800x600x24 & +If you are attempting to run the tests on a unix-like system but only +have shell-console access, you may be able to run the tests by using a +virtual framebuffer program like Xvnc or Xvfb. For example: + +$ Xvfb :5 -screen 0 800x600x24 & $ DISPLAY=:5 ctest -1. Trouble finding libraries +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 environment variables, just like for the main qmake & openscad.pro. Examples: - OPENCSGDIR=~/OpenCSG-1.3.2 EIGEN2DIR=~/eigen2 cmake . + OPENSCAD_LIBRARIES=~ cmake . + CGALDIR=~/CGAL-3.9 BOOSTDIR=~/boost-1.47.0 cmake . - Valid variables are as follows (see CMakeLists.txt for more info): + Valid variables are as follows: BOOSTDIR, CGALDIR, EIGEN2DIR, GLEWDIR, OPENCSGDIR, OPENSCAD_LIBRARIES -2. Logs +2. Location of logs Logs of test runs are found in tests/build/Testing/Temporary -Pretty-printed index.html is in a subdir of tests/build/Testing/Temporary +A pretty-printed index.html is in a subdir of tests/build/Testing/Temporary Expected results are found in tests/regression/* Actual results are found in tests/build/testname-output/* @@ -77,28 +84,23 @@ Actual results are found in tests/build/testname-output/* Cross-compiling of tests has not been automated nor tested -4. Image-based tests takes a long time, they fail, and it says 'return -11' +4. Image-based tests takes a long time, they fail, and the log says 'return -11' -Imagemagick may have crashed. You can try using the alternate IM comparator -based on Normalized Cross Correlation. Pass -DCOMPARATOR=ncc to cmake +Imagemagick may have crashed while comparing the expected images to the +test-run generated (actual) images. You can try using the alternate +ImageMagick comparison method by by erasing CMakeCache, and re-running +cmake with -DCOMPARATOR=ncc. This will enable the Normalized Cross +Comparison method. -5. Testing images fails with 'morphology' not found for ImageMagick +5. Testing images fails with 'morphology not found" for ImageMagick in the log Your version of imagemagick is old. Upgrade, or pass -DCOMPARATOR=old to cmake. The comparison will be of lowered reliability. -6. Unexplained or bizarre errors. - -This can happen on dynamic-library systems (linux) where you try to use -your own version of a library while the system still has another version -under the system paths. You can diagnose this by looking at your cmake -log as well as your sysinfo.txt file, as well as running 'ldd' against -your binaries, to make sure that the proper versions of libraries are -getting compiled and linked with the test binaries. - -7. Other issues +6. Other issues -The OpenSCAD User Manual has a section on buildling. Check there for updates: +The OpenSCAD User Manual has a section on buildling. Please check there +for updates: http://en.wikibooks.org/wiki/OpenSCAD_User_Manual -- cgit v0.10.1 From 058299923379fa72145daf754342801f3a192903 Mon Sep 17 00:00:00 2001 From: don Date: Mon, 26 Dec 2011 12:51:30 -0600 Subject: print boost_root when it's under OPENSCAD_LIBRARIES, otherwise skip print diff --git a/openscad.pro b/openscad.pro index 50a419d..53f8a36 100644 --- a/openscad.pro +++ b/openscad.pro @@ -88,7 +88,7 @@ linux*:exists(/usr/lib64/libGLU*)|linux*:exists(/usr/lib/libGLU*) { # See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs. *g++* { - QMAKE_CXXFLAGS *= -fno-strict-aliasing + QMAKE_CXXFLAGS *= -fstrict-aliasing -Wstrict-aliasing } CONFIG(mingw-cross-env) { diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 74670c5..0e8e055 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -77,10 +77,11 @@ endif() if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") set(BOOST_ROOT "$ENV{OPENSCAD_LIBRARIES}") if (EXISTS ${BOOST_ROOT}/include/boost) - # workaround bugs in FindBoost.cmake with multiple versions of boost + # if boost is under OPENSCAD_LIBRARIES, then + # don't look in the system paths (workaround FindBoost.cmake bug) set(Boost_NO_SYSTEM_PATHS "TRUE") + message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) endif() - message(STATUS "BOOST_ROOT: " ${BOOST_ROOT}) endif() if (NOT $ENV{BOOSTDIR} STREQUAL "") -- cgit v0.10.1 From 36056e27f34a6049c18e49d5f24bfbd7cc6eabf4 Mon Sep 17 00:00:00 2001 From: don Date: Mon, 26 Dec 2011 12:55:25 -0600 Subject: remove some flags used during debugging diff --git a/openscad.pro b/openscad.pro index 53f8a36..50a419d 100644 --- a/openscad.pro +++ b/openscad.pro @@ -88,7 +88,7 @@ linux*:exists(/usr/lib64/libGLU*)|linux*:exists(/usr/lib/libGLU*) { # See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs. *g++* { - QMAKE_CXXFLAGS *= -fstrict-aliasing -Wstrict-aliasing + QMAKE_CXXFLAGS *= -fno-strict-aliasing } CONFIG(mingw-cross-env) { -- cgit v0.10.1 From 4dd727b390342f6286dc42087ef0a3c49865007d Mon Sep 17 00:00:00 2001 From: don bright Date: Mon, 26 Dec 2011 16:32:33 -0600 Subject: fix pre/ appending of includes on systems w mult libs + OPENSCAD_LIBRARIES diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 0e8e055..e33e20b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -64,6 +64,29 @@ endif() # Build test apps # +function(inclusion user_set_path found_paths) + # This function exists as a wrapper for INCLUDE_DIRECTORIES + # to deal with systems in which some libraries are found + # in the system paths, (/usr) but others are found in customized + # paths set in environment variables (CGAL_DIR). + # message(STATUS "inclusion ${user_set_path} ${found_paths}") + # message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}") + set( inclusion_match 0 ) + foreach( found_path ${${found_paths}} ) + if (${found_path} MATCHES ${${user_set_path}}.*) + set( inclusion_match 1 ) + endif() + endforeach() + if (user_set_path AND inclusion_match) + include_directories(BEFORE ${${found_paths}}) + # message(STATUS "inclusion prepend ${${found_paths}} for ${user_set_path}") + else() + include_directories(AFTER ${${found_paths}}) + # message(STATUS "inclusion append ${${found_paths}} for ${user_set_path}") + endif() + set( inclusion_match 0 ) +endfunction() + # Boost # Update this if FindBoost.cmake gets out of sync with the current boost release # set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0") @@ -92,17 +115,13 @@ if (NOT $ENV{BOOSTDIR} STREQUAL "") endif() find_package( Boost 1.35.0 COMPONENTS thread program_options REQUIRED) -if(Boost_FOUND) - message(STATUS "Boost includes found: " ${Boost_INCLUDE_DIRS}) - message(STATUS "Boost libraries found:") - foreach(boostlib ${Boost_LIBRARIES}) - message(STATUS " " ${boostlib}) - endforeach() - include_directories(${Boost_INCLUDE_DIRS}) -else() - message(STATUS "BOOST_ROOT: ${BOOST_ROOT}") - message(FATAL_ERROR "Boost not found.") -endif() +message(STATUS "Boost includes found: " ${Boost_INCLUDE_DIRS}) +message(STATUS "Boost libraries found:") +foreach(boostlib ${Boost_LIBRARIES}) + message(STATUS " " ${boostlib}) +endforeach() + +inclusion(BOOST_ROOT Boost_INCLUDE_DIRS) # Mac OS X if(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") @@ -111,18 +130,11 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") # Qt4 -if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - # make /usr/local/include/qt4 come before /usr/local/include (QT4 vs QT3) - set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) -endif() - +set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) find_package(OpenGL REQUIRED) find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED) include(${QT_USE_FILE}) - -if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") - set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF) -endif() +set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF) # Eigen2 @@ -133,11 +145,16 @@ 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}") +endif() + if (NOT EIGEN2_INCLUDE_DIR) - if (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") - set(EIGEN2_FIND_HINTS "$ENV{OPENSCAD_LIBRARIES}/include/eigen2") + if (EIGEN2_DIR) + set(EIGEN2_FIND_HINTS "${EIGEN2_DIR}/include/eigen2") endif() - set(EIGEN2_FIND_HINTS ${EIGEN2_FIND_HINTS} $ENV{EIGEN2DIR}) if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(EIGEN2_FIND_PATHS /usr/local/include/eigen2) else() @@ -153,7 +170,7 @@ if (NOT EIGEN2_INCLUDE_DIR) message(STATUS "Eigen2 found in " ${EIGEN2_INCLUDE_DIR}) endif() endif() -include_directories(${EIGEN2_INCLUDE_DIR}) +inclusion(EIGEN2_DIR EIGEN2_INCLUDE_DIR) # OpenCSG if (NOT $ENV{OPENCSGDIR} STREQUAL "") @@ -176,10 +193,14 @@ if (NOT OPENCSG_INCLUDE_DIR) message(STATUS "OpenCSG library found in " ${OPENCSG_LIBRARY}) endif() endif() -include_directories(${OPENCSG_INCLUDE_DIR}) +inclusion(OPENCSG_DIR OPENCSG_INCLUDE_DIR) # GLEW +if(WIN32_STATIC_BUILD) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLEW_STATIC") +endif() + if (NOT $ENV{GLEWDIR} STREQUAL "") set(GLEW_DIR "$ENV{GLEWDIR}") elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") @@ -187,11 +208,8 @@ elseif (NOT $ENV{OPENSCAD_LIBRARIES} STREQUAL "") endif() find_package(GLEW REQUIRED) -include_directories(${GLEW_INCLUDE_PATH}) -if(WIN32_STATIC_BUILD) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DGLEW_STATIC") -endif() +inclusion( GLEW_DIR GLEW_INCLUDE_PATH ) # Flex/Bison find_package(BISON REQUIRED) @@ -234,7 +252,7 @@ message(STATUS "CGAL libraries found in " ${CGAL_LIBRARIES_DIR} ) if("${CGAL_MAJOR_VERSION}.${CGAL_MINOR_VERSION}" VERSION_LESS 3.6) message(FATAL_ERROR "CGAL >= 3.6 required") endif() -include_directories(${CGAL_INCLUDE_DIRS}) +inclusion(CGAL_DIR CGAL_INCLUDE_DIRS) # Imagemagick @@ -456,8 +474,8 @@ endfunction() # comparison method to use if (NOT $ENV{COMPARATOR} STREQUAL "") set(COMPARATOR "$ENV{COMPARATOR}") + message(STATUS "ImageMagick method modified with COMPARATOR: " ${COMPARATOR}) endif() -message(STATUS "COMPARATOR: " ${COMPARATOR}) # # This functions adds cmd-line tests given files. -- cgit v0.10.1 From 27983e001b574eb5087a7d4cc6d33871891a9478 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 27 Dec 2011 03:44:48 +0100 Subject: bugfix: Fix assertion fail trying to export a non-2D file to dxf diff --git a/src/openscad.cc b/src/openscad.cc index 0d5b25e..c6dd7b6 100644 --- a/src/openscad.cc +++ b/src/openscad.cc @@ -364,6 +364,10 @@ int main(int argc, char **argv) } if (dxf_output_file) { + if (root_N.dim != 2) { + fprintf(stderr, "Current top level object is not a 2D object.\n"); + exit(1); + } std::ofstream fstream(dxf_output_file); if (!fstream.is_open()) { PRINTF("Can't open file \"%s\" for export", dxf_output_file); -- cgit v0.10.1 From 00a0ec64197e69b0486b39747440ae8f7b2e74a7 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 27 Dec 2011 16:04:16 +0100 Subject: Updated expected files due to recently introduced bounding box changes diff --git a/tests/regression/opencsgtest/example010-expected.png b/tests/regression/opencsgtest/example010-expected.png index 3a4ba27..0616f87 100644 Binary files a/tests/regression/opencsgtest/example010-expected.png and b/tests/regression/opencsgtest/example010-expected.png differ diff --git a/tests/regression/opencsgtest/example015-expected.png b/tests/regression/opencsgtest/example015-expected.png index 1a1c869..78ec3d7 100644 Binary files a/tests/regression/opencsgtest/example015-expected.png and b/tests/regression/opencsgtest/example015-expected.png differ diff --git a/tests/regression/opencsgtest/example021-expected.png b/tests/regression/opencsgtest/example021-expected.png index 675e57b..bf3a281 100644 Binary files a/tests/regression/opencsgtest/example021-expected.png and b/tests/regression/opencsgtest/example021-expected.png differ diff --git a/tests/regression/throwntogethertest/example010-expected.png b/tests/regression/throwntogethertest/example010-expected.png index 854eea8..87271eb 100644 Binary files a/tests/regression/throwntogethertest/example010-expected.png and b/tests/regression/throwntogethertest/example010-expected.png differ diff --git a/tests/regression/throwntogethertest/example014-expected.png b/tests/regression/throwntogethertest/example014-expected.png index 562ce74..4721663 100644 Binary files a/tests/regression/throwntogethertest/example014-expected.png and b/tests/regression/throwntogethertest/example014-expected.png differ diff --git a/tests/regression/throwntogethertest/example015-expected.png b/tests/regression/throwntogethertest/example015-expected.png index 6e16e33..85374b5 100644 Binary files a/tests/regression/throwntogethertest/example015-expected.png and b/tests/regression/throwntogethertest/example015-expected.png differ diff --git a/tests/regression/throwntogethertest/example021-expected.png b/tests/regression/throwntogethertest/example021-expected.png index 1e1576c..cfe303a 100644 Binary files a/tests/regression/throwntogethertest/example021-expected.png and b/tests/regression/throwntogethertest/example021-expected.png differ -- cgit v0.10.1 From 0ff0d2b68a10851ffab1b8baa14f87d20869d084 Mon Sep 17 00:00:00 2001 From: don bright Date: Tue, 27 Dec 2011 21:17:04 -0800 Subject: regression tests: fix ncc==0 false-fails when using NCC image comparison diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py index 967e334..4538984 100755 --- a/tests/test_cmdline_tool.py +++ b/tests/test_cmdline_tool.py @@ -110,7 +110,7 @@ def compare_png(resultfilename): elif compare_method=='NCC': thresh = 0.95 ncc_err = float(output.strip()) - if ncc_err > thresh: return True + if ncc_err > thresh or ncc_err==0.0: return True else: print >> sys.stderr, ncc_err, ' Images differ: NCC comparison < ', thresh return False -- cgit v0.10.1 From c1c54b33142d2363827bfa19acc83e89cdf7afa7 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 27 Dec 2011 16:04:16 +0100 Subject: Updated expected files due to recently introduced bounding box changes diff --git a/tests/regression/opencsgtest/example010-expected.png b/tests/regression/opencsgtest/example010-expected.png index 3a4ba27..0616f87 100644 Binary files a/tests/regression/opencsgtest/example010-expected.png and b/tests/regression/opencsgtest/example010-expected.png differ diff --git a/tests/regression/opencsgtest/example015-expected.png b/tests/regression/opencsgtest/example015-expected.png index 1a1c869..78ec3d7 100644 Binary files a/tests/regression/opencsgtest/example015-expected.png and b/tests/regression/opencsgtest/example015-expected.png differ diff --git a/tests/regression/opencsgtest/example021-expected.png b/tests/regression/opencsgtest/example021-expected.png index 675e57b..bf3a281 100644 Binary files a/tests/regression/opencsgtest/example021-expected.png and b/tests/regression/opencsgtest/example021-expected.png differ diff --git a/tests/regression/throwntogethertest/example010-expected.png b/tests/regression/throwntogethertest/example010-expected.png index 854eea8..87271eb 100644 Binary files a/tests/regression/throwntogethertest/example010-expected.png and b/tests/regression/throwntogethertest/example010-expected.png differ diff --git a/tests/regression/throwntogethertest/example014-expected.png b/tests/regression/throwntogethertest/example014-expected.png index 562ce74..4721663 100644 Binary files a/tests/regression/throwntogethertest/example014-expected.png and b/tests/regression/throwntogethertest/example014-expected.png differ diff --git a/tests/regression/throwntogethertest/example015-expected.png b/tests/regression/throwntogethertest/example015-expected.png index 6e16e33..85374b5 100644 Binary files a/tests/regression/throwntogethertest/example015-expected.png and b/tests/regression/throwntogethertest/example015-expected.png differ diff --git a/tests/regression/throwntogethertest/example021-expected.png b/tests/regression/throwntogethertest/example021-expected.png index 1e1576c..cfe303a 100644 Binary files a/tests/regression/throwntogethertest/example021-expected.png and b/tests/regression/throwntogethertest/example021-expected.png differ -- cgit v0.10.1 From bd2662a858eb74eb75307856cf89008e32a14782 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 14:57:07 +0100 Subject: Change axis labels back to black diff --git a/src/glview.cc b/src/glview.cc index f25cac6..141d998 100644 --- a/src/glview.cc +++ b/src/glview.cc @@ -500,10 +500,11 @@ void GLView::paintGL() // FIXME: This was an attempt to keep contrast with background, but is suboptimal // (e.g. nearly invisible against a gray background). - int r,g,b; - r=g=b=0; +// int r,g,b; +// r=g=b=0; // bgcol.getRgb(&r, &g, &b); - glColor3d((255.0-r)/255.0, (255.0-g)/255.0, (255.0-b)/255.0); +// glColor3f((255.0f-r)/255.0f, (255.0f-g)/255.0f, (255.0f-b)/255.0f); + glColor3f(0.0f, 0.0f, 0.0f); glBegin(GL_LINES); // X Label glVertex3d(xlabel_x-3, xlabel_y-3, 0); glVertex3d(xlabel_x+3, xlabel_y+3, 0); -- cgit v0.10.1 From bc35b37676a1a62478a37bf550bcac907d5588fc Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 17:53:09 +0100 Subject: Disabled a few dump tests causing floating point comparison issues diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 21cee6b..9ec4474 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -577,12 +577,15 @@ list(APPEND CGALSTLSANITYTEST_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/misc/no # Once we're capable of comparing these across platforms, we can put these back in disable_tests(dumptest_transform-tests dumptest_render-tests + dumptest_difference-tests + dumptest_intersection-tests dumptest_example001 dumptest_example005 dumptest_example006 dumptest_example007 dumptest_example008 dumptest_example012 + dumptest_example013 dumptest_example016 dumptest_example020 dumptest_example021) -- cgit v0.10.1 From db7b829089d6b35cd405247c50d6d8f1b62d47b2 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 17:53:57 +0100 Subject: Updated intersection-tests to avoid hard-to-compare OpenGL z-buffer fighting diff --git a/tests/regression/dumptest/intersection-tests-expected.txt b/tests/regression/dumptest/intersection-tests-expected.txt index e6bbf32..a9dba29 100644 --- a/tests/regression/dumptest/intersection-tests-expected.txt +++ b/tests/regression/dumptest/intersection-tests-expected.txt @@ -24,7 +24,7 @@ multmatrix([[1, 0, 0, 12], [0, 1, 0, 12], [0, 0, 1, 0], [0, 0, 0, 1]]) { intersection() { cube(size = [10, 10, 10], center = true); - multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7], [0, 0, 0, 1]]) { + multmatrix([[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 7.01], [0, 0, 0, 1]]) { cylinder($fn = 0, $fa = 12, $fs = 2, h = 4, r1 = 4, r2 = 4, center = true); } } diff --git a/tests/regression/opencsgtest/intersection-tests-expected.png b/tests/regression/opencsgtest/intersection-tests-expected.png index fc23560..772e2dc 100644 Binary files a/tests/regression/opencsgtest/intersection-tests-expected.png and b/tests/regression/opencsgtest/intersection-tests-expected.png differ diff --git a/tests/regression/throwntogethertest/intersection-tests-expected.png b/tests/regression/throwntogethertest/intersection-tests-expected.png index f6cf6af..f6cc56f 100644 Binary files a/tests/regression/throwntogethertest/intersection-tests-expected.png and b/tests/regression/throwntogethertest/intersection-tests-expected.png differ -- cgit v0.10.1 From c6004a5c27f7cbe2fed10e2c20b7735af2945014 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 18:05:14 +0100 Subject: Updated intersection-tests to avoid hard-to-compare OpenGL z-buffer fighting diff --git a/testdata/scad/features/intersection-tests.scad b/testdata/scad/features/intersection-tests.scad index e53f3c9..4a1d7e3 100644 --- a/testdata/scad/features/intersection-tests.scad +++ b/testdata/scad/features/intersection-tests.scad @@ -22,7 +22,7 @@ translate([12,0,0]) intersection() { translate([12,12,0]) intersection() { cube([10,10,10], center=true); - translate([0,0,7]) cylinder(r=4, h=4, center=true); + translate([0,0,7.01]) cylinder(r=4, h=4, center=true); } translate([24,0,0]) intersection() { diff --git a/tests/regression/cgalpngtest/intersection-tests-expected.png b/tests/regression/cgalpngtest/intersection-tests-expected.png index 6d004b0..d287e5f 100644 Binary files a/tests/regression/cgalpngtest/intersection-tests-expected.png and b/tests/regression/cgalpngtest/intersection-tests-expected.png differ -- cgit v0.10.1 From 732803039d1dff5e2f57f8873516164d23bbb9c4 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 18:15:47 +0100 Subject: Slightly modified example008 to reduce z-buffer fighting in throwntogether mode diff --git a/examples/example008.scad b/examples/example008.scad index a12ef96..8372f6b 100644 --- a/examples/example008.scad +++ b/examples/example008.scad @@ -20,13 +20,13 @@ difference() intersection() { - translate([ -125, -25, -25]) - linear_extrude(height = 50, convexity = 1) + translate([ -125, -25, -26]) + linear_extrude(height = 52, convexity = 1) import(file = "example008.dxf", layer = "X"); rotate(90, [0, 1, 0]) - translate([ -125, -25, -25]) - linear_extrude(height = 50, convexity = 1) + translate([ -125, -25, -26]) + linear_extrude(height = 52, convexity = 1) import(file = "example008.dxf", layer = "X"); } } \ No newline at end of file diff --git a/tests/regression/throwntogethertest/example008-expected.png b/tests/regression/throwntogethertest/example008-expected.png index 880844b..f825047 100644 Binary files a/tests/regression/throwntogethertest/example008-expected.png and b/tests/regression/throwntogethertest/example008-expected.png differ -- cgit v0.10.1 From 2799c8e9909ebc3a8e25946463cb259713daa5c1 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 28 Dec 2011 21:32:56 +0100 Subject: Enable OpenCSG as default for capable OpenGL 1.x contexts as this appears to be the normal situation diff --git a/src/OpenCSGWarningDialog.ui b/src/OpenCSGWarningDialog.ui index f902521..fe3f192 100644 --- a/src/OpenCSGWarningDialog.ui +++ b/src/OpenCSGWarningDialog.ui @@ -33,6 +33,9 @@ p, li { white-space: pre-wrap; } Enable OpenCSG + + true + diff --git a/src/Preferences.cc b/src/Preferences.cc index 59f8d23..1f52311 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -50,7 +50,7 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) this->defaultmap["editor/fontfamily"] = this->fontChooser->currentText(); this->defaultmap["editor/fontsize"] = this->fontSize->currentText().toUInt(); this->defaultmap["advanced/opencsg_show_warning"] = true; - this->defaultmap["advanced/enable_opencsg_opengl1x"] = false; + this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; // Toolbar QActionGroup *group = new QActionGroup(this); -- cgit v0.10.1 From 1fbe453cae84788689b0502526ecded6a25a69d4 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 00:46:27 +0100 Subject: Plug CGAL-3.6 exception crash reported by Don diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index a6b2f06..ed2cca6 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -269,7 +269,15 @@ Response CGALEvaluator::visit(State &state, const TransformNode &node) node.matrix(0,0), node.matrix(0,1), node.matrix(0,2), node.matrix(0,3), node.matrix(1,0), node.matrix(1,1), node.matrix(1,2), node.matrix(1,3), node.matrix(2,0), node.matrix(2,1), node.matrix(2,2), node.matrix(2,3), node.matrix(3,3)); - N.p3->transform(t); + CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); + try { + N.p3->transform(t); + } + catch (CGAL::Assertion_exception e) { + // CGAL-3.6 sometimes throws an exception here + PRINTF("CGAL error in CGAL_Nef_polyhedron3::transform(): %s", e.what()); + } + CGAL::set_error_behaviour(old_behaviour); } } else { -- cgit v0.10.1 From 575f3c4d6d12aae4639a8098e69685fdcb8c0a52 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 13:52:02 +0100 Subject: Revert "Plug CGAL-3.6 exception crash reported by Don". This check wasn't effective as no code actually threw an exception. This reverts commit 1fbe453cae84788689b0502526ecded6a25a69d4. diff --git a/src/CGALEvaluator.cc b/src/CGALEvaluator.cc index ed2cca6..a6b2f06 100644 --- a/src/CGALEvaluator.cc +++ b/src/CGALEvaluator.cc @@ -269,15 +269,7 @@ Response CGALEvaluator::visit(State &state, const TransformNode &node) node.matrix(0,0), node.matrix(0,1), node.matrix(0,2), node.matrix(0,3), node.matrix(1,0), node.matrix(1,1), node.matrix(1,2), node.matrix(1,3), node.matrix(2,0), node.matrix(2,1), node.matrix(2,2), node.matrix(2,3), node.matrix(3,3)); - CGAL::Failure_behaviour old_behaviour = CGAL::set_error_behaviour(CGAL::THROW_EXCEPTION); - try { - N.p3->transform(t); - } - catch (CGAL::Assertion_exception e) { - // CGAL-3.6 sometimes throws an exception here - PRINTF("CGAL error in CGAL_Nef_polyhedron3::transform(): %s", e.what()); - } - CGAL::set_error_behaviour(old_behaviour); + N.p3->transform(t); } } else { -- cgit v0.10.1 From e88cbddec56616a29290b7a50ba6acf4545dfecd Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 13:56:36 +0100 Subject: Disabled a few more dumptests due to floating point differences diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 9ec4474..cdcc0c0 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -587,8 +587,10 @@ disable_tests(dumptest_transform-tests dumptest_example012 dumptest_example013 dumptest_example016 + dumptest_example017 dumptest_example020 - dumptest_example021) + dumptest_example021 + dumptest_example022) # FIXME: This test illustrates a weakness in child() combined with modifiers. # Reenable it when this is improved -- cgit v0.10.1 From 3487d31055c702b9a867c187d62e6dd06be786d9 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 14:28:38 +0100 Subject: Don't inherit QTextEdit's default font when choosing font family diff --git a/src/mainwin.cc b/src/mainwin.cc index 1b90b60..bf0aaa1 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -1799,7 +1799,7 @@ MainWindow::preferences() void MainWindow::setFont(const QString &family, uint size) { - QFont font(editor->font()); + QFont font; if (!family.isEmpty()) font.setFamily(family); if (size > 0) font.setPointSize(size); font.setStyleHint(QFont::TypeWriter); -- cgit v0.10.1 From 211095d661e4bbc52a676f2e4b6d3ecf597bcf8d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 15:24:38 +0100 Subject: Since QFont style hints won't work on X11, we force the font to fixed pitch if the family isn't set diff --git a/src/mainwin.cc b/src/mainwin.cc index bf0aaa1..f9029d0 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -1801,6 +1801,7 @@ void MainWindow::setFont(const QString &family, uint size) { QFont font; if (!family.isEmpty()) font.setFamily(family); + else font.setFixedPitch(true); if (size > 0) font.setPointSize(size); font.setStyleHint(QFont::TypeWriter); editor->setFont(font); -- cgit v0.10.1 From 621515a5233a171fc76af8f1ed85011eb8c4f611 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 15:38:20 +0100 Subject: path updates diff --git a/doc/release-checklist.txt b/doc/release-checklist.txt index 2ff9593..01e4988 100644 --- a/doc/release-checklist.txt +++ b/doc/release-checklist.txt @@ -2,8 +2,8 @@ OpenSCAD Release Checklist -------------------------- o Update version - release-linux.sh - publish-macosx.sh + scripts/release-linux.sh + scripts/publish-macosx.sh FIXME: Windows o Update RELEASE_NOTES -- cgit v0.10.1 From 3de792d3ed2702c9b24222f89497523ec83d590d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 15:39:00 +0100 Subject: color override diff --git a/RELEASE_NOTES b/RELEASE_NOTES index b9648d2..a954c45 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -13,6 +13,7 @@ o New import() statement reads the correct file format based on the filename ext (.stl, .dxf and .off is supported) o The color() statement now supports an alpha parameter, e.g. color(c=[1,0,0], alpha=0.4) o The color() statement now supports specifying colors as strings, e.g. color("Red") +o The color() statement now overrides colors specified further down in the tree o if()/else() and the ternary operator can now take any value type as parameter. false, 0, empty string and empty vector or illegal value type will evaluate as false, everything else as true. o Strings can now be lexographically compared using the <, <=, >, >= operators o Added PI constant. -- cgit v0.10.1 From bed96773657f0a78ec79f5ac235488927186adef Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 15:39:14 +0100 Subject: Updated version to 2011.12 diff --git a/scripts/publish-macosx.sh b/scripts/publish-macosx.sh index a2451fa..0f4e741 100755 --- a/scripts/publish-macosx.sh +++ b/scripts/publish-macosx.sh @@ -1,7 +1,7 @@ #!/bin/sh -VERSION=`date "+%Y.%m.%d"` -#VERSION=2011.12 +#VERSION=`date "+%Y.%m.%d"` +VERSION=2011.12 # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} diff --git a/scripts/release-linux.sh b/scripts/release-linux.sh index e1eb001..1e7e836 100755 --- a/scripts/release-linux.sh +++ b/scripts/release-linux.sh @@ -1,8 +1,8 @@ #!/bin/bash # WARNING: This script might only work with the authors setup... -VERSION=`date "+%Y.%m.%d"` -#VERSION=2011.12 +#VERSION=`date "+%Y.%m.%d"` +VERSION=2011.12 set -ex -- cgit v0.10.1 From 95d8bad58eff21405920e79acf79af8297b50786 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 15:46:56 +0100 Subject: Set back version to date-tagged diff --git a/scripts/publish-macosx.sh b/scripts/publish-macosx.sh index 0f4e741..a2451fa 100755 --- a/scripts/publish-macosx.sh +++ b/scripts/publish-macosx.sh @@ -1,7 +1,7 @@ #!/bin/sh -#VERSION=`date "+%Y.%m.%d"` -VERSION=2011.12 +VERSION=`date "+%Y.%m.%d"` +#VERSION=2011.12 # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} diff --git a/scripts/release-linux.sh b/scripts/release-linux.sh index 1e7e836..e1eb001 100755 --- a/scripts/release-linux.sh +++ b/scripts/release-linux.sh @@ -1,8 +1,8 @@ #!/bin/bash # WARNING: This script might only work with the authors setup... -#VERSION=`date "+%Y.%m.%d"` -VERSION=2011.12 +VERSION=`date "+%Y.%m.%d"` +#VERSION=2011.12 set -ex -- cgit v0.10.1 From 8bfb3277e311b0b8c97e9bb77d6eceee97f42729 Mon Sep 17 00:00:00 2001 From: Brad Pitcher Date: Thu, 29 Dec 2011 09:24:42 -0800 Subject: fixes version() for cross-compiled windows builds diff --git a/version.pri b/version.pri index c94ab82..89a0dc9 100644 --- a/version.pri +++ b/version.pri @@ -1,7 +1,7 @@ # get VERSION from system date isEmpty(VERSION) { - win32-msvc*: { + win32-msvc*:!mingw-cross-env { # # Windows XP date command only has one argument, /t # and it can print the date in various localized formats. -- cgit v0.10.1 From 7c314b88e43fd1bf640be7526292d5afc73a5935 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Thu, 29 Dec 2011 18:11:09 +0100 Subject: This should fix the problem with version() and version_num() returning 0 in release builds diff --git a/version.pri b/version.pri index c94ab82..02a41e4 100644 --- a/version.pri +++ b/version.pri @@ -51,17 +51,18 @@ isEmpty(VERSION) { } else { # Unix/Mac VERSION = $$system(date "+%Y.%m.%d") - VERSION_SPLIT=$$split(VERSION, ".") - VERSION_YEAR=$$member(VERSION_SPLIT, 0) - VERSION_MONTH=$$member(VERSION_SPLIT, 1) - VERSION_DAY=$$member(VERSION_SPLIT, 2) } - # Fix for problem with integers with leading zeros - # being interpreted by C++ as octals. Now they're doubles. - VERSION_YEAR=$${VERSION_YEAR}.0 - VERSION_MONTH=$${VERSION_MONTH}.0 - VERSION_DAY=$${VERSION_DAY}.0 } +VERSION_SPLIT=$$split(VERSION, ".") +VERSION_YEAR=$$member(VERSION_SPLIT, 0) +VERSION_MONTH=$$member(VERSION_SPLIT, 1) +VERSION_DAY=$$member(VERSION_SPLIT, 2) +# Fix for problem with integers with leading zeros +# being interpreted by C++ as octals. Now they're doubles. +VERSION_YEAR=$${VERSION_YEAR}.0 +VERSION_MONTH=$${VERSION_MONTH}.0 +VERSION_DAY=$${VERSION_DAY}.0 + DEFINES += OPENSCAD_VERSION=$$VERSION OPENSCAD_YEAR=$$VERSION_YEAR OPENSCAD_MONTH=$$VERSION_MONTH !isEmpty(VERSION_DAY): DEFINES += OPENSCAD_DAY=$$VERSION_DAY -- cgit v0.10.1 From 7a74c62147aaf6bb532f86ac6d8fe6f5152c0a27 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 30 Dec 2011 14:31:42 +0100 Subject: Updated MCAD diff --git a/libraries/MCAD b/libraries/MCAD index b7d9ec4..f32906a 160000 --- a/libraries/MCAD +++ b/libraries/MCAD @@ -1 +1 @@ -Subproject commit b7d9ec4c5e5939b2bffcda60b91f4623e9b3c625 +Subproject commit f32906ae90b1326a2d7241994e18c6f796799a95 -- cgit v0.10.1 From 8df595120f90f19ee920e42e750e6da9ef1ce550 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 30 Dec 2011 14:32:10 +0100 Subject: packaging bugfix: Make archive include MCAD diff --git a/doc/release-checklist.txt b/doc/release-checklist.txt index 01e4988..71158f6 100644 --- a/doc/release-checklist.txt +++ b/doc/release-checklist.txt @@ -12,7 +12,7 @@ o Tag release git tag "openscad-2011.12" o build source package - git archive --format=tar openscad-2011.12 --prefix=openscad-2011.12/ | gzip > openscad-2011.12.src.tar.gz + scripts/git-archive-all.py --prefix=openscad-2011.12/ openscad-2011.12.src.tar.gz o build binaries tar xzf openscad-2011.12.src.tar.gz diff --git a/scripts/git-archive-all.py b/scripts/git-archive-all.py new file mode 100755 index 0000000..ccfb08a --- /dev/null +++ b/scripts/git-archive-all.py @@ -0,0 +1,171 @@ +#! /usr/bin/env python + +import sys +from os import path, chdir +from subprocess import Popen, PIPE +from sys import argv, stdout +from fnmatch import fnmatch + + +class GitArchiver(object): + """ + GitArchiver + + Scan a git repository and export all tracked files, and submodules. + Checks for .gitattributes files in each directory and uses 'export-ignore' + pattern entries for ignore files in the archive. + + Automatically detects output format extension: zip, tar, bz2, or gz + """ + + def __init__(self, prefix='', verbose=False, exclude=True, extra=[]): + self.prefix = prefix + self.verbose = verbose + self.exclude = exclude + self.extra = extra + + self._excludes = [] + + + def create(self, output_file): + """ + create(str output_file) -> None + + Creates the archive, written to the given output_file + Filetype may be one of: gz, zip, bz2, tar + """ + # + # determine the format + # + _, _, format = output_file.rpartition(".") + + if format.lower() == 'zip': + from zipfile import ZipFile, ZIP_DEFLATED + output_archive = ZipFile(path.abspath(output_file), 'w') + add = lambda name, arcname: output_archive.write(name, self.prefix + arcname, ZIP_DEFLATED) + + elif format.lower() in ['tar', 'bz2', 'gz']: + import tarfile + t_mode = ('w:%s' % format) if format != 'tar' else 'w' + + output_archive = tarfile.open(path.abspath(output_file), t_mode) + add = lambda name, arcname: output_archive.add(name, self.prefix + arcname) + else: + raise RuntimeError("Unknown format: '%s'" % format) + + # + # compress + # + + # extra files first (we may change folder later) + for name in self.extra: + if self.verbose: + toPath = '=> %s%s' % (self.prefix, name) if self.prefix else "" + print 'Compressing %s %s ...' % (name, toPath) + add(name, name) + + self._excludes = [] + + for name, arcname in self.listFiles(path.abspath('')): + if self.verbose: + toPath = '=> %s%s' % (self.prefix, arcname) if self.prefix else "" + print 'Compressing %s %s ...' % (arcname, toPath) + add(name, arcname) + + output_archive.close() + + + def listFiles(self, git_repositary_path, baselevel=''): + """ + listFiles(str git_repository_path, str baselevel='') -> iterator + + An iterator method that yields a tuple(filepath, fullpath) + for each file that should be included in the archive. + Skips those that match the exclusion patterns found in + any discovered .gitattributes files along the way. + + Recurses into submodules as well. + """ + for filepath in self.runShell('git ls-files --cached --full-name --no-empty-directory'): + fullpath = path.join(baselevel, filepath) + filename = path.basename(filepath) + + if self.exclude and filename == '.gitattributes': + self._excludes = [] + fh = open(filepath, 'r') + for line in fh: + if not line: break + tokens = line.strip().split() + if 'export-ignore' in tokens[1:]: + self._excludes.append(tokens[0]) + fh.close() + + if not filename.startswith('.git') and not path.isdir(filepath): + + # check the patterns first + ignore = False + for pattern in self._excludes: + if fnmatch(fullpath, pattern) or fnmatch(filename, pattern): + if self.verbose: print 'Exclude pattern matched (%s): %s' % (pattern, fullpath) + ignore = True + break + if ignore: + continue + + # baselevel is needed to tell the arhiver where it have to extract file + yield filepath, fullpath + + # get paths for every submodule + for submodule in self.runShell("git submodule --quiet foreach 'pwd'"): + chdir(submodule) + # in order to get output path we need to exclude repository path from the submodule path + submodule = submodule[len(git_repositary_path)+1:] + # recursion allows us to process repositories with more than one level of submodules + for git_file in self.listFiles(git_repositary_path, submodule): + yield git_file + + + + @staticmethod + def runShell(cmd): + return Popen(cmd, shell=True, stdout=PIPE).stdout.read().splitlines() + + + +if __name__ == "__main__": + from optparse import OptionParser + + parser = OptionParser(usage="usage: %prog [-v] [--prefix PREFIX] [--no-exclude] OUTPUT_FILE", version="%prog 1.0") + + parser.add_option('--prefix', type='string', dest='prefix', + default='', help="prepend PREFIX to each filename in the archive") + + parser.add_option('-v', '--verbose', action='store_true', dest='verbose', help='enable verbose mode') + + parser.add_option('--no-exclude', action='store_false', dest='exclude', + default=True, help="Dont read .gitattributes files for patterns containing export-ignore attrib") + + parser.add_option('--extra', action='append', dest='extra', default=[], + help="Any additional files to include in the archive.") + + options, args = parser.parse_args() + + if len(args) != 1: + parser.error('You must specify exactly one output file') + + outFile = args[0] + + if path.isdir(outFile): + parser.error('You cannot use directory as output') + + archiver = GitArchiver(options.prefix, + options.verbose, + options.exclude, + options.extra) + + try: + archiver.create(outFile) + except Exception, e: + parser.exit(2, "%s\n" % e) + + sys.exit(0) -- cgit v0.10.1 From 44360abe09897fff43b0ee0a499a80652886e733 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 30 Dec 2011 14:50:23 +0100 Subject: build system bugfix: set version back to 2011.12 diff --git a/scripts/publish-macosx.sh b/scripts/publish-macosx.sh index a2451fa..0f4e741 100755 --- a/scripts/publish-macosx.sh +++ b/scripts/publish-macosx.sh @@ -1,7 +1,7 @@ #!/bin/sh -VERSION=`date "+%Y.%m.%d"` -#VERSION=2011.12 +#VERSION=`date "+%Y.%m.%d"` +VERSION=2011.12 # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} diff --git a/scripts/release-linux.sh b/scripts/release-linux.sh index e1eb001..1e7e836 100755 --- a/scripts/release-linux.sh +++ b/scripts/release-linux.sh @@ -1,8 +1,8 @@ #!/bin/bash # WARNING: This script might only work with the authors setup... -VERSION=`date "+%Y.%m.%d"` -#VERSION=2011.12 +#VERSION=`date "+%Y.%m.%d"` +VERSION=2011.12 set -ex -- cgit v0.10.1 From a2f8b11ff444478d080fd9431b057cde6f399cc5 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 30 Dec 2011 15:26:16 +0100 Subject: Set back version to date-tagged diff --git a/scripts/publish-macosx.sh b/scripts/publish-macosx.sh index 0f4e741..a2451fa 100755 --- a/scripts/publish-macosx.sh +++ b/scripts/publish-macosx.sh @@ -1,7 +1,7 @@ #!/bin/sh -#VERSION=`date "+%Y.%m.%d"` -VERSION=2011.12 +VERSION=`date "+%Y.%m.%d"` +#VERSION=2011.12 # Turn off ccache, just for safety PATH=${PATH//\/opt\/local\/libexec\/ccache:} diff --git a/scripts/release-linux.sh b/scripts/release-linux.sh index 1e7e836..e1eb001 100755 --- a/scripts/release-linux.sh +++ b/scripts/release-linux.sh @@ -1,8 +1,8 @@ #!/bin/bash # WARNING: This script might only work with the authors setup... -#VERSION=`date "+%Y.%m.%d"` -VERSION=2011.12 +VERSION=`date "+%Y.%m.%d"` +#VERSION=2011.12 set -ex -- cgit v0.10.1 From 7a044adfb8f7d9a1e64b72fb9a4a873b0449e4f6 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Fri, 30 Dec 2011 15:27:23 +0100 Subject: build system patch for OpenCSG-1.3.2 for Mac OS X diff --git a/patches/OpenCSG-1.3.2-MacOSX-port.patch b/patches/OpenCSG-1.3.2-MacOSX-port.patch new file mode 100644 index 0000000..3d81dc4 --- /dev/null +++ b/patches/OpenCSG-1.3.2-MacOSX-port.patch @@ -0,0 +1,70 @@ +diff --git a/example/example.pro b/example/example.pro +index 8891a28..5cb5e81 100644 +--- a/example/example.pro ++++ b/example/example.pro +@@ -2,9 +2,16 @@ TEMPLATE = app + TARGET = opencsgexample + + CONFIG += opengl warn_on release +-INCLUDEPATH += ../glew/include ../include +- +-LIBS += -L../lib -lopencsg -lglut -L../glew/lib -lGLEW ++INCLUDEPATH += ../include ++LIBS += -L../lib -lopencsg -lGLEW ++macx { ++ INCLUDEPATH += /opt/local/include ++ LIBS += -framework GLUT -L/opt/local/lib ++} ++else { ++ INCLUDEPATH += ../glew/include ++ LIBS += -lglut -L../glew/lib ++} + + HEADERS = displaylistPrimitive.h + SOURCES = displaylistPrimitive.cpp main.cpp +diff --git a/opencsg.pro b/opencsg.pro +index b56e622..5cf2d6d 100644 +--- a/opencsg.pro ++++ b/opencsg.pro +@@ -1,2 +1,2 @@ + TEMPLATE = subdirs +-SUBDIRS = src example ++SUBDIRS = src +diff --git a/src/src.pro b/src/src.pro +index 4843a12..04d3f4d 100644 +--- a/src/src.pro ++++ b/src/src.pro +@@ -1,10 +1,31 @@ + TEMPLATE = lib + TARGET = opencsg + VERSION = 1.3.2 +-DESTDIR = ../lib + + CONFIG += opengl warn_on release +-INCLUDEPATH += ../include ../glew/include ../ ++INCLUDEPATH += ../include ../ ++ ++# Optionally specify deployment location using the ++# MACOSX_DEPLOY_DIR env. variable ++DEPLOYDIR = $$(MACOSX_DEPLOY_DIR) ++ ++!isEmpty(DEPLOYDIR) { ++ message("Deploy") ++ INSTALLDIR = $$(MACOSX_DEPLOY_DIR) ++ INCLUDEPATH += $$(MACOSX_DEPLOY_DIR)/include ++ LIBS += -L$$(MACOSX_DEPLOY_DIR)/lib -lGLEW ++ CONFIG += absolute_library_soname ++ headers.files = ../include/opencsg.h ++ headers.path = $$INSTALLDIR/include ++ INSTALLS += target headers ++ target.path = $$INSTALLDIR/lib ++} ++else { ++ DESTDIR = ../lib ++ INCLUDEPATH += ../glew/include ++ INSTALLS += target ++ target.path = $$DESTDIR ++} + + HEADERS = ../include/opencsg.h \ + opencsgConfig.h \ -- cgit v0.10.1 From 3d686118bbced68f9a9af69339e2998b28139756 Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 31 Dec 2011 17:02:55 +0100 Subject: enable linux->mingw32 cross-compilation of tests diff --git a/doc/testing.txt b/doc/testing.txt index a50c95f..c0edc6f 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -10,7 +10,7 @@ $ cd tests $ cmake . $ make -Windows: +Windows + MSVC: First, get a normal build working by following instructions at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Building_on_Windows @@ -22,6 +22,15 @@ Then, from the QT command prompt: > cmake . > nmake -f Makefile +Cross compiling Linux->Windows: + +Follow the instructions for cross-compiling with qmake at +http://en.wikibooks.org/wiki/OpenSCAD_User_Manual + +$ cd tests +$ cmake . -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +$ make + B) Running tests $ ctest Runs tests enabled by default diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cdcc0c0..4f11a7e 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -24,11 +24,11 @@ endif() # Windows # -if(WIN32) +if(WIN32 AND MSVC) set(WIN32_STATIC_BUILD "True") endif() -if(WIN32_STATIC_BUILD) +if(WIN32_STATIC_BUILD AND MSVC) if(${CMAKE_BUILD_TYPE} STREQUAL "Debug") set(EMSG "\nTo build Win32 STATIC OpenSCAD please see doc/testing.txt") message(FATAL_ERROR ${EMSG}) @@ -36,7 +36,7 @@ if(WIN32_STATIC_BUILD) endif() # Disable warnings -if(WIN32) +if(WIN32 AND MSVC) # too long decorated names set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4503") # int cast to bool in CGAL @@ -52,7 +52,7 @@ if(WIN32) endif() # Debugging - if you uncomment, use nmake -f Makefile > log.txt (the log is big) -if(WIN32) +if(WIN32 AND MSVC) # Linker debugging #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -VERBOSE") @@ -60,6 +60,10 @@ if(WIN32) # you have to pass -DCMAKE_VERBOSE_MAKEFILE=ON to cmake when you run it. endif() +if(WIN32 AND CMAKE_COMPILER_IS_GNUCXX) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fpermissive -frounding-math") +endif() + # # Build test apps # @@ -256,11 +260,13 @@ inclusion(CGAL_DIR CGAL_INCLUDE_DIRS) # Imagemagick -find_package(ImageMagick COMPONENTS convert) -if (ImageMagick_convert_FOUND) - message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) -else() - message(FATAL_ERROR "Couldn't find imagemagick 'convert' program") +if (NOT SKIP_IMAGEMAGICK) + find_package(ImageMagick COMPONENTS convert) + if (ImageMagick_convert_FOUND) + message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) + else() + message(FATAL_ERROR "Couldn't find imagemagick 'convert' program") + endif() endif() # Internal includes @@ -348,6 +354,7 @@ set(OFFSCREEN_SOURCES system-gl.cc) add_library(tests-core STATIC ${CORE_SOURCES}) +target_link_libraries(tests-core ${OPENGL_LIBRARY}) add_library(tests-common STATIC ${COMMON_SOURCES}) target_link_libraries(tests-common tests-core) add_library(tests-cgal STATIC ${CGAL_SOURCES}) @@ -419,6 +426,10 @@ add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/Op 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}) +if (MINGW_CROSS_ENV_DIR) + mingw_cross_env_add_missing_libs() +endif() + # # Tags tests as disabled. This is more convenient than removing them manually # from the lists of filenames diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake new file mode 100644 index 0000000..f13fa8c --- /dev/null +++ b/tests/CMingw-env-cross.cmake @@ -0,0 +1,107 @@ +# Toolchain file for cross compiling OpenSCAD linux->mingw-win32. +# +# usage: +# 1. get Brad Pitcher's toolchain for OpenSCAD qmake setup: +# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X +# 2. export MINGW_CROSS_ENV_DIR=where-you-installed-mingw +# 2. cmake . -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +# 3. make should proceed as normal. +# +# see also +# http://www.vtk.org/Wiki/CMake_Cross_Compiling +# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch +# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake +# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html +# output of qmake +# +# this file released into public domain by Don Bright 2011 + + +# +# cross-compiler +# + +set(CMAKE_SYSTEM_NAME Windows) + +set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) + +set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) +set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) +set(CMAKE_RC_COMPILER i686-pc-mingw32-windres) +set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + +# +# libraries +# + +set( Boost_USE_STATIC_LIBS ON ) +set( Boost_USE_MULTITHREADED ON ) +set( Boost_COMPILER "_win32" ) +# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself + +set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} ) +set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) +set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) +set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) +set( SKIP_IMAGEMAGICK TRUE ) + +# +# QT +# + +set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) +set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) +set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) + +# +# Cmake fails at mingw-cross. Here we copy the flags and libraries from +# from looking at "qmake && make VERBOSE=1" as well as examining +# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & google +# + +if (NOT MINGW_CROSS_FLAGS_SET) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UQT_DLL -frtti -fexceptions -mthreads -Wall -DQT_LARGEFILE_SUPPORT") + set(MINGW_CROSS_FLAGS_SET 1) +endif() + +function(mingw_cross_env_info) + message(STATUS "QT USE FILE: ${QT_USE_FILE}") + message(STATUS "QT INCLUDES: ${QT_INCLUDES}") + message(STATUS "QT LIBRARY_DIR: ${QT_LIBRARY_DIR}") + message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}") +endfunction() + +function(mingw_cross_env_add_missing_libs) + # mingw_cross_env_info() + set(mingw_cross_libs msvcr80 imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) + target_link_libraries(opencsgtest ${mingw_cross_libs}) + target_link_libraries(csgtermtest ${mingw_cross_libs}) + target_link_libraries(csgtexttest ${mingw_cross_libs}) + target_link_libraries(dumptest ${mingw_cross_libs}) + target_link_libraries(echotest ${mingw_cross_libs}) + target_link_libraries(cgalpngtest ${mingw_cross_libs}) + target_link_libraries(throwntogethertest ${mingw_cross_libs}) + target_link_libraries(cgaltest ${mingw_cross_libs}) + target_link_libraries(cgalstlsanitytest ${mingw_cross_libs}) +endfunction() + +# +# -D definitions +# + +if( NOT CROSS_DEFS_SET ) + add_definitions( -DQT_THREAD_SUPPORT ) + add_definitions( -DGLEW_STATIC ) + add_definitions( -DBOOST_STATIC ) + add_definitions( -DBOOST_THREAD_USE_LIB ) + add_definitions( -DUNICODE ) + + # for TWO_DIGIT_EXPONENT. see stdio.h from mingw-env/usr/i686-pc-mingw32/include + add_definitions( -D__MSVCRT_VERSION__=0x800 ) + + set(CROSS_DEFS_SET 1) +endif() + diff --git a/tests/FindGLEW.cmake b/tests/FindGLEW.cmake index fa3071f..42b06ff 100644 --- a/tests/FindGLEW.cmake +++ b/tests/FindGLEW.cmake @@ -11,13 +11,17 @@ # http://openlibraries.org/browser/trunk/FindGLEW.cmake?rev=1383 -IF (WIN32) +IF (WIN32 AND MSVC) IF (WIN32_STATIC_BUILD) # passed from caller SET(GLEW_LIB_SEARCH_NAME glew32s.lib) # static, non-debug (Release) ELSE () SET(GLEW_LIB_SEARCH_NAME glew32.lib) # other. untested with OpenSCAD ENDIF() +ELSEIF () # GCC + SET(GLEW_LIB_SEARCH_NAME "libglew32s.a") +ENDIF () +IF (WIN32) FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h $ENV{PROGRAMFILES}/GLEW/include ${PROJECT_SOURCE_DIR}/src/nvgl/glew/include diff --git a/tests/OffscreenContextWGL.cc b/tests/OffscreenContextWGL.cc index f36671c..75a7ed2 100644 --- a/tests/OffscreenContextWGL.cc +++ b/tests/OffscreenContextWGL.cc @@ -105,10 +105,10 @@ bool create_wgl_dummy_context(OffscreenContext &ctx) wc.style = CS_OWNDC; wc.lpfnWndProc = WndProc; wc.hInstance = inst; - wc.lpszClassName = "OpenSCAD"; + wc.lpszClassName = (LPCWSTR)"OpenSCAD"; RegisterClass( &wc ); - HWND window = CreateWindow( "OpenSCAD", "OpenSCAD", + HWND window = CreateWindow( (LPCWSTR)"OpenSCAD", (LPCWSTR)"OpenSCAD", WS_CAPTION | WS_POPUPWINDOW, //| WS_VISIBLE, 0, 0, ctx.width, ctx.height, NULL, NULL, inst, NULL ); diff --git a/tests/dumptest.cc b/tests/dumptest.cc index 22dd96c..f7179d7 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -45,6 +45,7 @@ #include #include #include +#include using std::string; -- cgit v0.10.1 From 3f1cb83f4b267db351842ed2a9e2640fac3045db Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sat, 31 Dec 2011 17:02:34 -0600 Subject: various tweaks for cross compiling tests under mingw diff --git a/doc/testing.txt b/doc/testing.txt index c0edc6f..0ec5649 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -24,11 +24,16 @@ Then, from the QT command prompt: Cross compiling Linux->Windows: +Additional prerequisities: wine, mingw-cross-env + +Note: CTest harness will only run under Wine under *nix, not under Win32. + Follow the instructions for cross-compiling with qmake at -http://en.wikibooks.org/wiki/OpenSCAD_User_Manual +http://en.wikibooks.org/wiki/OpenSCAD_User_Manual , especially the part +about including the cross-compiler in your PATH. Then: $ cd tests -$ cmake . -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +$ cmake . -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake $ make B) Running tests @@ -89,11 +94,7 @@ A pretty-printed index.html is in a subdir of tests/build/Testing/Temporary Expected results are found in tests/regression/* Actual results are found in tests/build/testname-output/* -3. Cross-compiling - -Cross-compiling of tests has not been automated nor tested - -4. Image-based tests takes a long time, they fail, and the log says 'return -11' +3. Image-based tests takes a long time, they fail, and the log says 'return -11' Imagemagick may have crashed while comparing the expected images to the test-run generated (actual) images. You can try using the alternate @@ -101,12 +102,12 @@ ImageMagick comparison method by by erasing CMakeCache, and re-running cmake with -DCOMPARATOR=ncc. This will enable the Normalized Cross Comparison method. -5. Testing images fails with 'morphology not found" for ImageMagick in the log +4. Testing images fails with 'morphology not found" for ImageMagick in the log Your version of imagemagick is old. Upgrade, or pass -DCOMPARATOR=old to cmake. The comparison will be of lowered reliability. -6. Other issues +5. Other issues The OpenSCAD User Manual has a section on buildling. Please check there for updates: diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 4f11a7e..e03c39a 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -536,6 +536,9 @@ enable_testing() # set up custom pretty printing of results set(INFOCMD "execute_process(COMMAND ${CMAKE_CURRENT_BINARY_DIR}/opencsgtest --info OUTPUT_FILE sysinfo.txt)") +if (MINGW_CROSS_ENV_DIR) + set(INFOCMD "execute_process(COMMAND wine ${CMAKE_CURRENT_BINARY_DIR}/opencsgtest --info OUTPUT_FILE sysinfo.txt)") +endif() set(PRETTYCMD "\"${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/test_pretty_print.py --builddir=${CMAKE_CURRENT_BINARY_DIR}\"") set(CTEST_CUSTOM_FILE ${CMAKE_CURRENT_BINARY_DIR}/CTestCustom.cmake) set(CTEST_CUSTOM_TXT "\n diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake index f13fa8c..fc5c912 100644 --- a/tests/CMingw-env-cross.cmake +++ b/tests/CMingw-env-cross.cmake @@ -8,31 +8,38 @@ # 3. make should proceed as normal. # # see also +# +# http://mingw-cross-env.nongnu.org/#requirements # http://www.vtk.org/Wiki/CMake_Cross_Compiling # https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch # http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake # http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html # output of qmake # -# this file released into public domain by Don Bright 2011 # # cross-compiler # - -set(CMAKE_SYSTEM_NAME Windows) set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) -set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) -set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) -set(CMAKE_RC_COMPILER i686-pc-mingw32-windres) -set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) +set(BUILD_SHARED_LIBS OFF) +set(CMAKE_SYSTEM_NAME Windows) +set(MSYS 1) +xset(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) +set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) +set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) +set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) +set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) +set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) +set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix") +set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel") + # # libraries # @@ -47,6 +54,7 @@ set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) set( SKIP_IMAGEMAGICK TRUE ) +set( ImageMagick_convert_EXECUTABLE /usr/bin/convert ) # # QT @@ -57,9 +65,13 @@ set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) # -# Cmake fails at mingw-cross. Here we copy the flags and libraries from -# from looking at "qmake && make VERBOSE=1" as well as examining -# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & google +# There are various problems introduced to cmake's linking by the large +# number of libraries needed by OpenSCAD and the complicated build system. +# +# Here we copy the flags and libraries from from looking at +# "qmake && make VERBOSE=1" as well as examining +# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & using google +# Another good resource are the files under usr/i686-pc-mingw32/mkspecs # if (NOT MINGW_CROSS_FLAGS_SET) @@ -76,7 +88,7 @@ endfunction() function(mingw_cross_env_add_missing_libs) # mingw_cross_env_info() - set(mingw_cross_libs msvcr80 imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) + set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) target_link_libraries(opencsgtest ${mingw_cross_libs}) target_link_libraries(csgtermtest ${mingw_cross_libs}) target_link_libraries(csgtexttest ${mingw_cross_libs}) @@ -99,9 +111,9 @@ if( NOT CROSS_DEFS_SET ) add_definitions( -DBOOST_THREAD_USE_LIB ) add_definitions( -DUNICODE ) - # for TWO_DIGIT_EXPONENT. see stdio.h from mingw-env/usr/i686-pc-mingw32/include - add_definitions( -D__MSVCRT_VERSION__=0x800 ) - set(CROSS_DEFS_SET 1) + endif() + + diff --git a/tests/FindGLEW.cmake b/tests/FindGLEW.cmake index 42b06ff..286fae8 100644 --- a/tests/FindGLEW.cmake +++ b/tests/FindGLEW.cmake @@ -17,7 +17,7 @@ IF (WIN32 AND MSVC) ELSE () SET(GLEW_LIB_SEARCH_NAME glew32.lib) # other. untested with OpenSCAD ENDIF() -ELSEIF () # GCC +ELSE () # GCC SET(GLEW_LIB_SEARCH_NAME "libglew32s.a") ENDIF () diff --git a/tests/dumptest.cc b/tests/dumptest.cc index f7179d7..f83a993 100644 --- a/tests/dumptest.cc +++ b/tests/dumptest.cc @@ -45,7 +45,6 @@ #include #include #include -#include using std::string; @@ -66,10 +65,9 @@ string dumptree(const Tree &tree, const AbstractNode &node) int main(int argc, char **argv) { -#ifdef WIN32 +#ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif - if (argc != 3) { fprintf(stderr, "Usage: %s \n", argv[0]); exit(1); diff --git a/tests/echotest.cc b/tests/echotest.cc index afa3d03..8f145b0 100644 --- a/tests/echotest.cc +++ b/tests/echotest.cc @@ -59,7 +59,7 @@ static void outfile_handler(const std::string &msg, void *userdata) { int main(int argc, char **argv) { -#ifdef WIN32 +#ifdef _MSC_VER _set_output_format(_TWO_DIGIT_EXPONENT); #endif diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py index 4538984..ef10a19 100755 --- a/tests/test_cmdline_tool.py +++ b/tests/test_cmdline_tool.py @@ -61,7 +61,11 @@ def execute_and_redirect(cmd, params, outfile): else: return retval def get_normalized_text(filename): - text = open(filename).read() + try: + f = open(filename) + text = f.read() + except: + text = '' return text.strip("\r\n").replace("\r\n", "\n") + "\n" def compare_text(expected, actual): @@ -71,8 +75,9 @@ def compare_default(resultfilename): print >> sys.stderr, 'diff text compare: ' print >> sys.stderr, ' expected textfile: ', expectedfilename print >> sys.stderr, ' actual textfile: ', resultfilename - if not compare_text(expectedfilename, resultfilename): - execute_and_redirect("diff", [expectedfilename, resultfilename], sys.stderr) + if not compare_text(expectedfilename, resultfilename): + if resultfilename: + execute_and_redirect("diff", [expectedfilename, resultfilename], sys.stderr) return False return True @@ -136,8 +141,13 @@ def run_test(testname, cmd, args): outputname = os.path.normpath( outputname ) outfile = open(outputname, "wb") + try: - proc = subprocess.Popen([cmd] + args + [outputname], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if os.path.isfile(cmd+'.exe'): + cmdline = ['wine']+[cmd+'.exe'] + args + [outputname] + else: + cmdline = [cmd] + args + [outputname] + proc = subprocess.Popen(cmdline, stdout=subprocess.PIPE, stderr=subprocess.PIPE) errtext = proc.communicate()[1] if errtext != None and len(errtext) > 0: print >> sys.stderr, "Error output: " + errtext -- cgit v0.10.1 From 807261e01ee26bf54506d0adbeebe9fb683fb316 Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 31 Dec 2011 15:39:48 -0800 Subject: fix typo in test build script diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake index fc5c912..a8530e9 100644 --- a/tests/CMingw-env-cross.cmake +++ b/tests/CMingw-env-cross.cmake @@ -27,7 +27,7 @@ set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) set(BUILD_SHARED_LIBS OFF) set(CMAKE_SYSTEM_NAME Windows) set(MSYS 1) -xset(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) +set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) -- cgit v0.10.1 From 7860d85daa41bc97bc907a7864986dc2df899729 Mon Sep 17 00:00:00 2001 From: don bright Date: Sat, 31 Dec 2011 15:53:39 -0800 Subject: add -no-strict-aliasing for mingw cross compiles. add lzma lib flag diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e03c39a..e803146 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -13,6 +13,9 @@ set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}") # Build debug build as default if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE RelWithDebInfo) +endif() + +if(CMAKE_COMPILER_IS_GNUCXX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing") endif() diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake index a8530e9..8b802fc 100644 --- a/tests/CMingw-env-cross.cmake +++ b/tests/CMingw-env-cross.cmake @@ -88,7 +88,7 @@ endfunction() function(mingw_cross_env_add_missing_libs) # mingw_cross_env_info() - set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) + set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z lzma) target_link_libraries(opencsgtest ${mingw_cross_libs}) target_link_libraries(csgtermtest ${mingw_cross_libs}) target_link_libraries(csgtexttest ${mingw_cross_libs}) -- cgit v0.10.1 From 0acf0fee5b60c5fd5ae28767849270b8c2e729c0 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sat, 31 Dec 2011 18:06:28 -0600 Subject: add instr. for out-of-source build for cross-compilation diff --git a/doc/testing.txt b/doc/testing.txt index 0ec5649..331b485 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -28,12 +28,16 @@ Additional prerequisities: wine, mingw-cross-env Note: CTest harness will only run under Wine under *nix, not under Win32. -Follow the instructions for cross-compiling with qmake at +Follow the instructions for installing the mingw-env cross build system at http://en.wikibooks.org/wiki/OpenSCAD_User_Manual , especially the part -about including the cross-compiler in your PATH. Then: +about including the cross-compiler in your PATH. If you do cross-builds, +it's recommended to use out-of-source builds (mkdir buildx; cd buildx; cmake ..) +in order to keep your native *nix build separate from your cross-build. $ cd tests -$ cmake . -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake +$ mkdir build-mingw32 +$ cd build-mingw32 +$ cmake .. -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake $ make B) Running tests -- cgit v0.10.1 From 83abde79d4182ad0a29a437769f4d6c108283dd4 Mon Sep 17 00:00:00 2001 From: don bright Date: Sun, 1 Jan 2012 01:11:43 +0100 Subject: remove lzma and add note about using manually if needed diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake index 8b802fc..4376961 100644 --- a/tests/CMingw-env-cross.cmake +++ b/tests/CMingw-env-cross.cmake @@ -88,7 +88,8 @@ endfunction() function(mingw_cross_env_add_missing_libs) # mingw_cross_env_info() - set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z lzma) + # some systems may need more libs, like -lzma + set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z) target_link_libraries(opencsgtest ${mingw_cross_libs}) target_link_libraries(csgtermtest ${mingw_cross_libs}) target_link_libraries(csgtexttest ${mingw_cross_libs}) -- cgit v0.10.1 From c765f5162f159a233c776e7288f68d440f81b326 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Sun, 1 Jan 2012 21:30:39 -0600 Subject: fix crash bug rpt by nop head - 'use ' when x.scad doesnt exist diff --git a/src/parser.y b/src/parser.y index b0df50d..958ef89 100644 --- a/src/parser.y +++ b/src/parser.y @@ -588,13 +588,18 @@ AbstractModule *parse(const char *text, const char *path, int debug) if (!module) return NULL; - BOOST_FOREACH(Module::ModuleContainer::value_type &m, module->usedlibs) { + std::vector to_erase; + + BOOST_FOREACH(Module::ModuleContainer::value_type &m, module->usedlibs) { module->usedlibs[m.first] = Module::compile_library(m.first); if (!module->usedlibs[m.first]) { PRINTF("WARNING: Failed to compile library `%s'.", m.first.c_str()); - module->usedlibs.erase(m.first); + to_erase.push_back( m.first ); } } + BOOST_FOREACH( std::string s, to_erase ) { + module->usedlibs.erase( s ); + } parser_error_pos = -1; return module; -- cgit v0.10.1 From b9c027a69987f29019f947029050defa2898575b Mon Sep 17 00:00:00 2001 From: Don Bright Date: Mon, 2 Jan 2012 20:44:50 -0600 Subject: use pkg-config to find QT libraries in mingw-cross-env, not FindQt4.cmake diff --git a/doc/testing.txt b/doc/testing.txt index 331b485..f690939 100644 --- a/doc/testing.txt +++ b/doc/testing.txt @@ -22,23 +22,9 @@ Then, from the QT command prompt: > cmake . > nmake -f Makefile -Cross compiling Linux->Windows: +Cross compiling Linux->Win32: -Additional prerequisities: wine, mingw-cross-env - -Note: CTest harness will only run under Wine under *nix, not under Win32. - -Follow the instructions for installing the mingw-env cross build system at -http://en.wikibooks.org/wiki/OpenSCAD_User_Manual , especially the part -about including the cross-compiler in your PATH. If you do cross-builds, -it's recommended to use out-of-source builds (mkdir buildx; cd buildx; cmake ..) -in order to keep your native *nix build separate from your cross-build. - -$ cd tests -$ mkdir build-mingw32 -$ cd build-mingw32 -$ cmake .. -DMINGW_CROSS_ENV_DIR= -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake -$ make +Please see openscad/tests/CMingw-cross-env.cmake for instructions. B) Running tests diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index e803146..65becc4 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -72,10 +72,10 @@ endif() # function(inclusion user_set_path found_paths) - # This function exists as a wrapper for INCLUDE_DIRECTORIES - # to deal with systems in which some libraries are found - # in the system paths, (/usr) but others are found in customized - # paths set in environment variables (CGAL_DIR). + # If user_set_path indicates an env. variable was specifically + # set by the user, then found_paths become an include priority (prepend); + # otherwise found_paths are stuck on the end of the include flags (append). + # message(STATUS "inclusion ${user_set_path} ${found_paths}") # message(STATUS "inclusion ${${user_set_path}} ${${found_paths}}") set( inclusion_match 0 ) @@ -95,6 +95,10 @@ function(inclusion user_set_path found_paths) endfunction() # Boost +# +# FindBoost.cmake has been included from Cmake's GIT circa the end of 2011 +# because most existing installs of cmake had a buggy older version. +# # Update this if FindBoost.cmake gets out of sync with the current boost release # set(Boost_ADDITIONAL_VERSIONS "1.47.0" "1.46.0") @@ -139,8 +143,17 @@ endif(${CMAKE_SYSTEM_NAME} MATCHES "Darwin") set(CMAKE_INCLUDE_DIRECTORIES_BEFORE ON) find_package(OpenGL REQUIRED) -find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED) -include(${QT_USE_FILE}) + +if (MINGW_CROSS_ENV_DIR) + mingw_cross_env_find_qt() + mingw_cross_env_info() + include_directories( ${QT_INCLUDE_DIRS} ) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${QT_CFLAGS_OTHER}") +else() + find_package(Qt4 COMPONENTS QtCore QtGui QtOpenGL REQUIRED) + include(${QT_USE_FILE}) +endif() + set(CMAKE_INCLUDE_DIRECTORIES_BEFORE OFF) # Eigen2 @@ -429,10 +442,6 @@ add_executable(throwntogethertest throwntogethertest.cc csgtestcore.cc ../src/Op 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}) -if (MINGW_CROSS_ENV_DIR) - mingw_cross_env_add_missing_libs() -endif() - # # Tags tests as disabled. This is more convenient than removing them manually # from the lists of filenames diff --git a/tests/CMingw-cross-env.cmake b/tests/CMingw-cross-env.cmake new file mode 100644 index 0000000..469223d --- /dev/null +++ b/tests/CMingw-cross-env.cmake @@ -0,0 +1,146 @@ +# +# CMake Toolchain file for cross compiling OpenSCAD tests linux->mingw-win32 +# -------------------------------------------------------------------------- +# +# Prerequisites: mingw-cross-env, ImageMagick 6.5.9.3 or newer, wine +# +# Usage: +# +# - follow Brad Pitcher's mingw-cross-env for OpenSCAD setup: +# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X +# - cross-compile openscad.exe, to verify your installation works properly. +# - cd openscad/tests && mkdir build-mingw32 && cd build-mingw32 +# - cmake .. -DCMAKE_TOOLCHAIN_FILE=CMingw-cross-env.cmake \ +# -DMINGW_CROSS_ENV_DIR= +# - make should proceed as normal. +# - now run 'ctest' on your *nix machine. +# The test .exe programs should run under Wine. +# +# See also: +# +# http://lists.gnu.org/archive/html/mingw-cross-env-list/2010-11/threads.html#00078 +# (thread "Qt with Cmake") +# http://lists.gnu.org/archive/html/mingw-cross-env-list/2011-01/threads.html#00012 +# (thread "Qt: pkg-config files?") +# http://mingw-cross-env.nongnu.org/#requirements +# http://www.vtk.org/Wiki/CMake_Cross_Compiling +# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch +# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake +# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html +# Makefile.Release generated by qmake +# cmake's FindQt4.cmake & Qt4ConfigDependentSettings.cmake files +# mingw-cross-env's qmake.conf and *.prl files +# mingw-cross-env's pkg-config files in usr/i686-pc-mingw32/lib/pkgconfig +# http://www.vtk.org/Wiki/CMake:How_To_Find_Libraries +# + +# +# Notes: +# +# To debug the build process run "make VERBOSE=1". 'strace -f' is also useful. +# +# This file is actually called multiple times by cmake, so various 'if NOT set' +# guards are used to keep programs from running twice. +# +# The test will not currently run under win32 because the ctest harness +# is created by cmake on the machine that it is called on, not on the +# machine it is targeting. +# + +# +# Part 1. Find *nix-ImageMagick +# +# The tests run under Wine under *nix. Therefore we need to find the +# ImageMagick comparison program on the *nix machine. It must be +# searched before the 'cross-compile' environment is setup. +# + +if (NOT imagemagick_cross_set) + find_package(ImageMagick COMPONENTS convert REQUIRED) + message(STATUS "ImageMagick convert executable found: " ${ImageMagick_convert_EXECUTABLE}) + set( SKIP_IMAGEMAGICK TRUE ) + set( imagemagick_cross_set ) +endif() + +# +# Part 2. cross-compiler setup +# + +set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) + +set(BUILD_SHARED_LIBS OFF) +set(CMAKE_SYSTEM_NAME Windows) +set(MSYS 1) +set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + +set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) +set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) +set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) +set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) +set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) +set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix") +# set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel") + +# +# Part 3. library settings for mingw-cross-env +# + +set( Boost_USE_STATIC_LIBS ON ) +set( Boost_USE_MULTITHREADED ON ) +set( Boost_COMPILER "_win32" ) +# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself + +set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} ) +set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) +set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) +set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) + +# +# Qt4 +# +# To workaround problems with CMake's FindQt4.cmake when combined with +# mingw-cross-env (circa early 2012), we here instead use pkg-config. To +# workaround Cmake's insertion of -bdynamic, we stick 'static' on the +# end of QT_LIBRARIES +# + +set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) +set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) +set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) + +function(mingw_cross_env_find_qt) + # called from CMakeLists.txt + find_package( PkgConfig ) + pkg_check_modules( QTCORE QtCore ) + pkg_check_modules( QTGUI QtGui ) + pkg_check_modules( QTOPENGL QtOpenGL ) + + set(QT_INCLUDE_DIRS ${QTCORE_INCLUDE_DIRS} ${QTGUI_INCLUDE_DIRS} ${QTOPENGL_INCLUDE_DIRS}) + set(QT_CFLAGS_OTHER "${QTCORE_CFLAGS_OTHER} ${QTGUI_CFLAGS_OTHER} ${QTOPENGL_CFLAGS_OTHER}") + set(QT_LIBRARIES "${QTCORE_STATIC_LDFLAGS} ${QTGUI_STATIC_LDFLAGS} ${QTOPENGL_STATIC_LDFLAGS};-static") + + set(QT_INCLUDE_DIRS ${QT_INCLUDE_DIRS} PARENT_SCOPE) + set(QT_CFLAGS_OTHER ${QT_CFLAGS_OTHER} PARENT_SCOPE) + set(QT_LIBRARIES ${QT_LIBRARIES} PARENT_SCOPE) +endfunction() + +function(mingw_cross_env_info) + message(STATUS "QT INCLUDE_DIRS: ${QT_INCLUDE_DIRS}") + message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}") + message(STATUS "QT_CFLAGS_OTHER: ${QT_CFLAGS_OTHER}") +endfunction() + +# +# Part 4. -D definitions +# + +if( NOT cross_defs_set ) + add_definitions( -DGLEW_STATIC ) # FindGLEW.cmake needs this + add_definitions( -DBOOST_STATIC ) + add_definitions( -DBOOST_THREAD_USE_LIB ) + add_definitions( -DUNICODE ) # because qmake does it + set(cross_defs_set 1) +endif() diff --git a/tests/CMingw-env-cross.cmake b/tests/CMingw-env-cross.cmake deleted file mode 100644 index 8b802fc..0000000 --- a/tests/CMingw-env-cross.cmake +++ /dev/null @@ -1,119 +0,0 @@ -# Toolchain file for cross compiling OpenSCAD linux->mingw-win32. -# -# usage: -# 1. get Brad Pitcher's toolchain for OpenSCAD qmake setup: -# http://en.wikibooks.org/wiki/OpenSCAD_User_Manual/Cross-compiling_for_Windows_on_Linux_or_Mac_OS_X -# 2. export MINGW_CROSS_ENV_DIR=where-you-installed-mingw -# 2. cmake . -DCMAKE_TOOLCHAIN_FILE=CMingw-env-cross.cmake -# 3. make should proceed as normal. -# -# see also -# -# http://mingw-cross-env.nongnu.org/#requirements -# http://www.vtk.org/Wiki/CMake_Cross_Compiling -# https://bitbucket.org/muellni/mingw-cross-env-cmake/src/2067fcf2d52e/src/cmake-1-toolchain-file.patch -# http://code.google.com/p/qtlobby/source/browse/trunk/toolchain-mingw.cmake -# http://gcc.gnu.org/onlinedocs/gcc-3.4.6/gcc/Link-Options.html -# output of qmake -# - - -# -# cross-compiler -# - -set(MINGW_CROSS_ENV_DIR $ENV{MINGW_CROSS_ENV_DIR}) - -set(BUILD_SHARED_LIBS OFF) -set(CMAKE_SYSTEM_NAME Windows) -set(MSYS 1) -set(CMAKE_FIND_ROOT_PATH ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32) -set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) -set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) -set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) - -set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) -set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) -set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) -set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) -set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) -set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix") -set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel") - -# -# libraries -# - -set( Boost_USE_STATIC_LIBS ON ) -set( Boost_USE_MULTITHREADED ON ) -set( Boost_COMPILER "_win32" ) -# set( Boost_DEBUG TRUE ) # for debugging cmake's FindBoost, not boost itself - -set( OPENSCAD_LIBRARIES ${CMAKE_FIND_ROOT_PATH} ) -set( EIGEN2_DIR ${CMAKE_FIND_ROOT_PATH} ) -set( CGAL_DIR ${CMAKE_FIND_ROOT_PATH}/lib/CGAL ) -set( GLEW_DIR ${CMAKE_FIND_ROOT_PATH} ) -set( SKIP_IMAGEMAGICK TRUE ) -set( ImageMagick_convert_EXECUTABLE /usr/bin/convert ) - -# -# QT -# - -set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) -set(QT_MOC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-moc) -set(QT_UIC_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-uic) - -# -# There are various problems introduced to cmake's linking by the large -# number of libraries needed by OpenSCAD and the complicated build system. -# -# Here we copy the flags and libraries from from looking at -# "qmake && make VERBOSE=1" as well as examining -# the .prl files in mingw-cross-env/usr/i686-pc-mingw32/lib & using google -# Another good resource are the files under usr/i686-pc-mingw32/mkspecs -# - -if (NOT MINGW_CROSS_FLAGS_SET) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -UQT_DLL -frtti -fexceptions -mthreads -Wall -DQT_LARGEFILE_SUPPORT") - set(MINGW_CROSS_FLAGS_SET 1) -endif() - -function(mingw_cross_env_info) - message(STATUS "QT USE FILE: ${QT_USE_FILE}") - message(STATUS "QT INCLUDES: ${QT_INCLUDES}") - message(STATUS "QT LIBRARY_DIR: ${QT_LIBRARY_DIR}") - message(STATUS "QT LIBRARIES: ${QT_LIBRARIES}") -endfunction() - -function(mingw_cross_env_add_missing_libs) - # mingw_cross_env_info() - set(mingw_cross_libs imm32 winmm ws2_32 glu32 opengl32 mng lcms tiff jpeg png z lzma) - target_link_libraries(opencsgtest ${mingw_cross_libs}) - target_link_libraries(csgtermtest ${mingw_cross_libs}) - target_link_libraries(csgtexttest ${mingw_cross_libs}) - target_link_libraries(dumptest ${mingw_cross_libs}) - target_link_libraries(echotest ${mingw_cross_libs}) - target_link_libraries(cgalpngtest ${mingw_cross_libs}) - target_link_libraries(throwntogethertest ${mingw_cross_libs}) - target_link_libraries(cgaltest ${mingw_cross_libs}) - target_link_libraries(cgalstlsanitytest ${mingw_cross_libs}) -endfunction() - -# -# -D definitions -# - -if( NOT CROSS_DEFS_SET ) - add_definitions( -DQT_THREAD_SUPPORT ) - add_definitions( -DGLEW_STATIC ) - add_definitions( -DBOOST_STATIC ) - add_definitions( -DBOOST_THREAD_USE_LIB ) - add_definitions( -DUNICODE ) - - set(CROSS_DEFS_SET 1) - -endif() - - - -- cgit v0.10.1 From 277c762912818990f3d7e7e57026c844b5cacfba Mon Sep 17 00:00:00 2001 From: don bright Date: Tue, 3 Jan 2012 18:21:28 +0100 Subject: changes to enable building on NetBSD diff --git a/bison.pri b/bison.pri index 7d3bed0..9840c5a 100644 --- a/bison.pri +++ b/bison.pri @@ -22,6 +22,10 @@ unix:freebsd-g++ { QMAKE_YACC = /usr/local/bin/bison } +unix:netbsd* { + QMAKE_YACC = /usr/pkg/bin/bison +} + unix:linux* { exists(/usr/bin/bison) { QMAKE_YACC = /usr/bin/bison diff --git a/boost.pri b/boost.pri index 02e4247..e313d40 100644 --- a/boost.pri +++ b/boost.pri @@ -52,7 +52,8 @@ boost { unix { BMT_TEST1 = /usr/lib64/libboost*thread-mt* BMT_TEST2 = /usr/lib/libboost*thread-mt* - exists($$BMT_TEST1)|exists($$BMT_TEST2) { + BMT_TEST3 = /usr/pkg/lib/libboost*thread-mt* # netbsd + exists($$BMT_TEST1)|exists($$BMT_TEST2)|exists($$BMT_TEST3) { BOOST_LINK_FLAGS = -lboost_thread-mt -lboost_program_options-mt } } diff --git a/eigen2.pri b/eigen2.pri index 6062c76..1bbb7a5 100644 --- a/eigen2.pri +++ b/eigen2.pri @@ -29,6 +29,7 @@ eigen2 { freebsd-g++: EIGEN2_INCLUDEPATH = /usr/local/include/eigen2 macx: EIGEN2_INCLUDEPATH = /opt/local/include/eigen2 linux*: EIGEN2_INCLUDEPATH = /usr/include/eigen2 + netbsd*: EIGEN2_INCLUDEPATH = /usr/pkg/include/eigen2 } # eigen2 being under 'include/eigen2' needs special prepending diff --git a/flex.pri b/flex.pri index 2e1559e..57f854e 100644 --- a/flex.pri +++ b/flex.pri @@ -13,6 +13,10 @@ unix:freebsd-g++ { QMAKE_LEX = /usr/local/bin/flex } +unix:netbsd* { + QMAKE_LEX = /usr/pkg/bin/flex +} + unix:linux* { exists(/usr/bin/flex) { QMAKE_LEX = /usr/bin/flex diff --git a/openscad.pro b/openscad.pro index 0feca74..b26122a 100644 --- a/openscad.pro +++ b/openscad.pro @@ -86,6 +86,15 @@ linux*:exists(/usr/lib64/libGLU*)|linux*:exists(/usr/lib/libGLU*) { LIBS += -lGLU } +netbsd* { + LIBS += -L/usr/X11R7/lib + QMAKE_LFLAGS += -Wl,-R/usr/X11R7/lib + QMAKE_LFLAGS += -Wl,-R/usr/pkg/lib + !isEmpty(OPENSCAD_LIBDIR) { + QMAKE_LFLAGS += -Wl,-R$$OPENSCAD_LIBDIR/lib + } +} + # See Dec 2011 OpenSCAD mailing list, re: CGAL/GCC bugs. *g++* { QMAKE_CXXFLAGS *= -fno-strict-aliasing diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cdcc0c0..cdbba3d 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -219,6 +219,11 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(FLEX_EXECUTABLE /usr/local/bin/flex) endif() +if(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") + include_directories(/usr/pkg/include) + set(FLEX_EXECUTABLE /usr/pkg/bin/flex) +endif() + find_package(FLEX REQUIRED) # The COMPILE_FLAGS and forced C++ compiler is just to be compatible with qmake if (WIN32) -- cgit v0.10.1 From e437182c095d5af0f4ab930c738cbd6ea026ad50 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Tue, 3 Jan 2012 12:27:03 -0600 Subject: add --mingw-cross-env switch to test_cmdline_tool.py diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 65becc4..e2920d8 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -538,7 +538,10 @@ macro(add_cmdline_test TESTCMD TESTSUFFIX) set(CONFARG CONFIGURATIONS) set(CONFVAL ${FOUNDCONFIGS}) - add_test(NAME ${TEST_FULLNAME} ${CONFARG} ${CONFVAL} COMMAND ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py --comparator=${COMPARATOR} -c ${ImageMagick_convert_EXECUTABLE} -s ${TESTSUFFIX} ${CMAKE_BINARY_DIR}/${TESTCMD} "${SCADFILE}") + if (MINGW_CROSS_ENV_DIR) + set( MINGW_CROSS_ARG "--mingw-cross-env" ) + endif() + add_test(NAME ${TEST_FULLNAME} ${CONFARG} ${CONFVAL} COMMAND ${PYTHON_EXECUTABLE} ${tests_SOURCE_DIR}/test_cmdline_tool.py ${MINGW_CROSS_ARG} --comparator=${COMPARATOR} -c ${ImageMagick_convert_EXECUTABLE} -s ${TESTSUFFIX} ${CMAKE_BINARY_DIR}/${TESTCMD} "${SCADFILE}") endif() endforeach() endmacro() diff --git a/tests/CMingw-cross-env.cmake b/tests/CMingw-cross-env.cmake index 469223d..364326a 100644 --- a/tests/CMingw-cross-env.cmake +++ b/tests/CMingw-cross-env.cmake @@ -82,7 +82,7 @@ set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix") -# set(CMAKE_BUILD_TYPE Release CACHE STRING "Debug|Release|RelWithDebInfo|MinSizeRel") +set(CMAKE_BUILD_TYPE RelWithDebInfo) # # Part 3. library settings for mingw-cross-env diff --git a/tests/test_cmdline_tool.py b/tests/test_cmdline_tool.py index ef10a19..f29acc0 100755 --- a/tests/test_cmdline_tool.py +++ b/tests/test_cmdline_tool.py @@ -143,7 +143,7 @@ def run_test(testname, cmd, args): outfile = open(outputname, "wb") try: - if os.path.isfile(cmd+'.exe'): + if os.path.isfile(cmd+'.exe') and options.mingw_cross_env: cmdline = ['wine']+[cmd+'.exe'] + args + [outputname] else: cmdline = [cmd] + args + [outputname] @@ -176,11 +176,11 @@ def usage(): print >> sys.stderr, " -s, --suffix= Write -expected and -actual files with the given suffix instead of .txt" print >> sys.stderr, " -t, --test= Specify test name instead of deducting it from the argument" print >> sys.stderr, " -c, --convexec= Path to ImageMagick 'convert' executable" - + print >> sys.stderr, " -x, --mingw-cross-env Mingw-cross-env cross compilation" if __name__ == '__main__': # Handle command-line arguments try: - opts, args = getopt.getopt(sys.argv[1:], "gs:c:t:m:", ["generate", "convexec=", "suffix=", "test=", "comparator="]) + opts, args = getopt.getopt(sys.argv[1:], "gs:c:t:m:x", ["generate", "convexec=", "suffix=", "test=", "comparator=", "mingw-cross-env"]) except getopt.GetoptError, err: usage() sys.exit(2) @@ -202,6 +202,8 @@ if __name__ == '__main__': options.convert_exec = os.path.normpath( a ) elif o in ("-m", "--comparator"): options.comparator = a + elif o in ("-x", "--mingw-cross-env"): + options.mingw_cross_env = True # and if len(args) < 2: -- cgit v0.10.1 From 597c5611072348d2d411d4f567fd8d0a46731628 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 3 Jan 2012 20:33:11 +0100 Subject: Ignore more generated files diff --git a/tests/.gitignore b/tests/.gitignore index ba02d4c..4dc4e40 100644 --- a/tests/.gitignore +++ b/tests/.gitignore @@ -19,4 +19,6 @@ out.png /echotest /opencsgtest /throwntogethertest -/yee_compare +/cgalstlsanitytest +/sysinfo.txt +/CTestCustom.cmake \ No newline at end of file -- cgit v0.10.1 From fac508c8cd3ceef0f0abf1edb7f48f866d8a1232 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 3 Jan 2012 20:34:31 +0100 Subject: Added use-tests, minimal change to include-tests diff --git a/testdata/scad/features/include-tests.scad b/testdata/scad/features/include-tests.scad index 36c04ca..fc4e9d0 100644 --- a/testdata/scad/features/include-tests.scad +++ b/testdata/scad/features/include-tests.scad @@ -7,7 +7,7 @@ include //Test with empty path include -//Test without preceeding space +//Test without preceding space include //Test with other strange character that is allowed @@ -34,7 +34,7 @@ module test1() translate([-2,-2,0]) test6(); //Just to give a top level object - translate([0,-2,0]) sphere(0.7, $fn=16); + translate([0,-2,0]) sphere(test2_variable, $fn=16); } test1(); diff --git a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad index 140c4ed..c34632c 100644 --- a/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad +++ b/testdata/scad/features/sub1/sub2/sub3/sub4/include-test2.scad @@ -4,7 +4,9 @@ include //Test relative file location include <../include-test4.scad> -module test2 () +test2_variable = 0.7; + +module test2() { cube(center=true); } diff --git a/testdata/scad/features/sub1/sub2/sub3/sub4/use-test2.scad b/testdata/scad/features/sub1/sub2/sub3/sub4/use-test2.scad new file mode 100644 index 0000000..68013db --- /dev/null +++ b/testdata/scad/features/sub1/sub2/sub3/sub4/use-test2.scad @@ -0,0 +1,14 @@ +//Test nested use +use + +//Test relative file location +use <../use-test4.scad> + +test2_variable = 0.7; + +module test2() +{ + translate([2,0,0]) test3(); + translate([2,-2,0]) test4(); + cube(center=true); +} diff --git a/testdata/scad/features/sub1/sub2/sub3/sub4/use-test3.scad b/testdata/scad/features/sub1/sub2/sub3/sub4/use-test3.scad new file mode 100644 index 0000000..6e3537e --- /dev/null +++ b/testdata/scad/features/sub1/sub2/sub3/sub4/use-test3.scad @@ -0,0 +1,4 @@ +module test3() +{ + cylinder(r1=0.7, r2=0.2, center=true); +} diff --git a/testdata/scad/features/sub1/sub2/sub3/use-test4.scad b/testdata/scad/features/sub1/sub2/sub3/use-test4.scad new file mode 100644 index 0000000..c13368c --- /dev/null +++ b/testdata/scad/features/sub1/sub2/sub3/use-test4.scad @@ -0,0 +1,4 @@ +module test4() +{ + cylinder(r=0.5, $fn=10, center=true); +} diff --git a/testdata/scad/features/use test6.scad b/testdata/scad/features/use test6.scad new file mode 100644 index 0000000..0d96b26 --- /dev/null +++ b/testdata/scad/features/use test6.scad @@ -0,0 +1,7 @@ +module test6() +{ + difference() { + cube(center=true); + cylinder(r=0.4, h=2, center=true); + } +} diff --git a/testdata/scad/features/use-test5.scad b/testdata/scad/features/use-test5.scad new file mode 100644 index 0000000..e4393cb --- /dev/null +++ b/testdata/scad/features/use-test5.scad @@ -0,0 +1,4 @@ +module test5() +{ + sphere(r=0.5, $fn=8); +} diff --git a/testdata/scad/features/use-tests.scad b/testdata/scad/features/use-tests.scad new file mode 100644 index 0000000..64af692 --- /dev/null +++ b/testdata/scad/features/use-tests.scad @@ -0,0 +1,39 @@ +//Test that the entire path is pushed onto the stack upto the last '/' +use + +//Test that a non existent path/file doesn't screw things up +use + +//Test with empty path +use + +//Test without preceding space +use + +//Test with other strange character that is allowed +use>>>>> + +//Test that filenames with spaces work +use + +//Test with empty file +use + +//Test with empty path and file +use + +module test1() +{ + test2(); + // test3() and test4() are not directly included and thus not imported into + // this scope + translate([4,0,0]) test3(); + translate([4,-2,0]) test4(); + translate([-2,0,0]) test5(); + translate([-2,-2,0]) test6(); + + // test2_variable won't be visible + translate([0,-2,0]) sphere(test2_variable, $fn=16); +} + +test1(); diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cdcc0c0..13d3b37 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -547,7 +547,9 @@ file(GLOB FEATURES_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/*.scad) # Remove included files not to be used as tests list(REMOVE_ITEM FEATURES_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/features/include\ test6.scad - ${CMAKE_SOURCE_DIR}/../testdata/scad/features/include-test5.scad) + ${CMAKE_SOURCE_DIR}/../testdata/scad/features/include-test5.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/features/use\ test6.scad + ${CMAKE_SOURCE_DIR}/../testdata/scad/features/use-test5.scad) file(GLOB BUGS_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/bugs/*.scad) file(GLOB SCAD_DXF_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/dxf/*.scad) file(GLOB FUNCTION_FILES ${CMAKE_SOURCE_DIR}/../testdata/scad/functions/*.scad) -- cgit v0.10.1 From ef7ab1c27513fde693038dc7163836954a018df4 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 3 Jan 2012 20:35:14 +0100 Subject: Small clarification of Don's Windows parser crash fix diff --git a/src/parser.y b/src/parser.y index 958ef89..3dd933c 100644 --- a/src/parser.y +++ b/src/parser.y @@ -588,17 +588,15 @@ AbstractModule *parse(const char *text, const char *path, int debug) if (!module) return NULL; - std::vector to_erase; - - BOOST_FOREACH(Module::ModuleContainer::value_type &m, module->usedlibs) { - module->usedlibs[m.first] = Module::compile_library(m.first); - if (!module->usedlibs[m.first]) { - PRINTF("WARNING: Failed to compile library `%s'.", m.first.c_str()); - to_erase.push_back( m.first ); - } - } - BOOST_FOREACH( std::string s, to_erase ) { - module->usedlibs.erase( s ); + // Iterating manually since we want to modify the container while iterating + Module::ModuleContainer::iterator iter = module->usedlibs.begin(); + while (iter != module->usedlibs.end()) { + Module::ModuleContainer::iterator curr = iter++; + curr->second = Module::compile_library(curr->first); + if (!curr->second) { + PRINTF("WARNING: Failed to compile library `%s'.", curr->first.c_str()); + module->usedlibs.erase(curr); + } } parser_error_pos = -1; -- cgit v0.10.1 From 9f16204889c8e42785bf82d6a5db74c80e0027b6 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 3 Jan 2012 20:47:09 +0100 Subject: Added expected files for use-tests diff --git a/tests/regression/cgalpngtest/use-tests-expected.png b/tests/regression/cgalpngtest/use-tests-expected.png new file mode 100644 index 0000000..21747cc Binary files /dev/null and b/tests/regression/cgalpngtest/use-tests-expected.png differ diff --git a/tests/regression/dumptest/use-tests-expected.txt b/tests/regression/dumptest/use-tests-expected.txt new file mode 100644 index 0000000..7ba3ac5 --- /dev/null +++ b/tests/regression/dumptest/use-tests-expected.txt @@ -0,0 +1,34 @@ + group() { + group() { + multmatrix([[1, 0, 0, 2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + cylinder($fn = 0, $fa = 12, $fs = 2, h = 1, r1 = 0.7, r2 = 0.2, center = true); + } + } + multmatrix([[1, 0, 0, 2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + cylinder($fn = 10, $fa = 12, $fs = 2, h = 1, r1 = 0.5, r2 = 0.5, center = true); + } + } + cube(size = [1, 1, 1], center = true); + } + multmatrix([[1, 0, 0, 4], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]); + multmatrix([[1, 0, 0, 4], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]); + multmatrix([[1, 0, 0, -2], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + sphere($fn = 8, $fa = 12, $fs = 2, r = 0.5); + } + } + multmatrix([[1, 0, 0, -2], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { + group() { + difference() { + cube(size = [1, 1, 1], center = true); + cylinder($fn = 0, $fa = 12, $fs = 2, h = 2, r1 = 0.4, r2 = 0.4, center = true); + } + } + } + multmatrix([[1, 0, 0, 0], [0, 1, 0, -2], [0, 0, 1, 0], [0, 0, 0, 1]]) { + sphere($fn = 16, $fa = 12, $fs = 2, r = 1); + } + } + diff --git a/tests/regression/opencsgtest/use-tests-expected.png b/tests/regression/opencsgtest/use-tests-expected.png new file mode 100644 index 0000000..8a85ad5 Binary files /dev/null and b/tests/regression/opencsgtest/use-tests-expected.png differ diff --git a/tests/regression/throwntogethertest/use-tests-expected.png b/tests/regression/throwntogethertest/use-tests-expected.png new file mode 100644 index 0000000..e5bf382 Binary files /dev/null and b/tests/regression/throwntogethertest/use-tests-expected.png differ -- cgit v0.10.1 From 47c51d128acba10248e4ebd674cc99e147f68088 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Tue, 3 Jan 2012 21:55:44 +0100 Subject: Based on a patch from Xyne, this should be a slightly less verbose way of safely calculating normals. Note that CGAL does have a unit_normal() function, but since the Gmpq kernel doesn't support sqrt(), this cannot be used. diff --git a/src/export.cc b/src/export.cc index 5ce2d15..5ac3ac0 100644 --- a/src/export.cc +++ b/src/export.cc @@ -83,32 +83,24 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDial stream.str(""); stream << x3 << " " << y3 << " " << z3; std::string vs3 = stream.str(); + CGAL_Polyhedron::Traits::Vector_3 normal(1,0,0); if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) { - // The above condition ensures that vs1-vs2, vs1-vs3, and their cross - // product are non-zero. Floating point arithmetic may however truncate - // small values to 0. This can be avoided by first scaling the components - // of vs1-vs2 and vs1-vs3. This has no effect on the resulting unit - // normal vector. - double dn[6] = { x1-x2, y1-y2, z1-z2, x1-x3, y1-y3, z1-z3 }; - double maxdn = 0; - int i; - for (i = 0; i < 6; ++i) { - double dx = dn[i]; - if (dx < 0) dx = -dx; - if (dx > maxdn) maxdn = dx; - } - for (i = 0; i < 6; ++i) dn[i] /= maxdn; - double nx = dn[1]*dn[5] - dn[2]*dn[4]; - double ny = dn[2]*dn[3] - dn[0]*dn[5]; - double nz = dn[0]*dn[4] - dn[1]*dn[3]; - double nlength = sqrt(nx*nx + ny*ny + nz*nz); - // Avoid generating normals for polygons with zero area - double eps = 0.000001; - if (nlength < eps) nlength = 1.0; + // The above condition ensures that there are 3 distinct vertices, but + // they may be collinear. If they are, the unit normal is meaningless + // so the default value of "1 0 0" can be used. If the vertices are not + // collinear then the unit normal must be calculated from the + // components. + if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) { + // Pseudocode: CGAL kernel must be set up to enable unit_normal and + // Vector type must be declared as Vector_3. + // http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_unit_normal.html + normal = CGAL::normal(v1.point(),v2.point(),v3.point()); + normal = normal / sqrt(CGAL::to_double(normal.squared_length())); + } output << " facet normal " - << nx / nlength << " " - << ny / nlength << " " - << nz / nlength << "\n"; + << CGAL::to_double(normal.x()) << " " + << CGAL::to_double(normal.y()) << " " + << CGAL::to_double(normal.z()) << "\n"; output << " outer loop\n"; output << " vertex " << vs1 << "\n"; output << " vertex " << vs2 << "\n"; -- cgit v0.10.1 From c0ccad02162dc87b95c341a5f1b39468c1efbee9 Mon Sep 17 00:00:00 2001 From: don bright Date: Tue, 3 Jan 2012 23:05:02 +0000 Subject: adding flags for NetBSD build diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index cdbba3d..9cd725b 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -157,6 +157,8 @@ if (NOT EIGEN2_INCLUDE_DIR) endif() if (${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") set(EIGEN2_FIND_PATHS /usr/local/include/eigen2) + elseif (${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") + set(EIGEN2_FIND_PATHS /usr/pkg/include/eigen2) else() set(EIGEN2_FIND_PATHS /opt/local/include/eigen2 /usr/include/eigen2) endif() @@ -220,7 +222,7 @@ if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD") endif() if(${CMAKE_SYSTEM_NAME} MATCHES "NetBSD") - include_directories(/usr/pkg/include) + include_directories( /usr/pkg/include /usr/X11R7/include ) set(FLEX_EXECUTABLE /usr/pkg/bin/flex) endif() diff --git a/tests/FindGLEW.cmake b/tests/FindGLEW.cmake index fa3071f..7b6d8c6 100644 --- a/tests/FindGLEW.cmake +++ b/tests/FindGLEW.cmake @@ -33,13 +33,13 @@ ELSE (WIN32) message(STATUS "GLEW_DIR: " ${GLEW_DIR}) FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h HINTS ${GLEW_DIR}/include - PATHS /usr/include /usr/local/include + PATHS /usr/include /usr/local/include /usr/pkg/include NO_DEFAULT_PATH DOC "The directory where GL/glew.h resides") FIND_LIBRARY( GLEW_LIBRARY NAMES GLEW glew HINTS ${GLEW_DIR}/lib - PATHS /usr/lib /usr/local/lib + PATHS /usr/lib /usr/local/lib /usr/pkg/lib NO_DEFAULT_PATH DOC "The GLEW library") ENDIF (WIN32) -- cgit v0.10.1 From f5b1e37f2d4a080826a55d2b783f17c1389f6805 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Wed, 4 Jan 2012 00:41:52 -0600 Subject: do not need 'installation prefix' for tests diff --git a/tests/CMingw-cross-env.cmake b/tests/CMingw-cross-env.cmake index 364326a..09ec1d1 100644 --- a/tests/CMingw-cross-env.cmake +++ b/tests/CMingw-cross-env.cmake @@ -78,10 +78,8 @@ set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_C_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-gcc) set(CMAKE_CXX_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-g++) -set(CMAKE_RC_COMPILER ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-windres) -set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) set(QT_QMAKE_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-qmake) -set(CMAKE_INSTALL_PREFIX ${MINGW_CROSS_ENV_DIR}/usr/i686-pc-mingw32 CACHE PATH "Installation Prefix") +set(PKG_CONFIG_EXECUTABLE ${MINGW_CROSS_ENV_DIR}/usr/bin/i686-pc-mingw32-pkg-config) set(CMAKE_BUILD_TYPE RelWithDebInfo) # -- cgit v0.10.1 From 101fa843c9c8fea666e3b9275c3a6a1af5954655 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Tue, 3 Jan 2012 22:43:39 -0600 Subject: make default font monospace per bug rep by brad pitcher diff --git a/src/Preferences.cc b/src/Preferences.cc index 1f52311..c3d1918 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -1,3 +1,5 @@ +#include +using namespace std; /* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and @@ -47,8 +49,8 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) // Setup default settings this->defaultmap["3dview/colorscheme"] = this->colorSchemeChooser->currentItem()->text(); - this->defaultmap["editor/fontfamily"] = this->fontChooser->currentText(); - this->defaultmap["editor/fontsize"] = this->fontSize->currentText().toUInt(); + this->defaultmap["editor/fontfamily"] = "Mono"; + this->defaultmap["editor/fontsize"] = 12; this->defaultmap["advanced/opencsg_show_warning"] = true; this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; @@ -212,7 +214,7 @@ void Preferences::updateGUI() if (!found.isEmpty()) this->colorSchemeChooser->setCurrentItem(found.first()); QString fontfamily = getValue("editor/fontfamily").toString(); - int fidx = this->fontChooser->findText(fontfamily); + int fidx = this->fontChooser->findText(fontfamily,Qt::MatchContains); if (fidx >= 0) { this->fontChooser->setCurrentIndex(fidx); } diff --git a/src/mainwin.cc b/src/mainwin.cc index f9029d0..2c52eeb 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -178,7 +178,6 @@ MainWindow::MainWindow(const QString &filename) editor->setTabStopWidth(30); #endif editor->setLineWrapping(true); // Not designable - setFont("", 12); // Init default font this->glview->statusLabel = new QLabel(this); statusBar()->addWidget(this->glview->statusLabel); -- cgit v0.10.1 From f5a42696d22db9e42d9b3e8ffbd287dc42d71a86 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Tue, 3 Jan 2012 23:06:27 -0600 Subject: added likely names of monospace fonts for mac, linux, and win diff --git a/src/Preferences.cc b/src/Preferences.cc index c3d1918..6a540b6 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -49,8 +49,14 @@ Preferences::Preferences(QWidget *parent) : QMainWindow(parent) // Setup default settings this->defaultmap["3dview/colorscheme"] = this->colorSchemeChooser->currentItem()->text(); +#ifdef Q_WS_X11 this->defaultmap["editor/fontfamily"] = "Mono"; - this->defaultmap["editor/fontsize"] = 12; +#elif defined (Q_WS_WIN) + this->defaultmap["editor/fontfamily"] = "Console"; +#elif defined (Q_WS_MAC) + this->defaultmap["editor/fontfamily"] = "Monaco"; +#endif + this->defaultmap["editor/fontsize"] = 12; this->defaultmap["advanced/opencsg_show_warning"] = true; this->defaultmap["advanced/enable_opencsg_opengl1x"] = true; -- cgit v0.10.1 From cc147f9612e176f111737c5936e4acc46bb0be81 Mon Sep 17 00:00:00 2001 From: Don Bright Date: Tue, 3 Jan 2012 23:31:20 -0600 Subject: remove debug code diff --git a/src/Preferences.cc b/src/Preferences.cc index 6a540b6..4c43f2d 100644 --- a/src/Preferences.cc +++ b/src/Preferences.cc @@ -1,5 +1,3 @@ -#include -using namespace std; /* * OpenSCAD (www.openscad.org) * Copyright (C) 2009-2011 Clifford Wolf and -- cgit v0.10.1 From 761eb4f8af8a8b311d4551e3a8988e3ddaded87d Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 4 Jan 2012 18:40:33 +0100 Subject: Another unit normal update from Xyne: Defer conversion to double until we've performed the division diff --git a/src/export.cc b/src/export.cc index 5ac3ac0..8abd5fa 100644 --- a/src/export.cc +++ b/src/export.cc @@ -83,7 +83,6 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDial stream.str(""); stream << x3 << " " << y3 << " " << z3; std::string vs3 = stream.str(); - CGAL_Polyhedron::Traits::Vector_3 normal(1,0,0); if (vs1 != vs2 && vs1 != vs3 && vs2 != vs3) { // The above condition ensures that there are 3 distinct vertices, but // they may be collinear. If they are, the unit normal is meaningless @@ -91,16 +90,16 @@ void export_stl(CGAL_Nef_polyhedron *root_N, std::ostream &output, QProgressDial // collinear then the unit normal must be calculated from the // components. if (!CGAL::collinear(v1.point(),v2.point(),v3.point())) { - // Pseudocode: CGAL kernel must be set up to enable unit_normal and - // Vector type must be declared as Vector_3. - // http://www.cgal.org/Manual/latest/doc_html/cgal_manual/Kernel_23_ref/Function_unit_normal.html - normal = CGAL::normal(v1.point(),v2.point(),v3.point()); - normal = normal / sqrt(CGAL::to_double(normal.squared_length())); - } - output << " facet normal " - << CGAL::to_double(normal.x()) << " " - << CGAL::to_double(normal.y()) << " " - << CGAL::to_double(normal.z()) << "\n"; + CGAL_Polyhedron::Traits::Vector_3 normal = CGAL::normal(v1.point(),v2.point(),v3.point()); + output << " facet normal " + << CGAL::sign(normal.x()) * sqrt(CGAL::to_double(normal.x()*normal.x()/normal.squared_length())) + << " " + << CGAL::sign(normal.y()) * sqrt(CGAL::to_double(normal.y()*normal.y()/normal.squared_length())) + << " " + << CGAL::sign(normal.z()) * sqrt(CGAL::to_double(normal.z()*normal.z()/normal.squared_length())) + << "\n"; + } + else output << " facet normal 1 0 0\n"; output << " outer loop\n"; output << " vertex " << vs1 << "\n"; output << " vertex " << vs2 << "\n"; -- cgit v0.10.1 From 7337f86c96451f92235abe528119ab4116786ee7 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 4 Jan 2012 18:40:58 +0100 Subject: minor fix: version and vendor output was mixed up in the info string diff --git a/src/glview.cc b/src/glview.cc index 141d998..63573e3 100644 --- a/src/glview.cc +++ b/src/glview.cc @@ -154,9 +154,9 @@ void GLView::initializeGL() "Extensions:\n" "%s\n", glewGetString(GLEW_VERSION), + glGetString(GL_VERSION), glGetString(GL_RENDERER), glGetString(GL_VENDOR), - glGetString(GL_VERSION), rbits, gbits, bbits, abits, dbits, sbits, glGetString(GL_EXTENSIONS)); // FIXME: glGetString(GL_EXTENSIONS) is deprecated in OpenGL 3.0. -- cgit v0.10.1 From ba8aa515d14cf270c9d0fdf50b4c7c55b3c416a8 Mon Sep 17 00:00:00 2001 From: Marius Kintel Date: Wed, 4 Jan 2012 19:03:33 +0100 Subject: Disabled the old include syntax; i.e. without the include keyword diff --git a/RELEASE_NOTES b/RELEASE_NOTES index a954c45..295f6f4 100644 --- a/RELEASE_NOTES +++ b/RELEASE_NOTES @@ -1,3 +1,10 @@ +OpenSCAD 2012.XX +================ + +Deprecations: +o The old include syntax "" without the include keyword is no + longer supported and will cause a syntax error. + OpenSCAD 2011.12 ================ diff --git a/src/lexer.l b/src/lexer.l index c799028..07819b2 100644 --- a/src/lexer.l +++ b/src/lexer.l @@ -114,27 +114,6 @@ use[ \t\r\n>]*"<"[^\t\r\n>]+">" { return TOK_USE; } -"<"[^ \t\r\n>]+">" { - char *filename = strdup(yytext+1); - filename[strlen(filename)-1] = 0; - QFileInfo finfo(QDir(parser_source_path), filename); - if (!finfo.exists()) { - finfo = QFileInfo(QDir(librarydir), filename); - } - - PRINTF("DEPRECATED: Support for implicit include will be removed in future releases. Use `include ' instead."); - handle_dep(finfo.absoluteFilePath().toStdString()); - yyin = fopen(finfo.absoluteFilePath().toLocal8Bit(), "r"); - if (!yyin) { - PRINTF("WARNING: Can't open input file `%s'.", filename); - } else { - openfiles.append(yyin); - yypush_buffer_state(yy_create_buffer( yyin, YY_BUF_SIZE )); - BEGIN(INITIAL); - } - free(filename); -} - <> { if(!path_stack.empty()) path_stack.pop(); -- cgit v0.10.1