Implemented non-map manifest and sections
This commit is contained in:
parent
c78a8110a8
commit
bd6d25b323
1 changed files with 30 additions and 11 deletions
|
@ -19,29 +19,48 @@
|
||||||
(.replace path "\\" "/"))
|
(.replace path "\\" "/"))
|
||||||
|
|
||||||
(def ^:private default-manifest
|
(def ^:private default-manifest
|
||||||
{"Created-By" (str "Leiningen " (main/leiningen-version))
|
[["Created-By" (str "Leiningen " (main/leiningen-version))]
|
||||||
"Built-By" (System/getProperty "user.name")
|
["Built-By" (System/getProperty "user.name")]
|
||||||
"Build-Jdk" (System/getProperty "java.version")})
|
["Build-Jdk" (System/getProperty "java.version")]])
|
||||||
|
|
||||||
|
(declare ^:private manifest-entry)
|
||||||
|
|
||||||
|
(defn- manifest-entries [project manifest-seq]
|
||||||
|
(map (partial manifest-entry project) manifest-seq))
|
||||||
|
|
||||||
(defn- manifest-entry [project [k v]]
|
(defn- manifest-entry [project [k v]]
|
||||||
(cond (symbol? v) (manifest-entry project [k (resolve v)])
|
(cond (symbol? v) (manifest-entry project [k (resolve v)])
|
||||||
(fn? v) (manifest-entry project [k (v project)])
|
(fn? v) (manifest-entry project [k (v project)])
|
||||||
|
(coll? v) (->> v ;; Sub-manifest = manifest section
|
||||||
|
(manifest-entries project)
|
||||||
|
(cons (str "\nName: " (name k) "\n"))
|
||||||
|
(string/join))
|
||||||
:else (->> (str (name k) ": " v)
|
:else (->> (str (name k) ": " v)
|
||||||
(partition-all 70) ;; Manifest spec says lines <= 72 chars
|
(partition-all 70) ;; Manifest spec says lines <= 72 chars
|
||||||
(map (partial apply str))
|
(map (partial apply str))
|
||||||
(string/join "\n ") ;; Manifest spec says join with "\n "
|
(string/join "\n ") ;; Manifest spec says join with "\n "
|
||||||
(format "%s\n"))))
|
(format "%s\n"))))
|
||||||
|
|
||||||
|
(defn- manifest-map-to-reordered-seq [mf]
|
||||||
|
(sort
|
||||||
|
(comparator
|
||||||
|
(fn [e1 e2]
|
||||||
|
(not (coll? (second e1)))))
|
||||||
|
(seq mf)))
|
||||||
|
|
||||||
(defn ^:internal make-manifest [project]
|
(defn ^:internal make-manifest [project]
|
||||||
(->> (merge default-manifest (:manifest project)
|
(let [initial-mf
|
||||||
|
(concat (conj default-manifest
|
||||||
(if-let [main (:main project 'clojure.main)]
|
(if-let [main (:main project 'clojure.main)]
|
||||||
{"Main-Class" (munge (str main))}))
|
["Main-Class" (munge (str main))]))
|
||||||
(map (partial manifest-entry project))
|
(manifest-map-to-reordered-seq (:manifest project)))]
|
||||||
|
(->> initial-mf
|
||||||
|
(manifest-entries project)
|
||||||
(cons "Manifest-Version: 1.0\n") ;; Manifest-Version line must be first
|
(cons "Manifest-Version: 1.0\n") ;; Manifest-Version line must be first
|
||||||
(string/join "")
|
(string/join "")
|
||||||
.getBytes
|
.getBytes
|
||||||
ByteArrayInputStream.
|
ByteArrayInputStream.
|
||||||
Manifest.))
|
Manifest.)))
|
||||||
|
|
||||||
(defn ^:internal manifest-map [manifest]
|
(defn ^:internal manifest-map [manifest]
|
||||||
(let [attrs (.getMainAttributes manifest)]
|
(let [attrs (.getMainAttributes manifest)]
|
||||||
|
|
Loading…
Reference in a new issue