| 
1 |  | -import sbtcrossproject.CrossPlugin.autoImport.crossProject  | 
 | 1 | +// in the interest of reducing diffs between the 1.1.x branch and the  | 
 | 2 | +// main (2.x branch), there are some Scala 3 references in here that  | 
 | 3 | +// aren't affecting anything  | 
 | 4 | + | 
 | 5 | +ThisBuild / licenses += (("Apache-2.0", url("https://www.apache.org/licenses/LICENSE-2.0")))  | 
 | 6 | +ThisBuild / startYear := Some(2004)  | 
 | 7 | + | 
 | 8 | +// I thought we could declare these in `ThisBuild` scope but no :-/  | 
 | 9 | +val commonSettings = Seq(  | 
 | 10 | +  versionScheme := Some("early-semver"),  | 
 | 11 | +  versionPolicyIntention := {  | 
 | 12 | +    if (scalaVersion.value.startsWith("3"))  | 
 | 13 | +      Compatibility.None  | 
 | 14 | +    else  | 
 | 15 | +      Compatibility.BinaryCompatible  | 
 | 16 | +    }  | 
 | 17 | +)  | 
 | 18 | + | 
 | 19 | +lazy val root = project.in(file("."))  | 
 | 20 | +  .aggregate(parserCombinatorsJVM, parserCombinatorsJS, parserCombinatorsNative)  | 
 | 21 | +  .settings(  | 
 | 22 | +    commonSettings,  | 
 | 23 | +    publish / skip := true,  | 
 | 24 | +  )  | 
2 | 25 | 
 
  | 
3 | 26 | lazy val parserCombinators = crossProject(JVMPlatform, JSPlatform, NativePlatform)  | 
4 |  | -  .withoutSuffixFor(JVMPlatform).in(file("."))  | 
5 |  | -  .settings(ScalaModulePlugin.scalaModuleSettings)  | 
6 |  | -  .jvmSettings(ScalaModulePlugin.scalaModuleSettingsJVM)  | 
 | 27 | +  .in(file("."))  | 
