hackport-0.6.6: cabal/cabal-testsuite/src/Test/Cabal/Workdir.hs
{-# LANGUAGE CPP #-}
-- | Functions for interrogating the current working directory
module Test.Cabal.Workdir where
import Distribution.Simple.Setup
import Distribution.Simple.Configure
import System.Directory
import System.FilePath
#if MIN_VERSION_base(4,6,0)
import System.Environment ( getExecutablePath )
#endif
-- | Guess what the dist directory of a running executable is,
-- by using the conventional layout of built executables
-- in relation to the top of a dist directory. Will not work
-- if the executable has been installed somewhere else.
guessDistDir :: IO FilePath
guessDistDir = do
#if MIN_VERSION_base(4,6,0)
exe_path <- canonicalizePath =<< getExecutablePath
let dist0 = dropFileName exe_path </> ".." </> ".."
b <- doesFileExist (dist0 </> "setup-config")
#else
let dist0 = error "no path"
b = False
#endif
if b then canonicalizePath dist0
else findDistPrefOrDefault NoFlag >>= canonicalizePath