Mac and Linux SDL2 binary snapshots
Edward Rudd
2014-03-08 e2b6e957100030b4c9e8d720157b0a34195e6dcb
source/cmake/sdlchecks.cmake
@@ -1,3 +1,34 @@
macro(FindLibraryAndSONAME _LIB)
  string(TOUPPER ${_LIB} _UPPERLNAME)
  string(REGEX REPLACE "\\-" "_" _LNAME "${_UPPERLNAME}")
  find_library(${_LNAME}_LIB ${_LIB})
  if(${_LNAME}_LIB)
    # reduce the library name for shared linking
    get_filename_component(_LIB_REALPATH ${${_LNAME}_LIB} REALPATH)  # resolves symlinks
    get_filename_component(_LIB_JUSTNAME ${_LIB_REALPATH} NAME)
    if(APPLE)
      string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*dylib$" "\\1.dylib" _LIB_REGEXD "${_LIB_JUSTNAME}")
    else()
      string(REGEX REPLACE "(\\.[0-9]*)\\.[0-9\\.]*$" "\\1" _LIB_REGEXD "${_LIB_JUSTNAME}")
    endif()
    SET(_DEBUG_FindSONAME FALSE)
    if(_DEBUG_FindSONAME)
      message_warn("DYNLIB OUTPUTVAR: ${_LIB} ... ${_LNAME}_LIB")
      message_warn("DYNLIB ORIGINAL LIB: ${_LIB} ... ${${_LNAME}_LIB}")
      message_warn("DYNLIB REALPATH LIB: ${_LIB} ... ${_LIB_REALPATH}")
      message_warn("DYNLIB JUSTNAME LIB: ${_LIB} ... ${_LIB_JUSTNAME}")
      message_warn("DYNLIB REGEX'd LIB: ${_LIB} ... ${_LIB_REGEXD}")
    endif()
    message(STATUS "dynamic lib${_LIB} -> ${_LIB_REGEXD}")
    set(${_LNAME}_LIB_SONAME ${_LIB_REGEXD})
  endif()
endmacro()
macro(CheckDLOPEN)
  check_function_exists(dlopen HAVE_DLOPEN)
  if(NOT HAVE_DLOPEN)
