From f59dfc3ab8ca43761540c0f0d1e37c75740aa0f9 Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Mon, 23 Jan 2017 15:58:17 -0200 Subject: [PATCH] cmake: move functions to EflMacros.cmake --- cmake/helpers/CommonHeaderChecks.cmake | 139 ------------------------ cmake/helpers/EflMacros.cmake | 140 +++++++++++++++++++++++++ 2 files changed, 140 insertions(+), 139 deletions(-) diff --git a/cmake/helpers/CommonHeaderChecks.cmake b/cmake/helpers/CommonHeaderChecks.cmake index c895f793e0..a106c9db4e 100644 --- a/cmake/helpers/CommonHeaderChecks.cmake +++ b/cmake/helpers/CommonHeaderChecks.cmake @@ -1,120 +1,3 @@ -unset(HEADER_FILE_CONTENT CACHE) - -# HEADER_CHECK(header [NAME variable] [INCLUDE_FILES extra1.h .. extraN.h]) -# -# Check if the header file exists, in such case define variable -# in configuration file. -# -# Variable defaults to HAVE_${HEADER}, where HEADER is the uppercase -# representation of the first parameter. It can be overridden using -# NAME keyword. -# -# To include extra files, then use INCLUDE_FILES keyword. -function(HEADER_CHECK header) - string(TOUPPER HAVE_${header} var) - string(REGEX REPLACE "[^a-zA-Z0-9]" "_" var "${var}") - string(REGEX REPLACE "_{2,}" "_" var "${var}") - - cmake_parse_arguments(PARAMS "" "NAME" "INCLUDE_FILES" ${ARGN}) - - if(PARAMS_NAME) - set(var ${PARAMS_NAME}) - endif() - - set(CMAKE_EXTRA_INCLUDE_FILES "${PARAMS_INCLUDE_FILES}") - - CHECK_INCLUDE_FILE(${header} ${var}) - - if(${${var}}) - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") - else() - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") - endif() -endfunction() - -# FUNC_CHECK(func [NAME variable] -# [INCLUDE_FILES header1.h .. headerN.h] -# [LIBRARIES lib1 ... libN] -# [DEFINITIONS -DA=1 .. -DN=123] -# [FLAGS -cmdlineparam1 .. -cmdlineparamN] -# [CXX]) -# -# Check if the function exists, in such case define variable in -# configuration file. -# -# Variable defaults to HAVE_${FUNC}, where FUNC is the uppercase -# representation of the first parameter. It can be overridden using -# NAME keyword. -# -# To define include files use INCLUDE_FILES keyword. -# -# To use C++ compiler, use CXX keyword -function(FUNC_CHECK func) - string(TOUPPER HAVE_${func} var) - string(REGEX REPLACE "_{2,}" "_" var "${var}") - - cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN}) - - set(CMAKE_REQUIRED_LIBRARIES "${PARAMS_LIBRARIES}") - set(CMAKE_REQUIRED_DEFINITIONS "${PARAMS_DEFINITIONS}") - set(CMAKE_REQUIRED_FLAGS "${PARAMS_FLAGS}") - - if(PARAMS_CXX) - check_cxx_symbol_exists(${func} "${PARAMS_INCLUDE_FILES}" ${var}) - else() - check_symbol_exists(${func} "${PARAMS_INCLUDE_FILES}" ${var}) - endif() - - if(${${var}} ) - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") - else() - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") - endif() -endfunction() - -# TYPE_CHECK(type [NAME variable] -# [INCLUDE_FILES file1.h ... fileN.h] -# [LIBRARIES lib1 ... libN] -# [DEFINITIONS -DA=1 .. -DN=123] -# [FLAGS -cmdlineparam1 .. -cmdlineparamN] -# [CXX]) -# -# Check if the type exists and its size, in such case define variable -# in configuration file. -# -# Variable defaults to HAVE_${TYPE}, where TYPE is the uppercase -# representation of the first parameter. It can be overridden using -# NAME keyword. -# -# To define include files use INCLUDE_FILES keyword. -# -# To use C++ compiler, use CXX keyword -function(TYPE_CHECK type) - string(TOUPPER HAVE_${type} var) - string(REGEX REPLACE "_{2,}" "_" var "${var}") - - cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN}) - - set(CMAKE_REQUIRED_LIBRARIES "${PARAMS_LIBRARIES}") - set(CMAKE_REQUIRED_DEFINITIONS "${PARAMS_DEFINITIONS}") - set(CMAKE_REQUIRED_FLAGS "${PARAMS_FLAGS}") - set(CMAKE_EXTRA_INCLUDE_FILES "${PARAMS_INCLUDE_FILES}") - - if(PARAMS_CXX) - set(lang CXX) - else() - set(lang C) - endif() - - CHECK_TYPE_SIZE(${type} ${var} LANGUAGE ${lang}) - - if(HAVE_${var}) - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") - else() - SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") - endif() -endfunction() - FUNC_CHECK(geteuid INCLUDE_FILES unistd.h) FUNC_CHECK(getuid INCLUDE_FILES unistd.h) @@ -151,25 +34,3 @@ HEADER_CHECK(sys/types.h) HEADER_CHECK(execinfo.h) HEADER_CHECK(libunwind.h NAME HAVE_UNWIND) -# EFL_HEADER_CHECKS_FINALIZE(file) -# -# Write the configuration gathered with HEADER_CHECK(), TYPE_CHECK() -# and FUNC_CHECK() to the given file. -function(EFL_HEADER_CHECKS_FINALIZE file) - file(WRITE ${file}.new ${HEADER_FILE_CONTENT}) - if (NOT EXISTS ${file}) - file(RENAME ${file}.new ${file}) - message(STATUS "${file} was generated.") - else() - file(MD5 ${file}.new _new_md5) - file(MD5 ${file} _old_md5) - if(_new_md5 STREQUAL _old_md5) - message(STATUS "${file} is unchanged.") - else() - file(REMOVE ${file}) - file(RENAME ${file}.new ${file}) - message(STATUS "${file} was updated.") - endif() - endif() - unset(HEADER_FILE_CONTENT CACHE) # allow to reuse with an empty contents -endfunction() diff --git a/cmake/helpers/EflMacros.cmake b/cmake/helpers/EflMacros.cmake index 516658fae6..dee0c565e7 100644 --- a/cmake/helpers/EflMacros.cmake +++ b/cmake/helpers/EflMacros.cmake @@ -127,6 +127,146 @@ function(EFL_FINALIZE) add_custom_target(all-tests DEPENDS ${EFL_ALL_TESTS}) endfunction() +unset(HEADER_FILE_CONTENT CACHE) + +# HEADER_CHECK(header [NAME variable] [INCLUDE_FILES extra1.h .. extraN.h]) +# +# Check if the header file exists, in such case define variable +# in configuration file. +# +# Variable defaults to HAVE_${HEADER}, where HEADER is the uppercase +# representation of the first parameter. It can be overridden using +# NAME keyword. +# +# To include extra files, then use INCLUDE_FILES keyword. +function(HEADER_CHECK header) + string(TOUPPER HAVE_${header} var) + string(REGEX REPLACE "[^a-zA-Z0-9]" "_" var "${var}") + string(REGEX REPLACE "_{2,}" "_" var "${var}") + + cmake_parse_arguments(PARAMS "" "NAME" "INCLUDE_FILES" ${ARGN}) + + if(PARAMS_NAME) + set(var ${PARAMS_NAME}) + endif() + + set(CMAKE_EXTRA_INCLUDE_FILES "${PARAMS_INCLUDE_FILES}") + + CHECK_INCLUDE_FILE(${header} ${var}) + + if(${${var}}) + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") + else() + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") + endif() +endfunction() + +# FUNC_CHECK(func [NAME variable] +# [INCLUDE_FILES header1.h .. headerN.h] +# [LIBRARIES lib1 ... libN] +# [DEFINITIONS -DA=1 .. -DN=123] +# [FLAGS -cmdlineparam1 .. -cmdlineparamN] +# [CXX]) +# +# Check if the function exists, in such case define variable in +# configuration file. +# +# Variable defaults to HAVE_${FUNC}, where FUNC is the uppercase +# representation of the first parameter. It can be overridden using +# NAME keyword. +# +# To define include files use INCLUDE_FILES keyword. +# +# To use C++ compiler, use CXX keyword +function(FUNC_CHECK func) + string(TOUPPER HAVE_${func} var) + string(REGEX REPLACE "_{2,}" "_" var "${var}") + + cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN}) + + set(CMAKE_REQUIRED_LIBRARIES "${PARAMS_LIBRARIES}") + set(CMAKE_REQUIRED_DEFINITIONS "${PARAMS_DEFINITIONS}") + set(CMAKE_REQUIRED_FLAGS "${PARAMS_FLAGS}") + + if(PARAMS_CXX) + check_cxx_symbol_exists(${func} "${PARAMS_INCLUDE_FILES}" ${var}) + else() + check_symbol_exists(${func} "${PARAMS_INCLUDE_FILES}" ${var}) + endif() + + if(${${var}} ) + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") + else() + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") + endif() +endfunction() + +# TYPE_CHECK(type [NAME variable] +# [INCLUDE_FILES file1.h ... fileN.h] +# [LIBRARIES lib1 ... libN] +# [DEFINITIONS -DA=1 .. -DN=123] +# [FLAGS -cmdlineparam1 .. -cmdlineparamN] +# [CXX]) +# +# Check if the type exists and its size, in such case define variable +# in configuration file. +# +# Variable defaults to HAVE_${TYPE}, where TYPE is the uppercase +# representation of the first parameter. It can be overridden using +# NAME keyword. +# +# To define include files use INCLUDE_FILES keyword. +# +# To use C++ compiler, use CXX keyword +function(TYPE_CHECK type) + string(TOUPPER HAVE_${type} var) + string(REGEX REPLACE "_{2,}" "_" var "${var}") + + cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN}) + + set(CMAKE_REQUIRED_LIBRARIES "${PARAMS_LIBRARIES}") + set(CMAKE_REQUIRED_DEFINITIONS "${PARAMS_DEFINITIONS}") + set(CMAKE_REQUIRED_FLAGS "${PARAMS_FLAGS}") + set(CMAKE_EXTRA_INCLUDE_FILES "${PARAMS_INCLUDE_FILES}") + + if(PARAMS_CXX) + set(lang CXX) + else() + set(lang C) + endif() + + CHECK_TYPE_SIZE(${type} ${var} LANGUAGE ${lang}) + + if(HAVE_${var}) + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#define ${var} 1\n") + else() + SET_GLOBAL(HEADER_FILE_CONTENT "${HEADER_FILE_CONTENT}#undef ${var}\n") + endif() +endfunction() + +# EFL_HEADER_CHECKS_FINALIZE(file) +# +# Write the configuration gathered with HEADER_CHECK(), TYPE_CHECK() +# and FUNC_CHECK() to the given file. +function(EFL_HEADER_CHECKS_FINALIZE file) + file(WRITE ${file}.new ${HEADER_FILE_CONTENT}) + if (NOT EXISTS ${file}) + file(RENAME ${file}.new ${file}) + message(STATUS "${file} was generated.") + else() + file(MD5 ${file}.new _new_md5) + file(MD5 ${file} _old_md5) + if(_new_md5 STREQUAL _old_md5) + message(STATUS "${file} is unchanged.") + else() + file(REMOVE ${file}) + file(RENAME ${file}.new ${file}) + message(STATUS "${file} was updated.") + endif() + endif() + unset(HEADER_FILE_CONTENT CACHE) # allow to reuse with an empty contents +endfunction() + # EFL_FILES_TO_ABSOLUTE(Var Source_Dir Binary_Dir [file1 ... fileN]) # # Convert list of files to absolute path. If not absolute, then