Blame cmake/FindImageMagick.cmake

Packit 1fb8d4
# - Find the ImageMagick binary suite.
Packit 1fb8d4
# This module will search for a set of ImageMagick tools specified
Packit 1fb8d4
# as components in the FIND_PACKAGE call. Typical components include,
Packit 1fb8d4
# but are not limited to (future versions of ImageMagick might have
Packit 1fb8d4
# additional components not listed here):
Packit 1fb8d4
#
Packit 1fb8d4
#  animate
Packit 1fb8d4
#  compare
Packit 1fb8d4
#  composite
Packit 1fb8d4
#  conjure
Packit 1fb8d4
#  convert
Packit 1fb8d4
#  display
Packit 1fb8d4
#  identify
Packit 1fb8d4
#  import
Packit 1fb8d4
#  mogrify
Packit 1fb8d4
#  montage
Packit 1fb8d4
#  stream
Packit 1fb8d4
#
Packit 1fb8d4
# If no component is specified in the FIND_PACKAGE call, then it only
Packit 1fb8d4
# searches for the ImageMagick executable directory. This code defines
Packit 1fb8d4
# the following variables:
Packit 1fb8d4
#
Packit 1fb8d4
#  ImageMagick_FOUND                  - TRUE if all components are found.
Packit 1fb8d4
#  ImageMagick_EXECUTABLE_DIR         - Full path to executables directory.
Packit 1fb8d4
#  ImageMagick_<component>_FOUND      - TRUE if <component> is found.
Packit 1fb8d4
#  ImageMagick_<component>_EXECUTABLE - Full path to <component> executable.
Packit 1fb8d4
#  ImageMagick_VERSION_STRING         - the version of ImageMagick found
Packit 1fb8d4
#                                       (since CMake 2.8.8)
Packit 1fb8d4
#
Packit 1fb8d4
# ImageMagick_VERSION_STRING will not work for old versions like 5.2.3.
Packit 1fb8d4
#
Packit 1fb8d4
# There are also components for the following ImageMagick APIs:
Packit 1fb8d4
#
Packit 1fb8d4
#  Magick++
Packit 1fb8d4
#  MagickWand
Packit 1fb8d4
#  MagickCore
Packit 1fb8d4
#
Packit 1fb8d4
# For these components the following variables are set:
Packit 1fb8d4
#
Packit 1fb8d4
#  ImageMagick_FOUND                    - TRUE if all components are found.
Packit 1fb8d4
#  ImageMagick_INCLUDE_DIRS             - Full paths to all include dirs.
Packit 1fb8d4
#  ImageMagick_LIBRARIES                - Full paths to all libraries.
Packit 1fb8d4
#  ImageMagick_<component>_FOUND        - TRUE if <component> is found.
Packit 1fb8d4
#  ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs.
Packit 1fb8d4
#  ImageMagick_<component>_LIBRARIES    - Full path to <component> libraries.
Packit 1fb8d4
#
Packit 1fb8d4
# Example Usages:
Packit 1fb8d4
#  find_package(ImageMagick)
Packit 1fb8d4
#  find_package(ImageMagick COMPONENTS convert)
Packit 1fb8d4
#  find_package(ImageMagick COMPONENTS convert mogrify display)
Packit 1fb8d4
#  find_package(ImageMagick COMPONENTS Magick++)
Packit 1fb8d4
#  find_package(ImageMagick COMPONENTS Magick++ convert)
Packit 1fb8d4
#
Packit 1fb8d4
# Note that the standard FIND_PACKAGE features are supported
Packit 1fb8d4
# (i.e., QUIET, REQUIRED, etc.).
Packit 1fb8d4
Packit 1fb8d4
#=============================================================================
Packit 1fb8d4
# Copyright 2007-2009 Kitware, Inc.
Packit 1fb8d4
# Copyright 2007-2008 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org>
Packit 1fb8d4
# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de>
Packit 1fb8d4
#
Packit 1fb8d4
# Distributed under the OSI-approved BSD License (the "License");
Packit 1fb8d4
# see accompanying file Copyright.txt for details.
Packit 1fb8d4
#
Packit 1fb8d4
# This software is distributed WITHOUT ANY WARRANTY; without even the
Packit 1fb8d4
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit 1fb8d4
# See the License for more information.
Packit 1fb8d4
#=============================================================================
Packit 1fb8d4
# (To distribute this file outside of CMake, substitute the full
Packit 1fb8d4
#  License text for the above reference.)
Packit 1fb8d4
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
# Helper functions
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
function(FIND_IMAGEMAGICK_API component header)
Packit 1fb8d4
  set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
Packit 1fb8d4
Packit 1fb8d4
  find_path(ImageMagick_${component}_INCLUDE_DIR
Packit 1fb8d4
    NAMES ${header}
Packit 1fb8d4
    PATHS
Packit 1fb8d4
      ${ImageMagick_INCLUDE_DIRS}
Packit 1fb8d4
      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include"
Packit 1fb8d4
    PATH_SUFFIXES
Packit 1fb8d4
      ImageMagick
Packit 1fb8d4
    DOC "Path to the ImageMagick include dir."
Packit 1fb8d4
    )
