diff options
author | Miguel A. Figueroa-Villanueva <miguelf@ieee.org> | 2008-07-23 06:47:36 (GMT) |
---|---|---|
committer | Miguel A. Figueroa-Villanueva <miguelf@ieee.org> | 2008-07-23 06:47:36 (GMT) |
commit | 363727f600113e3c99a4a83e4227b1a2f584dffa (patch) | |
tree | 82cc42bb4d4416a0ee2f8b46b6a557c9b31e0bfa /Modules/FindImageMagick.cmake | |
parent | ffd231869f5be4ba5f1e23bdd0833250f11728b2 (diff) | |
download | CMake-363727f600113e3c99a4a83e4227b1a2f584dffa.zip CMake-363727f600113e3c99a4a83e4227b1a2f584dffa.tar.gz CMake-363727f600113e3c99a4a83e4227b1a2f584dffa.tar.bz2 |
ENH: Updated FindImageMagick to:
- Find newer additions such as animate, compare, etc.
- Find development api: Magick++, MagickCore, MagickWand
- Use FindPackageHandleStandardArgs to output standard messages.
Diffstat (limited to 'Modules/FindImageMagick.cmake')
-rw-r--r-- | Modules/FindImageMagick.cmake | 233 |
1 files changed, 173 insertions, 60 deletions
diff --git a/Modules/FindImageMagick.cmake b/Modules/FindImageMagick.cmake index 66e54bc..16abcf6 100644 --- a/Modules/FindImageMagick.cmake +++ b/Modules/FindImageMagick.cmake @@ -1,77 +1,190 @@ -# - Find Image Magick -# This module finds if ImageMagick tools are installed and determines -# where the executables are. This code sets the following variables: +# - Find the ImageMagick binary suite. +# This module will search for a set of ImageMagick tools specified +# as components in the FIND_PACKAGE call. Typical components include, +# but are not limited to (future versions of ImageMagick might have +# additional components not listed here): # -# IMAGEMAGICK_CONVERT_EXECUTABLE = -# the full path to the 'convert' utility -# IMAGEMAGICK_MOGRIFY_EXECUTABLE = -# the full path to the 'mogrify' utility -# IMAGEMAGICK_IMPORT_EXECUTABLE = -# the full path to the 'import' utility -# IMAGEMAGICK_MONTAGE_EXECUTABLE = -# the full path to the 'montage' utility -# IMAGEMAGICK_COMPOSITE_EXECUTABLE = -# the full path to the 'composite' utility +# animate +# compare +# composite +# conjure +# convert +# display +# identify +# import +# mogrify +# montage +# stream # +# If no component is specified in the FIND_PACKAGE call, then it only +# searches for the ImageMagick executable directory. This code defines +# the following variables: +# +# ImageMagick_FOUND - TRUE if all components are found. +# ImageMagick_EXECUTABLE_DIR - Full path to executables directory. +# ImageMagick_<component>_FOUND - TRUE if <component> is found. +# ImageMagick_<component>_EXECUTABLE - Full path to <component> executable. +# +# There are also components for the following ImageMagick APIs: +# +# Magick++ +# MagickWand +# Magick +# +# For these components the following variables are set: +# +# ImageMagick_FOUND - TRUE if all components are found. +# ImageMagick_INCLUDE_DIRS - Full paths to all include dirs. +# ImageMagick_LIBRARIES - Full paths to all libraries. +# ImageMagick_<component>_FOUND - TRUE if <component> is found. +# ImageMagick_<component>_INCLUDE_DIRS - Full path to <component> include dirs. +# ImageMagick_<component>_LIBRARIES - Full path to <component> libraries. +# +# Example Usages: +# FIND_PACKAGE(ImageMagick) +# FIND_PACKAGE(ImageMagick COMPONENTS convert) +# FIND_PACKAGE(ImageMagick COMPONENTS convert mogrify display) +# FIND_PACKAGE(ImageMagick COMPONENTS Magick++) +# FIND_PACKAGE(ImageMagick COMPONENTS Magick++ convert) +# +# Note that the standard FIND_PACKAGE features are supported +# (i.e., QUIET, REQUIRED, etc.). -IF (WIN32) +# Copyright (c) 2007-2008, +# Miguel A. Figueroa-Villanueva, miguelf at ieee dot org. +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. - # Try to find the ImageMagick binary path. +#--------------------------------------------------------------------- +# Helper functions +#--------------------------------------------------------------------- +FUNCTION(FIND_IMAGEMAGICK_API component header) + SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) - FIND_PATH(IMAGEMAGICK_BINARY_PATH mogrify.exe - [HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath] - DOC "Path to the ImageMagick binary directory where all executable should be found." - ) + FIND_PATH(ImageMagick_${component}_INCLUDE_DIR + NAMES ${header} + PATHS + ${ImageMagick_INCLUDE_DIRS} + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/include" + PATH_SUFFIXES + ImageMagick + DOC "Path to the ImageMagick include dir." + ) + FIND_LIBRARY(ImageMagick_${component}_LIBRARY + NAMES ${ARGN} + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]/lib" + DOC "Path to the ImageMagick Magick++ library." + ) - # Be extra-careful here: we do NOT want CMake to look in the system's PATH - # env var to search for convert.exe, otherwise it is going to pick - # Window's own convert.exe, and you may say good-bye to your disk. + IF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY) + SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) - FIND_PROGRAM(IMAGEMAGICK_CONVERT_EXECUTABLE - NAMES convert - PATHS ${IMAGEMAGICK_BINARY_PATH} - NO_SYSTEM_PATH - DOC "Path to ImageMagick's convert executable. WARNING: note that this tool, named convert.exe, conflicts with Microsoft Window's own convert.exe, which is used to convert FAT partitions to NTFS format ! Therefore, be extra-careful and make sure the right convert.exe has been picked." - ) + LIST(APPEND ImageMagick_INCLUDE_DIRS + ${ImageMagick_${component}_INCLUDE_DIR} + ) + LIST(REMOVE_DUPLICATES ImageMagick_INCLUDE_DIRS) + SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS} PARENT_SCOPE) -ELSE (WIN32) + LIST(APPEND ImageMagick_LIBRARIES + ${ImageMagick_${component}_LIBRARY} + ) + SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES} PARENT_SCOPE) + ENDIF(ImageMagick_${component}_INCLUDE_DIR AND ImageMagick_${component}_LIBRARY) +ENDFUNCTION(FIND_IMAGEMAGICK_API) - SET (IMAGEMAGICK_BINARY_PATH "") +FUNCTION(FIND_IMAGEMAGICK_EXE component) + SET(_IMAGEMAGICK_EXECUTABLE + ${ImageMagick_EXECUTABLE_DIR}/${component}${CMAKE_EXECUTABLE_SUFFIX}) + IF(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) + SET(ImageMagick_${component}_EXECUTABLE + ${_IMAGEMAGICK_EXECUTABLE} + PARENT_SCOPE + ) + SET(ImageMagick_${component}_FOUND TRUE PARENT_SCOPE) + ELSE(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) + SET(ImageMagick_${component}_FOUND FALSE PARENT_SCOPE) + ENDIF(EXISTS ${_IMAGEMAGICK_EXECUTABLE}) +ENDFUNCTION(FIND_IMAGEMAGICK_EXE) - FIND_PROGRAM(IMAGEMAGICK_CONVERT_EXECUTABLE - NAMES convert - PATHS ${IMAGEMAGICK_BINARY_PATH} - DOC "Path to ImageMagick's convert executable." +#--------------------------------------------------------------------- +# Start Actual Work +#--------------------------------------------------------------------- +# Try to find a ImageMagick installation binary path. +FIND_PATH(ImageMagick_EXECUTABLE_DIR + NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} + PATHS + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ImageMagick\\Current;BinPath]" + DOC "Path to the ImageMagick binary directory." + NO_DEFAULT_PATH + ) +FIND_PATH(ImageMagick_EXECUTABLE_DIR + NAMES mogrify${CMAKE_EXECUTABLE_SUFFIX} ) -ENDIF (WIN32) - -# Find mogrify, import, montage, composite - -FIND_PROGRAM(IMAGEMAGICK_MOGRIFY_EXECUTABLE - NAMES mogrify - PATHS ${IMAGEMAGICK_BINARY_PATH} - DOC "Path to ImageMagick's mogrify executable." -) - -FIND_PROGRAM(IMAGEMAGICK_IMPORT_EXECUTABLE - NAMES import - PATHS ${IMAGEMAGICK_BINARY_PATH} - DOC "Path to ImageMagick's import executable." -) +# Find each component. Search for all tools in same dir +# <ImageMagick_EXECUTABLE_DIR>; otherwise they should be found +# independently and not in a cohesive module such as this one. +SET(ImageMagick_FOUND TRUE) +FOREACH(component ${ImageMagick_FIND_COMPONENTS} + # DEPRECATED: forced components for backward compatibility + convert mogrify import montage composite + ) + IF(component STREQUAL "Magick++") + FIND_IMAGEMAGICK_API(Magick++ Magick++.h + Magick++ CORE_RL_Magick++_ + ) + ELSEIF(component STREQUAL "MagickWand") + FIND_IMAGEMAGICK_API(MagickWand wand/MagickWand.h + Wand MagickWand CORE_RL_wand_ + ) + ELSEIF(component STREQUAL "MagickCore") + FIND_IMAGEMAGICK_API(MagickCore magick/MagickCore.h + Magick MagickCore CORE_RL_magick_ + ) + ELSE(component STREQUAL "Magick++") + IF(ImageMagick_EXECUTABLE_DIR) + FIND_IMAGEMAGICK_EXE(${component}) + ENDIF(ImageMagick_EXECUTABLE_DIR) + ENDIF(component STREQUAL "Magick++") + + IF(NOT ImageMagick_${component}_FOUND) + LIST(FIND ImageMagick_FIND_COMPONENTS ${component} is_requested) + IF(is_requested GREATER -1) + SET(ImageMagick_FOUND FALSE) + ENDIF(is_requested GREATER -1) + ENDIF(NOT ImageMagick_${component}_FOUND) +ENDFOREACH(component) -FIND_PROGRAM(IMAGEMAGICK_MONTAGE_EXECUTABLE - NAMES montage - PATHS ${IMAGEMAGICK_BINARY_PATH} - DOC "Path to ImageMagick's montage executable." -) +SET(ImageMagick_INCLUDE_DIRS ${ImageMagick_INCLUDE_DIRS}) +SET(ImageMagick_LIBRARIES ${ImageMagick_LIBRARIES}) -FIND_PROGRAM(IMAGEMAGICK_COMPOSITE_EXECUTABLE - NAMES composite - PATHS ${IMAGEMAGICK_BINARY_PATH} - DOC "Path to ImageMagick's composite executable." -) +#--------------------------------------------------------------------- +# Standard Package Output +#--------------------------------------------------------------------- +INCLUDE(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS( + ImageMagick DEFAULT_MSG ImageMagick_FOUND + ) +# Maintain consistency with all other variables. +SET(ImageMagick_FOUND ${IMAGEMAGICK_FOUND}) +#--------------------------------------------------------------------- +# DEPRECATED: Setting variables for backward compatibility. +#--------------------------------------------------------------------- +SET(IMAGEMAGICK_BINARY_PATH ${ImageMagick_EXECUTABLE_DIR} + CACHE PATH "Path to the ImageMagick binary directory.") +SET(IMAGEMAGICK_CONVERT_EXECUTABLE ${ImageMagick_convert_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's convert executable.") +SET(IMAGEMAGICK_MOGRIFY_EXECUTABLE ${ImageMagick_mogrify_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's mogrify executable.") +SET(IMAGEMAGICK_IMPORT_EXECUTABLE ${ImageMagick_import_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's import executable.") +SET(IMAGEMAGICK_MONTAGE_EXECUTABLE ${ImageMagick_montage_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's montage executable.") +SET(IMAGEMAGICK_COMPOSITE_EXECUTABLE ${ImageMagick_composite_EXECUTABLE} + CACHE FILEPATH "Path to ImageMagick's composite executable.") MARK_AS_ADVANCED( IMAGEMAGICK_BINARY_PATH IMAGEMAGICK_CONVERT_EXECUTABLE @@ -79,4 +192,4 @@ MARK_AS_ADVANCED( IMAGEMAGICK_IMPORT_EXECUTABLE IMAGEMAGICK_MONTAGE_EXECUTABLE IMAGEMAGICK_COMPOSITE_EXECUTABLE -) + ) |