169 lines
4.5 KiB
Text
169 lines
4.5 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.Workspace
|
||
|
||
open System
|
||
open Lean (Name)
|
||
|
||
namespace Lake
|
||
|
||
abbrev MonadLakeEnv (m : Type → Type u) :=
|
||
MonadReaderOf Lake.Env m
|
||
|
||
abbrev MonadWorkspace (m : Type → Type u) :=
|
||
MonadReaderOf Workspace m
|
||
|
||
abbrev MonadLake (m : Type → Type u) :=
|
||
MonadReaderOf Context m
|
||
|
||
deriving instance Inhabited for Context
|
||
|
||
/-- Make a `Lake.Context` from a `Workspace`. -/
|
||
def mkLakeContext (ws : Workspace) : Context where
|
||
opaqueWs := ws
|
||
|
||
@[inline] def Context.workspace (self : Context) :=
|
||
self.opaqueWs.get
|
||
|
||
instance [MonadLake m] [Functor m] : MonadWorkspace m where
|
||
read := (·.workspace) <$> read
|
||
|
||
section
|
||
variable [MonadWorkspace m] [Functor m]
|
||
|
||
instance : MonadLakeEnv m where
|
||
read := (·.lakeEnv) <$> read
|
||
|
||
/-! ## Workspace Helpers -/
|
||
|
||
@[inline] def getWorkspace : m Workspace :=
|
||
read
|
||
|
||
@[inline] def findPackage? (name : Name) : m (Option Package) :=
|
||
(·.findPackage? name) <$> getWorkspace
|
||
|
||
@[inline] def findModule? (mod : Name) : m (Option Module) :=
|
||
(·.findModule? mod) <$> getWorkspace
|
||
|
||
@[inline] def findLeanExe? (mod : Name) : m (Option LeanExe) :=
|
||
(·.findLeanExe? mod) <$> getWorkspace
|
||
|
||
@[inline] def findLeanLib? (mod : Name) : m (Option LeanLib) :=
|
||
(·.findLeanLib? mod) <$> getWorkspace
|
||
|
||
@[inline] def findExternLib? (mod : Name) : m (Option ExternLib) :=
|
||
(·.findExternLib? mod) <$> getWorkspace
|
||
|
||
/-- Get the `leanPath` of the `Workspace`. -/
|
||
@[inline] def getLeanPath : m SearchPath :=
|
||
(·.leanPath) <$> getWorkspace
|
||
|
||
/-- Get the `leanSrcPath` of the `Workspace`. -/
|
||
@[inline] def getLeanSrcPath : m SearchPath :=
|
||
(·.leanSrcPath) <$> getWorkspace
|
||
|
||
/-- Get the `libPath` value of the `Workspace`. -/
|
||
@[inline] def getLibPath : m SearchPath :=
|
||
(·.libPath) <$> getWorkspace
|
||
|
||
/-- Get the `augmentedLeanPath` of the `Workspace`. -/
|
||
@[inline] def getAugmentedLeanPath : m SearchPath :=
|
||
(·.augmentedLeanPath) <$> getWorkspace
|
||
|
||
/-- Get the `augmentedLeanSrcPath` value of the `Workspace`. -/
|
||
@[inline] def getAugmentedLeanSrcPath : m SearchPath :=
|
||
(·.augmentedLeanSrcPath) <$> getWorkspace
|
||
|
||
/-- Get the `augmentedSharedLibPath` value of the `Workspace`. -/
|
||
@[inline] def getAugmentedSharedLibPath : m SearchPath :=
|
||
(·.augmentedSharedLibPath) <$> getWorkspace
|
||
|
||
/-- Get the `augmentedEnvVars` of the `Workspace`. -/
|
||
@[inline] def getAugmentedEnv : m (Array (String × Option String)) :=
|
||
(·.augmentedEnvVars) <$> getWorkspace
|
||
|
||
end
|
||
|
||
section
|
||
variable [MonadLakeEnv m] [Functor m]
|
||
|
||
/-! ## Environment Helpers -/
|
||
|
||
@[inline] def getLakeEnv : m Lake.Env :=
|
||
read
|
||
|
||
/-! ### Lean Install Helpers -/
|
||
|
||
@[inline] def getLeanInstall : m LeanInstall :=
|
||
(·.lean) <$> getLakeEnv
|
||
|
||
@[inline] def getLeanSysroot : m FilePath :=
|
||
(·.sysroot) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanSrcDir : m FilePath :=
|
||
(·.srcDir) <$> getLeanInstall
|
||
|
||
/-- Get the `leanLibDir` of the detected `LeanInstall`. -/
|
||
@[inline] def getLeanLibDir : m FilePath :=
|
||
(·.leanLibDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanIncludeDir : m FilePath :=
|
||
(·.includeDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanSystemLibDir : m FilePath :=
|
||
(·.systemLibDir) <$> getLeanInstall
|
||
|
||
@[inline] def getLean : m FilePath :=
|
||
(·.lean) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanc : m FilePath :=
|
||
(·.leanc) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanSharedLib : m FilePath :=
|
||
(·.sharedLib) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanAr : m FilePath :=
|
||
(·.ar) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanCc : m FilePath :=
|
||
(·.cc) <$> getLeanInstall
|
||
|
||
@[inline] def getLeanCc? : m (Option String) :=
|
||
(·.leanCc?) <$> getLeanInstall
|
||
|
||
/-! ### Lake Install Helpers -/
|
||
|
||
@[inline] def getLakeInstall : m LakeInstall :=
|
||
(·.lake) <$> getLakeEnv
|
||
|
||
@[inline] def getLakeHome : m FilePath :=
|
||
(·.home) <$> getLakeInstall
|
||
|
||
@[inline] def getLakeSrcDir : m FilePath :=
|
||
(·.srcDir) <$> getLakeInstall
|
||
|
||
@[inline] def getLakeLibDir : m FilePath :=
|
||
(·.libDir) <$> getLakeInstall
|
||
|
||
@[inline] def getLake : m FilePath :=
|
||
(·.lake) <$> getLakeInstall
|
||
|
||
/-! ### Search Path Helpers -/
|
||
|
||
/-- Get the detected `LEAN_PATH` value of the Lake environment. -/
|
||
@[inline] def getEnvLeanPath : m SearchPath :=
|
||
(·.leanPath) <$> getLakeEnv
|
||
|
||
/-- Get the detected `LEAN_SRC_PATH` value of the Lake environment. -/
|
||
@[inline] def getEnvLeanSrcPath : m SearchPath :=
|
||
(·.leanSrcPath) <$> getLakeEnv
|
||
|
||
/-- Get the detected `sharedLibPathEnvVar` value of the Lake environment. -/
|
||
@[inline] def getEnvSharedLibPath : m SearchPath :=
|
||
(·.sharedLibPath) <$> getLakeEnv
|
||
|
||
end
|