packages feed

macosx-make-standalone-0.1: src/LibDepGraph.hs

{-# 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