CMakeLists.txt
author Ryan C. Gordon <icculus@icculus.org>
Mon, 03 Feb 2014 11:59:17 -0500
changeset 8161 6c5d35c8b3dd
parent 8153 3e43c73ac79b
child 8194 aada7c5bd410
permissions -rw-r--r--
Temporarily default Wayland and Mir to disabled, for 2.0.2 release.

We'll flip the default back to enabled right after 2.0.2 is finalized, and
try to declare them stable and ready by 2.0.3.

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