{-# LANGUAGE CPP #-}

module Distribution.Compat.Directory
  ( listDirectory
  , makeAbsolute
  , doesPathExist
  ) where

#if MIN_VERSION_directory(1,2,7)
import System.Directory as Dir hiding (doesPathExist)
import System.Directory (doesPathExist)
#else
import System.Directory as Dir
#endif
#if !MIN_VERSION_directory(1,2,2)
import System.FilePath as Path
#endif

#if !MIN_VERSION_directory(1,2,5)

listDirectory :: FilePath -> IO [FilePath]
listDirectory path =
  filter f `fmap` Dir.getDirectoryContents path
  where f filename = filename /= "." && filename /= ".."

#endif

#if !MIN_VERSION_directory(1,2,2)

makeAbsolute :: FilePath -> IO FilePath
makeAbsolute p | Path.isAbsolute p = return p
               | otherwise         = do
    cwd <- Dir.getCurrentDirectory
    return $ cwd </> p

#endif

#if !MIN_VERSION_directory(1,2,7)

doesPathExist :: FilePath -> IO Bool
doesPathExist path = do
    -- not using Applicative, as this way we can do less IO
    e <- doesDirectoryExist path
    if e
    then return True
    else doesFileExist path

#endif