diff --git a/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala b/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala index 5f971d2ec..e9d1b6544 100644 --- a/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala +++ b/cli/src/main/scala-2.12/coursier/cli/Bootstrap.scala @@ -68,18 +68,37 @@ object Bootstrap extends CaseApp[BootstrapOptions] { private def createJarBootstrapWithPreamble(javaOpts: Seq[String], output: File, content: Array[Byte]): Unit = { + val argsPartitioner = + """|sys_args="" + |app_args="" + |i=1; while [ "$i" -le $# ]; do + | eval arg=\${$i} + | case $arg in + | -J-*) + | sys_args="$sys_args ${arg#-J}" + | ;; + | *) + | app_args="$app_args $arg" + | ;; + | esac + | i=$((i + 1)) + |done + |""".stripMargin + val javaCmd = Seq("java") ++ javaOpts // escaping possibly a bit loose :-| .map(s => "'" + s.replace("'", "\\'") + "'") ++ Seq( + "$sys_args", "-jar", "\"$0\"", - "\"$@\"" + "$app_args" ) val shellPreamble = Seq( "#!/usr/bin/env sh", + argsPartitioner, "exec " + javaCmd.mkString(" ") ).mkString("", "\n", "\n") diff --git a/scripts/travis.sh b/scripts/travis.sh index 2a8ee09ce..e16006a8f 100755 --- a/scripts/travis.sh +++ b/scripts/travis.sh @@ -136,6 +136,11 @@ testBootstrap() { exit 1 fi + if [ "$(./cs-echo-launcher -J-Dother=thing foo -J-Dfoo=baz)" != foo ]; then + echo "Error: unexpected output from bootstrapped echo command (generated by proguarded launcher)." 1>&2 + exit 1 + fi + # run via the launcher rather than via the sbt-pack scripts, because the latter interprets -Dfoo=baz itself # rather than passing it to coursier since https://github.com/xerial/sbt-pack/pull/118 ./coursier-test bootstrap -o cs-props -D other=thing -J -Dfoo=baz io.get-coursier:props:1.0.2 @@ -150,6 +155,11 @@ testBootstrap() { exit 1 fi + if [ "$(./cs-props -J-Dhappy=days happy)" != days ]; then + echo "Error: unexpected output from bootstrapped props command." 1>&2 + exit 1 + fi + # assembly tests ./coursier-test bootstrap -a -o cs-props-assembly -D other=thing -J -Dfoo=baz io.get-coursier:props:1.0.2 local OUT="$(./cs-props-assembly foo)" @@ -192,6 +202,8 @@ if isScalaJs; then jsCompile runJsTests else + testBootstrap + testNativeBootstrap integrationTestsRequirements @@ -208,8 +220,6 @@ else else runJvmTests - testBootstrap - validateReadme checkBinaryCompatibility fi