add fdReadBuf, fdWriteBuf
[packages/unix.git] / configure.ac
1 AC_INIT([Haskell unix package], [2.0], [libraries@haskell.org], [unix])
2
3 # Safety check: Ensure that we are in the correct source directory.
4 AC_CONFIG_SRCDIR([include/HsUnix.h])
5
6 AC_CONFIG_HEADERS([include/HsUnixConfig.h])
7
8 # Is this a Unix system?
9 AC_CHECK_HEADER([dlfcn.h], [BUILD_PACKAGE_BOOL=True], [BUILD_PACKAGE_BOOL=False])
10 AC_SUBST([BUILD_PACKAGE_BOOL])
11
12 AC_C_CONST
13
14 dnl ** Enable large file support.  NB. do this before testing the type of
15 dnl    off_t, because it will affect the result of that test.
16 AC_SYS_LARGEFILE
17
18 AC_CHECK_HEADERS([dirent.h fcntl.h grp.h limits.h pwd.h signal.h string.h])
19 AC_CHECK_HEADERS([sys/resource.h sys/stat.h sys/times.h sys/time.h])
20 AC_CHECK_HEADERS([sys/utsname.h sys/wait.h])
21 AC_CHECK_HEADERS([libutil.h pty.h utmp.h])
22 AC_CHECK_HEADERS([termios.h time.h unistd.h utime.h])
23
24 AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r getpwnam getpwuid])
25 AC_CHECK_FUNCS([getpwent getgrent])
26 AC_CHECK_FUNCS([lchown setenv sysconf unsetenv])
27 AC_CHECK_FUNCS([nanosleep])
28 AC_CHECK_FUNCS([ptsname])
29 AC_CHECK_FUNCS([setitimer])
30
31 # Avoid adding rt if absent or unneeded
32 AC_CHECK_LIB(rt, shm_open, [EXTRA_LIBS="$EXTRA_LIBS rt" CFLAGS="$CFLAGS -lrt"])
33
34 # needs -lrt on linux
35 AC_CHECK_FUNCS([shm_open shm_unlink])
36
37 FP_CHECK_CONSTS([SIGABRT SIGALRM SIGBUS SIGCHLD SIGCONT SIGFPE SIGHUP SIGILL SIGINT SIGKILL SIGPIPE SIGQUIT SIGSEGV SIGSTOP SIGTERM SIGTSTP SIGTTIN SIGTTOU SIGUSR1 SIGUSR2 SIGPOLL SIGPROF SIGSYS SIGTRAP SIGURG SIGVTALRM SIGXCPU SIGXFSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK], [
38 #if HAVE_SIGNAL_H
39 #include <signal.h>
40 #endif])
41
42 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
43 AC_EGREP_CPP(we_have_that_sysconf_thing,
44 [
45 #include <unistd.h>
46 #ifdef _SC_GETGR_R_SIZE_MAX
47 we_have_that_sysconf_thing
48 #endif
49 ],
50 [AC_MSG_RESULT([yes])
51 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
52 [AC_MSG_RESULT([no])])
53
54 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
55 AC_EGREP_CPP(we_have_that_sysconf_thing,
56 [
57 #include <unistd.h>
58 #ifdef _SC_GETPW_R_SIZE_MAX
59 we_have_that_sysconf_thing
60 #endif
61 ],
62 [AC_MSG_RESULT([yes])
63 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
64 [AC_MSG_RESULT([no])])
65
66 dnl ---------- usleep ----------
67 dnl --- stolen from guile configure ---
68 dnl --- FIXME: /usr/include/unistd.h can't be right?
69
70 ### On some systems usleep has no return value.  If it does have one,
71 ### we'd like to return it; otherwise, we'll fake it.
72 AC_CACHE_CHECK([return type of usleep], cv_func_usleep_return_type,
73   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
74                    /usr/include/unistd.h,
75                    [cv_func_usleep_return_type=void],
76                    [cv_func_usleep_return_type=int])])
77 case "$cv_func_usleep_return_type" in
78   "void" )
79     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
80   ;;
81 esac
82
83 ###  POSIX.1003.1 unsetenv returns 0 or -1 (EINVAL), but older implementations
84 ###  in common use return void.
85 AC_CACHE_CHECK([return type of unsetenv], cv_func_unsetenv_return_type,
86   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+unsetenv>changequote([, ]),
87                    /usr/include/stdlib.h,
88                    [cv_func_unsetenv_return_type=void],
89                    [cv_func_unsetenv_return_type=int])])
90 case "$cv_func_unsetenv_return_type" in
91   "void" )
92     AC_DEFINE([UNSETENV_RETURNS_VOID], [1], [Define if stdlib.h declares unsetenv to return void.])
93   ;;
94 esac
95
96 dnl ** sometimes RTLD_NEXT is hidden in #ifdefs we really don't wan to set
97 AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
98 AC_EGREP_CPP(yes,
99 [
100  #include <dlfcn.h>
101  #ifdef RTLD_NEXT
102         yes
103  #endif
104 ], [
105   AC_MSG_RESULT(yes)
106   AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
107 ], [
108   AC_MSG_RESULT(no)
109   ])    
110
111 dnl ** RTLD_DEFAULT isn't available on cygwin
112 AC_MSG_CHECKING(for RTLD_DEFAULT from dlfcn.h)
113 AC_EGREP_CPP(yes,
114 [
115  #include <dlfcn.h>
116  #ifdef RTLD_DEFAULT
117         yes
118  #endif
119 ], [
120   AC_MSG_RESULT(yes)
121   AC_DEFINE([HAVE_RTLDDEFAULT], [1], [Define to 1 if RTLD_DEFAULT is available.])
122 ], [
123   AC_MSG_RESULT(no)
124   ])    
125
126 dnl ** RTLD_LOCAL isn't available on cygwin or openbsd
127 AC_MSG_CHECKING(for RTLD_LOCAL from dlfcn.h)
128 AC_EGREP_CPP(yes,
129 [
130  #include <dlfcn.h>
131  #ifdef RTLD_LOCAL
132         yes
133  #endif
134 ], [
135   AC_MSG_RESULT(yes)
136   AC_DEFINE([HAVE_RTLDLOCAL], [1], [Define to 1 if RTLD_LOCAL is available.])
137 ], [
138   AC_MSG_RESULT(no)
139   ])    
140
141 dnl ** RTLD_GLOBAL isn't available on openbsd
142 AC_MSG_CHECKING(for RTLD_GLOBAL from dlfcn.h)
143 AC_EGREP_CPP(yes,
144 [
145  #include <dlfcn.h>
146  #ifdef RTLD_GLOBAL
147         yes
148  #endif
149 ], [
150   AC_MSG_RESULT(yes)
151   AC_DEFINE([HAVE_RTLDGLOBAL], [1], [Define to 1 if RTLD_GLOBAL is available.])
152 ], [
153   AC_MSG_RESULT(no)
154   ])    
155
156 dnl ** RTLD_NOW isn't available on openbsd
157 AC_MSG_CHECKING(for RTLD_NOW from dlfcn.h)
158 AC_EGREP_CPP(yes,
159 [
160  #include <dlfcn.h>
161  #ifdef RTLD_NOW
162         yes
163  #endif
164 ], [
165   AC_MSG_RESULT(yes)
166   AC_DEFINE([HAVE_RTLDNOW], [1], [Define to 1 if we can see RTLD_NOW in dlfcn.h])
167 ], [
168   AC_MSG_RESULT(no)
169   ])    
170
171 AC_CHECK_FUNCS(openpty,,
172    AC_CHECK_LIB(util,openpty,
173      [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS util"],
174      AC_CHECK_LIB(bsd,openpty, [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS bsd"])
175    )
176 )
177
178 AC_MSG_CHECKING(for /dev/ptmx)
179 if test -r /dev/ptmx
180 then
181   AC_MSG_RESULT(yes)
182   AC_DEFINE(HAVE_DEV_PTMX, 1,
183   [Define if we have /dev/ptmx.])
184 else
185   AC_MSG_RESULT(no)
186 fi
187
188 AC_MSG_CHECKING(for /dev/ptc)
189 if test -r /dev/ptc
190 then
191   AC_MSG_RESULT(yes)
192   AC_DEFINE(HAVE_DEV_PTC, 1,
193   [Define if we have /dev/ptc.])
194 else
195   AC_MSG_RESULT(no)
196 fi
197
198 # Avoid adding dl if absent or unneeded
199 AC_CHECK_LIB(dl, dlopen, [EXTRA_LIBS="$EXTRA_LIBS dl"])
200 AC_SUBST([EXTRA_LIBS])
201
202 # -{l,}pthread goo
203 AC_CANONICAL_TARGET
204
205 PTHREAD_CFLAGS=
206 PTHREAD_LDFLAGS=
207 PTHREAD_LIBS=
208 case "$host_os" in
209 openbsd*)
210         PTHREAD_CFLAGS=-pthread
211         PTHREAD_LDFLAGS=-pthread
212         ;;
213 esac
214 AC_SUBST(PTHREAD_CFLAGS)
215 AC_SUBST(PTHREAD_LDFLAGS)
216 AC_SUBST(PTHREAD_LIBS)
217
218 AC_CONFIG_FILES([unix.buildinfo])
219
220 AC_OUTPUT