Add comments.
[gnulib.git] / m4 / mmap-anon.m4
1 # mmap-anon.m4 serial 6
2 dnl Copyright (C) 2005, 2007, 2009 Free Software Foundation, Inc.
3 dnl This file is free software; the Free Software Foundation
4 dnl gives unlimited permission to copy and/or distribute it,
5 dnl with or without modifications, as long as this notice is preserved.
6
7 # Detect how mmap can be used to create anonymous (not file-backed) memory
8 # mappings.
9 # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
10 #   and MAP_ANON exist and have the same value.
11 # - On HP-UX, only MAP_ANONYMOUS exists.
12 # - On MacOS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
13 # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
14 #   used.
15
16 AC_DEFUN([gl_FUNC_MMAP_ANON],
17 [
18   dnl Work around a bug of AC_EGREP_CPP in autoconf-2.57.
19   AC_REQUIRE([AC_PROG_CPP])
20   AC_REQUIRE([AC_PROG_EGREP])
21
22   dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
23   AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
24
25   # Check for mmap()
26   AC_FUNC_MMAP
27
28   # Try to allow MAP_ANONYMOUS.
29   gl_have_mmap_anonymous=no
30   if test $ac_cv_func_mmap_fixed_mapped = yes; then
31     AC_MSG_CHECKING([for MAP_ANONYMOUS])
32     AC_EGREP_CPP([I cant identify this map.], [
33 #include <sys/mman.h>
34 #ifdef MAP_ANONYMOUS
35     I cant identify this map.
36 #endif
37 ],
38       [gl_have_mmap_anonymous=yes])
39     if test $gl_have_mmap_anonymous != yes; then
40       AC_EGREP_CPP([I cant identify this map.], [
41 #include <sys/mman.h>
42 #ifdef MAP_ANON
43     I cant identify this map.
44 #endif
45 ],
46         [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
47           [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
48          gl_have_mmap_anonymous=yes])
49     fi
50     AC_MSG_RESULT([$gl_have_mmap_anonymous])
51     if test $gl_have_mmap_anonymous = yes; then
52       AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
53         [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
54          config.h and <sys/mman.h>.])
55     fi
56   fi
57 ])