Skip to content

Commit

Permalink
Define valid package type for Scala.js and Scala Native
Browse files Browse the repository at this point in the history
  • Loading branch information
lwronski committed Apr 26, 2022
1 parent 9b4f317 commit 460295f
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 12 deletions.
50 changes: 38 additions & 12 deletions modules/cli/src/main/scala/scala/cli/commands/Package.scala
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ import java.util.zip.{ZipEntry, ZipOutputStream}

import scala.build.EitherCps.{either, value}
import scala.build._
import scala.build.errors.{BuildException, ScalaNativeBuildError}
import scala.build.errors.{BuildException, MalformedCliInputError, ScalaNativeBuildError}
import scala.build.internal.{NativeBuilderHelper, Runner, ScalaJsLinkerConfig}
import scala.build.options.{PackageType, Platform}
import scala.cli.CurrentParams
Expand Down Expand Up @@ -133,17 +133,43 @@ object Package extends ScalaCommand[PackageOptions] {
expectedModifyEpochSecondOpt: Option[Long]
): Either[BuildException, Option[Long]] = either {

val packageType = forcedPackageType.getOrElse {
// FIXME We'll probably need more refined rules if we start to support extra Scala.js or Scala Native specific types
if (build.options.notForBloopOptions.packageOptions.isDockerEnabled)
PackageType.Docker
else if (build.options.platform.value == Platform.JS)
PackageType.Js
else if (build.options.platform.value == Platform.Native)
PackageType.Native
else
build.options.notForBloopOptions.packageOptions.packageTypeOpt
.getOrElse(PackageType.Bootstrap)
val packageType: PackageType = {
val basePackageTypeOpt = build.options.notForBloopOptions.packageOptions.packageTypeOpt
lazy val validPackageScalaJS =
Seq(PackageType.LibraryJar, PackageType.SourceJar, PackageType.DocJar)
lazy val validPackageScalaNative =
Seq(PackageType.LibraryJar, PackageType.SourceJar, PackageType.DocJar)

forcedPackageType.getOrElse {
if (build.options.notForBloopOptions.packageOptions.isDockerEnabled) {
for (basePackageType <- basePackageTypeOpt)
throw new MalformedCliInputError(
s"Unsuported package type: $basePackageType for Docker."
)
PackageType.Docker
}
else if (build.options.platform.value == Platform.JS) {
val packageType =
for (basePackageType <- basePackageTypeOpt)
yield
if (validPackageScalaJS.contains(basePackageType)) basePackageType
else throw new MalformedCliInputError(
s"Unsuported package type: $basePackageType for Scala.js."
)
packageType.getOrElse(PackageType.Js)
}
else if (build.options.platform.value == Platform.Native) {
val packageType =
for (basePackageType <- basePackageTypeOpt)
yield
if (validPackageScalaNative.contains(basePackageType)) basePackageType
else throw new MalformedCliInputError(
s"Unsuported package type: $basePackageType for Scala Native."
)
packageType.getOrElse(PackageType.Native)
}
else basePackageTypeOpt.getOrElse(PackageType.Bootstrap)
}
}

// TODO When possible, call alreadyExistsCheck() before compiling stuff
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package scala.build.errors

final class MalformedCliInputError(message: String)
extends BuildException(message)

0 comments on commit 460295f

Please sign in to comment.