aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/aedifex/build.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/program/aedifex/build.lux')
-rw-r--r--stdlib/source/program/aedifex/build.lux144
1 files changed, 0 insertions, 144 deletions
diff --git a/stdlib/source/program/aedifex/build.lux b/stdlib/source/program/aedifex/build.lux
deleted file mode 100644
index 74f64cb59..000000000
--- a/stdlib/source/program/aedifex/build.lux
+++ /dev/null
@@ -1,144 +0,0 @@
-(.module:
- [lux (#- Name)
- ["." host (#+ import:)]
- [abstract
- [monad (#+ Monad do)]]
- [control
- ["." try (#+ Try)]
- ["." exception (#+ exception:)]
- ["." io (#+ IO)]
- [concurrency
- ["." promise (#+ Promise) ("#@." monad)]]]
- [data
- ["." product]
- ["." maybe]
- ["." text ("#@." equivalence)
- ["%" format (#+ format)]]
- [collection
- ["." list ("#@." functor)]
- ["." dictionary]]]
- [world
- ["." file (#+ Path)]]]
- ["." // #_
- ["#" project]
- ["#." action (#+ Action)]
- ["#." local]
- ["#." artifact (#+ Group Name Artifact)]
- ["#." dependency (#+ Dependency Resolution)]
- ["#." shell]])
-
-(type: #export (Command a)
- (-> //.Project (Action a)))
-
-(type: Finder
- (-> Resolution (Maybe Dependency)))
-
-(def: (dependency-finder group name)
- (-> Group Name Finder)
- (|>> dictionary.entries
- (list.search (function (_ [dependency package])
- (if (and (text@= group (get@ [#//dependency.artifact #//artifact.group] dependency))
- (text@= name (get@ [#//dependency.artifact #//artifact.name] dependency)))
- (#.Some dependency)
- #.None)))))
-
-(def: lux-group
- Group
- "com.github.luxlang")
-
-(template [<name> <finder>]
- [(def: <finder>
- Finder
- (..dependency-finder ..lux-group <name>))]
-
- ["lux-jvm" jvm-compiler]
- ["lux-js" js-compiler]
- )
-
-(exception: #export no-available-compiler)
-(exception: #export no-specified-program)
-
-(type: Compiler
- (#JVM Artifact)
- (#JS Artifact))
-
-(def: (remove-dependency dependency)
- (-> Dependency (-> Resolution Resolution))
- (|>> dictionary.entries
- (list.filter (|>> product.left (is? dependency) not))
- (dictionary.from-list //dependency.hash)))
-
-(def: (compiler resolution)
- (-> Resolution (Try [Resolution Compiler]))
- (case [(..jvm-compiler resolution)
- (..js-compiler resolution)]
- [(#.Some dependency) _]
- (#try.Success [(..remove-dependency dependency resolution)
- (#JVM (get@ #//dependency.artifact dependency))])
-
- [_ (#.Some dependency)]
- (#try.Success [(..remove-dependency dependency resolution)
- (#JS (get@ #//dependency.artifact dependency))])
-
- _
- (exception.throw ..no-available-compiler [])))
-
-(def: libraries
- (-> Resolution (List Path))
- (|>> dictionary.keys
- (list.filter (|>> (get@ #//dependency.type) (text@= //dependency.lux-library)))
- (list@map (|>> (get@ #//dependency.artifact) (//local.path file.system)))))
-
-(import: #long java/lang/String)
-
-## https://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html
-(import: #long java/lang/System
- (#static getProperty [java/lang/String] #io #? java/lang/String))
-
-(def: working-directory
- (IO (Try Text))
- (do io.monad
- [?value (java/lang/System::getProperty "user.dir")]
- (wrap (#try.Success (maybe.default "~" ?value)))))
-
-(def: (singular-parameter name value)
- (-> Text Text Text)
- (format name " " value))
-
-(def: (plural-parameter name values)
- (-> Text (List Text) Text)
- (|> values (list@map (|>> (format name " "))) (text.join-with " ")))
-
-(def: #export (do! project)
- (Command Any)
- (case (get@ #//.program project)
- (#.Some program)
- (do //action.monad
- [cache (//local.all-cached (file.async file.system)
- (get@ #//.dependencies project)
- //dependency.empty)
- resolution (promise.future
- (//dependency.resolve-all (get@ #//.repositories project)
- (get@ #//.dependencies project)
- cache))
- _ (//local.cache-all (file.async file.system)
- resolution)
- [resolution compiler] (promise@wrap (..compiler resolution))
- working-directory (promise.future ..working-directory)
- #let [libraries (..libraries resolution)
- prefix (case compiler
- (#JVM artifact) (format "java -jar " (//local.path file.system artifact))
- (#JS artifact) (format "node --stack_size=8192 " (//local.path file.system artifact)))
- cache-directory (format working-directory (:: file.system separator) (get@ #//.target project))
- command (format prefix " build"
- " " (..plural-parameter "--library" libraries)
- " " (..plural-parameter "--source" (get@ #//.sources project))
- " " (..singular-parameter "--target" cache-directory)
- " " (..singular-parameter "--module" program))]
- #let [_ (log! "[BUILD STARTED]")]
- outcome (//shell.execute command working-directory)
- #let [_ (log! "[BUILD END]")]]
- (wrap []))
-
- #.None
- (promise@wrap (exception.throw ..no-specified-program []))))