/[path-sandbox]/trunk/configure.ac
Gentoo

Diff of /trunk/configure.ac

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

trunk/configure.in Revision 53 trunk/configure.ac Revision 412
1AC_PREREQ(2.59) 1AC_PREREQ([2.61])
2AC_INIT(sandbox, 1.2.2, dev-portage@gentoo.org) 2AC_INIT([sandbox], [1.3.0], [sandbox@gentoo.org])
3AM_INIT_AUTOMAKE 3AM_INIT_AUTOMAKE
4AC_CONFIG_HEADER([config.h]) 4AC_CONFIG_HEADER([config.h])
5 5
6# Checks for programs. 6dnl Checks for programs.
7AC_PROG_CC 7AC_PROG_CC
8AM_PROG_CC_C_O
8AC_ISC_POSIX 9AC_ISC_POSIX
9AC_PROG_INSTALL 10AC_PROG_INSTALL
10AC_PROG_MAKE_SET 11AC_PROG_MAKE_SET
11AC_PROG_AWK 12AC_PROG_AWK
13AC_CHECK_PROGS([READELF], [readelf eu-readelf], [false])
14AM_MISSING_PROG([AUTOM4TE], [autom4te])
12 15
13AC_ENABLE_SHARED 16AC_ENABLE_SHARED
14AC_DISABLE_STATIC 17AC_DISABLE_STATIC
18dnl Next four lines is a hack to prevent libtool checking for CXX/F77
19m4_undefine([AC_PROG_CXX])
20m4_defun([AC_PROG_CXX],[])
21m4_undefine([AC_PROG_F77])
22m4_defun([AC_PROG_F77],[])
15AC_PROG_LIBTOOL 23AC_PROG_LIBTOOL
16 24
17AC_PREFIX_DEFAULT([/usr]) 25AC_PREFIX_DEFAULT([/usr])
18 26
19# Checks for libraries. 27dnl Checks for libraries.
20# Checks for header files. 28dnl Checks for header files.
21AC_FUNC_ALLOCA 29AC_FUNC_ALLOCA
22AC_HEADER_DIRENT 30AC_HEADER_DIRENT
23AC_HEADER_STDC 31AC_HEADER_STDC
24AC_HEADER_SYS_WAIT 32AC_HEADER_SYS_WAIT
25AC_CHECK_HEADERS([ \ 33AC_CHECK_HEADERS_ONCE([ \
26fcntl.h limits.h memory.h stddef.h \ 34 dirent.h \
27stdlib.h string.h strings.h sys/file.h \ 35 dlfcn.h \
28sys/param.h sys/time.h unistd.h utime.h \ 36 elf.h \
37 errno.h \
38 execinfo.h \
39 fcntl.h \
40 libgen.h \
41 limits.h \
42 memory.h \
43 signal.h \
44 stdarg.h \
45 stdbool.h \
46 stddef.h \
47 stdio.h \
48 stdlib.h \
49 string.h \
50 strings.h \
51 syscall.h \
52 unistd.h \
53 utime.h \
54 sys/file.h \
55 sys/mman.h \
56 sys/param.h \
57 sys/stat.h \
58 sys/time.h \
59 sys/types.h \
60 sys/wait.h \
29]) 61])
30 62
31# Checks for typedefs, structures, and compiler characteristics. 63dnl Checks for typedefs, structures, and compiler characteristics.
32AC_C_CONST 64AC_C_CONST
33AC_TYPE_UID_T 65AC_TYPE_UID_T
34AC_TYPE_MODE_T 66AC_TYPE_MODE_T
35AC_TYPE_SIZE_T 67AC_TYPE_SIZE_T
36AC_CHECK_TYPES([ptrdiff_t]) 68AC_CHECK_TYPES([ptrdiff_t])
37 69
38# Checks for library functions. 70dnl Checks for library functions.
39AC_FUNC_CHOWN 71AC_FUNC_CHOWN
40AC_FUNC_FORK 72AC_FUNC_FORK
41AC_FUNC_LSTAT 73AC_FUNC_LSTAT
42AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK 74AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK
43AC_FUNC_MALLOC
44AC_FUNC_REALLOC
45AC_TYPE_SIGNAL 75AC_TYPE_SIGNAL
46AC_FUNC_STAT 76AC_FUNC_STAT
47AC_CHECK_FUNCS([ \ 77AC_CHECK_FUNCS_ONCE([ \
48bzero ftruncate getcwd lchown memmove \ 78 backtrace \
49mempcpy memset mkdir pathconf realpath \ 79 ftruncate \
50rmdir setenv strcasecmp strchr strdup \ 80 getcwd \
51strerror strndup strrchr strspn strstr \ 81 lchown \
82 memmove \
83 memcpy \
84 memset \
85 mkdir \
86 pathconf \
87 realpath \
88 rmdir \
89 setenv \
90 strcasecmp \
91 strchr \
92 strdup \
93 strerror \
94 strndup \
95 strrchr \
96 strspn \
97 strstr \
98 strtok_r \
52]) 99])
100dnl For librcutil
101AC_CHECK_FUNCS([remove])
102
103dnl Check if gcc provides va_copy or __va_copy (for librcutil)
104AC_MSG_CHECKING([for va_copy])
105AC_TRY_COMPILE([
106 #include <stdarg.h>
107 ], [
108 va_list ap, aq;
109 va_copy(ap, aq);
110 ],
111 [va_copy="va_copy"],
112 [AC_TRY_COMPILE([
113 #include <stdarg.h>
114 ], [
115 va_list ap, aq;
116 __va_copy(ap, aq);
117 ],
118 [va_copy="__va_copy"],
119 [AC_MSG_ERROR([Unable to determine name of va_copy macro])]
120 )]
121)
122AC_MSG_RESULT([$va_copy])
123if test x"$va_copy" != xva_copy ; then
124 AC_DEFINE_UNQUOTED([va_copy], [$va_copy],
125 [Define to name of va_copy macro proviced by gcc if its not `va_copy'.]
126 )
127fi
128
129dnl Verify people aren't doing stupid shit
130if test x"$enable_static" != xno ; then
131 AC_MSG_ERROR([dont be a Kumba, building a libsandbox.a is stupid])
132fi
133if test x"$enable_shared" != xyes ; then
134 AC_MSG_ERROR([dont be a Kumba, omitting a libsandbox.so is stupid])
135fi
136if echo $CFLAGS | $EGREP -e -static >/dev/null 2>&1; then
137 AC_MSG_ERROR([dont be a Kumba, using -static in CFLAGS is stupid])
138fi
139if echo $LDFLAGS | $EGREP -e -static >/dev/null 2>&1; then
140 AC_MSG_ERROR([dont be a Kumba, using -static in LDFLAGS is stupid])
141fi
142
143dnl Some libc's like those on bsd have dlopen() in libc, and not libdl
144AC_CHECK_LIB([dl], [dlopen],
145 [have_libdl="yes"],
146 [have_libdl="no"]
147)
148if test x"$have_libdl" = xyes ; then
149 LIBDL="-ldl"
150 AC_SUBST([LIBDL])
151 DL_LIB="dl"
152else
153 DL_LIB="c"
154 AC_CHECK_LIB([c], [dlopen],
155 [],
156 [AC_MSG_ERROR([Unable to determine library providing dlopen])]
157 )
158fi
159
160dnl uClibc doesn't currently provide dlvsym() so lets
161dnl verify the toolchain supports it
162AC_CHECK_LIB([$DL_LIB], [dlvsym],
163 [AC_DEFINE([HAVE_DLVSYM], [1], [libdl supports dlvsym])],
164 [AC_DEFINE([HAVE_DLVSYM], [0], [libdl does not support dlvsym])]
165)
53 166
54dnl when using libc5, (f)trucate's offset argument type is size_t with 167dnl when using libc5, (f)trucate's offset argument type is size_t with
55dnl libc5, but it's off_t with libc6 (glibc2). 168dnl libc5, but it's off_t with libc6 (glibc2).
56AC_MSG_CHECKING(truncate argument type) 169AC_MSG_CHECKING([truncate argument type])
57if echo '#include <unistd.h>' | $CC -E - | grep -q 'truncate.*size_t' ; then 170TRUNC_ARG_TYPE=`echo '#include <unistd.h>' | $CC -E - | grep -q 'truncate.*size_t'`
171if test "$TRUNC_ARG_TYPE"x != x ; then
58 AC_MSG_RESULT(size_t) 172 AC_MSG_RESULT([size_t])
59 AC_DEFINE(TRUNCATE_T, size_t, [truncate arg type]) 173 AC_DEFINE([TRUNCATE_T], [size_t], [truncate arg type])
60else 174else
61 AC_MSG_RESULT(off_t) 175 AC_MSG_RESULT([off_t])
62 AC_DEFINE(TRUNCATE_T, off_t, [truncate arg type]) 176 AC_DEFINE([TRUNCATE_T], [off_t], [truncate arg type])
177fi
178
179dnl Check if libc provides RTLD_NEXT
180AC_MSG_CHECKING([for RTLD_NEXT])
181AC_TRY_COMPILE([
182 #define _GNU_SOURCE
183 #include <dlfcn.h>
184 ], [
185 #if !defined(RTLD_NEXT)
186 # error no RTLD_NEXT
187 #endif
188 ],
189 [have_rtld_next="yes"],
190 [have_rtld_next="no"]
191)
192AC_MSG_RESULT([$have_rtld_next])
193if test x"$have_rtld_next" = xyes ; then
194 CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
195 AC_DEFINE([HAVE_RTLD_NEXT], [1], [Have RTLD_NEXT enabled libc])
63fi 196fi
64 197
65dnl we need to handle symbols differently based upon their version, 198dnl we need to handle symbols differently based upon their version,
66dnl but we have to know which symbols the libc supports first 199dnl but we have to know which symbols the libc supports first
67AC_MSG_CHECKING(libc path) 200AC_MSG_CHECKING([libc path])
68echo "int main(void) { return 0; }" > libctest.c 201echo "int main(void) { return 0; }" > libctest.c
69$CC -Wall -o libctest libctest.c 202$CC $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-verbose -o libctest libctest.c > libctest.log 2>&1
70LIBC_PATH=`$CC $CFLAGS -Wl,-verbose -o libctest libctest.c 2>&1 | \ 203cat libctest.log 1>&AS_MESSAGE_LOG_FD
204LIBC_PATH=$(
71 gawk '/attempt to open/ { if (($4 ~ /libc\.so/) && ($5 == "succeeded")) LIBC = $4; }; END {print LIBC}'` 205 $AWK '/attempt to open/ { if (($4 ~ /\/libc\.so/) && ($5 == "succeeded")) LIBC = $4; }; END {print LIBC}' libctest.log
72if test "$LIBC_PATH"x = x ; then 206)
207rm -f libctest*
208if test x"$LIBC_PATH" = x || ! test -r "$LIBC_PATH" ; then
73 AC_MSG_ERROR(Unable to determine LIBC PATH) 209 AC_MSG_ERROR([Unable to determine LIBC PATH ($LIBC_PATH)])
74fi 210fi
75AC_MSG_RESULT($LIBC_PATH) 211AC_MSG_RESULT([$LIBC_PATH])
76AC_SUBST(LIBC_PATH) 212AC_SUBST([LIBC_PATH])
77 213
78dnl when intercepting libc calls, we have to know the name of the 214dnl when intercepting libc calls, we have to know the name of the
79dnl libc to load and search with dl*() calls 215dnl libc to load and search with dl*() calls
80AC_MSG_CHECKING(libc version) 216AC_MSG_CHECKING([libc version])
81dnl the sed script at the end here looks funny but it's ok ... 217dnl the sed script at the end here looks funny but it's ok ...
82dnl they're m4 escape sequences for left and right brackets 218echo "int main(void) { return 0; }" > libctest.c
83LIBC_VERSION=`readelf -d libctest | grep NEEDED.*libc\\.so | $AWK '{print $NF}' | sed -e 's:\@<:@::' -e 's:\@:>@::'` 219$CC $CFLAGS $CPPFLAGS $LDFLAGS -Wall -o libctest libctest.c
220LIBC_VERSION=$(
221 $READELF -d libctest | \
222 grep NEEDED.*libc\\.so | \
223 $AWK '{print $NF}' | sed -e ['s:\[::' -e 's:\]::']
224)
225rm -f libctest*
84if test "$LIBC_VERSION"x = x ; then 226if test "$LIBC_VERSION"x = x ; then
85 AC_MSG_ERROR(Unable to determine LIBC VERSION) 227 AC_MSG_ERROR([Unable to determine LIBC VERSION])
86fi 228fi
87AC_MSG_RESULT($LIBC_VERSION) 229AC_MSG_RESULT([$LIBC_VERSION])
88AC_DEFINE_UNQUOTED(LIBC_VERSION, "$LIBC_VERSION", [name of libc to hook into]) 230AC_DEFINE_UNQUOTED([LIBC_VERSION], ["$LIBC_VERSION"], [Name of libc to hook into])
89rm -f libctest
90 231
91AC_OUTPUT([Makefile]) 232dnl We add to CPPFLAGS rather than doing AC_DEFINE_UNQUOTED
233dnl so we dont have to worry about fully expanding all of
234dnl the variables ($sysconfdir defaults to "$prefix/etc")
235SANDBOX_DEFINES='-DETCDIR="\"$(sysconfdir)\"" -DLIBSANDBOX_PATH="\"$(libdir)\"" -DSANDBOX_BASHRC_PATH="\"$(pkgdatadir)\""'
236AC_SUBST([SANDBOX_DEFINES])
237
238CPPFLAGS="$CPPFLAGS -D_REENTRANT"
239if test "$GCC" = yes; then
240 CFLAGS="$CFLAGS -Wall"
241fi
242
243AC_CONFIG_TESTDIR([tests])
244
245AC_OUTPUT([
246 Makefile
247 scripts/Makefile
248 etc/Makefile
249 data/Makefile
250 libsbutil/Makefile
251 libsandbox/Makefile
252 src/Makefile
253 tests/atlocal
254 tests/Makefile
255 tests/package.m4
256])

Legend:
Removed from v.53  
changed lines
  Added in v.412

  ViewVC Help
Powered by ViewVC 1.1.20