Commit ff793263 authored by Dominik Charousset's avatar Dominik Charousset

Avoid leading spaces in CMake flags, relates #653

parent 4e95d084
...@@ -4,15 +4,15 @@ project(caf C CXX) ...@@ -4,15 +4,15 @@ project(caf C CXX)
include(CheckCSourceCompiles) include(CheckCSourceCompiles)
include(CheckCSourceRuns) include(CheckCSourceRuns)
# be nice to vim users # Be nice to VIM users and Clang tools.
set(CMAKE_EXPORT_COMPILE_COMMANDS 1) set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
# silence policy CMP0042 warning by enabling RPATH explicitly # Silence policy CMP0042 warning by enabling RPATH explicitly.
if(APPLE AND NOT DEFINED CMAKE_MACOSX_RPATH) if(APPLE AND NOT DEFINED CMAKE_MACOSX_RPATH)
set(CMAKE_MACOSX_RPATH true) set(CMAKE_MACOSX_RPATH true)
endif() endif()
# shared libs currently not supported on Windows # Shared libs are currently not supported on Windows.
if(WIN32 AND NOT CAF_BUILD_STATIC_ONLY) if(WIN32 AND NOT CAF_BUILD_STATIC_ONLY)
message(STATUS "CAF currently only supports static-only builds on Windows") message(STATUS "CAF currently only supports static-only builds on Windows")
set(CAF_BUILD_STATIC_ONLY yes) set(CAF_BUILD_STATIC_ONLY yes)
...@@ -53,20 +53,41 @@ endif() ...@@ -53,20 +53,41 @@ endif()
add_custom_target(configure COMMAND ${CMAKE_CURRENT_BINARY_DIR}/config.status) add_custom_target(configure COMMAND ${CMAKE_CURRENT_BINARY_DIR}/config.status)
################################################################################ ################################################################################
# set included flags if needed # # utility functions #
################################################################################ ################################################################################
if(CAF_FORCE_NO_EXCEPTIONS) # Appends `str` to the variable named `var` with a whitespace as separator.
set(CAF_NO_EXCEPTIONS yes) # Suppresses a leading whitespace if the variable is empty and does nothing if
endif() # `str` is empty.
function(build_string var str)
if(NOT str STREQUAL "")
if("${${var}}" STREQUAL "")
set("${var}" "${str}" PARENT_SCOPE)
else()
set("${var}" "${${var}} ${str}" PARENT_SCOPE)
endif()
endif()
endfunction(build_string)
# Forces `var` to 'no' if the content of the variables evaluates to false.
function(pretty_no var)
if(NOT "${${var}}")
set("${var}" no PARENT_SCOPE)
endif()
endfunction(pretty_no)
# Forces `var` to 'yes' if the content of the variables evaluates to false.
function(pretty_yes var)
if("${${var}}")
set("${var}" yes PARENT_SCOPE)
endif()
endfunction(pretty_yes)
################################################################################ ################################################################################
# set prefix paths if available # # set prefix paths if available #
################################################################################ ################################################################################
if(DEFINED CAF_QT_PREFIX_PATH) build_string("CMAKE_PREFIX_PATH" "${CAF_QT_PREFIX_PATH}")
set(CMAKE_PREFIX_PATH "${CAF_QT_PREFIX_PATH}")
endif()
################################################################################ ################################################################################
# enable ccache if required by user # # enable ccache if required by user #
...@@ -84,48 +105,21 @@ if(CAF_USE_CCACHE) ...@@ -84,48 +105,21 @@ if(CAF_USE_CCACHE)
endif(CAF_USE_CCACHE) endif(CAF_USE_CCACHE)
################################################################################ ################################################################################
# make sure all variables are set to "no" if undefined for summary output # # make sure config parameters are printed with yes or no in summary #
################################################################################ ################################################################################
if(NOT CAF_ENABLE_RUNTIME_CHECKS) pretty_yes("CAF_FORCE_NO_EXCEPTIONS")
set(CAF_ENABLE_RUNTIME_CHECKS no)
endif()
if(NOT CAF_NO_MEM_MANAGEMENT)
set(CAF_NO_MEM_MANAGEMENT no)
endif()
if(NOT CAF_NO_EXCEPTIONS)
set(CAF_NO_EXCEPTIONS no)
endif()
if(NOT CAF_BUILD_STATIC_ONLY)
set(CAF_BUILD_STATIC_ONLY no)
endif()
if(NOT CAF_BUILD_STATIC)
set(CAF_BUILD_STATIC no)
endif()
if(NOT CAF_NO_OPENCL)
set(CAF_NO_OPENCL no)
endif()
if(NOT CAF_NO_OPENSSL)
set(CAF_NO_OPENSSL no)
endif()
if(NOT CAF_NO_PYTHON)
set(CAF_NO_PYTHON no)
endif()
if(NOT CAF_NO_TOOLS)
set(CAF_NO_TOOLS no)
endif()
if(NOT CAF_NO_SUMMARY) pretty_no("CAF_ENABLE_RUNTIME_CHECKS")
set(CAF_NO_SUMMARY no) pretty_no("CAF_NO_MEM_MANAGEMENT")
endif() pretty_no("CAF_NO_EXCEPTIONS")
pretty_no("CAF_BUILD_STATIC_ONLY")
pretty_no("CAF_BUILD_STATIC")
pretty_no("CAF_NO_OPENCL")
pretty_no("CAF_NO_OPENSSL")
pretty_no("CAF_NO_PYTHON")
pretty_no("CAF_NO_TOOLS")
pretty_no("CAF_NO_SUMMARY")
if(NOT CAF_NO_IO) if(NOT CAF_NO_IO)
set(CAF_NO_IO no) set(CAF_NO_IO no)
...@@ -138,7 +132,7 @@ endif() ...@@ -138,7 +132,7 @@ endif()
# respect environment variables # # respect environment variables #
################################################################################ ################################################################################
set(LDFLAGS "$ENV{LDFLAGS}") build_string("LDFLAGS" "$ENV{LDFLAGS}")
################################################################################ ################################################################################
# get version of CAF # # get version of CAF #
...@@ -215,19 +209,18 @@ if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK) ...@@ -215,19 +209,18 @@ if(NOT WIN32 AND NOT CAF_NO_COMPILER_CHECK)
endif() endif()
endif() endif()
# set optional build flags # set optional build flags
set(EXTRA_FLAGS "")
# increase max. template depth on GCC and Clang # increase max. template depth on GCC and Clang
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang" if("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang"
OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") OR "${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
set(EXTRA_FLAGS "-ftemplate-depth=512 -ftemplate-backtrace-limit=0") build_string("EXTRA_FLAGS" "-ftemplate-depth=512 -ftemplate-backtrace-limit=0")
endif() endif()
# explicitly disable obnoxious GCC warnings # explicitly disable obnoxious GCC warnings
if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU")
set(EXTRA_FLAGS "-Wno-missing-field-initializers") build_string("EXTRA_FLAGS" "-Wno-missing-field-initializers")
endif() endif()
# add "-Werror" flag if --pedantic-build is used # add "-Werror" flag if --pedantic-build is used
if(CAF_CXX_WARNINGS_AS_ERRORS) if(CAF_CXX_WARNINGS_AS_ERRORS)
set(EXTRA_FLAGS "${EXTRA_FLAGS} -Werror") build_string("EXTRA_FLAGS" "-Werror")
endif() endif()
# set compiler flags for GCOV if requested # set compiler flags for GCOV if requested
if(CAF_ENABLE_GCOV) if(CAF_ENABLE_GCOV)
...@@ -236,11 +229,11 @@ if(CAF_ENABLE_GCOV) ...@@ -236,11 +229,11 @@ if(CAF_ENABLE_GCOV)
else() else()
set(NO_INLINE "-fno-inline -fno-inline-small-functions -fno-default-inline") set(NO_INLINE "-fno-inline -fno-inline-small-functions -fno-default-inline")
endif() endif()
set(EXTRA_FLAGS "${EXTRA_FLAGS} -fprofile-arcs -ftest-coverage ${NO_INLINE}") build_string("EXTRA_FLAGS" "-fprofile-arcs -ftest-coverage ${NO_INLINE}")
endif() endif()
# set -fno-exception if requested # set -fno-exception if requested
if(CAF_FORCE_NO_EXCEPTIONS) if(CAF_FORCE_NO_EXCEPTIONS)
set(EXTRA_FLAGS "${EXTRA_FLAGS} -fno-exceptions") build_string("EXTRA_FLAGS" "-fno-exceptions")
endif() endif()
# enable a ton of warnings if --more-clang-warnings is used # enable a ton of warnings if --more-clang-warnings is used
if(CAF_MORE_WARNINGS) if(CAF_MORE_WARNINGS)
...@@ -274,8 +267,9 @@ if(CAF_MORE_WARNINGS) ...@@ -274,8 +267,9 @@ if(CAF_MORE_WARNINGS)
endif() endif()
# convert CMake list to a single string, erasing the ";" separators # convert CMake list to a single string, erasing the ";" separators
string(REPLACE ";" "" WFLAGS_STR ${WFLAGS}) string(REPLACE ";" "" WFLAGS_STR ${WFLAGS})
set(EXTRA_FLAGS "${EXTRA_FLAGS} ${WFLAGS_STR}") build_string("EXTRA_FLAGS" "${WFLAGS_STR}")
endif() endif()
# add -stdlib=libc++ when using Clang if possible # add -stdlib=libc++ when using Clang if possible
if(NOT CAF_NO_AUTO_LIBCPP AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") if(NOT CAF_NO_AUTO_LIBCPP AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}") set(CXXFLAGS_BACKUP "${CMAKE_CXX_FLAGS}")
...@@ -290,7 +284,7 @@ if(NOT CAF_NO_AUTO_LIBCPP AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang") ...@@ -290,7 +284,7 @@ if(NOT CAF_NO_AUTO_LIBCPP AND "${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
else() else()
message(STATUS "Automatically added '-stdlib=libc++' flag " message(STATUS "Automatically added '-stdlib=libc++' flag "
"(CAF_NO_AUTO_LIBCPP not defined)") "(CAF_NO_AUTO_LIBCPP not defined)")
set(EXTRA_FLAGS "${EXTRA_FLAGS} -stdlib=libc++") build_string("EXTRA_FLAGS" "-stdlib=libc++")
endif() endif()
# restore CXX flags # restore CXX flags
set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}")
...@@ -308,30 +302,30 @@ if(CAF_ENABLE_ADDRESS_SANITIZER) ...@@ -308,30 +302,30 @@ if(CAF_ENABLE_ADDRESS_SANITIZER)
message(WARNING "Address Sanitizer is not available on selected compiler") message(WARNING "Address Sanitizer is not available on selected compiler")
else() else()
message(STATUS "Enable Address Sanitizer") message(STATUS "Enable Address Sanitizer")
set(EXTRA_FLAGS "${EXTRA_FLAGS} -fsanitize=address -fno-omit-frame-pointer") build_string("EXTRA_FLAGS" "-fsanitize=address -fno-omit-frame-pointer")
endif() endif()
# restore CXX flags # restore CXX flags
set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}") set(CMAKE_CXX_FLAGS "${CXXFLAGS_BACKUP}")
endif(CAF_ENABLE_ADDRESS_SANITIZER) endif(CAF_ENABLE_ADDRESS_SANITIZER)
# -pthread is ignored on MacOSX but required on other platforms # -pthread is ignored on MacOSX but required on other platforms
if(NOT APPLE AND NOT WIN32) if(NOT APPLE AND NOT WIN32)
set(EXTRA_FLAGS "${EXTRA_FLAGS} -pthread") build_string("EXTRA_FLAGS" "-pthread")
endif() endif()
# -fPIC generates warnings on MinGW and Cygwin plus extra setup steps needed on MinGW # -fPIC generates warnings on MinGW and Cygwin plus extra setup steps needed on MinGW
if(MINGW) if(MINGW)
add_definitions(-D_WIN32_WINNT=0x0600) add_definitions(-D_WIN32_WINNT=0x0600)
add_definitions(-DWIN32) add_definitions(-DWIN32)
include(GenerateExportHeader) include(GenerateExportHeader)
set(LDFLAGS "${LDFLAGS} ws2_32 -liphlpapi -lpsapi") build_string("LDFLAGS" "ws2_32 -liphlpapi -lpsapi")
# build static to avoid runtime dependencies to GCC libraries # build static to avoid runtime dependencies to GCC libraries
set(EXTRA_FLAGS "${EXTRA_FLAGS} -static") build_string("EXTRA_FLAGS" "-static")
elseif(CYGWIN) elseif(CYGWIN)
set(EXTRA_FLAGS "${EXTRA_FLAGS} -U__STRICT_ANSI__") build_string("EXTRA_FLAGS" "-U__STRICT_ANSI__")
else() else()
set(EXTRA_FLAGS "${EXTRA_FLAGS} -fPIC") build_string("EXTRA_FLAGS" "-fPIC")
endif() endif()
if (WIN32) if (WIN32)
set(LDFLAGS "${LDFLAGS} ws2_32 iphlpapi") build_string("LDFLAGS" "ws2_32 iphlpapi")
endif() endif()
# iOS support # iOS support
if(CAF_OSX_SYSROOT) if(CAF_OSX_SYSROOT)
...@@ -339,9 +333,11 @@ if(CAF_OSX_SYSROOT) ...@@ -339,9 +333,11 @@ if(CAF_OSX_SYSROOT)
endif() endif()
if(CAF_IOS_DEPLOYMENT_TARGET) if(CAF_IOS_DEPLOYMENT_TARGET)
if("${CAF_OSX_SYSROOT}" STREQUAL "iphonesimulator") if("${CAF_OSX_SYSROOT}" STREQUAL "iphonesimulator")
set(EXTRA_FLAGS "${EXTRA_FLAGS} -mios-simulator-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") build_string("EXTRA_FLAGS"
"-mios-simulator-version-min=${CAF_IOS_DEPLOYMENT_TARGET}")
else() else()
set(EXTRA_FLAGS "${EXTRA_FLAGS} -miphoneos-version-min=${CAF_IOS_DEPLOYMENT_TARGET}") build_string("EXTRA_FLAGS"
"-miphoneos-version-min=${CAF_IOS_DEPLOYMENT_TARGET}")
endif() endif()
endif() endif()
# check if the user provided CXXFLAGS, set defaults otherwise # check if the user provided CXXFLAGS, set defaults otherwise
...@@ -365,7 +361,7 @@ if(NOT CMAKE_BUILD_TYPE) ...@@ -365,7 +361,7 @@ if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE RelWithDebInfo) set(CMAKE_BUILD_TYPE RelWithDebInfo)
endif() endif()
# needed by subprojects # needed by subprojects
set(LDFLAGS ${LDFLAGS} ${CMAKE_LD_LIBS}) build_string("LDFLAGS" "${CMAKE_LD_LIBS}")
################################################################################ ################################################################################
# configure build_config.hpp header # # configure build_config.hpp header #
...@@ -397,7 +393,7 @@ if(CAF_USE_ASIO) ...@@ -397,7 +393,7 @@ if(CAF_USE_ASIO)
if(Boost_FOUND) if(Boost_FOUND)
include_directories(${Boost_INCLUDE_DIRS}) include_directories(${Boost_INCLUDE_DIRS})
set(LD_DIRS ${LD_DIRS} ${Boost_LIBRARIES}) set(LD_DIRS ${LD_DIRS} ${Boost_LIBRARIES})
set(LDFLAGS ${LDFLAGS} ${Boost_SYSTEM_LIBRARY}) build_string("LDFLAGS" "${Boost_SYSTEM_LIBRARY}")
set(CAF_USE_ASIO_INT 1) set(CAF_USE_ASIO_INT 1)
else() else()
set(CAF_USE_ASIO no) set(CAF_USE_ASIO no)
...@@ -779,7 +775,7 @@ if(NOT CAF_NO_SUMMARY) ...@@ -779,7 +775,7 @@ if(NOT CAF_NO_SUMMARY)
message(STATUS message(STATUS
"\n====================| Build Summary |====================" "\n====================| Build Summary |===================="
"\n" "\n"
"\nLibcaf version: ${CAF_VERSION}" "\nCAF version: ${CAF_VERSION}"
"\n" "\n"
"\nBuild type: ${CMAKE_BUILD_TYPE}" "\nBuild type: ${CMAKE_BUILD_TYPE}"
"\nBuild static: ${CAF_BUILD_STATIC}" "\nBuild static: ${CAF_BUILD_STATIC}"
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment