cmake/sdlchecks.cmake
author Ryan C. Gordon
Wed, 13 Nov 2013 22:35:26 -0500
changeset 7977 5272ae8fccd7
parent 7835 4be86f76e710
child 7981 6d538bc1b395
permissions -rw-r--r--
Started BeOS removal: merged BeOS thread and pthread code.

Haiku uses most of the standard pthread API, with a few #ifdefs where we
still need to fallback onto the old BeOS APIs.

BeOS, however, does not support pthreads (or maybe doesn't support it well),
so I'm unplugging support for the platform with this changeset. Be Inc went
out of business in 2001.
gabomdq@6674
     1
macro(CheckDLOPEN)
gabomdq@6674
     2
  check_function_exists(dlopen HAVE_DLOPEN)
gabomdq@6674
     3
  if(NOT HAVE_DLOPEN)
gabomdq@6674
     4
    foreach(_LIBNAME dl tdl)
gabomdq@6674
     5
      check_library_exists("${_LIBNAME}" "dlopen" "" DLOPEN_LIB)
gabomdq@6674
     6
      if(DLOPEN_LIB)
gabomdq@6674
     7
        list(APPEND EXTRA_LIBS ${_LIBNAME})
gabomdq@6674
     8
        set(_DLLIB ${_LIBNAME})
gabomdq@6674
     9
        set(HAVE_DLOPEN TRUE)
gabomdq@6674
    10
        break()
gabomdq@6674
    11
      endif(DLOPEN_LIB)
gabomdq@6674
    12
    endforeach()
gabomdq@6674
    13
  endif()
gabomdq@6674
    14
gabomdq@6674
    15
  if(HAVE_DLOPEN)
gabomdq@6674
    16
    if(_DLLIB)
gabomdq@6674
    17
      set(CMAKE_REQUIRED_LIBRARIES ${_DLLIB})
gabomdq@6674
    18
    endif()
gabomdq@6674
    19
    check_c_source_compiles("
gabomdq@6674
    20
       #include <dlfcn.h>
jorgen@7507
    21
       int main(int argc, char **argv) {
jorgen@7521
    22
         void *handle = dlopen(\"\", RTLD_NOW);
jorgen@7507
    23
         const char *loaderror = (char *) dlerror();
jorgen@7507
    24
       }" HAVE_DLOPEN)
gabomdq@6674
    25
    set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
    26
  endif()
gabomdq@6674
    27
gabomdq@6674
    28
  if (HAVE_DLOPEN)
gabomdq@6674
    29
    set(SDL_LOADSO_DLOPEN 1)
gabomdq@6674
    30
    set(HAVE_SDL_DLOPEN TRUE)
gabomdq@6674
    31
    file(GLOB DLOPEN_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dlopen/*.c)
gabomdq@6674
    32
    set(SOURCE_FILES ${SOURCE_FILES} ${DLOPEN_SOURCES})
gabomdq@6674
    33
    set(HAVE_SDL_LOADSO TRUE)
gabomdq@6674
    34
  endif()
gabomdq@6674
    35
endmacro(CheckDLOPEN)
gabomdq@6674
    36
gabomdq@6674
    37
# Requires:
gabomdq@6674
    38
# - n/a
gabomdq@6674
    39
macro(CheckOSS)
gabomdq@6674
    40
  if(OSS)
gabomdq@6674
    41
    set(OSS_HEADER_FILE "sys/soundcard.h")
gabomdq@6674
    42
    check_c_source_compiles("
gabomdq@6674
    43
        #include <sys/soundcard.h>
gabomdq@6674
    44
        int main() { int arg = SNDCTL_DSP_SETFRAGMENT; }" OSS_FOUND)
gabomdq@6674
    45
    if(NOT OSS_FOUND)
gabomdq@6674
    46
      set(OSS_HEADER_FILE "soundcard.h")
gabomdq@6674
    47
      check_c_source_compiles("
gabomdq@6674
    48
          #include <soundcard.h>
gabomdq@6674
    49
          int main() { int arg = SNDCTL_DSP_SETFRAGMENT; }" OSS_FOUND)
gabomdq@6674
    50
    endif(NOT OSS_FOUND)
gabomdq@6674
    51
gabomdq@6674
    52
    if(OSS_FOUND)
gabomdq@6674
    53
      set(HAVE_OSS TRUE)
gabomdq@6674
    54
      file(GLOB OSS_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dsp/*.c)
gabomdq@6674
    55
      if(OSS_HEADER_FILE STREQUAL "soundcard.h")
gabomdq@6674
    56
        set(SDL_AUDIO_DRIVER_OSS_SOUNDCARD_H 1)
gabomdq@6674
    57
      endif(OSS_HEADER_FILE STREQUAL "soundcard.h")
gabomdq@6674
    58
      set(SDL_AUDIO_DRIVER_OSS 1)
gabomdq@6674
    59
      set(SOURCE_FILES ${SOURCE_FILES} ${OSS_SOURCES})
gabomdq@6674
    60
      if(NETBSD OR OPENBSD)
gabomdq@6674
    61
        list(APPEND EXTRA_LIBS ossaudio)
gabomdq@6674
    62
      endif(NETBSD OR OPENBSD)
gabomdq@6674
    63
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
    64
    endif(OSS_FOUND)
gabomdq@6674
    65
  endif(OSS)
gabomdq@6674
    66
endmacro(CheckOSS)
gabomdq@6674
    67
gabomdq@6674
    68
# Requires:
gabomdq@6674
    69
# - n/a
gabomdq@6674
    70
# Optional:
gabomdq@6674
    71
# - ALSA_SHARED opt
gabomdq@6674
    72
# - HAVE_DLOPEN opt
gabomdq@6674
    73
macro(CheckALSA)
gabomdq@6674
    74
  if(ALSA)
gabomdq@6674
    75
    CHECK_INCLUDE_FILE(alsa/asoundlib.h HAVE_ASOUNDLIB_H)
gabomdq@6674
    76
    if(HAVE_ASOUNDLIB_H)
gabomdq@6674
    77
      CHECK_LIBRARY_EXISTS(asound snd_pcm_open "" HAVE_LIBASOUND)
gabomdq@6674
    78
      set(HAVE_ALSA TRUE)
gabomdq@6674
    79
      file(GLOB ALSA_SOURCES ${SDL2_SOURCE_DIR}/src/audio/alsa/*.c)
gabomdq@6674
    80
      set(SOURCE_FILES ${SOURCE_FILES} ${ALSA_SOURCES})
gabomdq@6674
    81
      set(SDL_AUDIO_DRIVER_ALSA 1)
gabomdq@6674
    82
      if(ALSA_SHARED)
gabomdq@6674
    83
        if(NOT HAVE_DLOPEN)
gabomdq@6674
    84
          message_warn("You must have SDL_LoadObject() support for dynamic ALSA loading")
gabomdq@6674
    85
        else()
gabomdq@6674
    86
          find_library(_ALSA_LIB asound)
gabomdq@6674
    87
          get_filename_component(F_ALSA_LIB ${_ALSA_LIB} NAME)
gabomdq@6674
    88
          set(SDL_AUDIO_DRIVER_ALSA_DYNAMIC "\"${F_ALSA_LIB}\"")
gabomdq@6674
    89
          set(HAVE_ALSA_SHARED TRUE)
gabomdq@6674
    90
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
    91
      else(ALSA_SHARED)
gabomdq@6674
    92
        list(APPEND EXTRA_LIBS asound)
gabomdq@6674
    93
      endif(ALSA_SHARED)
gabomdq@6674
    94
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
    95
    endif(HAVE_ASOUNDLIB_H)
gabomdq@6674
    96
  endif(ALSA)
gabomdq@6674
    97
endmacro(CheckALSA)
gabomdq@6674
    98
gabomdq@6674
    99
# Requires:
gabomdq@6674
   100
# - PkgCheckModules
gabomdq@6674
   101
# Optional:
gabomdq@6674
   102
# - PULSEAUDIO_SHARED opt
gabomdq@6674
   103
# - HAVE_DLOPEN opt
gabomdq@6674
   104
macro(CheckPulseAudio)
gabomdq@6674
   105
  if(PULSEAUDIO)
gabomdq@6674
   106
    pkg_check_modules(PKG_PULSEAUDIO libpulse-simple)
gabomdq@6674
   107
    if(PKG_PULSEAUDIO_FOUND)
gabomdq@6674
   108
      set(HAVE_PULSEAUDIO TRUE)
gabomdq@6674
   109
      file(GLOB PULSEAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/pulseaudio/*.c)
gabomdq@6674
   110
      set(SOURCE_FILES ${SOURCE_FILES} ${PULSEAUDIO_SOURCES})
gabomdq@6674
   111
      set(SDL_AUDIO_DRIVER_PULSEAUDIO 1)
gabomdq@6674
   112
      list(APPEND EXTRA_CFLAGS ${PKG_PULSEAUDIO_CFLAGS})
gabomdq@6674
   113
      if(PULSEAUDIO_SHARED)
gabomdq@6674
   114
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   115
          message_warn("You must have SDL_LoadObject() support for dynamic PulseAudio loading")
gabomdq@6674
   116
        else()
gabomdq@6674
   117
          find_library(D_PULSE_LIB pulse-simple)
gabomdq@6674
   118
          get_filename_component(F_PULSE_LIB ${D_PULSE_LIB} NAME)
gabomdq@6674
   119
          set(SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "\"${F_PULSE_LIB}\"")
gabomdq@6674
   120
          set(HAVE_PULSEAUDIO_SHARED TRUE)
gabomdq@6674
   121
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   122
      else(PULSEAUDIO_SHARED)
gabomdq@6674
   123
        list(APPEND EXTRA_LDFLAGS ${PKG_PULSEAUDIO_LDFLAGS})
gabomdq@6674
   124
      endif(PULSEAUDIO_SHARED)
gabomdq@6674
   125
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   126
    endif(PKG_PULSEAUDIO_FOUND)
gabomdq@6674
   127
  endif(PULSEAUDIO)
gabomdq@6674
   128
endmacro(CheckPulseAudio)
gabomdq@6674
   129
gabomdq@6674
   130
# Requires:
gabomdq@6674
   131
# - PkgCheckModules
gabomdq@6674
   132
# Optional:
gabomdq@6674
   133
# - ESD_SHARED opt
gabomdq@6674
   134
# - HAVE_DLOPEN opt
gabomdq@6674
   135
macro(CheckESD)
gabomdq@6674
   136
  if(ESD)
gabomdq@6674
   137
    pkg_check_modules(PKG_ESD esound)
gabomdq@6674
   138
    if(PKG_ESD_FOUND)
gabomdq@6674
   139
      set(HAVE_ESD TRUE)
gabomdq@6674
   140
      file(GLOB ESD_SOURCES ${SDL2_SOURCE_DIR}/src/audio/esd/*.c)
gabomdq@6674
   141
      set(SOURCE_FILES ${SOURCE_FILES} ${ESD_SOURCES})
gabomdq@6674
   142
      set(SDL_AUDIO_DRIVER_ESD 1)
gabomdq@6674
   143
      list(APPEND EXTRA_CFLAGS ${PKG_ESD_CFLAGS})
gabomdq@6674
   144
      if(ESD_SHARED)
gabomdq@6674
   145
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   146
          message_warn("You must have SDL_LoadObject() support for dynamic ESD loading")
gabomdq@6674
   147
        else()
gabomdq@6674
   148
          find_library(D_ESD_LIB esd)
gabomdq@6674
   149
          get_filename_component(F_ESD_LIB ${D_ESD_LIB} NAME)
gabomdq@6674
   150
          set(SDL_AUDIO_DRIVER_ESD_DYNAMIC "\"${F_ESD_LIB}\"")
gabomdq@6674
   151
          set(HAVE_ESD_SHARED TRUE)
gabomdq@6674
   152
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   153
      else(ESD_SHARED)
gabomdq@6674
   154
        list(APPEND EXTRA_LDFLAGS ${PKG_ESD_LDFLAGS})
gabomdq@6674
   155
      endif(ESD_SHARED)
gabomdq@6674
   156
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   157
    endif(PKG_ESD_FOUND)
gabomdq@6674
   158
  endif(ESD)
gabomdq@6674
   159
endmacro(CheckESD)
gabomdq@6674
   160
gabomdq@6674
   161
# Requires:
gabomdq@6674
   162
# - n/a
gabomdq@6674
   163
# Optional:
gabomdq@6674
   164
# - ARTS_SHARED opt
gabomdq@6674
   165
# - HAVE_DLOPEN opt
gabomdq@6674
   166
macro(CheckARTS)
gabomdq@6674
   167
  if(ARTS)
gabomdq@6674
   168
    find_program(ARTS_CONFIG arts-config)
gabomdq@6674
   169
    if(ARTS_CONFIG)
gabomdq@6674
   170
      execute_process(CMD_ARTSCFLAGS ${ARTS_CONFIG} --cflags
gabomdq@6674
   171
        OUTPUT_VARIABLE ARTS_CFLAGS OUTPUT_STRIP_TRAILING_WHITESPACE)
gabomdq@6674
   172
      list(APPEND EXTRA_CFLAGS ${ARTS_CFLAGS})
gabomdq@6674
   173
      execute_process(CMD_ARTSLIBS ${ARTS_CONFIG} --libs
gabomdq@6674
   174
        OUTPUT_VARIABLE ARTS_LIBS OUTPUT_STRIP_TRAILING_WHITESPACE)
gabomdq@6674
   175
      file(GLOB ARTS_SOURCES ${SDL2_SOURCE_DIR}/src/audio/arts/*.c)
gabomdq@6674
   176
      set(SOURCE_FILES ${SOURCE_FILES} ${ARTS_SOURCES})
gabomdq@6674
   177
      set(SDL_AUDIO_DRIVER_ARTS 1)
gabomdq@6674
   178
      set(HAVE_ARTS TRUE)
gabomdq@6674
   179
      if(ARTS_SHARED)
gabomdq@6674
   180
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   181
          message_warn("You must have SDL_LoadObject() support for dynamic ARTS loading")
gabomdq@6674
   182
        else()
gabomdq@6674
   183
          # TODO
gabomdq@6674
   184
          find_library(D_ARTS_LIB artsc)
gabomdq@6674
   185
          get_filename_component(F_ARTS_LIB ${D_ARTS_LIB} NAME)
gabomdq@6674
   186
          set(SDL_AUDIO_DRIVER_ARTS_DYNAMIC "\"${F_ARTS_LIB}\"")
gabomdq@6674
   187
          set(HAVE_ARTS_SHARED TRUE)
gabomdq@6674
   188
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   189
      else(ARTS_SHARED)
gabomdq@6674
   190
        list(APPEND EXTRA_LDFLAGS ${ARTS_LIBS})
gabomdq@6674
   191
      endif(ARTS_SHARED)
gabomdq@6674
   192
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   193
    endif(ARTS_CONFIG)
gabomdq@6674
   194
  endif(ARTS)
gabomdq@6674
   195
endmacro(CheckARTS)
gabomdq@6674
   196
gabomdq@6674
   197
# Requires:
gabomdq@6674
   198
# - n/a
gabomdq@6674
   199
# Optional:
gabomdq@6674
   200
# - NAS_SHARED opt
gabomdq@6674
   201
# - HAVE_DLOPEN opt
gabomdq@6674
   202
macro(CheckNAS)
gabomdq@6674
   203
  if(NAS)
gabomdq@6674
   204
    # TODO: set include paths properly, so the NAS headers are found
gabomdq@6674
   205
    check_include_file(audio/audiolib.h HAVE_NAS_H)
gabomdq@6674
   206
    find_library(D_NAS_LIB audio)
gabomdq@6674
   207
    if(HAVE_NAS_H AND D_NAS_LIB)
gabomdq@6674
   208
      set(HAVE_NAS TRUE)
gabomdq@6674
   209
      file(GLOB NAS_SOURCES ${SDL2_SOURCE_DIR}/src/audio/nas/*.c)
gabomdq@6674
   210
      set(SOURCE_FILES ${SOURCE_FILES} ${NAS_SOURCES})
gabomdq@6674
   211
      set(SDL_AUDIO_DRIVER_NAS 1)
gabomdq@6674
   212
      if(NAS_SHARED)
gabomdq@6674
   213
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   214
          message_warn("You must have SDL_LoadObject() support for dynamic NAS loading")
gabomdq@6674
   215
        else()
gabomdq@6674
   216
          get_filename_component(F_NAS_LIB ${D_NAS_LIB} NAME)
gabomdq@6674
   217
          set(SDL_AUDIO_DRIVER_NAS_DYNAMIC "\"${F_NAS_LIB}\"")
gabomdq@6674
   218
          set(HAVE_NAS_SHARED TRUE)
gabomdq@6674
   219
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   220
      else(NAS_SHARED)
gabomdq@6674
   221
        list(APPEND EXTRA_LIBS ${D_NAS_LIB})
gabomdq@6674
   222
      endif(NAS_SHARED)
gabomdq@6674
   223
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   224
    endif(HAVE_NAS_H AND D_NAS_LIB)
gabomdq@6674
   225
  endif(NAS)
gabomdq@6674
   226
endmacro(CheckNAS)
gabomdq@6674
   227
gabomdq@6674
   228
# Requires:
icculus@7367
   229
# - n/a
icculus@7367
   230
# Optional:
icculus@7367
   231
# - SNDIO_SHARED opt
icculus@7367
   232
# - HAVE_DLOPEN opt
icculus@7367
   233
macro(CheckSNDIO)
icculus@7367
   234
  if(SNDIO)
icculus@7367
   235
    # TODO: set include paths properly, so the sndio headers are found
icculus@7367
   236
    check_include_file(sndio.h HAVE_SNDIO_H)
icculus@7367
   237
    find_library(D_SNDIO_LIB audio)
icculus@7367
   238
    if(HAVE_SNDIO_H AND D_SNDIO_LIB)
icculus@7367
   239
      set(HAVE_SNDIO TRUE)
icculus@7367
   240
      file(GLOB SNDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sndio/*.c)
icculus@7367
   241
      set(SOURCE_FILES ${SOURCE_FILES} ${SNDIO_SOURCES})
icculus@7367
   242
      set(SDL_AUDIO_DRIVER_SNDIO 1)
icculus@7367
   243
      if(SNDIO_SHARED)
icculus@7367
   244
        if(NOT HAVE_DLOPEN)
icculus@7367
   245
          message_warn("You must have SDL_LoadObject() support for dynamic sndio loading")
icculus@7367
   246
        else()
icculus@7367
   247
          get_filename_component(F_SNDIO_LIB ${D_SNDIO_LIB} NAME)
icculus@7367
   248
          set(SDL_AUDIO_DRIVER_SNDIO_DYNAMIC "\"${F_SNDIO_LIB}\"")
icculus@7367
   249
          set(HAVE_SNDIO_SHARED TRUE)
icculus@7367
   250
        endif(NOT HAVE_DLOPEN)
icculus@7367
   251
      else(SNDIO_SHARED)
icculus@7367
   252
        list(APPEND EXTRA_LIBS ${D_SNDIO_LIB})
icculus@7367
   253
      endif(SNDIO_SHARED)
icculus@7367
   254
      set(HAVE_SDL_AUDIO TRUE)
icculus@7367
   255
    endif(HAVE_SNDIO_H AND D_SNDIO_LIB)
icculus@7367
   256
  endif(SNDIO)
icculus@7367
   257
endmacro(CheckSNDIO)
icculus@7367
   258
icculus@7367
   259
# Requires:
gabomdq@6674
   260
# - PkgCheckModules
gabomdq@6674
   261
# Optional:
gabomdq@6674
   262
# - FUSIONSOUND_SHARED opt
gabomdq@6674
   263
# - HAVE_DLOPEN opt
gabomdq@6674
   264
macro(CheckFusionSound)
gabomdq@6674
   265
  if(FUSIONSOUND)
gabomdq@6674
   266
    pkg_check_modules(PKG_FUSIONSOUND fusionsound>=1.0.0)
gabomdq@6674
   267
    if(PKG_FUSIONSOUND_FOUND)
gabomdq@6674
   268
      set(HAVE_FUSIONSOUND TRUE)
gabomdq@6674
   269
      file(GLOB FUSIONSOUND_SOURCES ${SDL2_SOURCE_DIR}/src/audio/fusionsound/*.c)
gabomdq@6674
   270
      set(SOURCE_FILES ${SOURCE_FILES} ${FUSIONSOUND_SOURCES})
gabomdq@6674
   271
      set(SDL_AUDIO_DRIVER_FUSIONSOUND 1)
gabomdq@6674
   272
      list(APPEND EXTRA_CFLAGS ${PKG_FUSIONSOUND_CFLAGS})
gabomdq@6674
   273
      if(FUSIONSOUND_SHARED)
gabomdq@6674
   274
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   275
          message_warn("You must have SDL_LoadObject() support for dynamic FusionSound loading")
gabomdq@6674
   276
        else()
gabomdq@6674
   277
          find_library(D_FUSIONSOUND_LIB fusionsound)
gabomdq@6674
   278
          get_filename_component(F_FUSIONSOUND_LIB ${D_FUSIONSOUND_LIB} NAME)
gabomdq@6674
   279
          set(SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC "\"${F_FUSIONSOUND_LIB}\"")
gabomdq@6674
   280
          set(HAVE_FUSIONSOUND_SHARED TRUE)
gabomdq@6674
   281
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   282
      else(FUSIONSOUND_SHARED)
gabomdq@6674
   283
        list(APPEND EXTRA_LDFLAGS ${PKG_FUSIONSOUND_LDFLAGS})
gabomdq@6674
   284
      endif(FUSIONSOUND_SHARED)
gabomdq@6674
   285
      set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   286
    endif(PKG_FUSIONSOUND_FOUND)
gabomdq@6674
   287
  endif(FUSIONSOUND)
gabomdq@6674
   288
endmacro(CheckFusionSound)
gabomdq@6674
   289
gabomdq@6674
   290
# Requires:
gabomdq@6674
   291
# - n/a
gabomdq@6674
   292
# Optional:
gabomdq@6674
   293
# - X11_SHARED opt
gabomdq@6674
   294
# - HAVE_DLOPEN opt
gabomdq@6674
   295
macro(CheckX11)
gabomdq@6674
   296
  if(VIDEO_X11)
gabomdq@6674
   297
    foreach(_LIB X11 Xext Xcursor Xinerama Xi Xrandr Xrender Xss Xxf86vm)
gabomdq@6674
   298
      string(TOUPPER ${_LIB} _LNAME)
gabomdq@6674
   299
      find_library(${_LNAME}_LIB ${_LIB})
gabomdq@6674
   300
      if(${_LNAME}_LIB)
gabomdq@6674
   301
        # reduce the library name for shared linking
gabomdq@6674
   302
        get_filename_component(_TMP ${${_LNAME}_LIB} NAME)
gabomdq@6674
   303
        set(${_LNAME}_LIB ${_TMP})
gabomdq@6674
   304
      endif()
gabomdq@6674
   305
    endforeach()
gabomdq@6674
   306
slouken@7835
   307
    find_path(X_INCLUDEDIR X11/Xlib.h)
slouken@7835
   308
    if(X_INCLUDEDIR)
slouken@7835
   309
      set(X_CFLAGS "-I${X_INCLUDEDIR}")
slouken@7835
   310
    endif()
slouken@7835
   311
gabomdq@6674
   312
    check_include_file(X11/Xcursor/Xcursor.h HAVE_XCURSOR_H)
gabomdq@6674
   313
    check_include_file(X11/extensions/Xinerama.h HAVE_XINERAMA_H)
gabomdq@6674
   314
    check_include_file(X11/extensions/XInput2.h HAVE_XINPUT_H)
gabomdq@6674
   315
    check_include_file(X11/extensions/Xrandr.h HAVE_XRANDR_H)
gabomdq@6674
   316
    check_include_file(X11/extensions/Xrender.h HAVE_XRENDER_H)
gabomdq@6674
   317
    check_include_file(X11/extensions/scrnsaver.h HAVE_XSS_H)
gabomdq@6674
   318
    check_include_file(X11/extensions/shape.h HAVE_XSHAPE_H)
gabomdq@6674
   319
    check_include_files("X11/Xlib.h;X11/extensions/xf86vmode.h" HAVE_XF86VM_H)
icculus@7438
   320
    check_include_files("X11/Xlib.h;X11/Xproto.h;X11/extensions/Xext.h" HAVE_XEXT_H)
gabomdq@6674
   321
gabomdq@6674
   322
    if(X11_LIB)
icculus@7438
   323
      if(NOT HAVE_XEXT_H)
icculus@7438
   324
        message_error("Missing Xext.h, maybe you need to install the libxext-dev package?")
icculus@7438
   325
      endif()
icculus@7438
   326
gabomdq@6674
   327
      set(HAVE_VIDEO_X11 TRUE)
gabomdq@6674
   328
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   329
gabomdq@6674
   330
      file(GLOB X11_SOURCES ${SDL2_SOURCE_DIR}/src/video/x11/*.c)
gabomdq@6674
   331
      set(SOURCE_FILES ${SOURCE_FILES} ${X11_SOURCES})
gabomdq@6674
   332
      set(SDL_VIDEO_DRIVER_X11 1)
gabomdq@6674
   333
gabomdq@6674
   334
      if(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   335
        set(X11_SYMBOLS_PRIVATE TRUE)
gabomdq@6674
   336
      else()
gabomdq@6674
   337
        set(X11_SYMBOLS_PRIVATE FALSE)
gabomdq@6674
   338
      endif(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   339
gabomdq@6674
   340
      if(APPLE)
gabomdq@6674
   341
        set(X11_SHARED OFF)
gabomdq@6674
   342
        set(X11_SYMBOLS_PRIVATE TRUE)
gabomdq@6674
   343
      endif(APPLE)
gabomdq@6674
   344
gabomdq@6674
   345
      check_function_exists("shmat" HAVE_SHMAT)
gabomdq@6674
   346
      if(NOT HAVE_SHMAT)
gabomdq@6674
   347
        check_library_exists(ipc shmat "" HAVE_SHMAT)
gabomdq@6674
   348
        if(HAVE_SHMAT)
gabomdq@6674
   349
          list(APPEND EXTRA_LIBS ipc)
gabomdq@6674
   350
        endif(HAVE_SHMAT)
gabomdq@6674
   351
        if(NOT HAVE_SHMAT)
gabomdq@6674
   352
          add_definitions(-DNO_SHARED_MEMORY)
slouken@7835
   353
          set(X_CFLAGS "${X_CFLAGS} -DNO_SHARED_MEMORY")
gabomdq@6674
   354
        endif(NOT HAVE_SHMAT)
gabomdq@6674
   355
      endif(NOT HAVE_SHMAT)
gabomdq@6674
   356
gabomdq@6674
   357
      if(X11_SHARED)
gabomdq@6674
   358
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   359
          message_warn("You must have SDL_LoadObject() support for dynamic X11 loading")
gabomdq@6674
   360
          set(HAVE_X11_SHARED FALSE)
gabomdq@6674
   361
          if(X11_SYMBOLS_PRIVATE)
gabomdq@6674
   362
            message_warn("You must have gcc4 (-fvisibility=hidden) for dynamic X11 loading")
gabomdq@6674
   363
            set(HAVE_X11_SHARED TRUE)
gabomdq@6674
   364
          endif(X11_SYMBOLS_PRIVATE)
gabomdq@6674
   365
        else(NOT HAVE_DLOPEN)
gabomdq@6674
   366
          set(HAVE_X11_SHARED TRUE)
gabomdq@6674
   367
        endif()
gabomdq@6674
   368
        if(HAVE_X11_SHARED)
gabomdq@6674
   369
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC "\"${X11_LIB}\"")
gabomdq@6674
   370
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "\"${XEXT_LIB}\"")
gabomdq@6674
   371
        else(HAVE_X11_SHARED)
gabomdq@6674
   372
          list(APPEND EXTRA_LIBS ${X11_LIB} ${XEXT_LIB})
gabomdq@6674
   373
        endif(HAVE_X11_SHARED)
gabomdq@6674
   374
      endif(X11_SHARED)
gabomdq@6674
   375
slouken@7835
   376
      set(SDL_CFLAGS "${SDL_CFLAGS} ${X_CFLAGS}")
slouken@7835
   377
gabomdq@6674
   378
      set(CMAKE_REQUIRED_LIBRARIES ${X11_LIB} ${X11_LIB})
gabomdq@6674
   379
      check_c_source_compiles("
gabomdq@6674
   380
          #include <X11/Xlib.h>
gabomdq@6674
   381
          #include <X11/Xproto.h>
gabomdq@6674
   382
          #include <X11/extensions/Xext.h>
gabomdq@6674
   383
          #include <X11/extensions/extutil.h>
gabomdq@6674
   384
          extern XExtDisplayInfo* XextAddDisplay(XExtensionInfo* a,Display* b,_Xconst char* c,XExtensionHooks* d,int e,XPointer f);
gabomdq@6674
   385
          int main(int argc, char **argv) {}" HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   386
      if(HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   387
        set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1)
gabomdq@6674
   388
      endif(HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   389
gabomdq@6674
   390
      check_c_source_compiles("
gabomdq@6674
   391
          #include <X11/Xlib.h>
gabomdq@6674
   392
          int main(int argc, char **argv) {
gabomdq@6674
   393
            Display *display;
gabomdq@6674
   394
            XEvent event;
gabomdq@6674
   395
            XGenericEventCookie *cookie = &event.xcookie;
gabomdq@6674
   396
            XNextEvent(display, &event);
gabomdq@6674
   397
            XGetEventData(display, cookie);
gabomdq@6674
   398
            XFreeEventData(display, cookie); }" HAVE_XGENERICEVENT)
gabomdq@6674
   399
      if(HAVE_XGENERICEVENT)
gabomdq@6674
   400
        set(SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1)
gabomdq@6674
   401
      endif(HAVE_XGENERICEVENT)
gabomdq@6674
   402
azamat@7266
   403
      check_c_source_compiles("
azamat@7266
   404
          #include <X11/Xlibint.h>
azamat@7266
   405
          extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len);
azamat@7266
   406
          int main(int argc, char **argv) {}" HAVE_CONST_XDATA32)
azamat@7266
   407
      if(HAVE_CONST_XDATA32)
azamat@7266
   408
        set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 1)
azamat@7266
   409
      endif(HAVE_CONST_XDATA32)
azamat@7266
   410
gabomdq@6674
   411
      check_function_exists(XkbKeycodeToKeysym SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM)
gabomdq@6674
   412
gabomdq@6674
   413
      if(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H)
gabomdq@6674
   414
        set(HAVE_VIDEO_X11_XCURSOR TRUE)
gabomdq@6674
   415
        if(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   416
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB}\"")
gabomdq@6674
   417
        else(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   418
          list(APPEND EXTRA_LIBS ${XCURSOR_LIB})
gabomdq@6674
   419
        endif(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   420
        set(SDL_VIDEO_DRIVER_X11_XCURSOR 1)
gabomdq@6674
   421
      endif(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H)
gabomdq@6674
   422
gabomdq@6674
   423
      if(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H)
gabomdq@6674
   424
        set(HAVE_VIDEO_X11_XINERAMA TRUE)
gabomdq@6674
   425
        if(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   426
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB}\"")
gabomdq@6674
   427
        else(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   428
          list(APPEND EXTRA_LIBS ${XINERAMA_LIB})
gabomdq@6674
   429
        endif(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   430
        set(SDL_VIDEO_DRIVER_X11_XINERAMA 1)
gabomdq@6674
   431
      endif(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H)
gabomdq@6674
   432
gabomdq@6674
   433
      if(VIDEO_X11_XINPUT AND HAVE_XINPUT_H)
gabomdq@6674
   434
        set(HAVE_VIDEO_X11_XINPUT TRUE)
gabomdq@6674
   435
        if(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   436
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB}\"")
gabomdq@6674
   437
        else(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   438
          list(APPEND EXTRA_LIBS ${XI_LIB})
gabomdq@6674
   439
        endif(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   440
        set(SDL_VIDEO_DRIVER_X11_XINPUT2 1)
gabomdq@6674
   441
gabomdq@6674
   442
        # Check for multitouch
gabomdq@6674
   443
        check_c_source_compiles("
gabomdq@6674
   444
            #include <X11/Xlib.h>
gabomdq@6674
   445
            #include <X11/Xproto.h>
gabomdq@6674
   446
            #include <X11/extensions/XInput2.h>
gabomdq@6674
   447
            int event_type = XI_TouchBegin;
gabomdq@6674
   448
            XITouchClassInfo *t;
gabomdq@6674
   449
            Status XIAllowTouchEvents(Display *a,int b,unsigned int c,Window d,int f)
gabomdq@6674
   450
            {
gabomdq@6674
   451
              return (Status)0;
gabomdq@6674
   452
            }
gabomdq@6674
   453
            int main(int argc, char **argv) {}" HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   454
        if(HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   455
          set(SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1)
gabomdq@6674
   456
        endif(HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   457
      endif(VIDEO_X11_XINPUT AND HAVE_XINPUT_H)
gabomdq@6674
   458
gabomdq@6674
   459
      if(VIDEO_X11_XRANDR AND HAVE_XRANDR_H)
gabomdq@6674
   460
        if(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   461
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB}\"")
gabomdq@6674
   462
        else(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   463
          list(APPEND EXTRA_LIBS ${XRANDR_LIB})
gabomdq@6674
   464
        endif(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   465
        set(SDL_VIDEO_DRIVER_X11_XRANDR 1)
gabomdq@6674
   466
        set(HAVE_VIDEO_X11_XRANDR TRUE)
gabomdq@6674
   467
      endif(VIDEO_X11_XRANDR AND HAVE_XRANDR_H)
gabomdq@6674
   468
gabomdq@6674
   469
      if(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H)
gabomdq@6674
   470
        if(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   471
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB}\"")
gabomdq@6674
   472
        else(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   473
          list(APPEND EXTRA_LIBS ${XSS_LIB})
gabomdq@6674
   474
        endif(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   475
        set(SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1)
gabomdq@6674
   476
        set(HAVE_VIDEO_X11_XSCRNSAVER TRUE)
gabomdq@6674
   477
      endif(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H)
gabomdq@6674
   478
gabomdq@6674
   479
      if(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H)
gabomdq@6674
   480
        set(SDL_VIDEO_DRIVER_X11_XSHAPE 1)
gabomdq@6674
   481
        set(HAVE_VIDEO_X11_XSHAPE TRUE)
gabomdq@6674
   482
      endif(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H)
gabomdq@6674
   483
gabomdq@6674
   484
      if(VIDEO_X11_XVM AND HAVE_XF86VM_H)
gabomdq@6674
   485
        if(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   486
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XF86VMODE_LIB}\"")
gabomdq@6674
   487
        else(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   488
          list(APPEND EXTRA_LIBS ${XF86VMODE_LIB})
gabomdq@6674
   489
        endif(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   490
        set(SDL_VIDEO_DRIVER_X11_XVIDMODE 1)
gabomdq@6674
   491
        set(HAVE_VIDEO_X11_XVM TRUE)
gabomdq@6674
   492
      endif(VIDEO_X11_XVM AND HAVE_XF86VM_H)
gabomdq@6674
   493
gabomdq@6674
   494
      set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
   495
    endif(X11_LIB)
gabomdq@6674
   496
  endif(VIDEO_X11)
gabomdq@6674
   497
endmacro(CheckX11)
gabomdq@6674
   498
gabomdq@6674
   499
# Requires:
gabomdq@6674
   500
# - n/a
gabomdq@6674
   501
#
gabomdq@6674
   502
macro(CheckCOCOA)
gabomdq@6674
   503
  if(VIDEO_COCOA)
slouken@7182
   504
    check_objc_source_compiles("
gabomdq@6674
   505
        #import <Cocoa/Cocoa.h>
gabomdq@6674
   506
        int main (int argc, char** argv) {}" HAVE_VIDEO_COCOA)
gabomdq@6674
   507
    if(HAVE_VIDEO_COCOA)
gabomdq@6674
   508
      file(GLOB COCOA_SOURCES ${SDL2_SOURCE_DIR}/src/video/cocoa/*.m)
slouken@7182
   509
      set_source_files_properties(${COCOA_SOURCES} PROPERTIES LANGUAGE C)
gabomdq@6674
   510
      set(SOURCE_FILES ${SOURCE_FILES} ${COCOA_SOURCES})
gabomdq@6674
   511
      set(SDL_VIDEO_DRIVER_COCOA 1)
gabomdq@6674
   512
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   513
    endif(HAVE_VIDEO_COCOA)
gabomdq@6674
   514
  endif(VIDEO_COCOA)
gabomdq@6674
   515
endmacro(CheckCOCOA)
gabomdq@6674
   516
gabomdq@6674
   517
# Requires:
gabomdq@6674
   518
# - PkgCheckModules
gabomdq@6674
   519
# Optional:
gabomdq@6674
   520
# - DIRECTFB_SHARED opt
gabomdq@6674
   521
# - HAVE_DLOPEN opt
gabomdq@6674
   522
macro(CheckDirectFB)
gabomdq@6674
   523
  if(VIDEO_DIRECTFB)
gabomdq@6674
   524
    pkg_check_modules(PKG_DIRECTFB directfb>=1.0.0)
gabomdq@6674
   525
    if(PKG_DIRECTFB_FOUND)
gabomdq@6674
   526
      set(HAVE_VIDEO_DIRECTFB TRUE)
gabomdq@6674
   527
      file(GLOB DIRECTFB_SOURCES ${SDL2_SOURCE_DIR}/src/video/directfb/*.c)
gabomdq@6674
   528
      set(SOURCE_FILES ${SOURCE_FILES} ${DIRECTFB_SOURCES})
gabomdq@6674
   529
      set(SDL_VIDEO_DRIVER_DIRECTFB 1)
gabomdq@6674
   530
      set(SDL_VIDEO_RENDER_DIRECTFB 1)
gabomdq@6674
   531
      list(APPEND EXTRA_CFLAGS ${PKG_DIRECTFB_CFLAGS})
gabomdq@6674
   532
      if(DIRECTFB_SHARED)
gabomdq@6674
   533
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   534
          message_warn("You must have SDL_LoadObject() support for dynamic DirectFB loading")
gabomdq@6674
   535
        else()
gabomdq@6674
   536
          find_library(D_DIRECTFB_LIB directfb)
gabomdq@6674
   537
          get_filename_component(F_DIRECTFB_LIB ${D_DIRECTFB_LIB} NAME)
gabomdq@6674
   538
          set(SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC "\"${F_DIRECTFB_LIB}\"")
gabomdq@6674
   539
          set(HAVE_DIRECTFB_SHARED TRUE)
gabomdq@6674
   540
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   541
      else(DIRECTFB_SHARED)
gabomdq@6674
   542
        list(APPEND EXTRA_LDFLAGS ${PKG_DIRECTFB_LDFLAGS})
gabomdq@6674
   543
      endif(DIRECTFB_SHARED)
gabomdq@6674
   544
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   545
    endif(PKG_DIRECTFB_FOUND)
gabomdq@6674
   546
  endif(VIDEO_DIRECTFB)
gabomdq@6674
   547
endmacro(CheckDirectFB)
gabomdq@6674
   548
gabomdq@6674
   549
# Requires:
gabomdq@6674
   550
# - nada
gabomdq@6674
   551
macro(CheckOpenGLX11)
gabomdq@6674
   552
  if(VIDEO_OPENGL)
gabomdq@6674
   553
    check_c_source_compiles("
gabomdq@6674
   554
        #include <GL/gl.h>
gabomdq@6674
   555
        #include <GL/glx.h>
gabomdq@6674
   556
        int main(int argc, char** argv) {}" HAVE_VIDEO_OPENGL)
gabomdq@6674
   557
gabomdq@6674
   558
    if(HAVE_VIDEO_OPENGL)
gabomdq@6674
   559
      set(HAVE_VIDEO_OPENGL TRUE)
gabomdq@6674
   560
      set(SDL_VIDEO_OPENGL 1)
gabomdq@6674
   561
      set(SDL_VIDEO_OPENGL_GLX 1)
gabomdq@6674
   562
      set(SDL_VIDEO_RENDER_OGL 1)
gabomdq@6674
   563
      list(APPEND EXTRA_LIBS GL)
gabomdq@6674
   564
    endif(HAVE_VIDEO_OPENGL)
gabomdq@6674
   565
  endif(VIDEO_OPENGL)
gabomdq@6674
   566
endmacro(CheckOpenGLX11)
gabomdq@6674
   567
gabomdq@6674
   568
# Requires:
gabomdq@6674
   569
# - nada
gabomdq@6674
   570
macro(CheckOpenGLESX11)
gabomdq@6674
   571
  if(VIDEO_OPENGLES)
gabomdq@6674
   572
    check_c_source_compiles("
gabomdq@6674
   573
        #include <EGL/egl.h>
gabomdq@7690
   574
        int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGL_EGL)
gabomdq@7690
   575
    if(HAVE_VIDEO_OPENGL_EGL)
gabomdq@7690
   576
        set(SDL_VIDEO_OPENGL_EGL 1)
gabomdq@7690
   577
    endif(HAVE_VIDEO_OPENGL_EGL) 
gabomdq@7690
   578
    check_c_source_compiles("
gabomdq@7690
   579
      #include <GLES/gl.h>
gabomdq@7690
   580
      #include <GLES/glext.h>
gabomdq@7690
   581
      int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGLES_V1)
gabomdq@7690
   582
    if(HAVE_VIDEO_OPENGLES_V1)
gabomdq@7690
   583
        set(HAVE_VIDEO_OPENGLES TRUE)
gabomdq@6674
   584
        set(SDL_VIDEO_OPENGL_ES 1)
gabomdq@6674
   585
        set(SDL_VIDEO_RENDER_OGL_ES 1)
gabomdq@7690
   586
    endif(HAVE_VIDEO_OPENGLES_V1)
gabomdq@7690
   587
    check_c_source_compiles("
gabomdq@7690
   588
      #include <GLES2/gl2.h>
gabomdq@7690
   589
      #include <GLES2/gl2ext.h>
gabomdq@7690
   590
      int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGLES_V2)
gabomdq@7690
   591
    if(HAVE_VIDEO_OPENGLES_V2)
gabomdq@7690
   592
        set(HAVE_VIDEO_OPENGLES TRUE)
gabomdq@6674
   593
        set(SDL_VIDEO_OPENGL_ES2 1)
gabomdq@6674
   594
        set(SDL_VIDEO_RENDER_OGL_ES2 1)
gabomdq@7690
   595
    endif(HAVE_VIDEO_OPENGLES_V2)
gabomdq@7690
   596
gabomdq@6674
   597
  endif(VIDEO_OPENGLES)
gabomdq@6674
   598
endmacro(CheckOpenGLESX11)
gabomdq@6674
   599
gabomdq@6674
   600
# Rquires:
gabomdq@6674
   601
# - nada
gabomdq@6674
   602
# Optional:
gabomdq@6674
   603
# - THREADS opt
gabomdq@6674
   604
# Sets:
gabomdq@6674
   605
# PTHREAD_CFLAGS
gabomdq@6674
   606
# PTHREAD_LIBS
gabomdq@6674
   607
macro(CheckPTHREAD)
gabomdq@6674
   608
  if(PTHREADS)
gabomdq@6674
   609
    if(LINUX)
gabomdq@6674
   610
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@7078
   611
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   612
    elseif(BSDI)
gabomdq@6674
   613
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   614
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   615
    elseif(DARWIN)
gabomdq@6674
   616
      set(PTHREAD_CFLAGS "-D_THREAD_SAFE")
gabomdq@6674
   617
      # causes Carbon.p complaints?
gabomdq@6674
   618
      # set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   619
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   620
    elseif(FREEBSD)
gabomdq@6674
   621
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   622
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   623
    elseif(NETBSD)
gabomdq@6674
   624
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   625
      set(PTHREAD_LDFLAGS "-lpthread")
gabomdq@6674
   626
    elseif(OPENBSD)
gabomdq@6674
   627
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   628
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   629
    elseif(SOLARIS)
gabomdq@6674
   630
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   631
      set(PTHREAD_LDFLAGS "-pthread -lposix4")
gabomdq@6674
   632
    elseif(SYSV5)
gabomdq@6674
   633
      set(PTHREAD_CFLAGS "-D_REENTRANT -Kthread")
gabomdq@6674
   634
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   635
    elseif(AIX)
gabomdq@6674
   636
      set(PTHREAD_CFLAGS "-D_REENTRANT -mthreads")
gabomdq@6674
   637
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   638
    elseif(HPUX)
gabomdq@6674
   639
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   640
      set(PTHREAD_LDFLAGS "-L/usr/lib -pthread")
icculus@7977
   641
    elseif(BEOS)
icculus@7977
   642
      set(PTHREAD_CFLAGS "-D_REENTRANT")
icculus@7977
   643
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   644
    else()
gabomdq@6674
   645
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   646
      set(PTHREAD_LDFLAGS "-lpthread")
gabomdq@6674
   647
    endif(LINUX)
gabomdq@6674
   648
gabomdq@6674
   649
    # Run some tests
gabomdq@6674
   650
    set(CMAKE_REQUIRED_FLAGS "${PTHREAD_CFLAGS} ${PTHREAD_LDFLAGS}")
gabomdq@6674
   651
    check_c_source_runs("
gabomdq@6674
   652
        #include <pthread.h>
gabomdq@6674
   653
        int main(int argc, char** argv) {
gabomdq@6674
   654
          pthread_attr_t type;
gabomdq@6674
   655
          pthread_attr_init(&type);
gabomdq@6674
   656
          return 0;
gabomdq@6674
   657
        }" HAVE_PTHREADS)
gabomdq@6674
   658
    if(HAVE_PTHREADS)
gabomdq@6674
   659
      set(SDL_THREAD_PTHREAD 1)
gabomdq@6674
   660
      list(APPEND EXTRA_CFLAGS ${PTHREAD_CFLAGS})
gabomdq@6674
   661
      list(APPEND EXTRA_LDFLAGS ${PTHREAD_LDFLAGS})
gabomdq@6674
   662
      set(SDL_CFLAGS "${SDL_CFLAGS} ${PTHREAD_CFLAGS}")
gabomdq@6674
   663
      list(APPEND SDL_LIBS ${PTHREAD_LDFLAGS})
gabomdq@6674
   664
gabomdq@6674
   665
      check_c_source_compiles("
gabomdq@6674
   666
        #include <pthread.h>
gabomdq@6674
   667
        int main(int argc, char **argv) {
gabomdq@6674
   668
          pthread_mutexattr_t attr;
gabomdq@6674
   669
          pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
gabomdq@7078
   670
          return 0;
gabomdq@6674
   671
        }" HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   672
      if(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   673
        set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1)
gabomdq@6674
   674
      else(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   675
        check_c_source_compiles("
gabomdq@6674
   676
            #include <pthread.h>
gabomdq@6674
   677
            int main(int argc, char **argv) {
gabomdq@6674
   678
              pthread_mutexattr_t attr;
gabomdq@6674
   679
              pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
gabomdq@7078
   680
              return 0;
gabomdq@6674
   681
            }" HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   682
        if(HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   683
          set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1)
gabomdq@6674
   684
        endif(HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   685
      endif(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   686
gabomdq@6674
   687
      if(PTHREADS_SEM)
gabomdq@6674
   688
        check_c_source_compiles("#include <pthread.h>
gabomdq@7078
   689
                                 #include <semaphore.h>
gabomdq@7078
   690
                                 int main(int argc, char **argv) { return 0; }" HAVE_PTHREADS_SEM)
gabomdq@6674
   691
        if(HAVE_PTHREADS_SEM)
gabomdq@6674
   692
          check_c_source_compiles("
gabomdq@6674
   693
              #include <pthread.h>
gabomdq@6674
   694
              #include <semaphore.h>
gabomdq@6674
   695
              int main(int argc, char **argv) {
gabomdq@6674
   696
                  sem_timedwait(NULL, NULL);
gabomdq@6674
   697
                  return 0;
gabomdq@6674
   698
              }" HAVE_SEM_TIMEDWAIT)
gabomdq@6674
   699
        endif(HAVE_PTHREADS_SEM)
gabomdq@6674
   700
      endif(PTHREADS_SEM)
gabomdq@6674
   701
gabomdq@6674
   702
      check_c_source_compiles("
gabomdq@6674
   703
          #include <pthread.h>
gabomdq@6674
   704
          int main(int argc, char** argv) {
gabomdq@6674
   705
              pthread_spin_trylock(NULL);
gabomdq@6674
   706
              return 0;
gabomdq@6674
   707
          }" HAVE_PTHREAD_SPINLOCK)
gabomdq@6674
   708
gabomdq@6674
   709
      check_c_source_compiles("
gabomdq@6674
   710
          #include <pthread.h>
gabomdq@6674
   711
          #include <pthread_np.h>
gabomdq@6674
   712
          int main(int argc, char** argv) { return 0; }" HAVE_PTHREAD_NP_H)
gabomdq@6674
   713
      check_function_exists(pthread_setname_np HAVE_PTHREAD_setNAME_NP)
gabomdq@6674
   714
      check_function_exists(pthread_set_name_np HAVE_PTHREAD_set_NAME_NP)
gabomdq@6674
   715
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   716
gabomdq@6674
   717
      set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   718
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_systhread.c
gabomdq@6674
   719
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_sysmutex.c   # Can be faked, if necessary
gabomdq@6674
   720
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_syscond.c    # Can be faked, if necessary
icculus@7400
   721
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_systls.c
gabomdq@6674
   722
          )
gabomdq@6674
   723
      if(HAVE_PTHREADS_SEM)
gabomdq@6674
   724
        set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   725
            ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_syssem.c)
gabomdq@6674
   726
      else(HAVE_PTHREADS_SEM)
gabomdq@6674
   727
        set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   728
            ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syssem.c)
gabomdq@6674
   729
      endif(HAVE_PTHREADS_SEM)
gabomdq@6674
   730
      set(HAVE_SDL_THREADS TRUE)
gabomdq@6674
   731
    endif(HAVE_PTHREADS)
gabomdq@6674
   732
  endif(PTHREADS)
gabomdq@6674
   733
endmacro(CheckPTHREAD)
gabomdq@6674
   734
gabomdq@6674
   735
# Requires
gabomdq@6674
   736
# - nada
gabomdq@6674
   737
# Optional:
gabomdq@6674
   738
# Sets:
gabomdq@6674
   739
# USB_LIBS
gabomdq@6674
   740
# USB_CFLAGS
gabomdq@6674
   741
macro(CheckUSBHID)
gabomdq@6674
   742
  check_library_exists(usbhid hid_init "" LIBUSBHID)
gabomdq@6674
   743
  if(LIBUSBHID)
gabomdq@6674
   744
    check_include_file(usbhid.h HAVE_USBHID_H)
gabomdq@6674
   745
    if(HAVE_USBHID_H)
gabomdq@6674
   746
      set(USB_CFLAGS "-DHAVE_USBHID_H")
gabomdq@6674
   747
    endif(HAVE_USBHID_H)
gabomdq@6674
   748
gabomdq@6674
   749
    check_include_file(libusbhid.h HAVE_LIBUSBHID_H)
gabomdq@6674
   750
    if(HAVE_LIBUSBHID_H)
gabomdq@6674
   751
      set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSBHID_H")
gabomdq@6674
   752
    endif(HAVE_LIBUSBHID_H)
gabomdq@6674
   753
    set(USB_LIBS ${USB_LIBS} usbhid)
gabomdq@6674
   754
  else(LIBUSBHID)
gabomdq@6674
   755
    check_include_file(usb.h HAVE_USB_H)
gabomdq@6674
   756
    if(HAVE_USB_H)
gabomdq@6674
   757
      set(USB_CFLAGS "-DHAVE_USB_H")
gabomdq@6674
   758
    endif(HAVE_USB_H)
gabomdq@6674
   759
    check_include_file(libusb.h HAVE_LIBUSB_H)
gabomdq@6674
   760
    if(HAVE_LIBUSB_H)
gabomdq@6674
   761
      set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSB_H")
gabomdq@6674
   762
    endif(HAVE_LIBUSB_H)
gabomdq@6674
   763
    check_library_exists(usb hid_init "" LIBUSB)
gabomdq@6674
   764
    if(LIBUSB)
gabomdq@6674
   765
      set(USB_LIBS ${USB_LIBS} usb)
gabomdq@6674
   766
    endif(LIBUSB)
gabomdq@6674
   767
  endif(LIBUSBHID)
gabomdq@6674
   768
gabomdq@6674
   769
  set(CMAKE_REQUIRED_FLAGS "${USB_CFLAGS}")
gabomdq@6674
   770
  set(CMAKE_REQUIRED_LIBRARIES "${USB_LIBS}")
gabomdq@6674
   771
  check_c_source_compiles("
gabomdq@6674
   772
       #include <sys/types.h>
gabomdq@6674
   773
        #if defined(HAVE_USB_H)
gabomdq@6674
   774
        #include <usb.h>
gabomdq@6674
   775
        #endif
gabomdq@6674
   776
        #ifdef __DragonFly__
gabomdq@6674
   777
        # include <bus/usb/usb.h>
gabomdq@6674
   778
        # include <bus/usb/usbhid.h>
gabomdq@6674
   779
        #else
gabomdq@6674
   780
        # include <dev/usb/usb.h>
gabomdq@6674
   781
        # include <dev/usb/usbhid.h>
gabomdq@6674
   782
        #endif
gabomdq@6674
   783
        #if defined(HAVE_USBHID_H)
gabomdq@6674
   784
        #include <usbhid.h>
gabomdq@6674
   785
        #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   786
        #include <libusb.h>
gabomdq@6674
   787
        #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   788
        #include <libusbhid.h>
gabomdq@6674
   789
        #endif
gabomdq@6674
   790
        int main(int argc, char **argv) {
gabomdq@6674
   791
          struct report_desc *repdesc;
gabomdq@6674
   792
          struct usb_ctl_report *repbuf;
gabomdq@6674
   793
          hid_kind_t hidkind;
gabomdq@6674
   794
          return 0;
gabomdq@6674
   795
        }" HAVE_USBHID)
gabomdq@6674
   796
  if(HAVE_USBHID)
gabomdq@6674
   797
    check_c_source_compiles("
gabomdq@6674
   798
          #include <sys/types.h>
gabomdq@6674
   799
          #if defined(HAVE_USB_H)
gabomdq@6674
   800
          #include <usb.h>
gabomdq@6674
   801
          #endif
gabomdq@6674
   802
          #ifdef __DragonFly__
gabomdq@6674
   803
          # include <bus/usb/usb.h>
gabomdq@6674
   804
          # include <bus/usb/usbhid.h>
gabomdq@6674
   805
          #else
gabomdq@6674
   806
          # include <dev/usb/usb.h>
gabomdq@6674
   807
          # include <dev/usb/usbhid.h>
gabomdq@6674
   808
          #endif
gabomdq@6674
   809
          #if defined(HAVE_USBHID_H)
gabomdq@6674
   810
          #include <usbhid.h>
gabomdq@6674
   811
          #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   812
          #include <libusb.h>
gabomdq@6674
   813
          #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   814
          #include <libusbhid.h>
gabomdq@6674
   815
          #endif
gabomdq@6674
   816
          int main(int argc, char** argv) {
gabomdq@6674
   817
            struct usb_ctl_report buf;
gabomdq@6674
   818
            if (buf.ucr_data) { }
gabomdq@6674
   819
            return 0;
gabomdq@6674
   820
          }" HAVE_USBHID_UCR_DATA)
gabomdq@6674
   821
    if(HAVE_USBHID_UCR_DATA)
gabomdq@6674
   822
      set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_UCR_DATA")
gabomdq@6674
   823
    endif(HAVE_USBHID_UCR_DATA)
gabomdq@6674
   824
gabomdq@6674
   825
    check_c_source_compiles("
gabomdq@6674
   826
          #include <sys/types.h>
gabomdq@6674
   827
          #if defined(HAVE_USB_H)
gabomdq@6674
   828
          #include <usb.h>
gabomdq@6674
   829
          #endif
gabomdq@6674
   830
          #ifdef __DragonFly__
gabomdq@6674
   831
          #include <bus/usb/usb.h>
gabomdq@6674
   832
          #include <bus/usb/usbhid.h>
gabomdq@6674
   833
          #else
gabomdq@6674
   834
          #include <dev/usb/usb.h>
gabomdq@6674
   835
          #include <dev/usb/usbhid.h>
gabomdq@6674
   836
          #endif
gabomdq@6674
   837
          #if defined(HAVE_USBHID_H)
gabomdq@6674
   838
          #include <usbhid.h>
gabomdq@6674
   839
          #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   840
          #include <libusb.h>
gabomdq@6674
   841
          #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   842
          #include <libusbhid.h>
gabomdq@6674
   843
          #endif
gabomdq@6674
   844
          int main(int argc, char **argv) {
gabomdq@6674
   845
            report_desc_t d;
gabomdq@6674
   846
            hid_start_parse(d, 1, 1);
gabomdq@6674
   847
            return 0;
gabomdq@6674
   848
          }" HAVE_USBHID_NEW)
gabomdq@6674
   849
    if(HAVE_USBHID_NEW)
gabomdq@6674
   850
      set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_NEW")
gabomdq@6674
   851
    endif(HAVE_USBHID_NEW)
gabomdq@6674
   852
gabomdq@6674
   853
    check_c_source_compiles("
gabomdq@6674
   854
        #include <machine/joystick.h>
gabomdq@6674
   855
        int main(int argc, char** argv) {
gabomdq@6674
   856
            struct joystick t;
gabomdq@6674
   857
            return 0;
gabomdq@6674
   858
        }" HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   859
    if(HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   860
      set(SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H 1)
gabomdq@6674
   861
    endif(HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   862
    set(SDL_JOYSTICK_USBHID 1)
gabomdq@6674
   863
    file(GLOB BSD_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/bsd/*.c)
gabomdq@6674
   864
    set(SOURCE_FILES ${SOURCE_FILES} ${BSD_JOYSTICK_SOURCES})
gabomdq@6674
   865
    list(APPEND EXTRA_CFLAGS ${USB_CFLAGS})
gabomdq@6674
   866
    list(APPEND EXTRA_LIBS ${USB_LIBS})
gabomdq@6674
   867
    set(HAVE_SDL_JOYSTICK TRUE)
gabomdq@6674
   868
gabomdq@6674
   869
    set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
   870
    set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   871
  endif(HAVE_USBHID)
gabomdq@6674
   872
endmacro(CheckUSBHID)