{-# LANGUAGE TemplateHaskell, DeriveDataTypeable #-}
module LibDepGraph
( LibDepGraph
, initLibDepGraph
, ldepRoot
, ldepGraph
, ldepSymLinks
, ldepResolveSymlink
)
where
-------------------------------------------------------------------------
-- Imports
-------------------------------------------------------------------------
import Data.Lens.Common
import Data.Lens.Template
-- import Data.Graph.GraphVisit
import qualified Data.Map as Map
import Data.Typeable
-- import qualified Data.Set as Set
-- import Control.Monad
-- import Control.Monad.State.Strict
-- import Control.Monad.Trans
-- import Control.Monad.Error.Class
-- import qualified Control.Exception as CE
-- import System.Console.GetOpt
-- import System.Environment
-- import System.IO
-- import System.Exit
-- import System.FilePath
-- import System.Directory
-- import System.Cmd
-- import System.Process
-- import System.Posix.Process
-- import Opts
-- import State
import Cmds (OToolOutput)
-------------------------------------------------------------------------
-- Library dependency graph
-------------------------------------------------------------------------
data LibDepGraph = LibDepGraph
{ _ldepRoot :: FilePath
, _ldepGraph :: Map.Map FilePath OToolOutput
, _ldepSymLinks :: Map.Map FilePath FilePath
}
deriving (Show,Typeable)
initLibDepGraph :: FilePath -> LibDepGraph
initLibDepGraph f = LibDepGraph f Map.empty Map.empty
makeLens ''LibDepGraph
-------------------------------------------------------------------------
-- Resolve symlink via LibDepGraph
-------------------------------------------------------------------------
-- | Resolve symlink via LibDepGraph
ldepResolveSymlink :: LibDepGraph -> FilePath -> FilePath
ldepResolveSymlink ldep fnm = maybe fnm (ldepResolveSymlink ldep) $ Map.lookup fnm $ ldep ^. ldepSymLinks