aboutsummaryrefslogtreecommitdiff
path: root/find-modules/FindXCB.cmake
blob: 8027bdf35cee090f9ee8afe9823314522a49da93 (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
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
#.rst:
# FindXCB
# -------
#
# Try to find XCB on a Unix system.
#
# This is a component-based find module, which makes use of the COMPONENTS and
# OPTIONAL_COMPONENTS arguments to find_module.  The following components are
# available::
#
#   XCB
#   ATOM         AUX          COMPOSITE    CURSOR       DAMAGE
#   DPMS         DRI2         DRI3         EVENT        EWMH
#   GLX          ICCCM        IMAGE        KEYSYMS      PRESENT
#   RANDR        RECORD       RENDER       RENDERUTIL   RES
#   SCREENSAVER  SHAPE        SHM          SYNC         UTIL
#   XEVIE        XF86DRI      XFIXES       XINERAMA     XINPUT
#   XKB          XPRINT       XTEST        XV           XVMC
#
# If no components are specified, this module will act as though all components
# were passed to OPTIONAL_COMPONENTS.
#
# This module will define the following variables, independently of the
# components searched for or found:
#
# ``XCB_FOUND``
#     True if (the requestion version of) xcb is available
# ``XCB_VERSION``
#     Found xcb version
# ``XCB_TARGETS``
#     A list of all targets imported by this module (note that there may be more
#     than the components that were requested)
# ``XCB_LIBRARIES``
#     This can be passed to target_link_libraries() instead of the imported
#     targets
# ``XCB_INCLUDE_DIRS``
#     This should be passed to target_include_directories() if the targets are
#     not used for linking
# ``XCB_DEFINITIONS``
#     This should be passed to target_compile_options() if the targets are not
#     used for linking
#
# For each searched-for components, ``XCB_<component>_FOUND`` will be set to
# true if the corresponding xcb library was found, and false otherwise.  If
# ``XCB_<component>_FOUND`` is true, the imported target ``XCB::<component>``
# will be defined.  This module will also attempt to determine
# ``XCB_*_VERSION`` variables for each imported target, although
# ``XCB_VERSION`` should normally be sufficient.
#
# In general we recommend using the imported targets, as they are easier to use
# and provide more control.  Bear in mind, however, that if any target is in the
# link interface of an exported library, it must be made available by the
# package config file.

#=============================================================================
# Copyright 2011 Fredrik Höglund <fredrik@kde.org>
# Copyright 2013 Martin Gräßlin <mgraesslin@kde.org>
# Copyright 2014 Alex Merry <alex.merry@kde.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the copyright
#    notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the copyright
#    notice, this list of conditions and the following disclaimer in the
#    documentation and/or other materials provided with the distribution.
# 3. The name of the author may not be used to endorse or promote products
#    derived from this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================

include(${CMAKE_CURRENT_LIST_DIR}/../modules/ECMFindModuleHelpers.cmake)

ecm_find_package_version_check(XCB)

if(NOT WIN32)
    # Note that this list needs to be ordered such that any component
    # appears after its dependencies
    set(XCB_known_components
        XCB
        RENDER
        SHAPE
        XFIXES
        SHM
        ATOM
        AUX
        COMPOSITE
        CURSOR
        DAMAGE
        DPMS
        DRI2
        DRI3
        EVENT
        EWMH
        GLX
        ICCCM
        IMAGE
        KEYSYMS
        PRESENT
        RANDR
        RECORD
        RENDERUTIL
        RES
        SCREENSAVER
        SYNC
        UTIL
        XEVIE
        XF86DRI
        XINERAMA
        XINPUT
        XKB
        XPRINT
        XTEST
        XV
        XVMC)
    # default component info: xcb components have fairly predictable
    # header files, library names and pkg-config names
    foreach(_comp ${XCB_known_components})
        string(TOLOWER "${_comp}" _lc_comp)
        set(XCB_${_comp}_component_deps XCB)
        set(XCB_${_comp}_pkg_config "xcb-${_lc_comp}")
        set(XCB_${_comp}_lib "xcb-${_lc_comp}")
        set(XCB_${_comp}_header "xcb/${_lc_comp}.h")
    endforeach()
    # exceptions
    set(XCB_XCB_component_deps)
    set(XCB_COMPOSITE_component_deps XCB XFIXES)
    set(XCB_DAMAGE_component_deps XCB XFIXES)
    set(XCB_IMAGE_component_deps XCB SHM)
    set(XCB_RENDERUTIL_component_deps XCB RENDER)
    set(XCB_XFIXES_component_deps XCB RENDER SHAPE)
    set(XCB_XVMC_component_deps XCB XV)
    set(XCB_XV_component_deps XCB SHM)
    set(XCB_XCB_pkg_config "xcb")
    set(XCB_XCB_lib "xcb")
    set(XCB_ATOM_header "xcb/xcb_atom.h")
    set(XCB_ATOM_lib "xcb-util")
    set(XCB_AUX_header "xcb/xcb_aux.h")
    set(XCB_AUX_lib "xcb-util")
    set(XCB_CURSOR_header "xcb/xcb_cursor.h")
    set(XCB_EVENT_header "xcb/xcb_event.h")
    set(XCB_EVENT_lib "xcb-util")
    set(XCB_EWMH_header "xcb/xcb_ewmh.h")
    set(XCB_ICCCM_header "xcb/xcb_icccm.h")
    set(XCB_IMAGE_header "xcb/xcb_image.h")
    set(XCB_KEYSYMS_header "xcb/xcb_keysyms.h")
    set(XCB_PIXEL_header "xcb/xcb_pixel.h")
    set(XCB_RENDERUTIL_header "xcb/xcb_renderutil.h")
    set(XCB_RENDERUTIL_lib "xcb-render-util")
    set(XCB_UTIL_header "xcb/xcb_util.h")

    ecm_find_package_parse_components(XCB
        RESULT_VAR XCB_components
        KNOWN_COMPONENTS ${XCB_known_components}
    )
    ecm_find_package_handle_library_components(XCB
        COMPONENTS ${XCB_components}
    )

    find_package_handle_standard_args(XCB
        FOUND_VAR
            XCB_FOUND
        REQUIRED_VARS
            XCB_LIBRARIES
        VERSION_VAR
            XCB_VERSION
        HANDLE_COMPONENTS
    )
else()
    message(STATUS "XCB is not available on Windows.")
    set(XCB_FOUND FALSE)
endif()

include(FeatureSummary)
set_package_properties(XCB PROPERTIES
    URL "http://xcb.freedesktop.org"
    DESCRIPTION "X protocol C-language Binding"
)