{-# LANGUAGE CPP #-}
-- | This module is responsible for finding out where the runtime system
--   and base library code is installed.
--
module DDC.Code.Config
        (locateBaseLibrary)
where

-------------------------------------------------------------------------------
-- When the compiler has been installed via 'cabal' install then we don't
-- have the full development source tree. 
--
-- In this case the ddc-code.cabal file defines the preprocessesor flag
-- DDC_CABAL_INSTALLED, which tells us we can import the Cabal generated
-- Paths_ddc_code module and ask it where its put our files.
-- 
#if defined(DDC_CABAL_INSTALLED)
import System.FilePath
import Paths_ddc_code           as Cabal

locateBaseLibrary :: IO FilePath
locateBaseLibrary
 = do   -- The rest of the files are in the same directory as the LICENSE
        -- file, so we can just ask for that one and take the directory name.
        licenseName     <- Cabal.getDataFileName "LICENSE"
        let basePath    = takeDirectory licenseName
        return basePath

-------------------------------------------------------------------------------
-- When the compiler is built from the development source tree via make
-- this code is in "packages/ddc-code", and we need to run 'ddc' from the 
-- root of the source tree so it can find this path.
#else
locateBaseLibrary :: IO FilePath
locateBaseLibrary 
        = return "packages/ddc-code"
#endif