From 90eeb7bf0a5ea05b4c072e452eed1df9d0090abf Mon Sep 17 00:00:00 2001 From: Dylan Simon Date: Mon, 15 May 2017 16:47:44 -0400 Subject: [PATCH] Make commands build on ghc 7.10 as well --- cmd/unzip.hs | 9 ++++++++- cmd/zip.hs | 13 +++++++++++- zip-stream.cabal | 52 +++++++++++++++++++----------------------------- 3 files changed, 41 insertions(+), 33 deletions(-) diff --git a/cmd/unzip.hs b/cmd/unzip.hs index a226f54..a676e8e 100644 --- a/cmd/unzip.hs +++ b/cmd/unzip.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} {-# LANGUAGE RecordWildCards #-} import Control.Monad (when, unless) 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.Binary as CB 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.Exit (exitFailure) 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 write C..| CB.sinkHandle h liftIO $ hClose h +#if MIN_VERSION_directory(1,2,3) liftIO $ setModificationTime name $ localTimeToUTC utc zipEntryTime -- FIXME: timezone +#endif where name = BSC.unpack $ BSC.dropWhile ('/' ==) zipEntryName -- should we utf8 decode? start (Right _) = fail "Unexpected leading or directory data contents" write = C.await >>= maybe diff --git a/cmd/zip.hs b/cmd/zip.hs index 3934c31..98304e4 100644 --- a/cmd/zip.hs +++ b/cmd/zip.hs @@ -1,3 +1,4 @@ +{-# LANGUAGE CPP #-} import Control.Monad (filterM, void) import Control.Monad.IO.Class (MonadIO, liftIO) import Control.Monad.Trans.Resource (MonadResource, runResourceT) @@ -7,7 +8,13 @@ import qualified Data.Conduit.Binary as CB import Data.List (foldl') import Data.Time.LocalTime (utcToLocalTime, utc) 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.Exit (exitFailure) import System.FilePath.Posix (()) -- zip files only want forward slashes @@ -38,7 +45,11 @@ generate (p:paths) = do isd <- liftIO $ doesDirectoryExist p if isd then do +#if MIN_VERSION_directory(1,2,6) 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) generate $ dl ++ paths else do diff --git a/zip-stream.cabal b/zip-stream.cabal index 7352518..3e51bac 100644 --- a/zip-stream.cabal +++ b/zip-stream.cabal @@ -15,10 +15,6 @@ source-repository head type: git location: https://github.com/dylex/zip-stream -flag commands - description: Build command-line zip/unzip testing programs - default: True - library exposed-modules: Codec.Archive.Zip.Conduit.Types @@ -45,40 +41,34 @@ library zlib executable unzip-stream - if !flag(commands) - buildable: False main-is: unzip.hs hs-source-dirs: cmd default-language: Haskell2010 ghc-options: -Wall - if flag(commands) - build-depends: - base >=4.9 && <5, - bytestring, - conduit, - conduit-extra, - directory >= 1.2.3, - filepath, - time, - zip-stream - else - buildable: False + build-depends: + base >=4.8 && <5, + bytestring, + conduit, + conduit-extra, + directory >= 1.2.2, + filepath, + time, + transformers, + zip-stream executable zip-stream main-is: zip.hs hs-source-dirs: cmd default-language: Haskell2010 ghc-options: -Wall - if flag(commands) - build-depends: - base >=4.9 && <5, - bytestring, - conduit, - conduit-extra, - directory >= 1.2.6, - filepath, - resourcet, - time, - zip-stream - else - buildable: False + build-depends: + base >=4.8 && <5, + bytestring, + conduit, + conduit-extra, + directory >= 1.2.2, + filepath, + resourcet, + time, + transformers, + zip-stream