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 80 NAMES 81 SDL_gesture.h # A SDL2-only header 82 HINTS 83 $ENV{SDL2DIR} 84 PATH_SUFFIXES 85 include/SDL2 86 include 87 PATHS 88 ${SDL2_SEARCH_PATHS} 89) 90 91FIND_LIBRARY(SDL2_LIBRARY_TEMP 92 NAMES SDL2 93 HINTS 94 $ENV{SDL2DIR} 95 PATH_SUFFIXES lib64 lib 96 PATHS ${SDL2_SEARCH_PATHS} 97) 98 99IF(NOT SDL2_BUILDING_LIBRARY) 100 IF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") 101 # Non-OS X framework versions expect you to also dynamically link to 102 # SDL2main. This is mainly for Windows and OS X. Other (Unix) platforms 103 # seem to provide SDL2main for compatibility even though they don't 104 # necessarily need it. 105 FIND_LIBRARY(SDL2MAIN_LIBRARY 106 NAMES SDL2main 107 HINTS 108 $ENV{SDL2DIR} 109 PATH_SUFFIXES lib64 lib 110 PATHS ${SDL2_SEARCH_PATHS} 111 ) 112 ENDIF(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework") 113ENDIF(NOT SDL2_BUILDING_LIBRARY) 114 115# SDL2 may require threads on your system. 116# The Apple build may not need an explicit flag because one of the 117# frameworks may already provide it. 118# But for non-OSX systems, I will use the CMake Threads package. 119IF(NOT APPLE) 120 FIND_PACKAGE(Threads) 121ENDIF(NOT APPLE) 122 123# MinGW needs an additional library, mwindows 124# It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows 125# (Actually on second look, I think it only needs one of the m* libraries.) 126IF(MINGW) 127 SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") 128ENDIF(MINGW) 129 130IF(SDL2_LIBRARY_TEMP) 131 # For SDL2main 132 IF(NOT SDL2_BUILDING_LIBRARY) 133 IF(SDL2MAIN_LIBRARY) 134 SET(SDL2_LIBRARY_TEMP ${SDL2MAIN_LIBRARY} ${SDL2_LIBRARY_TEMP}) 135 ENDIF(SDL2MAIN_LIBRARY) 136 ENDIF(NOT SDL2_BUILDING_LIBRARY) 137 138 # For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa. 139 # CMake doesn't display the -framework Cocoa string in the UI even 140 # though it actually is there if I modify a pre-used variable. 141 # I think it has something to do with the CACHE STRING. 142 # So I use a temporary variable until the end so I can set the 143 # "real" variable in one-shot. 144 IF(APPLE) 145 SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa") 146 ENDIF(APPLE) 147 148 # For threads, as mentioned Apple doesn't need this. 149 # In fact, there seems to be a problem if I used the Threads package 150 # and try using this line, so I'm just skipping it entirely for OS X. 151 IF(NOT APPLE) 152 SET(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) 153 ENDIF(NOT APPLE) 154 155 # For MinGW library 156 IF(MINGW) 157 SET(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP}) 158 ENDIF(MINGW) 159 160 # Set the final string here so the GUI reflects the final state. 161 SET(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found") 162 # Set the temp variable to INTERNAL so it is not seen in the CMake GUI 163 SET(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "") 164ENDIF(SDL2_LIBRARY_TEMP) 165 166INCLUDE(FindPackageHandleStandardArgs) 167 168FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR) 169