eet: add support for GnuTLS 3.x
[framework/uifw/eet.git] / configure.ac
1 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
2 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
3 m4_define([v_maj], [1])
4 m4_define([v_min], [5])
5 m4_define([v_mic], [99])
6 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']))
7 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']))])
8 ##--   When released, remove the dnl on the below line
9 dnl m4_undefine([v_rev])
10 ##--   When doing snapshots - change soname. remove dnl on below line
11 dnl m4_define([relname], [ver-pre-svn-05])
12 dnl m4_define([v_rel], [-release relname])
13 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
14 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])])
15 m4_define([lt_cur], m4_eval(v_maj + v_min))
16 m4_define([lt_rev], v_mic)
17 m4_define([lt_age], v_min)
18 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
19 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
20
21 AC_INIT([eet], [v_ver], [enlightenment-devel@lists.sourceforge.net])
22 AC_PREREQ([2.52])
23 AC_CONFIG_SRCDIR([configure.ac])
24 AC_CONFIG_MACRO_DIR([m4])
25
26 AC_CONFIG_HEADERS([config.h])
27 AH_TOP([
28 #ifndef EFL_CONFIG_H__
29 #define EFL_CONFIG_H__
30 ])
31 AH_BOTTOM([
32 #endif /* EFL_CONFIG_H__ */
33 ])
34
35 AM_INIT_AUTOMAKE([1.6 dist-bzip2])
36 m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
37
38 AC_LIBTOOL_WIN32_DLL
39 define([AC_LIBTOOL_LANG_CXX_CONFIG], [:])dnl
40 define([AC_LIBTOOL_LANG_F77_CONFIG], [:])dnl
41 AC_PROG_LIBTOOL
42
43 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
44 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
45 m4_ifdef([v_rev], , [m4_define([v_rev], [0])])
46 m4_ifdef([v_rel], , [m4_define([v_rel], [])])
47 AC_DEFINE_UNQUOTED(VMAJ, [v_maj], [Major version])
48 AC_DEFINE_UNQUOTED(VMIN, [v_min], [Minor version])
49 AC_DEFINE_UNQUOTED(VMIC, [v_mic], [Micro version])
50 AC_DEFINE_UNQUOTED(VREV, [v_rev], [Revison])
51 version_info="lt_cur:lt_rev:lt_age"
52 release_info="v_rel"
53 AC_SUBST(version_info)
54 AC_SUBST(release_info)
55 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
56 ##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##
57 VMAJ=v_maj
58 AC_SUBST(VMAJ)
59
60
61 ### Needed information
62
63 AC_CANONICAL_BUILD
64 AC_CANONICAL_HOST
65
66 ### Default options with respect to host
67
68 want_gnutls="auto"
69 want_openssl="auto"
70 want_cipher="yes"
71 want_signature="yes"
72
73 requirement_eet=""
74
75
76 ### Additional options to configure
77
78 # Amalgamation
79
80 AC_ARG_ENABLE([amalgamation],
81    [AC_HELP_STRING([--enable-amalgamation], [enable generation of one single file with all source code in it, helps compiler optimizations.])],
82    [if test "x${enableval}" = "xyes"; then
83        do_amalgamation="yes"
84     else
85        do_amalgamation="no"
86     fi
87    ],
88    [do_amalgamation="no"]
89 )
90 AM_CONDITIONAL(EET_AMALGAMATION, test "x${do_amalgamation}" = "xyes")
91
92 EFL_ENABLE_BIN([eet])
93
94 # Old eet file format support
95
96 old_eet_file_format="yes"
97 AC_ARG_ENABLE(old-eet-file-format,
98    [AC_HELP_STRING(
99       [--disable-old-eet-file-format],
100       [disable old eet file format support. [[default=enabled]]]
101     )],
102    [old_eet_file_format=$enableval]
103 )
104 AC_MSG_CHECKING([whether to support old eet file format])
105 AC_MSG_RESULT([${old_eet_file_format}])
106
107 if test "x${old_eet_file_format}" = "xyes" ; then
108    AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 1, [support old eet file format])
109 else
110    AC_DEFINE(EET_OLD_EET_FILE_FORMAT, 0, [support old eet file format])
111 fi
112
113 # Openssl support
114
115 AC_ARG_ENABLE([openssl],
116    [AC_HELP_STRING([--disable-openssl], [disable openssl eet support])],
117    [want_openssl=$enableval]
118 )
119 AC_MSG_CHECKING([whether to use OpenSSL])
120 AC_MSG_RESULT([${want_openssl}])
121
122 # Cryptography support
123
124 AC_ARG_ENABLE([cipher],
125    [AC_HELP_STRING([--disable-cipher], [disable cipher support for eet API])],
126    [want_cipher=$enableval]
127 )
128 AC_MSG_CHECKING([whether to use cipher])
129 AC_MSG_RESULT([${want_cipher}])
130
131 AC_ARG_ENABLE([signature],
132    [AC_HELP_STRING([--disable-signature], [disable signature file support for eet])],
133    [want_signature=$enableval]
134 )
135 AC_MSG_CHECKING([whether to use signature])
136 AC_MSG_RESULT([${want_signature}])
137
138 # Assert or fail.
139 prefer_assert="no"
140 AC_ARG_ENABLE([assert],
141    [AC_HELP_STRING([--enable-assert], [enable assert, [[default=disabled]]])],
142    [prefer_assert=$enableval]
143 )
144
145 # Examples
146
147 AC_ARG_ENABLE([install-examples],
148    [AC_HELP_STRING([--disable-install-examples],
149        [disable installing examples (compiled or just source). @<:@default==enabled@:>@])],
150    [
151     if test "x${enableval}" = "xyes" ; then
152        install_examples="yes"
153     else
154        install_examples="no"
155     fi
156    ],
157    [install_examples="yes"])
158 AM_CONDITIONAL([INSTALL_EXAMPLES], [test "x${install_examples}" = "xyes"])
159
160 AC_ARG_ENABLE([build-examples],
161    [AC_HELP_STRING([--enable-build-examples],
162        [enable building examples. @<:@default==disabled@:>@])],
163    [
164     if test "x${enableval}" = "xyes" ; then
165        build_examples="yes"
166     else
167        build_examples="no"
168     fi
169    ],
170    [build_examples="no"])
171 AM_CONDITIONAL([BUILD_EXAMPLES], [test "x${build_examples}" = "xyes"])
172
173 # Unit tests, coverage and benchmarking
174
175 EFL_CHECK_TESTS([enable_tests="yes"], [enable_tests="no"])
176 EFL_CHECK_COVERAGE([${enable_tests}], [enable_coverage="yes"], [enable_coverage="no"])
177
178 if test "x${prefer_assert}" = "xno"; then
179    DEBUG_CFLAGS="-DNDEBUG"
180 else
181 # use debug symbols and set DEBUG if coverage support is enabled
182    DEBUG_CFLAGS="${EFL_DEBUG_CFLAGS}"
183 fi
184 AC_SUBST(DEBUG_CFLAGS)
185
186
187 ### Checks for programs
188 AC_PROG_CC
189
190 # pkg-config
191 PKG_PROG_PKG_CONFIG
192
193 # Check whether pkg-config supports Requires.private
194 if $PKG_CONFIG --atleast-pkgconfig-version 0.22; then
195    pkgconfig_requires_private="Requires.private"
196 else
197    pkgconfig_requires_private="Requires"
198 fi
199 AC_SUBST(pkgconfig_requires_private)
200
201
202 # doxygen program for documentation building
203
204 EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
205
206 ### Checks for libraries
207
208 # Evil library for compilation on Windows
209
210 EFL_EET_BUILD=""
211 case "$host_os" in
212    mingw*)
213       PKG_CHECK_MODULES([EVIL], [evil >= 1.0.0])
214       AC_DEFINE(HAVE_EVIL, 1, [Set to 1 if Evil library is installed])
215       requirement_eet="evil ${requirement_eet}"
216       EFL_EET_BUILD="-DEFL_EET_BUILD"
217    ;;
218 esac
219 AC_SUBST(EFL_EET_BUILD)
220
221 EET_LIBS=""
222 case "$host_os" in
223    mingw32ce*)
224       EET_LIBS="-lws2"
225       ;;
226    mingw*)
227       EET_LIBS="-lws2_32"
228       ;;
229 esac
230 AC_SUBST(EET_LIBS)
231
232 # Eina library
233
234 PKG_CHECK_MODULES(EINA, [eina >= 1.1.0])
235 requirement_eet="eina >= 1.1.0 ${requirement_eet}"
236
237 # Gnutls support
238
239 AC_ARG_ENABLE([gnutls],
240    [AC_HELP_STRING([--disable-gnutls], [disable gnutls eet support])],
241    [want_gnutls=$enableval]
242 )
243 AC_MSG_CHECKING([whether to use Gnutls])
244 AC_MSG_RESULT([${want_gnutls}])
245
246 # Gnutls library
247 have_gnutls="no"
248 if test "x${want_gnutls}" = "xyes" || test "x${want_gnutls}" = "xauto" ; then
249    PKG_CHECK_MODULES(GNUTLS, [gnutls >= 1.7.6],
250       [
251        have_gnutls="yes"
252        want_openssl="no"
253        AC_DEFINE(HAVE_GNUTLS, 1, [Have Gnutls support])
254        requirement_eet="gnutls ${requirement_eet}"
255       ],
256       [have_gnutls="no"])
257    if test "x${have_gnutls}" = "xyes" ; then
258       AC_PATH_GENERIC([libgcrypt], [], [have_gnutls="yes"], [have_gnutls="no"])
259       if test "x${have_gnutls}" = "xyes" ; then
260          GNUTLS_CFLAGS="${GNUTLS_CFLAGS} ${LIBGCRYPT_CFLAGS}"
261          GNUTLS_LIBS="${GNUTLS_LIBS} ${LIBGCRYPT_LIBS}"
262       fi
263    fi
264 fi
265
266 # Specific GNUTLS improvement
267
268 new_gnutls_api="yes"
269 AC_ARG_ENABLE(new-gnutls-api,
270    [AC_HELP_STRING(
271       [--disable-new-gnutls-api],
272       [enable use of gnutls_x509_crt_verify_hash. [[default=enable]]]
273     )],
274    [new_gnutls_api=$enableval]
275 )
276 AC_MSG_CHECKING([whether to use gnutls_x509_crt_verify_hash])
277 AC_MSG_RESULT([${new_gnutls_api}])
278
279 if test "x${new_gnutls_api}" = "xyes" ; then
280    tmp_CFLAGS="${CFLAGS}"
281    tmp_LIBS="${LIBS}"
282    CFLAGS="${GNUTLS_CFLAGS}"
283    LIBS="${GNUTLS_LIBS}"
284    AC_CHECK_LIB(gnutls, gnutls_x509_crt_verify_hash,
285                 [ new_gnutls_api="yes" ],
286                 [ new_gnutls_api="no" ]
287                 )
288    CFLAGS="${tmp_CFLAGS}"
289    LIBS="${tmp_LIBS}"
290
291    if test "x${new_gnutls_api}" = "xyes"; then
292       AC_DEFINE(EET_USE_NEW_GNUTLS_API, 1, [use gnutls_x509_crt_verify_hash])
293    fi
294 fi
295
296 use_gnutls_privkey_sign_data="no"
297 if test "x${want_gnutls}" = "xyes" -o "x${want_gnutls}" = "xauto"; then
298    tmp_CFLAGS="${CFLAGS}"
299    tmp_LIBS="${LIBS}"
300    CFLAGS="${GNUTLS_CFLAGS}"
301    LIBS="${GNUTLS_LIBS}"
302    AC_CHECK_LIB(gnutls, gnutls_privkey_sign_data,
303                 [ use_gnutls_privkey_sign_data="yes" ],
304                 [ use_gnutls_privkey_sign_data="no" ]
305                 )
306    CFLAGS="${tmp_CFLAGS}"
307    LIBS="${tmp_LIBS}"
308
309    if test "x${use_gnutls_privkey_sign_data}" = "xyes"; then
310       AC_DEFINE(EET_USE_NEW_PRIVKEY_SIGN_DATA, 1, [use gnutls_privkey_sign_data])
311    fi
312 fi
313 AC_MSG_CHECKING([whether to use gnutls_privkey_sign_data])
314 AC_MSG_RESULT([${use_gnutls_privkey_sign_data}])
315
316 use_gnutls_pubkey_verify_hash="no"
317 if test "x${want_gnutls}" = "xyes" -o "x${want_gnutls}" = "xauto"; then
318    tmp_CFLAGS="${CFLAGS}"
319    tmp_LIBS="${LIBS}"
320    CFLAGS="${GNUTLS_CFLAGS}"
321    LIBS="${GNUTLS_LIBS}"
322    AC_CHECK_LIB(gnutls, gnutls_pubkey_verify_hash,
323                 [ use_gnutls_pubkey_verify_hash="yes" ],
324                 [ use_gnutls_pubkey_verify_hash="no" ]
325                 )
326    CFLAGS="${tmp_CFLAGS}"
327    LIBS="${tmp_LIBS}"
328
329    if test "x${use_gnutls_pubkey_verify_hash}" = "xyes"; then
330       AC_DEFINE(EET_USE_NEW_PUBKEY_VERIFY_HASH, 1, [use gnutls_pubkey_verify_hash])
331    fi
332 fi
333 AC_MSG_CHECKING([whether to use gnutls_pubkey_verify_hash])
334 AC_MSG_RESULT([${use_gnutls_pubkey_verify_hash}])
335
336 # Openssl library
337 have_openssl="no"
338 if test "x${want_openssl}" = "xyes" || test "x${want_openssl}" = "xauto" ; then
339    PKG_CHECK_MODULES(OPENSSL, openssl,
340       [
341        have_openssl="yes"
342        AC_DEFINE(HAVE_OPENSSL, 1, [Have Openssl support])
343        requirement_eet="openssl ${requirement_eet}"
344       ],
345       [have_openssl="no"])
346 fi
347
348 if test "x${have_gnutls}" = "xyes" ; then
349    secure_layer="GnuTLS"
350 elif test "x${have_openssl}" = "xyes" ; then
351    secure_layer="OpenSSL"
352 else
353    secure_layer="no"
354 fi
355
356 have_cipher="no"
357 if test "x${have_gnutls}" = "xyes" && test "x${want_cipher}" = "xyes" ; then
358    have_cipher="yes"
359    AC_DEFINE(HAVE_CIPHER, 1, [Have cipher support built in eet])
360 elif test "x${have_openssl}" = "xyes" && test "x${want_cipher}" = "xyes" ; then
361    have_cipher="yes"
362    AC_DEFINE(HAVE_CIPHER, 1, [Have cipher support built in eet])
363 fi
364
365 AC_MSG_CHECKING(whether to activate cipher support in eet)
366 AC_MSG_RESULT(${have_cipher})
367
368 have_signature="no"
369 if test "x${have_gnutls}" = "xyes" && test "x${want_signature}" = "xyes" ; then
370    have_signature="yes"
371    AC_DEFINE(HAVE_SIGNATURE, 1, [Have signature support for eet file])
372 elif test "x${have_openssl}" = "xyes" && test "x${want_signature}" = "xyes" ; then
373    have_signature="yes"
374    AC_DEFINE(HAVE_SIGNATURE, 1, [Have signature support for eet file])
375 fi
376
377 AC_MSG_CHECKING(whether to activate signature support in eet)
378 AC_MSG_RESULT(${have_signature})
379
380 ### Checks for header files
381
382 AC_CHECK_HEADER([zlib.h],
383    [dummy="yes"],
384    [AC_MSG_ERROR("Cannot find zlib.h. Make sure your CFLAGS environment variable contains include lines for the location of this file")])
385
386 AC_CHECK_HEADER([jpeglib.h],
387    [dummy="yes"],
388    [AC_MSG_ERROR("Cannot find jpeglib.h. Make sure your CFLAGS environment variable contains include lines for the location of this file")])
389
390 AC_CHECK_HEADERS(netinet/in.h unistd.h)
391 EFL_CHECK_PATH_MAX
392
393 ### Checks for types
394
395
396 ### Checks for structures
397
398
399 ### Checks for compiler characteristics
400 AM_PROG_CC_C_O
401 AC_C_CONST
402 AC_C_INLINE
403 AC_PROG_CC_STDC
404 AC_C___ATTRIBUTE__
405
406 # Check whether the null pointer is zero on this arch
407 AC_TRY_RUN(
408    [
409 #include <stdlib.h>
410 #include <inttypes.h>
411 int main (int argc, char **argv) {
412   void *foo = NULL;
413   uintptr_t bar = (uintptr_t)foo;
414   return (uintptr_t)foo;
415 }
416    ],
417    [have_null="yes"],
418    [have_null="no"],
419    [
420     AC_MSG_WARN([Cannot check when cross-compiling -- assuming null is okay])
421     have_null="yes"
422    ])
423 AC_MSG_CHECKING([value of the null pointer])
424 AC_MSG_RESULT([${have_null}])
425
426 if test ! "x${have_null}" = "xyes" ; then
427    AC_MSG_WARN([Your system is a bit too funny, eet might not work properly])
428 fi
429
430 # These are needed for fmemopen/open_memstream
431 AC_DEFINE(_GNU_SOURCE, , [Enable GNU extensions])
432
433 EET_CPPFLAGS=""
434 EET_CFLAGS=""
435 case "$host_os" in
436    mingw32ce*)
437       EET_CPPFLAGS="-D_WIN32_WCE=0x0420"
438       ;;
439    mingw*)
440       EET_CPPFLAGS="-D_WIN32_WINNT=0x0501"
441       ;;
442 esac
443 AC_SUBST(EET_CPPFLAGS)
444 AC_SUBST(EET_CFLAGS)
445
446
447 ### Checks for linker characteristics
448
449 # use --enable-auto-import on Windows
450
451 lt_enable_auto_import=""
452 case "$host_os" in
453    mingw*)
454       lt_enable_auto_import="-Wl,--enable-auto-import"
455       ;;
456 esac
457 AC_SUBST(lt_enable_auto_import)
458
459 case "${host_os}" in
460    openbsd*)
461       ;;
462    *)
463       EFL_LINKER_FLAG([-Wl,--as-needed])
464       ;;
465 esac
466
467
468 ### Checks for library functions
469 AC_ISC_POSIX
470 AC_FUNC_ALLOCA
471
472 AC_CHECK_FUNCS(fmemopen open_memstream realpath)
473
474 EFL_CHECK_FNMATCH([], [AC_MSG_ERROR([Cannot find fnmatch()])])
475
476
477 AC_SUBST(requirement_eet)
478
479 AC_OUTPUT([
480 Makefile
481 eet.pc
482 doc/Makefile
483 doc/Doxyfile
484 doc/eet.dox
485 src/Makefile
486 src/lib/Makefile
487 src/bin/Makefile
488 src/tests/Makefile
489 src/examples/Makefile
490 eet.spec
491 ])
492
493
494 #####################################################################
495 ## Info
496
497 echo
498 echo
499 echo
500 echo "------------------------------------------------------------------------"
501 echo "$PACKAGE_NAME $PACKAGE_VERSION"
502 echo "------------------------------------------------------------------------"
503 echo
504 echo "Configuration Options Summary:"
505 echo
506 echo "  Amalgamation.........: ${do_amalgamation}"
507 echo "  Secure layer.........: ${secure_layer}"
508 if test "x${have_gnutls}" = "xyes" || test "x${have_openssl}" = "xyes" ; then
509    echo "    Cipher support.....: ${have_cipher}"
510    echo "    Signature..........: ${have_signature}"
511 fi
512 echo
513 echo "  Old eet file format..: ${old_eet_file_format}"
514 echo
515 echo "  Tests................: ${enable_tests}"
516 echo "  Coverage.............: ${enable_coverage}"
517 echo
518 echo "  Build eet............: $have_eet"
519 echo
520 echo "  Documentation........: ${build_doc}"
521 if test "x${build_doc}" = "xyes" ; then
522    echo "    Building...........: make doc"
523 fi
524 echo "  Examples.............: ${build_examples}"
525 if test "x${build_examples}" = "xyes" ; then
526    echo "    Install............: ${install_examples}"
527 fi
528 echo
529 echo "Compilation............: make (or gmake)"
530 echo "  CPPFLAGS.............: $CPPFLAGS"
531 echo "  CFLAGS...............: $CFLAGS"
532 echo "  LDFLAGS..............: $LDFLAGS"
533 echo
534 echo "Installation...........: make install (as root if needed, with 'su' or 'sudo')"
535 echo "  prefix...............: $prefix"
536 echo