* link correctly ecore against pthread
authorcaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 11 Nov 2009 23:43:58 +0000 (23:43 +0000)
committercaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Wed, 11 Nov 2009 23:43:58 +0000 (23:43 +0000)
 * use the efl_pthread.m4 macro
 * add configure output for pthread support in ecore

git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/ecore@43627 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

configure.ac
m4/efl_pthread.m4 [new file with mode: 0644]
src/lib/ecore/Makefile.am
src/lib/ecore/ecore_thread.c

index 36cc6d8..ce05466 100644 (file)
@@ -709,11 +709,8 @@ fi
 AC_SUBST(quartz_ldflags)
 
 # basic pthread support
-AC_CHECK_HEADER(pthread.h,
-  [
-     AC_DEFINE(BUILD_PTHREAD, 1, [Build thread worker])
-  ]
-)
+
+EFL_CHECK_PTHREAD([have_pthread="yes"], [have_pthread="no"])
 
 ### Checks for types
 AC_CHECK_SIZEOF(int, 4)
@@ -1181,6 +1178,7 @@ echo
 echo " Core:"
 echo
 echo "  Ecore........................: always"
+echo "    Thread support.............: $have_pthread"
 echo "    GLib support...............: $have_glib"
 echo "  Ecore_Job....................: $have_ecore_job"
 echo "  Ecore_Txt....................: $have_ecore_txt"
diff --git a/m4/efl_pthread.m4 b/m4/efl_pthread.m4
new file mode 100644 (file)
index 0000000..7bd341c
--- /dev/null
@@ -0,0 +1,71 @@
+dnl Copyright (C) 2008 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 several ASM instruction sets are available or not.
+
+dnl Usage: EFL_CHECK_EFL_CHECK_PTHREAD([ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]])
+dnl Call AC_SUBST(EFL_PTHREAD_FLAGS)
+dnl Define EFL_HAVE_PTHREAD
+
+AC_DEFUN([EFL_CHECK_PTHREAD],
+[
+
+dnl configure option
+
+AC_ARG_ENABLE([pthread],
+   [AC_HELP_STRING([--disable-pthread], [enable POSIX threads code @<:@default=yes@:>@])],
+   [
+    if test "x${enableval}" = "xyes" ; then
+       _efl_enable_pthread="yes"
+    else
+       _efl_enable_pthread="no"
+    fi
+   ],
+   [_efl_enable_pthread="yes"])
+
+AC_MSG_CHECKING([whether to build POSIX threads code])
+AC_MSG_RESULT([${_efl_enable_pthread}])
+
+dnl check if the compiler supports pthreads
+
+_efl_have_pthread="no"
+
+if test "x${_efl_enable_pthread}" = "xyes" ; then
+   AC_CHECK_HEADER(pthread.h,
+      [_efl_have_pthread="yes"],
+      [_efl_have_pthread="no"])
+fi
+
+AC_MSG_CHECKING([whether system support POSIX threads])
+AC_MSG_RESULT([${_efl_enable_pthread}])
+
+if test "x${_efl_have_pthread}" = "xyes" ; then
+   case "$host_os" in
+      mingw*)
+         EFL_PTHREAD_CFLAGS="-mthreads"
+         EFL_PTHREAD_LIBS="-mthreads -lpthreadGC2"
+         ;;
+      solaris*)
+         EFL_PTHREAD_CFLAGS="-mt"
+         EFL_PTHREAD_LIBS="-mt"
+         ;;
+      *)
+         EFL_PTHREAD_CFLAGS="-pthread"
+         EFL_PTHREAD_LIBS="-pthread"
+         ;;
+   esac
+fi
+
+AC_SUBST(EFL_PTHREAD_CFLAGS)
+AC_SUBST(EFL_PTHREAD_LIBS)
+
+if test "x${_efl_have_pthread}" = "xyes" ; then
+   AC_DEFINE(EFL_HAVE_PTHREAD, 1, [Define to mention that POSIX threads are supported])
+fi
+
+if test "x${_efl_have_pthread}" = "xyes" ; then
+   ifelse([$1], , :, [$1])
+else
+   ifelse([$2], , :, [$2])
+fi
+])
index bf8d839..e9e749e 100644 (file)
@@ -1,7 +1,7 @@
 MAINTAINERCLEANFILES = Makefile.in
 
