From b0318c36beded5cbef1e26f7297f6e018fcfb49c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Luis=20D=C3=ADaz=20M=C3=A1s?= Date: Sun, 9 Jan 2022 20:09:34 +0100 Subject: [PATCH] Upgrade C++ standard to c++17 (#2052) * Enable C++17 and use new inline specifier for const variable members * Silence deprecation warning on MSVC * Disable samples by default * improvements after review --- .github/workflows/on_PR_linux_fuzz.yml | 20 ++++++-- .github/workflows/on_PR_linux_matrix.yml | 15 +++++- .../workflows/on_PR_linux_special_buils.yml | 34 +++++++++++-- .github/workflows/on_PR_mac_matrix.yml | 16 ++++++- .github/workflows/on_PR_windows_matrix.yml | 1 + .github/workflows/on_push_BasicWinLinMac.yml | 48 ++++++++++++++++--- .../workflows/on_push_ExtraJobsForMain.yml | 15 +++++- CMakeLists.txt | 2 +- cmake/compilerFlags.cmake | 8 +--- include/exiv2/jpgimage.hpp | 10 ++-- samples/Jzon.cpp | 4 ++ src/jpgimage.cpp | 5 -- 12 files changed, 140 insertions(+), 38 deletions(-) diff --git a/.github/workflows/on_PR_linux_fuzz.yml b/.github/workflows/on_PR_linux_fuzz.yml index b4a571cb..8b1a810d 100644 --- a/.github/workflows/on_PR_linux_fuzz.yml +++ b/.github/workflows/on_PR_linux_fuzz.yml @@ -16,12 +16,24 @@ jobs: steps: - uses: actions/checkout@v2 - name: install dependencies - run: sudo ./ci/install_dependencies.sh + run: | + sudo ./ci/install_dependencies.sh + sudo apt-get install ninja-build + - name: build and compile run: | - mkdir build && cd build - cmake -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_CXX_COMPILER=$(which clang++) -DEXIV2_BUILD_FUZZ_TESTS=ON -DEXIV2_TEAM_USE_SANITIZERS=ON .. - make -j $(nproc) + mkdir build && cd build && \ + cmake -GNinja -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DCMAKE_CXX_COMPILER=$(which clang++) \ + -DEXIV2_BUILD_FUZZ_TESTS=ON \ + -DEXIV2_TEAM_USE_SANITIZERS=ON \ + .. && \ + cmake --build . - name: Fuzz run: | diff --git a/.github/workflows/on_PR_linux_matrix.yml b/.github/workflows/on_PR_linux_matrix.yml index 0a39b5f1..d47eb538 100644 --- a/.github/workflows/on_PR_linux_matrix.yml +++ b/.github/workflows/on_PR_linux_matrix.yml @@ -36,8 +36,19 @@ jobs: - name: Build run: | - cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_INSTALL_PREFIX=install .. + cd build && \ + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ + -DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + .. && \ cmake --build . - name: Install diff --git a/.github/workflows/on_PR_linux_special_buils.yml b/.github/workflows/on_PR_linux_special_buils.yml index d081566d..ddb7243c 100644 --- a/.github/workflows/on_PR_linux_special_buils.yml +++ b/.github/workflows/on_PR_linux_special_buils.yml @@ -114,8 +114,21 @@ jobs: - name: Build run: | - cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DBUILD_WITH_COVERAGE=OFF -DEXIV2_TEAM_USE_SANITIZERS=ON -DCMAKE_INSTALL_PREFIX=install .. + cd build && \ + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DBUILD_WITH_COVERAGE=OFF \ + -DEXIV2_TEAM_USE_SANITIZERS=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + .. && \ cmake --build . - name: Tests @@ -150,8 +163,21 @@ jobs: - name: Build run: | - cd build - cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DBUILD_WITH_COVERAGE=ON -DEXIV2_BUILD_DOC=ON -DEXIV2_ENABLE_NLS=ON -DCMAKE_CXX_FLAGS="-DEXIV2_DEBUG_MESSAGES" .. + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DBUILD_WITH_COVERAGE=ON \ + -DEXIV2_BUILD_DOC=ON \ + -DEXIV2_ENABLE_NLS=ON \ + -DCMAKE_CXX_FLAGS="-DEXIV2_DEBUG_MESSAGES" \ + .. && \ make -j - name: Generate documentation diff --git a/.github/workflows/on_PR_mac_matrix.yml b/.github/workflows/on_PR_mac_matrix.yml index 3972bd24..48806824 100644 --- a/.github/workflows/on_PR_mac_matrix.yml +++ b/.github/workflows/on_PR_mac_matrix.yml @@ -30,8 +30,20 @@ jobs: - name: Build run: | - mkdir build && cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=${{matrix.build_type}} -DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_INSTALL_PREFIX=install -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations" .. + mkdir build && cd build && \ + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ + -DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations" \ + .. && \ cmake --build . - name: Install diff --git a/.github/workflows/on_PR_windows_matrix.yml b/.github/workflows/on_PR_windows_matrix.yml index 6828769c..9e8cf6bf 100644 --- a/.github/workflows/on_PR_windows_matrix.yml +++ b/.github/workflows/on_PR_windows_matrix.yml @@ -134,6 +134,7 @@ jobs: -DCMAKE_CXX_FLAGS=-Wno-deprecated \ -DCMAKE_BUILD_TYPE=${{matrix.build_type}} \ -DBUILD_SHARED_LIBS=${{matrix.shared_libraries}} \ + -DEXIV2_BUILD_SAMPLES=ON \ -DEXIV2_ENABLE_NLS=ON \ -DEXIV2_ENABLE_WIN_UNICODE=ON \ -DEXIV2_ENABLE_WEBREADY=ON \ diff --git a/.github/workflows/on_push_BasicWinLinMac.yml b/.github/workflows/on_push_BasicWinLinMac.yml index a7597e5d..83c9ff65 100644 --- a/.github/workflows/on_push_BasicWinLinMac.yml +++ b/.github/workflows/on_push_BasicWinLinMac.yml @@ -44,9 +44,20 @@ jobs: - name: Build run: | - cd build - cmake -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DEXIV2_ENABLE_NLS=OFF -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_WIN_UNICODE=OFF -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_INSTALL_PREFIX=install .. - cmake --build . + cmake -GNinja ` + -DCMAKE_BUILD_TYPE=Release ` + -DBUILD_SHARED_LIBS=ON ` + -DEXIV2_BUILD_SAMPLES=ON ` + -DEXIV2_ENABLE_NLS=OFF ` + -DEXIV2_ENABLE_PNG=ON ` + -DEXIV2_ENABLE_WEBREADY=ON ` + -DEXIV2_ENABLE_BMFF=ON ` + -DEXIV2_BUILD_UNIT_TESTS=ON ` + -DEXIV2_ENABLE_WIN_UNICODE=OFF ` + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON ` + -DCMAKE_INSTALL_PREFIX=install .. ` + -S . -B build && ` + cmake --build build - name: Test @@ -76,8 +87,19 @@ jobs: - name: build and compile run: | - cd build - cmake -GNinja -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON .. + cd build && \ + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + .. && \ cmake --build . - name: Test @@ -106,8 +128,20 @@ jobs: - name: build and compile run: | - mkdir build && cd build - cmake -GNinja -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DCMAKE_INSTALL_PREFIX=install -DCMAKE_BUILD_TYPE=Release -DBUILD_SHARED_LIBS=ON -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations" .. + mkdir build && cd build && \ + cmake -GNinja \ + -DCMAKE_BUILD_TYPE=Release \ + -DBUILD_SHARED_LIBS=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + -DCMAKE_CXX_FLAGS="-Wno-deprecated-declarations" \ + .. && \ cmake --build . - name: Test diff --git a/.github/workflows/on_push_ExtraJobsForMain.yml b/.github/workflows/on_push_ExtraJobsForMain.yml index 3dc9df2d..e58131ca 100644 --- a/.github/workflows/on_push_ExtraJobsForMain.yml +++ b/.github/workflows/on_push_ExtraJobsForMain.yml @@ -33,8 +33,19 @@ jobs: - name: Build run: | - cd build - cmake -DCMAKE_BUILD_TYPE=Debug -DBUILD_SHARED_LIBS=ON -DEXIV2_ENABLE_PNG=ON -DEXIV2_ENABLE_WEBREADY=ON -DEXIV2_ENABLE_CURL=ON -DEXIV2_BUILD_UNIT_TESTS=ON -DEXIV2_ENABLE_BMFF=ON -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON -DBUILD_WITH_COVERAGE=ON -DCMAKE_INSTALL_PREFIX=install .. + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Debug \ + -DBUILD_SHARED_LIBS=ON \ + -DEXIV2_BUILD_SAMPLES=ON \ + -DEXIV2_ENABLE_PNG=ON \ + -DEXIV2_ENABLE_WEBREADY=ON \ + -DEXIV2_ENABLE_CURL=ON \ + -DEXIV2_BUILD_UNIT_TESTS=ON \ + -DEXIV2_ENABLE_BMFF=ON \ + -DEXIV2_TEAM_WARNINGS_AS_ERRORS=ON \ + -DBUILD_WITH_COVERAGE=ON \ + -DCMAKE_INSTALL_PREFIX=install \ + .. && \ make -j - name: Tests + Upload coverage diff --git a/CMakeLists.txt b/CMakeLists.txt index 98671c33..c2158f77 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -32,7 +32,7 @@ option( EXIV2_ENABLE_WEBREADY "Build webready support into library" option( EXIV2_ENABLE_CURL "USE Libcurl for HttpIo (WEBREADY)" OFF ) option( EXIV2_ENABLE_BMFF "Build with BMFF support" ON ) -option( EXIV2_BUILD_SAMPLES "Build sample applications" ON ) +option( EXIV2_BUILD_SAMPLES "Build sample applications" OFF ) option( EXIV2_BUILD_EXIV2_COMMAND "Build exiv2 command-line executable" ON ) option( EXIV2_BUILD_UNIT_TESTS "Build unit tests" OFF ) option( EXIV2_BUILD_FUZZ_TESTS "Build fuzz tests (libFuzzer)" OFF ) diff --git a/cmake/compilerFlags.cmake b/cmake/compilerFlags.cmake index 64717d11..4d145116 100644 --- a/cmake/compilerFlags.cmake +++ b/cmake/compilerFlags.cmake @@ -1,13 +1,9 @@ # These flags applies to exiv2lib, the applications, and to the xmp code include(CheckCXXCompilerFlag) -set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -if (CYGWIN) - set(CMAKE_CXX_EXTENSIONS ON) -else() - set(CMAKE_CXX_EXTENSIONS OFF) -endif() +set(CMAKE_CXX_EXTENSIONS ON) if ( MINGW OR UNIX OR MSYS ) # MINGW, Linux, APPLE, CYGWIN if (${CMAKE_CXX_COMPILER_ID} STREQUAL GNU) diff --git a/include/exiv2/jpgimage.hpp b/include/exiv2/jpgimage.hpp index f317c685..517affd8 100644 --- a/include/exiv2/jpgimage.hpp +++ b/include/exiv2/jpgimage.hpp @@ -49,11 +49,11 @@ namespace Exiv2 { */ struct EXIV2API Photoshop { // Todo: Public for now - static const char* const ps3Id_; //!< %Photoshop marker - static const std::array irbId_; //!< %Photoshop IRB markers - static const char* const bimId_; //!< %Photoshop IRB marker (deprecated) - static const uint16_t iptc_; //!< %Photoshop IPTC marker - static const uint16_t preview_; //!< %Photoshop preview marker + static constexpr std::array irbId_{"8BIM", "AgHg", "DCSR", "PHUT"}; //!< %Photoshop IRB markers + inline static const char* ps3Id_ = "Photoshop 3.0\0"; //!< %Photoshop marker + inline static const char* bimId_ = "8BIM"; //!< %Photoshop IRB marker (deprecated) + inline static const uint16_t iptc_ = 0x0404; //!< %Photoshop IPTC marker + inline static const uint16_t preview_ = 0x040c; //!< %Photoshop preview marker /*! @brief Checks an IRB diff --git a/samples/Jzon.cpp b/samples/Jzon.cpp index 68f22027..52861f3d 100644 --- a/samples/Jzon.cpp +++ b/samples/Jzon.cpp @@ -25,6 +25,10 @@ THE SOFTWARE. #define JzonAPI __declspec(dllexport) #endif +#ifdef _MSC_VER +#define _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS +#endif + #include "Jzon.h" #include diff --git a/src/jpgimage.cpp b/src/jpgimage.cpp index 5865d25c..d5113cf1 100644 --- a/src/jpgimage.cpp +++ b/src/jpgimage.cpp @@ -88,11 +88,6 @@ namespace Exiv2 { constexpr const char* JpegBase::xmpId_ = "http://ns.adobe.com/xap/1.0/\0"; constexpr const char* JpegBase::iccId_ = "ICC_PROFILE\0"; - constexpr const char* Photoshop::ps3Id_ = "Photoshop 3.0\0"; - constexpr std::array Photoshop::irbId_{"8BIM", "AgHg", "DCSR", "PHUT"}; - constexpr const char* Photoshop::bimId_ = "8BIM"; // deprecated - constexpr uint16_t Photoshop::iptc_ = 0x0404; - constexpr uint16_t Photoshop::preview_ = 0x040c; static inline bool inRange(int lo,int value, int hi) {