Blame cmake/FindImageMagick.cmake

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