From 0be325d533af3c5d4f9af70bce495da6047f6c3a Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Sat, 15 Jun 2019 15:36:47 +0200 Subject: Add support for Scala 2.13 and drop support for 2.10 --- README.md | 8 ++++---- build.sbt | 23 +++++++++++++++++----- .../main/scala/ch/jodersky/jni/annotations.scala | 5 +---- .../ch/jodersky/sbt/jni/plugins/JniLoad.scala | 17 +++++++++++++--- plugin/src/sbt-test/sbt-jni/simple/build.sbt | 2 +- .../sbt-jni/simple/project/ScriptedHelper.scala | 2 +- .../sbt-jni/simple/project/build.properties | 2 +- project/build.properties | 2 +- 8 files changed, 41 insertions(+), 20 deletions(-) diff --git a/README.md b/README.md index 9b07d72..4556ff3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ | sbt version | plugin version | |-------------|----------------| | 0.13.x | [![Download](https://api.bintray.com/packages/jodersky/sbt-plugins/sbt-jni/images/download.svg?version=1.2.6)](https://bintray.com/jodersky/sbt-plugins/sbt-jni/1.2.6/link) | -| 1.0.x | [![Download](https://api.bintray.com/packages/jodersky/sbt-plugins/sbt-jni/images/download.svg)](https://bintray.com/jodersky/sbt-plugins/sbt-jni/_latestVersion) | +| 1.x | [![Download](https://api.bintray.com/packages/jodersky/sbt-plugins/sbt-jni/images/download.svg)](https://bintray.com/jodersky/sbt-plugins/sbt-jni/_latestVersion) | # sbt-jni @@ -100,7 +100,7 @@ object Main extends App { } ``` -Note: this plugin is just a shorthand for adding `sbt-jni-macros` (the project in `macros/`) and the scala-macros-paradise projects as provided dependencies. +Note: this plugin is just a shorthand for adding `sbt-jni-macros` (the project in `macros/`) and the scala-macros-paradise (on Scala <= 2.13) projects as provided dependencies. See the [annotation's implementation](macros/src/main/scala/ch/jodersky/jni/annotations.scala) for details about the injected code. @@ -182,7 +182,7 @@ Real-world use-cases of sbt-jni include: ## Requirements and Dependencies -- projects using `JniLoad` must use Scala versions 2.10, 2.11 or 2.12 +- projects using `JniLoad` must use Scala versions 2.11, 2.12 or 2.13 - only POSIX platforms are supported (actually, any platform that has the `uname` command available) The goal of sbt-jni is to be the least intrusive possible. No transitive dependencies are added to projects using any plugin (some dependencies are added to the `provided` configuration, however these do not affect any downstream projects). @@ -190,7 +190,7 @@ The goal of sbt-jni is to be the least intrusive possible. No transitive depende ## Building Both the macro library (`sbt-jni-macros`) and the sbt plugins (`sbt-jni`) are published. Cross-building happens on a per-project basis: -- sbt-jni-macros is built against Scala 2.10, 2.11 and 2.12 +- sbt-jni-macros is built against Scala 2.11, 2.12 and 2.13 - sbt-jni is built against Scala 2.12 (the Scala version that sbt 1.x uses) The differing Scala versions make it necessary to always cross-compile and cross-publish this project, i.e. append a "+" before every task. diff --git a/build.sbt b/build.sbt index 78c82f7..190cb06 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ import scala.sys.process._ -val scalaVersions = Seq("2.12.4", "2.11.12", "2.10.6") +val scalaVersions = Seq("2.13.0", "2.12.8", "2.11.12") val macrosParadiseVersion = "2.1.0" // version is derived from latest git tag @@ -30,10 +30,23 @@ lazy val macros = (project in file("macros")) name := "sbt-jni-macros", scalaVersion := scalaVersions.head, crossScalaVersions := scalaVersions, - addCompilerPlugin("org.scalamacros" % "paradise" % macrosParadiseVersion cross CrossVersion.full), - libraryDependencies += "org.typelevel" %% "macro-compat" % "1.1.1", libraryDependencies += "org.scala-lang" % "scala-compiler" % scalaVersion.value % Provided, - libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value + libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value, + + libraryDependencies ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, n)) if n >= 13 => Seq() + case _ => Seq( + compilerPlugin("org.scalamacros" % "paradise" % macrosParadiseVersion cross CrossVersion.full) + ) + } + }, + Compile / scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, n)) if n >= 13 => Seq("-Ymacro-annotations") + case _ => Seq() + } + } ) lazy val plugin = (project in file("plugin")) @@ -58,6 +71,6 @@ lazy val plugin = (project in file("plugin")) }.taskValue, scriptedLaunchOpts := Seq( "-Dplugin.version=" + version.value, - "-XX:MaxPermSize=256m", "-Xmx2g", "-Xss2m" + "-Xmx2g", "-Xss2m" ) ) diff --git a/macros/src/main/scala/ch/jodersky/jni/annotations.scala b/macros/src/main/scala/ch/jodersky/jni/annotations.scala index b349ad4..5b8aecb 100644 --- a/macros/src/main/scala/ch/jodersky/jni/annotations.scala +++ b/macros/src/main/scala/ch/jodersky/jni/annotations.scala @@ -1,13 +1,10 @@ package ch.jodersky.jni -import macrocompat.bundle - import scala.language.experimental.macros import scala.reflect.macros.whitebox.Context import scala.annotation.StaticAnnotation import scala.annotation.compileTimeOnly -@bundle class nativeLoaderMacro(val c: Context) { def impl(annottees: c.Expr[Any]*): c.Expr[Any] = { @@ -47,7 +44,7 @@ class nativeLoaderMacro(val c: Context) { val tmp: Path = Files.createTempDirectory("jni-") val plat: String = { val line = try { - scala.sys.process.Process("uname -sm").lines.head + scala.sys.process.Process("uname -sm").lineStream.head } catch { case ex: Exception => sys.error("Error running `uname` command") } diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniLoad.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniLoad.scala index 9f88dbb..0518024 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniLoad.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniLoad.scala @@ -13,9 +13,20 @@ object JniLoad extends AutoPlugin { // Macro Paradise plugin and dependencies are needed to expand annotation macros. // Once expanded however, downstream projects don't need these dependencies anymore // (hence the "Provided" configuration). - addCompilerPlugin( - "org.scalamacros" % "paradise" % ProjectVersion.MacrosParadise cross CrossVersion.full - ), + libraryDependencies ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, n)) if n >= 13 => Seq() + case _ => Seq( + compilerPlugin("org.scalamacros" % "paradise" % ProjectVersion.MacrosParadise cross CrossVersion.full) + ) + } + }, + Compile / scalacOptions ++= { + CrossVersion.partialVersion(scalaVersion.value) match { + case Some((2, n)) if n >= 13 => Seq("-Ymacro-annotations") + case _ => Seq() + } + }, resolvers += Resolver.jcenterRepo, libraryDependencies += "org.scala-lang" % "scala-reflect" % scalaVersion.value % Provided, libraryDependencies += "ch.jodersky" %% "sbt-jni-macros" % ProjectVersion.Macros % Provided diff --git a/plugin/src/sbt-test/sbt-jni/simple/build.sbt b/plugin/src/sbt-test/sbt-jni/simple/build.sbt index b6ee91b..e2d73d0 100644 --- a/plugin/src/sbt-test/sbt-jni/simple/build.sbt +++ b/plugin/src/sbt-test/sbt-jni/simple/build.sbt @@ -4,7 +4,7 @@ lazy val root = (project in file(".")). aggregate(core, native) lazy val core = (project in file("core")). - settings(libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.2" % "test"). + settings(libraryDependencies += "org.scalatest" %% "scalatest" % "3.0.8" % "test"). settings(target in javah := (sourceDirectory in nativeCompile in native).value / "include"). dependsOn(native % Runtime) diff --git a/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala b/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala index b3d7c70..d5d1d6e 100644 --- a/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala +++ b/plugin/src/sbt-test/sbt-jni/simple/project/ScriptedHelper.scala @@ -8,7 +8,7 @@ object ScriptedHelper extends AutoPlugin { override def projectSettings = Seq( scalacOptions ++= Seq("-feature", "-deprecation"), - crossScalaVersions := Seq("2.12.4", "2.11.12", "2.10.6"), + crossScalaVersions := Seq("2.13.0", "2.12.8", "2.11.12"), scalaVersion := crossScalaVersions.value.head ) diff --git a/plugin/src/sbt-test/sbt-jni/simple/project/build.properties b/plugin/src/sbt-test/sbt-jni/simple/project/build.properties index 31334bb..d6e3507 100644 --- a/plugin/src/sbt-test/sbt-jni/simple/project/build.properties +++ b/plugin/src/sbt-test/sbt-jni/simple/project/build.properties @@ -1 +1 @@ -sbt.version=1.1.1 +sbt.version=1.1.6 diff --git a/project/build.properties b/project/build.properties index 31334bb..d6e3507 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=1.1.1 +sbt.version=1.1.6 -- cgit v1.2.3