cmake/sdlchecks.cmake
author Jørgen P. Tjernø
Fri, 26 Jul 2013 13:30:24 -0700
changeset 7521 03bca9a4180d
parent 7507 885b4aab4190
child 7690 76d7b6007a64
permissions -rw-r--r--
Fix cmake breakage (thanks Marcus)

My recent change broke the sdlcheck.cmake by not escaping some quotes properly.
Thanks to Marcus von Appen for pointing it out and providing the patch.
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
gabomdq@6674
   307
    check_include_file(X11/Xcursor/Xcursor.h HAVE_XCURSOR_H)
gabomdq@6674
   308
    check_include_file(X11/extensions/Xinerama.h HAVE_XINERAMA_H)
gabomdq@6674
   309
    check_include_file(X11/extensions/XInput2.h HAVE_XINPUT_H)
gabomdq@6674
   310
    check_include_file(X11/extensions/Xrandr.h HAVE_XRANDR_H)
gabomdq@6674
   311
    check_include_file(X11/extensions/Xrender.h HAVE_XRENDER_H)
gabomdq@6674
   312
    check_include_file(X11/extensions/scrnsaver.h HAVE_XSS_H)
gabomdq@6674
   313
    check_include_file(X11/extensions/shape.h HAVE_XSHAPE_H)
gabomdq@6674
   314
    check_include_files("X11/Xlib.h;X11/extensions/xf86vmode.h" HAVE_XF86VM_H)
icculus@7438
   315
    check_include_files("X11/Xlib.h;X11/Xproto.h;X11/extensions/Xext.h" HAVE_XEXT_H)
gabomdq@6674
   316
gabomdq@6674
   317
    if(X11_LIB)
icculus@7438
   318
      if(NOT HAVE_XEXT_H)
icculus@7438
   319
        message_error("Missing Xext.h, maybe you need to install the libxext-dev package?")
icculus@7438
   320
      endif()
icculus@7438
   321
gabomdq@6674
   322
      set(HAVE_VIDEO_X11 TRUE)
