Wrap posix_fadvise(2) and posix_fallocate(2)
[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 dnl
22 dnl WARNING: It's essential this check agrees with HsBaseConfig.h as otherwise
23 dnl          the definitions of COff/coff_t don't line up
24 AC_SYS_LARGEFILE
25
26 AC_CHECK_HEADERS([dirent.h fcntl.h grp.h limits.h pwd.h signal.h string.h])
27 AC_CHECK_HEADERS([sys/resource.h sys/stat.h sys/times.h sys/time.h])
28 AC_CHECK_HEADERS([sys/utsname.h sys/wait.h])
29 AC_CHECK_HEADERS([bsd/libutil.h libutil.h pty.h utmp.h])
30 AC_CHECK_HEADERS([termios.h time.h unistd.h utime.h])
31
32 AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r getpwnam getpwuid])
33 AC_CHECK_FUNCS([getpwent getgrent])
34 AC_CHECK_FUNCS([lchown setenv sysconf unsetenv clearenv])
35 AC_CHECK_FUNCS([nanosleep])
36 AC_CHECK_FUNCS([ptsname])
37 AC_CHECK_FUNCS([setitimer])
38 AC_CHECK_FUNCS([readdir_r])
39 dnl not available on android so check for it
40 AC_CHECK_FUNCS([telldir seekdir])
41
42 dnl This is e.g. available as a GNU extension in glibc 2.11+
43 AC_CHECK_FUNCS([execvpe])
44
45 AC_CHECK_MEMBERS([struct stat.st_atim])
46 AC_CHECK_MEMBERS([struct stat.st_mtim])
47 AC_CHECK_MEMBERS([struct stat.st_ctim])
48 AC_CHECK_MEMBERS([struct stat.st_atimespec])
49 AC_CHECK_MEMBERS([struct stat.st_mtimespec])
50 AC_CHECK_MEMBERS([struct stat.st_ctimespec])
51 AC_CHECK_MEMBERS([struct stat.st_atimensec])
52 AC_CHECK_MEMBERS([struct stat.st_mtimensec])
53 AC_CHECK_MEMBERS([struct stat.st_ctimensec])
54 AC_CHECK_MEMBERS([struct stat.st_atime_n])
55 AC_CHECK_MEMBERS([struct stat.st_mtime_n])
56 AC_CHECK_MEMBERS([struct stat.st_ctime_n])
57 AC_CHECK_MEMBERS([struct stat.st_uatime])
58 AC_CHECK_MEMBERS([struct stat.st_umtime])
59 AC_CHECK_MEMBERS([struct stat.st_uctime])
60
61 AC_CHECK_MEMBER([struct passwd.pw_gecos], [], [AC_DEFINE([HAVE_NO_PASSWD_PW_GECOS],[],[Ignore the pw_gecos member of passwd where it does not exist])], [[#include <pwd.h>]])
62
63 # Functions for changing file timestamps
64 AC_CHECK_FUNCS([utimensat futimens])
65 AC_CHECK_FUNCS([lutimes futimes])
66
67 # Additional temp functions
68 AC_CHECK_FUNCS([mkstemps mkdtemp])
69
70 # Functions for file synchronization and allocation control
71 AC_CHECK_FUNCS([fsync fdatasync])
72 AC_CHECK_FUNCS([posix_fadvise posix_fallocate])
73
74 # Avoid adding rt if absent or unneeded
75 # shm_open needs -lrt on linux
76 AC_SEARCH_LIBS(shm_open, rt, [AC_CHECK_FUNCS([shm_open shm_unlink])])
77 AS_IF([test "x$ac_cv_search_shm_open" = x-lrt], [EXTRA_LIBS="$EXTRA_LIBS rt"])
78
79 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], [
80 #if HAVE_SIGNAL_H
81 #include <signal.h>
82 #endif])
83
84 AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
85 AC_EGREP_CPP(we_have_that_sysconf_thing,
86 [
87 #include <unistd.h>
88 #ifdef _SC_GETGR_R_SIZE_MAX
89 we_have_that_sysconf_thing
90 #endif
91 ],
92 [AC_MSG_RESULT([yes])
93 AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
94 [AC_MSG_RESULT([no])])
95
96 AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
97 AC_EGREP_CPP(we_have_that_sysconf_thing,
98 [
99 #include <unistd.h>
100 #ifdef _SC_GETPW_R_SIZE_MAX
101 we_have_that_sysconf_thing
102 #endif
103 ],
104 [AC_MSG_RESULT([yes])
105 AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
106 [AC_MSG_RESULT([no])])
107
108 dnl ---------- usleep ----------
109 dnl --- stolen from guile configure ---
110
111 ### On some systems usleep has no return value.  If it does have one,
112 ### we'd like to return it; otherwise, we'll fake it.
113 AC_CACHE_CHECK([return type of usleep], fptools_cv_func_usleep_return_type,
114   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
115                    unistd.h,
116                    [fptools_cv_func_usleep_return_type=void],
117                    [fptools_cv_func_usleep_return_type=int])])
118 case "$fptools_cv_func_usleep_return_type" in
119   "void" )
120     AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
121   ;;
122 esac
123
124 ###  POSIX.1003.1 unsetenv returns 0 or -1 (EINVAL), but older implementations
125 ###  in common use return void.
126 AC_CACHE_CHECK([return type of unsetenv], fptools_cv_func_unsetenv_return_type,
127   [AC_EGREP_HEADER(changequote(<, >)<void[      ]+unsetenv>changequote([, ]),
128                    stdlib.h,
129                    [fptools_cv_func_unsetenv_return_type=void],
130                    [fptools_cv_func_unsetenv_return_type=int])])
131 case "$fptools_cv_func_unsetenv_return_type" in
132   "void" )
133     AC_DEFINE([UNSETENV_RETURNS_VOID], [1], [Define if stdlib.h declares unsetenv to return void.])
134   ;;
135 esac
136
137 dnl On some hosts (e.g. SuSe and Ubuntu Linux) RTLD_NEXT and RTLD_DEFAULT are
138 dnl not visible without setting _GNU_SOURCE, which we really don't want to.
139 dnl Also see comments in System/Posix/DynamicLinker/Prim.hsc.
140 AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
141 AC_EGREP_CPP(yes,
142 [
143  #include <dlfcn.h>
144  #ifdef RTLD_NEXT
145         yes
146  #endif
147 ], [
148   AC_MSG_RESULT(yes)
149   AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
150 ], [
151   AC_MSG_RESULT(no)
152   ])    
153
154 AC_MSG_CHECKING(for RTLD_DEFAULT from dlfcn.h)
155 AC_EGREP_CPP(yes,
156 [
157  #include <dlfcn.h>
158  #ifdef RTLD_DEFAULT
159         yes
160  #endif
161 ], [
162   AC_MSG_RESULT(yes)
163   AC_DEFINE([HAVE_RTLDDEFAULT], [1], [Define to 1 if RTLD_DEFAULT is available.])
164 ], [
165   AC_MSG_RESULT(no)
166   ])    
167
168 AC_CHECK_FUNCS(openpty,,
169    AC_CHECK_LIB(util,openpty,
170      [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS util"],
171      AC_CHECK_LIB(bsd,openpty, [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS bsd"])
172    )
173 )
174
175 AC_MSG_CHECKING(for /dev/ptmx)
176 if test -r /dev/ptmx
177 then
178   AC_MSG_RESULT(yes)
179   AC_DEFINE(HAVE_DEV_PTMX, 1,
180   [Define if we have /dev/ptmx.])
181 else
182   AC_MSG_RESULT(no)
183 fi
184
185 AC_MSG_CHECKING(for /dev/ptc)
186 if test -r /dev/ptc
187 then
188   AC_MSG_RESULT(yes)
189   AC_DEFINE(HAVE_DEV_PTC, 1,
190   [Define if we have /dev/ptc.])
191 else
192   AC_MSG_RESULT(no)
193 fi
194
195 # Avoid adding dl if absent or unneeded
196 AC_SEARCH_LIBS([dlopen], [dl], [EXTRA_LIBS="$EXTRA_LIBS $ac_lib"])
197
198 # -{l,}pthread goo
199 AC_CANONICAL_TARGET
200
201 AC_SEARCH_LIBS(sem_close, pthread,
202     [EXTRA_LIBS="$EXTRA_LIBS $ac_lib"],
203     [AC_MSG_NOTICE([Not found])])
204
205 AC_SUBST([EXTRA_LIBS])
206 AC_CONFIG_FILES([unix.buildinfo])
207
208 AC_OUTPUT