guix-more/more/packages/scala.scm

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