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