From 3d2c3d07cab51ab0cb9cec5edfe14e3c37c8e68e Mon Sep 17 00:00:00 2001 From: Jakob Odersky Date: Fri, 11 Aug 2017 14:34:31 -0700 Subject: Support sbt 1.0.0 --- README.md | 4 ++-- build.sbt | 9 ++++----- .../src/main/scala/ch/jodersky/sbt/jni/build/BuildTool.scala | 2 +- plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala | 1 + .../ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala | 1 + .../main/scala/ch/jodersky/sbt/jni/plugins/JniJavah.scala | 12 ++++++++---- .../main/scala/ch/jodersky/sbt/jni/plugins/JniNative.scala | 3 ++- .../main/scala/ch/jodersky/sbt/jni/plugins/JniPackage.scala | 2 +- .../sbt-test/sbt-jni/multiclasses/project/build.properties | 1 + .../src/sbt-test/sbt-jni/oneproject/project/build.properties | 1 + plugin/src/sbt-test/sbt-jni/simple/project/build.properties | 1 + project/build.properties | 2 +- project/plugins.sbt | 5 +---- 13 files changed, 25 insertions(+), 19 deletions(-) create mode 120000 plugin/src/sbt-test/sbt-jni/multiclasses/project/build.properties create mode 120000 plugin/src/sbt-test/sbt-jni/oneproject/project/build.properties create mode 100644 plugin/src/sbt-test/sbt-jni/simple/project/build.properties diff --git a/README.md b/README.md index 7b6bdd9..8219139 100644 --- a/README.md +++ b/README.md @@ -186,10 +186,10 @@ Real-world use-cases of sbt-jni include: 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). ## Building -Both the macro library (`sbt-jni-macros`) and the sbt plugins (`sbt-jni`) are published. This project uses sbt-doge to allow cross-building on a per-project basis: +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 is built against Scala 2.10 (the Scala version that sbt 0.13 uses) +- 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 20439d7..0f1b328 100644 --- a/build.sbt +++ b/build.sbt @@ -1,4 +1,6 @@ -val scalaVersions = Seq("2.12.2", "2.11.11", "2.10.6") +import scala.sys.process._ + +val scalaVersions = Seq("2.12.3", "2.11.11", "2.10.6") val macrosParadiseVersion = "2.1.0" // version is derived from latest git tag @@ -13,7 +15,6 @@ scalacOptions in ThisBuild ++= Seq( licenses in ThisBuild := Seq(("BSD New", url("http://opensource.org/licenses/BSD-3-Clause"))) lazy val root = (project in file(".")) - .enablePlugins(CrossPerProjectPlugin) .aggregate(macros, plugin) .settings( publish := {}, @@ -24,6 +25,7 @@ lazy val root = (project in file(".")) ) lazy val macros = (project in file("macros")) + .disablePlugins(ScriptedPlugin) .settings( name := "sbt-jni-macros", scalaVersion := scalaVersions.head, @@ -35,13 +37,10 @@ lazy val macros = (project in file("macros")) ) lazy val plugin = (project in file("plugin")) - .settings(scriptedSettings) .settings( name := "sbt-jni", sbtPlugin := true, publishMavenStyle := false, - scalaVersion := "2.10.6", - crossScalaVersions := Seq(scalaVersion.value), libraryDependencies += "org.ow2.asm" % "asm" % "5.0.4", // make project settings available to source sourceGenerators in Compile += Def.task { diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/BuildTool.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/BuildTool.scala index e1163f1..931ee58 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/BuildTool.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/BuildTool.scala @@ -1,7 +1,7 @@ package ch.jodersky.sbt.jni package build -import java.io.{ File, InputStream } +import java.io.File import java.nio.file.Files import scala.io.Source diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala index 07517a9..2eba748 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/CMake.scala @@ -2,6 +2,7 @@ package ch.jodersky.sbt.jni package build import sbt._ +import sys.process._ object CMake extends BuildTool with ConfigureMakeInstall { diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala index 0be900c..57977ed 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/build/ConfigureMakeInstall.scala @@ -3,6 +3,7 @@ package build import java.io.File import sbt._ +import sys.process._ trait ConfigureMakeInstall { self: BuildTool => diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniJavah.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniJavah.scala index eee5875..e313112 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniJavah.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniJavah.scala @@ -1,9 +1,11 @@ package ch.jodersky.sbt.jni package plugins +import collection.JavaConverters._ +import util.BytecodeUtil import sbt._ import sbt.Keys._ -import util.BytecodeUtil +import sys.process._ /** Adds `javah` header-generation functionality to projects. */ object JniJavah extends AutoPlugin { @@ -27,8 +29,10 @@ object JniJavah extends AutoPlugin { lazy val mainSettings: Seq[Setting[_]] = Seq( javahClasses in javah := { - val compiled: inc.Analysis = (compile in Compile).value - val classFiles: Set[File] = compiled.relations.allProducts.toSet + import xsbti.compile._ + val compiled: CompileAnalysis = (compile in Compile).value + val classFiles: Set[File] = compiled.readStamps().getAllProductStamps() + .asScala.keySet.toSet val nativeClasses = classFiles flatMap { file => BytecodeUtil.nativeClasses(file) } @@ -63,7 +67,7 @@ object JniJavah extends AutoPlugin { clazz ) val cmd = parts.mkString(" ") - val ev = Process(cmd) ! streams.value.log + val ev = Process(cmd) ! log if (ev != 0) sys.error(s"Error occured running javah. Exit code: ${ev}") } out diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniNative.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniNative.scala index a1e7c64..7bdf641 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniNative.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniNative.scala @@ -4,6 +4,7 @@ package plugins import build._ import sbt._ import sbt.Keys._ +import sys.process._ /** Wraps a native build system in sbt tasks. */ object JniNative extends AutoPlugin { @@ -37,7 +38,7 @@ object JniNative extends AutoPlugin { // the value retruned must match that of `ch.jodersky.jni.PlatformMacros#current()` of project `macros` nativePlatform := { try { - val lines = Process("uname -sm").lines + val lines = Process("uname -sm").lineStream if (lines.length == 0) { sys.error("Error occured trying to run `uname`") } diff --git a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniPackage.scala b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniPackage.scala index fe627a9..0c3fc31 100644 --- a/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniPackage.scala +++ b/plugin/src/main/scala/ch/jodersky/sbt/jni/plugins/JniPackage.scala @@ -3,6 +3,7 @@ package plugins import sbt._ import sbt.Keys._ +import sbt.io.Path._ import java.io.File /** Packages libraries built with JniNative. */ @@ -50,7 +51,6 @@ object JniPackage extends AutoPlugin { unmanagedNativeDirectories := Seq(baseDirectory.value / "lib_native"), unmanagedNativeLibraries := { - val baseDirs: Seq[File] = unmanagedNativeDirectories.value val mappings: Seq[(File, String)] = unmanagedNativeDirectories.value.flatMap { dir => val files: Seq[File] = (dir ** "*").get.filter(_.isFile) files pair rebase(dir, "/native") diff --git a/plugin/src/sbt-test/sbt-jni/multiclasses/project/build.properties b/plugin/src/sbt-test/sbt-jni/multiclasses/project/build.properties new file mode 120000 index 0000000..4f1a8ba --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/multiclasses/project/build.properties @@ -0,0 +1 @@ +../../simple/project/build.properties \ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/oneproject/project/build.properties b/plugin/src/sbt-test/sbt-jni/oneproject/project/build.properties new file mode 120000 index 0000000..4f1a8ba --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/oneproject/project/build.properties @@ -0,0 +1 @@ +../../simple/project/build.properties \ No newline at end of file diff --git a/plugin/src/sbt-test/sbt-jni/simple/project/build.properties b/plugin/src/sbt-test/sbt-jni/simple/project/build.properties new file mode 100644 index 0000000..94005e5 --- /dev/null +++ b/plugin/src/sbt-test/sbt-jni/simple/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.0.0 diff --git a/project/build.properties b/project/build.properties index 27e88aa..94005e5 100644 --- a/project/build.properties +++ b/project/build.properties @@ -1 +1 @@ -sbt.version=0.13.13 +sbt.version=1.0.0 diff --git a/project/plugins.sbt b/project/plugins.sbt index d57d693..97fc739 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,5 +1,2 @@ -// cross-compile subprojects with differing scala versions -addSbtPlugin("com.eed3si9n" % "sbt-doge" % "0.1.5") - // testing for sbt plugins -libraryDependencies += "org.scala-sbt" % "scripted-plugin" % sbtVersion.value +libraryDependencies += "org.scala-sbt" %% "scripted-plugin" % sbtVersion.value -- cgit v1.2.3