aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/program/compositor.lux
diff options
context:
space:
mode:
authorEduardo Julian2021-07-24 02:14:12 -0400
committerEduardo Julian2021-07-24 02:14:12 -0400
commit0f545b7e57d2564e351d907befd2ce26900c5521 (patch)
tree84faaf7b6cd43c2c2f56c5e37bcd61d2b0b1d829 /stdlib/source/program/compositor.lux
parent4248cc22881a7eaa8f74bc426f2b0ba284b23153 (diff)
Now packaging JVM programs as "fat" jars in new JVM compiler.
Diffstat (limited to 'stdlib/source/program/compositor.lux')
-rw-r--r--stdlib/source/program/compositor.lux29
1 files changed, 24 insertions, 5 deletions
diff --git a/stdlib/source/program/compositor.lux b/stdlib/source/program/compositor.lux
index bc96e7ae0..aa3239de2 100644
--- a/stdlib/source/program/compositor.lux
+++ b/stdlib/source/program/compositor.lux
@@ -17,7 +17,7 @@
["." text
["%" format (#+ format)]]
[collection
- ["." dictionary]
+ ["." dictionary (#+ Dictionary)]
["." row (#+ Row)]]]
[time
["." instant]]
@@ -84,15 +84,32 @@
(format "Duration: ")))]]
(wrap output)))
-(def: (package! fs [packager package] static archive context)
- (-> (file.System Promise) [Packager file.Path] Static Archive Context (Promise (Try Any)))
- (case (packager archive context)
+(def: (package! fs host_dependencies [packager package] static archive context)
+ (-> (file.System Promise) (Dictionary file.Path Binary) [Packager file.Path] Static Archive Context (Promise (Try Any)))
+ (case (packager host_dependencies archive context)
(#try.Success content)
(\ fs write content package)
(#try.Failure error)
(\ promise.monad wrap (#try.Failure error))))
+(def: (load_host_dependencies fs host_dependencies)
+ (-> (file.System Promise) (List file.Path) (Promise (Try (Dictionary file.Path Binary))))
+ (do {! (try.with promise.monad)}
+ []
+ (loop [pending host_dependencies
+ output (: (Dictionary file.Path Binary)
+ (dictionary.new text.hash))]
+ (case pending
+ #.Nil
+ (wrap output)
+
+ (#.Cons head tail)
+ (do !
+ [content (\ fs read head)]
+ (recur tail
+ (dictionary.put head content output)))))))
+
(with_expansions [<parameters> (as_is anchor expression artifact)]
(def: #export (compiler static
expander host_analysis platform generation_bundle host_directive_bundle program anchorT,expressionT,directiveT extender
@@ -118,7 +135,7 @@
(<| (or_crash! "Compilation failed:")
..timed
(do (try.with promise.monad)
- [#let [[compilation_sources compilation_libraries compilation_target compilation_module] compilation]
+ [#let [[compilation_sources compilation_host_dependencies compilation_libraries compilation_target compilation_module] compilation]
import (/import.import (get@ #platform.&file_system platform) compilation_libraries)
[state archive] (:share [<parameters>]
(Platform <parameters>)
@@ -136,9 +153,11 @@
(:assume (platform.compile import static expander platform compilation [archive state])))
_ (ioW.freeze (get@ #platform.&file_system platform) static archive)
program_context (promise\wrap ($/program.context archive))
+ host_dependencies (..load_host_dependencies (get@ #platform.&file_system platform) compilation_host_dependencies)
_ (..package! (for {@.old (file.async file.default)
@.jvm (file.async file.default)
@.js file.default})
+ host_dependencies
packager,package
static
archive