aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lux.clj5
-rw-r--r--src/lux/lib/loader.clj24
-rw-r--r--src/lux/packager/lib.clj41
-rw-r--r--src/lux/packager/program.clj42
4 files changed, 37 insertions, 75 deletions
diff --git a/src/lux.clj b/src/lux.clj
index 4b1c15ef7..eb8729053 100644
--- a/src/lux.clj
+++ b/src/lux.clj
@@ -8,7 +8,6 @@
(:require [lux.base :as & :refer [|let |do return fail return* fail* |case]]
[lux.compiler.base :as &compiler-base]
[lux.compiler :as &compiler]
- [lux.packager.lib :as &lib]
:reload-all)
(:import (java.io File)))
@@ -19,9 +18,6 @@
(time (&compiler/compile-program program-module))
(println "Please provide a module name to compile."))
- (&/$Cons "lib" (&/$Cons lib-module (&/$Nil)))
- (&lib/package lib-module (new File &compiler-base/input-dir))
-
_
(println "Can't understand command."))
(System/exit 0)
@@ -29,5 +25,4 @@
(comment
(-main "compile" "program")
- (-main "lib" "lux")
)
diff --git a/src/lux/lib/loader.clj b/src/lux/lib/loader.clj
index 13810238a..e70576c24 100644
--- a/src/lux/lib/loader.clj
+++ b/src/lux/lib/loader.clj
@@ -11,9 +11,7 @@
FileInputStream
ByteArrayInputStream
ByteArrayOutputStream)
- java.util.zip.GZIPInputStream
- (org.apache.commons.compress.archivers.tar TarArchiveEntry
- TarArchiveInputStream)))
+ java.util.jar.JarInputStream))
;; [Utils]
(defn ^:private fetch-libs []
@@ -21,7 +19,7 @@
(.getURLs)
seq
(map #(.getFile ^java.net.URL %))
- (filter #(.endsWith ^String % ".tar.gz"))
+ (filter #(.endsWith ^String % ".jar"))
(map #(new File ^String %))))
(let [init-capacity (* 100 1024)
@@ -38,23 +36,19 @@
(defn ^:private unpackage [^File lib-file]
(let [is (->> lib-file
(new FileInputStream)
- (new GZIPInputStream)
- (new TarArchiveInputStream))]
+ (new JarInputStream))]
(loop [lib-data {}
- entry (.getNextTarEntry is)]
+ entry (.getNextJarEntry is)]
(if entry
- (recur (assoc lib-data (.getName entry) (new String (read-stream is)))
- (.getNextTarEntry is))
+ (if (.endsWith (.getName entry) ".lux")
+ (recur (assoc lib-data (.substring (.getName entry) 1) (new String (read-stream is)))
+ (.getNextJarEntry is))
+ (recur lib-data
+ (.getNextJarEntry is)))
lib-data))))
;; [Exports]
-(def lib-ext ".tar.gz")
-
(defn load []
(->> (fetch-libs)
(map unpackage)
(reduce merge {})))
-
-(comment
- (->> &/lib-dir load keys)
- )
diff --git a/src/lux/packager/lib.clj b/src/lux/packager/lib.clj
deleted file mode 100644
index af48e31eb..000000000
--- a/src/lux/packager/lib.clj
+++ /dev/null
@@ -1,41 +0,0 @@
-;; Copyright (c) Eduardo Julian. All rights reserved.
-;; This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
-;; If a copy of the MPL was not distributed with this file,
-;; You can obtain one at http://mozilla.org/MPL/2.0/.
-
-(ns lux.packager.lib
- (:require [lux.lib.loader :as &lib])
- (:import (java.io File
- FileOutputStream)
- java.util.zip.GZIPOutputStream
- (org.apache.commons.compress.archivers.tar TarArchiveEntry
- TarArchiveOutputStream)
- ))
-
-;; [Utils]
-(defn ^:private read-file ^objects [^File file]
- (with-open [is (java.io.FileInputStream. file)]
- (let [data (byte-array (.length file))]
- (.read is data)
- data)))
-
-(defn ^:private add-to-tar! [prefix ^File file ^TarArchiveOutputStream os]
- "(-> Text File TarArchiveOutputStream Unit)"
- (let [file-name (str prefix "/" (.getName file))]
- (if (.isDirectory file)
- (doseq [file (seq (.listFiles file))]
- (add-to-tar! file-name file os))
- (let [data (read-file file)]
- (doto os
- (.putArchiveEntry (doto (new TarArchiveEntry file-name)
- (.setSize (.length file))))
- (.write data 0 (alength data))
- (.closeArchiveEntry))))))
-
-;; [Exports]
-(defn package [output-lib-name ^File source-dir]
- "(-> Text File Unit)"
- (with-open [out (->> (str output-lib-name &lib/lib-ext) (new FileOutputStream) (new GZIPOutputStream) (new TarArchiveOutputStream))]
- (doseq [file (seq (.listFiles source-dir))]
- (add-to-tar! "" file out))
- ))
diff --git a/src/lux/packager/program.clj b/src/lux/packager/program.clj
index 83927ba0d..0ff06a453 100644
--- a/src/lux/packager/program.clj
+++ b/src/lux/packager/program.clj
@@ -74,19 +74,29 @@
(recur (.read is buffer 0 buffer-size)))))
(.toByteArray os)))))
-(defn ^:private add-jar! [^File jar-file ^JarOutputStream out]
+(defn ^:private add-jar! [^File jar-file seen ^JarOutputStream out]
(with-open [is (->> jar-file (new FileInputStream) (new JarInputStream))]
- (loop [^JarEntry entry (.getNextJarEntry is)]
- (when entry
- (when (and (not (.isDirectory entry))
- (not (.startsWith (.getName entry) "META-INF/")))
- (let [entry-data (read-stream is)]
- (doto out
- (.putNextEntry entry)
- (.write entry-data 0 (alength entry-data))
- (.flush)
- (.closeEntry))))
- (recur (.getNextJarEntry is))))))
+ (loop [^JarEntry entry (.getNextJarEntry is)
+ seen seen]
+ (if entry
+ (let [entry-name (.getName entry)]
+ (if (and (not (.isDirectory entry))
+ (not (.startsWith entry-name "META-INF/"))
+ (.endsWith entry-name ".class")
+ (not (contains? seen entry-name)))
+ (let [;; _ (prn 'entry entry-name)
+ entry-data (read-stream is)]
+ (doto out
+ (.putNextEntry entry)
+ (.write entry-data 0 (alength entry-data))
+ (.flush)
+ (.closeEntry))
+ (recur (.getNextJarEntry is)
+ (conj seen entry-name)))
+ (recur (.getNextJarEntry is)
+ seen)))
+ seen
+ ))))
;; [Resources]
(defn package [module]
@@ -94,6 +104,10 @@
(with-open [out (new JarOutputStream (->> &&/output-package (new File) (new FileOutputStream)) (manifest module))]
(doseq [$group (.listFiles (new File &&/output-dir))]
(write-module! $group out))
- (doseq [^String jar-file (fetch-available-jars)]
- (add-jar! (new File jar-file) out))
+ (->> (fetch-available-jars)
+ (filter #(and (not (.endsWith % "luxc.jar"))
+ (not (.endsWith % "tools.nrepl-0.2.3.jar"))
+ (not (.endsWith % "clojure-complete-0.2.3.jar"))))
+ (reduce (fn [s ^String j] (add-jar! (new File ^String j) s out))
+ #{}))
))