474320e990
Seems that the phrase "add more quotes" from sh/bash scripting applies to CMake as well. E.g. passing an unquoted list ${FOO} to a function that expects one argument results in only the first element of the list being passed as an argument and the rest get ignored. Adding quotes helps ("${FOO}"). list(INSERT ...) is weird. Inserting an empty string to an empty variable results in empty list, but inserting it to a non-empty variable does insert an empty element to the list. Since INSERT requires at least one element, "${CMAKE_THREAD_LIBS_INIT}" needs to be quoted in CMakeLists.txt. It might result in an empty element in the list. It seems to not matter as empty elements consistently get ignored in that variable. In fact, calling cmake_check_push_state() and cmake_check_pop_state() will strip the empty elements from CMAKE_REQUIRED_LIBRARIES! In addition to quoting fixes, this fixes checks for the cache variables in tuklib_cpucores.cmake and tuklib_physmem.cmake. Thanks to Martin Matuška for testing and reporting the problems. These fixes aren't tested yet but hopefully they soon will be.
50 lines
1.6 KiB
CMake
50 lines
1.6 KiB
CMake
#
|
|
# tuklib_common.cmake - common functions and macros for tuklib_*.cmake files
|
|
#
|
|
# Author: Lasse Collin
|
|
#
|
|
# This file has been put into the public domain.
|
|
# You can do whatever you want with this file.
|
|
#
|
|
|
|
function(tuklib_add_definitions TARGET_OR_ALL DEFINITIONS)
|
|
# DEFINITIONS may be an empty string/list but it's fine here. There is
|
|
# no need to quote ${DEFINITIONS} as empty arguments are fine here.
|
|
if(TARGET_OR_ALL STREQUAL "ALL")
|
|
add_compile_definitions(${DEFINITIONS})
|
|
else()
|
|
target_compile_definitions("${TARGET_OR_ALL}" PRIVATE ${DEFINITIONS})
|
|
endif()
|
|
endfunction()
|
|
|
|
function(tuklib_add_definition_if TARGET_OR_ALL VAR)
|
|
if(${VAR})
|
|
tuklib_add_definitions("${TARGET_OR_ALL}" "${VAR}")
|
|
endif()
|
|
endfunction()
|
|
|
|
# This is an over-simplified version of AC_USE_SYSTEM_EXTENSIONS in Autoconf
|
|
# or gl_USE_SYSTEM_EXTENSIONS in gnulib.
|
|
macro(tuklib_use_system_extensions TARGET_OR_ALL)
|
|
if(NOT WIN32)
|
|
# FIXME? The Solaris-specific __EXTENSIONS__ should be conditional
|
|
# even on Solaris. See gnulib: git log m4/extensions.m4.
|
|
# FIXME? gnulib and autoconf.git has lots of new stuff.
|
|
tuklib_add_definitions("${TARGET_OR_ALL}"
|
|
_GNU_SOURCE
|
|
__EXTENSIONS__
|
|
_POSIX_PTHREAD_SEMANTICS
|
|
_TANDEM_SOURCE
|
|
_ALL_SOURCE
|
|
)
|
|
|
|
list(APPEND CMAKE_REQUIRED_DEFINITIONS
|
|
-D_GNU_SOURCE
|
|
-D__EXTENSIONS__
|
|
-D_POSIX_PTHREAD_SEMANTICS
|
|
-D_TANDEM_SOURCE
|
|
-D_ALL_SOURCE
|
|
)
|
|
endif()
|
|
endmacro()
|