# - FindGTK2.cmake
# This module finds the GTK2/GTKMM widget libraries
#
# Specify one or more of the following components
# as you call this Find macro:
#
# gtk
# gtkmm
#
# Example Usage:
#  FIND_PACKAGE(GTK2 COMPONENTS gtk)
# 
# The following variables will be defined for your use
#  GTK2_FOUND - Was GTK found?
#  GTK2_INCLUDE_DIRS - All include directories
#  GTK2_LIBRARIES - All libraries
#
# Copyright (c) 2008
#     Philip Lowman <philip@yhbt.com>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.

SET(GTK2_FOUND)
SET(GTK2_INCLUDE_DIRS)
SET(GTK2_LIBRARIES)

MACRO(_GTK2_FIND_INCLUDE_DIR _var _hdr)
    SET(_relatives
        # FIXME
        atk-1.0
        atkmm-1.6
        cairo
        cairomm-1.0
        gdkmm-2.4
        giomm-2.4
        gtk-2.0
        gtkmm-2.4
        glibmm-2.4
        glib-2.0
        pango-1.0
        pangomm-1.4
        sigc++-2.0
    )
    SET(_paths)
    FOREACH(_d ${_relatives})
        LIST(APPEND _paths /usr/local/include/${_d})
        LIST(APPEND _paths /usr/local/lib/${_d}/include)
        LIST(APPEND _paths /usr/include/${_d})
        LIST(APPEND _paths /usr/lib/${_d}/include)
        LIST(APPEND _paths [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]\\include\\${_d})
        LIST(APPEND _paths [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]\\lib\\${_d}\\include)
    ENDFOREACH()

    FIND_PATH(${_var} ${_hdr}
        PATHS
        ${_paths}
    )
    IF(${_var})
        LIST(APPEND GTK2_INCLUDE_DIRS ${${_var}})
        MARK_AS_ADVANCED(${_var})
    ENDIF()
ENDMACRO()

MACRO(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version)
    # Not GTK versions per se but the versions encoded into Windows
    # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example)
    SET(_versions 2.20 2.18 2.16 2.14 2.12
                  2.10  2.8  2.6  2.4  2.2 2.0
                  1.20 1.18 1.16 1.14 1.12
                  1.10  1.8  1.6  1.4  1.2 1.0)

    IF(${_expand_vc})
        # Add vc80/vc90 midfixes
        IF(MSVC80)
            SET(_lib  ${_lib}-vc80)
            SET(_libd ${_lib}-d)
        ELSEIF(MSVC90)
            SET(_lib  ${_lib}-vc90)
            SET(_libd ${_lib}-d)
        ENDIF()
    ENDIF()

    SET(_lib_list)
    SET(_libd_list)
    IF(${_append_version})
        FOREACH(_v ${_versions})
            LIST(APPEND _lib_list  "${_lib}-${_v}")
            LIST(APPEND _libd_list "${_lib}-d-${_v}")
        ENDFOREACH()
    ELSE()
        SET(_lib_list ${_lib})
        SET(_libd_list ${_libd})
    ENDIF()

    # For some silly reason the MSVC libraries use _ instead of .
    # in the version fields
    IF(${_expand_vc} AND MSVC)
        SET(_no_dots_libs_list)
        FOREACH(_l ${_lib_list})
            STRING(REPLACE "." "_" _no_dots_library ${_l})
            LIST(APPEND _no_dots_lib_list ${_no_dots_library})
        ENDFOREACH()
        # And for debug
        SET(_no_dots_libsd_list)
        FOREACH(_l ${_libd_list})
            STRING(REPLACE "." "_" _no_dots_libraryd ${_l})
            LIST(APPEND _no_dots_libd_list ${_no_dots_libraryd})
        ENDFOREACH()

        # Copy list back to original names
        SET(_lib_list ${_no_dots_lib_list})
        SET(_libd_list ${_no_dots_libd_list})
    ENDIF()

    FIND_LIBRARY(${_var} 
        NAMES ${_lib_list}
        PATHS
        [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]\\lib
        )
    IF(_expand_vc AND MSVC)
        FIND_LIBRARY(${_var}_DEBUG
            NAMES ${_libd_list}
            PATHS
            [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]\\lib
        )
        MARK_AS_ADVANCED(${_var}_DEBUG)
    ELSE()
        SET(${_var}_DEBUG ${${_var}})
    ENDIF()

    IF(${_var})
        LIST(APPEND GTK2_LIBRARIES optimized ${${_var}} debug ${${_var}_DEBUG} )
        MARK_AS_ADVANCED(${_var})
    ENDIF()
