scala.scm
1 | ;;; GNU Guix --- Functional package management for GNU |
2 | ;;; Copyright © 2018 Julien Lepiller <julien@lepiller.eu> |
3 | ;;; |
4 | ;;; This file is part of GNU Guix. |
5 | ;;; |
6 | ;;; GNU Guix is free software; you can redistribute it and/or modify it |
7 | ;;; under the terms of the GNU General Public License as published by |
8 | ;;; the Free Software Foundation; either version 3 of the License, or (at |
9 | ;;; your option) any later version. |
10 | ;;; |
11 | ;;; GNU Guix is distributed in the hope that it will be useful, but |
12 | ;;; WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
14 | ;;; GNU General Public License for more details. |
15 | ;;; |
16 | ;;; You should have received a copy of the GNU General Public License |
17 | ;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. |
18 | |
19 | (define-module (more packages scala) |
20 | #:use-module ((guix licenses) #:prefix license:) |
21 | #:use-module (gnu packages) |
22 | #:use-module (guix packages) |
23 | #:use-module (guix download) |
24 | #:use-module (guix git-download) |
25 | #:use-module (guix utils) |
26 | #:use-module (guix build-system ant) |
27 | #:use-module (guix build-system trivial) |
28 | #:use-module (gnu packages base) |
29 | #:use-module (gnu packages bash) |
30 | #:use-module (gnu packages compression) |
31 | #:use-module (gnu packages java) |
32 | #:use-module (more packages java)) |
33 | |
34 | ;; This package downloads the so-called official version of scala, a pre-built |
35 | ;; binary by the scala developers. |
36 | ;; This binary should never be made part of Guix itself, because we have |
37 | ;; ways to bootstrap it properly. The bootstrap project of scala takes time, |
38 | ;; so in the meantime... here you are :( |
39 | (define-public scala-official |
40 | (package |
41 | (name "scala-official") |
42 | (version "2.12.6") |
43 | (source |
44 | (origin |
45 | (method url-fetch) |
46 | (uri (string-append "https://downloads.lightbend.com/scala/" |
47 | version "/scala-" version ".tgz")) |
48 | (sha256 |
49 | (base32 |
50 | "05ili2959yrshqi44wpmwy0dyfm4kvp6i8mlbnj1xvc5b9649iqs")))) |
51 | (build-system trivial-build-system) |
52 | (arguments |
53 | `(#:modules ((guix build utils)) |
54 | #:builder (begin |
55 | (use-modules (guix build utils)) |
56 | (let* ((source (assoc-ref %build-inputs "source")) |
57 | (java (assoc-ref %build-inputs "icedtea-8")) |
58 | (bash (assoc-ref %build-inputs "bash")) |
59 | (tar (string-append |
60 | (assoc-ref %build-inputs "tar") |
61 | "/bin/tar")) |
62 | (gzip (assoc-ref %build-inputs "gzip")) |
63 | (output (assoc-ref %outputs "out")) |
64 | (bindir (string-append output "/bin"))) |
65 | (mkdir-p output) |
66 | (setenv "PATH" (string-append (getenv "PATH") ":" gzip "/bin")) |
67 | (invoke tar "xf" source) |
68 | (copy-recursively "scala-2.12.6" output) |
69 | (chdir output) |
70 | (for-each delete-file (find-files "bin" "bat$")) |
71 | (substitute* (find-files "bin" ".*") |
72 | (("^#!.*") |
73 | (string-append "#!" bash "/bin/bash\n" "JAVA_HOME=" java))))))) |
74 | (inputs |
75 | `(("bash" ,bash) |
76 | ("gzip" ,gzip) |
77 | ("icedtea-8" ,icedtea-8) |
78 | ("tar" ,tar))) |
79 | (home-page "https://scala-lang.org/") |
80 | (synopsis "") |
81 | (description "") |
82 | (license license:bsd-3))) |
83 | |
84 | (define-public sbt-boilerplate-standalone |
85 | (package |
86 | (name "sbt-boilerplate-standalone") |
87 | (version "0.6.1") |
88 | (source (origin |
89 | (method url-fetch) |
90 | (uri (string-append "https://github.com/sbt/sbt-boilerplate/archive/v" |
91 | version ".tar.gz")) |
92 | (file-name (string-append name "-" version ".tar.gz")) |
93 | (sha256 |
94 | (base32 |
95 | "1xzh7qrsl2nmnbyzlmrshzfsf8b4qgf6yaqm1hn3qnzk6761p2jy")))) |
96 | (build-system ant-build-system) |
97 | (arguments |
98 | `(#:tests? #f |
99 | #:jdk ,icedtea-8 |
100 | #:phases |
101 | (modify-phases %standard-phases |
102 | (add-before 'build 'add-standalone |
103 | (lambda _ |
104 | (substitute* "src/main/scala/spray/boilerplate/Generator.scala" |
105 | (("object Generator \\{") |
106 | "object Generator { |
107 | def main(args: Array[String]): Unit = { |
108 | val num = args(2).toInt |
109 | val file = scala.io.Source.fromFile(args(0)) |
110 | val content = file.mkString |
111 | val result = new java.io.PrintWriter(new java.io.File(args(1))) |
112 | |
113 | file.close |
114 | result.write(generateFromTemplate(content, num)) |
115 | result.close() |
116 | }")) |
117 | #t)) |
118 | (replace 'build |
119 | (lambda _ |
120 | (mkdir-p "build/classes") |
121 | (mkdir-p "build/jar") |
122 | (invoke "scalac" "-classpath" (getenv "CLASSPATH") |
123 | "-d" "build/classes" |
124 | "src/main/scala/spray/boilerplate/Generator.scala" |
125 | "src/main/scala/spray/boilerplate/TemplateParser.scala") |
126 | (invoke "jar" "-cf" "build/jar/boilerplate.jar" |
127 | "-C" "build/classes" ".") |
128 | #t)) |
129 | (replace 'install |
130 | (install-jars "build"))))) |
131 | (native-inputs |
132 | `(("scala" ,scala-official))) |
133 | (home-page "https://github.com/sbt/sbt-boilerplate") |
134 | (synopsis "") |
135 | (description "") |
136 | (license license:bsd-2))) |
137 | |
138 | (define-public scala-sjsonnew |
139 | (package |
140 | (name "scala-sjsonnew") |
141 | (version "0.8.2") |
142 | (source |
143 | (origin |
144 | (method url-fetch) |
145 | (uri (string-append "https://github.com/eed3si9n/sjson-new/archive/v" |
146 | version ".tar.gz")) |
147 | (file-name (string-append name "-" version ".tar.gz")) |
148 | (sha256 |
149 | (base32 |
150 | "1rv0c50af5kn27x51g650wl2ig94z52fhs0rn8ykahpz4jhg1p7p")))) |
151 | (arguments |
152 | `(#:tests? #f |
153 | #:jdk ,icedtea-8 |
154 | #:phases |
155 | (modify-phases %standard-phases |
156 | (add-before 'build 'generate-boilerplate |
157 | (lambda _ |
158 | ; CaseClassFormats.scala.template FlatUnionFormats.scala.template TupleFormats.scala.template UnionFormats.scala.template |
159 | (invoke "java" "-cp" (getenv "CLASSPATH") "spray.boilerplate.Generator" |
160 | "core/src/main/boilerplate/sjsonnew/CaseClassFormats.scala.template" |
161 | "core/src/main/scala/sjsonnew/CaseClassFormats.scala" "22") |
162 | (invoke "java" "-cp" (getenv "CLASSPATH") "spray.boilerplate.Generator" |
163 | "core/src/main/boilerplate/sjsonnew/FlatUnionFormats.scala.template" |
164 | "core/src/main/scala/sjsonnew/FlatUnionFormats.scala" "22") |
165 | (invoke "java" "-cp" (getenv "CLASSPATH") "spray.boilerplate.Generator" |
166 | "core/src/main/boilerplate/sjsonnew/TupleFormats.scala.template" |
167 | "core/src/main/scala/sjsonnew/TupleFormats.scala" "22") |
168 | (invoke "java" "-cp" (getenv "CLASSPATH") "spray.boilerplate.Generator" |
169 | "core/src/main/boilerplate/sjsonnew/UnionFormats.scala.template" |
170 | "core/src/main/scala/sjsonnew/UnionFormats.scala" "22") |
171 | #t)) |
172 | (replace 'build |
173 | (lambda _ |
174 | (mkdir-p "build/classes") |
175 | (apply invoke "scalac" "-classpath" (getenv "CLASSPATH") |
176 | "-d" "build/classes" |
177 | (find-files "core/src/main/scala" ".*.scala$")) |
178 | (mkdir-p "build/jar") |
179 | (invoke "jar" "-cf" "build/jar/sjsonnew.jar" |
180 | "-C" "build/classes" ".") |
181 | #t)) |
182 | (replace 'install |
183 | (install-jars "build"))))) |
184 | (build-system ant-build-system) |
185 | (native-inputs |
186 | `(("scala" ,scala-official) |
187 | ("sbt-boilerplate-standalone" ,sbt-boilerplate-standalone))) |
188 | (home-page "") |
189 | (synopsis "") |
190 | (description "") |
191 | (license license:asl2.0))) |
192 | |
193 | ;; TODO: https://github.com/mdedetrich/scalajson |
194 | (define-public scala-sjsonnew-support-scalajson |
195 | (package |
196 | (inherit scala-sjsonnew) |
197 | (name "scala-sjsonnew-support-scalajson") |
198 | (arguments |
199 | `(#:tests? #f |
200 | #:phases |
201 | (modify-phases %standard-phases |
202 | (replace 'build |
203 | (lambda _ |
204 | (mkdir-p "build/classes") |
205 | (apply invoke "scalac" "-classpath" (getenv "CLASSPATH") |
206 | "-d" "build/classes" |
207 | (find-files "support/scalajson/src/main/scala" ".*.scala$")) |
208 | (mkdir-p "build/jar") |
209 | (invoke "jar" "-cf" "build/jar/sjsonnew-support-scalajson.jar" |
210 | "-C" "build/classes" ".") |
211 | #t)) |
212 | (replace 'install |
213 | (install-jars "build"))))) |
214 | (inputs |
215 | `(("scala-sjsonnew" ,scala-sjsonnew))))) |
216 | |
217 | (define-public scala-kind-projector |
218 | (package |
219 | (name "scala-kind-projector") |
220 | (version "0.9.7") |
221 | (source (origin |
222 | (method url-fetch) |
223 | (uri (string-append "https://github.com/non/kind-projector/archive/v" |
224 | version ".tar.gz")) |
225 | (file-name (string-append name "-" version ".tar.gz")) |
226 | (sha256 |
227 | (base32 |
228 | "176g2d7ix2asp94ch39mza84k6z8by308hzglxs8933j8byramff")))) |
229 | (build-system ant-build-system) |
230 | (arguments |
231 | `(#:jdk ,icedtea-8 |
232 | #:phases |
233 | (modify-phases %standard-phases |
234 | (replace 'build |
235 | (lambda _ |
236 | (mkdir-p "build/classes") |
237 | (mkdir-p "build/jar") |
238 | (copy-recursively "src/main/resources" "build/classes") |
239 | (apply invoke "scalac" "-classpath" (getenv "CLASSPATH") |
240 | "-d" "build/classes" |
241 | (find-files "src/main/scala" ".*.scala$")) |
242 | (invoke "jar" "-cf" "build/jar/kind-projector.jar" |
243 | "-C" "build/classes" ".") |
244 | #t)) |
245 | (replace 'check |
246 | (lambda _ |
247 | (mkdir-p "build/test-classes") |
248 | (copy-recursively "src/test/resources" "build/test-classes") |
249 | (apply invoke "scalac" "-classpath" (getenv "CLASSPATH") |
250 | "-Xplugin:build/jar/kind-projector.jar" |
251 | "-d" "build/test-classes" |
252 | (find-files "src/test/scala" ".*.scala$")) |
253 | ;; TODO: actually run the tests... :D |
254 | #t)) |
255 | (replace 'install |
256 | (install-jars "build"))))) |
257 | (native-inputs |
258 | `(("scala-official" ,scala-official) |
259 | ("java-junit" ,java-junit))) |
260 | (home-page "https://github.com/non/kind-projector") |
261 | (synopsis "Scala compiler plugin for type lambda") |
262 | (description "Kind projector is a Scala compiler plugin for making type |
263 | lambdas (type projections) easier to write.") |
264 | (license license:expat))) |
265 | |
266 | (define-public sbt-util-position |
267 | (package |
268 | (name "sbt-util-position") |
269 | (version "1.2.2") |
270 | (source |
271 | (origin |
272 | (method url-fetch) |
273 | (uri (string-append "https://github.com/sbt/util/archive/v" |
274 | version ".tar.gz")) |
275 | (file-name (string-append "sbt-util-" version ".tar.gz")) |
276 | (sha256 |
277 | (base32 |
278 | "1mj6ny62crq1d8850lkj00g3wsjhflaxrqiiv72b02fb8hn671dh")))) |
279 | (build-system ant-build-system) |
280 | (arguments |
281 | `(#:tests? #f |
282 | #:jdk ,icedtea-8 |
283 | #:phases |
284 | (modify-phases %standard-phases |
285 | (replace 'build |
286 | (lambda* (#:key inputs #:allow-other-keys) |
287 | (define (build-subproject prefix name) |
288 | (let ((build-directory (string-append "build/" name)) |
289 | (jar-name (string-append name ".jar"))) |
290 | (mkdir-p build-directory) |
291 | (format #t "Building project ~a...~%" name) |
292 | (apply invoke "scalac" "-classpath" |
293 | (string-append (getenv "CLASSPATH") ":build/util-interface") |
294 | "-d" build-directory "-language:experimental.macros" |
295 | (find-files (string-append prefix name "/src/main/scala") |
296 | ".*.scala$")) |
297 | (invoke "jar" "cf" jar-name "-C" build-directory "."))) |
298 | (build-subproject "internal/" "util-position") |
299 | #t)) |
300 | (replace 'install |
301 | (install-jars "."))))) |
302 | (inputs |
303 | `(("java-log4j-api" ,java-log4j-api) |
304 | ("java-log4j-core" ,java-log4j-core) |
305 | ("scala" ,scala-official) |
306 | ("scala-sjsonnew" ,scala-sjsonnew))) |
307 | (home-page "https://www.scala-sbt.org/") |
308 | (synopsis "") |
309 | (description "") |
310 | (license license:bsd-3))) |
311 | |
312 | (define-public sbt-util-control |
313 | (package |
314 | (inherit sbt-util-position) |
315 | (name "sbt-util-control") |
316 | (arguments |
317 | `(#:tests? #f |
318 | #:jdk ,icedtea-8 |
319 | #:phases |
320 | (modify-phases %standard-phases |
321 | (replace 'build |
322 | (lambda* (#:key inputs #:allow-other-keys) |
323 | (define (build-subproject prefix name) |
324 | (let ((build-directory (string-append "build/" name)) |
325 | (jar-name (string-append name ".jar"))) |
326 | (mkdir-p build-directory) |
327 | (format #t "Building project ~a...~%" name) |
328 | (apply invoke "scalac" "-classpath" |
329 | (string-append (getenv "CLASSPATH") ":build/util-interface") |
330 | "-d" build-directory "-language:experimental.macros" |
331 | (find-files (string-append prefix name "/src/main/scala") |
332 | ".*.scala$")) |
333 | (invoke "jar" "cf" jar-name "-C" build-directory "."))) |
334 | (build-subproject "internal/" "util-control") |
335 | #t)) |
336 | (replace 'install |
337 | (install-jars "."))))))) |
338 | |
339 | (define-public sbt-util-interface |
340 | (package |
341 | (inherit sbt-util-position) |
342 | (name "sbt-util-interface") |
343 | (arguments |
344 | `(#:tests? #f |
345 | #:jdk ,icedtea-8 |
346 | #:source-dir "internal/util-interface/src/main/java" |
347 | #:jar-name "util-interface.jar")))) |
348 | |
349 | (define-public java-log4j-api-for-sbt |
350 | (package |
351 | (inherit java-log4j-api) |
352 | (version "2.8.1") |
353 | ;(version "2.11.1") |
354 | (arguments |
355 | (ensure-keyword-arguments (package-arguments java-log4j-api) |
356 | `(#:jdk ,icedtea-8 |
357 | #:source-dir "src/main/java" |
358 | #:phases |
359 | (modify-phases %standard-phases |
360 | (add-after 'unpack 'chdir |
361 | (lambda _ |
362 | (chdir "log4j-api") |
363 | #t)) |
364 | (add-before 'build 'fix-ambiguous |
365 | (lambda _ |
366 | (substitute* "src/main/java/org/apache/logging/log4j/message/MapMessage.java" |
367 | (("append\\(data") "append((CharSequence)data")) |
368 | #t)))))) |
369 | (source (origin |
370 | (method url-fetch) |
371 | (uri (string-append "mirror://apache/logging/log4j/" version |
372 | "/apache-log4j-" version "-src.tar.gz")) |
373 | (sha256 |
374 | (base32 |
375 | "0x5gksgh0jkvd7k70rqrs2hy3glms0pkj6lhl26m6f83x1b6kvdm")))))) |
376 | ;"1dhxnd0348is21w93m1rv2sbfwyx83rv63adnbd0bgjq01gzbvic")))))) |
377 | |
378 | ;; More dependencies needed |
379 | (define-public java-log4j-core-for-sbt |
380 | (package |
381 | (inherit java-log4j-api-for-sbt) |
382 | (name "java-log4j-core") |
383 | (inputs |
384 | `(("java-osgi-core" ,java-osgi-core) |
385 | ("java-hamcrest-core" ,java-hamcrest-core) |
386 | ("java-log4j-api" ,java-log4j-api-for-sbt) |
387 | ("java-mail" ,java-mail) |
388 | ("java-jansi" ,java-jansi) |
389 | ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec) |
390 | ("java-jctools-core" ,java-jctools-core) |
391 | ("java-lmax-disruptor" ,java-lmax-disruptor) |
392 | ("java-kafka" ,java-kafka-clients) |
393 | ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence) |
394 | ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations) |
395 | ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core) |
396 | ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind) |
397 | ("java-fasterxml-jackson-dataformat-xml" ,java-fasterxml-jackson-dataformat-xml) |
398 | ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml) |
399 | ("java-commons-compress" ,java-commons-compress) |
400 | ("java-commons-csv" ,java-commons-csv) |
401 | ("java-conversantmedia-disruptor" ,java-conversantmedia-disruptor) |
402 | ("java-jcommander" ,java-jcommander) |
403 | ("java-stax2-api" ,java-stax2-api) |
404 | ("java-jeromq" ,java-jeromq) |
405 | ("java-junit" ,java-junit))) |
406 | (native-inputs |
407 | `(("hamcrest" ,java-hamcrest-all) |
408 | ("java-commons-io" ,java-commons-io) |
409 | ("java-commons-lang3" ,java-commons-lang3) |
410 | ("slf4j" ,java-slf4j-api))) |
411 | (arguments |
412 | `(#:tests? #f ; tests require more dependencies |
413 | #:test-dir "src/test" |
414 | #:source-dir "src/main/java" |
415 | #:jar-name "log4j-core.jar" |
416 | #:jdk ,icedtea-8 |
417 | #:make-flags |
418 | (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out") |
419 | "/share/java")) |
420 | #:phases |
421 | (modify-phases %standard-phases |
422 | (add-after 'unpack 'enter-dir |
423 | (lambda _ (chdir "log4j-core") #t)) |
424 | (add-before 'build 'fix-ambiguous |
425 | (lambda _ |
426 | (substitute* "src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java" |
427 | (("append\\(sortedMap") "append((CharSequence)sortedMap")) |
428 | #t))))) |
429 | (synopsis "Core component of the Log4j framework") |
430 | (description "This package provides the core component of the Log4j |
431 | logging framework for Java."))) |
432 | |
433 | |
434 | (define-public sbt-util-logging |
435 | (package |
436 | (inherit sbt-util-position) |
437 | (name "sbt-util-logging") |
438 | (arguments |
439 | `(#:tests? #f |
440 | #:jdk ,icedtea-8 |
441 | #:phases |
442 | (modify-phases %standard-phases |
443 | (replace 'build |
444 | (lambda* (#:key inputs #:allow-other-keys) |
445 | (define (build-subproject prefix name) |
446 | (let ((build-directory (string-append "build/" name)) |
447 | (jar-name (string-append name ".jar"))) |
448 | (mkdir-p build-directory) |
449 | (format #t "Building project ~a...~%" name) |
450 | (apply invoke "scalac" "-classpath" |
451 | (string-append (getenv "CLASSPATH") ":build/util-interface") |
452 | "-d" build-directory "-language:experimental.macros" |
453 | (append |
454 | (find-files (string-append prefix name "/src/main/contraband-scala") |
455 | ".*.scala$") |
456 | (find-files (string-append prefix name "/src/main/scala") |
457 | ".*.scala$"))) |
458 | (invoke "jar" "cf" jar-name "-C" build-directory "."))) |
459 | (build-subproject "internal/" "util-logging") |
460 | #t)) |
461 | (replace 'install |
462 | (install-jars "."))))) |
463 | (inputs |
464 | `(("java-log4j-api" ,java-log4j-api-for-sbt) |
465 | ("java-log4j-core" ,java-log4j-core-for-sbt) |
466 | ("sbt-util-interface" ,sbt-util-interface) |
467 | ("scala-sjsonnew" ,scala-sjsonnew))) |
468 | (native-inputs |
469 | `(("scala-official" ,scala-official))))) |
470 | |
471 | (define-public java-swoval-apple-file-events |
472 | (package |
473 | (name "java-swoval-apple-file-events") |
474 | (version "1.3.2") |
475 | (source (origin |
476 | (method url-fetch) |
477 | (uri (string-append "https://github.com/swoval/swoval/archive/v" |
478 | version ".tar.gz")) |
479 | (file-name (string-append "scala-swoval-" version ".tar.gz")) |
480 | (sha256 |
481 | (base32 |
482 | "0ivrc4lcali84xp8frkjb2zi1l3lw8pim9xbkfah5iyj120gw6mq")))) |
483 | (build-system ant-build-system) |
484 | (arguments |
485 | `(#:jdk ,icedtea-8 |
486 | #:tests? #f; no tests |
487 | #:jar-name "apple-file-events.jar" |
488 | #:source-dir "apple-file-events/jvm/src/main/java")) |
489 | (home-page "") |
490 | (synopsis "") |
491 | (description "") |
492 | (license license:expat))) |
493 | |
494 | (define-public sbt-io |
495 | (package |
496 | (name "sbt-io") |
497 | (version "1.2.1") |
498 | (source |
499 | (origin |
500 | (method url-fetch) |
501 | (uri (string-append "https://github.com/sbt/io/archive/v" |
502 | version ".tar.gz")) |
503 | (file-name (string-append name "-" version ".tar.gz")) |
504 | (sha256 |
505 | (base32 |
506 | "0cgk3y3w8yjpivi910px529bz8bil49lrnib6wbwmvq8lw8mgrwq")))) |
507 | (build-system ant-build-system) |
508 | (arguments |
509 | `(#:tests? #f |
510 | #:jdk ,icedtea-8 |
511 | #:phases |
512 | (modify-phases %standard-phases |
513 | (replace 'build |
514 | (lambda* (#:key inputs #:allow-other-keys) |
515 | (mkdir-p "build/classes") |
516 | (apply invoke "scalac" "-classpath" |
517 | (string-append (getenv "CLASSPATH") ":build/util-interface") |
518 | "-d" "build/classes" |
519 | (append |
520 | (find-files "io/src/main/java" ".*.java$") |
521 | (find-files "io/src/main/scala" ".*.scala$") |
522 | (find-files "io/src/main/contraband-scala" ".*.scala$"))) |
523 | (invoke "jar" "cf" "sbt-io.jar" "-C" "build/classes" ".") |
524 | #t)) |
525 | (replace 'install |
526 | (install-jars "."))))) |
527 | (inputs |
528 | `(("java-native-access" ,java-native-access) |
529 | ("java-native-access-platform" ,java-native-access-platform) |
530 | ("java-swoval-apple-file-events" ,java-swoval-apple-file-events) |
531 | ("scala" ,scala-official))) |
532 | (home-page "https://www.scala-sbt.org/") |
533 | (synopsis "") |
534 | (description "") |
535 | (license license:bsd-3))) |
536 | |
537 | (define-public sbt |
538 | (package |
539 | (name "sbt") |
540 | (version "1.2.1") |
541 | (source |
542 | (origin |
543 | (method url-fetch) |
544 | (uri (string-append "https://github.com/sbt/sbt/archive/v" |
545 | version ".tar.gz")) |
546 | (file-name (string-append name "-" version ".tar.gz")) |
547 | (sha256 |
548 | (base32 |
549 | "15i8fd7zgairaaikscrva8d1klz0w9nh7fc0896x1n8nrs578vmy")))) |
550 | (build-system ant-build-system) |
551 | (arguments |
552 | `(#:tests? #f |
553 | #:jdk ,icedtea-8 |
554 | #:phases |
555 | (modify-phases %standard-phases |
556 | (add-before 'build 'copy-resources |
557 | (lambda _ |
558 | (copy-recursively "sbt/src/main/resources" "build/classes") |
559 | #t)) |
560 | (add-before 'build 'generate-scalakeywords.scala |
561 | (lambda _ |
562 | (with-output-to-file "project/WriteKeywords.scala" |
563 | (lambda _ |
564 | (format #t "package project |
565 | object WriteKeywords { |
566 | def main(arg: Array[String]): Unit = { |
567 | val g = new scala.tools.nsc.Global(new scala.tools.nsc.Settings) |
568 | val keywords = g.nme.keywords.map(_.toString) |
569 | val init = keywords.map(tn => '\"' + tn + '\"').mkString(\"Set(\", \", \", \")\") |
570 | val ObjectName = \"ScalaKeywords\" |
571 | val PackageName = \"sbt.internal.util\" |
572 | val keywordsSrc = s\"\"\" |
573 | |package $PackageName |
574 | |object $ObjectName { |
575 | | val values = $init |
576 | |} |
577 | \"\"\".trim.stripMargin |
578 | val base = \"internal/util-collection/src/main/scala\" |
579 | val out = base + \"/\" + PackageName.replace('.', '/') + \"/\" + s\"$ObjectName.scala\" |
580 | val result = new java.io.PrintWriter(new java.io.File(out)) |
581 | result.write(keywordsSrc) |
582 | result.close() |
583 | } |
584 | }"))) |
585 | (invoke "scalac" "-classpath" (getenv "CLASSPATH") "project/WriteKeywords.scala") |
586 | (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":.") |
587 | "project.WriteKeywords") |
588 | #t)) |
589 | (replace 'build |
590 | (lambda* (#:key inputs #:allow-other-keys) |
591 | (define (build-subproject prefix name) |
592 | (let ((build-directory (string-append "build/" name)) |
593 | (jar-name (string-append name ".jar")) |
594 | (kind-projector (assoc-ref inputs "scala-kind-projector"))) |
595 | (mkdir-p build-directory) |
596 | (format #t "Building project ~a...~%" name) |
597 | (apply invoke "scalac" "-classpath" |
598 | ;; 13:36 < snape> roptat: I think you could use 'readdir', as in 'files-in-directory' from guix/build/union.scm |
599 | (apply string-append (getenv "CLASSPATH") |
600 | (map (lambda (file) (string-append ":" file)) |
601 | (find-files "build" "." #:directories? #t))) |
602 | "-d" build-directory |
603 | (string-append "-Xplugin:" kind-projector |
604 | "/share/java/kind-projector.jar") |
605 | (find-files (string-append prefix name "/src/main/scala") |
606 | ".*.scala$")) |
607 | (invoke "jar" "cf" jar-name "-C" build-directory "."))) |
608 | (build-subproject "internal/" "util-collection") |
609 | (build-subproject "internal/" "util-complete") |
610 | (build-subproject "" "core-macros") |
611 | (build-subproject "" "tasks") |
612 | (build-subproject "" "tasks-standard") |
613 | (build-subproject "" "main-settings") |
614 | (build-subproject "" "sbt") |
615 | #t)) |
616 | (replace 'install |
617 | (install-jars "."))))) |
618 | (inputs |
619 | `(("scala" ,scala-official) |
620 | ("scala-sjsonnew" ,scala-sjsonnew) |
621 | ("sbt-io" ,sbt-io) |
622 | ("sbt-util-control" ,sbt-util-control) |
623 | ("sbt-util-interface" ,sbt-util-interface) |
624 | ("sbt-util-logging" ,sbt-util-logging) |
625 | ("sbt-util-position" ,sbt-util-position))) |
626 | (native-inputs |
627 | `(("scala-kind-projector" ,scala-kind-projector))) |
628 | (home-page "https://www.scala-sbt.org/") |
629 | (synopsis "") |
630 | (description "") |
631 | (license license:bsd-3))) |
632 |