From 7ffc88ed6dff3656f31c066f5960b2c90323aaad Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Thu, 9 Mar 2023 11:44:08 -0500 Subject: [PATCH 01/21] update to 5.3.0 --- CMakeLists.txt | 418 +++++++++++++++++++++++++++++++++ CPackConfig.cmake | 20 ++ CuraEngine.spec | 35 ++- FindGMock.cmake | 515 +++++++++++++++++++++++++++++++++++++++++ FindPolyclipping.cmake | 67 ++++++ FindStb.cmake | 69 ++++++ sources | 2 +- 7 files changed, 1116 insertions(+), 10 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 CPackConfig.cmake create mode 100644 FindGMock.cmake create mode 100644 FindPolyclipping.cmake create mode 100644 FindStb.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..5993783 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,418 @@ +#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/bridge.cpp + src/ConicalOverhang.cpp + src/ExtruderTrain.cpp + src/FffGcodeWriter.cpp + src/FffPolygonGenerator.cpp + src/FffProcessor.cpp + src/gcodeExport.cpp + src/GCodePathConfig.cpp + src/infill.cpp + src/InsetOrderOptimizer.cpp + src/InterlockingGenerator.cpp + src/layerPart.cpp + src/LayerPlan.cpp + src/LayerPlanBuffer.cpp + src/mesh.cpp + src/MeshGroup.cpp + src/Mold.cpp + src/multiVolumes.cpp + src/PathOrderPath.cpp + src/Preheat.cpp + src/PrimeTower.cpp + src/raft.cpp + src/Scene.cpp + src/SkeletalTrapezoidation.cpp + src/SkeletalTrapezoidationGraph.cpp + src/skin.cpp + src/SkirtBrim.cpp + src/SupportInfillPart.cpp + src/Slice.cpp + src/sliceDataStorage.cpp + src/slicer.cpp + src/support.cpp + src/timeEstimate.cpp + src/TopSurface.cpp + src/TreeModelVolumes.cpp + src/TreeSupport.cpp + src/WallToolPaths.cpp + src/WallsComputation.cpp + src/Weaver.cpp + src/Wireframe2gcode.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/ImageBasedDensityProvider.cpp + src/infill/NoZigZagConnectorProcessor.cpp + src/infill/ZigzagConnectorProcessor.cpp + src/infill/LightningDistanceField.cpp + src/infill/LightningGenerator.cpp + src/infill/LightningLayer.cpp + src/infill/LightningTreeNode.cpp + src/infill/SierpinskiFill.cpp + src/infill/SierpinskiFillProvider.cpp + src/infill/SubDivCube.cpp + src/infill/GyroidInfill.cpp + + src/pathPlanning/Comb.cpp + src/pathPlanning/GCodePath.cpp + src/pathPlanning/LinePolygonsCrossings.cpp + src/pathPlanning/NozzleTempInsert.cpp + src/pathPlanning/TimeMaterialEstimates.cpp + + src/progress/Progress.cpp + src/progress/ProgressStageEstimator.cpp + + src/settings/AdaptiveLayerHeights.cpp + src/settings/FlowTempGraph.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/FMatrix4x3.cpp + src/utils/gettime.cpp + src/utils/LinearAlg2D.cpp + src/utils/ListPolyIt.cpp + src/utils/MinimumSpanningTree.cpp + src/utils/Point3.cpp + src/utils/PolygonConnector.cpp + src/utils/PolygonsPointIndex.cpp + src/utils/PolygonsSegmentIndex.cpp + src/utils/PolylineStitcher.cpp + src/utils/polygonUtils.cpp + src/utils/polygon.cpp + src/utils/ProximityPointLink.cpp + src/utils/Simplify.cpp + src/utils/SVG.cpp + src/utils/socket.cpp + src/utils/SquareGrid.cpp + src/utils/ThreadPool.cpp + src/utils/ToolpathVisualizer.cpp + src/utils/VoronoiUtils.cpp + src/utils/VoxelUtils.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) + +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 + " -O coff -i -o " + ) + 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/CPackConfig.cmake b/CPackConfig.cmake new file mode 100644 index 0000000..91c4b71 --- /dev/null +++ b/CPackConfig.cmake @@ -0,0 +1,20 @@ +set(CPACK_PACKAGE_VENDOR "Ultimaker") +set(CPACK_PACKAGE_CONTACT "Arjen Hiemstra ") +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/CuraEngine.spec b/CuraEngine.spec index aa9d79c..5b3ebac 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,30 +1,37 @@ Name: CuraEngine Epoch: 1 -Version: 4.13.1 -Release: 6%{?dist} +Version: 5.3.0 +Release: 1%{?dist} Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} Source0: %{url}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz +# Cmake bits taken from 4.13.1, before upstream went nuts with conan +Source2: FindGMock.cmake +Source3: FindPolyclipping.cmake +Source4: FindStb.cmake +Source5: CMakeLists.txt +Source6: CPackConfig.cmake + BuildRequires: gcc BuildRequires: gcc-c++ -BuildRequires: libarcus-devel == %{version} +BuildRequires: libarcus-devel >= 5.2.2 BuildRequires: polyclipping-devel >= 6.1.2 BuildRequires: protobuf-devel BuildRequires: rapidjson-devel BuildRequires: cmake BuildRequires: git-core +BuildRequires: range-v3-devel +BuildRequires: fmt-devel +BuildRequires: spdlog-devel # Header-only package; -static version is for tracking per guidelines # stb_image 2.28^20230129git5736b15-0.2 is the minimum EVR that fixes the null # pointer dereference reported in https://github.com/nothings/stb/issues/1452. BuildRequires: stb_image-static >= 2.28^20230129git5736b15-0.2 -Patch: %{name}-static-libstdcpp.patch -# Add an #include needed for GCC 13 -# This is a (very) partial backport of upstream commit de60e86. -Patch: 0001-Add-an-include-needed-for-GCC-13.patch +Patch0: %{name}-static-libstdcpp.patch # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval %if 0%{?fedora} >= 37 || 0%{?rhel} >= 10 @@ -42,13 +49,20 @@ This is just a console application for G-code generation. For a full graphical application look at cura with is the graphical frontend for %{name}. %prep -%autosetup -p1 -S git +%setup -q + +mkdir cmake +cp -a %{SOURCE2} %{SOURCE3} %{SOURCE4} cmake +rm -rf CMakeLists.txt +cp -a %{SOURCE5} %{SOURCE6} . + +%patch0 -p1 # bundled libraries rm -rf libs # The -DCURA_ENGINE_VERSION does not work, so we sed-change the default value -sed -i 's/"DEV"/"%{version}"/' src/settings/Settings.h +# sed -i 's/"DEV"/"%{version}"/' src/settings/Settings.h %build %cmake \ @@ -74,6 +88,9 @@ sed -i 's/"DEV"/"%{version}"/' src/settings/Settings.h %{_bindir}/%{name} %changelog +* Wed Mar 8 2023 Tom Callaway - 1:5.3.0-1 +- update to 5.3.0 + * Sat Feb 25 2023 Benjamin A. Beasley - 1:4.13.1-6 - Update minimum stb_image to fix a null deref. bug diff --git a/FindGMock.cmake b/FindGMock.cmake new file mode 100644 index 0000000..8d73242 --- /dev/null +++ b/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 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/FindPolyclipping.cmake b/FindPolyclipping.cmake new file mode 100644 index 0000000..7c88ab6 --- /dev/null +++ b/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 +# +# +# 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/FindStb.cmake b/FindStb.cmake new file mode 100644 index 0000000..b510d6b --- /dev/null +++ b/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/sources b/sources index 0c17d12..8b55e2c 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (CuraEngine-4.13.1.tar.gz) = 224379a40e26ae0026a3849d582353e49edf99520401e1fef56c9504638c68c62cfe394dab0eb40e4a447bfe0bfa506a880512e84fd6057a839b6384087c46d0 +SHA512 (CuraEngine-5.3.0.tar.gz) = 01c05e616fedf14b2ab36c89f3c0540705e79908a35488282f62b9f335fbe33bda0e151cf4d98580b0c01a40029662193471cb2bb86a0cb2671e6dcf46cbb253 From be63686ab3f1b241282e52db2d4f65db898e616f Mon Sep 17 00:00:00 2001 From: Tom Callaway Date: Thu, 9 Mar 2023 11:52:28 -0500 Subject: [PATCH 02/21] add BR: boost-devel --- CuraEngine.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/CuraEngine.spec b/CuraEngine.spec index 5b3ebac..d84d6eb 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -22,6 +22,7 @@ BuildRequires: protobuf-devel BuildRequires: rapidjson-devel BuildRequires: cmake BuildRequires: git-core +BuildRequires: boost-devel BuildRequires: range-v3-devel BuildRequires: fmt-devel BuildRequires: spdlog-devel From 8c233369593330baea7908892f9ac38caaea544d Mon Sep 17 00:00:00 2001 From: Vitaly Zaitsev Date: Wed, 28 Jun 2023 11:06:38 +0200 Subject: [PATCH 03/21] Rebuilt due to fmt 10 update. --- CuraEngine.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index d84d6eb..41b1a35 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,7 +1,7 @@ Name: CuraEngine Epoch: 1 Version: 5.3.0 -Release: 1%{?dist} +Release: 2%{?dist} Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} @@ -89,6 +89,9 @@ rm -rf libs %{_bindir}/%{name} %changelog +* Wed Jun 28 2023 Vitaly Zaitsev - 1:5.3.0-2 +- Rebuilt due to fmt 10 update. + * Wed Mar 8 2023 Tom Callaway - 1:5.3.0-1 - update to 5.3.0 From 8ab358bed4ae7b3acebb190e523cad75be88edb8 Mon Sep 17 00:00:00 2001 From: Mamoru TASAKA Date: Sun, 2 Jul 2023 00:17:58 +0900 Subject: [PATCH 04/21] Patch for fmtlib 10 --- CuraEngine-5.3.0-fmt10.patch | 33 +++++++++++++++++++++++++++++++++ CuraEngine.spec | 8 +++++++- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 CuraEngine-5.3.0-fmt10.patch diff --git a/CuraEngine-5.3.0-fmt10.patch b/CuraEngine-5.3.0-fmt10.patch new file mode 100644 index 0000000..d8147df --- /dev/null +++ b/CuraEngine-5.3.0-fmt10.patch @@ -0,0 +1,33 @@ +--- CuraEngine-5.3.0/src/FffGcodeWriter.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 ++++ CuraEngine-5.3.0/src/FffGcodeWriter.cpp 2023-07-02 00:01:20.042447483 +0900 +@@ -996,7 +996,7 @@ void FffGcodeWriter::processRaft(const S + + LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const + { +- spdlog::debug("GcodeWriter processing layer {} of {}", layer_nr, total_layers); ++ spdlog::debug("GcodeWriter processing layer {} of {}", static_cast(layer_nr), total_layers); + + const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; + coord_t layer_thickness = mesh_group_settings.get("layer_height"); +--- CuraEngine-5.3.0/src/LayerPlanBuffer.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 ++++ CuraEngine-5.3.0/src/LayerPlanBuffer.cpp 2023-07-02 00:03:16.060680917 +0900 +@@ -82,7 +82,7 @@ void LayerPlanBuffer::addConnectingTrave + + if (! new_layer_destination_state) + { +- spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", newest_layer->layer_nr); ++ spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", static_cast(newest_layer->layer_nr)); + return; + } + +--- CuraEngine-5.3.0/src/Weaver.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 ++++ CuraEngine-5.3.0/src/Weaver.cpp 2023-07-02 00:04:08.697786833 +0900 +@@ -55,7 +55,7 @@ void Weaver::weave(MeshGroup* meshgroup) + } + if (starting_layer_idx > 0) + { +- spdlog::warn("First {} layers are empty!", starting_layer_idx); ++ spdlog::warn("First {} layers are empty!", static_cast(starting_layer_idx)); + } + } + diff --git a/CuraEngine.spec b/CuraEngine.spec index 41b1a35..b7854dc 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -33,6 +33,8 @@ BuildRequires: spdlog-devel BuildRequires: stb_image-static >= 2.28^20230129git5736b15-0.2 Patch0: %{name}-static-libstdcpp.patch +# Patch for fmtlib 10 +Patch1: CuraEngine-5.3.0-fmt10.patch # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval %if 0%{?fedora} >= 37 || 0%{?rhel} >= 10 @@ -57,7 +59,8 @@ cp -a %{SOURCE2} %{SOURCE3} %{SOURCE4} cmake rm -rf CMakeLists.txt cp -a %{SOURCE5} %{SOURCE6} . -%patch0 -p1 +%patch -P0 -p1 +%patch -P1 -p1 # bundled libraries rm -rf libs @@ -89,6 +92,9 @@ rm -rf libs %{_bindir}/%{name} %changelog +* Sat Jul 1 2023 Mamoru TASAKA - 1:5.3.0-3 +- Patch for fmtlib 10 + * Wed Jun 28 2023 Vitaly Zaitsev - 1:5.3.0-2 - Rebuilt due to fmt 10 update. From 3b304a98bd7132fc26a53823aee4eb6859cf4557 Mon Sep 17 00:00:00 2001 From: Vitaly Zaitsev Date: Sat, 8 Jul 2023 20:25:01 +0200 Subject: [PATCH 05/21] Rebuilt due to spdlog 1.12 update. --- CuraEngine.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index b7854dc..441686d 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,7 +1,7 @@ Name: CuraEngine Epoch: 1 Version: 5.3.0 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} @@ -92,6 +92,9 @@ rm -rf libs %{_bindir}/%{name} %changelog +* Sat Jul 08 2023 Vitaly Zaitsev - 1:5.3.0-3 +- Rebuilt due to spdlog 1.12 update. + * Sat Jul 1 2023 Mamoru TASAKA - 1:5.3.0-3 - Patch for fmtlib 10 From 084a4ddba9c099d9bf65d1bd108caa6ff34302a7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jul 2023 11:04:13 +0000 Subject: [PATCH 06/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- CuraEngine.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index 441686d..78624bd 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,7 +1,7 @@ Name: CuraEngine Epoch: 1 Version: 5.3.0 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} @@ -92,6 +92,9 @@ rm -rf libs %{_bindir}/%{name} %changelog +* Wed Jul 19 2023 Fedora Release Engineering - 1:5.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + * Sat Jul 08 2023 Vitaly Zaitsev - 1:5.3.0-3 - Rebuilt due to spdlog 1.12 update. From dea253a8e80f369a4c730b0ff2c866a44a41b24b Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Wed, 25 Oct 2023 13:58:55 -0400 Subject: [PATCH 07/21] Ensure stb_image contains the latest CVE patches --- CuraEngine.spec | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index 78624bd..19db295 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,7 +1,7 @@ Name: CuraEngine Epoch: 1 Version: 5.3.0 -Release: 4%{?dist} +Release: 5%{?dist} Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} @@ -28,9 +28,19 @@ BuildRequires: fmt-devel BuildRequires: spdlog-devel # Header-only package; -static version is for tracking per guidelines -# stb_image 2.28^20230129git5736b15-0.2 is the minimum EVR that fixes the null -# pointer dereference reported in https://github.com/nothings/stb/issues/1452. -BuildRequires: stb_image-static >= 2.28^20230129git5736b15-0.2 +# Enforce the the minimum EVR to contain fixes for all of: +# CVE-2021-28021 +# CVE-2021-42715 +# CVE-2021-42716 +# CVE-2022-28041 +# CVE-2023-43898 +# CVE-2023-45661 +# CVE-2023-45662 +# CVE-2023-45663 +# CVE-2023-45664 +# CVE-2023-45666 +# CVE-2023-45667 +BuildRequires: stb_image-static >= 2.28^20231011gitbeebb24-12 Patch0: %{name}-static-libstdcpp.patch # Patch for fmtlib 10 @@ -92,6 +102,9 @@ rm -rf libs %{_bindir}/%{name} %changelog +* Wed Oct 25 2023 Benjamin A. Beasley - 1:5.3.0-5 +- Ensure stb_image contains the latest CVE patches + * Wed Jul 19 2023 Fedora Release Engineering - 1:5.3.0-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild From 5196404100e7dcd1d3177b1e491afa68ef19bb32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 5 Dec 2023 16:02:49 +0100 Subject: [PATCH 08/21] Convert to %autorelease and %autochangelog [skip changelog] --- CuraEngine.spec | 252 +----------------------------------------------- changelog | 249 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 251 insertions(+), 250 deletions(-) create mode 100644 changelog diff --git a/CuraEngine.spec b/CuraEngine.spec index 19db295..6c95738 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,7 +1,7 @@ Name: CuraEngine Epoch: 1 Version: 5.3.0 -Release: 5%{?dist} +Release: %autorelease Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPLv3+ URL: https://github.com/Ultimaker/%{name} @@ -102,252 +102,4 @@ rm -rf libs %{_bindir}/%{name} %changelog -* Wed Oct 25 2023 Benjamin A. Beasley - 1:5.3.0-5 -- Ensure stb_image contains the latest CVE patches - -* Wed Jul 19 2023 Fedora Release Engineering - 1:5.3.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild - -* Sat Jul 08 2023 Vitaly Zaitsev - 1:5.3.0-3 -- Rebuilt due to spdlog 1.12 update. - -* Sat Jul 1 2023 Mamoru TASAKA - 1:5.3.0-3 -- Patch for fmtlib 10 - -* Wed Jun 28 2023 Vitaly Zaitsev - 1:5.3.0-2 -- Rebuilt due to fmt 10 update. - -* Wed Mar 8 2023 Tom Callaway - 1:5.3.0-1 -- update to 5.3.0 - -* Sat Feb 25 2023 Benjamin A. Beasley - 1:4.13.1-6 -- Update minimum stb_image to fix a null deref. bug - -* Sun Jan 29 2023 Benjamin A. Beasley - 1:4.13.1-5 -- Add an #include needed for GCC 13 - -* Wed Jan 18 2023 Fedora Release Engineering - 1:4.13.1-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild - -* Wed Jul 20 2022 Fedora Release Engineering - 1:4.13.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Sat Apr 23 2022 Benjamin A. Beasley - 1:4.13.1-2 -- Security fix for CVE-2022-28041 - -* Tue Feb 01 2022 Gabriel Féron - 1:4.13.1-1 -- Update to 4.13.1 - -* Wed Jan 19 2022 Gabriel Féron - 1:4.13.0-1 -- Update to 4.13.0 - -* Wed Jan 19 2022 Fedora Release Engineering - 1:4.12.1-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Mon Dec 13 2021 Gabriel Féron - 1:4.12.1-4 -- Update to 4.12.1 - -* Sat Nov 06 2021 Adrian Reber - 1:4.11.0-4 -- Rebuilt for protobuf 3.19.0 - -* Mon Oct 25 2021 Adrian Reber - 1:4.11.0-3 -- Rebuilt for protobuf 3.18.1 - -* Sat Oct 23 2021 Benjamin A. Beasley - 1:4.11.0-2 -- Rebuild with updated stb_image to patch CVE-2021-28021, CVE-2021-42715, and - CVE-2021-42716 - -* Wed Sep 15 2021 Gabriel Féron - 1:4.11.0-1 -- Update to 4.11.0 - -* Mon Aug 23 2021 Benjamin A. Beasley - 1:4.10.0-2 -- Unbundle stb_image - -* Mon Aug 16 2021 Gabriel Féron - 1:4.10.0-1 -- Update to 4.10.0 - -* Wed Jul 21 2021 Fedora Release Engineering - 1:4.9.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Thu Jun 10 2021 Gabriel Féron - 1:4.9.1-1 -- Update to 4.9.1 - -* Mon Apr 26 2021 Gabriel Féron - 1:4.9.0-1 -- Update to 4.9.0 - -* Mon Jan 25 2021 Fedora Release Engineering - 1:4.8.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Wed Jan 13 14:30:13 CET 2021 Adrian Reber - 1:4.8.0-2 -- Rebuilt for protobuf 3.14 - -* Wed Dec 23 2020 Jan Pazdziora - 1:4.8.0-1 -- Update to 4.8.0 - -* Wed Sep 23 2020 Adrian Reber - 1:4.7.1-2 -- Rebuilt for protobuf 3.13 - -* Thu Sep 03 2020 Miro Hrončok - 1:4.7.1-1 -- Update to 4.7.1 - -* Mon Aug 31 2020 Gabriel Féron - 1:4.7.0-1 -- Update to 4.7.0 - -* Mon Jul 27 2020 Fedora Release Engineering - 1:4.6.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Sun Jun 14 2020 Adrian Reber - 1:4.6.1-2 -- Rebuilt for protobuf 3.12 - -* Tue May 5 2020 Gabriel Féron - 1:4.6.0-1 -- Update to 4.6.1 - -* Tue Apr 21 2020 Gabriel Féron - 1:4.6.0-1 -- Update to 4.6.0 - -* Tue Jan 28 2020 Fedora Release Engineering - 1:4.4.0-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Thu Dec 19 2019 Orion Poplawski - 1:4.4.0-2 -- Rebuild for protobuf 3.11 - -* Thu Nov 21 2019 Gabriel Féron - 1:4.4.0-1 -- Update to 4.4.0 - -* Wed Jul 24 2019 Fedora Release Engineering - 1:4.1.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Tue Jun 18 2019 Gabriel Féron - 1:4.1.0-1 -- Update to 4.1.0 - -* Wed Apr 03 2019 Gabriel Féron - 1:4.0.0-1 -- Update to 4.0.0 - -* Thu Jan 31 2019 Fedora Release Engineering - 1:3.6.0-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Sat Jan 26 2019 Gabriel Féron - 1:3.6.0-1 -- Update to 3.6.0 - -* Thu Nov 22 2018 Igor Gnatenko - 1:3.5.1-3 -- Rebuild for protobuf 3.6 - -* Wed Nov 21 2018 Igor Gnatenko - 1:3.5.1-2 -- Rebuild for protobuf 3.6 - -* Mon Nov 12 2018 Miro Hrončok - 1:3.5.1-1 -- Fix the error in epoch/release - -* Mon Nov 12 2018 Miro Hrončok - 0:3.5.1-2 -- Update to 3.5.1 (#1644323) - -* Tue Aug 28 2018 Miro Hrončok - 1:3.4.1-1 -- Update to 3.4.1 - -* Thu Jul 12 2018 Fedora Release Engineering - 1:3.3.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Wed May 02 2018 Miro Hrončok - 1:3.3.0-1 -- Updated to 3.3.0 -- Make sure Fedora CXXFLAGS are used, also -fPIC -- Use new USE_SYSTEM_LIBS option instead of patch+sed - -* Mon Mar 19 2018 Miro Hrončok - 1:3.2.1-1 -- Updated to 3.2.1 - -* Wed Feb 07 2018 Fedora Release Engineering - 1:3.1.0-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Sun Dec 10 2017 Miro Hrončok - 1:3.1.0-1 -- Updated to 3.1.0 - -* Wed Nov 29 2017 Igor Gnatenko - 1:3.0.3-3 -- Rebuild for protobuf 3.5 - -* Mon Nov 13 2017 Igor Gnatenko - 1:3.0.3-2 -- Rebuild for protobuf 3.4 - -* Mon Oct 23 2017 Miro Hrončok - 1:3.0.3-1 -- Updated to 3.0.3 - -* Wed Aug 30 2017 Miro Hrončok - 1:2.7.0-1 -- Update to 2.7.0 - -* Wed Aug 02 2017 Fedora Release Engineering - 1:2.6.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 1:2.6.1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Wed Jun 28 2017 Miro Hrončok - 1:2.6.1-1 -- Updated to 2.6.1 - -* Tue Jun 27 2017 Miro Hrončok - 1:2.6.0-1 -- Updated to 2.6.0 - -* Wed Jun 14 2017 Miro Hrončok - 1:2.5.0-2 -- Rebuilt for new protobuf 3.3.1 - -* Wed May 03 2017 Miro Hrončok - 1:2.5.0-1 -- Updated to 2.5.0 - -* Sun Dec 04 2016 Miro Hrončok - 1:2.3.1-1 -- New version scheme -> Introduce Epoch -- Updated -- SPEC rewritten - -* Sun Sep 18 2016 Miro Hrončok - 15.04-4 -- Rebuilt for new polyclipping (#1159525) - -* Wed Feb 03 2016 Fedora Release Engineering - 15.04-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Mon Jul 06 2015 Miro Hrončok - 15.04-2 -- Set the VERSION variable - -* Sun Jul 05 2015 Miro Hrončok - 15.04-1 -- Update to 15.04 - -* Tue Jun 16 2015 Fedora Release Engineering - 14.12.1-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Sat May 02 2015 Kalev Lember - 14.12.1-2 -- Rebuilt for GCC 5 C++11 ABI change - -* Mon Dec 29 2014 Miro Hrončok - 14.12.1-1 -- Update to 14.12.1 - -* Thu Oct 23 2014 Miro Hrončok - 14.03-3 -- Rebuilt for new polyclipping - -* Fri Aug 15 2014 Fedora Release Engineering - 14.03-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Mon Jun 23 2014 Miro Hrončok - 14.03-1 -- New version 14.03 - -* Fri Jun 06 2014 Fedora Release Engineering - 14.01-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sun Mar 09 2014 Miro Hrončok - 14.01-1 -- New version 14.01 -- polyclipping 6.1.x -- Now with make test -- Rebuilt against new polyclipping release - -* Sat Dec 14 2013 Miro Hrončok - 13.11.2-1 -- New version 13.11.2 -- Makefile seding changed to reflect changes -- Clipper usage no longer need patching - -* Fri Aug 02 2013 Fedora Release Engineering - 13.06.3-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Mon Jul 22 2013 Miro Hrončok - 13.06.3-3 -- Rebuilt for new polyclipping - -* Thu Jul 04 2013 Miro Hrončok - 13.06.3-2 -- Added some explaining comments - -* Sun Jun 23 2013 Miro Hrončok - 13.06.3-1 -- New package +%autochangelog diff --git a/changelog b/changelog new file mode 100644 index 0000000..d4d1fad --- /dev/null +++ b/changelog @@ -0,0 +1,249 @@ +* Wed Oct 25 2023 Benjamin A. Beasley - 1:5.3.0-5 +- Ensure stb_image contains the latest CVE patches + +* Wed Jul 19 2023 Fedora Release Engineering - 1:5.3.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild + +* Sat Jul 08 2023 Vitaly Zaitsev - 1:5.3.0-3 +- Rebuilt due to spdlog 1.12 update. + +* Sat Jul 1 2023 Mamoru TASAKA - 1:5.3.0-3 +- Patch for fmtlib 10 + +* Wed Jun 28 2023 Vitaly Zaitsev - 1:5.3.0-2 +- Rebuilt due to fmt 10 update. + +* Wed Mar 8 2023 Tom Callaway - 1:5.3.0-1 +- update to 5.3.0 + +* Sat Feb 25 2023 Benjamin A. Beasley - 1:4.13.1-6 +- Update minimum stb_image to fix a null deref. bug + +* Sun Jan 29 2023 Benjamin A. Beasley - 1:4.13.1-5 +- Add an #include needed for GCC 13 + +* Wed Jan 18 2023 Fedora Release Engineering - 1:4.13.1-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild + +* Wed Jul 20 2022 Fedora Release Engineering - 1:4.13.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Sat Apr 23 2022 Benjamin A. Beasley - 1:4.13.1-2 +- Security fix for CVE-2022-28041 + +* Tue Feb 01 2022 Gabriel Féron - 1:4.13.1-1 +- Update to 4.13.1 + +* Wed Jan 19 2022 Gabriel Féron - 1:4.13.0-1 +- Update to 4.13.0 + +* Wed Jan 19 2022 Fedora Release Engineering - 1:4.12.1-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Mon Dec 13 2021 Gabriel Féron - 1:4.12.1-4 +- Update to 4.12.1 + +* Sat Nov 06 2021 Adrian Reber - 1:4.11.0-4 +- Rebuilt for protobuf 3.19.0 + +* Mon Oct 25 2021 Adrian Reber - 1:4.11.0-3 +- Rebuilt for protobuf 3.18.1 + +* Sat Oct 23 2021 Benjamin A. Beasley - 1:4.11.0-2 +- Rebuild with updated stb_image to patch CVE-2021-28021, CVE-2021-42715, and + CVE-2021-42716 + +* Wed Sep 15 2021 Gabriel Féron - 1:4.11.0-1 +- Update to 4.11.0 + +* Mon Aug 23 2021 Benjamin A. Beasley - 1:4.10.0-2 +- Unbundle stb_image + +* Mon Aug 16 2021 Gabriel Féron - 1:4.10.0-1 +- Update to 4.10.0 + +* Wed Jul 21 2021 Fedora Release Engineering - 1:4.9.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Thu Jun 10 2021 Gabriel Féron - 1:4.9.1-1 +- Update to 4.9.1 + +* Mon Apr 26 2021 Gabriel Féron - 1:4.9.0-1 +- Update to 4.9.0 + +* Mon Jan 25 2021 Fedora Release Engineering - 1:4.8.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Wed Jan 13 14:30:13 CET 2021 Adrian Reber - 1:4.8.0-2 +- Rebuilt for protobuf 3.14 + +* Wed Dec 23 2020 Jan Pazdziora - 1:4.8.0-1 +- Update to 4.8.0 + +* Wed Sep 23 2020 Adrian Reber - 1:4.7.1-2 +- Rebuilt for protobuf 3.13 + +* Thu Sep 03 2020 Miro Hrončok - 1:4.7.1-1 +- Update to 4.7.1 + +* Mon Aug 31 2020 Gabriel Féron - 1:4.7.0-1 +- Update to 4.7.0 + +* Mon Jul 27 2020 Fedora Release Engineering - 1:4.6.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Sun Jun 14 2020 Adrian Reber - 1:4.6.1-2 +- Rebuilt for protobuf 3.12 + +* Tue May 5 2020 Gabriel Féron - 1:4.6.0-1 +- Update to 4.6.1 + +* Tue Apr 21 2020 Gabriel Féron - 1:4.6.0-1 +- Update to 4.6.0 + +* Tue Jan 28 2020 Fedora Release Engineering - 1:4.4.0-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Thu Dec 19 2019 Orion Poplawski - 1:4.4.0-2 +- Rebuild for protobuf 3.11 + +* Thu Nov 21 2019 Gabriel Féron - 1:4.4.0-1 +- Update to 4.4.0 + +* Wed Jul 24 2019 Fedora Release Engineering - 1:4.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Tue Jun 18 2019 Gabriel Féron - 1:4.1.0-1 +- Update to 4.1.0 + +* Wed Apr 03 2019 Gabriel Féron - 1:4.0.0-1 +- Update to 4.0.0 + +* Thu Jan 31 2019 Fedora Release Engineering - 1:3.6.0-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Sat Jan 26 2019 Gabriel Féron - 1:3.6.0-1 +- Update to 3.6.0 + +* Thu Nov 22 2018 Igor Gnatenko - 1:3.5.1-3 +- Rebuild for protobuf 3.6 + +* Wed Nov 21 2018 Igor Gnatenko - 1:3.5.1-2 +- Rebuild for protobuf 3.6 + +* Mon Nov 12 2018 Miro Hrončok - 1:3.5.1-1 +- Fix the error in epoch/release + +* Mon Nov 12 2018 Miro Hrončok - 0:3.5.1-2 +- Update to 3.5.1 (#1644323) + +* Tue Aug 28 2018 Miro Hrončok - 1:3.4.1-1 +- Update to 3.4.1 + +* Thu Jul 12 2018 Fedora Release Engineering - 1:3.3.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Wed May 02 2018 Miro Hrončok - 1:3.3.0-1 +- Updated to 3.3.0 +- Make sure Fedora CXXFLAGS are used, also -fPIC +- Use new USE_SYSTEM_LIBS option instead of patch+sed + +* Mon Mar 19 2018 Miro Hrončok - 1:3.2.1-1 +- Updated to 3.2.1 + +* Wed Feb 07 2018 Fedora Release Engineering - 1:3.1.0-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Sun Dec 10 2017 Miro Hrončok - 1:3.1.0-1 +- Updated to 3.1.0 + +* Wed Nov 29 2017 Igor Gnatenko - 1:3.0.3-3 +- Rebuild for protobuf 3.5 + +* Mon Nov 13 2017 Igor Gnatenko - 1:3.0.3-2 +- Rebuild for protobuf 3.4 + +* Mon Oct 23 2017 Miro Hrončok - 1:3.0.3-1 +- Updated to 3.0.3 + +* Wed Aug 30 2017 Miro Hrončok - 1:2.7.0-1 +- Update to 2.7.0 + +* Wed Aug 02 2017 Fedora Release Engineering - 1:2.6.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 1:2.6.1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Wed Jun 28 2017 Miro Hrončok - 1:2.6.1-1 +- Updated to 2.6.1 + +* Tue Jun 27 2017 Miro Hrončok - 1:2.6.0-1 +- Updated to 2.6.0 + +* Wed Jun 14 2017 Miro Hrončok - 1:2.5.0-2 +- Rebuilt for new protobuf 3.3.1 + +* Wed May 03 2017 Miro Hrončok - 1:2.5.0-1 +- Updated to 2.5.0 + +* Sun Dec 04 2016 Miro Hrončok - 1:2.3.1-1 +- New version scheme -> Introduce Epoch +- Updated +- SPEC rewritten + +* Sun Sep 18 2016 Miro Hrončok - 15.04-4 +- Rebuilt for new polyclipping (#1159525) + +* Wed Feb 03 2016 Fedora Release Engineering - 15.04-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Mon Jul 06 2015 Miro Hrončok - 15.04-2 +- Set the VERSION variable + +* Sun Jul 05 2015 Miro Hrončok - 15.04-1 +- Update to 15.04 + +* Tue Jun 16 2015 Fedora Release Engineering - 14.12.1-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Sat May 02 2015 Kalev Lember - 14.12.1-2 +- Rebuilt for GCC 5 C++11 ABI change + +* Mon Dec 29 2014 Miro Hrončok - 14.12.1-1 +- Update to 14.12.1 + +* Thu Oct 23 2014 Miro Hrončok - 14.03-3 +- Rebuilt for new polyclipping + +* Fri Aug 15 2014 Fedora Release Engineering - 14.03-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Mon Jun 23 2014 Miro Hrončok - 14.03-1 +- New version 14.03 + +* Fri Jun 06 2014 Fedora Release Engineering - 14.01-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sun Mar 09 2014 Miro Hrončok - 14.01-1 +- New version 14.01 +- polyclipping 6.1.x +- Now with make test +- Rebuilt against new polyclipping release + +* Sat Dec 14 2013 Miro Hrončok - 13.11.2-1 +- New version 13.11.2 +- Makefile seding changed to reflect changes +- Clipper usage no longer need patching + +* Fri Aug 02 2013 Fedora Release Engineering - 13.06.3-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jul 22 2013 Miro Hrončok - 13.06.3-3 +- Rebuilt for new polyclipping + +* Thu Jul 04 2013 Miro Hrončok - 13.06.3-2 +- Added some explaining comments + +* Sun Jun 23 2013 Miro Hrončok - 13.06.3-1 +- New package From d0efb354f1d2a0abc5c9ff99f7074c9255513d93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 5 Dec 2023 16:03:36 +0100 Subject: [PATCH 09/21] Remove old cruft --- CuraEngine.spec | 5 ----- 1 file changed, 5 deletions(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index 6c95738..b4c3f26 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -47,12 +47,7 @@ Patch0: %{name}-static-libstdcpp.patch Patch1: CuraEngine-5.3.0-fmt10.patch # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval -%if 0%{?fedora} >= 37 || 0%{?rhel} >= 10 ExcludeArch: %{ix86} -%endif - -# Get Fedora 33++ behavior on anything older -%undefine __cmake_in_source_build %description %{name} is a C++ console application for 3D printing G-code generation. It From 22e8de87b47aa5ed332a1dda88f45adf943f51d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 5 Dec 2023 16:04:09 +0100 Subject: [PATCH 10/21] Convert the License tag to SPDX --- CuraEngine.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index b4c3f26..3b8312c 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -3,7 +3,7 @@ Epoch: 1 Version: 5.3.0 Release: %autorelease Summary: Engine for processing 3D models into G-code instructions for 3D printers -License: AGPLv3+ +License: AGPL-3.0-or-later URL: https://github.com/Ultimaker/%{name} Source0: %{url}/archive/%{version}.tar.gz#/%{name}-%{version}.tar.gz From 9293b0433c12efcd9df4f9af6fc764acf6ee3dfb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= Date: Tue, 5 Dec 2023 17:58:56 +0100 Subject: [PATCH 11/21] Update to 5.4.0 --- .gitignore | 2 +- CMakeLists.txt | 3 +-- CuraEngine-5.3.0-fmt10.patch | 33 --------------------------------- CuraEngine-5.4.0-fmt10.patch | 25 +++++++++++++++++++++++++ CuraEngine.spec | 17 ++++++++++++++--- sources | 3 ++- 6 files changed, 43 insertions(+), 40 deletions(-) delete mode 100644 CuraEngine-5.3.0-fmt10.patch create mode 100644 CuraEngine-5.4.0-fmt10.patch diff --git a/.gitignore b/.gitignore index 3c3d653..c242265 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /CuraEngine-*.tar.gz -/e6afb9cbae4064da8c3e69af3ff5c4629579c1d2.tar.gz +/Scripta_public-*.tar.gz diff --git a/CMakeLists.txt b/CMakeLists.txt index 5993783..4777032 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -174,10 +174,9 @@ set(engine_SRCS # Except main.cpp. src/TopSurface.cpp src/TreeModelVolumes.cpp src/TreeSupport.cpp + src/TreeSupportTipGenerator.cpp src/WallToolPaths.cpp src/WallsComputation.cpp - src/Weaver.cpp - src/Wireframe2gcode.cpp src/BeadingStrategy/BeadingStrategy.cpp src/BeadingStrategy/BeadingStrategyFactory.cpp diff --git a/CuraEngine-5.3.0-fmt10.patch b/CuraEngine-5.3.0-fmt10.patch deleted file mode 100644 index d8147df..0000000 --- a/CuraEngine-5.3.0-fmt10.patch +++ /dev/null @@ -1,33 +0,0 @@ ---- CuraEngine-5.3.0/src/FffGcodeWriter.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 -+++ CuraEngine-5.3.0/src/FffGcodeWriter.cpp 2023-07-02 00:01:20.042447483 +0900 -@@ -996,7 +996,7 @@ void FffGcodeWriter::processRaft(const S - - LayerPlan& FffGcodeWriter::processLayer(const SliceDataStorage& storage, LayerIndex layer_nr, const size_t total_layers) const - { -- spdlog::debug("GcodeWriter processing layer {} of {}", layer_nr, total_layers); -+ spdlog::debug("GcodeWriter processing layer {} of {}", static_cast(layer_nr), total_layers); - - const Settings& mesh_group_settings = Application::getInstance().current_slice->scene.current_mesh_group->settings; - coord_t layer_thickness = mesh_group_settings.get("layer_height"); ---- CuraEngine-5.3.0/src/LayerPlanBuffer.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 -+++ CuraEngine-5.3.0/src/LayerPlanBuffer.cpp 2023-07-02 00:03:16.060680917 +0900 -@@ -82,7 +82,7 @@ void LayerPlanBuffer::addConnectingTrave - - if (! new_layer_destination_state) - { -- spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", newest_layer->layer_nr); -+ spdlog::warn("Layer {} is empty (or it has empty extruder plans). Temperature control and cross layer travel moves might suffer!", static_cast(newest_layer->layer_nr)); - return; - } - ---- CuraEngine-5.3.0/src/Weaver.cpp.fmt10 2023-03-07 21:33:22.000000000 +0900 -+++ CuraEngine-5.3.0/src/Weaver.cpp 2023-07-02 00:04:08.697786833 +0900 -@@ -55,7 +55,7 @@ void Weaver::weave(MeshGroup* meshgroup) - } - if (starting_layer_idx > 0) - { -- spdlog::warn("First {} layers are empty!", starting_layer_idx); -+ spdlog::warn("First {} layers are empty!", static_cast(starting_layer_idx)); - } - } - diff --git a/CuraEngine-5.4.0-fmt10.patch b/CuraEngine-5.4.0-fmt10.patch new file mode 100644 index 0000000..288a043 --- /dev/null +++ b/CuraEngine-5.4.0-fmt10.patch @@ -0,0 +1,25 @@ +diff --git a/include/settings/types/LayerIndex.h b/include/settings/types/LayerIndex.h +index 1e48bbc..adcffaf 100644 +--- a/include/settings/types/LayerIndex.h ++++ b/include/settings/types/LayerIndex.h +@@ -5,6 +5,7 @@ + #define LAYERINDEX_H + + #include ++#include + + namespace cura + { +@@ -109,6 +110,12 @@ struct LayerIndex + int value = 0; + }; + ++constexpr auto format_as(LayerIndex index) ++{ ++ return index.value; ++} ++ ++ + } + + namespace std diff --git a/CuraEngine.spec b/CuraEngine.spec index 3b8312c..4d566a8 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -1,6 +1,6 @@ Name: CuraEngine Epoch: 1 -Version: 5.3.0 +Version: 5.4.0 Release: %autorelease Summary: Engine for processing 3D models into G-code instructions for 3D printers License: AGPL-3.0-or-later @@ -14,6 +14,14 @@ Source4: FindStb.cmake Source5: CMakeLists.txt Source6: CPackConfig.cmake +# This is some kind of "public" layer of a private logging thing :/ +# It's header-only and not usable as a system library, +# so I (churchyard) decided to bundle it for now. Shame on me. +# It's AGPL-3.0-or-later. +%global scripta_version c378c837eeb505146ab67abe0904bfed2099128f +Source7: https://github.com/Ultimaker/Scripta_public/archive/%{scripta_version}/Scripta_public-%{scripta_version}.tar.gz +Provides: bundled(scripta) = %{scripta_version} + BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: libarcus-devel >= 5.2.2 @@ -43,8 +51,8 @@ BuildRequires: spdlog-devel BuildRequires: stb_image-static >= 2.28^20231011gitbeebb24-12 Patch0: %{name}-static-libstdcpp.patch -# Patch for fmtlib 10 -Patch1: CuraEngine-5.3.0-fmt10.patch +# Patch for fmtlib 10, from https://github.com/Ultimaker/CuraEngine/commit/5a4ca90594f965b6a5e6af626a5c508185277162 +Patch1: CuraEngine-5.4.0-fmt10.patch # https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval ExcludeArch: %{ix86} @@ -64,6 +72,9 @@ cp -a %{SOURCE2} %{SOURCE3} %{SOURCE4} cmake rm -rf CMakeLists.txt cp -a %{SOURCE5} %{SOURCE6} . +tar xf %{SOURCE7} +mv Scripta_public-%{scripta_version}/include/scripta/ include/ + %patch -P0 -p1 %patch -P1 -p1 diff --git a/sources b/sources index 8b55e2c..9692917 100644 --- a/sources +++ b/sources @@ -1 +1,2 @@ -SHA512 (CuraEngine-5.3.0.tar.gz) = 01c05e616fedf14b2ab36c89f3c0540705e79908a35488282f62b9f335fbe33bda0e151cf4d98580b0c01a40029662193471cb2bb86a0cb2671e6dcf46cbb253 +SHA512 (CuraEngine-5.4.0.tar.gz) = 2f5c8442a65a1695acc92fd3a8af0d2376e5e589d0cc6dec538756b3697efc1b69875a19bc72c39022d8b7361ac242c0544a284fc8c5c066790f3c4e5e26f468 +SHA512 (Scripta_public-c378c837eeb505146ab67abe0904bfed2099128f.tar.gz) = d0b898f4830947d672e5b8dba9b0ad7a744347b603925ae24d43a7499343d4e80fbd4296277289e15eaf2d5a3165d6c1c50300e42dc268155f7081b178a34f7a From 05877b4bba067b1a3a9892a5545f4b15f7e8a194 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 18 Jan 2024 12:15:09 +0000 Subject: [PATCH 12/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From adcd997f0417e9d3a73029ade1c553098a9b7a3e Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jan 2024 09:27:34 +0000 Subject: [PATCH 13/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 8ccf8941fc61793788c2798394d2dcb8009deead Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 22 Jan 2024 20:52:11 +0000 Subject: [PATCH 14/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 698104d5f2cd1c16ce86806d4678ae4f48b30e95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Tue, 21 May 2024 17:39:54 +0200 Subject: [PATCH 15/21] Rebuilt for spdlog 1.14.1 From ec35be5da8bc16f840717866be152da6c841d6e8 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 17 Jul 2024 14:49:34 +0000 Subject: [PATCH 16/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From ab04fc106f3ecd63e3300e7505f3fffc349f8681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Franti=C5=A1ek=20Zatloukal?= Date: Tue, 26 Nov 2024 10:23:07 +0100 Subject: [PATCH 17/21] Rebuilt for spdlog 1.15.0 From 057fabca2fa46ae0d833fafbcdf745f6aa66716f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jan 2025 08:31:13 +0000 Subject: [PATCH 18/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 7060720467f8c667e1f9d2817bfd9b4102224ae2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 23 Jul 2025 15:44:45 +0000 Subject: [PATCH 19/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild From 64abe98db0a5fd48268e3eec6ed42d551b19b545 Mon Sep 17 00:00:00 2001 From: "Benjamin A. Beasley" Date: Wed, 26 Nov 2025 07:01:20 +0000 Subject: [PATCH 20/21] Rebuilt with latest patched stb_image: memory-safety fixes --- CuraEngine.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CuraEngine.spec b/CuraEngine.spec index 4d566a8..d9a8eb6 100644 --- a/CuraEngine.spec +++ b/CuraEngine.spec @@ -48,7 +48,8 @@ BuildRequires: spdlog-devel # CVE-2023-45664 # CVE-2023-45666 # CVE-2023-45667 -BuildRequires: stb_image-static >= 2.28^20231011gitbeebb24-12 +# Upstream issues #1860, #1861 +BuildRequires: stb_image-static >= 2.30^20251025gitf1c79c0-2 Patch0: %{name}-static-libstdcpp.patch # Patch for fmtlib 10, from https://github.com/Ultimaker/CuraEngine/commit/5a4ca90594f965b6a5e6af626a5c508185277162 From 368de1c7040e6a5262e43a1bcdaba4bb2a587bc3 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 16 Jan 2026 02:30:58 +0000 Subject: [PATCH 21/21] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild