FindX11.cmake 28 KB
Newer Older
1 2 3
# Distributed under the OSI-approved BSD 3-Clause License.  See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.

4 5 6 7 8 9 10 11 12 13 14 15 16 17
#[=======================================================================[.rst:
FindX11
-------

Find X11 installation

Try to find X11 on UNIX systems. The following values are defined

::

  X11_FOUND        - True if X11 is available
  X11_INCLUDE_DIR  - include directories to use X11
  X11_LIBRARIES    - link against these to use X11

18
and also the following more fine grained variables and targets:
19 20 21

::

22 23 24
  X11_ICE_INCLUDE_PATH,          X11_ICE_LIB,        X11_ICE_FOUND,        X11::ICE
  X11_SM_INCLUDE_PATH,           X11_SM_LIB,         X11_SM_FOUND,         X11::SM
  X11_X11_INCLUDE_PATH,          X11_X11_LIB,                              X11::X11
25
  X11_Xaccessrules_INCLUDE_PATH,
26
  X11_Xaccessstr_INCLUDE_PATH,                       X11_Xaccess_FOUND
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
  X11_Xau_INCLUDE_PATH,          X11_Xau_LIB,        X11_Xau_FOUND,        X11::Xau
  X11_Xcomposite_INCLUDE_PATH,   X11_Xcomposite_LIB, X11_Xcomposite_FOUND, X11::Xcomposite
  X11_Xcursor_INCLUDE_PATH,      X11_Xcursor_LIB,    X11_Xcursor_FOUND,    X11::Xcursor
  X11_Xdamage_INCLUDE_PATH,      X11_Xdamage_LIB,    X11_Xdamage_FOUND,    X11::Xdamage
  X11_Xdmcp_INCLUDE_PATH,        X11_Xdmcp_LIB,      X11_Xdmcp_FOUND,      X11::Xdmcp
  X11_Xext_INCLUDE_PATH,         X11_Xext_LIB,       X11_Xext_FOUND,       X11::Xext
  X11_Xxf86misc_INCLUDE_PATH,    X11_Xxf86misc_LIB,  X11_Xxf86misc_FOUND,  X11::Xxf86misc
  X11_Xxf86vm_INCLUDE_PATH,      X11_Xxf86vm_LIB     X11_Xxf86vm_FOUND,    X11::Xxf86vm
  X11_Xfixes_INCLUDE_PATH,       X11_Xfixes_LIB,     X11_Xfixes_FOUND,     X11::Xfixes
  X11_Xft_INCLUDE_PATH,          X11_Xft_LIB,        X11_Xft_FOUND,        X11::Xft
  X11_Xi_INCLUDE_PATH,           X11_Xi_LIB,         X11_Xi_FOUND,         X11::Xi
  X11_Xinerama_INCLUDE_PATH,     X11_Xinerama_LIB,   X11_Xinerama_FOUND,   X11::Xinerama
  X11_Xkb_INCLUDE_PATH,
  X11_Xkblib_INCLUDE_PATH,                           X11_Xkb_FOUND,        X11::Xkb
  X11_xkbfile_INCLUDE_PATH,      X11_xkbfile_LIB,    X11_xkbfile_FOUND,    X11::xkbfile
  X11_Xmu_INCLUDE_PATH,          X11_Xmu_LIB,        X11_Xmu_FOUND,        X11::Xmu
  X11_Xpm_INCLUDE_PATH,          X11_Xpm_LIB,        X11_Xpm_FOUND,        X11::Xpm
  X11_Xtst_INCLUDE_PATH,         X11_Xtst_LIB,       X11_Xtst_FOUND,       X11::Xtst
  X11_Xrandr_INCLUDE_PATH,       X11_Xrandr_LIB,     X11_Xrandr_FOUND,     X11::Xrandr
  X11_Xrender_INCLUDE_PATH,      X11_Xrender_LIB,    X11_Xrender_FOUND,    X11::Xrender
  X11_XRes_INCLUDE_PATH,         X11_XRes_LIB,       X11_XRes_FOUND,       X11::XRes
  X11_Xss_INCLUDE_PATH,          X11_Xss_LIB,        X11_Xss_FOUND,        X11::Xss
  X11_Xt_INCLUDE_PATH,           X11_Xt_LIB,         X11_Xt_FOUND,         X11::Xt
  X11_Xutil_INCLUDE_PATH,                            X11_Xutil_FOUND,      X11::Xutil
  X11_Xv_INCLUDE_PATH,           X11_Xv_LIB,         X11_Xv_FOUND,         X11::Xv
52 53 54 55 56
  X11_dpms_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_dpms_FOUND
  X11_XShm_INCLUDE_PATH,         (in X11_Xext_LIB),  X11_XShm_FOUND
  X11_Xshape_INCLUDE_PATH,       (in X11_Xext_LIB),  X11_Xshape_FOUND
  X11_XSync_INCLUDE_PATH,        (in X11_Xext_LIB),  X11_XSync_FOUND
#]=======================================================================]
57

58 59
if (UNIX)
  set(X11_FOUND 0)
60 61
  # X11 is never a framework and some header files may be
  # found in tcl on the mac
62 63
  set(CMAKE_FIND_FRAMEWORK_SAVE ${CMAKE_FIND_FRAMEWORK})
  set(CMAKE_FIND_FRAMEWORK NEVER)
64 65
  set(CMAKE_REQUIRED_QUIET_SAVE ${CMAKE_REQUIRED_QUIET})
  set(CMAKE_REQUIRED_QUIET ${X11_FIND_QUIETLY})
66
  set(X11_INC_SEARCH_PATH
67
    /usr/pkg/xorg/include
68 69
    /usr/X11R6/include
    /usr/X11R7/include
Andy Cedilnik's avatar
Andy Cedilnik committed
70
    /usr/include/X11
71 72
    /usr/openwin/include
    /usr/openwin/share/include
Andy Cedilnik's avatar
Andy Cedilnik committed
73
    /opt/graphics/OpenGL/include
74
    /opt/X11/include
Andy Cedilnik's avatar
Andy Cedilnik committed
75 76
  )

77
  set(X11_LIB_SEARCH_PATH
78
    /usr/pkg/xorg/lib
79
    /usr/X11R6/lib
80
    /usr/X11R7/lib
81
    /usr/openwin/lib
82
    /opt/X11/lib
83 84
  )

85 86
  find_path(X11_X11_INCLUDE_PATH X11/X.h                             ${X11_INC_SEARCH_PATH})
  find_path(X11_Xlib_INCLUDE_PATH X11/Xlib.h                         ${X11_INC_SEARCH_PATH})
87 88 89

  # Look for includes; keep the list sorted by name of the cmake *_INCLUDE_PATH
  # variable (which doesn't need to match the include file name).
90

91
  # Solaris lacks XKBrules.h, so we should skip kxkbd there.
92 93 94 95 96 97 98 99 100
  find_path(X11_ICE_INCLUDE_PATH X11/ICE/ICE.h                       ${X11_INC_SEARCH_PATH})
  find_path(X11_SM_INCLUDE_PATH X11/SM/SM.h                          ${X11_INC_SEARCH_PATH})
  find_path(X11_Xaccessrules_INCLUDE_PATH X11/extensions/XKBrules.h  ${X11_INC_SEARCH_PATH})
  find_path(X11_Xaccessstr_INCLUDE_PATH X11/extensions/XKBstr.h      ${X11_INC_SEARCH_PATH})
  find_path(X11_Xau_INCLUDE_PATH X11/Xauth.h                         ${X11_INC_SEARCH_PATH})
  find_path(X11_Xcomposite_INCLUDE_PATH X11/extensions/Xcomposite.h  ${X11_INC_SEARCH_PATH})
  find_path(X11_Xcursor_INCLUDE_PATH X11/Xcursor/Xcursor.h           ${X11_INC_SEARCH_PATH})
  find_path(X11_Xdamage_INCLUDE_PATH X11/extensions/Xdamage.h        ${X11_INC_SEARCH_PATH})
  find_path(X11_Xdmcp_INCLUDE_PATH X11/Xdmcp.h                       ${X11_INC_SEARCH_PATH})
Ben Boeckel's avatar
Ben Boeckel committed
101
  find_path(X11_Xext_INCLUDE_PATH X11/extensions/Xext.h              ${X11_INC_SEARCH_PATH})
102
  find_path(X11_dpms_INCLUDE_PATH X11/extensions/dpms.h              ${X11_INC_SEARCH_PATH})
103 104
  find_path(X11_Xxf86misc_INCLUDE_PATH X11/extensions/xf86misc.h     ${X11_INC_SEARCH_PATH})
  find_path(X11_Xxf86vm_INCLUDE_PATH X11/extensions/xf86vmode.h      ${X11_INC_SEARCH_PATH})
105 106 107 108 109 110
  find_path(X11_Xfixes_INCLUDE_PATH X11/extensions/Xfixes.h          ${X11_INC_SEARCH_PATH})
  find_path(X11_Xft_INCLUDE_PATH X11/Xft/Xft.h                       ${X11_INC_SEARCH_PATH})
  find_path(X11_Xi_INCLUDE_PATH X11/extensions/XInput.h              ${X11_INC_SEARCH_PATH})
  find_path(X11_Xinerama_INCLUDE_PATH X11/extensions/Xinerama.h      ${X11_INC_SEARCH_PATH})
  find_path(X11_Xkb_INCLUDE_PATH X11/extensions/XKB.h                ${X11_INC_SEARCH_PATH})
  find_path(X11_Xkblib_INCLUDE_PATH X11/XKBlib.h                     ${X11_INC_SEARCH_PATH})
111
  find_path(X11_xkbfile_INCLUDE_PATH X11/extensions/XKBfile.h        ${X11_INC_SEARCH_PATH})
112 113
  find_path(X11_Xmu_INCLUDE_PATH X11/Xmu/Xmu.h                       ${X11_INC_SEARCH_PATH})
  find_path(X11_Xpm_INCLUDE_PATH X11/xpm.h                           ${X11_INC_SEARCH_PATH})
114
  find_path(X11_Xtst_INCLUDE_PATH X11/extensions/XTest.h             ${X11_INC_SEARCH_PATH})
115 116 117 118
  find_path(X11_XShm_INCLUDE_PATH X11/extensions/XShm.h              ${X11_INC_SEARCH_PATH})
  find_path(X11_Xrandr_INCLUDE_PATH X11/extensions/Xrandr.h          ${X11_INC_SEARCH_PATH})
  find_path(X11_Xrender_INCLUDE_PATH X11/extensions/Xrender.h        ${X11_INC_SEARCH_PATH})
  find_path(X11_XRes_INCLUDE_PATH X11/extensions/XRes.h              ${X11_INC_SEARCH_PATH})
119
  find_path(X11_Xss_INCLUDE_PATH X11/extensions/scrnsaver.h          ${X11_INC_SEARCH_PATH})
120 121 122 123 124 125
  find_path(X11_Xshape_INCLUDE_PATH X11/extensions/shape.h           ${X11_INC_SEARCH_PATH})
  find_path(X11_Xutil_INCLUDE_PATH X11/Xutil.h                       ${X11_INC_SEARCH_PATH})
  find_path(X11_Xt_INCLUDE_PATH X11/Intrinsic.h                      ${X11_INC_SEARCH_PATH})
  find_path(X11_Xv_INCLUDE_PATH X11/extensions/Xvlib.h               ${X11_INC_SEARCH_PATH})
  find_path(X11_XSync_INCLUDE_PATH X11/extensions/sync.h             ${X11_INC_SEARCH_PATH})

126 127 128 129 130 131 132
  # Backwards compatibility.
  set(X11_Xinput_INCLUDE_PATH "${X11_Xi_INCLUDE_PATH}")
  set(X11_xf86misc_INCLUDE_PATH "${X11_Xxf86misc_INCLUDE_PATH}")
  set(X11_xf86vmode_INCLUDE_PATH "${X11_Xxf8vm_INCLUDE_PATH}")
  set(X11_Xkbfile_INCLUDE_PATH "${X11_xkbfile_INCLUDE_PATH}")
  set(X11_XTest_INCLUDE_PATH "${X11_Xtst_INCLUDE_PATH}")
  set(X11_Xscreensaver_INCLUDE_PATH "${X11_Xss_INCLUDE_PATH}")
133 134

  find_library(X11_X11_LIB X11               ${X11_LIB_SEARCH_PATH})
135 136

  # Find additional X libraries. Keep list sorted by library name.
137 138 139 140 141 142 143 144 145 146 147 148
  find_library(X11_ICE_LIB ICE               ${X11_LIB_SEARCH_PATH})
  find_library(X11_SM_LIB SM                 ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xau_LIB Xau               ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xcomposite_LIB Xcomposite ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xcursor_LIB Xcursor       ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xdamage_LIB Xdamage       ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xdmcp_LIB Xdmcp           ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xext_LIB Xext             ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xfixes_LIB Xfixes         ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xft_LIB Xft               ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xi_LIB Xi                 ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xinerama_LIB Xinerama     ${X11_LIB_SEARCH_PATH})
149
  find_library(X11_xkbfile_LIB xkbfile       ${X11_LIB_SEARCH_PATH})
150 151 152 153 154
  find_library(X11_Xmu_LIB Xmu               ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xpm_LIB Xpm               ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xrandr_LIB Xrandr         ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xrender_LIB Xrender       ${X11_LIB_SEARCH_PATH})
  find_library(X11_XRes_LIB XRes             ${X11_LIB_SEARCH_PATH})
155
  find_library(X11_Xss_LIB Xss               ${X11_LIB_SEARCH_PATH})
156
  find_library(X11_Xt_LIB Xt                 ${X11_LIB_SEARCH_PATH})
157
  find_library(X11_Xtst_LIB Xtst             ${X11_LIB_SEARCH_PATH})
158 159 160 161
  find_library(X11_Xv_LIB Xv                 ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xxf86misc_LIB Xxf86misc   ${X11_LIB_SEARCH_PATH})
  find_library(X11_Xxf86vm_LIB Xxf86vm       ${X11_LIB_SEARCH_PATH})

162 163 164 165 166 167
  # Backwards compatibility.
  set(X11_Xinput_LIB "${X11_Xi_LIB}")
  set(X11_Xkbfile_LIB "${X11_xkbfile_LIB}")
  set(X11_XTest_LIB "${X11_Xtst_LIB}")
  set(X11_Xscreensaver_LIB "${X11_Xss_LIB}")

168 169 170
  set(X11_LIBRARY_DIR "")
  if(X11_X11_LIB)
    get_filename_component(X11_LIBRARY_DIR ${X11_X11_LIB} PATH)
171
  endif()
172 173 174

  set(X11_INCLUDE_DIR) # start with empty list
  if(X11_X11_INCLUDE_PATH)
175
    list(APPEND X11_INCLUDE_DIR ${X11_X11_INCLUDE_PATH})
176
  endif()
177 178

  if(X11_Xlib_INCLUDE_PATH)
179
    list(APPEND X11_INCLUDE_DIR ${X11_Xlib_INCLUDE_PATH})
180
  endif()
181 182 183

  if(X11_Xutil_INCLUDE_PATH)
    set(X11_Xutil_FOUND TRUE)
184
    list(APPEND X11_INCLUDE_DIR ${X11_Xutil_INCLUDE_PATH})
185
  endif()
186 187 188

  if(X11_Xshape_INCLUDE_PATH)
    set(X11_Xshape_FOUND TRUE)
189
    list(APPEND X11_INCLUDE_DIR ${X11_Xshape_INCLUDE_PATH})
190
  endif()
191 192 193

  set(X11_LIBRARIES) # start with empty list
  if(X11_X11_LIB)
194
    list(APPEND X11_LIBRARIES ${X11_X11_LIB})
195
  endif()
196 197 198

  if(X11_Xext_LIB)
    set(X11_Xext_FOUND TRUE)
199
    list(APPEND X11_LIBRARIES ${X11_Xext_LIB})
200
  endif()
201 202 203

  if(X11_Xt_LIB AND X11_Xt_INCLUDE_PATH)
    set(X11_Xt_FOUND TRUE)
204
  endif()
205 206

  if(X11_Xft_LIB AND X11_Xft_INCLUDE_PATH)
207 208
    find_package(Freetype QUIET)
    find_package(Fontconfig QUIET)
209
    if (FREETYPE_FOUND AND Fontconfig_FOUND)
210 211
      set(X11_Xft_FOUND TRUE)
    endif ()
212
    list(APPEND X11_INCLUDE_DIR ${X11_Xft_INCLUDE_PATH})
213
  endif()
214 215 216

  if(X11_Xv_LIB AND X11_Xv_INCLUDE_PATH)
    set(X11_Xv_FOUND TRUE)
217
    list(APPEND X11_INCLUDE_DIR ${X11_Xv_INCLUDE_PATH})
218
  endif()
219 220 221

  if (X11_Xau_LIB AND X11_Xau_INCLUDE_PATH)
    set(X11_Xau_FOUND TRUE)
222
  endif ()
223 224 225

  if (X11_Xdmcp_INCLUDE_PATH AND X11_Xdmcp_LIB)
      set(X11_Xdmcp_FOUND TRUE)
226
      list(APPEND X11_INCLUDE_DIR ${X11_Xdmcp_INCLUDE_PATH})
227
  endif ()
228 229 230 231

  if (X11_Xaccessrules_INCLUDE_PATH AND X11_Xaccessstr_INCLUDE_PATH)
      set(X11_Xaccess_FOUND TRUE)
      set(X11_Xaccess_INCLUDE_PATH ${X11_Xaccessstr_INCLUDE_PATH})
232
      list(APPEND X11_INCLUDE_DIR ${X11_Xaccess_INCLUDE_PATH})
233
  endif ()
234 235 236

  if (X11_Xpm_INCLUDE_PATH AND X11_Xpm_LIB)
      set(X11_Xpm_FOUND TRUE)
237
      list(APPEND X11_INCLUDE_DIR ${X11_Xpm_INCLUDE_PATH})
238
  endif ()
239 240 241

  if (X11_Xcomposite_INCLUDE_PATH AND X11_Xcomposite_LIB)
     set(X11_Xcomposite_FOUND TRUE)
242
     list(APPEND X11_INCLUDE_DIR ${X11_Xcomposite_INCLUDE_PATH})
243
  endif ()
244 245 246

  if (X11_Xdamage_INCLUDE_PATH AND X11_Xdamage_LIB)
     set(X11_Xdamage_FOUND TRUE)
247
     list(APPEND X11_INCLUDE_DIR ${X11_Xdamage_INCLUDE_PATH})
248
  endif ()
249 250 251

  if (X11_XShm_INCLUDE_PATH)
     set(X11_XShm_FOUND TRUE)
252
     list(APPEND X11_INCLUDE_DIR ${X11_XShm_INCLUDE_PATH})
253
  endif ()
254

255 256 257
  if (X11_Xtst_INCLUDE_PATH AND X11_Xtst_LIB)
      set(X11_Xtst_FOUND TRUE)
      # Backwards compatibility.
258
      set(X11_XTest_FOUND TRUE)
259
      list(APPEND X11_INCLUDE_DIR ${X11_Xtst_INCLUDE_PATH})
260
  endif ()
261 262 263

  if (X11_Xi_INCLUDE_PATH AND X11_Xi_LIB)
     set(X11_Xi_FOUND TRUE)
264 265
     # Backwards compatibility.
     set(X11_Xinput_FOUND TRUE)
266
     list(APPEND X11_INCLUDE_DIR ${X11_Xi_INCLUDE_PATH})
267
  endif ()
268 269 270

  if (X11_Xinerama_INCLUDE_PATH AND X11_Xinerama_LIB)
     set(X11_Xinerama_FOUND TRUE)
271
     list(APPEND X11_INCLUDE_DIR ${X11_Xinerama_INCLUDE_PATH})
272
  endif ()
273 274 275

  if (X11_Xfixes_INCLUDE_PATH AND X11_Xfixes_LIB)
     set(X11_Xfixes_FOUND TRUE)
276
     list(APPEND X11_INCLUDE_DIR ${X11_Xfixes_INCLUDE_PATH})
277
  endif ()
278 279 280

  if (X11_Xrender_INCLUDE_PATH AND X11_Xrender_LIB)
     set(X11_Xrender_FOUND TRUE)
281
     list(APPEND X11_INCLUDE_DIR ${X11_Xrender_INCLUDE_PATH})
282
  endif ()
283 284 285

  if (X11_XRes_INCLUDE_PATH AND X11_XRes_LIB)
     set(X11_XRes_FOUND TRUE)
