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:
@@ -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.
|
||||||
|
|
||||||
|
@@ -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)
|
||||||
|
@@ -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
|
||||||
|
@@ -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)
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user