CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Sat, 16 Nov 2013 11:58:21 -0800
changeset 7999 2c9aedfba740
parent 7981 6d538bc1b395
child 8031 edf58197a910
permissions -rw-r--r--
Fixed bug 2238 - Enable GCC atomics for clang

Marcus von Appen

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