packages feed

ide-backend-server-0.10.0: RTS.hs

{-# LANGUAGE TemplateHaskell #-}
module RTS ( RtsInfo(..), deployRts )

where

import Data.FileEmbed (embedFile)
import System.IO.Temp (createTempDirectory)
import System.FilePath ( (</>) )

import qualified Codec.Archive.Tar as Tar
import qualified Codec.Compression.GZip as GZip
import qualified Data.ByteString as BS
import qualified Data.ByteString.Lazy as LBS


-- | A tarball with a relocatable package-db, containing the rts.
--   File "embedded-rts.tgz" is automatically created by the build system.
rts_tarball :: BS.ByteString
rts_tarball = $(embedFile "embedded-rts.tgz")

data RtsInfo = RtsInfo { rtsPackageDb :: FilePath, rtsPackage :: String }


-- | Extracts the embedded rts-package to a temporary directory
--   inside the given directory, and returns its location.
deployRts :: FilePath -> IO RtsInfo
deployRts dir = do
  deployDir <- createTempDirectory dir "rts."

  extractTarball (LBS.fromStrict rts_tarball) deployDir

  return RtsInfo {
    rtsPackageDb = deployDir </> "embedded-rts" </> "pkgdb"
  , rtsPackage   = "ide-backend-rts"
  }
 

extractTarball :: LBS.ByteString -> FilePath -> IO ()
extractTarball tarball dest =
  Tar.unpack dest $ Tar.read $ GZip.decompress $ tarball