7 | 28 |   .settings(  | 
 | 29 | +    ScalaModulePlugin.scalaModuleSettings,  | 
 | 30 | +    commonSettings,  | 
8 | 31 |     name := "scala-parser-combinators",  | 
 | 32 | +    scalaModuleAutomaticModuleName := Some("scala.util.parsing"),  | 
9 | 33 | 
 
  | 
10 |  | -    scalaModuleMimaPreviousVersion := Some("1.1.0").filter(_ => System.getenv("SCALAJS_VERSION") != "1.0.0"),  | 
11 |  | -    mimaBinaryIssueFilters ++= {  | 
12 |  | -      import com.typesafe.tools.mima.core._  | 
13 |  | -      import com.typesafe.tools.mima.core.ProblemFilters._  | 
14 |  | -      Seq(  | 
15 |  | -        exclude[IncompatibleSignatureProblem]("*"),  | 
 | 34 | +    crossScalaVersions := Seq("2.13.8", "2.12.15", "2.11.12"),  | 
 | 35 | +    scalaVersion := crossScalaVersions.value.head,  | 
16 | 36 | 
 
  | 
17 |  | -        // the following 3 are due to https://github.com/lightbend/mima/issues/388  | 
18 |  | -        exclude[DirectMissingMethodProblem]("scala.util.parsing.json.JSON.numberParser"),  | 
19 |  | -        exclude[DirectMissingMethodProblem]("scala.util.parsing.json.JSON.defaultNumberParser"),  | 
20 |  | -        exclude[DirectMissingMethodProblem]("scala.util.parsing.json.JSON.keywordCache")  | 
21 |  | -      )  | 
22 |  | -    },  | 
 | 37 | +    libraryDependencies += "junit" % "junit" % "4.13.2" % Test,  | 
 | 38 | +    libraryDependencies += "com.github.sbt" % "junit-interface" % "0.13.3" % Test,  | 
 | 39 | +    // so we can `@nowarn` in test code, but only in test code, so the dependency  | 
 | 40 | +    // doesn't leak downstream. can be dropped when we drop 2.11 from the crossbuild  | 
 | 41 | +    libraryDependencies += "org.scala-lang.modules" %% "scala-collection-compat" % "2.7.0" % Test,  | 
23 | 42 | 
 
  | 
24 |  | -    apiMappings += (scalaInstance.value.libraryJar ->  | 
25 |  | -      url(s"https://www.scala-lang.org/api/${scalaVersion.value}/")),  | 
 | 43 | +    apiMappings ++= scalaInstance.value.libraryJars.collect {  | 
 | 44 | +      case file if file.getName.startsWith("scala-library") && file.getName.endsWith(".jar") =>  | 
 | 45 | +        file -> url(s"http://www.scala-lang.org/api/${scalaVersion.value}/")  | 
 | 46 | +    }.toMap,  | 
26 | 47 | 
 
  | 
27 |  | -    scalacOptions in (Compile, doc) ++= Seq(  | 
28 |  | -      "-diagrams",  | 
29 |  | -      "-doc-source-url",  | 
30 |  | -      s"https://github.com/scala/scala-parser-combinators/tree/v${version.value}€{FILE_PATH}.scala",  | 
31 |  | -      "-sourcepath",  | 
32 |  | -      (baseDirectory in LocalRootProject).value.absolutePath,  | 
33 |  | -      "-doc-title",  | 
34 |  | -      "Scala Parser Combinators",  | 
35 |  | -      "-doc-version",  | 
36 |  | -      version.value  | 
37 |  | -    ),  | 
38 |  | -    unmanagedSourceDirectories in Compile ++= {  | 
39 |  | -      (unmanagedSourceDirectories in Compile).value.map { dir =>  | 
 | 48 | +    // go nearly warning-free, but only on 2.13, it's too hard across all versions  | 
 | 49 | +    Compile / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match {  | 
 | 50 | +      case Some((2, 13)) => Seq("-Werror",  | 
 | 51 | +        // ideally we'd do something about this. `^?` is the responsible method  | 
 | 52 | +        "-Wconf:site=scala.util.parsing.combinator.Parsers.*&cat=lint-multiarg-infix:i",  | 
 | 53 | +        // not sure what resolving this would look like? didn't think about it too hard  | 
 | 54 | +        "-Wconf:site=scala.util.parsing.combinator.lexical.StdLexical.*&cat=other-match-analysis:i",  | 
 | 55 | +      )  | 
 | 56 | +      case _ => Seq()  | 
 | 57 | +    }),  | 
 | 58 | +    Compile / doc / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match {  | 
 | 59 | +      case Some((2, 13)) => Seq(  | 
 | 60 | +        // it isn't able to link to [[java.lang.NoSuchMethodError]]  | 
 | 61 | +        // scala-xml doesn't have this problem, I tried copying their apiMappings stuff  | 
 | 62 | +        // and that didn't help, I'm mystified why :-/  | 
 | 63 | +        """-Wconf:msg=Could not find any member to link for*:i""",  | 
 | 64 | +      )  | 
 | 65 | +      case _ => Seq()  | 
 | 66 | +    }),  | 
 | 67 | +    Compile / doc / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match {  | 
 | 68 | +      case Some((3, _)) =>  | 
 | 69 | +        Seq()  // TODO see what flags might be desirable to pass to Scala 3's Scaladoc  | 
 | 70 | +      case _ =>  | 
 | 71 | +        Seq(  | 
 | 72 | +          "-diagrams",  | 
 | 73 | +          "-doc-source-url",  | 
 | 74 | +          s"https://github.com/scala/scala-parser-combinators/tree/v${version.value}€{FILE_PATH}.scala",  | 
 | 75 | +          "-sourcepath",  | 
 | 76 | +          (LocalRootProject / baseDirectory).value.absolutePath,  | 
 | 77 | +          "-doc-title",  | 
 | 78 | +          "Scala Parser Combinators",  | 
 | 79 | +          "-doc-version",  | 
 | 80 | +          version.value  | 
 | 81 | +        )  | 
 | 82 | +    }),  | 
 | 83 | +    Compile / unmanagedSourceDirectories ++= {  | 
 | 84 | +      (Compile / unmanagedSourceDirectories).value.map { dir =>  | 
40 | 85 |         CrossVersion.partialVersion(scalaVersion.value) match {  | 
41 |  | -          case Some((2, 13)) => file(dir.getPath ++ "-2.13")  | 
42 |  | -          case _             => file(dir.getPath ++ "-2.11-2.12")  | 
 | 86 | +          case Some((2, 13)) => file(dir.getPath ++ "-2.13+")  | 
 | 87 | +          case Some((3, _))  => file(dir.getPath ++ "-2.13+")  | 
 | 88 | +          case _             => file(dir.getPath ++ "-2.13-")  | 
43 | 89 |         }  | 
44 | 90 |       }  | 
45 | 91 |     }  | 
46 | 92 |   )  | 
47 | 93 |   .jvmSettings(  | 
 | 94 | +    ScalaModulePlugin.scalaModuleOsgiSettings,  | 
48 | 95 |     OsgiKeys.exportPackage := Seq(s"scala.util.parsing.*;version=${version.value}"),  | 
49 |  | -    libraryDependencies += "junit" % "junit" % "4.13" % Test,  | 
50 |  | -    libraryDependencies += "com.novocode" % "junit-interface" % "0.11" % Test  | 
51 | 96 |   )  | 
52 | 97 |   .jsSettings(  | 
 | 98 | +    // mystified why https://github.com/scala-js/scala-js/issues/635 would be rearing its head,  | 
 | 99 | +    // but only on sbt 1.4 + 2.13 and only in Test config?! WEIRD  | 
 | 100 | +    Test / doc / scalacOptions ++= (CrossVersion.partialVersion(scalaVersion.value) match {  | 
 | 101 | +      case Some((2, 13)) => Seq("-Wconf:msg=dropping dependency on node with no phase object*:i")  | 
 | 102 | +      case _ => Seq()  | 
 | 103 | +    }),  | 
53 | 104 |     // Scala.js cannot run forked tests  | 
54 |  | -    fork in Test := false  | 
 | 105 | +    Test / fork := false  | 
55 | 106 |   )  | 
56 |  | -  .jsConfigure(_.enablePlugins(ScalaJSJUnitPlugin))  | 
 | 107 | +  .jsEnablePlugins(ScalaJSJUnitPlugin)  | 
