Make commands build on ghc 7.10 as well

This commit is contained in:
Dylan Simon 2017-05-15 16:47:44 -04:00
parent 47f13c3f3d
commit 90eeb7bf0a
3 changed files with 41 additions and 33 deletions

View File

@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE RecordWildCards #-} {-# LANGUAGE RecordWildCards #-}
import Control.Monad (when, unless) import Control.Monad (when, unless)
import Control.Monad.IO.Class (liftIO) import Control.Monad.IO.Class (liftIO)
@ -6,7 +7,11 @@ import qualified Data.ByteString.Char8 as BSC
import qualified Data.Conduit as C import qualified Data.Conduit as C
import qualified Data.Conduit.Binary as CB import qualified Data.Conduit.Binary as CB
import Data.Time.LocalTime (localTimeToUTC, utc) import Data.Time.LocalTime (localTimeToUTC, utc)
import System.Directory (createDirectoryIfMissing, setModificationTime) import System.Directory (createDirectoryIfMissing
#if MIN_VERSION_directory(1,2,3)
, setModificationTime
#endif
)
import System.Environment (getProgName, getArgs) import System.Environment (getProgName, getArgs)
import System.Exit (exitFailure) import System.Exit (exitFailure)
import System.FilePath.Posix (takeDirectory) -- zip files only use forward slashes import System.FilePath.Posix (takeDirectory) -- zip files only use forward slashes
@ -26,7 +31,9 @@ extract = C.awaitForever start where
mapM_ (liftIO . hSetFileSize h . toInteger) zipEntrySize mapM_ (liftIO . hSetFileSize h . toInteger) zipEntrySize
write C..| CB.sinkHandle h write C..| CB.sinkHandle h
liftIO $ hClose h liftIO $ hClose h
#if MIN_VERSION_directory(1,2,3)
liftIO $ setModificationTime name $ localTimeToUTC utc zipEntryTime -- FIXME: timezone liftIO $ setModificationTime name $ localTimeToUTC utc zipEntryTime -- FIXME: timezone
#endif
where name = BSC.unpack $ BSC.dropWhile ('/' ==) zipEntryName -- should we utf8 decode? where name = BSC.unpack $ BSC.dropWhile ('/' ==) zipEntryName -- should we utf8 decode?
start (Right _) = fail "Unexpected leading or directory data contents" start (Right _) = fail "Unexpected leading or directory data contents"
write = C.await >>= maybe write = C.await >>= maybe

View File

@ -1,3 +1,4 @@
{-# LANGUAGE CPP #-}
import Control.Monad (filterM, void) import Control.Monad (filterM, void)
import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.IO.Class (MonadIO, liftIO)
import Control.Monad.Trans.Resource (MonadResource, runResourceT) import Control.Monad.Trans.Resource (MonadResource, runResourceT)
@ -7,7 +8,13 @@ import qualified Data.Conduit.Binary as CB
import Data.List (foldl') import Data.List (foldl')
import Data.Time.LocalTime (utcToLocalTime, utc) import Data.Time.LocalTime (utcToLocalTime, utc)
import qualified System.Console.GetOpt as Opt import qualified System.Console.GetOpt as Opt
import System.Directory (doesDirectoryExist, getModificationTime, isSymbolicLink, listDirectory) import System.Directory (doesDirectoryExist, getModificationTime
#if MIN_VERSION_directory(1,2,6)
, isSymbolicLink, listDirectory
#else
, getDirectoryContents
#endif
)
import System.Environment (getProgName, getArgs) import System.Environment (getProgName, getArgs)
import System.Exit (exitFailure) import System.Exit (exitFailure)
import System.FilePath.Posix ((</>)) -- zip files only want forward slashes import System.FilePath.Posix ((</>)) -- zip files only want forward slashes
@ -38,7 +45,11 @@ generate (p:paths) = do
isd <- liftIO $ doesDirectoryExist p isd <- liftIO $ doesDirectoryExist p
if isd if isd
then do then do
#if MIN_VERSION_directory(1,2,6)
dl <- liftIO $ filterM (fmap not . isSymbolicLink) . map (p </>) =<< listDirectory p dl <- liftIO $ filterM (fmap not . isSymbolicLink) . map (p </>) =<< listDirectory p
#else
dl <- liftIO $ filter (`notElem` [".",".."]) . map (p </>) <$> getDirectoryContents p
#endif
C.yield (e{ zipEntryName = zipEntryName e `BSC.snoc` '/', zipEntrySize = Just 0 }, mempty) C.yield (e{ zipEntryName = zipEntryName e `BSC.snoc` '/', zipEntrySize = Just 0 }, mempty)
generate $ dl ++ paths generate $ dl ++ paths
else do else do

View File

@ -15,10 +15,6 @@ source-repository head
type: git type: git
location: https://github.com/dylex/zip-stream location: https://github.com/dylex/zip-stream
flag commands
description: Build command-line zip/unzip testing programs
default: True
library library
exposed-modules: exposed-modules:
Codec.Archive.Zip.Conduit.Types Codec.Archive.Zip.Conduit.Types
@ -45,40 +41,34 @@ library
zlib zlib
executable unzip-stream executable unzip-stream
if !flag(commands)
buildable: False
main-is: unzip.hs main-is: unzip.hs
hs-source-dirs: cmd hs-source-dirs: cmd
default-language: Haskell2010 default-language: Haskell2010
ghc-options: -Wall ghc-options: -Wall
if flag(commands) build-depends:
build-depends: base >=4.8 && <5,
base >=4.9 && <5, bytestring,
bytestring, conduit,
conduit, conduit-extra,
conduit-extra, directory >= 1.2.2,
directory >= 1.2.3, filepath,
filepath, time,
time, transformers,
zip-stream zip-stream
else
buildable: False
executable zip-stream executable zip-stream
main-is: zip.hs main-is: zip.hs
hs-source-dirs: cmd hs-source-dirs: cmd
default-language: Haskell2010 default-language: Haskell2010
ghc-options: -Wall ghc-options: -Wall
if flag(commands) build-depends:
build-depends: base >=4.8 && <5,
base >=4.9 && <5, bytestring,
bytestring, conduit,
conduit, conduit-extra,
conduit-extra, directory >= 1.2.2,
directory >= 1.2.6, filepath,
filepath, resourcet,
resourcet, time,
time, transformers,
zip-stream zip-stream
else
buildable: False