Commit c1800ec8 by Zack Weinberg Committed by Zack Weinberg

configure.in: Probe for times, clock, struct tms, and clock_t.

	* configure.in: Probe for times, clock, struct tms, and clock_t.
	* configure, config.in: Regenerate.
	* timevar.c: Replace ifdef forest in get_time with (relatively)
	straightforward series of checks based on autoconf's probes.

From-SVN: r41471
parent 6c3a9f72
2001-04-20 Zack Weinberg <zackw@stanford.edu>
* configure.in: Probe for times, clock, struct tms, and clock_t.
* configure, config.in: Regenerate.
* timevar.c: Replace ifdef forest in get_time with (relatively)
straightforward series of checks based on autoconf's probes.
Fri Apr 20 12:24:50 2001 Jeffrey A Law (law@cygnus.com)
* config/pa/som.h (NM_FLAGS): Define.
......
......@@ -101,6 +101,9 @@
/* Define if you have the bsearch function. */
#undef HAVE_BSEARCH
/* Define if you have the clock function. */
#undef HAVE_CLOCK
/* Define if you have the dcgettext function. */
#undef HAVE_DCGETTEXT
......@@ -188,6 +191,9 @@
/* Define if you have the sysconf function. */
#undef HAVE_SYSCONF
/* Define if you have the times function. */
#undef HAVE_TIMES
/* Define if you have the <argz.h> header file. */
#undef HAVE_ARGZ_H
......@@ -417,6 +423,9 @@
#undef HAVE_DECL_GETOPT
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_CLOCK
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETRLIMIT
/* Define to 1 if we found this declaration otherwise define to 0. */
......@@ -425,6 +434,15 @@
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_GETRUSAGE
/* Define to 1 if we found this declaration otherwise define to 0. */
#undef HAVE_DECL_TIMES
/* Define if <sys/times.h> defines struct tms. */
#undef HAVE_STRUCT_TMS
/* Define if <time.h> defines clock_t. */
#undef HAVE_CLOCK_T
/* Define if host mkdir takes a single argument. */
#undef MKDIR_TAKES_ONE_ARG
......
......@@ -544,7 +544,7 @@ fi
dnl Disabled until we have a complete test for buggy enum bitfields.
dnl gcc_AC_C_ENUM_BF_UNSIGNED
AC_CHECK_FUNCS(strtoul bsearch popen \
AC_CHECK_FUNCS(strtoul bsearch popen times clock \
strchr strrchr kill getrlimit setrlimit atoll atoq \
sysconf isascii gettimeofday strsignal putc_unlocked fputc_unlocked \
fputs_unlocked getrusage iconv nl_langinfo lstat)
......@@ -591,7 +591,7 @@ saved_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -I${srcdir} -I${srcdir}/../include"
gcc_AC_CHECK_DECLS(getenv atol sbrk abort atof getcwd getwd \
strsignal putc_unlocked fputs_unlocked strstr environ errno \
malloc realloc calloc free basename getopt, , ,[
malloc realloc calloc free basename getopt clock, , ,[
#include "ansidecl.h"
#include "system.h"])
......@@ -603,6 +603,40 @@ gcc_AC_CHECK_DECLS(getrlimit setrlimit getrusage, , ,[
#endif
])
gcc_AC_CHECK_DECLS(times, , ,[
#include "ansidecl.h"
#include "system.h"
#ifdef HAVE_SYS_TIMES_H
#include <sys/times.h>
#endif
])
# More time-related stuff.
AC_CACHE_CHECK(for struct tms, ac_cv_struct_tms, [
AC_TRY_COMPILE([
#include "ansidecl.h"
#include "system.h"
#ifdef HAVE_SYS_TIMES_H
#include <sys/times.h>
#endif
], [struct tms tms;], ac_cv_struct_tms=yes, ac_cv_struct_tms=no)])
if test $ac_cv_struct_tms = yes; then
AC_DEFINE(HAVE_STRUCT_TMS, 1,
[Define if <sys/times.h> defines struct tms.])
fi
# use gcc_cv_* here because this doesn't match the behavior of AC_CHECK_TYPE.
# revisit after autoconf 2.50.
AC_CACHE_CHECK(for clock_t, gcc_cv_type_clock_t, [
AC_TRY_COMPILE([
#include "ansidecl.h"
#include "system.h"
], [clock_t x;], gcc_cv_type_clock_t=yes, gcc_cv_type_clock_t=no)])
if test $gcc_cv_type_clock_t = yes; then
AC_DEFINE(HAVE_CLOCK_T, 1,
[Define if <time.h> defines clock_t.])
fi
# Restore CFLAGS from before the gcc_AC_NEED_DECLARATIONS tests.
CFLAGS="$saved_CFLAGS"
......
......@@ -26,13 +26,76 @@
#ifdef HAVE_SYS_TIMES_H
# include <sys/times.h>
#endif
#ifdef HAVE_SYS_RESOURCE_H
#include <sys/resource.h>
#endif
#ifdef NEED_DECLARATION_GETRUSAGE
#ifndef HAVE_CLOCK_T
typedef int clock_t;
#endif
#ifndef HAVE_STRUCT_TMS
struct tms
{
clock_t tms_utime;
clock_t tms_stime;
clock_t tms_cutime;
clock_t tms_cstime;
};
#endif
#if defined HAVE_DECL_GETRUSAGE && !HAVE_DECL_GETRUSAGE
extern int getrusage PARAMS ((int, struct rusage *));
#endif
#if defined HAVE_DECL_TIMES && !HAVE_DECL_TIMES
extern clock_t times PARAMS ((struct tms *));
#endif
#if defined HAVE_DECL_CLOCK && !HAVE_DECL_CLOCK
extern clock_t clock PARAMS ((void));
#endif
#ifndef RUSAGE_SELF
# define RUSAGE_SELF 0
#endif
/* Calculation of scale factor to convert ticks to microseconds.
We mustn't use CLOCKS_PER_SEC except with clock(). */
#if HAVE_SYSCONF && defined _SC_CLK_TCK
# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
#else
# ifdef CLK_TCK
# define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */
# else
# ifdef HZ
# define TICKS_PER_SECOND HZ /* traditional UNIX */
# else
# define TICKS_PER_SECOND 100 /* often the correct value */
# endif
# endif
#endif
#define TICKS_TO_USEC (1000000 / TICKS_PER_SECOND)
#define CLOCKS_TO_USEC (1000000 / CLOCKS_PER_SEC)
/* Prefer times to getrusage to clock (each gives successively less
information). */
#ifdef HAVE_TIMES
# define USE_TIMES
# define HAVE_USER_TIME
# define HAVE_SYS_TIME
# define HAVE_WALL_TIME
#else
#ifdef HAVE_GETRUSAGE
# define USE_GETRUSAGE
# define HAVE_USER_TIME
# define HAVE_SYS_TIME
#else
#ifdef HAVE_CLOCK
# define USE_CLOCK
# define HAVE_USER_TIME
#endif
#endif
#endif
#include "flags.h"
#include "timevar.h"
......@@ -114,85 +177,36 @@ get_time (now)
if (!TIMEVAR_ENABLE)
return;
#ifdef __BEOS__
/* Nothing. */
#else /* not BeOS */
#if defined (_WIN32) && !defined (__CYGWIN__)
if (clock () >= 0)
now->user = clock () * 1000;
#define HAVE_USER_TIME
#else /* not _WIN32 */
#ifdef _SC_CLK_TCK
{
static int tick;
#ifdef USE_TIMES
/* libc is very likely to have snuck a call to sysconf() into one
of the underlying constants, and that can make system calls, so
we have to precompute the value. Whose wonderful idea was it
to make all those _constants_ variable at run time, anyway? */
static int ticks_to_usec;
struct tms tms;
if (tick == 0)
tick = 1000000 / sysconf (_SC_CLK_TCK);
now->wall = times (&tms) * tick;
now->user = tms.tms_utime * tick;
now->sys = tms.tms_stime * tick;
}
#define HAVE_USER_TIME
#define HAVE_SYS_TIME
#define HAVE_WALL_TIME
if (ticks_to_usec == 0)
ticks_to_usec = TICKS_TO_USEC;
#else
#ifdef USG
{
struct tms tms;
# if HAVE_SYSCONF && defined _SC_CLK_TCK
# define TICKS_PER_SECOND sysconf (_SC_CLK_TCK) /* POSIX 1003.1-1996 */
# else
# ifdef CLK_TCK
# define TICKS_PER_SECOND CLK_TCK /* POSIX 1003.1-1988; obsolescent */
# else
# define TICKS_PER_SECOND HZ /* traditional UNIX */
# endif
# endif
now->wall = times (&tms) * (1000000 / TICKS_PER_SECOND);
now->user = tms.tms_utime * (1000000 / TICKS_PER_SECOND);
now->sys = tms.tms_stime * (1000000 / TICKS_PER_SECOND);
}
#define HAVE_USER_TIME
#define HAVE_SYS_TIME
#define HAVE_WALL_TIME
#else
#ifndef VMS
{
now->wall = times (&tms) * ticks_to_usec;
now->user = tms.tms_utime * ticks_to_usec;
now->sys = tms.tms_stime * ticks_to_usec;
#endif
#ifdef USE_GETRUSAGE
struct rusage rusage;
getrusage (0, &rusage);
getrusage (RUSAGE_SELF, &rusage);
now->user
= rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec;
now->sys
= rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec;
#endif
#ifdef USE_CLOCK
static int clocks_to_usec;
if (clocks_to_usec == 0)
clocks_to_usec = CLOCKS_TO_USEC;
now->user = clock () * clocks_to_usec;
#endif
}
#define HAVE_USER_TIME
#define HAVE_SYS_TIME
#else /* VMS */
{
struct
{
int proc_user_time;
int proc_system_time;
int child_user_time;
int child_system_time;
} vms_times;
now->wall = times ((void *) &vms_times) * 10000;
now->user = vms_times.proc_user_time * 10000;
now->sys = vms_times.proc_system_time * 10000;
}
#define HAVE_USER_TIME
#define HAVE_SYS_TIME
#define HAVE_WALL_TIME
#endif /* VMS */
#endif /* USG */
#endif /* _SC_CLK_TCK */
#endif /* _WIN32 */
#endif /* __BEOS__ */
}
/* Add the difference between STOP_TIME and START_TIME to TIMER. */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment