1
{-# LANGUAGE OverloadedStrings #-}
3
module Interface.Command.Register where
5
import Control.Applicative
6
import qualified Data.ByteString.Char8
8
import qualified Distribution.ParseUtils
10
import qualified Distribution.InstalledPackageInfo
12
import System.Environment
14
import qualified Agda.Packaging.Config
16
import qualified Agda.Packaging.Database
18
import qualified Agda.Packaging.Monad
20
import qualified Agda.Packaging.Types
24
import Interface.Options
27
--------------------------------------------------------------------------------
29
envRegex :: BS.ByteString
30
envRegex = BS.pack "\\${[a-zA-Z0-9_]+}"
32
envSubst :: BS.ByteString -> IO BS.ByteString
34
| ("${" `BS.isPrefixOf`) s
35
&& ("}" `BS.isSuffixOf`) s = BS.pack <$> result
36
| otherwise = return s
40
$ BS.takeWhile (/= '}')
43
registerPkg :: FilePath -> Agda.AgdaPkg Opt ()
44
registerPkg fileName = undefined
48
npkgDBs <- Agda.asks Agda.configPkgDBStack
52
contents <- Agda.liftIO $
53
if fileName == "-" then
57
expandedContents <- return contents
58
pkgInfo <- parsePkgInfo expandedContents
59
let cond pkgInfo' = Cabal.installedPackageId pkgInfo'
60
/= Cabal.installedPackageId pkgInfo
61
newDB = pkgInfo : filter cond $ Agda.db dbToModify
62
Agda.writePkgDBToFile newDB $ Agda.dbName dbToModify
64
parsePkgInfo :: BS.ByteString
65
-> Agda.AgdaPkg Opt Cabal.InstalledPackageInfo
66
parsePkgInfo contents =
67
case Cabal.parseInstalledPackageInfo $ BS.unpack contents of
68
Cabal.ParseFailed err ->
69
case Cabal.locatedErrorMsg err of
70
(Nothing, s) -> Agda.liftIO $ die s
71
(Just l , s) -> Agda.liftIO $ die $ show l ++ ": " ++ s
72
Cabal.ParseOk _warns res -> do