2012-11-29 06:03:37 -06:00
|
|
|
# - Add options without repeating them on the command line
|
|
|
|
#
|
|
|
|
# Synopsis:
|
|
|
|
#
|
|
|
|
# add_options (lang build opts)
|
|
|
|
#
|
|
|
|
# where:
|
|
|
|
#
|
|
|
|
# lang Name of the language whose compiler should receive the
|
|
|
|
# options, e.g. CXX. If a comma-separated list is received
|
|
|
|
# then the option is added for all those languages. Use the
|
|
|
|
# special value ALL_LANGUAGES for these languages: CXX, C
|
|
|
|
# and Fortran
|
|
|
|
#
|
|
|
|
# build Kind of build to which this options should apply,
|
|
|
|
# such as DEBUG and RELEASE. This can also be a comma-
|
|
|
|
# separated list. Use the special value ALL_BUILDS to apply
|
|
|
|
# to all builds.
|
|
|
|
#
|
|
|
|
# opts List of options to add. Each should be quoted.
|
|
|
|
#
|
|
|
|
# Example:
|
|
|
|
#
|
|
|
|
# add_options (CXX RELEASE "-O3" "-DNDEBUG" "-Wall")
|
|
|
|
|
|
|
|
function (add_options langs builds)
|
|
|
|
# special handling of empty language specification
|
|
|
|
if ("${langs}" STREQUAL "ALL_LANGUAGES")
|
|
|
|
set (langs CXX C Fortran)
|
|
|
|
endif ("${langs}" STREQUAL "ALL_LANGUAGES")
|
|
|
|
foreach (lang IN LISTS langs)
|
|
|
|
# prepend underscore if necessary
|
|
|
|
foreach (build IN LISTS builds)
|
|
|
|
if (NOT ("${build}" STREQUAL "ALL_BUILDS"))
|
|
|
|
set (_bld "_${build}")
|
|
|
|
string (TOUPPER "${_bld}" _bld)
|
|
|
|
else (NOT ("${build}" STREQUAL "ALL_BUILDS"))
|
|
|
|
set (_bld "")
|
|
|
|
endif (NOT ("${build}" STREQUAL "ALL_BUILDS"))
|
|
|
|
foreach (_opt IN LISTS ARGN)
|
|
|
|
set (_var "CMAKE_${lang}_FLAGS${_bld}")
|
|
|
|
#message (STATUS "Adding \"${_opt}\" to \${${_var}}")
|
|
|
|
# remove it first
|
|
|
|
string (REPLACE "${_opt}" "" _without "${${_var}}")
|
|
|
|
string (STRIP "${_without}" _without)
|
2013-03-05 04:43:06 -06:00
|
|
|
# we need to strip this one as well, so they are comparable
|
|
|
|
string (STRIP "${${_var}}" _stripped)
|
2012-11-29 06:03:37 -06:00
|
|
|
# if it wasn't there, then add it at the end
|
2013-03-05 04:43:06 -06:00
|
|
|
if ("${_without}" STREQUAL "${_stripped}")
|
2012-11-29 06:03:37 -06:00
|
|
|
# don't add any extra spaces if no options yet are set
|
2013-03-05 04:43:06 -06:00
|
|
|
if (NOT ${_stripped} STREQUAL "")
|
|
|
|
set (${_var} "${_stripped} ${_opt}")
|
|
|
|
else (NOT ${_stripped} STREQUAL "")
|
2012-11-29 06:03:37 -06:00
|
|
|
set (${_var} "${_opt}")
|
2013-03-05 04:43:06 -06:00
|
|
|
endif (NOT ${_stripped} STREQUAL "")
|
2012-11-29 06:03:37 -06:00
|
|
|
set (${_var} "${${_var}}" PARENT_SCOPE)
|
2013-03-05 04:43:06 -06:00
|
|
|
endif ("${_without}" STREQUAL "${_stripped}")
|
2012-11-29 06:03:37 -06:00
|
|
|
endforeach (_opt)
|
|
|
|
endforeach (build)
|
|
|
|
endforeach (lang)
|
|
|
|
endfunction (add_options lang build)
|
2013-04-04 16:06:08 -05:00
|
|
|
|
|
|
|
# set varname to flag unless user has specified something that matches regex
|
|
|
|
function (set_default_option varname flag regex)
|
|
|
|
if (NOT "$ENV{CXXFLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
|
|
|
|
set (${varname} ${flag} PARENT_SCOPE)
|
|
|
|
else (NOT "$ENV{CXXFLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
|
|
|
|
set (${varname} PARENT_SCOPE)
|
|
|
|
endif (NOT "$ENV{CXXFLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS}" MATCHES "${regex}"
|
|
|
|
AND NOT "${CMAKE_CXX_FLAGS_${CMAKE_BUILD_TYPE}}" MATCHES "${regex}")
|
|
|
|
endfunction (set_default_option)
|
|
|
|
|
|
|
|
# note: this must be called before project()
|
|
|
|
macro (no_default_options)
|
|
|
|
# prevent the platform probe to set options
|
|
|
|
set (CMAKE_NOT_USING_CONFIG_FLAGS TRUE)
|
|
|
|
endmacro (no_default_options)
|