summaryrefslogtreecommitdiffstats
path: root/aclocal.m4
blob: baa54d1ffcafc316e628bb3d9882b2531ea8a781 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
dnl aclocal.m4 -- custom autoconf macros for various purposes
dnl Updated for Autoconf v2
dnl
dnl ******** save/restore stuff **********
define(AC_KNFSD_SAVE,
  [AC_LANG_SAVE
   save_LDFLAGS=$LDFLAGS
   save_CFLAGS=$CFLAGS
   save_CXXFLAGS=$CXXFLAGS
   save_LIBS=$LIBS
])dnl
define(AC_KNFSD_RESTORE,
  [LDFLAGS=$save_LDFLAGS
   CFLAGS=$save_CFLAGS
   CXXFLAGS=$save_CXXFLAGS
   LIBS=$save_LIBS
   AC_LANG_RESTORE
])dnl
dnl *********** GNU libc 2 ***************
define(AC_GNULIBC,
  [AC_MSG_CHECKING(for GNU libc2)
  AC_CACHE_VAL(knfsd_cv_glibc2,
  [AC_TRY_CPP([
      #include <features.h>
      #if !defined(__GLIBC__)
      # error Nope
      #endif], knfsd_cv_glibc2=yes, knfsd_cv_glibc2=no)])
  AC_MSG_RESULT($knfsd_cv_glibc2)
  if test $knfsd_cv_glibc2 = yes; then
    CFLAGS="$CFLAGS -D_GNU_SOURCE"
    CXXFLAGS="$CXXFLAGS -D_GNU_SOURCE"
  fi
]) dnl
dnl
dnl ************* egcs *******************
define(AC_PROG_EGCS,
  [AC_MSG_CHECKING(for egcs)
  AC_CACHE_VAL(knfsd_cv_prog_EGCS,
  [case `$CC --version 2>/dev/null` in
   egcs*)
	knfsd_cv_prog_EGCS=yes;;
   *)
	knfsd_cv_prog_EGCS=no;;
   esac
  ])
  AC_MSG_RESULT($knfsd_cv_prog_EGCS)
  test $knfsd_cv_prog_EGCS = yes && AC_DEFINE(HAVE_EGCS)
]) dnl
dnl *********** sizeof(dev_t) **************
dnl ** We have to kludge this rather than use AC_CHECK_SIZEOF because
dnl ** we have to include sys/types.h. Ugh.
define(AC_DEV_T_SIZE,
  [AC_MSG_CHECKING(size of dev_t)
   AC_CACHE_VAL(ac_cv_sizeof_dev_t,
   [AC_TRY_RUN(
    [#include <stdio.h>
     #include <sys/types.h>
     main()
     {
      FILE *f=fopen("conftestval", "w");
      if (!f) exit(1);
      fprintf(f, "%d\n", sizeof(dev_t));
      exit(0);
    }], ac_cv_sizeof_dev_t=`cat conftestval`, ac_cv_sizeof_dev_t=0)])
    AC_MSG_RESULT($ac_cv_sizeof_dev_t)
    AC_DEFINE(SIZEOF_DEV_T,$ac_cv_sizeof_dev_t)
  ])
dnl *********** sizeof(xxx_t) **************
dnl ** Overwrite the AC_CHECK_SIZEOF macro as we must include sys/types.h
define([AC_CHECK_SIZEOF],
  [changequote(<<, >>)dnl
   define(<<AC_TYPE_NAME>>,translit(sizeof_$1, [a-z *], [A-Z_P]))dnl
   define(<<AC_CV_NAME>>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl
   changequote([, ])dnl
   AC_MSG_CHECKING(size of $1)
   AC_CACHE_VAL(AC_CV_NAME,
   [AC_TRY_RUN(
    [#include <stdio.h>
     #include <sys/types.h>
     main()
     {
      FILE *f=fopen("conftestval", "w");
      if (!f) exit(1);
      fprintf(f, "%d\n", sizeof($1));
      exit(0);
    }], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0)])
    AC_MSG_RESULT($AC_CV_NAME)
    AC_DEFINE_UNQUOTED(AC_TYPE_NAME,$AC_CV_NAME)
    undefine([AC_TYPE_NAME])dnl
    undefine([AC_CV_NAME])dnl
  ])
dnl *********** BSD vs. POSIX signal handling **************
define([AC_BSD_SIGNALS],
  [AC_MSG_CHECKING(for BSD signal semantics)
  AC_CACHE_VAL(knfsd_cv_bsd_signals,
    [AC_TRY_RUN([
	#include <signal.h>
	#include <unistd.h>
	#include <sys/wait.h>

	static int counter = 0;
	static RETSIGTYPE handler(int num) { counter++; }

	int main()
	{
		int	s;
		if ((s = fork()) < 0) return 1;
		if (s != 0) {
			if (wait(&s) < 0) return 1;
			return WIFSIGNALED(s)? 1 : 0;
		}

		signal(SIGHUP, handler);
		kill(getpid(), SIGHUP); kill(getpid(), SIGHUP);
		return (counter == 2)? 0 : 1;
	}
    ], knfsd_cv_bsd_signals=yes, knfsd_cv_bsd_signals=no)]) dnl
    AC_MSG_RESULT($knfsd_cv_bsd_signals)
    test $knfsd_cv_bsd_signals = yes && AC_DEFINE(HAVE_BSD_SIGNALS)
])dnl