Modernize FindSDL2.cmake (SDL2::Core and SDL2::Main)
This commit is contained in:
parent
057e44d4de
commit
e320b353ad
@ -7,6 +7,20 @@ FindSDL2
|
|||||||
|
|
||||||
Locate SDL2 library
|
Locate SDL2 library
|
||||||
|
|
||||||
|
This module defines the following 'IMPORTED' targets:
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
SDL2::Core
|
||||||
|
The SDL2 library, if found.
|
||||||
|
Libraries should link to SDL2::Core
|
||||||
|
|
||||||
|
SDL2::Main
|
||||||
|
The SDL2main library, if found.
|
||||||
|
Applications should link to SDL2::Main instead of SDL2::Core
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
This module will set the following variables in your project:
|
This module will set the following variables in your project:
|
||||||
|
|
||||||
::
|
::
|
||||||
@ -40,11 +54,12 @@ This module responds to the following cache variables:
|
|||||||
SDL2main Library (.a) path.
|
SDL2main Library (.a) path.
|
||||||
|
|
||||||
SDL2_BUILDING_LIBRARY
|
SDL2_BUILDING_LIBRARY
|
||||||
If this is defined, then no SDL2main will be linked in because
|
This flag is useful only when linking to SDL2_LIBRARIES insead of
|
||||||
only applications need main().
|
SDL2::Main. It is required only when building a library that links to
|
||||||
Otherwise, it is assumed you are building an application and this
|
SDL2_LIBRARIES, because only applications need main() (No need to also
|
||||||
module will attempt to locate and set the proper link flags
|
link to SDL2main).
|
||||||
as part of the returned SDL2_LIBRARIES variable.
|
If this flag is defined, then no SDL2main will be added to SDL2_LIBRARIES
|
||||||
|
and no SDL2::Main target will be created.
|
||||||
|
|
||||||
|
|
||||||
Don't forget to include SDLmain.h and SDLmain.m in your project for the
|
Don't forget to include SDLmain.h and SDLmain.m in your project for the
|
||||||
@ -58,8 +73,9 @@ configuration, it means CMake did not find your SDL2 library
|
|||||||
(SDL2.dll, libsdl2.so, SDL2.framework, etc). Set SDL2_LIBRARY to point
|
(SDL2.dll, libsdl2.so, SDL2.framework, etc). Set SDL2_LIBRARY to point
|
||||||
to your SDL2 library, and configure again. Similarly, if you see an
|
to your SDL2 library, and configure again. Similarly, if you see an
|
||||||
empty SDL2MAIN_LIBRARY, you should set this value as appropriate. These
|
empty SDL2MAIN_LIBRARY, you should set this value as appropriate. These
|
||||||
values are used to generate the final SDL2_LIBRARIES variable, but when
|
values are used to generate the final SDL2_LIBRARIES variable and the
|
||||||
these values are unset, SDL2_LIBRARIES does not get created.
|
SDL2::Core and SDL2::Main targets, but when these values are unset,
|
||||||
|
SDL2_LIBRARIES, SDL2::Core and SDL2::Main does not get created.
|
||||||
|
|
||||||
|
|
||||||
$SDL2DIR is an environment variable that would correspond to the
|
$SDL2DIR is an environment variable that would correspond to the
|
||||||
@ -72,6 +88,8 @@ Created by Amine Ben Hassouna:
|
|||||||
Add cache variables for more flexibility:
|
Add cache variables for more flexibility:
|
||||||
SDL2_PATH, SDL2_NO_DEFAULT_PATH (for details, see doc above).
|
SDL2_PATH, SDL2_NO_DEFAULT_PATH (for details, see doc above).
|
||||||
Mark 'Threads' as a required dependency for non-OSX systems.
|
Mark 'Threads' as a required dependency for non-OSX systems.
|
||||||
|
Modernize the FindSDL2.cmake module by creating specific targets:
|
||||||
|
SDL2::Core and SDL2::Main (for details, see doc above).
|
||||||
|
|
||||||
|
|
||||||
Original FindSDL.cmake module:
|
Original FindSDL.cmake module:
|
||||||
@ -272,3 +290,60 @@ mark_as_advanced(SDL2_PATH
|
|||||||
SDL2_INCLUDE_DIR
|
SDL2_INCLUDE_DIR
|
||||||
SDL2_BUILDING_LIBRARY)
|
SDL2_BUILDING_LIBRARY)
|
||||||
|
|
||||||
|
|
||||||
|
# SDL2:: targets (SDL2::Core and SDL2::Main)
|
||||||
|
if(SDL2_FOUND)
|
||||||
|
|
||||||
|
# SDL2::Core target
|
||||||
|
if(SDL2_LIBRARY AND NOT TARGET SDL2::Core)
|
||||||
|
add_library(SDL2::Core UNKNOWN IMPORTED)
|
||||||
|
set_target_properties(SDL2::Core PROPERTIES
|
||||||
|
IMPORTED_LOCATION "${SDL2_LIBRARY}"
|
||||||
|
INTERFACE_INCLUDE_DIRECTORIES "${SDL2_INCLUDE_DIR}")
|
||||||
|
|
||||||
|
if(APPLE)
|
||||||
|
# For OS X, SDL2 uses Cocoa as a backend so it must link to Cocoa.
|
||||||
|
# For more details, please see above.
|
||||||
|
set_property(TARGET SDL2::Core APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_OPTIONS "-framework Cocoa")
|
||||||
|
else()
|
||||||
|
# For threads, as mentioned Apple doesn't need this.
|
||||||
|
# For more details, please see above.
|
||||||
|
set_property(TARGET SDL2::Core APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES Threads::Threads)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# MinGW needs an additional link flag, -mwindows
|
||||||
|
# and link to mingw32
|
||||||
|
if(MINGW)
|
||||||
|
set_property(TARGET SDL2::Core APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES mingw32)
|
||||||
|
set_property(TARGET SDL2::Core APPEND PROPERTY
|
||||||
|
INTERFACE_LINK_OPTIONS "-mwindows")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# SDL2::Main target
|
||||||
|
# Applications should link to SDL2::Main instead of SDL2::Core
|
||||||
|
# For more details, please see above.
|
||||||
|
if(NOT SDL2_BUILDING_LIBRARY AND NOT TARGET SDL2::Main)
|
||||||
|
|
||||||
|
if(SDL2_INCLUDE_DIR MATCHES ".framework" )
|
||||||
|
add_library(SDL2::Main INTERFACE IMPORTED)
|
||||||
|
elseif(SDL2MAIN_LIBRARY)
|
||||||
|
add_library(SDL2::Main UNKNOWN IMPORTED)
|
||||||
|
set_property(TARGET SDL2::Main PROPERTY
|
||||||
|
IMPORTED_LOCATION "${SDL2MAIN_LIBRARY}")
|
||||||
|
elseif(UNIX)
|
||||||
|
add_library(SDL2::Main INTERFACE IMPORTED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
# Add SDL2::Core as a dependency
|
||||||
|
if(TARGET SDL2::Main)
|
||||||
|
set_property(TARGET SDL2::Main PROPERTY
|
||||||
|
INTERFACE_LINK_LIBRARIES SDL2::Core)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
Reference in New Issue
Block a user