286
     list(APPEND X11_INCLUDE_DIR ${X11_XRes_INCLUDE_PATH})
287
  endif ()
288 289 290

  if (X11_Xrandr_INCLUDE_PATH AND X11_Xrandr_LIB)
     set(X11_Xrandr_FOUND TRUE)
291
     list(APPEND X11_INCLUDE_DIR ${X11_Xrandr_INCLUDE_PATH})
292
  endif ()
293

294 295 296
  if (X11_Xxf86misc_INCLUDE_PATH AND X11_Xxf86misc_LIB)
     set(X11_Xxf86misc_FOUND TRUE)
     # Backwards compatibility.
297
     set(X11_xf86misc_FOUND TRUE)
298
     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86misc_INCLUDE_PATH})
299
  endif ()
300

301 302 303
  if (X11_Xxf86vm_INCLUDE_PATH AND X11_Xxf86vm_LIB)
     set(X11_Xxf86vm_FOUND TRUE)
     # Backwards compatibility.
304
     set(X11_xf86vmode_FOUND TRUE)
305
     list(APPEND X11_INCLUDE_DIR ${X11_Xxf86vm_INCLUDE_PATH})
306
  endif ()
307 308 309

  if (X11_Xcursor_INCLUDE_PATH AND X11_Xcursor_LIB)
     set(X11_Xcursor_FOUND TRUE)
310
     list(APPEND X11_INCLUDE_DIR ${X11_Xcursor_INCLUDE_PATH})
311
  endif ()
312

313 314
  if (X11_Xss_INCLUDE_PATH AND X11_Xss_LIB)
     set(X11_Xss_FOUND TRUE)
315
     set(X11_Xscreensaver_FOUND TRUE)
316
     list(APPEND X11_INCLUDE_DIR ${X11_Xss_INCLUDE_PATH})
317
  endif ()
318 319 320

  if (X11_dpms_INCLUDE_PATH)
     set(X11_dpms_FOUND TRUE)
321
     list(APPEND X11_INCLUDE_DIR ${X11_dpms_INCLUDE_PATH})
322
  endif ()
323 324 325

  if (X11_Xkb_INCLUDE_PATH AND X11_Xkblib_INCLUDE_PATH AND X11_Xlib_INCLUDE_PATH)
     set(X11_Xkb_FOUND TRUE)
326
     list(APPEND X11_INCLUDE_DIR ${X11_Xkb_INCLUDE_PATH} )
327
  endif ()
328

329 330 331
  if (X11_xkbfile_INCLUDE_PATH AND X11_xkbfile_LIB AND X11_Xlib_INCLUDE_PATH)
     set(X11_xkbfile_FOUND TRUE)
     # Backwards compatibility.
332
     set(X11_Xkbfile_FOUND TRUE)
333
     list(APPEND X11_INCLUDE_DIR ${X11_xkbfile_INCLUDE_PATH} )
334
  endif ()
335 336 337

  if (X11_Xmu_INCLUDE_PATH AND X11_Xmu_LIB)
     set(X11_Xmu_FOUND TRUE)
338
     list(APPEND X11_INCLUDE_DIR ${X11_Xmu_INCLUDE_PATH})
339
  endif ()
340 341 342

  if (X11_XSync_INCLUDE_PATH)
     set(X11_XSync_FOUND TRUE)
343
     list(APPEND X11_INCLUDE_DIR ${X11_XSync_INCLUDE_PATH})
344
  endif ()
345 346 347

  if(X11_ICE_LIB AND X11_ICE_INCLUDE_PATH)
     set(X11_ICE_FOUND TRUE)
348
  endif()
349 350 351

  if(X11_SM_LIB AND X11_SM_INCLUDE_PATH)
     set(X11_SM_FOUND TRUE)
352
  endif()
353

354 355
  # Most of the X11 headers will be in the same directories, avoid
  # creating a huge list of duplicates.
356 357 358
  if (X11_INCLUDE_DIR)
     list(REMOVE_DUPLICATES X11_INCLUDE_DIR)
  endif ()
359

360
  # Deprecated variable for backwards compatibility with CMake 1.4
361 362
  if (X11_X11_INCLUDE_PATH AND X11_LIBRARIES)
    set(X11_FOUND 1)
363
  endif ()
364

365 366 367 368 369
  include(${CMAKE_CURRENT_LIST_DIR}/FindPackageHandleStandardArgs.cmake)
  find_package_handle_standard_args(X11
    REQUIRED_VARS X11_X11_INCLUDE_PATH X11_X11_LIB
    HANDLE_COMPONENTS)

370
  if(X11_FOUND)
371 372
    include(${CMAKE_CURRENT_LIST_DIR}/CheckFunctionExists.cmake)
    include(${CMAKE_CURRENT_LIST_DIR}/CheckLibraryExists.cmake)
373 374 375

    # Translated from an autoconf-generated configure script.
    # See libs.m4 in autoconf's m4 directory.
376 377
    if($ENV{ISC} MATCHES "^yes$")
      set(X11_X_EXTRA_LIBS -lnsl_s -linet)
378
    else()
379
      set(X11_X_EXTRA_LIBS "")
380 381

      # See if XOpenDisplay in X11 works by itself.
