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
(define-public scala-scalajson
194
  (package
195
    (name "scala-scalajson")
196
    (version "1.0.0-M4")
197
    (source (origin
198
              (method url-fetch)
199
              (uri (string-append "https://github.com/mdedetrich/scalajson/archive/v" version ".tar.gz"))
200
              (file-name (string-append name "-" version ".tar.gz"))
201
              (sha256
202
               (base32
203
                "0k4dj2zm7zilhshdnvqi9n17qr4szc5s9ymsm9imgqpr8r5hm2vj"))))
204
    (build-system ant-build-system)
205
    (arguments
206
     `(#:tests? #f
207
       #:phases
208
       (modify-phases %standard-phases
209
         (replace 'build
210
           (lambda _
211
             (mkdir-p "build/classes")
212
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
213
                    "-d" "build/classes"
214
                    (find-files "shared/src/main/scala" ".*.scala$"))
215
             (mkdir-p "build/jar")
216
             (invoke "jar" "-cf" "build/jar/scalajson-shared.jar"
217
                     "-C" "build/classes" ".")
218
             (delete-file-recursively "build/classes")
219
             (setenv "CLASSPATH" (string-append (getenv "CLASSPATH") ":build/jar/scalajson-shared.jar"))
220
             (mkdir-p "build/classes")
221
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
222
                    "-d" "build/classes"
223
                    (find-files "jvm/src/main/scala" ".*.scala$"))
224
             (mkdir-p "build/jar")
225
             (invoke "jar" "-cf" "build/jar/scalajson-jvm.jar"
226
                     "-C" "build/classes" ".")
227
             #t))
228
         (replace 'install
229
           (install-jars "build")))))
230
    (native-inputs
231
     `(("scala" ,scala-official)))
232
    (home-page "")
233
    (synopsis "")
234
    (description "")
235
    (license license:bsd-3)))
236
237
;; Latest is 0.13.0, but this version is required for scala-jsonnew
238
(define-public scala-jawn
239
  (package
240
    (name "scala-jawn")
241
    (version "0.10.4")
242
    (source (origin
243
              (method url-fetch)
244
              (uri (string-append "https://github.com/non/jawn/archive/v"
245
                                  version ".tar.gz"))
246
              (file-name (string-append name "-" version ".tar.gz"))
247
              (sha256
248
               (base32
249
                "1iic1rp7w7vsy0xhi40rcp339vcq5b4b46f51qrkfpv433f7hafi"))))
250
    (build-system ant-build-system)
251
    (arguments
252
     `(#:tests? #f
253
       #:phases
254
       (modify-phases %standard-phases
255
         (replace 'build
256
           (lambda _
257
             (mkdir-p "build/classes")
258
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
259
                    "-d" "build/classes"
260
                    (find-files "util/src/main/scala" ".*.scala$"))
261
             (mkdir-p "build/jar")
262
             (invoke "jar" "-cf" "build/jar/jawn-util.jar"
263
                     "-C" "build/classes" ".")
264
             (delete-file-recursively "build/classes")
265
             (setenv "CLASSPATH" (string-append (getenv "CLASSPATH") ":build/jar/scalajson-shared.jar"))
266
             (mkdir-p "build/classes")
267
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
268
                    "-d" "build/classes"
269
                    (find-files "parser/src/main/scala" ".*.scala$"))
270
             (mkdir-p "build/jar")
271
             (invoke "jar" "-cf" "build/jar/jawn-parser.jar"
272
                     "-C" "build/classes" ".")
273
             #t))
274
         (replace 'install
275
           (install-jars "build")))))
276
    (native-inputs
277
     `(("scala" ,scala-official)))
278
    (home-page "")
279
    (synopsis "")
280
    (description "")
281
    (license license:bsd-3)))