-AM_CPPFLAGS = @EVIL_CFLAGS@ @WIN32_CPPFLAGS@ @EFL_ECORE_BUILD@
-AM_CFLAGS = @WIN32_CFLAGS@ @EINA_CFLAGS@ @WIN32_CPPFLAGS@ @GLIB_CFLAGS@
+AM_CPPFLAGS = @GLIB_CFLAGS@ @EVIL_CFLAGS@ @EINA_CFLAGS@ @WIN32_CPPFLAGS@ @EFL_ECORE_BUILD@
+AM_CFLAGS = @WIN32_CFLAGS@ @EFL_PTHREAD_CFLAGS@
 
 lib_LTLIBRARIES = libecore.la
 include_HEADERS = \
@@ -39,7 +39,7 @@ ecore_value.c \
 ecore_thread.c \
 ecore_glib.c
 
-libecore_la_LIBADD = @dlopen_libs@ @EINA_LIBS@ @EVIL_LIBS@ @GLIB_LIBS@ @WIN32_LIBS@ @LTLIBINTL@ -lm
+libecore_la_LIBADD = @dlopen_libs@ @EINA_LIBS@ @EVIL_LIBS@ @GLIB_LIBS@ @WIN32_LIBS@ @LTLIBINTL@ @EFL_PTHREAD_LIBS@ -lm
 libecore_la_LDFLAGS = -no-undefined @lt_enable_auto_import@ -version-info @version_info@ @ecore_release_info@
 
 EXTRA_DIST = ecore_private.h
index 75ae7a4..86cab99 100644 (file)
@@ -6,14 +6,14 @@
 # include <Evil.h>
 #endif
 
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
 # include <pthread.h>
 #endif
 
 #include "ecore_private.h"
 #include "Ecore.h"
 
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
 typedef struct _Ecore_Pthread_Worker Ecore_Pthread_Worker;
 typedef struct _Ecore_Pthread_Data Ecore_Pthread_Data;
 typedef struct _Ecore_Pthread Ecore_Pthread;
@@ -39,7 +39,7 @@ struct _Ecore_Pthread_Data
 static int _ecore_thread_count_max = 0;
 static int ECORE_THREAD_PIPE_DEL = 0;
 
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
 static int _ecore_thread_count = 0;
 static Eina_List *_ecore_thread_data = NULL;
 static Eina_List *_ecore_thread = NULL;
@@ -164,7 +164,7 @@ _ecore_thread_init(void)
      _ecore_thread_count_max = 1;
 
    ECORE_THREAD_PIPE_DEL = ecore_event_type_new();
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
    del_handler = ecore_event_handler_add(ECORE_THREAD_PIPE_DEL, _ecore_thread_pipe_del, NULL);
 #endif
 }
@@ -173,7 +173,7 @@ void
 _ecore_thread_shutdown(void)
 {
    /* FIXME: If function are still running in the background, should we kill them ? */
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
    Ecore_Pthread_Worker *work;
    Ecore_Pthread_Data *pth;
 
@@ -221,7 +221,7 @@ ecore_thread_run(void (*func_heavy)(void *data),
                 void (*func_cancel)(void *data),
                 const void *data)
 {
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
    Ecore_Pthread_Worker *work;
    Ecore_Pthread_Data *pth;
 
@@ -288,7 +288,7 @@ ecore_thread_run(void (*func_heavy)(void *data),
 EAPI Eina_Bool
 ecore_thread_cancel(Ecore_Thread *thread)
 {
-#ifdef BUILD_PTHREAD
+#ifdef EFL_HAVE_PTHREAD
    Ecore_Pthread_Worker *work;
    Eina_List *l;