diff options
Diffstat (limited to 'Modules/FindSDL.cmake')
-rw-r--r-- | Modules/FindSDL.cmake | 129 |
1 files changed, 113 insertions, 16 deletions
diff --git a/Modules/FindSDL.cmake b/Modules/FindSDL.cmake index d0a450f..24a7214 100644 --- a/Modules/FindSDL.cmake +++ b/Modules/FindSDL.cmake @@ -2,32 +2,129 @@ # This module defines # SDL_LIBRARY, the name of the library to link against # SDL_FOUND, if false, do not try to link to SDL -# SDL_INCLUDE_DIR, where to find SDL/SDL.h +# 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 +# though it is not necessarily visible in the UI. (Maybe somebody else +# can fix this.) # # $SDLDIR is an environment variable that would # correspond to the ./configure --prefix=$SDLDIR # used in building SDL. # l.e.galup 9-20-02 - - - -IF (UNIX) - - FIND_LIBRARY(SDL_LIBRARY SDL +# +# 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 <SDL/SDL.h>. This is done for portability +# reasons because not all systems place things in SDL/ (see FreeBSD). +FIND_PATH(SDL_INCLUDE_DIR SDL.h + ~/Library/Frameworks/SDL.framework/Headers + /Library/Frameworks/SDL.framework/Headers + $ENV{SDLDIR}/include + /usr/include/SDL + /usr/include/SDL12 + /usr/include/SDL11 + /usr/include + /usr/local/include/SDL + /usr/local/include/SDL12 + /usr/local/include/SDL11 + /usr/local/include + /sw/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") +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 + NAMES SDL SDL-1.1 + PATHS $ENV{SDLDIR}/lib /usr/lib /usr/local/lib - ) + /sw/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 + PATHS + $ENV{SDLDIR}/lib + /usr/lib + /usr/local/lib + /sw/lib + ) +ENDIF(${SDL_INCLUDE_DIR} MATCHES ".framework") - FIND_PATH( SDL_INCLUDE_DIR SDL/SDL.h - $ENV{SDLDIR}/include - /usr/include - /usr/local/include - ) +# 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) -ENDIF (UNIX) +# 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" ) +SET(SDL_FOUND "NO") IF(SDL_LIBRARY) - SET( SDL_FOUND "YES" ) + # For SDLmain + IF(SDLMAIN_LIBRARY) + SET(SDL_LIBRARY ${SDLMAIN_LIBRARY} ${SDL_LIBRARY}) + 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 ${SDL_LIBRARY} "-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 ${SDL_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + ENDIF(NOT APPLE) + + # For MinGW library + IF(MINGW) + SET(SDL_LIBRARY ${MINGW32_LIBRARY} ${SDL_LIBRARY}) + ENDIF(MINGW) + + SET(SDL_FOUND "YES") ENDIF(SDL_LIBRARY) + |