@@ -83,9 +114,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic ALSA loading")
        else()
          find_library(_ALSA_LIB asound)
          get_filename_component(F_ALSA_LIB ${_ALSA_LIB} NAME)
          set(SDL_AUDIO_DRIVER_ALSA_DYNAMIC "\"${F_ALSA_LIB}\"")
          FindLibraryAndSONAME("asound")
          set(SDL_AUDIO_DRIVER_ALSA_DYNAMIC "\"${ASOUND_LIB_SONAME}\"")
          set(HAVE_ALSA_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(ALSA_SHARED)
@@ -114,9 +144,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic PulseAudio loading")
        else()
          find_library(D_PULSE_LIB pulse-simple)
          get_filename_component(F_PULSE_LIB ${D_PULSE_LIB} NAME)
          set(SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "\"${F_PULSE_LIB}\"")
          FindLibraryAndSONAME("pulse-simple")
          set(SDL_AUDIO_DRIVER_PULSEAUDIO_DYNAMIC "\"${PULSE_SIMPLE_LIB_SONAME}\"")
          set(HAVE_PULSEAUDIO_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(PULSEAUDIO_SHARED)
@@ -145,9 +174,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic ESD loading")
        else()
          find_library(D_ESD_LIB esd)
          get_filename_component(F_ESD_LIB ${D_ESD_LIB} NAME)
          set(SDL_AUDIO_DRIVER_ESD_DYNAMIC "\"${F_ESD_LIB}\"")
          FindLibraryAndSONAME(esd)
          set(SDL_AUDIO_DRIVER_ESD_DYNAMIC "\"${ESD_LIB_SONAME}\"")
          set(HAVE_ESD_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(ESD_SHARED)
@@ -181,9 +209,8 @@
          message_warn("You must have SDL_LoadObject() support for dynamic ARTS loading")
        else()
          # TODO
          find_library(D_ARTS_LIB artsc)
          get_filename_component(F_ARTS_LIB ${D_ARTS_LIB} NAME)
          set(SDL_AUDIO_DRIVER_ARTS_DYNAMIC "\"${F_ARTS_LIB}\"")
          FindLibraryAndSONAME(artsc)
          set(SDL_AUDIO_DRIVER_ARTS_DYNAMIC "\"${ARTSC_LIB_SONAME}\"")
          set(HAVE_ARTS_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(ARTS_SHARED)
@@ -213,8 +240,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic NAS loading")
        else()
          get_filename_component(F_NAS_LIB ${D_NAS_LIB} NAME)
          set(SDL_AUDIO_DRIVER_NAS_DYNAMIC "\"${F_NAS_LIB}\"")
          FindLibraryAndSONAME("audio")
          set(SDL_AUDIO_DRIVER_NAS_DYNAMIC "\"${AUDIO_LIB_SONAME}\"")
          set(HAVE_NAS_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(NAS_SHARED)
@@ -234,7 +261,7 @@
  if(SNDIO)
    # TODO: set include paths properly, so the sndio headers are found
    check_include_file(sndio.h HAVE_SNDIO_H)
    find_library(D_SNDIO_LIB audio)
    find_library(D_SNDIO_LIB sndio)
    if(HAVE_SNDIO_H AND D_SNDIO_LIB)
      set(HAVE_SNDIO TRUE)
      file(GLOB SNDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sndio/*.c)
@@ -244,8 +271,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic sndio loading")
        else()
          get_filename_component(F_SNDIO_LIB ${D_SNDIO_LIB} NAME)
          set(SDL_AUDIO_DRIVER_SNDIO_DYNAMIC "\"${F_SNDIO_LIB}\"")
          FindLibraryAndSONAME("sndio")
          set(SDL_AUDIO_DRIVER_SNDIO_DYNAMIC "\"${SNDIO_LIB_SONAME}\"")
          set(HAVE_SNDIO_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(SNDIO_SHARED)
@@ -274,9 +301,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic FusionSound loading")
        else()
          find_library(D_FUSIONSOUND_LIB fusionsound)
          get_filename_component(F_FUSIONSOUND_LIB ${D_FUSIONSOUND_LIB} NAME)
          set(SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC "\"${F_FUSIONSOUND_LIB}\"")
          FindLibraryAndSONAME("fusionsound")
          set(SDL_AUDIO_DRIVER_FUSIONSOUND_DYNAMIC "\"${FUSIONSOUND_LIB_SONAME}\"")
          set(HAVE_FUSIONSOUND_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(FUSIONSOUND_SHARED)
@@ -295,13 +321,7 @@
macro(CheckX11)
  if(VIDEO_X11)
    foreach(_LIB X11 Xext Xcursor Xinerama Xi Xrandr Xrender Xss Xxf86vm)
      string(TOUPPER ${_LIB} _LNAME)
      find_library(${_LNAME}_LIB ${_LIB})
      if(${_LNAME}_LIB)
        # reduce the library name for shared linking
        get_filename_component(_TMP ${${_LNAME}_LIB} NAME)
        set(${_LNAME}_LIB ${_TMP})
      endif()
        FindLibraryAndSONAME("${_LIB}")
    endforeach()
    find_path(X_INCLUDEDIR X11/Xlib.h)
@@ -331,15 +351,8 @@
      set(SOURCE_FILES ${SOURCE_FILES} ${X11_SOURCES})
      set(SDL_VIDEO_DRIVER_X11 1)
      if(HAVE_GCC_FVISIBILITY)
        set(X11_SYMBOLS_PRIVATE TRUE)
      else()
        set(X11_SYMBOLS_PRIVATE FALSE)
      endif(HAVE_GCC_FVISIBILITY)
      if(APPLE)
        set(X11_SHARED OFF)
        set(X11_SYMBOLS_PRIVATE TRUE)
      endif(APPLE)
      check_function_exists("shmat" HAVE_SHMAT)
@@ -358,16 +371,12 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic X11 loading")
          set(HAVE_X11_SHARED FALSE)
          if(X11_SYMBOLS_PRIVATE)
            message_warn("You must have gcc4 (-fvisibility=hidden) for dynamic X11 loading")
            set(HAVE_X11_SHARED TRUE)
          endif(X11_SYMBOLS_PRIVATE)
        else(NOT HAVE_DLOPEN)
          set(HAVE_X11_SHARED TRUE)
        endif()
        if(HAVE_X11_SHARED)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC "\"${X11_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "\"${XEXT_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC "\"${X11_LIB_SONAME}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XEXT "\"${XEXT_LIB_SONAME}\"")
        else(HAVE_X11_SHARED)
          list(APPEND EXTRA_LIBS ${X11_LIB} ${XEXT_LIB})
        endif(HAVE_X11_SHARED)
@@ -413,7 +422,7 @@
      if(VIDEO_X11_XCURSOR AND HAVE_XCURSOR_H)
        set(HAVE_VIDEO_X11_XCURSOR TRUE)
        if(HAVE_X11_SHARED AND XCURSOR_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XCURSOR_LIB)
          list(APPEND EXTRA_LIBS ${XCURSOR_LIB})
        endif(HAVE_X11_SHARED AND XCURSOR_LIB)
@@ -423,7 +432,7 @@
      if(VIDEO_X11_XINERAMA AND HAVE_XINERAMA_H)
        set(HAVE_VIDEO_X11_XINERAMA TRUE)
        if(HAVE_X11_SHARED AND XINERAMA_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINERAMA "\"${XINERAMA_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XINERAMA_LIB)
          list(APPEND EXTRA_LIBS ${XINERAMA_LIB})
        endif(HAVE_X11_SHARED AND XINERAMA_LIB)
@@ -433,7 +442,7 @@
      if(VIDEO_X11_XINPUT AND HAVE_XINPUT_H)
        set(HAVE_VIDEO_X11_XINPUT TRUE)
        if(HAVE_X11_SHARED AND XI_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XI_LIB)
          list(APPEND EXTRA_LIBS ${XI_LIB})
        endif(HAVE_X11_SHARED AND XI_LIB)
@@ -458,7 +467,7 @@
      if(VIDEO_X11_XRANDR AND HAVE_XRANDR_H)
        if(HAVE_X11_SHARED AND XRANDR_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XRANDR_LIB)
          list(APPEND EXTRA_LIBS ${XRANDR_LIB})
        endif(HAVE_X11_SHARED AND XRANDR_LIB)
@@ -468,7 +477,7 @@
      if(VIDEO_X11_XSCRNSAVER AND HAVE_XSS_H)
        if(HAVE_X11_SHARED AND XSS_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB}\"")
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XSS_LIB)
          list(APPEND EXTRA_LIBS ${XSS_LIB})
        endif(HAVE_X11_SHARED AND XSS_LIB)
@@ -482,11 +491,11 @@
      endif(VIDEO_X11_XSHAPE AND HAVE_XSHAPE_H)
      if(VIDEO_X11_XVM AND HAVE_XF86VM_H)
        if(HAVE_X11_SHARED AND XF86VMODE_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XF86VMODE_LIB}\"")
        else(HAVE_X11_SHARED AND XF86VMODE_LIB)
          list(APPEND EXTRA_LIBS ${XF86VMODE_LIB})
        endif(HAVE_X11_SHARED AND XF86VMODE_LIB)
        if(HAVE_X11_SHARED AND XXF86VM_LIB)
          set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XVIDMODE "\"${XXF86VM_LIB_SONAME}\"")
        else(HAVE_X11_SHARED AND XXF86VM_LIB)
          list(APPEND EXTRA_LIBS ${XXF86VM_LIB})
        endif(HAVE_X11_SHARED AND XXF86VM_LIB)
        set(SDL_VIDEO_DRIVER_X11_XVIDMODE 1)
        set(HAVE_VIDEO_X11_XVM TRUE)
      endif(VIDEO_X11_XVM AND HAVE_XF86VM_H)
@@ -496,14 +505,60 @@
  endif(VIDEO_X11)
endmacro(CheckX11)
macro(CheckMir)
# !!! FIXME: hook up dynamic loading here.
    if(VIDEO_MIR)
        find_library(MIR_LIB mirclient mircommon egl)
        pkg_check_modules(MIR_TOOLKIT mirclient mircommon)
        pkg_check_modules(EGL egl)
        pkg_check_modules(XKB xkbcommon)
        if (MIR_LIB AND MIR_TOOLKIT_FOUND AND EGL_FOUND AND XKB_FOUND)
            set(HAVE_VIDEO_MIR TRUE)
            set(HAVE_SDL_VIDEO TRUE)
            file(GLOB MIR_SOURCES ${SDL2_SOURCE_DIR}/src/video/mir/*.c)
            set(SOURCE_FILES ${SOURCE_FILES} ${MIR_SOURCES})
            set(SDL_VIDEO_DRIVER_MIR 1)
            list(APPEND EXTRA_CFLAGS ${MIR_TOOLKIT_CFLAGS} ${EGL_CLFAGS} ${XKB_CLFLAGS})
            list(APPEND EXTRA_LDFLAGS ${MIR_TOOLKIT_LDFLAGS} ${EGL_LDLAGS} ${XKB_LDLAGS})
        endif (MIR_LIB AND MIR_TOOLKIT_FOUND AND EGL_FOUND AND XKB_FOUND)
    endif(VIDEO_MIR)
endmacro(CheckMir)
# Requires:
# - EGL
macro(CheckWayland)
# !!! FIXME: hook up dynamic loading here.
  if(VIDEO_WAYLAND)
    pkg_check_modules(WAYLAND wayland-client wayland-cursor wayland-egl egl xkbcommon)
    if(WAYLAND_FOUND)
      link_directories(
          ${WAYLAND_LIBRARY_DIRS}
      )
      include_directories(
          ${WAYLAND_INCLUDE_DIRS}
      )
      set(EXTRA_LIBS ${WAYLAND_LIBRARIES} ${EXTRA_LIBS})
      set(HAVE_VIDEO_WAYLAND TRUE)
      set(HAVE_SDL_VIDEO TRUE)
      file(GLOB WAYLAND_SOURCES ${SDL2_SOURCE_DIR}/src/video/wayland/*.c)
      set(SOURCE_FILES ${SOURCE_FILES} ${WAYLAND_SOURCES})
      set(SDL_VIDEO_DRIVER_WAYLAND 1)
    endif(WAYLAND_FOUND)
  endif(VIDEO_WAYLAND)
endmacro(CheckWayland)
# Requires:
# - n/a
#
macro(CheckCOCOA)
  if(VIDEO_COCOA)
    check_objc_source_compiles("
        #import <Cocoa/Cocoa.h>
        int main (int argc, char** argv) {}" HAVE_VIDEO_COCOA)
    if(APPLE) # Apple always has Cocoa.
      set(HAVE_VIDEO_COCOA TRUE)
    endif(APPLE)
    if(HAVE_VIDEO_COCOA)
      file(GLOB COCOA_SOURCES ${SDL2_SOURCE_DIR}/src/video/cocoa/*.m)
      set_source_files_properties(${COCOA_SOURCES} PROPERTIES LANGUAGE C)
@@ -533,9 +588,8 @@
        if(NOT HAVE_DLOPEN)
          message_warn("You must have SDL_LoadObject() support for dynamic DirectFB loading")
        else()
          find_library(D_DIRECTFB_LIB directfb)
          get_filename_component(F_DIRECTFB_LIB ${D_DIRECTFB_LIB} NAME)
          set(SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC "\"${F_DIRECTFB_LIB}\"")
          FindLibraryAndSONAME("directfb")
          set(SDL_VIDEO_DRIVER_DIRECTFB_DYNAMIC "\"${DIRECTFB_LIB_SONAME}\"")
          set(HAVE_DIRECTFB_SHARED TRUE)
        endif(NOT HAVE_DLOPEN)
      else(DIRECTFB_SHARED)
@@ -638,6 +692,9 @@
    elseif(HPUX)
      set(PTHREAD_CFLAGS "-D_REENTRANT")
      set(PTHREAD_LDFLAGS "-L/usr/lib -pthread")
    elseif(HAIKU)
      set(PTHREAD_CFLAGS "-D_REENTRANT")
      set(PTHREAD_LDFLAGS "")
    else()
      set(PTHREAD_CFLAGS "-D_REENTRANT")
      set(PTHREAD_LDFLAGS "-lpthread")