forked from Mirrors/openclonk
CMake: Split GTK3 tests into a separate module
Nobody uses pkg-config on Windows, and we already have a perfectly viable solution for finding libraries - it's called CMake. We're still defering to pkg-config when it exists because who knows what arcane cflags might be required on some systems.shapetextures
parent
b32a539474
commit
5abc112a81
|
@ -11,7 +11,7 @@
|
|||
# To redistribute this file separately, substitute the full license texts
|
||||
# for the above references.
|
||||
|
||||
cmake_minimum_required (VERSION 2.8.7)
|
||||
cmake_minimum_required (VERSION 2.8.10)
|
||||
project (openclonk CXX C)
|
||||
|
||||
# CMP0054: Only interpret if() arguments as variables or keywords when unquoted
|
||||
|
@ -858,22 +858,9 @@ endif()
|
|||
|
||||
# Set GTK link directory. This needs to be done before add_executable,
|
||||
# otherwise the path is not used for linking clonk
|
||||
find_package(GTK3 COMPONENTS gthread gio gobject OPTIONAL_COMPONENTS gtksourceview)
|
||||
if(USE_GTK)
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(GTK REQUIRED "glib-2.0 >= 2.32" "gtk+-3.0 >= 3.4")
|
||||
include_directories(${GTK_INCLUDE_DIRS})
|
||||
link_directories(${GTK_LIBRARY_DIRS})
|
||||
endif()
|
||||
|
||||
# Try to find GTK for mape
|
||||
find_package(PkgConfig)
|
||||
if (PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(MAPE_GTK glib-2.0>=2.32 gthread-2.0 gtk+-3.0>=3.4 gtksourceview-3.0)
|
||||
endif()
|
||||
if(MAPE_GTK_FOUND)
|
||||
# hrm, cmake doesn't have target_include_directories...
|
||||
include_directories(${MAPE_GTK_INCLUDE_DIRS})
|
||||
link_directories(${MAPE_GTK_LIBRARY_DIRS})
|
||||
link_directories(${GTK3_LIBRARY_DIRS})
|
||||
endif()
|
||||
|
||||
# Select an audio library
|
||||
|
@ -958,12 +945,11 @@ add_executable(openclonk WIN32 MACOSX_BUNDLE
|
|||
${OC_CLONK_SOURCES}
|
||||
)
|
||||
|
||||
if(MAPE_GTK_FOUND)
|
||||
if(GTK3_FOUND AND GTK3_gtksourceview_FOUND)
|
||||
add_executable(mape ${MAPE_BASE_SOURCES} ${MAPE_SOURCES})
|
||||
unseparate_arguments(MAPE_GTK_CFLAGS "${MAPE_GTK_CFLAGS}")
|
||||
set_property(TARGET mape PROPERTY COMPILE_FLAGS "${MAPE_GTK_CFLAGS}")
|
||||
unseparate_arguments(MAPE_GTK_LDFLAGS "${MAPE_GTK_LDFLAGS}")
|
||||
set_property(TARGET mape PROPERTY LINK_FLAGS "${MAPE_GTK_LDFLAGS}")
|
||||
set_property(TARGET mape APPEND PROPERTY COMPILE_FLAGS ${GTK3_COMPILE_DEFINITIONS})
|
||||
target_include_directories(mape PRIVATE ${GTK3_INCLUDE_DIRS} ${GTK3_gtksourceview_INCLUDE_DIRS})
|
||||
target_link_libraries(mape ${GTK3_LIBRARIES} ${GTK3_gtksourceview_LIBRARIES})
|
||||
endif()
|
||||
|
||||
add_executable(c4group
|
||||
|
@ -1333,15 +1319,13 @@ if(NOT USE_CONSOLE)
|
|||
CHECK_CXX_SOURCE_COMPILES("#include <GL/glew.h>\nvoid GLAPIENTRY OpenGLDebugProc(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length, const char* message, const void* userParam) {}\nint main() { GLDEBUGPROCARB proc = &OpenGLDebugProc; }" GLDEBUGPROCARB_USERPARAM_IS_CONST)
|
||||
endif()
|
||||
if(USE_GTK)
|
||||
SET(WITH_DEVELOPER_MODE ${GTK_FOUND})
|
||||
SET(WITH_GLIB ${GTK_FOUND})
|
||||
SET(WITH_DEVELOPER_MODE ${GTK3_FOUND})
|
||||
SET(WITH_GLIB ${GTK3_FOUND})
|
||||
include_directories(${GTK3_INCLUDE_DIRS})
|
||||
target_link_libraries(openclonk
|
||||
${GTK_LIBRARIES}
|
||||
${GTK3_LIBRARIES}
|
||||
)
|
||||
endif()
|
||||
if(TARGET mape)
|
||||
target_link_libraries(mape ${MAPE_GTK_LIBRARIES})
|
||||
endif()
|
||||
if(USE_X11)
|
||||
FINDLIB(X11_LIBRARIES X11)
|
||||
FINDLIB(XRANDR_LIBRARIES Xrandr)
|
||||
|
|
|
@ -0,0 +1,218 @@
|
|||
# OpenClonk, http://www.openclonk.org
|
||||
#
|
||||
# Copyright (c) 2015, 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
|
||||
#
|
||||
# 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}")
|
||||
list(REMOVE_ITEM GTK3_${__cname}_LIBRARIES ${GTK3_LIBRARIES})
|
||||
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()
|
||||
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")
|
||||
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)
|
||||
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()
|
|
@ -7,3 +7,6 @@ add_library(tinyxml
|
|||
tinyxmlparser.cpp
|
||||
)
|
||||
|
||||
if(GTK3_FOUND)
|
||||
target_include_directories(tinyxml PRIVATE ${GTK3_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
|
Loading…
Reference in New Issue