Warning, /graphics/digikam/project/bundles/3rdparty/ext_mosaicwall/mosaicwall-exiv2-cpp17.patch is written in an unsupported language. File is not indexed.

0001 diff --git a/CMakeLists.txt b/CMakeLists.txt
0002 index ec6d70e..b8d3cec 100644
0003 --- a/CMakeLists.txt
0004 +++ b/CMakeLists.txt
0005 @@ -1,17 +1,18 @@
0006  #
0007 -# Copyright (c) 2020, Gilles Caulier, <caulier dot gilles at gmail dot com>
0008 +# Copyright (c) 2020-2023, Gilles Caulier, <caulier dot gilles at gmail dot com>
0009  #
0010  # Redistribution and use is allowed according to the terms of the BSD license.
0011  # For details see the accompanying COPYING-CMAKE-SCRIPTS file.
0012  
0013 -project(ImageMosaicWall)
0014 +cmake_minimum_required(VERSION "3.16")
0015  
0016 -cmake_minimum_required(VERSION "3.1.0")
0017 +project(ImageMosaicWall)
0018  
0019 -option(ENABLE_DPLUGIN "Build digiKam plugin version of Image Mosaic Wall tool (default=OFF)" OFF)
0020 -option(BUILD_WITH_QT6 "Build with Qt6, else Qt5"                                             OFF)
0021 +option(ENABLE_DPLUGIN "Build digiKam plugin only of Image Mosaic Wall tool (default=OFF)" OFF)
0022 +option(BUILD_WITH_QT6 "Build with Qt6, else Qt5"                                          OFF)
0023  
0024  set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules ${CMAKE_MODULE_PATH})
0025 +
0026  if (ENABLE_DPLUGIN)
0027      include(MacroInstall)
0028  endif()
0029 @@ -24,6 +25,12 @@ endif()
0030  
0031  include(FeatureSummary)
0032  
0033 +if(MSVC)
0034 +    add_compile_options(/utf-8)
0035 +    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Zc:__cplusplus")
0036 +    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /permissive-")
0037 +endif()
0038 +
0039  set(CMAKE_CXX_STANDARD 17)
0040  
0041  if(CMAKE_VERSION VERSION_LESS "3.7.0")
0042 @@ -34,7 +41,6 @@ set(CMAKE_AUTOMOC ON)
0043  set(CMAKE_AUTORCC ON)
0044  set(CMAKE_AUTOUIC ON)
0045  
0046 -
0047  if(BUILD_WITH_QT6)
0048  
0049      find_package(Qt6 "6.5.0" REQUIRED
0050 @@ -63,10 +69,29 @@ endif()
0051  
0052  find_package(Threads)
0053  
0054 -find_package(exiv2 REQUIRED)
0055 +find_package(exiv2lib REQUIRED CONFIG NAMES exiv2)
0056 +
0057 +if(exiv2lib_FOUND)
0058 +
0059 +    message(STATUS "Found Exiv2 version ${exiv2lib_VERSION}")
0060 +
0061 +    # Work around the cmake export rules from Exiv2 since 0.28
0062 +
0063 +    if("${exiv2lib_VERSION}" VERSION_GREATER "0.27.99")
0064 +
0065 +        set(exiv2lib_LIBRARIES Exiv2::exiv2lib)
0066 +
0067 +    else()
0068 +
0069 +        set(exiv2lib_LIBRARIES exiv2lib)
0070 +
0071 +    endif()
0072 +
0073 +    message(STATUS "Exiv2 libraries: ${exiv2lib_LIBRARIES}")
0074  
0075 -set_package_properties("exiv2"     PROPERTIES
0076 -                       DESCRIPTION "Required to build digiKam"
0077 +endif()
0078 +
0079 +set_package_properties(exiv2lib PROPERTIES
0080                         URL         "https://www.exiv2.org"
0081                         TYPE        RECOMMENDED
0082                         PURPOSE     "Library to manage image metadata"
0083 @@ -74,8 +99,7 @@ set_package_properties("exiv2"     PROPERTIES
0084  
0085  include(i18nUtils)
0086  
0087 -include_directories($<TARGET_PROPERTY:exiv2lib,INTERFACE_INCLUDE_DIRECTORIES>
0088 -                    $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Widgets,INTERFACE_INCLUDE_DIRECTORIES>
0089 +include_directories($<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Widgets,INTERFACE_INCLUDE_DIRECTORIES>
0090                      $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Core,INTERFACE_INCLUDE_DIRECTORIES>
0091                      $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Gui,INTERFACE_INCLUDE_DIRECTORIES>
0092                      $<TARGET_PROPERTY:Qt${QT_VERSION_MAJOR}::Concurrent,INTERFACE_INCLUDE_DIRECTORIES>
0093 @@ -93,7 +117,6 @@ set(imagemosaicwall_core_SRCS ${CMAKE_SOURCE_DIR}/mainwindow.cpp
0094                                ${i18n_QM}
0095  )
0096  
0097 -
0098  if(Qt6_FOUND)
0099  
0100      qt6_wrap_ui(imagemosaicwall_core_SRCS ${CMAKE_SOURCE_DIR}/mainwindow.ui
0101 @@ -119,47 +142,54 @@ set(libimagemosaicwall_core_SRCS
0102  
0103  add_library(imagemosaicwallcore STATIC ${libimagemosaicwall_core_SRCS})
0104  
0105 +target_link_libraries(imagemosaicwallcore
0106 +                      PUBLIC
0107 +                      ${exiv2lib_LIBRARIES}
0108 +)
0109 +
0110  if(NOT MSVC)
0111      target_compile_options(imagemosaicwallcore PRIVATE -fPIC)
0112  endif()
0113  
0114 -if(APPLE)
0115 -  add_executable(ImageMosaicWall MACOSX_BUNDLE ${OSX_APP_ICON} ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
0116 -else()
0117 -  add_executable(ImageMosaicWall ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
0118 -endif()
0119 +if(NOT ENABLE_DPLUGIN)
0120  
0121 -target_link_libraries(ImageMosaicWall
0122 +    if(APPLE)
0123 +        add_executable(ImageMosaicWall MACOSX_BUNDLE ${OSX_APP_ICON} ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
0124 +    else()
0125 +        add_executable(ImageMosaicWall ${CMAKE_CURRENT_SOURCE_DIR}/main.cpp)
0126 +    endif()
0127  
0128 -                      imagemosaicwallcore
0129 +    target_link_libraries(ImageMosaicWall
0130  
0131 -                      Qt${QT_VERSION_MAJOR}::Core
0132 -                      Qt${QT_VERSION_MAJOR}::Widgets
0133 -                      Qt${QT_VERSION_MAJOR}::Gui
0134 -                      Qt${QT_VERSION_MAJOR}::Concurrent
0135 +                          imagemosaicwallcore
0136  
0137 -                      exiv2lib
0138 -                      ${CMAKE_THREAD_LIBS_INIT}
0139 -)
0140 +                          Qt${QT_VERSION_MAJOR}::Core
0141 +                          Qt${QT_VERSION_MAJOR}::Widgets
0142 +                          Qt${QT_VERSION_MAJOR}::Gui
0143 +                          Qt${QT_VERSION_MAJOR}::Concurrent
0144 +
0145 +                          ${CMAKE_THREAD_LIBS_INIT}
0146 +    )
0147 +
0148 +    if(APPLE)
0149 +        set(APPS "\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app")
0150 +        set(DIRS "\${CMAKE_INSTALL_PREFIX}/share")
0151  
0152 -if(APPLE)
0153 -  set(APPS "\${CMAKE_INSTALL_PREFIX}/${PROJECT_NAME}.app")
0154 -  set(DIRS "\${CMAKE_INSTALL_PREFIX}/share")
0155 +        install(TARGETS ${PROJECT_NAME}
0156 +                BUNDLE DESTINATION . COMPONENT Runtime
0157 +                RUNTIME DESTINATION bin COMPONENT Runtime)
0158  
0159 -  install(TARGETS ${PROJECT_NAME}
0160 -    BUNDLE DESTINATION . COMPONENT Runtime
0161 -    RUNTIME DESTINATION bin COMPONENT Runtime
0162 -  )
0163 +        install(CODE "
0164 +            include(BundleUtilities)
0165 +            fixup_bundle(\"${APPS}\"  \"\"  \"${DIRS}\")
0166 +            " COMPONENT Runtime)
0167 +    else()
0168 +        install(TARGETS ImageMosaicWall RUNTIME DESTINATION bin)
0169 +    endif()
0170  
0171 -  install(CODE "
0172 -    include(BundleUtilities)
0173 -    fixup_bundle(\"${APPS}\"  \"\"  \"${DIRS}\")
0174 -  " COMPONENT Runtime)
0175  else()
0176 -  install(TARGETS ImageMosaicWall RUNTIME DESTINATION bin)
0177 -endif()
0178  
0179 -if (ENABLE_DPLUGIN)
0180      add_subdirectory(dplugin)
0181      MACRO_ADD_UNINSTALL_TARGET()
0182 +
0183  endif()
0184 diff --git a/dplugin/CMakeLists.txt b/dplugin/CMakeLists.txt
0185 index 2842f45..f882de8 100644
0186 --- a/dplugin/CMakeLists.txt
0187 +++ b/dplugin/CMakeLists.txt
0188 @@ -35,8 +35,6 @@ target_link_libraries(Generic_ImageMosaicWall_Plugin
0189                        Qt${QT_VERSION_MAJOR}::Widgets
0190                        Qt${QT_VERSION_MAJOR}::Gui
0191                        Qt${QT_VERSION_MAJOR}::Concurrent
0192 -
0193 -                      exiv2lib
0194  )
0195  
0196  MACRO_ADD_PLUGIN_INSTALL_TARGET(Generic_ImageMosaicWall_Plugin generic)
0197 diff --git a/imageprocessing.cpp b/imageprocessing.cpp
0198 index 407d943..b4609a8 100644
0199 --- a/imageprocessing.cpp
0200 +++ b/imageprocessing.cpp
0201 @@ -1,5 +1,6 @@
0202  #include "imageprocessing.h"
0203  #include <algorithm>
0204 +#include <cstdlib>
0205  #include <QDebug>
0206  #include <QImage>
0207  #include <QImageReader>
0208 @@ -18,6 +19,18 @@
0209  #   define kerErrorMessage ErrorCode::kerErrorMessage
0210  #endif
0211  
0212 +template<class RandomIt>
0213 +void my_random_shuffle(RandomIt first, RandomIt last)
0214 +{
0215 +    typedef typename std::iterator_traits<RandomIt>::difference_type diff_t;
0216 +
0217 +    for (diff_t i = last - first - 1; i > 0; --i)
0218 +    {
0219 +        using std::swap;
0220 +        swap(first[i], first[std::rand() % (i + 1)]);
0221 +    }
0222 +}
0223 +
0224  ImageProcessing::ImageProcessing(QObject *parent)
0225      : QObject(parent)
0226      , m_skipBackgroundProcess(false)
0227 @@ -189,7 +202,7 @@ void ImageProcessing::calculateMosaicPositions(const QSize gridSize, const int s
0228      for (uint32_t i = startPos; i < startPos + length; ++i)
0229          positions.push_back(i);
0230  
0231 -    std::random_shuffle(positions.begin(), positions.end());
0232 +    my_random_shuffle(positions.begin(), positions.end());
0233      for (auto pos : positions)
0234      {
0235          if (m_skipBackgroundProcess)