From f543faf837a265c5adb64bd5a07052d6532e2e51 Mon Sep 17 00:00:00 2001 From: Anonymous Maarten Date: Tue, 29 Oct 2024 23:33:44 +0100 Subject: [PATCH] Allow in-tree build --- .gitignore | 18 +++++++++++++++--- CMakeLists.txt | 18 +++++++----------- cmake/macros.cmake | 4 ++-- 3 files changed, 24 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 49476885a..394f4b843 100644 --- a/.gitignore +++ b/.gitignore @@ -29,15 +29,27 @@ __pycache__ *.rej # for CMake +.cmake CMakeFiles/ CMakeCache.txt cmake_install.cmake cmake_uninstall.cmake -SDL3ConfigVersion.cmake -.ninja_* -*.ninja +install_manifest.txt +*Targets.cmake +*Config.cmake +*ConfigVersion.cmake +CTestTestfile.cmake +Testing compile_commands.json .cache/ +/include-config-* +/include-revision +/Makefile +.ninja_* +*.ninja +*.pc +test/*.test +wayland-generated-protocols # for CLion .idea diff --git a/CMakeLists.txt b/CMakeLists.txt index d93a061ae..e12e12e8d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,9 +1,5 @@ cmake_minimum_required(VERSION 3.16) -if(CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) - message(FATAL_ERROR "Prevented in-tree build. Please create a build directory outside of the SDL source code and run \"cmake -S ${CMAKE_SOURCE_DIR} -B .\" from there") -endif() - # See docs/release_checklist.md project(SDL3 LANGUAGES C VERSION "3.1.5") @@ -456,7 +452,7 @@ sdl_compile_definitions(PRIVATE "USING_GENERATED_CONFIG_H") sdl_include_directories( PRIVATE "${SDL3_BINARY_DIR}/include-config-$>/build_config" - "${SDL3_BINARY_DIR}/include" + "${SDL3_BINARY_DIR}/include-revision" "${SDL3_SOURCE_DIR}/include" ) # Note: The clang toolset for Visual Studio does not support the '-idirafter' option. @@ -3050,11 +3046,11 @@ endif() # config variables may contain generator expression, so we need to generate SDL_build_config.h in 2 steps: # 1. replace all `#cmakedefine`'s and `@abc@` configure_file("${SDL3_SOURCE_DIR}/include/build_config/SDL_build_config.h.cmake" - "${SDL3_BINARY_DIR}/SDL_build_config.h.intermediate") + "${SDL3_BINARY_DIR}/CMakeFiles/SDL_build_config.h.intermediate") # 2. generate SDL_build_config.h in an build_type-dependent folder (which should be first in the include search path) file(GENERATE OUTPUT "${SDL3_BINARY_DIR}/include-config-$>/build_config/SDL_build_config.h" - INPUT "${SDL3_BINARY_DIR}/SDL_build_config.h.intermediate" + INPUT "${SDL3_BINARY_DIR}/CMakeFiles/SDL_build_config.h.intermediate" ) file(GLOB SDL3_INCLUDE_FILES "${SDL3_SOURCE_DIR}/include/SDL3/*.h") @@ -3078,9 +3074,9 @@ if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/REVISION.txt") set(SDL_REVISION "SDL3-${SDL_REVISION_CENTER}") endif() -execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include/SDL3") -configure_file(include/build_config/SDL_revision.h.cmake include/SDL3/SDL_revision.h @ONLY) -list(APPEND SDL3_INCLUDE_FILES "${SDL3_BINARY_DIR}/include/SDL3/SDL_revision.h") +execute_process(COMMAND "${CMAKE_COMMAND}" -E make_directory "${SDL3_BINARY_DIR}/include-revision/SDL3") +configure_file(include/build_config/SDL_revision.h.cmake include-revision/SDL3/SDL_revision.h @ONLY) +list(APPEND SDL3_INCLUDE_FILES "${SDL3_BINARY_DIR}/include-revision/SDL3/SDL_revision.h") if(SDL_FRAMEWORK) # With Apple frameworks, headers in the PUBLIC_HEADER property also need to be added as sources @@ -3277,7 +3273,7 @@ add_library(SDL3::Headers ALIAS SDL3_Headers) set_property(TARGET SDL3_Headers PROPERTY EXPORT_NAME "Headers") target_include_directories(SDL3_Headers INTERFACE - "$" + "$" "$" ) if(SDL_FRAMEWORK) diff --git a/cmake/macros.cmake b/cmake/macros.cmake index 587c92e08..82dded499 100644 --- a/cmake/macros.cmake +++ b/cmake/macros.cmake @@ -299,8 +299,8 @@ function(check_linker_supports_version_file VAR) set(LINKER_SUPPORTS_VERSION_SCRIPT FALSE) else() cmake_push_check_state(RESET) - file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/dummy.sym" "n_0 {\n global:\n func;\n local: *;\n};\n") - list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/dummy.sym") + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy.sym" "n_0 {\n global:\n func;\n local: *;\n};\n") + list(APPEND CMAKE_REQUIRED_LINK_OPTIONS "-Wl,--version-script=${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/dummy.sym") check_c_source_compiles("int func(void) {return 0;} int main(int argc,char*argv[]){(void)argc;(void)argv;return func();}" LINKER_SUPPORTS_VERSION_SCRIPT FAIL_REGEX "(unsupported|syntax error|unrecognized option)") cmake_pop_check_state() endif()