diff --git a/.travis.yml b/.travis.yml index 24adf95e..1adc8e03 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,5 +1,9 @@ language: scala +dist: trusty + +sudo: required + addons: apt: packages: @@ -11,6 +15,7 @@ before_install: - sed -e "s/^\\(127\\.0\\.0\\.1.*\\)/\\1 $(hostname | cut -c1-63)/" /etc/hosts > /tmp/hosts - sudo mv /tmp/hosts /etc/hosts - cat /etc/hosts # optionally check the content *after* + - admin/setup_travis.sh env: global: diff --git a/admin/setup_travis.sh b/admin/setup_travis.sh new file mode 100755 index 00000000..294ee6a2 --- /dev/null +++ b/admin/setup_travis.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +set -e + +sudo add-apt-repository --yes ppa:ubuntu-toolchain-r/test +sudo apt-get -qq update +sudo apt-get install -y -qq \ + clang++-3.8 \ + libgc-dev \ + libunwind8-dev + +# Install re2 +# Starting from Ubuntu 16.04 LTS, it'll be available as http://packages.ubuntu.com/xenial/libre2-dev +sudo apt-get install -y make +export CXX=clang++-3.8 +git clone https://code.googlesource.com/re2 +pushd re2 +git checkout 2017-03-01 +make -j4 test +sudo make install prefix=/usr +make testinstall prefix=/usr +popd diff --git a/build.sbt b/build.sbt index 07ac4eed..394111be 100644 --- a/build.sbt +++ b/build.sbt @@ -1,4 +1,5 @@ import ScalaModulePlugin._ +import sbtcrossproject.{crossProject, CrossType} scalaVersionsByJvm in ThisBuild := { val v211 = "2.11.11" @@ -14,12 +15,11 @@ scalaVersionsByJvm in ThisBuild := { } lazy val root = project.in(file(".")) - .aggregate(`scala-parser-combinatorsJS`, `scala-parser-combinatorsJVM`) + .aggregate(`scala-parser-combinatorsJS`, `scala-parser-combinatorsJVM`, `scala-parser-combinatorsNative`) .settings(disablePublishing) -lazy val `scala-parser-combinators` = crossProject.in(file(".")). +lazy val `scala-parser-combinators` = crossProject(JSPlatform, JVMPlatform, NativePlatform).in(file(".")). settings(scalaModuleSettings: _*). - jvmSettings(scalaModuleSettingsJVM). settings( name := "scala-parser-combinators", version := "1.0.7-SNAPSHOT", @@ -40,16 +40,33 @@ lazy val `scala-parser-combinators` = crossProject.in(file(".")). version.value ) ). + jvmSettings(scalaModuleSettingsJVM). jvmSettings( + // Mima uses the name of the jvm project in the artifactId + // when resolving previous versions (so no "-jvm" project) + name := "scala-parser-combinators", OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}"), libraryDependencies += "junit" % "junit" % "4.12" % "test", libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % "test" ). jsSettings( + name := "scala-parser-combinators-js", // Scala.js cannot run forked tests fork in Test := false ). - jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin)) + jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin)). + nativeSettings( + name := "scala-parser-combinators-native", + scalaVersion := "2.11.11", + skip in compile := System.getProperty("java.version").startsWith("1.6"), + test := {}, + libraryDependencies := { + if (!scalaVersion.value.startsWith("2.11")) + libraryDependencies.value.filterNot(_.organization == "org.scala-native") + else libraryDependencies.value + } + ) lazy val `scala-parser-combinatorsJVM` = `scala-parser-combinators`.jvm lazy val `scala-parser-combinatorsJS` = `scala-parser-combinators`.js +lazy val `scala-parser-combinatorsNative` = `scala-parser-combinators`.native diff --git a/native/src/main/scala/scala/util/parsing/input/PositionCache.scala b/native/src/main/scala/scala/util/parsing/input/PositionCache.scala new file mode 100644 index 00000000..ff9f144f --- /dev/null +++ b/native/src/main/scala/scala/util/parsing/input/PositionCache.scala @@ -0,0 +1,14 @@ +package scala.util.parsing.input + +import java.lang.CharSequence +import java.util.{AbstractMap, Collections} + +private[input] trait PositionCache { + private[input] lazy val indexCache: java.util.Map[CharSequence,Array[Int]] = new AbstractMap[CharSequence, Array[Int]] { + + override def entrySet() = Collections.emptySet() + + // the /dev/null of Maps + override def put(ch: CharSequence, a: Array[Int]) = null + } +} diff --git a/project/plugins.sbt b/project/plugins.sbt index f86a39c2..7620ecc4 100644 --- a/project/plugins.sbt +++ b/project/plugins.sbt @@ -1,3 +1,6 @@ addSbtPlugin("org.scala-lang.modules" % "sbt-scala-module" % "1.0.12") -addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.18") +addSbtPlugin("org.scala-js" % "sbt-scalajs" % "0.6.18") +addSbtPlugin("org.scala-native" % "sbt-crossproject" % "0.2.0") +addSbtPlugin("org.scala-native" % "sbt-scalajs-crossproject" % "0.2.0") +addSbtPlugin("org.scala-native" % "sbt-scala-native" % "0.3.1")