Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 9 additions & 3 deletions src/HIE/Bios/Environment.hs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import Text.ParserCombinators.ReadP hiding (optional)

import HIE.Bios.Types
import qualified HIE.Bios.Ghc.Gap as Gap
import qualified System.OsPath as OsPath


-- | Start a GHC session and set some sensible options for tooling to use.
-- Creates a folder in the cache directory to cache interface files to make
Expand Down Expand Up @@ -171,17 +173,21 @@ makeDynFlagsAbsolute root df =
$ df
{ G.importPaths = map makeAbs (G.importPaths df)
, G.packageDBFlags =
map (Gap.overPkgDbRef makeAbs) (G.packageDBFlags df)
map (Gap.overPkgDbRef makeAbsOs) (G.packageDBFlags df)
}
where
makeAbs =
#if __GLASGOW_HASKELL__ >= 903
case G.workingDirectory df of
Just fp -> ((root </> fp) </>)
Nothing ->
#endif
(root </>)

makeAbsOs p =
case G.workingDirectory df of
Just fp -> Gap.unsafeEncodeUtf (root </> fp) OsPath.</> p
Nothing ->
Gap.unsafeEncodeUtf root OsPath.</> p

-- --------------------------------------------------------

disableOptimisation :: G.DynFlags -> G.DynFlags
Expand Down
45 changes: 32 additions & 13 deletions src/HIE/Bios/Ghc/Gap.hs
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,9 @@ module HIE.Bios.Ghc.Gap (
, HIE.Bios.Ghc.Gap.parseDynamicFlags
-- * Platform constants
, hostIsDynamic
-- * OsPath Compat
, unsafeEncodeUtf
, unsafeDecodeUtf
-- * misc
, getTyThing
, fixInfo
Expand Down Expand Up @@ -77,10 +80,12 @@ import GHC.Utils.Logger
import GHC.Utils.Outputable
import qualified GHC.Utils.Ppr as Ppr
import qualified GHC.Driver.Make as G

#if __GLASGOW_HASKELL__ > 903
import System.OsPath (OsPath)
import qualified System.OsPath as OsPath
import GHC.Unit.Types (UnitId)
#endif
import Data.Maybe (fromMaybe)
import GHC.Stack.Types (HasCallStack)

#if __GLASGOW_HASKELL__ < 904
import qualified GHC.Driver.Main as G
#endif
Expand Down Expand Up @@ -136,21 +141,22 @@ setNoCode d = d { G.backend = G.NoBackend }
set_hsc_dflags :: DynFlags -> HscEnv -> HscEnv
set_hsc_dflags dflags hsc_env = hsc_env { G.hsc_dflags = dflags }

overPkgDbRef :: (FilePath -> FilePath) -> G.PackageDBFlag -> G.PackageDBFlag
overPkgDbRef :: (OsPath -> OsPath) -> G.PackageDBFlag -> G.PackageDBFlag
overPkgDbRef f (G.PackageDB pkgConfRef) = G.PackageDB $ case pkgConfRef of
G.PkgDbPath fp -> G.PkgDbPath (f fp)
G.PkgDbPath fp ->
#if __GLASGOW_HASKELL__ >= 915
G.PkgDbPath (f fp)
#else
G.PkgDbPath (unsafeDecodeUtf $ f $ unsafeEncodeUtf fp)
#endif

conf -> conf
overPkgDbRef _f db = db

----------------------------------------------------------------

#if __GLASGOW_HASKELL__ >= 903
guessTarget :: GhcMonad m => String -> Maybe UnitId -> Maybe G.Phase -> m G.Target
guessTarget a b c = G.guessTarget a b c
#else
guessTarget :: GhcMonad m => String -> a -> Maybe G.Phase -> m G.Target
guessTarget a _ b = G.guessTarget a b
#endif
guessTarget = G.guessTarget

----------------------------------------------------------------

Expand Down Expand Up @@ -180,9 +186,7 @@ mapOverIncludePaths f df = df
G.IncludeSpecs
(map f $ G.includePathsQuote (includePaths df))
(map f $ G.includePathsGlobal (includePaths df))
#if MIN_VERSION_GLASGOW_HASKELL(9,0,2,0)
(map f $ G.includePathsQuoteImplicit (includePaths df))
#endif
}

----------------------------------------------------------------
Expand Down Expand Up @@ -292,3 +296,18 @@ parseTargetFiles = G.parseTargetFiles

hostIsDynamic :: Bool
hostIsDynamic = Platform.hostIsDynamic

-- --------------------------------------------------------
-- OsPath Compat
-- --------------------------------------------------------

unsafeEncodeUtf :: HasCallStack => FilePath -> OsPath
unsafeEncodeUtf fp =
#if MIN_VERSION_filepath(1,5,0)
OsPath.unsafeEncodeUtf fp
#else
fromMaybe (error "unsafeEncodeUtf") $ OsPath.encodeUtf fp
#endif

unsafeDecodeUtf :: HasCallStack => OsPath -> FilePath
unsafeDecodeUtf = fromMaybe (error "unsafeDecodeUtf") . OsPath.decodeUtf
Loading