build-sys: Define version as in EFL
authorLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 26 Apr 2013 15:30:40 +0000 (12:30 -0300)
committerLucas De Marchi <lucas.demarchi@profusion.mobi>
Fri, 26 Apr 2013 16:02:57 +0000 (13:02 -0300)
Makefile.am
configure.ac
m4/efl.m4 [new file with mode: 0644]

index 8e282f5..b94b906 100644 (file)
@@ -72,6 +72,7 @@ include_HEADERS = \
        src/lib/eldbus_message_eina_value.h
 
 libeldbus_la_LIBADD = @ECORE_LIBS@ @DBUS_LIBS@
+libeldbus_la_LDFLAGS = @EFL_LTLIBRARY_FLAGS@
 libeldbus_la_SOURCES = \
        src/lib/eldbus_private.h \
        src/lib/eldbus_private_types.h \
index 292f3cb..1cfaca9 100644 (file)
@@ -1,25 +1,5 @@
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-m4_define([v_maj], [1])
-m4_define([v_min], [7])
-m4_define([v_mic], [99])
-m4_define([v_rev], m4_esyscmd([(svnversion "${SVN_REPO_PATH:-.}" | grep -v '\(export\|Unversioned directory\)' || echo 0) | awk -F : '{printf("%s\n", $1);}' | tr -d ' :MSP\n']))
-m4_if(v_rev, [0], [m4_define([v_rev], m4_esyscmd([git log 2> /dev/null | (grep -m1 git-svn-id || echo 0) | sed -e 's/.*@\([0-9]*\).*/\1/' | tr -d '\n']))])
-##--   When released, remove the dnl on the below line
-dnl m4_undefine([v_rev])
-##--   When doing snapshots - change soname. remove dnl on below line
-dnl m4_define([relname], [ver-pre-svn-07])
-dnl m4_define([v_rel], [-release relname])
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-m4_ifdef([v_rev], [m4_define([v_ver], [v_maj.v_min.v_mic.v_rev])],
-[m4_define([v_ver], [v_maj.v_min.v_mic])])
-m4_define([lt_cur], m4_eval(v_maj + v_min))
-m4_define([lt_rev], v_mic)
-m4_define([lt_age], v_min)
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-
-AC_INIT([eldbus], [v_ver], [enlightenment-devel@lists.sourceforge.net])
+EFL_VERSION([1], [7], [99], [dev])
+AC_INIT([eldbus], [efl_ver], [enlightenment-devel@lists.sourceforge.net])
 AC_PREREQ([2.60])
 
 AM_INIT_AUTOMAKE([foreign subdir-objects])
@@ -75,8 +55,10 @@ AC_PROG_LIBTOOL
 # doxygen program for documentation building
 EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
 
+EFL_INIT
+
 PKG_CHECK_MODULES([EINA], [eina >= 1.7.0])
-PKG_CHECK_MODULES([ECORE], [ecore])
+PKG_CHECK_MODULES([ECORE], [ecore >= 1.7.0])
 PKG_CHECK_MODULES([DBUS], [dbus-1])
 
 with_max_log_level="EINA_LOG_LEVEL_DBG"
@@ -86,25 +68,6 @@ AC_ARG_WITH(maximum-log-level,
    [with_max_log_level="${withval}"], [:])
 AC_DEFINE_UNQUOTED(EINA_LOG_LEVEL_MAXIMUM, ${with_max_log_level}, [if set, logging is limited to this amount.])
 
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-m4_ifdef([v_rev], , [m4_define([v_rev], [0])])
-m4_ifdef([v_rel], , [m4_define([v_rel], [])])
-AC_DEFINE_UNQUOTED(VMAJ, [v_maj], [Major version])
-AC_DEFINE_UNQUOTED(VMIN, [v_min], [Minor version])
-AC_DEFINE_UNQUOTED(VMIC, [v_mic], [Micro version])
-AC_DEFINE_UNQUOTED(VREV, [v_rev], [Revison])
-version_info="lt_cur:lt_rev:lt_age"
-release_info="v_rel"
-AC_SUBST(version_info)
-AC_SUBST(release_info)
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
-VMAJ=v_maj
-VMIN=v_min
-AC_SUBST(VMAJ)
-AC_SUBST(VMIN)
-
 EFL_ENABLE_BIN([eldbus-codegen], ["yes"])
 
 if test "x${have_eldbus_codegen}" = "xyes" ; then
