getloadavg.m4 5.31 KB
Newer Older
1 2
# Check for getloadavg.

Paul Eggert's avatar
Paul Eggert committed
3 4
# Copyright (C) 1992-1996, 1999-2000, 2002-2003, 2006, 2008-2020 Free Software
# Foundation, Inc.
5 6 7 8 9

# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.

Paul Eggert's avatar
Paul Eggert committed
10
#serial 8
11 12 13 14

# Autoconf defines AC_FUNC_GETLOADAVG, but that is obsolescent.
# New applications should use gl_GETLOADAVG instead.

15 16
# gl_GETLOADAVG
# -------------
17 18 19 20 21 22 23 24
AC_DEFUN([gl_GETLOADAVG],
[AC_REQUIRE([gl_STDLIB_H_DEFAULTS])

# Persuade glibc <stdlib.h> to declare getloadavg().
AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])

gl_save_LIBS=$LIBS

Paul Eggert's avatar
Paul Eggert committed
25
# getloadavg is present in libc on glibc >= 2.2, Mac OS X, FreeBSD >= 2.0,
26
# NetBSD >= 0.9, OpenBSD >= 2.0, Solaris >= 7.
27
HAVE_GETLOADAVG=1
28
AC_CHECK_FUNC([getloadavg], [],
29
  [gl_func_getloadavg_done=no
30 31 32 33 34 35

   # Some systems with -lutil have (and need) -lkvm as well, some do not.
   # On Solaris, -lkvm requires nlist from -lelf, so check that first
   # to get the right answer into the cache.
   # For kstat on solaris, we need to test for libelf and libkvm to force the
   # definition of SVR4 below.
36
   if test $gl_func_getloadavg_done = no; then
37 38 39 40
     AC_CHECK_LIB([elf], [elf_begin], [LIBS="-lelf $LIBS"])
     AC_CHECK_LIB([kvm], [kvm_open], [LIBS="-lkvm $LIBS"])
     # Check for the 4.4BSD definition of getloadavg.
     AC_CHECK_LIB([util], [getloadavg],
41
       [LIBS="-lutil $LIBS" gl_func_getloadavg_done=yes])
42 43
   fi

44
   if test $gl_func_getloadavg_done = no; then
45 46 47 48 49
     # There is a commonly available library for RS/6000 AIX.
     # Since it is not a standard part of AIX, it might be installed locally.
     gl_getloadavg_LIBS=$LIBS
     LIBS="-L/usr/local/lib $LIBS"
     AC_CHECK_LIB([getloadavg], [getloadavg],
50
                  [LIBS="-lgetloadavg $LIBS" gl_func_getloadavg_done=yes],
51 52 53 54
                  [LIBS=$gl_getloadavg_LIBS])
   fi

   # Set up the replacement function if necessary.
55
   if test $gl_func_getloadavg_done = no; then
56
     HAVE_GETLOADAVG=0
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73

     # Solaris has libkstat which does not require root.
     AC_CHECK_LIB([kstat], [kstat_open])
     test $ac_cv_lib_kstat_kstat_open = yes && gl_func_getloadavg_done=yes

     # AIX has libperfstat which does not require root
     if test $gl_func_getloadavg_done = no; then
       AC_CHECK_LIB([perfstat], [perfstat_cpu_total])
       test $ac_cv_lib_perfstat_perfstat_cpu_total = yes && gl_func_getloadavg_done=yes
     fi

     if test $gl_func_getloadavg_done = no; then
       AC_CHECK_HEADER([sys/dg_sys_info.h],
         [gl_func_getloadavg_done=yes
          AC_DEFINE([DGUX], [1], [Define to 1 for DGUX with <sys/dg_sys_info.h>.])
          AC_CHECK_LIB([dgc], [dg_sys_info])])
     fi
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
   fi])

if test "x$gl_save_LIBS" = x; then
  GETLOADAVG_LIBS=$LIBS
else
  GETLOADAVG_LIBS=`echo "$LIBS" | sed "s!$gl_save_LIBS!!"`
fi
LIBS=$gl_save_LIBS

AC_SUBST([GETLOADAVG_LIBS])dnl

# Test whether the system declares getloadavg. Solaris has the function
# but declares it in <sys/loadavg.h>, not <stdlib.h>.
AC_CHECK_HEADERS([sys/loadavg.h])
if test $ac_cv_header_sys_loadavg_h = yes; then
  HAVE_SYS_LOADAVG_H=1
else
  HAVE_SYS_LOADAVG_H=0
fi
AC_CHECK_DECL([getloadavg], [], [HAVE_DECL_GETLOADAVG=0],
94
  [[#if HAVE_SYS_LOADAVG_H
Paul Eggert's avatar
Paul Eggert committed
95 96 97
    /* OpenIndiana has a bug: <sys/time.h> must be included before
       <sys/loadavg.h>.  */
    # include <sys/time.h>
98 99 100
    # include <sys/loadavg.h>
    #endif
    #include <stdlib.h>]])
101 102 103 104 105
])# gl_GETLOADAVG


# gl_PREREQ_GETLOADAVG
# --------------------
Paul Eggert's avatar
Paul Eggert committed
106
# Set up the AC_LIBOBJ replacement of 'getloadavg'.
107 108 109 110
AC_DEFUN([gl_PREREQ_GETLOADAVG],
[
# Figure out what our getloadavg.c needs.

Paul Eggert's avatar
Paul Eggert committed
111
AC_CHECK_HEADERS_ONCE([sys/param.h unistd.h])
112

113
# On HPUX9, an unprivileged user can get load averages this way.
114 115
if test $gl_func_getloadavg_done = no; then
  AC_CHECK_FUNCS([pstat_getdynamic], [gl_func_getloadavg_done=yes])
116 117 118 119 120
fi

# We cannot check for <dwarf.h>, because Solaris 2 does not use dwarf (it
# uses stabs), but it is still SVR4.  We cannot check for <elf.h> because
# Irix 4.0.5F has the header but not the library.
121
if test $gl_func_getloadavg_done = no && test "$ac_cv_lib_elf_elf_begin" = yes \
122
    && test "$ac_cv_lib_kvm_kvm_open" = yes; then
123
  gl_func_getloadavg_done=yes
124 125 126
  AC_DEFINE([SVR4], [1], [Define to 1 on System V Release 4.])
fi

127
if test $gl_func_getloadavg_done = no; then
128
  AC_CHECK_HEADER([inq_stats/cpustats.h],
129
  [gl_func_getloadavg_done=yes
130 131 132 133 134 135
   AC_DEFINE([UMAX], [1], [Define to 1 for Encore UMAX.])
   AC_DEFINE([UMAX4_3], [1],
             [Define to 1 for Encore UMAX 4.3 that has <inq_status/cpustats.h>
              instead of <sys/cpustats.h>.])])
fi

136
if test $gl_func_getloadavg_done = no; then
137
  AC_CHECK_HEADER([sys/cpustats.h],
138
  [gl_func_getloadavg_done=yes; AC_DEFINE([UMAX])])
139 140
fi

141
if test $gl_func_getloadavg_done = no; then
142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
  AC_CHECK_HEADERS([mach/mach.h])
fi

AC_CHECK_HEADERS([nlist.h],
[AC_CHECK_MEMBERS([struct nlist.n_un.n_name],
                  [], [],
                  [@%:@include <nlist.h>])
 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <nlist.h>]],
                   [[struct nlist x;
                    #ifdef HAVE_STRUCT_NLIST_N_UN_N_NAME
                    x.n_un.n_name = "";
                    #else
                    x.n_name = "";
                    #endif]])],
                [AC_DEFINE([N_NAME_POINTER], [1],
                           [Define to 1 if the nlist n_name member is a pointer])])
])dnl
])# gl_PREREQ_GETLOADAVG