EFL_PROJECT(1.19.99)
-if (NOT EFL_BUILD_ID)
- set(EFL_BUILD_ID 120)
-endif()
-
if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR "In-source builds not allowed. Use: mkdir -p build && cmake -H. -Bbuild")
endif()
EFL_OPTIONS_SUMMARY()
-configure_file(
- ${PROJECT_SOURCE_DIR}/src/lib/efl/config.h.cmake
- ${PROJECT_BINARY_DIR}/src/lib/efl/config.h)
+# TODO: when autotools is gone, rename this file in repository
+# and remove this copy (using generate to skip @-subst)
+file(GENERATE
+ OUTPUT ${PROJECT_BINARY_DIR}/src/lib/efl/config.h
+ INPUT ${PROJECT_SOURCE_DIR}/src/lib/efl/config.h.cmake)
+EFL_HEADER_CHECKS_FINALIZE(${PROJECT_BINARY_DIR}/src/lib/efl/config_gen.h)
+
configure_file(
${PROJECT_SOURCE_DIR}/src/lib/efl/Efl_Config.h.cmake
${PROJECT_BINARY_DIR}/src/lib/efl/Efl_Config.h)
-EFL_HEADER_CHECKS_FINALIZE(${PROJECT_BINARY_DIR}/src/lib/efl/config_headers.h)
EFL_FINALIZE()
#define all our header / function checks
include(./CommonHeaderChecks)
+CHECK_APPEND_DEFINE(EFL_BETA_API_SUPPORT 1)
+if(CMAKE_THREAD_LIBS_INIT)
+ set(EFL_HAVE_THREADS 1)
+endif()
+CHECK_APPEND_DEFINE(EFL_HAVE_THREADS "${EFL_HAVE_THREADS}")
-#this is needed to build efl
-set(EFL_BETA_API_SUPPORT 1)
+CHECK_APPEND_DEFINE(MODULE_ARCH "\"v-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}\"")
+CHECK_APPEND_DEFINE(SHARED_LIB_SUFFIX "\"${CMAKE_SHARED_LIBRARY_SUFFIX}\"")
+CHECK_APPEND_DEFINE(EXEEXT "\"${CMAKE_EXECUTABLE_SUFFIX}\"")
-#if there are thread init support from cmake then efl has threads
+# TODO: change code and remove:
+CHECK_APPEND_DEFINE(VMAJ ${PROJECT_VERSION_MAJOR})
+CHECK_APPEND_DEFINE(VMIN ${PROJECT_VERSION_MINOR})
+CHECK_APPEND_DEFINE(VMIC ${PROJECT_VERSION_PATCH})
+CHECK_APPEND_DEFINE(VREV ${PROJECT_VERSION_TWEAK})
-if (CMAKE_THREAD_LIBS_INIT)
- set(EFL_HAVE_THREADS 1)
-endif()
-SET_GLOBAL(EINA_SAFETY_CHECKS 1)
-SET_GLOBAL(EINA_DEBUG_THREADS OFF)
-SET_GLOBAL(ENABLE_VALGRIND OFF)
+pkg_check_modules(VALGRIND valgrind)
+
+# set default option values based on BUILD_PROFILE
+set(EINA_DEBUG_THREADS OFF)
+set(ENABLE_VALGRIND OFF)
if("${BUILD_PROFILE}" STREQUAL "dev")
- SET_GLOBAL(EINA_STRINGSHARE_USAGE ON)
- SET_GLOBAL(CHECK_VALGRIND ON)
+ set(ENABLE_VALGRIND ${VALGRIND_FOUND})
elseif("${BUILD_PROFILE}" STREQUAL "debug")
- SET_GLOBAL(EINA_DEBUG_MALLOC ON)
- SET_GLOBAL(EINA_COW_MAGIC_ON ON)
- SET_GLOBAL(EINA_DEFAULT_MEMPOOL ON)
- SET_GLOBAL(EINA_DEBUG_MALLOC ON)
- SET_GLOBAL(EINA_DEBUG_THREADS ON)
- SET_GLOBAL(ENABLE_VALGRIND ON)
+ set(EINA_DEBUG_THREADS ON)
+ set(ENABLE_VALGRIND ${VALGRIND_FOUND})
elseif("${BUILD_PROFILE}" STREQUAL "release")
- SET_GLOBAL(EINA_LOG_LEVEL_MAXIMUM 3)
endif()
EFL_OPTION(EINA_MAGIC_DEBUG "magic debug of eina structure" ON)
EFL_OPTION(EINA_DEBUG_THREADS "debugging of eina threads" ${EINA_DEBUG_THREADS})
EFL_OPTION(ENABLE_VALGRIND "valgrind support" ${ENABLE_VALGRIND})
-SET_GLOBAL(EINA_MODULE_TYPE_MP_CHAINED_POOL_DEFAULT "STATIC")
-SET_GLOBAL(EINA_MODULE_TYPE_MP_ONE_BIG_DEFAULT "STATIC")
-SET_GLOBAL(EINA_MODULE_TYPE_MP_PASS_THROUGH_DEFAULT "STATIC")
+set(EINA_MODULE_TYPE_MP_CHAINED_POOL_DEFAULT "STATIC")
+set(EINA_MODULE_TYPE_MP_ONE_BIG_DEFAULT "STATIC")
+set(EINA_MODULE_TYPE_MP_PASS_THROUGH_DEFAULT "STATIC")
+
+# no CHECK_INIT() yet, all CHECK_APPEND_DEFINE(), FUNC_CHECK(),
+# HEADER_CHECK() and TYPE_CHECK() goes to src/lib/efl/config_gen.h
+
+if(ENABLE_VALGRIND)
+ if(NOT VALGRIND_FOUND)
+ message(FATAL_ERROR "Valgrind was required but not found!")
+ endif()
+ CHECK_APPEND_DEFINE(NVALGRIND "")
+else()
+ CHECK_APPEND_DEFINE(NVALGRIND 1)
+endif()
+
+
+# we want the following checks inside src/lib/eina/eina_config.h to be
+# generated from cmake/post/eina.cmake.
+#
+# By default all symbols are prefixed with EINA_
+CHECK_INIT(eina)
+
+if("${BUILD_PROFILE}" STREQUAL "dev")
+elseif("${BUILD_PROFILE}" STREQUAL "debug")
+ set(EINA_STRINGSHARE_USAGE ON)
+ set(EINA_DEBUG_MALLOC ON)
+ set(EINA_COW_MAGIC_ON ON)
+ set(EINA_DEFAULT_MEMPOOL ON)
+ set(EINA_DEBUG_MALLOC ON)
+elseif("${BUILD_PROFILE}" STREQUAL "release")
+ set(EINA_LOG_LEVEL_MAXIMUM 3)
+endif()
+
+CHECK_APPEND_DEFINE(EINA_MAGIC_DEBUG ${EINA_MAGIC_DEBUG})
+CHECK_APPEND_DEFINE(EINA_SAFETY_CHECKS 1)
+CHECK_APPEND_DEFINE(EINA_DEBUG_THREADS "${EINA_DEBUG_THREADS}")
+CHECK_APPEND_DEFINE(EINA_STRINGSHARE_USAGE "${EINA_STRINGSHARE_USAGE}")
+CHECK_APPEND_DEFINE(EINA_DEBUG_MALLOC "${EINA_DEBUG_MALLOC}")
+CHECK_APPEND_DEFINE(EINA_COW_MAGIC_ON "${EINA_COW_MAGIC_ON}")
+CHECK_APPEND_DEFINE(EINA_DEFAULT_MEMPOOL "${EINA_DEFAULT_MEMPOOL}")
+CHECK_APPEND_DEFINE(EINA_DEBUG_MALLOC "${EINA_DEBUG_MALLOC}")
+CHECK_APPEND_DEFINE(EINA_LOG_LEVEL_MAXIMUM "${EINA_LOG_LEVEL_MAXIMUM}")
+CHECK_APPEND_DEFINE(EINA_HAVE_THREADS "${EFL_HAVE_THREADS}")
#check for symbols in pthread
#TODO Make the definitions depending on the platform
-set(CMAKE_REQUIRED_FLAGS "${CMAKE_THREAD_LIBS_INIT}")
-set(CMAKE_REQUIRED_DEFINITIONS "-D_GNU_SOURCE=1")
-CHECK_SYMBOL_EXISTS(pthread_barrier_init pthread.h EINA_HAVE_PTHREAD_BARRIER)
-CHECK_SYMBOL_EXISTS(pthread_attr_setaffinity_np pthread.h EINA_HAVE_PTHREAD_AFFINITY)
-CHECK_SYMBOL_EXISTS(pthread_setname_np pthread.h EINA_HAVE_PTHREAD_SETNAME)
-CHECK_SYMBOL_EXISTS(pthread_spin_init pthread.h EINA_HAVE_POSIX_SPINLOCK)
+FUNC_CHECK(pthread_barrier_init NAME EINA_HAVE_PTHREAD_BARRIER INCLUDE_FILES pthread.h FLAGS ${CMAKE_THREAD_LIBS_INIT} DEFINITIONS "-D_GNU_SOURCE=1")
+FUNC_CHECK(pthread_attr_setaffinity_np NAME EINA_HAVE_PTHREAD_AFFINITY INCLUDE_FILES pthread.h FLAGS ${CMAKE_THREAD_LIBS_INIT} DEFINITIONS "-D_GNU_SOURCE=1")
+FUNC_CHECK(pthread_setname_np NAME EINA_HAVE_PTHREAD_SETNAME INCLUDE_FILES pthread.h FLAGS ${CMAKE_THREAD_LIBS_INIT} DEFINITIONS "-D_GNU_SOURCE=1")
+FUNC_CHECK(pthread_spin_init NAME EINA_HAVE_POSIX_SPINLOCK INCLUDE_FILES pthread.h FLAGS ${CMAKE_THREAD_LIBS_INIT} DEFINITIONS "-D_GNU_SOURCE=1")
#check for eina header files that are required
-CHECK_INCLUDE_FILE(alloca.h EINA_HAVE_ALLOCA_H)
-CHECK_INCLUDE_FILE(byteswap.h EINA_HAVE_BYTESWAP_H)
-CHECK_INCLUDE_FILE(fnmatch.h EINA_HAVE_FNMATCH_H)
+HEADER_CHECK(alloca.h)
+HEADER_CHECK(byteswap.h)
+HEADER_CHECK(fnmatch.h)
#only enable log when fnmatch is there
-if (EINA_HAVE_FNMATCH_H)
- SET_GLOBAL(EINA_ENABLE_LOG 1)
-endif (EINA_HAVE_FNMATCH_H)
-CHECK_INCLUDE_FILE(dirent.h EINA_HAVE_DIRENT_H)
+CHECK_APPEND_DEFINE(EINA_ENABLE_LOG ${EINA_HAVE_FNMATCH_H})
+HEADER_CHECK(dirent.h)
-CHECK_TYPE_SIZE("wchar_t" EINA_SIZEOF_WCHAR_T)
-CHECK_TYPE_SIZE("uintptr_t" EINA_SIZEOF_UINTPTR_T)
-CHECK_TYPE_SIZE("wchar_t" EINA_SIZEOF_WCHAR_T)
+TYPE_CHECK(wchar_t)
+TYPE_CHECK(uintptr_t)
+TYPE_CHECK(wchar_t)
+# TODO: fix define name to not need a name!
#check for swap16/32/64
-CHECK_SYMBOL_EXISTS(bswap_16 byteswap.h EINA_HAVE_BSWAP16)
-CHECK_SYMBOL_EXISTS(bswap_32 byteswap.h EINA_HAVE_BSWAP32)
-CHECK_SYMBOL_EXISTS(bswap_64 byteswap.h EINA_HAVE_BSWAP64)
-
-if(ENABLE_VALGRIND)
- pkg_check_modules(VG REQUIRED valgrind)
- SET_GLOBAL(NVALGRIND OFF)
-else()
- SET_GLOBAL(NVALGRIND ON)
-endif()
+FUNC_CHECK(bswap_16 NAME EINA_HAVE_BSWAP16 INCLUDE_FILES byteswap.h)
+FUNC_CHECK(bswap_32 NAME EINA_HAVE_BSWAP32 INCLUDE_FILES byteswap.h)
+FUNC_CHECK(bswap_64 NAME EINA_HAVE_BSWAP64 INCLUDE_FILES byteswap.h)
#Check if there is the alloca header
add_custom_target(all-tests DEPENDS ${EFL_ALL_TESTS})
endfunction()
-unset(HEADER_FILE_CONTENT CACHE)
+set(VAR_HEADER_FILE_CONTENT HEADER_FILE_CONTENT CACHE INTERNAL "")
+unset(${VAR_HEADER_FILE_CONTENT} CACHE)
+unset(CHECK_SCOPE CACHE)
+unset(CHECK_SCOPE_UPPERCASE CACHE)
+
+# CHECK_INIT(scope)
+#
+# Initialize the scope for the following FUNC_CHECK, TYPE_CHECK,
+# HEADER_CHECK... calls.
+function(CHECK_INIT scope)
+ set(CHECK_SCOPE scope CACHE INTERNAL "Scope of current *_CHECK functions")
+ if(scope)
+ string(TOUPPER ${scope} scope_uc)
+ SET_GLOBAL(CHECK_SCOPE_UPPERCASE ${scope_uc})
+ set(_suffix "_${scope_uc}")
+ else()
+ set(_suffix "")
+ endif()
+ SET_GLOBAL(VAR_HEADER_FILE_CONTENT HEADER_FILE_CONTENT${_suffix})
+ SET_GLOBAL(${VAR_HEADER_FILE_CONTENT} "")
+endfunction()
+
+# CHECK_APPEND_DEFINE(name value)
+#
+# If value evaluates to true:
+# #define ${name} ${value}
+# otherwise:
+# /* #undef ${name} */
+#
+# NOTE: ${name} is not modified at all, if it must include
+# CHECK_SCOPE_UPPERCASE or CHECK_SCOPE, do it yourself.
+function(CHECK_APPEND_DEFINE name value)
+ SET_GLOBAL(${VAR_HEADER_FILE_CONTENT} "${${VAR_HEADER_FILE_CONTENT}}#ifdef ${name}\n#undef ${name}\n#endif\n")
+ if(value)
+ if(value STREQUAL ON OR value STREQUAL TRUE)
+ set(value 1)
+ endif()
+ SET_GLOBAL(${VAR_HEADER_FILE_CONTENT} "${${VAR_HEADER_FILE_CONTENT}}#define ${name} ${value}\n\n")
+ else()
+ SET_GLOBAL(${VAR_HEADER_FILE_CONTENT} "${${VAR_HEADER_FILE_CONTENT}}/* #undef ${name} */\n\n")
+ endif()
+endfunction()
+
+# CHECK_NAME_DEFAULT(name variable)
+#
+# Create the default name based on ${name}
+# and stores in ${variable}.
+#
+# This will automatically prepend ${CHECK_SCOPE_UPPERCASE} if it's
+# defined, will translate everything to uppercase and fix it to be a
+# valid C-symbol.
+function(CHECK_NAME_DEFAULT name var)
+ string(TOUPPER ${name} v)
+ string(REGEX REPLACE "[^a-zA-Z0-9]" "_" v "${v}")
+ string(REGEX REPLACE "_{2,}" "_" v "${v}")
+ if(CHECK_SCOPE_UPPERCASE)
+ set(v "${CHECK_SCOPE_UPPERCASE}_${v}")
+ endif()
+ set(${var} ${v} PARENT_SCOPE)
+endfunction()
# HEADER_CHECK(header [NAME variable] [INCLUDE_FILES extra1.h .. extraN.h])
#
#
# 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}")
+ CHECK_NAME_DEFAULT(HAVE_${header} var)
cmake_parse_arguments(PARAMS "" "NAME" "INCLUDE_FILES" ${ARGN})
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()
+ CHECK_APPEND_DEFINE(${var} "${${var}}")
endfunction()
# FUNC_CHECK(func [NAME variable]
#
# To use C++ compiler, use CXX keyword
function(FUNC_CHECK func)
- string(TOUPPER HAVE_${func} var)
- string(REGEX REPLACE "_{2,}" "_" var "${var}")
+ CHECK_NAME_DEFAULT(HAVE_${func} var)
cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN})
set(CMAKE_REQUIRED_DEFINITIONS "${PARAMS_DEFINITIONS}")
set(CMAKE_REQUIRED_FLAGS "${PARAMS_FLAGS}")
+ if(PARAMS_NAME)
+ set(var ${PARAMS_NAME})
+ endif()
+
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()
+ CHECK_APPEND_DEFINE(${var} "${${var}}")
endfunction()
-# TYPE_CHECK(type [NAME variable]
+# TYPE_CHECK(type [NAME variable] [SIZEOF variable]
# [INCLUDE_FILES file1.h ... fileN.h]
# [LIBRARIES lib1 ... libN]
# [DEFINITIONS -DA=1 .. -DN=123]
#
# To use C++ compiler, use CXX keyword
function(TYPE_CHECK type)
- string(TOUPPER HAVE_${type} var)
- string(REGEX REPLACE "_{2,}" "_" var "${var}")
+ CHECK_NAME_DEFAULT(HAVE_${type} var)
+ CHECK_NAME_DEFAULT(SIZEOF_${type} sizeof)
- cmake_parse_arguments(PARAMS "CXX" "NAME" "INCLUDE_FILES;LIBRARIES;DEFINITIONS;FLAGS" ${ARGN})
+ cmake_parse_arguments(PARAMS "CXX" "NAME;SIZEOF" "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_NAME)
+ set(var ${PARAMS_NAME})
+ endif()
+
+ if(PARAMS_SIZEOF)
+ set(sizeof ${PARAMS_SIZEOF})
+ endif()
+
if(PARAMS_CXX)
set(lang CXX)
else()
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()
+ CHECK_APPEND_DEFINE(${var} "${HAVE_${var}}")
+ CHECK_APPEND_DEFINE(${sizeof} "${${var}}")
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})
+ get_filename_component(filename ${file} NAME)
+ string(TOUPPER _${filename}_ file_sym)
+ string(REGEX REPLACE "[^a-zA-Z0-9]" "_" file_sym "${file_sym}")
+
+ file(WRITE ${file}.new "#ifndef ${file_sym}\n#define ${file_sym} 1\n\n${${VAR_HEADER_FILE_CONTENT}}\n#endif /* ${file_sym} */\n")
if (NOT EXISTS ${file})
file(RENAME ${file}.new ${file})
message(STATUS "${file} was generated.")
message(STATUS "${file} was updated.")
endif()
endif()
- unset(HEADER_FILE_CONTENT CACHE) # allow to reuse with an empty contents
+ unset(${VAR_HEADER_FILE_CONTENT} CACHE) # allow to reuse with an empty contents
+ unset(CHECK_SCOPE CACHE)
+ unset(CHECK_SCOPE_UPPERCASE CACHE)
+ set(VAR_HEADER_FILE_CONTENT HEADER_FILE_CONTENT CACHE INTERNAL "")
endfunction()
# EFL_FILES_TO_ABSOLUTE(Var Source_Dir Binary_Dir [file1 ... fileN])
if(NOT _missing)
SET_GLOBAL(${_var} "${_found}")
SET_GLOBAL(${_var}_MISSING "${_missing_optional}")
+
+ if(_found)
+ pkg_check_modules(PKG_CONFIG_${_var} ${_found})
+ SET_GLOBAL(${_var}_CFLAGS "${PKG_CONFIG_${_var}_CFLAGS}")
+ SET_GLOBAL(${_var}_LDFLAGS "${PKG_CONFIG_${_var}_LDFLAGS}")
+ endif()
else()
message(FATAL_ERROR "${_name} missing required pkg-config modules: ${_missing}")
endif()
EFL_PKG_CONFIG_EVAL(${_target} "${PKG_CONFIG_REQUIRES_PRIVATE}" "${PKG_CONFIG_REQUIRES}")
+ set(_link_flags ${${_target}_PKG_CONFIG_REQUIRES_PRIVATE_LDFLAGS} ${${_target}_PKG_CONFIG_REQUIRES_LDFLAGS})
+ set(__compile_flags ${${_target}_PKG_CONFIG_REQUIRES_PRIVATE_CFLAGS} ${${_target}_PKG_CONFIG_REQUIRES_CFLAGS} -DPACKAGE_DATA_DIR=\\"${CMAKE_INSTALL_FULL_DATADIR}/${_target}/\\")
+ set(_compile_flags)
+ # CMake uses string for COMPILE_FLAGS but list for LINK_FLAGS... :-/
+ foreach(_c ${__compile_flags})
+ set(_compile_flags "${_compile_flags} ${_c}")
+ endforeach()
add_library(${_target} ${LIBRARY_TYPE} ${_sources} ${_headers})
set_target_properties(${_target} PROPERTIES
OBJECT_DEPENDS "${_obj_deps}"
EFL_EO_PRIVATE "${_eo_files}"
EFL_EO_PUBLIC "${_public_eo_files}"
- COMPILE_FLAGS -DPACKAGE_DATA_DIR=\\"${CMAKE_INSTALL_FULL_DATADIR}/${_target}/\\")
+ LINK_FLAGS "${_link_flags}"
+ COMPILE_FLAGS "${_compile_flags}")
if(DEPENDENCIES)
add_dependencies(${_target} ${DEPENDENCIES})
set(DEFINITIONS)
set(INSTALL ON)
set(INSTALL_DIR bin)
+ set(PKG_CONFIG_REQUIRES)
+ set(PKG_CONFIG_REQUIRES_PRIVATE)
if(_binname STREQUAL ${EFL_LIB_CURRENT})
set(_binsrcdir "${EFL_BIN_SOURCE_DIR}")
if(PUBLIC_HEADERS)
message(WARNING "${_binsrcdir}/CMakeLists.txt should not define PUBLIC_HEADERS, it's not to be installed.")
endif()
+ if(PKG_CONFIG_REQUIRES)
+ message(WARNING "${_binsrcdir}/CMakeLists.txt should not define PKG_CONFIG_REQUIRES. Use PKG_CONFIG_REQUIRES_PRIVATE instead")
+ endif()
EFL_FILES_TO_ABSOLUTE(_sources ${_binsrcdir} ${_binbindir} ${SOURCES})
EFL_FILES_TO_ABSOLUTE(_obj_deps ${_binsrcdir} ${_binbindir} ${OBJECT_DEPENDS})
+ EFL_PKG_CONFIG_EVAL(${_bintarget} "${PKG_CONFIG_REQUIRES_PRIVATE}" "")
+
add_executable(${_bintarget} ${_sources})
if(_obj_deps)
set_target_properties(${_bintarget} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
endif()
+ # CMake uses string for COMPILE_FLAGS but list for LINK_FLAGS... :-/
+ set(_compile_flags)
+ foreach(_c ${${_bintarget}_PKG_CONFIG_REQUIRES_PRIVATE_CFLAGS})
+ set(_compile_flags "${_compile_flags} ${_c}")
+ endforeach()
+
+ set_target_properties(${_bintarget} PROPERTIES
+ LINK_FLAGS "${${_bintarget}_PKG_CONFIG_REQUIRES_PRIVATE_LDFLAGS}"
+ COMPILE_FLAGS "${_compile_flags}")
+
if(INSTALL_DIR)
install(TARGETS ${_bintarget} RUNTIME DESTINATION ${INSTALL_DIR})
endif()
endif()
set(LIBRARIES)
set(DEFINITIONS)
+ set(PKG_CONFIG_REQUIRES)
+ set(PKG_CONFIG_REQUIRES_PRIVATE)
if(_testname STREQUAL ${EFL_LIB_CURRENT})
set(_testsrcdir "${EFL_TESTS_SOURCE_DIR}")
if(PUBLIC_HEADERS)
message(WARNING "${_testsrcdir}/CMakeLists.txt should not define PUBLIC_HEADERS, it's not to be installed.")
endif()
+ if(PKG_CONFIG_REQUIRES)
+ message(WARNING "${_testsrcdir}/CMakeLists.txt should not define PKG_CONFIG_REQUIRES. Use PKG_CONFIG_REQUIRES_PRIVATE instead")
+ endif()
EFL_FILES_TO_ABSOLUTE(_sources ${_testsrcdir} ${_testbindir} ${SOURCES})
EFL_FILES_TO_ABSOLUTE(_obj_deps ${_testsrcdir} ${_testbindir} ${OBJECT_DEPENDS})
+ EFL_PKG_CONFIG_EVAL(${_testtarget} "${PKG_CONFIG_REQUIRES_PRIVATE}" "")
+
add_executable(${_testtarget} EXCLUDE_FROM_ALL ${_sources})
if(_obj_deps)
set_target_properties(${_testtarget} PROPERTIES OUTPUT_NAME ${OUTPUT_NAME})
endif()
+ # CMake uses string for COMPILE_FLAGS but list for LINK_FLAGS... :-/
+ set(_compile_flags)
+ foreach(_c ${${_testtarget}_PKG_CONFIG_REQUIRES_PRIVATE_CFLAGS})
+ set(_compile_flags "${_compile_flags} ${_c}")
+ endforeach()
+
set_target_properties(${_testtarget} PROPERTIES
+ LINK_FLAGS "${${_testtarget}_PKG_CONFIG_REQUIRES_PRIVATE_LDFLAGS}"
+ COMPILE_FLAGS "${_compile_flags}"
LIBRARY_OUTPUT_DIRECTORY "${_testbindir}"
RUNTIME_OUTPUT_DIRECTORY "${_testbindir}")
# - INSTALL_DIR: defaults to
# lib/${EFL_LIB_CURRENT}/modules/${EFL_MODULE_SCOPE}/${Name}/v-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}/.
# If empty, won't install.
+# - PKG_CONFIG_REQUIRES_PRIVATE: results in
+# ${Name}_PKG_CONFIG_REQUIRES_PRIVATE. Elements after 'OPTIONAL'
+# keyword are optional.
#
# NOTE: since the file will be included it shouldn't mess with global variables!
function(EFL_MODULE _modname)
set(DEFINITIONS)
set(MODULE_TYPE "${${_modoptionname}}")
set(INSTALL_DIR ${_modoutdir})
+ set(PKG_CONFIG_REQUIRES)
+ set(PKG_CONFIG_REQUIRES_PRIVATE)
_EFL_INCLUDE_OR_DETECT("Module ${_modtarget}" ${_modsrcdir})
if(PUBLIC_HEADERS)
message(WARNING "${_modsrcdir}/CMakeLists.txt should not define PUBLIC_HEADERS, it's not to be installed.")
endif()
+ if(PKG_CONFIG_REQUIRES)
+ message(WARNING "${_modsrcdir}/CMakeLists.txt should not define PKG_CONFIG_REQUIRES. Use PKG_CONFIG_REQUIRES_PRIVATE instead")
+ endif()
if("${MODULE_TYPE}" STREQUAL "OFF")
return()
EFL_FILES_TO_ABSOLUTE(_sources ${_modsrcdir} ${_modbindir} ${SOURCES})
EFL_FILES_TO_ABSOLUTE(_obj_deps ${_modsrcdir} ${_modbindir} ${OBJECT_DEPENDS})
+ EFL_PKG_CONFIG_EVAL(${_modtarget} "${PKG_CONFIG_REQUIRES_PRIVATE}" "")
+
add_library(${_modtarget} ${_modtype} ${_sources})
set_target_properties(${_modtarget} PROPERTIES
OBJECT_DEPENDS "${_obj_deps}"
target_compile_definitions(${_modtarget} PRIVATE ${DEFINITIONS})
+ # CMake uses string for COMPILE_FLAGS but list for LINK_FLAGS... :-/
+ set(_compile_flags)
+ foreach(_c ${${_modtarget}_PKG_CONFIG_REQUIRES_PRIVATE_CFLAGS})
+ set(_compile_flags "${_compile_flags} ${_c}")
+ endforeach()
+
set_target_properties(${_modtarget} PROPERTIES
+ LINK_FLAGS "${${_modtarget}_PKG_CONFIG_REQUIRES_PRIVATE_LDFLAGS}"
+ COMPILE_FLAGS "${_compile_flags}"
LIBRARY_OUTPUT_DIRECTORY "${_modoutdir}"
ARCHIVE_OUTPUT_DIRECTORY "${_modoutdir}"
RUNTIME_OUTPUT_DIRECTORY "${_modoutdir}")
# TODO: change code to avoid these
-if(EINA_MODULE_TYPE_MP_CHAINED STREQUAL "STATIC")
- SET_GLOBAL(EINA_STATIC_BUILD_CHAINED_POOL 1)
+if(EINA_MODULE_TYPE_MP_CHAINED_POOL STREQUAL "STATIC")
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_CHAINED_POOL 1)
else()
- unset(EINA_STATIC_BUILD_CHAINED_POOL CACHE)
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_CHAINED_POOL "")
endif()
if(EINA_MODULE_TYPE_MP_ONE_BIG STREQUAL "STATIC")
- SET_GLOBAL(EINA_STATIC_BUILD_ONE_BIG 1)
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_ONE_BIG 1)
else()
- unset(EINA_STATIC_BUILD_ONE_BIG CACHE)
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_ONE_BIG "")
endif()
if(EINA_MODULE_TYPE_MP_PASS_THROUGH STREQUAL "STATIC")
- SET_GLOBAL(EINA_STATIC_BUILD_PASS_THROUGH 1)
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_PASS_THROUGH 1)
else()
- unset(EINA_STATIC_BUILD_PASS_THROUGH CACHE)
+ CHECK_APPEND_DEFINE(EINA_STATIC_BUILD_PASS_THROUGH "")
endif()
-configure_file(
- ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/eina/eina_config.h.cmake
- ${CMAKE_CURRENT_BINARY_DIR}/src/lib/eina/eina_config.h)
+# generate the file and close the scope started with CHECK_INIT(eina):
+EFL_HEADER_CHECKS_FINALIZE(${CMAKE_CURRENT_BINARY_DIR}/src/lib/eina/eina_config_gen.h)
+
+# TODO: when autotools is gone, rename this file in repository
+# and remove this copy (using generate to skip @-subst)
+file(GENERATE
+ OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/src/lib/eina/eina_config.h
+ INPUT ${CMAKE_CURRENT_SOURCE_DIR}/src/lib/eina/eina_config.h.cmake
+)
and require an explicit request to get it. */
#endif
-#define EFL_VERSION_MAJOR @EFL_VERSION_MAJOR@
-#define EFL_VERSION_MINOR @EFL_VERSION_MINOR@
-#define EFL_BUILD_ID "@EFL_BUILD_ID@"
+#define EFL_VERSION_MAJOR @PROJECT_VERSION_MAJOR@
+#define EFL_VERSION_MINOR @PROJECT_VERSION_MINOR@
+#define EFL_BUILD_ID "@PROJECT_VERSION_TWEAK@"
#endif
#define _GNU_SOURCE
-#include "config_headers.h"
-
-#define VMAJ @PROJECT_VERSION_MAJOR@
-#define VMIN @PROJECT_VERSION_MINOR@
-#define VMIC @PROJECT_VERSION_PATCH@
-#define VREV @PROJECT_VERSION_TWEAK@
-
-#cmakedefine NVALGRIND 1
-
-#cmakedefine EINA_STATIC_BUILD_CHAINED_POOL 1
-#cmakedefine EINA_STATIC_BUILD_ONE_BIG 1
-#cmakedefine EINA_STATIC_BUILD_PASS_THROUGH 1
-
-#define MODULE_ARCH "v-@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@"
-#define SHARED_LIB_SUFFIX "@CMAKE_SHARED_LIBRARY_SUFFIX@"
-#define EXEEXT "@CMAKE_EXECUTABLE_SUFFIX@"
+#include "config_gen.h"
#if defined (HAVE_LISTXATTR) && defined (HAVE_SETXATTR) && defined (HAVE_GETXATTR)
#define HAVE_XATTR
//for now statically define that to one
#define STRERROR_R_CHAR_P 1
-#cmakedefine EFL_ALWAYS_INLINE @EFL_ALWAYS_INLINE@
-#cmakedefine EFL_HAVE_OSX_SPINLOCK 1
-#cmakedefine EFL_HAVE_POSIX_THREADS_SPINLOCK 1
-#cmakedefine EFL_HAVE_THREADS 1
-
-#cmakedefine HAVE_EO_ID
-
#endif
if(ENABLE_VALGRIND)
list(APPEND PKG_CONFIG_REQUIRES_PRIVATE valgrind)
- list(APPEND INCLUDE_DIRECTORIES ${VG_INCLUDE_DIRS})
- list(APPEND LIBRARIES ${VG_LIBRARIES})
endif()
set(PUBLIC_HEADERS
eina_binshare.h
eina_clist.h
eina_config.h
+ eina_config_gen.h
eina_convert.h
eina_counter.h
eina_cow.h
# include <Exotic.h>
#endif
-#ifdef EINA_MAGIC_DEBUG
-# undef EINA_MAGIC_DEBUG
-#endif
-#cmakedefine EINA_MAGIC_DEBUG
-
-#ifndef EINA_DEFAULT_MEMPOOL
-# undef EINA_DEFAULT_MEMPOOL
-#endif
-#cmakedefine EINA_DEFAULT_MEMPOOL
-
-#ifdef EINA_SAFETY_CHECKS
-# undef EINA_SAFETY_CHECKS
-#endif
-#cmakedefine EINA_SAFETY_CHECKS
-
-#ifndef EINA_HAVE_THREADS
-#define EINA_HAVE_THREADS
-#endif
-
-#ifdef EINA_HAVE_PTHREAD_AFFINITY
-# undef EINA_HAVE_PTHREAD_AFFINITY
-#endif
-#cmakedefine EINA_HAVE_PTHREAD_AFFINITY
-
-#ifdef EINA_HAVE_PTHREAD_BARRIER
-# undef EINA_HAVE_PTHREAD_BARRIER
-#endif
-#cmakedefine EINA_HAVE_PTHREAD_BARRIER
-
-#ifdef EINA_HAVE_PTHREAD_SETNAME
-# undef EINA_HAVE_PTHREAD_SETNAME
-#endif
-#cmakedefine EINA_HAVE_PTHREAD_SETNAME
-
-#ifdef EINA_HAVE_DEBUG_THREADS
-# undef EINA_HAVE_DEBUG_THREADS
-#endif
-#cmakedefine EINA_HAVE_DEBUG_THREADS
-
-#ifdef EINA_SIZEOF_WCHAR_T
-# undef EINA_SIZEOF_WCHAR_T
-#endif
-#cmakedefine EINA_SIZEOF_WCHAR_T @EINA_SIZEOF_WCHAR_T@
-
-#ifdef EINA_SIZEOF_UINTPTR_T
-# undef EINA_SIZEOF_UINTPTR_T
-#endif
-#cmakedefine EINA_SIZEOF_UINTPTR_T @EINA_SIZEOF_UINTPTR_T@
-
-#ifdef EINA_CONFIGURE_HAVE_DIRENT_H
-# undef EINA_CONFIGURE_HAVE_DIRENT_H
-#endif
-#cmakedefine EINA_HAVE_DIRENT_H
-
-#ifdef EINA_CONFIGURE_ENABLE_LOG
-# undef EINA_CONFIGURE_ENABLE_LOG
-#endif
-#cmakedefine EINA_ENABLE_LOG
-
-#ifdef EINA_HAVE_ALLOCA_H
-# undef EINA_HAVE_ALLOCA_H
-#endif
-#cmakedefine EINA_HAVE_ALLOCA_H
-
-#ifdef EINA_HAVE_BSWAP16
-# undef EINA_HAVE_BSWAP16
-#endif
-#cmakedefine EINA_HAVE_BSWAP16
-
-#ifdef EINA_HAVE_BSWAP32
-# undef EINA_HAVE_BSWAP32
-#endif
-#cmakedefine EINA_HAVE_BSWAP32
-
-#ifdef EINA_HAVE_BSWAP64
-# undef EINA_HAVE_BSWAP64
-#endif
-#cmakedefine EINA_HAVE_BSWAP64
-
-#ifdef EINA_HAVE_BYTESWAP_H
-# undef EINA_HAVE_BYTESWAP_H
-#endif
-#cmakedefine EINA_HAVE_BYTESWAP_H
-
-#ifdef EINA_HAVE_POSIX_SPINLOCK
-# undef EINA_HAVE_POSIX_SPINLOCK
-#endif
-#cmakedefine EINA_HAVE_POSIX_SPINLOCK
-
-#ifndef EINA_HAVE_OSX_SPINLOCK
-# undef EINA_HAVE_OSX_SPINLOCK
-#endif
-@EINA_CONFIGURE_HAVE_OSX_SPINLOCK@
-
-#ifndef EINA_HAVE_OSX_SEMAPHORE
-# undef EINA_HAVE_OSX_SEMAPHORE
-#endif
-@EINA_CONFIGURE_HAVE_OSX_SEMAPHORE@
+#include "eina_config_gen.h"
#include <limits.h>
--- /dev/null
+if(ENABLE_VALGRIND)
+ list(APPEND PKG_CONFIG_REQUIRES_PRIVATE valgrind)
+endif()
+
+set(SOURCES eina_chained_mempool.c)
--- /dev/null
+if(ENABLE_VALGRIND)
+ list(APPEND PKG_CONFIG_REQUIRES_PRIVATE valgrind)
+endif()
+
+set(SOURCES eina_one_big.c)
--- /dev/null
+if(ENABLE_VALGRIND)
+ list(APPEND PKG_CONFIG_REQUIRES_PRIVATE valgrind)
+endif()
+
+set(SOURCES eina_pass_through.c)