From 55e0dfdc65440cb02627ccbb290a9afba211a9dc Mon Sep 17 00:00:00 2001 From: Josh Suereth Date: Tue, 17 Jul 2012 16:37:19 -0400 Subject: [PATCH] Removed bad practices from sbt bash script. * No set XYZ arguments allowed. BAAD sbt practice. * No longer swaps launcher. New SBT launchers can handle old SBT. * SBT script now uses sbt-launch-lib.bash. --- project/build.scala | 2 +- project/packaging.scala | 38 +- src/debian/changelog | 6 + src/linux/sbt | 409 ------------------ src/linux/sbt-launch-lib.bash | 196 --------- src/scripts/sbt | 81 ++++ .../bin => scripts}/sbt-launch-lib.bash | 87 ++-- src/universal/bin/sbt | 401 ----------------- 8 files changed, 147 insertions(+), 1073 deletions(-) delete mode 100755 src/linux/sbt delete mode 100644 src/linux/sbt-launch-lib.bash create mode 100755 src/scripts/sbt rename src/{universal/bin => scripts}/sbt-launch-lib.bash (68%) mode change 100755 => 100644 delete mode 100755 src/universal/bin/sbt diff --git a/project/build.scala b/project/build.scala index 55117fac2..b3e4ba4ab 100644 --- a/project/build.scala +++ b/project/build.scala @@ -3,7 +3,7 @@ import Keys._ object SbtExtras extends Build { // This build creates a SBT plugin with handy features *and* bundles the SBT script for distribution. - val root = Project("sbt-extras", file(".")) settings(Packaging.settings:_*) + val root = Project("sbt-packaging", file(".")) settings(Packaging.settings:_*) val meta = Project("metapackage", file("metapackage")) settings(MetaPackaging.settings(root):_*) } diff --git a/project/packaging.scala b/project/packaging.scala index 2640993d0..6110155eb 100644 --- a/project/packaging.scala +++ b/project/packaging.scala @@ -14,6 +14,12 @@ object Packaging { val jansiJar = TaskKey[File]("jansi-jar", "Resolves Jansi jar") val winowsReleaseUrl = "http://typesafe.artifactoryonline.com/typesafe/windows-releases" + + val fixedScriptDir = SettingKey[File]("fixed-script-dir") + val fixedLinuxScriptDir = SettingKey[File]("fixed-linux-script-dir") + val fixedUniversalScriptDir = SettingKey[File]("fixed-universal-script-dir") + val linuxFixedScripts = TaskKey[File]("linux-fixed-scripts") + val universalFixedScripts = TaskKey[File]("universal-fixed-scripts") def localWindowsPattern = "[organisation]/[module]/[revision]/[module].[ext]" @@ -23,7 +29,26 @@ object Packaging { case _ => "http://repo.typesafe.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/"+v+"/sbt-launch.jar" } + def fixScripts(launchJar: String, bashLib: String)(scriptDir: File, target: File): File = { + if(!target.exists) target.mkdirs() + for(file <- (scriptDir.*** --- scriptDir).get) { + val tfile = target / file.getName + // TODO - Speedier version + val lines = + for { + line <- IO.readLines(file).view + } yield line.replaceAll("@@BASH-LIB-LOCATION@@", bashLib).replaceAll("@@LAUNCH-JAR-LOCATION@@", launchJar) + IO.writeLines(tfile, lines) + } + target + } + val settings: Seq[Setting[_]] = packagerSettings ++ Seq( + fixedScriptDir <<= sourceDirectory / "scripts", + fixedLinuxScriptDir <<= target / "linux-scripts", + fixedUniversalScriptDir <<= target / "universal-scripts", + linuxFixedScripts <<= (fixedScriptDir, fixedLinuxScriptDir) map fixScripts("/usr/lib/sbt/sbt-launch.jar", "/usr/share/sbt/sbt-launch-lib.bash"), + universalFixedScripts <<= (fixedScriptDir, fixedUniversalScriptDir) map fixScripts("\\$(dirname \\$0)/sbt-launch.jar", "\\$(dirname \\$0)/sbt-launch-lib.bash"), sbtLaunchJarUrl <<= sbtVersion apply downloadUrlForVersion, sbtLaunchJarLocation <<= target apply (_ / "sbt-launch.jar"), sbtLaunchJar <<= (sbtLaunchJarUrl, sbtLaunchJarLocation) map { (uri, file) => @@ -57,7 +82,7 @@ object Packaging { packageSummary := "Simple Build Tool for Scala-driven builds", packageDescription := """This script provides a native way to run the Simple Build Tool, a build tool for Scala software, also called SBT.""", - linuxPackageMappings <+= (sourceDirectory in Linux) map { bd => + linuxPackageMappings <+= (linuxFixedScripts) map { bd => (packageMapping((bd / "sbt") -> "/usr/bin/sbt", bd -> "/usr/share/sbt", (bd / "sbt-launch-lib.bash") -> "/usr/share/sbt/sbt-launch-lib.bash") @@ -90,8 +115,7 @@ object Packaging { }, linuxPackageMappings <+= (sbtLaunchJar, sourceDirectory in Linux, sbtVersion) map { (jar, dir, v) => packageMapping(dir -> "/usr/lib/sbt", - dir -> ("/usr/lib/sbt/" + v), - jar -> ("/usr/lib/sbt/"+v+"/sbt-launch.jar")) withPerms "0755" + jar -> ("/usr/lib/sbt/sbt-launch.jar")) withPerms "0755" }, // DEBIAN SPECIFIC name in Debian <<= (sbtVersion) apply { (sv) => "sbt-" + (sv split "[^\\d]" take 3 mkString ".") }, @@ -138,8 +162,14 @@ object Packaging { // Universal ZIP download install. TODO - Share the above windows code, here.... name in Universal := "sbt", - mappings in Universal <+= sbtLaunchJar map { f => f -> "bin/sbt-launch.jar" }, + mappings in Universal <+= sbtLaunchJar map { _ -> "bin/sbt-launch.jar" }, mappings in Universal <+= jansiJar map { f => f -> "bin/jansi.jar" }, + mappings in Universal <++= universalFixedScripts map { d => + Seq( + (d / "sbt") -> "bin/sbt", + (d / "sbt-launch-lib.bash") -> "bin/sbt-launch-lib.bash" + ) + }, mappings in Universal <++= sourceDirectory in Windows map { d => Seq( (d / "sbt.bat") -> "bin/sbt.bat", (d / "sbt") -> "bin/win-sbt", diff --git a/src/debian/changelog b/src/debian/changelog index bc29d5d2b..ec30582fa 100644 --- a/src/debian/changelog +++ b/src/debian/changelog @@ -1,4 +1,10 @@ +sbt (0.12.0-build-0100) + + * No need for different launcher jar files now + + -- Joshua Suereth 2012-07-2012 + sbt (0.11.2-build-0100) * First debian package release diff --git a/src/linux/sbt b/src/linux/sbt deleted file mode 100755 index 3aaadec93..000000000 --- a/src/linux/sbt +++ /dev/null @@ -1,409 +0,0 @@ -#!/usr/bin/env bash -# -# A more capable sbt runner, coincidentally also called sbt. -# Author: Paul Phillips - -# this seems to cover the bases on OSX, and someone will -# have to tell me about the others. -get_script_path () { - local path="$1" - [[ -L "$path" ]] || { echo "$path" ; return; } - - local target=$(readlink "$path") - if [[ "${target:0:1}" == "/" ]]; then - echo "$target" - else - echo "$path/$target" - fi -} - -# a ham-fisted attempt to move some memory settings in concert -# so they need not be dicked around with individually. -get_mem_opts () { - local mem=${1:-1536} - local perm=$(( $mem / 4 )) - (( $perm > 256 )) || perm=256 - (( $perm < 1024 )) || perm=1024 - local codecache=$(( $perm / 2 )) - - echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m" -} - -is_owned_by_user () { - [[ "$(stat --printf='%U' $1)" == "$(USER)" ]] && { echo "OK" ; return; } -} - -die() { - echo "Aborting: $@" - exit 1 -} - -# todo - make this dynamic -declare -r sbt_release_version=0.11.3 -unset sbt_rc_version -# declare -r sbt_rc_version= -declare -r sbt_snapshot_version=0.11.4-SNAPSHOT -declare -r sbt_snapshot_baseurl="http://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/org.scala-sbt/sbt-launch/" - -declare -r default_java_opts="-Dfile.encoding=UTF8" -declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled" -declare -r default_sbt_mem=1536 -declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" -declare -r sbt_opts_file=".sbtopts" -declare -r etc_sbt_opts_file="/etc/sbt/sbtopts" -declare -r latest_28="2.8.2" -declare -r latest_29="2.9.1" -declare -r latest_210="2.10.0-SNAPSHOT" - -declare -r script_path=$(get_script_path "$BASH_SOURCE") -if test -z "$HOME"; then - declare -r script_dir="$(dirname $script_path)" -else - declare -r script_dir="$HOME/.sbt" -fi -declare -r script_name="$(basename $script_path)" - -declare java_cmd=java -declare sbt_mem=$default_sbt_mem -declare java_opts="${JAVA_OPTS:-$default_java_opts}" - -unset sbt_jar sbt_create sbt_version sbt_snapshot -unset scala_version -unset java_home -unset verbose debug - -# pull -J and -D options to give to java. -declare -a residual_args -declare -a java_args -declare -a scalac_args -declare -a sbt_commands - -build_props_sbt () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^sbt.version project/build.properties) - versionString=${versionLine##sbt.version=} - echo "$versionString" - fi -} -build_props_scala () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^build.scala.versions project/build.properties) - versionString=${versionLine##build.scala.versions=} - echo ${versionString%% .*} - fi -} - -isSnapshot () { - [[ "$sbt_version" = *-SNAPSHOT* ]] -} -isRC () { - [[ "$sbt_version" = *-RC* ]] -} - -execRunner () { - # print the arguments one to a line, quoting any containing spaces - [[ $verbose || $debug ]] && echo "# Executing command line:" && { - for arg; do - if printf "%s\n" "$arg" | grep -q ' '; then - printf "\"%s\"\n" "$arg" - else - printf "%s\n" "$arg" - fi - done - echo "" - } - - exec "$@" -} - -echoerr () { - echo 1>&2 "$@" -} -vlog () { - [[ $verbose || $debug ]] && echoerr "$@" -} -dlog () { - [[ $debug ]] && echoerr "$@" -} - -sbtjar_07_url () { - echo "http://simple-build-tool.googlecode.com/files/sbt-launch-${1}.jar" -} -sbtjar_release_url () { - echo "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/$sbt_version/sbt-launch.jar" -} -sbtjar_snapshot_url () { - local ver="$sbt_version" - if [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -SNAPSHOT) - echoerr "sbt snapshot is $ver" - elif [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -RC) - echoerr "sbt rc is $ver" - fi - - echo "${sbt_snapshot_baseurl}${ver}/sbt-launch.jar" -} -jar_url () { - case $sbt_version in - 0.7.4*) sbtjar_07_url 0.7.4 ;; - 0.7.5*) sbtjar_07_url 0.7.5 ;; - 0.7.7*) sbtjar_07_url 0.7.7 ;; - 0.7.*) sbtjar_07_url 0.7.7 ;; - *-SNAPSHOT*) sbtjar_snapshot_url ;; - *-RC*) sbtjar_snapshot_url ;; - *) sbtjar_release_url ;; - esac -} - -jar_file () { - if [[ -f "/usr/lib/sbt/$1/sbt-launch.jar" ]]; then - echo "/usr/lib/sbt/$1/sbt-launch.jar" - else - echo "$script_dir/.lib/$1/sbt-launch.jar" - fi -} - -sbt_artifactory_list () { - local type="$1" # -RC or -SNAPSHOT - local version=${sbt_version%-SNAPSHOT} - - curl -s --list-only "$sbt_snapshot_baseurl" | \ - grep -F $version | \ - perl -e 'print reverse <>' | \ - perl -pe 's#^/dev/null - dlog "curl returned: $?" - echo "$ver" - return - done -} - -download_url () { - local url="$1" - local jar="$2" - - echo "Cannot find sbt launcher $sbt_version" - echo "Please download: " - echo " From $url" - echo " To $jar" - - exit 1 -} - -acquire_sbt_jar () { - if [[ $sbt_snapshot ]]; then - sbt_version=$sbt_snapshot_version - elif [[ ! $sbt_version ]]; then - sbt_version=$sbt_release_version - fi - - sbt_url="$(jar_url)" - sbt_jar="$(jar_file $sbt_version)" - - [[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar" -} - - -usage () { - cat < path to global settings/plugins directory (default: ~/.sbt) - -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) - -ivy path to local Ivy repository (default: ~/.ivy2) - -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) - -no-share use all local caches; no sharing - -no-global uses global caches, but does not use global ~/.sbt directory. - -offline put sbt in offline mode - -jvm-debug Turn on JVM debugging, open at the given port. - -batch Disable interactive mode - - # sbt version (default: from project/build.properties if present, else latest release) - -sbt-version use the specified version of sbt - -sbt-jar use the specified jar as the sbt launcher - -sbt-rc use an RC version of sbt - -sbt-snapshot use a snapshot version of sbt - - # scala version (default: latest release) - -28 use $latest_28 - -29 use $latest_29 - -210 use $latest_210 - -scala-home use the scala build at the specified directory - -scala-version use the specified version of scala - - # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) - -java-home alternate JAVA_HOME - - # jvm options and output control - JAVA_OPTS environment variable, if unset uses "$java_opts" - SBT_OPTS environment variable, if unset uses "$default_sbt_opts" - .sbtopts if this file exists in the current directory, it is - prepended to the runner args - /etc/sbt/sbtopts if this file exists, it is prepended to the runner args - -Dkey=val pass -Dkey=val directly to the java runtime - -J-X pass option -X directly to the java runtime - (-J is stripped) - -S-X add -X to sbt's scalacOptions (-J is stripped) - -In the case of duplicated or conflicting options, the order above -shows precedence: JAVA_OPTS lowest, command line options highest. -EOM -} - -addJava () { - dlog "[addJava] arg = '$1'" - java_args=( "${java_args[@]}" "$1" ) -} -addSbt () { - dlog "[addSbt] arg = '$1'" - sbt_commands=( "${sbt_commands[@]}" "$1" ) -} -addScalac () { - dlog "[addScalac] arg = '$1'" - scalac_args=( "${scalac_args[@]}" "$1" ) -} -addResidual () { - dlog "[residual] arg = '$1'" - residual_args=( "${residual_args[@]}" "$1" ) -} -addResolver () { - addSbt "set resolvers in ThisBuild += $1" -} -unset addedSnapshotRepo -addSnapshotRepo () { - [[ -n "$addedSnapshotRepo" ]] || addResolver "ScalaToolsSnapshots" && addedSnapshotRepo=true -} -addDebugger () { - addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" -} - -process_args () -{ - require_arg () { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h|-help) usage; exit 1 ;; - -v|-verbose) verbose=1 && shift ;; - -d|-debug) debug=1 && shift ;; - # -u|-upgrade) addSbt 'set sbt.version 0.7.7' ; addSbt reload && shift ;; - - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; - -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; - -no-share) addJava "$noshare_opts" && shift ;; - -no-global) addJava "-Dsbt.global.base=project/.sbtboot" && shift ;; - -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; - -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; - -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; - -offline) addSbt "set offline := true" && shift ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; - -batch) exec 0 )) || echo "Starting $script_name: invoke with -help for other options" - -# verify this is an sbt dir or -create was given -[[ -f ./build.sbt || -d ./project || -n "$sbt_create" ]] || { - cat <&2 "$@" -} -vlog () { - [[ $verbose || $debug ]] && echoerr "$@" -} -dlog () { - [[ $debug ]] && echoerr "$@" -} - -sbtjar_release_url () { - echo "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/$sbt_version/sbt-launch.jar" -} - -sbtjar_snapshot_url () { - local ver="$sbt_version" - if [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -SNAPSHOT) - echoerr "sbt snapshot is $ver" - elif [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -RC) - echoerr "sbt rc is $ver" - fi - - echo "${sbt_snapshot_baseurl}${ver}/sbt-launch.jar" -} - -jar_url () { - case $sbt_version in - *-SNAPSHOT*) sbtjar_snapshot_url ;; - *-RC*) sbtjar_snapshot_url ;; - *) sbtjar_release_url ;; - esac -} - -jar_file () { - if [[ -f "/usr/lib/sbt/$1/sbt-launch.jar" ]]; then - echo "/usr/lib/sbt/$1/sbt-launch.jar" - else - echo "$script_dir/.lib/$1/sbt-launch.jar" - fi -} - -download_url () { - local url="$1" - local jar="$2" - - echo "Cannot find sbt launcher $sbt_version" - echo "Please download: " - echo " From $url" - echo " To $jar" - - exit 1 -} - -acquire_sbt_jar () { - local sbt_version="$1" - - sbt_url="$(jar_url)" - sbt_jar="$(jar_file $sbt_version)" - - [[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar" -} - -execRunner () { - # print the arguments one to a line, quoting any containing spaces - [[ $verbose || $debug ]] && echo "# Executing command line:" && { - for arg; do - if printf "%s\n" "$arg" | grep -q ' '; then - printf "\"%s\"\n" "$arg" - else - printf "%s\n" "$arg" - fi - done - echo "" - } - - exec "$@" -} - -addJava () { - dlog "[addJava] arg = '$1'" - java_args=( "${java_args[@]}" "$1" ) -} -addSbt () { - dlog "[addSbt] arg = '$1'" - sbt_commands=( "${sbt_commands[@]}" "$1" ) -} -addResidual () { - dlog "[residual] arg = '$1'" - residual_args=( "${residual_args[@]}" "$1" ) -} -addDebugger () { - addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" -} - -# a ham-fisted attempt to move some memory settings in concert -# so they need not be dicked around with individually. -get_mem_opts () { - local mem=${1:-1536} - local perm=$(( $mem / 4 )) - (( $perm > 256 )) || perm=256 - (( $perm < 1024 )) || perm=1024 - local codecache=$(( $perm / 2 )) - - echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m" -} - -process_args () { - require_arg () { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h|-help) usage; exit 1 ;; - -v|-verbose) verbose=1 && shift ;; - -d|-debug) debug=1 && shift ;; - # -u|-upgrade) addSbt 'set sbt.version 0.7.7' ; addSbt reload && shift ;; - - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; - -batch) exec path to global settings/plugins directory (default: ~/.sbt) + -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) + -ivy path to local Ivy repository (default: ~/.ivy2) + -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) + -no-share use all local caches; no sharing + -no-global uses global caches, but does not use global ~/.sbt directory. + -jvm-debug Turn on JVM debugging, open at the given port. + -batch Disable interactive mode + + # sbt version (default: from project/build.properties if present, else latest release) + -sbt-version use the specified version of sbt + -sbt-jar use the specified jar as the sbt launcher + -sbt-rc use an RC version of sbt + -sbt-snapshot use a snapshot version of sbt + + # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) + -java-home alternate JAVA_HOME + + # jvm options and output control + JAVA_OPTS environment variable, if unset uses "$java_opts" + SBT_OPTS environment variable, if unset uses "$default_sbt_opts" + .sbtopts if this file exists in the current directory, it is + prepended to the runner args + /etc/sbt/sbtopts if this file exists, it is prepended to the runner args + -Dkey=val pass -Dkey=val directly to the java runtime + -J-X pass option -X directly to the java runtime + (-J is stripped) + -S-X add -X to sbt's scalacOptions (-J is stripped) + +In the case of duplicated or conflicting options, the order above +shows precedence: JAVA_OPTS lowest, command line options highest. +EOM +} + + + +process_my_args () { + while [[ $# -gt 0 ]]; do + case "$1" in + -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; + -no-share) addJava "$noshare_opts" && shift ;; + -no-global) addJava "-Dsbt.global.base=project/.sbtboot" && shift ;; + -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; + -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; + -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; + -batch) exec argument" + fi +} - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } +is_function_defined() { + declare -f "$1" > /dev/null +} + +process_args () { while [[ $# -gt 0 ]]; do case "$1" in -h|-help) usage; exit 1 ;; -v|-verbose) verbose=1 && shift ;; -d|-debug) debug=1 && shift ;; - # -u|-upgrade) addSbt 'set sbt.version 0.7.7' ; addSbt reload && shift ;; -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; @@ -162,6 +119,12 @@ process_args () { *) addResidual "$1" && shift ;; esac done + + is_function_defined process_my_args && { + myargs=("${residual_args[@]}") + residual_args=() + process_my_args "${myargs[@]}" + } } run() { diff --git a/src/universal/bin/sbt b/src/universal/bin/sbt deleted file mode 100755 index fb81d154e..000000000 --- a/src/universal/bin/sbt +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/env bash -# -# A more capable sbt runner, coincidentally also called sbt. -# Author: Paul Phillips - -# this seems to cover the bases on OSX, and someone will -# have to tell me about the others. -get_script_path () { - local path="$1" - [[ -L "$path" ]] || { echo "$path" ; return; } - - local target=$(readlink "$path") - if [[ "${target:0:1}" == "/" ]]; then - echo "$target" - else - echo "$path/$target" - fi -} - -# a ham-fisted attempt to move some memory settings in concert -# so they need not be dicked around with individually. -get_mem_opts () { - local mem=${1:-1536} - local perm=$(( $mem / 4 )) - (( $perm > 256 )) || perm=256 - (( $perm < 1024 )) || perm=1024 - local codecache=$(( $perm / 2 )) - - echo "-Xms${mem}m -Xmx${mem}m -XX:MaxPermSize=${perm}m -XX:ReservedCodeCacheSize=${codecache}m" -} - -is_owned_by_user () { - [[ "$(stat --printf='%U' $1)" == "$(USER)" ]] && { echo "OK" ; return; } -} - -die() { - echo "Aborting: $@" - exit 1 -} - -# todo - make this dynamic -declare -r sbt_release_version=0.11.3 -unset sbt_rc_version -# declare -r sbt_rc_version= -declare -r sbt_snapshot_version=0.11.4-SNAPSHOT -declare -r sbt_snapshot_baseurl="http://typesafe.artifactoryonline.com/typesafe/ivy-snapshots/org.scala-tools.sbt/sbt-launch/" - -declare -r default_java_opts="-Dfile.encoding=UTF8" -declare -r default_sbt_opts="-XX:+CMSClassUnloadingEnabled" -declare -r default_sbt_mem=1536 -declare -r noshare_opts="-Dsbt.global.base=project/.sbtboot -Dsbt.boot.directory=project/.boot -Dsbt.ivy.home=project/.ivy" -declare -r sbt_opts_file=".sbtopts" -declare -r etc_sbt_opts_file="/etc/sbt/sbtopts" -declare -r latest_28="2.8.2" -declare -r latest_29="2.9.1" -declare -r latest_210="2.10.0-SNAPSHOT" - -declare -r script_path=$(get_script_path "$BASH_SOURCE") -if test -z "$HOME"; then - declare -r script_dir="$(dirname $script_path)" -else - declare -r script_dir="$HOME/.sbt" -fi -declare -r script_name="$(basename $script_path)" - -declare java_cmd=java -declare sbt_mem=$default_sbt_mem -declare java_opts="${JAVA_OPTS:-$default_java_opts}" - -unset sbt_jar sbt_create sbt_version sbt_snapshot -unset scala_version -unset java_home -unset verbose debug - -# pull -J and -D options to give to java. -declare -a residual_args -declare -a java_args -declare -a scalac_args -declare -a sbt_commands - -build_props_sbt () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^sbt.version project/build.properties) - versionString=${versionLine##sbt.version=} - echo "$versionString" - fi -} -build_props_scala () { - if [[ -f project/build.properties ]]; then - versionLine=$(grep ^build.scala.versions project/build.properties) - versionString=${versionLine##build.scala.versions=} - echo ${versionString%% .*} - fi -} - -isSnapshot () { - [[ "$sbt_version" = *-SNAPSHOT* ]] -} -isRC () { - [[ "$sbt_version" = *-RC* ]] -} - -execRunner () { - # print the arguments one to a line, quoting any containing spaces - [[ $verbose || $debug ]] && echo "# Executing command line:" && { - for arg; do - if printf "%s\n" "$arg" | grep -q ' '; then - printf "\"%s\"\n" "$arg" - else - printf "%s\n" "$arg" - fi - done - echo "" - } - - exec "$@" -} - -echoerr () { - echo 1>&2 "$@" -} -vlog () { - [[ $verbose || $debug ]] && echoerr "$@" -} -dlog () { - [[ $debug ]] && echoerr "$@" -} - -sbtjar_07_url () { - echo "http://simple-build-tool.googlecode.com/files/sbt-launch-${1}.jar" -} -sbtjar_release_url () { - echo "http://typesafe.artifactoryonline.com/typesafe/ivy-releases/org.scala-tools.sbt/sbt-launch/$sbt_version/sbt-launch.jar" -} -sbtjar_snapshot_url () { - local ver="$sbt_version" - if [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -SNAPSHOT) - echoerr "sbt snapshot is $ver" - elif [[ "$sbt_version" = *-SNAPSHOT ]]; then - ver=$(sbt_snapshot_actual_version -RC) - echoerr "sbt rc is $ver" - fi - - echo "${sbt_snapshot_baseurl}${ver}/sbt-launch.jar" -} -jar_url () { - case $sbt_version in - 0.7.4*) sbtjar_07_url 0.7.4 ;; - 0.7.5*) sbtjar_07_url 0.7.5 ;; - 0.7.7*) sbtjar_07_url 0.7.7 ;; - 0.7.*) sbtjar_07_url 0.7.7 ;; - *-SNAPSHOT*) sbtjar_snapshot_url ;; - *-RC*) sbtjar_snapshot_url ;; - *) sbtjar_release_url ;; - esac -} - -jar_file () { - # TODO - Allow alternative versions, maybe... - if [[ -f "$(dirname $0)/sbt-launch.jar" ]]; then - echo "$(dirname $0)/sbt-launch.jar" - else - echo "$script_dir/.lib/$1/sbt-launch.jar" - fi -} - -sbt_artifactory_list () { - local type="$1" # -RC or -SNAPSHOT - local version=${sbt_version%-SNAPSHOT} - - curl -s --list-only "$sbt_snapshot_baseurl" | \ - grep -F $version | \ - perl -e 'print reverse <>' | \ - perl -pe 's#^/dev/null - dlog "curl returned: $?" - echo "$ver" - return - done -} - -download_url () { - local url="$1" - local jar="$2" - - echo "Cannot find sbt launcher $sbt_version" - echo "Please download: " - echo " From $url" - echo " To $jar" - - exit 1 -} - -acquire_sbt_jar () { - if [[ $sbt_snapshot ]]; then - sbt_version=$sbt_snapshot_version - elif [[ ! $sbt_version ]]; then - sbt_version=$sbt_release_version - fi - - sbt_url="$(jar_url)" - sbt_jar="$(jar_file $sbt_version)" - - [[ -f "$sbt_jar" ]] || download_url "$sbt_url" "$sbt_jar" -} - - -usage () { - cat < path to global settings/plugins directory (default: ~/.sbt) - -sbt-boot path to shared boot directory (default: ~/.sbt/boot in 0.11 series) - -ivy path to local Ivy repository (default: ~/.ivy2) - -mem set memory options (default: $sbt_mem, which is $(get_mem_opts $sbt_mem)) - -no-share use all local caches; no sharing - -no-global uses global caches, but does not use global ~/.sbt directory. - -offline put sbt in offline mode - -jvm-debug Turn on JVM debugging, open at the given port. - -batch Disable interactive mode - - # scala version (default: latest release) - -28 use $latest_28 - -29 use $latest_29 - -210 use $latest_210 - -scala-home use the scala build at the specified directory - -scala-version use the specified version of scala - - # java version (default: java from PATH, currently $(java -version 2>&1 | grep version)) - -java-home alternate JAVA_HOME - - # jvm options and output control - JAVA_OPTS environment variable, if unset uses "$java_opts" - SBT_OPTS environment variable, if unset uses "$default_sbt_opts" - .sbtopts if this file exists in the current directory, it is - prepended to the runner args - /etc/sbt/sbtopts if this file exists, it is prepended to the runner args - -Dkey=val pass -Dkey=val directly to the java runtime - -J-X pass option -X directly to the java runtime - (-J is stripped) - -S-X add -X to sbt's scalacOptions (-J is stripped) - -In the case of duplicated or conflicting options, the order above -shows precedence: JAVA_OPTS lowest, command line options highest. -EOM -} - -addJava () { - dlog "[addJava] arg = '$1'" - java_args=( "${java_args[@]}" "$1" ) -} -addSbt () { - dlog "[addSbt] arg = '$1'" - sbt_commands=( "${sbt_commands[@]}" "$1" ) -} -addScalac () { - dlog "[addScalac] arg = '$1'" - scalac_args=( "${scalac_args[@]}" "$1" ) -} -addResidual () { - dlog "[residual] arg = '$1'" - residual_args=( "${residual_args[@]}" "$1" ) -} -addResolver () { - addSbt "set resolvers in ThisBuild += $1" -} -unset addedSnapshotRepo -addSnapshotRepo () { - [[ -n "$addedSnapshotRepo" ]] || addResolver "ScalaToolsSnapshots" && addedSnapshotRepo=true -} -addDebugger () { - addJava "-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=$1" -} - -process_args () -{ - require_arg () { - local type="$1" - local opt="$2" - local arg="$3" - - if [[ -z "$arg" ]] || [[ "${arg:0:1}" == "-" ]]; then - die "$opt requires <$type> argument" - fi - } - while [[ $# -gt 0 ]]; do - case "$1" in - -h|-help) usage; exit 1 ;; - -v|-verbose) verbose=1 && shift ;; - -d|-debug) debug=1 && shift ;; - # -u|-upgrade) addSbt 'set sbt.version 0.7.7' ; addSbt reload && shift ;; - - -ivy) require_arg path "$1" "$2" && addJava "-Dsbt.ivy.home=$2" && shift 2 ;; - -mem) require_arg integer "$1" "$2" && sbt_mem="$2" && shift 2 ;; - -no-colors) addJava "-Dsbt.log.noformat=true" && shift ;; - -no-share) addJava "$noshare_opts" && shift ;; - -no-global) addJava "-Dsbt.global.base=project/.sbtboot" && shift ;; - -sbt-boot) require_arg path "$1" "$2" && addJava "-Dsbt.boot.directory=$2" && shift 2 ;; - -sbt-dir) require_arg path "$1" "$2" && addJava "-Dsbt.global.base=$2" && shift 2 ;; - -debug-inc) addJava "-Dxsbt.inc.debug=true" && shift ;; - -offline) addSbt "set offline := true" && shift ;; - -jvm-debug) require_arg port "$1" "$2" && addDebugger $2 && shift 2 ;; - -batch) exec 0 )) || echo "Starting $script_name: invoke with -help for other options" - -# verify this is an sbt dir or -create was given -[[ -f ./build.sbt || -d ./project || -n "$sbt_create" ]] || { - cat <