86 lines
2.3 KiB
Text
86 lines
2.3 KiB
Text
/-
|
||
Copyright (c) 2021 Mac Malone. All rights reserved.
|
||
Released under Apache 2.0 license as described in the file LICENSE.
|
||
Authors: Mac Malone
|
||
-/
|
||
import Lake.Config.Context
|
||
import Lake.Config.InstallPath
|
||
import Lake.Config.Workspace
|
||
|
||
open System
|
||
open Lean (Name)
|
||
|
||
namespace Lake
|
||
|
||
deriving instance Inhabited for Context
|
||
|
||
class MonadLake (m : Type → Type u) where
|
||
getLeanInstall : m LeanInstall
|
||
getLakeInstall : m LakeInstall
|
||
getWorkspace : m Workspace
|
||
|
||
export MonadLake (getLeanInstall getLakeInstall getWorkspace)
|
||
|
||
instance [MonadLift m n] [MonadLake m] : MonadLake n where
|
||
getLeanInstall := liftM (m := m) <| getLeanInstall
|
||
getLakeInstall := liftM (m := m) <| getLakeInstall
|
||
getWorkspace := liftM (m := m) <| getWorkspace
|
||
|
||
@[inline] def Context.workspace (self : Context) :=
|
||
self.opaqueWs.get
|
||
|
||
instance [Monad m] : MonadLake (LakeT m) where
|
||
getLeanInstall := (·.lean) <$> read
|
||
getLakeInstall := (·.lake) <$> read
|
||
getWorkspace := (·.workspace) <$> read
|
||
|
||
variable [MonadLake m]
|
||
|
||
def getLeanEnv [Monad m] : m (Array (String × Option String)) := do
|
||
let ws ← getWorkspace
|
||
let lean ← getLeanInstall
|
||
return #[
|
||
("LEAN_SYSROOT", lean.sysroot.toString),
|
||
("LEAN_AR", lean.ar.toString),
|
||
("LEAN_CC", lean.cc.toString),
|
||
("LEAN_PATH", ws.oleanPath.toString),
|
||
("LEAN_SRC_PATH", ws.leanSrcPath.toString)
|
||
]
|
||
|
||
variable [Functor m]
|
||
|
||
@[inline] def getPackageByName? (name : Name) : m (Option Package) :=
|
||
(·.packageByName? name) <$> getWorkspace
|
||
|
||
@[inline] def getPackageForModule? (mod : Name) : m (Option Package) :=
|
||
(·.packageForModule? mod) <$> getWorkspace
|
||
|
||
@[inline] def getOleanPath : m SearchPath :=
|
||
(·.oleanPath) <$> getWorkspace
|
||
|
||
@[inline] def getLeanSysroot : m FilePath :=
|
||
(·.sysroot) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanLibDir : m FilePath :=
|
||
(·.libDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanOleanDir : m FilePath :=
|
||
(·.oleanDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanIncludeDir : m FilePath :=
|
||
(·.includeDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLean : m FilePath :=
|
||
(·.lean) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanc : m FilePath :=
|
||
(·.leanc) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanAr : m FilePath :=
|
||
(·.ar) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanCc : m FilePath :=
|
||
(·.cc) <$> getLeanInstall
|
||
|
||
@[inline] def getLakeOleanDir : m FilePath :=
|
||
(·.oleanDir) <$> getLakeInstall
|