on master help sign in
Merge pull request #42 from tweag/master

Allow katip to be build under Windows.

commit21dc50fe63e1b3ba5b6df1197082c0077c75c00e authorMichael Xavier <michael@michaelxavier.net> dateWed 14 Dec 2016, 19:22 (10 years ago) parent63abb86c9f65a0
4 files changed+46−4
katip/katip.cabal+6−1 katip/src/Katip/Compat.hs+30 katip/src/Katip/Core.hs+5 katip/test/Katip/Tests/Scribes/Handle.hs+5−3
katip/katip.cabal+6−1
@@ -68,7 +68,6 @@ library
6868 , time >= 1 && < 1.7
6969 , transformers >= 0.3 && < 0.6
7070 , transformers-compat
71− , unix >= 2.5 && < 2.8
7271 , unordered-containers >= 0.2 && < 0.3
7372 , monad-control >= 1.0 && < 1.1
7473 , mtl >= 2.0 && < 2.3
@@ -83,6 +82,12 @@ library
8382 ghc-options: -Wall
8483 if flag(lib-Werror)
8584 ghc-options: -Werror
85+ if os(windows)
86+ build-depends: Win32 >=2.3 && <2.5
87+ other-modules: Katip.Compat
88+ else
89+ build-depends: unix >= 2.5 && <2.8
90+
8691
8792test-suite test
8893 type: exitcode-stdio-1.0
katip/src/Katip/Compat.hsnew file+30
@@ -0,0 +1,30 @@
1+{-# LANGUAGE ForeignFunctionInterface #-}
2+{-# LANGUAGE CPP #-}
3+module Katip.Compat
4+ ( ProcessID
5+ , getProcessID
6+ ) where
7+
8+import System.Win32.Process
9+
10+type ProcessID = ProcessId
11+
12+#if !MIN_VERSION_Win32(2,4,0)
13+
14+#if defined(i386_HOST_ARCH)
15+# define WINDOWS_CCONV stdcall
16+#elif defined(x86_64_HOST_ARCH)
17+# define WINDOWS_CCONV ccall
18+#else
19+# error Unknown mingw32 arch
20+#endif
21+
22+foreign import WINDOWS_CCONV unsafe "windows.h GetCurrentProcessId"
23+ c_GetCurrentProcessId :: IO ProcessId
24+
25+getProcessID :: IO ProcessID
26+getProcessID = c_GetCurrentProcessId
27+#else
28+getProcessID :: IO ProcessID
29+getProcessID = getCurrentProcessId
30+#endif
katip/src/Katip/Core.hs+5
@@ -63,7 +63,12 @@ import qualified Language.Haskell.TH.Syntax as TH
6363import Lens.Micro
6464import Lens.Micro.TH
6565import Network.HostName
66+#if mingw32_HOST_OS
67+import Katip.Compat
68+#else
6669import System.Posix
70+#endif
71+
6772-------------------------------------------------------------------------------
6873
6974
katip/test/Katip/Tests/Scribes/Handle.hs+5−3
@@ -7,10 +7,11 @@ module Katip.Tests.Scribes.Handle
77import Control.Monad
88import Data.Aeson
99import qualified Data.ByteString.Lazy as BL
10+import qualified Data.ByteString.Char8 as B
1011import Data.Monoid
1112import Data.Text (Text)
1213import qualified Data.Text as T
13−import qualified Data.Text.IO as T
14+import qualified Data.Text.Encoding as T
1415import qualified Data.Text.Lazy as LT
1516import qualified Data.Text.Lazy.Builder as LT
1617import Data.Time
@@ -211,13 +212,14 @@ mkUTCTime y mt d h mn s = UTCTime day dt
211212-------------------------------------------------------------------------------
212213writeTextLog :: (FilePath, Handle) -> IO (BL.ByteString)
213214writeTextLog (path, h) = do
214− mapM_ (T.hPutStrLn h . formatOne) genItems
215− mapM_ (T.hPutStrLn h . formatOne) genTypedItems
215+ mapM_ (put . formatOne) genItems
216+ mapM_ (put . formatOne) genTypedItems
216217 hClose h
217218 BL.readFile path
218219 where
219220 formatOne :: LogItem a => Item a -> Text
220221 formatOne = LT.toStrict . LT.toLazyText . formatItem False V3
222+ put = B.hPutStrLn h . T.encodeUtf8
221223
222224setupTempFile :: IO (FilePath, Handle)
223225setupTempFile = do