diff --git a/.gitignore b/.gitignore index 6853f6825..34ff16e31 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ LICENSE.txt *ConfigVersion.cmake include/freerdp/version.h include/freerdp/build-config.h +buildflags.h *.a.objlist.cmake *.a.objlist diff --git a/CMakeLists.txt b/CMakeLists.txt index 68ff44e06..d15c6bf88 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -819,3 +819,13 @@ endif() #message("VENDOR: ${VENDOR} CLIENT_VENDOR_PATH: ${CLIENT_VENDOR_PATH} CMAKE_CPACK_INCLUDE_FILE: ${CMAKE_CPACK_INCLUDE_FILE}") include(${CMAKE_CPACK_INCLUDE_FILE}) + +set(FREERDP_BUILD_CONFIG_LIST "") +GET_CMAKE_PROPERTY(res VARIABLES) +FOREACH(var ${res}) + IF (var MATCHES "^WITH_*|^BUILD_TESTING|^STATIC_CHANNELS|^HAVE_*") + LIST(APPEND FREERDP_BUILD_CONFIG_LIST "${var}=${${var}}") + ENDIF() +ENDFOREACH() +string(REPLACE ";" " " FREERDP_BUILD_CONFIG "${FREERDP_BUILD_CONFIG_LIST}") +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in ${CMAKE_CURRENT_BINARY_DIR}/buildflags.h) diff --git a/buildflags.h.in b/buildflags.h.in new file mode 100644 index 000000000..0b8b31092 --- /dev/null +++ b/buildflags.h.in @@ -0,0 +1,11 @@ +#ifndef _FREERDP_BUILD_FLAGS_H +#define _FREERDP_BUILD_FLAGS_H + +#define CFLAGS "${CMAKE_C_FLAGS}" +#define COMPILER_ID "${CMAKE_C_COMPILER_ID}" +#define COMPILER_VERSION "${CMAKE_C_COMPILER_VERSION}" +#define TARGET_ARCH "${TARGET_ARCH}" +#define BUILD_CONFIG "${FREERDP_BUILD_CONFIG}" +#define BUILD_TYPE "${CMAKE_BUILD_TYPE}" + +#endif /*_FREERDP_BUILD_FLAGS_H */ diff --git a/client/common/cmdline.c b/client/common/cmdline.c index 91f362ddd..517ee0e06 100644 --- a/client/common/cmdline.c +++ b/client/common/cmdline.c @@ -21,6 +21,7 @@ #ifdef HAVE_CONFIG_H #include "config.h" #endif +#include "buildflags.h" #include @@ -171,6 +172,7 @@ static COMMAND_LINE_ARGUMENT_A args[] = { "assistance", COMMAND_LINE_VALUE_REQUIRED, "", NULL, NULL, -1, NULL, "Remote assistance password" }, { "encryption-methods", COMMAND_LINE_VALUE_REQUIRED, "<40,56,128,FIPS>", NULL, NULL, -1, NULL, "RDP standard security encryption methods" }, { "from-stdin", COMMAND_LINE_VALUE_FLAG, NULL, NULL, NULL, -1, NULL, "Read credentials from stdin, do not use defaults." }, + { "buildconfig", COMMAND_LINE_VALUE_FLAG | COMMAND_LINE_PRINT_BUILDCONFIG, NULL, NULL, NULL, -1, NULL, "print the build configuration" }, { NULL, 0, NULL, NULL, NULL, -1, NULL, NULL } }; @@ -180,6 +182,16 @@ int freerdp_client_print_version() return 1; } +int freerdp_client_print_buildconfig() +{ + printf("Build configuration: %s\n", BUILD_CONFIG); + printf("Build type: %s\n", BUILD_TYPE); + printf("CFLAGS: %s\n", CFLAGS); + printf("Compiler: %s, %s\n", COMPILER_ID, COMPILER_VERSION); + printf("Target architecture: %s\n", TARGET_ARCH); + return 1; +} + int freerdp_client_print_command_line_help(int argc, char** argv) { char* str; @@ -1352,6 +1364,12 @@ int freerdp_client_settings_command_line_status_print(rdpSettings* settings, int freerdp_client_print_version(); return COMMAND_LINE_STATUS_PRINT_VERSION; } + if (status == COMMAND_LINE_STATUS_PRINT_BUILDCONFIG) + { + freerdp_client_print_version(); + freerdp_client_print_buildconfig(); + return COMMAND_LINE_STATUS_PRINT_BUILDCONFIG; + } else if (status == COMMAND_LINE_STATUS_PRINT) { arg = CommandLineFindArgumentA(args, "kbd-list"); diff --git a/winpr/include/winpr/cmdline.h b/winpr/include/winpr/cmdline.h index ef41a6be8..b843ee7eb 100644 --- a/winpr/include/winpr/cmdline.h +++ b/winpr/include/winpr/cmdline.h @@ -39,6 +39,7 @@ #define COMMAND_LINE_PRINT 0x00000200 #define COMMAND_LINE_PRINT_HELP 0x00000400 #define COMMAND_LINE_PRINT_VERSION 0x00000800 +#define COMMAND_LINE_PRINT_BUILDCONFIG 0x00001000 /* Command-Line Argument Output Flags */ @@ -78,6 +79,7 @@ #define COMMAND_LINE_STATUS_PRINT -2001 #define COMMAND_LINE_STATUS_PRINT_HELP -2002 #define COMMAND_LINE_STATUS_PRINT_VERSION -2003 +#define COMMAND_LINE_STATUS_PRINT_BUILDCONFIG -2004 /* Command-Line Macros */ diff --git a/winpr/libwinpr/utils/cmdline.c b/winpr/libwinpr/utils/cmdline.c index e55b738f1..cc22d5de7 100644 --- a/winpr/libwinpr/utils/cmdline.c +++ b/winpr/libwinpr/utils/cmdline.c @@ -363,6 +363,8 @@ int CommandLineParseArgumentsA(int argc, LPCSTR* argv, COMMAND_LINE_ARGUMENT_A* return COMMAND_LINE_STATUS_PRINT_HELP; else if (options[j].Flags & COMMAND_LINE_PRINT_VERSION) return COMMAND_LINE_STATUS_PRINT_VERSION; + else if (options[j].Flags & COMMAND_LINE_PRINT_BUILDCONFIG) + return COMMAND_LINE_STATUS_PRINT_BUILDCONFIG; } if (!found && (flags & COMMAND_LINE_IGN_UNKNOWN_KEYWORD) == 0)