joe-3.1jupp31.tgz (die zweite Klappeā€¦)
[alioth/jupp.git] / acinclude.m4
1 dnl $MirOS: contrib/code/jupp/acinclude.m4,v 1.3 2008/05/13 13:08:20 tg Exp $
2 dnl
3 dnl ------------------
4 dnl Check for properly working isblank()
5 dnl ------------------
6 AC_DEFUN([joe_ISBLANK],
7         [AC_CACHE_CHECK([whether isblank() works correctly with side effect expressions],
8                 [joe_cv_isblank],
9                 [AC_TRY_RUN([
10 #include <ctype.h>
11 int main() {
12   int a = 0;
13   isblank(a++);
14   exit(a != 1);
15 }
16                         ],
17                         [joe_cv_isblank=yes],
18                         [joe_cv_isblank=no],
19                         [joe_cv_isblank=no])
20                 ])
21         if test "$joe_cv_isblank" = yes; then
22                 AC_DEFINE([HAVE_WORKING_ISBLANK], 1, [Define if isblank() works with expressions with side effects])
23         fi
24 ])
25
26 dnl ------------------
27 dnl Check if setpgrp must have two arguments
28 dnl autoconf-own macro is damaged for *BSD systems
29 dnl ------------------
30 AC_DEFUN([joe_SETPGRP],
31         [AC_CACHE_CHECK([whether setpgrp() takes no arguments],
32                 [joe_cv_setpgrp_void],
33                 [AC_TRY_RUN([
34 #if HAVE_UNISTD_H
35 #include <unistd.h>
36 #endif
37 int main() {
38         /* exit succesfully if setpgrp() takes two args (*BSD systems) */
39         exit(setpgrp(0, 0) != 0);
40 }],
41                         [joe_cv_setpgrp_void=no],
42                         [joe_cv_setpgrp_void=yes],
43                         [joe_cv_setpgrp_void=yes])
44                 ])
45         if test "$joe_cv_setpgrp_void" = yes; then
46                 AC_DEFINE([SETPGRP_VOID], 1, [Define if setpgrp() takes no arguments])
47         fi
48 ])
49
50 dnl ------------------
51 dnl Check to see if signal handlers must be reinstalled when invoked
52 dnl ------------------
53 AC_DEFUN([joe_REINSTALL_SIGHANDLERS],
54         [AC_CACHE_CHECK([whether sighandlers must be reinstalled],
55                 [joe_cv_reinstall_sighandlers],
56                 [AC_TRY_RUN([
57 #if HAVE_UNISTD_H
58 #include <unistd.h>
59 #endif
60 #if HAVE_SIGNAL_H
61 #include <signal.h>
62 #endif
63
64 #ifndef HAVE_SIGHANDLER_T
65 typedef RETSIGTYPE (*sighandler_t)(int);
66 #endif
67
68 int nsigint;
69
70 void set_signal(int signum, sighandler_t handler) {
71 #if HAVE_SIGACTION
72         struct sigaction sact;
73
74         sact.sa_handler = handler;
75         sact.sa_flags = 0;
76         sigemptyset(&sact.sa_mask);
77         sigaction(signum, &sact, NULL);
78 #elif HAVE_SIGVEC
79         struct sigvec svec;
80
81         svec.sv_handler = handler;
82         svec.sv_flags = 0;
83         sigemptyset(&svec.sv_mask);
84         sigvec(signum, &svec, NULL);
85 #else
86         signal(signum, handler);
87 #endif
88 }
89
90 RETSIGTYPE sigint(int s) {
91         nsigint++;
92 }
93
94 int main() {
95         nsigint = 0;
96         set_signal(SIGINT, sigint);
97         kill((int)getpid(), SIGINT);
98         kill((int)getpid(), SIGINT);
99         /* exit succesfully if don't have to reinstall sighandler when invoked */
100         exit(nsigint != 2);
101 }],
102                         [joe_cv_reinstall_sighandlers=no],
103                         [joe_cv_reinstall_sighandlers=yes],
104                         [joe_cv_reinstall_sighandlers=yes])
105                 ])
106         if test "$joe_cv_reinstall_sighandlers" = yes; then
107                 AC_DEFINE([NEED_TO_REINSTALL_SIGNAL], 1, [Define if we have to reinstall signal handler when invoked])
108         fi
109 ])