diff options
Diffstat (limited to 'lux-lein')
-rw-r--r-- | lux-lein/src/leiningen/lux/builder.clj | 19 | ||||
-rw-r--r-- | lux-lein/src/leiningen/lux/packager.clj | 18 | ||||
-rw-r--r-- | lux-lein/src/leiningen/lux/test.clj | 41 | ||||
-rw-r--r-- | lux-lein/src/leiningen/lux/utils.clj | 16 |
4 files changed, 64 insertions, 30 deletions
diff --git a/lux-lein/src/leiningen/lux/builder.clj b/lux-lein/src/leiningen/lux/builder.clj index ca9088d4c..65f45b90c 100644 --- a/lux-lein/src/leiningen/lux/builder.clj +++ b/lux-lein/src/leiningen/lux/builder.clj @@ -4,10 +4,17 @@ [packager :as &packager]))) (defn build [project] - (if-let [program-module (get-in project [:lux :program])] - (when (&utils/run-process (&utils/compile-path project program-module (get project :source-paths (list))) - nil - "[BUILD BEGIN]" - "[BUILD END]") - (&packager/package project program-module (get project :resource-paths (list)))) + (if-let [program-modules (get-in project [:lux :program])] + (do (when-let [jvm-module (get-in program-modules [:jvm])] + (when (&utils/run-process (&utils/compile-path project "jvm" jvm-module (get project :source-paths (list))) + nil + "[BUILD BEGIN]" + "[BUILD END]") + (&packager/package project "jvm" jvm-module (get project :resource-paths (list))))) + (when-let [js-module (get-in program-modules [:js])] + (when (&utils/run-process (&utils/compile-path project "js" js-module (get project :source-paths (list))) + nil + "[BUILD BEGIN]" + "[BUILD END]") + (&packager/package project "js" js-module (get project :resource-paths (list)))))) (println "Please provide a program main module in [:lux :program]"))) diff --git a/lux-lein/src/leiningen/lux/packager.clj b/lux-lein/src/leiningen/lux/packager.clj index 3ac117d15..afb4a82db 100644 --- a/lux-lein/src/leiningen/lux/packager.clj +++ b/lux-lein/src/leiningen/lux/packager.clj @@ -123,11 +123,11 @@ (def default-manifest-file (str "." java.io.File/separator "AndroidManifest.xml")) ;; [Resources] -(defn package +(defn ^:private package-jvm "(-> Text (List Text) Null)" [project module resources-dirs] (let [output-package-name (get project :jar-name &utils/output-package) - output-dir (&utils/prepare-path (get-in project [:lux :target] &utils/default-output-dir)) + output-dir (&utils/prepare-path (get-in project [:lux :target] &utils/default-jvm-output-dir)) output-package (str output-dir java.io.File/separator output-package-name) !all-jar-files (atom {}) includes-android? (boolean (some #(-> % first (= 'com.google.android/android)) @@ -161,7 +161,7 @@ (.closeEntry))) nil)) (when (get-in project [:lux :android]) - (let [output-dir-context (new File (get-in project [:lux :target] &utils/default-output-dir)) + (let [output-dir-context (new File (get-in project [:lux :target] &utils/default-jvm-output-dir)) output-dex "classes.dex" _ (do (.delete (new File output-dex)) (&utils/run-process (str "dx --dex --output=" output-dex " " output-package-name) @@ -206,7 +206,13 @@ (&utils/run-process (str "zipalign 4 " output-apk-unaligned-path " " output-apk-path) nil "[ZIPALIGN BEGIN]" - "[ZIPALIGN END]")) - ) - ] + "[ZIPALIGN END]")))] nil))))) + +(defn package + "(-> Text Text (List Text) Null)" + [project platform module resources-dirs] + (case platform + "jvm" (package-jvm project module resources-dirs) + "js" nil) + ) diff --git a/lux-lein/src/leiningen/lux/test.clj b/lux-lein/src/leiningen/lux/test.clj index 77dc342e7..d3755c1b6 100644 --- a/lux-lein/src/leiningen/lux/test.clj +++ b/lux-lein/src/leiningen/lux/test.clj @@ -5,18 +5,31 @@ [packager :as &packager]))) (defn test [project] - (if-let [tests-module (get-in project [:lux :tests])] - (when (&utils/run-process (&utils/compile-path project tests-module (concat (:test-paths project) (:source-paths project))) - nil - "[BUILD BEGIN]" - "[BUILD END]") - (let [java-cmd (get project :java-cmd "java") - jvm-opts (->> (get project :jvm-opts) (interpose " ") (reduce str "")) - output-package (str (get-in project [:lux :target] &utils/default-output-dir) "/" - (get project :jar-name &utils/output-package))] - (do (&packager/package project tests-module (get project :resource-paths (list))) - (&utils/run-process (str java-cmd " " jvm-opts " -jar " output-package) - nil - "[TEST BEGIN]" - "[TEST END]")))) + (if-let [tests-modules (get-in project [:lux :tests])] + (do (when-let [jvm-module (get-in tests-modules [:jvm])] + (when (&utils/run-process (&utils/compile-path project "jvm" jvm-module (concat (:test-paths project) (:source-paths project))) + nil + "[BUILD BEGIN]" + "[BUILD END]") + (let [java-cmd (get project :java-cmd "java") + jvm-opts (->> (get project :jvm-opts) (interpose " ") (reduce str "")) + output-package (str (get-in project [:lux :target] &utils/default-jvm-output-dir) "/" + (get project :jar-name &utils/output-package))] + (do (&packager/package project "jvm" jvm-module (get project :resource-paths (list))) + (&utils/run-process (str java-cmd " " jvm-opts " -jar " output-package) + nil + "[TEST BEGIN]" + "[TEST END]"))))) + (when-let [js-module (get-in tests-modules [:js])] + (when (&utils/run-process (&utils/compile-path project "js" js-module (concat (:test-paths project) (:source-paths project))) + nil + "[BUILD BEGIN]" + "[BUILD END]") + (let [output-package (str (get-in project [:lux :target] &utils/default-js-output-dir) "/" + "program.js")] + (do (&packager/package project "js" js-module (get project :resource-paths (list))) + (&utils/run-process (str "node " output-package) + nil + "[TEST BEGIN]" + "[TEST END]")))))) (println "Please provide a test module in [:lux :tests]"))) diff --git a/lux-lein/src/leiningen/lux/utils.clj b/lux-lein/src/leiningen/lux/utils.clj index c70ec2289..ae39c37b3 100644 --- a/lux-lein/src/leiningen/lux/utils.clj +++ b/lux-lein/src/leiningen/lux/utils.clj @@ -5,7 +5,8 @@ InputStreamReader BufferedReader))) -(def ^:const ^String default-output-dir (str "target" java.io.File/separator "jvm")) +(def ^:const ^String default-jvm-output-dir (str "target" java.io.File/separator "jvm")) +(def ^:const ^String default-js-output-dir (str "target" java.io.File/separator "js")) (def ^:const ^String output-package "program.jar") (def ^:private unit-separator (str (char 31))) @@ -61,10 +62,17 @@ (str "lux " mode " " (->> (get project :resource-paths (list)) (interpose unit-separator) (apply str)) " " (->> source-paths (interpose unit-separator) (apply str)) - " " (get-in project [:lux :target] default-output-dir))) + " " (get-in project [:lux :target] (cond (.contains mode "jvm") + default-jvm-output-dir + + (.contains mode "js") + default-js-output-dir + + :else + (assert false))))) (do-template [<name> <mode>] - (defn <name> [project module source-paths] + (defn <name> [project platform module source-paths] (let [is-stdlib? (= stdlib-id [(get project :group) (get project :name)]) jar-paths (all-jars-in-classloader) compiler-path (prepare-path (find-compiler-path jar-paths)) @@ -90,7 +98,7 @@ (str (java-command project) " -cp " class-path " " (lux-command project <mode> source-paths)))) - compile-path (str "release " module) + compile-path (str "release " platform " " module) repl-path "repl" ) |