Skip to content

Commit 8b1e18e

Browse files
committed
feat: make ghc-pkg support '--target'
As well as being invoked via triplet symlink.
1 parent 46e0a4e commit 8b1e18e

File tree

1 file changed

+28
-2
lines changed

1 file changed

+28
-2
lines changed

utils/ghc-pkg/Main.hs

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
{-# LANGUAGE TypeSynonymInstances #-}
66
{-# LANGUAGE GADTs #-}
77
{-# LANGUAGE KindSignatures #-}
8+
{-# LANGUAGE MultiWayIf #-}
89
{-# LANGUAGE DataKinds #-}
910
{-# LANGUAGE TupleSections #-}
1011
{-# LANGUAGE ScopedTypeVariables #-}
@@ -151,6 +152,7 @@ data Flag
151152
| FlagVerbosity (Maybe String)
152153
| FlagUnitId
153154
| FlagShowUnitIds
155+
| FlagTarget String
154156
deriving Eq
155157

156158
flags :: [OptDescr Flag]
@@ -198,7 +200,9 @@ flags = [
198200
Option [] ["ipid", "unit-id"] (NoArg FlagUnitId)
199201
"interpret package arguments as unit IDs (e.g. installed package IDs)",
200202
Option ['v'] ["verbose"] (OptArg FlagVerbosity "Verbosity")
201-
"verbosity level (0-2, default 1)"
203+
"verbosity level (0-2, default 1)",
204+
Option [] ["target"] (ReqArg FlagTarget "TARGET")
205+
"run against the specified target (this has no effect if --global-package-db is specified)"
202206
]
203207

204208
data Verbosity = Silent | Normal | Verbose
@@ -593,6 +597,23 @@ readFromSettingsFile settingsFile f = do
593597
Right archOS -> Right archOS
594598
Left e -> Left e
595599

600+
getTarget :: [Flag] -> IO (Maybe String)
601+
getTarget my_flags = do
602+
case [ t | FlagTarget t <- my_flags ] of
603+
[] -> do
604+
progN <- getProgName
605+
if | "-ghc-pkg" `isSuffixOf` progN
606+
, parts <- split '-' progN
607+
, length parts > 3 -> pure (Just (take (length progN - 8) progN))
608+
| otherwise -> pure Nothing
609+
ts -> pure (Just (last ts))
610+
where
611+
split :: Char -> String -> [String]
612+
split c s = case rest of
613+
[] -> [chunk]
614+
_:rest -> chunk : split c rest
615+
where (chunk, rest) = break (==c) s
616+
596617
getPkgDatabases :: Verbosity
597618
-> GhcPkg.DbOpenMode mode DbModifySelector
598619
-> Bool -- use the user db
@@ -622,7 +643,12 @@ getPkgDatabases verbosity mode use_user use_cache expand_vars my_flags = do
622643
[] -> do mb_dir <- getBaseDir
623644
case mb_dir of
624645
Nothing -> die err_msg
625-
Just dir -> do
646+
Just dir' -> do
647+
mt <- getTarget my_flags
648+
dir <- case mt of
649+
Nothing -> pure dir'
650+
Just target -> pure (dir' </> "targets" </> target </> "lib")
651+
626652
-- Look for where it is given in the settings file, if marked there.
627653
let settingsFile = dir </> "settings"
628654
exists_settings_file <- doesFileExist settingsFile

0 commit comments

Comments
 (0)