gabomdq@6674
   323
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   324
gabomdq@6674
   325
      file(GLOB X11_SOURCES ${SDL2_SOURCE_DIR}/src/video/x11/*.c)
gabomdq@6674
   326
      set(SOURCE_FILES ${SOURCE_FILES} ${X11_SOURCES})
gabomdq@6674
   327
      set(SDL_VIDEO_DRIVER_X11 1)
gabomdq@6674
   328
gabomdq@6674
   329
      if(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   330
        set(X11_SYMBOLS_PRIVATE TRUE)
gabomdq@6674
   331
      else()
gabomdq@6674
   332
        set(X11_SYMBOLS_PRIVATE FALSE)
gabomdq@6674
   333
      endif(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   334
gabomdq@6674
   335
      if(APPLE)
gabomdq@6674
   336
        set(X11_SHARED OFF)
gabomdq@6674
   337
        set(X11_SYMBOLS_PRIVATE TRUE)
gabomdq@6674
   338
      endif(APPLE)
gabomdq@6674
   339
gabomdq@6674
   340
      check_function_exists("shmat" HAVE_SHMAT)
gabomdq@6674
   341
      if(NOT HAVE_SHMAT)
gabomdq@6674
   342
        check_library_exists(ipc shmat "" HAVE_SHMAT)
gabomdq@6674
   343
        if(HAVE_SHMAT)
gabomdq@6674
   344
          list(APPEND EXTRA_LIBS ipc)
gabomdq@6674
   345
        endif(HAVE_SHMAT)
gabomdq@6674
   346
        if(NOT HAVE_SHMAT)
gabomdq@6674
   347
          add_definitions(-DNO_SHARED_MEMORY)
gabomdq@6674
   348
        endif(NOT HAVE_SHMAT)
gabomdq@6674
   349
      endif(NOT HAVE_SHMAT)
gabomdq@6674
   350
gabomdq@6674
   351
      if(X11_SHARED)
gabomdq@6674
   352
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   353
          message_warn("You must have SDL_LoadObject() support for dynamic X11 loading")
gabomdq@6674
   354
          set(HAVE_X11_SHARED FALSE)
gabomdq@6674
   355
          if(X11_SYMBOLS_PRIVATE)
gabomdq@6674
   356
            message_warn("You must have gcc4 (-fvisibility=hidden) for dynamic X11 loading")
gabomdq@6674
   357
            set(HAVE_X11_SHARED TRUE)
gabomdq@6674
   358
          endif(X11_SYMBOLS_PRIVATE)
gabomdq@6674
   359
        else(NOT HAVE_DLOPEN)
gabomdq@6674
   360
          set(HAVE_X11_SHARED TRUE)
gabomdq@6674
   361
        endif()
gabomdq@6674
   362
        if(HAVE_X11_SHARED)
gabomdq@6674
   363
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC "\"${X11_LIB}\"")
gabomdq@6674
   364
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "\"${XEXT_LIB}\"")
gabomdq@6674
   365
        else(HAVE_X11_SHARED)
gabomdq@6674
   366
          list(APPEND EXTRA_LIBS ${X11_LIB} ${XEXT_LIB})
gabomdq@6674
   367
        endif(HAVE_X11_SHARED)
gabomdq@6674
   368
      endif(X11_SHARED)
gabomdq@6674
   369
gabomdq@6674
   370
      set(CMAKE_REQUIRED_LIBRARIES ${X11_LIB} ${X11_LIB})
gabomdq@6674
   371
      check_c_source_compiles("
gabomdq@6674
   372
          #include <X11/Xlib.h>
gabomdq@6674
   373
          #include <X11/Xproto.h>
gabomdq@6674
   374
          #include <X11/extensions/Xext.h>
gabomdq@6674
   375
          #include <X11/extensions/extutil.h>
gabomdq@6674
   376
          extern XExtDisplayInfo* XextAddDisplay(XExtensionInfo* a,Display* b,_Xconst char* c,XExtensionHooks* d,int e,XPointer f);
gabomdq@6674
   377
          int main(int argc, char **argv) {}" HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   378
      if(HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   379
        set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XEXTADDDISPLAY 1)
gabomdq@6674
   380
      endif(HAVE_CONST_XEXT_ADDDISPLAY)
gabomdq@6674
   381
gabomdq@6674
   382
      check_c_source_compiles("
gabomdq@6674
   383
          #include <X11/Xlib.h>
gabomdq@6674
   384
          int main(int argc, char **argv) {
gabomdq@6674
   385
            Display *display;
gabomdq@6674
   386
            XEvent event;
gabomdq@6674
   387
            XGenericEventCookie *cookie = &event.xcookie;
gabomdq@6674
   388
            XNextEvent(display, &event);
gabomdq@6674
   389
            XGetEventData(display, cookie);
gabomdq@6674
   390
            XFreeEventData(display, cookie); }" HAVE_XGENERICEVENT)
gabomdq@6674
   391
      if(HAVE_XGENERICEVENT)
gabomdq@6674
   392
        set(SDL_VIDEO_DRIVER_X11_SUPPORTS_GENERIC_EVENTS 1)
gabomdq@6674
   393
      endif(HAVE_XGENERICEVENT)
gabomdq@6674
   394
azamat@7266
   395
      check_c_source_compiles("
azamat@7266
   396
          #include <X11/Xlibint.h>
azamat@7266
   397
          extern int _XData32(Display *dpy,register _Xconst long *data,unsigned len);
azamat@7266
   398
          int main(int argc, char **argv) {}" HAVE_CONST_XDATA32)
azamat@7266
   399
      if(HAVE_CONST_XDATA32)
azamat@7266
   400
        set(SDL_VIDEO_DRIVER_X11_CONST_PARAM_XDATA32 1)
azamat@7266
   401
      endif(HAVE_CONST_XDATA32)
azamat@7266
   402
gabomdq@6674
   403
      check_function_exists(XkbKeycodeToKeysym SDL_VIDEO_DRIVER_X11_HAS_XKBKEYCODETOKEYSYM)
gabomdq@6674
   404
gabomdq@6674
   405
      if(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H)
gabomdq@6674
   406
        set(HAVE_VIDEO_X11_XCURSOR TRUE)
gabomdq@6674
   407
        if(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   408
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB}\"")
gabomdq@6674
   409
        else(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   410
          list(APPEND EXTRA_LIBS ${XCURSOR_LIB})
gabomdq@6674
   411
        endif(HAVE_X11_SHARED AND XCURSOR_LIB)
gabomdq@6674
   412
        set(SDL_VIDEO_DRIVER_X11_XCURSOR 1)
gabomdq@6674
   413
      endif(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H)
gabomdq@6674
   414
gabomdq@6674
   415
      if(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H)
gabomdq@6674
   416
        set(HAVE_VIDEO_X11_XINERAMA TRUE)
gabomdq@6674
   417
        if(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   418
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB}\"")
gabomdq@6674
   419
        else(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   420
          list(APPEND EXTRA_LIBS ${XINERAMA_LIB})
gabomdq@6674
   421
        endif(HAVE_X11_SHARED AND XINERAMA_LIB)
gabomdq@6674
   422
        set(SDL_VIDEO_DRIVER_X11_XINERAMA 1)
gabomdq@6674
   423
      endif(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H)
gabomdq@6674
   424
gabomdq@6674
   425
      if(VIDEO_X11_XINPUT AND HAVE_XINPUT_H)
gabomdq@6674
   426
        set(HAVE_VIDEO_X11_XINPUT TRUE)
gabomdq@6674
   427
        if(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   428
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB}\"")
gabomdq@6674
   429
        else(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   430
          list(APPEND EXTRA_LIBS ${XI_LIB})
gabomdq@6674
   431
        endif(HAVE_X11_SHARED AND XI_LIB)
gabomdq@6674
   432
        set(SDL_VIDEO_DRIVER_X11_XINPUT2 1)
gabomdq@6674
   433
gabomdq@6674
   434
        # Check for multitouch
gabomdq@6674
   435
        check_c_source_compiles("
gabomdq@6674
   436
            #include <X11/Xlib.h>
gabomdq@6674
   437
            #include <X11/Xproto.h>
gabomdq@6674
   438
            #include <X11/extensions/XInput2.h>
gabomdq@6674
   439
            int event_type = XI_TouchBegin;
gabomdq@6674
   440
            XITouchClassInfo *t;
gabomdq@6674
   441
            Status XIAllowTouchEvents(Display *a,int b,unsigned int c,Window d,int f)
gabomdq@6674
   442
            {
gabomdq@6674
   443
              return (Status)0;
gabomdq@6674
   444
            }
gabomdq@6674
   445
            int main(int argc, char **argv) {}" HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   446
        if(HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   447
          set(SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_MULTITOUCH 1)
gabomdq@6674
   448
        endif(HAVE_XINPUT2_MULTITOUCH)
gabomdq@6674
   449
      endif(VIDEO_X11_XINPUT AND HAVE_XINPUT_H)
gabomdq@6674
   450
gabomdq@6674
   451
      if(VIDEO_X11_XRANDR AND HAVE_XRANDR_H)
gabomdq@6674
   452
        if(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   453
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB}\"")
gabomdq@6674
   454
        else(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   455
          list(APPEND EXTRA_LIBS ${XRANDR_LIB})
gabomdq@6674
   456
        endif(HAVE_X11_SHARED AND XRANDR_LIB)
gabomdq@6674
   457
        set(SDL_VIDEO_DRIVER_X11_XRANDR 1)
gabomdq@6674
   458
        set(HAVE_VIDEO_X11_XRANDR TRUE)
gabomdq@6674
   459
      endif(VIDEO_X11_XRANDR AND HAVE_XRANDR_H)
gabomdq@6674
   460
gabomdq@6674
   461
      if(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H)
gabomdq@6674
   462
        if(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   463
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB}\"")
gabomdq@6674
   464
        else(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   465
          list(APPEND EXTRA_LIBS ${XSS_LIB})
gabomdq@6674
   466
        endif(HAVE_X11_SHARED AND XSS_LIB)
gabomdq@6674
   467
        set(SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1)
gabomdq@6674
   468
        set(HAVE_VIDEO_X11_XSCRNSAVER TRUE)
gabomdq@6674
   469
      endif(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H)
gabomdq@6674
   470
gabomdq@6674
   471
      if(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H)
gabomdq@6674
   472
        set(SDL_VIDEO_DRIVER_X11_XSHAPE 1)
gabomdq@6674
   473
        set(HAVE_VIDEO_X11_XSHAPE TRUE)
gabomdq@6674
   474
      endif(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H)
gabomdq@6674
   475
gabomdq@6674
   476
      if(VIDEO_X11_XVM AND HAVE_XF86VM_H)
gabomdq@6674
   477
        if(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   478
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XF86VMODE_LIB}\"")
gabomdq@6674
   479
        else(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   480
          list(APPEND EXTRA_LIBS ${XF86VMODE_LIB})
gabomdq@6674
   481
        endif(HAVE_X11_SHARED AND XF86VMODE_LIB)
gabomdq@6674
   482
        set(SDL_VIDEO_DRIVER_X11_XVIDMODE 1)
gabomdq@6674
   483
        set(HAVE_VIDEO_X11_XVM TRUE)
gabomdq@6674
   484
      endif(VIDEO_X11_XVM AND HAVE_XF86VM_H)
gabomdq@6674
   485
gabomdq@6674
   486
      set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
   487
    endif(X11_LIB)
gabomdq@6674
   488
  endif(VIDEO_X11)
gabomdq@6674
   489
endmacro(CheckX11)
gabomdq@6674
   490
gabomdq@6674
   491
# Requires:
gabomdq@6674
   492
# - n/a
gabomdq@6674
   493
#
gabomdq@6674
   494
macro(CheckCOCOA)
gabomdq@6674
   495
  if(VIDEO_COCOA)
slouken@7182
   496
    check_objc_source_compiles("
gabomdq@6674
   497
        #import <Cocoa/Cocoa.h>
gabomdq@6674
   498
        int main (int argc, char** argv) {}" HAVE_VIDEO_COCOA)
gabomdq@6674
   499
    if(HAVE_VIDEO_COCOA)
gabomdq@6674
   500
      file(GLOB COCOA_SOURCES ${SDL2_SOURCE_DIR}/src/video/cocoa/*.m)
slouken@7182
   501
      set_source_files_properties(${COCOA_SOURCES} PROPERTIES LANGUAGE C)
gabomdq@6674
   502
      set(SOURCE_FILES ${SOURCE_FILES} ${COCOA_SOURCES})
gabomdq@6674
   503
      set(SDL_VIDEO_DRIVER_COCOA 1)
gabomdq@6674
   504
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   505
    endif(HAVE_VIDEO_COCOA)
gabomdq@6674
   506
  endif(VIDEO_COCOA)
gabomdq@6674
   507
endmacro(CheckCOCOA)
gabomdq@6674
   508
gabomdq@6674
   509
# Requires:
gabomdq@6674
   510
# - PkgCheckModules
gabomdq@6674
   511
# Optional:
gabomdq@6674
   512
# - DIRECTFB_SHARED opt
gabomdq@6674
   513
# - HAVE_DLOPEN opt
gabomdq@6674
   514
macro(CheckDirectFB)
gabomdq@6674
   515
  if(VIDEO_DIRECTFB)
gabomdq@6674
   516
    pkg_check_modules(PKG_DIRECTFB directfb>=1.0.0)
gabomdq@6674
   517
    if(PKG_DIRECTFB_FOUND)
gabomdq@6674
   518
      set(HAVE_VIDEO_DIRECTFB TRUE)
gabomdq@6674
   519
      file(GLOB DIRECTFB_SOURCES ${SDL2_SOURCE_DIR}/src/video/directfb/*.c)
gabomdq@6674
   520
      set(SOURCE_FILES ${SOURCE_FILES} ${DIRECTFB_SOURCES})
gabomdq@6674
   521
      set(SDL_VIDEO_DRIVER_DIRECTFB 1)
gabomdq@6674
   522
      set(SDL_VIDEO_RENDER_DIRECTFB 1)
gabomdq@6674
   523
      list(APPEND EXTRA_CFLAGS ${PKG_DIRECTFB_CFLAGS})
gabomdq@6674
   524
      if(DIRECTFB_SHARED)
gabomdq@6674
   525
        if(NOT HAVE_DLOPEN)
gabomdq@6674
   526
          message_warn("You must have SDL_LoadObject() support for dynamic DirectFB loading")
gabomdq@6674
   527
        else()
gabomdq@6674
   528
          find_library(D_DIRECTFB_LIB directfb)
gabomdq@6674
   529
          get_filename_component(F_DIRECTFB_LIB ${D_DIRECTFB_LIB} NAME)
gabomdq@6674
   530
          set(SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC "\"${F_DIRECTFB_LIB}\"")
gabomdq@6674
   531
          set(HAVE_DIRECTFB_SHARED TRUE)
gabomdq@6674
   532
        endif(NOT HAVE_DLOPEN)
gabomdq@6674
   533
      else(DIRECTFB_SHARED)
gabomdq@6674
   534
        list(APPEND EXTRA_LDFLAGS ${PKG_DIRECTFB_LDFLAGS})
gabomdq@6674
   535
      endif(DIRECTFB_SHARED)
gabomdq@6674
   536
      set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   537
    endif(PKG_DIRECTFB_FOUND)
gabomdq@6674
   538
  endif(VIDEO_DIRECTFB)
gabomdq@6674
   539
endmacro(CheckDirectFB)
gabomdq@6674
   540
gabomdq@6674
   541
# Requires:
gabomdq@6674
   542
# - nada
gabomdq@6674
   543
macro(CheckOpenGLX11)
gabomdq@6674
   544
  if(VIDEO_OPENGL)
gabomdq@6674
   545
    check_c_source_compiles("
gabomdq@6674
   546
        #include <GL/gl.h>
gabomdq@6674
   547
        #include <GL/glx.h>
gabomdq@6674
   548
        int main(int argc, char** argv) {}" HAVE_VIDEO_OPENGL)
gabomdq@6674
   549
gabomdq@6674
   550
    if(HAVE_VIDEO_OPENGL)
gabomdq@6674
   551
      set(HAVE_VIDEO_OPENGL TRUE)
gabomdq@6674
   552
      set(SDL_VIDEO_OPENGL 1)
gabomdq@6674
   553
      set(SDL_VIDEO_OPENGL_GLX 1)
gabomdq@6674
   554
      set(SDL_VIDEO_RENDER_OGL 1)
gabomdq@6674
   555
      list(APPEND EXTRA_LIBS GL)
gabomdq@6674
   556
    endif(HAVE_VIDEO_OPENGL)
gabomdq@6674
   557
  endif(VIDEO_OPENGL)
gabomdq@6674
   558
endmacro(CheckOpenGLX11)
gabomdq@6674
   559
gabomdq@6674
   560
# Requires:
gabomdq@6674
   561
# - nada
gabomdq@6674
   562
macro(CheckOpenGLESX11)
gabomdq@6674
   563
  if(VIDEO_OPENGLES)
gabomdq@6674
   564
    check_c_source_compiles("
gabomdq@6674
   565
        #include <EGL/egl.h>
gabomdq@6674
   566
        int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGLES)
gabomdq@6674
   567
    if(HAVE_VIDEO_OPENGLES)
gabomdq@6674
   568
      check_c_source_compiles("
gabomdq@6674
   569
          #include <GLES/gl.h>
gabomdq@6674
   570
          #include <GLES/glext.h>
gabomdq@6674
   571
          int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGLES_V1)
gabomdq@6674
   572
      if(HAVE_VIDEO_OPENGLES_V1)
gabomdq@6674
   573
        set(SDL_VIDEO_OPENGL_ES 1)
gabomdq@6674
   574
        set(SDL_VIDEO_RENDER_OGL_ES 1)
gabomdq@6674
   575
      endif(HAVE_VIDEO_OPENGLES_V1)
gabomdq@6674
   576
      check_c_source_compiles("
gabomdq@6674
   577
          #include <GLES2/gl2.h>
gabomdq@6674
   578
          #include <GLES2/gl2ext.h>
gabomdq@6674
   579
          int main (int argc, char** argv) {}" HAVE_VIDEO_OPENGLES_V2)
gabomdq@6674
   580
      if(HAVE_VIDEO_OPENGLES_V2)
gabomdq@6674
   581
        set(SDL_VIDEO_OPENGL_ES2 1)
gabomdq@6674
   582
        set(SDL_VIDEO_RENDER_OGL_ES2 1)
gabomdq@6674
   583
      endif(HAVE_VIDEO_OPENGLES_V2)
gabomdq@6674
   584
    endif(HAVE_VIDEO_OPENGLES)
gabomdq@6674
   585
  endif(VIDEO_OPENGLES)
gabomdq@6674
   586
endmacro(CheckOpenGLESX11)
gabomdq@6674
   587
gabomdq@6674
   588
# Rquires:
gabomdq@6674
   589
# - nada
gabomdq@6674
   590
# Optional:
gabomdq@6674
   591
# - THREADS opt
gabomdq@6674
   592
# Sets:
gabomdq@6674
   593
# PTHREAD_CFLAGS
gabomdq@6674
   594
# PTHREAD_LIBS
gabomdq@6674
   595
macro(CheckPTHREAD)
gabomdq@6674
   596
  if(PTHREADS)
gabomdq@6674
   597
    if(LINUX)
gabomdq@6674
   598
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@7078
   599
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   600
    elseif(BSDI)
gabomdq@6674
   601
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   602
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   603
    elseif(DARWIN)
gabomdq@6674
   604
      set(PTHREAD_CFLAGS "-D_THREAD_SAFE")
gabomdq@6674
   605
      # causes Carbon.p complaints?
gabomdq@6674
   606
      # set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   607
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   608
    elseif(FREEBSD)
gabomdq@6674
   609
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   610
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   611
    elseif(NETBSD)
gabomdq@6674
   612
      set(PTHREAD_CFLAGS "-D_REENTRANT -D_THREAD_SAFE")
gabomdq@6674
   613
      set(PTHREAD_LDFLAGS "-lpthread")
gabomdq@6674
   614
    elseif(OPENBSD)
gabomdq@6674
   615
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   616
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   617
    elseif(SOLARIS)
gabomdq@6674
   618
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   619
      set(PTHREAD_LDFLAGS "-pthread -lposix4")
gabomdq@6674
   620
    elseif(SYSV5)
gabomdq@6674
   621
      set(PTHREAD_CFLAGS "-D_REENTRANT -Kthread")
gabomdq@6674
   622
      set(PTHREAD_LDFLAGS "")
gabomdq@6674
   623
    elseif(AIX)
gabomdq@6674
   624
      set(PTHREAD_CFLAGS "-D_REENTRANT -mthreads")
gabomdq@6674
   625
      set(PTHREAD_LDFLAGS "-pthread")
gabomdq@6674
   626
    elseif(HPUX)
gabomdq@6674
   627
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   628
      set(PTHREAD_LDFLAGS "-L/usr/lib -pthread")
gabomdq@6674
   629
    else()
gabomdq@6674
   630
      set(PTHREAD_CFLAGS "-D_REENTRANT")
gabomdq@6674
   631
      set(PTHREAD_LDFLAGS "-lpthread")
gabomdq@6674
   632
    endif(LINUX)
gabomdq@6674
   633
gabomdq@6674
   634
    # Run some tests
gabomdq@6674
   635
    set(CMAKE_REQUIRED_FLAGS "${PTHREAD_CFLAGS} ${PTHREAD_LDFLAGS}")
gabomdq@6674
   636
    check_c_source_runs("
gabomdq@6674
   637
        #include <pthread.h>
gabomdq@6674
   638
        int main(int argc, char** argv) {
gabomdq@6674
   639
          pthread_attr_t type;
gabomdq@6674
   640
          pthread_attr_init(&type);
gabomdq@6674
   641
          return 0;
gabomdq@6674
   642
        }" HAVE_PTHREADS)
gabomdq@6674
   643
    if(HAVE_PTHREADS)
gabomdq@6674
   644
      set(SDL_THREAD_PTHREAD 1)
gabomdq@6674
   645
      list(APPEND EXTRA_CFLAGS ${PTHREAD_CFLAGS})
gabomdq@6674
   646
      list(APPEND EXTRA_LDFLAGS ${PTHREAD_LDFLAGS})
gabomdq@6674
   647
      set(SDL_CFLAGS "${SDL_CFLAGS} ${PTHREAD_CFLAGS}")
gabomdq@6674
   648
      list(APPEND SDL_LIBS ${PTHREAD_LDFLAGS})
gabomdq@6674
   649
gabomdq@6674
   650
      check_c_source_compiles("
gabomdq@6674
   651
        #include <pthread.h>
gabomdq@6674
   652
        int main(int argc, char **argv) {
gabomdq@6674
   653
          pthread_mutexattr_t attr;
gabomdq@6674
   654
          pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
gabomdq@7078
   655
          return 0;
gabomdq@6674
   656
        }" HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   657
      if(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   658
        set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX 1)
gabomdq@6674
   659
      else(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   660
        check_c_source_compiles("
gabomdq@6674
   661
            #include <pthread.h>
gabomdq@6674
   662
            int main(int argc, char **argv) {
gabomdq@6674
   663
              pthread_mutexattr_t attr;
gabomdq@6674
   664
              pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);
gabomdq@7078
   665
              return 0;
gabomdq@6674
   666
            }" HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   667
        if(HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   668
          set(SDL_THREAD_PTHREAD_RECURSIVE_MUTEX_NP 1)
gabomdq@6674
   669
        endif(HAVE_RECURSIVE_MUTEXES_NP)
gabomdq@6674
   670
      endif(HAVE_RECURSIVE_MUTEXES)
gabomdq@6674
   671
gabomdq@6674
   672
      if(PTHREADS_SEM)
gabomdq@6674
   673
        check_c_source_compiles("#include <pthread.h>
gabomdq@7078
   674
                                 #include <semaphore.h>
gabomdq@7078
   675
                                 int main(int argc, char **argv) { return 0; }" HAVE_PTHREADS_SEM)
gabomdq@6674
   676
        if(HAVE_PTHREADS_SEM)
gabomdq@6674
   677
          check_c_source_compiles("
gabomdq@6674
   678
              #include <pthread.h>
gabomdq@6674
   679
              #include <semaphore.h>
gabomdq@6674
   680
              int main(int argc, char **argv) {
gabomdq@6674
   681
                  sem_timedwait(NULL, NULL);
gabomdq@6674
   682
                  return 0;
gabomdq@6674
   683
              }" HAVE_SEM_TIMEDWAIT)
gabomdq@6674
   684
        endif(HAVE_PTHREADS_SEM)
gabomdq@6674
   685
      endif(PTHREADS_SEM)
gabomdq@6674
   686
gabomdq@6674
   687
      check_c_source_compiles("
gabomdq@6674
   688
          #include <pthread.h>
gabomdq@6674
   689
          int main(int argc, char** argv) {
gabomdq@6674
   690
              pthread_spin_trylock(NULL);
gabomdq@6674
   691
              return 0;
gabomdq@6674
   692
          }" HAVE_PTHREAD_SPINLOCK)
gabomdq@6674
   693
gabomdq@6674
   694
      check_c_source_compiles("
gabomdq@6674
   695
          #include <pthread.h>
gabomdq@6674
   696
          #include <pthread_np.h>
gabomdq@6674
   697
          int main(int argc, char** argv) { return 0; }" HAVE_PTHREAD_NP_H)
gabomdq@6674
   698
      check_function_exists(pthread_setname_np HAVE_PTHREAD_setNAME_NP)
gabomdq@6674
   699
      check_function_exists(pthread_set_name_np HAVE_PTHREAD_set_NAME_NP)
gabomdq@6674
   700
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   701
gabomdq@6674
   702
      set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   703
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_systhread.c
gabomdq@6674
   704
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_sysmutex.c   # Can be faked, if necessary
gabomdq@6674
   705
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_syscond.c    # Can be faked, if necessary
icculus@7400
   706
          ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_systls.c
gabomdq@6674
   707
          )
gabomdq@6674
   708
      if(HAVE_PTHREADS_SEM)
gabomdq@6674
   709
        set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   710
            ${SDL2_SOURCE_DIR}/src/thread/pthread/SDL_syssem.c)
gabomdq@6674
   711
      else(HAVE_PTHREADS_SEM)
gabomdq@6674
   712
        set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   713
            ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syssem.c)
gabomdq@6674
   714
      endif(HAVE_PTHREADS_SEM)
gabomdq@6674
   715
      set(HAVE_SDL_THREADS TRUE)
gabomdq@6674
   716
    endif(HAVE_PTHREADS)
gabomdq@6674
   717
  endif(PTHREADS)
gabomdq@6674
   718
endmacro(CheckPTHREAD)
gabomdq@6674
   719
gabomdq@6674
   720
# Requires
gabomdq@6674
   721
# - nada
gabomdq@6674
   722
# Optional:
gabomdq@6674
   723
# Sets:
gabomdq@6674
   724
# USB_LIBS
gabomdq@6674
   725
# USB_CFLAGS
gabomdq@6674
   726
macro(CheckUSBHID)
gabomdq@6674
   727
  check_library_exists(usbhid hid_init "" LIBUSBHID)
gabomdq@6674
   728
  if(LIBUSBHID)
gabomdq@6674
   729
    check_include_file(usbhid.h HAVE_USBHID_H)
gabomdq@6674
   730
    if(HAVE_USBHID_H)
gabomdq@6674
   731
      set(USB_CFLAGS "-DHAVE_USBHID_H")
gabomdq@6674
   732
    endif(HAVE_USBHID_H)
gabomdq@6674
   733
gabomdq@6674
   734
    check_include_file(libusbhid.h HAVE_LIBUSBHID_H)
gabomdq@6674
   735
    if(HAVE_LIBUSBHID_H)
gabomdq@6674
   736
      set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSBHID_H")
gabomdq@6674
   737
    endif(HAVE_LIBUSBHID_H)
gabomdq@6674
   738
    set(USB_LIBS ${USB_LIBS} usbhid)
gabomdq@6674
   739
  else(LIBUSBHID)
gabomdq@6674
   740
    check_include_file(usb.h HAVE_USB_H)
gabomdq@6674
   741
    if(HAVE_USB_H)
gabomdq@6674
   742
      set(USB_CFLAGS "-DHAVE_USB_H")
gabomdq@6674
   743
    endif(HAVE_USB_H)
gabomdq@6674
   744
    check_include_file(libusb.h HAVE_LIBUSB_H)
gabomdq@6674
   745
    if(HAVE_LIBUSB_H)
gabomdq@6674
   746
      set(USB_CFLAGS "${USB_CFLAGS} -DHAVE_LIBUSB_H")
gabomdq@6674
   747
    endif(HAVE_LIBUSB_H)
gabomdq@6674
   748
    check_library_exists(usb hid_init "" LIBUSB)
gabomdq@6674
   749
    if(LIBUSB)
gabomdq@6674
   750
      set(USB_LIBS ${USB_LIBS} usb)
gabomdq@6674
   751
    endif(LIBUSB)
gabomdq@6674
   752
  endif(LIBUSBHID)
gabomdq@6674
   753
gabomdq@6674
   754
  set(CMAKE_REQUIRED_FLAGS "${USB_CFLAGS}")
gabomdq@6674
   755
  set(CMAKE_REQUIRED_LIBRARIES "${USB_LIBS}")
gabomdq@6674
   756
  check_c_source_compiles("
gabomdq@6674
   757
       #include <sys/types.h>
gabomdq@6674
   758
        #if defined(HAVE_USB_H)
gabomdq@6674
   759
        #include <usb.h>
gabomdq@6674
   760
        #endif
gabomdq@6674
   761
        #ifdef __DragonFly__
gabomdq@6674
   762
        # include <bus/usb/usb.h>
gabomdq@6674
   763
        # include <bus/usb/usbhid.h>
gabomdq@6674
   764
        #else
gabomdq@6674
   765
        # include <dev/usb/usb.h>
gabomdq@6674
   766
        # include <dev/usb/usbhid.h>
gabomdq@6674
   767
        #endif
gabomdq@6674
   768
        #if defined(HAVE_USBHID_H)
gabomdq@6674
   769
        #include <usbhid.h>
gabomdq@6674
   770
        #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   771
        #include <libusb.h>
gabomdq@6674
   772
        #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   773
        #include <libusbhid.h>
gabomdq@6674
   774
        #endif
gabomdq@6674
   775
        int main(int argc, char **argv) {
gabomdq@6674
   776
          struct report_desc *repdesc;
gabomdq@6674
   777
          struct usb_ctl_report *repbuf;
gabomdq@6674
   778
          hid_kind_t hidkind;
gabomdq@6674
   779
          return 0;
gabomdq@6674
   780
        }" HAVE_USBHID)
gabomdq@6674
   781
  if(HAVE_USBHID)
gabomdq@6674
   782
    check_c_source_compiles("
gabomdq@6674
   783
          #include <sys/types.h>
gabomdq@6674
   784
          #if defined(HAVE_USB_H)
gabomdq@6674
   785
          #include <usb.h>
gabomdq@6674
   786
          #endif
gabomdq@6674
   787
          #ifdef __DragonFly__
gabomdq@6674
   788
          # include <bus/usb/usb.h>
gabomdq@6674
   789
          # include <bus/usb/usbhid.h>
gabomdq@6674
   790
          #else
gabomdq@6674
   791
          # include <dev/usb/usb.h>
gabomdq@6674
   792
          # include <dev/usb/usbhid.h>
gabomdq@6674
   793
          #endif
gabomdq@6674
   794
          #if defined(HAVE_USBHID_H)
gabomdq@6674
   795
          #include <usbhid.h>
gabomdq@6674
   796
          #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   797
          #include <libusb.h>
gabomdq@6674
   798
          #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   799
          #include <libusbhid.h>
gabomdq@6674
   800
          #endif
gabomdq@6674
   801
          int main(int argc, char** argv) {
gabomdq@6674
   802
            struct usb_ctl_report buf;
gabomdq@6674
   803
            if (buf.ucr_data) { }
gabomdq@6674
   804
            return 0;
gabomdq@6674
   805
          }" HAVE_USBHID_UCR_DATA)
gabomdq@6674
   806
    if(HAVE_USBHID_UCR_DATA)
gabomdq@6674
   807
      set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_UCR_DATA")
gabomdq@6674
   808
    endif(HAVE_USBHID_UCR_DATA)
gabomdq@6674
   809
gabomdq@6674
   810
    check_c_source_compiles("
gabomdq@6674
   811
          #include <sys/types.h>
gabomdq@6674
   812
          #if defined(HAVE_USB_H)
gabomdq@6674
   813
          #include <usb.h>
gabomdq@6674
   814
          #endif
gabomdq@6674
   815
          #ifdef __DragonFly__
gabomdq@6674
   816
          #include <bus/usb/usb.h>
gabomdq@6674
   817
          #include <bus/usb/usbhid.h>
gabomdq@6674
   818
          #else
gabomdq@6674
   819
          #include <dev/usb/usb.h>
gabomdq@6674
   820
          #include <dev/usb/usbhid.h>
gabomdq@6674
   821
          #endif
gabomdq@6674
   822
          #if defined(HAVE_USBHID_H)
gabomdq@6674
   823
          #include <usbhid.h>
gabomdq@6674
   824
          #elif defined(HAVE_LIBUSB_H)
gabomdq@6674
   825
          #include <libusb.h>
gabomdq@6674
   826
          #elif defined(HAVE_LIBUSBHID_H)
gabomdq@6674
   827
          #include <libusbhid.h>
gabomdq@6674
   828
          #endif
gabomdq@6674
   829
          int main(int argc, char **argv) {
gabomdq@6674
   830
            report_desc_t d;
gabomdq@6674
   831
            hid_start_parse(d, 1, 1);
gabomdq@6674
   832
            return 0;
gabomdq@6674
   833
          }" HAVE_USBHID_NEW)
gabomdq@6674
   834
    if(HAVE_USBHID_NEW)
gabomdq@6674
   835
      set(USB_CFLAGS "${USB_CFLAGS} -DUSBHID_NEW")
gabomdq@6674
   836
    endif(HAVE_USBHID_NEW)
gabomdq@6674
   837
gabomdq@6674
   838
    check_c_source_compiles("
gabomdq@6674
   839
        #include <machine/joystick.h>
gabomdq@6674
   840
        int main(int argc, char** argv) {
gabomdq@6674
   841
            struct joystick t;
gabomdq@6674
   842
            return 0;
gabomdq@6674
   843
        }" HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   844
    if(HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   845
      set(SDL_JOYSTICK_USBHID_MACHINE_JOYSTICK_H 1)
gabomdq@6674
   846
    endif(HAVE_MACHINE_JOYSTICK)
gabomdq@6674
   847
    set(SDL_JOYSTICK_USBHID 1)
gabomdq@6674
   848
    file(GLOB BSD_JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/bsd/*.c)
gabomdq@6674
   849
    set(SOURCE_FILES ${SOURCE_FILES} ${BSD_JOYSTICK_SOURCES})
gabomdq@6674
   850
    list(APPEND EXTRA_CFLAGS ${USB_CFLAGS})
gabomdq@6674
   851
    list(APPEND EXTRA_LIBS ${USB_LIBS})
gabomdq@6674
   852
    set(HAVE_SDL_JOYSTICK TRUE)
gabomdq@6674
   853
gabomdq@6674
   854
    set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
   855
    set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   856
  endif(HAVE_USBHID)
gabomdq@6674
   857
endmacro(CheckUSBHID)