diff --git a/m4/efl.m4 b/m4/efl.m4
new file mode 100644 (file)
index 0000000..4b55c00
--- /dev/null
+++ b/m4/efl.m4
@@ -0,0 +1,439 @@
+dnl file to manage modules in efl
+
+dnl EFL_VERSION(major, minor, micro, release)
+dnl This setup EFL version information and should be called BEFORE AC_INIT().
+dnl
+dnl release parameter is 'dev' to use from SVN or libtool -release field.
+dnl It may be empty if not dev (svn/live build) and no -release is to be used.
+dnl
+dnl Examples:
+dnl     EFL_VERSION(1, 7, 99, dev)
+dnl     EFL_VERSION(1, 7, 99, ver-1234)
+dnl This will define couple of m4 symbols:
+dnl     v_maj = given major number (first parameter)
+dnl     v_min = given minor number (second parameter)
+dnl     v_mic = given micro number (third parameter)
+dnl     v_rev = if release, it's 0, otherwise it's dev_version.
+dnl     v_rel = if release, it's -release followed by fourth parameter,
+dnl             otherwise it's empty. (mostly for libtool)
+dnl     efl_version = if release, it's major.minor.micro, otherwise it's
+dnl             major.minor.micro.dev_version
+dnl     dev_version = development version (svn revision).
+dnl     def_build_profile = dev or release based on 'dev' release parameter.
+AC_DEFUN([EFL_VERSION],
+[dnl
+m4_define([v_maj], [$1])dnl
+m4_define([v_min], [$2])dnl
+m4_define([v_mic], [$3])dnl
+m4_define([dev_version], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl
+m4_define([v_rev], m4_if($4, dev, [dev_version], [0]))dnl
+m4_define([v_rel], m4_if($4, dev, [], m4_ifblank($4, [], [-release $4])))dnl
+m4_define([def_build_profile], m4_if($4, dev, [dev], [release]))dnl
+m4_define([efl_version], m4_if($4, dev, [v_maj.v_min.v_mic.v_rev], [v_maj.v_min.v_mic]))dnl
+])
+
+dnl EFL_COLOR
+dnl will check if terminal supports color and if color is wanted by user.
+dnl
+dnl Used Variables:
+dnl     WANT_COLOR: if no, forces no color output.
+dnl     TERM: used to check if color should be enabled.
+dnl
+dnl Defined Variables:
+dnl     COLOR_YES: to be used in positive/yes conditions
+dnl     COLOR_NO: to be used in negative/no conditions
+dnl     COLOR_OTHER: to be used to highlight some other condition
+dnl     COLOR_RESET: to reset color
+dnl     want_color: yes or no
+AC_DEFUN([EFL_COLOR],
+[dnl
+case "$TERM" in
+   xterm|xterm-color|Eterm|aterm|kterm|rxvt*|screen|gnome|interix)
+      want_color="${WANT_COLOR:-yes}"
+      ;;
+   *)
+      want_color="no"
+      ;;
+esac
+
+if test "${want_color}" = "yes"; then
+   COLOR_YES=`echo -e "\033@<:@1;32m"`
+   COLOR_NO=`echo -e "\033@<:@1;31m"`
+   COLOR_OTHER=`echo -e "\033@<:@1;36m"`
+   COLOR_RESET=`echo -e "\033@<:@0m"`
+else
+   COLOR_YES=""
+   COLOR_NO=""
+   COLOR_OTHER=""
+   COLOR_RESET=""
+fi
+])
+
+dnl EFL_INIT()
+dnl Will AC_DEFINE() the following:
+dnl     VMAJ = v_maj
+dnl     VMIN = v_min
+dnl     VMIC = v_mic
+dnl     VREV = v_rev
+dnl Will AC_SUBST() the following:
+dnl     VMAJ = v_maj
+dnl     VMIN = v_min
+dnl     VMIC = v_mic
+dnl     EFL_LTLIBRARY_FLAGS="-no-undefined -version-info ..."
+dnl     EFL_LTMODULE_FLAGS="-no-undefined -avoid-version"
+dnl Will define the following m4:
+dnl     lt_cur = libtool 'current' field of libtool's -version-info
+dnl     lt_rev = libtool 'revision' field of libtool's -version-info
+dnl     lt_age = libtool 'age' field of libtool's -version-info
+AC_DEFUN([EFL_INIT],
+[dnl
+AC_REQUIRE([EFL_COLOR])dnl
+AC_DEFINE_UNQUOTED([VMAJ], [v_maj], [Major version])dnl
+AC_DEFINE_UNQUOTED([VMIN], [v_min], [Minor version])dnl
+AC_DEFINE_UNQUOTED([VMIC], [v_mic], [Micro version])dnl
+AC_DEFINE_UNQUOTED([VREV], [v_rev], [Revison])dnl
+VMAJ=v_maj
+VMIN=v_min
+VMIC=v_mic
+AC_SUBST([VMAJ])dnl
+AC_SUBST([VMIN])dnl
+AC_SUBST([VMIC])dnl
+dnl
+dnl TODO: warning - lt_cur:
+dnl the previous code assumed v_maj + v_min, but this will be a problem when
+dnl we bump v_maj and reset v_min. 1 + 7 == 7 + 1, so if v_maj is bumped
+dnl we multiply it by 100.
+m4_define([lt_cur], m4_if(m4_cmp(v_maj, 1), 0, m4_eval(v_maj + v_min), m4_eval(v_maj * 100 + v_min)))dnl
+m4_define([lt_rev], v_mic)dnl
+m4_define([lt_age], v_min)dnl
+dnl
+EFL_LTLIBRARY_FLAGS="-no-undefined -version-info lt_cur:lt_rev:lt_age v_rel"
+AC_SUBST(EFL_LTLIBRARY_FLAGS)dnl
+EFL_LTMODULE_FLAGS="-no-undefined -avoid-version"
+AC_SUBST([EFL_LTMODULE_FLAGS])dnl
+AC_MSG_NOTICE([Initialized AC_PACKAGE_NAME (AC_PACKAGE_VERSION) development=dev_version v_rel])
+])
+
+dnl EFL_EVAL_PKGS(EFL)
+dnl does PKG_CHECK_MODULES() for given EFL
+AC_DEFUN([EFL_EVAL_PKGS],
+[dnl
+m4_pushdef([DOWNEFL], m4_translit([$1], [-A-Z], [_a-z]))dnl
+if test "x${requirements_pc_deps_[]m4_defn([DOWNEFL])}" != "x"; then
+   PKG_CHECK_MODULES([$1], [${requirements_pc_deps_[]m4_defn([DOWNEFL])}])
+fi
+m4_popdef([DOWNEFL])dnl
+])
+
+dnl EFL_INTERNAL_DEPEND_PKG(EFL, OTHEREFL)
+dnl Adds a pkg-config dependency on another EFL.
+AC_DEFUN([EFL_INTERNAL_DEPEND_PKG],
+[dnl
+m4_pushdef([DOWNEFL], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([DOWNOTHER], m4_translit([$2], [-A-Z], [_a-z]))dnl
+dnl TODO: we need to fix the package config names for 2.0
+dnl TODO: and make them uniform in scheme.
+depname="$2"
+libdirname="m4_defn([DOWNOTHER])"
+libname="m4_defn([DOWNOTHER])"
+case "m4_defn([DOWNOTHER])" in
+   ethumb_client)
+      depname="ethumb_client"
+      ;;
+esac
+requirements_pc_[]m4_defn([DOWNEFL])="${depname} >= ${PACKAGE_VERSION} ${requirements_pc_[][]m4_defn([DOWNEFL])}"
+requirements_cflags_[]m4_defn([DOWNEFL])="-I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} ${requirements_cflags_[][]m4_defn([DOWNEFL])}"
+requirements_internal_libs_[]m4_defn([DOWNEFL])="lib/${libdirname}/lib${libname}.la ${requirements_internal_libs_[][]m4_defn([DOWNEFL])}"
+requirements_internal_deps_libs_[]m4_defn([DOWNEFL])="${requirements_public_libs_[]m4_defn([DOWNOTHER])} ${requirements_internal_deps_libs_[][]m4_defn([DOWNEFL])}"
+m4_popdef([DOWNOTHER])dnl
+m4_popdef([DOWNEFL])dnl
+])
+
+dnl EFL_PLATFORM_DEPEND(EFL, PLATFORM)
+dnl PLATFORM is one of: all, evil, escape, exotic
+AC_DEFUN([EFL_PLATFORM_DEPEND],
+[dnl
+m4_pushdef([DOWNOTHER], m4_translit([$2], [-A-Z], [_a-z]))dnl
+case "m4_defn([DOWNOTHER])" in
+  all)
+    if test "x${efl_lib_optional_evil}" = "xyes"; then
+       EFL_INTERNAL_DEPEND_PKG([$1], [evil])
+    elif test "x${efl_lib_optional_escape}" = "xyes"; then
+       EFL_INTERNAL_DEPEND_PKG([$1], [escape])
+    elif test "x${efl_lib_optional_exotic}" = "xyes"; then
+       EFL_INTERNAL_DEPEND_PKG([$1], [exotic])
+    fi
+    ;;
+  *)
+    if test "x${efl_lib_optional_[]m4_defn([DOWNOTHER])}" = "xyes"; then
+       EFL_INTERNAL_DEPEND_PKG([$1], [$2])
+    fi
+    ;;
+esac
+m4_popdef([DOWNOTHER])dnl
+])
+
+dnl EFL_CRYPTO_DEPEND(EFL)
+dnl the given EFL will use/depend on system crypto settings
+AC_DEFUN([EFL_CRYPTO_DEPEND],
+[dnl
+m4_pushdef([DOWNEFL], m4_translit([$1], [-A-Z], [_a-z]))dnl
+requirements_pc_[]m4_defn([DOWNEFL])="${requirements_pc_crypto} ${requirements_pc_[][]m4_defn([DOWNEFL])}"
+requirements_pc_deps_[]m4_defn([DOWNEFL])="${requirements_pc_deps_crypto} ${requirements_pc_deps_[][]m4_defn([DOWNEFL])}"
+requirements_libs_[]m4_defn([DOWNEFL])="${requirements_libs_crypto} ${requirements_libs_[][]m4_defn([DOWNEFL])}"
+requirements_cflags_[]m4_defn([DOWNEFL])="${requirements_cflags_crypto} ${requirements_cflags_[][]m4_defn([DOWNEFL])}"
+m4_popdef([DOWNEFL])dnl
+])
+
+dnl EFL_DEPEND_PKG(EFL, NAME, PACKAGE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl Adds a pkg-config dependency to an efl, AC_DEFINE() HAVE_NAME,
+dnl and inserts dependencies in proper variables
+AC_DEFUN([EFL_DEPEND_PKG],
+[dnl
+m4_pushdef([UPEFL], m4_translit([$1], [-a-z], [_A-Z]))dnl
+m4_pushdef([DOWNEFL], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([UPNAME], m4_translit([$2], [-a-z], [_A-Z]))dnl
+m4_pushdef([DOWNNAME], m4_translit([$2], [-A-Z], [_a-z]))dnl
+
+   have_[]m4_defn([DOWNNAME])="no"
+
+   EFL_PKG_CHECK_STRICT([$3], [
+      AC_DEFINE([HAVE_]m4_defn([UPNAME]), [1], [Have `]m4_defn([DOWNNAME])[' pkg-config installed.])
+      requirements_pc_[]m4_defn([DOWNEFL])="$3 ${requirements_pc_[][]m4_defn([DOWNEFL])}"
+      requirements_pc_deps_[]m4_defn([DOWNEFL])="$3 ${requirements_pc_deps_[]m4_defn([DOWNEFL])}"
+      have_[]m4_defn([DOWNNAME])="yes"
+
+      $4
+
+      ], [$5])
+
+m4_popdef([DOWNNAME])
+m4_popdef([UPNAME])
+m4_popdef([DOWNEFL])
+m4_popdef([UPEFL])
+])
+
+dnl EFL_OPTIONAL_DEPEND_PKG(EFL, VARIABLE, NAME, PACKAGE, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+AC_DEFUN([EFL_OPTIONAL_DEPEND_PKG],
+[dnl
+m4_pushdef([DOWN], m4_translit([$3], [-A-Z], [_a-z]))dnl
+
+   have_[]m4_defn([DOWN])="no"
+   if test "x$2" = "xyes"; then
+      EFL_DEPEND_PKG([$1], [$3], [$4], [$5], [$6])
+   fi
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_OPTIONAL_INTERNAL_DEPEND_PKG(EFL, VARIABLE, NAME)
+AC_DEFUN([EFL_OPTIONAL_INTERNAL_DEPEND_PKG],
+[dnl
+   if test "x$2" = "xyes"; then
+      EFL_INTERNAL_DEPEND_PKG([$1], [$3])
+   fi
+])
+
+dnl EFL_ADD_LIBS(PKG, LIBS)
+dnl Add libraries that the EFL library will depend on
+dnl See EFL_DEPEND_PKG() for pkg-config version.
+AC_DEFUN([EFL_ADD_LIBS],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+requirements_libs_[]m4_defn([DOWN])="${requirements_libs_[]m4_defn([DOWN])} $2"
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_ADD_PUBLIC_LIBS(PKG, PUBLIC_LIBS)
+dnl Add libraries that the EFL library will depend on when used.
+dnl
+dnl Unlike EFL_ADD_LIBS(), that is only used when generating PKG,
+dnl this one is used when linking PKG to other libraries or applications.
+dnl
+dnl For instance if you use some other library in your header that user
+dnl inclues.
+AC_DEFUN([EFL_ADD_PUBLIC_LIBS],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+requirements_public_libs_[]m4_defn([DOWN])="${requirements_public_libs_[]m4_defn([DOWN])} $2"
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_ADD_CFLAGS(PKG, CFLAGS)
+dnl Add CFLAGS that the EFL library will use
+dnl See EFL_DEPEND_PKG() for pkg-config version.
+AC_DEFUN([EFL_ADD_CFLAGS],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+requirements_cflags_[]m4_defn([DOWN])="${requirements_cflags_[]m4_defn([DOWN])} $2"
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_LIB_START(PKG)
+dnl start the setup of an EFL library, defines variables and prints a notice
+dnl
+dnl Exports (AC_SUBST)
+dnl     PKG_CFLAGS: what to use for CFLAGS
+dnl
+dnl     PKG_LDFLAGS: what to use for LDFLAGS
+dnl
+dnl     PKG_LIBS: what to use in automake's _LIBADD or _LDADD. Includes
+dnl             everything else.
+dnl
+dnl     PKG_INTERNAL_LIBS: all other EFL as lib/name/libname.la that this
+dnl             package depend. Used in automake's _DEPENDENCIES.
+dnl
+dnl     USE_PKG_LIBS: what to use in automake's _LIBADD or _LDADD when using
+dnl             this PKG (PKG_LIBS + libpkg.la)
+dnl
+dnl     USE_PKG_INTERNAL_LIBS: extends PKG_INTERNAL_LIBS with lib/pkg/libpkg.la
+dnl
+dnl     requirements_pc_pkg: all pkg-config (pc) files used by this pkg,
+dnl             includes internal EFL (used in 'Requires.private' in pkg.pc)
+dnl
+dnl     requirements_libs_pkg: external libraries this package needs when
+dnl             linking (used in 'Libs.private' in pkg.pc)
+dnl
+dnl     requirements_public_libs_pkg: external libraries other packages need
+dnl             when using this (used in 'Libs' in pkg.pc)
+dnl
+dnl     requirements_cflags_pkg: what to use for CFLAGS (same as PKG_CFLAGS).
+dnl
+dnl Variables:
+dnl     requirements_pc_deps_pkg: external pkg-config (pc) files used by this
+dnl             pkg (used in EFL_EVAL_PKGS())
+dnl
+dnl     requirements_internal_libs_pkg: all other EFL as lib/name/libname.la
+dnl             that this package depend.
+dnl
+dnl     requirements_internal_deps_libs_pkg: external libraries that are public
+dnl             dependencies (due internal libs).
+dnl
+AC_DEFUN([EFL_LIB_START],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
+
+requirements_internal_libs_[]m4_defn([DOWN])=""
+requirements_internal_deps_libs_[]m4_defn([DOWN])=""
+requirements_libs_[]m4_defn([DOWN])=""
+requirements_public_libs_[]m4_defn([DOWN])=""
+requirements_cflags_[]m4_defn([DOWN])=""
+requirements_pc_[]m4_defn([DOWN])=""
+requirements_pc_deps_[]m4_defn([DOWN])=""
+
+m4_defn([UP])_LIBS="${m4_defn([UP])_LIBS}"
+m4_defn([UP])_INTERNAL_LIBS="${m4_defn([UP])_INTERNAL_LIBS}"
+USE_[]m4_defn([UP])_LIBS="${USE_[]m4_defn([UP])_LIBS}"
+USE_[]m4_defn([UP])_INTERNAL_LIBS="${USE_[]m4_defn([UP])_INTERNAL_LIBS}"
+m4_defn([UP])_LDFLAGS="${m4_defn([UP])_LDFLAGS}"
+m4_defn([UP])_CFLAGS="${m4_defn([UP])_CFLAGS}"
+
+AC_SUBST([requirements_libs_]m4_defn([DOWN]))dnl
+AC_SUBST([requirements_public_libs_]m4_defn([DOWN]))dnl
+AC_SUBST([requirements_cflags_]m4_defn([DOWN]))dnl
+AC_SUBST([requirements_pc_]m4_defn([DOWN]))dnl
+AC_SUBST(m4_defn([UP])[_LIBS])dnl
+AC_SUBST(m4_defn([UP])[_INTERNAL_LIBS])dnl
+AC_SUBST([USE_]m4_defn([UP])[_LIBS])dnl
+AC_SUBST([USE_]m4_defn([UP])[_INTERNAL_LIBS])dnl
+AC_SUBST(m4_defn([UP])[_LDFLAGS])dnl
+AC_SUBST(m4_defn([UP])[_CFLAGS])dnl
+AC_MSG_NOTICE([Start $1 checks])dnl
+m4_popdef([UP])dnl
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_LIB_END(PKG)
+dnl finishes the setup of an EFL library
+AC_DEFUN([EFL_LIB_END],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
+
+libdirname="m4_defn([DOWN])"
+libname="m4_defn([DOWN])"
+
+m4_defn([UP])_LDFLAGS="${EFL_COV_LDFLAGS} ${EFL_LDFLAGS} ${m4_defn([UP])_LDFLAGS}"
+m4_defn([UP])_LIBS=" ${m4_defn([UP])_LDFLAGS} ${EFL_COV_LIBS} ${EFL_LIBS} ${m4_defn([UP])_LIBS} ${requirements_internal_libs_[]m4_defn([DOWN])} ${requirements_internal_deps_libs_[]m4_defn([DOWN])} ${requirements_public_libs_[]m4_defn([DOWN])} ${requirements_libs_[]m4_defn([DOWN])} ${requirements_libs_efl} "
+m4_defn([UP])_INTERNAL_LIBS="${m4_defn([UP])_INTERNAL_LIBS} ${requirements_internal_libs_[]m4_defn([DOWN])}"
+USE_[]m4_defn([UP])_LIBS="${m4_defn([UP])_LIBS} lib/${libdirname}/lib${libname}.la"
+USE_[]m4_defn([UP])_INTERNAL_LIBS="${m4_defn([UP])_INTERNAL_LIBS} lib/${libdirname}/lib${libname}.la ${requirements_internal_deps_libs_[]m4_defn([DOWN])}"
+m4_defn([UP])_CFLAGS="${EFL_COV_CFLAGS} ${EFL_CFLAGS} ${m4_defn([UP])_CFLAGS} -I\$(top_srcdir)/src/lib/${libdirname} -I\$(top_builddir)/src/lib/${libdirname} ${requirements_cflags_[]m4_defn([DOWN])} ${requirements_cflags_efl} -DEFL_[]m4_defn([UP])_BUILD=1"
+requirements_pc_[]m4_defn([DOWN])="${requirements_pc_[]m4_defn([DOWN])} ${requirements_pc_efl}"
+requirements_pc_deps_[]m4_defn([DOWN])="${requirements_pc_deps_[]m4_defn([DOWN])} ${requirements_pc_deps_efl}"
+
+AC_MSG_NOTICE([Finished $1 checks])dnl
+m4_popdef([UP])dnl
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_LIB_START_OPTIONAL(PKG, TEST)
+dnl test if library should be build and then EFL_LIB_START()
+dnl must call EFL_LIB_END_OPTIONAL() to close it.
+AC_DEFUN([EFL_LIB_START_OPTIONAL],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
+
+if $2; then
+   efl_lib_optional_[]m4_defn([DOWN])="yes"
+else
+   efl_lib_optional_[]m4_defn([DOWN])="no"
+   AC_MSG_NOTICE([Skipping $1 checks (disabled)])
+fi
+
+if test "$efl_lib_optional_[]m4_defn([DOWN])" = "yes"; then
+   EFL_LIB_START([$1])
+   AC_DEFINE([HAVE_]m4_defn([UP]), [1], [optional EFL $1 is enabled])
+dnl closed at EFL_LIB_END_OPTIONAL()
+m4_popdef([UP])dnl
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_LIB_END_OPTIONAL(PKG)
+dnl closes block started by EFL_LIB_START_OPTIONAL() and then
+dnl defines AM_CONDITIONAL([HAVE_PKG]) and AC_DEFINE([HAVE_PKG])
+AC_DEFUN([EFL_LIB_END_OPTIONAL],
+[dnl
+m4_pushdef([DOWN], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([UP], m4_translit([$1], [-a-z], [_A-Z]))dnl
+
+dnl close if started at EFL_LIB_START_OPTIONAL()
+   EFL_LIB_END([$1])
+fi
+
+AM_CONDITIONAL([HAVE_]m4_defn([UP]), [test "$efl_lib_optional_[]m4_defn([DOWN])" = "yes"])dnl
+m4_popdef([UP])dnl
+m4_popdef([DOWN])dnl
+])
+
+dnl EFL_ADD_FEATURE(PKG, NAME, [VALUE])
+dnl if VALUE is not specified, will use ${have_name} instead.
+dnl
+dnl Defined Variables:
+dnl     features_pkg
+AC_DEFUN([EFL_ADD_FEATURE],
+[dnl
+m4_pushdef([DOWNPKG], m4_translit([$1], [-A-Z], [_a-z]))dnl
+m4_pushdef([DOWNNAME], m4_translit([$2], [-A-Z], [_a-z]))dnl
+
+value="m4_if($3, , [${have_]m4_defn([DOWNNAME])[:-${want_]m4_defn([DOWNNAME])[}}], [$3])"
+case "${value}" in
+   yes)
+      tmp="${COLOR_YES}+$2${COLOR_RESET}"
+      ;;
+   no)
+      tmp="${COLOR_NO}-$2${COLOR_RESET}"
+      ;;
+   *)
+      tmp="${COLOR_OTHER}$2=${value}${COLOR_RESET}"
+      ;;
+esac
+if test -z "${features_[]m4_defn([DOWNPKG])}"; then
+   features_[]m4_defn([DOWNPKG])="${tmp}"
+else
+   features_[]m4_defn([DOWNPKG])="${features_[]m4_defn([DOWNPKG])} ${tmp}"
+fi
+m4_popdef([DOWNNAME])dnl
+m4_popdef([DOWNPKG])dnl
+])