1# - FindGTK2.cmake 2# This module can find the GTK2 widget libraries and several of its other 3# optional components like gtkmm, glade, and glademm. 4# 5# NOTE: If you intend to use version checking, CMake 2.6.2 or later is 6# required. 7# 8# Specify one or more of the following components 9# as you call this find module. See example below. 10# 11# gtk 12# gtkmm 13# glade 14# glademm 15# 16# The following variables will be defined for your use 17# 18# GTK2_FOUND - Were all of your specified components found? 19# GTK2_INCLUDE_DIRS - All include directories 20# GTK2_LIBRARIES - All libraries 21# 22# GTK2_VERSION - The version of GTK2 found (x.y.z) 23# GTK2_MAJOR_VERSION - The major version of GTK2 24# GTK2_MINOR_VERSION - The minor version of GTK2 25# GTK2_PATCH_VERSION - The patch version of GTK2 26# 27# Optional variables you can define prior to calling this module: 28# 29# GTK2_DEBUG - Enables verbose debugging of the module 30# GTK2_SKIP_MARK_AS_ADVANCED - Disable marking cache variables as advanced 31# GTK2_ADDITIONAL_SUFFIXES - Allows defining additional directories to 32# search for include files 33# 34#================= 35# Example Usage: 36# 37# Call find_package() once, here are some examples to pick from: 38# 39# Require GTK 2.6 or later 40# find_package(GTK2 2.6 REQUIRED gtk) 41# 42# Require GTK 2.10 or later and Glade 43# find_package(GTK2 2.10 REQUIRED gtk glade) 44# 45# Search for GTK/GTKMM 2.8 or later 46# find_package(GTK2 2.8 COMPONENTS gtk gtkmm) 47# 48# if(GTK2_FOUND) 49# include_directories(${GTK2_INCLUDE_DIRS}) 50# add_executable(mygui mygui.cc) 51# target_link_libraries(mygui ${GTK2_LIBRARIES}) 52# endif() 53# 54 55#============================================================================= 56# Copyright 2009 Kitware, Inc. 57# Copyright 2008-2009 Philip Lowman <philip@yhbt.com> 58# 59# Distributed under the OSI-approved BSD License (the "License"); 60# see accompanying file Copyright.txt for details. 61# 62# This software is distributed WITHOUT ANY WARRANTY; without even the 63# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 64# See the License for more information. 65#============================================================================= 66# (To distribute this file outside of CMake, substitute the full 67# License text for the above reference.) 68 69# Version 1.3 (11/9/2010) (CMake 2.8.4) 70# * 11429: Add support for detecting GTK2 built with Visual Studio 10. 71# Thanks to Vincent Levesque for the patch. 72 73# Version 1.2 (8/30/2010) (CMake 2.8.3) 74# * Merge patch for detecting gdk-pixbuf library (split off 75# from core GTK in 2.21). Thanks to Vincent Untz for the patch 76# and Ricardo Cruz for the heads up. 77# Version 1.1 (8/19/2010) (CMake 2.8.3) 78# * Add support for detecting GTK2 under macports (thanks to Gary Kramlich) 79# Version 1.0 (8/12/2010) (CMake 2.8.3) 80# * Add support for detecting new pangommconfig.h header file 81# (Thanks to Sune Vuorela & the Debian Project for the patch) 82# * Add support for detecting fontconfig.h header 83# * Call find_package(Freetype) since it's required 84# * Add support for allowing users to add additional library directories 85# via the GTK2_ADDITIONAL_SUFFIXES variable (kind of a future-kludge in 86# case the GTK developers change versions on any of the directories in the 87# future). 88# Version 0.8 (1/4/2010) 89# * Get module working under MacOSX fink by adding /sw/include, /sw/lib 90# to PATHS and the gobject library 91# Version 0.7 (3/22/09) 92# * Checked into CMake CVS 93# * Added versioning support 94# * Module now defaults to searching for GTK if COMPONENTS not specified. 95# * Added HKCU prior to HKLM registry key and GTKMM specific environment 96# variable as per mailing list discussion. 97# * Added lib64 to include search path and a few other search paths where GTK 98# may be installed on Unix systems. 99# * Switched to lowercase CMake commands 100# * Prefaced internal variables with _GTK2 to prevent collision 101# * Changed internal macros to functions 102# * Enhanced documentation 103# Version 0.6 (1/8/08) 104# Added GTK2_SKIP_MARK_AS_ADVANCED option 105# Version 0.5 (12/19/08) 106# Second release to cmake mailing list 107 108#============================================================= 109# _GTK2_GET_VERSION 110# Internal function to parse the version number in gtkversion.h 111# _OUT_major = Major version number 112# _OUT_minor = Minor version number 113# _OUT_micro = Micro version number 114# _gtkversion_hdr = Header file to parse 115#============================================================= 116function(_GTK2_GET_VERSION _OUT_major _OUT_minor _OUT_micro _gtkversion_hdr) 117 file(READ ${_gtkversion_hdr} _contents) 118 if(_contents) 119 string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_major} "${_contents}") 120 string(REGEX REPLACE ".*#define GTK_MINOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_minor} "${_contents}") 121 string(REGEX REPLACE ".*#define GTK_MICRO_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_micro} "${_contents}") 122 123 if(NOT ${_OUT_major} MATCHES "[0-9]+") 124 message(FATAL_ERROR "Version parsing failed for GTK2_MAJOR_VERSION!") 125 endif() 126 if(NOT ${_OUT_minor} MATCHES "[0-9]+") 127 message(FATAL_ERROR "Version parsing failed for GTK2_MINOR_VERSION!") 128 endif() 129 if(NOT ${_OUT_micro} MATCHES "[0-9]+") 130 message(FATAL_ERROR "Version parsing failed for GTK2_MICRO_VERSION!") 131 endif() 132 133 set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE) 134 set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE) 135 set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE) 136 else() 137 message(FATAL_ERROR "Include file ${_gtkversion_hdr} does not exist") 138 endif() 139endfunction() 140 141#============================================================= 142# _GTK2_FIND_INCLUDE_DIR 143# Internal function to find the GTK include directories 144# _var = variable to set 145# _hdr = header file to look for 146#============================================================= 147function(_GTK2_FIND_INCLUDE_DIR _var _hdr) 148 149 if(GTK2_DEBUG) 150 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 151 "_GTK2_FIND_INCLUDE_DIR( ${_var} ${_hdr} )") 152 endif() 153 154 set(_relatives 155 # If these ever change, things will break. 156 ${GTK2_ADDITIONAL_SUFFIXES} 157 glibmm-2.4 158 glib-2.0 159 atk-1.0 160 atkmm-1.6 161 cairo 162 cairomm-1.0 163 gdk-pixbuf-2.0 164 gdkmm-2.4 165 giomm-2.4 166 gtk-2.0 167 gtkmm-2.4 168 libglade-2.0 169 libglademm-2.4 170 harfbuzz 171 pango-1.0 172 pangomm-1.4 173 sigc++-2.0 174 ) 175 176 set(_suffixes) 177 foreach(_d ${_relatives}) 178 list(APPEND _suffixes ${_d}) 179 list(APPEND _suffixes ${_d}/include) # for /usr/lib/gtk-2.0/include 180 endforeach() 181 182 if(GTK2_DEBUG) 183 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 184 "include suffixes = ${_suffixes}") 185 endif() 186 187 find_path(${_var} ${_hdr} 188 PATHS 189 /usr/local/lib64 190 /usr/local/lib 191 # fix for Ubuntu == 11.04 (Natty Narwhal) 192 /usr/lib/i386-linux-gnu/ 193 /usr/lib/x86_64-linux-gnu/ 194 # end 195 # fix for Ubuntu >= 11.10 (Oneiric Ocelot) 196 /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE} 197 # end 198 /usr/lib64 199 /usr/lib 200 /opt/gnome/include 201 /opt/gnome/lib 202 /opt/openwin/include 203 /usr/openwin/lib 204 /sw/include 205 /sw/lib 206 /opt/local/include 207 /opt/local/lib 208 $ENV{GTKMM_BASEPATH}/include 209 $ENV{GTKMM_BASEPATH}/lib 210 [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include 211 [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib 212 [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/include 213 [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib 214 PATH_SUFFIXES 215 ${_suffixes} 216 ) 217 218 if(${_var}) 219 set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${${_var}} PARENT_SCOPE) 220 if(NOT GTK2_SKIP_MARK_AS_ADVANCED) 221 mark_as_advanced(${_var}) 222 endif() 223 endif() 224 225endfunction(_GTK2_FIND_INCLUDE_DIR) 226 227#============================================================= 228# _GTK2_FIND_LIBRARY 229# Internal function to find libraries packaged with GTK2 230# _var = library variable to create 231#============================================================= 232function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version) 233 234 if(GTK2_DEBUG) 235 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 236 "_GTK2_FIND_LIBRARY( ${_var} ${_lib} ${_expand_vc} ${_append_version} )") 237 endif() 238 239 # Not GTK versions per se but the versions encoded into Windows 240 # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example) 241 # Also the MSVC libraries use _ for . (this is handled below) 242 set(_versions 2.20 2.18 2.16 2.14 2.12 243 2.10 2.8 2.6 2.4 2.2 2.0 244 1.20 1.18 1.16 1.14 1.12 245 1.10 1.8 1.6 1.4 1.2 1.0) 246 247 set(_library) 248 set(_library_d) 249 250 set(_library ${_lib}) 251 252 if(_expand_vc AND MSVC) 253 # Add vc80/vc90/vc100 midfixes 254 if(MSVC80) 255 set(_library ${_library}-vc80) 256 elseif(MSVC90) 257 set(_library ${_library}-vc90) 258 elseif(MSVC10) 259 set(_library ${_library}-vc100) 260 endif() 261 set(_library_d ${_library}-d) 262 endif() 263 264 if(GTK2_DEBUG) 265 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 266 "After midfix addition = ${_library} and ${_library_d}") 267 endif() 268 269 set(_lib_list) 270 set(_libd_list) 271 if(_append_version) 272 foreach(_ver ${_versions}) 273 list(APPEND _lib_list "${_library}-${_ver}") 274 list(APPEND _libd_list "${_library_d}-${_ver}") 275 endforeach() 276 else() 277 set(_lib_list ${_library}) 278 set(_libd_list ${_library_d}) 279 endif() 280 281 if(GTK2_DEBUG) 282 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 283 "library list = ${_lib_list} and library debug list = ${_libd_list}") 284 endif() 285 286 # For some silly reason the MSVC libraries use _ instead of . 287 # in the version fields 288 if(_expand_vc AND MSVC) 289 set(_no_dots_lib_list) 290 set(_no_dots_libd_list) 291 foreach(_l ${_lib_list}) 292 string(REPLACE "." "_" _no_dots_library ${_l}) 293 list(APPEND _no_dots_lib_list ${_no_dots_library}) 294 endforeach() 295 # And for debug 296 set(_no_dots_libsd_list) 297 foreach(_l ${_libd_list}) 298 string(REPLACE "." "_" _no_dots_libraryd ${_l}) 299 list(APPEND _no_dots_libd_list ${_no_dots_libraryd}) 300 endforeach() 301 302 # Copy list back to original names 303 set(_lib_list ${_no_dots_lib_list}) 304 set(_libd_list ${_no_dots_libd_list}) 305 endif() 306 307 if(GTK2_DEBUG) 308 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 309 "While searching for ${_var}, our proposed library list is ${_lib_list}") 310 endif() 311 312 find_library(${_var} 313 NAMES ${_lib_list} 314 PATHS 315 /opt/gnome/lib 316 /opt/gnome/lib64 317 /usr/openwin/lib 318 /usr/openwin/lib64 319 /sw/lib 320 $ENV{GTKMM_BASEPATH}/lib 321 [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib 322 [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib 323 ) 324 325 if(_expand_vc AND MSVC) 326 if(GTK2_DEBUG) 327 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 328 "While searching for ${_var}_DEBUG our proposed library list is ${_libd_list}") 329 endif() 330 331 find_library(${_var}_DEBUG 332 NAMES ${_libd_list} 333 PATHS 334 $ENV{GTKMM_BASEPATH}/lib 335 [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib 336 [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib 337 ) 338 339 if(${_var} AND ${_var}_DEBUG) 340 if(NOT GTK2_SKIP_MARK_AS_ADVANCED) 341 mark_as_advanced(${_var}_DEBUG) 342 endif() 343 set(GTK2_LIBRARIES ${GTK2_LIBRARIES} optimized ${${_var}} debug ${${_var}_DEBUG}) 344 set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE) 345 endif() 346 else() 347 if(NOT GTK2_SKIP_MARK_AS_ADVANCED) 348 mark_as_advanced(${_var}) 349 endif() 350 set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${${_var}}) 351 set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE) 352 # Set debug to release 353 set(${_var}_DEBUG ${${_var}}) 354 set(${_var}_DEBUG ${${_var}} PARENT_SCOPE) 355 endif() 356endfunction(_GTK2_FIND_LIBRARY) 357 358#============================================================= 359 360# 361# main() 362# 363 364set(GTK2_FOUND) 365set(GTK2_INCLUDE_DIRS) 366set(GTK2_LIBRARIES) 367 368if(NOT GTK2_FIND_COMPONENTS) 369 # Assume they only want GTK 370 set(GTK2_FIND_COMPONENTS gtk) 371endif() 372 373# 374# If specified, enforce version number 375# 376if(GTK2_FIND_VERSION) 377 cmake_minimum_required(VERSION 2.6.2) 378 set(GTK2_FAILED_VERSION_CHECK true) 379 if(GTK2_DEBUG) 380 message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] " 381 "Searching for version ${GTK2_FIND_VERSION}") 382 endif() 383 _GTK2_FIND_INCLUDE_DIR(GTK2_GTK_INCLUDE_DIR gtk/gtk.h) 384 if(GTK2_GTK_INCLUDE_DIR) 385 _GTK2_GET_VERSION(GTK2_MAJOR_VERSION 386 GTK2_MINOR_VERSION 387 GTK2_PATCH_VERSION 388 ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h) 389 set(GTK2_VERSION 390 ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION}) 391 if(GTK2_FIND_VERSION_EXACT) 392 if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION) 393 set(GTK2_FAILED_VERSION_CHECK false) 394 endif() 395 else() 396 if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION OR 397 GTK2_VERSION VERSION_GREATER GTK2_FIND_VERSION) 398 set(GTK2_FAILED_VERSION_CHECK false) 399 endif() 400 endif() 401 else() 402 # If we can't find the GTK include dir, we can't do version checking 403 if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY) 404 message(FATAL_ERROR "Could not find GTK2 include directory") 405 endif() 406 return() 407 endif() 408 409 if(GTK2_FAILED_VERSION_CHECK) 410 if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY) 411 if(GTK2_FIND_VERSION_EXACT) 412 message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, version ${GTK2_FIND_VERSION} is needed exactly.") 413 else() 414 message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, at least version ${GTK2_FIND_VERSION} is required") 415 endif() 416 endif() 417 418 # If the version check fails, exit out of the module here 419 return() 420 endif() 421endif() 422 423# 424# Find all components 425# 426 427#find_package(Freetype) 428#list(APPEND GTK2_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIRS}) 429#list(APPEND GTK2_LIBRARIES ${FREETYPE_LIBRARIES}) 430 431foreach(_GTK2_component ${GTK2_FIND_COMPONENTS}) 432 if(_GTK2_component STREQUAL "gtk") 433 _GTK2_FIND_INCLUDE_DIR(GTK2_GLIB_INCLUDE_DIR glib.h) 434 _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBCONFIG_INCLUDE_DIR glibconfig.h) 435 _GTK2_FIND_LIBRARY (GTK2_GLIB_LIBRARY glib false true) 436 437 _GTK2_FIND_INCLUDE_DIR(GTK2_GOBJECT_INCLUDE_DIR gobject/gobject.h) 438 _GTK2_FIND_LIBRARY (GTK2_GOBJECT_LIBRARY gobject false true) 439 440 _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_PIXBUF_INCLUDE_DIR gdk-pixbuf/gdk-pixbuf.h) 441 _GTK2_FIND_LIBRARY (GTK2_GDK_PIXBUF_LIBRARY gdk_pixbuf false true) 442 443 _GTK2_FIND_INCLUDE_DIR(GTK2_GDK_INCLUDE_DIR gdk/gdk.h) 444 _GTK2_FIND_INCLUDE_DIR(GTK2_GDKCONFIG_INCLUDE_DIR gdkconfig.h) 445 _GTK2_FIND_INCLUDE_DIR(GTK2_GTK_INCLUDE_DIR gtk/gtk.h) 446 447 if(UNIX) 448 _GTK2_FIND_LIBRARY (GTK2_GDK_LIBRARY gdk-x11 false true) 449 _GTK2_FIND_LIBRARY (GTK2_GTK_LIBRARY gtk-x11 false true) 450 else() 451 _GTK2_FIND_LIBRARY (GTK2_GDK_LIBRARY gdk-win32 false true) 452 _GTK2_FIND_LIBRARY (GTK2_GTK_LIBRARY gtk-win32 false true) 453 endif() 454 455 _GTK2_FIND_INCLUDE_DIR(GTK2_CAIRO_INCLUDE_DIR cairo.h) 456 _GTK2_FIND_LIBRARY (GTK2_CAIRO_LIBRARY cairo false false) 457 458 _GTK2_FIND_INCLUDE_DIR(GTK2_FONTCONFIG_INCLUDE_DIR fontconfig/fontconfig.h) 459 460 _GTK2_FIND_INCLUDE_DIR(GTK2_HARFBUZZ_INCLUDE_DIR hb.h) 461 _GTK2_FIND_LIBRARY (GTK2_HARFBUZZ_LIBRARY harfbuzz false false) 462 463 _GTK2_FIND_INCLUDE_DIR(GTK2_PANGO_INCLUDE_DIR pango/pango.h) 464 _GTK2_FIND_LIBRARY (GTK2_PANGO_LIBRARY pango false true) 465 466 _GTK2_FIND_INCLUDE_DIR(GTK2_ATK_INCLUDE_DIR atk/atk.h) 467 _GTK2_FIND_LIBRARY (GTK2_ATK_LIBRARY atk false true) 468 469 470 elseif(_GTK2_component STREQUAL "gtkmm") 471 472 _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMM_INCLUDE_DIR glibmm.h) 473 _GTK2_FIND_INCLUDE_DIR(GTK2_GLIBMMCONFIG_INCLUDE_DIR glibmmconfig.h) 474 _GTK2_FIND_LIBRARY (GTK2_GLIBMM_LIBRARY glibmm true true) 475 476 _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMM_INCLUDE_DIR gdkmm.h) 477 _GTK2_FIND_INCLUDE_DIR(GTK2_GDKMMCONFIG_INCLUDE_DIR gdkmmconfig.h) 478 _GTK2_FIND_LIBRARY (GTK2_GDKMM_LIBRARY gdkmm true true) 479 480 _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMM_INCLUDE_DIR gtkmm.h) 481 _GTK2_FIND_INCLUDE_DIR(GTK2_GTKMMCONFIG_INCLUDE_DIR gtkmmconfig.h) 482 _GTK2_FIND_LIBRARY (GTK2_GTKMM_LIBRARY gtkmm true true) 483 484 _GTK2_FIND_INCLUDE_DIR(GTK2_CAIROMM_INCLUDE_DIR cairomm/cairomm.h) 485 _GTK2_FIND_LIBRARY (GTK2_CAIROMM_LIBRARY cairomm true true) 486 487 _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMM_INCLUDE_DIR pangomm.h) 488 _GTK2_FIND_INCLUDE_DIR(GTK2_PANGOMMCONFIG_INCLUDE_DIR pangommconfig.h) 489 _GTK2_FIND_LIBRARY (GTK2_PANGOMM_LIBRARY pangomm true true) 490 491 _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++_INCLUDE_DIR sigc++/sigc++.h) 492 _GTK2_FIND_INCLUDE_DIR(GTK2_SIGC++CONFIG_INCLUDE_DIR sigc++config.h) 493 _GTK2_FIND_LIBRARY (GTK2_SIGC++_LIBRARY sigc true true) 494 495 _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMM_INCLUDE_DIR giomm.h) 496 _GTK2_FIND_INCLUDE_DIR(GTK2_GIOMMCONFIG_INCLUDE_DIR giommconfig.h) 497 _GTK2_FIND_LIBRARY (GTK2_GIOMM_LIBRARY giomm true true) 498 499 _GTK2_FIND_INCLUDE_DIR(GTK2_ATKMM_INCLUDE_DIR atkmm.h) 500 _GTK2_FIND_LIBRARY (GTK2_ATKMM_LIBRARY atkmm true true) 501 502 elseif(_GTK2_component STREQUAL "glade") 503 504 _GTK2_FIND_INCLUDE_DIR(GTK2_GLADE_INCLUDE_DIR glade/glade.h) 505 _GTK2_FIND_LIBRARY (GTK2_GLADE_LIBRARY glade false true) 506 507 elseif(_GTK2_component STREQUAL "glademm") 508 509 _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMM_INCLUDE_DIR libglademm.h) 510 _GTK2_FIND_INCLUDE_DIR(GTK2_GLADEMMCONFIG_INCLUDE_DIR libglademmconfig.h) 511 _GTK2_FIND_LIBRARY (GTK2_GLADEMM_LIBRARY glademm true true) 512 513 else() 514 message(FATAL_ERROR "Unknown GTK2 component ${_component}") 515 endif() 516endforeach() 517 518# 519# Solve for the GTK2 version if we haven't already 520# 521if(NOT GTK2_FIND_VERSION AND GTK2_GTK_INCLUDE_DIR) 522 _GTK2_GET_VERSION(GTK2_MAJOR_VERSION 523 GTK2_MINOR_VERSION 524 GTK2_PATCH_VERSION 525 ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h) 526 set(GTK2_VERSION ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION}) 527endif() 528 529# 530# Try to enforce components 531# 532 533set(_GTK2_did_we_find_everything true) # This gets set to GTK2_FOUND 534 535include(FindPackageHandleStandardArgs) 536#include("${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake") 537 538foreach(_GTK2_component ${GTK2_FIND_COMPONENTS}) 539 string(TOUPPER ${_GTK2_component} _COMPONENT_UPPER) 540 541 if(_GTK2_component STREQUAL "gtk") 542 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtk libraries were not found." 543 GTK2_GTK_LIBRARY 544 GTK2_GTK_INCLUDE_DIR 545 546 GTK2_GLIB_INCLUDE_DIR 547 GTK2_GLIBCONFIG_INCLUDE_DIR 548 GTK2_GLIB_LIBRARY 549 550 GTK2_GDK_INCLUDE_DIR 551 GTK2_GDKCONFIG_INCLUDE_DIR 552 GTK2_GDK_LIBRARY 553 ) 554 elseif(_GTK2_component STREQUAL "gtkmm") 555 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtkmm libraries were not found." 556 GTK2_GTKMM_LIBRARY 557 GTK2_GTKMM_INCLUDE_DIR 558 GTK2_GTKMMCONFIG_INCLUDE_DIR 559 560 GTK2_GLIBMM_INCLUDE_DIR 561 GTK2_GLIBMMCONFIG_INCLUDE_DIR 562 GTK2_GLIBMM_LIBRARY 563 564 GTK2_GDKMM_INCLUDE_DIR 565 GTK2_GDKMMCONFIG_INCLUDE_DIR 566 GTK2_GDKMM_LIBRARY 567 ) 568 elseif(_GTK2_component STREQUAL "glade") 569 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glade library was not found." 570 GTK2_GLADE_LIBRARY 571 GTK2_GLADE_INCLUDE_DIR 572 ) 573 elseif(_GTK2_component STREQUAL "glademm") 574 FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glademm library was not found." 575 GTK2_GLADEMM_LIBRARY 576 GTK2_GLADEMM_INCLUDE_DIR 577 GTK2_GLADEMMCONFIG_INCLUDE_DIR 578 ) 579 endif() 580 581 if(NOT GTK2_${_COMPONENT_UPPER}_FOUND) 582 set(_GTK2_did_we_find_everything false) 583 endif() 584endforeach() 585 586if(_GTK2_did_we_find_everything AND NOT GTK2_VERSION_CHECK_FAILED) 587 set(GTK2_FOUND true) 588else() 589 # Unset our variables. 590 set(GTK2_FOUND false) 591 set(GTK2_VERSION) 592 set(GTK2_VERSION_MAJOR) 593 set(GTK2_VERSION_MINOR) 594 set(GTK2_VERSION_PATCH) 595 set(GTK2_INCLUDE_DIRS) 596 set(GTK2_LIBRARIES) 597endif() 598 599if(GTK2_INCLUDE_DIRS) 600 list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS) 601endif() 602 603