bookshelf-doc/lakefile.lean

105 lines
3.6 KiB
Plaintext
Raw Normal View History

2021-11-27 15:19:45 +00:00
import Lake
open System Lake DSL
2021-11-27 15:19:45 +00:00
2022-06-19 14:41:59 +00:00
package «doc-gen4»
lean_lib DocGen4
2022-10-20 17:51:26 +00:00
@[default_target]
2022-06-19 14:41:59 +00:00
lean_exe «doc-gen4» {
root := `Main
2021-11-27 15:19:45 +00:00
supportInterpreter := true
}
2022-06-19 14:41:59 +00:00
require CMark from git
2022-07-20 14:18:57 +00:00
"https://github.com/xubaiw/CMark.lean" @ "main"
2022-06-19 14:41:59 +00:00
2023-08-06 14:07:24 +00:00
require «lean4-unicode-basic» from git
2023-03-14 11:32:32 +00:00
"https://github.com/fgdorais/lean4-unicode-basic" @ "main"
2022-06-19 14:41:59 +00:00
require Cli from git
2022-07-20 14:18:57 +00:00
"https://github.com/mhuisi/lean4-cli" @ "nightly"
2022-06-19 14:41:59 +00:00
require leanInk from git
"https://github.com/hargonix/LeanInk" @ "doc-gen"
2022-08-11 19:37:10 +00:00
module_facet docs (mod) : FilePath := do
let some docGen4 ← findLeanExe? `«doc-gen4»
| error "no doc-gen4 executable configuration found in workspace"
let exeJob ← docGen4.exe.fetch
2023-09-18 20:03:27 +00:00
let modJob ← mod.leanArts.fetch
2022-08-11 19:37:10 +00:00
let buildDir := (← getWorkspace).root.buildDir
let docFile := mod.filePath (buildDir / "doc") "html"
exeJob.bindAsync fun exeFile exeTrace => do
modJob.bindSync fun _ modTrace => do
let depTrace := exeTrace.mix modTrace
let trace ← buildFileUnlessUpToDate docFile depTrace do
logStep s!"Documenting module: {mod.name}"
2022-08-11 19:37:10 +00:00
proc {
cmd := exeFile.toString
args := #["single", mod.name.toString]
2022-08-11 19:37:10 +00:00
env := #[("LEAN_PATH", (← getAugmentedLeanPath).toString)]
}
return (docFile, trace)
-- TODO: technically speaking this facet does not show all file dependencies
target coreDocs : FilePath := do
let some docGen4 ← findLeanExe? `«doc-gen4»
| error "no doc-gen4 executable configuration found in workspace"
let exeJob ← docGen4.exe.fetch
let basePath := (←getWorkspace).root.buildDir / "doc"
let dataFile := basePath / "declarations" / "declaration-data-Lean.bmp"
exeJob.bindSync fun exeFile exeTrace => do
let trace ← buildFileUnlessUpToDate dataFile exeTrace do
logStep "Documenting Lean core: Init and Lean"
2022-08-11 19:37:10 +00:00
proc {
cmd := exeFile.toString
args := #["genCore"]
env := #[("LEAN_PATH", (← getAugmentedLeanPath).toString)]
}
return (dataFile, trace)
library_facet docs (lib) : FilePath := do
2022-12-03 16:43:12 +00:00
let mods ← lib.modules.fetch
let moduleJobs ← BuildJob.mixArray <| ← mods.mapM (fetch <| ·.facet `docs)
2023-07-30 18:40:24 +00:00
let coreJob : BuildJob FilePath ← coreDocs.fetch
let exeJob ← «doc-gen4».fetch
2022-08-11 19:37:10 +00:00
-- Shared with DocGen4.Output
let basePath := (←getWorkspace).root.buildDir / "doc"
let dataFile := basePath / "declarations" / "declaration-data.bmp"
let staticFiles := #[
basePath / "style.css",
basePath / "declaration-data.js",
2023-06-08 05:52:51 +00:00
basePath / "color-scheme.js",
2022-08-11 19:37:10 +00:00
basePath / "nav.js",
basePath / "how-about.js",
basePath / "search.js",
basePath / "mathjax-config.js",
basePath / "instances.js",
basePath / "importedBy.js",
basePath / "index.html",
basePath / "404.html",
basePath / "navbar.html",
basePath / "search.html",
2022-08-11 19:37:10 +00:00
basePath / "find" / "index.html",
basePath / "find" / "find.js",
basePath / "src" / "alectryon.css",
basePath / "src" / "alectryon.js",
basePath / "src" / "docutils_basic.css",
basePath / "src" / "pygments.css"
]
coreJob.bindAsync fun _ coreInputTrace => do
exeJob.bindAsync fun exeFile exeTrace => do
moduleJobs.bindSync fun _ inputTrace => do
let depTrace := mixTraceArray #[inputTrace, exeTrace, coreInputTrace]
let trace ← buildFileUnlessUpToDate dataFile depTrace do
logInfo "Documentation indexing"
proc {
cmd := exeFile.toString
args := #["index"]
}
let traces ← staticFiles.mapM computeTrace
let indexTrace := mixTraceArray traces
return (dataFile, trace.mix indexTrace)