Revision history for the Perl extension Time::HiRes.

1.9725 [2012-02-01]
	- Correct stack discipline in stat(), which was screwing up list
	  operations in expressions containing calls to it [rt.cpan.org
	  #72926].
	- Add missing OUTPUT sections to the XS code [rt.cpan.org #70930].
	- Skip itimer tests on GNU/Hurd, which has the API but lacks
	  the implementation [rt.cpan.org #72754].
	- Fix a doubled word in the documentation [rt.cpan.org #72763].

1.9724 [2011-06-09]
	- Correct XS parameter list, and therefore prototype, for
	  unimplemented-on-this-platform version of clock_nanosleep()
	  [rt.cpan.org #68700].
	- Declare package variables with "our" rather than "use vars".
	- Corresponding to "our" usage, check for minimum Perl version
	  5.006.
	- Declare module dependencies.

1.9723 [2011-06-07]
	- Remove $ENV{PERL_CORE} logic from test suite, which is no
	  longer desired in the core.
	- Convert test suite to use Test::More.
	- Factor out watchdog code from test suite.
	- In test suite, be consistent about using fully-qualified form
	  of function names.
	- Divide test suite into feature-specific scripts.
	- Make ualarm timing test less vulnerable to delay-induced false
	  failure, from Dave Mitchell.

1.9722 [2011-05-18]
	- Update for changes in build process in the core, patches
	  from BinGOs [rt.cpan.org #58858] and Craig Berry [rt.cpan.org
	  #63363].
	- Fix broken linkage on Windows with gcc 3.4 seen with ActivePerl,
	  report from Christian Walde [rt.cpan.org #61648], fix derived
	  from Vincent Pit.
	- Jump through hoops to avoid compiler warnings.

1.9721 [2010-03-17]
	- Address [rt.cpan.org #54196] alarm and ularm return values are bogus,
	  additional fix from Gisle Aas
	- Address [rt.cpan.org #55665] "Bad plan" on Windows,
	  report and fix from Jan Dubois

1.9720 [2010-02-14]
	- Address [rt.cpan.org #54196] alarm and ularm return values are bogus,
	  report and fix from Nicholas Clark

1.9719	[2009-01-04]
	- As with QNX, Haiku has the API of interval timers but not
	  the implementation (bleadperl change #34630), hence skip
	  the tests, via David Mitchell.

1.9718	[2008-12-31]
	- .xs code cleanup from Albert Dvornik
	- in the #39 and #40 do not do us I did, mixing alarm() and
	  sleep().  Now instead spin until enough time has passed.

1.9717	[2008-12-30]
	- Skip the tests added in 1.9716 (#39, #40) if there's no subsecond
	  alarm capability, like with the older subsecond alarm tests

1.9716	[2008-12-26]
	- Change documentation to agree with reality: there are
	  no interval timers in Win32.
	- Address [rt.cpan.org #35899] (problem in subsecond sleeps),
          add two tests to guard against this problem
	- Address [rt.cpan.org #36600] 'Division by zero' failure in test suite
	- Address [rt.cpan.org #37340] [PATCH] Address timer process in test
	- Address [rt.cpan.org#40311 ] bad implementation of hrt_usleep
          with TIME_HIRES_NANOSLEEP

1.9715	[2008-04-08]
	- Silly me: Makefile.PL does need to accept arguments other than mine.
	  Some testing frameworks obviously do this.
	- Add retrying for tests 34..37, which are the most commonly
	  failing tests.  If this helps, consider extending the retry
	  framework to all the tests.  [Inspired by Slaven Rezic,
	  [rt.cpan.org #34711] Occasional failures of test 35 or 36 (FreeBSD)]

1.9714	[2008-04-07]
	- Under Perl 5.6.* NVgf needs to be "g", reported by Zefram,
	  it seems that ppport.h 3.13 gets this wrong.
	- remove the check in Makefile.PL for 5.7.2, shouldn't be
	  (a) necessary (b) relevant
	- add logic to Makefile.PL to skip configure/write Makefile
	  step if the "xdefine" file already exists, indicating that
	  the configure step has already been done, one can still
	  force (re)configure by "perl Makefile.PL configure",
	  or of course by "make clean && perl Makefile.PL".

1.9713	[2008-04-04]
	- for alarm() and ualarm() [Perl] prefer setitimer() [C]
	  instead of ualarm() [C] since ualarm() [C] cannot portably
	  (and standards-compliantly) be used for more than 999_999
	  microseconds (rt.cpan.org #34655)
	- it seems that HP-UX has started (at least in 11.31 ia64)
	  #defining the CLOCK_REALTIME et alia (instead of having
	  them just as enums)
	- document all the diagnostics 

1.9712	[2008-02-09]
	- move the sub tick in the test file back to where it used to be
	- in the "consider upgrading" message recommend at least Perl 5.8.8
	  and make the message to appear only for 5.8.0 since 5.8.1 and
	  later have the problem fixed
	- VOS tweak for Makefile (core perl change #33259)
	- since the test #17 seems to fail often, relax its limits a bit

1.9711	[2007-11-29]
	- lost VMS test skippage from Craig Berry
	- reformat the test code a little

1.9710	[2007-11-29]
	- I got the sense of the QNX test the wrong way in an attempt
	  to generalize it for future

1.9709	[2007-11-28]
	- casting fixes from Robin Barker for g++ and 64bitint
	- in QNX skip the itimer tests because though the API
	  is there, the implementation isn't, from Matt Kraai
	- raise the dead man timer to 180 seconds for really
	  slow/busy systems
	- elaborate the UTF-8 locale warning from Makefile.PL

1.9708	[2007-10-05]
	- [rt.cpan.org #29747]: Build failure with perl 5.005_05
	  Fixed by regenerating the ppport.h using Devel::PPPort 3.13.

1.9707	[2007-02-27]
	- t/HiRes.t failed in Perl 5.6.2,
	  "action is not of type POSIX::SigAction at t/HiRes.t line 318",
	  reported and fixed by Anton Berezin, the reason was faulty
	  use of sigaction() when restoring the old action.

1.9706	[2007-02-25]
	- with bleadperl in VMS the HiRes.t overrun the maximum number
	  of deferred signals because the libc SIGALRM was not strong
	  enough to interrupt select(), and select() got restarted every
	  time, solution is to use POSIX::SigAction if available.
	  A fix from Craig Berry (not 100% there, but helps).
	- allow for more measuring noise for ualarm() tests 35..37

1.9705	[2007-02-06]
	- nanosleep() and clock_nanosleep() detection and use were
	  quite broken; in Linux -lrt needed; fixes from Zefram
	- [internal] slightly cleaner building of $DEFINE in Makefile.PL,
	  should avoid double/conflicting -D flags

1.9704	[2007-01-01]
	- allow 10% of slop in test #14 (testing difference between
	  CORE::time() and Time::HiRes::time()), there seem to be often
	  transient failures from Perl smoke builds on this test
	- small pod tweaks

1.9703	[2006-12-08]
	- use int main(int argc, char **argv) consistently in Makefile.PL,
	  should help with
	  [rt.cpan.org #23868] nanosleep not detected under Mac OS 10.3.9 starting with Time::HiRes 1.96
	- if someone still has the locale-broken Perl 5.8.0,
	  suggest that they upgrade their Perl

1.9702	[2006-12-06]
	- restore the -DATLEASTFIVEOHOHFIVE, Win32 needed it still

1.9701	[2006-12-04]
	- upgrade to ppport.h 3.10_02
	- remove the -DATLEASTFIVEOHOHFIVE
	- use the ppport.h PL_ppaddr, PL_statcache, PL_laststatval
	- use the ppport.h aTHXR for calling Perl stat()
	- switch into four-digit version since 2.0 is coming up
	  awfully fast but not feeling like a major rewrite

1.97	[2006-11-30]
	- 1.95 broke building in Win32 (since pp_stat is not exported),
	  figured out how to call an op directly in 5.005 (use Perl_ppaddr
	  instead of PL_ppaddr)
	- backport to Perl 5.004_05  (requires using statcache
	  and laststatval instead of PL_statcache and PL_laststatval)
	  (also checked to work in 5.005_04, 5.6.1, and 5.8.8 with threads)

1.96	[2006-11-30]
	- 1.95 broke builds for threaded Perls, rt.cpan.org tickets:
	  [rt.cpan.org #23694] Time::HiRes fails tests on Solaris and Perl 5.6.1
	  [rt.cpan.org #23712] Time-HiRes 1.95 Fails make on AIX 5.2 with Perl 5.8.8
	  [rt.cpan.org #23730] Time::HiRes 1.95 fails make on MacOS X 10.3.9/perl 5.8.8
	- use main() prototype consistently in Makefile.PL

1.95	[2006-11-29]
	- integrate core change #29180: Silence VC++ compiler warnings
	  from Steve Hay
	- do not use PL_ppaddr in stat() because that is not available
	  in Perl 5.005_04
	- regenerate fallback/*.inc for older Perls without
          ExtUtils::Constant because of d_hires_stat, resolves
	  [rt.cpan.org #23694] Time::HiRes fails tests on Solaris and Perl 5.6.1
	- Make Makefile.PL more defensive against false PERL_CORE

1.94	[2006-10-16]
	- file timestamps oddities seen: the atime and mtime
	  can be out of sync (modify first and read second can leave
	  atime < mtime) and mtime can be subsecond while atime is not.
	  So make the test more forgiving.

1.93	[2006-10-15]
	- the ualarm() tests (34-37) assumed that ualarm(N)
	  could never alarm in less than N seconds, widened
	  the acceptable relative range to 0.9..1.5.  Addresses
	  [rt.cpan.org #22090] and [rt.cpan.org #22091].

	- skip the stat() tests in cygwin and win32, because
	  if run on FAT the timestamp granularity is only 2 seconds.
	  Any good way to detect (cygwin or win32) whether we are
	  being run on NTFS or anywhere with better timestamps?
	  Addresses [rt.cpan.org #22089] and [rt.cpan.org #22098].

1.92	[2006-10-13]
	- scan for subsecond resolution timestamps in struct stat,
	  some known possibilities:

	  (1)  struct  timespec st_atimespec;
                                st_atimespec.tv_nsec;
	  (2)  time_t  st_atime;
	       long    st_atimensec;
          (3)  time_t  st_atime;
               int     st_atime_n;
	  (4)  timestruc_t st_atim;
                           st_atim.tv_nsec
	  (5)  time_t  st_atime;
               int     st_uatime;

          If something like this is found, one can do

	    use Time::HiRes;
	    my @stat = Time::HiRes::stat();

	  or even override the standard stat():
      
	    use Time::HiRes qw(stat);

          to get the stat() timestamps

	    my ($atime, $mtime, $ctime) = @stat[8, 9, 10];

	  with subsecond resolution (assuming both the operating
	  system and the filesystem support that kind of thing).

	  Contributions for more systems (especially non-UNIX,
	  e.g. but not limited to: Win32, VMS, OS/2) gladly accepted.
	  (also more UNIX variants welcome: HP-UX? IRIX?)

	  Thanks to H.Merijn Brand, John Peacock, and Craig
	  Berry for brave beta testing.

1.91	[2006-09-29]
	- ualarm() in SuSE 10.1 was overflowing after ~4.2 seconds,
	  possibly due to a glibc bug/feature (suspected overflow at
	  2**32 microseconds?), workaround by using the setitimer()
	  implementation of ualarm() if either useconds or
	  interval > 999_999 (this case seems to vary between systems:
	  are useconds more than 999_999 for ualarm() defined or not)
	  Added more ualarm() tests to catch various overflow points,
	  hopefully no problems in various platforms.
	  (The problem report by Mark Seger and Jon Paul Sullivan of HP.)

1.90	[2006-08-22]
	- tweak still needed for Const64(), from Jerry Hedden
	- get a freshly generated ppport.h
	- update Copyright years

1.89	[2006-08-22]
	- Const64() already appends an 'LL' (or i64), so provide LL and i64
	  forms for the IV_1E[679] (effects Win32 and Cygwin), reported by
	  Jerry Hedden.
	- the Changes entry for 1.88 talked about [IN]V_1[679],
	  missing the 'E'.

1.88	[2006-08-21]
	- clean up the g++ warnings in HiRes.xs, all of them
	  about mixing integer and floating point, introduce
	  constants IV_1E[679] and NV_1E[679]

1.87	[2006-02-13]
	- [rt.cpan.org #17442] 'make test' frequently fails under
	  Cygwin Perl v5.8.8, reported and patched by J. R. Hedden
	  (two race condition bugs in the END block in the case the
	   main process dies before the timer process, unearthed
	   by a bug in Cygwin ualarm)

1.86	[2005-12-17]
	- HiRes.t:s/ok 32/ok 33/, from Dominic Dunlop
	- tighten up the clock() test marginally by requiring non-negative
	- clock_nanosleep() and clock() doc tweaks

1.85	[2005-12-16]
	- the interface to clock_nanosleep() is more natural
	  when it is like (hires) time() (instead of like nanosleep),
	  and the .xs implementation of clock_nanosleep() in 1.84
	  was broken anyway
	- the semantics of clock() are not quite so silly as I thought,
	  but still somewhat odd, documented as such
	- additional enhancements to the clock() documentation
	- add test for clock_nanosleep() (I cannot test this
	  since none of my systems have the function)
	- add test for clock()

1.84	[2005-12-16]
	- add clock() which returns the processor time in
	  (floating point) seconds since an arbitrary era
	- add clock_nanosleep() which suspends the current
	  thread until either absolute time or for relative time
	- [rt.cpan.org #16486] printf missing value in HiRes.t
	- add constants CLOCKS_PER_SEC, CLOCK_SOFTTIME, TIMER_ABSTIME
	- tiny typo fixes

1.83	[2005-11-19]
	- has_symbol() was wrong since e.g. ITIMER_VIRTUAL is exported
	  via @EXPORT_OK even when it is not available.  This is heinous.
	  @EXPORT_OK should be determined at Makefile.PL time.
	- be more lenient is testing clock_gettime(): allow more slop,
	  and retry up to three times, sleeping a random nap between
	  the retries
	- human months are one-based (noticed by Anton Berezin)

1.82	[2005-10-06]
	- CLOCK_REALTIME is an enum value (of the clockid_t enum)
	  in HP-UX (and might be so elsewhere, too), debugged by
	  H. Merijn Brand
	- include const-c.inc as late as possible (from Randy Kobes,
	  [rt.cpan.org #15552] to avoid undefined usleep() on Win32

1.81	[2005-11-05]
	- try to be more robust and consistent in the detection of
          CLOCK_REALTIME and ITIMER_VIRTUAL in HiRes.t: the proper
	  way is

		sub has_symbol {
		    my $symbol = shift;
		    eval 'import Time::HiRes qw($symbol)';
		    return 0 unless $@ eq '';
		    return exists ${"Time::HiRes::$symbol"};
		}

	  and then use

		&FOO_BAR

	  in the test.  All these moves are needed because

	  1) one cannot directly do eval 'Time::HiRes::FOO_BAR'
	     because FOO_BAR might have a true value of zero
	     (or in the general case an empty string or even undef)

	  2) In case FOO_BAR is not available in this platform,
	     &FOO_BAR avoids the bareword warning

	- wait more (1.5 seconds instead of 0.1) for the CLOCK_REALTIME test
	  but expect the 'customary' slop of 0.20 instead of 0.25
	- fixed inside a comment HAS_POLL -> TIME_HIRES_NANOSLEEP
	- at the end of HiRest.t tell how close we were to termination

1.80	[2005-11-04]
	- Gisle noticed a mistake (using HAS_NANOSLEEP) in 1.79

1.79	[2005-11-03]
	- try nanosleep for emulating usleep -- may help in some weird
	  embedded realtime places which have nanosleep but neither usleep
	  nor select nor poll (doesn't have to be weird embedded realtime
	  place, though -- in many places usleep is nanosleep anyway)
	- try poll for emulating usleep -- this may help some obscure/old
	  SVR4 places that have neither usleep nor select
	- a redundant test guard in HiRes.t

1.78	[2005-11-03]
	- ITIMER_VIRTUAL detection in HiRes.t had problems (that we cannot
	  in the general case fail already at 'use' phase is suboptimal)
	- fixes to the documentation of clock_gettime() and clock_getres()

1.77	[2005-11-03]
	- add support for the POSIX clock_gettime() and clock_getres(),
	  if available, either as library calls or as syscalls
	- be more defensive about missing functionality: break out
	  early (during 'use') if no e.g. clock_getres() is available,
	  and protect our back by trapping those cases also in HiRes.xs
	- the test added in 1.76 could cause an endless loop e.g. in Solaris,
	  due to mixing of sleep() and alarm() (bad programmer, no cookie!)

1.76	[2005-10-22]
	- testing for nanosleep had wrong logic which caused nanosleep
	  to become undefined for e.g. Mac OS X
	- added a test for a core dump that was introduced by Perl 5.8.0
	  safe signals and was fixed for the time of 5.8.1 (one report of
	  the core dump was [perl #20920]), the test skipped pre-5.8.1.
	- *cough* s/unanosleep/nanosleep/g; *cough*

1.75	[2005-10-18]
	- installation patch from Gisle Aas: in Perls 5.8.x and later
	  use MakeMaker INSTALLDIRS value of 'perl' instead of 'site'.

1.74	[2005-09-19]
	- [cpan #14608] Solaris 8 perl 5.005_03 File::Spec module does not have method rel2abs
	  (the workaround is not to use rel2abs, should not be necessary)
	- [cpan #14642] U2time wrongly exported on the C API
	  (patch supplied by the reporter, SALVA@cpan.org)
	- add release dates to Changes

1.73	[2005-08-16]
	- Time::HiRes::nanosleep support for Solaris [PATCH]
	  (POSIX::uname() not available if building with core perl,
	   from Gisle Aas, via perl5-porters, perl change #25295)

1.72	[2005-07-01]
	- going back to the 1.68 loader setup (using DynaLoader)
	  since too many weird things starting breaking
	- fix a typo in José Auguste-Etienne's name

1.71	[2005-06-28]
	- a thinko in the nanosleep() detection
	- move more changes stuff from the README to Changes
	- add -w to the Makefile.PL

1.70	[2005-06-26]
	- oops in 1.69 about @ISA (not affecting anything but silly)
	- add copyright 2005 to HiRes.pm
	- add copyright and license to HiRes.xs
	- add copyrights 2003, 2004, 2005 to README

1.69	[2005-06-25]
	- actually run a test for nanosleep
	  (if there is no $Config{d_nanosleep}) since e.g. in AIX 4.2
	  it seems that one can link in nanosleep() but then calling
	  it fails instantly and sets errno to ENOSYS (Not implemented).
	  This may be fixable in the AIX case by figuring out the right
	  (realtime POSIX?) libs and whatnot, but in the general case
	  running a real test case is better.  (Of course, this change
	  will no doubt run into portability problems because of the
	  execution step...)  Note that because of hysterical raisins
	  most Perls do NOT have $Config{d_nanosleep} (scanning for
	  it by Configure would in many platforms require linking in
	  things like -lrt, which would in many platforms be a bad idea
	  for Perl itself).
	  (from José Auguste-Etienne)
	- support XSLoader also since it's much faster
	  (from Alexey Tourbin)
	- add SEE ALSO (BSD::Resource and Time::TAI64)

1.68	[2005-05-14]
	- somehow 1.67 had a lot of doubled lines (a major cut-and-paste
	  error suspected), but miraculously it still worked since the
	  doubling took place below the __END__ token
	- undef Pause() before defining it to avoid redefinition warnings
	  during compilation in case perl.h had already defined Pause()
	  (part of perl change #24271)
	- minor doc tweaks

1.67	[2005-05-04]
	- (internal) don't ignore the return value of gettimeofday()
	- (external) return undef or an empty if the C gettimeofday() fails
	  (affects Time::HiRes gettimeofday() and the hires time())

1.66	[2004-12-19]
	- add nanosleep()
	- fix the 'hierachy' typo in Makefile.PL [rt.cpan.org #8492]
	- should now build in Solaris [rt.cpan.org #7165] (since 1.64)
	- should now build in Cygwin [rt.cpan.org #7535] (since 1.64)
	- close also [rt.cpan.org #5933] "Time::HiRes::time does not
	  pick up time adjustments like ntp" since ever reproducing it
	  (and therefore verifying a possible fix) in the same environment 
	  has become rather unlikely

1.65	[2004-09-18]
	- one should not mix u?alarm and sleep (the tests modified
	  by 1.65, #12 and #13, hung in Solaris), now we just busy
	  loop executing an empty block
	- in the documentation underline the unspecificity of mixing
	  sleeps and alarms
	- small spelling fixes

1.64	[2004-09-16]
	- regenerate ppport.h with Devel::PPPort 3.03,
	  now the MY_CXT_CLONE is defined in ppport.h,
	  we no more need to do that.

	- the test #12 would often hang in sigsuspend() (at least that's
	  where Mac OS X' ktrace shows it hanging).  With the sleep()s
	  changed to sleep(1)s, the tests still pass but no hang after
	  a few hundred repeats.

1.63	[2004-09-01]
	- Win32 and any ithread build: ppport.h didn't define
	  MY_CXT_CLONE, which seems to be a Time-HiRes-ism.

1.62	[2004-08-31]
	- Skip testing if under PERL_CORE and Time::HiRes has not
	  been Configured (from Marcus Holland-Moritz, core change
	  #23246)
	- Use ppport.h generated by Devel::PPPort 3.01,
	  allowing cutting away our own portability code.
	- Don't use $ENV{PERL_CORE} for < 5.6.0.
	- Don't use "for my $i" for <= 5.003.
	- Don't use Pause() for <= 5.003.
	- Can't use newSVpvf for <= 5.003.
	(most of the changes from Marcus)

1.61	[2004-08-21]
	- Win32: reset reading from the performance counters every
	  five minutes to better track wall clock time (thanks to
	  PC timers being often quite bad), should help long-running
	  programs.

1.60	[2004-08-15]
	- Win32: Patch from Steve Hay
	  [PATCH] Re: [perl #30755] [Win32] Different results from Time::HiRes::gettimeofdayunder the debugger
	  to [perl #30755] reported by Nigel Sandever

	- Cygwin: Use the Win32 recalibration code also in Cygwin if the
	  <w32api/windows.h> APIs are available.  Cygwin testing by
	  Yitzchak Scott-Thoennes.

	- Solaris: use -lposix4 to get nanosleep for Solaris 2.6,
	  after that keep using -lrt, patch from Alan Burlison,
	  bug reported in [cpan #7165]

1.59	[2004-04-08]
	- Change the Win32 recalibration limit to 0.5 seconds and tweak
	  the documentation to blather less about the gory details of the
	  Win32 implementation and more about the complications in general
	  of meddling with the system clock.

1.58	[2004-04-08]
	- Document the 1.57 change better.

1.57	[2004-07-04]
	- Win32/Cygwin/MinGW: if the performance counter drifts by more
	  than two seconds from the system clock (due to ntp adjustments,
	  for example), recalibrate our internal counter: from Jan Dubois,
	  based on [cpan #5933] by Jerry D. Hedden.

1.56	[2004-29-02]
	- Give a clearer message if the tests timeout (perl change #22253)
	- Don't use /tmp or its moral equivalents (perl bug #15036,
	  perl change #22258)

1.55	[2004-01-14]
	- Windows: mingw32 patch from Mike Pomraning (use Perl's Const64()
	  instead of VC-specific i64 suffix)

1.54	[2003-12-31]
	- Solaris: like Tru64 (dec_osf) also Solaris need -lrt for nanosleep

1.53	[2003-12-30]
	- Windows: higher resolution time() by using the Windows
	  performance counter API, from Jan Dubois and Anton Shcherbinin.
	  The exact new higher resolution depends on the hardware,
	  but it should be quite a bit better than using the basic
	  Windows timers.

1.52	[2003-10-28]
	- In AIX (v?) with perl 5.6.1 the HiRes.t can hang after
	  the subtest 18.  No known analysis nor fix, but added
	  an alarm (that requires fork() and alarm()) to the test.

1.51	[2003-09-22]
	- doc tweaks from mjd (perl change #20456)
	- NCR MP-RAS hints file added (svr4.pl) (perl change #21249)

1.50	[2003-08-02]
	- add a message (for non-core builds) to Makefile.PL about
	  the LC_ALL=C workaround
	- &Time::HiRes::d_nanosleep was broken (perl change #20131)
	- the nanosleep() probe was broken (perl change #20061)
	- use existence instead of definedness for feature probes
	  (perl change #20043)
	- MPE/iX tweak (perl change #20042)
	- do not use HAS_NANOSLEEP (perl change #19898)

1.49	[2003-06-23]
	- UVuf for non-IVSIZE platforms (from Keiichiro Nagano)
	- OS/2 can always mix subsecond sleeps with signals
	  (part of perl change #19789)

1.48	[2003-06-04]
	- workaround for buggy gcc 2.95.3 in openbsd/sparc64
	  (perl change #19592)

1.47	[2003-05-03]
	- do not use -lrt in Linux (from March Lehmann, perl change #19449)
		- unnecessary (nanosleep is in libc anyway)
		- harmful (-lrt slows down execution)
		- incompatible (with many distributions' pthreads)

1.46	[2003-04-25]
	- do not create files in blib directories under core
	  (perl change #19160, from rgs)
	- detypo s/VTLARM/VTARLM/ (perl change #19328, from mjd)

1.45	[2003-04-01]
	- guarantee that $xdefine in HiRes.t is always defined
	  (perl change #19109, from IlyaZ)
	- a cleaner way to detect PERL_CORE (perl change #19111,
	  from IlyaZ)

1.44	[2003-03-30]
	- add hints/irix.pl to turn off overly POSIX flags that
	  cause hide struct timespec to be hidden (and compilation
	  to fail) (bleadperl change #19085)
	- documentation tweaks

1.43	[2003-03-11]
	- add c:/temp to the list of temp directories to probe
	  so that cygwin (and win*?) builds are happy.  This was
	  needed at least in my cygwin 1.3.20/w2k setup.

1.42	[2003-01-07]
	- modernize the constants code (from Nicholas Clark)

1.41	[2003-01-03]
	- At some point the ability to figure our the correct incdir
	  for EXTERN.h (either a core perl build, or an installed perl)
	  had broken (which lead into all test compiles failing with
	  a core perl build, but thanks to the robustness of Makefile.PL
	  nothing of this was visible).  The brokenness seemed to be
	  caused by $ENV{PERL_CORE} not being on for core builds?
	  Now stole a trick from the Encode that sets $ENV{PERL_CORE}
	  right, and both styles of build should work again.

1.40	[2003-01-03]
	- Nicholas Clark noticed that the my_catdir() emulation function
	  was broken (which means that we didn't really work for Perls
	  5.002 and 5.003)
	- inspired by fixing the above made the whole Makefile.PL -w
	  and strict clean
	- tightened up the Makefile.PL output, less whitespace

1.39	[2003-10-20]
	- fix from Craig Berry for better building in VMS with PERL_CORE

1.38	[2003-10-13]
	- no functional changes
	- move lib/Time/HiRes.pm as Hires.pm
	- libraries scanning was slightly broken (always scanned
	  for a library even when $Config{libs} already had it)

1.37	[2003-09-23]
	- Ray Zimmerman ran into a race condition in Mac OS X.
	  A 0.01-second alarm fired before the test expected.
	  The test first slept indefinitely (blocking for signals)
	  and only after that tested for the signal having been sent.
	  Since the signal had already been sent, the test #12 never
	  completed.  The solution: test first, then block.
	- default to being silent on all probing attempts, set the
	  environment variable VERBOSE to a true value to see the
	  details (the probing command and the possible errors)

1.36	[2003-09-12]
	- do not clear MAN3PODS in Makefile.PL (Radoslaw Zielinski)
	- INSTALLDIRS => 'perl' missing which means that Time::HiRes
	  cannot be upgraded from CPAN to override the 5.8.0 version
	  (Guido A. Ostkamp)
	- Time::HiRes 1.35 could not be dropped as-is to bleadperl
	  because the include directories did not adjust themselves
	  if $ENV{PERL_CORE} (Hugo van der Sanden)
	- add documentation about the restart of select() under alarm()

1.35	[2003-08-24]
	- small documentation tweaks


1.34	[2003-08-22]
	- better VMS operation (Craig Berry)

1.33	[2003-08-20]
	- our time machine is accelerating: now works with Perl 5.004_01
	  (tried with 5.003_07 and 5.002 but I get segmentation faults
	   from running the Makefile.PL with those in Tru64 4.0D)

1.32	[2003-08-20]
	- backward compatibility (pre-5.6.0) tweaks:
	  - no XSLoader in 5.00503, use DynaLoader instead
	  - no SvPV_nolen, either
	  - no PerlProc_pause(), either
	  - now tested with 5.00404 and 5.00503
	  - Makefile.PL requires 5.00404 (no more 5.002)
	- use nanosleep instead of usleep, if it is available (Wilson Snyder)
	  (this means that one can mix subsecond sleeps with alarms)
	- because of nanosleep we probe for -lrt and -lposix4
	- the existence of getitimer/nanosleep/setitimer/ualarm/usleep
	  is available by exportable constants Time::HiRes::d_func
	  (since older Perl do not have them in %Config, and even
	   5.8.0 does not probe for nanosleep)

1.31	[2003-08-19]
	- backward compatibility (pre-5.6.1) tweaks:
	  - define NV if no NVTYPE
	  - define IVdf if needed (note: the Devel::PPPort
	    in 5.8.0 does not try hard hard enough since
	    the IVSIZE might not be defined)
	  - define NVgf if needed
	  - grab the typemap from 5.8.0 for the NV stuff

	1.31 and 1.32 add more backward compatibility (now all the way
	back to Perl 5.00404), and using nanosleep() (if available) for
	subsecond sleeps.

1.30	[2003-08-16]

	- release 1.29_02 as 1.30

	1.30 adds all the changes made during the Perl 5.6->5.7->5.8
	development cycle.  Most notably portability across platforms has been
	enhanced, and the interval timers (setitimer, getitimer) have been
	added.  Note that the version of Time::HiRes that is included in Perl
	5.8.0 calls itself 1.20_00, but it is equivalent to this Time::HiRes
	version.  Note also that in 1.30 Wegscheid turns over the maintenance
	to Jarkko Hietaniemi.

1.29_02	[2003-08-16]

	- fix a silly unclosed comment typo in HiRes.xs
	- document and export REALTIME_REALPROF (Solaris)

1.29_01	[2003-08-16]

	- only getitimer(ITIMER_REAL) available in Cygwin and Win32
	  (need to patch this also in Perl 5.[89])
	- remove CVS revision log from HiRes.xs

1.29_00	[2003-08-14]

	The following numbered patches refer to the Perl 5.7 changes,
	you can browse them at http://public.activestate.com/cgi-bin/perlbrowse

	- 17558: Add #!./perl to the .t
	- 17201: linux + usemorebits fix, from Rafael Garcia-Suarez
	- 16198: political correctness, from Simon Cozens
	- 15857: doc tweaks, from Jarkko Hietaniemi
	- 15593: optimization in .xs, from Paul Green
	- 14892: pod fixes, from Robin Barker
	- 14100: VOS fixes, from Paul Green
	- 13422: XS segfault, from Marc Lehmann
	- 13378: whether select() gets restarted on signals, depends
	- 13354: timing constraints, again, from Andy Dougherty
	- 13278: can't do subsecond alarms with ualarm;
		 break out early if alarms do not seem to be working
	- 13266: test relaxation (cygwin gets lower hires
		 times than lores ones)
	- 12846: protect against high load, from Jarkko Hietaniemi
	- 12837: HiRes.t VMS tweak, from Craig A. Berry
	- 12797: HiRes.t VMS tweak, from Charles Lane
	- 12769: HiRes.t VMS tweak, from Craig A. Berry
	- 12744: gcc vs MS 64-bit constant syntax, from Nick Ing-Simmons
	- 12722: VMS ualarm for VMS without ualarm, from Charles Lane
	- 12692: alarm() ain't gonna work if ualarm() ain't,
		 from Gurusamy Sarathy
	- 12680: minor VMS tweak, from Charles Lane
	- 12617: don't try to print ints as IVs, from Jarkko Hietaniemi
	- 12609: croak on negative time, from Jarkko Hietaniemi
	- 12595: Cygwin rounds up for time(), from Jarkko Hietaniemi
	- 12594: MacOS Classic timeofday, from Chris Nandor 
	- 12473: allow for more than one second for sleep() and usleep()
	- 12458: test tuning, relax timing constraints,
		 from Jarkko Hietaniemi
	- 12449: make sleep() and usleep() to return the number
		 of seconds and microseconds actually slept (analogously
		 with the builtin sleep()), also make usleep() croak if
		 asked for more than 1_000_000 useconds, from Jarkko Hietaniemi
	- 12366: Time::HiRes for VMS pre-7.0, from Charles Lane
	- 12199: do not use ftime on Win32, from Gurusamy Sarathy
	- 12196: use ftime() on Win32, from Artur Bergman
	- 12184: fix Time::HiRes gettimeofday() on Win32, from Gurusamy Sarathy
	- 12105: use GetSystemTime() on Win32, from Artur Bergman
	- 12060: explain the 1e9 seconds problem, from Jarkko Hietaniemi
	- 11901: UNICOS sloppy division, from Jarkko Hietaniemi
	- 11797: problem in HiRes.t, from John P. Linderman
	- 11414: prototype from Time::HiRes::sleep(), from Abhijit Menon-Sen
	- 11409: Time::HiRes qw(sleep) failed, from Abhijit Menon-Sen
	- 11270: dynix/ptx 4.5.2 hints fix, from Peter Prymmer 
	- 11032: VAX VMS s/div/lib\$ediv/ fix, from Peter Prymmer
	- 11011: VAX VMS s/qdiv/div/ fix, from Peter Prymmer
	- 10953: SCO OpenServer 5.0.5 requires an explicit -lc for usleep(),
		 from Jonathan Stowe
	- 10942: MPE/IX test tweaks, from Mark Bixby
	- 10784: unnecessary pod2man calls, from Andy Dougherty 
	- 10354: ext/ + -Wall, from Doug MacEachern
	- 10320: fix the BOOT section to call myU2time correctly
	- 10317: correct casting for AIX< from H. Merijn Brand
	- 10119: document that the core time() may be rounding, not truncating
	- 10118: test fix, from John Peacock
	-  9988: long =item, from Robin Barker
	-  9714: correct test output
	-  9708: test also the scalar aspect of getitimer()
	-  9705: Add interval timers (setitimer, getitimer)
	-  9692: do not require at least 5.005 using XS
		 
	The following changes were made on top of the changes
	made for Time::HiRes during the Perl 5.7 development
	cycle that culminated in the release of Perl 5.8.0. 

	- add "require 5.005" to the Makefile.PL
	- remove the REVISION section (CVS log) from HiRes.pm
	- add jhi's copyright alongside Douglas'
	- move HiRes.pm to lib/Time/
	- move HiRes.t to t/
	- modify HiRes.t to use $ENV{PERL_CORE}
	- modify the original Time::HiRes version 1.20 Makefile.PL
	  to work both with Perl 5.8.0 and the new code with pre-5.8.0
	  Perls (tried with 5.6.1)
	- tiny tweaks and updates in README and TODO
	- bump the VERSION to 1.29

1.20  Wed Feb 24 21:30 1999
	- make our usleep and ualarm substitutes into hrt_usleep 
	  and hrt_ualarm. This helps static links of Perl with other
	  packages that also have usleep, etc. From
	  Ilya Zakharevich <ilya@math.ohio-state.edu>
	- add C API stuff. From Joshua Pritikin
	  <joshua.pritikin@db.com>
	- VMS Makefile.PL fun.	From pvhp@forte.com (Peter Prymmer)
	- hopefully correct "-lc" fix for SCO.
	- add PPD stuff

	1.20 adds a platform neutral set of C accessible routines if you are
	running 5.005+.  All other changes are packaging changes and build
	fixes(?) for statically linked Perl, SCO, and VMS.

1.19  Tue Sep 29 22:30 1998
	- put VMS gettimeofday() in. Patch is from Sebastian Bazley
	  <seb@stian.demon.co.uk>
	- change GIMME_V to GIMME to help people with older versions of
	  Perl.
	- fix Win32 version of gettimeofday(). It didn't affect anything,
	  but it confuses people reading the code when the return value
	  is backwards (0 is success).
	- fix Makefile.PL (more) so that detection of gettimeofday is
	  more correct.

	1.19 has better VMS support.

1.18  Mon Jul 6 22:40 1998
	- add usleep() for Win32.
	- fix Makefile.PL to fix reported HP/UX feature where unresolved
	  externals still cause an executable to be generated (though no
	  x bit set). Thanks to David Kozinn for report and explanation.
	  Problems with the fix are mine :)

	1.18 has limited Win32 support (no ualarm). Added usleep for Win32.
	Probably buggy. I'm sure I'll hear.

1.17  Wed Jul 1 20:10 1998
	- fix setitimer calls so microseconds is not more than 1000000.
	  Hp/UX 9 doesn't like that. Provided by Roland B Robert, PhD.
	- make Win32. We only get gettimeofday (the select hack doesn't
	  seem to work on my Win95 system).
	- fix test 4 on 01test.t. add test to see if time() and 
	  Time::HiRes::time() are close.

1.16  Wed Nov 12 21:05 1997
	- add missing EXTEND in new gettimeofday scalar code.

	1.16+ should be closer to building out of the box on Linux. Thanks
	to Gisle Aas for patches, and the ualarm equivalent using setitimer.

	If your underlying operating system doesn't implement ualarm(), then
	a fake using setitimer() will be made.  If the OS is missing usleep(),
	a fake one using select() will be made. If a fake can't be made for
	either ualarm() or usleep(), then the corresponding Perl function will
	not be available.  If the OS is missing gettimeofday(), you will get
	unresolved externals, either at link- or run-time.

	This is an improvement; the package used to not even build if
	you were missing any of these bits. Roderick Schertler

	<roderick@argon.org> did all the conditional compilation stuff,
	look at HiRes.pm and the test suites; it's good educational reading.

1.15  Mon Nov 10 21:30 1997
	- HiRes.pm: update pod. Provided by Gisle Aas.
	- HiRes.xs: if gettimeofday() called in scalar context, do
	  something more useful than before. Provided by Gisle Aas.
	- README: tell of xsubpp '-nolinenumber' woes. thanks to
	  Edward Henigin <ed@texas.net> for pointing out the problem.

1.14  Wed Nov 5 9:40 1997
	- Makefile.PL: look for setitimer
	- HiRes.xs: if missing ualarm, but we have setitimer, make up
	  our own setitimer. These were provided by Gisle Aas.

1.13  Tue Nov 4 23:30 1997
	- Makefile.PL: fix autodetect mechanism to do try linking in addition
	  to just compiling; should fix Linux build problem. Fix was provided
	  by Gisle Aas.

1.12  Sun Oct 12 12:00:00 1997
	- Makefile.PL: set XSOPT to '-nolinenumbers' to work around xsubpp bug;
	  you may need to comment this back out if you have an older xsubpp.
	- HiRes.xs: set PROTOTYPES: DISABLE

1.11  Fri Sep 05 16:00:00 1997
	- Makefile.PL:
	  Had some line commented out that shouldn't have been (testing
	  remnants)
	- README:
	  Previous version was corrupted.

1.10  Thu May 22 20:20:00 1997
	- HiRes.xs, HiRes.pm, t/*:
	      -	only compile what we have OS support for (or can 
		fake with select())
	      - only test what we compiled 
	      - gross improvement to the test suite
	      - fix EXPORT_FAIL. 
	  This work was all done by Roderick Schertler
	  <roderick@argon.org>. If you run Linux or
	  one of the other ualarm-less platforms, and you like this 
	  module, let Roderick know; without him, it still wouldn't 
	  be working on those boxes...
	- Makefile.PL: figure out what routines the OS has and
	  only build what we need. These bits were written by Jarkko 
	  Hietaniemi <jhi@iki.fi>. Again, gratitude is due...

1.02  Mon Dec 30 08:00:00 1996
	- HiRes.pm: update documentation to say what to do when missing
	  ualarm() and friends.
	- README: update to warn that ualarm() and friends need to exist

1.01  Fri Oct 17 08:00:00 1996
	- Makefile.PL: make XSPROTOARGS => '-noprototyopes'
	- HiRes.pm: put blank line between __END__ and =head1 so that 
	  pod2man works.

1.00  Tue Sep 03 13:00:00 1996
	- original version; created by h2xs 1.16
