barbieri pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=b67acda0d626bde9235d49b4ca045e083db855a2
commit b67acda0d626bde9235d49b4ca045e083db855a2 Author: Gustavo Sverzut Barbieri <[email protected]> Date: Thu Jan 26 13:13:51 2017 -0200 cmake: add emile and EFL_OPTION_BACKEND() Add emile and with that EFL_OPTION_BACKEND() to support choosing among different backends for something, in emile's case it's crypto backend (gnutls, openssl or none). --- CMakeLists.txt | 1 + cmake/config/common.cmake | 8 ++++ cmake/config/emile.cmake | 10 ++++ cmake/helpers/EflMacros.cmake | 102 +++++++++++++++++++++++++++++++++++++++++ src/lib/emile/CMakeLists.txt | 57 +++++++++++++++++++++++ src/tests/emile/CMakeLists.txt | 10 ++++ 6 files changed, 188 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7196aa8..aca7adf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -35,6 +35,7 @@ EFL_LIB(eina) EFL_LIB(eolian) EFL_LIB(eo) EFL_LIB(efl) +EFL_LIB(emile) EFL_LIB(ecore) EFL_OPTIONS_SUMMARY() diff --git a/cmake/config/common.cmake b/cmake/config/common.cmake index 8a9ab47..d5e088d 100644 --- a/cmake/config/common.cmake +++ b/cmake/config/common.cmake @@ -8,6 +8,9 @@ find_package(Threads REQUIRED) pkg_check_modules(CHECK check) pkg_check_modules(LIBSYSTEMD libsystemd) pkg_check_modules(VALGRIND valgrind) +pkg_check_modules(OPENSSL openssl>=1.0) +pkg_check_modules(GNUTLS gnutls>=2.12.16) +pkg_check_modules(LIBJPEG libjpeg REQUIRED) set(SUGGEST_VALGRIND OFF) if("${BUILD_PROFILE}" STREQUAL "dev") @@ -23,6 +26,8 @@ if(NOT EFL_EO_API_SUPPORT) EFL_OPTION_SET_MESSAGE(EFL_EO_API_SUPPORT "Risky!") endif() +EFL_OPTION_BACKEND(WITH_CRYPTO "Choose crypto backend" OPENSSL GNUTLS) + EFL_OPTION(ENABLE_SYSTEMD "Enable systemd support" "${LIBSYSTEMD_FOUND}" DEPENDS "LIBSYSTEMD_FOUND" OFF) EFL_OPTION(ENABLE_VALGRIND "Enable valgrind support" "${SUGGEST_VALGRIND}" DEPENDS "VALGRIND_FOUND" OFF) @@ -33,6 +38,7 @@ HEADER_CHECK(asm/hwcap.h) HEADER_CHECK(dirent.h) HEADER_CHECK(execinfo.h) HEADER_CHECK(mcheck.h) +HEADER_CHECK(netinet/in.h) HEADER_CHECK(stdlib.h) HEADER_CHECK(sys/auxv.h) HEADER_CHECK(sys/mman.h) @@ -79,6 +85,8 @@ if(CMAKE_THREAD_LIBS_INIT) endif() CHECK_APPEND_DEFINE(EFL_HAVE_THREADS "${EFL_HAVE_THREADS}") +CHECK_APPEND_DEFINE(HAVE_CIPHER ${WITH_CRYPTO_ENABLED}) +CHECK_APPEND_DEFINE(HAVE_SIGNATURE ${WITH_CRYPTO_ENABLED}) CHECK_APPEND_DEFINE(HAVE_SYSTEMD ${ENABLE_SYSTEMD}) CHECK_APPEND_DEFINE(MODULE_ARCH "\"v-${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}\"") diff --git a/cmake/config/emile.cmake b/cmake/config/emile.cmake new file mode 100644 index 0000000..e8c7359 --- /dev/null +++ b/cmake/config/emile.cmake @@ -0,0 +1,10 @@ +pkg_check_modules(LZ4 liblz4) + +set(_choices "internal") +set(_defval "internal") +if(LZ4_FOUND) + set(_choices system internal) + set(_defval system) +endif() + +EFL_OPTION(WITH_LZ4 "Choose if system or internal liblz4 should be used" ${_defval} CHOICE ${_choices}) diff --git a/cmake/helpers/EflMacros.cmake b/cmake/helpers/EflMacros.cmake index c081ed1..b2630a8 100644 --- a/cmake/helpers/EflMacros.cmake +++ b/cmake/helpers/EflMacros.cmake @@ -28,6 +28,59 @@ unset(EFL_ALL_LIBS CACHE) unset(EFL_ALL_TESTS CACHE) unset(EFL_PKG_CONFIG_MISSING_OPTIONAL CACHE) +# EFL_OPTION_BACKEND(Name Help Backend1 ... BackendN +# [DEPENDS "COND1; COND2; NOT COND3" FAILED_VALUE] +# [REQUIRED]) +# +# Wrapper around EFL_OPTION() and EFL_BACKEND_CHOICES() +# that creates an option 'CHOICE' within possible backends +# when these are found (${Backend}_FOUND). +# +# The REQUIRED keyword will force a valid backend, otherwise 'none' is +# allowed. +# +# If a backend was chose, then ${Name}_CFLAGS and ${Name}_LDFLAGS are +# set to lists based on ${Backend}_CFLAGS or +# ${Backend}_INCLUDE_DIR/${Backend}_INCLUDE_DIRS and +# ${Backend}_LDFLAGS or ${Backend}_LIBRARIES +function(EFL_OPTION_BACKEND _name _help) + cmake_parse_arguments(PARAMS "" "" "DEPENDS" ${ARGN}) + + EFL_BACKEND_CHOICES(${_name} ${PARAMS_UNPARSED_ARGUMENTS}) + + EFL_OPTION(${_name} "${_help}" "${${_name}_DEFAULT}" + CHOICE ${${_name}_CHOICES} + DEPENDS ${PARAMS_DEPENDS}) + + if(NOT ${_name} STREQUAL "none") + string(TOUPPER "${${_name}}" _backend) + if(DEFINED ${_backend}_CFLAGS) + set(_cflags ${${_backend}_CFLAGS}) + else() + set(_cflags "") + foreach(_d ${${_backend}_INCLUDE_DIR} ${${_backend}_INCLUDE_DIRS}) + list(APPEND _cflags "-I${_d}") + endforeach() + endif() + if(DEFINED ${_backend}_LDFLAGS) + set(_ldflags ${${_backend}_LDFLAGS}) + else() + set(_ldflags "") + foreach(_d ${${_backend}_LIBRARIES}) + list(APPEND _ldflags "-l${_d}") + endforeach() + else() + endif() + SET_GLOBAL(${_name}_CFLAGS "${_cflags}") + SET_GLOBAL(${_name}_LDFLAGS "${_ldflags}") + SET_GLOBAL(${_name}_ENABLED ON) + else() + unset(${_name}_CFLAGS CACHE) + unset(${_name}_LDFLAGS CACHE) + SET_GLOBAL(${_name}_ENABLED OFF) + endif() +endfunction() + # EFL_OPTION(Name Help Default [STRING|BOOL|FILEPATH|PATH] # [CHOICE c1;...;cN] # [DEPENDS "COND1; COND2; NOT COND3" FAILED_VALUE]) @@ -441,6 +494,21 @@ function(EFL_PKG_CONFIG_EVAL_TO _var _name) endif() endif() endforeach() + + unset(${_var}_CFLAGS CACHE) + unset(${_var}_LDFLAGS CACHE) + unset(PKG_CONFIG_${_var} CACHE) + unset(PKG_CONFIG_${_var}_CFLAGS CACHE) + unset(PKG_CONFIG_${_var}_FOUND CACHE) + unset(PKG_CONFIG_${_var}_INCLUDE_DIRS CACHE) + unset(PKG_CONFIG_${_var}_INCLUDEDIR CACHE) + unset(PKG_CONFIG_${_var}_LDFLAGS CACHE) + unset(PKG_CONFIG_${_var}_LIBDIR CACHE) + unset(PKG_CONFIG_${_var}_LIBRARIES CACHE) + unset(PKG_CONFIG_${_var}_LIBRARIES CACHE) + unset(PKG_CONFIG_${_var}_LIBRARIES_DIR CACHE) + unset(PKG_CONFIG_${_var}_LIBS CACHE) + unset(PKG_CONFIG_${_var}_VERSION CACHE) if(NOT _missing) SET_GLOBAL(${_var} "${_found}") SET_GLOBAL(${_var}_MISSING "${_missing_optional}") @@ -1380,3 +1448,37 @@ function(EFL_CREATE_EO_RULES target source_dir generation_dir) endif() endif() endfunction() + +# EFL_BACKEND_CHOICES(Prefix Choice1 .. ChoiceN) +# +# Helper that will check ${ChoiceN}_FOUND and if so append to +# ${_prefix}_CHOICES as well set the first found option (in order!) as +# ${_prefix}_DEFAULT and ${_prefix}_FOUND to ON if at least one was +# found. +function(EFL_BACKEND_CHOICES _prefix) + cmake_parse_arguments(PARAMS "REQUIRED" "" "" ${ARGN}) + + set(_choices "") + set(_defval "none") + set(_found OFF) + foreach(c ${PARAMS_UNPARSED_ARGUMENTS}) + if(${c}_FOUND) + string(TOLOWER "${c}" c_lc) + if(_defval STREQUAL "none") + set(_defval ${c_lc}) + endif() + set(_found ON) + list(APPEND _choices ${c_lc}) + endif() + endforeach() + + if(PARAMS_REQUIRED AND NOT _found) + message(FATAL_ERROR "${_prefix} backend was required (one of ${PARAMS_UNPARSED_ARGUMENTS}) but none was found!") + elseif(NOT PARAMS_REQUIRED) + list(APPEND _choices "none") + endif() + + set(${_prefix}_FOUND ${_found} PARENT_SCOPE) + set(${_prefix}_CHOICES ${_choices} PARENT_SCOPE) + set(${_prefix}_DEFAULT ${_defval} PARENT_SCOPE) +endfunction() diff --git a/src/lib/emile/CMakeLists.txt b/src/lib/emile/CMakeLists.txt new file mode 100644 index 0000000..559f735 --- /dev/null +++ b/src/lib/emile/CMakeLists.txt @@ -0,0 +1,57 @@ +set(DESCRIPTION "Library for simplified serialization, compression and ciphering") + +set(PKG_CONFIG_REQUIRES_PRIVATE + zlib>=1.2.3 + libjpeg +) + +set(LIBRARIES + eina + m +) + +set(PUBLIC_HEADERS + Emile.h + emile_base64.h + emile_cipher.h + emile_compress.h + emile_image.h +) + +set(SOURCES + emile_base64.c + emile_compress.c + emile_image.c + emile_main.c + emile_private.h + ${CMAKE_SOURCE_DIR}/src/static_libs/rg_etc/etc2_encoder.c + ${CMAKE_SOURCE_DIR}/src/static_libs/rg_etc/rg_etc1.c + ${CMAKE_SOURCE_DIR}/src/static_libs/rg_etc/rg_etc1.h + ${CMAKE_SOURCE_DIR}/src/static_libs/rg_etc/rg_etc2.c +) + +set(INCLUDE_DIRECTORIES + ${CMAKE_SOURCE_DIR}/src/static_libs/rg_etc +) + +if(WITH_CRYPTO STREQUAL "gnutls") + list(APPEND SOURCES emile_cipher_gnutls.c) + list(APPEND PKG_CONFIG_REQUIRES_PRIVATE gnutls) +elseif(WITH_CRYPTO STREQUAL "openssl") + list(APPEND SOURCES emile_cipher_openssl.c) + list(APPEND PKG_CONFIG_REQUIRES_PRIVATE openssl) +else() + list(APPEND SOURCES emile_cipher.c) +endif() + +if(WITH_LZ4 STREQUAL "system") + list(APPEND PKG_CONFIG_REQUIRES_PRIVATE liblz4) +else() + list(APPEND SOURCES + ${CMAKE_SOURCE_DIR}/src/static_libs/lz4/lz4.c + ${CMAKE_SOURCE_DIR}/src/static_libs/lz4/lz4.h + ${CMAKE_SOURCE_DIR}/src/static_libs/lz4/lz4hc.c + ${CMAKE_SOURCE_DIR}/src/static_libs/lz4/lz4hc.h + ) + list(APPEND INCLUDE_DIRECTORIES ${CMAKE_SOURCE_DIR}/src/static_libs/lz4) +endif() diff --git a/src/tests/emile/CMakeLists.txt b/src/tests/emile/CMakeLists.txt new file mode 100644 index 0000000..7fe88e0 --- /dev/null +++ b/src/tests/emile/CMakeLists.txt @@ -0,0 +1,10 @@ +set(SOURCES + emile_suite.c + emile_test_base.c + emile_test_base64.c + emile_suite.h +) + +set(LIBRARIES + eina +) --