ENDMACRO()

FOREACH(_component ${GTK2_FIND_COMPONENTS})
    IF(_component STREQUAL "gtk")
        _GTK2_FIND_INCLUDE_DIR(GTK2_GLIB_INCLUDE_DIR glib.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBCONFIG_INCLUDE_DIR glibconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GLIB_LIBRARY glib 0 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_INCLUDE_DIR gdk/gdk.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GDKCONFIG_INCLUDE_DIR gdkconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GDK_LIBRARY gdk-x11 0 1)
        _GTK2_FIND_LIBRARY    (GTK2_GDK_LIBRARY gdk-win32 0 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_GTK_INCLUDE_DIR gtk/gtk.h)
        _GTK2_FIND_LIBRARY    (GTK2_GTK_LIBRARY gtk-x11 0 1)
        _GTK2_FIND_LIBRARY    (GTK2_GTK_LIBRARY gtk-win32 0 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_CAIRO_INCLUDE_DIR cairo.h)
        _GTK2_FIND_LIBRARY    (GTK2_CAIRO_LIBRARY cairo 0 0)

        _GTK2_FIND_INCLUDE_DIR(GTK2_PANGO_INCLUDE_DIR pango/pango.h)
        _GTK2_FIND_LIBRARY    (GTK2_PANGO_LIBRARY pango 0 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_ATK_INCLUDE_DIR atk/atk.h)
        _GTK2_FIND_LIBRARY    (GTK2_ATK_LIBRARY atk 0 1)

        #ELSEIF(_component STREQUAL "gdk_pixbuf")
        #_GTK2_FIND_INCLUDE_DIR(GTK2_GDKPIXBUF_INCLUDE_DIR gdk-pixbuf/gdk-pixbuf.h)
        #_GTK2_FIND_LIBRARY    (GTK2_GDKPIXBUF_LIBRARY gdk_pixbuf 0 1)

    ELSEIF(_component STREQUAL "gtkmm")

        _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMM_INCLUDE_DIR glibmm.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMMCONFIG_INCLUDE_DIR glibmmconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GLIBMM_LIBRARY glibmm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMM_INCLUDE_DIR gdkmm.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMMCONFIG_INCLUDE_DIR gdkmmconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GDKMM_LIBRARY gdkmm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMM_INCLUDE_DIR gtkmm.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMMCONFIG_INCLUDE_DIR gtkmmconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GTKMM_LIBRARY gtkmm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_CAIROMM_INCLUDE_DIR cairomm/cairomm.h)
        _GTK2_FIND_LIBRARY    (GTK2_CAIROMM_LIBRARY cairomm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMM_INCLUDE_DIR pangomm.h)
        _GTK2_FIND_LIBRARY    (GTK2_PANGOMM_LIBRARY pangomm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++_INCLUDE_DIR sigc++/sigc++.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++CONFIG_INCLUDE_DIR sigc++config.h)
        _GTK2_FIND_LIBRARY    (GTK2_SIGC++_LIBRARY sigc 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMM_INCLUDE_DIR giomm.h)
        _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMMCONFIG_INCLUDE_DIR giommconfig.h)
        _GTK2_FIND_LIBRARY    (GTK2_GIOMM_LIBRARY giomm 1 1)

        _GTK2_FIND_INCLUDE_DIR(GTK2_ATKMM_INCLUDE_DIR atkmm.h)
        _GTK2_FIND_LIBRARY    (GTK2_ATKMM_LIBRARY atkmm 1 1)
    ENDIF()
ENDFOREACH()

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2 DEFAULT_MSG GTK2_FOUND ${GTK2_LIBRARY})
