diff options
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | CMakeLists.txt | 133 | ||||
-rw-r--r-- | buildflags.h.in | 11 | ||||
-rw-r--r-- | cmake/ConfigOptions.cmake | 14 | ||||
-rw-r--r-- | src/remmina_exec.c | 15 |
5 files changed, 168 insertions, 7 deletions
diff --git a/.gitignore b/.gitignore index a3c62585d..964a550d5 100644 --- a/.gitignore +++ b/.gitignore @@ -27,6 +27,7 @@ _configs.sed aclocal.m4 autom4te.cache build +buildflags.h /build-ubuntu cmake_install.cmake cmake_uninstall.cmake @@ -42,6 +43,7 @@ install_manifest.txt libtool ltmain.sh missing +release rfbint.h stamp-h1 tags diff --git a/CMakeLists.txt b/CMakeLists.txt index 89f5a2864..e827d5e8a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,10 +39,11 @@ set(CMAKE_COLOR_MAKEFILE ON) project(Remmina C) +include(CheckCCompilerFlag) include(CheckIncludeFiles) include(CheckLibraryExists) +include(CheckSymbolExists) include(FindPkgConfig) -include(CheckCCompilerFlag) include(GNUInstallDirs) set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/) @@ -59,14 +60,125 @@ if(NOT BUILD_SHARED_LIBS) endif() if(CMAKE_COMPILER_IS_GNUCC) + if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64" OR CMAKE_SYSTEM_PROCESSOR MATCHES "i686") + CHECK_SYMBOL_EXISTS(__x86_64__ "" IS_X86_64) + if(IS_X86_64) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -march=i686") + endif() + else() + if(CMAKE_POSITION_INDEPENDENT_CODE) + if(${CMAKE_VERSION} VERSION_LESS 2.8.9) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + endif() + endif() + endif() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall") - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC") + if(WITH_SSE2) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -msse2") endif() - check_c_compiler_flag(-Wno-unused-function Wno-unused-function) - if(Wno-unused-function) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-function") + + if(CMAKE_BUILD_TYPE STREQUAL "Debug") + add_definitions(-DDEBUG) + CHECK_C_COMPILER_FLAG (-Wunused-result Wunused-result) + if(Wunused-result) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-result") + endif() + CHECK_C_COMPILER_FLAG (-Wunused-but-set-variable Wunused-but-set-variable) + if(Wunused-but-set-variable) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-but-set-variable") + endif() + CHECK_C_COMPILER_FLAG(-Wdeprecated-declarations Wdeprecated-declarations) + if(Wdeprecated-declarations) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdeprecated-declarations") + endif() + + CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration) + if(Wimplicit-function-declaration) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration") + endif() + if (NOT OPENBSD) + CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls) + if(Wredundant-decls) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls") + endif() + endif() + endif() + + if(CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions(-DNDEBUG) + CHECK_C_COMPILER_FLAG (-Wno-unused-result Wno-unused-result) + if(Wno-unused-result) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-result") + endif() + CHECK_C_COMPILER_FLAG (-Wno-unused-but-set-variable Wno-unused-but-set-variable) + if(Wno-unused-but-set-variable) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-but-set-variable") + endif() + CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations) + if(Wno-deprecated-declarations) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations") + endif() + + CHECK_C_COMPILER_FLAG (-Wimplicit-function-declaration Wimplicit-function-declaration) + if(Wimplicit-function-declaration) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wimplicit-function-declaration") + endif() + if (NOT OPENBSD) + CHECK_C_COMPILER_FLAG (-Wredundant-decls Wredundant-decls) + if(Wredundant-decls) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wredundant-decls") + endif() + endif() + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g") + endif() + +endif() + +if((TARGET_ARCH MATCHES "x86|x64") AND (NOT DEFINED WITH_SSE2)) + option(WITH_SSE2 "Enable SSE2 optimization." ON) +else() + option(WITH_SSE2 "Enable SSE2 optimization." OFF) +endif() + +if(TARGET_ARCH MATCHES "ARM") + if (NOT DEFINED WITH_NEON) + option(WITH_NEON "Enable NEON optimization." ON) + else() + option(WITH_NEON "Enable NEON optimization." OFF) + endif() +else() + if(NOT APPLE) + option(WITH_IPP "Use Intel Performance Primitives." OFF) + endif() +endif() + + +if(${CMAKE_C_COMPILER_ID} STREQUAL "Clang") + if(CMAKE_BUILD_TYPE STREQUAL "Release") + add_definitions(-DNDEBUG) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-parameter") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-macros -Wno-padded") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-c11-extensions -Wno-gnu") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unused-command-line-argument") + CHECK_C_COMPILER_FLAG(-Wno-deprecated-declarations Wno-deprecated-declarations) + if(Wno-deprecated-declarations) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-deprecated-declarations") + endif() + else() + add_definitions(-DDEBUG) + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-parameter") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-macros -Wpadded") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wc11-extensions -Wgnu") + #set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wunused-command-line-argument") + CHECK_C_COMPILER_FLAG(-Wdeprecated-declarations Wdeprecated-declarations) + if(Wdeprecated-declarations) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wdeprecated-declarations") + endif() endif() endif() @@ -252,3 +364,14 @@ endif() configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in ${CMAKE_CURRENT_SOURCE_DIR}/config.h) + +set(REMMINA_BUILD_CONFIG_LIST "") +GET_CMAKE_PROPERTY(res VARIABLES) +FOREACH(var ${res}) + IF (var MATCHES "^WITH_*|^HAVE_*") + LIST(APPEND REMMINA_BUILD_CONFIG_LIST "${var}=${${var}}") + ENDIF() +ENDFOREACH() +string(REPLACE ";" " " REMMINA_BUILD_CONFIG "${REMMINA_BUILD_CONFIG_LIST}") +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h.in + ${CMAKE_CURRENT_SOURCE_DIR}/buildflags.h) diff --git a/buildflags.h.in b/buildflags.h.in new file mode 100644 index 000000000..95c791c29 --- /dev/null +++ b/buildflags.h.in @@ -0,0 +1,11 @@ +#ifndef REMMINA_BUILD_FLAGS_H +#define REMMINA_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 "${REMMINA_BUILD_CONFIG}" +#define BUILD_TYPE "${CMAKE_BUILD_TYPE}" + +#endif /* REMMINA_BUILD_FLAGS_H */ diff --git a/cmake/ConfigOptions.cmake b/cmake/ConfigOptions.cmake index 3b041424a..a2844ca82 100644 --- a/cmake/ConfigOptions.cmake +++ b/cmake/ConfigOptions.cmake @@ -14,8 +14,20 @@ # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software -# Foundation, Inc., 51 Franklin Street, Fifth Floor, +# Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. +if((CMAKE_SYSTEM_PROCESSOR MATCHES "i386|i686|x86|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 4)) + set(TARGET_ARCH "x86") +elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64|AMD64") AND (CMAKE_SIZEOF_VOID_P EQUAL 8)) + set(TARGET_ARCH "x64") +elseif((CMAKE_SYSTEM_PROCESSOR MATCHES "i386") AND (CMAKE_SIZEOF_VOID_P EQUAL 8) AND (APPLE)) + # Mac is weird like that. + set(TARGET_ARCH "x64") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "^arm*") + set(TARGET_ARCH "ARM") +elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "sparc") + set(TARGET_ARCH "sparc") +endif() option(WITH_TRANSLATIONS "Generate translations." ON) diff --git a/src/remmina_exec.c b/src/remmina_exec.c index 8d08fe81e..72561818c 100644 --- a/src/remmina_exec.c +++ b/src/remmina_exec.c @@ -35,6 +35,7 @@ */ #include "config.h" +#include "buildflags.h" #include <gtk/gtk.h> #include <glib/gi18n.h> #include <stdlib.h> @@ -69,6 +70,17 @@ static gboolean cb_closewidget(GtkWidget *widget, gpointer data) return TRUE; } +const gchar* remmina_exec_get_build_config(void) +{ + static const gchar build_config[] = + "Build configuration: " BUILD_CONFIG "\n" + "Build type: " BUILD_TYPE "\n" + "CFLAGS: " CFLAGS "\n" + "Compiler: " COMPILER_ID ", " COMPILER_VERSION "\n" + "Target architecture: " TARGET_ARCH "\n"; + return build_config; +} + void remmina_exec_exitremmina() { TRACE_CALL(__func__); @@ -213,9 +225,10 @@ void remmina_exec_command(RemminaCommandType command, const gchar* data) /* Show th widget with the list of plugins and versions */ remmina_plugin_manager_show(mainwindow); }else { - g_print("%s %s %s (git %s)\n", g_get_application_name(), ISSNAP, VERSION, REMMINA_GIT_REVISION); + g_print("\n%s %s %s (git %s)\n\n", g_get_application_name(), ISSNAP, VERSION, REMMINA_GIT_REVISION); remmina_plugin_manager_show_stdout(); + g_print("\n%s\n", remmina_exec_get_build_config()); remmina_exec_command(REMMINA_COMMAND_EXIT, NULL); } |