diff --git a/Language/Preprocessor/Cpphs/MacroPass.hs b/Language/Preprocessor/Cpphs/MacroPass.hs
--- a/Language/Preprocessor/Cpphs/MacroPass.hs
+++ b/Language/Preprocessor/Cpphs/MacroPass.hs
@@ -30,9 +30,9 @@
 import System.IO.Unsafe (unsafeInterleaveIO)
 import Control.Monad    ((=<<))
 --import System.Time       (getClockTime, toCalendarTime, formatCalendarTime)
---import System.Locale     (defaultTimeLocale)
 import Data.Time.Clock  (getCurrentTime)
-import Data.Time.Format (formatTime, defaultTimeLocale)
+import Data.Time.Format (formatTime)
+import TimeCompat       (defaultTimeLocale)
 
 noPos :: Posn
 noPos = newfile "preDefined"
diff --git a/cpphs.cabal b/cpphs.cabal
--- a/cpphs.cabal
+++ b/cpphs.cabal
@@ -1,9 +1,9 @@
 Name: cpphs
-Version: 1.20.9
+Version: 1.20.9.1
 Copyright: 2004-2017, Malcolm Wallace
 License: LGPL
 License-File: LICENCE-LGPL
-Cabal-Version: >= 1.6
+Cabal-Version: >= 1.8
 Author: Malcolm Wallace <Malcolm.Wallace@me.com>
 Maintainer: Malcolm Wallace <Malcolm.Wallace@me.com>
 Homepage: http://projects.haskell.org/cpphs/
@@ -23,8 +23,38 @@
 Build-type: Simple
 Extra-Source-Files: README, LICENCE-GPL, LICENCE-commercial, CHANGELOG, docs/cpphs.1, docs/index.html
 
+tested-with:
+  ghc ==8.10.1
+   || ==8.8.3
+   || ==8.6.5
+   || ==8.4.4
+   || ==8.2.2
+   || ==8.0.2
+   || ==7.10.3
+   || ==7.8.4
+   || ==7.6.3
+   || ==7.4.2
+   || ==7.2.2
+   || ==7.0.4
+
+flag old-locale
+  description: If true, use old-locale, otherwise use time 1.5 or newer.
+  manual:      False
+  default:     False
+
 Library
-    Build-Depends: base>3&&<6, time, directory, polyparse>=1.9
+    Build-Depends: base >= 4.3 && <5, directory <1.4, polyparse>=1.13 && <1.14
+
+    if flag(old-locale)
+      Build-Depends:
+          old-locale  >=1.0.0.2 && <1.1
+        , time        >=0       && <1.5
+      Hs-Source-Dirs: . old
+
+    else
+      Build-Depends: time >=1.5 && <1.11
+      Hs-Source-Dirs: . new
+
     Exposed-Modules:
         Language.Preprocessor.Cpphs
         Language.Preprocessor.Unlit
@@ -38,10 +68,22 @@
         Language.Preprocessor.Cpphs.RunCpphs
         Language.Preprocessor.Cpphs.SymTab
         Language.Preprocessor.Cpphs.Tokenise
+        TimeCompat
 
 Executable cpphs
-    Build-Depends: base>3&&<6, time, directory, polyparse>=1.9
+    Build-Depends: base>=3&&<6, directory <1.4, polyparse>=1.13 && <1.14
     Main-Is: cpphs.hs
+
+    if flag(old-locale)
+      Build-Depends:
+          old-locale  >=1.0.0.2 && <1.1
+        , time        >=0       && <1.5
+      Hs-Source-Dirs: . old
+
+    else
+      Build-Depends: time >=1.5 && <1.11
+      Hs-Source-Dirs: . new
+
     Other-Modules:
         Language.Preprocessor.Cpphs
         Language.Preprocessor.Unlit
@@ -54,7 +96,8 @@
         Language.Preprocessor.Cpphs.RunCpphs
         Language.Preprocessor.Cpphs.SymTab
         Language.Preprocessor.Cpphs.Tokenise
+        TimeCompat
 
 Source-Repository head
-    Type:     darcs
-    Location: http://code.haskell.org/cpphs
+    Type:     git
+    Location: https://github.com/hackage-trustees/malcolm-wallace-universe
diff --git a/new/TimeCompat.hs b/new/TimeCompat.hs
new file mode 100644
--- /dev/null
+++ b/new/TimeCompat.hs
@@ -0,0 +1,2 @@
+module TimeCompat (defaultTimeLocale) where
+import Data.Time.Format (defaultTimeLocale)
diff --git a/old/TimeCompat.hs b/old/TimeCompat.hs
new file mode 100644
--- /dev/null
+++ b/old/TimeCompat.hs
@@ -0,0 +1,4 @@
+module TimeCompat (defaultTimeLocale, formatTime) where
+
+import Data.Time.Format (formatTime)
+import System.Locale    (defaultTimeLocale)
