Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
target/
/pack/
18 changes: 18 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
sudo: false
language: scala
scala:
- 2.11.12
- 2.12.4
jdk:
- oraclejdk8
env:
- SCALAJS_VERSION=1.0.0-M2
script:
- ./scripts/assemble-cli.sh $SCALAJS_VERSION $TRAVIS_SCALA_VERSION
cache:
directories:
- $HOME/.ivy2/cache
- $HOME/.sbt
before_cache:
- find $HOME/.ivy2/cache -name "ivydata-*.properties" -print -delete
- find $HOME/.sbt -name "*.lock" -print -delete
196 changes: 196 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1,196 @@
// Configurable settings
val scalaJSVersion =
settingKey[String]("Version of Scala.js for which to build to CLI")
val scalaJSScalaVersions =
settingKey[Seq[String]]("All the minor versions of Scala for which to build the CLI")

// Computed settings
val scalaJSBinaryVersion =
settingKey[String]("Binary version of Scala.js")

// Custom tasks
val cliLibJars =
taskKey[Seq[File]]("All the .jars that must go to the lib/ directory of the CLI")
val cliPack =
taskKey[File]("Pack the CLI for the current configuration")

// Duplicated from the Scala.js sbt plugin
def binaryScalaJSVersion(full: String): String = {
val ReleaseVersion = raw"""(\d+)\.(\d+)\.(\d+)""".r
val MinorSnapshotVersion = raw"""(\d+)\.(\d+)\.([1-9]\d*)-SNAPSHOT""".r
full match {
case ReleaseVersion(major, _, _) => major
case MinorSnapshotVersion(major, _, _) => major
case _ => full
}
}

inThisBuild(Def.settings(
version := "1.0.0-SNAPSHOT",
organization := "org.scala-js",

crossScalaVersions := Seq("2.12.4", "2.11.12"),
scalaVersion := crossScalaVersions.value.head,
scalacOptions ++= Seq("-deprecation", "-feature", "-Xfatal-warnings"),

scalaJSVersion := "1.0.0-M2",
scalaJSBinaryVersion := binaryScalaJSVersion(scalaJSVersion.value),

scalaJSScalaVersions := Seq(
"2.11.0",
"2.11.1",
"2.11.2",
"2.11.4",
"2.11.5",
"2.11.6",
"2.11.7",
"2.11.8",
"2.11.11",
"2.11.12",
"2.12.1",
"2.12.2",
"2.12.3",
"2.12.4",
),

homepage := Some(url("https://www.scala-js.org/")),
licenses += ("BSD New",
url("https://github.com/scala-js/scala-js-env-cli/blob/master/LICENSE")),
scmInfo := Some(ScmInfo(
url("https://github.com/scala-js/scala-js-cli"),
"scm:git:git@github.com:scala-js/scala-js-cli.git",
Some("scm:git:git@github.com:scala-js/scala-js-cli.git"))),
))

val commonSettings = Def.settings(
publishMavenStyle := true,
publishTo := {
val nexus = "https://oss.sonatype.org/"
if (isSnapshot.value)
Some("snapshots" at nexus + "content/repositories/snapshots")
else
Some("releases" at nexus + "service/local/staging/deploy/maven2")
},
pomExtra := (
<developers>
<developer>
<id>sjrd</id>
<name>Sébastien Doeraene</name>
<url>https://github.com/sjrd/</url>
</developer>
<developer>
<id>gzm0</id>
<name>Tobias Schlatter</name>
<url>https://github.com/gzm0/</url>
</developer>
<developer>
<id>nicolasstucki</id>
<name>Nicolas Stucki</name>
<url>https://github.com/nicolasstucki/</url>
</developer>
</developers>
),
pomIncludeRepository := { _ => false },
)

