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

Diff of /trunk/configure.ac

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

Revision 232 Revision 356
1AC_PREREQ([2.59]) 1AC_PREREQ([2.59])
2AC_INIT([sandbox], [1.2.17], [sandbox@gentoo.org]) 2AC_INIT([sandbox], [1.2.20alpha2], [sandbox@gentoo.org])
3AM_INIT_AUTOMAKE 3AM_INIT_AUTOMAKE
4AC_CONFIG_HEADER([config.h]) 4AC_CONFIG_HEADER([config.h])
5 5
6dnl Checks for programs. 6dnl Checks for programs.
7AC_PROG_CC 7AC_PROG_CC
8AC_ISC_POSIX 8AC_ISC_POSIX
9AC_PROG_INSTALL 9AC_PROG_INSTALL
10AC_PROG_MAKE_SET 10AC_PROG_MAKE_SET
11AC_PROG_AWK 11AC_PROG_AWK
12AC_CHECK_PROGS([READELF], [readelf], [false]) 12AC_CHECK_PROGS([READELF], [readelf eu-readelf], [false])
13 13
14AC_ENABLE_SHARED 14AC_ENABLE_SHARED
15AC_DISABLE_STATIC 15AC_DISABLE_STATIC
16dnl Next four lines is a hack to prevent libtool checking for CXX/F77 16dnl Next four lines is a hack to prevent libtool checking for CXX/F77
17m4_undefine([AC_PROG_CXX]) 17m4_undefine([AC_PROG_CXX])
51AC_CHECK_FUNCS([ \ 51AC_CHECK_FUNCS([ \
52 bzero ftruncate getcwd lchown memmove \ 52 bzero ftruncate getcwd lchown memmove \
53 memcpy memset mkdir pathconf realpath \ 53 memcpy memset mkdir pathconf realpath \
54 rmdir setenv strcasecmp strchr strdup \ 54 rmdir setenv strcasecmp strchr strdup \
55 strerror strndup strrchr strspn strstr \ 55 strerror strndup strrchr strspn strstr \
56 strtok_r \
56]) 57])
58dnl For librcutil
59AC_CHECK_FUNCS([remove])
60
61dnl Check if gcc provides va_copy or __va_copy (for librcutil)
62AC_MSG_CHECKING([for va_copy])
63AC_TRY_COMPILE([
64 #include <stdarg.h>
65 ], [
66 va_list ap, aq;
67 va_copy(ap, aq);
68 ],
69 [va_copy="va_copy"],
70 [AC_TRY_COMPILE([
71 #include <stdarg.h>
72 ], [
73 va_list ap, aq;
74 __va_copy(ap, aq);
75 ],
76 [va_copy="__va_copy"],
77 [AC_MSG_ERROR([Unable to determine name of va_copy macro])]
78 )]
79)
80AC_MSG_RESULT([$va_copy])
81if test x"$va_copy" != xva_copy ; then
82 AC_DEFINE_UNQUOTED([va_copy], [$va_copy],
83 [Define to name of va_copy macro proviced by gcc if its not `va_copy'.]
84 )
85fi
86
87dnl Verify people aren't doing stupid shit
88if test x"$enable_static" != xno ; then
89 AC_MSG_ERROR([dont be a Kumba, building a libsandbox.a is stupid])
90fi
91if test x"$enable_shared" != xyes ; then
92 AC_MSG_ERROR([dont be a Kumba, omitting a libsandbox.so is stupid])
93fi
94if echo $CFLAGS | $EGREP -e -static >/dev/null 2>&1; then
95 AC_MSG_ERROR([dont be a Kumba, using -static in CFLAGS is stupid])
96fi
97if echo $LDFLAGS | $EGREP -e -static >/dev/null 2>&1; then
98 AC_MSG_ERROR([dont be a Kumba, using -static in LDFLAGS is stupid])
99fi
57 100
58dnl Some libc's like those on bsd have dlopen() in libc, and not libdl 101dnl Some libc's like those on bsd have dlopen() in libc, and not libdl
59AC_CHECK_LIB([dl], [dlopen], 102AC_CHECK_LIB([dl], [dlopen],
60 [have_libdl="yes"], 103 [have_libdl="yes"],
61 [have_libdl="no"] 104 [have_libdl="no"]
62) 105)
63if test x"$have_libdl" = xyes ; then 106if test x"$have_libdl" = xyes ; then
64 LIBDL="-ldl" 107 LIBDL="-ldl"
65 AC_SUBST([LIBDL]) 108 AC_SUBST([LIBDL])
66 DL_LIB="dl" 109 DL_LIB="dl"
67else 110else
68 DL_LIB="c" 111 DL_LIB="c"
69 AC_CHECK_LIB([c], [dlopen], 112 AC_CHECK_LIB([c], [dlopen],
70 [], 113 [],
71 [AC_MSG_ERROR([Unable to determine library providing dlopen])] 114 [AC_MSG_ERROR([Unable to determine library providing dlopen])]
72 ) 115 )
73fi 116fi
74 117
75dnl uClibc doesn't currently provide dlvsym() so lets 118dnl uClibc doesn't currently provide dlvsym() so lets
76dnl verify the toolchain supports it 119dnl verify the toolchain supports it
77AC_CHECK_LIB([$DL_LIB], [dlvsym], 120AC_CHECK_LIB([$DL_LIB], [dlvsym],
78 [AC_DEFINE([HAVE_DLVSYM], [1], [libdl supports dlvsym])], 121 [AC_DEFINE([HAVE_DLVSYM], [1], [libdl supports dlvsym])],
79 [AC_DEFINE([HAVE_DLVSYM], [0], [libdl does not support dlvsym])] 122 [AC_DEFINE([HAVE_DLVSYM], [0], [libdl does not support dlvsym])]
80) 123)
81 124
82dnl when using libc5, (f)trucate's offset argument type is size_t with 125dnl when using libc5, (f)trucate's offset argument type is size_t with
83dnl libc5, but it's off_t with libc6 (glibc2). 126dnl libc5, but it's off_t with libc6 (glibc2).
84AC_MSG_CHECKING([truncate argument type]) 127AC_MSG_CHECKING([truncate argument type])
85TRUNC_ARG_TYPE=`echo '#include <unistd.h>' | $CC -E - | grep -q 'truncate.*size_t'` 128TRUNC_ARG_TYPE=`echo '#include <unistd.h>' | $CC -E - | grep -q 'truncate.*size_t'`
86if test "$TRUNC_ARG_TYPE"x != x ; then 129if test "$TRUNC_ARG_TYPE"x != x ; then
87 AC_MSG_RESULT([size_t]) 130 AC_MSG_RESULT([size_t])
88 AC_DEFINE([TRUNCATE_T], [size_t], [truncate arg type]) 131 AC_DEFINE([TRUNCATE_T], [size_t], [truncate arg type])
89else 132else
90 AC_MSG_RESULT([off_t]) 133 AC_MSG_RESULT([off_t])
91 AC_DEFINE([TRUNCATE_T], [off_t], [truncate arg type]) 134 AC_DEFINE([TRUNCATE_T], [off_t], [truncate arg type])
92fi 135fi
93 136
94dnl Check if libc provides RTLD_NEXT 137dnl Check if libc provides RTLD_NEXT
95AC_MSG_CHECKING([for RTLD_NEXT]) 138AC_MSG_CHECKING([for RTLD_NEXT])
96AC_TRY_COMPILE([ 139AC_TRY_COMPILE([
97#define _GNU_SOURCE 140 #define _GNU_SOURCE
98#include <dlfcn.h> 141 #include <dlfcn.h>
99], [ 142 ], [
100#if !defined(RTLD_NEXT) 143 #if !defined(RTLD_NEXT)
101# error no RTLD_NEXT 144 # error no RTLD_NEXT
102#endif 145 #endif
103 146 ],
104int
105main (void)
106{
107 return 0;
108}
109],
110 [have_rtld_next="yes"], 147 [have_rtld_next="yes"],
111 [have_rtld_next="no"] 148 [have_rtld_next="no"]
112) 149)
113AC_MSG_RESULT([$have_rtld_next]) 150AC_MSG_RESULT([$have_rtld_next])
114AM_CONDITIONAL([HAVE_RTLD_NEXT], [test x"$have_rtld_next" = xyes]) 151if test x"$have_rtld_next" = xyes ; then
152 AC_DEFINE([HAVE_RTLD_NEXT], [1], [Have RTLD_NEXT enabled libc])
153fi
115 154
116dnl we need to handle symbols differently based upon their version, 155dnl we need to handle symbols differently based upon their version,
117dnl but we have to know which symbols the libc supports first 156dnl but we have to know which symbols the libc supports first
118AC_MSG_CHECKING([libc path]) 157AC_MSG_CHECKING([libc path])
119echo "int main(void) { return 0; }" > libctest.c 158echo "int main(void) { return 0; }" > libctest.c
120$CC -Wall -o libctest libctest.c 159$CC $CFLAGS $CPPFLAGS $LDFLAGS -Wl,-verbose -o libctest libctest.c > libctest.log 2>&1
121LIBC_PATH=`$CC $CFLAGS -Wl,-verbose -o libctest libctest.c 2>&1 | \ 160cat libctest.log 1>&AS_MESSAGE_LOG_FD
161LIBC_PATH=$(
122 $AWK '/attempt to open/ { if (($4 ~ /\/libc\.so/) && ($5 == "succeeded")) LIBC = $4; }; END {print LIBC}'` 162 $AWK '/attempt to open/ { if (($4 ~ /\/libc\.so/) && ($5 == "succeeded")) LIBC = $4; }; END {print LIBC}' libctest.log
163)
123rm -f libctest.c 164rm -f libctest*
124if test "$LIBC_PATH"x = x || ! test -r "$LIBC_PATH"; then 165if test x"$LIBC_PATH" = x || ! test -r "$LIBC_PATH" ; then
125 AC_MSG_ERROR([Unable to determine LIBC PATH]) 166 AC_MSG_ERROR([Unable to determine LIBC PATH ($LIBC_PATH)])
126fi 167fi
127AC_MSG_RESULT([$LIBC_PATH]) 168AC_MSG_RESULT([$LIBC_PATH])
128AC_SUBST([LIBC_PATH]) 169AC_SUBST([LIBC_PATH])
129 170
130dnl when intercepting libc calls, we have to know the name of the 171dnl when intercepting libc calls, we have to know the name of the
131dnl libc to load and search with dl*() calls 172dnl libc to load and search with dl*() calls
132AC_MSG_CHECKING([libc version]) 173AC_MSG_CHECKING([libc version])
133dnl the sed script at the end here looks funny but it's ok ... 174dnl the sed script at the end here looks funny but it's ok ...
134dnl they're m4 escape sequences for left and right brackets 175echo "int main(void) { return 0; }" > libctest.c
135LIBC_VERSION=`readelf -d libctest | grep NEEDED.*libc\\.so | $AWK '{print $NF}' | sed -e 's:\@<:@::' -e 's:\@:>@::'` 176$CC $CFLAGS $CPPFLAGS $LDFLAGS -Wall -o libctest libctest.c
177LIBC_VERSION=$(
178 $READELF -d libctest | \
179 grep NEEDED.*libc\\.so | \
180 $AWK '{print $NF}' | sed -e ['s:\[::' -e 's:\]::']
181)
182rm -f libctest*
136if test "$LIBC_VERSION"x = x ; then 183if test "$LIBC_VERSION"x = x ; then
137 AC_MSG_ERROR([Unable to determine LIBC VERSION]) 184 AC_MSG_ERROR([Unable to determine LIBC VERSION])
138fi 185fi
139rm -f libctest
140AC_MSG_RESULT([$LIBC_VERSION]) 186AC_MSG_RESULT([$LIBC_VERSION])
141AC_DEFINE_UNQUOTED([LIBC_VERSION], ["$LIBC_VERSION"], [name of libc to hook into]) 187AC_DEFINE_UNQUOTED([LIBC_VERSION], ["$LIBC_VERSION"], [Name of libc to hook into])
142 188
143dnl check if we have 32bit or 64bit output 189dnl We add to CPPFLAGS rather than doing AC_DEFINE_UNQUOTED
144AC_ARG_ENABLE([multilib], 190dnl so we dont have to worry about fully expanding all of
145 AS_HELP_STRING([--enable-multilib], 191dnl the variables ($sysconfdir defaults to "$prefix/etc")
146 [enable building for multilib setups (default=disabled)]), 192SANDBOX_DEFINES='-DETCDIR="\"$(sysconfdir)\"" -DLIBSANDBOX_PATH="\"$(libdir)\"" -DSANDBOX_BASHRC_PATH="\"$(pkgdatadir)\""'
147 [enable_multilib="$enableval"], 193AC_SUBST([SANDBOX_DEFINES])
148 [enable_multilib="no"]
149)
150
151if test x"$enable_multilib" != xno ; then
152 AC_DEFINE_UNQUOTED([SB_HAVE_MULTILIB], [1], [have multilib enabled system])
153fi
154 194
155AC_OUTPUT([ 195AC_OUTPUT([
156 Makefile 196 Makefile
157 scripts/Makefile 197 scripts/Makefile
198 etc/Makefile
158 data/Makefile 199 data/Makefile
200 libsbutil/Makefile
201 libsandbox/Makefile
159 src/Makefile 202 src/Makefile
160]) 203])

Legend:
Removed from v.232  
changed lines
  Added in v.356

  ViewVC Help
Powered by ViewVC 1.1.20