Packit 1fb8d4
  find_library(ImageMagick_${component}_LIBRARY
Packit 1fb8d4
    NAMES ${ARGN}
Packit 1fb8d4
    PATHS
Packit 1fb8d4
      "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib"
Packit 1fb8d4
    DOC "Path to the ImageMagick Magick++ library."
Packit 1fb8d4
    )
Packit 1fb8d4
Packit 1fb8d4
  if(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY)
Packit 1fb8d4
    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
Packit 1fb8d4
Packit 1fb8d4
    list(APPEND ImageMagick_INCLUDE_DIRS
Packit 1fb8d4
      ${ImageMagick_${component}_INCLUDE_DIR}
Packit 1fb8d4
      )
Packit 1fb8d4
    list(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS)
Packit 1fb8d4
    set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE)
Packit 1fb8d4
Packit 1fb8d4
    list(APPEND ImageMagick_LIBRARIES
Packit 1fb8d4
      ${ImageMagick_${component}_LIBRARY}
Packit 1fb8d4
      )
Packit 1fb8d4
    set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE)
Packit 1fb8d4
  endif()
Packit 1fb8d4
endfunction()
Packit 1fb8d4
Packit 1fb8d4
function(FIND_IMAGEMAGICK_EXE component)
Packit 1fb8d4
  set(_IMAGEMAGICK_EXECUTABLE
Packit 1fb8d4
    ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX})
Packit 1fb8d4
  if(EXISTS ${_IMAGEMAGICK_EXECUTABLE})
Packit 1fb8d4
    set(ImageMagick_${component}_EXECUTABLE
Packit 1fb8d4
      ${_IMAGEMAGICK_EXECUTABLE}
Packit 1fb8d4
       PARENT_SCOPE
Packit 1fb8d4
       )
Packit 1fb8d4
    set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE)
Packit 1fb8d4
  else()
Packit 1fb8d4
    set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE)
Packit 1fb8d4
  endif()
Packit 1fb8d4
endfunction()
Packit 1fb8d4
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
# Start Actual Work
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
# Try to find a ImageMagick installation binary path.
Packit 1fb8d4
find_path(ImageMagick_EXECUTABLE_DIR
Packit 1fb8d4
  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
Packit 1fb8d4
  PATHS
Packit 1fb8d4
    "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]"
Packit 1fb8d4
  DOC "Path to the ImageMagick binary directory."
Packit 1fb8d4
  NO_DEFAULT_PATH
Packit 1fb8d4
  )
Packit 1fb8d4
find_path(ImageMagick_EXECUTABLE_DIR
Packit 1fb8d4
  NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX}
Packit 1fb8d4
  )
Packit 1fb8d4
Packit 1fb8d4
# Find each component. Search for all tools in same dir
Packit 1fb8d4
# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found
Packit 1fb8d4
# independently and not in a cohesive module such as this one.
Packit 1fb8d4
unset(ImageMagick_REQUIRED_VARS)
Packit 1fb8d4
unset(ImageMagick_DEFAULT_EXECUTABLES)
Packit 1fb8d4
foreach(component ${ImageMagick_FIND_COMPONENTS}
Packit 1fb8d4
    # DEPRECATED: forced components for backward compatibility
Packit 1fb8d4
    convert mogrify import montage composite
Packit 1fb8d4
    )
Packit 1fb8d4
  if(component STREQUAL "Magick++")
Packit 1fb8d4
    FIND_IMAGEMAGICK_API(Magick++ Magick++.h
Packit 1fb8d4
      Magick++ CORE_RL_Magick++_ Magick++-Q16 Magick++-Q8
Packit 1fb8d4
      )
Packit 1fb8d4
    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY)
Packit 1fb8d4
  elseif(component STREQUAL "MagickWand")
Packit 1fb8d4
    FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h
Packit 1fb8d4
      Wand MagickWand CORE_RL_wand_ MagickWand-Q16 MagickWand-Q8
Packit 1fb8d4
      )
Packit 1fb8d4
    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY)
Packit 1fb8d4
  elseif(component STREQUAL "MagickCore")
Packit 1fb8d4
    FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h
Packit 1fb8d4
      Magick MagickCore CORE_RL_magick_ MagickCore-6 MagickCore-Q16 MagickCore-Q8
Packit 1fb8d4
      )
Packit 1fb8d4
    list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY)
Packit 1fb8d4
  else()
Packit 1fb8d4
    if(ImageMagick_EXECUTABLE_DIR)
Packit 1fb8d4
      FIND_IMAGEMAGICK_EXE(${component})
Packit 1fb8d4
    endif()
Packit 1fb8d4
Packit 1fb8d4
    if(ImageMagick_FIND_COMPONENTS)
Packit 1fb8d4
      list(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested)
Packit 1fb8d4
      if(is_requested GREATER -1)