282
283
(define-public scala-sjsonnew-support-scalajson
284
  (package
285
    (inherit scala-sjsonnew)
286
    (name "scala-sjsonnew-support-scalajson")
287
    (arguments
288
     `(#:tests? #f
289
       #:phases
290
       (modify-phases %standard-phases
291
         (replace 'build
292
           (lambda _
293
             (substitute* (find-files "." ".*.scala")
294
               (("shaded.scalajson") "scalajson"))
295
             (mkdir-p "build/classes")
296
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
297
                    "-d" "build/classes"
298
                    (find-files "support/scalajson/src/main/scala" ".*.scala$"))
299
             (mkdir-p "build/jar")
300
             (invoke "jar" "-cf" "build/jar/sjsonnew-support-scalajson.jar"
301
                     "-C" "build/classes" ".")
302
             #t))
303
         (replace 'install
304
           (install-jars "build")))))
305
    (inputs
306
     `(("scala-sjsonnew" ,scala-sjsonnew)
307
       ("scala-scalajson" ,scala-scalajson)
308
       ("scala-jawn" ,scala-jawn)))))
309
310
(define-public scala-sjsonnew-support-murmurhash
311
  (package
312
    (inherit scala-sjsonnew)
313
    (name "scala-sjsonnew-support-murmurhash")
314
    (arguments
315
     `(#:tests? #f
316
       #:phases
317
       (modify-phases %standard-phases
318
         (replace 'build
319
           (lambda _
320
             (mkdir-p "build/classes")
321
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
322
                    "-d" "build/classes"
323
                    (find-files "support/murmurhash/src/main/scala" ".*.scala$"))
324
             (mkdir-p "build/jar")
325
             (invoke "jar" "-cf" "build/jar/sjsonnew-support-murmurhash.jar"
326
                     "-C" "build/classes" ".")
327
             #t))
328
         (replace 'install
329
           (install-jars "build")))))
330
    (inputs
331
     `(("scala-sjsonnew" ,scala-sjsonnew)))))
