CMakeLists.txt
author Ryan C. Gordon <icculus@icculus.org>
Tue, 11 Dec 2012 12:07:06 -0500
changeset 6734 7fdaee2be782
parent 6729 fdaeea9e7567
child 6774 ad8522052ce6
permissions -rw-r--r--
Updated Linux joystick code to support hotplug, GUIDs, etc.

This uses libudev for hotplug, but it's optional, so we'll just try to find
some reasonable defaults without it (maybe an older Linux box or under
FreeBSD's Linux emulation?).
gabomdq@6674
     1
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
gabomdq@6674
     2
  message(FATAL_ERROR "Prevented in-tree built. Please create a build directory outside of the SDL source code and call cmake from there")
gabomdq@6674
     3
endif()
gabomdq@6674
     4
gabomdq@6674
     5
cmake_minimum_required(VERSION 2.6)
gabomdq@6674
     6
project(SDL2 C)
gabomdq@6674
     7
include(CheckFunctionExists)
gabomdq@6674
     8
include(CheckLibraryExists)
gabomdq@6674
     9
include(CheckIncludeFiles)
gabomdq@6674
    10
include(CheckIncludeFile)
gabomdq@6674
    11
include(CheckSymbolExists)
gabomdq@6674
    12
include(CheckCSourceRuns)
gabomdq@6674
    13
include(CheckCCompilerFlag)
gabomdq@6674
    14
include(CheckTypeSize)
gabomdq@6674
    15
include(CheckStructHasMember)
gabomdq@6674
    16
include(CMakeDependentOption)
gabomdq@6674
    17
include(FindPkgConfig)
gabomdq@6674
    18
set(CMAKE_MODULE_PATH "${SDL2_SOURCE_DIR}/cmake")
gabomdq@6674
    19
include(${SDL2_SOURCE_DIR}/cmake/macros.cmake)
gabomdq@6674
    20
include(${SDL2_SOURCE_DIR}/cmake/sdlchecks.cmake)
gabomdq@6674
    21
gabomdq@6674
    22
# General settings
gabomdq@6674
    23
# Edit include/SDL_version.h and change the version, then:
gabomdq@6674
    24
#   SDL_MICRO_VERSION += 1;
gabomdq@6674
    25
#   SDL_INTERFACE_AGE += 1;
gabomdq@6674
    26
#   SDL_BINARY_AGE += 1;
gabomdq@6674
    27
# if any functions have been added, set SDL_INTERFACE_AGE to 0.
gabomdq@6674
    28
# if backwards compatibility has been broken,
gabomdq@6674
    29
# set SDL_BINARY_AGE and SDL_INTERFACE_AGE to 0.
gabomdq@6674
    30
set(SDL_MAJOR_VERSION 2)
gabomdq@6674
    31
set(SDL_MINOR_VERSION 0)
gabomdq@6674
    32
set(SDL_MICRO_VERSION 0)
gabomdq@6674
    33
set(SDL_INTERFACE_AGE 0)
gabomdq@6674
    34
set(SDL_BINARY_AGE 0)
gabomdq@6674
    35
set(SDL_VERSION "${SDL_MAJOR_VERSION}.${SDL_MINOR_VERSION}.${SDL_MICRO_VERSION}")
gabomdq@6674
    36
gabomdq@6674
    37
# Calculate a libtool-like version number
gabomdq@6674
    38
math(EXPR LT_CURRENT "${SDL_MICRO_VERSION} - ${SDL_INTERFACE_AGE}")
gabomdq@6674
    39
math(EXPR LT_AGE "${SDL_BINARY_AGE} - ${SDL_INTERFACE_AGE}")
gabomdq@6674
    40
set(LT_REVISION "${SDL_INTERFACE_AGE}")
gabomdq@6674
    41
gabomdq@6674
    42
# General settings & flags
gabomdq@6674
    43
set(LIBRARY_OUTPUT_DIRECTORY "build")
gabomdq@6674
    44
# Check for 64 or 32 bit
gabomdq@6674
    45
set(SIZEOF_VOIDP ${CMAKE_SIZEOF_VOID_P})
gabomdq@6674
    46
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
gabomdq@6674
    47
  set(ARCH_64 TRUE)
gabomdq@6674
    48
  set(PROCESSOR_ARCH "x64")
gabomdq@6674
    49
else()
gabomdq@6674
    50
  set(ARCH_64 FALSE)
gabomdq@6674
    51
  set(PROCESSOR_ARCH "x86")
gabomdq@6674
    52
endif(CMAKE_SIZEOF_VOID_P EQUAL 8)
gabomdq@6674
    53
set(LIBNAME SDL2)
gabomdq@6674
    54
if(NOT LIBTYPE)
gabomdq@6674
    55
  set(LIBTYPE SHARED)
gabomdq@6674
    56
endif(NOT LIBTYPE)
gabomdq@6674
    57
gabomdq@6674
    58
# Get the platform
gabomdq@6674
    59
if(WIN32)
gabomdq@6674
    60
  if(NOT WINDOWS)
gabomdq@6674
    61
    set(WINDOWS TRUE)
gabomdq@6674
    62
  endif(NOT WINDOWS)
gabomdq@6674
    63
elseif(UNIX AND NOT APPLE)
gabomdq@6674
    64
  if(CMAKE_SYSTEM_NAME MATCHES ".*Linux")
gabomdq@6674
    65
    set(LINUX TRUE)
gabomdq@6674
    66
  elseif(CMAKE_SYSTEM_NAME MATCHES "kFreeBSD.*")
gabomdq@6674
    67
    set(FREEBSD TRUE)
gabomdq@6674
    68
  elseif(CMAKE_SYSTEM_NAME MATCHES "kNetBSD.*|NetBSD.*")
gabomdq@6674
    69
    set(NETBSD TRUE)
gabomdq@6674
    70
  elseif(CMAKE_SYSTEM_NAME MATCHES "kOpenBSD.*|OpenBSD.*")
gabomdq@6674
    71
    set(OPENBSD TRUE)
gabomdq@6674
    72
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*GNU.*")
gabomdq@6674
    73
    set(GNU TRUE)
gabomdq@6674
    74
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*BSDI.*")
gabomdq@6674
    75
    set(BSDI TRUE)
gabomdq@6674
    76
  elseif(CMAKE_SYSTEM_NAME MATCHES "DragonFly.*|FreeBSD")
gabomdq@6674
    77
    set(FREEBSD TRUE)
gabomdq@6674
    78
  elseif(CMAKE_SYSTEM_NAME MATCHES "SYSV5.*")
gabomdq@6674
    79
    set(SYSV5 TRUE)
gabomdq@6674
    80
  elseif(CMAKE_SYSTEM_NAME MATCHES "Solaris.*")
gabomdq@6674
    81
    set(SOLARIS TRUE)
gabomdq@6674
    82
  elseif(CMAKE_SYSTEM_NAME MATCHES "HP-UX.*")
gabomdq@6674
    83
    set(HPUX TRUE)
gabomdq@6674
    84
  elseif(CMAKE_SYSTEM_NAME MATCHES "AIX.*")
gabomdq@6674
    85
    set(AIX TRUE)
gabomdq@6674
    86
  elseif(CMAKE_SYSTEM_NAME MATCHES "Minix.*")
gabomdq@6674
    87
    set(MINIX TRUE)
gabomdq@6674
    88
  endif()
gabomdq@6674
    89
elseif(APPLE)
gabomdq@6674
    90
  if(CMAKE_SYSTEM_NAME MATCHES ".*Darwin.*")
gabomdq@6674
    91
    set(DARWIN TRUE)
gabomdq@6674
    92
  elseif(CMAKE_SYSTEM_NAME MATCHES ".*MacOS.*")
gabomdq@6674
    93
    set(MACOSX TRUE)
gabomdq@6674
    94
  endif()
gabomdq@6674
    95
  # TODO: iOS?
gabomdq@6674
    96
elseif(CMAKE_SYSTEM_NAME MATCHES "Haiku.*|BeOS.*")
gabomdq@6674
    97
  set(BEOS TRUE)
gabomdq@6674
    98
endif()
gabomdq@6674
    99
gabomdq@6674
   100
# Don't mistake osx for unix
gabomdq@6674
   101
if(UNIX AND NOT APPLE)
gabomdq@6674
   102
  set(UNIX_SYS ON)
gabomdq@6674
   103
else()
gabomdq@6674
   104
  set(UNIX_SYS OFF)
gabomdq@6674
   105
endif(UNIX AND NOT APPLE)
gabomdq@6674
   106
gabomdq@6674
   107
# Default option knobs
gabomdq@6674
   108
if(APPLE OR ARCH_64)
gabomdq@6674
   109
  set(OPT_DEF_SSEMATH ON)
gabomdq@6674
   110
endif()
gabomdq@6674
   111
if(UNIX OR MINGW OR MSYS)
gabomdq@6674
   112
  set(OPT_DEF_LIBC ON)
gabomdq@6674
   113
endif(UNIX OR MINGW OR MSYS)
gabomdq@6674
   114
gabomdq@6674
   115
# Compiler info
gabomdq@6674
   116
if(CMAKE_COMPILER_IS_GNUCC)
gabomdq@6674
   117
  set(USE_GCC TRUE)
gabomdq@6674
   118
  set(OPT_DEF_ASM TRUE)
gabomdq@6674
   119
elseif(CMAKE_C_COMPILER_ID MATCHES "Clang")
gabomdq@6674
   120
  set(USE_CLANG TRUE)
gabomdq@6674
   121
  set(OPT_DEF_ASM TRUE)
gabomdq@6674
   122
elseif(MSVC_VERSION GREATER 1400) # VisualStudio 8.0+
gabomdq@6674
   123
  set(OPT_DEF_ASM TRUE)
gabomdq@6674
   124
  #set(CMAKE_C_FLAGS "/ZI /WX- /
gabomdq@6674
   125
else()
gabomdq@6674
   126
  set(OPT_DEF_ASM FALSE)
gabomdq@6674
   127
endif(CMAKE_COMPILER_IS_GNUCC)
gabomdq@6674
   128
gabomdq@6674
   129
# Default flags, if not set otherwise
gabomdq@6674
   130
if("$ENV{CFLAGS}" STREQUAL "")
gabomdq@6674
   131
  if(USE_GCC OR USE_CLANG)
gabomdq@6674
   132
    set(CMAKE_C_FLAGS "-g -O3")
gabomdq@6674
   133
  endif(USE_GCC OR USE_CLANG)
gabomdq@6674
   134
else("$ENV{CFLAGS}" STREQUAL "")
gabomdq@6674
   135
  set(CMAKE_C_FLAGS "$ENV{CFLAGS}")
gabomdq@6674
   136
  list(APPEND EXTRA_CFLAGS "$ENV{CFLAGS}")
gabomdq@6674
   137
endif("$ENV{CFLAGS}" STREQUAL "")
gabomdq@6674
   138
if(NOT ("$ENV{CFLAGS}" STREQUAL "")) # Hackish, but does the trick on Win32
gabomdq@6674
   139
  list(APPEND EXTRA_LDFLAGS "$ENV{LDFLAGS}")
gabomdq@6674
   140
endif(NOT ("$ENV{CFLAGS}" STREQUAL ""))
gabomdq@6674
   141
gabomdq@6674
   142
# Those are used for pkg-config and friends, so that the SDL2.pc, sdl2-config,
gabomdq@6674
   143
# etc. are created correctly.
gabomdq@6674
   144
set(SDL_LIBS "-lSDL2")
gabomdq@6674
   145
set(SDL_CFLAGS "")
gabomdq@6674
   146
gabomdq@6674
   147
if(CYGWIN)
gabomdq@6674
   148
  # We build SDL on cygwin without the UNIX emulation layer
gabomdq@6674
   149
  include_directories("-I/usr/include/mingw")
gabomdq@6674
   150
  set(CMAKE_REQUIRED_FLAGS "-mno-cygwin")
gabomdq@6674
   151
  check_c_source_compiles("int main(int argc, char **argv) {}"
gabomdq@6674
   152
    HAVE_GCC_NO_CYGWIN)
gabomdq@6674
   153
  set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   154
  if(HAVE_GCC_NO_CYGWIN)
gabomdq@6674
   155
    list(APPEND EXTRA_LDFLAGS "-mno-cygwin")
gabomdq@6674
   156
    list(APPEND SDL_LIBS "-mno-cygwin")
gabomdq@6674
   157
  endif(HAVE_GCC_NO_CYGWIN)
gabomdq@6674
   158
  set(SDL_CFLAGS "${SDL_CFLAGS} -I/usr/include/mingw")
gabomdq@6674
   159
endif(CYGWIN)
gabomdq@6674
   160
gabomdq@6674
   161
add_definitions(-DUSING_GENERATED_CONFIG_H)
gabomdq@6674
   162
# General includes
gabomdq@6674
   163
include_directories(${SDL2_BINARY_DIR}/include ${SDL2_SOURCE_DIR}/include)
gabomdq@6674
   164
gabomdq@6674
   165
set(SDL_SUBSYSTEMS
gabomdq@6674
   166
    Atomic Audio Video Render Events Joystick Haptic Power Threads Timers
gabomdq@6674
   167
    File Loadso CPUinfo)
gabomdq@6674
   168
foreach(_SUB ${SDL_SUBSYSTEMS})
gabomdq@6674
   169
  string(TOUPPER ${_SUB} _OPT)
gabomdq@6674
   170
  option(SDL_${_OPT} "Enable the ${_SUB} subsystem" ON)
gabomdq@6674
   171
endforeach()
gabomdq@6674
   172
gabomdq@6674
   173
option_string(ASSERTIONS "Enable internal sanity checks (auto/disabled/release/enabled/paranoid)" "auto")
gabomdq@6674
   174
#set_option(DEPENDENCY_TRACKING "Use gcc -MMD -MT dependency tracking" ON)
gabomdq@6674
   175
set_option(LIBC                "Use the system C library" ${OPT_DEF_LIBC})
gabomdq@6674
   176
set_option(GCC_ATOMICS         "Use gcc builtin atomics" ${USE_GCC})
gabomdq@6674
   177
set_option(ASSEMBLY            "Enable assembly routines" ${OPT_DEF_ASM})
gabomdq@6674
   178
set_option(SSEMATH             "Allow GCC to use SSE floating point math" ${OPT_DEF_SSEMATH})
gabomdq@6674
   179
set_option(MMX                 "Use MMX assembly routines" ${OPT_DEF_ASM})
gabomdq@6674
   180
set_option(3DNOW               "Use 3Dnow! MMX assembly routines" ${OPT_DEF_ASM})
gabomdq@6674
   181
set_option(SSE                 "Use SSE assembly routines" ${OPT_DEF_ASM})
gabomdq@6674
   182
set_option(SSE2                "Use SSE2 assembly routines" ${OPT_DEF_SSEMATH})
gabomdq@6674
   183
set_option(ALTIVEC             "Use Altivec assembly routines" ${OPT_DEF_ASM})
gabomdq@6674
   184
set_option(DISKAUDIO           "Support the disk writer audio driver" ON)
gabomdq@6674
   185
set_option(DUMMYAUDIO          "Support the dummy audio driver" ON)
gabomdq@6674
   186
set_option(VIDEO_DIRECTFB      "Use DirectFB video driver" OFF)
gabomdq@6674
   187
dep_option(DIRECTFB_SHARED     "Dynamically load directfb support" ON "VIDEO_DIRECTFB" OFF)
gabomdq@6674
   188
set_option(FUSIONSOUND         "Use FusionSound audio driver" OFF)
gabomdq@6674
   189
dep_option(FUSIONSOUND_SHARED  "Dynamically load fusionsound audio support" ON "FUSIONSOUND_SHARED" OFF)
gabomdq@6674
   190
set_option(VIDEO_DUMMY         "Use dummy video driver" ON)
gabomdq@6674
   191
set_option(VIDEO_OPENGL        "Include OpenGL support" ON)
gabomdq@6674
   192
set_option(VIDEO_OPENGLES      "Include OpenGL ES support" ON)
gabomdq@6674
   193
set_option(PTHREADS            "Use POSIX threads for multi-threading" ${UNIX_SYS})
gabomdq@6674
   194
dep_option(PTHREADS_SEM        "Use pthread semaphores" ON "PTHREADS" OFF)
gabomdq@6674
   195
set_option(SDL_DLOPEN          "Use dlopen for shared object loading" ON)
gabomdq@6674
   196
set_option(OSS                 "Support the OSS audio API" ${UNIX_SYS})
gabomdq@6674
   197
set_option(ALSA                "Support the ALSA audio API" ${UNIX_SYS})
gabomdq@6674
   198
dep_option(ALSA_SHARED         "Dynamically load ALSA audio support" ON "ALSA" OFF)
gabomdq@6674
   199
set_option(ESD                 "Support the Enlightened Sound Daemon" ${UNIX_SYS})
gabomdq@6674
   200
dep_option(ESD_SHARED          "Dynamically load ESD audio support" ON "ESD" OFF)
gabomdq@6674
   201
set_option(PULSEAUDIO          "Use PulseAudio" ${UNIX_SYS})
gabomdq@6674
   202
dep_option(PULSEAUDIO_SHARED   "Dynamically load PulseAudio support" ON "PULSEAUDIO" OFF)
gabomdq@6674
   203
set_option(ARTS                "Support the Analog Real Time Synthesizer" ${UNIX_SYS})
gabomdq@6674
   204
dep_option(ARTS_SHARED         "Dynamically load aRts audio support" ON "ARTS" OFF)
gabomdq@6674
   205
set_option(NAS                 "Support the NAS audio API" ${UNIX_SYS})
gabomdq@6674
   206
set_option(RPATH               "Use an rpath when linking SDL" ${UNIX_SYS})
gabomdq@6674
   207
set_option(CLOCK_GETTIME       "Use clock_gettime() instead of gettimeofday()" OFF)
gabomdq@6674
   208
set_option(INPUT_TSLIB         "Use the Touchscreen library for input" ${UNIX_SYS})
gabomdq@6674
   209
set_option(VIDEO_X11           "Use X11 video driver" ${UNIX_SYS})
gabomdq@6674
   210
dep_option(X11_SHARED          "Dynamically load X11 support" ON "VIDEO_X11" OFF)
gabomdq@6674
   211
set(SDL_X11_OPTIONS Xcursor Xinerama XInput Xrandr Xscrnsaver XShape Xvm)
gabomdq@6674
   212
foreach(_SUB ${SDL_X11_OPTIONS})
gabomdq@6674
   213
  string(TOUPPER "VIDEO_X11_${_SUB}" _OPT)
gabomdq@6674
   214
  dep_option(${_OPT}           "Enable ${_SUB} support" ON "VIDEO_X11" OFF)
gabomdq@6674
   215
endforeach()
gabomdq@6674
   216
set_option(VIDEO_COCOA         "Use Cocoa video driver" ${APPLE})
gabomdq@6674
   217
set_option(DIRECTX             "Use DirectX for Windows audio/video" ${WINDOWS})
gabomdq@6674
   218
set_option(RENDER_D3D          "Enable the Direct3D render driver" ${WINDOWS})
gabomdq@6674
   219
gabomdq@6674
   220
# TODO: We should (should we?) respect cmake's ${BUILD_SHARED_LIBS} flag here
gabomdq@6674
   221
# The options below are for compatibility to configure's default behaviour.
gabomdq@6674
   222
set(SDL_SHARED ON CACHE BOOL "Build a shared version of the library")
gabomdq@6674
   223
set(SDL_STATIC ON CACHE BOOL "Build a static version of the library")
gabomdq@6674
   224
gabomdq@6674
   225
# General source files
gabomdq@6674
   226
file(GLOB SOURCE_FILES
gabomdq@6674
   227
  ${SDL2_SOURCE_DIR}/src/*.c
gabomdq@6674
   228
  ${SDL2_SOURCE_DIR}/src/atomic/*.c
gabomdq@6674
   229
  ${SDL2_SOURCE_DIR}/src/audio/*.c
gabomdq@6674
   230
  ${SDL2_SOURCE_DIR}/src/cpuinfo/*.c
gabomdq@6674
   231
  ${SDL2_SOURCE_DIR}/src/events/*.c
gabomdq@6674
   232
  ${SDL2_SOURCE_DIR}/src/file/*.c
gabomdq@6674
   233
  ${SDL2_SOURCE_DIR}/src/libm/*.c
gabomdq@6674
   234
  ${SDL2_SOURCE_DIR}/src/render/*.c
gabomdq@6674
   235
  ${SDL2_SOURCE_DIR}/src/render/*/*.c
gabomdq@6674
   236
  ${SDL2_SOURCE_DIR}/src/stdlib/*.c
gabomdq@6674
   237
  ${SDL2_SOURCE_DIR}/src/thread/*.c
gabomdq@6674
   238
  ${SDL2_SOURCE_DIR}/src/timer/*.c
gabomdq@6674
   239
  ${SDL2_SOURCE_DIR}/src/video/*.c)
gabomdq@6674
   240
gabomdq@6674
   241
gabomdq@6674
   242
if(ASSERTIONS STREQUAL "auto")
gabomdq@6674
   243
  # Do nada - use optimization settings to determine the assertion level
gabomdq@6674
   244
elseif(ASSERTIONS STREQUAL "disabled")
gabomdq@6674
   245
  set(SDL_DEFAULT_ASSERT_LEVEL 0)
gabomdq@6674
   246
elseif(ASSERTIONS STREQUAL "release")
gabomdq@6674
   247
  set(SDL_DEFAULT_ASSERT_LEVEL 1)
gabomdq@6674
   248
elseif(ASSERTIONS STREQUAL "enabled")
gabomdq@6674
   249
  set(SDL_DEFAULT_ASSERT_LEVEL 2)
gabomdq@6674
   250
elseif(ASSERTIONS STREQUAL "paranoid")
gabomdq@6674
   251
  set(SDL_DEFAULT_ASSERT_LEVEL 3)
gabomdq@6674
   252
else()
gabomdq@6674
   253
  message_error("unknown assertion level")
gabomdq@6674
   254
endif(ASSERTIONS STREQUAL "auto")
gabomdq@6674
   255
set(HAVE_ASSERTIONS ${ASSERTIONS})
gabomdq@6674
   256
gabomdq@6674
   257
# Compiler option evaluation
gabomdq@6674
   258
if(USE_GCC)
gabomdq@6674
   259
  if(DEPENDENCY_TRACKING)
gabomdq@6674
   260
    check_c_source_compiles("
gabomdq@6674
   261
        #if !defined(__GNUC__) || __GNUC__ < 3
gabomdq@6674
   262
        #error Dependency tracking requires GCC 3.0 or newer
gabomdq@6674
   263
        #endif
gabomdq@6674
   264
        int main(int argc, char **argv) { }" HAVE_DEPENDENCY_TRACKING)
gabomdq@6674
   265
  endif(DEPENDENCY_TRACKING)
gabomdq@6674
   266
gabomdq@6674
   267
  if(GCC_ATOMICS)
gabomdq@6674
   268
    check_c_source_compiles("int main(int argc, char **argv) {
gabomdq@6674
   269
        int a;
gabomdq@6674
   270
        void *x, *y, *z;
gabomdq@6674
   271
        __sync_lock_test_and_set(&a, 4);
gabomdq@6674
   272
        __sync_lock_test_and_set(&x, y);
gabomdq@6674
   273
        __sync_fetch_and_add(&a, 1);
gabomdq@6674
   274
        __sync_bool_compare_and_swap(&a, 5, 10);
gabomdq@6674
   275
        __sync_bool_compare_and_swap(&x, y, z); }" HAVE_GCC_ATOMICS)
gabomdq@6674
   276
    if(NOT HAVE_GCC_ATOMICS)
gabomdq@6674
   277
      check_c_source_compiles("int main(int argc, char **argv) {
gabomdq@6674
   278
          int a;
gabomdq@6674
   279
          __sync_lock_test_and_set(&a, 1);
gabomdq@6674
   280
          __sync_lock_release(&a); }" HAVE_GCC_SYNC_LOCK_TEST_AND_SET)
gabomdq@6674
   281
    endif(NOT HAVE_GCC_ATOMICS)
gabomdq@6674
   282
  endif(GCC_ATOMICS)
gabomdq@6674
   283
gabomdq@6674
   284
  set(CMAKE_REQUIRED_FLAGS "-mpreferred-stack-boundary=2")
gabomdq@6674
   285
  check_c_source_compiles("int x = 0; int main(int argc, char **argv) {}"
gabomdq@6674
   286
    HAVE_GCC_PREFERRED_STACK_BOUNDARY)
gabomdq@6674
   287
  set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   288
gabomdq@6674
   289
  set(CMAKE_REQUIRED_FLAGS "-fvisibility=hidden -Werror")
gabomdq@6674
   290
  check_c_source_compiles("
gabomdq@6674
   291
      #if !defined(__GNUC__) || __GNUC__ < 4
gabomdq@6674
   292
      #error SDL only uses visibility attributes in GCC 4 or newer
gabomdq@6674
   293
      #endif
gabomdq@6674
   294
      int main(int argc, char **argv) {}" HAVE_GCC_FVISIBILITY)
gabomdq@6674
   295
  if(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   296
    list(APPEND EXTRA_CFLAGS "-fvisibility=hidden")
gabomdq@6674
   297
  endif(HAVE_GCC_FVISIBILITY)
gabomdq@6674
   298
  set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   299
gabomdq@6674
   300
  check_c_compiler_flag(-Wall HAVE_GCC_WALL)
gabomdq@6674
   301
  if(HAVE_GCC_WALL)
gabomdq@6674
   302
    if(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
gabomdq@6674
   303
      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-multichar")
gabomdq@6674
   304
    endif(CMAKE_SYSTEM_NAME MATCHES "Haiku|BeOS")
gabomdq@6674
   305
  endif(HAVE_GCC_WALL)
gabomdq@6674
   306
endif(USE_GCC)
gabomdq@6674
   307
gabomdq@6674
   308
if(ASSEMBLY)
gabomdq@6674
   309
  if(USE_GCC OR USE_CLANG)
gabomdq@6674
   310
    set(SDL_ASSEMBLY_ROUTINES 1)
gabomdq@6674
   311
    # TODO: Those all seem to be quite GCC specific - needs to be
gabomdq@6674
   312
    # reworked for better compiler support
gabomdq@6674
   313
    set(HAVE_ASSEMBLY TRUE)
gabomdq@6674
   314
    if(MMX)
gabomdq@6674
   315
      set(CMAKE_REQUIRED_FLAGS "-mmmx")
gabomdq@6674
   316
      check_c_source_compiles("
gabomdq@6674
   317
          #ifdef __MINGW32__
gabomdq@6674
   318
          #include <_mingw.h>
gabomdq@6674
   319
          #ifdef __MINGW64_VERSION_MAJOR
gabomdq@6674
   320
          #include <intrin.h>
gabomdq@6674
   321
          #else
gabomdq@6674
   322
          #include <mmintrin.h>
gabomdq@6674
   323
          #endif
gabomdq@6674
   324
          #else
gabomdq@6674
   325
          #include <mmintrin.h>
gabomdq@6674
   326
          #endif
gabomdq@6674
   327
          #ifndef __MMX__
gabomdq@6674
   328
          #error Assembler CPP flag not enabled
gabomdq@6674
   329
          #endif
gabomdq@6674
   330
          int main(int argc, char **argv) { }" HAVE_MMX)
gabomdq@6674
   331
      if(HAVE_MMX)
gabomdq@6674
   332
        list(APPEND EXTRA_CFLAGS "-mmmx")
gabomdq@6674
   333
      endif(HAVE_MMX)
gabomdq@6674
   334
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   335
    endif(MMX)
gabomdq@6674
   336
gabomdq@6674
   337
    if(3DNOW)
gabomdq@6674
   338
      set(CMAKE_REQUIRED_FLAGS "-m3dnow")
gabomdq@6674
   339
      check_c_source_compiles("
gabomdq@6674
   340
          #include <mm3dnow.h>
gabomdq@6674
   341
          #ifndef __3dNOW__
gabomdq@6674
   342
          #error Assembler CPP flag not enabled
gabomdq@6674
   343
          #endif
gabomdq@6674
   344
          int main(int argc, char **argv) {
gabomdq@6674
   345
            void *p = 0;
gabomdq@6674
   346
            _m_prefetch(p);
gabomdq@6674
   347
          }" HAVE_3DNOW)
gabomdq@6674
   348
      if(HAVE_3DNOW)
gabomdq@6674
   349
        list(APPEND EXTRA_CFLAGS "-m3dnow")
gabomdq@6674
   350
      endif(HAVE_3DNOW)
gabomdq@6674
   351
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   352
    endif(3DNOW)
gabomdq@6674
   353
gabomdq@6674
   354
    if(SSE)
gabomdq@6674
   355
      set(CMAKE_REQUIRED_FLAGS "-msse")
gabomdq@6674
   356
      check_c_source_compiles("
gabomdq@6674
   357
          #ifdef __MINGW32__
gabomdq@6674
   358
          #include <_mingw.h>
gabomdq@6674
   359
          #ifdef __MINGW64_VERSION_MAJOR
gabomdq@6674
   360
          #include <intrin.h>
gabomdq@6674
   361
          #else
gabomdq@6674
   362
          #include <xmmintrin.h>
gabomdq@6674
   363
          #endif
gabomdq@6674
   364
          #else
gabomdq@6674
   365
          #include <xmmintrin.h>
gabomdq@6674
   366
          #endif
gabomdq@6674
   367
          #ifndef __SSE__
gabomdq@6674
   368
          #error Assembler CPP flag not enabled
gabomdq@6674
   369
          #endif
gabomdq@6674
   370
          int main(int argc, char **argv) { }" HAVE_SSE)
gabomdq@6674
   371
      if(HAVE_SSE)
gabomdq@6674
   372
        list(APPEND EXTRA_CFLAGS "-msse")
gabomdq@6674
   373
      endif(HAVE_SSE)
gabomdq@6674
   374
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   375
    endif(SSE)
gabomdq@6674
   376
gabomdq@6674
   377
    if(SSE2)
gabomdq@6674
   378
      set(CMAKE_REQUIRED_FLAGS "-msse2")
gabomdq@6674
   379
      check_c_source_compiles("
gabomdq@6674
   380
          #ifdef __MINGW32__
gabomdq@6674
   381
          #include <_mingw.h>
gabomdq@6674
   382
          #ifdef __MINGW64_VERSION_MAJOR
gabomdq@6674
   383
          #include <intrin.h>
gabomdq@6674
   384
          #else
gabomdq@6674
   385
          #include <emmintrin.h>
gabomdq@6674
   386
          #endif
gabomdq@6674
   387
          #else
gabomdq@6674
   388
          #include <emmintrin.h>
gabomdq@6674
   389
          #endif
gabomdq@6674
   390
          #ifndef __SSE2__
gabomdq@6674
   391
          #error Assembler CPP flag not enabled
gabomdq@6674
   392
          #endif
gabomdq@6674
   393
          int main(int argc, char **argv) { }" HAVE_SSE2)
gabomdq@6674
   394
      if(HAVE_SSE2)
gabomdq@6674
   395
        list(APPEND EXTRA_CFLAGS "-msse2")
gabomdq@6674
   396
      endif(HAVE_SSE2)
gabomdq@6674
   397
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   398
    endif(SSE2)
gabomdq@6674
   399
gabomdq@6674
   400
    if(SSEMATH)
gabomdq@6674
   401
      if(SSE OR SSE2)
gabomdq@6674
   402
        if(USE_GCC)
gabomdq@6674
   403
          list(APPEND EXTRA_CFLAGS "-mfpmath=387")
gabomdq@6674
   404
        endif(USE_GCC)
gabomdq@6674
   405
        set(HAVE_SSEMATH TRUE)
gabomdq@6674
   406
      endif(SSE OR SSE2)
gabomdq@6674
   407
    endif(SSEMATH)
gabomdq@6674
   408
gabomdq@6674
   409
    if(ALTIVEC)
gabomdq@6674
   410
      set(CMAKE_REQUIRED_FLAGS "-maltivec")
gabomdq@6674
   411
      check_c_source_compiles("
gabomdq@6674
   412
          #include <altivec.h>
gabomdq@6674
   413
          vector unsigned int vzero() {
gabomdq@6674
   414
              return vec_splat_u32(0);
gabomdq@6674
   415
          }
gabomdq@6674
   416
          int main(int argc, char **argv) { }" HAVE_ALTIVEC_H_HDR)
gabomdq@6674
   417
      check_c_source_compiles("
gabomdq@6674
   418
          vector unsigned int vzero() {
gabomdq@6674
   419
              return vec_splat_u32(0);
gabomdq@6674
   420
          }
gabomdq@6674
   421
          int main(int argc, char **argv) { }" HAVE_ALTIVEC)
gabomdq@6674
   422
      set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   423
      if(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
gabomdq@6674
   424
        set(HAVE_ALTIVEC TRUE) # if only HAVE_ALTIVEC_H_HDR is set
gabomdq@6674
   425
        list(APPEND EXTRA_CFLAGS "-maltivec")
gabomdq@6674
   426
        set(SDL_ALTIVEC_BLITTERS 1)
gabomdq@6674
   427
        if(HAVE_ALTIVEC_H_HDR)
gabomdq@6674
   428
          set(HAVE_ALTIVEC_H 1)
gabomdq@6674
   429
        endif(HAVE_ALTIVEC_H_HDR)
gabomdq@6674
   430
      endif(HAVE_ALTIVEC OR HAVE_ALTIVEC_H_HDR)
gabomdq@6674
   431
    endif(ALTIVEC)
gabomdq@6674
   432
  elseif(MSVC_VERSION GREATER 1500)
gabomdq@6674
   433
    # TODO: SDL_cpuinfo.h needs to support the user's configuration wish
gabomdq@6674
   434
    # for MSVC - right now it is always activated
gabomdq@6674
   435
    if(NOT ARCH_64)
gabomdq@6674
   436
      set(HAVE_MMX TRUE)
gabomdq@6674
   437
      set(HAVE_3DNOW TRUE)
gabomdq@6674
   438
    endif(NOT ARCH_64)
gabomdq@6674
   439
    set(HAVE_SSE TRUE)
gabomdq@6674
   440
    set(HAVE_SSE2 TRUE)
gabomdq@6674
   441
    set(SDL_ASSEMBLY_ROUTINES 1)
gabomdq@6674
   442
  endif(USE_GCC OR USE_CLANG)
gabomdq@6674
   443
# TODO:
gabomdq@6674
   444
#else(ASSEMBLY)
gabomdq@6674
   445
#  if(USE_GCC OR USE_CLANG)
gabomdq@6674
   446
#    list(APPEND EXTRA_CFLAGS "-mno-sse" "-mno-sse2" "-mno-mmx")
gabomdq@6674
   447
#  endif(USE_GCC OR USE_CLANG)
gabomdq@6674
   448
endif(ASSEMBLY)
gabomdq@6674
   449
gabomdq@6674
   450
# TODO: Can't deactivate on FreeBSD? w/o LIBC, SDL_stdinc.h can't define
gabomdq@6674
   451
# anything.
gabomdq@6674
   452
if(LIBC)
gabomdq@6674
   453
  if(WINDOWS AND NOT MINGW)
gabomdq@6674
   454
    set(HAVE_LIBC TRUE)
gabomdq@6674
   455
    foreach(_HEADER stdio.h string.h ctype.h math.h)
gabomdq@6674
   456
      string(TOUPPER "HAVE_${_HEADER}" _UPPER)
gabomdq@6674
   457
      string(REPLACE "." "_" _HAVE_H ${_UPPER})
gabomdq@6674
   458
      set(${_HAVE_H} 1)
gabomdq@6674
   459
    endforeach()
gabomdq@6674
   460
    set(HAVE_SIGNAL_H 1)
gabomdq@6674
   461
    foreach(_FN
gabomdq@6674
   462
            malloc calloc realloc free qsort abs memset memcpy memmove memcmp
gabomdq@6674
   463
            strlen _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
gabomdq@6674
   464
            _ultoa strtol strtoul strtoll strtod atoi atof strcmp strncmp
gabomdq@6674
   465
            _stricmp _strnicmp sscanf atan atan2 ceil copysign cos cosf fabs
gabomdq@6674
   466
            floor log pow scalbn sin sinf sqrt)
gabomdq@6674
   467
      string(TOUPPER ${_FN} _UPPER)
gabomdq@6674
   468
      set(HAVE_${_UPPER} 1)
gabomdq@6674
   469
    endforeach()
gabomdq@6674
   470
    if(NOT CYGWIN AND NOT MINGW)
gabomdq@6674
   471
      set(HAVE_ALLOCA 1)
gabomdq@6674
   472
    endif(NOT CYGWIN AND NOT MINGW)
gabomdq@6674
   473
    set(HAVE_M_PI 1)
gabomdq@6674
   474
    add_definitions(-D_USE_MATH_DEFINES) # needed for M_PI
gabomdq@6674
   475
    set(STDC_HEADERS 1)
gabomdq@6674
   476
  else(WINDOWS AND NOT MINGW)
gabomdq@6674
   477
    set(HAVE_LIBC TRUE)
gabomdq@6674
   478
    check_include_file(sys/types.h HAVE_SYS_TYPES_H)
gabomdq@6674
   479
    foreach(_HEADER
gabomdq@6674
   480
            stdio.h stdlib.h stddef.h stdarg.h malloc.h memory.h string.h
gabomdq@6674
   481
            strings.h inttypes.h stdint.h ctype.h math.h iconv.h signal.h)
gabomdq@6674
   482
      string(TOUPPER "HAVE_${_HEADER}" _UPPER)
gabomdq@6674
   483
      string(REPLACE "." "_" _HAVE_H ${_UPPER})
gabomdq@6674
   484
      check_include_file("${_HEADER}" ${_HAVE_H})
gabomdq@6674
   485
    endforeach()
gabomdq@6674
   486
gabomdq@6674
   487
    check_include_files("dlfcn.h;stdint.h;stddef.h;inttypes.h;stdlib.h;strings.h;string.h;float.h" STDC_HEADERS)
gabomdq@6674
   488
    check_type_size("size_t" SIZEOF_SIZE_T)
gabomdq@6674
   489
    check_symbol_exists(M_PI math.h HAVE_M_PI)
gabomdq@6674
   490
    # TODO: refine the mprotect check
gabomdq@6674
   491
    check_c_source_compiles("#include <sys/types.h>
gabomdq@6674
   492
                             #include <sys/mman.h>
gabomdq@6674
   493
                             int main() { }" HAVE_MPROTECT)
gabomdq@6674
   494
    foreach(_FN
gabomdq@6674
   495
            strtod malloc calloc realloc free getenv setenv putenv unsetenv
gabomdq@6674
   496
            qsort abs bcopy memset memcpy memmove memcmp strlen strlcpy strlcat
gabomdq@6674
   497
            strdup _strrev _strupr _strlwr strchr strrchr strstr itoa _ltoa
gabomdq@6674
   498
            _uitoa _ultoa strtol strtoul _i64toa _ui64toa strtoll strtoull
gabomdq@6674
   499
            atoi atof strcmp strncmp _stricmp strcasecmp _strnicmp strncasecmp
gabomdq@6674
   500
            sscanf snprintf vsnprintf fseeko fseeko64 sigaction setjmp
gabomdq@6674
   501
            nanosleep sysconf sysctlbyname
gabomdq@6674
   502
            )
gabomdq@6674
   503
      string(TOUPPER ${_FN} _UPPER)
gabomdq@6674
   504
      set(_HAVEVAR "HAVE_${_UPPER}")
gabomdq@6674
   505
      check_function_exists("${_FN}" ${_HAVEVAR})
gabomdq@6674
   506
    endforeach()
gabomdq@6674
   507
gabomdq@6674
   508
    check_library_exists(m pow "" HAVE_LIBM)
gabomdq@6674
   509
    if(HAVE_LIBM)
gabomdq@6674
   510
      set(CMAKE_REQUIRED_LIBRARIES m)
gabomdq@6674
   511
      foreach(_FN
gabomdq@6674
   512
              atan atan2 ceil copysign cos cosf fabs floor log pow scalbn sin
gabomdq@6674
   513
              sinf sqrt)
gabomdq@6674
   514
        string(TOUPPER ${_FN} _UPPER)
gabomdq@6674
   515
        set(_HAVEVAR "HAVE_${_UPPER}")
gabomdq@6674
   516
        check_function_exists("${_FN}" ${_HAVEVAR})
gabomdq@6674
   517
      endforeach()
gabomdq@6674
   518
      set(CMAKE_REQUIRED_LIBRARIES)
gabomdq@6674
   519
      list(APPEND EXTRA_LIBS m)
gabomdq@6674
   520
    endif(HAVE_LIBM)
gabomdq@6674
   521
gabomdq@6674
   522
    check_library_exists(iconv iconv_open "" HAVE_LIBICONV)
gabomdq@6674
   523
    if(HAVE_LIBICONV)
gabomdq@6674
   524
      list(APPEND EXTRA_LIBS iconv)
gabomdq@6674
   525
    endif(HAVE_LIBICONV)
gabomdq@6674
   526
gabomdq@6674
   527
    check_struct_has_member("struct sigaction" "sa_sigaction" "signal.h" HAVE_SA_SIGACTION)
gabomdq@6674
   528
  endif(WINDOWS AND NOT MINGW)
gabomdq@6674
   529
else(LIBC)
gabomdq@6674
   530
  if(WINDOWS)
gabomdq@6674
   531
    set(HAVE_STDARG_H 1)
gabomdq@6674
   532
    set(HAVE_STDDEF_H 1)
gabomdq@6674
   533
  endif(WINDOWS)
gabomdq@6674
   534
endif(LIBC)
gabomdq@6674
   535
gabomdq@6674
   536
gabomdq@6674
   537
# Enable/disable various subsystems of the SDL library
gabomdq@6674
   538
foreach(_SUB ${SDL_SUBSYSTEMS})
gabomdq@6674
   539
  string(TOUPPER ${_SUB} _OPT)
gabomdq@6674
   540
  if(NOT SDL_${_OPT})
gabomdq@6674
   541
    set(SDL_${_OPT}_DISABLED 1)
gabomdq@6674
   542
  endif(NOT SDL_${_OPT})
gabomdq@6674
   543
endforeach()
gabomdq@6674
   544
if(SDL_JOYSTICK)
gabomdq@6674
   545
  file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/*.c)
gabomdq@6674
   546
  set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
gabomdq@6674
   547
endif(SDL_JOYSTICK)
gabomdq@6674
   548
if(SDL_HAPTIC)
gabomdq@6674
   549
  if(NOT SDL_JOYSTICK)
gabomdq@6674
   550
    # Haptic requires some private functions from the joystick subsystem.
gabomdq@6674
   551
    message_error("SDL_HAPTIC requires SDL_JOYSTICK, which is not enabled")
gabomdq@6674
   552
  endif(NOT SDL_JOYSTICK)
gabomdq@6674
   553
  file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/*.c)
gabomdq@6674
   554
  set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
gabomdq@6674
   555
endif(SDL_HAPTIC)
gabomdq@6674
   556
if(SDL_POWER)
gabomdq@6674
   557
  file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/*.c)
gabomdq@6674
   558
  set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
gabomdq@6674
   559
endif(SDL_POWER)
gabomdq@6674
   560
# TODO: in configure.in, the test for LOADSO and SDL_DLOPEN is a bit weird:
gabomdq@6674
   561
# if LOADSO is not wanted, SDL_LOADSO_DISABLED is set
gabomdq@6674
   562
# If however on Unix or APPLE dlopen() is detected via CheckDLOPEN(),
gabomdq@6674
   563
# SDL_LOADSO_DISABLED will not be set, regardless of the LOADSO settings
gabomdq@6674
   564
gabomdq@6674
   565
# General SDL subsystem options, valid for all platforms
gabomdq@6674
   566
if(SDL_AUDIO)
gabomdq@6674
   567
  # CheckDummyAudio/CheckDiskAudio - valid for all platforms
gabomdq@6674
   568
  if(DUMMYAUDIO)
gabomdq@6674
   569
    set(SDL_AUDIO_DRIVER_DUMMY 1)
gabomdq@6674
   570
    file(GLOB DUMMYAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/dummy/*.c)
gabomdq@6674
   571
    set(SOURCE_FILES ${SOURCE_FILES} ${DUMMYAUDIO_SOURCES})
gabomdq@6674
   572
    set(HAVE_DUMMYAUDIO TRUE)
gabomdq@6674
   573
  endif(DUMMYAUDIO)
gabomdq@6674
   574
  if(DISKAUDIO)
gabomdq@6674
   575
    set(SDL_AUDIO_DRIVER_DISK 1)
gabomdq@6674
   576
    file(GLOB DISKAUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/disk/*.c)
gabomdq@6674
   577
    set(SOURCE_FILES ${SOURCE_FILES} ${DISKAUDIO_SOURCES})
gabomdq@6674
   578
    set(HAVE_DISKAUDIO TRUE)
gabomdq@6674
   579
  endif(DISKAUDIO)
gabomdq@6674
   580
endif(SDL_AUDIO)
gabomdq@6674
   581
gabomdq@6674
   582
if(SDL_DLOPEN)
gabomdq@6674
   583
  # Relevant for Unix/Darwin only
gabomdq@6674
   584
  if(UNIX OR APPLE)
gabomdq@6674
   585
    CheckDLOPEN()
gabomdq@6674
   586
  endif(UNIX OR APPLE)
gabomdq@6674
   587
endif(SDL_DLOPEN)
gabomdq@6674
   588
gabomdq@6674
   589
if(SDL_VIDEO)
gabomdq@6674
   590
  if(VIDEO_DUMMY)
gabomdq@6674
   591
    set(SDL_VIDEO_DRIVER_DUMMY 1)
gabomdq@6674
   592
    file(GLOB VIDEO_DUMMY_SOURCES ${SDL2_SOURCE_DIR}/src/video/dummy/*.c)
gabomdq@6674
   593
    set(SOURCE_FILES ${SOURCE_FILES} ${VIDEO_DUMMY_SOURCES})
gabomdq@6674
   594
    set(HAVE_VIDEO_DUMMY TRUE)
gabomdq@6674
   595
    set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   596
  endif(VIDEO_DUMMY)
gabomdq@6674
   597
endif(SDL_VIDEO)
gabomdq@6674
   598
gabomdq@6674
   599
# Platform-specific options and settings
gabomdq@6674
   600
if(UNIX AND NOT APPLE)
gabomdq@6674
   601
  if(SDL_AUDIO)
gabomdq@6674
   602
    if(SYSV5 OR SOLARIS OR HPUX)
gabomdq@6674
   603
        set(SDL_AUDIO_DRIVER_SUNAUDIO 1)
gabomdq@6674
   604
        file(GLOB SUN_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/sun/*.c)
gabomdq@6674
   605
        set(SOURCE_FILES ${SOURCE_FILES} ${SUN_AUDIO_SOURCES})
gabomdq@6674
   606
        set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   607
    elseif(NETBSD OR OPENBSD)
gabomdq@6674
   608
        set(SDL_AUDIO_DRIVER_BSD 1)
gabomdq@6674
   609
        file(GLOB BSD_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/bsd/*.c)
gabomdq@6674
   610
        set(SOURCE_FILES ${SOURCE_FILES} ${BSD_AUDIO_SOURCES})
gabomdq@6674
   611
        set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   612
    elseif(AIX)
gabomdq@6674
   613
        set(SDL_AUDIO_DRIVER_PAUDIO 1)
gabomdq@6674
   614
        file(GLOB AIX_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/paudio/*.c)
gabomdq@6674
   615
        set(SOURCE_FILES ${SOURCE_FILES} ${AIX_AUDIO_SOURCES})
gabomdq@6674
   616
        set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   617
    endif()
gabomdq@6674
   618
    CheckOSS()
gabomdq@6674
   619
    CheckALSA()
gabomdq@6674
   620
    CheckPulseAudio()
gabomdq@6674
   621
    CheckESD()
gabomdq@6674
   622
    CheckARTS()
gabomdq@6674
   623
    CheckNAS()
gabomdq@6674
   624
    CheckFusionSound()
gabomdq@6674
   625
  endif(SDL_AUDIO)
gabomdq@6674
   626
gabomdq@6674
   627
  if(SDL_VIDEO)
gabomdq@6674
   628
    CheckX11()
gabomdq@6674
   629
    CheckDirectFB()
gabomdq@6674
   630
    CheckOpenGLX11()
gabomdq@6674
   631
    CheckOpenGLESX11()
gabomdq@6674
   632
  endif(SDL_VIDEO)
gabomdq@6674
   633
icculus@6729
   634
  if(LINUX)
gabomdq@6674
   635
    check_c_source_compiles("
gabomdq@6674
   636
        #include <linux/input.h>
gabomdq@6674
   637
        #ifndef EVIOCGNAME
gabomdq@6674
   638
        #error EVIOCGNAME() ioctl not available
gabomdq@6674
   639
        #endif
gabomdq@6674
   640
        int main(int argc, char** argv) {}" HAVE_INPUT_EVENTS)
gabomdq@6674
   641
    if(HAVE_INPUT_EVENTS)
gabomdq@6674
   642
      set(SDL_INPUT_LINUXEV 1)
gabomdq@6674
   643
    endif(HAVE_INPUT_EVENTS)
gabomdq@6674
   644
icculus@6729
   645
    if(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
gabomdq@6674
   646
      set(SDL_HAPTIC_LINUX 1)
gabomdq@6674
   647
      file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/linux/*.c)
gabomdq@6674
   648
      set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
gabomdq@6674
   649
      set(HAVE_SDL_HAPTIC TRUE)
icculus@6729
   650
    endif(SDL_HAPTIC AND HAVE_INPUT_EVENTS)
icculus@6734
   651
icculus@6734
   652
    check_include_file("libudev.h" HAVE_LIBUDEV_H)
icculus@6734
   653
  endif(LINUX)
gabomdq@6674
   654
gabomdq@6674
   655
  if(INPUT_TSLIB)
gabomdq@6674
   656
    check_c_source_compiles("
gabomdq@6674
   657
        #include \"tslib.h\"
gabomdq@6674
   658
        int main(int argc, char** argv) { }" HAVE_INPUT_TSLIB)
gabomdq@6674
   659
    if(HAVE_INPUT_TSLIB)
gabomdq@6674
   660
      set(SDL_INPUT_TSLIB 1)
gabomdq@6674
   661
      list(APPEND EXTRA_LIBS ts)
gabomdq@6674
   662
    endif(HAVE_INPUT_TSLIB)
gabomdq@6674
   663
  endif(INPUT_TSLIB)
gabomdq@6674
   664
gabomdq@6674
   665
  if(SDL_JOYSTICK)
gabomdq@6674
   666
    CheckUSBHID()   # seems to be BSD specific - limit the test to BSD only?
gabomdq@6674
   667
    if(LINUX)
gabomdq@6674
   668
      set(SDL_JOYSTICK_LINUX 1)
gabomdq@6674
   669
      file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/linux/*.c)
gabomdq@6674
   670
      set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
gabomdq@6674
   671
      set(HAVE_SDL_JOYSTICK TRUE)
gabomdq@6674
   672
    endif(LINUX)
gabomdq@6674
   673
  endif(SDL_JOYSTICK)
gabomdq@6674
   674
gabomdq@6674
   675
  CheckPTHREAD()
gabomdq@6674
   676
gabomdq@6674
   677
  if(CLOCK_GETTIME)
gabomdq@6674
   678
    check_library_exists(rt clock_gettime "" FOUND_CLOCK_GETTIME)
gabomdq@6674
   679
    if(FOUND_CLOCK_GETTIME)
gabomdq@6674
   680
      list(APPEND EXTRA_LIBS rt)
gabomdq@6674
   681
      set(HAVE_CLOCK_GETTIME 1)
gabomdq@6674
   682
    else(FOUND_CLOCK_GETTIME)
gabomdq@6674
   683
      check_library_exists(c clock_gettime "" FOUND_CLOCK_GETTIME)
gabomdq@6674
   684
      if(FOUND_CLOCK_GETTIME)
gabomdq@6674
   685
        set(HAVE_CLOCK_GETTIME 1)
gabomdq@6674
   686
      endif(FOUND_CLOCK_GETTIME)
gabomdq@6674
   687
    endif(HAVE_CLOCK_GETTIME)
gabomdq@6674
   688
  endif(CLOCK_GETTIME)
gabomdq@6674
   689
gabomdq@6674
   690
  check_include_file(linux/version.h HAVE_LINUX_VERSION_H)
gabomdq@6674
   691
  if(HAVE_LINUX_VERSION_H)
gabomdq@6674
   692
    set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DHAVE_LINUX_VERSION_H")
gabomdq@6674
   693
  endif(HAVE_LINUX_VERSION_H)
gabomdq@6674
   694
gabomdq@6674
   695
  if(SDL_POWER)
gabomdq@6674
   696
    if(LINUX)
gabomdq@6674
   697
      set(SDL_POWER_LINUX 1)
gabomdq@6674
   698
      file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/linux/*.c)
gabomdq@6674
   699
      set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
gabomdq@6674
   700
      set(HAVE_SDL_POWER TRUE)
gabomdq@6674
   701
    endif(LINUX)
gabomdq@6674
   702
  endif(SDL_POWER)
gabomdq@6674
   703
gabomdq@6674
   704
  if(SDL_TIMERS)
gabomdq@6674
   705
    set(SDL_TIMER_UNIX 1)
gabomdq@6674
   706
    file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/unix/*.c)
gabomdq@6674
   707
    set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
gabomdq@6674
   708
    set(HAVE_SDL_TIMERS TRUE)
gabomdq@6674
   709
  endif(SDL_TIMERS)
gabomdq@6674
   710
gabomdq@6674
   711
  if(RPATH)
gabomdq@6674
   712
    set(SDL_RLD_FLAGS "")
gabomdq@6674
   713
    if(BSDI OR FREEBSD OR LINUX OR NETBSD)
gabomdq@6674
   714
      set(SDL_RLD_FLAGS "-Wl,-rpath,\${libdir}")
gabomdq@6674
   715
    elseif(SOLARIS)
gabomdq@6674
   716
      set(SDL_RLD_FLAGS "-R\${libdir}")
gabomdq@6674
   717
    endif()
gabomdq@6674
   718
    set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
gabomdq@6674
   719
    set(HAVE_RPATH TRUE)
gabomdq@6674
   720
  endif(RPATH)
gabomdq@6674
   721
gabomdq@6674
   722
elseif(WINDOWS)
gabomdq@6674
   723
  find_program(WINDRES windres)
gabomdq@6674
   724
gabomdq@6674
   725
  check_c_source_compiles("
gabomdq@6674
   726
    #include <windows.h>
gabomdq@6674
   727
    int main(int argc, char **argv) { }" HAVE_WIN32_CC)
gabomdq@6674
   728
gabomdq@6674
   729
  file(GLOB WIN_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
gabomdq@6674
   730
  set(SOURCE_FILES ${SOURCE_FILES} ${WIN_SOURCES})
gabomdq@6674
   731
gabomdq@6674
   732
  # Check for DirectX
gabomdq@6674
   733
  if(DIRECTX)
gabomdq@6674
   734
    if("$ENV{DXSDK_DIR}" STREQUAL "")
gabomdq@6674
   735
      message_error("DIRECTX requires the \$DXSDK_DIR environment variable to be set")
gabomdq@6674
   736
    endif("$ENV{DXSDK_DIR}" STREQUAL "")
gabomdq@6674
   737
    set(CMAKE_REQUIRED_FLAGS "/I\"$ENV{DXSDK_DIR}\\Include\"")
gabomdq@6674
   738
    check_include_file(d3d9.h HAVE_D3D_H)
gabomdq@6674
   739
    check_include_file(ddraw.h HAVE_DDRAW_H)
gabomdq@6674
   740
    check_include_file(dsound.h HAVE_DSOUND_H)
gabomdq@6674
   741
    check_include_file(dinput.h HAVE_DINPUT_H)
gabomdq@6674
   742
    check_include_file(xaudio2.h HAVE_XAUDIO2_H)
gabomdq@6674
   743
    if(HAVE_D3D_H OR HAVE_DDRAW_H OR HAVE_DSOUND_H OR HAVE_DINPUT_H OR HAVE_XAUDIO2_H)
gabomdq@6674
   744
      set(HAVE_DIRECTX TRUE)
gabomdq@6674
   745
      # TODO: change $ENV{DXSDL_DIR} to get the path from the include checks
gabomdq@6674
   746
      link_directories($ENV{DXSDK_DIR}\\lib\\${PROCESSOR_ARCH})
gabomdq@6674
   747
      include_directories($ENV{DXSDK_DIR}\\Include)
gabomdq@6674
   748
    endif()
gabomdq@6674
   749
    set(CMAKE_REQUIRED_FLAGS)
gabomdq@6674
   750
  endif(DIRECTX)
gabomdq@6674
   751
gabomdq@6674
   752
  if(SDL_AUDIO)
gabomdq@6674
   753
    set(SDL_AUDIO_DRIVER_WINMM 1)
gabomdq@6674
   754
    file(GLOB WINMM_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/winmm/*.c)
gabomdq@6674
   755
    set(SOURCE_FILES ${SOURCE_FILES} ${WINMM_AUDIO_SOURCES})
gabomdq@6674
   756
    set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   757
gabomdq@6674
   758
    if(HAVE_DSOUND_H)
gabomdq@6674
   759
      set(SDL_AUDIO_DRIVER_DSOUND 1)
gabomdq@6674
   760
      file(GLOB DSOUND_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/directsound/*.c)
gabomdq@6674
   761
      set(SOURCE_FILES ${SOURCE_FILES} ${DSOUND_AUDIO_SOURCES})
gabomdq@6674
   762
    endif(HAVE_DSOUND_H)
gabomdq@6674
   763
gabomdq@6674
   764
    if(HAVE_XAUDIO2_H)
gabomdq@6674
   765
      set(SDL_AUDIO_DRIVER_XAUDIO2 1)
gabomdq@6674
   766
      file(GLOB XAUDIO2_AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/xaudio2/*.c)
gabomdq@6674
   767
      set(SOURCE_FILES ${SOURCE_FILES} ${XAUDIO2_AUDIO_SOURCES})
gabomdq@6674
   768
    endif(HAVE_XAUDIO2_H)
gabomdq@6674
   769
  endif(SDL_AUDIO)
gabomdq@6674
   770
gabomdq@6674
   771
  if(SDL_VIDEO)
gabomdq@6674
   772
    # requires SDL_LOADSO on Windows (IME, DX, etc.)
gabomdq@6674
   773
    if(NOT SDL_LOADSO)
gabomdq@6674
   774
      message_error("SDL_VIDEO requires SDL_LOADSO, which is not enabled")
gabomdq@6674
   775
    endif(NOT SDL_LOADSO)
gabomdq@6674
   776
    set(SDL_VIDEO_DRIVER_WINDOWS 1)
gabomdq@6674
   777
    file(GLOB WIN_VIDEO_SOURCES ${SDL2_SOURCE_DIR}/src/video/windows/*.c)
gabomdq@6674
   778
    set(SOURCE_FILES ${SOURCE_FILES} ${WIN_VIDEO_SOURCES})
gabomdq@6674
   779
gabomdq@6674
   780
    if(RENDER_D3D AND HAVE_D3D_H)
gabomdq@6674
   781
      set(SDL_VIDEO_RENDER_D3D 1)
gabomdq@6674
   782
      set(HAVE_RENDER_D3D TRUE)
gabomdq@6674
   783
    endif(RENDER_D3D AND HAVE_D3D_H)
gabomdq@6674
   784
    set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   785
  endif(SDL_VIDEO)
gabomdq@6674
   786
gabomdq@6674
   787
  if(SDL_THREADS)
gabomdq@6674
   788
    set(SDL_THREAD_WINDOWS 1)
gabomdq@6674
   789
    set(SOURCE_FILES ${SOURCE_FILES}
gabomdq@6674
   790
      ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_sysmutex.c
gabomdq@6674
   791
      ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_syssem.c
gabomdq@6674
   792
      ${SDL2_SOURCE_DIR}/src/thread/windows/SDL_systhread.c
gabomdq@6674
   793
      ${SDL2_SOURCE_DIR}/src/thread/generic/SDL_syscond.c)
gabomdq@6674
   794
    set(HAVE_SDL_THREADS TRUE)
gabomdq@6674
   795
  endif(SDL_THREADS)
gabomdq@6674
   796
gabomdq@6674
   797
  if(SDL_POWER)
gabomdq@6674
   798
    set(SDL_POWER_WINDOWS 1)
gabomdq@6674
   799
    set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/power/windows/SDL_syspower.c)
gabomdq@6674
   800
    set(HAVE_SDL_POWER TRUE)
gabomdq@6674
   801
  endif(SDL_POWER)
gabomdq@6674
   802
gabomdq@6674
   803
  # Libraries for Win32 native and MinGW
gabomdq@6674
   804
  list(APPEND EXTRA_LIBS user32 gdi32 winmm imm32 ole32 oleaut32 version uuid)
gabomdq@6674
   805
gabomdq@6674
   806
  # TODO: in configure.in the check for timers is set on
gabomdq@6674
   807
  # cygwin | mingw32* - does this include mingw32CE?
gabomdq@6674
   808
  if(SDL_TIMERS)
gabomdq@6674
   809
    set(SDL_TIMER_WINDOWS 1)
gabomdq@6674
   810
    file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/windows/*.c)
gabomdq@6674
   811
    set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
gabomdq@6674
   812
    set(HAVE_SDL_TIMERS TRUE)
gabomdq@6674
   813
  endif(SDL_TIMERS)
gabomdq@6674
   814
gabomdq@6674
   815
  if(SDL_LOADSO)
gabomdq@6674
   816
    set(SDL_LOADSO_WINDOWS 1)
gabomdq@6674
   817
    file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/windows/*.c)
gabomdq@6674
   818
    set(SOURCE_FILES ${SOURCE_FILES} ${LOADSO_SOURCES})
gabomdq@6674
   819
    set(HAVE_SDL_LOADSO TRUE)
gabomdq@6674
   820
  endif(SDL_LOADSO)
gabomdq@6674
   821
gabomdq@6674
   822
  file(GLOB CORE_SOURCES ${SDL2_SOURCE_DIR}/src/core/windows/*.c)
gabomdq@6674
   823
  set(SOURCE_FILES ${SOURCE_FILES} ${CORE_SOURCES})
gabomdq@6674
   824
gabomdq@6674
   825
  if(SDL_VIDEO)
gabomdq@6674
   826
    if(VIDEO_OPENGL)
gabomdq@6674
   827
      set(SDL_VIDEO_OPENGL 1)
gabomdq@6674
   828
      set(SDL_VIDEO_OPENGL_WGL 1)
gabomdq@6674
   829
      set(SDL_VIDEO_RENDER_OGL 1)
gabomdq@6674
   830
      set(HAVE_VIDEO_OPENGL TRUE)
gabomdq@6674
   831
    endif(VIDEO_OPENGL)
gabomdq@6674
   832
  endif(SDL_VIDEO)
gabomdq@6674
   833
gabomdq@6674
   834
  if(SDL_JOYSTICK)
gabomdq@6674
   835
    if(HAVE_DINPUT_H)
gabomdq@6674
   836
      set(SDL_JOYSTICK_DINPUT 1)
gabomdq@6674
   837
      set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_dxjoystick.c)
gabomdq@6674
   838
      list(APPEND EXTRA_LIBS dinput8 dxguid dxerr)
gabomdq@6674
   839
    else()
gabomdq@6674
   840
      set(SDL_JOYSTICK_WINMM 1)
gabomdq@6674
   841
      set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/joystick/windows/SDL_mmjoystick.c)
gabomdq@6674
   842
    endif(HAVE_DINPUT_H)
gabomdq@6674
   843
    set(HAVE_SDL_JOYSTICK TRUE)
gabomdq@6674
   844
  endif(SDL_JOYSTICK)
gabomdq@6674
   845
gabomdq@6674
   846
  if(SDL_HAPTIC AND HAVE_DINPUT_H)
gabomdq@6674
   847
    set(SDL_HAPTIC_DINPUT 1)
gabomdq@6674
   848
    set(SOURCE_FILES ${SOURCE_FILES} ${SDL2_SOURCE_DIR}/src/haptic/windows/SDL_syshaptic.c)
gabomdq@6674
   849
    set(HAVE_SDL_HAPTIC TRUE)
gabomdq@6674
   850
  endif(SDL_HAPTIC AND HAVE_DINPUT_H)
gabomdq@6674
   851
gabomdq@6674
   852
  file(GLOB VERSION_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.rc)
gabomdq@6674
   853
  file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/windows/*.c)
gabomdq@6674
   854
  if(MINGW OR CYGWIN)
gabomdq@6674
   855
    list(APPEND EXTRA_LIBS mingw32)
gabomdq@6674
   856
    list(APPEND EXTRA_LDFLAGS "-mwindows")
gabomdq@6674
   857
    set(SDL_CFLAGS "${SDL_CFLAGS} -Dmain=SDL_main")
gabomdq@6674
   858
    list(APPEND SDL_LIBS "-lmingw32" "-lSDL2main" "-mwindows")
gabomdq@6674
   859
  endif(MINGW OR CYGWIN)
gabomdq@6674
   860
elseif(APPLE)
gabomdq@6674
   861
  # TODO: rework this for proper MacOS X, iOS and Darwin support
gabomdq@6674
   862
gabomdq@6674
   863
  # Requires the darwin file implementation
gabomdq@6674
   864
  if(SDL_FILE)
gabomdq@6674
   865
    file(GLOB EXTRA_SOURCES ${PROJECT_SOURCE_DIR}/src/file/cocoa/*.m)
gabomdq@6674
   866
    set(SOURCE_FILES ${EXTRA_SOURCES} ${SOURCE_FILES})
gabomdq@6674
   867
    set_source_files_properties(${EXTRA_SOURCES} PROPERTIES LANGUAGE C)
gabomdq@6674
   868
    set(HAVE_SDL_FILE TRUE)
gabomdq@6674
   869
    set(SDL_FRAMEWORK_COCOA 1)
gabomdq@6674
   870
  else()
gabomdq@6674
   871
    message_error("SDL_FILE must be enabled to build on MacOS X")
gabomdq@6674
   872
  endif()
gabomdq@6674
   873
gabomdq@6674
   874
  if(SDL_AUDIO)
gabomdq@6674
   875
    set(MACOSX_COREAUDIO 1)
gabomdq@6674
   876
    file(GLOB AUDIO_SOURCES ${SDL2_SOURCE_DIR}/src/audio/coreaudio/*.c)
gabomdq@6674
   877
    set(SOURCE_FILES ${SOURCE_FILES} ${AUDIO_SOURCES})
gabomdq@6674
   878
    set(HAVE_SDL_AUDIO TRUE)
gabomdq@6674
   879
    set(SDL_FRAMEWORK_COREAUDIO 1)
gabomdq@6674
   880
    set(SDL_FRAMEWORK_AUDIOUNIT 1)
gabomdq@6674
   881
  endif()
gabomdq@6674
   882
gabomdq@6674
   883
  if(SDL_JOYSTICK)
gabomdq@6674
   884
    set(SDL_JOYSTICK_IOKIT 1)
gabomdq@6674
   885
    file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/darwin/*.c)
gabomdq@6674
   886
    set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
gabomdq@6674
   887
    set(HAVE_SDL_JOYSTICK TRUE)
gabomdq@6674
   888
    set(SDL_FRAMEWORK_IOKIT 1)
gabomdq@6674
   889
    set(SDL_FRAMEWORK_FF 1)
gabomdq@6674
   890
  endif()
gabomdq@6674
   891
gabomdq@6674
   892
  if(SDL_HAPTIC)
gabomdq@6674
   893
    set(SDL_HAPTIC_IOKIT 1)
gabomdq@6674
   894
    file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/darwin/*.c)
gabomdq@6674
   895
    set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
gabomdq@6674
   896
    set(HAVE_SDL_HAPTIC TRUE)
gabomdq@6674
   897
    set(SDL_FRAMEWORK_IOKIT 1)
gabomdq@6674
   898
    set(SDL_FRAMEWORK_FF 1)
gabomdq@6674
   899
    if(NOT SDL_JOYSTICK)
gabomdq@6674
   900
      message(FATAL_ERROR "SDL_HAPTIC requires SDL_JOYSTICK to be enabled")
gabomdq@6674
   901
    endif()
gabomdq@6674
   902
  endif()
gabomdq@6674
   903
gabomdq@6674
   904
  if(SDL_POWER)
gabomdq@6674
   905
    set(SDL_POWER_MACOSX 1)
gabomdq@6674
   906
    file(GLOB POWER_SOURCES ${SDL2_SOURCE_DIR}/src/power/macosx/*.c)
gabomdq@6674
   907
    set(SOURCE_FILES ${SOURCE_FILES} ${POWER_SOURCES})
gabomdq@6674
   908
    set(HAVE_SDL_POWER TRUE)
gabomdq@6674
   909
    set(SDL_FRAMEWORK_CARBON 1)
gabomdq@6674
   910
    set(SDL_FRAMEWORK_IOKIT 1)
gabomdq@6674
   911
  endif()
gabomdq@6674
   912
gabomdq@6674
   913
  # Actually load the frameworks at the end so we don't duplicate include.
gabomdq@6674
   914
  if(SDL_FRAMEWORK_COCOA)
gabomdq@6674
   915
    find_library(COCOA_LIBRARY Cocoa)
gabomdq@6674
   916
    list(APPEND EXTRA_LIBS ${COCOA_LIBRARY})
gabomdq@6674
   917
  endif()
gabomdq@6674
   918
  if(SDL_FRAMEWORK_IOKIT)
gabomdq@6674
   919
    find_library(IOKIT IOKit)
gabomdq@6674
   920
    list(APPEND EXTRA_LIBS ${IOKIT})
gabomdq@6674
   921
  endif()
gabomdq@6674
   922
  if(SDL_FRAMEWORK_FF)
gabomdq@6674
   923
    find_library(FORCEFEEDBACK ForceFeedback)
gabomdq@6674
   924
    list(APPEND EXTRA_LIBS ${FORCEFEEDBACK})
gabomdq@6674
   925
  endif()
gabomdq@6674
   926
  if(SDL_FRAMEWORK_CARBON)
gabomdq@6674
   927
    find_library(CARBON_LIBRARY Carbon)
gabomdq@6674
   928
    list(APPEND EXTRA_LIBS ${CARBON_LIBRARY})
gabomdq@6674
   929
  endif()
gabomdq@6674
   930
  if(SDL_FRAMEWORK_COREAUDIO)
gabomdq@6674
   931
    find_library(COREAUDIO CoreAudio)
gabomdq@6674
   932
    list(APPEND EXTRA_LIBS ${COREAUDIO})
gabomdq@6674
   933
  endif()
gabomdq@6674
   934
  if(SDL_FRAMEWORK_AUDIOUNIT)
gabomdq@6674
   935
    find_library(AUDIOUNIT AudioUnit)
gabomdq@6674
   936
    list(APPEND EXTRA_LIBS ${AUDIOUNIT})
gabomdq@6674
   937
  endif()
gabomdq@6674
   938
gabomdq@6674
   939
  # iOS hack needed - http://code.google.com/p/ios-cmake/ ?
gabomdq@6674
   940
  if(SDL_VIDEO)
gabomdq@6674
   941
    CheckCOCOA()
gabomdq@6674
   942
    if(VIDEO_OPENGL)
gabomdq@6674
   943
      set(SDL_VIDEO_OPENGL 1)
gabomdq@6674
   944
      set(SDL_VIDEO_OPENGL_CGL 1)
gabomdq@6674
   945
      set(SDL_VIDEO_RENDER_OGL 1)
gabomdq@6674
   946
      if(DARWIN)
gabomdq@6674
   947
        find_library(OpenGL_LIBRARY OpenGL)
gabomdq@6674
   948
        list(APPEND EXTRA_LIBRARIES ${OpenGL_LIBRARY})
gabomdq@6674
   949
      endif(DARWIN)
gabomdq@6674
   950
      set(HAVE_VIDEO_OPENGL TRUE)
gabomdq@6674
   951
    endif(VIDEO_OPENGL)
gabomdq@6674
   952
  endif(SDL_VIDEO)
gabomdq@6674
   953
gabomdq@6674
   954
  CheckPTHREAD()
gabomdq@6674
   955
elseif(BEOS)
gabomdq@6674
   956
  if(SDL_VIDEO)
gabomdq@6674
   957
    set(SDL_VIDEO_DRIVER_BWINDOW 1)
gabomdq@6674
   958
    file(GLOB BWINDOW_SOURCES ${SDL2_SOURCE_DIR}/src/video/bwindow/*.c)
gabomdq@6674
   959
    set(SOURCE_FILES ${SOURCE_FILES} ${BWINDOW_SOURCES})
gabomdq@6674
   960
    set(HAVE_SDL_VIDEO TRUE)
gabomdq@6674
   961
gabomdq@6674
   962
    if(VIDEO_OPENGL)
gabomdq@6674
   963
      # TODO: Use FIND_PACKAGE(OpenGL) instead
gabomdq@6674
   964
      set(SDL_VIDEO_OPENGL 1)
gabomdq@6674
   965
      set(SDL_VIDEO_OPENGL_BGL 1)
gabomdq@6674
   966
      set(SDL_VIDEO_RENDER_OGL 1)
gabomdq@6674
   967
      list(APPEND EXTRA_LIBS GL)
gabomdq@6674
   968
      set(HAVE_VIDEO_OPENGL TRUE)
gabomdq@6674
   969
    endif(VIDEO_OPENGL)
gabomdq@6674
   970
  endif(SDL_VIDEO)
gabomdq@6674
   971
endif()
gabomdq@6674
   972
gabomdq@6674
   973
# Dummies
gabomdq@6674
   974
# configure.in does it differently:
gabomdq@6674
   975
# if not have X
gabomdq@6674
   976
#   if enable_X {  SDL_X_DISABLED = 1 }
gabomdq@6674
   977
#   [add dummy sources]
gabomdq@6674
   978
# so it always adds a dummy, without checking, if it was actually requested.
gabomdq@6674
   979
# This leads to missing internal references on building, since the
gabomdq@6674
   980
# src/X/*.c does not get included.
gabomdq@6674
   981
if(NOT HAVE_SDL_JOYSTICK)
gabomdq@6674
   982
  set(SDL_JOYSTICK_DISABLED 1)
gabomdq@6674
   983
  if(SDL_JOYSTICK AND NOT APPLE) # results in unresolved symbols on OSX
gabomdq@6674
   984
gabomdq@6674
   985
    file(GLOB JOYSTICK_SOURCES ${SDL2_SOURCE_DIR}/src/joystick/dummy/*.c)
gabomdq@6674
   986
    set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
gabomdq@6674
   987
  endif()
gabomdq@6674
   988
endif(NOT HAVE_SDL_JOYSTICK)
gabomdq@6674
   989
if(NOT HAVE_SDL_HAPTIC)
gabomdq@6674
   990
  set(SDL_HAPTIC_DISABLED 1)
gabomdq@6674
   991
  file(GLOB HAPTIC_SOURCES ${SDL2_SOURCE_DIR}/src/haptic/dummy/*.c)
gabomdq@6674
   992
  set(SOURCE_FILES ${SOURCE_FILES} ${HAPTIC_SOURCES})
gabomdq@6674
   993
endif(NOT HAVE_SDL_HAPTIC)
gabomdq@6674
   994
if(NOT HAVE_SDL_LOADSO)
gabomdq@6674
   995
  set(SDL_LOADSO_DISABLED 1)
gabomdq@6674
   996
  file(GLOB LOADSO_SOURCES ${SDL2_SOURCE_DIR}/src/loadso/dummy/*.c)
gabomdq@6674
   997
  set(SOURCE_FILES ${SOURCE_FILES} ${JOYSTICK_SOURCES})
gabomdq@6674
   998
endif(NOT HAVE_SDL_LOADSO)
gabomdq@6674
   999
gabomdq@6674
  1000
# We always need to have threads and timers around
gabomdq@6674
  1001
if(NOT HAVE_SDL_THREADS)
gabomdq@6674
  1002
  set(SDL_THREADS_DISABLED 1)
gabomdq@6674
  1003
  file(GLOB THREADS_SOURCES ${SDL2_SOURCE_DIR}/src/thread/generic/*.c)
gabomdq@6674
  1004
  set(SOURCE_FILES ${SOURCE_FILES} ${THREADS_SOURCES})
gabomdq@6674
  1005
endif(NOT HAVE_SDL_THREADS)
gabomdq@6674
  1006
if(NOT HAVE_SDL_TIMERS)
gabomdq@6674
  1007
  set(SDL_TIMERS_DISABLED 1)
gabomdq@6674
  1008
  file(GLOB TIMER_SOURCES ${SDL2_SOURCE_DIR}/src/timer/dummy/*.c)
gabomdq@6674
  1009
  set(SOURCE_FILES ${SOURCE_FILES} ${TIMER_SOURCES})
gabomdq@6674
  1010
endif(NOT HAVE_SDL_TIMERS)
gabomdq@6674
  1011
gabomdq@6674
  1012
if(NOT SDLMAIN_SOURCES)
gabomdq@6674
  1013
  file(GLOB SDLMAIN_SOURCES ${SDL2_SOURCE_DIR}/src/main/dummy/*.c)
gabomdq@6674
  1014
endif(NOT SDLMAIN_SOURCES)
gabomdq@6674
  1015
gabomdq@6674
  1016
# Append the -MMD -MT flags
gabomdq@6674
  1017
# if(DEPENDENCY_TRACKING)
gabomdq@6674
  1018
#   if(COMPILER_IS_GNUCC)
gabomdq@6674
  1019
#     set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -MMD -MT \$@")
gabomdq@6674
  1020
#   endif(COMPILER_IS_GNUCC)
gabomdq@6674
  1021
# endif(DEPENDENCY_TRACKING)
gabomdq@6674
  1022
gabomdq@6674
  1023
configure_file("${SDL2_SOURCE_DIR}/include/SDL_config.h.cmake"
gabomdq@6674
  1024
  "${SDL2_BINARY_DIR}/include/SDL_config.h")
gabomdq@6674
  1025
gabomdq@6674
  1026
# Prepare the flags and remove duplicates
gabomdq@6674
  1027
if(EXTRA_LDFLAGS)
gabomdq@6674
  1028
  list(REMOVE_DUPLICATES EXTRA_LDFLAGS)
gabomdq@6674
  1029
endif(EXTRA_LDFLAGS)
gabomdq@6674
  1030
if(EXTRA_LIBS)
gabomdq@6674
  1031
  list(REMOVE_DUPLICATES EXTRA_LIBS)
gabomdq@6674
  1032
endif(EXTRA_LIBS)
gabomdq@6674
  1033
if(EXTRA_CFLAGS)
gabomdq@6674
  1034
  list(REMOVE_DUPLICATES EXTRA_CFLAGS)
gabomdq@6674
  1035
endif(EXTRA_CFLAGS)
gabomdq@6674
  1036
listtostr(EXTRA_CFLAGS _EXTRA_CFLAGS)
gabomdq@6674
  1037
set(EXTRA_CFLAGS ${_EXTRA_CFLAGS})
gabomdq@6674
  1038
gabomdq@6674
  1039
# Compat helpers for the configuration files
gabomdq@6674
  1040
if(NOT WINDOWS OR CYGWIN)
gabomdq@6674
  1041
  # TODO: we need a Windows script, too
gabomdq@6674
  1042
  execute_process(COMMAND sh ${SDL2_SOURCE_DIR}/build-scripts/updaterev.sh)
gabomdq@6674
  1043
gabomdq@6674
  1044
  set(prefix ${CMAKE_INSTALL_PREFIX})
gabomdq@6674
  1045
  set(exec_prefix "\${prefix}")
gabomdq@6674
  1046
  set(libdir "\${exec_prefix}/lib${LIB_SUFFIX}")
gabomdq@6674
  1047
  set(bindir "\${exec_prefix}/bin")
gabomdq@6674
  1048
  set(includedir "\${prefix}/include")
gabomdq@6674
  1049
  if(SDL_STATIC)
gabomdq@6674
  1050
    set(ENABLE_STATIC_TRUE "")
gabomdq@6674
  1051
    set(ENABLE_STATIC_FALSE "#")
gabomdq@6674
  1052
  else(SDL_STATIC)
gabomdq@6674
  1053
    set(ENABLE_STATIC_TRUE "#")
gabomdq@6674
  1054
    set(ENABLE_STATIC_FALSE "")
gabomdq@6674
  1055
  endif(SDL_STATIC)
gabomdq@6674
  1056
  if(SDL_SHARED)
gabomdq@6674
  1057
    set(ENABLE_SHARED_TRUE "")
gabomdq@6674
  1058
    set(ENABLE_SHARED_FALSE "#")
gabomdq@6674
  1059
  else(SDL_SHARED)
gabomdq@6674
  1060
    set(ENABLE_SHARED_TRUE "#")
gabomdq@6674
  1061
    set(ENABLE_SHARED_FALSE "")
gabomdq@6674
  1062
  endif(SDL_SHARED)
gabomdq@6674
  1063
gabomdq@6674
  1064
  # Clean up the different lists
gabomdq@6674
  1065
  listtostr(EXTRA_LIBS _EXTRA_LIBS "-l")
gabomdq@6674
  1066
  set(SDL_STATIC_LIBS ${SDL_LIBS} ${EXTRA_LDFLAGS} ${_EXTRA_LIBS})
gabomdq@6674
  1067
  list(REMOVE_DUPLICATES SDL_STATIC_LIBS)
gabomdq@6674
  1068
  listtostr(SDL_STATIC_LIBS _SDL_STATIC_LIBS)
gabomdq@6674
  1069
  set(SDL_STATIC_LIBS ${_SDL_STATIC_LIBS})
gabomdq@6674
  1070
  listtostr(SDL_LIBS _SDL_LIBS)
gabomdq@6674
  1071
  set(SDL_LIBS ${_SDL_LIBS})
gabomdq@6674
  1072
gabomdq@6674
  1073
  # MESSAGE(STATUS "SDL_LIBS: ${SDL_LIBS}")
gabomdq@6674
  1074
  # MESSAGE(STATUS "SDL_STATIC_LIBS: ${SDL_STATIC_LIBS}")
gabomdq@6674
  1075
gabomdq@6674
  1076
  configure_file("${SDL2_SOURCE_DIR}/sdl2.pc.in"
gabomdq@6674
  1077
    "${SDL2_BINARY_DIR}/sdl2.pc" @ONLY)
gabomdq@6674
  1078
  configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
gabomdq@6674
  1079
    "${SDL2_BINARY_DIR}/sdl2-config")
gabomdq@6674
  1080
  configure_file("${SDL2_SOURCE_DIR}/sdl2-config.in"
gabomdq@6674
  1081
    "${SDL2_BINARY_DIR}/sdl2-config" @ONLY)
gabomdq@6674
  1082
  configure_file("${SDL2_SOURCE_DIR}/SDL2.spec.in"
gabomdq@6674
  1083
    "${SDL2_BINARY_DIR}/SDL2.spec" @ONLY)
gabomdq@6674
  1084
endif(NOT WINDOWS OR CYGWIN)
gabomdq@6674
  1085
gabomdq@6674
  1086
##### Info output #####
gabomdq@6674
  1087
message(STATUS "")
gabomdq@6674
  1088
message(STATUS "SDL2 was configured with the following options:")
gabomdq@6674
  1089
message(STATUS "")
gabomdq@6674
  1090
message(STATUS "Platform: ${CMAKE_SYSTEM}")
gabomdq@6674
  1091
message(STATUS "64-bit:   ${ARCH_64}")
gabomdq@6674
  1092
message(STATUS "Compiler: ${CMAKE_C_COMPILER}")
gabomdq@6674
  1093
message(STATUS "")
gabomdq@6674
  1094
message(STATUS "Subsystems:")
gabomdq@6674
  1095
foreach(_SUB ${SDL_SUBSYSTEMS})
gabomdq@6674
  1096
  string(TOUPPER ${_SUB} _OPT)
gabomdq@6674
  1097
  message_bool_option(${_SUB} SDL_${_OPT})
gabomdq@6674
  1098
endforeach()
gabomdq@6674
  1099
message(STATUS "")
gabomdq@6674
  1100
message(STATUS "Options:")
gabomdq@6674
  1101
list(SORT ALLOPTIONS)
gabomdq@6674
  1102
foreach(_OPT ${ALLOPTIONS})
gabomdq@6674
  1103
  # Longest option is VIDEO_X11_XSCREENSAVER = 22 characters
gabomdq@6674
  1104
  # Get the padding
gabomdq@6674
  1105
  string(LENGTH ${_OPT} _OPTLEN)
gabomdq@6674
  1106
  math(EXPR _PADLEN "23 - ${_OPTLEN}")
gabomdq@6674
  1107
  string(RANDOM LENGTH ${_PADLEN} ALPHABET " " _PADDING)
gabomdq@6674
  1108
  message_tested_option(${_OPT} ${_PADDING})
gabomdq@6674
  1109
endforeach()
gabomdq@6674
  1110
message(STATUS "")
gabomdq@6674
  1111
message(STATUS " CFLAGS:        ${CMAKE_C_FLAGS}")
gabomdq@6674
  1112
message(STATUS " EXTRA_CFLAGS:  ${EXTRA_CFLAGS}")
gabomdq@6674
  1113
message(STATUS " EXTRA_LDFLAGS: ${EXTRA_LDFLAGS}")
gabomdq@6674
  1114
message(STATUS " EXTRA_LIBS:    ${EXTRA_LIBS}")
gabomdq@6674
  1115
message(STATUS "")
gabomdq@6674
  1116
message(STATUS " Build Shared Library: ${SDL_SHARED}")
gabomdq@6674
  1117
message(STATUS " Build Static Library: ${SDL_STATIC}")
gabomdq@6674
  1118
message(STATUS "")
gabomdq@6674
  1119
if(UNIX)
gabomdq@6674
  1120
  message(STATUS "Something was not detected, although your are sure that it")
gabomdq@6674
  1121
  message(STATUS "has been properly installed? Then make sure, you have set")
gabomdq@6674
  1122
  message(STATUS "the CFLAGS and LDFLAGS environment variables correctly.")
gabomdq@6674
  1123
  message(STATUS "")
gabomdq@6674
  1124
endif(UNIX)
gabomdq@6674
  1125
gabomdq@6674
  1126
# Ensure that the extra cflags are used at compile time
gabomdq@6674
  1127
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
gabomdq@6674
  1128
gabomdq@6674
  1129
# Always build SDLmain
gabomdq@6674
  1130
add_library(SDL2main STATIC ${SDLMAIN_SOURCES})
gabomdq@6674
  1131
set(_INSTALL_LIBS "SDL2main")
gabomdq@6674
  1132
gabomdq@6674
  1133
if(SDL_SHARED)
gabomdq@6674
  1134
  add_library(SDL2 SHARED ${SOURCE_FILES})
gabomdq@6674
  1135
  set_target_properties(SDL2 PROPERTIES
gabomdq@6674
  1136
    VERSION ${SDL_VERSION}
gabomdq@6674
  1137
    SOVERSION ${LT_CURRENT})
gabomdq@6674
  1138
 set(_INSTALL_LIBS "SDL2" ${_INSTALL_LIBS})
gabomdq@6674
  1139
 target_link_libraries(SDL2 ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
gabomdq@6674
  1140
endif(SDL_SHARED)
gabomdq@6674
  1141
gabomdq@6674
  1142
if(SDL_STATIC)
gabomdq@6674
  1143
  add_library(SDL2-static STATIC ${SOURCE_FILES})
gabomdq@6674
  1144
  set_target_properties(SDL2-static PROPERTIES OUTPUT_NAME "SDL2")
gabomdq@6674
  1145
  # TODO: Win32 platforms keep the same suffix .lib for import and static
gabomdq@6674
  1146
  # libraries - do we need to consider this?
gabomdq@6674
  1147
  set(_INSTALL_LIBS "SDL2-static" ${_INSTALL_LIBS})
gabomdq@6674
  1148
  target_link_libraries(SDL2-static ${EXTRA_LIBS} ${EXTRA_LDFLAGS})
gabomdq@6674
  1149
endif(SDL_STATIC)
gabomdq@6674
  1150
gabomdq@6674
  1151
##### Installation targets #####
gabomdq@6674
  1152
install(TARGETS ${_INSTALL_LIBS}
gabomdq@6674
  1153
  LIBRARY DESTINATION "lib${LIB_SUFFIX}"
gabomdq@6674
  1154
  ARCHIVE DESTINATION "lib${LIB_SUFFIX}")
gabomdq@6674
  1155
gabomdq@6674
  1156
file(GLOB INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/*.h)
gabomdq@6674
  1157
file(GLOB BIN_INCLUDE_FILES ${SDL2_BINARY_DIR}/include/*.h)
gabomdq@6674
  1158
foreach(_FNAME ${BIN_INCLUDE_FILES})
gabomdq@6674
  1159
  get_filename_component(_INCNAME ${_FNAME} NAME)
gabomdq@6674
  1160
  list(REMOVE_ITEM INCLUDE_FILES ${SDL2_SOURCE_DIR}/include/${_INCNAME})
gabomdq@6674
  1161
endforeach()
gabomdq@6674
  1162
list(APPEND INCLUDE_FILES ${BIN_INCLUDE_FILES})
gabomdq@6674
  1163
install(FILES ${INCLUDE_FILES} DESTINATION include/SDL2)
gabomdq@6674
  1164
gabomdq@6674
  1165
if(NOT WINDOWS OR CYGWIN)
gabomdq@6674
  1166
  if(FREEBSD)
gabomdq@6674
  1167
    # FreeBSD uses ${PREFIX}/libdata/pkgconfig
gabomdq@6674
  1168
    install(FILES ${SDL2_BINARY_DIR}/sdl2.pc DESTINATION "libdata/pkgconfig")
gabomdq@6674
  1169
  else(FREEBSD)
gabomdq@6674
  1170
    install(FILES ${SDL2_BINARY_DIR}/sdl2.pc
gabomdq@6674
  1171
      DESTINATION "lib${LIB_SUFFIX}/pkgconfig")
gabomdq@6674
  1172
  endif(FREEBSD)
gabomdq@6674
  1173
  install(PROGRAMS ${SDL2_BINARY_DIR}/sdl2-config DESTINATION bin)
gabomdq@6674
  1174
  # TODO: what about the .spec file? Is it only needed for RPM creation?
gabomdq@6674
  1175
endif(NOT WINDOWS OR CYGWIN)