Hi,

> I have been pondering a good way to make it add the header definition 
> properly ( ? use specific headers such as string.h injected ahead of the 
> system search directory and "include_next", perhaps?) and also possibly to 
> make each definition selectable, or at least OS-version groups blocked off 
> with guards.

I’ve been experimenting in the direction of the above, and I think there is 
some milage to this approach.

I’ve attached a couple files to this mail.

time.cpp - A basic test application

time.h - A wrapping header that uses include_next to wrap time.h adding an 
implementation of clock_gettime for OSX10.11 and older.

I *think* I have made it reasonably complete, in that if I compare what I get 
on macOS10.14 (so using the system implementation) to that on OSX10.10 I see

 > ./mac1014.exe 
CLOCK_REALTIME  1540330516865744000
CLOCK_REALTIME  1540330516865769000
CLOCK_REALTIME  1540330516865773000
CLOCK_REALTIME  1540330516865776000
CLOCK_REALTIME  1540330516865779000
CLOCK_REALTIME  1540330516865782000
CLOCK_REALTIME  1540330516865785000
CLOCK_REALTIME  1540330516865789000
CLOCK_REALTIME  1540330516865792000
CLOCK_MONOTONIC 692301875594000
CLOCK_MONOTONIC 692301875598000
CLOCK_MONOTONIC 692301875601000
CLOCK_MONOTONIC 692301875606000
CLOCK_MONOTONIC 692301875609000
CLOCK_MONOTONIC 692301875612000
CLOCK_MONOTONIC 692301875615000
CLOCK_MONOTONIC 692301875619000
CLOCK_MONOTONIC 692301875622000

 > ./mac1010.exe 
CLOCK_REALTIME  1540330771661752000
CLOCK_REALTIME  1540330771662759000
CLOCK_REALTIME  1540330771662770000
CLOCK_REALTIME  1540330771662776000
CLOCK_REALTIME  1540330771662783000
CLOCK_REALTIME  1540330771662789000
CLOCK_REALTIME  1540330771662795000
CLOCK_REALTIME  1540330771662801000
CLOCK_REALTIME  1540330771662807000
CLOCK_MONOTONIC 3731777139000
CLOCK_MONOTONIC 3731777145000
CLOCK_MONOTONIC 3731777151000
CLOCK_MONOTONIC 3731777157000
CLOCK_MONOTONIC 3731777162000
CLOCK_MONOTONIC 3731777168000
CLOCK_MONOTONIC 3731777174000
CLOCK_MONOTONIC 3731777180000
CLOCK_MONOTONIC 3731777186000


The REALTIME clock is supposed to give values roughly the same in both cases, 
as these are supposed to be absolute wall clock times since the UNIX epoch. 

MONOTONIC is allowed to have different values, as its w.r.t. different points 
for each machine. 

Compilation is just a case of

 > ls *.h *.cpp
time.cpp        time.h
 > clang++ -I. time.cpp -o mac1010.exe
 >

If you remove the -I. then on 10.10 it correctly fails.

 > clang++ time.cpp -o mac1010.exe
time.cpp:26:45: error: use of undeclared identifier 'CLOCK_REALTIME'
    std::cout << "CLOCK_REALTIME  " << time(CLOCK_REALTIME) << std::endl;
                                            ^
time.cpp:31:45: error: use of undeclared identifier 'CLOCK_MONOTONIC'
    std::cout << "CLOCK_MONOTONIC " << time(CLOCK_MONOTONIC) << std::endl;
                                            ^
2 errors generated.

so the include_next seems to work OK.

I have tried with a number of gcc and clang compilers, and it seems fine with 
them all.

So I *think* we could consider including the wrapper time.h in the 
snowleopardfixes port, and then as long as builds use -I${prefix}/include then 
should pick it up without having to patch the code in any way, which is my aim 
here...

Chris

Attachment: time.h
Description: Binary data

Attachment: time.cpp
Description: Binary data

Attachment: smime.p7s
Description: S/MIME cryptographic signature

Reply via email to