# HG changeset patch # User Alain Mazy # Date 1562661044 -7200 # Node ID 7fc9dd4882ec5b86b6b41f05252bc84ccf551ca4 # Parent fbe22748cd9cf86143ff8f8974c835e4fcdcf319# Parent cbbe0bb80bd46e8cbf47f8474efe4b2c07387824 merge diff -r fbe22748cd9c -r 7fc9dd4882ec Core/Toolbox.cpp --- a/Core/Toolbox.cpp Tue Jul 09 10:30:30 2019 +0200 +++ b/Core/Toolbox.cpp Tue Jul 09 10:30:44 2019 +0200 @@ -144,6 +144,10 @@ +#if defined(__unix__) && ORTHANC_SANDBOXED != 1 +# include "SystemToolbox.h" // Check out "InitializeGlobalLocale()" +#endif + namespace Orthanc @@ -1416,8 +1420,6 @@ static bool SetGlobalLocale(const char* locale) { - globalLocale_.reset(NULL); - try { if (locale == NULL) @@ -1431,8 +1433,12 @@ globalLocale_.reset(new std::locale(locale)); } } - catch (std::runtime_error&) + catch (std::runtime_error& e) { + LOG(ERROR) << "Cannot set globale locale to " + << (locale ? std::string(locale) : "(null)") + << ": " << e.what(); + globalLocale_.reset(NULL); } return (globalLocale_.get() != NULL); @@ -1538,6 +1544,23 @@ { InitializeIcu(); +#if defined(__unix__) && ORTHANC_SANDBOXED != 1 + static const char* LOCALTIME = "/etc/localtime"; + + if (!SystemToolbox::IsExistingFile(LOCALTIME)) + { + // Check out file + // "boost_1_69_0/libs/locale/src/icu/time_zone.cpp": Direct + // access is made to this file if ICU is not used. Crash arises + // in Boost if the file is a symbolic link to a non-existing + // file (such as in Ubuntu 16.04 base Docker image). + throw OrthancException( + ErrorCode_InternalError, + "On UNIX-like systems, the file " + std::string(LOCALTIME) + + " must be present on the filesystem (install \"tzdata\" package on Debian)"); + } +#endif + // Make Orthanc use English, United States locale // Linux: use "en_US.UTF-8" // Windows: use "" diff -r fbe22748cd9c -r 7fc9dd4882ec LinuxCompilation.txt --- a/LinuxCompilation.txt Tue Jul 09 10:30:30 2019 +0200 +++ b/LinuxCompilation.txt Tue Jul 09 10:30:44 2019 +0200 @@ -145,6 +145,30 @@ # ninja +SUPPORTED - Ubuntu 18.04 LTS +---------------------------- + +# sudo apt-get install build-essential unzip cmake mercurial \ + uuid-dev libcurl4-openssl-dev liblua5.3-0-dev \ + libgtest-dev libpng-dev libsqlite3-dev libssl-dev libjpeg-dev \ + zlib1g-dev libdcmtk2-dev libboost-all-dev libwrap0-dev \ + libcharls-dev libjsoncpp-dev libpugixml-dev locales + +# cmake -DALLOW_DOWNLOADS=ON \ + -DUSE_GOOGLE_TEST_DEBIAN_PACKAGE=ON \ + -DUSE_SYSTEM_CIVETWEB=OFF \ + -DDCMTK_LIBRARIES=dcmjpls \ + -DCMAKE_BUILD_TYPE=Release \ + ~/Orthanc +# make + + +NB: A suitable environment for locales can be setup as follows: + +# echo "en_US.UTF-8 UTF-8" > /etc/locale.gen +# locale-gen + + SUPPORTED - Fedora 20-22 ------------------------ diff -r fbe22748cd9c -r 7fc9dd4882ec Resources/CMake/Compiler.cmake --- a/Resources/CMake/Compiler.cmake Tue Jul 09 10:30:30 2019 +0200 +++ b/Resources/CMake/Compiler.cmake Tue Jul 09 10:30:44 2019 +0200 @@ -164,7 +164,7 @@ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MINGW_NO_WARNINGS}") # This is a patch for MinGW64 - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++") + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++") SET(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--allow-multiple-definition -static-libgcc -static-libstdc++") CHECK_LIBRARY_EXISTS(winpthread pthread_create "" HAVE_WIN_PTHREAD)