Eina: fix shm_open() check (can be in libc or librt) + various autotools cleaning

This works in linux and windows, and should fix shm_detection on BSD (including Mac)

BSD, Mac and solaris users : please check that it compiles and shm_open is detected


SVN revision: 69608
This commit is contained in:
Vincent Torri 2012-03-25 11:12:32 +00:00
parent 13f1bc5049
commit f00cf44117
7 changed files with 166 additions and 141 deletions

View File

@ -260,6 +260,7 @@ AM_CONDITIONAL(EINA_ENABLE_BENCHMARK_E17, test "x${enable_benchmark_e17}" = "xye
### Checks for programs ### Checks for programs
AC_PROG_CC AC_PROG_CC
#for src/tests...
AC_PROG_CXX AC_PROG_CXX
# pkg-config # pkg-config
@ -309,12 +310,12 @@ else
fi fi
# Evil library for compilation on Windows CE # Evil library for compilation on Windows
EFL_EINA_BUILD="" EFL_EINA_BUILD=""
case "$host_os" in case "$host_os" in
mingw*) mingw*)
PKG_CHECK_MODULES([EVIL], [evil >= 1.0.0]) PKG_CHECK_EXISTS([EVIL], [evil >= 1.0.0])
AC_DEFINE([HAVE_EVIL], [1], [Set to 1 if evil package is installed]) AC_DEFINE([HAVE_EVIL], [1], [Set to 1 if evil package is installed])
requirement_eina="${requirement_eina} evil" requirement_eina="${requirement_eina} evil"
EFL_EINA_BUILD="-DEFL_EINA_BUILD" EFL_EINA_BUILD="-DEFL_EINA_BUILD"
@ -322,6 +323,35 @@ case "$host_os" in
esac esac
AC_SUBST([EFL_EINA_BUILD]) AC_SUBST([EFL_EINA_BUILD])
# Checks for portability layer
PKG_CHECK_MODULES([EXOTIC],
[exotic],
[enable_exotic="yes"],
[enable_exotic="no"])
if test "x${enable_exotic}" = "xyes"; then
requirement_eina="exotic ${requirement_eina}"
EINA_CFLAGS="${EINA_CFLAGS} ${EXOTIC_CFLAGS}"
EINA_LIBS="${EXOTIC_LIBS}"
EINA_CONFIGURE_HAVE_EXOTIC="#define EINA_HAVE_EXOTIC"
AC_DEFINE([HAVE_EXOTIC_H], [1], [Define to 1 if you have Exotic.])
fi
AM_CONDITIONAL([EINA_HAVE_EXOTIC], [test "x${enable_exotic}" = "xyes"])
AC_SUBST([EINA_CONFIGURE_HAVE_EXOTIC])
case "$host_vendor" in
ps3*)
PKG_CHECK_MODULES([ESCAPE], [escape])
AC_DEFINE(HAVE_ESCAPE, 1, [Set to 1 if Escape package is installed])
requirement_eina="${requirement_eina} escape"
EINA_CFLAGS="${ESCAPE_CFLAGS} ${EINA_CFLAGS}"
;;
esac
AC_SUBST([EINA_CFLAGS])
# Check ememoa memory pool library # Check ememoa memory pool library
AC_ARG_ENABLE([ememoa], AC_ARG_ENABLE([ememoa],
@ -352,8 +382,56 @@ PKG_CHECK_MODULES([ECORE_EVAS],
AM_CONDITIONAL([BUILD_TILER_EXAMPLE], [test "x${build_tiler_example}" = "xyes"]) AM_CONDITIONAL([BUILD_TILER_EXAMPLE], [test "x${build_tiler_example}" = "xyes"])
### Checks for header files
AC_HEADER_ASSERT
AC_HEADER_TIME
AC_HEADER_DIRENT
AC_CHECK_HEADERS([unistd.h libgen.h inttypes.h stdint.h sys/types.h siginfo.h strings.h sys/mman.h execinfo.h mcheck.h])
if test "x${ac_cv_header_inttypes_h}" = "xyes" ; then
EINA_CONFIGURE_HAVE_INTTYPES_H="#define EINA_HAVE_INTTYPES_H"
AC_DEFINE([HAVE_INTTYPES_H], [1], [Define to 1 if you have the <inttypes.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_INTTYPES_H])
if test "x${ac_cv_header_inttypes_h}" = "xyes" ; then
EINA_CONFIGURE_HAVE_STDINT_H="#define EINA_HAVE_STDINT_H"
AC_DEFINE([HAVE_STDINT_H], [1], [Define to 1 if you have the <stdint.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_STDINT_H])
### Checks for types
# wchar_t
AC_CHECK_SIZEOF([wchar_t])
EINA_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
AC_SUBST([EINA_SIZEOF_WCHAR_T])
AC_CHECK_TYPES([siginfo_t], [], [],
[[
#include <signal.h>
#if HAVE_SIGINFO_H
# include <siginfo.h>
#endif
]])
# struct dirent
AC_CHECK_TYPES([struct dirent], [have_dirent="yes"], [have_dirent="no"],
[[
#include <dirent.h>
]])
if test "x${have_dirent}" = "xyes" ; then
EINA_CONFIGURE_HAVE_DIRENT_H="#define EINA_HAVE_DIRENT_H"
AC_DEFINE([HAVE_DIRENT_H], [1], [Define to 1 if you have a valid <dirent.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_DIRENT_H])
### Checks for structures
### Checks for compiler characteristics ### Checks for compiler characteristics
AC_C_CONST
AC_C_BIGENDIAN AC_C_BIGENDIAN
AC_C_INLINE AC_C_INLINE
AC_PROG_CC_STDC AC_PROG_CC_STDC
@ -384,58 +462,16 @@ m4_ifdef([v_mic],
EFL_COMPILER_FLAG([-Wshadow]) EFL_COMPILER_FLAG([-Wshadow])
### Checks for portability layer EFL_CHECK_PATH_MAX
PKG_CHECK_MODULES([EXOTIC],
[exotic],
[enable_exotic="yes"],
[enable_exotic="no"])
if test "x${enable_exotic}" = "xyes"; then
requirement_eina="exotic ${requirement_eina}"
EINA_CFLAGS="${EINA_CFLAGS} ${EXOTIC_CFLAGS}"
EINA_LIBS="${EXOTIC_LIBS}"
EINA_CONFIGURE_HAVE_EXOTIC="#define EINA_HAVE_EXOTIC"
AC_DEFINE([HAVE_EXOTIC_H], [1], [Define to 1 if you have Exotic.])
fi
AM_CONDITIONAL([EINA_HAVE_EXOTIC], [test "x${enable_exotic}" = "xyes"])
AC_SUBST([EINA_CONFIGURE_HAVE_EXOTIC])
case "$host_vendor" in
ps3*)
PKG_CHECK_MODULES([ESCAPE], [escape])
AC_DEFINE(HAVE_ESCAPE, 1, [Set to 1 if Escape package is installed])
requirement_eina="${requirement_eina} escape"
EINA_CFLAGS="${ESCAPE_CFLAGS} ${EINA_CFLAGS}"
;;
esac
AC_SUBST([EINA_CFLAGS])
### Checks for linker characteristics ### Checks for linker characteristics
EINA_LIBS= EINA_LIBS=
lt_enable_auto_import="" lt_enable_auto_import=""
case "${host_os}" in case "${host_os}" in
mingw*) mingw*)
EINA_LIBS="${EINA_LIBS} -ldl ${EVIL_LIBS} -lm" EINA_LIBS="${EINA_LIBS} ${EVIL_LIBS}"
lt_enable_auto_import="-Wl,--enable-auto-import" lt_enable_auto_import="-Wl,--enable-auto-import"
;; ;;
dragonfly*|openbsd*)
EINA_LIBS="${EINA_LIBS} -lm"
;;
freebsd*|netbsd*)
EINA_LIBS="${EINA_LIBS} -lrt -lm"
;;
darwin*)
EINA_LIBS="${EINA_LIBS} -lm"
;;
cygwin*)
EINA_LIBS="${EINA_LIBS} -ldl -lm"
;;
*)
EINA_LIBS="${EINA_LIBS} -lrt -ldl -lm"
;;
esac esac
case "$host_vendor" in case "$host_vendor" in
ps3*) ps3*)
@ -448,63 +484,18 @@ AC_SUBST([lt_enable_auto_import])
EFL_LINKER_FLAG([-fno-strict-aliasing]) EFL_LINKER_FLAG([-fno-strict-aliasing])
CFLAGS="${CFLAGS} ${EINA_CFLAGS}"
LDFLAGS="${LDFLAGS} ${EINA_LDFLAGS}"
LIBS="${LIBS} ${EINA_LIBS}"
### Checks for header files
AC_HEADER_ASSERT
AC_HEADER_TIME
EFL_CHECK_PATH_MAX
AC_CHECK_HEADERS([unistd.h libgen.h inttypes.h stdint.h sys/types.h siginfo.h strings.h sys/mman.h execinfo.h])
if test "x${ac_cv_header_inttypes_h}" = "xyes" ; then
EINA_CONFIGURE_HAVE_INTTYPES_H="#define EINA_HAVE_INTTYPES_H"
AC_DEFINE([HAVE_INTTYPES_H], [1], [Define to 1 if you have the <inttypes.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_INTTYPES_H])
if test "x${ac_cv_header_inttypes_h}" = "xyes" ; then
EINA_CONFIGURE_HAVE_STDINT_H="#define EINA_HAVE_STDINT_H"
AC_DEFINE([HAVE_STDINT_H], [1], [Define to 1 if you have the <stdint.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_STDINT_H])
### Checks for types
AC_CHECK_SIZEOF([wchar_t])
EINA_SIZEOF_WCHAR_T=$ac_cv_sizeof_wchar_t
AC_SUBST([EINA_SIZEOF_WCHAR_T])
AC_CHECK_TYPES([siginfo_t], [], [],
[[#include <signal.h>
#if HAVE_SIGINFO_H
# include <siginfo.h>
#endif
]])
### Check if dirent.h is usable
AC_CHECK_TYPES([struct dirent], [have_dirent="yes"], [have_dirent="no"],
[[#include <dirent.h>
]])
if test "x${have_dirent}" = "xyes" ; then
EINA_CONFIGURE_HAVE_DIRENT_H="#define EINA_HAVE_DIRENT_H"
AC_DEFINE([HAVE_DIRENT_H], [1], [Define to 1 if you have a valid <dirent.h> header file.])
fi
AC_SUBST([EINA_CONFIGURE_HAVE_DIRENT_H])
### Checks for library functions ### Checks for library functions
AC_ISC_POSIX
AC_FUNC_ALLOCA AC_FUNC_ALLOCA
AC_CHECK_FUNCS([strlcpy openat fstatat fpathconf execvp backtrace backtrace_symbols]) AC_CHECK_FUNCS([strlcpy openat fstatat fpathconf execvp backtrace backtrace_symbols malloc_usable_size mtrace])
AC_MSG_CHECKING([for dirfd]) AC_MSG_CHECKING([for dirfd])
AC_LINK_IFELSE( AC_LINK_IFELSE(
[ [
AC_LANG_PROGRAM( AC_LANG_PROGRAM(
[[ [[
#include <dirent.h> #ifdef HAVE_DIRENT_H
# include <dirent.h>
#endif
]], ]],
[[ [[
int main(void) int main(void)
@ -523,12 +514,6 @@ if test "x${have_dirfd}" = "xyes" ; then
AC_DEFINE([HAVE_DIRFD], [1], [ Define to 1 if you have the `dirfd' function or macro.]) AC_DEFINE([HAVE_DIRFD], [1], [ Define to 1 if you have the `dirfd' function or macro.])
fi fi
# check debug information for malloc
AC_CHECK_FUNCS([malloc_usable_size], [malloc_true_size="yes"], [malloc_true_size="no"])
if test "x${malloc_true_size}" = "xyes" ; then
AC_DEFINE([HAVE_MALLOC_USABLE_SIZE], [1], [We will be able to know the exact amount of wasted memory])
fi
want_debug_malloc="no" want_debug_malloc="no"
AC_ARG_ENABLE([debug-malloc], AC_ARG_ENABLE([debug-malloc],
[AC_HELP_STRING([--enable-debug-malloc], [enable debugging of malloc usage overhead in our allocator @<:@default=enabled@:>@])], [AC_HELP_STRING([--enable-debug-malloc], [enable debugging of malloc usage overhead in our allocator @<:@default=enabled@:>@])],
@ -540,7 +525,7 @@ AC_ARG_ENABLE([debug-malloc],
fi fi
], [want_debug_malloc="no"]) ], [want_debug_malloc="no"])
if test "x${malloc_true_size}" = "xyes" -a "x${want_debug_malloc}" = "xyes"; then if test "x${ac_cv_func_malloc_usable_size}" = "xyes" && test "x${want_debug_malloc}" = "xyes"; then
AC_DEFINE([EINA_DEBUG_MALLOC], [1], [Turn on debugging overhead in mempool]) AC_DEFINE([EINA_DEBUG_MALLOC], [1], [Turn on debugging overhead in mempool])
fi fi
@ -551,6 +536,7 @@ case "$host_os" in
# managed by evil # managed by evil
AC_DEFINE([HAVE_DLADDR]) AC_DEFINE([HAVE_DLADDR])
AC_DEFINE([HAVE_DLOPEN]) AC_DEFINE([HAVE_DLOPEN])
dlopen_libs="-ldl"
;; ;;
*) *)
AC_CHECK_FUNCS([dlopen], [res="yes"], [res="no"]) AC_CHECK_FUNCS([dlopen], [res="yes"], [res="no"])
@ -598,8 +584,6 @@ if test "x${enable_log}" = "xyes"; then
fi fi
AC_SUBST([EINA_CONFIGURE_ENABLE_LOG]) AC_SUBST([EINA_CONFIGURE_ENABLE_LOG])
AC_CHECK_HEADERS([mcheck.h], [AC_DEFINE([HAVE_MCHECK], [1], [Have mcheck.h])])
AC_CHECK_FUNCS([mtrace], [AC_DEFINE([HAVE_MTRACE], [1], [Have mtrace])])
# iconv library # iconv library
have_iconv="no" have_iconv="no"
@ -702,37 +686,8 @@ if test "x${have_iconv}" = "xyes" ; then
AC_DEFINE([HAVE_ICONV], [1], [Set to 1 if iconv library is installed]) AC_DEFINE([HAVE_ICONV], [1], [Set to 1 if iconv library is installed])
fi fi
# shmopen # shm_open
have_shmopen=no EFL_CHECK_SHM_OPEN([have_shm_open="yes"], [have_shm_open="no"])
AC_MSG_CHECKING([for shm_open availability])
LIBS_save="${LIBS}"
LIBS="${LIBS} -lrt"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */
]],
[[
int fd;
fd = shm_open("/dev/null", O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
]])],
[have_shmopen="yes"],
[have_shmopen="no"])
LIBS="${LIBS_save}"
AC_MSG_RESULT([${have_shmopen}])
if test "x${have_shmopen}" = "xyes"; then
AC_DEFINE([HAVE_SHMOPEN], [1], [Define to 1 if you have the `shm_open' function.])
rt_libs="-lrt"
fi
AC_SUBST([rt_libs])
# extended attribute # extended attribute
@ -859,6 +814,7 @@ echo " Amalgamation.........: ${do_amalgamation}"
echo " Iconv support........: ${have_iconv}" echo " Iconv support........: ${have_iconv}"
echo " File dirfd...........: ${have_dirfd}" echo " File dirfd...........: ${have_dirfd}"
echo " File xattr...........: ${have_xattr}" echo " File xattr...........: ${have_xattr}"
echo " shm_open.............: ${have_shm_open}"
echo echo
echo " Documentation........: ${build_doc}" echo " Documentation........: ${build_doc}"
echo " Tests................: ${enable_tests}" echo " Tests................: ${enable_tests}"

View File

@ -8,5 +8,5 @@ Description: A Library that implements fast data types and miscellaneous tools
@pkgconfig_requires_private@: @requirement_eina@ @pkgconfig_requires_private@: @requirement_eina@
Version: @VERSION@ Version: @VERSION@
Libs: -L${libdir} -leina @EFL_PTHREAD_LIBS@ Libs: -L${libdir} -leina @EFL_PTHREAD_LIBS@
Libs.private: @EFL_FNMATCH_LIBS@ @EFL_PTHREAD_LIBS@ @rt_libs@ @iconv_libs@ @EINA_LIBS@ Libs.private: @EFL_FNMATCH_LIBS@ @EFL_SHM_OPEN_LIBS@ @EFL_PTHREAD_LIBS@ @iconv_libs@ @EINA_LIBS@
Cflags: -I${includedir}/eina-@VMAJ@ -I${includedir}/eina-@VMAJ@/eina Cflags: -I${includedir}/eina-@VMAJ@ -I${includedir}/eina-@VMAJ@/eina

View File

@ -0,0 +1,69 @@
dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr>
dnl That code is public domain and can be freely used or copied.
dnl Macro that check if shm_open function is available or not.
dnl Usage: EFL_CHECK_SHM_OPEN([, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
dnl Call AC_SUBST(EFL_SHM_OPEN_LIBS)
dnl Define HAVE_SHM_OPEN to 1if shm_open is available
AC_DEFUN([EFL_CHECK_SHM_OPEN],
[
_efl_have_shm_open="no"
dnl Check is shm_open is in libc
AC_MSG_CHECKING([for shm_open in libc])
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */
]],
[[
int fd;
fd = shm_open("/dev/null", O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
]])],
[_efl_have_shm_open="yes"],
[_efl_have_shm_open="no"])
AC_MSG_RESULT([${_efl_have_shm_open}])
if test "x$_efl_have_shm_open" = "xno" ; then
AC_MSG_CHECKING([for shm_open in librt])
LIBS_save="${LIBS}"
LIBS="${LIBS} -lrt"
AC_LINK_IFELSE(
[AC_LANG_PROGRAM(
[[
#include <sys/mman.h>
#include <sys/stat.h> /* For mode constants */
#include <fcntl.h> /* For O_* constants */
]],
[[
int fd;
fd = shm_open("/dev/null", O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
]])],
[
EFL_SHM_OPEN_LIBS="-lrt"
_efl_have_shm_open="yes"],
[_efl_have_shm_open="no"])
LIBS="${LIBS_save}"
AC_MSG_RESULT([${_efl_have_shm_open}])
fi
AC_SUBST([EFL_SHM_OPEN_LIBS])
if test "x$_efl_have_shm_open" = "xyes" ; then
AC_DEFINE([HAVE_SHM_OPEN], [1], [Define to 1 if you have the `shm_open' function.])
fi
AS_IF([test "x$_efl_have_shm_open" = "xyes"], [$1], [$2])
])

View File

@ -170,7 +170,7 @@ else
libeina_la_SOURCES = $(base_sources) libeina_la_SOURCES = $(base_sources)
endif endif
libeina_la_LIBADD = @iconv_libs@ @rt_libs@ @EINA_LIBS@ @dlopen_libs@ libeina_la_LIBADD = @iconv_libs@ @EFL_SHM_OPEN_LIBS@ @EINA_LIBS@ @dlopen_libs@ -lm
libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@ libeina_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @release_info@ @EFL_PTHREAD_LIBS@
libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@ libeina_la_CFLAGS = @EINA_CFLAGS@ @EFL_PTHREAD_CFLAGS@

View File

@ -953,7 +953,7 @@ eina_file_open(const char *path, Eina_Bool shared)
if (!filename) return NULL; if (!filename) return NULL;
if (shared) if (shared)
#ifdef HAVE_SHMOPEN #ifdef HAVE_SHM_OPEN
fd = shm_open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO); fd = shm_open(filename, O_RDONLY, S_IRWXU | S_IRWXG | S_IRWXO);
#else #else
goto on_error; goto on_error;

View File

@ -37,7 +37,7 @@
# endif # endif
#endif #endif
#ifdef HAVE_MCHECK #ifdef HAVE_MCHECK_H
# ifdef HAVE_MTRACE # ifdef HAVE_MTRACE
# define MT 1 # define MT 1
# endif # endif

View File

@ -86,7 +86,7 @@ module_dummy_la_CPPFLAGS = \
-I$(top_builddir)/src/include \ -I$(top_builddir)/src/include \
-I$(top_builddir)/src/lib \ -I$(top_builddir)/src/lib \
@EFL_EINA_BUILD@ @EFL_EINA_BUILD@
module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ module_dummy_la_LIBADD = $(top_builddir)/src/lib/libeina.la @EINA_LIBS@ -lm
module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version module_dummy_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -module -avoid-version
module_dummy_la_LIBTOOLFLAGS = --tag=disable-static module_dummy_la_LIBTOOLFLAGS = --tag=disable-static