lazy val `scalajs-cli`: Project = project.in(file(".")).
settings(
commonSettings,

libraryDependencies ++= Seq(
"org.scala-js" %% "scalajs-tools" % scalaJSVersion.value,
"com.github.scopt" %% "scopt" % "3.5.0",
),

// assembly options
mainClass in assembly := None, // don't want an executable JAR
assemblyOption in assembly ~= { _.copy(includeScala = false) },
assemblyJarName in assembly :=
s"${normalizedName.value}-assembly_${scalaBinaryVersion.value}-${scalaJSVersion.value}.jar",

cliLibJars := {
val s = streams.value
val log = s.log

val sjsOrg = organization.value
val scalaBinVer = scalaBinaryVersion.value
val sjsVer = scalaJSVersion.value

val scalaFullVers = scalaJSScalaVersions.value.filter { full =>
CrossVersion.binaryScalaVersion(full) == scalaBinVer
}

val cliAssemblyJar = assembly.value

val stdLibModuleID =
sjsOrg % s"scalajs-library_$scalaBinVer" % sjsVer
val compilerPluginModuleIDs =
scalaFullVers.map(v => sjsOrg % s"scalajs-compiler_$v" % sjsVer)
val allModuleIDs = (stdLibModuleID +: compilerPluginModuleIDs).toVector
val allModuleIDsIntransitive = allModuleIDs.map(_.intransitive())

val resolvedLibJars = {
val retrieveDir = s.cacheDirectory / "cli-lib-jars"
val lm = {
import sbt.librarymanagement.ivy._
val ivyConfig = InlineIvyConfiguration().withLog(log)
IvyDependencyResolution(ivyConfig)
}
val dummyModuleName =
s"clilibjars-$sjsVer-$scalaBinVer-" + scalaFullVers.mkString("-")
val dummyModuleID = sjsOrg % dummyModuleName % version.value
val descriptor =
lm.moduleDescriptor(dummyModuleID, allModuleIDsIntransitive, scalaModuleInfo = None)
val maybeFiles = lm.retrieve(descriptor, retrieveDir, log)
maybeFiles.fold({ unresolvedWarn =>
throw unresolvedWarn.resolveException
}, { files =>
files
}).distinct
}

cliAssemblyJar +: resolvedLibJars
},

target in cliPack := baseDirectory.value / "pack",
moduleName in cliPack :=
s"scalajs_${scalaBinaryVersion.value}-${scalaJSVersion.value}",
crossTarget in cliPack :=
(target in cliPack).value / (moduleName in cliPack).value,

cliPack := {
val scalaBinVer = scalaBinaryVersion.value
val sjsVer = scalaJSVersion.value

val trg = (crossTarget in cliPack).value
val trgLib = trg / "lib"
val trgBin = trg / "bin"

if (trg.exists)
IO.delete(trg)

IO.createDirectory(trgLib)
val libJars = cliLibJars.value
for (libJar <- libJars) {
IO.copyFile(libJar, trgLib / libJar.getName)
}

IO.createDirectory(trgBin)
val scriptDir = (resourceDirectory in Compile).value
for {
scriptFile <- IO.listFiles(scriptDir)
if !scriptFile.getPath.endsWith("~")
} {
val content = IO.read(scriptFile)
val processedContent = content
.replaceAllLiterally("@SCALA_BIN_VER@", scalaBinVer)
.replaceAllLiterally("@SCALAJS_VER@", sjsVer)
val dest = trgBin / scriptFile.getName
IO.write(dest, processedContent)
if (scriptFile.canExecute)
dest.setExecutable(/* executable = */ true, /* ownerOnly = */ false)
}

trg
},
)
1 change: 1 addition & 0 deletions project/build.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
sbt.version=1.0.4
1 change: 1 addition & 0 deletions project/plugins.sbt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.14.5")
52 changes: 52 additions & 0 deletions scripts/assemble-cli.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#! /bin/sh

set -e

# Assembles the CLI tools for a given Scala binary version.

if [ $# -lt 2 ]; then
echo "Usage: $(basename $0) <scala.js full version> <base scala full version>" >&2
exit 1
fi

SCALAJS_VER=$1

BASEVER=$2
case $BASEVER in
2.11.*)
BINVER="2.11"
;;
2.12.*)
BINVER="2.12"
;;
*)
echo "Invalid Scala version $BINVER" >&2
exit 2
esac

# Build and lay out the contents of the archives
sbt \
"clean" \
"++$BASEVER!" \
"set scalaJSVersion in ThisBuild := \"$SCALAJS_VER\"" \
"cliPack" \
|| exit $?

# Base Scala.js project directory.
BASE="$(dirname $0)/.."

# Aritfact name (no extension).
NAME=scalajs_$BINVER-$SCALAJS_VER

# Target directories
TRG_BASE="$BASE/pack"
TRG_VER="$TRG_BASE/$NAME"

