CMakeLists.txt
author Sam Lantinga
Sun, 22 Jun 2014 11:02:56 -0700
changeset 8910 c23ffe72934c
parent 8874 48d4f2d74d67
child 9073 98d13a381299
permissions -rw-r--r--
Partial fix for bug 2556 - add compilation flag -Wshadow

I added -Wshadow and then turned it off again because of massive variable shadowing in the blit macros.

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