@@ -433,6 +433,49 @@ object Build {
433433
434434 private lazy val currentYear : String = java.util.Calendar .getInstance().get(java.util.Calendar .YEAR ).toString
435435
436+ private val shellBanner : String =
437+ """ %n ________ ___ / / ___
438+ |%n / __/ __// _ | / / / _ |
439+ |%n __\\ \\ / /__/ __ |/ /__/ __ |
440+ |%n /____/\\ ___/_/ |_/____/_/ | |
441+ |%n |/ %s""" .stripMargin.replace(" \n " , " " )
442+
443+ // Common generator for properties files
444+ lazy val generatePropertiesFile = (contents : String , fileName : String ) => Def .task {
445+ val file = (Compile / resourceManaged).value / fileName
446+ if (! (file.exists && IO .read(file) == contents)) {
447+ IO .write(file, contents)
448+ }
449+ Seq (file)
450+ }
451+
452+ // Generate compiler.properties consumed by sbt
453+ lazy val generateCompilerProperties : Def .Initialize [Task [Seq [File ]]] = {
454+ import java .util ._
455+ import java .text ._
456+ val fileName = " compiler.properties"
457+ val dateFormat = new SimpleDateFormat (" yyyyMMdd-HHmmss" )
458+ dateFormat.setTimeZone(TimeZone .getTimeZone(" GMT" ))
459+ val contents = // 2.11.11.v20170413-090219-8a413ba7cc
460+ s """ version.number= ${version.value}
461+ |maven.version.number= ${version.value}
462+ |git.hash= ${VersionUtil .gitHash}
463+ |copyright.string=Copyright 2002- $currentYear, LAMP/EPFL
464+ """ .stripMargin
465+ generatePropertiesFile(contents, fileName)
466+ }
467+
468+ // Generate library3.properties consumed by scala.util.Properties
469+ lazy val generateLibrary3Properties : Def .Initialize [Task [Seq [File ]]] = {
470+ val fileName = " library3.properties"
471+ val contents = s """ version.number= ${version.value}
472+ |maven.version.number= ${version.value}
473+ |copyright.string=Copyright 2002- $currentYear, LAMP/EPFL
474+ |shell.banner= ${shellBanner}
475+ | """ .stripMargin
476+ generatePropertiesFile(contents, fileName)
477+ }
478+
436479 def scalacOptionsDocSettings (includeExternalMappings : Boolean = true ) = {
437480 val extMap = Seq (" -external-mappings:" +
438481 (if (includeExternalMappings) " .*scala/.*::scaladoc3::https://dotty.epfl.ch/api/," else " " ) +
@@ -700,25 +743,7 @@ object Build {
700743 scalacOptions += " -Wconf:cat=deprecation&origin=scala\\ .collection\\ .mutable\\ .AnyRefMap.*:s" ,
701744
702745 // Generate compiler.properties, used by sbt
703- (Compile / resourceGenerators) += Def .task {
704- import java .util ._
705- import java .text ._
706- val file = (Compile / resourceManaged).value / " compiler.properties"
707- val dateFormat = new SimpleDateFormat (" yyyyMMdd-HHmmss" )
708- dateFormat.setTimeZone(TimeZone .getTimeZone(" GMT" ))
709- val contents = // 2.11.11.v20170413-090219-8a413ba7cc
710- s """ version.number= ${version.value}
711- |maven.version.number= ${version.value}
712- |git.hash= ${VersionUtil .gitHash}
713- |copyright.string=Copyright 2002- $currentYear, LAMP/EPFL
714- """ .stripMargin
715-
716- if (! (file.exists && IO .read(file) == contents)) {
717- IO .write(file, contents)
718- }
719-
720- Seq (file)
721- }.taskValue,
746+ (Compile / resourceGenerators) += generateCompilerProperties.taskValue,
722747
723748 // get libraries onboard
724749 libraryDependencies ++= Seq (
@@ -1916,19 +1941,8 @@ object Build {
19161941 customMimaReportBinaryIssues(" MiMaFilters.Scala3Library" ),
19171942 // Should we also patch .sjsir files
19181943 keepSJSIR := false ,
1919- Compile / resourceGenerators += Def .task {
1920- val file = (Compile / resourceManaged).value / " library3.properties"
1921- val contents =
1922- s """ version.number= ${version.value}
1923- |maven.version.number= ${version.value}
1924- | """ .stripMargin
1925-
1926- if (! (file.exists && IO .read(file) == contents)) {
1927- IO .write(file, contents)
1928- }
1929-
1930- Seq (file)
1931- }.taskValue,
1944+ // Generate Scala 3 runtime properties overlay
1945+ Compile / resourceGenerators += generateLibrary3Properties.taskValue
19321946 )
19331947
19341948 /* Configuration of the org.scala-lang:scala3-library_3:*.**.**-nonbootstrapped project */
@@ -2054,19 +2068,8 @@ object Build {
20542068 customMimaReportBinaryIssues(" MiMaFilters.Scala3Library" ),
20552069 // Should we also patch .sjsir files
20562070 keepSJSIR := false ,
2057- Compile / resourceGenerators += Def .task {
2058- val file = (Compile / resourceManaged).value / " library3.properties"
2059- val contents =
2060- s """ version.number= ${version.value}
2061- |maven.version.number= ${version.value}
2062- | """ .stripMargin
2063-
2064- if (! (file.exists && IO .read(file) == contents)) {
2065- IO .write(file, contents)
2066- }
2067-
2068- Seq (file)
2069- }.taskValue,
2071+ // Generate Scala 3 runtime properties overlay
2072+ Compile / resourceGenerators += generateLibrary3Properties.taskValue,
20702073 )
20712074
20722075 /* Configuration of the org.scala-lang:scala3-library_3:*.**.**-bootstrapped project */
@@ -2470,25 +2473,7 @@ object Build {
24702473 // Project specific target folder. sbt doesn't like having two projects using the same target folder
24712474 target := target.value / " scala3-compiler-nonbootstrapped" ,
24722475 // Generate compiler.properties, used by sbt
2473- Compile / resourceGenerators += Def .task {
2474- import java .util ._
2475- import java .text ._
2476- val file = (Compile / resourceManaged).value / " compiler.properties"
2477- val dateFormat = new SimpleDateFormat (" yyyyMMdd-HHmmss" )
2478- dateFormat.setTimeZone(TimeZone .getTimeZone(" GMT" ))
2479- val contents = // 2.11.11.v20170413-090219-8a413ba7cc
2480- s """ version.number= ${version.value}
2481- |maven.version.number= ${version.value}
2482- |git.hash= ${VersionUtil .gitHash}
2483- |copyright.string=Copyright 2002- $currentYear, LAMP/EPFL
2484- """ .stripMargin
2485-
2486- if (! (file.exists && IO .read(file) == contents)) {
2487- IO .write(file, contents)
2488- }
2489-
2490- Seq (file)
2491- }.taskValue,
2476+ Compile / resourceGenerators += generateCompilerProperties.taskValue,
24922477 // sbt adds all the projects to scala-tool config which breaks building the scalaInstance
24932478 // as a workaround, I build it manually by only adding the compiler
24942479 managedScalaInstance := false ,
@@ -2638,25 +2623,7 @@ object Build {
26382623 // Project specific target folder. sbt doesn't like having two projects using the same target folder
26392624 target := target.value / " scala3-compiler-bootstrapped" ,
26402625 // Generate compiler.properties, used by sbt
2641- Compile / resourceGenerators += Def .task {
2642- import java .util ._
2643- import java .text ._
2644- val file = (Compile / resourceManaged).value / " compiler.properties"
2645- val dateFormat = new SimpleDateFormat (" yyyyMMdd-HHmmss" )
2646- dateFormat.setTimeZone(TimeZone .getTimeZone(" GMT" ))
2647- val contents = // 2.11.11.v20170413-090219-8a413ba7cc
2648- s """ version.number= ${version.value}
2649- |maven.version.number= ${version.value}
2650- |git.hash= ${VersionUtil .gitHash}
2651- |copyright.string=Copyright 2002- $currentYear, LAMP/EPFL
2652- """ .stripMargin
2653-
2654- if (! (file.exists && IO .read(file) == contents)) {
2655- IO .write(file, contents)
2656- }
2657-
2658- Seq (file)
2659- }.taskValue,
2626+ Compile / resourceGenerators += generateCompilerProperties.taskValue,
26602627 // Configure to use the non-bootstrapped compiler
26612628 managedScalaInstance := false ,
26622629 scalaInstance := {
0 commit comments