summaryrefslogtreecommitdiff
path: root/legacy/eio
diff options
context:
space:
mode:
authorVincent Torri <vincent.torri@gmail.com>2010-10-21 17:51:21 +0000
committerVincent Torri <vincent.torri@gmail.com>2010-10-21 17:51:21 +0000
commitc2d941930c4cf9c929c967b597cc3a06828b807a (patch)
tree453230d787d38a56811452635fa89871b293bdf8 /legacy/eio
parentab84f4da58fd074308236053b129a42739852d3d (diff)
[eio] check if threads, grp.h and fchmod() are available
SVN revision: 53723
Diffstat (limited to 'legacy/eio')
-rw-r--r--legacy/eio/configure.ac23
-rw-r--r--legacy/eio/m4/efl_threads.m4206
-rw-r--r--legacy/eio/src/lib/eio_file.c5
-rw-r--r--legacy/eio/src/lib/eio_private.h14
4 files changed, 244 insertions, 4 deletions
diff --git a/legacy/eio/configure.ac b/legacy/eio/configure.ac
index 8bf674a63b..e784be2e4e 100644
--- a/legacy/eio/configure.ac
+++ b/legacy/eio/configure.ac
@@ -71,6 +71,24 @@ EFL_CHECK_DOXYGEN([build_doc="yes"], [build_doc="no"])
71AC_HEADER_ASSERT 71AC_HEADER_ASSERT
72AC_HEADER_DIRENT 72AC_HEADER_DIRENT
73AC_HEADER_TIME 73AC_HEADER_TIME
74AC_CHECK_HEADERS([grp.h])
75EFL_CHECK_THREADS(
76 [
77 if test "x${_efl_have_posix_threads}" = "xyes" ; then
78 have_threads="POSIX"
79 else
80 if test "x${_efl_have_win32_threads}" = "xyes" ; then
81 have_threads="Win32"
82 else
83 have_threads="no"
84 fi
85 fi
86 ],
87 [have_threads="no"])
88
89if test "x${have_threads}" = "xno" ; then
90 AC_MSG_ERROR([Threads not supported. Be sure to have pthread on non Windows OS])
91fi
74 92
75### Checks for types 93### Checks for types
76 94
@@ -105,8 +123,7 @@ esac
105AC_SUBST(EFL_EIO_BUILD) 123AC_SUBST(EFL_EIO_BUILD)
106 124
107### Checks for library functions 125### Checks for library functions
108AC_FUNC_ALLOCA 126AC_CHECK_FUNCS([fchmod])
109AC_CHECK_FUNCS(strlcpy)
110 127
111have_splice="no" 128have_splice="no"
112AC_TRY_LINK([ 129AC_TRY_LINK([
@@ -143,6 +160,8 @@ echo
143echo 160echo
144echo "Configuration Options Summary:" 161echo "Configuration Options Summary:"
145echo 162echo
163echo " Thread Support.......: ${have_threads}"
164echo
146echo " Documentation........: ${build_doc}" 165echo " Documentation........: ${build_doc}"
147echo 166echo
148echo "Compilation............: make (or gmake)" 167echo "Compilation............: make (or gmake)"
diff --git a/legacy/eio/m4/efl_threads.m4 b/legacy/eio/m4/efl_threads.m4
new file mode 100644
index 0000000000..86394bbddf
--- /dev/null
+++ b/legacy/eio/m4/efl_threads.m4
@@ -0,0 +1,206 @@
1dnl Copyright (C) 2010 Vincent Torri <vtorri at univ-evry dot fr>
2dnl rwlock code added by Mike Blumenkrantz <mike at zentific dot com>
3dnl This code is public domain and can be freely used or copied.
4
5dnl Macro that check if POSIX or Win32 threads library is available or not.
6
7dnl Usage: EFL_CHECK_THREADS(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
8dnl Call AC_SUBST(EFL_PTHREAD_CFLAGS)
9dnl Call AC_SUBST(EFL_PTHREAD_LIBS)
10dnl Defines EFL_HAVE_POSIX_THREADS or EFL_HAVE_WIN32_THREADS, and EFL_HAVE_THREADS
11
12AC_DEFUN([EFL_CHECK_THREADS],
13[
14
15dnl configure option
16
17AC_ARG_ENABLE([posix-threads],
18 [AC_HELP_STRING([--disable-posix-threads], [enable POSIX threads code @<:@default=auto@:>@])],
19 [
20 if test "x${enableval}" = "xyes" ; then
21 _efl_enable_posix_threads="yes"
22 else
23 _efl_enable_posix_threads="no"
24 fi
25 ],
26 [_efl_enable_posix_threads="auto"])
27
28AC_MSG_CHECKING([whether to build POSIX threads code])
29AC_MSG_RESULT([${_efl_enable_posix_threads}])
30
31AC_ARG_ENABLE([win32-threads],
32 [AC_HELP_STRING([--disable-win32-threads], [enable Win32 threads code @<:@default=no@:>@])],
33 [
34 if test "x${enableval}" = "xyes" ; then
35 _efl_enable_win32_threads="yes"
36 else
37 _efl_enable_win32_threads="no"
38 fi
39 ],
40 [_efl_enable_win32_threads="no"])
41
42AC_MSG_CHECKING([whether to build Windows threads code])
43AC_MSG_RESULT([${_efl_enable_win32_threads}])
44
45dnl
46dnl * no + no
47dnl * yes + no : win32: error, other : pthread
48dnl * yes + yes : win32 : wthread, other : pthread
49dnl * no + yes : win32 : wthread, other : error
50
51if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_enable_win32_threads}" = "xyes" ; then
52 case "$host_os" in
53 mingw*)
54 _efl_enable_posix_threads=no
55 ;;
56 *)
57 _efl_enable_win32_threads=no
58 ;;
59 esac
60fi
61
62if test "x${_efl_enable_win32_threads}" = "xyes" ; then
63 case "$host_os" in
64 mingw*)
65 ;;
66 *)
67 AC_MSG_ERROR([Win32 threads support requested but non Windows system found.])
68 ;;
69 esac
70fi
71
72if test "x${_efl_enable_posix_threads}" = "xyes" ; then
73 case "$host_os" in
74 mingw*)
75 AC_MSG_ERROR([POSIX threads support requested but Windows system found.])
76 ;;
77 *)
78 ;;
79 esac
80fi
81
82dnl check if the compiler supports POSIX threads
83
84case "$host_os" in
85 mingw*)
86 ;;
87 solaris*)
88 _efl_thread_cflags="-mt"
89 _efl_thread_libs="-mt"
90 ;;
91 *)
92 _efl_thread_cflags="-pthread"
93 _efl_thread_libs="-pthread"
94 ;;
95esac
96
97_efl_have_posix_threads="no"
98_efl_have_win32_threads="no"
99
100if test "x${_efl_enable_posix_threads}" = "xyes" || test "x${_efl_enable_posix_threads}" = "xauto" ; then
101
102 SAVE_CFLAGS=${CFLAGS}
103 CFLAGS="${CFLAGS} ${_efl_threads_cflags}"
104 SAVE_LIBS=${LIBS}
105 LIBS="${LIBS} ${_efl_threads_libs}"
106 AC_LINK_IFELSE(
107 [AC_LANG_PROGRAM([[
108#include <pthread.h>
109 ]],
110 [[
111pthread_t id;
112id = pthread_self();
113 ]])],
114 [_efl_have_posix_threads="yes"],
115 [_efl_have_posix_threads="no"])
116 CFLAGS=${SAVE_CFLAGS}
117 LIBS=${SAVE_LIBS}
118
119fi
120
121AC_MSG_CHECKING([whether system support POSIX threads])
122AC_MSG_RESULT([${_efl_have_posix_threads}])
123if test "$x{_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads}" = "xno"; then
124 AC_MSG_ERROR([POSIX threads support requested but not found.])
125fi
126
127EFL_PTHREAD_CFLAGS=""
128EFL_PTHREAD_LIBS=""
129if test "x${_efl_have_posix_threads}" = "xyes" ; then
130 EFL_PTHREAD_CFLAGS=${_efl_thread_cflags}
131 EFL_PTHREAD_LIBS=${_efl_thread_libs}
132fi
133
134AC_SUBST(EFL_PTHREAD_CFLAGS)
135AC_SUBST(EFL_PTHREAD_LIBS)
136
137_efl_enable_debug_threads="no"
138AC_ARG_ENABLE([debug-threads],
139 [AC_HELP_STRING([--enable-debug-threads], [disable assert when you forgot to call eina_threads_init])],
140 [_efl_enable_debug_threads="${enableval}"])
141
142have_debug_threads="no"
143if test "x${_efl_have_posix_threads}" = "xyes" -a "x${_efl_enable_debug_threads}" = "xyes"; then
144 have_debug_threads="yes"
145 AC_DEFINE([EFL_DEBUG_THREADS], [1], [Assert when forgot to call eina_threads_init])
146fi
147
148if test "x${_efl_have_posix_threads}" = "xyes" ; then
149 AC_DEFINE([EFL_HAVE_POSIX_THREADS], [1], [Define to mention that POSIX threads are supported])
150fi
151
152if test "x${_efl_enable_win32_threads}" = "xyes" ; then
153 _efl_have_win32_threads="yes"
154 AC_DEFINE([EFL_HAVE_WIN32_THREADS], [1], [Define to mention that Win32 threads are supported])
155fi
156
157if test "x${_efl_have_posix_threads}" = "xyes" || test "x${_efl_have_win32_threads}" = "xyes" ; then
158 AC_DEFINE([EFL_HAVE_THREADS], [1], [Define to mention that POSIX or Win32 threads are supported])
159fi
160
161AS_IF([test "x$_efl_have_posix_threads" = "xyes" || test "x$_efl_have_win32_threads" = "xyes"], [$1], [$2])
162])
163
164dnl Usage: EFL_CHECK_SPINLOCK(ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND])
165dnl Defines EFL_HAVE_POSIX_THREADS_SPINLOCK
166AC_DEFUN([EFL_CHECK_SPINLOCK],
167[
168
169dnl check if the compiler supports pthreads spinlock
170
171_efl_have_posix_threads_spinlock="no"
172
173if test "x${_efl_have_posix_threads}" = "xyes" ; then
174
175 SAVE_CFLAGS=${CFLAGS}
176 CFLAGS="${CFLAGS} ${EFL_PTHREAD_CFLAGS}"
177 SAVE_LIBS=${LIBS}
178 LIBS="${LIBS} ${EFL_PTHREAD_LIBS}"
179 AC_LINK_IFELSE(
180 [AC_LANG_PROGRAM([[
181#include <pthread.h>
182 ]],
183 [[
184pthread_spinlock_t lock;
185int res;
186res = pthread_spin_init(&lock, PTHREAD_PROCESS_PRIVATE);
187 ]])],
188 [_efl_have_posix_threads_spinlock="yes"],
189 [_efl_have_posix_threads_spinlock="no"])
190 CFLAGS=${SAVE_CFLAGS}
191 LIBS=${SAVE_LIBS}
192
193fi
194
195AC_MSG_CHECKING([whether to build POSIX threads spinlock code])
196AC_MSG_RESULT([${_efl_have_posix_threads_spinlock}])
197if test "x${_efl_enable_posix_threads}" = "xyes" && test "x${_efl_have_posix_threads_spinlock}" = "xno" ; then
198 AC_MSG_WARN([POSIX threads support requested but spinlocks are not supported])
199fi
200
201if test "x${_efl_have_posix_threads_spinlock}" = "xyes" ; then
202 AC_DEFINE([EFL_HAVE_POSIX_THREADS_SPINLOCK], [1], [Define to mention that POSIX threads spinlocks are supported])
203fi
204AS_IF([test "x$_efl_have_posix_threads_spinlock" = "xyes"], [$1], [$2])
205])
206
diff --git a/legacy/eio/src/lib/eio_file.c b/legacy/eio/src/lib/eio_file.c
index 14e60e0a32..9f80f482f6 100644
--- a/legacy/eio/src/lib/eio_file.c
+++ b/legacy/eio/src/lib/eio_file.c
@@ -485,8 +485,13 @@ eio_file_copy_do(Ecore_Thread *thread, Eio_File_Progress *copy)
485 goto on_error; 485 goto on_error;
486 486
487 /* change access right to match source */ 487 /* change access right to match source */
488#ifdef HAVE_CHMOD
488 if (fchmod(out, buf.st_mode) != 0) 489 if (fchmod(out, buf.st_mode) != 0)
489 goto on_error; 490 goto on_error;
491#else
492 if (chmod(copy->dest, buf.st_mode) != 0)
493 goto on_error;
494#endif
490 495
491 close(out); 496 close(out);
492 close(in); 497 close(in);
diff --git a/legacy/eio/src/lib/eio_private.h b/legacy/eio/src/lib/eio_private.h
index 67578bf315..be9dcb890a 100644
--- a/legacy/eio/src/lib/eio_private.h
+++ b/legacy/eio/src/lib/eio_private.h
@@ -28,9 +28,19 @@
28#include <dirent.h> 28#include <dirent.h>
29#include <sys/mman.h> 29#include <sys/mman.h>
30#include <fcntl.h> 30#include <fcntl.h>
31#include <pthread.h>
32#include <pwd.h> 31#include <pwd.h>
33#include <grp.h> 32
33#ifdef HAVE_GRP_H
34# include <grp.h>
35#endif
36
37#ifdef EFL_HAVE_POSIX_THREADS
38# include <pthread.h>
39#endif
40
41#ifdef EFL_HAVE_WIN32_THREADS
42# include <windows.h>
43#endif
34 44
35#include <Ecore.h> 45#include <Ecore.h>
36 46