1 dnl sxe-libc.m4 -- libc stuff
3 dnl Copyright (C) 2005, 2006, 2007, 2008 Sebastian Freundt
5 dnl Author: Sebastian Freundt <hroptatyr@sxemacs.org>
7 dnl Redistribution and use in source and binary forms, with or without
8 dnl modification, are permitted provided that the following conditions
11 dnl 1. Redistributions of source code must retain the above copyright
12 dnl notice, this list of conditions and the following disclaimer.
14 dnl 2. Redistributions in binary form must reproduce the above copyright
15 dnl notice, this list of conditions and the following disclaimer in the
16 dnl documentation and/or other materials provided with the distribution.
18 dnl 3. Neither the name of the author nor the names of any contributors
19 dnl may be used to endorse or promote products derived from this
20 dnl software without specific prior written permission.
22 dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
23 dnl IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
24 dnl WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
25 dnl DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
26 dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 dnl CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 dnl SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
29 dnl BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
30 dnl WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
31 dnl OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
32 dnl IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34 dnl This file is part of SXEmacs.
36 AC_DEFUN([SXE_CHECK_LIBC], [dnl
37 dnl We want feature macros defined here *and* in config.h.in, so that
38 dnl the compilation environment at configure time and compile time agree.
40 AC_MSG_CHECKING([for GNU libc])
41 AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <features.h>]],[[
42 #if ! (defined __GLIBC__ || defined __GNU_LIBRARY__)
43 #error Not a GNU libc system :-(
44 ******* ======= ******** &&&&&&&&
46 ]])], [have_glibc=yes], [have_glibc=no])
47 AC_MSG_RESULT($have_glibc)
49 dnl I'm tired of pop being broken with GLIBC -slb
50 dnl Well. then why not fix fucking pop?
51 if test "$have_glibc" = "yes"; then
52 AC_DEFINE([_GNU_SOURCE], [1],
53 [Enable GNU extensions on systems that have them.])
54 AH_VERBATIM([_ALL_SOURCE], [dnl
57 # define _ALL_SOURCE 1
60 AH_VERBATIM([_POSIX_PTHREAD_SEMANTICS], [dnl
62 #ifndef _POSIX_PTHREAD_SEMANTICS
63 # define _POSIX_PTHREAD_SEMANTICS 1
66 AH_VERBATIM([_TANDEM_SOURCE], [dnl
68 #ifndef _TANDEM_SOURCE
69 # define _TANDEM_SOURCE 1
73 if test "0" = "1"; then
74 AC_DEFINE([_ALL_SOURCE], [], [Description])
75 AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [], [Description])
76 AC_DEFINE([_TANDEM_SOURCE], [], [Description])
79 dnl We'd like to use vendor extensions, where available.
80 dnl We'd like to use functions from the latest Unix98 standards.
81 dnl See http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html
84 AC_DEFINE([__EXTENSIONS__], [1], [Description here!])
85 dnl Solaris 2 before 2.5 had some bugs with feature
86 dnl test macro interaction.
87 if test "$os_release" -ge 510; then
88 AC_DEFINE([_POSIX_C_SOURCE], [200112L], [Description here!])
89 dnl #### should this be 600?
90 AC_DEFINE([_XOPEN_SOURCE], [600], [Description here!])
91 elif test "$os_release" -ge 506; then
92 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
93 dnl #### should this be 600?
94 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
95 elif test "$os_release" -ge 505; then
96 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
97 AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Description here!])
102 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
103 dnl #### should this be 600?
104 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
105 AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Description here!])
109 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
110 dnl #### Do we want these too? Apparently yes for _XOPEN_SOURCE=500.
111 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
112 dnl AC_DEFINE(_XOPEN_SOURCE_EXTENDED)
119 AC_DEFUN([SXE_CHECK_LIBC_VERSION], [dnl
121 AC_MSG_CHECKING(for standard C library version information)
123 case "$ac_cv_build" in
125 dnl #### who would ever _not_ be running the distro's libc?
126 dnl Whose silly question is this? -hroptatyr
127 dnl Maybe it would be better to get/augment this info with ldd?
128 if test -f /etc/redhat-release ; then
129 libc_version=`rpm -q glibc`
130 elif test -f /etc/debian_version ; then
131 libc_version=`dpkg-query --showformat='${version}' --show libc6`
132 libc_version="GNU libc $libc_version (Debian)"
133 elif test -f /etc/slackware-version ; then
134 slackver=`cat /etc/slackware-version`
135 libc_version=`/lib/libc.so.6|head -1|cut -d ' ' -f7|tr -d ,`
136 if test "x$libc_version" = "x"; then
137 libc_version=`/lib64/libc.so.6|head -1|cut -d ' ' -f7|tr -d ,`
139 libc_version="GNU libc $libc_version ($slackver)"
140 dnl need SuSE et al checks here...
142 dnl #### Tested on Debian, does this actually work elsewhere? ;-)
143 dnl #### NO! -hroptatyr
144 dnl if test -z "$libc_version"; then
145 dnl libc_version=`ls /lib/libc-*.so | sed -e 's,/lib/libc-\(.*\)\.so,\1,'`
148 if test -z "$libc_version"; then
149 AC_RUN_IFELSE([AC_LANG_SOURCE([[
150 int main() { return 0; }]])], [dnl
151 libc_file_we_use=`$LDD ./conftest | grep libc | sed -e "s/.*=>\(.*\) .*$/\1/"`],
152 [],[libc_file_we_use=])
153 libc_version=`$libc_file_we_use 2>/dev/null | sed "/version/q" | tr -cd "0-9.()"`
158 libc_version="bos.rte.libc `lslpp -Lqc bos.rte.libc | cut -f3 -d:`"
162 libc=`pkginfo -l SUNWcsl | grep VERSION: | awk '{print $2}'`
163 libc_version="SUNWcsl $libc"
167 libc_version="IRIX libc `uname -sRm`"
171 dnl Another ugly case
173 libc_version=` grep -h libc.so *.inv | awk '$9 == "f" {print $12}' | tr '\n' ','`
178 dnl MacOS guys, does this work?
179 libc_version="`$LDD /usr/lib/libc.dylib | head -n1 | sed -e 's/.*current version[ ]*\([0-9.]*\).*$/\1/'`"
187 AC_MSG_RESULT($libc_version)
190 if test -z "libc_version"; then
191 libc_version="detection failed (please report this)"
193 ])dnl SXE_CHECK_LIBC_VERSION
195 AC_DEFUN([SXE_CHECK_BASIC_HEADERS], [dnl
200 ## check for stdbool, but turn off warnings before
202 SXE_LANG_WERROR([off])
206 SXE_CHECK_HEADERS([stddef.h stdlib.h string.h wchar.h])
207 SXE_CHECK_HEADERS([fcntl.h float.h inttypes.h limits.h locale.h mach/mach.h malloc.h memory.h unistd.h ulimit.h])
208 SXE_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/param.h sys/pstat.h sys/resource.h sys/vlimit.h])
209 SXE_CHECK_HEADERS([a.out.h elf.h])
210 SXE_CHECK_HEADERS([ctype.h errno.h])
211 SXE_CHECK_HEADERS([getopt.h])
213 ## just to be ubersure
214 unset ac_cv_header_stdbool_h
215 SXE_CHECK_HEADERS([stdbool.h])
216 ])dnl SXE_CHECK_BASIC_HEADERS
219 AC_DEFUN([SXE_CHECK_BASIC_TYPES], [dnl
220 pushdef([INC_STDBOOL_H], [
221 #if defined HAVE_STDBOOL_H
222 # include <stdbool.h>
226 ## checks for typedefs
233 ## next one is obsolete, it is safe to assume that RETSIGTYPE
234 ## is always `void' these days
245 AC_CHECK_TYPES([wchar_t])
246 AC_CHECK_TYPE([bool], [], [], INC_STDBOOL_H)
247 AC_CHECK_TYPES([long long int])
248 AC_CHECK_TYPES([longopts])
250 dnl We immediately jump off the cliff when using a cross compiler
252 AC_CHECK_SIZEOF([char], [0])
253 AC_CHECK_SIZEOF([short], [0])
254 AC_CHECK_SIZEOF([int], [0])
255 AC_CHECK_SIZEOF([long], [0])
256 AC_CHECK_SIZEOF([long long int], [0])
257 AC_CHECK_SIZEOF([wchar_t], [0])
258 AC_CHECK_SIZEOF([void *], [0])
259 AC_CHECK_SIZEOF([double], [0])
260 AC_CHECK_SIZEOF([long double], [0])
261 AC_CHECK_SIZEOF([size_t], [0])
262 AC_CHECK_SIZEOF([char *], [0])
263 AC_CHECK_SIZEOF([bool], [0], INC_STDBOOL_H)
266 ## if test "$ac_cv_sizeof_short" = 0; then
268 ## echo "*** PANIC *** Configure tests are not working - compiler is broken."
269 ## echo "*** PANIC *** Please examine config.log for compilation errors."
273 ## treat RETSIGTYPE specially since we've kicked the detection
275 AC_DEFINE([RETSIGTYPE], [void], [Return type of signal handler funs])
277 popdef([INC_STDBOOL_H])
278 ])dnl SXE_CHECK_BASIC_TYPES
281 AC_DEFUN([_SXE_CHECK_CTYPE_H_FUN], [dnl
284 pushdef([INC_CTYPE_H], [
294 ## now as they are usually in ctype.h, check there
295 if test "$ac_cv_func_[]FUN[]" != "yes"; then
296 unset ac_cv_func_[]FUN[]
297 AC_CHECK_FUNCS(FUN, [], [], INC_CTYPE_H)
299 ## just to define them symbols
302 if test "$ac_cv_have_decl_[]FUN[]" != "yes"; then
303 unset ac_cv_have_decl_[]FUN[]
304 AC_CHECK_DECLS(FUN, [], [], INC_CTYPE_H)
306 ## just to define them symbols
311 popdef([INC_CTYPE_H])
312 ])dnl _SXE_CHECK_CTYPE_H_FUN
314 AC_DEFUN([_SXE_CHECK_CTYPE_H_FUNS], [dnl
315 ## arg #1 are the funs, space separated
316 m4_foreach([_FUN], [$1], [_SXE_CHECK_CTYPE_H_FUN(_FUN)])
317 ])dnl _SXE_CHECK_CTYPE_H_FUNS
319 AC_DEFUN([SXE_CHECK_BASIC_FUNS], [dnl
320 ## turn off that Werror thing
321 SXE_LANG_WERROR([push+off])
323 AC_CHECK_FUNCS([strdup strcat strncat strcmp strncmp strcpy strncpy])
324 AC_CHECK_DECLS([strdup, strcat, strncat, strcmp, strncmp, strcpy, strncpy])
325 AC_CHECK_FUNCS([strlen stpcpy stpncpy])
326 AC_CHECK_DECLS([strlen, stpcpy, stpncpy])
327 AC_CHECK_FUNCS([malloc realloc calloc free])
328 AC_CHECK_DECLS([malloc, realloc, calloc, free])
329 AC_CHECK_FUNCS([getopt getopt_long])
330 AC_CHECK_DECLS([getopt, getopt_long])
332 _SXE_CHECK_CTYPE_H_FUNS([isalnum, isalpha, isascii, isdigit])
333 _SXE_CHECK_CTYPE_H_FUNS([isblank, isspace, ispunct, isgraph])
334 _SXE_CHECK_CTYPE_H_FUNS([islower, isupper, isxdigit])
335 _SXE_CHECK_CTYPE_H_FUNS([iscntrl, isprint])
336 ])dnl SXE_CHECK_BASIC_FUNS
339 AC_DEFUN([SXE_CHECK_SIGNALS], [dnl
340 SXE_CHECK_HEADERS([string.h])
341 AC_CHECK_FUNCS([strsignal])
342 AC_CHECK_DECLS([sys_siglist], [], [], [
344 /* NetBSD declares sys_siglist in unistd.h. */
349 AC_CHECK_DECLS([sys_siglist])
350 ])dnl SXE_CHECK_SIGNALS
352 AC_DEFUN([SXE_CHECK_INTPTR_T], [dnl
353 dnl not AC_CHECK_TYPE; lisp.h does hairy conditional typedef
354 dnl why not? let's test it...
355 SXE_CHECK_HEADERS([inttypes.h])
356 AC_CHECK_TYPE([intptr_t], [], [], [
357 #if defined HAVE_SYS_TYPES_H
358 # include <sys/types.h>
361 if test "$ac_cv_type_intptr_t" = "yes"; then
362 AC_DEFINE([HAVE_INTPTR_T_IN_SYS_TYPES_H], [1], [Description here!])
365 dnl if test "$ac_cv_header_inttypes_h" != "yes"; then
366 dnl AC_MSG_CHECKING([for intptr_t in sys/types.h])
367 dnl AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
368 dnl #include <sys/types.h>
372 dnl AC_MSG_RESULT(yes)
373 dnl AC_DEFINE([HAVE_INTPTR_T_IN_SYS_TYPES_H], [1],
374 dnl [Description here!])
376 dnl AC_MSG_RESULT(no)])
378 ])dnl SXE_CHECK_INTPTR_T
380 dnl sxe-libc.m4 ends here