aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthieu Volat <mazhe@alkumuna.eu>2024-09-04 20:57:15 +0000
committerDiane Bruce <db@FreeBSD.org>2024-09-04 20:57:15 +0000
commita065119e038f865b97b1191dad95aef6c4482b8b (patch)
tree8a81bee9c0816f050efc09a33ade8ee427ac224a
parent1fd5642761dab0f0b26aba2e76d288aa8b06456e (diff)
downloadports-a065119e038f865b97b1191dad95aef6c4482b8b.tar.gz
ports-a065119e038f865b97b1191dad95aef6c4482b8b.zip
cad/cura-engine: upgrade to 5.7.0
- redo build system for our system - prepare for cura 5.7.0
-rw-r--r--cad/cura-engine/Makefile51
-rw-r--r--cad/cura-engine/distinfo16
-rw-r--r--cad/cura-engine/files/CMakeLists.txt419
-rw-r--r--cad/cura-engine/files/CPackConfig.cmake20
-rw-r--r--cad/cura-engine/files/FindGMock.cmake515
-rw-r--r--cad/cura-engine/files/FindPolyclipping.cmake67
-rw-r--r--cad/cura-engine/files/FindStb.cmake69
-rw-r--r--cad/cura-engine/files/patch-CMakeLists.txt19
-rw-r--r--cad/cura-engine/files/patch-src_layerPart.cpp8
-rw-r--r--cad/cura-engine/files/patch-src_support.cpp8
10 files changed, 1136 insertions, 56 deletions
diff --git a/cad/cura-engine/Makefile b/cad/cura-engine/Makefile
index b311474f45db..04dba316b484 100644
--- a/cad/cura-engine/Makefile
+++ b/cad/cura-engine/Makefile
@@ -1,6 +1,5 @@
PORTNAME= CuraEngine
-DISTVERSION= 4.13.1
-PORTREVISION= 2
+PORTVERSION= 5.7.0
PORTEPOCH= 1
CATEGORIES= cad
DIST_SUBDIR= Ultimaker
@@ -11,28 +10,48 @@ WWW= http://wiki.ultimaker.com/Cura
LICENSE= AGPLv3
-DEPRECATED= Depends on expired net/libarcus
-EXPIRATION_DATE=2024-07-31
+BUILD_DEPENDS= ${LOCALBASE}/include/boost/uuid/uuid.hpp:devel/boost-libs \
+ ${LOCALBASE}/include/fmt/format.h:devel/libfmt \
+ ${LOCALBASE}/include/range/v3/range.hpp:devel/range-v3 \
+ ${LOCALBASE}/include/rapidjson/rapidjson.h:devel/rapidjson
+LIB_DEPENDS= libArcus.so:net/libarcus \
+ libpolyclipping.so:graphics/polyclipping \
+ libprotobuf.so:devel/protobuf \
+ libspdlog.so:devel/spdlog
-LIB_DEPENDS= libArcus.so:net/libarcus \
- libprotobuf.so:devel/protobuf
+USES= compiler:c++20-lang cmake pkgconfig
-USES= compiler:c++11-lang cmake
-
-STB_TAG= d5d052c
+STB_TAG= beebb24
+SCRIPTA_TAG= c378c83
+GEOMETRYHPP_TAG=3b1a10e
+WAGYU_TAG= 0.5.0
USE_GITHUB= yes
GH_ACCOUNT= Ultimaker
GH_PROJECT= CuraEngine
-GH_TUPLE= nothings:stb:${STB_TAG}:stb/include/stb
-
-CMAKE_ARGS+= -DStb_FOUND:BOOL=ON \
- -DStb_INCLUDE_DIRS=${WRKSRC}/include
+GH_TUPLE= mapbox:geometry.hpp:${GEOMETRYHPP_TAG}:geometryhpp \
+ mapbox:wagyu:${WAGYU_TAG}:wagyu \
+ nothings:stb:${STB_TAG}:stb/include/stb \
+ Ultimaker:Scripta_public:${SCRIPTA_TAG}:Scripta_public
-# disable OpenMP as it does not work (at least) on CURRENT.
-# OpenMP support is planned to be replaced with native thread.
-# see files/patch-CMakeLists.txt
+CMAKE_ARGS+= -DUSE_SYSTEM_LIBS:BOOL=ON \
+ -DStb_FOUND:BOOL=ON \
+ -DStb_INCLUDE_DIRS=${WRKSRC}/include/stb
+LDFLAGS+= -L${LOCALBASE}/lib
+WITH_DEBUGINFO= 1 # Will segfault if Release
PLIST_FILES= bin/CuraEngine
+post-extract:
+ @${MKDIR} ${WRKSRC}/cmake
+ @for f in FindGMock.cmake FindPolyclipping.cmake FindStb.cmake; do \
+ ${CP} ${FILESDIR}/$$f ${WRKSRC}/cmake; \
+ done
+ @for f in CMakeLists.txt CPackConfig.cmake; do \
+ ${CP} ${FILESDIR}/$$f ${WRKSRC}; \
+ done
+ @${MV} ${WRKDIR}/Scripta_public-${SCRIPTA_TAG}/include/scripta ${WRKSRC}/include
+ @${MV} ${WRKDIR}/geometry.hpp-${GEOMETRYHPP_TAG}/include/mapbox ${WRKSRC}/include
+ @${MV} ${WRKDIR}/wagyu-${WAGYU_TAG}/include/mapbox/geometry/wagyu ${WRKSRC}/include/mapbox/geometry
+
.include <bsd.port.mk>
diff --git a/cad/cura-engine/distinfo b/cad/cura-engine/distinfo
index 4c534022b2b3..10a1cc975f51 100644
--- a/cad/cura-engine/distinfo
+++ b/cad/cura-engine/distinfo
@@ -1,5 +1,11 @@
-TIMESTAMP = 1645697559
-SHA256 (Ultimaker/Ultimaker-CuraEngine-4.13.1_GH0.tar.gz) = 283f62326c6072cdcef9d9b84cb8141a6072747f08e1cae6534d08ad85b1c657
-SIZE (Ultimaker/Ultimaker-CuraEngine-4.13.1_GH0.tar.gz) = 1727935
-SHA256 (Ultimaker/nothings-stb-d5d052c_GH0.tar.gz) = ce1a6424b43287166a962827d83d98cedcd9d515e69052b17d8a7896f9fb7517
-SIZE (Ultimaker/nothings-stb-d5d052c_GH0.tar.gz) = 1358441
+TIMESTAMP = 1713896563
+SHA256 (Ultimaker/Ultimaker-CuraEngine-5.7.0_GH0.tar.gz) = b0f3ccd1e1813354fdc1ced7bed322033cc846cd07454547328bdb4cb313b00b
+SIZE (Ultimaker/Ultimaker-CuraEngine-5.7.0_GH0.tar.gz) = 1780860
+SHA256 (Ultimaker/mapbox-geometry.hpp-3b1a10e_GH0.tar.gz) = 5af2b21a10c18a364f5a7e7a077655514f2708ea5537f592e1edfb3f25f508ee
+SIZE (Ultimaker/mapbox-geometry.hpp-3b1a10e_GH0.tar.gz) = 19518
+SHA256 (Ultimaker/mapbox-wagyu-0.5.0_GH0.tar.gz) = 88c41eaba03107ebe79052fdbd66e419e903d331a2616a51849018e13648ab83
+SIZE (Ultimaker/mapbox-wagyu-0.5.0_GH0.tar.gz) = 822342
+SHA256 (Ultimaker/nothings-stb-beebb24_GH0.tar.gz) = f617df64be72137bfc680675a3e0bb9532bc89dbb1facca551885efa6d5f449e
+SIZE (Ultimaker/nothings-stb-beebb24_GH0.tar.gz) = 1506973
+SHA256 (Ultimaker/Ultimaker-Scripta_public-c378c83_GH0.tar.gz) = 1c21e1fefd661dd93445d0cfcfb9eaac89c10bd855b7914830c6c8b1a9b17287
+SIZE (Ultimaker/Ultimaker-Scripta_public-c378c83_GH0.tar.gz) = 16918
diff --git a/cad/cura-engine/files/CMakeLists.txt b/cad/cura-engine/files/CMakeLists.txt
new file mode 100644
index 000000000000..73e0ec08a4e9
--- /dev/null
+++ b/cad/cura-engine/files/CMakeLists.txt
@@ -0,0 +1,419 @@
+#Copyright (c) 2020 Ultimaker B.V.
+#CuraEngine is released under the terms of the AGPLv3 or higher.
+
+cmake_minimum_required(VERSION 3.8.0)
+
+project(CuraEngine)
+
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
+option(ENABLE_ARCUS "Enable support for ARCUS" ON)
+
+if (MSVC)
+ option(MSVC_STATIC_RUNTIME "Link the MSVC runtime statically" OFF)
+endif()
+
+if(ENABLE_ARCUS)
+ message(STATUS "Building with Arcus")
+ # We want to have access to protobuf_generate_cpp and other FindProtobuf features.
+ # However, if ProtobufConfig is used instead, there is a CMake option that controls
+ # this, which defaults to OFF. We need to force this option to ON instead.
+ set(protobuf_MODULE_COMPATIBLE ON CACHE INTERNAL "" FORCE)
+ find_package(Protobuf 3.0.0 REQUIRED)
+ find_package(Arcus REQUIRED)
+ add_definitions(-DARCUS)
+ find_program(PROTOC "protoc")
+ if(${PROTOC} STREQUAL "PROTOC-NOTFOUND")
+ message(FATAL_ERROR "Protobuf compiler missing")
+ endif()
+endif()
+
+#For reading image files.
+find_package(Stb REQUIRED)
+include_directories(${Stb_INCLUDE_DIRS})
+
+option(USE_SYSTEM_LIBS "Use the system libraries if available" OFF)
+if(USE_SYSTEM_LIBS)
+ find_package(RapidJSON CONFIG REQUIRED)
+ find_package(Polyclipping REQUIRED)
+endif()
+
+# convert build type to upper case letters
+if(CMAKE_BUILD_TYPE)
+ string(TOUPPER ${CMAKE_BUILD_TYPE} CMAKE_BUILD_TYPE_UPPER)
+endif()
+
+if(CMAKE_BUILD_TYPE_UPPER MATCHES "DEBUG")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_DEBUG_INIT}")
+else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${CMAKE_CXX_FLAGS_RELEASE_INIT}")
+endif()
+
+set(CMAKE_CXX_STANDARD 20)
+
+if(APPLE AND CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
+endif()
+
+OPTION(SET_RPATH ON)
+
+if(SET_RPATH)
+ if(NOT DEFINED LIB_SUFFIX)
+ set(LIB_SUFFIX "")
+ endif()
+ set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}")
+endif()
+
+set(CURA_ENGINE_VERSION "master" CACHE STRING "Version name of Cura")
+
+option(BUILD_TESTS OFF)
+
+# Add a compiler flag to check the output for insane values if we are in debug mode.
+if(CMAKE_BUILD_TYPE_UPPER MATCHES "DEBUG" OR CMAKE_BUILD_TYPE_UPPER MATCHES "RELWITHDEBINFO")
+ message(STATUS "Building debug release of CuraEngine.")
+ if (NOT MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wextra -O0 -g -fno-omit-frame-pointer")
+ endif()
+ add_definitions(-DASSERT_INSANE_OUTPUT)
+ add_definitions(-DUSE_CPU_TIME)
+ add_definitions(-DDEBUG)
+endif()
+
+if (MSVC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive- /Zc:twoPhase- /EHsc /W3")
+ if (MSVC_STATIC_RUNTIME)
+ foreach(flag_var
+ CMAKE_CXX_FLAGS
+ CMAKE_CXX_FLAGS_DEBUG
+ CMAKE_CXX_FLAGS_RELEASE
+ CMAKE_CXX_FLAGS_MINSIZEREL
+ CMAKE_CXX_FLAGS_RELWITHDEBINFO
+ )
+ if(${flag_var} MATCHES "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif()
+ endforeach()
+ endif()
+else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall") # Add warnings
+endif()
+
+option (ENABLE_MORE_COMPILER_OPTIMIZATION_FLAGS
+ "Enable more optimization flags" ON)
+if (ENABLE_MORE_COMPILER_OPTIMIZATION_FLAGS AND NOT (CMAKE_BUILD_TYPE_UPPER MATCHES "DEBUG"))
+ message (STATUS "Compile with more optimization flags")
+ if (MSVC)
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /fp:fast")
+ else()
+ set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -Ofast -funroll-loops")
+ endif()
+endif ()
+
+#if(NOT APPLE AND NOT WIN32)
+# set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++")
+#endif()
+
+if (WIN32)
+ add_definitions(-DNOMINMAX)
+endif()
+
+add_definitions(-DSPDLOG_FMT_EXTERNAL)
+
+option (ENABLE_OPENMP
+ "Use OpenMP for parallel code" ON)
+
+if (ENABLE_OPENMP)
+ FIND_PACKAGE( OpenMP )
+ if( OPENMP_FOUND )
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
+ endif()
+endif()
+
+if(USE_SYSTEM_LIBS)
+ include_directories(${Polyclipping_INCLUDE_DIRS} "${CMAKE_BINARY_DIR}" ${RAPIDJSON_INCLUDE_DIRS} include)
+else()
+ include_directories("${CMAKE_CURRENT_BINARY_DIR}" libs libs/clipper include)
+ add_library(clipper STATIC libs/clipper/clipper.cpp)
+endif()
+
+set(engine_SRCS # Except main.cpp.
+ src/Application.cpp
+ src/ConicalOverhang.cpp
+ src/ExtruderPlan.cpp
+ src/ExtruderTrain.cpp
+ src/FffGcodeWriter.cpp
+ src/FffPolygonGenerator.cpp
+ src/FffProcessor.cpp
+ src/GCodePathConfig.cpp
+ src/InsetOrderOptimizer.cpp
+ src/InterlockingGenerator.cpp
+ src/LayerPlan.cpp
+ src/LayerPlanBuffer.cpp
+ src/MeshGroup.cpp
+ src/Mold.cpp
+ src/PathOrderPath.cpp
+ src/Preheat.cpp
+ src/PrimeTower.cpp
+ src/Scene.cpp
+ src/SkeletalTrapezoidation.cpp
+ src/SkeletalTrapezoidationGraph.cpp
+ src/SkirtBrim.cpp
+ src/Slice.cpp
+ src/SupportInfillPart.cpp
+ src/TopSurface.cpp
+ src/TreeModelVolumes.cpp
+ src/TreeSupport.cpp
+ src/TreeSupportTipGenerator.cpp
+ src/WallToolPaths.cpp
+ src/WallsComputation.cpp
+ src/bridge.cpp
+ src/gcodeExport.cpp
+ src/infill.cpp
+ src/layerPart.cpp
+ src/main.cpp
+ src/mesh.cpp
+ src/multiVolumes.cpp
+ src/raft.cpp
+ src/skin.cpp
+ src/sliceDataStorage.cpp
+ src/slicer.cpp
+ src/support.cpp
+ src/timeEstimate.cpp
+
+ src/BeadingStrategy/BeadingStrategy.cpp
+ src/BeadingStrategy/BeadingStrategyFactory.cpp
+ src/BeadingStrategy/DistributedBeadingStrategy.cpp
+ src/BeadingStrategy/LimitedBeadingStrategy.cpp
+ src/BeadingStrategy/OuterWallInsetBeadingStrategy.cpp
+ src/BeadingStrategy/RedistributeBeadingStrategy.cpp
+ src/BeadingStrategy/WideningBeadingStrategy.cpp
+
+ src/communication/ArcusCommunication.cpp
+ src/communication/ArcusCommunicationPrivate.cpp
+ src/communication/CommandLine.cpp
+ src/communication/Listener.cpp
+
+ src/infill/GyroidInfill.cpp
+ src/infill/ImageBasedDensityProvider.cpp
+ src/infill/LightningDistanceField.cpp
+ src/infill/LightningGenerator.cpp
+ src/infill/LightningLayer.cpp
+ src/infill/LightningTreeNode.cpp
+ src/infill/NoZigZagConnectorProcessor.cpp
+ src/infill/SierpinskiFill.cpp
+ src/infill/SierpinskiFillProvider.cpp
+ src/infill/SubDivCube.cpp
+ src/infill/ZigzagConnectorProcessor.cpp
+
+ src/pathPlanning/Comb.cpp
+ src/pathPlanning/GCodePath.cpp
+ src/pathPlanning/LinePolygonsCrossings.cpp
+ src/pathPlanning/NozzleTempInsert.cpp
+ src/pathPlanning/SpeedDerivatives.cpp
+
+ src/progress/Progress.cpp
+ src/progress/ProgressStageEstimator.cpp
+
+ src/settings/AdaptiveLayerHeights.cpp
+ src/settings/FlowTempGraph.cpp
+ src/settings/MeshPathConfigs.cpp
+ src/settings/PathConfigStorage.cpp
+ src/settings/Settings.cpp
+ src/settings/ZSeamConfig.cpp
+
+ src/utils/AABB.cpp
+ src/utils/AABB3D.cpp
+ src/utils/Date.cpp
+ src/utils/ExtrusionJunction.cpp
+ src/utils/ExtrusionLine.cpp
+ src/utils/ExtrusionSegment.cpp
+ src/utils/LinearAlg2D.cpp
+ src/utils/ListPolyIt.cpp
+ src/utils/Matrix4x3D.cpp
+ src/utils/MinimumSpanningTree.cpp
+ src/utils/Point3LL.cpp
+ src/utils/PolygonConnector.cpp
+ src/utils/PolygonsPointIndex.cpp
+ src/utils/PolygonsSegmentIndex.cpp
+ src/utils/PolylineStitcher.cpp
+ src/utils/SVG.cpp
+ src/utils/Simplify.cpp
+ src/utils/SquareGrid.cpp
+ src/utils/ThreadPool.cpp
+ src/utils/ToolpathVisualizer.cpp
+ src/utils/VoronoiUtils.cpp
+ src/utils/VoxelUtils.cpp
+ src/utils/channel.cpp
+ src/utils/gettime.cpp
+ src/utils/polygon.cpp
+ src/utils/polygonUtils.cpp
+)
+
+# List of tests. For each test there must be a file tests/${NAME}.cpp.
+set(engine_TEST
+ GCodeExportTest
+ InfillTest
+ LayerPlanTest
+ MergeInfillLinesTest
+ PathOrderMonotonicTest
+ TimeEstimateCalculatorTest
+)
+set(engine_TEST_INTEGRATION
+ SlicePhaseTest
+)
+set(engine_TEST_SETTINGS
+ SettingsTest
+)
+if (ENABLE_ARCUS)
+ set(engine_TEST_ARCUS
+ ArcusCommunicationTest
+ ArcusCommunicationPrivateTest
+ )
+endif ()
+set(engine_TEST_UTILS
+ AABBTest
+ AABB3DTest
+ IntPointTest
+ LinearAlg2DTest
+ MinimumSpanningTreeTest
+ PolygonConnectorTest
+ PolygonTest
+ PolygonUtilsTest
+ SparseGridTest
+ StringTest
+ UnionFindTest
+)
+
+# Helper classes for some tests.
+set(engine_TEST_ARCUS_HELPERS
+ tests/arcus/MockSocket.cpp
+)
+set(engine_TEST_HELPERS
+ tests/ReadTestPolygons.cpp
+)
+
+# Generating ProtoBuf protocol
+if (ENABLE_ARCUS)
+ protobuf_generate_cpp(engine_PB_SRCS engine_PB_HEADERS Cura.proto)
+endif ()
+
+# Compiling CuraEngine itself.
+add_library(_CuraEngine STATIC ${engine_SRCS} ${engine_PB_SRCS}) #First compile all of CuraEngine as library, allowing this to be re-used for tests.
+
+if (CuraEngine_Download_Stb)
+ add_dependencies(_CuraEngine stb)
+endif()
+if(USE_SYSTEM_LIBS)
+ target_link_libraries(_CuraEngine ${Polyclipping_LIBRARIES})
+else()
+ target_link_libraries(_CuraEngine clipper)
+endif()
+
+if (ENABLE_ARCUS)
+ target_link_libraries(_CuraEngine Arcus)
+endif ()
+
+target_link_libraries(_CuraEngine fmt absl_log_internal_message absl_log_internal_check_op)
+
+set_target_properties(_CuraEngine PROPERTIES COMPILE_DEFINITIONS "VERSION=\"${CURA_ENGINE_VERSION}\"")
+
+if(WIN32)
+ message(STATUS "Using windres")
+ set(RES_FILES "CuraEngine.rc")
+ ENABLE_LANGUAGE(RC)
+ if(NOT MSVC)
+ SET(CMAKE_RC_COMPILER_INIT windres)
+ SET(CMAKE_RC_COMPILE_OBJECT
+ "<CMAKE_RC_COMPILER> <FLAGS> -O coff <DEFINES> -i <SOURCE> -o <OBJECT>"
+ )
+ endif()
+endif(WIN32)
+
+if (UNIX)
+ target_link_libraries(_CuraEngine pthread)
+endif()
+
+if (NOT WIN32)
+ add_executable(CuraEngine src/main.cpp) # Then compile main.cpp as separate executable, and link the library to it.
+else()
+ add_executable(CuraEngine src/main.cpp ${RES_FILES}) # ..., but don't forget the glitter!
+endif(NOT WIN32)
+
+target_link_libraries(CuraEngine _CuraEngine)
+set_target_properties(CuraEngine PROPERTIES COMPILE_DEFINITIONS "VERSION=\"${CURA_ENGINE_VERSION}\"")
+
+# Compiling the test environment.
+if (BUILD_TESTS)
+ include(CTest)
+
+ message(STATUS "Building tests...")
+ set(GTEST_USE_STATIC_LIBS true)
+ set(GMOCK_ROOT "${CMAKE_CURRENT_BINARY_DIR}/gmock")
+ set(GMOCK_VER "1.8.0")
+ find_package(GMock REQUIRED)
+ include_directories(${GTEST_INCLUDE_DIRS})
+ include_directories(${GMOCK_INCLUDE_DIRS})
+ add_dependencies(_CuraEngine GTest::GTest GTest::Main GMock::GMock GMock::Main)
+ add_definitions(-DBUILD_TESTS)
+
+ target_compile_definitions(_CuraEngine PUBLIC BUILD_TESTS=1)
+
+ #To make sure that the tests are built before running them, add the building of these tests as an additional test.
+ add_custom_target(build_all_tests)
+ add_test(BuildTests "${CMAKE_COMMAND}" --build "${CMAKE_CURRENT_BINARY_DIR}" --target build_all_tests)
+
+ foreach (test ${engine_TEST})
+ add_executable(${test} tests/main.cpp ${engine_TEST_HELPERS} tests/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+ foreach (test ${engine_TEST_INFILL})
+ add_executable(${test} tests/main.cpp tests/infill/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+ foreach (test ${engine_TEST_INTEGRATION})
+ add_executable(${test} tests/main.cpp tests/integration/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+ foreach (test ${engine_TEST_SETTINGS})
+ add_executable(${test} tests/main.cpp tests/settings/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+ if (ENABLE_ARCUS)
+ foreach (test ${engine_TEST_ARCUS})
+ add_executable(${test} tests/main.cpp ${engine_TEST_ARCUS_HELPERS} tests/arcus/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+ endif ()
+ foreach (test ${engine_TEST_UTILS})
+ add_executable(${test} tests/main.cpp tests/utils/${test}.cpp)
+ target_link_libraries(${test} _CuraEngine ${GTEST_BOTH_LIBRARIES} ${GMOCK_BOTH_LIBRARIES})
+ add_test(NAME ${test} COMMAND "${test}" WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/tests/")
+ add_dependencies(build_all_tests ${test}) #Make sure that this gets built as part of the build_all_tests target.
+ endforeach()
+endif()
+
+# Installing CuraEngine.
+include(GNUInstallDirs)
+install(TARGETS CuraEngine DESTINATION "${CMAKE_INSTALL_BINDIR}")
+# For MinGW64 cross compiling on Debian, we create a ZIP package instead of a DEB
+# Because it's the Windows build system that should install the files.
+if (CMAKE_CROSSCOMPILING AND CMAKE_SYSTEM_NAME MATCHES "Windows")
+ message(STATUS "Include MinGW64 posix DLLs for installation.")
+ install(FILES
+ /usr/lib/gcc/x86_64-w64-mingw32/8.3-posix/libgcc_s_seh-1.dll
+ /usr/lib/gcc/x86_64-w64-mingw32/8.3-posix/libgomp-1.dll
+ /usr/lib/gcc/x86_64-w64-mingw32/8.3-posix/libstdc++-6.dll
+ DESTINATION bin
+ COMPONENT runtime)
+endif ()
+include(CPackConfig.cmake)
diff --git a/cad/cura-engine/files/CPackConfig.cmake b/cad/cura-engine/files/CPackConfig.cmake
new file mode 100644
index 000000000000..91c4b71d0562
--- /dev/null
+++ b/cad/cura-engine/files/CPackConfig.cmake
@@ -0,0 +1,20 @@
+set(CPACK_PACKAGE_VENDOR "Ultimaker")
+set(CPACK_PACKAGE_CONTACT "Arjen Hiemstra <a.hiemstra@ultimaker.com>")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Cura Engine")
+set(CPACK_PACKAGE_VERSION "15.05.90")
+set(CPACK_GENERATOR "DEB")
+if(NOT DEFINED CPACK_DEBIAN_PACKAGE_ARCHITECTURE)
+ execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CPACK_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
+endif()
+set(CPACK_PACKAGE_FILE_NAME "${CMAKE_PROJECT_NAME}-${CPACK_PACKAGE_VERSION}_${CPACK_DEBIAN_PACKAGE_ARCHITECTURE}")
+
+set(DEB_DEPENDS
+ "arcus (>= 15.05.90)"
+ "protobuf (>= 3.0.0)"
+ "libstdc++6 (>= 4.9.0)"
+ "libgcc1 (>= 4.9.0)"
+)
+string(REPLACE ";" ", " DEB_DEPENDS "${DEB_DEPENDS}")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS ${DEB_DEPENDS})
+
+include(CPack)
diff --git a/cad/cura-engine/files/FindGMock.cmake b/cad/cura-engine/files/FindGMock.cmake
new file mode 100644
index 000000000000..8d732424234a
--- /dev/null
+++ b/cad/cura-engine/files/FindGMock.cmake
@@ -0,0 +1,515 @@
+# Get the Google C++ Mocking Framework.
+# (This file is almost an copy of the original FindGTest.cmake file,
+# altered to download and compile GMock and GTest if not found
+# in GMOCK_ROOT or GTEST_ROOT respectively,
+# feel free to use it as it is or modify it for your own needs.)
+#
+# Defines the following variables:
+#
+# GMOCK_FOUND - Found or got the Google Mocking framework
+# GTEST_FOUND - Found or got the Google Testing framework
+# GMOCK_INCLUDE_DIRS - GMock include directory
+# GTEST_INCLUDE_DIRS - GTest include direcotry
+#
+# Also defines the library variables below as normal variables
+#
+# GMOCK_BOTH_LIBRARIES - Both libgmock & libgmock_main
+# GMOCK_LIBRARIES - libgmock
+# GMOCK_MAIN_LIBRARIES - libgmock-main
+#
+# GTEST_BOTH_LIBRARIES - Both libgtest & libgtest_main
+# GTEST_LIBRARIES - libgtest
+# GTEST_MAIN_LIBRARIES - libgtest_main
+#
+# Accepts the following variables as input:
+#
+# GMOCK_ROOT - The root directory of the gmock install prefix
+# GTEST_ROOT - The root directory of the gtest install prefix
+# GMOCK_SRC_DIR -The directory of the gmock sources
+# GMOCK_VER - The version of the gmock sources to be downloaded
+#
+#-----------------------
+# Example Usage:
+#
+# set(GMOCK_ROOT "~/gmock")
+# find_package(GMock REQUIRED)
+# include_directories(${GMOCK_INCLUDE_DIRS})
+#
+# add_executable(foo foo.cc)
+# target_link_libraries(foo ${GMOCK_BOTH_LIBRARIES})
+#
+#=============================================================================
+# Copyright (c) 2016 Michel Estermann
+# Copyright (c) 2016 Kamil Strzempowicz
+# Copyright (c) 2011 Matej Svec
+#
+# CMake - Cross Platform Makefile Generator
+# Copyright 2000-2016 Kitware, Inc.
+# Copyright 2000-2011 Insight Software Consortium
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+#
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# * Neither the names of Kitware, Inc., the Insight Software Consortium,
+# nor the names of their contributors may be used to endorse or promote
+# products derived from this software without specific prior written
+# permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# ------------------------------------------------------------------------------
+#
+# The above copyright and license notice applies to distributions of
+# CMake in source and binary form. Some source files contain additional
+# notices of original copyright by their contributors; see each source
+# for details. Third-party software packages supplied with CMake under
+# compatible licenses provide their own copyright notices documented in
+# corresponding subdirectories.
+#
+# ------------------------------------------------------------------------------
+#
+# CMake was initially developed by Kitware with the following sponsorship:
+#
+# * National Library of Medicine at the National Institutes of Health
+# as part of the Insight Segmentation and Registration Toolkit (ITK).
+#
+# * US National Labs (Los Alamos, Livermore, Sandia) ASC Parallel
+# Visualization Initiative.
+#
+# * National Alliance for Medical Image Computing (NAMIC) is funded by the
+# National Institutes of Health through the NIH Roadmap for Medical Research,
+# Grant U54 EB005149.
+#
+# * Kitware, Inc.
+#=============================================================================
+# Thanks to Daniel Blezek <blezek@gmail.com> for the GTEST_ADD_TESTS code
+
+function(gtest_add_tests executable extra_args)
+ if(NOT ARGN)
+ message(FATAL_ERROR "Missing ARGN: Read the documentation for GTEST_ADD_TESTS")
+ endif()
+ if(ARGN STREQUAL "AUTO")
+ # obtain sources used for building that executable
+ get_property(ARGN TARGET ${executable} PROPERTY SOURCES)
+ endif()
+ set(gtest_case_name_regex ".*\\( *([A-Za-z_0-9]+) *, *([A-Za-z_0-9]+) *\\).*")
+ set(gtest_test_type_regex "(TYPED_TEST|TEST_?[FP]?)")
+ foreach(source ${ARGN})
+ file(READ "${source}" contents)
+ string(REGEX MATCHALL "${gtest_test_type_regex} *\\(([A-Za-z_0-9 ,]+)\\)" found_tests ${contents})
+ foreach(hit ${found_tests})
+ string(REGEX MATCH "${gtest_test_type_regex}" test_type ${hit})
+
+ # Parameterized tests have a different signature for the filter
+ if("x${test_type}" STREQUAL "xTEST_P")
+ string(REGEX REPLACE ${gtest_case_name_regex} "*/\\1.\\2/*" test_name ${hit})
+ elseif("x${test_type}" STREQUAL "xTEST_F" OR "x${test_type}" STREQUAL "xTEST")
+ string(REGEX REPLACE ${gtest_case_name_regex} "\\1.\\2" test_name ${hit})
+ elseif("x${test_type}" STREQUAL "xTYPED_TEST")
+ string(REGEX REPLACE ${gtest_case_name_regex} "\\1/*.\\2" test_name ${hit})
+ else()
+ message(WARNING "Could not parse GTest ${hit} for adding to CTest.")
+ continue()
+ endif()
+ add_test(NAME ${test_name} COMMAND ${executable} --gtest_filter=${test_name} ${extra_args})
+ endforeach()
+ endforeach()
+endfunction()
+
+function(_append_debugs _endvar _library)
+ if(${_library} AND ${_library}_DEBUG)
+ set(_output optimized ${${_library}} debug ${${_library}_DEBUG})
+ else()
+ set(_output ${${_library}})
+ endif()
+ set(${_endvar} ${_output} PARENT_SCOPE)
+endfunction()
+
+function(_gmock_find_library _name)
+ find_library(${_name}
+ NAMES ${ARGN}
+ HINTS
+ ENV GMOCK_ROOT
+ ${GMOCK_ROOT}
+ PATH_SUFFIXES ${_gmock_libpath_suffixes}
+ )
+ mark_as_advanced(${_name})
+endfunction()
+
+function(_gtest_find_library _name)
+ find_library(${_name}
+ NAMES ${ARGN}
+ HINTS
+ ENV GTEST_ROOT
+ ${GTEST_ROOT}
+ PATH_SUFFIXES ${_gtest_libpath_suffixes}
+ )
+ mark_as_advanced(${_name})
+endfunction()
+
+if(NOT DEFINED GMOCK_MSVC_SEARCH)
+ set(GMOCK_MSVC_SEARCH MD)
+endif()
+
+set(_gmock_libpath_suffixes lib)
+set(_gtest_libpath_suffixes lib)
+if(MSVC)
+ if(GMOCK_MSVC_SEARCH STREQUAL "MD")
+ list(APPEND _gmock_libpath_suffixes
+ msvc/gmock-md/Debug
+ msvc/gmock-md/Release)
+ list(APPEND _gtest_libpath_suffixes
+ msvc/gtest-md/Debug
+ msvc/gtest-md/Release)
+ elseif(GMOCK_MSVC_SEARCH STREQUAL "MT")
+ list(APPEND _gmock_libpath_suffixes
+ msvc/gmock/Debug
+ msvc/gmock/Release)
+ list(APPEND _gtest_libpath_suffixes
+ msvc/gtest/Debug
+ msvc/gtest/Release)
+ endif()
+endif()
+
+find_path(GMOCK_INCLUDE_DIR gmock/gmock.h
+ HINTS
+ $ENV{GMOCK_ROOT}/include
+ ${GMOCK_ROOT}/include
+ )
+mark_as_advanced(GMOCK_INCLUDE_DIR)
+
+find_path(GTEST_INCLUDE_DIR gtest/gtest.h
+ HINTS
+ $ENV{GTEST_ROOT}/include
+ ${GTEST_ROOT}/include
+ )
+mark_as_advanced(GTEST_INCLUDE_DIR)
+
+if(MSVC AND GMOCK_MSVC_SEARCH STREQUAL "MD")
+ # The provided /MD project files for Google Mock add -md suffixes to the
+ # library names.
+ _gmock_find_library(GMOCK_LIBRARY gmock-md gmock)
+ _gmock_find_library(GMOCK_LIBRARY_DEBUG gmock-mdd gmockd)
+ _gmock_find_library(GMOCK_MAIN_LIBRARY gmock_main-md gmock_main)
+ _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_main-mdd gmock_maind)
+
+ _gtest_find_library(GTEST_LIBRARY gtest-md gtest)
+ _gtest_find_library(GTEST_LIBRARY_DEBUG gtest-mdd gtestd)
+ _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main-md gtest_main)
+ _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_main-mdd gtest_maind)
+else()
+ _gmock_find_library(GMOCK_LIBRARY gmock)
+ _gmock_find_library(GMOCK_LIBRARY_DEBUG gmockd)
+ _gmock_find_library(GMOCK_MAIN_LIBRARY gmock_main)
+ _gmock_find_library(GMOCK_MAIN_LIBRARY_DEBUG gmock_maind)
+
+ _gtest_find_library(GTEST_LIBRARY gtest)
+ _gtest_find_library(GTEST_LIBRARY_DEBUG gtestd)
+ _gtest_find_library(GTEST_MAIN_LIBRARY gtest_main)
+ _gtest_find_library(GTEST_MAIN_LIBRARY_DEBUG gtest_maind)
+endif()
+
+if(NOT TARGET GTest::GTest)
+ add_library(GTest::GTest UNKNOWN IMPORTED)
+endif()
+if(NOT TARGET GTest::Main)
+ add_library(GTest::Main UNKNOWN IMPORTED)
+endif()
+
+if(NOT TARGET GMock::GMock)
+ add_library(GMock::GMock UNKNOWN IMPORTED)
+endif()
+
+if(NOT TARGET GMock::Main)
+ add_library(GMock::Main UNKNOWN IMPORTED)
+endif()
+
+set(GMOCK_LIBRARY_EXISTS OFF)
+set(GTEST_LIBRARY_EXISTS OFF)
+
+if(EXISTS "${GMOCK_LIBRARY}" OR EXISTS "${GMOCK_LIBRARY_DEBUG}" AND GMOCK_INCLUDE_DIR)
+ set(GMOCK_LIBRARY_EXISTS ON)
+endif()
+
+if(EXISTS "${GTEST_LIBRARY}" OR EXISTS "${GTEST_LIBRARY_DEBUG}" AND GTEST_INCLUDE_DIR)
+ set(GTEST_LIBRARY_EXISTS ON)
+endif()
+
+if(NOT (${GMOCK_LIBRARY_EXISTS} AND ${GTEST_LIBRARY_EXISTS}))
+
+ include(ExternalProject)
+
+ if(GTEST_USE_STATIC_LIBS)
+ set(GTEST_CMAKE_ARGS -Dgtest_force_shared_crt:BOOL=ON -DBUILD_SHARED_LIBS=OFF)
+ if(BUILD_SHARED_LIBS)
+ list(APPEND GTEST_CMAKE_ARGS
+ -DCMAKE_POSITION_INDEPENDENT_CODE=ON
+ -Dgtest_hide_internal_symbols=ON
+ -DCMAKE_CXX_VISIBILITY_PRESET=hidden
+ -DCMAKE_VISIBILITY_INLINES_HIDDEN=ON
+ -DCMAKE_POLICY_DEFAULT_CMP0063=NEW
+ )
+ endif()
+ set(GTEST_LIBRARY_PREFIX ${CMAKE_STATIC_LIBRARY_PREFIX})
+ else()
+ set(GTEST_CMAKE_ARGS -DBUILD_SHARED_LIBS=ON)
+ set(GTEST_LIBRARY_PREFIX ${CMAKE_SHARED_LIBRARY_PREFIX})
+ endif()
+ if(WIN32)
+ list(APPEND GTEST_CMAKE_ARGS -Dgtest_disable_pthreads=ON)
+ endif()
+
+ if("${GMOCK_SRC_DIR}" STREQUAL "")
+ message(STATUS "Downloading GMock / GTest version ${GMOCK_VER} from git")
+ if("${GMOCK_VER}" STREQUAL "1.6.0" OR "${GMOCK_VER}" STREQUAL "1.7.0")
+ set(GTEST_BIN_DIR "${GMOCK_ROOT}/src/gtest-build")
+ set(GTEST_LIBRARY "${GTEST_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GTEST_MAIN_LIBRARY "${GTEST_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ mark_as_advanced(GTEST_LIBRARY)
+ mark_as_advanced(GTEST_MAIN_LIBRARY)
+
+ externalproject_add(
+ gtest
+ GIT_REPOSITORY "https://github.com/google/googletest.git"
+ GIT_TAG "release-${GMOCK_VER}"
+ PREFIX ${GMOCK_ROOT}
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD ON
+ LOG_CONFIGURE ON
+ LOG_BUILD ON
+ CMAKE_ARGS
+ ${GTEST_CMAKE_ARGS}
+ BINARY_DIR ${GTEST_BIN_DIR}
+ BUILD_BYPRODUCTS
+ "${GTEST_LIBRARY}"
+ "${GTEST_MAIN_LIBRARY}"
+ )
+
+ set(GMOCK_BIN_DIR "${GMOCK_ROOT}/src/gmock-build")
+ set(GMOCK_LIBRARY "${GMOCK_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GMOCK_MAIN_LIBRARY "${GMOCK_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ mark_as_advanced(GMOCK_LIBRARY)
+ mark_as_advanced(GMOCK_MAIN_LIBRARY)
+
+ externalproject_add(
+ gmock
+ GIT_REPOSITORY "https://github.com/google/googlemock.git"
+ GIT_TAG "release-${GMOCK_VER}"
+ PREFIX ${GMOCK_ROOT}
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD ON
+ LOG_CONFIGURE ON
+ LOG_BUILD ON
+ CMAKE_ARGS
+ ${GTEST_CMAKE_ARGS}
+ BINARY_DIR ${GMOCK_BIN_DIR}
+ BUILD_BYPRODUCTS
+ "${GMOCK_LIBRARY}"
+ "${GMOCK_MAIN_LIBRARY}"
+ )
+
+ add_dependencies(gmock gtest)
+
+ add_dependencies(GTest::GTest gtest)
+ add_dependencies(GTest::Main gtest)
+ add_dependencies(GMock::GMock gmock)
+ add_dependencies(GMock::Main gmock)
+
+ externalproject_get_property(gtest source_dir)
+ set(GTEST_INCLUDE_DIR "${source_dir}/include")
+ mark_as_advanced(GTEST_INCLUDE_DIR)
+ externalproject_get_property(gmock source_dir)
+ set(GMOCK_INCLUDE_DIR "${source_dir}/include")
+ mark_as_advanced(GMOCK_INCLUDE_DIR)
+ else() #1.8.0
+ set(GMOCK_BIN_DIR "${GMOCK_ROOT}/src/gmock-build")
+ set(GTEST_LIBRARY "${GMOCK_BIN_DIR}/googlemock/gtest/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GTEST_MAIN_LIBRARY "${GMOCK_BIN_DIR}/googlemock/gtest/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GMOCK_LIBRARY "${GMOCK_BIN_DIR}/googlemock/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GMOCK_MAIN_LIBRARY "${GMOCK_BIN_DIR}/googlemock/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ mark_as_advanced(GTEST_LIBRARY)
+ mark_as_advanced(GTEST_MAIN_LIBRARY)
+ mark_as_advanced(GMOCK_LIBRARY)
+ mark_as_advanced(GMOCK_MAIN_LIBRARY)
+
+ externalproject_add(
+ gmock
+ GIT_REPOSITORY "https://github.com/google/googletest.git"
+ GIT_TAG "release-${GMOCK_VER}"
+ PREFIX ${GMOCK_ROOT}
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD ON
+ LOG_CONFIGURE ON
+ LOG_BUILD ON
+ CMAKE_ARGS
+ ${GTEST_CMAKE_ARGS}
+ BINARY_DIR "${GMOCK_BIN_DIR}"
+ BUILD_BYPRODUCTS
+ "${GTEST_LIBRARY}"
+ "${GTEST_MAIN_LIBRARY}"
+ "${GMOCK_LIBRARY}"
+ "${GMOCK_MAIN_LIBRARY}"
+ )
+
+ add_dependencies(GTest::GTest gmock)
+ add_dependencies(GTest::Main gmock)
+ add_dependencies(GMock::GMock gmock)
+ add_dependencies(GMock::Main gmock)
+
+ externalproject_get_property(gmock source_dir)
+ set(GTEST_INCLUDE_DIR "${source_dir}/googletest/include")
+ set(GMOCK_INCLUDE_DIR "${source_dir}/googlemock/include")
+ mark_as_advanced(GMOCK_INCLUDE_DIR)
+ mark_as_advanced(GTEST_INCLUDE_DIR)
+ endif()
+
+ # Prevent CMake from complaining about these directories missing when the libgtest/libgmock targets get used as dependencies
+ file(MAKE_DIRECTORY ${GTEST_INCLUDE_DIR} ${GMOCK_INCLUDE_DIR})
+ else()
+ message(STATUS "Building Gmock / Gtest from dir ${GMOCK_SRC_DIR}")
+
+ set(GMOCK_BIN_DIR "${GMOCK_ROOT}/src/gmock-build")
+ set(GTEST_LIBRARY "${GMOCK_BIN_DIR}/gtest/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GTEST_MAIN_LIBRARY "${GMOCK_BIN_DIR}/gtest/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gtest_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GMOCK_LIBRARY "${GMOCK_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ set(GMOCK_MAIN_LIBRARY "${GMOCK_BIN_DIR}/${CMAKE_CFG_INTDIR}/${GTEST_LIBRARY_PREFIX}gmock_main${CMAKE_STATIC_LIBRARY_SUFFIX}")
+ mark_as_advanced(GTEST_LIBRARY)
+ mark_as_advanced(GTEST_MAIN_LIBRARY)
+ mark_as_advanced(GMOCK_LIBRARY)
+ mark_as_advanced(GMOCK_MAIN_LIBRARY)
+
+ if(EXISTS "${GMOCK_SRC_DIR}/gtest/include/gtest/gtest.h")
+ set(GTEST_INCLUDE_DIR "${GMOCK_SRC_DIR}/gtest/include")
+ mark_as_advanced(GTEST_INCLUDE_DIR)
+ endif()
+ if(EXISTS "${GMOCK_SRC_DIR}/include/gmock/gmock.h")
+ set(GMOCK_INCLUDE_DIR "${GMOCK_SRC_DIR}/include")
+ mark_as_advanced(GMOCK_INCLUDE_DIR)
+ elseif(EXISTS "${GMOCK_SRC_DIR}/../../include/gmock/gmock.h")
+ set(GMOCK_INCLUDE_DIR "${GMOCK_SRC_DIR}/../../include")
+ if(IS_ABSOLUTE "${GMOCK_INCLUDE_DIR}")
+ get_filename_component(GMOCK_INCLUDE_DIR "${GMOCK_INCLUDE_DIR}" ABSOLUTE)
+ endif()
+ mark_as_advanced(GMOCK_INCLUDE_DIR)
+ endif()
+
+ externalproject_add(
+ gmock
+ SOURCE_DIR ${GMOCK_SRC_DIR}
+ PREFIX ${GMOCK_ROOT}
+ INSTALL_COMMAND ""
+ LOG_DOWNLOAD ON
+ LOG_CONFIGURE ON
+ LOG_BUILD ON
+ CMAKE_ARGS
+ ${GTEST_CMAKE_ARGS}
+ BINARY_DIR "${GMOCK_BIN_DIR}"
+ BUILD_BYPRODUCTS
+ "${GTEST_LIBRARY}"
+ "${GTEST_MAIN_LIBRARY}"
+ "${GMOCK_LIBRARY}"
+ "${GMOCK_MAIN_LIBRARY}"
+ )
+
+ add_dependencies(GTest::GTest gmock)
+ add_dependencies(GTest::Main gmock)
+ add_dependencies(GMock::GMock gmock)
+ add_dependencies(GMock::Main gmock)
+ endif()
+endif()
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(GTest DEFAULT_MSG GTEST_LIBRARY GTEST_INCLUDE_DIR GTEST_MAIN_LIBRARY)
+find_package_handle_standard_args(GMock DEFAULT_MSG GMOCK_LIBRARY GMOCK_INCLUDE_DIR GMOCK_MAIN_LIBRARY)
+
+include(CMakeFindDependencyMacro)
+find_dependency(Threads)
+
+set_target_properties(GTest::GTest PROPERTIES
+ INTERFACE_LINK_LIBRARIES "Threads::Threads"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GTEST_LIBRARY}"
+ )
+
+if(GTEST_INCLUDE_DIR)
+ set_target_properties(GTest::GTest PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}"
+ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}"
+ )
+endif()
+
+set_target_properties(GTest::Main PROPERTIES
+ INTERFACE_LINK_LIBRARIES "GTest::GTest"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GTEST_MAIN_LIBRARY}")
+
+set_target_properties(GMock::GMock PROPERTIES
+ INTERFACE_LINK_LIBRARIES "Threads::Threads"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GMOCK_LIBRARY}")
+
+if(GMOCK_INCLUDE_DIR)
+ set_target_properties(GMock::GMock PROPERTIES
+ INTERFACE_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIR}"
+ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${GMOCK_INCLUDE_DIR}"
+ )
+ if(GMOCK_VER VERSION_LESS "1.7")
+ # GMock 1.6 still has GTest as an external link-time dependency,
+ # so just specify it on the link interface.
+ set_property(TARGET GMock::GMock APPEND PROPERTY
+ INTERFACE_LINK_LIBRARIES GTest::GTest)
+ elseif(GTEST_INCLUDE_DIR)
+ # GMock 1.7 and beyond doesn't have it as a link-time dependency anymore,
+ # so merge it's compile-time interface (include dirs) with ours.
+ set_property(TARGET GMock::GMock APPEND PROPERTY
+ INTERFACE_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
+ set_property(TARGET GMock::GMock APPEND PROPERTY
+ INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${GTEST_INCLUDE_DIR}")
+ endif()
+endif()
+
+set_target_properties(GMock::Main PROPERTIES
+ INTERFACE_LINK_LIBRARIES "GMock::GMock"
+ IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
+ IMPORTED_LOCATION "${GMOCK_MAIN_LIBRARY}")
+
+if(GTEST_FOUND)
+ set(GTEST_INCLUDE_DIRS ${GTEST_INCLUDE_DIR})
+ set(GTEST_LIBRARIES GTest::GTest)
+ set(GTEST_MAIN_LIBRARIES GTest::Main)
+ set(GTEST_BOTH_LIBRARIES ${GTEST_LIBRARIES} ${GTEST_MAIN_LIBRARIES})
+ if(VERBOSE)
+ message(STATUS "GTest includes: ${GTEST_INCLUDE_DIRS}")
+ message(STATUS "GTest libs: ${GTEST_BOTH_LIBRARIES}")
+ endif()
+endif()
+
+if(GMOCK_FOUND)
+ set(GMOCK_INCLUDE_DIRS ${GMOCK_INCLUDE_DIR})
+ set(GMOCK_LIBRARIES GMock::GMock)
+ set(GMOCK_MAIN_LIBRARIES GMock::Main)
+ set(GMOCK_BOTH_LIBRARIES ${GMOCK_LIBRARIES} ${GMOCK_MAIN_LIBRARIES})
+ if(VERBOSE)
+ message(STATUS "GMock includes: ${GMOCK_INCLUDE_DIRS}")
+ message(STATUS "GMock libs: ${GMOCK_BOTH_LIBRARIES}")
+ endif()
+endif()
diff --git a/cad/cura-engine/files/FindPolyclipping.cmake b/cad/cura-engine/files/FindPolyclipping.cmake
new file mode 100644
index 000000000000..7c88ab630934
--- /dev/null
+++ b/cad/cura-engine/files/FindPolyclipping.cmake
@@ -0,0 +1,67 @@
+#
+# - Try to find the polyclipping library
+# this will define
+#
+# Polyclipping_FOUND - polyclipping was found
+# Polyclipping_INCLUDE_DIRS - the polyclipping include directory
+# Polyclipping_LIBRARIES - The libraries needed to use polyclipping
+# Polyclipping_VERSION - The polyclipping library version
+
+#=============================================================================
+# Copyright (c) 2017 Christophe Giboudeaux <christophe@krop.fr>
+#
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions
+# are met:
+#
+# 1. Redistributions of source code must retain the copyright
+# notice, this list of conditions and the following disclaimer.
+# 2. Redistributions in binary form must reproduce the copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+# 3. The name of the author may not be used to endorse or promote products
+# derived from this software without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#=============================================================================
+
+
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_Polyclipping QUIET polyclipping)
+
+find_path(Polyclipping_INCLUDE_DIRS
+ NAMES clipper.hpp
+ HINTS ${PC_Polyclipping_INCLUDE_DIRS}
+)
+
+find_library(Polyclipping_LIBRARIES
+ NAMES polyclipping
+ HINTS ${PC_Polyclipping_LIBRARY_DIRS}
+)
+
+if(EXISTS ${Polyclipping_INCLUDE_DIRS}/clipper.hpp)
+ file(READ ${Polyclipping_INCLUDE_DIRS}/clipper.hpp CLIPPER_H_CONTENT)
+ string(REGEX MATCH "#define CLIPPER_VERSION[ ]+\"[0-9]+.[0-9]+.[0-9]+\"" CLIPPER_H_VERSION_MATCH ${CLIPPER_H_CONTENT})
+ string(REGEX REPLACE "^.*CLIPPER_VERSION[ ]+\"([0-9]+.[0-9]+.[0-9]+).*$" "\\1" Polyclipping_VERSION "${CLIPPER_H_VERSION_MATCH}")
+endif()
+
+include(FindPackageHandleStandardArgs)
+
+find_package_handle_standard_args(Polyclipping
+ FOUND_VAR Polyclipping_FOUND
+ REQUIRED_VARS Polyclipping_LIBRARIES Polyclipping_INCLUDE_DIRS
+ VERSION_VAR Polyclipping_VERSION
+)
+
+mark_as_advanced(Polyclipping_LIBRARIES Polyclipping_INCLUDE_DIRS Polyclipping_VERSION)
+
diff --git a/cad/cura-engine/files/FindStb.cmake b/cad/cura-engine/files/FindStb.cmake
new file mode 100644
index 000000000000..b510d6b0ef35
--- /dev/null
+++ b/cad/cura-engine/files/FindStb.cmake
@@ -0,0 +1,69 @@
+## Finds the Stb utility library on your computer.
+#
+# If Stb is not found on your computer, this script also gives the option to
+# download the library and build it from source.
+#
+# This script exports the following parameters for use if you find the Stb
+# package:
+# - Stb_FOUND: Whether Stb has been found on your computer (or built from
+# source).
+# - Stb_INCLUDE_DIRS: The directory where the header files of Stb are located.
+
+#First try to find a PackageConfig for this library.
+find_package(PkgConfig QUIET)
+pkg_check_modules(PC_Stb QUIET Stb)
+
+find_path(Stb_INCLUDE_DIRS stb/stb_image_resize.h #Search for something that is a little less prone to false positives than just stb.h.
+ HINTS ${PC_Stb_INCLUDEDIR} ${PC_Stb_INCLUDE_DIRS}
+ PATHS "$ENV{PROGRAMFILES}" "$ENV{PROGRAMW6432}" "/usr/include"
+ PATH_SUFFIXES include/stb stb include
+)
+
+include(FindPackageHandleStandardArgs)
+set(_stb_find_required ${Stb_FIND_REQUIRED}) #Temporarily set to optional so that we don't get a message when it's not found but you want to build from source.
+set(_stb_find_quietly ${Stb_FIND_QUIETLY})
+set(Stb_FIND_REQUIRED FALSE)
+set(Stb_FIND_QUIETLY TRUE)
+find_package_handle_standard_args(Stb DEFAULT_MSG Stb_INCLUDE_DIRS)
+set(Stb_FIND_REQUIRED ${_stb_find_required})
+set(Stb_FIND_QUIETLY ${_stb_find_quietly})
+
+set(CuraEngine_Download_Stb FALSE)
+if(Stb_FOUND) #Found an existing installation.
+ if(NOT Stb_FIND_QUIETLY)
+ message(STATUS "Found Stb installation at: ${Stb_INCLUDE_DIRS}")
+ endif()
+else()
+ #Then optionally clone Stb ourselves.
+ option(BUILD_Stb "Build Stb from source." ON) #This is a lie actually, since Stb is header-only and doesn't need any building. We don't build the docs or tests.
+ if(BUILD_Stb)
+ if(NOT Stb_FIND_QUIETLY)
+ message(STATUS "Building Stb from source.")
+ endif()
+
+ include(ExternalProject)
+ # Stb's commits in early February seems to cause the engine to fail compilation on Mac.
+ ExternalProject_Add(stb
+ GIT_REPOSITORY "https://github.com/nothings/stb.git"
+ GIT_TAG d5d052c806eee2ca1f858cb58b2f062d9fa25b90
+ UPDATE_DISCONNECTED TRUE
+ CONFIGURE_COMMAND "" #We don't want to actually go and build/test/generate it. Just need to download the headers.
+ BUILD_COMMAND ""
+ INSTALL_COMMAND "" #Assume that the user doesn't want to install all dependencies on his system. We just need to get them for building the application.
+ )
+ set(CuraEngine_Download_Stb TRUE)
+ set(Stb_INCLUDE_DIRS "${CMAKE_CURRENT_BINARY_DIR}/stb-prefix/src")
+ set(Stb_FOUND TRUE)
+ if(NOT Stb_FIND_QUIETLY)
+ message(STATUS "Created Stb installation at: ${Stb_INCLUDE_DIRS}")
+ endif()
+ elseif(NOT Stb_FIND_QUIETLY) #Don't have an installation but don't want us to build it either? Screw you, then.
+ if(Stb_FIND_REQUIRED)
+ message(FATAL_ERROR "Could NOT find Stb.")
+ else()
+ message(WARNING "Could NOT find Stb.")
+ endif()
+ endif()
+endif()
+
+mark_as_advanced(Stb_INCLUDE_DIRS)
diff --git a/cad/cura-engine/files/patch-CMakeLists.txt b/cad/cura-engine/files/patch-CMakeLists.txt
deleted file mode 100644
index 0316bafae5b0..000000000000
--- a/cad/cura-engine/files/patch-CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
---- CMakeLists.txt.orig 2022-04-29 23:17:19 UTC
-+++ CMakeLists.txt
-@@ -117,16 +117,6 @@ if (WIN32)
- add_definitions(-DNOMINMAX)
- endif()
-
--option (ENABLE_OPENMP
-- "Use OpenMP for parallel code" ON)
--
--if (ENABLE_OPENMP)
-- FIND_PACKAGE( OpenMP )
-- if( OPENMP_FOUND )
-- set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}" )
-- endif()
--endif()
--
- if(USE_SYSTEM_LIBS)
- include_directories(${Polyclipping_INCLUDE_DIRS} "${CMAKE_BINARY_DIR}" ${RAPIDJSON_INCLUDE_DIRS})
- else()
diff --git a/cad/cura-engine/files/patch-src_layerPart.cpp b/cad/cura-engine/files/patch-src_layerPart.cpp
deleted file mode 100644
index e80ac0586afb..000000000000
--- a/cad/cura-engine/files/patch-src_layerPart.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
---- src/layerPart.cpp.orig 2020-03-17 23:31:49 UTC
-+++ src/layerPart.cpp
-@@ -1,3 +1,5 @@
-+#undef __GNUC__
-+#define __GNUC__ 9
- //Copyright (c) 2018 Ultimaker B.V.
- //CuraEngine is released under the terms of the AGPLv3 or higher.
-
diff --git a/cad/cura-engine/files/patch-src_support.cpp b/cad/cura-engine/files/patch-src_support.cpp
deleted file mode 100644
index 6f15baa3cc2e..000000000000
--- a/cad/cura-engine/files/patch-src_support.cpp
+++ /dev/null
@@ -1,8 +0,0 @@
---- src/support.cpp.orig 2022-01-24 15:11:50 UTC
-+++ src/support.cpp
-@@ -1,3 +1,5 @@
-+#undef __GNUC__
-+#define __GNUC__ 9
- //Copyright (c) 2021 Ultimaker B.V.
- //CuraEngine is released under the terms of the AGPLv3 or higher.
-