-
Notifications
You must be signed in to change notification settings - Fork 4
/
install.xq
51 lines (47 loc) · 1.49 KB
/
install.xq
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
(:~
: Installs all dependencies
: loads and extracts zip files
: @author arolle
: @see http://github.com/arolle/basex-docu
:)
import module namespace C = "basex-docu-conversion-config" at "src/config.xqm";
file:create-dir($C:TMP),
(: all sources and their path/name where they shall end up :)
let $deps := (
map {
"url" : "http://files.basex.org/etc/basex-docu/docbook-xsl-ns-1.79.1.zip",
"name" : "docbook"
},
map {
"url" : "http://files.basex.org/etc/basex-docu/fop-2.1-bin.zip",
"name" : "fop"
},
map {
"url" : "http://files.basex.org/etc/basex-docu/herold-6.1.0-188.zip",
"name" : "herold"
}
)
(: load and extract each dependency, if not yet done so :)
for $dep in $deps
let $trg-dir := 'lib/' || $dep("name") || '/'
where not(file:exists($trg-dir))
let $zip-file := $C:TMP || $dep("name") || ".zip" (: save archive locally :)
let $archive := (
if(file:exists($zip-file)) then () else (
file:write-binary($zip-file, fetch:binary($dep("url"))),
C:log(static-base-uri(), "downloaded: " || $zip-file)
),
stream:materialize(file:read-binary($zip-file))
)
let $entries := archive:entries($archive)
let $contents := archive:extract-binary($archive)
return (
for-each-pair($entries, $contents, function($entry, $content) {
let $path := replace($entry, '^.*?/', $trg-dir)
return (
file:create-dir(file:parent($path)),
file:write-binary($path, $content)
)
}),
C:log(static-base-uri(), "extracted " || $zip-file || " to " || $trg-dir)
)