# Tar and zip the whole thing up
(
cd $TRG_BASE
tar cfz $NAME.tgz $NAME

if [ -f $NAME.zip ]; then rm $NAME.zip; fi
zip -r $NAME.zip -r $NAME
)
16 changes: 16 additions & 0 deletions src/main/resources/scalajsc
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#! /bin/sh

SCALA_BIN_VER="@SCALA_BIN_VER@"
SCALAJS_VER="@SCALAJS_VER@"
SCALA_VER=$(scalac -version 2>&1 | grep -o '[0-9]\.[0-9][0-9]\.[0-9]')

if [ "$(echo $SCALA_VER | cut -b 1-4)" != "$SCALA_BIN_VER" ]; then
echo "This bundle of Scala.js CLI is for $SCALA_BIN_VER. Your scala version is $SCALA_VER!" >&2
exit 1
fi

BASE="$(dirname $0)/.."
PLUGIN="$BASE/lib/scalajs-compiler_$SCALA_VER-$SCALAJS_VER.jar"
JSLIB="$BASE/lib/scalajs-library_$SCALA_BIN_VER-$SCALAJS_VER.jar"

scalac -classpath "$JSLIB" "-Xplugin:$PLUGIN" "$@"
14 changes: 14 additions & 0 deletions src/main/resources/scalajsc.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
@ECHO OFF
set SCALA_BIN_VER=@SCALA_BIN_VER@
set SCALAJS_VER=@SCALAJS_VER@

for /F "tokens=5" %%i in (' scala -version 2^>^&1 1^>nul ') do set SCALA_VER=%%i

if NOT "%SCALA_VER:~0,4%" == "%SCALA_BIN_VER%" (
echo "This bundle of Scala.js CLI is for %SCALA_BIN_VER%. Your scala version is %SCALA_VER%!" 1>&2
) else (
set PLUGIN=%~dp0\..\lib\scalajs-compiler_%SCALA_VER%-%SCALAJS_VER%.jar
set JSLIB=%~dp0\..\lib\scalajs-library_%SCALA_BIN_VER%-%SCALAJS_VER%.jar

scalac -classpath "%JSLIB%" "-Xplugin:%PLUGIN%" %*
)
10 changes: 10 additions & 0 deletions src/main/resources/scalajsld
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#! /bin/sh

SCALA_BIN_VER="@SCALA_BIN_VER@"
SCALAJS_VER="@SCALAJS_VER@"

BASE="$(dirname $0)/.."
CLILIB="$BASE/lib/scalajs-cli-assembly_$SCALA_BIN_VER-$SCALAJS_VER.jar"
JSLIB="$BASE/lib/scalajs-library_$SCALA_BIN_VER-$SCALAJS_VER.jar"

scala -classpath "$CLILIB" org.scalajs.cli.Scalajsld --stdlib "$JSLIB" "$@"
8 changes: 8 additions & 0 deletions src/main/resources/scalajsld.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
@ECHO OFF
set SCALA_BIN_VER=@SCALA_BIN_VER@
set SCALAJS_VER=@SCALAJS_VER@

set CLILIB="%~dp0\..\lib\scalajs-cli-assembly_%SCALA_BIN_VER%-%SCALAJS_VER%.jar"
set JSLIB="%~dp0\..\lib\scalajs-library_%SCALA_BIN_VER%-%SCALAJS_VER%.jar"

scala -classpath %CLILIB% org.scalajs.cli.Scalajsld --stdlib %JSLIB% %*
9 changes: 9 additions & 0 deletions src/main/resources/scalajsp
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
#! /bin/sh

SCALA_BIN_VER="@SCALA_BIN_VER@"
SCALAJS_VER="@SCALAJS_VER@"

BASE="$(dirname $0)/.."
CLILIB="$BASE/lib/scalajs-cli-assembly_$SCALA_BIN_VER-$SCALAJS_VER.jar"

scala -classpath "$CLILIB" org.scalajs.cli.Scalajsp "$@"
7 changes: 7 additions & 0 deletions src/main/resources/scalajsp.bat
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
@ECHO OFF
set SCALA_BIN_VER=@SCALA_BIN_VER@
set SCALAJS_VER=@SCALAJS_VER@

set CLILIB="%~dp0\..\lib\scalajs-cli-assembly_%SCALA_BIN_VER%-%SCALAJS_VER%.jar"

scala -classpath %CLILIB% org.scalajs.cli.Scalajsp %*
Loading