CMakeLists.txt
author Sam Lantinga <slouken@libsdl.org>
Wed, 02 Aug 2017 10:22:48 -0700
changeset 11175 cbc6a8a5b701
parent 11138 c936a84f05ba
child 11207 4ed2e42b7497
permissions -rw-r--r--
Fixed bug 3690 - SDL2 KMS/DRM render context support

Manuel

The attached patch adds support for KMS/DRM context graphics.

It builds with no problem on X86_64 GNU/Linux systems, provided the needed libraries are present, and on ARM GNU/Linux systems that have KMS/DRM support and a GLES2 implementation.
Tested on Raspberry Pi: KMS/DRM is what the Raspberry Pi will use as default in the near future, once the propietary DispmanX API by Broadcom is overtaken by open graphics stack, it's possible to boot current Raspbian system in KMS mode by adding "dtoverlay=vc4-kms-v3d" to config.txt on Raspbian's boot partition.
X86 systems use KMS right away in every current GNU/Linux system.

Simple build instructions:

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