diff --git a/build.sbt b/build.sbt index cb933991..85914ca3 100644 --- a/build.sbt +++ b/build.sbt @@ -57,6 +57,17 @@ scalaVersionsByJvm in ThisBuild := { ) } +/** Create an OSGi version range for standard Scala versioning + * schemes that describes binary compatible versions. */ +def osgiVersionRange(version: String, requireMicro: Boolean = false): String = + if(version contains '-') "${@}" // M, RC or SNAPSHOT -> exact version + else if(requireMicro) "${range;[===,=+)}" // At least the same micro version + else "${range;[==,=+)}" // Any binary compatible version + +/** Create an OSGi Import-Package version specification. */ +def osgiImport(pattern: String, version: String, requireMicro: Boolean = false): String = + pattern + ";version=\"" + osgiVersionRange(version, requireMicro) + "\"" + lazy val compat = MultiScalaCrossProject(JSPlatform, JVMPlatform)( "compat", _.settings(scalaModuleSettings) @@ -73,7 +84,14 @@ lazy val compat = MultiScalaCrossProject(JSPlatform, JVMPlatform)( } ) .jvmSettings( - OsgiKeys.exportPackage := Seq(s"scala.collection.compat.*;version=${version.value}"), + OsgiKeys.exportPackage := { + if (scalaVersion.value.startsWith("2.13.")) + Seq(s"scala.collection.compat.*;version=${version.value}") + else + Seq(s"scala.collection.compat.*;version=${version.value},scala.jdk.*;version=${version.value}") + }, + OsgiKeys.importPackage := Seq(osgiImport("*", scalaBinaryVersion.value)), + OsgiKeys.privatePackage := Nil, junit ) .jsSettings(