aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrent Cook <bcook@openbsd.org>2018-03-23 18:15:50 -0500
committerBrent Cook <bcook@openbsd.org>2018-03-23 18:15:50 -0500
commit31a66e1c5bc4fb09eac7b425445ef405f88e55af (patch)
treef875b56b8e799a675c15aba830c1ba9e127728a3
parent28041ddc32bb8cb3cc1e1b5bed0b73402bf59485 (diff)
parent31c98c2969f70b2db3e866352ec027f7b965c406 (diff)
downloadportable-31a66e1c5bc4fb09eac7b425445ef405f88e55af.tar.gz
portable-31a66e1c5bc4fb09eac7b425445ef405f88e55af.tar.bz2
portable-31a66e1c5bc4fb09eac7b425445ef405f88e55af.zip
Land #412, fix builds for macos 10.11
-rw-r--r--CMakeLists.txt6
-rw-r--r--apps/openssl/Makefile.am6
-rw-r--r--apps/openssl/compat/clock_gettime_osx.c26
-rw-r--r--include/compat/sys/time.h4
-rw-r--r--include/compat/time.h18
-rw-r--r--m4/check-libc.m410
6 files changed, 62 insertions, 8 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index a67405a..03c87a4 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -283,6 +283,12 @@ endif()
283if(WIN32) 283if(WIN32)
284 set(OPENSSL_LIBS ${OPENSSL_LIBS} ws2_32) 284 set(OPENSSL_LIBS ${OPENSSL_LIBS} ws2_32)
285endif() 285endif()
286
287check_function_exists(clock_gettime HAVE_CLOCK_GETTIME)
288if(HAVE_CLOCK_GETTIME)
289 add_definitions(-DHAVE_CLOCK_GETTIME)
290endif()
291
286if(CMAKE_SYSTEM_NAME MATCHES "Linux") 292if(CMAKE_SYSTEM_NAME MATCHES "Linux")
287 check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME) 293 check_library_exists(rt clock_gettime "time.h" HAVE_CLOCK_GETTIME)
288 if (HAVE_CLOCK_GETTIME) 294 if (HAVE_CLOCK_GETTIME)
diff --git a/apps/openssl/Makefile.am b/apps/openssl/Makefile.am
index 9b9eb10..f100adb 100644
--- a/apps/openssl/Makefile.am
+++ b/apps/openssl/Makefile.am
@@ -74,6 +74,12 @@ openssl_SOURCES += compat/poll_win.c
74endif 74endif
75endif 75endif
76 76
77if !HAVE_CLOCK_GETTIME
78if HOST_DARWIN
79openssl_SOURCES += compat/clock_gettime_osx.c
80endif
81endif
82
77if !HAVE_STRTONUM 83if !HAVE_STRTONUM
78openssl_SOURCES += compat/strtonum.c 84openssl_SOURCES += compat/strtonum.c
79endif 85endif
diff --git a/apps/openssl/compat/clock_gettime_osx.c b/apps/openssl/compat/clock_gettime_osx.c
new file mode 100644
index 0000000..5545187
--- /dev/null
+++ b/apps/openssl/compat/clock_gettime_osx.c
@@ -0,0 +1,26 @@
1#include <time.h>
2
3#include <mach/mach_time.h>
4#define ORWL_NANO (+1.0E-9)
5#define ORWL_GIGA UINT64_C(1000000000)
6
7int
8clock_gettime(clockid_t clock_id, struct timespec *tp)
9{
10 static double orwl_timebase = 0.0;
11 static uint64_t orwl_timestart = 0;
12
13 if (!orwl_timestart) {
14 mach_timebase_info_data_t tb = { 0 };
15 mach_timebase_info(&tb);
16 orwl_timebase = tb.numer;
17 orwl_timebase /= tb.denom;
18 orwl_timestart = mach_absolute_time();
19 }
20
21 double diff = (mach_absolute_time() - orwl_timestart) * orwl_timebase;
22 tp->tv_sec = diff * ORWL_NANO;
23 tp->tv_nsec = diff - (tp->tv_sec * ORWL_GIGA);
24
25 return 0;
26}
diff --git a/include/compat/sys/time.h b/include/compat/sys/time.h
index 3d31985..76428c1 100644
--- a/include/compat/sys/time.h
+++ b/include/compat/sys/time.h
@@ -13,10 +13,6 @@ int gettimeofday(struct timeval *tp, void *tzp);
13#include_next <sys/time.h> 13#include_next <sys/time.h>
14#endif 14#endif
15 15
16#ifndef CLOCK_MONOTONIC
17#define CLOCK_MONOTONIC CLOCK_REALTIME
18#endif
19
20#ifndef timersub 16#ifndef timersub
21#define timersub(tvp, uvp, vvp) \ 17#define timersub(tvp, uvp, vvp) \
22 do { \ 18 do { \
diff --git a/include/compat/time.h b/include/compat/time.h
index df65530..dc460ef 100644
--- a/include/compat/time.h
+++ b/include/compat/time.h
@@ -13,6 +13,9 @@
13#include_next <time.h> 13#include_next <time.h>
14#endif 14#endif
15 15
16#ifndef LIBCRYPTOCOMPAT_TIME_H
17#define LIBCRYPTOCOMPAT_TIME_H
18
16#ifdef _WIN32 19#ifdef _WIN32
17struct tm *__gmtime_r(const time_t * t, struct tm * tm); 20struct tm *__gmtime_r(const time_t * t, struct tm * tm);
18#define gmtime_r(tp, tm) __gmtime_r(tp, tm) 21#define gmtime_r(tp, tm) __gmtime_r(tp, tm)
@@ -22,6 +25,19 @@ struct tm *__gmtime_r(const time_t * t, struct tm * tm);
22time_t timegm(struct tm *tm); 25time_t timegm(struct tm *tm);
23#endif 26#endif
24 27
28#ifndef CLOCK_MONOTONIC
29#define CLOCK_MONOTONIC CLOCK_REALTIME
30#endif
31
32#ifndef CLOCK_REALTIME
33#define CLOCK_REALTIME 0
34#endif
35
36#ifndef HAVE_CLOCK_GETTIME
37typedef int clockid_t;
38int clock_gettime(clockid_t clock_id, struct timespec *tp);
39#endif
40
25#ifndef timespecsub 41#ifndef timespecsub
26#define timespecsub(tsp, usp, vsp) \ 42#define timespecsub(tsp, usp, vsp) \
27 do { \ 43 do { \
@@ -33,3 +49,5 @@ time_t timegm(struct tm *tm);
33 } \ 49 } \
34 } while (0) 50 } while (0)
35#endif 51#endif
52
53#endif
diff --git a/m4/check-libc.m4 b/m4/check-libc.m4
index cacdd17..1fff77e 100644
--- a/m4/check-libc.m4
+++ b/m4/check-libc.m4
@@ -126,11 +126,13 @@ AM_CONDITIONAL([HAVE_ARC4RANDOM_BUF],
126 -a "x$ac_cv_func_arc4random_buf" = xyes]) 126 -a "x$ac_cv_func_arc4random_buf" = xyes])
127 127
128# Check for getentropy fallback dependencies 128# Check for getentropy fallback dependencies
129AC_CHECK_FUNC([getauxval]) 129AC_CHECK_FUNCS([getauxval])
130AC_SEARCH_LIBS([clock_gettime],[rt posix4])
131AC_CHECK_FUNC([clock_gettime])
132AC_SEARCH_LIBS([dl_iterate_phdr],[dl]) 130AC_SEARCH_LIBS([dl_iterate_phdr],[dl])
133AC_CHECK_FUNC([dl_iterate_phdr]) 131AC_CHECK_FUNCS([dl_iterate_phdr])
132
133AC_SEARCH_LIBS([clock_gettime],[rt posix4])
134AC_CHECK_FUNCS([clock_gettime])
135AM_CONDITIONAL([HAVE_CLOCK_GETTIME], [test "x$ac_cv_func_clock_gettime" = xyes])
134]) 136])
135 137
136AC_DEFUN([CHECK_VA_COPY], [ 138AC_DEFUN([CHECK_VA_COPY], [