inThisBuild(
  Def.settings(
    organization := "ch.epfl.lara",
    organizationName := "LARA",
    organizationHomepage := Some(url("https://lara.epfl.ch")),
    licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0.html")),
    versionScheme := Some("semver-spec"),
    scalacOptions ++= Seq(
      "-feature",
      "-deprecation",
      "-unchecked"
    ),
    semanticdbEnabled := true,
    semanticdbVersion := scalafixSemanticdb.revision,
    scalafixDependencies += "com.github.liancheng" %% "organize-imports" % "0.6.0"
  )
)

val scala2 = "2.13.8"
val scala3 = "3.1.3"

val commonSettings2 = Seq(
  scalaVersion := scala2
)
val commonSettings3 = Seq(
  scalaVersion := scala3,
  scalacOptions ++= Seq(
    "-language:implicitConversions",
    // "-source:future", re-enable when liancheng/scalafix-organize-imports#221 is fixed
    "-old-syntax",
    "-no-indent"
  ),
  libraryDependencies += "org.scalatest" %% "scalatest" % "3.2.10" % "test",
  Test / parallelExecution := false
)

def withTests(project: Project): ClasspathDependency =
  project % "compile->compile;test->test"

lazy val root = Project(
  id = "lisa",
  base = file(".")
)
  .settings(commonSettings3)
  .settings(
    version := "0.1"
  )
  .dependsOn(kernel, withTests(utils), theories, tptp) // Everything but `examples`
  .aggregate(kernel, utils, theories, tptp) // To run tests on all modules

lazy val kernel = Project(
  id = "lisa-kernel",
  base = file("lisa-kernel")
)
  .settings(commonSettings2)
  .settings(
    crossScalaVersions := Seq(scala3)
  )

lazy val utils = Project(
  id = "lisa-utils",
  base = file("lisa-utils")
)
  .settings(commonSettings3)
  .dependsOn(kernel)

lazy val theories = Project(
  id = "lisa-theories",
  base = file("lisa-theories")
)
  .settings(commonSettings3)
  .dependsOn(withTests(utils))

lazy val tptp = Project(
  id = "lisa-tptp",
  base = file("lisa-tptp")
)
  .settings(commonSettings3)
  .settings(
    libraryDependencies += "io.github.leoprover" % "scala-tptp-parser_2.13" % "1.4"
  )
  .dependsOn(withTests(utils))

lazy val examples = Project(
  id = "lisa-examples",
  base = file("lisa-examples")
)
  .settings(commonSettings3)
  .dependsOn(root)