forked from Mirrors/openclonk
223 lines
7.7 KiB
CMake
223 lines
7.7 KiB
CMake
# OpenClonk, http://www.openclonk.org
|
|
#
|
|
# Copyright (c) 2015-2016, The OpenClonk Team and contributors
|
|
#
|
|
# Distributed under the terms of the ISC license; see accompanying file
|
|
# "COPYING" for details.
|
|
#
|
|
# "Clonk" is a registered trademark of Matthes Bender, used with permission.
|
|
# See accompanying file "TRADEMARK" for details.
|
|
#
|
|
# To redistribute this file separately, substitute the full license texts
|
|
# for the above references.
|
|
|
|
# Locate GTK3.
|
|
# This module defines
|
|
# GTK3_INCLUDE_DIRS - a list of directories that need to be added to the include path
|
|
# GTK3_LIBRARIES - a list of libraries to link against to use GTK3
|
|
# GTK3_LIBRARY_DIRS - a list of library directories where the libraries above can be found
|
|
# GTK3_COMPILE_DEFINITIONS - a list of compiler flags that need to be set to use GTK3
|
|
# GTK3_FOUND - if false, GTK3 cannot be used
|
|
#
|
|
# FindGTK3 may optionally take a list of components that should also be located
|
|
# and added to the library list. The following components are valid:
|
|
# gtksourceview - GtkSourceView 3.0
|
|
# gobject - Glib GObject 2.0
|
|
# gio - Glib GIO 2.0
|
|
# gthread
|
|
# glib - Glib 2.0
|
|
#
|
|
# If any of these components are requested, the following variables will be
|
|
# defined with the same meaning as above:
|
|
# GTK3_<component>_INCLUDE_DIRS
|
|
# GTK3_<component>_LIBRARIES
|
|
# GTK3_<component>_FOUND
|
|
|
|
if(GTK3_FIND_QUIETLY)
|
|
set(__GTK3_QUIET "QUIET")
|
|
else()
|
|
set(__GTK3_QUIET)
|
|
endif()
|
|
|
|
include(FindPackageHandleStandardArgs)
|
|
|
|
if(NOT GTK3_FIND_COMPONENTS)
|
|
set(GTK3_FIND_COMPONENTS)
|
|
endif()
|
|
|
|
find_package(PkgConfig QUIET)
|
|
if(PKG_CONFIG_FOUND)
|
|
# If pkg-config is available, defer to it
|
|
set(__GTK3_VERSION_CHECK)
|
|
if(GTK3_FIND_VERSION_EXACT)
|
|
set(__GTK3_VERSION_CHECK "=${GTK3_FIND_VERSION}")
|
|
elseif(GTK3_FIND_VERSION)
|
|
set(__GTK3_VERSION_CHECK ">=${GTK3_FIND_VERSION}")
|
|
endif()
|
|
|
|
pkg_check_modules(GTK3 ${__GTK3_QUIET} "gtk+-3.0${__GTK3_VERSION_CHECK}")
|
|
|
|
macro(__GTK3_HANDLE_COMPONENT __cname __cfullname)
|
|
if(__component STREQUAL "${__cname}")
|
|
pkg_check_modules(GTK3_${__cname} ${__GTK3_QUIET} "${__cfullname}")
|
|
if(GTK3_${__cname}_FOUND)
|
|
if(GTK3_LIBRARY_DIRS)
|
|
list(REMOVE_ITEM GTK3_${__cname}_LIBRARY_DIRS ${GTK3_LIBRARY_DIRS})
|
|
endif()
|
|
if(GTK3_INCLUDE_DIRS)
|
|
list(REMOVE_ITEM GTK3_${__cname}_INCLUDE_DIRS ${GTK3_INCLUDE_DIRS})
|
|
endif()
|
|
if(GTK3_FIND_REQUIRED_${__cname})
|
|
list(APPEND GTK3_LIBRARIES ${GTK3_${__cname}_LIBRARIES})
|
|
list(APPEND GTK3_INCLUDE_DIRS ${GTK3_${__cname}_INCLUDE_DIRS})
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endmacro(__GTK3_HANDLE_COMPONENT)
|
|
|
|
foreach(__component ${GTK3_FIND_COMPONENTS})
|
|
__GTK3_HANDLE_COMPONENT(gtksourceview "gtksourceview-3.0")
|
|
__GTK3_HANDLE_COMPONENT(gobject "gobject-2.0")
|
|
__GTK3_HANDLE_COMPONENT(gio "gio-2.0")
|
|
__GTK3_HANDLE_COMPONENT(gthread "gthread-2.0")
|
|
__GTK3_HANDLE_COMPONENT(glib "glib-2.0")
|
|
endforeach()
|
|
|
|
set(GTK3_COMPILE_DEFINITIONS ${GTK3_CFLAGS_OTHER})
|
|
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
|
|
GTK3
|
|
FOUND_VAR GTK3_FOUND
|
|
VERSION_VAR GTK3_VERSION
|
|
HANDLE_COMPONENTS
|
|
REQUIRED_VARS
|
|
GTK3_INCLUDE_DIRS GTK3_LIBRARIES
|
|
)
|
|
else()
|
|
# Find all headers and libraries
|
|
find_path(GTK3_INCLUDE_DIR NAMES gtk/gtk.h PATH_SUFFIXES gtk-3.0)
|
|
find_library(GTK3_LIBRARY NAMES gtk-3.0)
|
|
mark_as_advanced(GTK3_INCLUDE_DIR GTK3_LIBRARY)
|
|
|
|
find_path(GTK3_GDK_INCLUDE_DIR NAMES gdk/gdk.h PATH_SUFFIXES gtk-3.0)
|
|
find_library(GTK3_GDK_LIBRARY NAMES gdk-3.0)
|
|
mark_as_advanced(GTK3_GDK_INCLUDE_DIR GTK3_GDK_LIBRARY)
|
|
|
|
find_path(GTK3_Glib_INCLUDE_DIR NAMES glib.h PATH_SUFFIXES glib-2.0)
|
|
find_library(GTK3_Glib_LIBRARY NAMES glib-2.0)
|
|
get_filename_component(__GTK3_Glib_LIBRARY_DIR "${GTK3_Glib_LIBRARY}" PATH)
|
|
find_path(GTK3_Glibconfig_INCLUDE_DIR
|
|
NAMES glibconfig.h
|
|
HINTS ${__GTK3_Glib_LIBRARY_DIR}
|
|
PATH_SUFFIXES glib-2.0/include
|
|
)
|
|
mark_as_advanced(GTK3_Glib_INCLUDE_DIR GTK3_Glibconfig_INCLUDE_DIR GTK3_Glib_LIBRARY)
|
|
|
|
find_path(GTK3_Atk_INCLUDE_DIR NAMES atk/atk.h PATH_SUFFIXES atk-1.0)
|
|
find_library(GTK3_Atk_LIBRARY NAMES atk-1.0)
|
|
mark_as_advanced(GTK3_Atk_INCLUDE_DIR GTK3_Atk_LIBRARY)
|
|
|
|
find_path(GTK3_Cairo_INCLUDE_DIR NAMES cairo.h)
|
|
find_library(GTK3_Cairo_LIBRARY NAMES cairo)
|
|
mark_as_advanced(GTK3_Cairo_INCLUDE_DIR GTK3_Cairo_LIBRARY)
|
|
|
|
find_path(GTK3_Pango_INCLUDE_DIR NAMES pango/pango.h PATH_SUFFIXES pango-1.0)
|
|
find_library(GTK3_Pango_LIBRARY NAMES pango-1.0)
|
|
find_library(GTK3_PangoCairo_LIBRARY NAMES pangocairo-1.0)
|
|
mark_as_advanced(GTK3_Pango_INCLUDE_DIR GTK3_Pango_LIBRARY GTK3_PangoCairo_LIBRARY)
|
|
|
|
find_path(GTK3_GDKPixbuf_INCLUDE_DIR NAMES gdk-pixbuf/gdk-pixbuf.h PATH_SUFFIXES gdk-pixbuf-2.0)
|
|
find_library(GTK3_GDKPixbuf_LIBRARY NAMES gdk_pixbuf-2.0)
|
|
mark_as_advanced(GTK3_GDKPixbuf_INCLUDE_DIR GTK3_GDKPixbuf_LIBRARY)
|
|
|
|
set(__GTK3_REQUIRED_INCLUDE_DIRS
|
|
GTK3_INCLUDE_DIR
|
|
GTK3_GDK_INCLUDE_DIR
|
|
GTK3_Glib_INCLUDE_DIR GTK3_Glibconfig_INCLUDE_DIR
|
|
GTK3_Atk_INCLUDE_DIR
|
|
GTK3_Cairo_INCLUDE_DIR
|
|
GTK3_Pango_INCLUDE_DIR
|
|
GTK3_GDKPixbuf_INCLUDE_DIR
|
|
)
|
|
set(__GTK3_REQUIRED_LIBRARIES
|
|
GTK3_LIBRARY
|
|
GTK3_GDK_LIBRARY
|
|
GTK3_Glib_LIBRARY
|
|
GTK3_Atk_LIBRARY
|
|
GTK3_Cairo_LIBRARY
|
|
GTK3_Pango_LIBRARY GTK3_PangoCairo_LIBRARY
|
|
GTK3_GDKPixbuf_LIBRARY
|
|
)
|
|
|
|
set(__GTK3_COMPONENT_INCLUDE_DIRS)
|
|
set(__GTK3_COMPONENT_LIBRARIES)
|
|
macro(__GTK3_HANDLE_COMPONENT __cname __cheader __csuffixes __clibrary)
|
|
if(__component STREQUAL "${__cname}")
|
|
find_path(GTK3_${__cname}_INCLUDE_DIR NAMES ${__cheader} PATH_SUFFIXES ${__csuffixes})
|
|
find_library(GTK3_${__cname}_LIBRARY NAMES ${__clibrary})
|
|
mark_as_advanced(GTK3_${__cname}_INCLUDE_DIR GTK3_${__cname}_LIBRARY)
|
|
if(GTK3_${__cname}_INCLUDE_DIR AND GTK3_${__cname}_LIBRARY)
|
|
set(GTK3_${__cname}_FOUND TRUE)
|
|
set(GTK3_${__cname}_INCLUDE_DIRS ${GTK3_${__cname}_INCLUDE_DIR})
|
|
set(GTK3_${__cname}_LIBRARIES ${GTK3_${__cname}_LIBRARY})
|
|
if(GTK3_FIND_REQUIRED_${__cname})
|
|
list(APPEND __GTK3_REQUIRED_LIBRARIES GTK3_${__cname}_LIBRARY)
|
|
list(APPEND __GTK3_REQUIRED_INCLUDE_DIRS GTK3_${__cname}_INCLUDE_DIR)
|
|
endif()
|
|
endif()
|
|
endif()
|
|
endmacro(__GTK3_HANDLE_COMPONENT)
|
|
foreach(__component ${GTK3_FIND_COMPONENTS})
|
|
__GTK3_HANDLE_COMPONENT(gtksourceview gtksourceview/gtksourceview.h gtksourceview-3.0 gtksourceview-3.0)
|
|
__GTK3_HANDLE_COMPONENT(gobject gobject/gobject.h glib-2.0 gobject-2.0)
|
|
__GTK3_HANDLE_COMPONENT(gio gio/gio.h glib-2.0 gio-2.0)
|
|
__GTK3_HANDLE_COMPONENT(gthread glib/gthread.h glib-2.0 gthread-2.0)
|
|
__GTK3_HANDLE_COMPONENT(glib glib.h glib-2.0 glib-2.0)
|
|
endforeach()
|
|
|
|
# Parse version from GTK3 header
|
|
if(GTK3_INCLUDE_DIR)
|
|
file(READ "${GTK3_INCLUDE_DIR}/gtk/gtkversion.h" _gtk_header)
|
|
string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION \\(([0-9]+)\\).*" "\\1" __GTK3_MAJOR_VER "${_gtk_header}")
|
|
string(REGEX REPLACE ".*#define GTK_MINOR_VERSION \\(([0-9]+)\\).*" "\\1" __GTK3_MINOR_VER "${_gtk_header}")
|
|
string(REGEX REPLACE ".*#define GTK_MICRO_VERSION \\(([0-9]+)\\).*" "\\1" __GTK3_MICRO_VER "${_gtk_header}")
|
|
|
|
set(GTK3_VERSION "${__GTK3_MAJOR_VER}.${__GTK3_MINOR_VER}.${__GTK3_MICRO_VER}")
|
|
unset(__GTK3_MICRO_VER)
|
|
unset(__GTK3_MINOR_VER)
|
|
unset(__GTK3_MAJOR_VER)
|
|
unset(_gtk_header)
|
|
endif()
|
|
|
|
FIND_PACKAGE_HANDLE_STANDARD_ARGS(
|
|
GTK3
|
|
FOUND_VAR GTK3_FOUND
|
|
VERSION_VAR GTK3_VERSION
|
|
HANDLE_COMPONENTS
|
|
REQUIRED_VARS
|
|
${__GTK3_REQUIRED_INCLUDE_DIRS} ${__GTK3_REQUIRED_LIBRARIES}
|
|
)
|
|
if(GTK3_FOUND)
|
|
set(GTK3_INCLUDE_DIRS)
|
|
foreach(__dir ${__GTK3_REQUIRED_INCLUDE_DIRS})
|
|
list(APPEND GTK3_INCLUDE_DIRS "${${__dir}}")
|
|
endforeach()
|
|
set(GTK3_LIBRARIES)
|
|
foreach(__lib ${__GTK3_REQUIRED_LIBRARIES})
|
|
list(APPEND GTK3_LIBRARIES "${${__lib}}")
|
|
endforeach()
|
|
list(REMOVE_DUPLICATES GTK3_LIBRARIES)
|
|
list(REMOVE_DUPLICATES GTK3_INCLUDE_DIRS)
|
|
set(GTK3_COMPILE_DEFINITIONS)
|
|
set(GTK3_LIBRARY_DIRS)
|
|
endif()
|
|
|
|
unset(__GTK3_REQUIRED_INCLUDE_DIRS)
|
|
unset(__GTK3_REQUIRED_LIBRARIES)
|
|
endif()
|
|
|
|
if(NOT GTK3_FOUND)
|
|
unset(GTK3_INCLUDE_DIRS)
|
|
unset(GTK3_LIBRARIES)
|
|
endif()
|