CMakeLists.txt
author Ryan C. Gordon
Wed, 10 Aug 2016 15:34:24 -0400
changeset 10278 1e7b4cfe8451
parent 10121 6b6ded44e6e0
child 10310 ac1c949c14b4
permissions -rw-r--r--
windows: directsound should also map audio device GUIDs to proper names.

Moved this code from winmm into core so both can use it.

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