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 AC_DEFINE([HAVE_GLIBC], [1], [Define if libc is glibc])
55 AH_VERBATIM([_ALL_SOURCE], [dnl
58 # define _ALL_SOURCE 1
61 AH_VERBATIM([_POSIX_PTHREAD_SEMANTICS], [dnl
63 #ifndef _POSIX_PTHREAD_SEMANTICS
64 # define _POSIX_PTHREAD_SEMANTICS 1
67 AH_VERBATIM([_TANDEM_SOURCE], [dnl
69 #ifndef _TANDEM_SOURCE
70 # define _TANDEM_SOURCE 1
74 if test "0" = "1"; then
75 AC_DEFINE([_ALL_SOURCE], [], [Description])
76 AC_DEFINE([_POSIX_PTHREAD_SEMANTICS], [], [Description])
77 AC_DEFINE([_TANDEM_SOURCE], [], [Description])
80 dnl We'd like to use vendor extensions, where available.
81 dnl We'd like to use functions from the latest Unix98 standards.
82 dnl See http://www.opengroup.org/onlinepubs/007908799/xsh/compilation.html
85 AC_DEFINE([__EXTENSIONS__], [1], [Description here!])
86 dnl Solaris 2 before 2.5 had some bugs with feature
87 dnl test macro interaction.
88 if test "$os_release" -ge 510; then
89 AC_DEFINE([_POSIX_C_SOURCE], [200112L], [Description here!])
90 dnl #### should this be 600?
91 AC_DEFINE([_XOPEN_SOURCE], [600], [Description here!])
92 elif test "$os_release" -ge 506; then
93 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
94 dnl #### should this be 600?
95 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
96 elif test "$os_release" -ge 505; then
97 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
98 AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Description here!])
103 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
104 dnl #### should this be 600?
105 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
106 AC_DEFINE([_XOPEN_SOURCE_EXTENDED], [1], [Description here!])
110 AC_DEFINE([_POSIX_C_SOURCE], [199506L], [Description here!])
111 dnl #### Do we want these too? Apparently yes for _XOPEN_SOURCE=500.
112 AC_DEFINE([_XOPEN_SOURCE], [500], [Description here!])
113 dnl AC_DEFINE(_XOPEN_SOURCE_EXTENDED)
120 AC_DEFUN([SXE_CHECK_LIBC_VERSION], [dnl
122 AC_MSG_CHECKING(for standard C library version information)
124 if test "$have_glibc" = "yes"; then
125 AC_RUN_IFELSE([AC_LANG_SOURCE([[
127 #include <gnu/libc-version.h>
128 int main(void) { puts (gnu_get_libc_version()); return 0; }]])], [dnl
129 libc_version=`./conftest`], [libc_version=""],
130 [AC_MSG_WARN([Cross-compiling? Good luck. Let us know how it goes.])])
131 if test -f /etc/os-release; then
132 source /etc/os-release
133 libc_version="GNU libc $libc_version (${PRETTY_NAME})"
135 libc_version="GNU libc $libc_version (Unknown OS)"
139 dnl Amazingly some people don't run Linux, or so I'm told. --SY
140 if test -z "$libc_version"; then
141 case "$ac_cv_build" in
143 libc_version="bos.rte.libc `lslpp -Lqc bos.rte.libc | cut -f3 -d:`"
147 libc=`pkginfo -l SUNWcsl | grep VERSION: | awk '{print $2}'`
148 libc_version="SUNWcsl $libc"
152 libc_version="IRIX libc `uname -sRm`"
156 dnl Another ugly case
158 libc_version=` grep -h libc.so *.inv | awk '$9 == "f" {print $12}' | tr '\n' ','`
163 dnl MacOS guys, does this work?
164 libc_version="`$LDD /usr/lib/libc.dylib | head -n1 | sed -e 's/.*current version[ ]*\([0-9.]*\).*$/\1/'`"
173 AC_MSG_RESULT($libc_version)
176 if test -z "libc_version"; then
177 libc_version="detection failed (please report this)"
179 ])dnl SXE_CHECK_LIBC_VERSION
181 AC_DEFUN([SXE_CHECK_BASIC_HEADERS], [dnl
186 ## check for stdbool, but turn off warnings before
188 SXE_LANG_WERROR([off])
192 SXE_CHECK_HEADERS([stddef.h stdlib.h string.h wchar.h])
193 SXE_CHECK_HEADERS([fcntl.h float.h inttypes.h limits.h locale.h mach/mach.h malloc.h memory.h unistd.h ulimit.h])
194 SXE_CHECK_HEADERS([sys/file.h sys/ioctl.h sys/param.h sys/pstat.h sys/resource.h sys/vlimit.h])
195 SXE_CHECK_HEADERS([sys/personality.h])
196 SXE_CHECK_HEADERS([a.out.h elf.h])
197 SXE_CHECK_HEADERS([ctype.h errno.h])
198 SXE_CHECK_HEADERS([getopt.h])
200 ## just to be ubersure
201 unset ac_cv_header_stdbool_h
202 SXE_CHECK_HEADERS([stdbool.h])
203 ])dnl SXE_CHECK_BASIC_HEADERS
206 AC_DEFUN([SXE_CHECK_BASIC_TYPES], [dnl
207 pushdef([INC_STDBOOL_H], [
208 #if defined HAVE_STDBOOL_H
209 # include <stdbool.h>
213 ## checks for typedefs
222 ## next one is obsolete, it is safe to assume that RETSIGTYPE
223 ## is always `void' these days
234 AC_CHECK_TYPES([wchar_t])
235 AC_CHECK_TYPE([bool], [], [], INC_STDBOOL_H)
236 AC_CHECK_TYPES([long long int])
237 AC_CHECK_TYPES([longopts])
239 dnl We immediately jump off the cliff when using a cross compiler
241 AC_CHECK_SIZEOF([char], [0])
242 AC_CHECK_SIZEOF([short], [0])
243 AC_CHECK_SIZEOF([int], [0])
244 AC_CHECK_SIZEOF([long], [0])
245 AC_CHECK_SIZEOF([long long int], [0])
246 AC_CHECK_SIZEOF([wchar_t], [0])
247 AC_CHECK_SIZEOF([void *], [0])
248 AC_CHECK_SIZEOF([float], [0])
249 AC_CHECK_SIZEOF([double], [0])
250 AC_CHECK_SIZEOF([long double], [0])
251 AC_CHECK_SIZEOF([size_t], [0])
252 AC_CHECK_SIZEOF([char *], [0])
253 AC_CHECK_SIZEOF([bool], [0], INC_STDBOOL_H)
256 ## if test "$ac_cv_sizeof_short" = 0; then
258 ## echo "*** PANIC *** Configure tests are not working - compiler is broken."
259 ## echo "*** PANIC *** Please examine config.log for compilation errors."
263 ## treat RETSIGTYPE specially since we've kicked the detection
265 AC_DEFINE([RETSIGTYPE], [void], [Return type of signal handler funs])
267 popdef([INC_STDBOOL_H])
268 ])dnl SXE_CHECK_BASIC_TYPES
271 AC_DEFUN([_SXE_CHECK_CTYPE_H_FUN], [dnl
274 pushdef([INC_CTYPE_H], [
284 ## now as they are usually in ctype.h, check there
285 if test "$ac_cv_func_[]FUN[]" != "yes"; then
286 unset ac_cv_func_[]FUN[]
287 AC_CHECK_FUNCS(FUN, [], [], INC_CTYPE_H)
289 ## just to define them symbols
292 if test "$ac_cv_have_decl_[]FUN[]" != "yes"; then
293 unset ac_cv_have_decl_[]FUN[]
294 AC_CHECK_DECLS(FUN, [], [], INC_CTYPE_H)
296 ## just to define them symbols
301 popdef([INC_CTYPE_H])
302 ])dnl _SXE_CHECK_CTYPE_H_FUN
304 AC_DEFUN([_SXE_CHECK_CTYPE_H_FUNS], [dnl
305 ## arg #1 are the funs, space separated
306 m4_foreach([_FUN], [$1], [_SXE_CHECK_CTYPE_H_FUN(_FUN)])
307 ])dnl _SXE_CHECK_CTYPE_H_FUNS
309 AC_DEFUN([SXE_CHECK_BASIC_FUNS], [dnl
310 ## turn off that Werror thing
311 SXE_LANG_WERROR([push+off])
313 AC_CHECK_FUNCS([strdup strcat strncat strcmp strncmp strcpy strncpy])
314 AC_CHECK_DECLS([strdup, strcat, strncat, strcmp, strncmp, strcpy, strncpy])
315 AC_CHECK_FUNCS([strlen stpcpy stpncpy])
316 AC_CHECK_DECLS([strlen, stpcpy, stpncpy])
317 AC_CHECK_FUNCS([malloc realloc calloc free])
318 AC_CHECK_DECLS([malloc, realloc, calloc, free])
319 AC_CHECK_FUNCS([getopt getopt_long])
320 AC_CHECK_DECLS([getopt, getopt_long])
322 _SXE_CHECK_CTYPE_H_FUNS([isalnum, isalpha, isascii, isdigit])
323 _SXE_CHECK_CTYPE_H_FUNS([isblank, isspace, ispunct, isgraph])
324 _SXE_CHECK_CTYPE_H_FUNS([islower, isupper, isxdigit])
325 _SXE_CHECK_CTYPE_H_FUNS([iscntrl, isprint])
326 ])dnl SXE_CHECK_BASIC_FUNS
329 AC_DEFUN([SXE_CHECK_SIGNALS], [dnl
330 SXE_CHECK_HEADERS([string.h])
331 AC_CHECK_FUNCS([strsignal])
332 AC_CHECK_DECLS([sys_siglist], [], [], [
334 /* NetBSD declares sys_siglist in unistd.h. */
339 AC_CHECK_DECLS([sys_siglist])
340 ])dnl SXE_CHECK_SIGNALS
342 AC_DEFUN([SXE_CHECK_INTPTR_T], [dnl
343 SXE_CHECK_HEADERS([inttypes.h])
344 AC_CHECK_TYPE([intptr_t], [], [], [
345 #if defined HAVE_SYS_TYPES_H
346 # include <sys/types.h>
349 if test "$ac_cv_type_intptr_t" = "yes"; then
350 AC_DEFINE([HAVE_INTPTR_T_IN_SYS_TYPES_H], [1], [Description here!])
353 dnl if test "$ac_cv_header_inttypes_h" != "yes"; then
354 dnl AC_MSG_CHECKING([for intptr_t in sys/types.h])
355 dnl AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
356 dnl #include <sys/types.h>
360 dnl AC_MSG_RESULT(yes)
361 dnl AC_DEFINE([HAVE_INTPTR_T_IN_SYS_TYPES_H], [1],
362 dnl [Description here!])
364 dnl AC_MSG_RESULT(no)])
366 ])dnl SXE_CHECK_INTPTR_T
368 dnl sxe-libc.m4 ends here