2014-12-18 13:57:05 +01:00
|
|
|
import Dependencies._
|
2019-12-08 00:39:30 +01:00
|
|
|
import com.typesafe.tools.mima.core.ProblemFilters._
|
|
|
|
|
import com.typesafe.tools.mima.core._
|
2018-07-31 02:28:42 +02:00
|
|
|
import local.Scripted
|
2020-06-22 01:48:33 +02:00
|
|
|
import java.nio.file.{ Files, Path => JPath }
|
2023-01-02 23:48:13 +01:00
|
|
|
import java.util.Locale
|
2024-10-09 08:53:58 +02:00
|
|
|
import sbt.internal.inc.Analysis
|
2024-10-11 10:24:21 +02:00
|
|
|
import com.eed3si9n.jarjarabrams.ModuleCoordinate
|
2019-12-08 00:39:30 +01:00
|
|
|
|
2021-03-07 23:41:52 +01:00
|
|
|
// ThisBuild settings take lower precedence,
|
|
|
|
|
// but can be shared across the multi projects.
|
2019-05-13 19:59:58 +02:00
|
|
|
ThisBuild / version := {
|
2025-08-31 00:53:42 +02:00
|
|
|
val v = "2.0.0-RC4-bin-SNAPSHOT"
|
2019-05-13 19:59:58 +02:00
|
|
|
nightlyVersion.getOrElse(v)
|
|
|
|
|
}
|
2024-10-09 09:36:37 +02:00
|
|
|
ThisBuild / Utils.version2_13 := "2.0.0-SNAPSHOT"
|
2020-10-04 06:09:15 +02:00
|
|
|
ThisBuild / versionScheme := Some("early-semver")
|
2019-05-17 20:51:07 +02:00
|
|
|
ThisBuild / scalafmtOnCompile := !(Global / insideCI).value
|
|
|
|
|
ThisBuild / Test / scalafmtOnCompile := !(Global / insideCI).value
|
2022-11-28 16:45:10 +01:00
|
|
|
// ThisBuild / turbo := true
|
2020-11-01 21:08:46 +01:00
|
|
|
ThisBuild / usePipelining := false // !(Global / insideCI).value
|
2021-03-07 23:41:52 +01:00
|
|
|
ThisBuild / organization := "org.scala-sbt"
|
|
|
|
|
ThisBuild / description := "sbt is an interactive build tool"
|
|
|
|
|
ThisBuild / licenses := List("Apache-2.0" -> url("https://github.com/sbt/sbt/blob/develop/LICENSE"))
|
|
|
|
|
ThisBuild / javacOptions ++= Seq("-source", "1.8", "-target", "1.8")
|
|
|
|
|
ThisBuild / Compile / doc / javacOptions := Nil
|
|
|
|
|
ThisBuild / developers := List(
|
|
|
|
|
Developer("harrah", "Mark Harrah", "@harrah", url("https://github.com/harrah")),
|
|
|
|
|
Developer("eed3si9n", "Eugene Yokota", "@eed3si9n", url("https://github.com/eed3si9n")),
|
|
|
|
|
Developer("jsuereth", "Josh Suereth", "@jsuereth", url("https://github.com/jsuereth")),
|
|
|
|
|
Developer("dwijnand", "Dale Wijnand", "@dwijnand", url("https://github.com/dwijnand")),
|
|
|
|
|
Developer("eatkins", "Ethan Atkins", "@eatkins", url("https://github.com/eatkins")),
|
|
|
|
|
Developer(
|
|
|
|
|
"gkossakowski",
|
|
|
|
|
"Grzegorz Kossakowski",
|
|
|
|
|
"@gkossakowski",
|
|
|
|
|
url("https://github.com/gkossakowski")
|
|
|
|
|
),
|
|
|
|
|
Developer("Duhemm", "Martin Duhem", "@Duhemm", url("https://github.com/Duhemm"))
|
|
|
|
|
)
|
|
|
|
|
ThisBuild / homepage := Some(url("https://github.com/sbt/sbt"))
|
|
|
|
|
ThisBuild / scmInfo := Some(
|
|
|
|
|
ScmInfo(url("https://github.com/sbt/sbt"), "git@github.com:sbt/sbt.git")
|
|
|
|
|
)
|
|
|
|
|
ThisBuild / resolvers += Resolver.mavenLocal
|
2025-08-11 12:39:47 +02:00
|
|
|
ThisBuild / mimaFailOnNoPrevious := false
|
2019-05-13 19:59:58 +02:00
|
|
|
|
2021-01-10 21:26:26 +01:00
|
|
|
Global / semanticdbEnabled := !(Global / insideCI).value
|
2021-09-18 23:37:41 +02:00
|
|
|
// Change main/src/main/scala/sbt/plugins/SemanticdbPlugin.scala too, if you change this.
|
2024-12-17 04:22:33 +01:00
|
|
|
Global / semanticdbVersion := "4.9.9"
|
2025-01-02 03:16:32 +01:00
|
|
|
val excludeLint = SettingKey[Set[Def.KeyedInitialize[?]]]("excludeLintKeys")
|
2020-07-19 18:43:51 +02:00
|
|
|
Global / excludeLint := (Global / excludeLint).?.value.getOrElse(Set.empty)
|
2024-12-16 09:17:14 +01:00
|
|
|
Global / excludeLint += Utils.componentID
|
2020-07-19 18:43:51 +02:00
|
|
|
Global / excludeLint += scriptedBufferLog
|
|
|
|
|
Global / excludeLint += checkPluginCross
|
|
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def commonSettings: Seq[Setting[?]] = Def.settings(
|
2019-05-11 09:42:06 +02:00
|
|
|
headerLicense := Some(
|
|
|
|
|
HeaderLicense.Custom(
|
|
|
|
|
"""|sbt
|
2023-06-20 13:42:07 +02:00
|
|
|
|Copyright 2023, Scala center
|
|
|
|
|
|Copyright 2011 - 2022, Lightbend, Inc.
|
2018-02-01 15:53:05 +01:00
|
|
|
|Copyright 2008 - 2010, Mark Harrah
|
2018-09-14 09:38:58 +02:00
|
|
|
|Licensed under Apache License 2.0 (see LICENSE)
|
2018-02-01 15:53:05 +01:00
|
|
|
|""".stripMargin
|
2019-05-11 09:42:06 +02:00
|
|
|
)
|
|
|
|
|
),
|
2018-02-01 15:53:05 +01:00
|
|
|
scalaVersion := baseScalaVersion,
|
2024-12-16 09:17:14 +01:00
|
|
|
evictionErrorLevel := Level.Info,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.componentID := None,
|
2025-06-18 00:23:25 +02:00
|
|
|
resolvers += Resolver.sonatypeCentralSnapshots,
|
2019-04-21 04:06:52 +02:00
|
|
|
testFrameworks += TestFramework("hedgehog.sbt.Framework"),
|
2019-10-21 02:42:52 +02:00
|
|
|
testFrameworks += TestFramework("verify.runner.Framework"),
|
2024-10-09 09:36:37 +02:00
|
|
|
Global / concurrentRestrictions += Utils.testExclusiveRestriction,
|
2021-05-03 05:25:23 +02:00
|
|
|
Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-w", "1"),
|
|
|
|
|
Test / testOptions += Tests.Argument(TestFrameworks.ScalaCheck, "-verbosity", "2"),
|
|
|
|
|
compile / javacOptions ++= Seq("-Xlint", "-Xlint:-serial"),
|
2021-05-10 00:22:03 +02:00
|
|
|
/*
|
2019-03-22 07:28:14 +01:00
|
|
|
Compile / doc / scalacOptions ++= {
|
|
|
|
|
import scala.sys.process._
|
|
|
|
|
val devnull = ProcessLogger(_ => ())
|
|
|
|
|
val tagOrSha = ("git describe --exact-match" #|| "git rev-parse HEAD").lineStream(devnull).head
|
2018-02-22 02:33:45 +01:00
|
|
|
Seq(
|
|
|
|
|
"-sourcepath",
|
2021-05-03 05:25:23 +02:00
|
|
|
(LocalRootProject / baseDirectory).value.getAbsolutePath,
|
2018-02-22 02:33:45 +01:00
|
|
|
"-doc-source-url",
|
2019-03-22 07:28:14 +01:00
|
|
|
s"https://github.com/sbt/sbt/tree/$tagOrSha€{FILE_PATH}.scala"
|
2018-02-22 02:33:45 +01:00
|
|
|
)
|
|
|
|
|
},
|
2021-05-10 00:22:03 +02:00
|
|
|
*/
|
2020-01-14 23:01:17 +01:00
|
|
|
Compile / javafmtOnCompile := Def
|
|
|
|
|
.taskDyn(if ((scalafmtOnCompile).value) Compile / javafmt else Def.task(()))
|
|
|
|
|
.value,
|
|
|
|
|
Test / javafmtOnCompile := Def
|
|
|
|
|
.taskDyn(if ((Test / scalafmtOnCompile).value) Test / javafmt else Def.task(()))
|
|
|
|
|
.value,
|
|
|
|
|
Compile / unmanagedSources / inputFileStamps :=
|
|
|
|
|
(Compile / unmanagedSources / inputFileStamps).dependsOn(Compile / javafmtOnCompile).value,
|
|
|
|
|
Test / unmanagedSources / inputFileStamps :=
|
|
|
|
|
(Test / unmanagedSources / inputFileStamps).dependsOn(Test / javafmtOnCompile).value,
|
2021-05-03 05:25:23 +02:00
|
|
|
Test / publishArtifact := false,
|
|
|
|
|
run / fork := true,
|
2018-02-01 15:53:05 +01:00
|
|
|
)
|
2023-11-14 12:12:34 +01:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def utilCommonSettings: Seq[Setting[?]] = Def.settings(
|
2023-11-14 12:12:34 +01:00
|
|
|
baseSettings,
|
|
|
|
|
)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def minimalSettings: Seq[Setting[?]] =
|
2024-10-09 09:36:37 +02:00
|
|
|
commonSettings ++ customCommands ++ Utils.publishPomSettings
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def baseSettings: Seq[Setting[?]] =
|
2024-10-09 09:36:37 +02:00
|
|
|
minimalSettings ++ Seq(Utils.projectComponent) ++ Utils.baseScalacOptions ++ Licensed.settings
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def testedBaseSettings: Seq[Setting[?]] =
|
2014-12-18 05:38:10 +01:00
|
|
|
baseSettings ++ testDependencies
|
|
|
|
|
|
2025-08-11 12:39:47 +02:00
|
|
|
val sbt20Plus =
|
2021-05-03 05:25:23 +02:00
|
|
|
Seq(
|
2025-09-06 12:33:41 +02:00
|
|
|
"2.0.0-RC4",
|
2021-05-03 05:25:23 +02:00
|
|
|
)
|
2025-08-11 12:39:47 +02:00
|
|
|
val mimaSettings = mimaSettingsSince(sbt20Plus)
|
2025-01-02 03:16:32 +01:00
|
|
|
def mimaSettingsSince(versions: Seq[String]): Seq[Def.Setting[?]] = Def settings (
|
2018-01-10 04:48:07 +01:00
|
|
|
mimaPreviousArtifacts := {
|
2019-04-18 09:14:04 +02:00
|
|
|
val crossVersion = if (crossPaths.value) CrossVersion.binary else CrossVersion.disabled
|
2025-08-11 12:39:47 +02:00
|
|
|
if (sbtPlugin.value) {
|
|
|
|
|
versions
|
|
|
|
|
.map(v =>
|
|
|
|
|
Defaults.sbtPluginExtra(
|
|
|
|
|
m = organization.value % moduleName.value % v,
|
|
|
|
|
sbtV = "2",
|
|
|
|
|
scalaV = scalaBinaryVersion.value
|
|
|
|
|
)
|
|
|
|
|
)
|
|
|
|
|
.toSet
|
|
|
|
|
} else {
|
|
|
|
|
versions.map(v => organization.value % moduleName.value % v cross crossVersion).toSet
|
|
|
|
|
}
|
2018-03-12 18:21:22 +01:00
|
|
|
},
|
|
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
2018-08-08 08:57:34 +02:00
|
|
|
// Changes in the internal package
|
2018-03-12 18:21:22 +01:00
|
|
|
exclude[DirectMissingMethodProblem]("sbt.internal.*"),
|
|
|
|
|
exclude[FinalClassProblem]("sbt.internal.*"),
|
|
|
|
|
exclude[FinalMethodProblem]("sbt.internal.*"),
|
|
|
|
|
exclude[IncompatibleResultTypeProblem]("sbt.internal.*"),
|
2021-06-30 03:25:47 +02:00
|
|
|
exclude[ReversedMissingMethodProblem]("sbt.internal.*"),
|
2025-08-31 00:53:42 +02:00
|
|
|
exclude[DirectMissingMethodProblem]("sbt.Keys.extraLoggers"),
|
2018-03-12 18:21:22 +01:00
|
|
|
),
|
2017-07-20 18:31:39 +02:00
|
|
|
)
|
|
|
|
|
|
2024-09-15 07:58:23 +02:00
|
|
|
val scriptedSbtMimaSettings = Def.settings(mimaPreviousArtifacts := Set())
|
2018-07-10 06:58:45 +02:00
|
|
|
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val sbtRoot: Project = (project in file("."))
|
2024-12-18 06:24:44 +01:00
|
|
|
.aggregate(
|
|
|
|
|
(allProjects diff Seq(lmCoursierShaded))
|
|
|
|
|
.map(p => LocalProject(p.id)): _*
|
|
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
minimalSettings,
|
2018-10-05 09:04:22 +02:00
|
|
|
onLoadMessage := {
|
2019-03-23 17:31:22 +01:00
|
|
|
val version = sys.props("java.specification.version")
|
2023-08-11 16:08:11 +02:00
|
|
|
""" __ __
|
2018-10-05 09:04:22 +02:00
|
|
|
| _____/ /_ / /_
|
|
|
|
|
| / ___/ __ \/ __/
|
2023-08-11 16:08:11 +02:00
|
|
|
| (__ ) /_/ / /_
|
|
|
|
|
| /____/_.___/\__/
|
2018-10-05 09:04:22 +02:00
|
|
|
|Welcome to the build for sbt.
|
|
|
|
|
|""".stripMargin +
|
2019-05-11 09:42:06 +02:00
|
|
|
(if (version != "1.8")
|
|
|
|
|
s"""!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
2019-03-23 17:31:22 +01:00
|
|
|
| Java version is $version. We recommend java 8.
|
2018-10-05 09:04:22 +02:00
|
|
|
|!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""".stripMargin
|
2019-05-11 09:42:06 +02:00
|
|
|
else "")
|
2018-10-05 09:04:22 +02:00
|
|
|
},
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.baseScalacOptions,
|
2017-05-08 15:34:41 +02:00
|
|
|
Docs.settings,
|
|
|
|
|
scalacOptions += "-Ymacro-expand:none", // for both sxr and doc
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.publishPomSettings,
|
2017-05-08 15:34:41 +02:00
|
|
|
otherRootSettings,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish,
|
2017-05-30 08:44:13 +02:00
|
|
|
publishLocal := {},
|
2021-05-03 05:25:23 +02:00
|
|
|
Global / commands += Command
|
2024-10-23 05:13:59 +02:00
|
|
|
.single("sbtOn")((state, dir) => s"sbtProj/Test/runMain sbt.RunFromSourceMain $dir" :: state),
|
2019-10-17 23:27:43 +02:00
|
|
|
mimaSettings,
|
2019-10-20 06:41:53 +02:00
|
|
|
mimaPreviousArtifacts := Set.empty,
|
2020-07-27 23:33:19 +02:00
|
|
|
buildThinClient := (sbtClientProj / buildThinClient).evaluated,
|
2022-06-26 19:15:50 +02:00
|
|
|
nativeImage := (sbtClientProj / nativeImage).value,
|
2020-07-27 23:33:19 +02:00
|
|
|
installNativeThinClient := {
|
|
|
|
|
// nativeInstallDirectory can be set globally or in a gitignored local file
|
|
|
|
|
val dir = nativeInstallDirectory.?.value
|
|
|
|
|
val target = Def.spaceDelimited("").parsed.headOption match {
|
|
|
|
|
case Some(p) => file(p).toPath
|
|
|
|
|
case _ =>
|
|
|
|
|
dir match {
|
2020-08-14 04:56:02 +02:00
|
|
|
case Some(d) => d / "sbtn"
|
2020-07-27 23:33:19 +02:00
|
|
|
case _ =>
|
|
|
|
|
val msg = "Expected input parameter <path>: installNativeExecutable /usr/local/bin"
|
|
|
|
|
throw new IllegalStateException(msg)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
val base = baseDirectory.value.toPath
|
2022-06-26 19:15:50 +02:00
|
|
|
val exec = (sbtClientProj / nativeImage).value.toPath
|
2020-07-27 23:33:19 +02:00
|
|
|
streams.value.log.info(s"installing thin client ${base.relativize(exec)} to ${target}")
|
|
|
|
|
Files.copy(exec, target, java.nio.file.StandardCopyOption.REPLACE_EXISTING)
|
|
|
|
|
}
|
2015-03-24 21:12:51 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// This is used to configure an sbt-launcher for this version of sbt.
|
|
|
|
|
lazy val bundledLauncherProj =
|
2017-04-21 09:14:31 +02:00
|
|
|
(project in file("launch"))
|
2021-03-07 23:41:52 +01:00
|
|
|
.enablePlugins(SbtLauncherPlugin)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
|
|
|
|
minimalSettings,
|
|
|
|
|
inConfig(Compile)(Transform.configSettings),
|
|
|
|
|
)
|
|
|
|
|
.settings(
|
|
|
|
|
name := "sbt-launch",
|
|
|
|
|
moduleName := "sbt-launch",
|
|
|
|
|
description := "sbt application launcher",
|
|
|
|
|
autoScalaLibrary := false,
|
|
|
|
|
crossPaths := false,
|
2022-06-13 09:17:15 +02:00
|
|
|
Compile / doc / javacOptions := Nil,
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / packageBin := sbtLaunchJar.value,
|
2019-10-17 23:27:43 +02:00
|
|
|
mimaSettings,
|
|
|
|
|
mimaPreviousArtifacts := Set()
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2014-12-18 19:14:04 +01:00
|
|
|
/* ** subproject declarations ** */
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2024-03-05 13:24:31 +01:00
|
|
|
val collectionProj = project
|
|
|
|
|
.in(file("util-collection"))
|
2023-11-14 11:43:12 +01:00
|
|
|
.dependsOn(utilPosition, utilCore)
|
2017-06-26 12:38:37 +02:00
|
|
|
.settings(
|
2021-12-06 08:06:26 +01:00
|
|
|
name := "Collections",
|
2017-06-26 12:38:37 +02:00
|
|
|
testedBaseSettings,
|
2017-07-20 18:31:39 +02:00
|
|
|
libraryDependencies ++= Seq(sjsonNewScalaJson.value),
|
2020-07-08 01:52:52 +02:00
|
|
|
libraryDependencies ++= (CrossVersion.partialVersion(scalaVersion.value) match {
|
|
|
|
|
case Some((2, major)) if major <= 12 => Seq()
|
2021-12-06 08:06:26 +01:00
|
|
|
case _ => Seq(scalaPar)
|
2020-07-08 01:52:52 +02:00
|
|
|
}),
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2024-03-17 09:54:20 +01:00
|
|
|
conflictWarning := ConflictWarning.disable,
|
2017-06-26 12:38:37 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Command line-related utilities.
|
|
|
|
|
val completeProj = (project in file("internal") / "util-complete")
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilControl, utilLogging)
|
2017-06-26 12:38:37 +02:00
|
|
|
.settings(
|
|
|
|
|
testedBaseSettings,
|
|
|
|
|
name := "Completion",
|
2017-07-20 18:31:39 +02:00
|
|
|
libraryDependencies += jline,
|
Support scala 2.13 console in thin client
In order to make the console task work with scala 2.13 and the thin
client, we need to provide a way for the scala repl to use an sbt
provided jline3 terminal instead of the default terminal typically built
by the repl. We also need to put jline 3 higher up in the classloading
hierarchy to ensure that two versions of jline 3 are not loaded (which
makes it impossible to share the sbt terminal with the scala terminal).
One impact of this change is the decoupling of the version of
jline-terminal used by the in process scala console and the version
of jline-terminal specified by the scala version itself. It is possible
to override this by setting the `useScalaReplJLine` flag to true. When
that is set, the scala REPL will run in a fully isolated classloader. That
will ensure that the versions are consistent. It will, however, for sure
break the thin client and may interfere with the embedded shell ui.
As part of this work, I also discovered that jline 3 Terminal.getSize is
very slow. In jline 2, the terminal attributes were automatically cached with a
timeout of, I think, 1 second so it wasn't a big deal to call
Terminal.getAttributes. The getSize method in jline 3 is not cached and
it shells out to run a tty command. This caused a significant
performance regression in sbt because when progress is enabled, we call
Terminal.getSize whenever we log any messages. I added caching of
getSize at the TerminalImpl level to address this. The timeout is 1
second, which seems responsive enough for most use cases. We could also
move the calculation onto a background thread and have it periodically
updated, but that seems like overkill.
2020-07-20 19:12:04 +02:00
|
|
|
libraryDependencies += jline3Reader,
|
2020-10-14 08:28:55 +02:00
|
|
|
libraryDependencies += jline3Builtins,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2018-07-16 04:28:55 +02:00
|
|
|
// Parser is used publicly, so we can't break bincompat.
|
|
|
|
|
mimaBinaryIssueFilters := Seq(
|
2017-12-04 17:18:08 +01:00
|
|
|
),
|
2017-06-26 12:38:37 +02:00
|
|
|
)
|
2019-12-08 00:49:13 +01:00
|
|
|
.configure(addSbtIO)
|
2017-06-26 12:38:37 +02:00
|
|
|
|
|
|
|
|
// A logic with restricted negation as failure for a unique, stable model
|
|
|
|
|
val logicProj = (project in file("internal") / "util-logic")
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilRelation)
|
2017-06-26 12:38:37 +02:00
|
|
|
.settings(
|
|
|
|
|
testedBaseSettings,
|
2017-07-20 18:31:39 +02:00
|
|
|
name := "Logic",
|
|
|
|
|
mimaSettings,
|
2017-06-26 12:38:37 +02:00
|
|
|
)
|
|
|
|
|
|
2019-12-08 00:49:13 +01:00
|
|
|
// defines Java structures used across Scala versions, such as the API structures and relationships extracted by
|
|
|
|
|
// the analysis compiler phases and passed back to sbt. The API structures are defined in a simple
|
|
|
|
|
// format from which Java sources are generated by the datatype generator Projproject
|
|
|
|
|
lazy val utilInterface = (project in file("internal") / "util-interface").settings(
|
2023-11-14 12:12:34 +01:00
|
|
|
baseSettings,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.javaOnlySettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
crossPaths := false,
|
2021-04-04 01:23:38 +02:00
|
|
|
autoScalaLibrary := false,
|
2022-06-13 09:17:15 +02:00
|
|
|
Compile / doc / javacOptions := Nil,
|
2019-12-08 00:49:13 +01:00
|
|
|
name := "Util Interface",
|
|
|
|
|
exportJars := true,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
lazy val utilControl = (project in file("internal") / "util-control").settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Control",
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
lazy val utilPosition = (project in file("internal") / "util-position")
|
|
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Position",
|
|
|
|
|
scalacOptions += "-language:experimental.macros",
|
2025-08-17 01:23:34 +02:00
|
|
|
libraryDependencies ++= Seq(scalatest % "test"),
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
|
2023-11-14 12:12:34 +01:00
|
|
|
lazy val utilCore = project
|
|
|
|
|
.in(file("internal") / "util-core")
|
2023-11-14 11:43:12 +01:00
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Core",
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.keywordsSettings,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings
|
2023-11-14 11:43:12 +01:00
|
|
|
)
|
|
|
|
|
|
2024-03-05 13:24:31 +01:00
|
|
|
lazy val utilLogging = project
|
|
|
|
|
.in(file("internal") / "util-logging")
|
2019-12-08 00:49:13 +01:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2023-11-14 11:43:12 +01:00
|
|
|
.dependsOn(utilInterface, utilCore)
|
2019-12-08 00:49:13 +01:00
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Logging",
|
|
|
|
|
libraryDependencies ++=
|
2020-06-30 17:57:57 +02:00
|
|
|
Seq(
|
|
|
|
|
jline,
|
Support scala 2.13 console in thin client
In order to make the console task work with scala 2.13 and the thin
client, we need to provide a way for the scala repl to use an sbt
provided jline3 terminal instead of the default terminal typically built
by the repl. We also need to put jline 3 higher up in the classloading
hierarchy to ensure that two versions of jline 3 are not loaded (which
makes it impossible to share the sbt terminal with the scala terminal).
One impact of this change is the decoupling of the version of
jline-terminal used by the in process scala console and the version
of jline-terminal specified by the scala version itself. It is possible
to override this by setting the `useScalaReplJLine` flag to true. When
that is set, the scala REPL will run in a fully isolated classloader. That
will ensure that the versions are consistent. It will, however, for sure
break the thin client and may interfere with the embedded shell ui.
As part of this work, I also discovered that jline 3 Terminal.getSize is
very slow. In jline 2, the terminal attributes were automatically cached with a
timeout of, I think, 1 second so it wasn't a big deal to call
Terminal.getAttributes. The getSize method in jline 3 is not cached and
it shells out to run a tty command. This caused a significant
performance regression in sbt because when progress is enabled, we call
Terminal.getSize whenever we log any messages. I added caching of
getSize at the TerminalImpl level to address this. The timeout is 1
second, which seems responsive enough for most use cases. We could also
move the calculation onto a background thread and have it periodically
updated, but that seems like overkill.
2020-07-20 19:12:04 +02:00
|
|
|
jline3Terminal,
|
2024-10-22 22:05:20 +02:00
|
|
|
jline3JNI,
|
|
|
|
|
jline3Native,
|
2020-06-30 17:57:57 +02:00
|
|
|
disruptor,
|
|
|
|
|
sjsonNewScalaJson.value,
|
|
|
|
|
),
|
2024-06-04 14:49:37 +02:00
|
|
|
testDependencies,
|
2021-12-20 08:00:30 +01:00
|
|
|
Compile / generateContrabands / contrabandCodecsDependencies := List(sjsonNewCore.value),
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / managedSourceDirectories +=
|
2019-12-13 03:10:45 +01:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / contrabandFormatsForType := { tpe =>
|
|
|
|
|
val old = (Compile / generateContrabands / contrabandFormatsForType).value
|
2019-12-08 00:49:13 +01:00
|
|
|
val name = tpe.removeTypeParameters.name
|
|
|
|
|
if (name == "Throwable") Nil
|
|
|
|
|
else old(tpe)
|
|
|
|
|
},
|
2023-05-14 06:38:34 +02:00
|
|
|
Test / fork := true,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
2025-08-31 00:53:42 +02:00
|
|
|
exclude[MissingClassProblem]("sbt.internal.util.ConsoleAppenderFromLog4J"),
|
|
|
|
|
exclude[MissingClassProblem]("sbt.internal.util.Log4JConsoleAppender"),
|
2019-12-08 00:49:13 +01:00
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
.configure(addSbtIO)
|
|
|
|
|
|
|
|
|
|
lazy val utilRelation = (project in file("internal") / "util-relation")
|
|
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Relation",
|
|
|
|
|
libraryDependencies ++= Seq(scalacheck % "test"),
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Persisted caching based on sjson-new
|
2024-03-05 13:24:31 +01:00
|
|
|
lazy val utilCache = project
|
|
|
|
|
.in(file("util-cache"))
|
2024-03-01 09:34:11 +01:00
|
|
|
.enablePlugins(
|
|
|
|
|
ContrabandPlugin,
|
2025-02-04 07:11:28 +01:00
|
|
|
// we generate JsonCodec only for actionresult.contra
|
2024-08-11 08:49:46 +02:00
|
|
|
JsonCodecPlugin,
|
2024-03-01 09:34:11 +01:00
|
|
|
)
|
|
|
|
|
.dependsOn(utilLogging)
|
2019-12-08 00:49:13 +01:00
|
|
|
.settings(
|
2024-02-07 16:34:06 +01:00
|
|
|
testedBaseSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
name := "Util Cache",
|
|
|
|
|
libraryDependencies ++=
|
2024-03-01 09:34:11 +01:00
|
|
|
Seq(
|
|
|
|
|
sjsonNewCore.value,
|
|
|
|
|
sjsonNewScalaJson.value,
|
2025-08-17 01:23:34 +02:00
|
|
|
sjsonNewMurmurhash.value
|
2024-03-01 09:34:11 +01:00
|
|
|
),
|
|
|
|
|
Compile / managedSourceDirectories +=
|
|
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2025-09-06 12:33:41 +02:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.util.ActionCacheError"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.util.ActionCacheError$")
|
|
|
|
|
),
|
2024-02-07 16:34:06 +01:00
|
|
|
Test / fork := true,
|
|
|
|
|
)
|
|
|
|
|
.configure(
|
|
|
|
|
addSbtIO,
|
|
|
|
|
addSbtCompilerInterface,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Builds on cache to provide caching for filesystem-related operations
|
|
|
|
|
lazy val utilTracking = (project in file("util-tracking"))
|
|
|
|
|
.dependsOn(utilCache)
|
|
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Tracking",
|
|
|
|
|
libraryDependencies ++= Seq(scalatest % "test"),
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2020-04-24 11:53:38 +02:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
)
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
.configure(addSbtIO)
|
|
|
|
|
|
|
|
|
|
lazy val utilScripted = (project in file("internal") / "util-scripted")
|
|
|
|
|
.dependsOn(utilLogging, utilInterface)
|
|
|
|
|
.settings(
|
|
|
|
|
utilCommonSettings,
|
|
|
|
|
name := "Util Scripted",
|
2024-10-23 01:25:51 +02:00
|
|
|
libraryDependencies += scalaParsers,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
|
|
|
|
.configure(addSbtIO)
|
2014-12-18 05:38:10 +01:00
|
|
|
/* **** Intermediate-level Modules **** */
|
|
|
|
|
|
|
|
|
|
// Runner for uniform test interface
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val testingProj = (project in file("testing"))
|
|
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2025-06-29 00:35:51 +02:00
|
|
|
.dependsOn(workerProj, utilLogging)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
baseSettings,
|
2014-12-18 05:38:10 +01:00
|
|
|
name := "Testing",
|
2020-01-10 14:41:55 +01:00
|
|
|
libraryDependencies ++= Seq(
|
2024-10-23 01:25:51 +02:00
|
|
|
scalaXml,
|
2019-05-11 09:42:06 +02:00
|
|
|
testInterface,
|
|
|
|
|
launcherInterface,
|
2022-01-17 08:27:44 +01:00
|
|
|
sjsonNewScalaJson.value,
|
|
|
|
|
sjsonNewCore.value,
|
2019-05-11 09:42:06 +02:00
|
|
|
),
|
2024-03-17 09:54:20 +01:00
|
|
|
conflictWarning := ConflictWarning.disable,
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-04-19 07:50:18 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2018-03-07 21:31:24 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
2018-03-12 16:18:42 +01:00
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2019-12-08 00:49:13 +01:00
|
|
|
.configure(addSbtIO, addSbtCompilerClasspath)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2025-05-11 05:19:35 +02:00
|
|
|
lazy val workerProj = (project in file("worker"))
|
|
|
|
|
.dependsOn(exampleWorkProj % Test)
|
|
|
|
|
.settings(
|
|
|
|
|
name := "worker",
|
|
|
|
|
testedBaseSettings,
|
|
|
|
|
Compile / doc / javacOptions := Nil,
|
2025-06-29 00:35:51 +02:00
|
|
|
crossPaths := false,
|
2025-05-11 05:19:35 +02:00
|
|
|
autoScalaLibrary := false,
|
2025-06-29 00:35:51 +02:00
|
|
|
libraryDependencies ++= Seq(gson, testInterface),
|
2025-05-11 05:19:35 +02:00
|
|
|
libraryDependencies += "org.scala-lang" %% "scala3-library" % scalaVersion.value % Test,
|
|
|
|
|
// run / fork := false,
|
|
|
|
|
Test / fork := true,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2025-05-11 05:19:35 +02:00
|
|
|
)
|
|
|
|
|
.configure(addSbtIOForTest)
|
|
|
|
|
|
|
|
|
|
lazy val exampleWorkProj = (project in file("internal") / "example-work")
|
|
|
|
|
.settings(
|
|
|
|
|
minimalSettings,
|
|
|
|
|
name := "example work",
|
|
|
|
|
publish / skip := true,
|
|
|
|
|
)
|
|
|
|
|
|
2014-12-18 05:38:10 +01:00
|
|
|
// Basic task engine
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val taskProj = (project in file("tasks"))
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilControl)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2017-07-20 18:31:39 +02:00
|
|
|
name := "Tasks",
|
|
|
|
|
mimaSettings,
|
2019-03-08 21:26:15 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
|
|
|
|
// Standard task system. This provides map, flatMap, join, and more on top of the basic task model.
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val stdTaskProj = (project in file("tasks-standard"))
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilLogging, utilCache)
|
2017-04-21 09:14:31 +02:00
|
|
|
.dependsOn(taskProj % "compile;test->test")
|
|
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2014-12-18 05:38:10 +01:00
|
|
|
name := "Task System",
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.testExclusive,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2019-05-29 15:43:14 +02:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
),
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2019-12-08 00:49:13 +01:00
|
|
|
.configure(addSbtIO)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
|
|
|
|
// Embedded Scala code runner
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val runProj = (project in file("run"))
|
2017-06-16 22:11:33 +02:00
|
|
|
.enablePlugins(ContrabandPlugin)
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilLogging, utilControl)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2017-05-12 00:33:12 +02:00
|
|
|
name := "Run",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-05-12 00:33:12 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2018-03-12 16:18:42 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2019-12-08 00:49:13 +01:00
|
|
|
.configure(addSbtIO, addSbtCompilerClasspath)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2018-02-01 15:53:11 +01:00
|
|
|
val sbtProjDepsCompileScopeFilter =
|
2019-05-11 09:42:06 +02:00
|
|
|
ScopeFilter(
|
|
|
|
|
inDependencies(LocalProject("sbtProj"), includeRoot = false),
|
|
|
|
|
inConfigurations(Compile)
|
|
|
|
|
)
|
2018-02-01 15:53:11 +01:00
|
|
|
|
2024-09-15 07:58:23 +02:00
|
|
|
lazy val scriptedSbtProj = (project in file("scripted-sbt"))
|
2020-01-12 04:52:36 +01:00
|
|
|
.dependsOn(sbtProj % "compile;test->test", commandProj, utilLogging, utilScripted)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
baseSettings,
|
2024-09-15 07:58:23 +02:00
|
|
|
name := "scripted-sbt",
|
2017-07-20 18:31:39 +02:00
|
|
|
libraryDependencies ++= Seq(launcherInterface % "provided"),
|
|
|
|
|
mimaSettings,
|
2024-09-15 07:58:23 +02:00
|
|
|
scriptedSbtMimaSettings,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2018-07-10 06:58:45 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore)
|
|
|
|
|
.configure(addSbtIO, addSbtCompilerInterface)
|
2018-07-10 06:58:45 +02:00
|
|
|
|
2024-03-01 09:34:11 +01:00
|
|
|
lazy val remoteCacheProj = (project in file("sbt-remote-cache"))
|
|
|
|
|
.dependsOn(sbtProj)
|
|
|
|
|
.settings(
|
|
|
|
|
sbtPlugin := true,
|
|
|
|
|
baseSettings,
|
|
|
|
|
name := "sbt-remote-cache",
|
|
|
|
|
pluginCrossBuild / sbtVersion := version.value,
|
|
|
|
|
publishMavenStyle := true,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2024-03-01 09:34:11 +01:00
|
|
|
libraryDependencies += remoteapis,
|
|
|
|
|
)
|
|
|
|
|
|
2014-12-18 05:38:10 +01:00
|
|
|
// Implementation and support code for defining actions.
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val actionsProj = (project in file("main-actions"))
|
2025-05-14 06:01:20 +02:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(
|
|
|
|
|
completeProj,
|
|
|
|
|
runProj,
|
|
|
|
|
stdTaskProj,
|
|
|
|
|
taskProj,
|
|
|
|
|
testingProj,
|
2024-02-07 16:34:06 +01:00
|
|
|
utilCache,
|
2019-12-08 00:49:13 +01:00
|
|
|
utilLogging,
|
|
|
|
|
utilRelation,
|
|
|
|
|
utilTracking,
|
2025-05-11 05:19:35 +02:00
|
|
|
workerProj,
|
|
|
|
|
protocolProj,
|
2019-12-08 00:49:13 +01:00
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2016-11-30 14:42:51 +01:00
|
|
|
name := "Actions",
|
2017-07-20 18:31:39 +02:00
|
|
|
libraryDependencies += sjsonNewScalaJson.value,
|
2025-05-25 22:48:53 +02:00
|
|
|
libraryDependencies ++= Seq(gigahorseApacheHttp, jline3Terminal),
|
2025-05-14 06:01:20 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
|
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats,
|
2025-05-11 05:19:35 +02:00
|
|
|
// Test / fork := true,
|
|
|
|
|
Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore)
|
2017-04-21 09:14:31 +02:00
|
|
|
.configure(
|
|
|
|
|
addSbtIO,
|
2017-06-26 12:38:37 +02:00
|
|
|
addSbtCompilerInterface,
|
|
|
|
|
addSbtCompilerClasspath,
|
|
|
|
|
addSbtCompilerApiInfo,
|
|
|
|
|
addSbtZinc
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
lazy val protocolProj = (project in file("protocol"))
|
2017-06-16 22:11:33 +02:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(collectionProj, utilLogging)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2016-12-01 09:14:07 +01:00
|
|
|
testedBaseSettings,
|
|
|
|
|
name := "Protocol",
|
2022-01-18 05:21:38 +01:00
|
|
|
libraryDependencies ++= Seq(sjsonNewScalaJson.value, sjsonNewCore.value, ipcSocket),
|
2024-12-11 05:29:49 +01:00
|
|
|
Compile / scalacOptions += "-source:3.7",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-04-19 07:50:18 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2018-03-12 16:18:42 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
2020-05-12 17:34:34 +02:00
|
|
|
// ignore missing or incompatible methods in sbt.internal
|
|
|
|
|
exclude[IncompatibleMethTypeProblem]("sbt.internal.*"),
|
2018-03-12 16:18:42 +01:00
|
|
|
exclude[DirectMissingMethodProblem]("sbt.internal.*"),
|
|
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2016-12-01 09:14:07 +01:00
|
|
|
|
2014-12-18 05:38:10 +01:00
|
|
|
// General command support and core commands not specific to a build system
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val commandProj = (project in file("main-command"))
|
2017-06-16 22:11:33 +02:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2025-03-09 01:05:30 +01:00
|
|
|
.dependsOn(protocolProj, completeProj, utilLogging, runProj, utilCache)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2015-03-24 16:14:13 +01:00
|
|
|
name := "Command",
|
2022-01-18 05:21:38 +01:00
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
|
launcherInterface,
|
|
|
|
|
sjsonNewCore.value,
|
|
|
|
|
sjsonNewScalaJson.value,
|
|
|
|
|
templateResolverApi
|
|
|
|
|
),
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-04-19 07:50:18 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := ContrabandConfig.getFormats,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2017-09-18 01:08:45 +02:00
|
|
|
mimaBinaryIssueFilters ++= Vector(
|
2017-11-28 03:37:31 +01:00
|
|
|
),
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / headerCreate / unmanagedSources := {
|
|
|
|
|
val old = (Compile / headerCreate / unmanagedSources).value
|
2019-05-11 09:42:06 +02:00
|
|
|
old filterNot { x =>
|
|
|
|
|
(x.getName startsWith "NG") || (x.getName == "ReferenceCountedFileDescriptor.java")
|
|
|
|
|
}
|
2017-11-28 03:37:31 +01:00
|
|
|
},
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore)
|
2017-06-23 18:58:00 +02:00
|
|
|
.configure(
|
|
|
|
|
addSbtIO,
|
2017-06-26 12:38:37 +02:00
|
|
|
addSbtCompilerInterface,
|
2017-06-23 18:58:00 +02:00
|
|
|
addSbtCompilerClasspath,
|
Add global file repository task
Every time that the compile task is run, there are potentially a large
number of iops that must occur in order for sbt to generate the source
file list as well as for zinc to check which files have changed since
the last build. This can lead to a noticeable delay between when a build
is started (either manually or by triggered execution) and when
compilation actually begins. To reduce this latency, I am adding a
global view of the file system that will be stored in
BasicKeys.globalFileTreeView.
To make this work, I introduce the StampedFile trait, which augments the
java.io.File class with a stamp method that returns the zinc stamp for
the file. For source files, this will be a hash of the file, while for
binaries, it is just the last modified time. In order to gain access to
the sbt.internal.inc.Stamper class, I had to append addSbtZinc to the
commandProj configurations.
This view may or may not use an in-memory cache of the file system tree
to return the results. Because there is always the risk of the cache
getting out of sync with the actual file system, I both make it optional
to use a cache and provide a mechanism for flushing the cache. Moreover,
the in-memory cache implementation in sbt.io, which is backed by a
swoval FileTreeRepository, has the property that touching a monitored
directory invalidates the entire directory within the cache, so the
flush command isn't even strictly needed in general.
Because caching is optional, the global is of a FileTreeDataView, which
doesn't specify a caching strategy. Subsequent commits will make use of
this to potentially speed up incremental compilation by caching the
Stamps of the source files so that zinc does not need to compute the
hashes itself and will allow for continuous builds to use the cache to
monitor events instead of creating a new, standalone FileEventMonitor.
2018-08-26 01:43:48 +02:00
|
|
|
addSbtZinc
|
2017-06-23 18:58:00 +02:00
|
|
|
)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2017-05-23 23:48:20 +02:00
|
|
|
// The core macro project defines the main logic of the DSL, abstracted
|
2019-07-28 05:49:24 +02:00
|
|
|
// away from several sbt implementors (tasks, settings, et cetera).
|
2017-05-23 23:53:04 +02:00
|
|
|
lazy val coreMacrosProj = (project in file("core-macros"))
|
2024-02-07 16:34:06 +01:00
|
|
|
.dependsOn(
|
|
|
|
|
collectionProj,
|
|
|
|
|
utilCache,
|
|
|
|
|
)
|
2017-05-23 23:53:04 +02:00
|
|
|
.settings(
|
2023-11-14 12:12:34 +01:00
|
|
|
testedBaseSettings,
|
2017-05-23 23:48:20 +02:00
|
|
|
name := "Core Macros",
|
2020-08-16 19:57:10 +02:00
|
|
|
SettingKey[Boolean]("exportPipelining") := false,
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2017-05-23 23:48:20 +02:00
|
|
|
)
|
|
|
|
|
|
2014-12-18 05:38:10 +01:00
|
|
|
// Fixes scope=Scope for Setting (core defined in collectionProj) to define the settings system used in build definitions
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val mainSettingsProj = (project in file("main-settings"))
|
2019-12-08 00:49:13 +01:00
|
|
|
.dependsOn(
|
|
|
|
|
completeProj,
|
|
|
|
|
commandProj,
|
|
|
|
|
stdTaskProj,
|
|
|
|
|
coreMacrosProj,
|
2022-08-10 16:07:14 +02:00
|
|
|
logicProj,
|
2019-12-08 00:49:13 +01:00
|
|
|
utilLogging,
|
|
|
|
|
utilCache,
|
|
|
|
|
utilRelation,
|
|
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2017-05-24 10:27:51 +02:00
|
|
|
name := "Main Settings",
|
2021-05-03 05:25:23 +02:00
|
|
|
Test / testOptions ++= {
|
2020-01-12 04:52:36 +01:00
|
|
|
val cp = (Test / fullClasspathAsJars).value.map(_.data).mkString(java.io.File.pathSeparator)
|
|
|
|
|
val framework = TestFrameworks.ScalaTest
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.classpath=$cp") ::
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.version=${version.value}") ::
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.scala.version=${scalaVersion.value}") :: Nil
|
|
|
|
|
},
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2018-01-10 04:48:07 +01:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
),
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore)
|
|
|
|
|
.configure(addSbtIO, addSbtCompilerInterface, addSbtCompilerClasspath)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2019-04-18 09:14:04 +02:00
|
|
|
lazy val zincLmIntegrationProj = (project in file("zinc-lm-integration"))
|
|
|
|
|
.settings(
|
|
|
|
|
name := "Zinc LM Integration",
|
|
|
|
|
testedBaseSettings,
|
2021-05-03 05:25:23 +02:00
|
|
|
Test / testOptions +=
|
2020-01-12 04:52:36 +01:00
|
|
|
Tests.Argument(TestFrameworks.ScalaTest, s"-Dsbt.zinc.version=$zincVersion"),
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2020-04-24 23:43:07 +02:00
|
|
|
mimaBinaryIssueFilters ++= Seq(
|
|
|
|
|
),
|
2019-05-09 03:26:15 +02:00
|
|
|
libraryDependencies += launcherInterface,
|
2019-04-18 09:14:04 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore, lmIvy)
|
|
|
|
|
.configure(addSbtZincCompileCore)
|
2019-04-18 09:14:04 +02:00
|
|
|
|
2022-08-10 16:07:14 +02:00
|
|
|
lazy val buildFileProj = (project in file("buildfile"))
|
|
|
|
|
.dependsOn(
|
|
|
|
|
mainSettingsProj,
|
|
|
|
|
)
|
|
|
|
|
.settings(
|
|
|
|
|
testedBaseSettings,
|
|
|
|
|
name := "build file",
|
|
|
|
|
libraryDependencies ++= Seq(scalaCompiler),
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2022-08-10 16:07:14 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(lmCore, lmIvy)
|
|
|
|
|
.configure(addSbtIO, addSbtCompilerInterface, addSbtZincCompileCore)
|
2022-08-10 16:07:14 +02:00
|
|
|
|
2016-11-23 16:17:34 +01:00
|
|
|
// The main integration project for sbt. It brings all of the projects together, configures them, and provides for overriding conventions.
|
2017-04-21 09:14:31 +02:00
|
|
|
lazy val mainProj = (project in file("main"))
|
2017-06-16 22:11:33 +02:00
|
|
|
.enablePlugins(ContrabandPlugin)
|
2019-05-11 09:42:06 +02:00
|
|
|
.dependsOn(
|
|
|
|
|
actionsProj,
|
2022-09-20 09:49:26 +02:00
|
|
|
buildFileProj,
|
2019-05-11 09:42:06 +02:00
|
|
|
mainSettingsProj,
|
|
|
|
|
runProj,
|
|
|
|
|
commandProj,
|
|
|
|
|
collectionProj,
|
2019-12-08 00:49:13 +01:00
|
|
|
zincLmIntegrationProj,
|
|
|
|
|
utilLogging,
|
2019-05-11 09:42:06 +02:00
|
|
|
)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2015-03-27 00:22:24 +01:00
|
|
|
testedBaseSettings,
|
2014-12-18 05:38:10 +01:00
|
|
|
name := "Main",
|
2018-10-05 19:32:40 +02:00
|
|
|
checkPluginCross := {
|
|
|
|
|
val sv = scalaVersion.value
|
2020-01-10 14:41:55 +01:00
|
|
|
val f = baseDirectory.value / "src" / "main" / "scala" / "sbt" / "PluginCross.scala"
|
2021-01-11 01:23:43 +01:00
|
|
|
if (sv.startsWith("2.12") && !IO.readLines(f).exists(_.contains(s""""$sv""""))) {
|
2020-01-10 14:41:55 +01:00
|
|
|
sys.error(s"PluginCross.scala does not match up with the scalaVersion $sv")
|
2021-01-11 01:23:43 +01:00
|
|
|
}
|
2019-03-09 02:15:04 +01:00
|
|
|
},
|
2020-01-10 14:41:55 +01:00
|
|
|
libraryDependencies ++=
|
2025-08-31 00:53:42 +02:00
|
|
|
Seq(
|
2024-10-23 01:25:51 +02:00
|
|
|
scalaXml,
|
2022-10-18 16:08:23 +02:00
|
|
|
sjsonNewScalaJson.value,
|
|
|
|
|
sjsonNewCore.value,
|
|
|
|
|
launcherInterface,
|
|
|
|
|
caffeine,
|
2025-08-31 00:53:42 +02:00
|
|
|
),
|
2021-01-11 01:23:43 +01:00
|
|
|
libraryDependencies ++= (scalaVersion.value match {
|
|
|
|
|
case v if v.startsWith("2.12.") => List()
|
|
|
|
|
case _ => List(scalaPar)
|
|
|
|
|
}),
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-05-13 14:01:51 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 05:25:23 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Test / testOptions += Tests
|
2019-05-11 10:52:42 +02:00
|
|
|
.Argument(TestFrameworks.ScalaCheck, "-minSuccessfulTests", "1000"),
|
2020-08-16 19:57:10 +02:00
|
|
|
SettingKey[Boolean]("usePipelining") := false,
|
2023-11-25 00:51:20 +01:00
|
|
|
// TODO: Fix doc
|
|
|
|
|
Compile / doc / sources := Nil,
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2025-09-06 12:33:41 +02:00
|
|
|
mimaBinaryIssueFilters ++= Vector(
|
2025-09-07 07:21:33 +02:00
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.LocalProjectMatrix"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.LocalProjectMatrix$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.ProjectMatrixReference"),
|
2025-09-06 12:33:41 +02:00
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.ConfigData"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.ConfigData$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.graph.backend.IvyReport"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.graph.backend.IvyReport$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.graph.rendering.LicenseInfo"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.graph.rendering.LicenseInfo$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem](
|
|
|
|
|
"sbt.internal.librarymanagement.FakeRawRepository"
|
|
|
|
|
),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem](
|
|
|
|
|
"sbt.internal.librarymanagement.FakeRawRepository$"
|
|
|
|
|
),
|
|
|
|
|
ProblemFilters.exclude[MissingFieldProblem]("sbt.internal.server.NetworkChannel.SingleLine"),
|
|
|
|
|
ProblemFilters.exclude[MissingFieldProblem]("sbt.internal.server.NetworkChannel.InHeader"),
|
|
|
|
|
ProblemFilters.exclude[MissingFieldProblem]("sbt.internal.server.NetworkChannel.InBody"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem](
|
|
|
|
|
"sbt.internal.server.NetworkChannel$ChannelState"
|
|
|
|
|
),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.server.NetworkChannel$InBody$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.server.NetworkChannel$InHeader$"),
|
|
|
|
|
ProblemFilters.exclude[MissingClassProblem]("sbt.internal.server.NetworkChannel$SingleLine$"),
|
|
|
|
|
),
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2024-10-09 12:13:42 +02:00
|
|
|
.dependsOn(lmCore, lmIvy, lmCoursierShadedPublishing)
|
2024-10-09 08:53:58 +02:00
|
|
|
.configure(addSbtIO, addSbtCompilerInterface, addSbtZincCompileCore)
|
2014-12-18 05:38:10 +01:00
|
|
|
|
|
|
|
|
// Strictly for bringing implicits and aliases from subsystems into the top-level sbt namespace through a single package object
|
|
|
|
|
// technically, we need a dependency on all of mainProj's dependencies, but we don't do that since this is strictly an integration project
|
|
|
|
|
// with the sole purpose of providing certain identifiers without qualification (with a package object)
|
2021-04-20 05:43:15 +02:00
|
|
|
lazy val sbtProj = (project in file("sbt-app"))
|
2020-01-12 04:52:36 +01:00
|
|
|
.dependsOn(mainProj)
|
2017-04-21 09:14:31 +02:00
|
|
|
.settings(
|
2018-01-24 09:56:42 +01:00
|
|
|
testedBaseSettings,
|
2014-12-18 05:38:10 +01:00
|
|
|
name := "sbt",
|
2015-09-14 09:27:22 +02:00
|
|
|
normalizedName := "sbt",
|
2021-01-11 01:23:43 +01:00
|
|
|
version := {
|
|
|
|
|
if (scalaVersion.value == baseScalaVersion) version.value
|
2024-10-09 09:36:37 +02:00
|
|
|
else Utils.version2_13.value
|
2021-01-11 01:23:43 +01:00
|
|
|
},
|
2017-07-20 18:31:39 +02:00
|
|
|
crossPaths := false,
|
2021-01-11 01:23:43 +01:00
|
|
|
crossTarget := { target.value / scalaVersion.value },
|
2017-11-23 15:58:26 +01:00
|
|
|
javaOptions ++= Seq("-Xdebug", "-Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005"),
|
2017-07-20 18:31:39 +02:00
|
|
|
mimaSettings,
|
2017-08-28 06:42:26 +02:00
|
|
|
mimaBinaryIssueFilters ++= sbtIgnoredProblems,
|
2019-10-21 02:42:52 +02:00
|
|
|
)
|
2020-02-14 15:01:11 +01:00
|
|
|
.settings(
|
|
|
|
|
Test / run / connectInput := true,
|
|
|
|
|
Test / run / outputStrategy := Some(StdoutOutput),
|
|
|
|
|
Test / run / fork := true,
|
2021-05-03 05:25:23 +02:00
|
|
|
Test / testOptions ++= {
|
2020-02-14 15:01:11 +01:00
|
|
|
val cp = (Test / fullClasspathAsJars).value.map(_.data).mkString(java.io.File.pathSeparator)
|
|
|
|
|
val framework = TestFrameworks.ScalaTest
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.classpath=$cp") ::
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.version=${version.value}") ::
|
|
|
|
|
Tests.Argument(framework, s"-Dsbt.server.scala.version=${scalaVersion.value}") :: Nil
|
|
|
|
|
},
|
|
|
|
|
)
|
2022-09-20 09:49:26 +02:00
|
|
|
.configure(addSbtIO)
|
|
|
|
|
// addSbtCompilerBridge
|
2019-10-21 02:42:52 +02:00
|
|
|
|
|
|
|
|
lazy val serverTestProj = (project in file("server-test"))
|
2024-09-15 07:58:23 +02:00
|
|
|
.dependsOn(sbtProj % "compile->test", scriptedSbtProj % "compile->test")
|
2019-10-21 02:42:52 +02:00
|
|
|
.settings(
|
|
|
|
|
testedBaseSettings,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish,
|
2019-10-21 02:42:52 +02:00
|
|
|
// make server tests serial
|
2020-06-22 00:46:18 +02:00
|
|
|
Test / watchTriggers += baseDirectory.value.toGlob / "src" / "server-test" / **,
|
2019-10-21 02:42:52 +02:00
|
|
|
Test / parallelExecution := false,
|
2018-03-26 16:37:25 +02:00
|
|
|
Test / run / connectInput := true,
|
|
|
|
|
Test / run / outputStrategy := Some(StdoutOutput),
|
|
|
|
|
Test / run / fork := true,
|
2020-09-27 18:46:32 +02:00
|
|
|
Test / sourceGenerators += Def.task {
|
|
|
|
|
val rawClasspath =
|
|
|
|
|
(Compile / fullClasspathAsJars).value.map(_.data).mkString(java.io.File.pathSeparator)
|
|
|
|
|
val cp =
|
2021-11-14 14:59:34 +01:00
|
|
|
if (scala.util.Properties.isWin) rawClasspath.replace("\\", "\\\\")
|
2020-09-27 18:46:32 +02:00
|
|
|
else rawClasspath
|
|
|
|
|
val content = {
|
|
|
|
|
s"""|
|
|
|
|
|
|package testpkg
|
|
|
|
|
|
|
|
|
|
|
|object TestProperties {
|
|
|
|
|
| val classpath = "$cp"
|
|
|
|
|
| val version = "${version.value}"
|
|
|
|
|
| val scalaVersion = "${scalaVersion.value}"
|
|
|
|
|
|}
|
|
|
|
|
""".stripMargin
|
|
|
|
|
}
|
2021-12-12 07:49:11 +01:00
|
|
|
val file =
|
|
|
|
|
(Test / target).value / "generated" / "src" / "test" / "scala" / "testpkg" / "TestProperties.scala"
|
2020-09-27 18:46:32 +02:00
|
|
|
IO.write(file, content)
|
|
|
|
|
file :: Nil
|
2020-01-12 04:52:36 +01:00
|
|
|
},
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2017-10-20 05:18:43 +02:00
|
|
|
|
2020-06-22 01:48:33 +02:00
|
|
|
val isWin = scala.util.Properties.isWin
|
2023-01-02 23:48:13 +01:00
|
|
|
val isLinux = scala.util.Properties.isLinux
|
|
|
|
|
val isArmArchitecture: Boolean = sys.props
|
|
|
|
|
.getOrElse("os.arch", "")
|
|
|
|
|
.toLowerCase(Locale.ROOT) == "aarch64"
|
2020-07-27 23:33:19 +02:00
|
|
|
val buildThinClient =
|
2020-06-22 01:48:33 +02:00
|
|
|
inputKey[JPath]("generate a java implementation of the thin client")
|
2020-07-27 23:33:19 +02:00
|
|
|
// Use a TaskKey rather than SettingKey for nativeInstallDirectory so it can left unset by default
|
|
|
|
|
val nativeInstallDirectory = taskKey[JPath]("The install directory for the native executable")
|
|
|
|
|
val installNativeThinClient = inputKey[JPath]("Install the native executable")
|
2020-06-22 01:48:33 +02:00
|
|
|
lazy val sbtClientProj = (project in file("client"))
|
2022-06-26 19:15:50 +02:00
|
|
|
.enablePlugins(NativeImagePlugin)
|
2020-06-22 01:48:33 +02:00
|
|
|
.dependsOn(commandProj)
|
|
|
|
|
.settings(
|
2024-03-05 13:24:31 +01:00
|
|
|
commonSettings,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish,
|
2020-06-22 01:48:33 +02:00
|
|
|
name := "sbt-client",
|
2024-10-28 04:55:30 +01:00
|
|
|
bspEnabled := false,
|
2020-06-22 01:48:33 +02:00
|
|
|
crossPaths := false,
|
|
|
|
|
exportJars := true,
|
2022-12-09 00:40:34 +01:00
|
|
|
libraryDependencies += scalatest % Test,
|
2022-06-26 19:15:50 +02:00
|
|
|
Compile / mainClass := Some("sbt.client.Client"),
|
|
|
|
|
nativeImageReady := { () =>
|
|
|
|
|
()
|
2020-06-22 01:48:33 +02:00
|
|
|
},
|
2024-10-11 19:34:55 +02:00
|
|
|
nativeImageVersion := "23.0",
|
|
|
|
|
nativeImageJvm := "graalvm-java23",
|
|
|
|
|
nativeImageOutput := {
|
|
|
|
|
val outputDir = (target.value / "bin").toPath
|
|
|
|
|
if (!Files.exists(outputDir)) {
|
|
|
|
|
Files.createDirectories(outputDir)
|
|
|
|
|
}
|
|
|
|
|
outputDir.resolve("sbtn").toFile
|
|
|
|
|
},
|
2022-06-26 19:15:50 +02:00
|
|
|
nativeImageOptions ++= Seq(
|
2020-06-22 01:48:33 +02:00
|
|
|
"--no-fallback",
|
|
|
|
|
s"--initialize-at-run-time=sbt.client",
|
2024-10-20 04:02:40 +02:00
|
|
|
// "The current machine does not support all of the following CPU features that are required by
|
|
|
|
|
// the image: [CX8, CMOV, FXSR, MMX, SSE, SSE2, SSE3, SSSE3, SSE4_1, SSE4_2, POPCNT, LZCNT, AVX,
|
|
|
|
|
// AVX2, BMI1, BMI2, FMA, F16C]."
|
|
|
|
|
"-march=compatibility",
|
2022-06-26 19:15:50 +02:00
|
|
|
// "--verbose",
|
2020-06-22 01:48:33 +02:00
|
|
|
"-H:IncludeResourceBundles=jline.console.completer.CandidateListCompletionHandler",
|
|
|
|
|
"-H:+ReportExceptionStackTraces",
|
2020-07-01 23:29:50 +02:00
|
|
|
"-H:-ParseRuntimeOptions",
|
2020-08-14 04:56:02 +02:00
|
|
|
s"-H:Name=${target.value / "bin" / "sbtn"}",
|
2020-06-22 01:48:33 +02:00
|
|
|
),
|
2020-07-27 23:33:19 +02:00
|
|
|
buildThinClient := {
|
2020-06-22 01:48:33 +02:00
|
|
|
val isFish = Def.spaceDelimited("").parsed.headOption.fold(false)(_ == "--fish")
|
|
|
|
|
val ext = if (isWin) ".bat" else if (isFish) ".fish" else ".sh"
|
|
|
|
|
val output = target.value.toPath / "bin" / s"${if (isFish) "fish-" else ""}client$ext"
|
|
|
|
|
java.nio.file.Files.createDirectories(output.getParent)
|
|
|
|
|
val cp = (Compile / fullClasspathAsJars).value.map(_.data)
|
|
|
|
|
val args =
|
|
|
|
|
if (isWin) "%*" else if (isFish) s"$$argv" else s"$$*"
|
|
|
|
|
java.nio.file.Files.write(
|
|
|
|
|
output,
|
|
|
|
|
s"""
|
|
|
|
|
|${if (isWin) "@echo off" else s"#!/usr/bin/env ${if (isFish) "fish" else "sh"}"}
|
|
|
|
|
|
|
|
|
|
|
|java -cp ${cp.mkString(java.io.File.pathSeparator)} sbt.client.Client --jna $args
|
|
|
|
|
""".stripMargin.linesIterator.toSeq.tail.mkString("\n").getBytes
|
|
|
|
|
)
|
|
|
|
|
output.toFile.setExecutable(true)
|
|
|
|
|
output
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
|
2019-03-09 02:15:04 +01:00
|
|
|
/*
|
2018-10-24 17:19:28 +02:00
|
|
|
lazy val sbtBig = (project in file(".big"))
|
|
|
|
|
.dependsOn(sbtProj)
|
|
|
|
|
.settings(
|
|
|
|
|
name := "sbt-big",
|
|
|
|
|
normalizedName := "sbt-big",
|
|
|
|
|
crossPaths := false,
|
|
|
|
|
assemblyShadeRules.in(assembly) := {
|
|
|
|
|
val packagesToBeShaded = Seq(
|
|
|
|
|
"fastparse",
|
|
|
|
|
"jawn",
|
|
|
|
|
"scalapb",
|
|
|
|
|
)
|
|
|
|
|
packagesToBeShaded.map( prefix => {
|
|
|
|
|
ShadeRule.rename(s"$prefix.**" -> s"sbt.internal.$prefix.@1").inAll
|
|
|
|
|
})
|
|
|
|
|
},
|
|
|
|
|
assemblyMergeStrategy in assembly := {
|
|
|
|
|
case "LICENSE" | "NOTICE" => MergeStrategy.first
|
|
|
|
|
case x => (assemblyMergeStrategy in assembly).value(x)
|
|
|
|
|
},
|
|
|
|
|
artifact.in(Compile, packageBin) := artifact.in(Compile, assembly).value,
|
|
|
|
|
assemblyOption.in(assembly) ~= { _.copy(includeScala = false) },
|
|
|
|
|
addArtifact(artifact.in(Compile, packageBin), assembly),
|
|
|
|
|
pomPostProcess := { node =>
|
|
|
|
|
new RuleTransformer(new RewriteRule {
|
|
|
|
|
override def transform(node: XmlNode): XmlNodeSeq = node match {
|
|
|
|
|
case e: Elem if node.label == "dependency" =>
|
|
|
|
|
Comment(
|
|
|
|
|
"the dependency that was here has been absorbed via sbt-assembly"
|
|
|
|
|
)
|
|
|
|
|
case _ => node
|
|
|
|
|
}
|
|
|
|
|
}).transform(node).head
|
|
|
|
|
},
|
|
|
|
|
)
|
2019-05-11 09:42:06 +02:00
|
|
|
*/
|
2018-10-24 17:19:28 +02:00
|
|
|
|
2019-12-27 06:24:03 +01:00
|
|
|
// util projects used by Zinc and Lm
|
|
|
|
|
lazy val lowerUtils = (project in (file("internal") / "lower"))
|
|
|
|
|
.aggregate(lowerUtilProjects.map(p => LocalProject(p.id)): _*)
|
|
|
|
|
.settings(
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish
|
2019-12-27 06:24:03 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
lazy val upperModules = (project in (file("internal") / "upper"))
|
2020-11-15 03:22:29 +01:00
|
|
|
.aggregate(
|
|
|
|
|
((allProjects diff lowerUtilProjects)
|
2024-12-18 06:24:44 +01:00
|
|
|
diff Seq(bundledLauncherProj, lmCoursierShaded)).map(p => LocalProject(p.id)): _*
|
2020-11-15 03:22:29 +01:00
|
|
|
)
|
2019-12-27 06:24:03 +01:00
|
|
|
.settings(
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish
|
2019-12-27 06:24:03 +01:00
|
|
|
)
|
|
|
|
|
|
2017-08-28 06:42:26 +02:00
|
|
|
lazy val sbtIgnoredProblems = {
|
2017-11-29 22:45:02 +01:00
|
|
|
Vector(
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2017-08-28 06:42:26 +02:00
|
|
|
}
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2020-01-13 01:50:29 +01:00
|
|
|
def scriptedTask(launch: Boolean): Def.Initialize[InputTask[Unit]] = Def.inputTask {
|
2020-09-20 21:02:09 +02:00
|
|
|
val _ = publishLocalBinAll.value
|
2020-01-13 01:50:29 +01:00
|
|
|
val launchJar = s"-Dsbt.launch.jar=${(bundledLauncherProj / Compile / packageBin).value}"
|
2017-04-21 09:14:31 +02:00
|
|
|
Scripted.doScripted(
|
2024-09-15 07:58:23 +02:00
|
|
|
(scriptedSbtProj / scalaInstance).value,
|
2017-04-21 09:14:31 +02:00
|
|
|
scriptedSource.value,
|
|
|
|
|
scriptedBufferLog.value,
|
2018-01-24 14:42:18 +01:00
|
|
|
Def.setting(Scripted.scriptedParser(scriptedSource.value)).parsed,
|
2017-04-21 09:14:31 +02:00
|
|
|
scriptedPrescripted.value,
|
2020-01-13 01:50:29 +01:00
|
|
|
scriptedLaunchOpts.value ++ (if (launch) Some(launchJar) else None),
|
2020-01-12 04:52:36 +01:00
|
|
|
scalaVersion.value,
|
|
|
|
|
version.value,
|
2024-09-15 07:58:23 +02:00
|
|
|
(scriptedSbtProj / Test / fullClasspathAsJars).value
|
2020-11-20 21:17:59 +01:00
|
|
|
.map(_.data)
|
|
|
|
|
.filterNot(_.getName.contains("scala-compiler")),
|
2022-10-02 07:58:37 +02:00
|
|
|
(bundledLauncherProj / Compile / packageBin).value,
|
2019-11-17 21:34:19 +01:00
|
|
|
streams.value.log
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2014-12-18 05:38:10 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
lazy val publishLauncher = TaskKey[Unit]("publish-launcher")
|
|
|
|
|
|
2017-04-21 09:14:31 +02:00
|
|
|
def allProjects =
|
|
|
|
|
Seq(
|
2017-06-26 12:38:37 +02:00
|
|
|
logicProj,
|
|
|
|
|
completeProj,
|
2017-04-21 09:14:31 +02:00
|
|
|
testingProj,
|
|
|
|
|
taskProj,
|
|
|
|
|
stdTaskProj,
|
|
|
|
|
runProj,
|
2024-09-15 07:58:23 +02:00
|
|
|
scriptedSbtProj,
|
2017-04-21 09:14:31 +02:00
|
|
|
protocolProj,
|
|
|
|
|
actionsProj,
|
|
|
|
|
commandProj,
|
|
|
|
|
mainSettingsProj,
|
2019-04-18 09:14:04 +02:00
|
|
|
zincLmIntegrationProj,
|
2017-04-21 09:14:31 +02:00
|
|
|
mainProj,
|
|
|
|
|
sbtProj,
|
2017-05-26 06:59:49 +02:00
|
|
|
bundledLauncherProj,
|
2020-06-22 01:48:33 +02:00
|
|
|
sbtClientProj,
|
2022-08-10 16:07:14 +02:00
|
|
|
buildFileProj,
|
2024-02-07 16:34:06 +01:00
|
|
|
utilCache,
|
|
|
|
|
utilTracking,
|
2024-03-17 21:32:02 +01:00
|
|
|
collectionProj,
|
|
|
|
|
coreMacrosProj,
|
2024-03-01 09:34:11 +01:00
|
|
|
remoteCacheProj,
|
2024-10-09 08:50:03 +02:00
|
|
|
lmCore,
|
|
|
|
|
lmIvy,
|
2024-10-09 10:48:43 +02:00
|
|
|
lmCoursierDefinitions,
|
2024-10-09 09:13:25 +02:00
|
|
|
lmCoursier,
|
|
|
|
|
lmCoursierShaded,
|
2024-12-06 19:12:47 +01:00
|
|
|
lmCoursierShadedPublishing,
|
2025-05-11 05:19:35 +02:00
|
|
|
workerProj,
|
2019-12-27 06:24:03 +01:00
|
|
|
) ++ lowerUtilProjects
|
|
|
|
|
|
2020-09-20 21:02:09 +02:00
|
|
|
// These need to be cross published to 2.12 and 2.13 for Zinc
|
2019-12-27 06:24:03 +01:00
|
|
|
lazy val lowerUtilProjects =
|
|
|
|
|
Seq(
|
2023-11-14 12:12:34 +01:00
|
|
|
utilCore,
|
2019-12-08 00:49:13 +01:00
|
|
|
utilControl,
|
|
|
|
|
utilInterface,
|
|
|
|
|
utilLogging,
|
|
|
|
|
utilPosition,
|
|
|
|
|
utilRelation,
|
|
|
|
|
utilScripted,
|
2017-04-21 09:14:31 +02:00
|
|
|
)
|
2015-02-03 04:44:02 +01:00
|
|
|
|
2017-05-08 15:08:40 +02:00
|
|
|
lazy val nonRoots = allProjects.map(p => LocalProject(p.id))
|
2014-12-18 05:38:10 +01:00
|
|
|
|
2018-07-31 02:28:42 +02:00
|
|
|
ThisBuild / scriptedBufferLog := true
|
2021-12-12 07:49:11 +01:00
|
|
|
ThisBuild / scriptedPrescripted := { _ => }
|
2018-07-31 02:28:42 +02:00
|
|
|
|
2017-04-21 09:14:31 +02:00
|
|
|
def otherRootSettings =
|
|
|
|
|
Seq(
|
2022-10-02 07:58:37 +02:00
|
|
|
scripted := scriptedTask(true).evaluated,
|
|
|
|
|
scriptedUnpublished := scriptedTask(true).evaluated,
|
2021-05-03 05:25:23 +02:00
|
|
|
scriptedSource := (sbtProj / sourceDirectory).value / "sbt-test",
|
|
|
|
|
scripted / watchTriggers += scriptedSource.value.toGlob / **,
|
|
|
|
|
scriptedUnpublished / watchTriggers := (scripted / watchTriggers).value,
|
2019-12-30 01:26:05 +01:00
|
|
|
scriptedLaunchOpts := List("-Xmx1500M", "-Xms512M", "-server") :::
|
|
|
|
|
(sys.props.get("sbt.ivy.home") match {
|
|
|
|
|
case Some(home) => List(s"-Dsbt.ivy.home=$home")
|
|
|
|
|
case _ => Nil
|
|
|
|
|
}),
|
2020-09-20 21:02:09 +02:00
|
|
|
publishLocalBinAll := {
|
|
|
|
|
val _ = (Compile / publishLocalBin).all(scriptedProjects).value
|
|
|
|
|
},
|
2017-04-21 09:14:31 +02:00
|
|
|
) ++ inConfig(Scripted.RepoOverrideTest)(
|
|
|
|
|
Seq(
|
2017-06-23 18:58:00 +02:00
|
|
|
scriptedLaunchOpts := List(
|
|
|
|
|
"-Xmx1500M",
|
|
|
|
|
"-Xms512M",
|
|
|
|
|
"-server",
|
|
|
|
|
"-Dsbt.override.build.repos=true",
|
|
|
|
|
s"""-Dsbt.repository.config=${scriptedSource.value / "repo.config"}"""
|
2019-12-30 01:26:05 +01:00
|
|
|
) :::
|
|
|
|
|
(sys.props.get("sbt.ivy.home") match {
|
|
|
|
|
case Some(home) => List(s"-Dsbt.ivy.home=$home")
|
|
|
|
|
case _ => Nil
|
|
|
|
|
}),
|
2020-01-13 01:50:29 +01:00
|
|
|
scripted := scriptedTask(true).evaluated,
|
|
|
|
|
scriptedUnpublished := scriptedTask(true).evaluated,
|
2021-05-03 05:25:23 +02:00
|
|
|
scriptedSource := (sbtProj / sourceDirectory).value / "repo-override-test"
|
2019-05-11 09:42:06 +02:00
|
|
|
)
|
|
|
|
|
)
|
2016-04-24 20:23:48 +02:00
|
|
|
|
2014-12-18 19:14:04 +01:00
|
|
|
lazy val docProjects: ScopeFilter = ScopeFilter(
|
2019-05-11 09:42:06 +02:00
|
|
|
inAnyProject -- inProjects(
|
|
|
|
|
sbtRoot,
|
|
|
|
|
sbtProj,
|
2024-09-15 07:58:23 +02:00
|
|
|
scriptedSbtProj,
|
2019-12-27 06:24:03 +01:00
|
|
|
upperModules,
|
|
|
|
|
lowerUtils,
|
2019-05-11 09:42:06 +02:00
|
|
|
),
|
2014-12-18 19:14:04 +01:00
|
|
|
inConfigurations(Compile)
|
2014-12-18 05:38:10 +01:00
|
|
|
)
|
2020-01-14 23:01:17 +01:00
|
|
|
lazy val javafmtOnCompile = taskKey[Unit]("Formats java sources before compile")
|
2024-10-06 02:46:25 +02:00
|
|
|
lazy val scriptedProjects = ScopeFilter(inAnyProject)
|
2014-12-18 23:40:20 +01:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def customCommands: Seq[Setting[?]] = Seq(
|
2018-02-21 08:28:33 +01:00
|
|
|
commands += Command.command("publishLocalAllModule") { state =>
|
|
|
|
|
val extracted = Project.extract(state)
|
|
|
|
|
import extracted._
|
2019-05-11 09:42:06 +02:00
|
|
|
val sv = get(scalaVersion)
|
|
|
|
|
val projs = structure.allProjectRefs
|
2021-12-12 07:49:11 +01:00
|
|
|
val ioOpt = projs find { case ProjectRef(_, id) => id == "ioRoot"; case _ => false }
|
2018-02-21 08:28:33 +01:00
|
|
|
val utilOpt = projs find { case ProjectRef(_, id) => id == "utilRoot"; case _ => false }
|
2021-12-12 07:49:11 +01:00
|
|
|
val lmOpt = projs find { case ProjectRef(_, id) => id == "lmRoot"; case _ => false }
|
2018-02-21 08:28:33 +01:00
|
|
|
val zincOpt = projs find { case ProjectRef(_, id) => id == "zincRoot"; case _ => false }
|
2021-12-12 07:49:11 +01:00
|
|
|
(ioOpt map { case ProjectRef(build, _) => "{" + build.toString + "}/publishLocal" }).toList :::
|
|
|
|
|
(utilOpt map { case ProjectRef(build, _) =>
|
|
|
|
|
"{" + build.toString + "}/publishLocal"
|
|
|
|
|
}).toList :::
|
|
|
|
|
(lmOpt map { case ProjectRef(build, _) =>
|
|
|
|
|
"{" + build.toString + "}/publishLocal"
|
|
|
|
|
}).toList :::
|
|
|
|
|
(zincOpt map { case ProjectRef(build, _) =>
|
|
|
|
|
val zincSv = get((ProjectRef(build, "zinc") / scalaVersion))
|
|
|
|
|
val csv = get((ProjectRef(build, "compilerBridge") / crossScalaVersions)).toList
|
|
|
|
|
(csv flatMap { bridgeSv =>
|
|
|
|
|
s"++$bridgeSv" :: ("{" + build.toString + "}compilerBridge/publishLocal") :: Nil
|
|
|
|
|
}) :::
|
|
|
|
|
List(s"++$zincSv", "{" + build.toString + "}/publishLocal")
|
2019-05-11 09:42:06 +02:00
|
|
|
}).getOrElse(Nil) :::
|
|
|
|
|
List(s"++$sv", "publishLocal") :::
|
|
|
|
|
state
|
2018-02-21 08:28:33 +01:00
|
|
|
},
|
2020-09-20 21:02:09 +02:00
|
|
|
commands += Command.command("releaseLowerUtils") { state =>
|
|
|
|
|
// TODO - Any sort of validation
|
|
|
|
|
"clean" ::
|
|
|
|
|
"+lowerUtils/compile" ::
|
|
|
|
|
"+lowerUtils/publishSigned" ::
|
|
|
|
|
state
|
|
|
|
|
},
|
|
|
|
|
commands += Command.command("release") { state =>
|
2014-12-18 23:40:20 +01:00
|
|
|
// TODO - Any sort of validation
|
2021-04-26 05:15:16 +02:00
|
|
|
"upperModules/compile" ::
|
2020-09-20 21:02:09 +02:00
|
|
|
"upperModules/publishSigned" ::
|
2020-11-16 05:38:48 +01:00
|
|
|
"bundledLauncherProj/publishSigned" ::
|
2015-02-21 03:09:43 +01:00
|
|
|
state
|
|
|
|
|
},
|
2014-12-18 23:40:20 +01:00
|
|
|
)
|
2018-01-11 15:13:21 +01:00
|
|
|
|
2024-10-09 08:50:03 +02:00
|
|
|
ThisBuild / pomIncludeRepository := (_ => false) // drop repos other than Maven Central from POM
|
2021-03-07 23:41:52 +01:00
|
|
|
ThisBuild / publishTo := {
|
2025-06-01 23:53:33 +02:00
|
|
|
val centralSnapshots = "https://central.sonatype.com/repository/maven-snapshots/"
|
2025-06-02 04:27:07 +02:00
|
|
|
val v = (ThisBuild / version).value
|
|
|
|
|
if (v.endsWith("SNAPSHOT")) Some("central-snapshots" at centralSnapshots)
|
2025-06-01 23:53:33 +02:00
|
|
|
else localStaging.value
|
2021-03-07 23:41:52 +01:00
|
|
|
}
|
|
|
|
|
ThisBuild / publishMavenStyle := true
|
2024-10-09 08:50:03 +02:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
def lmTestSettings: Seq[Setting[?]] = Def.settings(
|
2024-10-09 08:50:03 +02:00
|
|
|
Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat,
|
|
|
|
|
Test / parallelExecution := false
|
|
|
|
|
)
|
|
|
|
|
|
2024-10-09 08:55:37 +02:00
|
|
|
lazy val lmCore = (project in file("lm-core"))
|
2024-10-11 16:22:55 +02:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2017-04-26 22:55:38 +02:00
|
|
|
.settings(
|
2015-08-19 09:56:08 +02:00
|
|
|
commonSettings,
|
2024-10-09 08:50:03 +02:00
|
|
|
lmTestSettings,
|
2017-07-12 00:39:06 +02:00
|
|
|
name := "librarymanagement-core",
|
2022-01-30 05:29:07 +01:00
|
|
|
contrabandSjsonNewVersion := sjsonNewVersion,
|
2017-08-10 12:56:43 +02:00
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
|
jsch,
|
2024-10-23 01:25:51 +02:00
|
|
|
// scalaReflect,
|
2022-01-30 05:29:07 +01:00
|
|
|
// scalaCompiler.value,
|
2017-08-10 12:56:43 +02:00
|
|
|
launcherInterface,
|
2022-06-13 03:55:09 +02:00
|
|
|
gigahorseApacheHttp,
|
2024-10-23 01:25:51 +02:00
|
|
|
scalaXml,
|
2024-10-09 08:53:58 +02:00
|
|
|
sjsonNewScalaJson.value % Optional,
|
|
|
|
|
sjsonNewCore.value % Optional,
|
2024-10-23 01:56:59 +02:00
|
|
|
scalatest % Test,
|
|
|
|
|
scalacheck % Test,
|
2019-08-18 05:06:52 +02:00
|
|
|
scalaVerify % Test,
|
2017-08-10 12:56:43 +02:00
|
|
|
),
|
2021-05-03 04:18:03 +02:00
|
|
|
Compile / resourceGenerators += Def
|
2017-08-10 12:56:43 +02:00
|
|
|
.task(
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.generateVersionFile(
|
2017-08-10 12:56:43 +02:00
|
|
|
version.value,
|
|
|
|
|
resourceManaged.value,
|
|
|
|
|
streams.value,
|
2024-10-09 08:53:58 +02:00
|
|
|
(Compile / compile).value.asInstanceOf[Analysis]
|
2017-08-10 12:56:43 +02:00
|
|
|
)
|
2017-06-21 14:47:35 +02:00
|
|
|
)
|
2017-08-10 12:56:43 +02:00
|
|
|
.taskValue,
|
2018-09-22 05:34:51 +02:00
|
|
|
Compile / scalacOptions ++= (scalaVersion.value match {
|
|
|
|
|
case v if v.startsWith("2.12.") => List("-Ywarn-unused:-locals,-explicits,-privates")
|
|
|
|
|
case _ => List()
|
|
|
|
|
}),
|
2024-10-08 01:55:45 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-07-02 01:27:54 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 04:18:03 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := DatatypeConfig.getFormats,
|
2016-12-14 11:26:53 +01:00
|
|
|
// WORKAROUND sbt/sbt#2205 include managed sources in packageSrc
|
2021-05-03 04:18:03 +02:00
|
|
|
Compile / packageSrc / mappings ++= {
|
|
|
|
|
val srcs = (Compile / managedSources).value
|
|
|
|
|
val sdirs = (Compile / managedSourceDirectories).value
|
2016-12-14 11:26:53 +01:00
|
|
|
val base = baseDirectory.value
|
2024-10-09 08:53:58 +02:00
|
|
|
import Path._
|
2016-12-14 11:26:53 +01:00
|
|
|
(((srcs --- sdirs --- base) pair (relativeTo(sdirs) | relativeTo(base) | flat)) toSeq)
|
2017-07-20 18:13:35 +02:00
|
|
|
},
|
2025-08-11 12:39:47 +02:00
|
|
|
mimaSettings,
|
2017-04-26 22:55:38 +02:00
|
|
|
)
|
2024-10-09 08:53:58 +02:00
|
|
|
.dependsOn(utilLogging, utilPosition, utilCache)
|
|
|
|
|
.configure(addSbtIO, addSbtCompilerInterface)
|
2017-07-12 00:39:06 +02:00
|
|
|
|
2024-10-09 08:55:37 +02:00
|
|
|
lazy val lmIvy = (project in file("lm-ivy"))
|
2024-10-08 01:25:52 +02:00
|
|
|
.enablePlugins(ContrabandPlugin, JsonCodecPlugin)
|
2019-08-18 05:06:52 +02:00
|
|
|
.dependsOn(lmCore)
|
2017-07-12 00:39:06 +02:00
|
|
|
.settings(
|
|
|
|
|
commonSettings,
|
2024-10-09 08:50:03 +02:00
|
|
|
lmTestSettings,
|
2017-07-12 00:39:06 +02:00
|
|
|
name := "librarymanagement-ivy",
|
2022-01-30 05:29:07 +01:00
|
|
|
contrabandSjsonNewVersion := sjsonNewVersion,
|
2019-08-18 05:06:52 +02:00
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
|
ivy,
|
2024-10-09 08:53:58 +02:00
|
|
|
sjsonNewScalaJson.value,
|
|
|
|
|
sjsonNewCore.value,
|
2024-10-23 01:56:59 +02:00
|
|
|
scalatest % Test,
|
|
|
|
|
scalacheck % Test,
|
2019-08-18 05:06:52 +02:00
|
|
|
scalaVerify % Test,
|
|
|
|
|
),
|
2024-10-08 01:55:45 +02:00
|
|
|
Compile / managedSourceDirectories +=
|
2017-07-12 00:39:06 +02:00
|
|
|
baseDirectory.value / "src" / "main" / "contraband-scala",
|
2021-05-03 04:18:03 +02:00
|
|
|
Compile / generateContrabands / sourceManaged := baseDirectory.value / "src" / "main" / "contraband-scala",
|
|
|
|
|
Compile / generateContrabands / contrabandFormatsForType := DatatypeConfig.getFormats,
|
2025-08-11 12:39:47 +02:00
|
|
|
Test / classLoaderLayeringStrategy := ClassLoaderLayeringStrategy.Flat,
|
|
|
|
|
mimaSettings,
|
2017-07-12 00:39:06 +02:00
|
|
|
)
|
2024-06-04 11:10:52 +02:00
|
|
|
|
2025-01-02 03:16:32 +01:00
|
|
|
lazy val lmCoursierSettings: Seq[Setting[?]] = Def.settings(
|
2024-10-09 10:48:43 +02:00
|
|
|
baseSettings,
|
2024-10-11 13:08:49 +02:00
|
|
|
headerLicense := Some(
|
|
|
|
|
HeaderLicense.Custom(
|
|
|
|
|
"""|sbt
|
|
|
|
|
|Copyright 2024, Scala Center
|
|
|
|
|
|Copyright 2015 - 2023, Alexandre Archambault
|
|
|
|
|
|Licensed under Apache License 2.0 (see LICENSE)
|
|
|
|
|
|""".stripMargin
|
|
|
|
|
)
|
|
|
|
|
),
|
2024-10-09 10:48:43 +02:00
|
|
|
developers +=
|
2024-10-09 09:13:25 +02:00
|
|
|
Developer(
|
|
|
|
|
"alexarchambault",
|
|
|
|
|
"Alexandre Archambault",
|
|
|
|
|
"",
|
|
|
|
|
url("https://github.com/alexarchambault")
|
|
|
|
|
),
|
2024-10-11 10:24:21 +02:00
|
|
|
)
|
|
|
|
|
|
2024-10-09 10:48:43 +02:00
|
|
|
lazy val lmCoursierDefinitions = project
|
2024-10-09 09:17:29 +02:00
|
|
|
.in(file("lm-coursier/definitions"))
|
2022-08-09 15:43:15 +02:00
|
|
|
.disablePlugins(MimaPlugin)
|
|
|
|
|
.settings(
|
2024-10-09 10:48:43 +02:00
|
|
|
lmCoursierSettings,
|
2024-10-11 10:24:21 +02:00
|
|
|
scalafixDependencies += "net.hamnaberg" %% "dataclass-scalafix" % dataclassScalafixVersion,
|
2022-08-09 15:43:15 +02:00
|
|
|
libraryDependencies ++= Seq(
|
2024-10-09 09:36:37 +02:00
|
|
|
coursier,
|
2024-10-09 09:13:25 +02:00
|
|
|
"net.hamnaberg" %% "dataclass-annotation" % dataclassScalafixVersion % Provided,
|
2022-08-09 15:43:15 +02:00
|
|
|
),
|
2022-12-08 23:31:15 +01:00
|
|
|
conflictWarning := ConflictWarning.disable,
|
2024-10-09 09:36:37 +02:00
|
|
|
Utils.noPublish,
|
2022-08-09 15:43:15 +02:00
|
|
|
)
|
2024-10-09 09:36:37 +02:00
|
|
|
.dependsOn(lmIvy % "provided")
|
2022-08-09 15:43:15 +02:00
|
|
|
|
2024-10-11 17:42:34 +02:00
|
|
|
lazy val lmCoursierDependencies = Def.settings(
|
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
|
coursier,
|
|
|
|
|
coursierSbtMavenRepo,
|
|
|
|
|
"io.get-coursier.jniutils" % "windows-jni-utils-lmcoursier" % jniUtilsVersion,
|
|
|
|
|
"net.hamnaberg" %% "dataclass-annotation" % dataclassScalafixVersion % Provided,
|
|
|
|
|
"org.scalatest" %% "scalatest" % "3.2.19" % Test,
|
|
|
|
|
),
|
|
|
|
|
excludeDependencies ++= Seq(
|
|
|
|
|
ExclusionRule("org.scala-lang.modules", "scala-xml_2.13"),
|
|
|
|
|
),
|
|
|
|
|
)
|
|
|
|
|
|
2024-10-09 09:13:25 +02:00
|
|
|
lazy val lmCoursier = project
|
2024-10-09 09:17:29 +02:00
|
|
|
.in(file("lm-coursier"))
|
2017-12-11 01:25:50 +01:00
|
|
|
.settings(
|
2024-10-09 10:48:43 +02:00
|
|
|
lmCoursierSettings,
|
2019-04-25 17:16:49 +02:00
|
|
|
Mima.settings,
|
2019-07-02 14:01:08 +02:00
|
|
|
Mima.lmCoursierFilters,
|
2024-10-11 10:24:21 +02:00
|
|
|
lmCoursierDependencies,
|
2024-10-11 16:57:28 +02:00
|
|
|
Compile / sourceGenerators += Utils.dataclassGen(lmCoursierDefinitions).taskValue,
|
2019-04-24 18:20:32 +02:00
|
|
|
)
|
2024-10-09 09:36:37 +02:00
|
|
|
.dependsOn(
|
2024-10-09 10:48:43 +02:00
|
|
|
// We depend on lmIvy rather than just lmCore to handle the ModuleDescriptor
|
|
|
|
|
// passed to DependencyResolutionInterface.update, which is an IvySbt#Module
|
|
|
|
|
// (seems DependencyResolutionInterface.moduleDescriptor is ignored).
|
2024-10-09 09:36:37 +02:00
|
|
|
lmIvy
|
|
|
|
|
)
|
2019-04-24 18:20:32 +02:00
|
|
|
|
2024-10-09 09:13:25 +02:00
|
|
|
lazy val lmCoursierShaded = project
|
2024-10-09 09:17:29 +02:00
|
|
|
.in(file("lm-coursier/target/shaded-module"))
|
2019-04-24 18:20:32 +02:00
|
|
|
.settings(
|
2024-10-09 10:48:43 +02:00
|
|
|
lmCoursierSettings,
|
2019-05-22 21:19:46 +02:00
|
|
|
Mima.settings,
|
2019-07-02 14:01:08 +02:00
|
|
|
Mima.lmCoursierFilters,
|
|
|
|
|
Mima.lmCoursierShadedFilters,
|
2024-10-09 09:13:25 +02:00
|
|
|
Compile / sources := (lmCoursier / Compile / sources).value,
|
2024-10-11 10:24:21 +02:00
|
|
|
lmCoursierDependencies,
|
2024-10-11 17:42:34 +02:00
|
|
|
autoScalaLibrary := false,
|
|
|
|
|
libraryDependencies ++= Seq(
|
|
|
|
|
scala3Library % Provided,
|
|
|
|
|
),
|
|
|
|
|
assembly / assemblyOption ~= { _.withIncludeScala(false) },
|
2024-10-11 10:24:21 +02:00
|
|
|
conflictWarning := ConflictWarning.disable,
|
|
|
|
|
Utils.noPublish,
|
2022-09-23 20:03:55 +02:00
|
|
|
assemblyShadeRules := {
|
2024-10-11 10:24:21 +02:00
|
|
|
val namespacesToShade = Seq(
|
2020-05-12 00:16:06 +02:00
|
|
|
"coursier",
|
|
|
|
|
"org.fusesource",
|
|
|
|
|
"macrocompat",
|
2020-11-18 15:32:19 +01:00
|
|
|
"io.github.alexarchambault.windowsansi",
|
2021-08-01 14:18:32 +02:00
|
|
|
"concurrentrefhashmap",
|
2022-09-23 20:03:55 +02:00
|
|
|
"com.github.ghik",
|
2021-08-01 14:18:32 +02:00
|
|
|
// pulled by the plexus-archiver stuff that coursier-cache
|
|
|
|
|
// depends on for now… can hopefully be removed in the future
|
|
|
|
|
"com.google.common",
|
2022-09-23 20:03:55 +02:00
|
|
|
"com.jcraft",
|
|
|
|
|
"com.lmax",
|
2021-08-01 14:18:32 +02:00
|
|
|
"org.apache.commons",
|
|
|
|
|
"org.apache.xbean",
|
|
|
|
|
"org.codehaus",
|
|
|
|
|
"org.iq80",
|
2022-12-08 23:31:15 +01:00
|
|
|
"org.tukaani",
|
2022-10-18 17:38:11 +02:00
|
|
|
"com.github.plokhotnyuk.jsoniter_scala",
|
|
|
|
|
"scala.cli",
|
|
|
|
|
"com.github.luben.zstd",
|
|
|
|
|
"javax.inject" // hope shading this is fine… It's probably pulled via plexus-archiver, that sbt shouldn't use anyway…
|
2020-05-12 00:16:06 +02:00
|
|
|
)
|
2024-10-11 10:24:21 +02:00
|
|
|
namespacesToShade.map { ns =>
|
|
|
|
|
ShadeRule.rename(ns + ".**" -> s"lmcoursier.internal.shaded.$ns.@1").inAll
|
|
|
|
|
}
|
2020-05-12 00:16:06 +02:00
|
|
|
},
|
2024-10-11 10:24:21 +02:00
|
|
|
assemblyMergeStrategy := {
|
|
|
|
|
case PathList("lmcoursier", "internal", "shaded", "org", "fusesource", _*) =>
|
|
|
|
|
MergeStrategy.first
|
|
|
|
|
// case PathList("lmcoursier", "internal", "shaded", "package.class") => MergeStrategy.first
|
|
|
|
|
// case PathList("lmcoursier", "internal", "shaded", "package$.class") => MergeStrategy.first
|
|
|
|
|
case PathList("com", "github") => MergeStrategy.discard
|
|
|
|
|
case PathList("com", "jcraft") => MergeStrategy.discard
|
|
|
|
|
case PathList("com", "lmax") => MergeStrategy.discard
|
|
|
|
|
case PathList("com", "sun") => MergeStrategy.discard
|
|
|
|
|
case PathList("com", "swoval") => MergeStrategy.discard
|
|
|
|
|
case PathList("com", "typesafe") => MergeStrategy.discard
|
|
|
|
|
case PathList("gigahorse") => MergeStrategy.discard
|
|
|
|
|
case PathList("jline") => MergeStrategy.discard
|
|
|
|
|
case PathList("scala") => MergeStrategy.discard
|
|
|
|
|
case PathList("sjsonnew") => MergeStrategy.discard
|
|
|
|
|
case PathList("xsbti") => MergeStrategy.discard
|
|
|
|
|
case PathList("META-INF", "native", _*) => MergeStrategy.first
|
|
|
|
|
case "META-INF/services/lmcoursier.internal.shaded.coursier.jniutils.NativeApi" =>
|
|
|
|
|
MergeStrategy.first
|
|
|
|
|
case x =>
|
|
|
|
|
val oldStrategy = (ThisBuild / assemblyMergeStrategy).value
|
|
|
|
|
oldStrategy(x)
|
|
|
|
|
}
|
2017-12-11 01:25:50 +01:00
|
|
|
)
|
2024-10-09 09:36:37 +02:00
|
|
|
.dependsOn(lmIvy % "provided")
|
2024-10-11 10:24:21 +02:00
|
|
|
|
|
|
|
|
lazy val lmCoursierShadedPublishing = project
|
|
|
|
|
.in(file("lm-coursier/target/shaded-publishing-module"))
|
|
|
|
|
.settings(
|
|
|
|
|
scalaVersion := scala3,
|
|
|
|
|
name := "librarymanagement-coursier",
|
|
|
|
|
Compile / packageBin := (lmCoursierShaded / assembly).value,
|
|
|
|
|
Compile / exportedProducts := Seq(Attributed.blank((Compile / packageBin).value))
|
|
|
|
|
)
|