1
0
mirror of https://github.com/Kitware/CMake.git synced 2025-10-16 22:37:30 +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:
Peter Kokot
2025-09-13 23:48:05 +02:00
parent b53375ea94
commit 032e829b23
5 changed files with 102 additions and 18 deletions

View File

@@ -43,6 +43,10 @@ Find Modules
* The :module:`FindIcotool` module now provides a ``Icotool_VERSION`` result * The :module:`FindIcotool` module now provides a ``Icotool_VERSION`` result
variable. The ``ICOTOOL_VERSION_STRING`` result variable is deprecated. 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 * The :module:`FindJasper` module now provides a ``Jasper_VERSION`` result
variable. The ``JASPER_VERSION_STRING`` result variable is deprecated. variable. The ``JASPER_VERSION_STRING`` result variable is deprecated.

View File

@@ -82,11 +82,15 @@ Result Variables
This module defines the following variables: This module defines the following variables:
``ImageMagick_FOUND`` ``ImageMagick_FOUND``
Boolean indicating whether ImageMagick and all its requested components are Boolean indicating whether (the requested version of) ImageMagick and all
found. its requested components are found.
``ImageMagick_VERSION_STRING`` ``ImageMagick_VERSION``
The version of ImageMagick found. .. 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:: .. note::
@@ -131,6 +135,17 @@ The following cache variables may also be set:
``ImageMagick_EXECUTABLE_DIR`` ``ImageMagick_EXECUTABLE_DIR``
The full path to directory containing ImageMagick executables. 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 Examples
^^^^^^^^ ^^^^^^^^
@@ -143,6 +158,10 @@ target:
target_link_libraries(example PRIVATE ImageMagick::Magick++) 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) find_package(PkgConfig QUIET)
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -257,6 +276,60 @@ function(FIND_IMAGEMAGICK_EXE component)
endif() endif()
endfunction() 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 # Start Actual Work
#--------------------------------------------------------------------- #---------------------------------------------------------------------
@@ -344,16 +417,7 @@ endif()
set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS}) set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES}) set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
if(ImageMagick_mogrify_EXECUTABLE) _ImageMagick_GetVersion()
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()
#--------------------------------------------------------------------- #---------------------------------------------------------------------
# Standard Package Output # Standard Package Output
@@ -361,7 +425,7 @@ endif()
include(FindPackageHandleStandardArgs) include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ImageMagick find_package_handle_standard_args(ImageMagick
REQUIRED_VARS ${ImageMagick_REQUIRED_VARS} 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_MONTAGE_EXECUTABLE
IMAGEMAGICK_COMPOSITE_EXECUTABLE IMAGEMAGICK_COMPOSITE_EXECUTABLE
) )
cmake_policy(POP)

View File

@@ -99,7 +99,7 @@ foreach(
FREETYPE FREETYPE
GETTEXT GIT GNUTLS GETTEXT GIT GNUTLS
HG HSPELL HG HSPELL
ICOTOOL ICOTOOL ImageMagick
JASPER JASPER
LIBLZMA LIBXML2 LIBXSLT LTTNGUST LIBLZMA LIBXML2 LIBXSLT LTTNGUST
OpenCL OpenCL
@@ -122,7 +122,7 @@ foreach(
FLEX Freetype FLEX Freetype
Gettext GIF GnuTLS GNUTLS GTK2 Gettext GIF GnuTLS GNUTLS GTK2
HDF5 Hg HSPELL HDF5 Hg HSPELL
Icotool Icotool ImageMagick
Jasper JPEG Jasper JPEG
LibArchive LibLZMA LIBLZMA LibXml2 LibXslt LTTngUST LibArchive LibLZMA LIBLZMA LibXml2 LibXslt LTTngUST
OpenCL OpenSceneGraph OPENSCENEGRAPH OpenSSL OPENSSL OpenCL OpenSceneGraph OPENSCENEGRAPH OpenSSL OPENSSL

View File

@@ -6,6 +6,10 @@ find_package(ImageMagick REQUIRED COMPONENTS Magick++ MagickWand)
add_executable(test_magick++ main_magick++.cxx) add_executable(test_magick++ main_magick++.cxx)
target_link_libraries(test_magick++ PRIVATE ImageMagick::Magick++) 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_test(NAME test_magick++ COMMAND test_magick++)
add_executable(test_magick_wand main_magick_wand.c) add_executable(test_magick_wand main_magick_wand.c)

View File

@@ -1,3 +1,4 @@
#include <cstring>
#include <iostream> #include <iostream>
#include <string> #include <string>
@@ -6,5 +7,14 @@
int main() int main()
{ {
Magick::InitializeMagick(""); 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);
} }