diff --git a/configure.ac b/configure.ac
index 90845c985db0d38b1af0caf51fb6b59261d934b8..61154f5e530f109cf1e5275b597849b1a56f3a3f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -17,6 +17,7 @@ AC_CHECK_HEADERS([time.h])
 AC_CHECK_FUNCS([gmtime_r localtime_r])
 
 AC_CHECK_FUNCS([clock_gettime])
+AC_CHECK_FUNCS([tzset])
 
 AC_STRUCT_TM
 AC_STRUCT_TIMEZONE
diff --git a/lib/Data/Time/Clock/Internal/CTimespec.hsc b/lib/Data/Time/Clock/Internal/CTimespec.hsc
index 9b162e6c132a23a38bb9e3b1f6494b2162c9c46f..d699cc790246e11e5c124cd6e1c9f224acc1434b 100644
--- a/lib/Data/Time/Clock/Internal/CTimespec.hsc
+++ b/lib/Data/Time/Clock/Internal/CTimespec.hsc
@@ -9,10 +9,11 @@ module Data.Time.Clock.Internal.CTimespec where
 import Foreign
 import Foreign.C
 import System.IO.Unsafe
+import System.Posix.Types
 
 #include <time.h>
 
-type ClockID = #{type clockid_t}
+type ClockID = CClockId
 
 data CTimespec = MkCTimespec CTime CLong
 
@@ -51,7 +52,7 @@ clockGetTime clockid = alloca (\ptspec -> do
     peek ptspec
     )
 
-foreign import capi unsafe "time.h value CLOCK_REALTIME" clock_REALTIME :: ClockID
+foreign import capi unsafe "HsTime.h value HS_CLOCK_REALTIME" clock_REALTIME :: ClockID
 
 clock_TAI :: Maybe ClockID
 clock_TAI =
diff --git a/lib/cbits/HsTime.c b/lib/cbits/HsTime.c
index ae863b833007b5009e7c2234b5322f46093d2be7..6bee24bfa47a512f68157bf137ccc78bcbff02f8 100644
--- a/lib/cbits/HsTime.c
+++ b/lib/cbits/HsTime.c
@@ -10,7 +10,7 @@ long int get_current_timezone_seconds (time_t t,int* pdst,char const* * pname)
     // as Microsoft considers the POSIX named `tzset()` function
     // deprecated (see http://msdn.microsoft.com/en-us/library/ms235384.aspx)
     _tzset();
-#else
+#elif defined(HAVE_TZSET)
     tzset();
 #endif
 
diff --git a/lib/include/HsTime.h b/lib/include/HsTime.h
index 5296437e34205dcaeb135ab50613072aa5628ff6..43dd4377b9326af0aa975de2d0968b3ceeeea190 100644
--- a/lib/include/HsTime.h
+++ b/lib/include/HsTime.h
@@ -18,6 +18,8 @@
 #include <time.h>
 #endif
 
+#define HS_CLOCK_REALTIME (uintptr_t)(CLOCK_REALTIME)
+
 long int get_current_timezone_seconds (time_t,int* pdst,char const* * pname);
 
 #endif