You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
2.9 KiB
81 lines
2.9 KiB
dnl -*- Autoconf -*-
|
|
dnl Copyright (C) 1993-2003 Free Software Foundation, Inc.
|
|
dnl This file is free software, distributed under the terms of the GNU
|
|
dnl General Public License. As a special exception to the GNU General
|
|
dnl Public License, this file may be distributed as part of a program
|
|
dnl that contains a configuration script generated by Autoconf, under
|
|
dnl the same distribution terms as the rest of that program.
|
|
|
|
dnl From Bruno Haible, Marcus Daniels, Sam Steingold, Peter Burwood, Sam Steingold.
|
|
|
|
AC_PREREQ(2.57)
|
|
|
|
AC_DEFUN([CL_RUSAGE],
|
|
[AC_CHECK_HEADERS(sys/resource.h sys/times.h)dnl
|
|
if test $ac_cv_header_sys_resource_h = yes; then
|
|
dnl HAVE_SYS_RESOURCE_H defined
|
|
CL_LINK_CHECK([getrusage], cl_cv_func_getrusage,
|
|
[#include <sys/types.h> /* NetBSD 1.0 needs this */
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>],
|
|
[struct rusage x; int y = RUSAGE_SELF; getrusage(y,&x); x.ru_utime.tv_sec;])dnl
|
|
if test $cl_cv_func_getrusage = yes; then
|
|
CL_PROTO([getrusage], [
|
|
CL_PROTO_TRY([
|
|
#include <stdlib.h>
|
|
#ifdef HAVE_UNISTD_H
|
|
#include <unistd.h>
|
|
#endif
|
|
#include <sys/types.h> /* NetBSD 1.0 needs this */
|
|
#include <sys/time.h>
|
|
#include <sys/resource.h>
|
|
],
|
|
[int getrusage (int who, struct rusage * rusage);],
|
|
[int getrusage();],
|
|
[cl_cv_proto_getrusage_arg1="int"],
|
|
[cl_cv_proto_getrusage_arg1="enum __rusage_who"])
|
|
], [extern int getrusage ($cl_cv_proto_getrusage_arg1, struct rusage *);])dnl
|
|
AC_CACHE_CHECK(whether getrusage works, cl_cv_func_getrusage_works, [
|
|
AC_TRY_RUN([
|
|
#include <stdio.h>
|
|
#include <sys/types.h> /* NetBSD 1.0 needs this */
|
|
#include <sys/time.h>
|
|
#include <time.h> /* for time(2) */
|
|
#include <sys/resource.h>
|
|
int main ()
|
|
{
|
|
struct rusage used, prev;
|
|
time_t end = time(NULL)+2;
|
|
int count = 0;
|
|
|
|
if ((count = getrusage(RUSAGE_SELF, &prev))) {
|
|
/* getrusage is defined but does not do anything. */
|
|
/*fprintf(stderr,"getrusage failed: return=%d\n",count);*/
|
|
return 1;
|
|
}
|
|
while (time(NULL) < end) {
|
|
count++;
|
|
getrusage(RUSAGE_SELF, &used);
|
|
if ((used.ru_utime.tv_usec != prev.ru_utime.tv_usec)
|
|
|| (used.ru_utime.tv_sec != prev.ru_utime.tv_sec)
|
|
|| (used.ru_stime.tv_usec != prev.ru_stime.tv_usec)
|
|
|| (used.ru_stime.tv_sec != prev.ru_stime.tv_sec)) {
|
|
/*fprintf(stderr,"success after %d runs\n",count);*/
|
|
return 0;
|
|
}
|
|
}
|
|
/* getrusage is defined but does not work. */
|
|
/*fprintf(stderr,"failure after %d runs\n",count);*/
|
|
return 1;
|
|
}],
|
|
cl_cv_func_getrusage_works=yes,
|
|
cl_cv_func_getrusage_works=no,
|
|
dnl When cross-compiling, don't assume anything.
|
|
cl_cv_func_getrusage_works="guessing no")])
|
|
fi
|
|
if test "$cl_cv_func_getrusage_works" = yes; then
|
|
AC_DEFINE(HAVE_GETRUSAGE,,[have <sys/time.h>, the getrusage() function, the struct rusage type, and <sys/resource.h> defines RUSAGE_SELF])
|
|
AC_DEFINE_UNQUOTED(RUSAGE_WHO_T,$cl_cv_proto_getrusage_arg1,[type of `who' in getrusage() declaration])
|
|
fi
|
|
fi
|
|
])
|