382
      check_library_exists("${X11_LIBRARIES}" "XOpenDisplay" "${X11_LIBRARY_DIR}" X11_LIB_X11_SOLO)
383
      if(NOT X11_LIB_X11_SOLO)
384
        # Find library needed for dnet_ntoa.
385
        check_library_exists("dnet" "dnet_ntoa" "" X11_LIB_DNET_HAS_DNET_NTOA)
386
        if (X11_LIB_DNET_HAS_DNET_NTOA)
387
          list(APPEND X11_X_EXTRA_LIBS -ldnet)
388
        else ()
389
          check_library_exists("dnet_stub" "dnet_ntoa" "" X11_LIB_DNET_STUB_HAS_DNET_NTOA)
390
          if (X11_LIB_DNET_STUB_HAS_DNET_NTOA)
391
            list(APPEND X11_X_EXTRA_LIBS -ldnet_stub)
392 393 394
          endif ()
        endif ()
      endif()
395 396

      # Find library needed for gethostbyname.
397
      check_function_exists("gethostbyname" CMAKE_HAVE_GETHOSTBYNAME)
398
      if(NOT CMAKE_HAVE_GETHOSTBYNAME)
399
        check_library_exists("nsl" "gethostbyname" "" CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
400
        if (CMAKE_LIB_NSL_HAS_GETHOSTBYNAME)
401
          list(APPEND X11_X_EXTRA_LIBS -lnsl)
402
        else ()
403
          check_library_exists("bsd" "gethostbyname" "" CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
404
          if (CMAKE_LIB_BSD_HAS_GETHOSTBYNAME)
405
            list(APPEND X11_X_EXTRA_LIBS -lbsd)
406 407 408
          endif ()
        endif ()
      endif()
409 410

      # Find library needed for connect.
411
      check_function_exists("connect" CMAKE_HAVE_CONNECT)
412
      if(NOT CMAKE_HAVE_CONNECT)
413
        check_library_exists("socket" "connect" "" CMAKE_LIB_SOCKET_HAS_CONNECT)
414
        if (CMAKE_LIB_SOCKET_HAS_CONNECT)
415
          list(INSERT X11_X_EXTRA_LIBS 0 -lsocket)
416 417
        endif ()
      endif()
418 419

      # Find library needed for remove.
420
      check_function_exists("remove" CMAKE_HAVE_REMOVE)
421
      if(NOT CMAKE_HAVE_REMOVE)
422
        check_library_exists("posix" "remove" "" CMAKE_LIB_POSIX_HAS_REMOVE)
423
        if (CMAKE_LIB_POSIX_HAS_REMOVE)
424
          list(APPEND X11_X_EXTRA_LIBS -lposix)
425 426
        endif ()
      endif()
427 428

      # Find library needed for shmat.
429
      check_function_exists("shmat" CMAKE_HAVE_SHMAT)
430
      if(NOT CMAKE_HAVE_SHMAT)
431
        check_library_exists("ipc" "shmat" "" CMAKE_LIB_IPS_HAS_SHMAT)
432
        if (CMAKE_LIB_IPS_HAS_SHMAT)
433
          list(APPEND X11_X_EXTRA_LIBS -lipc)
434 435 436
        endif ()
      endif()
    endif()
437

438
    if (X11_ICE_FOUND)
439
      check_library_exists("ICE" "IceConnectionNumber" "${X11_LIBRARY_DIR}"
440
                            CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
441 442 443
      if(CMAKE_LIB_ICE_HAS_ICECONNECTIONNUMBER)
        set (X11_X_PRE_LIBS ${X11_ICE_LIB})
        if(X11_SM_LIB)
444
          list(INSERT X11_X_PRE_LIBS 0 ${X11_SM_LIB})
445 446 447
        endif()
      endif()
    endif ()
448

449
    # Build the final list of libraries.
450
    set(X11_LIBRARIES ${X11_X_PRE_LIBS} ${X11_LIBRARIES} ${X11_X_EXTRA_LIBS})
451

452 453 454 455 456
    if (NOT TARGET X11::X11)
      add_library(X11::X11 UNKNOWN IMPORTED)
      set_target_properties(X11::X11 PROPERTIES
        IMPORTED_LOCATION "${X11_X11_LIB}"
        INTERFACE_INCLUDE_DIRECTORIES "${X11_X11_INCLUDE_PATH}")
457 458
    endif ()
  endif ()
459

460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663
  if (X11_ICE_FOUND AND NOT TARGET X11::ICE)
    add_library(X11::ICE UNKNOWN IMPORTED)
    set_target_properties(X11::ICE PROPERTIES
      IMPORTED_LOCATION "${X11_ICE_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_ICE_INCLUDE_PATH}")
  endif ()

  if (X11_SM_FOUND AND NOT TARGET X11::SM)
    add_library(X11::SM UNKNOWN IMPORTED)
    set_target_properties(X11::SM PROPERTIES
      IMPORTED_LOCATION "${X11_SM_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_SM_INCLUDE_PATH}")
  endif ()

  if (X11_Xau_FOUND AND NOT TARGET X11::Xau)
    add_library(X11::Xau UNKNOWN IMPORTED)
    set_target_properties(X11::Xau PROPERTIES
      IMPORTED_LOCATION "${X11_Xau_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xau_INCLUDE_PATH}")
  endif ()

  if (X11_Xcomposite_FOUND AND NOT TARGET X11::Xcomposite)
    add_library(X11::Xcomposite UNKNOWN IMPORTED)
    set_target_properties(X11::Xcomposite PROPERTIES
      IMPORTED_LOCATION "${X11_Xcomposite_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcomposite_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xcursor_FOUND AND NOT TARGET X11::Xcursor)
    add_library(X11::Xcursor UNKNOWN IMPORTED)
    set_target_properties(X11::Xcursor PROPERTIES
      IMPORTED_LOCATION "${X11_Xcursor_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xcursor_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xfixes;X11::X11")
  endif ()

  if (X11_Xdamage_FOUND AND NOT TARGET X11::Xdamage)
    add_library(X11::Xdamage UNKNOWN IMPORTED)
    set_target_properties(X11::Xdamage PROPERTIES
      IMPORTED_LOCATION "${X11_Xdamage_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdamage_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xfixes;X11::X11")
  endif ()

  if (X11_Xdmcp_FOUND AND NOT TARGET X11::Xdmcp)
    add_library(X11::Xdmcp UNKNOWN IMPORTED)
    set_target_properties(X11::Xdmcp PROPERTIES
      IMPORTED_LOCATION "${X11_Xdmcp_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xdmcp_INCLUDE_PATH}")
  endif ()

  if (X11_Xext_FOUND AND NOT TARGET X11::Xext)
    add_library(X11::Xext UNKNOWN IMPORTED)
    set_target_properties(X11::Xext PROPERTIES
      IMPORTED_LOCATION "${X11_Xext_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xext_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xxf86misc_FOUND AND NOT TARGET X11::Xxf86misc)
    add_library(X11::Xxf86misc UNKNOWN IMPORTED)
    set_target_properties(X11::Xxf86misc PROPERTIES
      IMPORTED_LOCATION "${X11_Xxf86misc_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86misc_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
  endif ()

  if (X11_Xxf86vm_FOUND AND NOT TARGET X11::Xxf86vm)
    add_library(X11::Xxf86vm UNKNOWN IMPORTED)
    set_target_properties(X11::Xxf86vm PROPERTIES
      IMPORTED_LOCATION "${X11_Xxf86vm_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xxf86vm_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11;X11::Xext")
  endif ()

  if (X11_Xfixes_FOUND AND NOT TARGET X11::Xfixes)
    add_library(X11::Xfixes UNKNOWN IMPORTED)
    set_target_properties(X11::Xfixes PROPERTIES
      IMPORTED_LOCATION "${X11_Xfixes_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xfixes_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xft_FOUND AND NOT TARGET X11::Xft)
    add_library(X11::Xft UNKNOWN IMPORTED)
    set_target_properties(X11::Xft PROPERTIES
      IMPORTED_LOCATION "${X11_Xft_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xft_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::X11;Fontconfig::Fontconfig;Freetype::Freetype")
  endif ()

  if (X11_Xi_FOUND AND NOT TARGET X11::Xi)
    add_library(X11::Xi UNKNOWN IMPORTED)
    set_target_properties(X11::Xi PROPERTIES
      IMPORTED_LOCATION "${X11_Xi_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xi_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
  endif ()

  if (X11_Xinerama_FOUND AND NOT TARGET X11::Xinerama)
    add_library(X11::Xinerama UNKNOWN IMPORTED)
    set_target_properties(X11::Xinerama PROPERTIES
      IMPORTED_LOCATION "${X11_Xinerama_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xinerama_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
  endif ()

  if (X11_Xkb_FOUND AND NOT TARGET X11::Xkb)
    add_library(X11::Xkb INTERFACE IMPORTED)
    set_target_properties(X11::Xkb PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xkb_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_xkbfile_FOUND AND NOT TARGET X11::xkbfile)
    add_library(X11::xkbfile UNKNOWN IMPORTED)
    set_target_properties(X11::xkbfile PROPERTIES
      IMPORTED_LOCATION "${X11_xkbfile_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_xkbfile_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xmu_FOUND AND NOT TARGET X11::Xmu)
    add_library(X11::Xmu UNKNOWN IMPORTED)
    set_target_properties(X11::Xmu PROPERTIES
      IMPORTED_LOCATION "${X11_Xmu_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xmu_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xt;X11::Xext;X11::X11")
  endif ()

  if (X11_Xpm_FOUND AND NOT TARGET X11::Xpm)
    add_library(X11::Xpm UNKNOWN IMPORTED)
    set_target_properties(X11::Xpm PROPERTIES
      IMPORTED_LOCATION "${X11_Xpm_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xpm_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xtst_FOUND AND NOT TARGET X11::Xtst)
    add_library(X11::Xtst UNKNOWN IMPORTED)
    set_target_properties(X11::Xtst PROPERTIES
      IMPORTED_LOCATION "${X11_Xtst_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xtst_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xi;X11::Xext;X11::X11")
  endif ()

  if (X11_Xrandr_FOUND AND NOT TARGET X11::Xrandr)
    add_library(X11::Xrandr UNKNOWN IMPORTED)
    set_target_properties(X11::Xrandr PROPERTIES
      IMPORTED_LOCATION "${X11_Xrandr_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrandr_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xrender;X11::Xext;X11::X11")
  endif ()

  if (X11_Xrender_FOUND AND NOT TARGET X11::Xrender)
    add_library(X11::Xrender UNKNOWN IMPORTED)
    set_target_properties(X11::Xrender PROPERTIES
      IMPORTED_LOCATION "${X11_Xrender_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xrender_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_XRes_FOUND AND NOT TARGET X11::XRes)
    add_library(X11::XRes UNKNOWN IMPORTED)
    set_target_properties(X11::XRes PROPERTIES
      IMPORTED_LOCATION "${X11_XRes_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_XRes_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
  endif ()

  if (X11_Xss_FOUND AND NOT TARGET X11::Xss)
    add_library(X11::Xss UNKNOWN IMPORTED)
    set_target_properties(X11::Xss PROPERTIES
      IMPORTED_LOCATION "${X11_Xss_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xss_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
  endif ()

  if (X11_Xt_FOUND AND NOT TARGET X11::Xt)
    add_library(X11::Xt UNKNOWN IMPORTED)
    set_target_properties(X11::Xt PROPERTIES
      IMPORTED_LOCATION "${X11_Xt_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xt_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::ICE;X11::SM;X11::X11")
  endif ()

  if (X11_Xutil_FOUND AND NOT TARGET X11::Xutil)
    add_library(X11::Xutil INTERFACE IMPORTED)
    set_target_properties(X11::Xutil PROPERTIES
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xutil_INCLUDE_PATH}"
      # libX11 contains the implementations for functions in the Xutil.h
      # header.
      INTERFACE_LINK_LIBRARIES "X11::X11")
  endif ()

  if (X11_Xv_FOUND AND NOT TARGET X11::Xv)
    add_library(X11::Xv UNKNOWN IMPORTED)
    set_target_properties(X11::Xv PROPERTIES
      IMPORTED_LOCATION "${X11_Xv_LIB}"
      INTERFACE_INCLUDE_DIRECTORIES "${X11_Xv_INCLUDE_PATH}"
      INTERFACE_LINK_LIBRARIES "X11::Xext;X11::X11")
  endif ()

664
  mark_as_advanced(
665 666
    X11_X11_INCLUDE_PATH
    X11_X11_LIB
Ben Boeckel's avatar
Ben Boeckel committed
667
    X11_Xext_INCLUDE_PATH
668
    X11_Xext_LIB
669
    X11_Xau_LIB
670
    X11_Xau_INCLUDE_PATH
671 672
    X11_Xlib_INCLUDE_PATH
    X11_Xutil_INCLUDE_PATH
673 674 675 676 677 678 679 680 681 682
    X11_Xcomposite_INCLUDE_PATH
    X11_Xcomposite_LIB
    X11_Xfixes_LIB
    X11_Xfixes_INCLUDE_PATH
    X11_Xrandr_LIB
    X11_Xrandr_INCLUDE_PATH
    X11_Xdamage_LIB
    X11_Xdamage_INCLUDE_PATH
    X11_Xrender_LIB
    X11_Xrender_INCLUDE_PATH
683 684
    X11_XRes_LIB
    X11_XRes_INCLUDE_PATH
685
    X11_Xxf86misc_LIB
686
    X11_Xxf86misc_INCLUDE_PATH
687
    X11_Xxf86vm_LIB
688
    X11_Xxf86vm_INCLUDE_PATH
689 690
    X11_Xi_LIB
    X11_Xi_INCLUDE_PATH
691 692
    X11_Xinerama_LIB
    X11_Xinerama_INCLUDE_PATH
693 694
    X11_Xtst_LIB
    X11_Xtst_INCLUDE_PATH
695 696 697 698
    X11_Xcursor_LIB
    X11_Xcursor_INCLUDE_PATH
    X11_dpms_INCLUDE_PATH
    X11_Xt_LIB
699
    X11_Xt_INCLUDE_PATH
700
    X11_Xdmcp_LIB
701
    X11_LIBRARIES
702 703 704 705 706
    X11_Xaccessrules_INCLUDE_PATH
    X11_Xaccessstr_INCLUDE_PATH
    X11_Xdmcp_INCLUDE_PATH
    X11_Xkb_INCLUDE_PATH
    X11_Xkblib_INCLUDE_PATH
707 708
    X11_xkbfile_INCLUDE_PATH
    X11_xkbfile_LIB
709 710
    X11_Xmu_INCLUDE_PATH
    X11_Xmu_LIB
711 712
    X11_Xss_INCLUDE_PATH
    X11_Xss_LIB
713 714 715 716 717 718 719 720 721 722
    X11_Xpm_INCLUDE_PATH
    X11_Xpm_LIB
    X11_Xft_LIB
    X11_Xft_INCLUDE_PATH
    X11_Xshape_INCLUDE_PATH
    X11_Xv_LIB
    X11_Xv_INCLUDE_PATH
    X11_XShm_INCLUDE_PATH
    X11_ICE_LIB
    X11_ICE_INCLUDE_PATH
723
    X11_SM_LIB
724 725
    X11_SM_INCLUDE_PATH
    X11_XSync_INCLUDE_PATH
726
  )
727
  set(CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK_SAVE})
728
  set(CMAKE_REQUIRED_QUIET ${CMAKE_REQUIRED_QUIET_SAVE})
729
endif ()