CMakeLists.txt
author David Ludwig <dludwig@pobox.com>
Sat, 29 Nov 2014 10:09:30 -0500
changeset 9247 eddb899239fe
parent 9164 494876610c49
child 9277 f0bd40782fc7
permissions -rw-r--r--
WinRT: bug and data-integrity fixes for SDL_GetPrefPath()

This change does a few things, all with regards to the WinRT implementation of
SDL_GetPrefPath():

1. it fixes a bug whereby SDL_GetPrefPath() did not create the directory it
returned. On other SDL platforms, SDL_GetPrefPath() will create separate
directories for its 'org' and 'app' folders. Without this, attempts to create
files in the pref-path would fail, unless those directories were first created
by the app, or by some other library the app used. This change makes sure
that these directories get created, before SDL_GetPrefPath() returns to its
caller(s).


2. it defaults to having SDL_GetPrefPath() return a WinRT 'Local' folder
on all platforms. Previously, for Windows Store apps, it would have used a
different, 'Roaming' folder. Files in Roaming folders can be automatically,
and synchronized across multiple devices by Windows. This synchronization can
happen while the app runs, with new files being copied into a running app's
pref-path. Unless an app is specifically designed to handle this scenario,
there is a chance that save-data could be overwritten in unwanted or
unexpected ways.

The default is now to use a Local folder, which does not get synchronized, and
which is arguably a bit safer to use. Apps that wish to use Roaming folders
can do so by setting SDL_HINT_WINRT_PREF_PATH_ROOT to "roaming", however it
is recommended that one first read Microsoft's documentation for Roaming
files, a link to which is provided in README-winrt.md.

To preserve older pref-path selection behavior (found in SDL 2.0.3, as well as
many pre-2.0.4 versions of SDL from hg.libsdl.org), which uses a Roaming path
in Windows Store apps, and a Local path in Windows Phone, set
SDL_HINT_WINRT_PREF_PATH_ROOT to "old".

Please note that Roaming paths are not supported on Windows Phone 8.0, due to
limitations in the OS itself. Attempts to use this will fail.
(Windows Phone 8.1 does not have this limitation, however.)


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