mirror of
https://github.com/Kitware/CMake.git
synced 2025-10-14 02:08:27 +08:00
FindImageMagick: Add ImageMagick_VERSION
This deprecates the ImageMagick_VERSION_STRING result variable. Additionally, ImageMagick version is now determined by either mogrify executable (if available), or from the `<magick/version.h>` header. Issue: #27088
This commit is contained in:
@@ -43,6 +43,10 @@ Find Modules
|
||||
* The :module:`FindIcotool` module now provides a ``Icotool_VERSION`` result
|
||||
variable. The ``ICOTOOL_VERSION_STRING`` result variable is deprecated.
|
||||
|
||||
* The :module:`FindImageMagick` module now provides an ``ImageMagick_VERSION``
|
||||
result variable. The ``ImageMagick_VERSION_STRING`` result variable is
|
||||
deprecated.
|
||||
|
||||
* The :module:`FindJasper` module now provides a ``Jasper_VERSION`` result
|
||||
variable. The ``JASPER_VERSION_STRING`` result variable is deprecated.
|
||||
|
||||
|
@@ -82,11 +82,15 @@ Result Variables
|
||||
This module defines the following variables:
|
||||
|
||||
``ImageMagick_FOUND``
|
||||
Boolean indicating whether ImageMagick and all its requested components are
|
||||
found.
|
||||
Boolean indicating whether (the requested version of) ImageMagick and all
|
||||
its requested components are found.
|
||||
|
||||
``ImageMagick_VERSION_STRING``
|
||||
The version of ImageMagick found.
|
||||
``ImageMagick_VERSION``
|
||||
.. versionadded:: 4.2
|
||||
|
||||
The version of ImageMagick found in form of
|
||||
``<major>.<minor>.<patch>-<addendum>`` (e.g., ``6.9.12-98``, where ``98``
|
||||
is the addendum release number).
|
||||
|
||||
.. note::
|
||||
|
||||
@@ -131,6 +135,17 @@ The following cache variables may also be set:
|
||||
``ImageMagick_EXECUTABLE_DIR``
|
||||
The full path to directory containing ImageMagick executables.
|
||||
|
||||
Deprecated Variables
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
The following variables are provided for backward compatibility:
|
||||
|
||||
``ImageMagick_VERSION_STRING``
|
||||
.. deprecated:: 4.2
|
||||
Use ``ImageMagick_VERSION``, which has the same value.
|
||||
|
||||
The version of ImageMagick found.
|
||||
|
||||
Examples
|
||||
^^^^^^^^
|
||||
|
||||
@@ -143,6 +158,10 @@ target:
|
||||
target_link_libraries(example PRIVATE ImageMagick::Magick++)
|
||||
#]=======================================================================]
|
||||
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0140 NEW)
|
||||
cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
|
||||
|
||||
find_package(PkgConfig QUIET)
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
@@ -257,6 +276,60 @@ function(FIND_IMAGEMAGICK_EXE component)
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
function(_ImageMagick_GetVersion)
|
||||
unset(version)
|
||||
|
||||
if(ImageMagick_mogrify_EXECUTABLE)
|
||||
execute_process(
|
||||
COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version
|
||||
OUTPUT_VARIABLE version
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(version MATCHES "^Version: ImageMagick ([-0-9.]+)")
|
||||
set(version "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
elseif(ImageMagick_INCLUDE_DIRS)
|
||||
# MagickLibSubversion was used in ImageMagick <= 6.5.
|
||||
set(
|
||||
regex
|
||||
"^[\t ]*#[\t ]*define[\t ]+(MagickLibVersionText|MagickLibAddendum|MagickLibSubversion)[\t ]+\"([-0-9.]+)\""
|
||||
)
|
||||
|
||||
foreach(dir IN LISTS ImageMagick_INCLUDE_DIRS)
|
||||
if(EXISTS ${dir}/magick/version.h)
|
||||
file(STRINGS "${dir}/magick/version.h" results REGEX "${regex}")
|
||||
|
||||
foreach(line ${results})
|
||||
if(line MATCHES "${regex}")
|
||||
if(DEFINED version)
|
||||
string(APPEND version "${CMAKE_MATCH_2}")
|
||||
else()
|
||||
set(version "${CMAKE_MATCH_2}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_MATCH_1 STREQUAL "MagickLibAddendum")
|
||||
break()
|
||||
endif()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(DEFINED version)
|
||||
break()
|
||||
endif()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
if(DEFINED version)
|
||||
set(ImageMagick_VERSION "${version}")
|
||||
set(ImageMagick_VERSION_STRING "${ImageMagick_VERSION}")
|
||||
endif()
|
||||
|
||||
return(PROPAGATE ImageMagick_VERSION ImageMagick_VERSION_STRING)
|
||||
endfunction()
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# Start Actual Work
|
||||
#---------------------------------------------------------------------
|
||||
@@ -344,16 +417,7 @@ endif()
|
||||
set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
|
||||
set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
|
||||
|
||||
if(ImageMagick_mogrify_EXECUTABLE)
|
||||
execute_process(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version
|
||||
OUTPUT_VARIABLE imagemagick_version
|
||||
ERROR_QUIET
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(imagemagick_version MATCHES "^Version: ImageMagick ([-0-9\\.]+)")
|
||||
set(ImageMagick_VERSION_STRING "${CMAKE_MATCH_1}")
|
||||
endif()
|
||||
unset(imagemagick_version)
|
||||
endif()
|
||||
_ImageMagick_GetVersion()
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
# Standard Package Output
|
||||
@@ -361,7 +425,7 @@ endif()
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(ImageMagick
|
||||
REQUIRED_VARS ${ImageMagick_REQUIRED_VARS}
|
||||
VERSION_VAR ImageMagick_VERSION_STRING
|
||||
VERSION_VAR ImageMagick_VERSION
|
||||
)
|
||||
|
||||
#---------------------------------------------------------------------
|
||||
@@ -387,3 +451,5 @@ mark_as_advanced(
|
||||
IMAGEMAGICK_MONTAGE_EXECUTABLE
|
||||
IMAGEMAGICK_COMPOSITE_EXECUTABLE
|
||||
)
|
||||
|
||||
cmake_policy(POP)
|
||||
|
@@ -99,7 +99,7 @@ foreach(
|
||||
FREETYPE
|
||||
GETTEXT GIT GNUTLS
|
||||
HG HSPELL
|
||||
ICOTOOL
|
||||
ICOTOOL ImageMagick
|
||||
JASPER
|
||||
LIBLZMA LIBXML2 LIBXSLT LTTNGUST
|
||||
OpenCL
|
||||
@@ -122,7 +122,7 @@ foreach(
|
||||
FLEX Freetype
|
||||
Gettext GIF GnuTLS GNUTLS GTK2
|
||||
HDF5 Hg HSPELL
|
||||
Icotool
|
||||
Icotool ImageMagick
|
||||
Jasper JPEG
|
||||
LibArchive LibLZMA LIBLZMA LibXml2 LibXslt LTTngUST
|
||||
OpenCL OpenSceneGraph OPENSCENEGRAPH OpenSSL OPENSSL
|
||||
|
@@ -6,6 +6,10 @@ find_package(ImageMagick REQUIRED COMPONENTS Magick++ MagickWand)
|
||||
|
||||
add_executable(test_magick++ main_magick++.cxx)
|
||||
target_link_libraries(test_magick++ PRIVATE ImageMagick::Magick++)
|
||||
target_compile_definitions(
|
||||
test_magick++
|
||||
PRIVATE CMAKE_EXPECTED_IMAGEMAGICK_VERSION="${ImageMagick_VERSION}"
|
||||
)
|
||||
add_test(NAME test_magick++ COMMAND test_magick++)
|
||||
|
||||
add_executable(test_magick_wand main_magick_wand.c)
|
||||
|
@@ -1,3 +1,4 @@
|
||||
#include <cstring>
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
@@ -6,5 +7,14 @@
|
||||
int main()
|
||||
{
|
||||
Magick::InitializeMagick("");
|
||||
return 0;
|
||||
|
||||
std::string found_version =
|
||||
std::string(MagickLibVersionText) + MagickLibAddendum;
|
||||
|
||||
std::cout << "Found ImageMagick version " << found_version
|
||||
<< ", expected version " << CMAKE_EXPECTED_IMAGEMAGICK_VERSION
|
||||
<< "\n";
|
||||
|
||||
return std::strcmp(found_version.c_str(),
|
||||
CMAKE_EXPECTED_IMAGEMAGICK_VERSION);
|
||||
}
|
||||
|
Reference in New Issue
Block a user