diff --git a/.github/workflows/build_deps.yml b/.github/workflows/build_deps.yml index d63a038ee..2bf4701bd 100644 --- a/.github/workflows/build_deps.yml +++ b/.github/workflows/build_deps.yml @@ -70,7 +70,7 @@ jobs: if: inputs.os == 'macos-12' working-directory: ${{ github.workspace }} run: | - brew install cmake git gettext automake + brew install cmake git gettext automake texinfo brew list mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }} mkdir -p ${{ github.workspace }}/deps/build_${{ inputs.arch }}/OrcaSlicer_dep_${{ inputs.arch }} @@ -88,7 +88,7 @@ jobs: libwayland-dev libxkbcommon-dev wayland-protocols extra-cmake-modules pkgconf \ libglu1-mesa-dev libcairo2-dev libgtk-3-dev libsoup2.4-dev libwebkit2gtk-4.0-dev \ libgstreamer1.0-dev libgstreamer-plugins-good1.0-dev libgstreamer-plugins-base1.0-dev \ - gstreamer1.0-plugins-bad libosmesa6-dev wget sudo autoconf curl libunwind-dev + gstreamer1.0-plugins-bad libosmesa6-dev wget sudo autoconf curl libunwind-dev texinfo mkdir -p ${{ github.workspace }}/deps/build mkdir -p ${{ github.workspace }}/deps/build/destdir sudo ./BuildLinux.sh -ur diff --git a/BuildLinux.sh b/BuildLinux.sh index 05f9c2a25..099cc0a89 100755 --- a/BuildLinux.sh +++ b/BuildLinux.sh @@ -78,7 +78,7 @@ then fi # Addtional Dev packages for OrcaSlicer -export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules" +export REQUIRED_DEV_PACKAGES="libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules texinfo" # libwebkit2gtk-4.1-dev ?? export DEV_PACKAGES_COUNT=$(echo ${REQUIRED_DEV_PACKAGES} | wc -w) if [ $(dpkg --get-selections | grep -E "$(echo ${REQUIRED_DEV_PACKAGES} | tr ' ' '|')" | wc -l) -lt ${DEV_PACKAGES_COUNT} ]; then diff --git a/CMakeLists.txt b/CMakeLists.txt index c530a9c3f..4640034c4 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -61,7 +61,6 @@ if (APPLE) if (CMAKE_MACOSX_BUNDLE) set(CMAKE_INSTALL_RPATH @executable_path/../Frameworks) endif() - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) SET(CMAKE_XCODE_ATTRIBUTE_PRODUCT_BUNDLE_IDENTIFIER "com.softfever3d.orca-slicer") message(STATUS "Orca: IS_CROSS_COMPILE: ${IS_CROSS_COMPILE}") @@ -316,7 +315,7 @@ if(WIN32) add_definitions(-D_USE_MATH_DEFINES -D_WIN32 -D_CRT_SECURE_NO_WARNINGS -D_SCL_SECURE_NO_WARNINGS) if(MSVC) # BOOST_ALL_NO_LIB: Avoid the automatic linking of Boost libraries on Windows. Rather rely on explicit linking. - add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x601 -DBOOST_SYSTEM_USE_UTF8 ) + add_definitions(-DBOOST_ALL_NO_LIB -DBOOST_USE_WINAPI_VERSION=0x602 -DBOOST_SYSTEM_USE_UTF8 ) # Force the source code encoding to UTF-8. See OrcaSlicer GH pull request #5583 add_compile_options("$<$:/utf-8>") add_compile_options("$<$:/utf-8>") diff --git a/README.md b/README.md index 6ed0bd2d6..43d89c66f 100644 --- a/README.md +++ b/README.md @@ -65,11 +65,12 @@ Orca Slicer's logo is designed by community member Justin Levine(@freejstnalxndr - Run `build_release.bat` in `x64 Native Tools Command Prompt for VS 2019` - Mac 64-bit - - Tools needed: Xcode, Cmake, git, gettext, libtool, automake, autoconf + - Tools needed: Xcode, Cmake, git, gettext, libtool, automake, autoconf, texinfo + - You can install most of them by running `brew install cmake gettext libtool automake autoconf texinfo` - run `build_release_macos.sh` - Ubuntu - - Dependencies **Will be auto installed with the shell script**: `libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git` + - Dependencies **Will be auto installed with the shell script**: `libmspack-dev libgstreamerd-3-dev libsecret-1-dev libwebkit2gtk-4.0-dev libosmesa6-dev libssl-dev libcurl4-openssl-dev eglexternalplatform-dev libudev-dev libdbus-1-dev extra-cmake-modules libgtk2.0-dev libglew-dev libudev-dev libdbus-1-dev cmake git texinfo` - run 'sudo ./BuildLinux.sh -u' - run './BuildLinux.sh -dsir' diff --git a/deps/Boost/Boost.cmake b/deps/Boost/Boost.cmake index 767ca563a..f3c23b77c 100644 --- a/deps/Boost/Boost.cmake +++ b/deps/Boost/Boost.cmake @@ -1,203 +1,25 @@ -include(ExternalProject) -# Use boost 1.78 for Windows, to support VS2022 -if (WIN32) - set(_boost_url "https://github.com/SoftFever/OrcaSlicer_deps/releases/download/boost/boost_1_78_0.tar.gz") - set(_boost_hash 94CED8B72956591C4775AE2207A9763D3600B30D9D7446562C552F0A14A63BE7) - set(_bootstrap_cmd bootstrap.bat) - set(_build_cmd b2.exe) -else() - set(_boost_url "https://github.com/SoftFever/OrcaSlicer_deps/releases/download/boost/boost_1_75_0.tar.gz") - set(_boost_hash AEB26F80E80945E82EE93E5939BAEBDCA47B9DEE80A07D3144BE1E1A6A66DD6A) - set(_bootstrap_cmd ./bootstrap.sh) - set(_build_cmd ./b2) -endif() - -set(_patch_command ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/common.jam ./tools/build/src/tools/common.jam) - -if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") - configure_file(${CMAKE_CURRENT_LIST_DIR}/user-config.jam boost-user-config.jam) - set(_boost_toolset gcc) - set(_patch_command ${_patch_command} && ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/boost-user-config.jam ./tools/build/src/tools/user-config.jam) -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") - # https://cmake.org/cmake/help/latest/variable/MSVC_VERSION.html - if (MSVC_VERSION EQUAL 1800) - # 1800 = VS 12.0 (v120 toolset) - set(_boost_toolset "msvc-12.0") - elseif (MSVC_VERSION EQUAL 1900) - # 1900 = VS 14.0 (v140 toolset) - set(_boost_toolset "msvc-14.0") - elseif (MSVC_VERSION LESS 1920) - # 1910-1919 = VS 15.0 (v141 toolset) - set(_boost_toolset "msvc-14.1") - elseif (MSVC_VERSION LESS 1930) - # 1920-1929 = VS 16.0 (v142 toolset) - set(_boost_toolset "msvc-14.2") - elseif (MSVC_VERSION LESS 1940) - # 1930-1939 = VS 17.0 (v143 toolset) - set(_boost_toolset "msvc-14.3") - else () - message(FATAL_ERROR "Unsupported MSVC version") +set(_context_abi_line "") +set(_context_arch_line "") +if (APPLE AND CMAKE_OSX_ARCHITECTURES) + if (CMAKE_OSX_ARCHITECTURES MATCHES "x86") + set(_context_abi_line "-DBOOST_CONTEXT_ABI:STRING=sysv") + elseif (CMAKE_OSX_ARCHITECTURES MATCHES "arm") + set (_context_abi_line "-DBOOST_CONTEXT_ABI:STRING=aapcs") endif () -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Clang") - if (WIN32) - set(_boost_toolset "clang-win") - else() - set(_boost_toolset "clang") - endif() -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "Intel") - set(_boost_toolset "intel") -elseif (CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang") - set(_boost_toolset "clang") -endif() - -message(STATUS "Deduced boost toolset: ${_boost_toolset} based on ${CMAKE_CXX_COMPILER_ID} compiler") - -set(_libs "") -foreach(_comp ${DEP_Boost_COMPONENTS}) - list(APPEND _libs "--with-${_comp}") -endforeach() - -if (BUILD_SHARED_LIBS) - set(_link shared) -else() - set(_link static) -endif() - -set(_bits "") -if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") - set(_bits 64) -elseif ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "4") - set(_bits 32) + set(_context_arch_line "-DBOOST_CONTEXT_ARCHITECTURE:STRING=${CMAKE_OSX_ARCHITECTURES}") endif () -include(ProcessorCount) -ProcessorCount(NPROC) -file(TO_NATIVE_PATH ${DESTDIR}/usr/local/ _prefix) - - -set(_boost_variants "") -if(CMAKE_BUILD_TYPE) - list(APPEND CMAKE_CONFIGURATION_TYPES ${CMAKE_BUILD_TYPE}) - list(REMOVE_DUPLICATES CMAKE_CONFIGURATION_TYPES) -endif() -list(FIND CMAKE_CONFIGURATION_TYPES "Release" _cfg_rel) -list(FIND CMAKE_CONFIGURATION_TYPES "RelWithDebInfo" _cfg_relwdeb) -list(FIND CMAKE_CONFIGURATION_TYPES "MinSizeRel" _cfg_minsizerel) -list(FIND CMAKE_CONFIGURATION_TYPES "Debug" _cfg_deb) - -if (_cfg_rel GREATER -1 OR _cfg_relwdeb GREATER -1 OR _cfg_minsizerel GREATER -1) - list(APPEND _boost_variants release) -endif() - -if (MSVC AND ${DEP_DEBUG} ) - list(APPEND _boost_variants debug) -endif() - -if (NOT _boost_variants) - set(_boost_variants release) -endif() - -if (IS_CROSS_COMPILE AND APPLE) - if (${CMAKE_OSX_ARCHITECTURES} MATCHES "arm") - message(STATUS "Compiling Boost for arm64.") - message(STATUS "Compiling Boost with toolset ${_boost_toolset}.") - message(STATUS "Compiling Boost with libs ${_libs}.") - message(STATUS "Compiling Boost with variant ${_boost_variants}.") - message(STATUS "Compiling Boost with _bootstrap_cmd ${_bootstrap_cmd}.") - message(STATUS "_boost_linkflags = ${_boost_linkflags}") - set(_arch_flags "-arch arm64") - set(_boost_linkflags "linkflags=${_arch_flags}") - message(STATUS "_cmake_args_osx_arch = '${_cmake_args_osx_arch}'") - elseif (${CMAKE_OSX_ARCHITECTURES} MATCHES "x86_64") - message(STATUS "Compiling Boost for x86_64.") - set(_arch_flags "-arch x86_64") - endif() - set(_boost_linkflags "linkflags=${_arch_flags}") -endif () - -set(_boost_flags "") -if(APPLE) - set(_boost_flags - "cflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "cxxflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "mflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET};" - "mmflags=-fPIC ${_arch_flags} -mmacosx-version-min=${DEP_OSX_TARGET}") -elseif (UNIX) - set(_boost_flags "cflags=-fPIC;cxxflags=-fPIC") -endif() - -set(_build_cmd ${_build_cmd} - ${_boost_flags} - ${_boost_linkflags} - -j${NPROC} - ${_libs} - --layout=versioned - --debug-configuration - toolset=${_boost_toolset} - address-model=${_bits} - link=${_link} - threading=multi - boost.locale.icu=off - --disable-icu - ${_boost_variants} - stage) - -set(_install_cmd ${_build_cmd} --prefix=${_prefix} install) - -if (NOT IS_CROSS_COMPILE OR NOT APPLE OR BUILD_SHARED_LIBS) - message(STATUS "Standard boost build with bootstrap command '${_bootstrap_cmd}'") - message(STATUS "Standard boost build with patch command '${_patch_command}'") - message(STATUS "Standard boost build with build command '${_build_cmd}'") - message(STATUS "Standard boost build with install command '${_install_cmd}'") -ExternalProject_Add( - dep_Boost - URL ${_boost_url} - URL_HASH SHA256=${_boost_hash} - DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost - CONFIGURE_COMMAND "${_bootstrap_cmd}" - PATCH_COMMAND ${_patch_command} - BUILD_COMMAND "${_build_cmd}" - BUILD_IN_SOURCE ON - INSTALL_COMMAND "${_install_cmd}" +orcaslicer_add_cmake_project(Boost + URL "https://github.com/boostorg/boost/releases/download/boost-1.84.0/boost-1.84.0.tar.gz" + URL_HASH SHA256=4d27e9efed0f6f152dc28db6430b9d3dfb40c0345da7342eaa5a987dde57bd95 + LIST_SEPARATOR | + CMAKE_ARGS + -DBOOST_EXCLUDE_LIBRARIES:STRING=contract|fiber|numpy|stacktrace|wave|test + -DBOOST_LOCALE_ENABLE_ICU:BOOL=OFF # do not link to libicu, breaks compatibility between distros + -DBUILD_TESTING:BOOL=OFF + "${_context_abi_line}" + "${_context_arch_line}" ) -else() - -ExternalProject_Add( - dep_Boost - URL ${_boost_url} - URL_HASH SHA256=${_boost_hash} - DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/Boost - CONFIGURE_COMMAND ./bootstrap.sh - --with-toolset=clang - --with-libraries=date_time,filesystem,iostreams,locale,log,regex,system,thread - "--prefix=${DESTDIR}/usr/local" -# PATCH_COMMAND ${_patch_command} - BUILD_COMMAND "${_build_cmd}" - BUILD_IN_SOURCE ON - INSTALL_COMMAND "${_install_cmd}" -) -endif() - -if ("${CMAKE_SIZEOF_VOID_P}" STREQUAL "8") - message(STATUS "Patch the boost::polygon library with a custom one.") - # Patch the boost::polygon library with a custom one. - ExternalProject_Add(dep_boost_polygon - EXCLUDE_FROM_ALL ON - # GIT_REPOSITORY "https://github.com/prusa3d/polygon" - # GIT_TAG prusaslicer_gmp - URL https://github.com/prusa3d/polygon/archive/refs/heads/prusaslicer_gmp.zip - URL_HASH SHA256=abeb9710f0a7069fb9b22181ae5c56f6066002f125db210e7ffb27032aed6824 - DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/boost_polygon - DEPENDS dep_Boost - CONFIGURE_COMMAND "" - BUILD_COMMAND "" - ${_cmake_args_osx_arch} - INSTALL_COMMAND ${CMAKE_COMMAND} -E copy_directory - "${CMAKE_CURRENT_BINARY_DIR}/dep_boost_polygon-prefix/src/dep_boost_polygon/include/boost/polygon" - "${DESTDIR}/usr/local/include/boost/polygon" - ) - # Only override boost::Polygon Voronoi implementation with Vojtech's GMP hacks on 64bit platforms. - list(APPEND _dep_list "dep_boost_polygon") -endif () \ No newline at end of file +set(DEP_Boost_DEPENDS ZLIB) \ No newline at end of file diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 8b693b28c..d8210f544 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -172,7 +172,6 @@ if (MSVC) endif () elseif (APPLE) message("OS X SDK Path: ${CMAKE_OSX_SYSROOT}") - set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version" FORCE) if (CMAKE_OSX_DEPLOYMENT_TARGET) set(DEP_OSX_TARGET "${CMAKE_OSX_DEPLOYMENT_TARGET}") message("OS X Deployment Target: ${DEP_OSX_TARGET}") diff --git a/deps/MPFR/MPFR.cmake b/deps/MPFR/MPFR.cmake index f8e95cc80..30ceca90b 100644 --- a/deps/MPFR/MPFR.cmake +++ b/deps/MPFR/MPFR.cmake @@ -26,8 +26,8 @@ else () endif () ExternalProject_Add(dep_MPFR - URL http://ftp.vim.org/ftp/gnu/mpfr/mpfr-3.1.6.tar.bz2 https://www.mpfr.org/mpfr-3.1.6/mpfr-3.1.6.tar.bz2 # mirrors are allowed - URL_HASH SHA256=cf4f4b2d80abb79e820e78c8077b6725bbbb4e8f41896783c899087be0e94068 + URL https://www.mpfr.org/mpfr-current/mpfr-4.2.1.tar.bz2 + URL_HASH SHA256=b9df93635b20e4089c29623b19420c4ac848a1b29df1cfd59f26cab0d2666aa0 DOWNLOAD_DIR ${DEP_DOWNLOAD_DIR}/MPFR BUILD_IN_SOURCE ON CONFIGURE_COMMAND autoreconf -f -i && diff --git a/src/libslic3r/CutSurface.cpp b/src/libslic3r/CutSurface.cpp index b2cf3d965..060bed62e 100644 --- a/src/libslic3r/CutSurface.cpp +++ b/src/libslic3r/CutSurface.cpp @@ -28,7 +28,7 @@ using namespace Slic3r; #include "ExPolygonsIndex.hpp" - +#include #include #include #include diff --git a/src/libslic3r/Format/bbs_3mf.cpp b/src/libslic3r/Format/bbs_3mf.cpp index 15aabd5f8..33bf5bee6 100644 --- a/src/libslic3r/Format/bbs_3mf.cpp +++ b/src/libslic3r/Format/bbs_3mf.cpp @@ -31,7 +31,6 @@ #include #include #include -#include #include #include #include @@ -1290,9 +1289,9 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) model.set_backup_path(m_backup_path); try { if (boost::filesystem::exists(model.get_backup_path() + "/origin.txt")) - boost::filesystem::load_string_file(model.get_backup_path() + "/origin.txt", m_origin_file); + load_string_file(model.get_backup_path() + "/origin.txt", m_origin_file); } catch (...) {} - boost::filesystem::save_string_file( + save_string_file( model.get_backup_path() + "/lock.txt", boost::lexical_cast(get_current_pid())); } @@ -1305,7 +1304,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) file_version = *m_bambuslicer_generator_version; // save for restore if (result && m_load_aux && !m_load_restore) { - boost::filesystem::save_string_file(model.get_backup_path() + "/origin.txt", filename); + save_string_file(model.get_backup_path() + "/origin.txt", filename); } if (m_load_restore && !result) // not clear failed backup data for later analyze model.set_backup_path("detach"); @@ -5544,7 +5543,7 @@ void PlateData::parse_filament_info(GCodeProcessorResult *result) return false; } if (!(store_params.strategy & SaveStrategy::Silence)) - boost::filesystem::save_string_file(store_params.model->get_backup_path() + "/origin.txt", filename); + save_string_file(store_params.model->get_backup_path() + "/origin.txt", filename); } return result; } @@ -8287,7 +8286,7 @@ bool has_restore_data(std::string & path, std::string& origin) } if (boost::filesystem::exists(path + "/lock.txt")) { std::string pid; - boost::filesystem::load_string_file(path + "/lock.txt", pid); + load_string_file(path + "/lock.txt", pid); try { if (get_process_name(boost::lexical_cast(pid)) == get_process_name(0)) { @@ -8304,7 +8303,7 @@ bool has_restore_data(std::string & path, std::string& origin) return false; try { if (boost::filesystem::exists(path + "/origin.txt")) - boost::filesystem::load_string_file(path + "/origin.txt", origin); + load_string_file(path + "/origin.txt", origin); } catch (...) { } diff --git a/src/libslic3r/MeshBoolean.cpp b/src/libslic3r/MeshBoolean.cpp index b05245d39..1021fb765 100644 --- a/src/libslic3r/MeshBoolean.cpp +++ b/src/libslic3r/MeshBoolean.cpp @@ -5,6 +5,7 @@ #include "libslic3r/format.hpp" #undef PI +#include // Include igl first. It defines "L" macro which then clashes with our localization #include #undef L diff --git a/src/libslic3r/Model.cpp b/src/libslic3r/Model.cpp index a8aecf178..afb7ab859 100644 --- a/src/libslic3r/Model.cpp +++ b/src/libslic3r/Model.cpp @@ -38,7 +38,6 @@ #include #include #include -#include #include #include @@ -873,7 +872,7 @@ std::string Model::get_backup_path() BOOST_LOG_TRIVIAL(info) << "create /Metadata in " << temp_path; boost::filesystem::create_directories(backup_path + "/Metadata"); BOOST_LOG_TRIVIAL(info) << "create /lock.txt in " << temp_path; - boost::filesystem::save_string_file(backup_path + "/lock.txt", + save_string_file(backup_path + "/lock.txt", boost::lexical_cast(get_current_pid())); } } catch (std::exception &ex) { diff --git a/src/libslic3r/Triangulation.cpp b/src/libslic3r/Triangulation.cpp index c75a53197..72275a409 100644 --- a/src/libslic3r/Triangulation.cpp +++ b/src/libslic3r/Triangulation.cpp @@ -4,6 +4,7 @@ ///|/ #include "Triangulation.hpp" #include "IntersectionPoints.hpp" +#include #include #include #include diff --git a/src/libslic3r/Utils.hpp b/src/libslic3r/Utils.hpp index 2a261476c..eb1599baf 100644 --- a/src/libslic3r/Utils.hpp +++ b/src/libslic3r/Utils.hpp @@ -650,6 +650,9 @@ inline std::string filter_characters(const std::string& str, const std::string& void copy_directory_recursively(const boost::filesystem::path &source, const boost::filesystem::path &target); +// Orca: Since 1.7.9 Boost deprecated save_string_file and load_string_file, copy and modified from boost 1.7.8 +void save_string_file(const boost::filesystem::path& p, const std::string& str); +void load_string_file(const boost::filesystem::path& p, std::string& str); } // namespace Slic3r diff --git a/src/libslic3r/utils.cpp b/src/libslic3r/utils.cpp index 7f4adfe16..387d36738 100644 --- a/src/libslic3r/utils.cpp +++ b/src/libslic3r/utils.cpp @@ -1527,4 +1527,22 @@ void copy_directory_recursively(const boost::filesystem::path &source, const boo return; } +void save_string_file(const boost::filesystem::path& p, const std::string& str) +{ + boost::nowide::ofstream file; + file.exceptions(std::ios_base::failbit | std::ios_base::badbit); + file.open(p.generic_string(), std::ios_base::binary); + file.write(str.c_str(), str.size()); +} + +void load_string_file(const boost::filesystem::path& p, std::string& str) +{ + boost::nowide::ifstream file; + file.exceptions(std::ios_base::failbit | std::ios_base::badbit); + file.open(p.generic_string(), std::ios_base::binary); + std::size_t sz = static_cast(boost::filesystem::file_size(p)); + str.resize(sz, '\0'); + file.read(&str[0], sz); +} + }; // namespace Slic3r diff --git a/src/slic3r/GUI/MediaPlayCtrl.cpp b/src/slic3r/GUI/MediaPlayCtrl.cpp index eae8942bc..0d3e01b4b 100644 --- a/src/slic3r/GUI/MediaPlayCtrl.cpp +++ b/src/slic3r/GUI/MediaPlayCtrl.cpp @@ -8,7 +8,6 @@ #include "MsgDialog.hpp" #include "DownloadProgressDialog.hpp" -#include #include #undef pid_t #include @@ -596,7 +595,7 @@ bool MediaPlayCtrl::start_stream_service(bool *need_install) file_url2 = wxURI(file_url2).BuildURI(); try { std::string configs; - boost::filesystem::load_string_file(file_ff_cfg, configs); + load_string_file(file_ff_cfg, configs); std::vector configss; boost::algorithm::split(configss, configs, boost::algorithm::is_any_of("\r\n")); configss.erase(std::remove(configss.begin(), configss.end(), std::string()), configss.end()); diff --git a/src/slic3r/Utils/PresetUpdater.cpp b/src/slic3r/Utils/PresetUpdater.cpp index a1efec715..98329c615 100644 --- a/src/slic3r/Utils/PresetUpdater.cpp +++ b/src/slic3r/Utils/PresetUpdater.cpp @@ -9,7 +9,6 @@ #include #include #include -#include #include #include #include @@ -819,9 +818,9 @@ void PresetUpdater::priv::sync_tooltip(std::string http_url, std::string languag fs::path cache_root = fs::path(data_dir()) / "resources/tooltip"; try { auto vf = cache_root / "common" / "version"; - if (fs::exists(vf)) fs::load_string_file(vf, common_version); + if (fs::exists(vf)) load_string_file(vf, common_version); vf = cache_root / language / "version"; - if (fs::exists(vf)) fs::load_string_file(vf, language_version); + if (fs::exists(vf)) load_string_file(vf, language_version); } catch (...) {} std::map resources { @@ -997,11 +996,11 @@ void PresetUpdater::priv::sync_printer_config(std::string http_url) auto cache_folder = data_dir_path / "ota" / "printers"; try { - boost::filesystem::load_string_file(config_folder / "version.txt", curr_version); + load_string_file(config_folder / "version.txt", curr_version); boost::algorithm::trim(curr_version); } catch (...) {} try { - boost::filesystem::load_string_file(cache_folder / "version.txt", cached_version); + load_string_file(cache_folder / "version.txt", cached_version); boost::algorithm::trim(cached_version); } catch (...) {} if (!cached_version.empty()) { @@ -1035,7 +1034,7 @@ void PresetUpdater::priv::sync_printer_config(std::string http_url) bool result = false; try { - boost::filesystem::load_string_file(cache_folder / "version.txt", cached_version); + load_string_file(cache_folder / "version.txt", cached_version); boost::algorithm::trim(cached_version); result = true; } catch (...) {} @@ -1154,11 +1153,11 @@ Updates PresetUpdater::priv::get_printer_config_updates(bool update) const std::string curr_version; std::string resc_version; try { - boost::filesystem::load_string_file(resc_folder / "version.txt", resc_version); + load_string_file(resc_folder / "version.txt", resc_version); boost::algorithm::trim(resc_version); } catch (...) {} try { - boost::filesystem::load_string_file(config_folder / "version.txt", curr_version); + load_string_file(config_folder / "version.txt", curr_version); boost::algorithm::trim(curr_version); } catch (...) {}