# - Locate the SDL library # This module defines # SDL_LIBRARY, the library to link against # SDL_FOUND, if false, do not try to link to SDL # SDL_INCLUDE_DIR, where to find SDL.h # # Don't forget to include SDLmain.h and SDLmain.m your project for the # OS X framework based version. (Other versions link to -lSDLmain which # this module will try to find on your behalf.) Also for OS X, this # module will automatically add the -framework Cocoa on your behalf. # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR # used in building SDL. # l.e.galup 9-20-02 # # Modified by Eric Wing. # Added new modifications to recognize OS X frameworks and # additional Unix paths (FreeBSD, etc). # Also corrected the header search path to follow "proper" SDL guidelines. # Added a search for SDLmain which is needed by some platforms. # Added a search for threads which is needed by some platforms. # Added needed compile switches for MinGW. # # On OSX, this will prefer the Framework version (if found) over others. # People will have to manually change the cache values of # SDL_LIBRARY to override this selection. # # Note that the header path has changed from SDL/SDL.h to just SDL.h # This needed to change because "proper" SDL convention # is #include "SDL.h", not . This is done for portability # reasons because not all systems place things in SDL/ (see FreeBSD). FIND_PATH(SDL_INCLUDE_DIR SDL.h $ENV{SDLDIR}/include ~/Library/Frameworks/SDL.framework/Headers /Library/Frameworks/SDL.framework/Headers /usr/local/include/SDL /usr/include/SDL /usr/local/include/SDL12 /usr/local/include/SDL11 # FreeBSD ports /usr/include/SDL12 /usr/include/SDL11 /usr/local/include /usr/include /sw/include/SDL # Fink /sw/include /opt/local/include/SDL # DarwinPorts /opt/local/include /opt/csw/include/SDL # Blastwave /opt/csw/include /opt/include/SDL /opt/include ) # I'm not sure if I should do a special casing for Apple. It is # unlikely that other Unix systems will find the framework path. # But if they do ([Next|Open|GNU]Step?), # do they want the -framework option also? IF(${SDL_INCLUDE_DIR} MATCHES ".framework") # The Cocoa framework must be linked into SDL because SDL is Cocoa based. # Remember that the OS X framework version expects you to drop in # SDLmain.h and SDLmain.m directly into your project. # (Cocoa link moved to bottom of this script.) # SET (SDL_LIBRARY "-framework SDL -framework Cocoa" CACHE STRING "SDL framework for OSX") # SET(SDL_LIBRARY "-framework SDL" CACHE STRING "SDL framework for OSX") # Extract the path the framework resides in so we can use it for the -F flag STRING(REGEX REPLACE "(.*)/.*\\.framework/.*" "\\1" SDL_FRAMEWORK_PATH_TEMP ${SDL_INCLUDE_DIR}) IF("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" ) # String is in default search path, don't need to use -F SET(SDL_LIBRARY_TEMP "-framework SDL") ELSE("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" ) # String is not /Library/Frameworks, need to use -F SET(SDL_LIBRARY_TEMP "-F${SDL_FRAMEWORK_PATH_TEMP} -framework SDL") ENDIF("${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/Library/Frameworks" OR "${SDL_FRAMEWORK_PATH_TEMP}" STREQUAL "/System/Library/Frameworks" ) # Clear the temp variable so nobody can see it SET(SDL_FRAMEWORK_PATH_TEMP "" CACHE INTERNAL "") ELSE(${SDL_INCLUDE_DIR} MATCHES ".framework") # SDL-1.1 is the name used by FreeBSD ports... # don't confuse it for the version number. FIND_LIBRARY(SDL_LIBRARY_TEMP NAMES SDL SDL-1.1 PATHS $ENV{SDLDIR}/lib /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) # Non-OS X framework versions expect you to also dynamically link to # SDLmain. This is mainly for Windows and OS X. Other platforms # seem to provide SDLmain for compatibility even though they don't # necessarily need it. FIND_LIBRARY(SDLMAIN_LIBRARY NAMES SDLmain SDLmain-1.1 PATHS $ENV{SDLDIR}/lib /usr/local/lib /usr/lib /sw/lib /opt/local/lib /opt/csw/lib /opt/lib ) ENDIF(${SDL_INCLUDE_DIR} MATCHES ".framework") # SDL may require threads on your system. # The Apple build may not need an explicit flag because one of the # frameworks may already provide it. # But for non-OSX systems, I will use the CMake Threads package. IF(NOT APPLE) FIND_PACKAGE(Threads) ENDIF(NOT APPLE) # MinGW needs an additional library, mwindows # It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows # (Actually on second look, I think it only needs one of the m* libraries.) IF(MINGW) SET(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW") ENDIF(MINGW) SET(SDL_FOUND "NO") IF(SDL_LIBRARY_TEMP) # For SDLmain IF(SDLMAIN_LIBRARY) SET(SDL_LIBRARY_TEMP ${SDLMAIN_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(SDLMAIN_LIBRARY) # For OS X, SDL uses Cocoa as a backend so it must link to Cocoa. # CMake doesn't display the -framework Cocoa string in the UI even # though it actually is there. I think it has something to do # with the CACHE STRING. Maybe somebody else knows how to fix this. # The problem is mainly cosmetic, and not a functional issue. IF(APPLE) SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} "-framework Cocoa") ENDIF(APPLE) # For threads, as mentioned Apple doesn't need this. # In fact, there seems to be a problem if Find the threads package # and try using this line, so I'm just skipping it entirely for OS X. IF(NOT APPLE) SET(SDL_LIBRARY_TEMP ${SDL_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT}) ENDIF(NOT APPLE) # For MinGW library IF(MINGW) SET(SDL_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL_LIBRARY_TEMP}) ENDIF(MINGW) # Set the final string here so the GUI reflects the final state. SET(SDL_LIBRARY ${SDL_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found") SET(SDL_FOUND "YES") ENDIF(SDL_LIBRARY_TEMP)