From e16085762d62cc196e9cafe6fa6bf6452486f432 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 10 Dec 2024 12:38:43 +0100 Subject: [PATCH 1/5] [cmake,configure_file] fix change checks * Create temporary configuration files in a different build directory * Copy the currently required configuration file only if it is different from the currently set one * Use copy_if_different for build target configuration update --- cmake/CleaningConfigureFile.cmake | 37 +++++++++++++++++++++++++------ 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/cmake/CleaningConfigureFile.cmake b/cmake/CleaningConfigureFile.cmake index 7fe2da1b0..8273e2924 100644 --- a/cmake/CleaningConfigureFile.cmake +++ b/cmake/CleaningConfigureFile.cmake @@ -10,17 +10,28 @@ function(cleaning_configure_file RSRC RDST) get_filename_component(SRC "${RSRC}" ABSOLUTE BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) get_filename_component(DST "${RDST}" ABSOLUTE BASE_DIR ${CMAKE_CURRENT_BINARY_DIR}) get_filename_component(DST_DIR "${DST}" DIRECTORY) + get_filename_component(DST_NAME ${DST} NAME) + + # ensure the temporary configuration files are in a different directory + set(CFG_DIR "${CMAKE_CURRENT_BINARY_DIR}/cfg") + file(MAKE_DIRECTORY "${CFG_DIR}") + + # Generate the temporary configuration files if(CMAKE_CONFIGURATION_TYPES) foreach(CFG ${CMAKE_CONFIGURATION_TYPES}) set(CURRENT_BUILD_CONFIG ${CFG}) + if(NOT SOURCE_CFG_INIT) + set(SOURCE_CFG_INIT "${CFG_DIR}/${DST_NAME}_${CFG}") + endif() cflagstovar(CURRENT_C_FLAGS ${CURRENT_BUILD_CONFIG}) - configure_file(${SRC} ${DST}_${CFG} ${ARGN}) + configure_file(${SRC} "${CFG_DIR}/${DST_NAME}_${CFG}" ${ARGN}) unset(CURRENT_BUILD_CONFIG) unset(CURRENT_C_FLAGS) endforeach() + set(SOURCE_CFG "${CFG_DIR}/${DST_NAME}_$") else() # We call this also from CMake scripts without a CMAKE_BUILD_TYPE - # Fall back to an explicitly unsupported build type to point out something is wrond + # Fall back to an explicitly unsupported build type to point out something is wrong # if this variable is used during such a call if(CMAKE_BUILD_TYPE) set(CURRENT_BUILD_CONFIG ${CMAKE_BUILD_TYPE}) @@ -28,20 +39,32 @@ function(cleaning_configure_file RSRC RDST) set(CURRENT_BUILD_CONFIG "InvalidBuildType") endif() cflagstovar(CURRENT_C_FLAGS ${CURRENT_BUILD_CONFIG}) - configure_file(${SRC} ${DST}_${CMAKE_BUILD_TYPE} ${ARGN}) + set(SOURCE_CFG "${CFG_DIR}/${DST_NAME}_${CMAKE_BUILD_TYPE}") + set(SOURCE_CFG_INIT "${SOURCE_CFG}") + configure_file(${SRC} "${SOURCE_CFG}" ${ARGN}) unset(CURRENT_BUILD_CONFIG) unset(CURRENT_C_FLAGS) endif() - configure_file(${SRC} ${DST} ${ARGN}) + # Fallback for older CMake: we want to copy only if the destination is different. + # First do an initial copy during configuration + file(MAKE_DIRECTORY "${DST_DIR}") + if(CMAKE_VERSION VERSION_LESS "3.21.0") + get_filename_component(CFG_VAR ${SOURCE_CFG_INIT} NAME) + file(COPY ${SOURCE_CFG_INIT} DESTINATION ${DST_DIR}) + set(CFG_VAR_ABS "${DST_DIR}/${CFG_VAR}") + file(RENAME ${CFG_VAR_ABS} ${DST}) + else() + file(COPY_FILE ${SOURCE_CFG_INIT} ${DST} ONLY_IF_DIFFERENT) + endif() + # Create a target to recreate the configuration file if something changes. string(SHA256 DST_HASH "${DST}") if(NOT TARGET ct-${DST_HASH}) add_custom_target( ct-${DST_HASH} ALL COMMAND ${CMAKE_COMMAND} "-E" "make_directory" "${DST_DIR}" - COMMAND ${CMAKE_COMMAND} "-E" "copy" "${DST}_$" "${DST}" COMMAND ${CMAKE_COMMAND} "-E" "sha256sum" - "${DST}_$" > ${DST}.hash - DEPENDS ${DST} BYPRODUCTS ${DST}.hash + COMMAND ${CMAKE_COMMAND} "-E" "copy_if_different" "${SOURCE_CFG}" "${DST}" DEPENDS ${SOURCE_CFG} + BYPRODUCTS ${DST} ) endif() endfunction() From c48a89b1e3f54ff6b8ea3143a24be1068dda1926 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 10 Dec 2024 14:48:36 +0100 Subject: [PATCH 2/5] [cmake] add script to dump variables --- cmake/DumpVariables.cmake | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 cmake/DumpVariables.cmake diff --git a/cmake/DumpVariables.cmake b/cmake/DumpVariables.cmake new file mode 100644 index 000000000..6d5e12120 --- /dev/null +++ b/cmake/DumpVariables.cmake @@ -0,0 +1,9 @@ +function(dump_cmake_variables) + get_cmake_property(_variableNames VARIABLES) + list(SORT _variableNames) + foreach(_variableName ${_variableNames}) + if((NOT DEFINED ARGV0) OR _variableName MATCHES ${ARGV0}) + message(STATUS "${_variableName}=${${_variableName}}") + endif() + endforeach() +endfunction() From 10faedf72b1fc5b19c48857ba751fcaf256f6841 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 10 Dec 2024 14:51:03 +0100 Subject: [PATCH 3/5] [winpr,json] fix include for json-c The default include contains the json-c path, so do not use it when including headers. --- winpr/libwinpr/utils/json/json.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/winpr/libwinpr/utils/json/json.c b/winpr/libwinpr/utils/json/json.c index 81eec9718..3fc99dfa0 100644 --- a/winpr/libwinpr/utils/json/json.c +++ b/winpr/libwinpr/utils/json/json.c @@ -27,7 +27,7 @@ #include #endif #if defined(WITH_JSONC) -#include +#include #endif #if defined(WITH_CJSON) From 787c49bdbe0995a07f5f31022858b6fea00e1059 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 10 Dec 2024 15:09:04 +0100 Subject: [PATCH 4/5] [client,common] fix call of helper binary use target output directory instead of manually combined path --- client/common/man/CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/client/common/man/CMakeLists.txt b/client/common/man/CMakeLists.txt index b01899cf7..40c7e3d81 100644 --- a/client/common/man/CMakeLists.txt +++ b/client/common/man/CMakeLists.txt @@ -21,11 +21,11 @@ set(MAN_OPTIONS_FILE "${CMAKE_CURRENT_BINARY_DIR}/freerdp-global-options.1") set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS ${MAN_OPTIONS_FILE}) add_custom_command( - OUTPUT ${MAN_OPTIONS_FILE} COMMAND ${CMAKE_BINARY_DIR}/client/common/man/generate_argument_manpage - "${MAN_OPTIONS_FILE}" WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} - DEPENDS generate_argument_manpage + OUTPUT ${MAN_OPTIONS_FILE} COMMAND $ "${MAN_OPTIONS_FILE}" + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} DEPENDS generate_argument_manpage ) add_custom_target( generate_argument_manpage.target DEPENDS ${MAN_OPTIONS_FILE} ${CMAKE_BINARY_DIR}/include/freerdp/config.h - generate_argument_manpage WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + $ + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} ) From 71f48407b5adc0520060f9286d959b8683929bd0 Mon Sep 17 00:00:00 2001 From: akallabeth Date: Tue, 10 Dec 2024 15:35:39 +0100 Subject: [PATCH 5/5] [ci,android] disable manpage generation --- ci/cmake-preloads/config-android.txt | 1 + scripts/android-build-freerdp.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/ci/cmake-preloads/config-android.txt b/ci/cmake-preloads/config-android.txt index fb2c94b7f..64b732432 100644 --- a/ci/cmake-preloads/config-android.txt +++ b/ci/cmake-preloads/config-android.txt @@ -11,4 +11,5 @@ set(WITH_KRB5 OFF CACHE BOOL "Kerberos support") set(WITH_CLIENT_SDL OFF CACHE BOOL "SDL client") set(WITH_SERVER OFF CACHE BOOL "ci default") set(WITH_X11 OFF CACHE BOOL "ci default") +set(WITH_MANPAGES OFF CACHE BOOL "ci default") set(WITH_LIBRARY_VERSIONING OFF CACHE BOOL "ci default") diff --git a/scripts/android-build-freerdp.sh b/scripts/android-build-freerdp.sh index 6725b2567..8dfb25676 100755 --- a/scripts/android-build-freerdp.sh +++ b/scripts/android-build-freerdp.sh @@ -108,6 +108,7 @@ CMAKE_CMD_ARGS="-DANDROID_NDK=$ANDROID_NDK \ -DFREERDP_EXTERNAL_PATH=$BUILD_DST \ -DWITH_CLIENT_SDL=OFF \ -DWITH_SERVER=OFF \ + -DWITH_MANPAGES=OFF \ -DCMAKE_MAKE_PROGRAM=make" BASE=$(pwd)