FindGTK.cmake 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file LICENSE.rst or https://cmake.org/licensing for details.
  3. #[=======================================================================[.rst:
  4. FindGTK
  5. -------
  6. .. note::
  7. This module works only on Unix-like systems and was intended for early GTK
  8. branch of 1.x, which is no longer maintained. Use the latest supported GTK
  9. version and :module:`FindPkgConfig` module to find GTK in CMake instead of
  10. this module. For example:
  11. .. code-block:: cmake
  12. find_package(PkgConfig REQUIRED)
  13. pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk4>=4.14)
  14. target_link_libraries(example PRIVATE PkgConfig::GTK)
  15. Finds GTK, glib and GTKGLArea:
  16. .. code-block:: cmake
  17. find_package(GTK [...])
  18. GTK is a multi-platform toolkit for creating graphical user interfaces.
  19. Result Variables
  20. ^^^^^^^^^^^^^^^^
  21. This module defines the following variables:
  22. ``GTK_FOUND``
  23. Boolean indicating whether GTK is found.
  24. ``GTK_GL_FOUND``
  25. Boolean indicating whether GTK's GL features are found.
  26. ``GTK_INCLUDE_DIR``
  27. Include directories containing headers needed to use GTK.
  28. ``GTK_LIBRARIES``
  29. Libraries needed to link against for using GTK.
  30. Examples
  31. ^^^^^^^^
  32. Finding GTK 1.x and creating an interface :ref:`imported target
  33. <Imported Targets>` that encapsulates its usage requirements for linking to a
  34. project target:
  35. .. code-block:: cmake
  36. find_package(GTK)
  37. if(GTK_FOUND)
  38. add_library(GTK::GTK INTERFACE IMPORTED)
  39. set_target_properties(
  40. GTK::GTK
  41. PROPERTIES
  42. INTERFACE_INCLUDE_DIRECTORIES "${GTK_INCLUDE_DIR}"
  43. INTERFACE_LINK_LIBRARIES "${GTK_LIBRARIES}"
  44. )
  45. endif()
  46. target_link_libraries(example PRIVATE GTK::GTK)
  47. See Also
  48. ^^^^^^^^
  49. * The :module:`FindGTK2` module to find GTK version 2.
  50. #]=======================================================================]
  51. # don't even bother under WIN32
  52. if(UNIX)
  53. find_path( GTK_gtk_INCLUDE_PATH NAMES gtk/gtk.h
  54. PATH_SUFFIXES gtk-1.2 gtk12
  55. PATHS
  56. /usr/openwin/share/include
  57. /usr/openwin/include
  58. /opt/gnome/include
  59. )
  60. # Some Linux distributions (e.g. Red Hat) have glibconfig.h
  61. # and glib.h in different directories, so we need to look
  62. # for both.
  63. # - Atanas Georgiev <[email protected]>
  64. find_path( GTK_glibconfig_INCLUDE_PATH NAMES glibconfig.h
  65. PATH_SUFFIXES glib/include lib/glib/include include/glib12
  66. PATHS
  67. /usr/openwin/share/include
  68. /opt/gnome/include
  69. /opt/gnome/lib/glib/include
  70. )
  71. find_path( GTK_glib_INCLUDE_PATH NAMES glib.h
  72. PATH_SUFFIXES gtk-1.2 glib-1.2 glib12 glib/include lib/glib/include
  73. PATHS
  74. /usr/openwin/share/include
  75. /opt/gnome/include
  76. )
  77. find_path( GTK_gtkgl_INCLUDE_PATH NAMES gtkgl/gtkglarea.h
  78. PATHS /usr/openwin/share/include
  79. /opt/gnome/include
  80. )
  81. find_library( GTK_gtkgl_LIBRARY gtkgl
  82. /usr/openwin/lib
  83. /opt/gnome/lib
  84. )
  85. #
  86. # The 12 suffix is thanks to the FreeBSD ports collection
  87. #
  88. find_library( GTK_gtk_LIBRARY
  89. NAMES gtk gtk12
  90. PATHS /usr/openwin/lib
  91. /opt/gnome/lib
  92. )
  93. find_library( GTK_gdk_LIBRARY
  94. NAMES gdk gdk12
  95. PATHS /usr/openwin/lib
  96. /opt/gnome/lib
  97. )
  98. find_library( GTK_gmodule_LIBRARY
  99. NAMES gmodule gmodule12
  100. PATHS /usr/openwin/lib
  101. /opt/gnome/lib
  102. )
  103. find_library( GTK_glib_LIBRARY
  104. NAMES glib glib12
  105. PATHS /usr/openwin/lib
  106. /opt/gnome/lib
  107. )
  108. find_library( GTK_Xi_LIBRARY
  109. NAMES Xi
  110. PATHS /usr/openwin/lib
  111. /opt/gnome/lib
  112. )
  113. find_library( GTK_gthread_LIBRARY
  114. NAMES gthread gthread12
  115. PATHS /usr/openwin/lib
  116. /opt/gnome/lib
  117. )
  118. if(GTK_gtk_INCLUDE_PATH
  119. AND GTK_glibconfig_INCLUDE_PATH
  120. AND GTK_glib_INCLUDE_PATH
  121. AND GTK_gtk_LIBRARY
  122. AND GTK_glib_LIBRARY)
  123. # Assume that if gtk and glib were found, the other
  124. # supporting libraries have also been found.
  125. set( GTK_FOUND "YES" )
  126. set( GTK_INCLUDE_DIR ${GTK_gtk_INCLUDE_PATH}
  127. ${GTK_glibconfig_INCLUDE_PATH}
  128. ${GTK_glib_INCLUDE_PATH} )
  129. set( GTK_LIBRARIES ${GTK_gtk_LIBRARY}
  130. ${GTK_gdk_LIBRARY}
  131. ${GTK_glib_LIBRARY} )
  132. if(GTK_gmodule_LIBRARY)
  133. set(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_gmodule_LIBRARY})
  134. endif()
  135. if(GTK_gthread_LIBRARY)
  136. set(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_gthread_LIBRARY})
  137. endif()
  138. if(GTK_Xi_LIBRARY)
  139. set(GTK_LIBRARIES ${GTK_LIBRARIES} ${GTK_Xi_LIBRARY})
  140. endif()
  141. if(GTK_gtkgl_INCLUDE_PATH AND GTK_gtkgl_LIBRARY)
  142. set( GTK_GL_FOUND "YES" )
  143. set( GTK_INCLUDE_DIR ${GTK_INCLUDE_DIR}
  144. ${GTK_gtkgl_INCLUDE_PATH} )
  145. set( GTK_LIBRARIES ${GTK_gtkgl_LIBRARY} ${GTK_LIBRARIES} )
  146. mark_as_advanced(
  147. GTK_gtkgl_LIBRARY
  148. GTK_gtkgl_INCLUDE_PATH
  149. )
  150. endif()
  151. endif()
  152. mark_as_advanced(
  153. GTK_gdk_LIBRARY
  154. GTK_glib_INCLUDE_PATH
  155. GTK_glib_LIBRARY
  156. GTK_glibconfig_INCLUDE_PATH
  157. GTK_gmodule_LIBRARY
  158. GTK_gthread_LIBRARY
  159. GTK_Xi_LIBRARY
  160. GTK_gtk_INCLUDE_PATH
  161. GTK_gtk_LIBRARY
  162. GTK_gtkgl_INCLUDE_PATH
  163. GTK_gtkgl_LIBRARY
  164. )
  165. endif()