aboutsummaryrefslogtreecommitdiffstats
path: root/cmake/modules/FindGTK3.cmake
blob: 71d503b9f15f1894708f470eef1433bc27c5438a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
# - Try to find GTK3
#
# Once done this will define
#
#  GTK3_FOUND - System has GTK3
#  GTK3_INCLUDE_DIRS - The GTK3 include directory
#  GTK3_LIBRARIES - The libraries needed to use GTK3
#  GTK3_DEFINITIONS - Compiler switches required for using GTK3
#  GTK3_DLL_DIR - (Windows) Path to required GTK2 DLLS
#  GTK3_DLLS - (Windows) List of required GTK3 DLLS
#  GTK3_ETC_DIR - (Windows) Path to GTK3 configuration files
#  GTK3_LIB_DIR - (Windows) Path to additional GTK3 library files
#=============================================================================
# Copyright 2011 Duncan Mac-Vicar P. <duncan@kde.org>
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
#  License text for the above reference.)

include( FindWSWinLibs )
FindWSWinLibs( "gtk3" "GTK3_HINTS" )
if( DEFINED GTK3_HINTS )
    set( GTK3_PKG_CONFIG_PATH "${GTK3_HINTS}/lib/pkgconfig" )
    file( TO_NATIVE_PATH ${GTK3_PKG_CONFIG_PATH} GTK3_PKG_NATIVE_PATH )

    if ( DEFINED ENV{PKG_CONFIG_PATH} )
        set( ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${GTK3_PKG_NATIVE_PATH}" )
    else()
        set( ENV{PKG_CONFIG_PATH} "${GTK3_PKG_NATIVE_PATH}" )
    endif()
endif()

# use pkg-config to get the directories and then use these values
# in the FIND_PATH() and FIND_LIBRARY() calls
find_package( PkgConfig )
pkg_check_modules( PC_GTK3 QUIET gtk+-3.0 )

# Hack around broken .pc files in Windows GTK bundle
if( DEFINED GTK3_HINTS )
    string( REGEX REPLACE "(-I|^|;)/[^;]*/include" "\\1${GTK3_HINTS}/include" PC_GTK3_INCLUDEDIR "${PC_GTK3_INCLUDEDIR}" )
    string( REGEX REPLACE "(-I|^|;)/[^;]*/include" "\\1${GTK3_HINTS}/include" PC_GTK3_INCLUDE_DIRS "${PC_GTK3_INCLUDE_DIRS}" )
    string( REGEX REPLACE "-L/.*/lib" "-L${GTK3_HINTS}/lib" PC_GTK3_LIBRARY_DIRS "${PC_GTK3_LIBRARY_DIRS}" )
    set( PC_GTK3_CFLAGS )
    set( PC_GTK3_CFLAGS_OTHER )
    file( GLOB _SUBDIRS "${PC_GTK3_INCLUDEDIR}/*" )
    foreach( _ENTRY ${_SUBDIRS} )
        if( IS_DIRECTORY ${_ENTRY} )
            file( TO_NATIVE_PATH ${_ENTRY} _N_ENTRY )
            set( PC_GTK3_INCLUDE_DIRS ${PC_GTK3_INCLUDE_DIRS} ${_N_ENTRY} )
        endif()
    endforeach()
endif()

#message( STATUS "PC_GTK3_INCLUDEDIR: ${PC_GTK3_INCLUDEDIR}" )
#message( STATUS "PC_GTK3_INCLUDE_DIRS: ${PC_GTK3_INCLUDE_DIRS}" )
#message( STATUS "PC_GTK3_LIBRARIES: ${PC_GTK3_LIBRARIES}" )
#message( STATUS "PC_GTK3_LIBRARY_DIRS: ${PC_GTK3_LIBRARY_DIRS}" )
#message( STATUS "PC_GTK3_CFLAGS: ${PC_GTK3_CFLAGS}")
#message( STATUS "PC_GTK3_CFLAGS_OTHER: ${PC_GTK3_CFLAGS_OTHER}" )
#message( STATUS "PC_GTK3_LDFLAGS: ${PC_GTK3_LDFLAGS}" )
#message( STATUS "PC_GTK3_LDFLAGS_OTHER: ${PC_GTK3_LDFLAGS_OTHER}" )

set( GTK3_DEFINITIONS ${PC_GTK3_CFLAGS_OTHER} )

if( NOT PC_GTK3_FOUND )
    find_path( GTK3_INCLUDE_DIR
        NAMES
            "gtk/gtk.h"
        HINTS
            ${GTK3_HINTS}/include
            ${PC_GTK3_INCLUDEDIR}
            ${PC_GTK3_INCLUDE_DIRS}
       PATH_SUFFIXES
            "gtk-3.0"
    )
else()
    set( GTK3_INCLUDE_DIR ${PC_GTK3_INCLUDEDIR} ${PC_GTK3_INCLUDE_DIRS} )
endif()

set( _C 1 )
foreach( _LIB_NAME gtk-3 gtk3 ${PC_GTK3_LIBRARIES} )
    find_library( _LIBRARY_${_C}
        NAMES
           ${_LIB_NAME}
        HINTS
            ${GTK3_HINTS}/lib
            ${PC_GTK3_LIBDIR}
            ${PC_GTK3_LIBRARY_DIRS}
    )
    if( _LIBRARY_${_C} )
        set( GTK3_LIBRARY ${GTK3_LIBRARY} ${_LIBRARY_${_C}} )
    endif()
    math( EXPR _C "${_C} + 1" )
endforeach()

# handle the QUIETLY and REQUIRED arguments and set GTK3_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(GTK3 DEFAULT_MSG GTK3_LIBRARY GTK3_INCLUDE_DIR)

if( GTK3_FOUND )
    set( GTK3_LIBRARIES ${GTK3_LIBRARY} )
    set( GTK3_INCLUDE_DIRS ${GTK3_INCLUDE_DIR} )
    if(WIN32)
        set(GTK3_DLL_DIR "${GTK3_HINTS}/bin"
            CACHE PATH "Path to GTK+ 3 DLLS")
        file( GLOB _gtk3_dlls RELATIVE "${GTK3_DLL_DIR}"
            "${GTK3_DLL_DIR}/libgtk-*.dll"
            "${GTK3_DLL_DIR}/libgdk-*.dll"
            "${GTK3_DLL_DIR}/libgdk_pixbuf-*.dll"
            "${GTK3_DLL_DIR}/libatk-*.dll"
            "${GTK3_DLL_DIR}/libpango-*.dll"
            "${GTK3_DLL_DIR}/libpangowin32-*.dll"
            "${GTK3_DLL_DIR}/libcairo-*.dll"
            "${GTK3_DLL_DIR}/libpangocairo-*.dll"
            "${GTK3_DLL_DIR}/libexpat-*.dll"
            "${GTK3_DLL_DIR}/libffi-*.dll"
            "${GTK3_DLL_DIR}/libfontconfig-*.dll"
            "${GTK3_DLL_DIR}/libpangoft2-*.dll"
            "${GTK3_DLL_DIR}/libfreetype-*.dll"
            "${GTK3_DLL_DIR}/libharfbuzz-*.dll"
            "${GTK3_DLL_DIR}/libjasper-*.dll"
            "${GTK3_DLL_DIR}/libjpeg-*.dll"
            "${GTK3_DLL_DIR}/liblzma-*.dll"
            "${GTK3_DLL_DIR}/libpixman-*.dll"
            "${GTK3_DLL_DIR}/libpng??-*.dll"
            "${GTK3_DLL_DIR}/libtiff-*.dll"
            "${GTK3_DLL_DIR}/libxml2-*.dll"
        )
        set(GTK3_DLLS "${_gtk3_dlls}"
            CACHE PATH "List of GTK+ 3 DLLS")
        set(GTK3_ETC_DIR "${GTK3_HINTS}/etc"
            CACHE PATH "Path to GTK+ 3 configuration files")
        set(GTK3_LIB_DIR "${GTK3_HINTS}/lib/gtk-3.0"
            CACHE PATH "Path to additional GTK+ 3 library files")
    endif()
else()
    set( GTK3_LIBRARIES )
    set( GTK3_INCLUDE_DIRS )
    set( GTK3_DLL_DIR )
    set( GTK3_DLLS )
    set( GTK3_ETC_DIR )
    set( GTK3_LIB_DIR )
endif()

mark_as_advanced(GTK3_INCLUDE_DIRS GTK3_LIBRARIES)