57 | 108 |   .nativeSettings(  | 
58 |  | -    skip in compile := System.getProperty("java.version").startsWith("1.6") || !scalaVersion.value.startsWith("2.11"),  | 
59 |  | -    test := {},  | 
60 |  | -    libraryDependencies := {  | 
61 |  | -      if (!scalaVersion.value.startsWith("2.11"))  | 
62 |  | -        libraryDependencies.value.filterNot(_.organization == "org.scala-native")  | 
63 |  | -      else libraryDependencies.value  | 
64 |  | -    }  | 
 | 109 | +    versionPolicyCheck / skip := true,  | 
 | 110 | +    versionCheck       / skip := true,  | 
 | 111 | +    Test / fork := false,  | 
 | 112 | +    libraryDependencies :=  | 
 | 113 | +        libraryDependencies.value.filterNot(_.organization == "junit") :+ "org.scala-native" %%% "junit-runtime" % "0.4.4",  | 
 | 114 | +    addCompilerPlugin("org.scala-native" % "junit-plugin" % "0.4.4" cross CrossVersion.full)  | 
65 | 115 |   )  | 
 | 116 | + | 
 | 117 | +lazy val parserCombinatorsJVM    = parserCombinators.jvm  | 
 | 118 | +lazy val parserCombinatorsJS     = parserCombinators.js  | 
 | 119 | +lazy val parserCombinatorsNative = parserCombinators.native  | 
0 commit comments