Fail configuration if X11 dependency packages aren't available

It happens fairly often that people enable X11 support but don't install the extension libraries that SDL depends on. This makes those required if not explicitly disabled, which should help prevent accidentally broken builds.
This commit is contained in:
Sam Lantinga
2025-11-03 10:26:40 -08:00
parent a6351ac474
commit 4560fae07e
2 changed files with 144 additions and 93 deletions
+17 -1
View File
@@ -417,7 +417,7 @@ function(SDL_PrintSummary)
"Most likely, this is not wanted."
"\n"
"On Linux, install the packages listed at "
"https://github.com/libsdl-org/SDL/blob/main/docs/README-linux.md#build-dependencies "
"https://wiki.libsdl.org/SDL3/README-linux#build-dependencies "
"\n"
"If you really don't need desktop windows, the documentation tells you how to skip this check. "
"https://github.com/libsdl-org/SDL/blob/main/docs/README-cmake.md#cmake-fails-to-build-without-x11-or-wayland-support\n"
@@ -427,6 +427,22 @@ function(SDL_PrintSummary)
endif()
endfunction()
function(SDL_missing_dependency NAME OPTION)
if(LINUX)
message( FATAL_ERROR
"Couldn't find dependency package for ${NAME}. Please install the needed packages or configure with -D${OPTION}=OFF"
"\n"
"The full set of dependencies is available at "
"https://wiki.libsdl.org/SDL3/README-linux#build-dependencies "
"\n"
)
else()
message( FATAL_ERROR
"Couldn't find dependency package for ${NAME}. Please install the needed packages or configure with -D${OPTION}=OFF"
)
endif()
endfunction()
function(SDL_install_pdb TARGET DIRECTORY)
get_property(type TARGET ${TARGET} PROPERTY TYPE)
if(type MATCHES "^(SHARED_LIBRARY|EXECUTABLE)$")
+45 -10
View File
@@ -392,7 +392,8 @@ macro(CheckX11)
check_include_file("X11/XKBlib.h" SDL_VIDEO_DRIVER_X11_HAS_XKBLIB)
if(SDL_X11_XCURSOR AND HAVE_XCURSOR_H AND XCURSOR_LIB)
if(SDL_X11_XCURSOR)
if (HAVE_XCURSOR_H AND XCURSOR_LIB)
set(HAVE_X11_XCURSOR TRUE)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XCURSOR "\"${XCURSOR_LIB_SONAME}\"")
@@ -400,14 +401,22 @@ macro(CheckX11)
sdl_link_dependency(xcursor LIBS X11::Xcursor CMAKE_MODULE X11 PKG_CONFIG_SPECS ${Xcursor_PKG_CONFIG_SPEC})
endif()
set(SDL_VIDEO_DRIVER_X11_XCURSOR 1)
else()
SDL_missing_dependency(XCURSOR, SDL_X11_XCURSOR)
endif()
endif()
if(SDL_X11_XDBE AND HAVE_XDBE_H)
if(SDL_X11_XDBE)
if(HAVE_XDBE_H)
set(HAVE_X11_XDBE TRUE)
set(SDL_VIDEO_DRIVER_X11_XDBE 1)
else()
SDL_missing_dependency(XDBE, SDL_X11_XDBE)
endif()
endif()
if(SDL_X11_XINPUT AND HAVE_XINPUT2_H AND XI_LIB)
if(SDL_X11_XINPUT)
if(HAVE_XINPUT2_H AND XI_LIB)
set(HAVE_X11_XINPUT TRUE)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XINPUT2 "\"${XI_LIB_SONAME}\"")
@@ -457,7 +466,9 @@ macro(CheckX11)
set(SDL_VIDEO_DRIVER_X11_XINPUT2_SUPPORTS_GESTURE 1)
endif()
else()
SDL_missing_dependency(XINPUT, SDL_X11_XINPUT)
endif()
endif()
# check along with XInput2.h because we use Xfixes with XIBarrierReleasePointer
@@ -470,7 +481,8 @@ macro(CheckX11)
BarrierEventID b;
int main(int argc, char **argv) { return 0; }" HAVE_XFIXES_H)
endif()
if(SDL_X11_XFIXES AND HAVE_XFIXES_H AND HAVE_XINPUT2_H AND XFIXES_LIB)
if(SDL_X11_XFIXES)
if (HAVE_XFIXES_H AND HAVE_XINPUT2_H AND XFIXES_LIB)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XFIXES "\"${XFIXES_LIB_SONAME}\"")
else()
@@ -478,14 +490,22 @@ macro(CheckX11)
endif()
set(SDL_VIDEO_DRIVER_X11_XFIXES 1)
set(HAVE_X11_XFIXES TRUE)
else()
SDL_missing_dependency(XFIXES, SDL_X11_XFIXES)
endif()
endif()
if(SDL_X11_XSYNC AND HAVE_XSYNC_H AND XEXT_LIB)
if(SDL_X11_XSYNC)
if(HAVE_XSYNC_H AND XEXT_LIB)
set(SDL_VIDEO_DRIVER_X11_XSYNC 1)
set(HAVE_X11_XSYNC TRUE)
else()
SDL_missing_dependency(XSYNC, SDL_X11_XSYNC)
endif()
endif()
if(SDL_X11_XRANDR AND HAVE_XRANDR_H AND XRANDR_LIB)
if(SDL_X11_XRANDR)
if(HAVE_XRANDR_H AND XRANDR_LIB)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XRANDR "\"${XRANDR_LIB_SONAME}\"")
else()
@@ -493,9 +513,13 @@ macro(CheckX11)
endif()
set(SDL_VIDEO_DRIVER_X11_XRANDR 1)
set(HAVE_X11_XRANDR TRUE)
else()
SDL_missing_dependency(XRANDR, SDL_X11_XRANDR)
endif()
endif()
if(SDL_X11_XSCRNSAVER AND HAVE_XSS_H AND XSS_LIB)
if(SDL_X11_XSCRNSAVER)
if(HAVE_XSS_H AND XSS_LIB)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XSS "\"${XSS_LIB_SONAME}\"")
else()
@@ -503,14 +527,22 @@ macro(CheckX11)
endif()
set(SDL_VIDEO_DRIVER_X11_XSCRNSAVER 1)
set(HAVE_X11_XSCRNSAVER TRUE)
else()
SDL_missing_dependency(XSCRNSAVER, SDL_X11_XSCRNSAVER)
endif()
endif()
if(SDL_X11_XSHAPE AND HAVE_XSHAPE_H)
if(SDL_X11_XSHAPE)
if(HAVE_XSHAPE_H)
set(SDL_VIDEO_DRIVER_X11_XSHAPE 1)
set(HAVE_X11_XSHAPE TRUE)
else()
SDL_missing_dependency(XSHAPE, SDL_X11_XSHAPE)
endif()
endif()
if(SDL_X11_XTEST AND HAVE_XTEST_H AND XTST_LIB)
if(SDL_X11_XTEST)
if(HAVE_XTEST_H AND XTST_LIB)
if(HAVE_X11_SHARED)
set(SDL_VIDEO_DRIVER_X11_DYNAMIC_XTEST "\"${XTST_LIB_SONAME}\"")
else()
@@ -518,6 +550,9 @@ macro(CheckX11)
endif()
set(SDL_VIDEO_DRIVER_X11_XTEST 1)
set(HAVE_X11_XTEST TRUE)
else()
SDL_missing_dependency(XTEST SDL_X11_XTEST)
endif()
endif()
endif()
endif()