summaryrefslogtreecommitdiff
path: root/build.sc
diff options
context:
space:
mode:
authorPierre Kisters <LolHens@users.noreply.github.com>2018-03-30 02:52:52 +0200
committerRobby <robby@santoslab.org>2018-03-29 19:52:52 -0500
commit107994fec59d0b4d48540c7fbb36e781e07e82d4 (patch)
tree74ecbbdd993dca96a24102fa88dd0258d29f0993 /build.sc
parent41ca6c22894e863f5042cd8f49f5c3c6d52acc23 (diff)
downloadmill-107994fec59d0b4d48540c7fbb36e781e07e82d4.tar.gz
mill-107994fec59d0b4d48540c7fbb36e781e07e82d4.tar.bz2
mill-107994fec59d0b4d48540c7fbb36e781e07e82d4.zip
Universal script generation for assembly, launcher, and release (#264)
Diffstat (limited to 'build.sc')
-rwxr-xr-xbuild.sc126
1 files changed, 63 insertions, 63 deletions
diff --git a/build.sc b/build.sc
index e3d4f91f..60ec8ba4 100755
--- a/build.sc
+++ b/build.sc
@@ -205,35 +205,57 @@ object integration extends MillModule{
def forkArgs = testArgs()
}
-def launcherScript(isWin: Boolean,
- jvmArgs: Seq[String],
- classPath: Agg[String]) = {
+private def universalScript(shellCommands: String,
+ cmdCommands: String,
+ shebang: Boolean = false): String = {
+ Seq(
+ if (shebang) "#!/usr/bin/env sh" else "",
+ "@ 2>/dev/null # 2>nul & echo off & goto BOF\r",
+ ":",
+ shellCommands.replaceAll("\r\n|\n", "\n"),
+ "exit",
+ Seq(
+ "",
+ ":BOF",
+ "@echo off",
+ cmdCommands.replaceAll("\r\n|\n", "\r\n"),
+ "exit /B %errorlevel%",
+ ""
+ ).mkString("\r\n")
+ ).filterNot(_.isEmpty).mkString("\n")
+}
+
+def launcherScript(jvmArgs: Seq[String],
+ shellClassPath: Agg[String],
+ cmdClassPath: Agg[String]) = {
val jvmArgsStr = jvmArgs.mkString(" ")
- val classPathStr = if (isWin) classPath.mkString(";") else classPath.mkString(":")
- if (isWin)
- s"""::#!
- |@echo off
- |if "%1" == "-i" set _I_=true
- |if "%1" == "--interactive" set _I_=true
- |if defined _I_ (
- | java $jvmArgsStr %JAVA_OPTS% -cp "$classPathStr" mill.Main %*
- |) else (
- | java $jvmArgsStr %JAVA_OPTS% -cp "$classPathStr" mill.clientserver.Client %*
- |)
- |EXIT /B %errorlevel%
- """.stripMargin.split('\n').mkString("\r\n")
- else
- s"""#!/usr/bin/env sh
- |
- |case "$$1" in
- | -i | --interactive )
- | exec java $jvmArgsStr $$JAVA_OPTS -cp "$classPathStr" mill.Main "$$@"
- | ;;
- | *)
- | exec java $jvmArgsStr $$JAVA_OPTS -cp "$classPathStr" mill.clientserver.Client "$$@"
- | ;;
- |esac
- """.stripMargin
+ universalScript(
+ shellCommands = {
+ def java(mainClass: String) =
+ s"""exec java $jvmArgsStr $$JAVA_OPTS -cp "${shellClassPath.mkString(":")}" mill.Main "$$@""""
+
+ s"""case "$$1" in
+ | -i | --interactive )
+ | ${java("mill.Main")}
+ | ;;
+ | *)
+ | ${java("mill.clientserver.Client")}
+ | ;;
+ |esac""".stripMargin
+ },
+ cmdCommands = {
+ def java(mainClass: String) =
+ s"""java $jvmArgsStr %JAVA_OPTS% -cp "${cmdClassPath.mkString(";")}" $mainClass %*"""
+
+ s"""if "%1" == "-i" set _I_=true
+ |if "%1" == "--interactive" set _I_=true
+ |if defined _I_ (
+ | ${java("mill.Main")}
+ |) else (
+ | ${java("mill.clientserver.Client")}
+ |)""".stripMargin
+ }
+ )
}
object dev extends MillModule{
@@ -243,7 +265,7 @@ object dev extends MillModule{
}
def launcher = T{
val isWin = scala.util.Properties.isWin
- val outputPath = T.ctx().dest / (if (isWin) "run.bat" else "run")
+ val outputPath = T.ctx().dest / "run"
write(outputPath, prependShellScript())
@@ -258,12 +280,15 @@ object dev extends MillModule{
}
def assembly = T{
- val filename = if (scala.util.Properties.isWin) "mill.bat" else "mill"
+ val filename = "mill"
mv(super.assembly().path, T.ctx().dest / filename)
PathRef(T.ctx().dest / filename)
}
- def prependShellScript = launcherScript(scala.util.Properties.isWin, forkArgs(), runClasspath().map(_.path.toString))
+ def prependShellScript = T{
+ val classpath = runClasspath().map(_.path.toString)
+ launcherScript(forkArgs(), classpath, classpath)
+ }
def run(args: String*) = T.command{
args match{
@@ -282,51 +307,29 @@ object dev extends MillModule{
}
}
-
private def releaseHelper(dest: Path,
cp: Agg[Path],
- ver: String,
- isWin: Boolean)
+ ver: String)
(implicit ctx: mill.util.Ctx.Dest): PathRef = {
- val (filename, arg) =
- if (isWin) ("mill.bat", "%~dp0%~nx0")
- else ("mill", "$0")
mv(
createAssembly(
cp,
prependShellScript = launcherScript(
- isWin,
Seq("-DMILL_VERSION=" + ver),
- Agg(arg)
+ Agg("$0"),
+ Agg("%~dpnx0")
)
).path,
- dest / filename
+ dest / "mill"
)
- PathRef(dest / filename)
+ PathRef(dest / "mill")
}
def release = T{
releaseHelper(
T.ctx().dest,
dev.runClasspath().map(_.path),
- publishVersion()._2,
- false)
-}
-
-def releaseBatch = T{
- releaseHelper(
- T.ctx().dest,
- dev.runClasspath().map(_.path),
- publishVersion()._2,
- true)
-}
-
-def releaseAll = T{
- val dest = T.ctx().dest
- val cp = dev.runClasspath().map(_.path)
- val ver = publishVersion()._2
- for (isWin <- Seq(false, true))
- yield (isWin, releaseHelper(dest, cp, ver, isWin))
+ publishVersion()._2)
}
val isMasterCommit = {
@@ -377,8 +380,5 @@ def uploadToGithub(authKey: String) = T.command{
.asString
}
- for ((isWin, pr) <- releaseAll())
- upload.apply(pr.path, releaseTag,
- if (isWin) s"mill-$label.bat" // so browser downloads it as mill-<version>.bat (?)
- else label, authKey)
+ upload.apply(release().path, releaseTag, label, authKey)
}