summaryrefslogtreecommitdiff
path: root/Biz/Bild.hs
diff options
context:
space:
mode:
Diffstat (limited to 'Biz/Bild.hs')
-rw-r--r--Biz/Bild.hs38
1 files changed, 25 insertions, 13 deletions
diff --git a/Biz/Bild.hs b/Biz/Bild.hs
index 2b7a2e1..2113b5a 100644
--- a/Biz/Bild.hs
+++ b/Biz/Bild.hs
@@ -209,7 +209,11 @@ data Out = Lib String | Bin String | None
deriving (Show, Eq)
instance Aeson.ToJSON Out where
- toJSON out = outdir out |> Text.pack |> Aeson.String
+ toJSON =
+ Aeson.String <. Text.pack <. \case
+ Bin a -> a
+ Lib a -> a
+ None -> ""
data Compiler
= Copy
@@ -237,6 +241,8 @@ instance Aeson.ToJSON Compiler where
data Target = Target
{ -- | Output name
out :: Out,
+ -- | Output path (into cabdir)
+ outPath :: FilePath,
-- | Fully qualified namespace partitioned by '.'
namespace :: Namespace,
-- | Absolute path to file
@@ -282,8 +288,8 @@ isBuildableNs = \case
]
-- | Emulate the *nix hierarchy in the cabdir.
-outdir :: Out -> String
-outdir = \case
+outToPath :: Out -> FilePath
+outToPath = \case
Bin o -> "_/bin" </> o
Lib o -> "_/lib" </> o
None -> mempty
@@ -297,8 +303,8 @@ createHier :: String -> IO ()
createHier root =
traverse_
(Dir.createDirectoryIfMissing True)
- [ root </> (outdir <| Bin ""),
- root </> (outdir <| Lib ""),
+ [ root </> (outToPath <| Bin ""),
+ root </> (outToPath <| Lib ""),
root </> intdir,
root </> nixdir,
root </> vardir
@@ -375,8 +381,9 @@ analyze hmap ns = case Map.lookup ns hmap of
[ [o, dir, Text.pack absPath] ++ guileFlags
| let outable = out /= None,
o <- outable ?: (["-o"], []),
- dir <- outable ?: ([Text.pack <| root </> outdir out], [])
+ dir <- outable ?: ([Text.pack <| root </> outToPath out], [])
],
+ outPath = outToPath out,
..
}
Namespace.Hs -> do
@@ -411,7 +418,7 @@ analyze hmap ns = case Map.lookup ns hmap of
[ "-main-is",
Namespace.toHaskellModule namespace,
"-o",
- root </> outdir out
+ root </> outToPath out
],
[]
),
@@ -421,6 +428,7 @@ analyze hmap ns = case Map.lookup ns hmap of
/> Regex.match (metaSys "--")
|> catMaybes
|> Set.fromList,
+ outPath = outToPath out,
..
}
Namespace.Lisp -> do
@@ -445,9 +453,10 @@ analyze hmap ns = case Map.lookup ns hmap of
"--eval",
"(require :asdf)",
"--eval",
- "(sb-ext:save-lisp-and-die #p\"" <> (root </> outdir out) <> "\" :toplevel #'main :executable t)"
+ "(sb-ext:save-lisp-and-die #p\"" <> (root </> outToPath out) <> "\" :toplevel #'main :executable t)"
],
builder = user <> "@localhost",
+ outPath = outToPath out,
..
}
Namespace.Nix -> do
@@ -478,6 +487,7 @@ analyze hmap ns = case Map.lookup ns hmap of
Text.unpack builder
],
out = None,
+ outPath = outToPath None,
..
}
Namespace.Scm -> do
@@ -504,6 +514,7 @@ analyze hmap ns = case Map.lookup ns hmap of
path
],
builder = user <> "@localhost",
+ outPath = outToPath out,
..
}
Namespace.Rs -> do
@@ -520,8 +531,9 @@ analyze hmap ns = case Map.lookup ns hmap of
{ langdeps = Set.empty,
sysdeps = Set.empty,
compiler = Rustc,
- compilerFlags = map Text.pack [path, "-o", root </> outdir out],
+ compilerFlags = map Text.pack [path, "-o", root </> outToPath out],
builder = user <> "@localhost",
+ outPath = outToPath out,
..
}
detectHaskellImports :: [Text] -> IO (Set Dep)
@@ -588,7 +600,7 @@ test loud Target {..} = case compiler of
run
<| Proc
{ loud = loud,
- cmd = root </> outdir out,
+ cmd = root </> outToPath out,
args = ["test"],
ns = namespace,
onFailure = Log.fail ["test", nschunk namespace] >> Log.br,
@@ -629,7 +641,7 @@ build andTest loud analysis = do
_ <- proc loud namespace "guild" compilerFlags
when (out /= None) <| do
writeFile
- (root </> outdir out)
+ (root </> outToPath out)
<| Text.pack
<| joinWith
"\n"
@@ -641,8 +653,8 @@ build andTest loud analysis = do
<> Namespace.toPath namespace
<> " \"$@\""
]
- p <- Dir.getPermissions <| root </> outdir out
- Dir.setPermissions (root </> outdir out) (Dir.setOwnerExecutable True p)
+ p <- Dir.getPermissions <| root </> outToPath out
+ Dir.setPermissions (root </> outToPath out) (Dir.setOwnerExecutable True p)
pure Exit.ExitSuccess
NixBuild -> do
Log.info ["bild", "nix", builder, nschunk namespace]