1# - Find the ImageMagick binary suite. 2# This module will search for a set of ImageMagick tools specified 3# as components in the FIND_PACKAGE call. Typical components include, 4# but are not limited to (future versions of ImageMagick might have 5# additional components not listed here): 6# 7# animate 8# compare 9# composite 10# conjure 11# convert 12# display 13# identify 14# import 15# mogrify 16# montage 17# stream 18# 19# If no component is specified in the FIND_PACKAGE call, then it only 20# searches for the ImageMagick executable directory. This code defines 21# the following variables: 22# 23# ImageMagick_FOUND - TRUE if all components are found. 24# ImageMagick_EXECUTABLE_DIR - Full path to executables directory. 25# ImageMagick_<component>_FOUND - TRUE if <component> is found. 26# ImageMagick_<component>_EXECUTABLE - Full path to <component> executable. 27# ImageMagick_VERSION_STRING - the version of ImageMagick found 28# (since CMake 2.8.8) 29# 30# ImageMagick_VERSION_STRING will not work for old versions like 5.2.3. 31# 32# There are also components for the following ImageMagick APIs: 33# 34# Magick++ 35# MagickWand 36# MagickCore 37# 38# For these components the following variables are set: 39# 40# ImageMagick_FOUND - TRUE if all components are found. 41# ImageMagick_INCLUDE_DIRS - Full paths to all include dirs. 42# ImageMagick_LIBRARIES - Full paths to all libraries. 43# ImageMagick_<component>_FOUND - TRUE if <component> is found. 44# ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs. 45# ImageMagick_<component>_LIBRARIES - Full path to <component> libraries. 46# 47# Example Usages: 48# find_package(ImageMagick) 49# find_package(ImageMagick COMPONENTS convert) 50# find_package(ImageMagick COMPONENTS convert mogrify display) 51# find_package(ImageMagick COMPONENTS Magick++) 52# find_package(ImageMagick COMPONENTS Magick++ convert) 53# 54# Note that the standard FIND_PACKAGE features are supported 55# (i.e., QUIET, REQUIRED, etc.). 56 57#============================================================================= 58# Copyright 2007-2009 Kitware, Inc. 59# Copyright 2007-2008 Miguel A. Figueroa-Villanueva <miguelf at ieee dot org> 60# Copyright 2012 Rolf Eike Beer <eike@sf-mail.de> 61# Copyright 2013 Nodar Kasradze : full (better ;) support of local install of IM 62# 63# Distributed under the OSI-approved BSD License (the "License"); 64# see accompanying file Copyright.txt for details. 65# 66# This software is distributed WITHOUT ANY WARRANTY; without even the 67# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 68# See the License for more information. 69#============================================================================= 70# (To distribute this file outside of CMake, substitute the full 71# License text for the above reference.) 72 73# Define variables 74set(ENV{PATH} "${MAGICKDIR}/bin:$ENV{PATH}") 75set(ENV{PKG_CONFIG_PATH} "${MAGICKDIR}/libdata/pkgconfig/:$ENV{PKG_CONFIG_PATH}") 76 77#--------------------------------------------------------------------- 78# Helper functions 79#--------------------------------------------------------------------- 80 81 82function(FIND_IMAGEMAGICK_API component header) 83 set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) 84 85 find_path(ImageMagick_${component}_INCLUDE_DIR 86 NAMES ${header} 87 PATHS 88 ${ImageMagick_INCLUDE_DIRS} 89 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include" 90 PATH_SUFFIXES 91 ImageMagick ImageMagick-6 92 DOC "Path to the ImageMagick include dir." 93 ) 94 95 find_library(ImageMagick_${component}_LIBRARY 96 NAMES ${ARGN} 97 PATHS 98 ${CMAKE_PREFIX_PATH}/lib 99 NO_DEFAULT_PATH 100 DOC "Path to the ImageMagick Magick++ library." 101 ) 102 103 find_library(ImageMagick_${component}_LIBRARY 104 NAMES ${ARGN} 105 PATHS 106 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib" 107 DOC "Path to the ImageMagick Magick++ library." 108 ) 109 110 111 if(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY) 112 set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) 113 114 list(APPEND ImageMagick_INCLUDE_DIRS 115 ${ImageMagick_${component}_INCLUDE_DIR} 116 ) 117 list(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS) 118 set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE) 119 120 list(APPEND ImageMagick_LIBRARIES 121 ${ImageMagick_${component}_LIBRARY} 122 ) 123 set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE) 124 endif() 125endfunction() 126 127function(FIND_IMAGEMAGICK_EXE component) 128 129 set(_IMAGEMAGICK_EXECUTABLE 130 ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX}) 131 if(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) 132 set(ImageMagick_${component}_EXECUTABLE 133 ${_IMAGEMAGICK_EXECUTABLE} 134 PARENT_SCOPE 135 ) 136 set(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) 137 else() 138 set(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) 139 endif() 140endfunction() 141 142#--------------------------------------------------------------------- 143# Start Actual Work 144#--------------------------------------------------------------------- 145# Try to find a ImageMagick installation binary path. 146find_path(ImageMagick_EXECUTABLE_DIR 147 NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} 148 PATHS 149 "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]" 150 DOC "Path to the ImageMagick binary directory." 151 NO_DEFAULT_PATH 152 ) 153find_path(ImageMagick_EXECUTABLE_DIR 154 NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} 155 ) 156 157# Find each component. Search for all tools in same dir 158# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found 159# independently and not in a cohesive module such as this one. 160unset(ImageMagick_REQUIRED_VARS) 161unset(ImageMagick_DEFAULT_EXECUTABLES) 162foreach(component ${ImageMagick_FIND_COMPONENTS} 163 # DEPRECATED: forced components for backward compatibility 164 convert mogrify import montage composite 165 ) 166 if(component STREQUAL "Magick++") 167 FIND_IMAGEMAGICK_API(Magick++ Magick++.h 168 Magick++-6 Magick++ CORE_RL_Magick++_ Magick++-6.Q16 Magick++-Q16 Magick++-6.Q8 Magick++-Q8 Magick++-6.Q16HDRI Magick++-Q16HDRI Magick++-6.Q8HDRI Magick++-Q8HDRI 169 ) 170 list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_Magick++_LIBRARY) 171 elseif(component STREQUAL "MagickWand") 172 FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h 173 MagickWand-6 Wand MagickWand CORE_RL_wand_ MagickWand-6.Q16 MagickWand-Q16 MagickWand-6.Q8 MagickWand-Q8 MagickWand-6.Q16HDRI MagickWand-Q16HDRI MagickWand-6.Q8HDRI MagickWand-Q8HDRI 174 ) 175 list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickWand_LIBRARY) 176 elseif(component STREQUAL "MagickCore") 177 FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h 178 MagickCore-6 Magick MagickCore CORE_RL_magick_ MagickCore-6.Q16 MagickCore-Q16 MagickCore-6.Q8 MagickCore-Q8 MagickCore-6.Q16HDRI MagickCore-Q16HDRI MagickCore-6.Q8HDRI MagickCore-Q8HDRI 179 ) 180 list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_MagickCore_LIBRARY) 181 else() 182 if(ImageMagick_EXECUTABLE_DIR) 183 FIND_IMAGEMAGICK_EXE(${component}) 184 endif() 185 186 if(ImageMagick_FIND_COMPONENTS) 187 list(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested) 188 if(is_requested GREATER -1) 189 list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_${component}_EXECUTABLE) 190 endif() 191 elseif(ImageMagick_${component}_EXECUTABLE) 192 # if no components were requested explicitly put all (default) executables 193 # in the list 194 list(APPEND ImageMagick_DEFAULT_EXECUTABLES ImageMagick_${component}_EXECUTABLE) 195 endif() 196 endif() 197endforeach() 198 199if(NOT ImageMagick_FIND_COMPONENTS AND NOT ImageMagick_DEFAULT_EXECUTABLES) 200 # No components were requested, and none of the default components were 201 # found. Just insert mogrify into the list of the default components to 202 # find so FPHSA below has something to check 203 list(APPEND ImageMagick_REQUIRED_VARS ImageMagick_mogrify_EXECUTABLE) 204elseif(ImageMagick_DEFAULT_EXECUTABLES) 205 list(APPEND ImageMagick_REQUIRED_VARS ${ImageMagick_DEFAULT_EXECUTABLES}) 206endif() 207 208set(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS}) 209set(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES}) 210 211if(ImageMagick_mogrify_EXECUTABLE) 212 execute_process(COMMAND ${ImageMagick_mogrify_EXECUTABLE} -version 213 OUTPUT_VARIABLE imagemagick_version 214 ERROR_QUIET 215 OUTPUT_STRIP_TRAILING_WHITESPACE) 216 if(imagemagick_version MATCHES "^Version: ImageMagick [0-9]") 217 string(REGEX REPLACE "^Version: ImageMagick ([-0-9\\.]+).*" "\\1" ImageMagick_VERSION_STRING "${imagemagick_version}") 218 endif() 219 unset(imagemagick_version) 220endif() 221 222#--------------------------------------------------------------------- 223# Standard Package Output 224#--------------------------------------------------------------------- 225include(FindPackageHandleStandardArgs) 226FIND_PACKAGE_HANDLE_STANDARD_ARGS(ImageMagick 227 REQUIRED_VARS ${ImageMagick_REQUIRED_VARS} 228 VERSION_VAR ImageMagick_VERSION_STRING 229 ) 230# Maintain consistency with all other variables. 231set(ImageMagick_FOUND ${IMAGEMAGICK_FOUND}) 232 233if (ImageMagick_FOUND) 234# run the Magick++ config program to get cxxflags 235 execute_process( 236 COMMAND sh "${ImageMagick_EXECUTABLE_DIR}/MagickCore-config" "--cxxflags" 237 OUTPUT_VARIABLE IMAGEMAGICK_CXX_FLAGS 238 RESULT_VARIABLE RET 239 ERROR_QUIET 240 ) 241 if(RET EQUAL 0) 242 string(STRIP "${IMAGEMAGICK_CXX_FLAGS}" IMAGEMAGICK_CXX_FLAGS) 243 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${IMAGEMAGICK_CXX_FLAGS}") 244 else() 245# DBG_MSG_V("MagickCore-config --cxxflags command FAILED with RET=${RET}") 246 message(WARNING "MagickCore-config --cxxflags command FAILED with RET=${RET}") 247 248 endif() 249endif() 250 251#--------------------------------------------------------------------- 252# DEPRECATED: Setting variables for backward compatibility. 253#--------------------------------------------------------------------- 254set(IMAGEMAGICK_BINARY_PATH ${ImageMagick_EXECUTABLE_DIR} 255 CACHE PATH "Path to the ImageMagick binary directory.") 256set(IMAGEMAGICK_CONVERT_EXECUTABLE ${ImageMagick_convert_EXECUTABLE} 257 CACHE FILEPATH "Path to ImageMagick's convert executable.") 258set(IMAGEMAGICK_MOGRIFY_EXECUTABLE ${ImageMagick_mogrify_EXECUTABLE} 259 CACHE FILEPATH "Path to ImageMagick's mogrify executable.") 260set(IMAGEMAGICK_IMPORT_EXECUTABLE ${ImageMagick_import_EXECUTABLE} 261 CACHE FILEPATH "Path to ImageMagick's import executable.") 262set(IMAGEMAGICK_MONTAGE_EXECUTABLE ${ImageMagick_montage_EXECUTABLE} 263 CACHE FILEPATH "Path to ImageMagick's montage executable.") 264set(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE} 265 CACHE FILEPATH "Path to ImageMagick's composite executable.") 266mark_as_advanced( 267 IMAGEMAGICK_BINARY_PATH 268 IMAGEMAGICK_CONVERT_EXECUTABLE 269 IMAGEMAGICK_MOGRIFY_EXECUTABLE 270 IMAGEMAGICK_IMPORT_EXECUTABLE 271 IMAGEMAGICK_MONTAGE_EXECUTABLE 272 IMAGEMAGICK_COMPOSITE_EXECUTABLE 273 ) 274 275