Accepting request 942356 from home:bnavigator:branches:science

- Update to 2.4.0
  * Big changelog since v2.3.3, most changes decribed in alpha and
    beta release notes:
    https://github.com/prusa3d/PrusaSlicer/releases
  * Send system info: new dialog for telemetry. Opt-in.
- Drop patches
  *  PrusaSlicer-catch2upd.patch
  *  PrusaSlicer-issue6681-openvdb.patch
  *  PrusaSlicer-pr6590-updateTBB.patch

OBS-URL: https://build.opensuse.org/request/show/942356
OBS-URL: https://build.opensuse.org/package/show/science/PrusaSlicer?expand=0&rev=32
This commit is contained in:
Hans-Peter Jansen 2021-12-24 18:19:51 +00:00 committed by Git OBS Bridge
parent dbaa715cb3
commit 2fa2ef18ba
8 changed files with 21 additions and 2053 deletions

View File

@ -1,495 +0,0 @@
# - Find ThreadingBuildingBlocks include dirs and libraries
# Use this module by invoking find_package with the form:
# find_package(TBB
# [REQUIRED] # Fail with error if TBB is not found
# ) #
# Once done, this will define
#
# TBB_FOUND - system has TBB
# TBB_INCLUDE_DIRS - the TBB include directories
# TBB_LIBRARIES - TBB libraries to be lined, doesn't include malloc or
# malloc proxy
# TBB::tbb - imported target for the TBB library
#
# TBB_VERSION_MAJOR - Major Product Version Number
# TBB_VERSION_MINOR - Minor Product Version Number
# TBB_INTERFACE_VERSION - Engineering Focused Version Number
# TBB_COMPATIBLE_INTERFACE_VERSION - The oldest major interface version
# still supported. This uses the engineering
# focused interface version numbers.
#
# TBB_MALLOC_FOUND - system has TBB malloc library
# TBB_MALLOC_INCLUDE_DIRS - the TBB malloc include directories
# TBB_MALLOC_LIBRARIES - The TBB malloc libraries to be lined
# TBB::malloc - imported target for the TBB malloc library
#
# TBB_MALLOC_PROXY_FOUND - system has TBB malloc proxy library
# TBB_MALLOC_PROXY_INCLUDE_DIRS = the TBB malloc proxy include directories
# TBB_MALLOC_PROXY_LIBRARIES - The TBB malloc proxy libraries to be lined
# TBB::malloc_proxy - imported target for the TBB malloc proxy library
#
#
# This module reads hints about search locations from variables:
# ENV TBB_ARCH_PLATFORM - for eg. set it to "mic" for Xeon Phi builds
# ENV TBB_ROOT or just TBB_ROOT - root directory of tbb installation
# ENV TBB_BUILD_PREFIX - specifies the build prefix for user built tbb
# libraries. Should be specified with ENV TBB_ROOT
# and optionally...
# ENV TBB_BUILD_DIR - if build directory is different than ${TBB_ROOT}/build
#
#
# Modified by Robert Maynard from the original OGRE source
#
#-------------------------------------------------------------------
# This file is part of the CMake build system for OGRE
# (Object-oriented Graphics Rendering Engine)
# For the latest info, see http://www.ogre3d.org/
#
# The contents of this file are placed in the public domain. Feel
# free to make use of it in any way you like.
#-------------------------------------------------------------------
#
# =========================================================================
# Taken from Copyright.txt in the root of the VTK source tree as per
# instructions to substitute the full license in place of the summary
# reference when distributing outside of VTK
# =========================================================================
#
# Program: Visualization Toolkit
# Module: Copyright.txt
#
# Copyright (c) 1993-2015 Ken Martin, Will Schroeder, Bill Lorensen
# 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 name of Ken Martin, Will Schroeder, or Bill Lorensen nor the names
# of any 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 AUTHORS 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.
#
# =========================================================================*/
#=============================================================================
# FindTBB helper functions and macros
#
# Use TBBConfig.cmake if possible.
set(_tbb_find_quiet)
if (TBB_FIND_QUIETLY)
set(_tbb_find_quiet QUIET)
endif ()
set(_tbb_find_components)
set(_tbb_find_optional_components)
foreach (_tbb_find_component IN LISTS TBB_FIND_COMPONENTS)
if (TBB_FIND_REQUIRED_${_tbb_find_component})
list(APPEND _tbb_find_components "${_tbb_find_component}")
else ()
list(APPEND _tbb_find_optional_components "${_tbb_find_component}")
endif ()
endforeach ()
unset(_tbb_find_component)
find_package(TBB CONFIG ${_tbb_find_quiet}
COMPONENTS ${_tbb_find_components}
OPTIONAL_COMPONENTS ${_tbb_find_optional_components})
unset(_tbb_find_quiet)
unset(_tbb_find_components)
unset(_tbb_find_optional_components)
if (TBB_FOUND)
return ()
endif ()
#====================================================
# Fix the library path in case it is a linker script
#====================================================
function(tbb_extract_real_library library real_library)
if(NOT UNIX OR NOT EXISTS ${library})
set(${real_library} "${library}" PARENT_SCOPE)
return()
endif()
#Read in the first 4 bytes and see if they are the ELF magic number
set(_elf_magic "7f454c46")
file(READ ${library} _hex_data OFFSET 0 LIMIT 4 HEX)
if(_hex_data STREQUAL _elf_magic)
#we have opened a elf binary so this is what
#we should link to
set(${real_library} "${library}" PARENT_SCOPE)
return()
endif()
file(READ ${library} _data OFFSET 0 LIMIT 1024)
if("${_data}" MATCHES "INPUT \\(([^(]+)\\)")
#extract out the .so name from REGEX MATCH command
set(_proper_so_name "${CMAKE_MATCH_1}")
#construct path to the real .so which is presumed to be in the same directory
#as the input file
get_filename_component(_so_dir "${library}" DIRECTORY)
set(${real_library} "${_so_dir}/${_proper_so_name}" PARENT_SCOPE)
else()
#unable to determine what this library is so just hope everything works
#and pass it unmodified.
set(${real_library} "${library}" PARENT_SCOPE)
endif()
endfunction()
#===============================================
# Do the final processing for the package find.
#===============================================
macro(findpkg_finish PREFIX TARGET_NAME)
if (${PREFIX}_INCLUDE_DIR AND ${PREFIX}_LIBRARY)
set(${PREFIX}_FOUND TRUE)
set (${PREFIX}_INCLUDE_DIRS ${${PREFIX}_INCLUDE_DIR})
set (${PREFIX}_LIBRARIES ${${PREFIX}_LIBRARY})
else ()
if (${PREFIX}_FIND_REQUIRED AND NOT ${PREFIX}_FIND_QUIETLY)
message(FATAL_ERROR "Required library ${PREFIX} not found.")
endif ()
endif ()
if (NOT TARGET "TBB::${TARGET_NAME}")
if (${PREFIX}_LIBRARY_RELEASE)
tbb_extract_real_library(${${PREFIX}_LIBRARY_RELEASE} real_release)
endif ()
if (${PREFIX}_LIBRARY_DEBUG)
tbb_extract_real_library(${${PREFIX}_LIBRARY_DEBUG} real_debug)
endif ()
add_library(TBB::${TARGET_NAME} UNKNOWN IMPORTED)
set_target_properties(TBB::${TARGET_NAME} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${${PREFIX}_INCLUDE_DIR}")
if (${PREFIX}_LIBRARY_DEBUG AND ${PREFIX}_LIBRARY_RELEASE)
set_target_properties(TBB::${TARGET_NAME} PROPERTIES
IMPORTED_LOCATION "${real_release}"
IMPORTED_LOCATION_DEBUG "${real_debug}"
IMPORTED_LOCATION_RELEASE "${real_release}")
elseif (${PREFIX}_LIBRARY_RELEASE)
set_target_properties(TBB::${TARGET_NAME} PROPERTIES
IMPORTED_LOCATION "${real_release}")
elseif (${PREFIX}_LIBRARY_DEBUG)
set_target_properties(TBB::${TARGET_NAME} PROPERTIES
IMPORTED_LOCATION "${real_debug}")
endif ()
endif ()
#mark the following variables as internal variables
mark_as_advanced(${PREFIX}_INCLUDE_DIR
${PREFIX}_LIBRARY
${PREFIX}_LIBRARY_DEBUG
${PREFIX}_LIBRARY_RELEASE)
endmacro()
#===============================================
# Generate debug names from given release names
#===============================================
macro(get_debug_names PREFIX)
foreach(i ${${PREFIX}})
set(${PREFIX}_DEBUG ${${PREFIX}_DEBUG} ${i}d ${i}D ${i}_d ${i}_D ${i}_debug ${i})
endforeach()
endmacro()
#===============================================
# See if we have env vars to help us find tbb
#===============================================
macro(getenv_path VAR)
set(ENV_${VAR} $ENV{${VAR}})
# replace won't work if var is blank
if (ENV_${VAR})
string( REGEX REPLACE "\\\\" "/" ENV_${VAR} ${ENV_${VAR}} )
endif ()
endmacro()
#===============================================
# Couple a set of release AND debug libraries
#===============================================
macro(make_library_set PREFIX)
if (${PREFIX}_RELEASE AND ${PREFIX}_DEBUG)
set(${PREFIX} optimized ${${PREFIX}_RELEASE} debug ${${PREFIX}_DEBUG})
elseif (${PREFIX}_RELEASE)
set(${PREFIX} ${${PREFIX}_RELEASE})
elseif (${PREFIX}_DEBUG)
set(${PREFIX} ${${PREFIX}_DEBUG})
endif ()
endmacro()
#===============================================
# Ensure that the release & debug libraries found are from the same installation.
#===============================================
macro(find_tbb_library_verifying_release_debug_locations PREFIX)
find_library(${PREFIX}_RELEASE
NAMES ${${PREFIX}_NAMES}
HINTS ${TBB_LIB_SEARCH_PATH})
if (${PREFIX}_RELEASE)
# To avoid finding a mismatched set of release & debug libraries from
# different installations if the first found does not have debug libraries
# by forcing the search for debug to only occur within the detected release
# library directory (if found). Although this would break detection if the
# release & debug libraries were shipped in different directories, this is
# not the case in the official TBB releases for any platform.
get_filename_component(
FOUND_RELEASE_LIB_DIR "${${PREFIX}_RELEASE}" DIRECTORY)
find_library(${PREFIX}_DEBUG
NAMES ${${PREFIX}_NAMES_DEBUG}
HINTS ${FOUND_RELEASE_LIB_DIR}
NO_DEFAULT_PATH)
else()
find_library(${PREFIX}_DEBUG
NAMES ${${PREFIX}_NAMES_DEBUG}
HINTS ${TBB_LIB_SEARCH_PATH})
endif()
endmacro()
#=============================================================================
# Now to actually find TBB
#
# Get path, convert backslashes as ${ENV_${var}}
getenv_path(TBB_ROOT)
# initialize search paths
set(TBB_PREFIX_PATH ${TBB_ROOT} ${ENV_TBB_ROOT})
set(TBB_INC_SEARCH_PATH "")
set(TBB_LIB_SEARCH_PATH "")
# If user built from sources
set(TBB_BUILD_PREFIX $ENV{TBB_BUILD_PREFIX})
if (TBB_BUILD_PREFIX AND ENV_TBB_ROOT)
getenv_path(TBB_BUILD_DIR)
if (NOT ENV_TBB_BUILD_DIR)
set(ENV_TBB_BUILD_DIR ${ENV_TBB_ROOT}/build)
endif ()
# include directory under ${ENV_TBB_ROOT}/include
list(APPEND TBB_LIB_SEARCH_PATH
${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_release
${ENV_TBB_BUILD_DIR}/${TBB_BUILD_PREFIX}_debug)
endif ()
# For Windows, let's assume that the user might be using the precompiled
# TBB packages from the main website. These use a rather awkward directory
# structure (at least for automatically finding the right files) depending
# on platform and compiler, but we'll do our best to accommodate it.
# Not adding the same effort for the precompiled linux builds, though. Those
# have different versions for CC compiler versions and linux kernels which
# will never adequately match the user's setup, so there is no feasible way
# to detect the "best" version to use. The user will have to manually
# select the right files. (Chances are the distributions are shipping their
# custom version of tbb, anyway, so the problem is probably nonexistent.)
if (WIN32 AND MSVC)
set(COMPILER_PREFIX "vc7.1")
if (MSVC_VERSION EQUAL 1400)
set(COMPILER_PREFIX "vc8")
elseif(MSVC_VERSION EQUAL 1500)
set(COMPILER_PREFIX "vc9")
elseif(MSVC_VERSION EQUAL 1600)
set(COMPILER_PREFIX "vc10")
elseif(MSVC_VERSION EQUAL 1700)
set(COMPILER_PREFIX "vc11")
elseif(MSVC_VERSION EQUAL 1800)
set(COMPILER_PREFIX "vc12")
elseif(MSVC_VERSION GREATER_EQUAL 1900)
set(COMPILER_PREFIX "vc14")
endif ()
# for each prefix path, add ia32/64\${COMPILER_PREFIX}\lib to the lib search path
foreach (dir IN LISTS TBB_PREFIX_PATH)
if (CMAKE_CL_64)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia64/${COMPILER_PREFIX}/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia64/${COMPILER_PREFIX})
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${COMPILER_PREFIX}/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${COMPILER_PREFIX})
else ()
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${COMPILER_PREFIX}/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${COMPILER_PREFIX})
endif ()
endforeach ()
endif ()
# For OS X binary distribution, choose libc++ based libraries for Mavericks (10.9)
# and above and AppleClang
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND
NOT CMAKE_SYSTEM_VERSION VERSION_LESS 13.0)
set (USE_LIBCXX OFF)
cmake_policy(GET CMP0025 POLICY_VAR)
if (POLICY_VAR STREQUAL "NEW")
if (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang")
set (USE_LIBCXX ON)
endif ()
else ()
if (CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
set (USE_LIBCXX ON)
endif ()
endif ()
if (USE_LIBCXX)
foreach (dir IN LISTS TBB_PREFIX_PATH)
list (APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/libc++ ${dir}/libc++/lib)
endforeach ()
endif ()
endif ()
# check compiler ABI
if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
set(COMPILER_PREFIX)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.8)
list(APPEND COMPILER_PREFIX "gcc4.8")
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.7)
list(APPEND COMPILER_PREFIX "gcc4.7")
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.4)
list(APPEND COMPILER_PREFIX "gcc4.4")
endif()
list(APPEND COMPILER_PREFIX "gcc4.1")
elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang")
set(COMPILER_PREFIX)
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.0) # Complete guess
list(APPEND COMPILER_PREFIX "gcc4.8")
endif()
if (NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.6)
list(APPEND COMPILER_PREFIX "gcc4.7")
endif()
list(APPEND COMPILER_PREFIX "gcc4.4")
else() # Assume compatibility with 4.4 for other compilers
list(APPEND COMPILER_PREFIX "gcc4.4")
endif ()
# if platform architecture is explicitly specified
set(TBB_ARCH_PLATFORM $ENV{TBB_ARCH_PLATFORM})
if (TBB_ARCH_PLATFORM)
foreach (dir IN LISTS TBB_PREFIX_PATH)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/${TBB_ARCH_PLATFORM}/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/${TBB_ARCH_PLATFORM})
endforeach ()
endif ()
foreach (dir IN LISTS TBB_PREFIX_PATH)
foreach (prefix IN LISTS COMPILER_PREFIX)
if (CMAKE_SIZEOF_VOID_P EQUAL 8)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/intel64/${prefix})
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/intel64/${prefix}/lib)
else ()
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib/ia32/${prefix})
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/lib)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/ia32/${prefix}/lib)
endif ()
endforeach()
endforeach ()
# add general search paths
foreach (dir IN LISTS TBB_PREFIX_PATH)
list(APPEND TBB_LIB_SEARCH_PATH ${dir}/lib ${dir}/Lib ${dir}/lib/tbb
${dir}/Libs)
list(APPEND TBB_INC_SEARCH_PATH ${dir}/include ${dir}/Include
${dir}/include/tbb)
endforeach ()
set(TBB_LIBRARY_NAMES tbb)
get_debug_names(TBB_LIBRARY_NAMES)
find_path(TBB_INCLUDE_DIR
NAMES tbb/tbb.h
HINTS ${TBB_INC_SEARCH_PATH})
find_tbb_library_verifying_release_debug_locations(TBB_LIBRARY)
make_library_set(TBB_LIBRARY)
findpkg_finish(TBB tbb)
#if we haven't found TBB no point on going any further
if (NOT TBB_FOUND)
return()
endif ()
#=============================================================================
# Look for TBB's malloc package
set(TBB_MALLOC_LIBRARY_NAMES tbbmalloc)
get_debug_names(TBB_MALLOC_LIBRARY_NAMES)
find_path(TBB_MALLOC_INCLUDE_DIR
NAMES tbb/tbb.h
HINTS ${TBB_INC_SEARCH_PATH})
find_tbb_library_verifying_release_debug_locations(TBB_MALLOC_LIBRARY)
make_library_set(TBB_MALLOC_LIBRARY)
findpkg_finish(TBB_MALLOC tbbmalloc)
#=============================================================================
# Look for TBB's malloc proxy package
set(TBB_MALLOC_PROXY_LIBRARY_NAMES tbbmalloc_proxy)
get_debug_names(TBB_MALLOC_PROXY_LIBRARY_NAMES)
find_path(TBB_MALLOC_PROXY_INCLUDE_DIR
NAMES tbb/tbbmalloc_proxy.h
HINTS ${TBB_INC_SEARCH_PATH})
find_tbb_library_verifying_release_debug_locations(TBB_MALLOC_PROXY_LIBRARY)
make_library_set(TBB_MALLOC_PROXY_LIBRARY)
findpkg_finish(TBB_MALLOC_PROXY tbbmalloc_proxy)
#=============================================================================
#parse all the version numbers from tbb
if(NOT TBB_VERSION)
set(TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1
"${TBB_INCLUDE_DIR}/tbb/tbb_stddef.h")
set(TBB_VERSION_FILE_AFTER_TBB_2021_1
"${TBB_INCLUDE_DIR}/oneapi/tbb/version.h")
if (EXISTS "${TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1}")
set(TBB_VERSION_FILE "${TBB_VERSION_FILE_PRIOR_TO_TBB_2021_1}")
elseif (EXISTS "${TBB_VERSION_FILE_AFTER_TBB_2021_1}")
set(TBB_VERSION_FILE "${TBB_VERSION_FILE_AFTER_TBB_2021_1}")
else()
message(FATAL_ERROR "Found TBB installation: ${TBB_INCLUDE_DIR} "
"missing version header.")
endif()
#only read the start of the file
file(STRINGS
"${TBB_VERSION_FILE}"
TBB_VERSION_CONTENTS
REGEX "VERSION")
string(REGEX REPLACE
".*#define TBB_VERSION_MAJOR ([0-9]+).*" "\\1"
TBB_VERSION_MAJOR "${TBB_VERSION_CONTENTS}")
string(REGEX REPLACE
".*#define TBB_VERSION_MINOR ([0-9]+).*" "\\1"
TBB_VERSION_MINOR "${TBB_VERSION_CONTENTS}")
string(REGEX REPLACE
".*#define TBB_INTERFACE_VERSION ([0-9]+).*" "\\1"
TBB_INTERFACE_VERSION "${TBB_VERSION_CONTENTS}")
string(REGEX REPLACE
".*#define TBB_COMPATIBLE_INTERFACE_VERSION ([0-9]+).*" "\\1"
TBB_COMPATIBLE_INTERFACE_VERSION "${TBB_VERSION_CONTENTS}")
endif()

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:deda209505f740ac3d6f59cb2a960f4df908269ee09bd30cd4edb9fc472d29ac
size 40659538

