Merge remote-tracking branch 'origin/master' into dab
[staging/xdg-launcher.git] / cmake / cmake.d / 04-build_options.cmake
index 3a1fc81..18a1b17 100644 (file)
@@ -21,7 +21,7 @@
 #--------------------------------------------------------------------------
 #  WARNING:
 #     Do not change this cmake template
-#     Customise your preferences in "./etc/config.cmake"
+#     Customise your preferences in "./conf.d/cmake/config.cmake"
 #--------------------------------------------------------------------------
 
 # Check GCC minimal version
@@ -33,24 +33,23 @@ if (gcc_minimal_version)
        endif()
 endif(gcc_minimal_version)
 
-# Check Kernel minimal version
+# Check Kernel mandatory version, will fail the configuration if required version not matched.
+if (kernel_mandatory_version)
+       message (STATUS "${Cyan}-- Check kernel_mandatory_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
+       if (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+               message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_mandatory_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
+       endif (KERNEL_VERSION VERSION_LESS ${kernel_mandatory_version})
+endif(kernel_mandatory_version)
+
+# Check Kernel minimal version just print a Warning about missing features
+# and set a definition to be used as preprocessor condition in code to disable
+# incompatibles features.
 if (kernel_minimal_version)
-       if(DEFINED ENV{SDKTARGETSYSROOT})
-               file(STRINGS $ENV{SDKTARGETSYSROOT}/usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
-       else()
-               file(STRINGS /usr/include/linux/version.h LINUX_VERSION_CODE_LINE REGEX "LINUX_VERSION_CODE")
-       endif()
-
-       string(REGEX MATCH "[0-9]+" LINUX_VERSION_CODE ${LINUX_VERSION_CODE_LINE})
-       math(EXPR a "${LINUX_VERSION_CODE} >> 16")
-       math(EXPR b "(${LINUX_VERSION_CODE} >> 8) & 255")
-       math(EXPR c "(${LINUX_VERSION_CODE} & 255)")
-
-       set(KERNEL_VERSION "${a}.${b}.${c}")
        message (STATUS "${Cyan}-- Check kernel_minimal_version (found kernel version ${KERNEL_VERSION})${ColourReset}")
-
        if (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
-               message(FATAL_ERROR "${Red}**** FATAL: Require at least ${kernel_minimal_version} please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.")
+               message(WARNING "${Yellow}**** Warning: Some feature(s) require at least ${kernel_minimal_version}. Please use a recent kernel or source your SDK environment then clean and reconfigure your CMake project.${ColourReset}")
+       else (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
+               add_definitions(-DKERNEL_MINIMAL_VERSION_OK)
        endif (KERNEL_VERSION VERSION_LESS ${kernel_minimal_version})
 endif(kernel_minimal_version)
 
@@ -69,29 +68,32 @@ add_compile_options(-Werror=maybe-uninitialized)
 add_compile_options(-Werror=implicit-function-declaration)
 add_compile_options(-ffunction-sections -fdata-sections)
 add_compile_options(-fPIC)
-add_compile_options(-g)
 
-set(CMAKE_C_FLAGS_PROFILING   "-g -O2 -pg -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for profiling")
-set(CMAKE_C_FLAGS_DEBUG       "-g -O2 -ggdb -Wp,-U_FORTIFY_SOURCE" CACHE STRING "Flags for debugging")
-set(CMAKE_C_FLAGS_RELEASE     "-O2" CACHE STRING "Flags for releasing")
-set(CMAKE_C_FLAGS_CCOV        "-g -O2 --coverage" CACHE STRING "Flags for coverage test")
+# TODO: make more visible readable compile (macro ? split ?)
+# Compilation option depending on CMAKE_BUILD_TYPE
+##################################################
+add_compile_options($<$<CONFIG:PROFILING>:-g>)
+add_compile_options($<$<CONFIG:PROFILING>:-O0>)
+add_compile_options($<$<CONFIG:PROFILING>:-pg>)
+add_compile_options($<$<CONFIG:PROFILING>:-Wp,-U_FORTIFY_SOURCE>)
+
+add_compile_options($<$<CONFIG:DEBUG>:-g>)
+add_compile_options($<$<CONFIG:DEBUG>:-O0>)
+add_compile_options($<$<CONFIG:DEBUG>:-ggdb>)
+add_compile_options($<$<CONFIG:DEBUG>:-Wp,-U_FORTIFY_SOURCE>)
 
-set(CMAKE_CXX_FLAGS_PROFILING    "-g -O0 -pg -Wp,-U_FORTIFY_SOURCE")
-set(CMAKE_CXX_FLAGS_DEBUG        "-g -O0 -ggdb -Wp,-U_FORTIFY_SOURCE")
-set(CMAKE_CXX_FLAGS_RELEASE      "-g -O2")
-set(CMAKE_CXX_FLAGS_CCOV "-g -O2 --coverage")
+add_compile_options($<$<CONFIG:CCOV>:-g>)
+add_compile_options($<$<CONFIG:CCOV>:-O2>)
+add_compile_options($<$<CONFIG:CCOV>:--coverage>)
 
 # Env variable overload default
 if(DEFINED ENV{INSTALL_PREFIX})
-       set (INSTALL_PREFIX $ENV{INSTALL_PREFIX})
+       set(INSTALL_PREFIX $ENV{INSTALL_PREFIX} CACHE PATH "The path where to install")
 else()
        set(INSTALL_PREFIX "${CMAKE_SOURCE_DIR}/Install" CACHE PATH "The path where to install")
 endif()
 set(CMAKE_INSTALL_PREFIX ${INSTALL_PREFIX} CACHE STRING "Installation Prefix")
 
-# (BUG!!!) as PKG_CONFIG_PATH does not work [should be en env variable]
-set(PKG_CONFIG_USE_CMAKE_PREFIX_PATH ON CACHE BOOLEAN "Flag for using prefix path")
-
 # Loop on required package and add options
 foreach (PKG_CONFIG ${PKG_REQUIRED_LIST})
        string(REGEX REPLACE "[<>]?=.*$" "" XPREFIX ${PKG_CONFIG})