Fixed assuan_process_next() reading a not ready file descriptor after
[pwmd.git] / acinclude.m4
blobadd6b59fa3f2f3436cec8ee833b6efb35547394e
1 dnl ##
2 dnl ##  GNU Pth - The GNU Portable Threads
3 dnl ##  Copyright (c) 1999-2006 Ralf S. Engelschall <rse@engelschall.com>
4 dnl ##
5 dnl ##  This file is part of GNU Pth, a non-preemptive thread scheduling
6 dnl ##  library which can be found at http://www.gnu.org/software/pth/.
7 dnl ##
8 dnl ##  This library is free software; you can redistribute it and/or
9 dnl ##  modify it under the terms of the GNU Lesser General Public
10 dnl ##  License as published by the Free Software Foundation; either
11 dnl ##  version 2.1 of the License, or (at your option) any later version.
12 dnl ##
13 dnl ##  This library is distributed in the hope that it will be useful,
14 dnl ##  but WITHOUT ANY WARRANTY; without even the implied warranty of
15 dnl ##  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 dnl ##  Lesser General Public License for more details.
17 dnl ##
18 dnl ##  You should have received a copy of the GNU Lesser General Public
19 dnl ##  License along with this library; if not, write to the Free Software
20 dnl ##  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 dnl ##  USA, or contact Ralf S. Engelschall <rse@engelschall.com>.
22 dnl ##
23 dnl ##  pth.m4: Autoconf macro for locating GNU Pth from within
24 dnl ##          configure.ac of third-party software packages
25 dnl ##
27 dnl ##
28 dnl ##  Synopsis:
29 dnl ##  AC_CHECK_PTH([MIN-VERSION [,          # minimum Pth version, e.g. 1.2.0
30 dnl ##                DEFAULT-WITH-PTH [,     # default value for --with-pth option
31 dnl ##                DEFAULT-WITH-PTH-TEST [,# default value for --with-pth-test option
32 dnl ##                EXTEND-VARS [,          # whether CFLAGS/LDFLAGS/etc are extended
33 dnl ##                ACTION-IF-FOUND [,      # action to perform if Pth was found
34 dnl ##                ACTION-IF-NOT-FOUND     # action to perform if Pth was not found
35 dnl ##                ]]]]]])
36 dnl ##  Examples:
37 dnl ##  AC_CHECK_PTH(1.2.0)
38 dnl ##  AC_CHECK_PTH(1.2.0,,,no,CFLAGS="$CFLAGS -DHAVE_PTH $PTH_CFLAGS")
39 dnl ##  AC_CHECK_PTH(1.2.0,yes,yes,yes,CFLAGS="$CFLAGS -DHAVE_PTH")
40 dnl ##
41 dnl
42 dnl #   auxilliary macros
43 AC_DEFUN([_AC_PTH_ERROR], [dnl
44 AC_MSG_RESULT([*FAILED*])
45 m4_define(_ac_pth_line,dnl
46 "+------------------------------------------------------------------------+")
47 echo " _ac_pth_line" 1>&2
48 cat <<EOT | sed -e 's/^[[       ]]*/ | /' -e 's/>>/  /' 1>&2
50 EOT
51 echo " _ac_pth_line" 1>&2
52 exit 1
54 AC_DEFUN([_AC_PTH_VERBOSE], [dnl
55 if test ".$verbose" = .yes; then
56     AC_MSG_RESULT([  $1])
59 dnl #   the user macro
60 AC_DEFUN([AC_CHECK_PTH], [dnl
61 dnl
62 dnl #   prerequisites
63 AC_REQUIRE([AC_PROG_CC])dnl
64 AC_REQUIRE([AC_PROG_CPP])dnl
65 dnl
66 PTH_CPPFLAGS=''
67 PTH_CFLAGS=''
68 PTH_LDFLAGS=''
69 PTH_LIBS=''
70 AC_SUBST(PTH_CPPFLAGS)
71 AC_SUBST(PTH_CFLAGS)
72 AC_SUBST(PTH_LDFLAGS)
73 AC_SUBST(PTH_LIBS)
74 dnl #   command line options
75 AC_MSG_CHECKING(for GNU Pth)
76 _AC_PTH_VERBOSE([])
77 AC_ARG_WITH(pth,dnl
78 [  --with-pth[=ARG]        Build with GNU Pth Library  (default=]ifelse([$2],,yes,$2)[)],dnl
79 ,dnl
80 with_pth="ifelse([$2],,yes,$2)"
81 )dnl
82 AC_ARG_WITH(pth-test,dnl
83 [  --with-pth-test         Perform GNU Pth Sanity Test (default=]ifelse([$3],,yes,$3)[)],dnl
84 ,dnl
85 with_pth_test="ifelse([$3],,yes,$3)"
86 )dnl
87 _AC_PTH_VERBOSE([+ Command Line Options:])
88 _AC_PTH_VERBOSE([    o --with-pth=$with_pth])
89 _AC_PTH_VERBOSE([    o --with-pth-test=$with_pth_test])
90 dnl
91 dnl #   configuration
92 if test ".$with_pth" != .no; then
93     _pth_subdir=no
94     _pth_subdir_opts=''
95     case "$with_pth" in
96         subdir:* )
97             _pth_subdir=yes
98             changequote(, )dnl
99             _pth_subdir_opts=`echo $with_pth | sed -e 's/^subdir:[^     ]*[     ]*//'`
100             with_pth=`echo $with_pth | sed -e 's/^subdir:\([^   ]*\).*$/\1/'`
101             changequote([, ])dnl
102             ;;
103     esac
104     _pth_version=""
105     _pth_location=""
106     _pth_type=""
107     _pth_cppflags=""
108     _pth_cflags=""
109     _pth_ldflags=""
110     _pth_libs=""
111     if test ".$with_pth" = .yes; then
112         #   via config script in $PATH
113         changequote(, )dnl
114         _pth_version=`(pth-config --version) 2>/dev/null |\
115                       sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
116         changequote([, ])dnl
117         if test ".$_pth_version" != .; then
118             _pth_location=`pth-config --prefix`
119             _pth_type='installed'
120             _pth_cppflags=`pth-config --cflags`
121             _pth_cflags=`pth-config --cflags`
122             _pth_ldflags=`pth-config --ldflags`
123             _pth_libs=`pth-config --libs --all`
124         fi
125     elif test -d "$with_pth"; then
126         with_pth=`echo $with_pth | sed -e 's;/*$;;'`
127         _pth_found=no
128         #   via locally included source tree
129         if test ".$_pth_subdir" = .yes; then
130             _pth_location="$with_pth"
131             _pth_type='local'
132             _pth_cppflags="-I$with_pth"
133             _pth_cflags="-I$with_pth"
134             if test -f "$with_pth/ltconfig"; then
135                 _pth_ldflags="-L$with_pth/.libs"
136             else
137                 _pth_ldflags="-L$with_pth"
138             fi
139             _pth_libs="-lpth"
140             changequote(, )dnl
141             _pth_version=`grep '^const char PTH_Hello' $with_pth/pth_vers.c |\
142                           sed -e 's;^.*Version[         ]*\([0-9]*\.[0-9]*[.ab][0-9]*\)[        ].*$;\1;'`
143             changequote([, ])dnl
144             _pth_found=yes
145             ac_configure_args="$ac_configure_args --enable-subdir $_pth_subdir_opts"
146             with_pth_test=no
147         fi
148         #   via config script under a specified directory
149         #   (a standard installation, but not a source tree)
150         if test ".$_pth_found" = .no; then
151             for _dir in $with_pth/bin $with_pth; do
152                 if test -f "$_dir/pth-config"; then
153                     test -f "$_dir/pth-config.in" && continue # pth-config in source tree!
154                     changequote(, )dnl
155                     _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
156                                   sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
157                     changequote([, ])dnl
158                     if test ".$_pth_version" != .; then
159                         _pth_location=`$_dir/pth-config --prefix`
160                         _pth_type="installed"
161                         _pth_cppflags=`$_dir/pth-config --cflags`
162                         _pth_cflags=`$_dir/pth-config --cflags`
163                         _pth_ldflags=`$_dir/pth-config --ldflags`
164                         _pth_libs=`$_dir/pth-config --libs --all`
165                         _pth_found=yes
166                         break
167                     fi
168                 fi
169             done
170         fi
171         #   in any subarea under a specified directory
172         #   (either a special installation or a Pth source tree)
173         if test ".$_pth_found" = .no; then
174             changequote(, )dnl
175             _pth_found=0
176             for _file in x `find $with_pth -name "pth.h" -type f -print`; do
177                 test .$_file = .x && continue
178                 _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
179                 _pth_version=`($_dir/pth-config --version) 2>/dev/null |\
180                               sed -e 's/^.*\([0-9]\.[0-9]*[ab.][0-9]*\).*$/\1/'`
181                 if test ".$_pth_version" = .; then
182                     _pth_version=`grep '^#define PTH_VERSION_STR' $_file |\
183                                   sed -e 's;^#define[   ]*PTH_VERSION_STR[      ]*"\([0-9]*\.[0-9]*[.ab][0-9]*\)[       ].*$;\1;'`
184                 fi
185                 _pth_cppflags="-I$_dir"
186                 _pth_cflags="-I$_dir"
187                 _pth_found=`expr $_pth_found + 1`
188             done
189             for _file in x `find $with_pth -name "libpth.[aso]" -type f -print`; do
190                 test .$_file = .x && continue
191                 _dir=`echo $_file | sed -e 's;[^/]*$;;' -e 's;\(.\)/$;\1;'`
192                 _pth_ldflags="-L$_dir"
193                 _pth_libs="-lpth"
194                 _pth_found=`expr $_pth_found + 1`
195             done
196             changequote([, ])dnl
197             if test ".$_pth_found" = .2; then
198                 _pth_location="$with_pth"
199                 _pth_type="uninstalled"
200             else
201                 _pth_version=''
202             fi
203         fi
204     fi
205     _AC_PTH_VERBOSE([+ Determined Location:])
206     _AC_PTH_VERBOSE([    o path: $_pth_location])
207     _AC_PTH_VERBOSE([    o type: $_pth_type])
208     if test ".$_pth_version" = .; then
209         if test ".$with_pth" != .yes; then
210              _AC_PTH_ERROR([dnl
211              Unable to locate GNU Pth under $with_pth.
212              Please specify the correct path to either a GNU Pth installation tree
213              (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
214              the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
215              path to a pth-X.Y.Z/ directory; but make sure the package is already
216              built, i.e., the "configure; make" step was already performed there).])
217         else
218              _AC_PTH_ERROR([dnl
219              Unable to locate GNU Pth in any system-wide location (see \$PATH).
220              Please specify the correct path to either a GNU Pth installation tree
221              (use --with-pth=DIR if you used --prefix=DIR for installing GNU Pth in
222              the past) or to a GNU Pth source tree (use --with-pth=DIR if DIR is a
223              path to a pth-X.Y.Z/ directory; but make sure the package is already
224              built, i.e., the "configure; make" step was already performed there).])
225         fi
226     fi
227     dnl #
228     dnl #  Check whether the found version is sufficiently new
229     dnl #
230     _req_version="ifelse([$1],,1.0.0,$1)"
231     for _var in _pth_version _req_version; do
232         eval "_val=\"\$${_var}\""
233         _major=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\1/'`
234         _minor=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\2/'`
235         _rtype=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\3/'`
236         _micro=`echo $_val | sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\([[ab.]]\)\([[0-9]]*\)/\4/'`
237         case $_rtype in
238             "a" ) _rtype=0 ;;
239             "b" ) _rtype=1 ;;
240             "." ) _rtype=2 ;;
241         esac
242         _hex=`echo dummy | awk '{ printf("%d%02d%1d%02d", major, minor, rtype, micro); }' \
243               "major=$_major" "minor=$_minor" "rtype=$_rtype" "micro=$_micro"`
244         eval "${_var}_hex=\"\$_hex\""
245     done
246     _AC_PTH_VERBOSE([+ Determined Versions:])
247     _AC_PTH_VERBOSE([    o existing: $_pth_version -> 0x$_pth_version_hex])
248     _AC_PTH_VERBOSE([    o required: $_req_version -> 0x$_req_version_hex])
249     _ok=0
250     if test ".$_pth_version_hex" != .; then
251         if test ".$_req_version_hex" != .; then
252             if test $_pth_version_hex -ge $_req_version_hex; then
253                 _ok=1
254             fi
255         fi
256     fi
257     if test ".$_ok" = .0; then
258         _AC_PTH_ERROR([dnl
259         Found Pth version $_pth_version, but required at least version $_req_version.
260         Upgrade Pth under $_pth_location to $_req_version or higher first, please.])
261     fi
262     dnl #
263     dnl #   Perform Pth Sanity Compile Check
264     dnl #
265     if test ".$with_pth_test" = .yes; then
266         _ac_save_CPPFLAGS="$CPPFLAGS"
267         _ac_save_CFLAGS="$CFLAGS"
268         _ac_save_LDFLAGS="$LDFLAGS"
269         _ac_save_LIBS="$LIBS"
270         CPPFLAGS="$CPPFLAGS $_pth_cppflags"
271         CFLAGS="$CFLAGS $_pth_cflags"
272         LDFLAGS="$LDFLAGS $_pth_ldflags"
273         LIBS="$LIBS $_pth_libs"
274         _AC_PTH_VERBOSE([+ Test Build Environment:])
275         _AC_PTH_VERBOSE([    o CPPFLAGS=\"$CPPFLAGS\"])
276         _AC_PTH_VERBOSE([    o CFLAGS=\"$CFLAGS\"])
277         _AC_PTH_VERBOSE([    o LDFLAGS=\"$LDFLAGS\"])
278         _AC_PTH_VERBOSE([    o LIBS=\"$LIBS\"])
279         cross_compile=no
280         m4_define(_code1, [dnl
281         #include <stdio.h>
282         #include <pth.h>
283         ])
284         m4_define(_code2, [dnl
285         int main(int argc, char *argv[])
286         {
287             FILE *fp;
288             if (!(fp = fopen("conftestval", "w")))
289                 exit(1);
290             fprintf(fp, "hmm");
291             fclose(fp);
292             pth_init();
293             pth_kill();
294             if (!(fp = fopen("conftestval", "w")))
295                 exit(1);
296             fprintf(fp, "yes");
297             fclose(fp);
298             exit(0);
299         }
300         ])
301         _AC_PTH_VERBOSE([+ Performing Sanity Checks:])
302         _AC_PTH_VERBOSE([    o pre-processor test])
303         AC_TRY_CPP(_code1, _ok=yes, _ok=no)
304         if test ".$_ok" != .yes; then
305             _AC_PTH_ERROR([dnl
306             Found GNU Pth $_pth_version under $_pth_location, but
307             was unable to perform a sanity pre-processor check. This means
308             the GNU Pth header pth.h was not found.
309             We used the following build environment:
310             >> CPP="$CPP"
311             >> CPPFLAGS="$CPPFLAGS"
312             See config.log for possibly more details.])
313         fi
314         _AC_PTH_VERBOSE([    o link check])
315         AC_TRY_LINK(_code1, _code2, _ok=yes, _ok=no)
316         if test ".$_ok" != .yes; then
317             _AC_PTH_ERROR([dnl
318             Found GNU Pth $_pth_version under $_pth_location, but
319             was unable to perform a sanity linker check. This means
320             the GNU Pth library libpth.a was not found.
321             We used the following build environment:
322             >> CC="$CC"
323             >> CFLAGS="$CFLAGS"
324             >> LDFLAGS="$LDFLAGS"
325             >> LIBS="$LIBS"
326             See config.log for possibly more details.])
327         fi
328         _AC_PTH_VERBOSE([    o run-time check])
329         AC_TRY_RUN(_code1 _code2, _ok=`cat conftestval`, _ok=no, _ok=no)
330         if test ".$_ok" != .yes; then
331             if test ".$_ok" = .no; then
332                 _AC_PTH_ERROR([dnl
333                 Found GNU Pth $_pth_version under $_pth_location, but
334                 was unable to perform a sanity execution check. This usually
335                 means that the GNU Pth shared library libpth.so is present
336                 but \$LD_LIBRARY_PATH is incomplete to execute a Pth test.
337                 In this case either disable this test via --without-pth-test,
338                 or extend \$LD_LIBRARY_PATH, or build GNU Pth as a static
339                 library only via its --disable-shared Autoconf option.
340                 We used the following build environment:
341                 >> CC="$CC"
342                 >> CFLAGS="$CFLAGS"
343                 >> LDFLAGS="$LDFLAGS"
344                 >> LIBS="$LIBS"
345                 See config.log for possibly more details.])
346             else
347                 _AC_PTH_ERROR([dnl
348                 Found GNU Pth $_pth_version under $_pth_location, but
349                 was unable to perform a sanity run-time check. This usually
350                 means that the GNU Pth library failed to work and possibly
351                 caused a core dump in the test program. In this case it
352                 is strongly recommended that you re-install GNU Pth and this
353                 time make sure that it really passes its "make test" procedure.
354                 We used the following build environment:
355                 >> CC="$CC"
356                 >> CFLAGS="$CFLAGS"
357                 >> LDFLAGS="$LDFLAGS"
358                 >> LIBS="$LIBS"
359                 See config.log for possibly more details.])
360             fi
361         fi
362         _extendvars="ifelse([$4],,yes,$4)"
363         if test ".$_extendvars" != .yes; then
364             CPPFLAGS="$_ac_save_CPPFLAGS"
365             CFLAGS="$_ac_save_CFLAGS"
366             LDFLAGS="$_ac_save_LDFLAGS"
367             LIBS="$_ac_save_LIBS"
368         fi
369     else
370         _extendvars="ifelse([$4],,yes,$4)"
371         if test ".$_extendvars" = .yes; then
372             if test ".$_pth_subdir" = .yes; then
373                 CPPFLAGS="$CPPFLAGS $_pth_cppflags"
374                 CFLAGS="$CFLAGS $_pth_cflags"
375                 LDFLAGS="$LDFLAGS $_pth_ldflags"
376                 LIBS="$LIBS $_pth_libs"
377             fi
378         fi
379     fi
380     PTH_CPPFLAGS="$_pth_cppflags"
381     PTH_CFLAGS="$_pth_cflags"
382     PTH_LDFLAGS="$_pth_ldflags"
383     PTH_LIBS="$_pth_libs"
384     AC_SUBST(PTH_CPPFLAGS)
385     AC_SUBST(PTH_CFLAGS)
386     AC_SUBST(PTH_LDFLAGS)
387     AC_SUBST(PTH_LIBS)
388     _AC_PTH_VERBOSE([+ Final Results:])
389     _AC_PTH_VERBOSE([    o PTH_CPPFLAGS=\"$PTH_CPPFLAGS\"])
390     _AC_PTH_VERBOSE([    o PTH_CFLAGS=\"$PTH_CFLAGS\"])
391     _AC_PTH_VERBOSE([    o PTH_LDFLAGS=\"$PTH_LDFLAGS\"])
392     _AC_PTH_VERBOSE([    o PTH_LIBS=\"$PTH_LIBS\"])
394 if test ".$with_pth" != .no; then
395     AC_MSG_RESULT([version $_pth_version, $_pth_type under $_pth_location])
396     ifelse([$5], , :, [$5])
397 else
398     AC_MSG_RESULT([no])
399     ifelse([$6], , :, [$6])