# - Find GD
# Find the native GD includes and library
# This module defines
#  GD_INCLUDE_DIR, where to find gd.h, etc.
#  GD_LIBRARIES, the libraries needed to use GD.
#  GD_FOUND, If false, do not try to use GD.
# also defined, but not for general use are
#  GD_LIBRARY, where to find the GD library.
#  GD_SUPPORTS_PNG, GD_SUPPORTS_JPEG, GD_SUPPORTS_GIF, test
#  support for image formats in GD.

#set(GD_INCLUDE_DIR_HOME CACHE PATH "Path to gd.h root folder")
#set(GD_LIBRARY_HOME CACHE PATH "Path to GD_LIBRARY root folder")

FIND_PATH(GD_INCLUDE_DIR 
  NAMES gd.h
#  PATHS ${GD_INCLUDE_DIR_HOME}
#  NO_DEFAULT_PATH
  )

if(WIN32 AND NOT CYGWIN)
  SET(GD_NAMES ${GD_NAMES} bgd)
else(WIN32)
  SET(GD_NAMES ${GD_NAMES} gd)
endif(WIN32 AND NOT CYGWIN)

FIND_LIBRARY(GD_LIBRARY
  NAMES ${GD_NAMES}
#  PATHS ${GD_LIBRARY_HOME}
#  NO_DEFAULT_PATH
  )

IF (GD_LIBRARY AND GD_INCLUDE_DIR)
    SET(GD_LIBRARIES ${GD_LIBRARY})
    SET(GD_FOUND "YES")
ELSE (GD_LIBRARY AND GD_INCLUDE_DIR)
  SET(GD_FOUND "NO")
ENDIF (GD_LIBRARY AND GD_INCLUDE_DIR)
message("Found GD: ${GD_FOUND}")
IF (GD_FOUND)
	IF (WIN32 AND NOT CYGWIN)
		SET(GD_SUPPORTS_PNG ON)
		SET(GD_SUPPORTS_JPEG ON)
		SET(GD_SUPPORTS_GIF ON)
		get_filename_component(GD_LIBRARY_DIR ${GD_LIBRARY} PATH)
	ELSE (WIN32 AND NOT CYGWIN)
		INCLUDE(CheckLibraryExists)
		GET_FILENAME_COMPONENT(GD_LIB_PATH ${GD_LIBRARY} PATH)
		GET_FILENAME_COMPONENT(GD_LIB ${GD_LIBRARY} NAME)

		CHECK_LIBRARY_EXISTS("${GD_LIBRARY}" "gdImagePng" "${GD_LIB_PATH}" GD_SUPPORTS_PNG)
		IF (GD_SUPPORTS_PNG)
			find_package(PNG)
			IF (PNG_FOUND)
				SET(GD_LIBRARIES ${GD_LIBRARIES} ${PNG_LIBRARIES})
			SET(GD_INCLUDE_DIR ${GD_INCLUDE_DIR} ${PNG_INCLUDE_DIR})
			ELSE (PNG_FOUND)
				SET(GD_SUPPORTS_PNG "NO")
			ENDIF (PNG_FOUND)
		ENDIF (GD_SUPPORTS_PNG)

		CHECK_LIBRARY_EXISTS("${GD_LIBRARY}" "gdImageJpeg" "${GD_LIB_PATH}" GD_SUPPORTS_JPEG)
		IF (GD_SUPPORTS_JPEG)
			find_package(JPEG)
			IF (JPEG_FOUND)
				SET(GD_LIBRARIES ${GD_LIBRARIES} ${JPEG_LIBRARIES})
				SET(GD_INCLUDE_DIR ${GD_INCLUDE_DIR} ${JPEG_INCLUDE_DIR})
			ELSE (JPEG_FOUND)
				SET(GD_SUPPORTS_JPEG "NO")
			ENDIF (JPEG_FOUND)
		ENDIF (GD_SUPPORTS_JPEG)

		CHECK_LIBRARY_EXISTS("${GD_LIBRARY}" "gdImageGif" "${GD_LIB_PATH}" GD_SUPPORTS_GIF)

		# Trim the list of include directories
		SET(GDINCTRIM)
		FOREACH(GD_DIR ${GD_INCLUDE_DIR})
			SET(GD_TMP_FOUND OFF)
			FOREACH(GD_TRIMMED ${GDINCTRIM})
				IF ("${GD_DIR}" STREQUAL "${GD_TRIMMED}")
				SET(GD_TMP_FOUND ON)
				ENDIF ("${GD_DIR}" STREQUAL "${GD_TRIMMED}")
			ENDFOREACH(GD_TRIMMED ${GDINCTRIM})
			IF (NOT GD_TMP_FOUND)
				SET(GDINCTRIM "${GDINCTRIM}" "${GD_DIR}")
			ENDIF (NOT GD_TMP_FOUND)
		ENDFOREACH(GD_DIR ${GD_INCLUDE_DIR})
		SET(GD_INCLUDE_DIR ${GDINCTRIM})

		SET(GD_LIBRARY_DIR)

		# Generate trimmed list of library directories and list of libraries
		FOREACH(GD_LIB ${GD_LIBRARIES})
			GET_FILENAME_COMPONENT(GD_NEXTLIBDIR ${GD_LIB} PATH)
			SET(GD_TMP_FOUND OFF)
			FOREACH(GD_LIBDIR ${GD_LIBRARY_DIR})
				IF ("${GD_NEXTLIBDIR}" STREQUAL "${GD_LIBDIR}")
					SET(GD_TMP_FOUND ON)
				ENDIF ("${GD_NEXTLIBDIR}" STREQUAL "${GD_LIBDIR}")
			ENDFOREACH(GD_LIBDIR ${GD_LIBRARIES})
			IF (NOT GD_TMP_FOUND)
				SET(GD_LIBRARY_DIR "${GD_LIBRARY_DIR}" "${GD_NEXTLIBDIR}")
			ENDIF (NOT GD_TMP_FOUND)
		ENDFOREACH(GD_LIB ${GD_LIBRARIES})
	ENDIF (WIN32 AND NOT CYGWIN)
ENDIF (GD_FOUND)

IF (GD_FOUND)
   IF (NOT GD_FIND_QUIETLY)
      MESSAGE(STATUS "Found GD: ${GD_LIBRARY}")
   ENDIF (NOT GD_FIND_QUIETLY)
ELSE (GD_FOUND)
   IF (GD_FIND_REQUIRED)
      MESSAGE(FATAL_ERROR "Could not find GD library")
   ENDIF (GD_FIND_REQUIRED)
ENDIF (GD_FOUND)

MARK_AS_ADVANCED(
  GD_LIBRARY
  GD_LIBRARIES
  GD_INCLUDE_DIR
  GD_LIBRARY_DIR
  GD_SUPPORTS_PNG
  GD_SUPPORTS_JPEG
  GD_SUPPORTS_GIF
)
