1# Locate SDL2 library 2# This module defines 3# SDL2_LIBRARY, the name of the library to link against 4# SDL2_FOUND, if false, do not try to link to SDL2 5# SDL2_INCLUDE_DIR, where to find SDL.h 6# 7# This module responds to the the flag: 8# SDL2_BUILDING_LIBRARY 9# If this is defined, then no SDL2main will be linked in because 10# only applications need main(). 11# Otherwise, it is assumed you are building an application and this 12# module will attempt to locate and set the the proper link flags 13# as part of the returned SDL2_LIBRARY variable. 14# 15# Don't forget to include SDLmain.h and SDLmain.m your project for the 16# OS X framework based version. (Other versions link to -lSDL2main which 17# this module will try to find on your behalf.) Also for OS X, this 18# module will automatically add the -framework Cocoa on your behalf. 19# 20# 21# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration 22# and no SDL2_LIBRARY, it means CMake did not find your SDL2 library 23# (SDL2.dll, libsdl2.so, SDL2.framework, etc). 24# Set SDL2_LIBRARY_TEMP to point to your SDL2 library, and configure again. 25# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value 26# as appropriate. These values are used to generate the final SDL2_LIBRARY 27# variable, but when these values are unset, SDL2_LIBRARY does not get created. 28# 29# 30# $SDL2DIR is an environment variable that would 31# correspond to the ./configure --prefix=$SDL2DIR 32# used in building SDL2. 33# l.e.galup 9-20-02 34# 35# Modified by Eric Wing. 36# Added code to assist with automated building by using environmental variables 37# and providing a more controlled/consistent search behavior. 38# Added new modifications to recognize OS X frameworks and 39# additional Unix paths (FreeBSD, etc). 40# Also corrected the header search path to follow "proper" SDL guidelines. 41# Added a search for SDL2main which is needed by some platforms. 42# Added a search for threads which is needed by some platforms. 43# Added needed compile switches for MinGW. 44# 45# On OSX, this will prefer the Framework version (if found) over others. 46# People will have to manually change the cache values of 47# SDL2_LIBRARY to override this selection or set the CMake environment 48# CMAKE_INCLUDE_PATH to modify the search paths. 49# 50# Note that the header path has changed from SDL2/SDL.h to just SDL.h 51# This needed to change because "proper" SDL convention 52# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability 53# reasons because not all systems place things in SDL2/ (see FreeBSD). 54 55#============================================================================= 56# Copyright 2003-2009 Kitware, Inc. 57# 58# Distributed under the OSI-approved BSD License (the "License"); 59# see accompanying file Copyright.txt for details. 60# 61# This software is distributed WITHOUT ANY WARRANTY; without even the 62# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 63# See the License for more information. 64#============================================================================= 65# (To distribute this file outside of CMake, substitute the full 66# License text for the above reference.) 67 68SET(SDL2_SEARCH_PATHS 69 ~/Library/Frameworks 70 /Library/Frameworks 71 /usr/local 72 /usr 73 /sw # Fink 74 /opt/local # DarwinPorts 75 /opt/csw # Blastwave 76 /opt 77) 78 79FIND_PATH(SDL2_INCLUDE_DIR SDL.h 80 HINTS 81 $ENV{SDL2DIR} 82 PATH_SUFFIXES include/SDL2 include 83 PATHS ${SDL2_SEARCH_PATHS} 84) 85 86FIND_LIBRARY(SDL2_LIBRARY_TEMP 87 NAMES SDL2 88 HINTS 89 $ENV{SDL2DIR} 90 PATH_SUFFIXES lib64 lib 91 PATHS ${SDL2_SEARCH_PATHS} 92) 93 94IF(NOT SDL2_BUILDING_LIBRARY) 95 IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") 96 # Non-OS X framework versions expect you to also dynamically link to 97 # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms 98 # seem to provide SDL2main for compatibility even though they don't 99 # necessarily need it. 100 FIND_LIBRARY(SDL2MAIN_LIBRARY 101 NAMES SDL2main 102 HINTS 103 $ENV{SDL2DIR} 104 PATH_SUFFIXES lib64 lib 105 PATHS ${SDL2_SEARCH_PATHS} 106 ) 107 ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") 108ENDIF(NOT SDL2_BUILDING_LIBRARY) 109 110# SDL2 may require threads on your system. 111# The Apple build may not need an explicit flag because one of the 112# frameworks may already provide it. 113# But for non-OSX systems, I will use the CMake Threads package. 114IF(NOT APPLE) 115 FIND_PACKAGE(Threads) 116ENDIF(NOT APPLE) 117 118# MinGW needs an additional library, mwindows 119# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows 120# (Actually on second look, I think it only needs one of the m* libraries.) 121IF(MINGW) 122 SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") 123ENDIF(MINGW) 124 125IF(SDL2_LIBRARY_TEMP) 126 # For SDL2main 127 IF(NOT SDL2_BUILDING_LIBRARY) 128 IF(SDL2MAIN_LIBRARY) 129 SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) 130 ENDIF(SDL2MAIN_LIBRARY) 131 ENDIF(NOT SDL2_BUILDING_LIBRARY) 132 133 # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. 134 # CMake doesn't display the -framework Cocoa string in the UI even 135 # though it actually is there if I modify a pre-used variable. 136 # I think it has something to do with the CACHE STRING. 137 # So I use a temporary variable until the end so I can set the 138 # "real" variable in one-shot. 139 IF(APPLE) 140 SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") 141 ENDIF(APPLE) 142 143 # For threads, as mentioned Apple doesn't need this. 144 # In fact, there seems to be a problem if I used the Threads package 145 # and try using this line, so I'm just skipping it entirely for OS X. 146 IF(NOT APPLE) 147 SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) 148 ENDIF(NOT APPLE) 149 150 # For MinGW library 151 IF(MINGW) 152 SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) 153 ENDIF(MINGW) 154 155 # Set the final string here so the GUI reflects the final state. 156 SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") 157 # Set the temp variable to INTERNAL so it is not seen in the CMake GUI 158 SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") 159ENDIF(SDL2_LIBRARY_TEMP) 160 161if(BUILD_ENGINE_JS) 162 set(SDL2_LIBRARY "sdl2_emscripten_internal" CACHE STRING "emscripten override" FORCE) 163 set(SDL2_INCLUDE_DIR "${CMAKE_SYSTEM_INCLUDE_PATH}/SDL" CACHE STRING "emscripten override" FORCE) 164endif() 165 166INCLUDE(FindPackageHandleStandardArgs) 167 168FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) 169 170