From cf52be3169258bd2c9b264c2c3782c6845d5d5b3 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 8 May 2017 15:20:34 +0200 Subject: [PATCH 1/4] Scope Scala Native's tasks to `Compile` and `Test` --- .../sbtplugin/ScalaNativePluginInternal.scala | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala index 08deaa5cd4..4a30ad8418 100644 --- a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala +++ b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala @@ -96,22 +96,27 @@ object ScalaNativePluginInternal { } lazy val projectSettings = - unscopedSettings ++ - inConfig(Compile)(externalDependenciesTask(compile)) ++ - inConfig(Test)(externalDependenciesTask(compile in Test)) ++ - inConfig(Compile)(availableDependenciesTask(compile)) ++ - inConfig(Test)(availableDependenciesTask(compile in Test)) ++ - inConfig(Compile)(nativeMissingDependenciesTask) ++ - inConfig(Test)(nativeMissingDependenciesTask) - - lazy val unscopedSettings = Seq( + dependencies ++ + inConfig(Compile)(scalaNativeSettings) ++ + inConfig(Test)(scalaNativeSettings) + + lazy val scalaNativeSettings = + scopedSettings ++ + externalDependenciesTask(compile) ++ + availableDependenciesTask(compile) ++ + nativeMissingDependenciesTask + + lazy val dependencies = Seq( libraryDependencies ++= Seq( "org.scala-native" %%% "nativelib" % nativeVersion, "org.scala-native" %%% "javalib" % nativeVersion, "org.scala-native" %%% "scalalib" % nativeVersion ), addCompilerPlugin( - "org.scala-native" % "nscplugin" % nativeVersion cross CrossVersion.full), + "org.scala-native" % "nscplugin" % nativeVersion cross CrossVersion.full) + ) + + lazy val scopedSettings = Seq( nativeWarnOldJVM := { val logger = nativeLogger.value Try(Class.forName("java.util.function.Function")).toOption match { @@ -184,13 +189,13 @@ object ScalaNativePluginInternal { }, nativeMode := "debug", artifactPath in nativeLink := { - (crossTarget in Compile).value / (moduleName.value + "-out") + crossTarget.value / (moduleName.value + "-out") }, nativeLinkerReporter := tools.LinkerReporter.empty, nativeOptimizerReporter := tools.OptimizerReporter.empty, nativeOptimizerDriver := tools.OptimizerDriver(nativeConfig.value), nativeWorkdir := { - val workdir = (Keys.crossTarget in Compile).value / "native" + val workdir = crossTarget.value / "native" IO.delete(workdir) IO.createDirectory(workdir) workdir @@ -253,10 +258,10 @@ object ScalaNativePluginInternal { lib }, nativeConfig := { - val mainClass = (selectMainClass in Compile).value.getOrElse( + val mainClass = selectMainClass.value.getOrElse( throw new MessageOnlyException("No main class detected.") ) - val classpath = (fullClasspath in Compile).value.map(_.data) + val classpath = fullClasspath.value.map(_.data) val entry = nir.Global.Top(mainClass.toString + "$") val cwd = nativeWorkdir.value @@ -375,7 +380,7 @@ object ScalaNativePluginInternal { nativeWarnOldJVM.value // We explicitly mention all of the steps in the pipeline // although only the last one is strictly necessary. - (compile in Compile).value + compile.value nativeLinkNIR.value nativeOptimizeNIR.value nativeGenerateLL.value From 334053d8bf2a87b99d7b9b90ad0d7ee905ad0edb Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 8 May 2017 15:56:36 +0200 Subject: [PATCH 2/4] Report native lib compilation failures Fix #692 --- .../scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala index 4a30ad8418..ac33bea67d 100644 --- a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala +++ b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala @@ -250,7 +250,7 @@ object ScalaNativePluginInternal { logger.running(compilec) val result = Process(compilec, cwd) ! logger if (result != 0) { - println("Failed to compile native library runtime code.") + sys.error("Failed to compile native library runtime code.") } } } From 3ef3ae5a6b592f4015e163a69680475d7667af96 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 8 May 2017 17:03:09 +0200 Subject: [PATCH 3/4] Adapt scripted tests to scoping changes --- scripted-tests/run/execution-context/build.sbt | 2 +- scripted-tests/run/linker-reporter/build.sbt | 3 ++- scripted-tests/run/optimizer-reporter/build.sbt | 3 ++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/scripted-tests/run/execution-context/build.sbt b/scripted-tests/run/execution-context/build.sbt index bf63d66a8d..df4ec1d838 100644 --- a/scripted-tests/run/execution-context/build.sbt +++ b/scripted-tests/run/execution-context/build.sbt @@ -5,7 +5,7 @@ scalaVersion := "2.11.11" lazy val runAndCheck = taskKey[Unit]("...") runAndCheck := { - val bin = nativeLink.value + val bin = (nativeLink in Compile).value val out = Process(bin.getAbsolutePath).lines_!.toList assert( out == List( diff --git a/scripted-tests/run/linker-reporter/build.sbt b/scripted-tests/run/linker-reporter/build.sbt index b9dd6d5f63..aded22a461 100644 --- a/scripted-tests/run/linker-reporter/build.sbt +++ b/scripted-tests/run/linker-reporter/build.sbt @@ -5,7 +5,8 @@ enablePlugins(ScalaNativePlugin) scalaVersion := "2.11.11" -nativeLinkerReporter := LinkerReporter.toFile(target.value / "out.dot") +nativeLinkerReporter in Compile := LinkerReporter.toFile( + target.value / "out.dot") lazy val check = taskKey[Unit]("Check that dot file was created.") diff --git a/scripted-tests/run/optimizer-reporter/build.sbt b/scripted-tests/run/optimizer-reporter/build.sbt index e1b6250bcf..2820d0f67a 100644 --- a/scripted-tests/run/optimizer-reporter/build.sbt +++ b/scripted-tests/run/optimizer-reporter/build.sbt @@ -5,7 +5,8 @@ enablePlugins(ScalaNativePlugin) scalaVersion := "2.11.11" -nativeOptimizerReporter := OptimizerReporter.toDirectory(crossTarget.value) +nativeOptimizerReporter in Compile := OptimizerReporter.toDirectory( + crossTarget.value) lazy val check = taskKey[Unit]("Check that dot file was created.") From 1413c57457b47f24aafed82dc38f607959f73cb5 Mon Sep 17 00:00:00 2001 From: Martin Duhem Date: Mon, 8 May 2017 17:14:53 +0200 Subject: [PATCH 4/4] Remove unused imports --- .../scalanative/sbtplugin/ScalaNativePluginInternal.scala | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala index ac33bea67d..d7bef7dcd5 100644 --- a/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala +++ b/sbt-scala-native/src/main/scala/scala/scalanative/sbtplugin/ScalaNativePluginInternal.scala @@ -1,8 +1,6 @@ package scala.scalanative package sbtplugin -import util._ - import sbtcrossproject.CrossPlugin.autoImport._ import ScalaNativePlugin.autoImport._ @@ -12,13 +10,11 @@ import scalanative.io.VirtualDirectory import scalanative.util.{Scope => ResourceScope} import sbt._, Keys._, complete.DefaultParsers._ -import xsbti.{Maybe, Reporter, Position, Severity, Problem} -import KeyRanks.DTask import scala.util.Try import System.{lineSeparator => nl} -import java.io.File +import java.io.ByteArrayInputStream object ScalaNativePluginInternal {