FindGTK2.cmake 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976
  1. # Distributed under the OSI-approved BSD 3-Clause License. See accompanying
  2. # file Copyright.txt or https://cmake.org/licensing for details.
  3. #[=======================================================================[.rst:
  4. FindGTK2
  5. --------
  6. Find the GTK2 widget libraries and several of its other optional components
  7. like ``gtkmm``, ``glade``, and ``glademm``.
  8. Specify one or more of the following components as you call this find
  9. module. See example below.
  10. * ``gtk``
  11. * ``gtkmm``
  12. * ``glade``
  13. * ``glademm``
  14. Imported Targets
  15. ^^^^^^^^^^^^^^^^
  16. This module defines the following :prop_tgt:`IMPORTED` targets (subject to
  17. component selection):
  18. ``GTK2::atk``, ``GTK2::atkmm``, ``GTK2::cairo``, ``GTK2::cairomm``,
  19. ``GTK2::gdk_pixbuf``, ``GTK2::gdk``, ``GTK2::gdkmm``, ``GTK2::gio``,
  20. ``GTK2::giomm``, ``GTK2::glade``, ``GTK2::glademm``, ``GTK2::glib``,
  21. ``GTK2::glibmm``, ``GTK2::gmodule``, ``GTK2::gobject``, ``GTK2::gthread``,
  22. ``GTK2::gtk``, ``GTK2::gtkmm``, ``GTK2::harfbuzz``, ``GTK2::pango``,
  23. ``GTK2::pangocairo``, ``GTK2::pangoft2``, ``GTK2::pangomm``,
  24. ``GTK2::pangoxft``, ``GTK2::sigc``.
  25. .. versionadded:: 3.16.7
  26. Added the ``GTK2::harfbuzz`` target.
  27. Result Variables
  28. ^^^^^^^^^^^^^^^^
  29. The following variables will be defined for your use
  30. ``GTK2_FOUND``
  31. Were all of your specified components found?
  32. ``GTK2_INCLUDE_DIRS``
  33. All include directories
  34. ``GTK2_LIBRARIES``
  35. All libraries
  36. ``GTK2_TARGETS``
  37. .. versionadded:: 3.5
  38. All imported targets
  39. ``GTK2_DEFINITIONS``
  40. Additional compiler flags
  41. ``GTK2_VERSION``
  42. The version of GTK2 found (x.y.z)
  43. ``GTK2_MAJOR_VERSION``
  44. The major version of GTK2
  45. ``GTK2_MINOR_VERSION``
  46. The minor version of GTK2
  47. ``GTK2_PATCH_VERSION``
  48. The patch version of GTK2
  49. .. versionadded:: 3.5
  50. When ``GTK2_USE_IMPORTED_TARGETS`` is set to ``TRUE``, ``GTK2_LIBRARIES``
  51. will list imported targets instead of library paths.
  52. Input Variables
  53. ^^^^^^^^^^^^^^^
  54. Optional variables you can define prior to calling this module:
  55. ``GTK2_DEBUG``
  56. Enables verbose debugging of the module
  57. ``GTK2_ADDITIONAL_SUFFIXES``
  58. Allows defining additional directories to search for include files
  59. Example Usage
  60. ^^^^^^^^^^^^^
  61. Call :command:`find_package` once. Here are some examples to pick from:
  62. Require GTK 2.6 or later:
  63. .. code-block:: cmake
  64. find_package(GTK2 2.6 REQUIRED gtk)
  65. Require GTK 2.10 or later and Glade:
  66. .. code-block:: cmake
  67. find_package(GTK2 2.10 REQUIRED gtk glade)
  68. Search for GTK/GTKMM 2.8 or later:
  69. .. code-block:: cmake
  70. find_package(GTK2 2.8 COMPONENTS gtk gtkmm)
  71. Use the results:
  72. .. code-block:: cmake
  73. if(GTK2_FOUND)
  74. include_directories(${GTK2_INCLUDE_DIRS})
  75. add_executable(mygui mygui.cc)
  76. target_link_libraries(mygui ${GTK2_LIBRARIES})
  77. endif()
  78. #]=======================================================================]
  79. # Version 1.6 (CMake 3.0)
  80. # * Create targets for each library
  81. # * Do not link libfreetype
  82. # Version 1.5 (CMake 2.8.12)
  83. # * 14236: Detect gthread library
  84. # Detect pangocairo on windows
  85. # Detect pangocairo with gtk module instead of with gtkmm
  86. # * 14259: Use vc100 libraries with VS 11
  87. # * 14260: Export a GTK2_DEFINITIONS variable to set /vd2 when appropriate
  88. # (i.e. MSVC)
  89. # * Use the optimized/debug syntax for _LIBRARY and _LIBRARIES variables when
  90. # appropriate. A new set of _RELEASE variables was also added.
  91. # * Remove GTK2_SKIP_MARK_AS_ADVANCED option, as now the variables are
  92. # marked as advanced by SelectLibraryConfigurations
  93. # * Detect gmodule, pangoft2 and pangoxft libraries
  94. # Version 1.4 (10/4/2012) (CMake 2.8.10)
  95. # * 12596: Missing paths for FindGTK2 on NetBSD
  96. # * 12049: Fixed detection of GTK include files in the lib folder on
  97. # multiarch systems.
  98. # Version 1.3 (11/9/2010) (CMake 2.8.4)
  99. # * 11429: Add support for detecting GTK2 built with Visual Studio 10.
  100. # Thanks to Vincent Levesque for the patch.
  101. # Version 1.2 (8/30/2010) (CMake 2.8.3)
  102. # * Merge patch for detecting gdk-pixbuf library (split off
  103. # from core GTK in 2.21). Thanks to Vincent Untz for the patch
  104. # and Ricardo Cruz for the heads up.
  105. # Version 1.1 (8/19/2010) (CMake 2.8.3)
  106. # * Add support for detecting GTK2 under macports (thanks to Gary Kramlich)
  107. # Version 1.0 (8/12/2010) (CMake 2.8.3)
  108. # * Add support for detecting new pangommconfig.h header file
  109. # (Thanks to Sune Vuorela & the Debian Project for the patch)
  110. # * Add support for detecting fontconfig.h header
  111. # * Call find_package(Freetype) since it's required
  112. # * Add support for allowing users to add additional library directories
  113. # via the GTK2_ADDITIONAL_SUFFIXES variable (kind of a future-kludge in
  114. # case the GTK developers change versions on any of the directories in the
  115. # future).
  116. # Version 0.8 (1/4/2010)
  117. # * Get module working under MacOSX fink by adding /sw/include, /sw/lib
  118. # to PATHS and the gobject library
  119. # Version 0.7 (3/22/09)
  120. # * Checked into CMake CVS
  121. # * Added versioning support
  122. # * Module now defaults to searching for GTK if COMPONENTS not specified.
  123. # * Added HKCU prior to HKLM registry key and GTKMM specific environment
  124. # variable as per mailing list discussion.
  125. # * Added lib64 to include search path and a few other search paths where GTK
  126. # may be installed on Unix systems.
  127. # * Switched to lowercase CMake commands
  128. # * Prefaced internal variables with _GTK2 to prevent collision
  129. # * Changed internal macros to functions
  130. # * Enhanced documentation
  131. # Version 0.6 (1/8/08)
  132. # Added GTK2_SKIP_MARK_AS_ADVANCED option
  133. # Version 0.5 (12/19/08)
  134. # Second release to cmake mailing list
  135. #=============================================================
  136. # _GTK2_GET_VERSION
  137. # Internal function to parse the version number in gtkversion.h
  138. # _OUT_major = Major version number
  139. # _OUT_minor = Minor version number
  140. # _OUT_micro = Micro version number
  141. # _gtkversion_hdr = Header file to parse
  142. #=============================================================
  143. include(${CMAKE_CURRENT_LIST_DIR}/SelectLibraryConfigurations.cmake)
  144. function(_GTK2_GET_VERSION _OUT_major _OUT_minor _OUT_micro _gtkversion_hdr)
  145. cmake_policy(PUSH)
  146. cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
  147. file(STRINGS ${_gtkversion_hdr} _contents REGEX "#define GTK_M[A-Z]+_VERSION[ \t]+")
  148. cmake_policy(POP)
  149. if(_contents)
  150. string(REGEX REPLACE ".*#define GTK_MAJOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_major} "${_contents}")
  151. string(REGEX REPLACE ".*#define GTK_MINOR_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_minor} "${_contents}")
  152. string(REGEX REPLACE ".*#define GTK_MICRO_VERSION[ \t]+\\(([0-9]+)\\).*" "\\1" ${_OUT_micro} "${_contents}")
  153. if(NOT ${_OUT_major} MATCHES "[0-9]+")
  154. message(FATAL_ERROR "Version parsing failed for GTK2_MAJOR_VERSION!")
  155. endif()
  156. if(NOT ${_OUT_minor} MATCHES "[0-9]+")
  157. message(FATAL_ERROR "Version parsing failed for GTK2_MINOR_VERSION!")
  158. endif()
  159. if(NOT ${_OUT_micro} MATCHES "[0-9]+")
  160. message(FATAL_ERROR "Version parsing failed for GTK2_MICRO_VERSION!")
  161. endif()
  162. set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
  163. set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
  164. set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
  165. else()
  166. message(FATAL_ERROR "Include file ${_gtkversion_hdr} does not exist")
  167. endif()
  168. endfunction()
  169. #=============================================================
  170. # _GTK2_SIGCXX_GET_VERSION
  171. # Internal function to parse the version number in
  172. # sigc++config.h
  173. # _OUT_major = Major version number
  174. # _OUT_minor = Minor version number
  175. # _OUT_micro = Micro version number
  176. # _sigcxxversion_hdr = Header file to parse
  177. #=============================================================
  178. function(_GTK2_SIGCXX_GET_VERSION _OUT_major _OUT_minor _OUT_micro _sigcxxversion_hdr)
  179. cmake_policy(PUSH)
  180. cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
  181. file(STRINGS ${_sigcxxversion_hdr} _contents REGEX "#define SIGCXX_M[A-Z]+_VERSION[ \t]+")
  182. cmake_policy(POP)
  183. if(_contents)
  184. string(REGEX REPLACE ".*#define SIGCXX_MAJOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_major} "${_contents}")
  185. string(REGEX REPLACE ".*#define SIGCXX_MINOR_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_minor} "${_contents}")
  186. string(REGEX REPLACE ".*#define SIGCXX_MICRO_VERSION[ \t]+([0-9]+).*" "\\1" ${_OUT_micro} "${_contents}")
  187. if(NOT ${_OUT_major} MATCHES "[0-9]+")
  188. message(FATAL_ERROR "Version parsing failed for SIGCXX_MAJOR_VERSION!")
  189. endif()
  190. if(NOT ${_OUT_minor} MATCHES "[0-9]+")
  191. message(FATAL_ERROR "Version parsing failed for SIGCXX_MINOR_VERSION!")
  192. endif()
  193. if(NOT ${_OUT_micro} MATCHES "[0-9]+")
  194. message(FATAL_ERROR "Version parsing failed for SIGCXX_MICRO_VERSION!")
  195. endif()
  196. set(${_OUT_major} ${${_OUT_major}} PARENT_SCOPE)
  197. set(${_OUT_minor} ${${_OUT_minor}} PARENT_SCOPE)
  198. set(${_OUT_micro} ${${_OUT_micro}} PARENT_SCOPE)
  199. else()
  200. # The header does not have the version macros; assume it is ``0.0.0``.
  201. set(${_OUT_major} 0)
  202. set(${_OUT_minor} 0)
  203. set(${_OUT_micro} 0)
  204. endif()
  205. endfunction()
  206. #=============================================================
  207. # _GTK2_FIND_INCLUDE_DIR
  208. # Internal function to find the GTK include directories
  209. # _var = variable to set (_INCLUDE_DIR is appended)
  210. # _hdr = header file to look for
  211. #=============================================================
  212. function(_GTK2_FIND_INCLUDE_DIR _var _hdr)
  213. if(GTK2_DEBUG)
  214. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  215. "_GTK2_FIND_INCLUDE_DIR( ${_var} ${_hdr} )")
  216. endif()
  217. set(_gtk_packages
  218. # If these ever change, things will break.
  219. ${GTK2_ADDITIONAL_SUFFIXES}
  220. glibmm-2.4
  221. glib-2.0
  222. atk-1.0
  223. atkmm-1.6
  224. cairo
  225. cairomm-1.0
  226. gdk-pixbuf-2.0
  227. gdkmm-2.4
  228. giomm-2.4
  229. gtk-2.0
  230. gtkmm-2.4
  231. libglade-2.0
  232. libglademm-2.4
  233. harfbuzz
  234. pango-1.0
  235. pangomm-1.4
  236. sigc++-2.0
  237. )
  238. #
  239. # NOTE: The following suffixes cause searching for header files in both of
  240. # these directories:
  241. # /usr/include/<pkg>
  242. # /usr/lib/<pkg>/include
  243. #
  244. set(_suffixes)
  245. foreach(_d ${_gtk_packages})
  246. list(APPEND _suffixes ${_d})
  247. list(APPEND _suffixes ${_d}/include) # for /usr/lib/gtk-2.0/include
  248. endforeach()
  249. if(GTK2_DEBUG)
  250. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  251. "include suffixes = ${_suffixes}")
  252. endif()
  253. if(CMAKE_LIBRARY_ARCHITECTURE)
  254. set(_gtk2_arch_dir /usr/lib/${CMAKE_LIBRARY_ARCHITECTURE})
  255. if(GTK2_DEBUG)
  256. message(STATUS "Adding ${_gtk2_arch_dir} to search path for multiarch support")
  257. endif()
  258. endif()
  259. find_path(GTK2_${_var}_INCLUDE_DIR ${_hdr}
  260. PATHS
  261. ${_gtk2_arch_dir}
  262. /usr/local/libx32
  263. /usr/local/lib64
  264. /usr/local/lib
  265. /usr/libx32
  266. /usr/lib64
  267. /usr/lib
  268. /opt/gnome/include
  269. /opt/gnome/lib
  270. /opt/openwin/include
  271. /usr/openwin/lib
  272. /sw/lib
  273. /opt/local/lib
  274. /opt/homebrew/lib
  275. /usr/pkg/lib
  276. /usr/pkg/include/glib
  277. $ENV{GTKMM_BASEPATH}/include
  278. $ENV{GTKMM_BASEPATH}/lib
  279. [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/include
  280. [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  281. [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/include
  282. [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  283. PATH_SUFFIXES
  284. ${_suffixes}
  285. )
  286. mark_as_advanced(GTK2_${_var}_INCLUDE_DIR)
  287. if(GTK2_${_var}_INCLUDE_DIR)
  288. set(GTK2_INCLUDE_DIRS ${GTK2_INCLUDE_DIRS} ${GTK2_${_var}_INCLUDE_DIR} PARENT_SCOPE)
  289. endif()
  290. endfunction()
  291. #=============================================================
  292. # _GTK2_FIND_LIBRARY
  293. # Internal function to find libraries packaged with GTK2
  294. # _var = library variable to create (_LIBRARY is appended)
  295. #=============================================================
  296. function(_GTK2_FIND_LIBRARY _var _lib _expand_vc _append_version)
  297. if(GTK2_DEBUG)
  298. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  299. "_GTK2_FIND_LIBRARY( ${_var} ${_lib} ${_expand_vc} ${_append_version} )")
  300. endif()
  301. # Not GTK versions per se but the versions encoded into Windows
  302. # import libraries (GtkMM 2.14.1 has a gtkmm-vc80-2_4.lib for example)
  303. # Also the MSVC libraries use _ for . (this is handled below)
  304. set(_versions 2.20 2.18 2.16 2.14 2.12
  305. 2.10 2.8 2.6 2.4 2.2 2.0
  306. 1.20 1.18 1.16 1.14 1.12
  307. 1.10 1.8 1.6 1.4 1.2 1.0)
  308. set(_library)
  309. set(_library_d)
  310. set(_library ${_lib})
  311. if(_expand_vc AND MSVC)
  312. # Add vc80/vc90/vc100 midfixes
  313. if(MSVC_TOOLSET_VERSION LESS 110)
  314. set(_library ${_library}-vc${MSVC_TOOLSET_VERSION})
  315. else()
  316. # Up to gtkmm-win 2.22.0-2 there are no vc110 libraries but vc100 can be used
  317. set(_library ${_library}-vc100)
  318. endif()
  319. set(_library_d ${_library}-d)
  320. endif()
  321. if(GTK2_DEBUG)
  322. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  323. "After midfix addition = ${_library} and ${_library_d}")
  324. endif()
  325. set(_lib_list)
  326. set(_libd_list)
  327. if(_append_version)
  328. foreach(_ver ${_versions})
  329. list(APPEND _lib_list "${_library}-${_ver}")
  330. list(APPEND _libd_list "${_library_d}-${_ver}")
  331. endforeach()
  332. else()
  333. set(_lib_list ${_library})
  334. set(_libd_list ${_library_d})
  335. endif()
  336. if(GTK2_DEBUG)
  337. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  338. "library list = ${_lib_list} and library debug list = ${_libd_list}")
  339. endif()
  340. # For some silly reason the MSVC libraries use _ instead of .
  341. # in the version fields
  342. if(_expand_vc AND MSVC)
  343. set(_no_dots_lib_list)
  344. set(_no_dots_libd_list)
  345. foreach(_l ${_lib_list})
  346. string(REPLACE "." "_" _no_dots_library ${_l})
  347. list(APPEND _no_dots_lib_list ${_no_dots_library})
  348. endforeach()
  349. # And for debug
  350. set(_no_dots_libsd_list)
  351. foreach(_l ${_libd_list})
  352. string(REPLACE "." "_" _no_dots_libraryd ${_l})
  353. list(APPEND _no_dots_libd_list ${_no_dots_libraryd})
  354. endforeach()
  355. # Copy list back to original names
  356. set(_lib_list ${_no_dots_lib_list})
  357. set(_libd_list ${_no_dots_libd_list})
  358. endif()
  359. if(GTK2_DEBUG)
  360. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  361. "While searching for GTK2_${_var}_LIBRARY, our proposed library list is ${_lib_list}")
  362. endif()
  363. find_library(GTK2_${_var}_LIBRARY_RELEASE
  364. NAMES ${_lib_list}
  365. PATHS
  366. /opt/gnome/lib
  367. /usr/openwin/lib
  368. $ENV{GTKMM_BASEPATH}/lib
  369. [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  370. [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  371. )
  372. if(_expand_vc AND MSVC)
  373. if(GTK2_DEBUG)
  374. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  375. "While searching for GTK2_${_var}_LIBRARY_DEBUG our proposed library list is ${_libd_list}")
  376. endif()
  377. find_library(GTK2_${_var}_LIBRARY_DEBUG
  378. NAMES ${_libd_list}
  379. PATHS
  380. $ENV{GTKMM_BASEPATH}/lib
  381. [HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  382. [HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]/lib
  383. )
  384. endif()
  385. select_library_configurations(GTK2_${_var})
  386. set(GTK2_${_var}_LIBRARY ${GTK2_${_var}_LIBRARY} PARENT_SCOPE)
  387. set(GTK2_${_var}_FOUND ${GTK2_${_var}_FOUND} PARENT_SCOPE)
  388. if(GTK2_${_var}_FOUND)
  389. set(GTK2_LIBRARIES ${GTK2_LIBRARIES} ${GTK2_${_var}_LIBRARY})
  390. set(GTK2_LIBRARIES ${GTK2_LIBRARIES} PARENT_SCOPE)
  391. endif()
  392. if(GTK2_DEBUG)
  393. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  394. "GTK2_${_var}_LIBRARY_RELEASE = \"${GTK2_${_var}_LIBRARY_RELEASE}\"")
  395. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  396. "GTK2_${_var}_LIBRARY_DEBUG = \"${GTK2_${_var}_LIBRARY_DEBUG}\"")
  397. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  398. "GTK2_${_var}_LIBRARY = \"${GTK2_${_var}_LIBRARY}\"")
  399. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  400. "GTK2_${_var}_FOUND = \"${GTK2_${_var}_FOUND}\"")
  401. endif()
  402. endfunction()
  403. function(_GTK2_ADD_TARGET_DEPENDS_INTERNAL _var _property)
  404. if(GTK2_DEBUG)
  405. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  406. "_GTK2_ADD_TARGET_DEPENDS_INTERNAL( ${_var} ${_property} )")
  407. endif()
  408. string(TOLOWER "${_var}" _basename)
  409. if (TARGET GTK2::${_basename})
  410. foreach(_depend ${ARGN})
  411. set(_valid_depends)
  412. if (TARGET GTK2::${_depend})
  413. list(APPEND _valid_depends GTK2::${_depend})
  414. endif()
  415. if (_valid_depends)
  416. set_property(TARGET GTK2::${_basename} APPEND PROPERTY ${_property} "${_valid_depends}")
  417. endif()
  418. set(_valid_depends)
  419. endforeach()
  420. endif()
  421. endfunction()
  422. function(_GTK2_ADD_TARGET_DEPENDS _var)
  423. if(GTK2_DEBUG)
  424. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  425. "_GTK2_ADD_TARGET_DEPENDS( ${_var} )")
  426. endif()
  427. string(TOLOWER "${_var}" _basename)
  428. if(TARGET GTK2::${_basename})
  429. get_target_property(_configs GTK2::${_basename} IMPORTED_CONFIGURATIONS)
  430. _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} INTERFACE_LINK_LIBRARIES ${ARGN})
  431. foreach(_config ${_configs})
  432. _GTK2_ADD_TARGET_DEPENDS_INTERNAL(${_var} IMPORTED_LINK_INTERFACE_LIBRARIES_${_config} ${ARGN})
  433. endforeach()
  434. endif()
  435. endfunction()
  436. function(_GTK2_ADD_TARGET_INCLUDE_DIRS _var)
  437. if(GTK2_DEBUG)
  438. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  439. "_GTK2_ADD_TARGET_INCLUDE_DIRS( ${_var} )")
  440. endif()
  441. string(TOLOWER "${_var}" _basename)
  442. if(TARGET GTK2::${_basename})
  443. foreach(_include ${ARGN})
  444. set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${_include}")
  445. endforeach()
  446. endif()
  447. endfunction()
  448. #=============================================================
  449. # _GTK2_ADD_TARGET
  450. # Internal function to create targets for GTK2
  451. # _var = target to create
  452. #=============================================================
  453. function(_GTK2_ADD_TARGET _var)
  454. if(GTK2_DEBUG)
  455. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  456. "_GTK2_ADD_TARGET( ${_var} )")
  457. endif()
  458. string(TOLOWER "${_var}" _basename)
  459. cmake_parse_arguments(_${_var} "" "" "GTK2_DEPENDS;GTK2_OPTIONAL_DEPENDS;OPTIONAL_INCLUDES" ${ARGN})
  460. if(GTK2_${_var}_FOUND)
  461. if(NOT TARGET GTK2::${_basename})
  462. # Do not create the target if dependencies are missing
  463. foreach(_dep ${_${_var}_GTK2_DEPENDS})
  464. if(NOT TARGET GTK2::${_dep})
  465. return()
  466. endif()
  467. endforeach()
  468. add_library(GTK2::${_basename} UNKNOWN IMPORTED)
  469. if(GTK2_${_var}_LIBRARY_RELEASE)
  470. set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS RELEASE)
  471. set_property(TARGET GTK2::${_basename} PROPERTY IMPORTED_LOCATION_RELEASE "${GTK2_${_var}_LIBRARY_RELEASE}" )
  472. endif()
  473. if(GTK2_${_var}_LIBRARY_DEBUG)
  474. set_property(TARGET GTK2::${_basename} APPEND PROPERTY IMPORTED_CONFIGURATIONS DEBUG)
  475. set_property(TARGET GTK2::${_basename} PROPERTY IMPORTED_LOCATION_DEBUG "${GTK2_${_var}_LIBRARY_DEBUG}" )
  476. endif()
  477. if(GTK2_${_var}_INCLUDE_DIR)
  478. set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}_INCLUDE_DIR}")
  479. endif()
  480. if(GTK2_${_var}CONFIG_INCLUDE_DIR AND NOT "x${GTK2_${_var}CONFIG_INCLUDE_DIR}" STREQUAL "x${GTK2_${_var}_INCLUDE_DIR}")
  481. set_property(TARGET GTK2::${_basename} APPEND PROPERTY INTERFACE_INCLUDE_DIRECTORIES "${GTK2_${_var}CONFIG_INCLUDE_DIR}")
  482. endif()
  483. if(GTK2_DEFINITIONS)
  484. set_property(TARGET GTK2::${_basename} PROPERTY INTERFACE_COMPILE_DEFINITIONS "${GTK2_DEFINITIONS}")
  485. endif()
  486. if(_${_var}_GTK2_DEPENDS)
  487. _GTK2_ADD_TARGET_DEPENDS(${_var} ${_${_var}_GTK2_DEPENDS} ${_${_var}_GTK2_OPTIONAL_DEPENDS})
  488. endif()
  489. if(_${_var}_OPTIONAL_INCLUDES)
  490. foreach(_D ${_${_var}_OPTIONAL_INCLUDES})
  491. if(_D)
  492. _GTK2_ADD_TARGET_INCLUDE_DIRS(${_var} ${_D})
  493. endif()
  494. endforeach()
  495. endif()
  496. endif()
  497. set(GTK2_TARGETS ${GTK2_TARGETS} GTK2::${_basename})
  498. set(GTK2_TARGETS ${GTK2_TARGETS} PARENT_SCOPE)
  499. if(GTK2_USE_IMPORTED_TARGETS)
  500. set(GTK2_${_var}_LIBRARY GTK2::${_basename} PARENT_SCOPE)
  501. endif()
  502. endif()
  503. endfunction()
  504. #=============================================================
  505. #
  506. # main()
  507. #
  508. set(GTK2_FOUND)
  509. set(GTK2_INCLUDE_DIRS)
  510. set(GTK2_LIBRARIES)
  511. set(GTK2_TARGETS)
  512. set(GTK2_DEFINITIONS)
  513. if(NOT GTK2_FIND_COMPONENTS)
  514. # Assume they only want GTK
  515. set(GTK2_FIND_COMPONENTS gtk)
  516. endif()
  517. #
  518. # If specified, enforce version number
  519. #
  520. if(GTK2_FIND_VERSION)
  521. set(GTK2_FAILED_VERSION_CHECK true)
  522. if(GTK2_DEBUG)
  523. message(STATUS "[FindGTK2.cmake:${CMAKE_CURRENT_LIST_LINE}] "
  524. "Searching for version ${GTK2_FIND_VERSION}")
  525. endif()
  526. _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
  527. if(GTK2_GTK_INCLUDE_DIR)
  528. _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
  529. GTK2_MINOR_VERSION
  530. GTK2_PATCH_VERSION
  531. ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
  532. set(GTK2_VERSION
  533. ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
  534. if(GTK2_FIND_VERSION_EXACT)
  535. if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION)
  536. set(GTK2_FAILED_VERSION_CHECK false)
  537. endif()
  538. else()
  539. if(GTK2_VERSION VERSION_EQUAL GTK2_FIND_VERSION OR
  540. GTK2_VERSION VERSION_GREATER GTK2_FIND_VERSION)
  541. set(GTK2_FAILED_VERSION_CHECK false)
  542. endif()
  543. endif()
  544. else()
  545. # If we can't find the GTK include dir, we can't do version checking
  546. if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
  547. message(FATAL_ERROR "Could not find GTK2 include directory")
  548. endif()
  549. return()
  550. endif()
  551. if(GTK2_FAILED_VERSION_CHECK)
  552. if(GTK2_FIND_REQUIRED AND NOT GTK2_FIND_QUIETLY)
  553. if(GTK2_FIND_VERSION_EXACT)
  554. message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, version ${GTK2_FIND_VERSION} is needed exactly.")
  555. else()
  556. message(FATAL_ERROR "GTK2 version check failed. Version ${GTK2_VERSION} was found, at least version ${GTK2_FIND_VERSION} is required")
  557. endif()
  558. endif()
  559. # If the version check fails, exit out of the module here
  560. return()
  561. endif()
  562. endif()
  563. #
  564. # On MSVC, according to https://wiki.gnome.org/gtkmm/MSWindows, the /vd2 flag needs to be
  565. # passed to the compiler in order to use gtkmm
  566. #
  567. if(MSVC)
  568. foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
  569. if(_GTK2_component STREQUAL "gtkmm")
  570. set(GTK2_DEFINITIONS "/vd2")
  571. elseif(_GTK2_component STREQUAL "glademm")
  572. set(GTK2_DEFINITIONS "/vd2")
  573. endif()
  574. endforeach()
  575. endif()
  576. #
  577. # Find all components
  578. #
  579. find_package(Freetype QUIET)
  580. if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
  581. list(APPEND GTK2_INCLUDE_DIRS ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2})
  582. endif()
  583. foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
  584. if(_GTK2_component STREQUAL "gtk")
  585. # Left for compatibility with previous versions.
  586. _GTK2_FIND_INCLUDE_DIR(FONTCONFIG fontconfig/fontconfig.h)
  587. _GTK2_FIND_INCLUDE_DIR(X11 X11/Xlib.h)
  588. _GTK2_FIND_INCLUDE_DIR(GLIB glib.h)
  589. _GTK2_FIND_INCLUDE_DIR(GLIBCONFIG glibconfig.h)
  590. _GTK2_FIND_LIBRARY (GLIB glib false true)
  591. _GTK2_ADD_TARGET (GLIB)
  592. _GTK2_FIND_INCLUDE_DIR(GOBJECT glib-object.h)
  593. _GTK2_FIND_LIBRARY (GOBJECT gobject false true)
  594. _GTK2_ADD_TARGET (GOBJECT GTK2_DEPENDS glib)
  595. _GTK2_FIND_INCLUDE_DIR(ATK atk/atk.h)
  596. _GTK2_FIND_LIBRARY (ATK atk false true)
  597. _GTK2_ADD_TARGET (ATK GTK2_DEPENDS gobject glib)
  598. _GTK2_FIND_LIBRARY (GIO gio false true)
  599. _GTK2_ADD_TARGET (GIO GTK2_DEPENDS gobject glib)
  600. _GTK2_FIND_LIBRARY (GTHREAD gthread false true)
  601. _GTK2_ADD_TARGET (GTHREAD GTK2_DEPENDS glib)
  602. _GTK2_FIND_LIBRARY (GMODULE gmodule false true)
  603. _GTK2_ADD_TARGET (GMODULE GTK2_DEPENDS glib)
  604. _GTK2_FIND_INCLUDE_DIR(GDK_PIXBUF gdk-pixbuf/gdk-pixbuf.h)
  605. _GTK2_FIND_LIBRARY (GDK_PIXBUF gdk_pixbuf false true)
  606. _GTK2_ADD_TARGET (GDK_PIXBUF GTK2_DEPENDS gobject glib)
  607. _GTK2_FIND_INCLUDE_DIR(CAIRO cairo.h)
  608. _GTK2_FIND_LIBRARY (CAIRO cairo false false)
  609. _GTK2_ADD_TARGET (CAIRO)
  610. _GTK2_FIND_INCLUDE_DIR(HARFBUZZ hb.h)
  611. _GTK2_FIND_LIBRARY (HARFBUZZ harfbuzz false false)
  612. _GTK2_ADD_TARGET (HARFBUZZ)
  613. _GTK2_FIND_INCLUDE_DIR(PANGO pango/pango.h)
  614. _GTK2_FIND_LIBRARY (PANGO pango false true)
  615. _GTK2_ADD_TARGET (PANGO GTK2_DEPENDS gobject glib
  616. GTK2_OPTIONAL_DEPENDS harfbuzz)
  617. _GTK2_FIND_LIBRARY (PANGOCAIRO pangocairo false true)
  618. _GTK2_ADD_TARGET (PANGOCAIRO GTK2_DEPENDS pango cairo gobject glib)
  619. _GTK2_FIND_LIBRARY (PANGOFT2 pangoft2 false true)
  620. _GTK2_ADD_TARGET (PANGOFT2 GTK2_DEPENDS pango gobject glib
  621. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  622. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  623. ${GTK2_X11_INCLUDE_DIR})
  624. _GTK2_FIND_LIBRARY (PANGOXFT pangoxft false true)
  625. _GTK2_ADD_TARGET (PANGOXFT GTK2_DEPENDS pangoft2 pango gobject glib
  626. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  627. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  628. ${GTK2_X11_INCLUDE_DIR})
  629. _GTK2_FIND_INCLUDE_DIR(GDK gdk/gdk.h)
  630. _GTK2_FIND_INCLUDE_DIR(GDKCONFIG gdkconfig.h)
  631. if(UNIX)
  632. if(APPLE)
  633. _GTK2_FIND_LIBRARY (GDK gdk-quartz false true)
  634. endif()
  635. _GTK2_FIND_LIBRARY (GDK gdk-x11 false true)
  636. else()
  637. _GTK2_FIND_LIBRARY (GDK gdk-win32 false true)
  638. endif()
  639. _GTK2_ADD_TARGET (GDK GTK2_DEPENDS pango gdk_pixbuf gobject glib
  640. GTK2_OPTIONAL_DEPENDS pangocairo cairo)
  641. _GTK2_FIND_INCLUDE_DIR(GTK gtk/gtk.h)
  642. if(UNIX)
  643. if(APPLE)
  644. _GTK2_FIND_LIBRARY (GTK gtk-quartz false true)
  645. endif()
  646. _GTK2_FIND_LIBRARY (GTK gtk-x11 false true)
  647. else()
  648. _GTK2_FIND_LIBRARY (GTK gtk-win32 false true)
  649. endif()
  650. _GTK2_ADD_TARGET (GTK GTK2_DEPENDS gdk atk pangoft2 pango gdk_pixbuf gthread gobject glib
  651. GTK2_OPTIONAL_DEPENDS gio pangocairo cairo)
  652. elseif(_GTK2_component STREQUAL "gtkmm")
  653. _GTK2_FIND_INCLUDE_DIR(SIGC++ sigc++/sigc++.h)
  654. _GTK2_FIND_INCLUDE_DIR(SIGC++CONFIG sigc++config.h)
  655. _GTK2_FIND_LIBRARY (SIGC++ sigc true true)
  656. _GTK2_ADD_TARGET (SIGC++)
  657. # Since sigc++ 2.5.1 c++11 support is required
  658. if(GTK2_SIGC++CONFIG_INCLUDE_DIR)
  659. _GTK2_SIGCXX_GET_VERSION(GTK2_SIGC++_VERSION_MAJOR
  660. GTK2_SIGC++_VERSION_MINOR
  661. GTK2_SIGC++_VERSION_MICRO
  662. ${GTK2_SIGC++CONFIG_INCLUDE_DIR}/sigc++config.h)
  663. if(NOT ${GTK2_SIGC++_VERSION_MAJOR}.${GTK2_SIGC++_VERSION_MINOR}.${GTK2_SIGC++_VERSION_MICRO} VERSION_LESS 2.5.1)
  664. # These are the features needed by clients in order to include the
  665. # project headers:
  666. set_property(TARGET GTK2::sigc++
  667. PROPERTY INTERFACE_COMPILE_FEATURES cxx_alias_templates
  668. cxx_auto_type
  669. cxx_decltype
  670. cxx_deleted_functions
  671. cxx_noexcept
  672. cxx_nullptr
  673. cxx_right_angle_brackets
  674. cxx_rvalue_references
  675. cxx_variadic_templates)
  676. endif()
  677. endif()
  678. _GTK2_FIND_INCLUDE_DIR(GLIBMM glibmm.h)
  679. _GTK2_FIND_INCLUDE_DIR(GLIBMMCONFIG glibmmconfig.h)
  680. _GTK2_FIND_LIBRARY (GLIBMM glibmm true true)
  681. _GTK2_ADD_TARGET (GLIBMM GTK2_DEPENDS gobject sigc++ glib)
  682. _GTK2_FIND_INCLUDE_DIR(GIOMM giomm.h)
  683. _GTK2_FIND_INCLUDE_DIR(GIOMMCONFIG giommconfig.h)
  684. _GTK2_FIND_LIBRARY (GIOMM giomm true true)
  685. _GTK2_ADD_TARGET (GIOMM GTK2_DEPENDS gio glibmm gobject sigc++ glib)
  686. _GTK2_FIND_INCLUDE_DIR(ATKMM atkmm.h)
  687. _GTK2_FIND_INCLUDE_DIR(ATKMMCONFIG atkmmconfig.h)
  688. _GTK2_FIND_LIBRARY (ATKMM atkmm true true)
  689. _GTK2_ADD_TARGET (ATKMM GTK2_DEPENDS atk glibmm gobject sigc++ glib)
  690. _GTK2_FIND_INCLUDE_DIR(CAIROMM cairomm/cairomm.h)
  691. _GTK2_FIND_INCLUDE_DIR(CAIROMMCONFIG cairommconfig.h)
  692. _GTK2_FIND_LIBRARY (CAIROMM cairomm true true)
  693. _GTK2_ADD_TARGET (CAIROMM GTK2_DEPENDS cairo sigc++
  694. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  695. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  696. ${GTK2_X11_INCLUDE_DIR})
  697. _GTK2_FIND_INCLUDE_DIR(PANGOMM pangomm.h)
  698. _GTK2_FIND_INCLUDE_DIR(PANGOMMCONFIG pangommconfig.h)
  699. _GTK2_FIND_LIBRARY (PANGOMM pangomm true true)
  700. _GTK2_ADD_TARGET (PANGOMM GTK2_DEPENDS glibmm sigc++ pango gobject glib
  701. GTK2_OPTIONAL_DEPENDS cairomm pangocairo cairo
  702. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  703. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  704. ${GTK2_X11_INCLUDE_DIR})
  705. _GTK2_FIND_INCLUDE_DIR(GDKMM gdkmm.h)
  706. _GTK2_FIND_INCLUDE_DIR(GDKMMCONFIG gdkmmconfig.h)
  707. _GTK2_FIND_LIBRARY (GDKMM gdkmm true true)
  708. _GTK2_ADD_TARGET (GDKMM GTK2_DEPENDS pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gobject glib
  709. GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
  710. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  711. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  712. ${GTK2_X11_INCLUDE_DIR})
  713. _GTK2_FIND_INCLUDE_DIR(GTKMM gtkmm.h)
  714. _GTK2_FIND_INCLUDE_DIR(GTKMMCONFIG gtkmmconfig.h)
  715. _GTK2_FIND_LIBRARY (GTKMM gtkmm true true)
  716. _GTK2_ADD_TARGET (GTKMM GTK2_DEPENDS atkmm gdkmm pangomm gtk glibmm sigc++ gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
  717. GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
  718. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  719. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  720. ${GTK2_X11_INCLUDE_DIR})
  721. elseif(_GTK2_component STREQUAL "glade")
  722. _GTK2_FIND_INCLUDE_DIR(GLADE glade/glade.h)
  723. _GTK2_FIND_LIBRARY (GLADE glade false true)
  724. _GTK2_ADD_TARGET (GLADE GTK2_DEPENDS gtk gdk atk gio pangoft2 gdk_pixbuf pango gobject glib
  725. GTK2_OPTIONAL_DEPENDS pangocairo cairo
  726. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  727. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  728. ${GTK2_X11_INCLUDE_DIR})
  729. elseif(_GTK2_component STREQUAL "glademm")
  730. _GTK2_FIND_INCLUDE_DIR(GLADEMM libglademm.h)
  731. _GTK2_FIND_INCLUDE_DIR(GLADEMMCONFIG libglademmconfig.h)
  732. _GTK2_FIND_LIBRARY (GLADEMM glademm true true)
  733. _GTK2_ADD_TARGET (GLADEMM GTK2_DEPENDS gtkmm glade atkmm gdkmm giomm pangomm glibmm sigc++ gtk gdk atk pangoft2 gdk_pixbuf pango gthread gobject glib
  734. GTK2_OPTIONAL_DEPENDS giomm cairomm gio pangocairo cairo
  735. OPTIONAL_INCLUDES ${FREETYPE_INCLUDE_DIR_ft2build} ${FREETYPE_INCLUDE_DIR_freetype2}
  736. ${GTK2_FONTCONFIG_INCLUDE_DIR}
  737. ${GTK2_X11_INCLUDE_DIR})
  738. else()
  739. message(FATAL_ERROR "Unknown GTK2 component ${_component}")
  740. endif()
  741. endforeach()
  742. #
  743. # Solve for the GTK2 version if we haven't already
  744. #
  745. if(NOT GTK2_FIND_VERSION AND GTK2_GTK_INCLUDE_DIR)
  746. _GTK2_GET_VERSION(GTK2_MAJOR_VERSION
  747. GTK2_MINOR_VERSION
  748. GTK2_PATCH_VERSION
  749. ${GTK2_GTK_INCLUDE_DIR}/gtk/gtkversion.h)
  750. set(GTK2_VERSION ${GTK2_MAJOR_VERSION}.${GTK2_MINOR_VERSION}.${GTK2_PATCH_VERSION})
  751. endif()
  752. #
  753. # Try to enforce components
  754. #
  755. set(_GTK2_did_we_find_everything true) # This gets set to GTK2_FOUND
  756. include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  757. foreach(_GTK2_component ${GTK2_FIND_COMPONENTS})
  758. string(TOUPPER ${_GTK2_component} _COMPONENT_UPPER)
  759. set(GTK2_${_COMPONENT_UPPER}_FIND_QUIETLY ${GTK2_FIND_QUIETLY})
  760. set(FPHSA_NAME_MISMATCHED 1)
  761. if(_GTK2_component STREQUAL "gtk")
  762. FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtk libraries were not found."
  763. GTK2_GTK_LIBRARY
  764. GTK2_GTK_INCLUDE_DIR
  765. GTK2_GDK_INCLUDE_DIR
  766. GTK2_GDKCONFIG_INCLUDE_DIR
  767. GTK2_GDK_LIBRARY
  768. GTK2_GLIB_INCLUDE_DIR
  769. GTK2_GLIBCONFIG_INCLUDE_DIR
  770. GTK2_GLIB_LIBRARY
  771. )
  772. elseif(_GTK2_component STREQUAL "gtkmm")
  773. FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "Some or all of the gtkmm libraries were not found."
  774. GTK2_GTKMM_LIBRARY
  775. GTK2_GTKMM_INCLUDE_DIR
  776. GTK2_GTKMMCONFIG_INCLUDE_DIR
  777. GTK2_GDKMM_INCLUDE_DIR
  778. GTK2_GDKMMCONFIG_INCLUDE_DIR
  779. GTK2_GDKMM_LIBRARY
  780. GTK2_GLIBMM_INCLUDE_DIR
  781. GTK2_GLIBMMCONFIG_INCLUDE_DIR
  782. GTK2_GLIBMM_LIBRARY
  783. FREETYPE_INCLUDE_DIR_ft2build
  784. FREETYPE_INCLUDE_DIR_freetype2
  785. )
  786. elseif(_GTK2_component STREQUAL "glade")
  787. FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glade library was not found."
  788. GTK2_GLADE_LIBRARY
  789. GTK2_GLADE_INCLUDE_DIR
  790. )
  791. elseif(_GTK2_component STREQUAL "glademm")
  792. FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTK2_${_COMPONENT_UPPER} "The glademm library was not found."
  793. GTK2_GLADEMM_LIBRARY
  794. GTK2_GLADEMM_INCLUDE_DIR
  795. GTK2_GLADEMMCONFIG_INCLUDE_DIR
  796. )
  797. endif()
  798. unset(FPHSA_NAME_MISMATCHED)
  799. if(NOT GTK2_${_COMPONENT_UPPER}_FOUND)
  800. set(_GTK2_did_we_find_everything false)
  801. endif()
  802. endforeach()
  803. if(GTK2_USE_IMPORTED_TARGETS)
  804. set(GTK2_LIBRARIES ${GTK2_TARGETS})
  805. endif()
  806. if(_GTK2_did_we_find_everything AND NOT GTK2_VERSION_CHECK_FAILED)
  807. set(GTK2_FOUND true)
  808. else()
  809. # Unset our variables.
  810. set(GTK2_FOUND false)
  811. set(GTK2_VERSION)
  812. set(GTK2_VERSION_MAJOR)
  813. set(GTK2_VERSION_MINOR)
  814. set(GTK2_VERSION_PATCH)
  815. set(GTK2_INCLUDE_DIRS)
  816. set(GTK2_LIBRARIES)
  817. set(GTK2_TARGETS)
  818. set(GTK2_DEFINITIONS)
  819. endif()
  820. if(GTK2_INCLUDE_DIRS)
  821. list(REMOVE_DUPLICATES GTK2_INCLUDE_DIRS)
  822. endif()