3
PrusaSlicer-2.4.0.tar.gz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:906d0acf0d0e064ae3cbaa16ba1a2e24dd9c32ceb2121464cb4d5951c09e66c2
size 46397442

View File

@ -1,652 +0,0 @@
From 60768d32486cf05635cc355cbdea906aa60b17a8 Mon Sep 17 00:00:00 2001
From: Vojtech Bubnik <bubnikv@gmail.com>
Date: Thu, 8 Jul 2021 16:55:59 +0200
Subject: [PATCH] Updated the Catch2 framework from v2.13.3 to v2.13.6. Fixes
Fix build error with non-const MINSIGSTKSZ. #6518
---
tests/catch2/catch.hpp | 410 +++++++++++++++++++++++------------------
1 file changed, 235 insertions(+), 175 deletions(-)
diff --git a/tests/catch2/catch.hpp b/tests/catch2/catch.hpp
index 282d1562c8..1bfc71c5d9 100644
--- a/tests/catch2/catch.hpp
+++ b/tests/catch2/catch.hpp
@@ -1,9 +1,9 @@
/*
- * Catch v2.13.3
- * Generated: 2020-10-31 18:20:31.045274
+ * Catch v2.13.6
+ * Generated: 2021-04-16 18:23:38.044268
* ----------------------------------------------------------
* This file has been merged from multiple headers. Please don't edit it directly
- * Copyright (c) 2020 Two Blue Cubes Ltd. All rights reserved.
+ * Copyright (c) 2021 Two Blue Cubes Ltd. All rights reserved.
*
* Distributed under the Boost Software License, Version 1.0. (See accompanying
* file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
@@ -15,7 +15,7 @@
#define CATCH_VERSION_MAJOR 2
#define CATCH_VERSION_MINOR 13
-#define CATCH_VERSION_PATCH 3
+#define CATCH_VERSION_PATCH 6
#ifdef __clang__
# pragma clang system_header
@@ -66,13 +66,16 @@
#if !defined(CATCH_CONFIG_IMPL_ONLY)
// start catch_platform.h
+// See e.g.:
+// https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h.auto.html
#ifdef __APPLE__
-# include <TargetConditionals.h>
-# if TARGET_OS_OSX == 1
-# define CATCH_PLATFORM_MAC
-# elif TARGET_OS_IPHONE == 1
-# define CATCH_PLATFORM_IPHONE
-# endif
+# include <TargetConditionals.h>
+# if (defined(TARGET_OS_OSX) && TARGET_OS_OSX == 1) || \
+ (defined(TARGET_OS_MAC) && TARGET_OS_MAC == 1)
+# define CATCH_PLATFORM_MAC
+# elif (defined(TARGET_OS_IPHONE) && TARGET_OS_IPHONE == 1)
+# define CATCH_PLATFORM_IPHONE
+# endif
#elif defined(linux) || defined(__linux) || defined(__linux__)
# define CATCH_PLATFORM_LINUX
@@ -132,9 +135,9 @@ namespace Catch {
#endif
-// We have to avoid both ICC and Clang, because they try to mask themselves
-// as gcc, and we want only GCC in this block
-#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__)
+// Only GCC compiler should be used in this block, so other compilers trying to
+// mask themselves as GCC should be ignored.
+#if defined(__GNUC__) && !defined(__clang__) && !defined(__ICC) && !defined(__CUDACC__) && !defined(__LCC__)
# define CATCH_INTERNAL_START_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic push" )
# define CATCH_INTERNAL_STOP_WARNINGS_SUPPRESSION _Pragma( "GCC diagnostic pop" )
@@ -7054,8 +7057,8 @@ namespace Catch {
double b2 = bias - z1;
double a1 = a(b1);
double a2 = a(b2);
- auto lo = std::max(cumn(a1), 0);
- auto hi = std::min(cumn(a2), n - 1);
+ auto lo = (std::max)(cumn(a1), 0);
+ auto hi = (std::min)(cumn(a2), n - 1);
return { point, resample[lo], resample[hi], confidence_level };
}
@@ -7124,7 +7127,9 @@ namespace Catch {
}
template <typename Clock>
EnvironmentEstimate<FloatDuration<Clock>> estimate_clock_cost(FloatDuration<Clock> resolution) {
- auto time_limit = std::min(resolution * clock_cost_estimation_tick_limit, FloatDuration<Clock>(clock_cost_estimation_time_limit));
+ auto time_limit = (std::min)(
+ resolution * clock_cost_estimation_tick_limit,
+ FloatDuration<Clock>(clock_cost_estimation_time_limit));
auto time_clock = [](int k) {
return Detail::measure<Clock>([k] {
for (int i = 0; i < k; ++i) {
@@ -7771,7 +7776,7 @@ namespace Catch {
double sb = stddev.point;
double mn = mean.point / n;
double mg_min = mn / 2.;
- double sg = std::min(mg_min / 4., sb / std::sqrt(n));
+ double sg = (std::min)(mg_min / 4., sb / std::sqrt(n));
double sg2 = sg * sg;
double sb2 = sb * sb;
@@ -7790,7 +7795,7 @@ namespace Catch {
return (nc / n) * (sb2 - nc * sg2);
};
- return std::min(var_out(1), var_out(std::min(c_max(0.), c_max(mg_min)))) / sb2;
+ return (std::min)(var_out(1), var_out((std::min)(c_max(0.), c_max(mg_min)))) / sb2;
}
bootstrap_analysis analyse_samples(double confidence_level, int n_resamples, std::vector<double>::iterator first, std::vector<double>::iterator last) {
@@ -7980,86 +7985,58 @@ namespace Catch {
// start catch_fatal_condition.h
-// start catch_windows_h_proxy.h
-
-
-#if defined(CATCH_PLATFORM_WINDOWS)
-
-#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX)
-# define CATCH_DEFINED_NOMINMAX
-# define NOMINMAX
-#endif
-#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN)
-# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN
-# define WIN32_LEAN_AND_MEAN
-#endif
-
-#ifdef __AFXDLL
-#include <AfxWin.h>
-#else
-#include <windows.h>
-#endif
-
-#ifdef CATCH_DEFINED_NOMINMAX
-# undef NOMINMAX
-#endif
-#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN
-# undef WIN32_LEAN_AND_MEAN
-#endif
-
-#endif // defined(CATCH_PLATFORM_WINDOWS)
-
-// end catch_windows_h_proxy.h
-#if defined( CATCH_CONFIG_WINDOWS_SEH )
+#include <cassert>
namespace Catch {
- struct FatalConditionHandler {
-
- static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo);
+ // Wrapper for platform-specific fatal error (signals/SEH) handlers
+ //
+ // Tries to be cooperative with other handlers, and not step over
+ // other handlers. This means that unknown structured exceptions
+ // are passed on, previous signal handlers are called, and so on.
+ //
+ // Can only be instantiated once, and assumes that once a signal
+ // is caught, the binary will end up terminating. Thus, there
+ class FatalConditionHandler {
+ bool m_started = false;
+
+ // Install/disengage implementation for specific platform.
+ // Should be if-defed to work on current platform, can assume
+ // engage-disengage 1:1 pairing.
+ void engage_platform();
+ void disengage_platform();
+ public:
+ // Should also have platform-specific implementations as needed
FatalConditionHandler();
- static void reset();
~FatalConditionHandler();
- private:
- static bool isSet;
- static ULONG guaranteeSize;
- static PVOID exceptionHandlerHandle;
- };
-
-} // namespace Catch
-
-#elif defined ( CATCH_CONFIG_POSIX_SIGNALS )
-
-#include <signal.h>
-
-namespace Catch {
-
- struct FatalConditionHandler {
-
- static bool isSet;
- static struct sigaction oldSigActions[];
- static stack_t oldSigStack;
- static char altStackMem[];
-
- static void handleSignal( int sig );
+ void engage() {
+ assert(!m_started && "Handler cannot be installed twice.");
+ m_started = true;
+ engage_platform();
+ }
- FatalConditionHandler();
- ~FatalConditionHandler();
- static void reset();
+ void disengage() {
+ assert(m_started && "Handler cannot be uninstalled without being installed first");
+ m_started = false;
+ disengage_platform();
+ }
};
-} // namespace Catch
-
-#else
-
-namespace Catch {
- struct FatalConditionHandler {
- void reset();
+ //! Simple RAII guard for (dis)engaging the FatalConditionHandler
+ class FatalConditionHandlerGuard {
+ FatalConditionHandler* m_handler;
+ public:
+ FatalConditionHandlerGuard(FatalConditionHandler* handler):
+ m_handler(handler) {
+ m_handler->engage();
+ }
+ ~FatalConditionHandlerGuard() {
+ m_handler->disengage();
+ }
};
-}
-#endif
+} // end namespace Catch
// end catch_fatal_condition.h
#include <string>
@@ -8185,6 +8162,7 @@ namespace Catch {
std::vector<SectionEndInfo> m_unfinishedSections;
std::vector<ITracker*> m_activeSections;
TrackerContext m_trackerContext;
+ FatalConditionHandler m_fatalConditionhandler;
bool m_lastAssertionPassed = false;
bool m_shouldReportUnexpected = true;
bool m_includeSuccessfulResults;
@@ -10057,6 +10035,36 @@ namespace Catch {
}
// end catch_errno_guard.h
+// start catch_windows_h_proxy.h
+
+
+#if defined(CATCH_PLATFORM_WINDOWS)
+
+#if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX)
+# define CATCH_DEFINED_NOMINMAX
+# define NOMINMAX
+#endif
+#if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN)
+# define CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifdef __AFXDLL
+#include <AfxWin.h>
+#else
+#include <windows.h>
+#endif
+
+#ifdef CATCH_DEFINED_NOMINMAX
+# undef NOMINMAX
+#endif
+#ifdef CATCH_DEFINED_WIN32_LEAN_AND_MEAN
+# undef WIN32_LEAN_AND_MEAN
+#endif
+
+#endif // defined(CATCH_PLATFORM_WINDOWS)
+
+// end catch_windows_h_proxy.h
#include <sstream>
namespace Catch {
@@ -10573,7 +10581,7 @@ namespace Catch {
// Extracts the actual name part of an enum instance
// In other words, it returns the Blue part of Bikeshed::Colour::Blue
StringRef extractInstanceName(StringRef enumInstance) {
- // Find last occurence of ":"
+ // Find last occurrence of ":"
size_t name_start = enumInstance.size();
while (name_start > 0 && enumInstance[name_start - 1] != ':') {
--name_start;
@@ -10735,25 +10743,47 @@ namespace Catch {
// end catch_exception_translator_registry.cpp
// start catch_fatal_condition.cpp
-#if defined(__GNUC__)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
-#endif
+#include <algorithm>
+
+#if !defined( CATCH_CONFIG_WINDOWS_SEH ) && !defined( CATCH_CONFIG_POSIX_SIGNALS )
+
+namespace Catch {
+
+ // If neither SEH nor signal handling is required, the handler impls
+ // do not have to do anything, and can be empty.
+ void FatalConditionHandler::engage_platform() {}
+ void FatalConditionHandler::disengage_platform() {}
+ FatalConditionHandler::FatalConditionHandler() = default;
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+} // end namespace Catch
+
+#endif // !CATCH_CONFIG_WINDOWS_SEH && !CATCH_CONFIG_POSIX_SIGNALS
+
+#if defined( CATCH_CONFIG_WINDOWS_SEH ) && defined( CATCH_CONFIG_POSIX_SIGNALS )
+#error "Inconsistent configuration: Windows' SEH handling and POSIX signals cannot be enabled at the same time"
+#endif // CATCH_CONFIG_WINDOWS_SEH && CATCH_CONFIG_POSIX_SIGNALS
#if defined( CATCH_CONFIG_WINDOWS_SEH ) || defined( CATCH_CONFIG_POSIX_SIGNALS )
namespace {
- // Report the error condition
+ //! Signals fatal error message to the run context
void reportFatal( char const * const message ) {
Catch::getCurrentContext().getResultCapture()->handleFatalErrorCondition( message );
}
-}
-#endif // signals/SEH handling
+ //! Minimal size Catch2 needs for its own fatal error handling.
+ //! Picked anecdotally, so it might not be sufficient on all
+ //! platforms, and for all configurations.
+ constexpr std::size_t minStackSizeForErrors = 32 * 1024;
+} // end unnamed namespace
+
+#endif // CATCH_CONFIG_WINDOWS_SEH || CATCH_CONFIG_POSIX_SIGNALS
#if defined( CATCH_CONFIG_WINDOWS_SEH )
namespace Catch {
+
struct SignalDefs { DWORD id; const char* name; };
// There is no 1-1 mapping between signals and windows exceptions.
@@ -10766,7 +10796,7 @@ namespace Catch {
{ static_cast<DWORD>(EXCEPTION_INT_DIVIDE_BY_ZERO), "Divide by zero error" },
};
- LONG CALLBACK FatalConditionHandler::handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
+ static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) {
for (auto const& def : signalDefs) {
if (ExceptionInfo->ExceptionRecord->ExceptionCode == def.id) {
reportFatal(def.name);
@@ -10777,38 +10807,50 @@ namespace Catch {
return EXCEPTION_CONTINUE_SEARCH;
}
+ // Since we do not support multiple instantiations, we put these
+ // into global variables and rely on cleaning them up in outlined
+ // constructors/destructors
+ static PVOID exceptionHandlerHandle = nullptr;
+
+ // For MSVC, we reserve part of the stack memory for handling
+ // memory overflow structured exception.
FatalConditionHandler::FatalConditionHandler() {
- isSet = true;
- // 32k seems enough for Catch to handle stack overflow,
- // but the value was found experimentally, so there is no strong guarantee
- guaranteeSize = 32 * 1024;
- exceptionHandlerHandle = nullptr;
+ ULONG guaranteeSize = static_cast<ULONG>(minStackSizeForErrors);
+ if (!SetThreadStackGuarantee(&guaranteeSize)) {
+ // We do not want to fully error out, because needing
+ // the stack reserve should be rare enough anyway.
+ Catch::cerr()
+ << "Failed to reserve piece of stack."
+ << " Stack overflows will not be reported successfully.";
+ }
+ }
+
+ // We do not attempt to unset the stack guarantee, because
+ // Windows does not support lowering the stack size guarantee.
+ FatalConditionHandler::~FatalConditionHandler() = default;
+
+ void FatalConditionHandler::engage_platform() {
// Register as first handler in current chain
exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException);
- // Pass in guarantee size to be filled
- SetThreadStackGuarantee(&guaranteeSize);
+ if (!exceptionHandlerHandle) {
+ CATCH_RUNTIME_ERROR("Could not register vectored exception handler");
+ }
}
- void FatalConditionHandler::reset() {
- if (isSet) {
- RemoveVectoredExceptionHandler(exceptionHandlerHandle);
- SetThreadStackGuarantee(&guaranteeSize);
- exceptionHandlerHandle = nullptr;
- isSet = false;
+ void FatalConditionHandler::disengage_platform() {
+ if (!RemoveVectoredExceptionHandler(exceptionHandlerHandle)) {
+ CATCH_RUNTIME_ERROR("Could not unregister vectored exception handler");
}
+ exceptionHandlerHandle = nullptr;
}
- FatalConditionHandler::~FatalConditionHandler() {
- reset();
- }
+} // end namespace Catch
-bool FatalConditionHandler::isSet = false;
-ULONG FatalConditionHandler::guaranteeSize = 0;
-PVOID FatalConditionHandler::exceptionHandlerHandle = nullptr;
+#endif // CATCH_CONFIG_WINDOWS_SEH
-} // namespace Catch
+#if defined( CATCH_CONFIG_POSIX_SIGNALS )
-#elif defined( CATCH_CONFIG_POSIX_SIGNALS )
+#include <signal.h>
namespace Catch {
@@ -10817,10 +10859,6 @@ namespace Catch {
const char* name;
};
- // 32kb for the alternate stack seems to be sufficient. However, this value
- // is experimentally determined, so that's not guaranteed.
- static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
-
static SignalDefs signalDefs[] = {
{ SIGINT, "SIGINT - Terminal interrupt signal" },
{ SIGILL, "SIGILL - Illegal instruction signal" },
@@ -10830,7 +10868,32 @@ namespace Catch {
{ SIGABRT, "SIGABRT - Abort (abnormal termination) signal" }
};
- void FatalConditionHandler::handleSignal( int sig ) {
+// Older GCCs trigger -Wmissing-field-initializers for T foo = {}
+// which is zero initialization, but not explicit. We want to avoid
+// that.
+#if defined(__GNUC__)
+# pragma GCC diagnostic push
+# pragma GCC diagnostic ignored "-Wmissing-field-initializers"
+#endif
+
+ static char* altStackMem = nullptr;
+ static std::size_t altStackSize = 0;
+ static stack_t oldSigStack{};
+ static struct sigaction oldSigActions[sizeof(signalDefs) / sizeof(SignalDefs)]{};
+
+ static void restorePreviousSignalHandlers() {
+ // We set signal handlers back to the previous ones. Hopefully
+ // nobody overwrote them in the meantime, and doesn't expect
+ // their signal handlers to live past ours given that they
+ // installed them after ours..
+ for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) {
+ sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
+ }
+ // Return the old stack
+ sigaltstack(&oldSigStack, nullptr);
+ }
+
+ static void handleSignal( int sig ) {
char const * name = "<unknown signal>";
for (auto const& def : signalDefs) {
if (sig == def.id) {
@@ -10838,16 +10901,33 @@ namespace Catch {
break;
}
}
- reset();
- reportFatal(name);
+ // We need to restore previous signal handlers and let them do
+ // their thing, so that the users can have the debugger break
+ // when a signal is raised, and so on.
+ restorePreviousSignalHandlers();
+ reportFatal( name );
raise( sig );
}
FatalConditionHandler::FatalConditionHandler() {
- isSet = true;
+ assert(!altStackMem && "Cannot initialize POSIX signal handler when one already exists");
+ if (altStackSize == 0) {
+ altStackSize = std::max(static_cast<size_t>(SIGSTKSZ), minStackSizeForErrors);
+ }
+ altStackMem = new char[altStackSize]();
+ }
+
+ FatalConditionHandler::~FatalConditionHandler() {
+ delete[] altStackMem;
+ // We signal that another instance can be constructed by zeroing
+ // out the pointer.
+ altStackMem = nullptr;
+ }
+
+ void FatalConditionHandler::engage_platform() {
stack_t sigStack;
sigStack.ss_sp = altStackMem;
- sigStack.ss_size = sigStackSize;
+ sigStack.ss_size = altStackSize;
sigStack.ss_flags = 0;
sigaltstack(&sigStack, &oldSigStack);
struct sigaction sa = { };
@@ -10859,40 +10939,17 @@ namespace Catch {
}
}
- FatalConditionHandler::~FatalConditionHandler() {
- reset();
- }
+#if defined(__GNUC__)
+# pragma GCC diagnostic pop
+#endif
- void FatalConditionHandler::reset() {
- if( isSet ) {
- // Set signals back to previous values -- hopefully nobody overwrote them in the meantime
- for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) {
- sigaction(signalDefs[i].id, &oldSigActions[i], nullptr);
- }
- // Return the old stack
- sigaltstack(&oldSigStack, nullptr);
- isSet = false;
- }
+ void FatalConditionHandler::disengage_platform() {
+ restorePreviousSignalHandlers();
}
- bool FatalConditionHandler::isSet = false;
- struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {};
- stack_t FatalConditionHandler::oldSigStack = {};
- char FatalConditionHandler::altStackMem[sigStackSize] = {};
-
-} // namespace Catch
-
-#else
-
-namespace Catch {
- void FatalConditionHandler::reset() {}
-}
-
-#endif // signals/SEH handling
+} // end namespace Catch
-#if defined(__GNUC__)
-# pragma GCC diagnostic pop
-#endif
+#endif // CATCH_CONFIG_POSIX_SIGNALS
// end catch_fatal_condition.cpp
// start catch_generators.cpp
@@ -11447,7 +11504,8 @@ namespace {
return lhs == rhs;
}
- auto ulpDiff = std::abs(lc - rc);
+ // static cast as a workaround for IBM XLC
+ auto ulpDiff = std::abs(static_cast<FP>(lc - rc));
return static_cast<uint64_t>(ulpDiff) <= maxUlpDiff;
}
@@ -11621,7 +11679,6 @@ Floating::WithinRelMatcher WithinRel(float target) {
} // namespace Matchers
} // namespace Catch
-
// end catch_matchers_floating.cpp
// start catch_matchers_generic.cpp
@@ -12955,9 +13012,8 @@ namespace Catch {
}
void RunContext::invokeActiveTestCase() {
- FatalConditionHandler fatalConditionHandler; // Handle signals
+ FatalConditionHandlerGuard _(&m_fatalConditionhandler);
m_activeTestCase->invoke();
- fatalConditionHandler.reset();
}
void RunContext::handleUnfinishedSections() {
@@ -14126,24 +14182,28 @@ namespace Catch {
namespace {
struct TestHasher {
- explicit TestHasher(Catch::SimplePcg32& rng_instance) {
- basis = rng_instance();
- basis <<= 32;
- basis |= rng_instance();
- }
+ using hash_t = uint64_t;
- uint64_t basis;
+ explicit TestHasher( hash_t hashSuffix ):
+ m_hashSuffix{ hashSuffix } {}
- uint64_t operator()(TestCase const& t) const {
- // Modified FNV-1a hash
- static constexpr uint64_t prime = 1099511628211;
- uint64_t hash = basis;
- for (const char c : t.name) {
+ uint32_t operator()( TestCase const& t ) const {
+ // FNV-1a hash with multiplication fold.
+ const hash_t prime = 1099511628211u;
+ hash_t hash = 14695981039346656037u;
+ for ( const char c : t.name ) {
hash ^= c;
hash *= prime;
}
- return hash;
+ hash ^= m_hashSuffix;
+ hash *= prime;
+ const uint32_t low{ static_cast<uint32_t>( hash ) };
+ const uint32_t high{ static_cast<uint32_t>( hash >> 32 ) };
+ return low * high;
}
+
+ private:
+ hash_t m_hashSuffix;
};
} // end unnamed namespace
@@ -14161,9 +14221,9 @@ namespace Catch {
case RunTests::InRandomOrder: {
seedRng( config );
- TestHasher h( rng() );
+ TestHasher h{ config.rngSeed() };
- using hashedTest = std::pair<uint64_t, TestCase const*>;
+ using hashedTest = std::pair<TestHasher::hash_t, TestCase const*>;
std::vector<hashedTest> indexed_tests;
indexed_tests.reserve( unsortedTestCases.size() );
@@ -15316,7 +15376,7 @@ namespace Catch {
}
Version const& libraryVersion() {
- static Version version( 2, 13, 3, "", 0 );
+ static Version version( 2, 13, 6, "", 0 );
return version;
}

View File

@ -1,77 +0,0 @@
From e6507594fb6893156056c2123822a2b37f7f179d Mon Sep 17 00:00:00 2001
From: tamasmeszaros <meszaros.q@gmail.com>
Date: Wed, 14 Jul 2021 16:26:44 +0200
Subject: [PATCH] Search for a better openvdb find module if available
Solves #6681, alternative path for openvdb installation can be specified via cache variable
---
CMakeLists.txt | 12 +++++++++---
cmake/modules/FindOpenVDB.cmake | 21 +++++++++++++++++++++
2 files changed, 30 insertions(+), 3 deletions(-)
diff --git a/CMakeLists.txt b/CMakeLists.txt
index b6fe88e48f..b8b9add60f 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -33,6 +33,8 @@ option(SLIC3R_MSVC_PDB "Generate PDB files on MSVC in Release mode" 1)
option(SLIC3R_PERL_XS "Compile XS Perl module and enable Perl unit and integration tests" 0)
option(SLIC3R_ASAN "Enable ASan on Clang and GCC" 0)
+set(OPENVDB_FIND_MODULE_PATH "" CACHE PATH "Path to OpenVDB installation's find modules.")
+
set(SLIC3R_GTK "2" CACHE STRING "GTK version to use with wxWidgets on Linux")
set(IS_CROSS_COMPILE FALSE)
@@ -492,13 +494,17 @@ find_package(NLopt 1.4 REQUIRED)
if(SLIC3R_STATIC)
set(OPENVDB_USE_STATIC_LIBS ON)
set(USE_BLOSC TRUE)
-endif()
+endif ()
-find_package(OpenVDB 5.0 REQUIRED COMPONENTS openvdb)
+find_package(OpenVDB 5.0 COMPONENTS openvdb)
if(OpenVDB_FOUND)
slic3r_remap_configs(IlmBase::Half RelWithDebInfo Release)
slic3r_remap_configs(Blosc::blosc RelWithDebInfo Release)
-endif()
+else ()
+ message(FATAL_ERROR "OpenVDB could not be found with the bundled find module. "
+ "You can try to specify the find module location of your "
+ "OpenVDB installation with the OPENVDB_FIND_MODULE_PATH cache variable.")
+endif ()
set(TOP_LEVEL_PROJECT_DIR ${PROJECT_SOURCE_DIR})
function(prusaslicer_copy_dlls target)
diff --git a/cmake/modules/FindOpenVDB.cmake b/cmake/modules/FindOpenVDB.cmake
index 02420fed8e..3b60ac9d36 100644
--- a/cmake/modules/FindOpenVDB.cmake
+++ b/cmake/modules/FindOpenVDB.cmake
@@ -102,6 +102,27 @@ may be provided to tell this module where to look.
#]=======================================================================]
+# If an explicit openvdb module path was specified, that will be used
+if (OPENVDB_FIND_MODULE_PATH)
+ set(_module_path_bak ${CMAKE_MODULE_PATH})
+ set(CMAKE_MODULE_PATH ${OPENVDB_FIND_MODULE_PATH})
+ find_package(
+ OpenVDB ${OpenVDB_FIND_VERSION} QUIET
+ COMPONENTS
+ ${OpenVDB_FIND_COMPONENTS}
+ )
+
+ set(CMAKE_MODULE_PATH ${_module_path_bak})
+ if (OpenVDB_FOUND)
+ return()
+ endif ()
+
+ if (NOT OpenVDB_FIND_QUIETLY)
+ message(STATUS "Using bundled find module for OpenVDB")
+ endif ()
+endif ()
+# ###########################################################################
+
cmake_minimum_required(VERSION 3.3)
# Monitoring <PackageName>_ROOT variables
if(POLICY CMP0074)

View File

@ -1,803 +0,0 @@
From 62161e9201293a0ba766c6cfa84202330460764a Mon Sep 17 00:00:00 2001
From: Roman Beranek <roman.beranek@prusa3d.com>
Date: Thu, 3 Jun 2021 22:04:34 +0200
Subject: [PATCH] drop deprecated TBB components
Quite some time ago, many of the TBB components were deprecated in favor
of their near-equivalents in the STL or, in the case of task_scheduler_init,
were broken up and reconstituted under a less ad-hoc logic. Every time a header
file marked deprecated gets included, a rather loud warning is emitted, which
leads to a complete TBB's domination over the stderr stream during build time,
making it harder to notice _legitimate_ warnings.
Instead of merely muting the output with TBB_SUPPRESS_DEPRECATED_MESSAGES,
perform a genuine migration away from the deprecated components with the added
benefit of achieving a source compatibility with oneTBB, the successor to TBB
which has dropped the deprecated API for good.
What got replaced for what?
| Deprecated | Replacement |
| ------------------------------------- | --------------------------------------------- |
| `tbb::atomic` | `std::atomic` |
| `tbb::mutex` | `std::mutex` |
| `tbb::mutex::scoped_lock` | `std::scoped_lock<std::mutex>` |
| `tbb::mutex::scoped_lock` (empty) | `std::unique_lock<std::mutex>` (deferred) |
| `tbb::task_scheduler_init` | `tbb::global_control` |
| `tbb::this_thread` | `std::this_thread` |
Signed-off-by: Roman Beranek <roman.beranek@prusa3d.com>
---
src/libslic3r/Execution/ExecutionTBB.hpp | 5 +--
src/libslic3r/Print.cpp | 4 +--
src/libslic3r/PrintApply.cpp | 2 +-
src/libslic3r/PrintBase.cpp | 2 +-
src/libslic3r/PrintBase.hpp | 40 ++++++++++-----------
src/libslic3r/PrintObject.cpp | 1 -
src/libslic3r/SLA/SupportTree.cpp | 3 --
src/libslic3r/SLAPrint.cpp | 10 +++---
src/libslic3r/SupportMaterial.cpp | 1 -
src/libslic3r/Thread.cpp | 12 +++----
src/libslic3r/pchheader.hpp | 3 --
src/libslic3r/utils.cpp | 6 ++--
src/slic3r/GUI/BackgroundSlicingProcess.cpp | 6 ++--
src/slic3r/GUI/InstanceCheck.hpp | 2 +-
src/slic3r/GUI/Mouse3DController.cpp | 38 ++++++++++----------
src/slic3r/GUI/Mouse3DController.hpp | 10 +++---
src/slic3r/GUI/RemovableDriveManager.cpp | 24 ++++++-------
src/slic3r/GUI/RemovableDriveManager.hpp | 6 ++--
18 files changed, 80 insertions(+), 95 deletions(-)
Index: PrusaSlicer-version_2.3.3/src/libslic3r/Print.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/Print.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/Print.cpp
@@ -36,7 +36,7 @@ template class PrintState<PrintObjectSte
void Print::clear()
{
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
// The following call should stop background processing if it is running.
this->invalidate_all_steps();
for (PrintObject *object : m_objects)
@@ -262,7 +262,7 @@ bool Print::is_step_done(PrintObjectStep
{
if (m_objects.empty())
return false;
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
for (const PrintObject *object : m_objects)
if (! object->is_step_done_unguarded(step))
return false;
@@ -617,7 +617,7 @@ Print::ApplyStatus Print::apply(const Mo
update_apply_status(false);
// Grab the lock for the Print / PrintObject milestones.
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
// The following call may stop the background processing.
if (! print_diff.empty())
Index: PrusaSlicer-version_2.3.3/src/libslic3r/PrintBase.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/PrintBase.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/PrintBase.cpp
@@ -97,7 +97,7 @@ void PrintBase::status_update_warnings(O
printf("%s warning: %s\n", (object_id == this->id()) ? "print" : "print object", message.c_str());
}
-tbb::mutex& PrintObjectBase::state_mutex(PrintBase *print)
+std::mutex& PrintObjectBase::state_mutex(PrintBase *print)
{
return print->state_mutex();
}
Index: PrusaSlicer-version_2.3.3/src/libslic3r/PrintBase.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/PrintBase.hpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/PrintBase.hpp
@@ -6,12 +6,8 @@
#include <vector>
#include <string>
#include <functional>
-
-// tbb/mutex.h includes Windows, which in turn defines min/max macros. Convince Windows.h to not define these min/max macros.
-#ifndef NOMINMAX
- #define NOMINMAX
-#endif
-#include "tbb/mutex.h"
+#include <atomic>
+#include <mutex>
#include "ObjectID.hpp"
#include "Model.hpp"
@@ -84,23 +80,23 @@ class PrintState : public PrintStateBase
public:
PrintState() {}
- StateWithTimeStamp state_with_timestamp(StepType step, tbb::mutex &mtx) const {
- tbb::mutex::scoped_lock lock(mtx);
+ StateWithTimeStamp state_with_timestamp(StepType step, std::mutex &mtx) const {
+ std::scoped_lock<std::mutex> lock(mtx);
StateWithTimeStamp state = m_state[step];
return state;
}
- StateWithWarnings state_with_warnings(StepType step, tbb::mutex &mtx) const {
- tbb::mutex::scoped_lock lock(mtx);
+ StateWithWarnings state_with_warnings(StepType step, std::mutex &mtx) const {
+ std::scoped_lock<std::mutex> lock(mtx);
StateWithWarnings state = m_state[step];
return state;
}
- bool is_started(StepType step, tbb::mutex &mtx) const {
+ bool is_started(StepType step, std::mutex &mtx) const {
return this->state_with_timestamp(step, mtx).state == STARTED;
}
- bool is_done(StepType step, tbb::mutex &mtx) const {
+ bool is_done(StepType step, std::mutex &mtx) const {
return this->state_with_timestamp(step, mtx).state == DONE;
}
@@ -121,8 +117,8 @@ public:
// This is necessary to block until the Print::apply() updates its state, which may
// influence the processing step being entered.
template<typename ThrowIfCanceled>
- bool set_started(StepType step, tbb::mutex &mtx, ThrowIfCanceled throw_if_canceled) {
- tbb::mutex::scoped_lock lock(mtx);
+ bool set_started(StepType step, std::mutex &mtx, ThrowIfCanceled throw_if_canceled) {
+ std::scoped_lock<std::mutex> lock(mtx);
// If canceled, throw before changing the step state.
throw_if_canceled();
#ifndef NDEBUG
@@ -154,8 +150,8 @@ public:
// Timestamp when this stepentered the DONE state.
// bool indicates whether the UI has to update the slicing warnings of this step or not.
template<typename ThrowIfCanceled>
- std::pair<TimeStamp, bool> set_done(StepType step, tbb::mutex &mtx, ThrowIfCanceled throw_if_canceled) {
- tbb::mutex::scoped_lock lock(mtx);
+ std::pair<TimeStamp, bool> set_done(StepType step, std::mutex &mtx, ThrowIfCanceled throw_if_canceled) {
+ std::scoped_lock<std::mutex> lock(mtx);
// If canceled, throw before changing the step state.
throw_if_canceled();
assert(m_state[step].state == STARTED);
@@ -266,9 +262,9 @@ public:
// Return value:
// Current milestone (StepType).
// bool indicates whether the UI has to be updated or not.
- std::pair<StepType, bool> active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, int message_id, tbb::mutex &mtx)
+ std::pair<StepType, bool> active_step_add_warning(PrintStateBase::WarningLevel warning_level, const std::string &message, int message_id, std::mutex &mtx)
{
- tbb::mutex::scoped_lock lock(mtx);
+ std::scoped_lock<std::mutex> lock(mtx);
assert(m_step_active != -1);
StateWithWarnings &state = m_state[m_step_active];
assert(state.state == STARTED);
@@ -314,7 +310,7 @@ protected:
PrintObjectBase(ModelObject *model_object) : m_model_object(model_object) {}
virtual ~PrintObjectBase() {}
// Declared here to allow access from PrintBase through friendship.
- static tbb::mutex& state_mutex(PrintBase *print);
+ static std::mutex& state_mutex(PrintBase *print);
static std::function<void()> cancel_callback(PrintBase *print);
// Notify UI about a new warning of a milestone "step" on this PrintObjectBase.
// The UI will be notified by calling a status callback registered on print.
@@ -461,7 +457,7 @@ protected:
friend class PrintObjectBase;
friend class BackgroundSlicingProcess;
- tbb::mutex& state_mutex() const { return m_state_mutex; }
+ std::mutex& state_mutex() const { return m_state_mutex; }
std::function<void()> cancel_callback() { return m_cancel_callback; }
void call_cancel_callback() { m_cancel_callback(); }
// Notify UI about a new warning of a milestone "step" on this PrintBase.
@@ -486,7 +482,7 @@ protected:
status_callback_type m_status_callback;
private:
- tbb::atomic<CancelStatus> m_cancel_status;
+ std::atomic<CancelStatus> m_cancel_status;
// Callback to be evoked to stop the background processing before a state is updated.
cancel_callback_type m_cancel_callback = [](){};
@@ -494,7 +490,7 @@ private:
// Mutex used for synchronization of the worker thread with the UI thread:
// The mutex will be used to guard the worker thread against entering a stage
// while the data influencing the stage is modified.
- mutable tbb::mutex m_state_mutex;
+ mutable std::mutex m_state_mutex;
};
template<typename PrintStepEnum, const size_t COUNT>
Index: PrusaSlicer-version_2.3.3/src/libslic3r/PrintObject.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/PrintObject.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/PrintObject.cpp
@@ -19,7 +19,6 @@
#include <float.h>
#include <tbb/parallel_for.h>
-#include <tbb/atomic.h>
#include <Shiny/Shiny.h>
Index: PrusaSlicer-version_2.3.3/src/libslic3r/SLA/SupportTree.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/SLA/SupportTree.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/SLA/SupportTree.cpp
@@ -16,9 +16,6 @@
#include <libnest2d/optimizers/nlopt/genetic.hpp>
#include <libnest2d/optimizers/nlopt/subplex.hpp>
#include <boost/log/trivial.hpp>
-#include <tbb/parallel_for.h>
-#include <tbb/mutex.h>
-#include <tbb/spin_mutex.h>
#include <libslic3r/I18N.hpp>
//! macro used to mark string used at localization,
Index: PrusaSlicer-version_2.3.3/src/libslic3r/SLAPrint.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/SLAPrint.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/SLAPrint.cpp
@@ -19,8 +19,6 @@
#include <libnest2d/tools/benchmark.h>
#endif
-//#include <tbb/spin_mutex.h>//#include "tbb/mutex.h"
-
#include "I18N.hpp"
//! macro used to mark string used at localization,
@@ -118,7 +116,7 @@ bool validate_pad(const TriangleMesh &pa
void SLAPrint::clear()
{
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
// The following call should stop background processing if it is running.
this->invalidate_all_steps();
for (SLAPrintObject *object : m_objects)
@@ -212,7 +210,7 @@ SLAPrint::ApplyStatus SLAPrint::apply(co
update_apply_status(false);
// Grab the lock for the Print / PrintObject milestones.
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
// The following call may stop the background processing.
bool invalidate_all_model_objects = false;
@@ -514,7 +512,7 @@ SLAPrint::ApplyStatus SLAPrint::apply(co
void SLAPrint::set_task(const TaskParams &params)
{
// Grab the lock for the Print / PrintObject milestones.
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
int n_object_steps = int(params.to_object_step) + 1;
if (n_object_steps == 0)
@@ -884,7 +882,7 @@ bool SLAPrint::is_step_done(SLAPrintObje
{
if (m_objects.empty())
return false;
- tbb::mutex::scoped_lock lock(this->state_mutex());
+ std::scoped_lock<std::mutex> lock(this->state_mutex());
for (const SLAPrintObject *object : m_objects)
if (! object->is_step_done_unguarded(step))
return false;
Index: PrusaSlicer-version_2.3.3/src/libslic3r/SupportMaterial.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/SupportMaterial.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/SupportMaterial.cpp
@@ -12,7 +12,6 @@
#include <boost/log/trivial.hpp>
#include <tbb/parallel_for.h>
-#include <tbb/atomic.h>
#include <tbb/spin_mutex.h>
#include <tbb/task_group.h>
Index: PrusaSlicer-version_2.3.3/src/libslic3r/Thread.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/Thread.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/Thread.cpp
@@ -9,10 +9,10 @@
#include <atomic>
#include <condition_variable>
#include <mutex>
+#include <thread>
+#include <tbb/global_control.h>
#include <tbb/parallel_for.h>
-#include <tbb/tbb_thread.h>
#include <tbb/task_arena.h>
-#include <tbb/task_scheduler_init.h>
#include "Thread.hpp"
@@ -206,13 +206,13 @@ void name_tbb_thread_pool_threads()
nthreads = 1;
#endif
- if (nthreads != nthreads_hw)
- new tbb::task_scheduler_init(int(nthreads));
+ if (nthreads != nthreads_hw)
+ tbb::global_control(tbb::global_control::max_allowed_parallelism, nthreads);
std::atomic<size_t> nthreads_running(0);
std::condition_variable cv;
std::mutex cv_m;
- auto master_thread_id = tbb::this_tbb_thread::get_id();
+ auto master_thread_id = std::this_thread::get_id();
tbb::parallel_for(
tbb::blocked_range<size_t>(0, nthreads, 1),
[&nthreads_running, nthreads, &master_thread_id, &cv, &cv_m](const tbb::blocked_range<size_t> &range) {
@@ -226,7 +226,7 @@ void name_tbb_thread_pool_threads()
std::unique_lock<std::mutex> lk(cv_m);
cv.wait(lk, [&nthreads_running, nthreads]{return nthreads_running == nthreads;});
}
- auto thread_id = tbb::this_tbb_thread::get_id();
+ auto thread_id = std::this_thread::get_id();
if (thread_id == master_thread_id) {
// The calling thread runs the 0'th task.
assert(range.begin() == 0);
Index: PrusaSlicer-version_2.3.3/src/libslic3r/pchheader.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/pchheader.hpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/pchheader.hpp
@@ -93,12 +93,9 @@
#include <boost/thread.hpp>
#include <boost/version.hpp>
-#include <tbb/atomic.h>
#include <tbb/parallel_for.h>
#include <tbb/spin_mutex.h>
-#include <tbb/mutex.h>
#include <tbb/task_group.h>
-#include <tbb/task_scheduler_init.h>
#include <Eigen/Dense>
#include <Eigen/Geometry>
Index: PrusaSlicer-version_2.3.3/src/libslic3r/utils.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/utils.cpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/utils.cpp
@@ -43,7 +43,7 @@
#include <boost/nowide/convert.hpp>
#include <boost/nowide/cstdio.hpp>
-#include <tbb/task_scheduler_init.h>
+#include <tbb/global_control.h>
#if defined(__linux__) || defined(__GNUC__ )
#include <strings.h>
@@ -118,9 +118,7 @@ void trace(unsigned int level, const cha
void disable_multi_threading()
{
// Disable parallelization so the Shiny profiler works
- static tbb::task_scheduler_init *tbb_init = nullptr;
- if (tbb_init == nullptr)
- tbb_init = new tbb::task_scheduler_init(1);
+ tbb::global_control(tbb::global_control::max_allowed_parallelism, 1);
}
static std::string g_var_dir;
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/BackgroundSlicingProcess.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/BackgroundSlicingProcess.cpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/BackgroundSlicingProcess.cpp
@@ -465,7 +465,7 @@ void BackgroundSlicingProcess::schedule_
return;
// Guard against entering the export step before changing the export path.
- tbb::mutex::scoped_lock lock(m_print->state_mutex());
+ std::scoped_lock<std::mutex> lock(m_print->state_mutex());
this->invalidate_step(bspsGCodeFinalize);
m_export_path = path;
m_export_path_on_removable_media = export_path_on_removable_media;
@@ -478,7 +478,7 @@ void BackgroundSlicingProcess::schedule_
return;
// Guard against entering the export step before changing the export path.
- tbb::mutex::scoped_lock lock(m_print->state_mutex());
+ std::scoped_lock<std::mutex> lock(m_print->state_mutex());
this->invalidate_step(bspsGCodeFinalize);
m_export_path.clear();
m_upload_job = std::move(upload_job);
@@ -491,7 +491,7 @@ void BackgroundSlicingProcess::reset_exp
m_export_path.clear();
m_export_path_on_removable_media = false;
// invalidate_step expects the mutex to be locked.
- tbb::mutex::scoped_lock lock(m_print->state_mutex());
+ std::scoped_lock<std::mutex> lock(m_print->state_mutex());
this->invalidate_step(bspsGCodeFinalize);
}
}
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/InstanceCheck.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/InstanceCheck.hpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/InstanceCheck.hpp
@@ -13,7 +13,7 @@
#if __linux__
#include <boost/thread.hpp>
-#include <tbb/mutex.h>
+#include <mutex>
#include <condition_variable>
#endif // __linux__
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/Mouse3DController.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/Mouse3DController.cpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/Mouse3DController.cpp
@@ -66,7 +66,7 @@ void update_maximum(std::atomic<T>& maxi
void Mouse3DController::State::append_translation(const Vec3d& translation, size_t input_queue_max_size)
{
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
while (m_input_queue.size() >= input_queue_max_size)
m_input_queue.pop_front();
m_input_queue.emplace_back(QueueItem::translation(translation));
@@ -77,7 +77,7 @@ void Mouse3DController::State::append_tr
void Mouse3DController::State::append_rotation(const Vec3f& rotation, size_t input_queue_max_size)
{
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
while (m_input_queue.size() >= input_queue_max_size)
m_input_queue.pop_front();
m_input_queue.emplace_back(QueueItem::rotation(rotation.cast<double>()));
@@ -92,7 +92,7 @@ void Mouse3DController::State::append_ro
void Mouse3DController::State::append_button(unsigned int id, size_t /* input_queue_max_size */)
{
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
m_input_queue.emplace_back(QueueItem::buttons(id));
#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
update_maximum(input_queue_max_size_achieved, m_input_queue.size());
@@ -277,7 +277,7 @@ void Mouse3DController::device_attached(
#if ENABLE_CTRL_M_ON_WINDOWS
m_device_str = format_device_string(vid, pid);
if (auto it_params = m_params_by_device.find(m_device_str); it_params != m_params_by_device.end()) {
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params = m_params_ui = it_params->second;
}
else
@@ -295,7 +295,7 @@ void Mouse3DController::device_detached(
int pid = 0;
if (sscanf(device.c_str(), "\\\\?\\HID#VID_%x&PID_%x&", &vid, &pid) == 2) {
if (std::find(_3DCONNEXION_VENDORS.begin(), _3DCONNEXION_VENDORS.end(), vid) != _3DCONNEXION_VENDORS.end()) {
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params_by_device[format_device_string(vid, pid)] = m_params_ui;
}
}
@@ -307,12 +307,12 @@ void Mouse3DController::device_detached(
// Filter out mouse scroll events produced by the 3DConnexion driver.
bool Mouse3DController::State::process_mouse_wheel()
{
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
- if (m_mouse_wheel_counter == 0)
- // No 3DConnexion rotation has been captured since the last mouse scroll event.
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
+ if (m_mouse_wheel_counter == 0)
+ // No 3DConnexion rotation has been captured since the last mouse scroll event.
return false;
if (std::find_if(m_input_queue.begin(), m_input_queue.end(), [](const QueueItem &item){ return item.is_rotation(); }) != m_input_queue.end()) {
- // There is a rotation stored in the queue. Suppress one mouse scroll event.
+ // There is a rotation stored in the queue. Suppress one mouse scroll event.
-- m_mouse_wheel_counter;
return true;
}
@@ -329,7 +329,7 @@ bool Mouse3DController::State::apply(con
std::deque<QueueItem> input_queue;
{
// Atomically move m_input_queue to input_queue.
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
input_queue = std::move(m_input_queue);
m_input_queue.clear();
}
@@ -418,7 +418,7 @@ bool Mouse3DController::apply(Camera& ca
#if ENABLE_CTRL_M_ON_WINDOWS
#ifdef _WIN32
{
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
if (m_params_ui_changed) {
m_params = m_params_ui;
m_params_ui_changed = false;
@@ -447,7 +447,7 @@ void Mouse3DController::render_settings_
Params params_copy;
bool params_changed = false;
{
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
params_copy = m_params_ui;
}
@@ -565,7 +565,7 @@ void Mouse3DController::render_settings_
if (params_changed) {
// Synchronize front end parameters to back end.
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
auto pthis = const_cast<Mouse3DController*>(this);
#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
if (params_copy.input_queue_max_size != params_copy.input_queue_max_size)
@@ -586,7 +586,7 @@ void Mouse3DController::connected(std::s
m_device_str = device_name;
// Copy the parameters for m_device_str into the current parameters.
if (auto it_params = m_params_by_device.find(m_device_str); it_params != m_params_by_device.end()) {
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params = m_params_ui = it_params->second;
}
m_connected = true;
@@ -597,7 +597,7 @@ void Mouse3DController::disconnected()
// Copy the current parameters for m_device_str into the parameter database.
assert(m_connected == ! m_device_str.empty());
if (m_connected) {
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params_by_device[m_device_str] = m_params_ui;
m_device_str.clear();
m_connected = false;
@@ -621,7 +621,7 @@ bool Mouse3DController::handle_input(con
{
// Synchronize parameters between the UI thread and the background thread.
//FIXME is this necessary on OSX? Are these notifications triggered from the main thread or from a worker thread?
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
if (m_params_ui_changed) {
m_params = m_params_ui;
m_params_ui_changed = false;
@@ -733,7 +733,7 @@ void Mouse3DController::run()
for (;;) {
{
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
if (m_stop)
break;
if (m_params_ui_changed) {
@@ -998,7 +998,7 @@ bool Mouse3DController::connect_device()
#endif // ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
// Copy the parameters for m_device_str into the current parameters.
if (auto it_params = m_params_by_device.find(m_device_str); it_params != m_params_by_device.end()) {
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params = m_params_ui = it_params->second;
}
}
@@ -1023,7 +1023,7 @@ void Mouse3DController::disconnect_devic
BOOST_LOG_TRIVIAL(info) << "Disconnected device: " << m_device_str;
// Copy the current parameters for m_device_str into the parameter database.
{
- tbb::mutex::scoped_lock lock(m_params_ui_mutex);
+ std::scoped_lock<std::mutex> lock(m_params_ui_mutex);
m_params_by_device[m_device_str] = m_params_ui;
}
m_device_str.clear();
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/Mouse3DController.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/Mouse3DController.hpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/Mouse3DController.hpp
@@ -10,12 +10,12 @@
#include <queue>
#include <atomic>
+#include <mutex>
#include <thread>
#include <vector>
#include <chrono>
#include <condition_variable>
-#include <tbb/mutex.h>
namespace Slic3r {
@@ -85,7 +85,7 @@ class Mouse3DController
// m_input_queue is accessed by the background thread and by the UI thread. Access to m_input_queue
// is guarded with m_input_queue_mutex.
std::deque<QueueItem> m_input_queue;
- mutable tbb::mutex m_input_queue_mutex;
+ mutable std::mutex m_input_queue_mutex;
#ifdef WIN32
// When the 3Dconnexion driver is running the system gets, by default, mouse wheel events when rotations around the X axis are detected.
@@ -112,12 +112,12 @@ class Mouse3DController
#if ENABLE_3DCONNEXION_DEVICES_DEBUG_OUTPUT
Vec3d get_first_vector_of_type(unsigned int type) const {
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
auto it = std::find_if(m_input_queue.begin(), m_input_queue.end(), [type](const QueueItem& item) { return item.type_or_buttons == type; });
return (it == m_input_queue.end()) ? Vec3d::Zero() : it->vector;
}
size_t input_queue_size_current() const {
- tbb::mutex::scoped_lock lock(m_input_queue_mutex);
+ std::scoped_lock<std::mutex> lock(m_input_queue_mutex);
return m_input_queue.size();
}
std::atomic<size_t> input_queue_max_size_achieved;
@@ -133,7 +133,7 @@ class Mouse3DController
// UI thread will read / write this copy.
Params m_params_ui;
bool m_params_ui_changed { false };
- mutable tbb::mutex m_params_ui_mutex;
+ mutable std::mutex m_params_ui_mutex;
// This is a database of parametes of all 3DConnexion devices ever connected.
// This database is loaded from AppConfig on application start and it is stored to AppConfig on application exit.
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/RemovableDriveManager.cpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/RemovableDriveManager.cpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/RemovableDriveManager.cpp
@@ -84,7 +84,7 @@ void RemovableDriveManager::eject_drive(
this->update();
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
BOOST_LOG_TRIVIAL(info) << "Ejecting started";
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
auto it_drive_data = this->find_last_save_path_drive_data();
if (it_drive_data != m_current_drives.end()) {
// get handle to device
@@ -130,7 +130,7 @@ std::string RemovableDriveManager::get_r
this->update();
#endif // REMOVABLE_DRIVE_MANAGER_OS_CALLBACKS
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
if (m_current_drives.empty())
return std::string();
std::size_t found = path.find_last_of("\\");
@@ -146,7 +146,7 @@ std::string RemovableDriveManager::get_r
std::string RemovableDriveManager::get_removable_drive_from_path(const std::string& path)
{
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
std::size_t found = path.find_last_of("\\");
std::string new_path = path.substr(0, found);
int letter = PathGetDriveNumberW(boost::nowide::widen(new_path).c_str());
@@ -285,7 +285,7 @@ void RemovableDriveManager::eject_drive(
DriveData drive_data;
{
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
auto it_drive_data = this->find_last_save_path_drive_data();
if (it_drive_data == m_current_drives.end())
return;
@@ -341,7 +341,7 @@ void RemovableDriveManager::eject_drive(
if (success) {
// Remove the drive_data from m_current drives, searching by value, not by pointer, as m_current_drives may get modified during
// asynchronous execution on m_eject_thread.
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
auto it = std::find(m_current_drives.begin(), m_current_drives.end(), drive_data);
if (it != m_current_drives.end())
m_current_drives.erase(it);
@@ -361,7 +361,7 @@ std::string RemovableDriveManager::get_r
std::size_t found = path.find_last_of("/");
std::string new_path = found == path.size() - 1 ? path.substr(0, found) : path;
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
for (const DriveData &data : m_current_drives)
if (search_for_drives_internal::compare_filesystem_id(new_path, data.path))
return path;
@@ -377,7 +377,7 @@ std::string RemovableDriveManager::get_r
new_path = new_path.substr(0, found);
// check if same filesystem
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
for (const DriveData &drive_data : m_current_drives)
if (search_for_drives_internal::compare_filesystem_id(new_path, drive_data.path))
return drive_data.path;
@@ -452,7 +452,7 @@ RemovableDriveManager::RemovableDrivesSt
RemovableDriveManager::RemovableDrivesStatus out;
{
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
out.has_eject =
// Cannot control eject on Chromium.
platform_flavor() != PlatformFlavor::LinuxOnChromium &&
@@ -468,17 +468,17 @@ RemovableDriveManager::RemovableDrivesSt
// Update is called from thread_proc() and from most of the public methods on demand.
void RemovableDriveManager::update()
{
- tbb::mutex::scoped_lock inside_update_lock;
+ std::unique_lock<std::mutex> inside_update_lock(m_inside_update_mutex, std::defer_lock);
#ifdef _WIN32
// All wake up calls up to now are now consumed when the drive enumeration starts.
m_wakeup = false;
#endif // _WIN32
- if (inside_update_lock.try_acquire(m_inside_update_mutex)) {
+ if (inside_update_lock.try_lock()) {
// Got the lock without waiting. That means, the update was not running.
// Run the update.
std::vector<DriveData> current_drives = this->search_for_removable_drives();
// Post update events.
- tbb::mutex::scoped_lock lock(m_drives_mutex);
+ std::scoped_lock<std::mutex> lock(m_drives_mutex);
std::sort(current_drives.begin(), current_drives.end());
if (current_drives != m_current_drives) {
assert(m_callback_evt_handler);
@@ -489,7 +489,7 @@ void RemovableDriveManager::update()
} else {
// Acquiring the m_iniside_update lock failed, therefore another update is running.
// Just block until the other instance of update() finishes.
- inside_update_lock.acquire(m_inside_update_mutex);
+ inside_update_lock.lock();
}
}
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/RemovableDriveManager.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/RemovableDriveManager.hpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/RemovableDriveManager.hpp
@@ -5,7 +5,7 @@
#include <string>
#include <boost/thread.hpp>
-#include <tbb/mutex.h>
+#include <mutex>
#include <condition_variable>
// Custom wxWidget events
@@ -111,9 +111,9 @@ private:
// m_current_drives is guarded by m_drives_mutex
// sorted ascending by path
std::vector<DriveData> m_current_drives;
- mutable tbb::mutex m_drives_mutex;
+ mutable std::mutex m_drives_mutex;
// Locking the update() function to avoid that the function is executed multiple times.
- mutable tbb::mutex m_inside_update_mutex;
+ mutable std::mutex m_inside_update_mutex;
// Returns drive path (same as path in DriveData) if exists otherwise empty string.
std::string get_removable_drive_from_path(const std::string& path);
Index: PrusaSlicer-version_2.3.3/src/libslic3r/SLA/Concurrency.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/libslic3r/SLA/Concurrency.hpp
+++ PrusaSlicer-version_2.3.3/src/libslic3r/SLA/Concurrency.hpp
@@ -1,8 +1,9 @@
#ifndef SLA_CONCURRENCY_H
#define SLA_CONCURRENCY_H
+#include <mutex>
+
#include <tbb/spin_mutex.h>
-#include <tbb/mutex.h>
#include <tbb/parallel_for.h>
#include <tbb/parallel_reduce.h>
@@ -23,7 +24,7 @@ template<bool> struct _ccr {};
template<> struct _ccr<true>
{
using SpinningMutex = tbb::spin_mutex;
- using BlockingMutex = tbb::mutex;
+ using BlockingMutex = std::mutex;
template<class Fn, class It>
static IteratorOnly<It, void> loop_(const tbb::blocked_range<It> &range, Fn &&fn)
Index: PrusaSlicer-version_2.3.3/src/slic3r/GUI/BackgroundSlicingProcess.hpp
===================================================================
--- PrusaSlicer-version_2.3.3.orig/src/slic3r/GUI/BackgroundSlicingProcess.hpp
+++ PrusaSlicer-version_2.3.3/src/slic3r/GUI/BackgroundSlicingProcess.hpp
@@ -213,7 +213,7 @@ private:
State m_state = STATE_INITIAL;
PrintState<BackgroundSlicingProcessStep, bspsCount> m_step_state;
- mutable tbb::mutex m_step_state_mutex;
+ mutable std::mutex m_step_state_mutex;
bool set_step_started(BackgroundSlicingProcessStep step);
void set_step_done(BackgroundSlicingProcessStep step);
bool is_step_done(BackgroundSlicingProcessStep step) const;

View File

@ -1,3 +1,16 @@
-------------------------------------------------------------------
Fri Dec 24 14:39:28 UTC 2021 - Ben Greiner <code@bnavigator.de>
- Update to 2.4.0
* Big changelog since v2.3.3, most changes decribed in alpha and
beta release notes:
https://github.com/prusa3d/PrusaSlicer/releases
* Send system info: new dialog for telemetry. Opt-in.
- Drop patches
* PrusaSlicer-catch2upd.patch
* PrusaSlicer-issue6681-openvdb.patch
* PrusaSlicer-pr6590-updateTBB.patch
-------------------------------------------------------------------
Tue Nov 23 11:21:48 UTC 2021 - Ben Greiner <code@bnavigator.de>

View File

@ -17,21 +17,13 @@
Name: PrusaSlicer
Version: 2.3.3
Version: 2.4.0
Release: 0
Summary: G-code generator for 3D printers (RepRap, Makerbot, Ultimaker etc.)
License: AGPL-3.0-only
Group: Hardware/Printing
URL: https://www.prusa3d.com/prusaslicer/
Source0: https://github.com/prusa3d/PrusaSlicer/archive/version_%{version}.tar.gz#/%{name}-%{version}.tar.gz
# PATCH-FIX-UPSTREAM PrusaSlicer-issue6681-openvdb.patch -- gh#prusa3d/PrusaSlicer#6681
Patch0: https://github.com/prusa3d/PrusaSlicer/commit/e6507594fb6893156056c2123822a2b37f7f179d.patch#/PrusaSlicer-issue6681-openvdb.patch
# PATCH-FIX-UPSTREAM PrusaSlicer-catch2upd.patch -- gh#prusa3d/PrusaSlicer#6518
Patch1: https://github.com/prusa3d/PrusaSlicer/commit/60768d32486cf05635cc355cbdea906aa60b17a8.patch#/PrusaSlicer-catch2upd.patch
# PATCH-FIX-UPSTREAM PrusaSlicer-pr6590-updateTBB.patch - gh#prusa3d/PrusaSlicer#6590
Patch2: PrusaSlicer-pr6590-updateTBB.patch
# gh#prusa3d/PrusaSlicer#7332
Source1: https://raw.githubusercontent.com/theofficialgman/PrusaSlicer/TBB-Fix/cmake/modules/FindTBB.cmake
BuildRequires: blosc-devel
BuildRequires: cereal-devel
BuildRequires: cgal-devel >= 4.13.2
@ -58,6 +50,7 @@ BuildRequires: nlopt-devel
BuildRequires: openexr-devel
BuildRequires: openvdb-devel >= 5
BuildRequires: openvdb-tools
BuildRequires: pkgconfig
BuildRequires: tbb-devel
BuildRequires: update-desktop-files
BuildRequires: wxGTK3-devel >= 3.1
@ -76,8 +69,8 @@ It also works with Mach3, LinuxCNC and Machinekit controllers.
%if 0%{?suse_version}
sed -i 's/UNKNOWN/%{release}-%{?is_opensuse:open}SUSE-%{suse_version}/' version.inc
%endif
rm -r resources/data/flatpak
cp %{SOURCE1} cmake/modules/FindTBB.cmake
# this is not prusaslicer specific, space mouse users install it themselves
rm resources/udev/90-3dconnexion.rules
%build
# The build process really acquires that much memory per job. We are
@ -101,17 +94,6 @@ cp %{SOURCE1} cmake/modules/FindTBB.cmake
%install
%cmake_install
for res in 32 128 192; do
mkdir -p %{buildroot}%{_datadir}/icons/hicolor/${res}x${res}/apps/
ln -sr %{buildroot}%{_datadir}/%{name}/icons/%{name}_${res}px.png \
%{buildroot}%{_datadir}/icons/hicolor/${res}x${res}/apps/%{name}.png
ln -sr %{buildroot}%{_datadir}/%{name}/icons/%{name}-gcodeviewer_${res}px.png \
%{buildroot}%{_datadir}/icons/hicolor/${res}x${res}/apps/%{name}-gcodeviewer.png
done
mkdir -p %{buildroot}%{_datadir}/applications
mv %{buildroot}%{_datadir}/{PrusaSlicer/,}applications/PrusaSlicer.desktop
mv %{buildroot}%{_datadir}/{PrusaSlicer/,}applications/PrusaGcodeviewer.desktop
%suse_update_desktop_file -r PrusaSlicer Graphics 3DGraphics Science Engineering
%suse_update_desktop_file -r PrusaGcodeviewer Graphics 3DGraphics
@ -157,7 +139,7 @@ find %{buildroot}%{_datadir}/%{name}/localization -type d | sed '
%{_bindir}/prusa-slicer
%{_bindir}/prusa-gcodeviewer
%dir %{_datadir}/%{name}/
%{_datadir}/%{name}/{icons,models,profiles,shaders,udev}/
%{_datadir}/%{name}/{icons,models,profiles,shaders,udev,data,shapes}/
%{_datadir}/icons/hicolor/32x32/apps/%{name}.png
%{_datadir}/icons/hicolor/128x128/apps/%{name}.png
%{_datadir}/icons/hicolor/192x192/apps/%{name}.png