Packit 1fb8d4
        list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_${component}_EXECUTABLE)
Packit 1fb8d4
      endif()
Packit 1fb8d4
    elseif(ImageMagick_${component}_EXECUTABLE)
Packit 1fb8d4
      # if no components were requested explicitly put all (default) executables
Packit 1fb8d4
      # in the list
Packit 1fb8d4
      list(APPEND ImageMagick_DEFAULT_EXECUTABLES ImageMagick_${component}_EXECUTABLE)
Packit 1fb8d4
    endif()
Packit 1fb8d4
  endif()
Packit 1fb8d4
endforeach()
Packit 1fb8d4
Packit 1fb8d4
if(NOT ImageMagick_FIND_COMPONENTS AND NOT ImageMagick_DEFAULT_EXECUTABLES)
Packit 1fb8d4
  # No components were requested, and none of the default components were
Packit 1fb8d4
  # found. Just insert mogrify into the list of the default components to
Packit 1fb8d4
  # find so FPHSA below has something to check
Packit 1fb8d4
  list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_mogrify_EXECUTABLE)
Packit 1fb8d4
elseif(ImageMagick_DEFAULT_EXECUTABLES)
Packit 1fb8d4
  list(APPEND ImageMagick_REQUIRED_VARS ${ImageMagick_DEFAULT_EXECUTABLES})
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS})
Packit 1fb8d4
set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES})
Packit 1fb8d4
Packit 1fb8d4
if(ImageMagick_mogrify_EXECUTABLE)
Packit 1fb8d4
  execute_process(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version
Packit 1fb8d4
                  OUTPUT_VARIABLE imagemagick_version
Packit 1fb8d4
                  ERROR_QUIET
Packit 1fb8d4
                  OUTPUT_STRIP_TRAILING_WHITESPACE)
Packit 1fb8d4
  if(imagemagick_version MATCHES "^Version: ImageMagick [0-9]")
Packit 1fb8d4
    string(REGEX REPLACE "^Version: ImageMagick ([-0-9\\.]+).*" "\\1" ImageMagick_VERSION_STRING "${imagemagick_version}")
Packit 1fb8d4
  endif()
Packit 1fb8d4
  unset(imagemagick_version)
Packit 1fb8d4
endif()
Packit 1fb8d4
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
# Standard Package Output
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
Packit 1fb8d4
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ImageMagick
Packit 1fb8d4
                                  REQUIRED_VARS ${ImageMagick_REQUIRED_VARS}
Packit 1fb8d4
                                  VERSION_VAR ImageMagick_VERSION_STRING
Packit 1fb8d4
  )
Packit 1fb8d4
# Maintain consistency with all other variables.
Packit 1fb8d4
set(ImageMagick_FOUND ${IMAGEMAGICK_FOUND})
Packit 1fb8d4
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
# DEPRECATED: Setting variables for backward compatibility.
Packit 1fb8d4
#---------------------------------------------------------------------
Packit 1fb8d4
set(IMAGEMAGICK_BINARY_PATH          ${ImageMagick_EXECUTABLE_DIR}
Packit 1fb8d4
    CACHE PATH "Path to the ImageMagick binary directory.")
Packit 1fb8d4
set(IMAGEMAGICK_CONVERT_EXECUTABLE   ${ImageMagick_convert_EXECUTABLE}
Packit 1fb8d4
    CACHE FILEPATH "Path to ImageMagick's convert executable.")
Packit 1fb8d4
set(IMAGEMAGICK_MOGRIFY_EXECUTABLE   ${ImageMagick_mogrify_EXECUTABLE}
Packit 1fb8d4
    CACHE FILEPATH "Path to ImageMagick's mogrify executable.")
Packit 1fb8d4
set(IMAGEMAGICK_IMPORT_EXECUTABLE    ${ImageMagick_import_EXECUTABLE}
Packit 1fb8d4
    CACHE FILEPATH "Path to ImageMagick's import executable.")
Packit 1fb8d4
set(IMAGEMAGICK_MONTAGE_EXECUTABLE   ${ImageMagick_montage_EXECUTABLE}
Packit 1fb8d4
    CACHE FILEPATH "Path to ImageMagick's montage executable.")
Packit 1fb8d4
set(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE}
Packit 1fb8d4
    CACHE FILEPATH "Path to ImageMagick's composite executable.")
Packit 1fb8d4
mark_as_advanced(
Packit 1fb8d4
  IMAGEMAGICK_BINARY_PATH
Packit 1fb8d4
  IMAGEMAGICK_CONVERT_EXECUTABLE
Packit 1fb8d4
  IMAGEMAGICK_MOGRIFY_EXECUTABLE
Packit 1fb8d4
  IMAGEMAGICK_IMPORT_EXECUTABLE
Packit 1fb8d4
  IMAGEMAGICK_MONTAGE_EXECUTABLE
Packit 1fb8d4
  IMAGEMAGICK_COMPOSITE_EXECUTABLE
Packit 1fb8d4
  )