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