configure.ac 7.2 KB
Newer Older
Simon Marlow's avatar
Simon Marlow committed
1
AC_INIT([Haskell unix package], [2.0], [libraries@haskell.org], [unix])
2
AC_PREREQ([2.60])
ross's avatar
ross committed
3
4
5
6

# Safety check: Ensure that we are in the correct source directory.
AC_CONFIG_SRCDIR([include/HsUnix.h])

7
8
AC_USE_SYSTEM_EXTENSIONS

9
10
11
12
13
AC_ARG_WITH([cc],
            [C compiler],
            [CC=$withval])
AC_PROG_CC()

ross's avatar
ross committed
14
15
AC_CONFIG_HEADERS([include/HsUnixConfig.h])

ross's avatar
ross committed
16
# Is this a Unix system?
Ross Paterson's avatar
Ross Paterson committed
17
AC_CHECK_HEADER([dlfcn.h], [BUILD_PACKAGE_BOOL=True], [BUILD_PACKAGE_BOOL=False])
ross's avatar
ross committed
18
19
20
21
AC_SUBST([BUILD_PACKAGE_BOOL])

AC_C_CONST

22
23
dnl ** Enable large file support.  NB. do this before testing the type of
dnl    off_t, because it will affect the result of that test.
24
25
26
dnl
dnl WARNING: It's essential this check agrees with HsBaseConfig.h as otherwise
dnl          the definitions of COff/coff_t don't line up
27
28
AC_SYS_LARGEFILE

ross's avatar
ross committed
29
30
31
AC_CHECK_HEADERS([dirent.h fcntl.h grp.h limits.h pwd.h signal.h string.h])
AC_CHECK_HEADERS([sys/resource.h sys/stat.h sys/times.h sys/time.h])
AC_CHECK_HEADERS([sys/utsname.h sys/wait.h])
32
AC_CHECK_HEADERS([bsd/libutil.h libutil.h pty.h utmp.h])
ross's avatar
ross committed
33
34
35
AC_CHECK_HEADERS([termios.h time.h unistd.h utime.h])

AC_CHECK_FUNCS([getgrgid_r getgrnam_r getpwnam_r getpwuid_r getpwnam getpwuid])
36
AC_CHECK_FUNCS([getpwent getgrent])
37
AC_CHECK_FUNCS([lchown setenv sysconf unsetenv clearenv])
38
AC_CHECK_FUNCS([nanosleep])
bos's avatar
bos committed
39
AC_CHECK_FUNCS([ptsname])
40
AC_CHECK_FUNCS([setitimer])
41
AC_CHECK_FUNCS([readdir_r])
42
43
dnl not available on android so check for it
AC_CHECK_FUNCS([telldir seekdir])
44

45
46
47
dnl This is e.g. available as a GNU extension in glibc 2.11+
AC_CHECK_FUNCS([execvpe])

48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
AC_CHECK_MEMBERS([struct stat.st_atim])
AC_CHECK_MEMBERS([struct stat.st_mtim])
AC_CHECK_MEMBERS([struct stat.st_ctim])
AC_CHECK_MEMBERS([struct stat.st_atimespec])
AC_CHECK_MEMBERS([struct stat.st_mtimespec])
AC_CHECK_MEMBERS([struct stat.st_ctimespec])
AC_CHECK_MEMBERS([struct stat.st_atimensec])
AC_CHECK_MEMBERS([struct stat.st_mtimensec])
AC_CHECK_MEMBERS([struct stat.st_ctimensec])
AC_CHECK_MEMBERS([struct stat.st_atime_n])
AC_CHECK_MEMBERS([struct stat.st_mtime_n])
AC_CHECK_MEMBERS([struct stat.st_ctime_n])
AC_CHECK_MEMBERS([struct stat.st_uatime])
AC_CHECK_MEMBERS([struct stat.st_umtime])
AC_CHECK_MEMBERS([struct stat.st_uctime])

64
65
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>]])

66
67
68
69
# Functions for changing file timestamps
AC_CHECK_FUNCS([utimensat futimens])
AC_CHECK_FUNCS([lutimes futimes])

deian's avatar
deian committed
70
71
# Additional temp functions
AC_CHECK_FUNCS([mkstemps mkdtemp])
72
73

# Functions for file synchronization and allocation control
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
AC_CHECK_FUNCS([fsync])

# A more comprehensive check that fdatasync exits
# Necessary for platforms that have fdatasync in headers but have no
# implementation
dnl Originally provided by user copiousfreetime for the beanstalkd project
dnl {{{ make sure that fdatasync exits
AC_CACHE_CHECK([for fdatasync],[ac_cv_func_fdatasync],[
  AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
#include <unistd.h>
]],[[
fdatasync(4);
]])],
[ac_cv_func_fdatasync=yes],
[ac_cv_func_fdatasync=no])
])
AS_IF([test "x${ac_cv_func_fdatasync}" = "xyes"],
 [AC_DEFINE([HAVE_FDATASYNC],[1],[If the system defines fdatasync])])
dnl }}}

94
AC_CHECK_FUNCS([posix_fadvise posix_fallocate])
deian's avatar
deian committed
95

96
# Avoid adding rt if absent or unneeded
97
98
99
# shm_open needs -lrt on linux
AC_SEARCH_LIBS(shm_open, rt, [AC_CHECK_FUNCS([shm_open shm_unlink])])
AS_IF([test "x$ac_cv_search_shm_open" = x-lrt], [EXTRA_LIBS="$EXTRA_LIBS rt"])
100

