1-
21# This module defines
32# SDL2_LIBRARY, the name of the library to link against
43# SDL2_FOUND, if false, do not try to link to SDL2
54# SDL2_INCLUDE_DIR, where to find SDL.h
65#
6+ # If you have pkg-config, these extra variables are also defined:
7+ # SDL2_DEFINITIONS, extra CFLAGS
8+ # SDL2_EXTRA_LIBS, extra link libs
9+ # SDL2_LINKER_FLAGS, extra link flags
10+ #
11+ # The latter two are automatically added to SDL2_LIBRARY
12+ #
13+ # To use them, add code such as:
14+ #
15+ # # SET(SDL2_STATIC ON) # if you want to link SDL2 statically
16+ # FIND_PACKAGE(SDL2 REQUIRED)
17+ # ADD_DEFINITIONS(${SDL2_DEFINITIONS})
18+ # TARGET_LINK_LIBRARIES(your-executable-target ${SDL2_LIBRARY} ...)
19+ #
720# This module responds to the the flag:
821# SDL2_BUILDING_LIBRARY
922# If this is defined, then no SDL2main will be linked in because
1225# module will attempt to locate and set the the proper link flags
1326# as part of the returned SDL2_LIBRARY variable.
1427#
28+ # If you want to link SDL2 statically, set SDL2_STATIC to ON.
29+ #
1530# Don't forget to include SDLmain.h and SDLmain.m your project for the
1631# OS X framework based version. (Other versions link to -lSDL2main which
1732# this module will try to find on your behalf.) Also for OS X, this
4762# SDL2_LIBRARY to override this selection or set the CMake environment
4863# CMAKE_INCLUDE_PATH to modify the search paths.
4964#
50- # Note that the header path has changed from SDL2 /SDL.h to just SDL.h
65+ # Note that the header path has changed from SDL3 /SDL.h to just SDL.h
5166# This needed to change because "proper" SDL convention
5267# is #include "SDL.h", not <SDL2/SDL.h>. This is done for portability
5368# reasons because not all systems place things in SDL2/ (see FreeBSD).
@@ -86,11 +101,21 @@ FIND_PATH(SDL2_INCLUDE_DIR SDL.h
86101 PATHS ${SDL2_SEARCH_PATHS}
87102)
88103
104+ SET (CURRENT_FIND_LIBRARY_SUFFIXES ${CMAKE_FIND_LIBRARY_SUFFIXES} )
105+
106+ IF (SDL2_STATIC)
107+ IF (WIN32 )
108+ SET (CMAKE_FIND_LIBRARY_SUFFIXES .lib .a)
109+ ELSE (WIN32 )
110+ SET (CMAKE_FIND_LIBRARY_SUFFIXES .a)
111+ ENDIF (WIN32 )
112+ ENDIF (SDL2_STATIC)
113+
89114FIND_LIBRARY (SDL2_LIBRARY_TEMP
90115 NAMES SDL2
91116 HINTS
92117 $ENV{SDL2DIR}
93- PATH_SUFFIXES lib64 lib
118+ PATH_SUFFIXES lib64 lib lib/x64 lib/x86
94119 PATHS ${SDL2_SEARCH_PATHS}
95120)
96121
@@ -104,12 +129,15 @@ IF(NOT SDL2_BUILDING_LIBRARY)
104129 NAMES SDL2main
105130 HINTS
106131 $ENV{SDL2DIR}
107- PATH_SUFFIXES lib64 lib
132+ PATH_SUFFIXES lib64 lib lib/x64 lib/x86
108133 PATHS ${SDL2_SEARCH_PATHS}
109134 )
110135 ENDIF (NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework" )
111136ENDIF (NOT SDL2_BUILDING_LIBRARY)
112137
138+ SET (CMAKE_FIND_LIBRARY_SUFFIXES ${CURRENT_FIND_LIBRARY_SUFFIXES} )
139+ UNSET (CURRENT_FIND_LIBRARY_SUFFIXES)
140+
113141# SDL2 may require threads on your system.
114142# The Apple build may not need an explicit flag because one of the
115143# frameworks may already provide it.
@@ -118,11 +146,10 @@ IF(NOT APPLE)
118146 FIND_PACKAGE (Threads)
119147ENDIF (NOT APPLE )
120148
121- # MinGW needs an additional library, mwindows
122- # It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -lmwindows
123- # (Actually on second look, I think it only needs one of the m* libraries.)
149+ # MinGW needs an additional link flag, -mwindows
150+ # It's total link flags should look like -lmingw32 -lSDL2main -lSDL2 -mwindows
124151IF (MINGW)
125- SET (MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW" )
152+ SET (MINGW32_LIBRARY mingw32 "-mwindows" CACHE STRING "mwindows for MinGW" )
126153ENDIF (MINGW)
127154
128155IF (SDL2_LIBRARY_TEMP)
@@ -155,6 +182,37 @@ IF(SDL2_LIBRARY_TEMP)
155182 SET (SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP} )
156183 ENDIF (MINGW)
157184
185+ # Add some stuff from pkg-config, if available
186+ IF (NOT PKG_CONFIG_EXECUTABLE)
187+ FIND_PACKAGE (PkgConfig QUIET )
188+ ENDIF (NOT PKG_CONFIG_EXECUTABLE)
189+
190+ IF (PKG_CONFIG_EXECUTABLE)
191+ # get any definitions
192+ EXECUTE_PROCESS (COMMAND ${PKG_CONFIG_EXECUTABLE} --cflags-only-other sdl2 OUTPUT_VARIABLE SDL2_DEFINITIONS)
193+
194+ SET (SDL2_DEFINITIONS ${SDL2_DEFINITIONS} CACHE STRING "Extra CFLAGS for SDL2 from pkg-config" )
195+
196+ # get any extra stuff needed for linking
197+ IF (NOT SDL2_STATIC)
198+ EXECUTE_PROCESS (COMMAND ${PKG_CONFIG_EXECUTABLE} --libs-only-other sdl2 OUTPUT_VARIABLE SDL2_LINKER_FLAGS_RAW OUTPUT_STRIP_TRAILING_WHITESPACE)
199+
200+ EXECUTE_PROCESS (COMMAND ${PKG_CONFIG_EXECUTABLE} --libs-only-l sdl2 OUTPUT_VARIABLE SDL2_EXTRA_LIBS_RAW OUTPUT_STRIP_TRAILING_WHITESPACE)
201+ ELSE (NOT SDL2_STATIC)
202+ EXECUTE_PROCESS (COMMAND ${PKG_CONFIG_EXECUTABLE} --static --libs-only-other sdl2 OUTPUT_VARIABLE SDL2_LINKER_FLAGS_RAW OUTPUT_STRIP_TRAILING_WHITESPACE)
203+ EXECUTE_PROCESS (COMMAND ${PKG_CONFIG_EXECUTABLE} --static --libs-only-l sdl2 OUTPUT_VARIABLE SDL2_EXTRA_LIBS_RAW OUTPUT_STRIP_TRAILING_WHITESPACE)
204+ ENDIF (NOT SDL2_STATIC)
205+
206+ STRING (REGEX REPLACE "[^ ]+SDL2[^ ]*" "" SDL2_EXTRA_LIBS_RAW2 "${SDL2_EXTRA_LIBS_RAW} " )
207+ STRING (REGEX REPLACE " +" ";" SDL2_EXTRA_LIBS "${SDL2_EXTRA_LIBS_RAW2} " )
208+ STRING (REGEX REPLACE " +" ";" SDL2_LINKER_FLAGS "${SDL2_LINKER_FLAGS_RAW} " )
209+
210+ SET (SDL2_LINKER_FLAGS ${SDL2_LINKER_FLAGS} CACHE STRING "Linker flags for linking SDL2" )
211+ SET (SDL2_EXTRA_LIBS ${SDL2_EXTRA_LIBS} CACHE STRING "Extra libraries for linking SDL2" )
212+
213+ SET (SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${SDL2_EXTRA_LIBS} ${SDL2_LINKER_FLAGS} )
214+ ENDIF (PKG_CONFIG_EXECUTABLE)
215+
158216 # Set the final string here so the GUI reflects the final state.
159217 SET (SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL2 Library can be found" )
160218 # Set the temp variable to INTERNAL so it is not seen in the CMake GUI
@@ -166,4 +224,3 @@ message("</FindSDL2.cmake>")
166224INCLUDE (FindPackageHandleStandardArgs)
167225
168226FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2 REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR)
169-
0 commit comments