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).
This commit is contained in:
Gustavo Sverzut Barbieri 2017-01-26 13:13:51 -02:00
parent 8de264f597
commit b67acda0d6
6 changed files with 188 additions and 0 deletions

View File

@ -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()

View File

@ -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}\"")

10
cmake/config/emile.cmake Normal file
View File

@ -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})

View File

@ -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()

View File

@ -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()

View File

@ -0,0 +1,10 @@
set(SOURCES
emile_suite.c
emile_test_base.c
emile_test_base64.c
emile_suite.h
)
set(LIBRARIES
eina
)