101
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 SIGINFO SIGWINCH], [
102
103
104
105
#if HAVE_SIGNAL_H
#include <signal.h>
#endif])

ross's avatar
ross committed
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
AC_MSG_CHECKING([for _SC_GETGR_R_SIZE_MAX])
AC_EGREP_CPP(we_have_that_sysconf_thing,
[
#include <unistd.h>
#ifdef _SC_GETGR_R_SIZE_MAX
we_have_that_sysconf_thing
#endif
],
[AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_SC_GETGR_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETGR_R_SIZE_MAX.])],
[AC_MSG_RESULT([no])])

AC_MSG_CHECKING([for _SC_GETPW_R_SIZE_MAX])
AC_EGREP_CPP(we_have_that_sysconf_thing,
[
#include <unistd.h>
#ifdef _SC_GETPW_R_SIZE_MAX
we_have_that_sysconf_thing
#endif
],
[AC_MSG_RESULT([yes])
AC_DEFINE([HAVE_SC_GETPW_R_SIZE_MAX], [1], [Define to 1 if <unistd.h> defines _SC_GETPW_R_SIZE_MAX.])],
[AC_MSG_RESULT([no])])

130
131
132
133
134
dnl ---------- usleep ----------
dnl --- stolen from guile configure ---

### On some systems usleep has no return value.  If it does have one,
### we'd like to return it; otherwise, we'll fake it.
135
AC_CACHE_CHECK([return type of usleep], fptools_cv_func_usleep_return_type,
136
  [AC_EGREP_HEADER(changequote(<, >)<void[      ]+usleep>changequote([, ]),
137
                   unistd.h,
138
139
140
                   [fptools_cv_func_usleep_return_type=void],
                   [fptools_cv_func_usleep_return_type=int])])
case "$fptools_cv_func_usleep_return_type" in
141
142
143
144
145
  "void" )
    AC_DEFINE([USLEEP_RETURNS_VOID], [1], [Define if the system headers declare usleep to return void.])
  ;;
esac

146
147
###  POSIX.1003.1 unsetenv returns 0 or -1 (EINVAL), but older implementations
###  in common use return void.
148
AC_CACHE_CHECK([return type of unsetenv], fptools_cv_func_unsetenv_return_type,
149
  [AC_EGREP_HEADER(changequote(<, >)<void[      ]+unsetenv>changequote([, ]),
150
                   stdlib.h,
151
152
153
                   [fptools_cv_func_unsetenv_return_type=void],
                   [fptools_cv_func_unsetenv_return_type=int])])
case "$fptools_cv_func_unsetenv_return_type" in
154
155
156
157
158
  "void" )
    AC_DEFINE([UNSETENV_RETURNS_VOID], [1], [Define if stdlib.h declares unsetenv to return void.])
  ;;
esac

159
160
161
dnl On some hosts (e.g. SuSe and Ubuntu Linux) RTLD_NEXT and RTLD_DEFAULT are
dnl not visible without setting _GNU_SOURCE, which we really don't want to.
dnl Also see comments in System/Posix/DynamicLinker/Prim.hsc.
ross's avatar
ross committed
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
AC_MSG_CHECKING(for RTLD_NEXT from dlfcn.h)
AC_EGREP_CPP(yes,
[
 #include <dlfcn.h>
 #ifdef RTLD_NEXT
        yes
 #endif
], [
  AC_MSG_RESULT(yes)
  AC_DEFINE([HAVE_RTLDNEXT], [1], [Define to 1 if we can see RTLD_NEXT in dlfcn.h.])
], [
  AC_MSG_RESULT(no)
  ])    

AC_MSG_CHECKING(for RTLD_DEFAULT from dlfcn.h)
AC_EGREP_CPP(yes,
[
 #include <dlfcn.h>
 #ifdef RTLD_DEFAULT
        yes
 #endif
], [
  AC_MSG_RESULT(yes)
  AC_DEFINE([HAVE_RTLDDEFAULT], [1], [Define to 1 if RTLD_DEFAULT is available.])
], [
  AC_MSG_RESULT(no)
  ])    

bos's avatar
bos committed
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
AC_CHECK_FUNCS(openpty,,
   AC_CHECK_LIB(util,openpty,
     [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS util"],
     AC_CHECK_LIB(bsd,openpty, [AC_DEFINE(HAVE_OPENPTY) EXTRA_LIBS="$EXTRA_LIBS bsd"])
   )
)

AC_MSG_CHECKING(for /dev/ptmx)
if test -r /dev/ptmx
then
  AC_MSG_RESULT(yes)
  AC_DEFINE(HAVE_DEV_PTMX, 1,
  [Define if we have /dev/ptmx.])
else
  AC_MSG_RESULT(no)
fi

AC_MSG_CHECKING(for /dev/ptc)
if test -r /dev/ptc
then
  AC_MSG_RESULT(yes)
  AC_DEFINE(HAVE_DEV_PTC, 1,
  [Define if we have /dev/ptc.])
else
  AC_MSG_RESULT(no)
fi

ross's avatar
ross committed
217
# Avoid adding dl if absent or unneeded
218
AC_SEARCH_LIBS([dlopen], [dl], [EXTRA_LIBS="$EXTRA_LIBS $ac_lib"])
ross's avatar
ross committed
219

kili's avatar
kili committed
220
221
222
# -{l,}pthread goo
AC_CANONICAL_TARGET

223
224
225
AC_SEARCH_LIBS(sem_close, pthread,
    [EXTRA_LIBS="$EXTRA_LIBS $ac_lib"],
    [AC_MSG_NOTICE([Not found])])
kili's avatar
kili committed
226

227
AC_SUBST([EXTRA_LIBS])
ross's avatar
ross committed
228
229
AC_CONFIG_FILES([unix.buildinfo])

ross's avatar
ross committed
230
AC_OUTPUT