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
+)

-- 


Reply via email to