332
333
(define-public scala-kind-projector
334
  (package
335
    (name "scala-kind-projector")
336
    (version "0.9.7")
337
    (source (origin
338
              (method url-fetch)
339
              (uri (string-append "https://github.com/non/kind-projector/archive/v"
340
                                  version ".tar.gz"))
341
              (file-name (string-append name "-" version ".tar.gz"))
342
              (sha256
343
               (base32
344
                "176g2d7ix2asp94ch39mza84k6z8by308hzglxs8933j8byramff"))))
345
    (build-system ant-build-system)
346
    (arguments
347
     `(#:jdk ,icedtea-8
348
       #:phases
349
       (modify-phases %standard-phases
350
         (replace 'build
351
           (lambda _
352
             (mkdir-p "build/classes")
353
             (mkdir-p "build/jar")
354
             (copy-recursively "src/main/resources" "build/classes")
355
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
356
                    "-d" "build/classes"
357
                    (find-files "src/main/scala" ".*.scala$"))
358
             (invoke "jar" "-cf" "build/jar/kind-projector.jar"
359
                     "-C" "build/classes" ".")
360
             #t))
361
         (replace 'check
362
           (lambda _
363
             (mkdir-p "build/test-classes")
364
             (copy-recursively "src/test/resources" "build/test-classes")
365
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
366
                    "-Xplugin:build/jar/kind-projector.jar"
367
                    "-d" "build/test-classes"
368
                    (find-files "src/test/scala" ".*.scala$"))
369
             ;; TODO: actually run the tests... :D
370
             #t))
371
         (replace 'install
372
           (install-jars "build")))))
373
    (native-inputs
374
     `(("scala-official" ,scala-official)
375
       ("java-junit" ,java-junit)))
376
    (home-page "https://github.com/non/kind-projector")
377
    (synopsis "Scala compiler plugin for type lambda")
378
    (description "Kind projector is a Scala compiler plugin for making type
379
lambdas (type projections) easier to write.")
380
    (license license:expat)))
381
382
(define-public sbt-util-position
383
  (package
384
    (name "sbt-util-position")
385
    (version "1.2.2")
386
    (source
387
      (origin
388
        (method url-fetch)
389
        (uri (string-append "https://github.com/sbt/util/archive/v"
390
                            version ".tar.gz"))
391
        (file-name (string-append "sbt-util-" version ".tar.gz"))
392
        (sha256
393
         (base32
394
          "1mj6ny62crq1d8850lkj00g3wsjhflaxrqiiv72b02fb8hn671dh"))))
395
    (build-system ant-build-system)
396
    (arguments
397
     `(#:tests? #f
398
       #:jdk ,icedtea-8
399
       #:phases
400
       (modify-phases %standard-phases
401
         (replace 'build
402
           (lambda* (#:key inputs #:allow-other-keys)
403
             (define (build-subproject prefix name)
404
               (let ((build-directory (string-append "build/" name))
405
                     (jar-name (string-append name ".jar")))
406
                 (mkdir-p build-directory)
407
                 (format #t "Building project ~a...~%" name)
408
                 (apply invoke "scalac" "-classpath"
409
                        (string-append (getenv "CLASSPATH") ":build/util-interface")
410
                        "-d" build-directory "-language:experimental.macros"
411
                        (find-files (string-append prefix name "/src/main/scala")
412
                                    ".*.scala$"))
413
                 (invoke "jar" "cf" jar-name "-C" build-directory ".")))
414
             (build-subproject "internal/" "util-position")
415
             #t))
416
         (replace 'install
417
           (install-jars ".")))))
418
    (inputs
419
     `(("java-log4j-api" ,java-log4j-api)
420
       ("java-log4j-core" ,java-log4j-core)
421
       ("scala" ,scala-official)
422
       ("scala-sjsonnew" ,scala-sjsonnew)))
423
    (home-page "https://www.scala-sbt.org/")
424
    (synopsis "")
425
    (description "")
426
    (license license:bsd-3)))
427
428
(define-public sbt-util-control
429
  (package
430
    (inherit sbt-util-position)
431
    (name "sbt-util-control")
432
    (arguments
433
     `(#:tests? #f
434
       #:jdk ,icedtea-8
435
       #:phases
436
       (modify-phases %standard-phases
437
         (replace 'build
438
           (lambda* (#:key inputs #:allow-other-keys)
439
             (define (build-subproject prefix name)
440
               (let ((build-directory (string-append "build/" name))
441
                     (jar-name (string-append name ".jar")))
442
                 (mkdir-p build-directory)
443
                 (format #t "Building project ~a...~%" name)
444
                 (apply invoke "scalac" "-classpath"
445
                        (string-append (getenv "CLASSPATH") ":build/util-interface")
446
                        "-d" build-directory "-language:experimental.macros"
447
                        (find-files (string-append prefix name "/src/main/scala")
448
                                    ".*.scala$"))
449
                 (invoke "jar" "cf" jar-name "-C" build-directory ".")))
450
             (build-subproject "internal/" "util-control")
451
             #t))
452
         (replace 'install
453
           (install-jars ".")))))))
454
455
(define-public sbt-util-interface
456
  (package
457
    (inherit sbt-util-position)
458
    (name "sbt-util-interface")
459
    (arguments
460
     `(#:tests? #f
461
       #:jdk ,icedtea-8
462
       #:source-dir "internal/util-interface/src/main/java"
463
       #:jar-name "util-interface.jar"))))
464
465
(define-public java-log4j-api-for-sbt
466
  (package
467
    (inherit java-log4j-api)
468
    (version "2.8.1")
469
    ;(version "2.11.1")
470
    (arguments
471
     (ensure-keyword-arguments (package-arguments java-log4j-api)
472
       `(#:jdk ,icedtea-8
473
         #:source-dir "src/main/java"
474
         #:phases
475
         (modify-phases %standard-phases
476
           (add-after 'unpack 'chdir
477
             (lambda _
478
               (chdir "log4j-api")
479
               #t))
480
           (add-before 'build 'fix-ambiguous
481
             (lambda _
482
               (substitute* "src/main/java/org/apache/logging/log4j/message/MapMessage.java"
483
                 (("append\\(data") "append((CharSequence)data"))
484
               #t))))))
485
    (source (origin
486
              (method url-fetch)
487
              (uri (string-append "mirror://apache/logging/log4j/" version
488
                                  "/apache-log4j-" version "-src.tar.gz"))
489
              (sha256
490
               (base32
491
                "0x5gksgh0jkvd7k70rqrs2hy3glms0pkj6lhl26m6f83x1b6kvdm"))))))
492
                ;"1dhxnd0348is21w93m1rv2sbfwyx83rv63adnbd0bgjq01gzbvic"))))))
493
494
;; More dependencies needed
495
(define-public java-log4j-core-for-sbt
496
  (package
497
    (inherit java-log4j-api-for-sbt)
498
    (name "java-log4j-core")
499
    (inputs
500
     `(("java-osgi-core" ,java-osgi-core)
501
       ("java-hamcrest-core" ,java-hamcrest-core)
502
       ("java-log4j-api" ,java-log4j-api-for-sbt)
503
       ("java-mail" ,java-mail)
504
       ("java-jansi" ,java-jansi)
505
       ("java-jboss-jms-api-spec" ,java-jboss-jms-api-spec)
506
       ("java-jctools-core" ,java-jctools-core)
507
       ("java-lmax-disruptor" ,java-lmax-disruptor)
508
       ("java-kafka" ,java-kafka-clients)
509
       ("java-datanucleus-javax-persistence" ,java-datanucleus-javax-persistence)
510
       ("java-fasterxml-jackson-annotations" ,java-fasterxml-jackson-annotations)
511
       ("java-fasterxml-jackson-core" ,java-fasterxml-jackson-core)
512
       ("java-fasterxml-jackson-databind" ,java-fasterxml-jackson-databind)
513
       ("java-fasterxml-jackson-dataformat-xml" ,java-fasterxml-jackson-dataformat-xml)
514
       ("java-fasterxml-jackson-dataformat-yaml" ,java-fasterxml-jackson-dataformat-yaml)
515
       ("java-commons-compress" ,java-commons-compress)
516
       ("java-commons-csv" ,java-commons-csv)
517
       ("java-conversantmedia-disruptor" ,java-conversantmedia-disruptor)
518
       ("java-jcommander" ,java-jcommander)
519
       ("java-stax2-api" ,java-stax2-api)
520
       ("java-jeromq" ,java-jeromq)
521
       ("java-junit" ,java-junit)))
522
    (native-inputs
523
     `(("hamcrest" ,java-hamcrest-all)
524
       ("java-commons-io" ,java-commons-io)
525
       ("java-commons-lang3" ,java-commons-lang3)
526
       ("slf4j" ,java-slf4j-api)))
527
    (arguments
528
     `(#:tests? #f ; tests require more dependencies
529
       #:test-dir "src/test"
530
       #:source-dir "src/main/java"
531
       #:jar-name "log4j-core.jar"
532
       #:jdk ,icedtea-8
533
       #:make-flags
534
       (list (string-append "-Ddist.dir=" (assoc-ref %outputs "out")
535
                            "/share/java"))
536
       #:phases
537
       (modify-phases %standard-phases
538
         (add-after 'unpack 'enter-dir
539
           (lambda _ (chdir "log4j-core") #t))
540
         (add-before 'build 'fix-ambiguous
541
           (lambda _
542
             (substitute* "src/main/java/org/apache/logging/log4j/core/pattern/MapPatternConverter.java"
543
               (("append\\(sortedMap") "append((CharSequence)sortedMap"))
544
             #t)))))
545
    (synopsis "Core component of the Log4j framework")
546
    (description "This package provides the core component of the Log4j
547
logging framework for Java.")))
548
549
550
(define-public sbt-util-logging
551
  (package
552
    (inherit sbt-util-position)
553
    (name "sbt-util-logging")
554
    (arguments
555
     `(#:tests? #f
556
       #:jdk ,icedtea-8
557
       #:phases
558
       (modify-phases %standard-phases
559
         (replace 'build
560
           (lambda* (#:key inputs #:allow-other-keys)
561
             (define (build-subproject prefix name)
562
               (let ((build-directory (string-append "build/" name))
563
                     (jar-name (string-append name ".jar")))
564
                 (mkdir-p build-directory)
565
                 (format #t "Building project ~a...~%" name)
566
                 (substitute* (find-files "." ".*.scala")
567
                   (("sjsonnew.shaded.") ""))
568
                 (apply invoke "scalac" "-classpath"
569
                        (string-append (getenv "CLASSPATH") ":build/util-interface")
570
                        "-d" build-directory "-language:experimental.macros"
571
                        (append
572
                          (find-files (string-append prefix name "/src/main/contraband-scala")
573
                                      ".*.scala$")
574
                          (find-files (string-append prefix name "/src/main/scala")
575
                                      ".*.scala$")))
576
                 (invoke "jar" "cf" jar-name "-C" build-directory ".")))
577
             (build-subproject "internal/" "util-logging")
578
             #t))
579
         (replace 'install
580
           (install-jars ".")))))
581
    (inputs
582
     `(("java-log4j-api" ,java-log4j-api-for-sbt)
583
       ("java-log4j-core" ,java-log4j-core-for-sbt)
584
       ("sbt-util-interface" ,sbt-util-interface)
585
       ("scala-scalajson" ,scala-scalajson)
586
       ("scala-sjsonnew" ,scala-sjsonnew)
587
       ("scala-sjsonnew-support-scalajson" ,scala-sjsonnew-support-scalajson)))
588
    (native-inputs
589
     `(("scala-official" ,scala-official)))))
590
591
(define-public sbt-util-cache
592
  (package
593
    (inherit sbt-util-position)
594
    (name "sbt-util-cache")
595
    (arguments
596
     `(#:tests? #f
597
       #:phases
598
       (modify-phases %standard-phases
599
         (replace 'build
600
           (lambda* (#:key inputs #:allow-other-keys)
601
             (define (build-subproject prefix name)
602
               (let ((build-directory (string-append "build/" name))
603
                     (jar-name (string-append name ".jar")))
604
                 (mkdir-p build-directory)
605
                 (substitute* (find-files "." ".*.scala")
606
                   (("sjsonnew.shaded.") ""))
607
                 (format #t "Building project ~a...~%" name)
608
                 (apply invoke "scalac" "-classpath"
609
                        (string-append (getenv "CLASSPATH") ":build/util-interface")
610
                        "-d" build-directory "-language:experimental.macros"
611
                        (append
612
                          (find-files (string-append prefix name "/src/main/contraband-scala")
613
                                      ".*.scala$")
614
                          (find-files (string-append prefix name "/src/main/scala")
615
                                      ".*.scala$")))
616
                 (invoke "jar" "cf" jar-name "-C" build-directory ".")))
617
             (build-subproject "" "util-cache")
618
             #t))
619
         (replace 'install
620
           (install-jars ".")))))
621
    (inputs
622
     `(("sbt-io" ,sbt-io)
623
       ("scala-jawn" ,scala-jawn)
624
       ("scala-scalajson" ,scala-scalajson)
625
       ("scala-sjsonnew" ,scala-sjsonnew)
626
       ("scala-sjsonnew-support-murmurhash" ,scala-sjsonnew-support-murmurhash)
627
       ("scala-sjsonnew-support-scalajson" ,scala-sjsonnew-support-scalajson)))
628
    (native-inputs
629
     `(("scala-official" ,scala-official)))))
630
631
(define-public java-swoval-apple-file-events
632
  (package
633
    (name "java-swoval-apple-file-events")
634
    (version "1.3.2")
635
    (source (origin
636
              (method url-fetch)
637
              (uri (string-append "https://github.com/swoval/swoval/archive/v"
638
                                  version ".tar.gz"))
639
              (file-name (string-append "scala-swoval-" version ".tar.gz"))
640
              (sha256
641
               (base32
642
                "0ivrc4lcali84xp8frkjb2zi1l3lw8pim9xbkfah5iyj120gw6mq"))))
643
    (build-system ant-build-system)
644
    (arguments
645
     `(#:jdk ,icedtea-8
646
       #:tests? #f; no tests
647
       #:jar-name "apple-file-events.jar"
648
       #:source-dir "apple-file-events/jvm/src/main/java"))
649
    (home-page "")
650
    (synopsis "")
651
    (description "")
652
    (license license:expat)))
653
654
(define-public sbt-io
655
  (package
656
    (name "sbt-io")
657
    (version "1.2.1")
658
    (source
659
      (origin
660
        (method url-fetch)
661
        (uri (string-append "https://github.com/sbt/io/archive/v"
662
                            version ".tar.gz"))
663
        (file-name (string-append name "-" version ".tar.gz"))
664
        (sha256
665
         (base32
666
          "0cgk3y3w8yjpivi910px529bz8bil49lrnib6wbwmvq8lw8mgrwq"))))
667
    (build-system ant-build-system)
668
    (arguments
669
     `(#:tests? #f
670
       #:jdk ,icedtea-8
671
       #:phases
672
       (modify-phases %standard-phases
673
         (replace 'build
674
           (lambda* (#:key inputs #:allow-other-keys)
675
             (mkdir-p "build/classes")
676
             (apply invoke "scalac" "-classpath"
677
                    (string-append (getenv "CLASSPATH") ":build/util-interface")
678
                    "-d" "build/classes"
679
                    (append
680
                      (find-files "io/src/main/java" ".*.java$")
681
                      (find-files "io/src/main/scala" ".*.scala$")
682
                      (find-files "io/src/main/contraband-scala" ".*.scala$")))
683
             (invoke "jar" "cf" "sbt-io.jar" "-C" "build/classes" ".")
684
             #t))
685
         (replace 'install
686
           (install-jars ".")))))
687
    (inputs
688
     `(("java-native-access" ,java-native-access)
689
       ("java-native-access-platform" ,java-native-access-platform)
690
       ("java-swoval-apple-file-events" ,java-swoval-apple-file-events)
691
       ("scala" ,scala-official)))
692
    (home-page "https://www.scala-sbt.org/")
693
    (synopsis "")
694
    (description "")
695
    (license license:bsd-3)))
696
697
(define-public scala-ssl-config
698
  (package
699
    (name "scala-ssl-config")
700
    (version "0.3.4")
701
    (source (origin
702
              (method url-fetch)
703
              (uri (string-append "https://github.com/lightbend/ssl-config/archive/v"
704
                                  version ".tar.gz"))
705
              (file-name (string-append name "-" version ".tar.gz"))
706
              (sha256
707
               (base32
708
                "1wbxxg64xlgw1p5mrqn0vkj2l7k55c4safdxw05pxrdx0nmirnl2"))))
709
    (build-system ant-build-system)
710
    (arguments
711
     `(#:tests? #f
712
       #:phases
713
       (modify-phases %standard-phases
714
         (replace 'build
715
           (lambda* (#:key inputs #:allow-other-keys)
716
             (mkdir-p "build/classes")
717
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
718
                    "-d" "build/classes"
719
                    (find-files "ssl-config-core/src/main/scala" ".*.scala$"))
720
             (invoke "jar" "cf" "okhttp.jar" "-C" "build/classes" ".")
721
             #t))
722
         (replace 'install
723
           (install-jars ".")))))
724
    (inputs
725
     `(("java-config" ,java-config)))
726
    (native-inputs
727
     `(("scala" ,scala-official)))
728
    (home-page "")
729
    (synopsis "")
730
    (description "")
731
    (license license:asl2.0)))
732
733
(define-public scala-okhttp
734
  (package
735
    (name "scala-okhttp")
736
    (version "0.3.1")
737
    (source (origin
738
              (method url-fetch)
739
              (uri (string-append "https://github.com/eed3si9n/gigahorse/archive/v"
740
                                  version ".tar.gz"))
741
              (file-name (string-append name "-" version ".tar.gz"))
742
              (sha256
743
               (base32
744
                "06ac03vr0cyr63zw0ibdwmswa03crm6i8mb00y69zpkm2jxqq2mb"))))
745
    (build-system ant-build-system)
746
    (arguments
747
     `(#:tests? #f
748
       #:phases
749
       (modify-phases %standard-phases
750
         (replace 'build
751
           (lambda* (#:key inputs #:allow-other-keys)
752
             (mkdir-p "build/classes")
753
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
754
                    "-d" "build/classes"
755
                    (append
756
                      (find-files "core/src/main/scala" ".*.scala$")
757
                      (find-files "gigahorse/src/main/scala" ".*.scala$")
758
                      (find-files "core/src/main/contraband-scala" ".*.scala$")))
759
             (invoke "jar" "cf" "okhttp.jar" "-C" "build/classes" ".")
760
             #t))
761
         (replace 'install
762
           (install-jars ".")))))
763
    (inputs
764
     `(("java-config" ,java-config)
765
       ("java-reactive-streams" ,java-reactive-streams)
766
       ("java-slf4j-api" ,java-slf4j-api)
767
       ("scala-ssl-config" ,scala-ssl-config)))
768
    (native-inputs
769
     `(("scala" ,scala-official)))
770
    (home-page "")
771
    (synopsis "")
772
    (description "")
773
    (license license:asl2.0)))
774
775
;; https://index.scala-lang.org/eed3si9n/gigahorse/gigahorse-okhttp/0.3.0?target=_2.12
776
(define-public sbt-librarymanagement
777
  (package
778
    (name "sbt-librarymanagement")
779
    (version "1.2.3")
780
    (source (origin
781
              (method url-fetch)
782
              (uri (string-append "https://github.com/sbt/librarymanagement/archive/v" version ".tar.gz"))
783
              (file-name (string-append name "-" version ".tar.gz"))
784
              (sha256
785
               (base32
786
                "0a29xzcw2qzviv073g040m3lcylybh2qj1xcdkcjdcfajad7c27k"))))
787
    (build-system ant-build-system)
788
    (arguments
789
     `(#:tests? #f
790
       #:phases
791
       (modify-phases %standard-phases
792
         (replace 'build
793
           (lambda* (#:key inputs #:allow-other-keys)
794
             (mkdir-p "build/classes")
795
             (apply invoke "scalac" "-classpath" (getenv "CLASSPATH")
796
                    "-d" "build/classes"
797
                    (append
798
                      (find-files "core/src/main/java" ".*.java$")
799
                      (find-files "core/src/main/scala" ".*.scala$")
800
                      (find-files "core/src/main/contraband-scala" ".*.scala$")))
801
             (invoke "jar" "cf" "sbt-io.jar" "-C" "build/classes" ".")
802
             #t))
803
         (replace 'install
804
           (install-jars ".")))))
805
    (inputs
806
     `(("sbt-util-cache" ,sbt-util-cache)
807
       ("sbt-util-interface" ,sbt-util-interface)
808
       ("sbt-util-logging" ,sbt-util-logging)
809
       ("sbt-util-position" ,sbt-util-position)
810
       ("sbt-io" ,sbt-io)
811
       ("scala-okhttp" ,scala-okhttp)
812
       ("scala-sjsonnew" ,scala-sjsonnew)))
813
    (native-inputs
814
     `(("scala" ,scala-official)))
815
    (home-page "")
816
    (synopsis "")
817
    (description "")
818
    ;; From core/NOTICE
819
    (license license:bsd-2)))
820
821
(define-public sbt
822
  (package
823
    (name "sbt")
824
    (version "1.2.7")
825
    (source
826
      (origin
827
        (method url-fetch)
828
        (uri (string-append "https://github.com/sbt/sbt/archive/v"
829
                            version ".tar.gz"))
830
        (file-name (string-append name "-" version ".tar.gz"))
831
        (sha256
832
         (base32
833
          "0i0j6dcgn80bajq05h739h0d7kgcz7zbfk6qsnln8qrcx1wgbf0q"))))
834
    (build-system ant-build-system)
835
    (arguments
836
     `(#:tests? #f
837
       #:jdk ,icedtea-8
838
       #:phases
839
       (modify-phases %standard-phases
840
         (add-before 'build 'copy-resources
841
           (lambda _
842
             (copy-recursively "sbt/src/main/resources" "build/classes")
843
             #t))
844
         (add-before 'build 'generate-scalakeywords.scala
845
           (lambda _
846
             (with-output-to-file "project/WriteKeywords.scala"
847
               (lambda _
848
                 (format #t "package project
849
object WriteKeywords {
850
  def main(arg: Array[String]): Unit = {
851
    val g = new scala.tools.nsc.Global(new scala.tools.nsc.Settings)
852
    val keywords = g.nme.keywords.map(_.toString)
853
    val init = keywords.map(tn => '\"' + tn + '\"').mkString(\"Set(\", \", \", \")\")
854
    val ObjectName = \"ScalaKeywords\"
855
    val PackageName = \"sbt.internal.util\"
856
    val keywordsSrc = s\"\"\"
857
      |package $PackageName
858
      |object $ObjectName {
859
      |  val values = $init
860
      |}
861
    \"\"\".trim.stripMargin
862
    val base = \"internal/util-collection/src/main/scala\"
863
    val out = base + \"/\" + PackageName.replace('.', '/') + \"/\" + s\"$ObjectName.scala\"
864
    val result = new java.io.PrintWriter(new java.io.File(out))
865
    result.write(keywordsSrc)
866
    result.close()
867
  }
868
}")))
869
             (invoke "scalac" "-classpath" (getenv "CLASSPATH") "project/WriteKeywords.scala")
870
             (invoke "java" "-cp" (string-append (getenv "CLASSPATH") ":.")
871
                     "project.WriteKeywords")
872
             #t))
873
         (replace 'build
874
           (lambda* (#:key inputs #:allow-other-keys)
875
             (define (build-subproject prefix name)
876
               (let ((build-directory (string-append "build/" name))
877
                     (jar-name (string-append name ".jar"))
878
                     (kind-projector (assoc-ref inputs "scala-kind-projector")))
879
                 (mkdir-p build-directory)
880
                 (format #t "Building project ~a...~%" name)
881
                 (apply invoke "scalac" "-classpath"
882
                        ;; 13:36 < snape> roptat: I think you could use 'readdir', as in 'files-in-directory' from guix/build/union.scm
883
                        (apply string-append (getenv "CLASSPATH")
884
                               (map (lambda (file) (string-append ":" file))
885
                                    (find-files "build" "." #:directories? #t)))
886
                        "-d" build-directory
887
                        (string-append "-Xplugin:" kind-projector
888
                                       "/share/java/kind-projector.jar")
889
                        (find-files (string-append prefix name "/src/main/scala")
890
                                    ".*.scala$"))
891
                 (invoke "jar" "cf" jar-name "-C" build-directory ".")))
892
             (build-subproject "internal/" "util-collection")
893
             (build-subproject "internal/" "util-complete")
894
             (build-subproject "" "core-macros")
895
             (build-subproject "" "tasks")
896
             (build-subproject "" "tasks-standard")
897
             (build-subproject "" "main-settings")
898
             (build-subproject "" "sbt")
899
             #t))
900
         (replace 'install
901
           (install-jars ".")))))
902
    (inputs
903
     `(("scala" ,scala-official)
904
       ("scala-sjsonnew" ,scala-sjsonnew)
905
       ("sbt-io" ,sbt-io)
906
       ("sbt-librarymanagement" ,sbt-librarymanagement)
907
       ("sbt-util-cache" ,sbt-util-cache)
908
       ("sbt-util-control" ,sbt-util-control)
909
       ("sbt-util-interface" ,sbt-util-interface)
910
       ("sbt-util-logging" ,sbt-util-logging)
911
       ("sbt-util-position" ,sbt-util-position)))
912
    (native-inputs
913
     `(("scala-kind-projector" ,scala-kind-projector)))
914
    (home-page "https://www.scala-sbt.org/")
915
    (synopsis "")
916
    (description "")
917
    (license license:bsd-3)))
918