From 1d983e9f934bf6aeb9333c763fe1a603b8d8e5c4 Mon Sep 17 00:00:00 2001 From: Patrick Spek Date: Sun, 22 Mar 2020 11:48:23 +0100 Subject: Initial commit --- lib/actions/install.bash | 127 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 lib/actions/install.bash (limited to 'lib/actions/install.bash') diff --git a/lib/actions/install.bash b/lib/actions/install.bash new file mode 100644 index 0000000..30b88dd --- /dev/null +++ b/lib/actions/install.bash @@ -0,0 +1,127 @@ +#!/usr/bin/bash + +RSTAR_DEPS_BIN+=( + awk + gcc + make + perl +) + +RSTAR_DEPS_PERL+=( + ExtUtils::Command + Pod::Usage +) + +action() { + local OPTIND + + while getopts ":b:p:" opt + do + case "$opt" in + b) RSTAR_BACKEND=$OPTARG ;; + p) RSTAR_PREFIX=$OPTARG ;; + esac + done + + shift $(( OPTIND -1 )) + # TODO: Check if binaries are available + + mkdir -p -- "$RSTAR_PREFIX" + local prefix_absolute="$(CDPATH="" cd -- "$RSTAR_PREFIX" && pwd -P)" + + info "Installing Raku in $prefix_absolute" + + # Compile all core components + for component in moarvm nqp rakudo + do + VERSION="$(config_etc_kv "dist_$component.txt" "version")" \ + build_"$component" \ + --prefix="$RSTAR_PREFIX" \ + --relocatable \ + && continue + + die "Build failed!" + done + + # Install community modules + failed_modules=() + + for module in $(awk '/^[^#]/ {print $1}' "$BASEDIR/etc/modules.txt") + do + info "Installing $module" + + install_raku_module "$BASEDIR/dist/src/modules/$module" \ + && continue + + failed_modules+=("$module") + done + + # Show a list of all modules that failed to install + if [[ $failed_modules ]] + then + crit "The following modules failed to install:" + + for module in "${failed_modules[@]}" + do + crit " $module" + done + fi + + # Friendly message + info "Rakudo Star has been installed into $prefix_absolute!" + info "You may need to add the following paths to your \$PATH:" + info " $prefix_absolute/bin" + info " $prefix_absolute/share/perl6/site/bin" + info " $prefix_absolute/share/perl6/vendor/bin" + info " $prefix_absolute/share/perl6/core/bin" +} + +build_moarvm() { + info "Starting build on MoarVM" + + build_prepare "$BASEDIR/dist/src/core/moarvm-$VERSION" || return + perl Configure.pl \ + "$@" \ + && make \ + && make install \ + || return +} + +build_nqp() { + info "Starting build on NQP" + + build_prepare "$BASEDIR/dist/src/core/nqp-$VERSION" || return + perl Configure.pl \ + --backend="$RSTAR_BACKEND" \ + "$@" \ + && make \ + && make install \ + || return +} + +build_rakudo() { + info "Starting build on Rakudo" + + build_prepare "$BASEDIR/dist/src/core/rakudo-$VERSION" || return + perl Configure.pl \ + --backend="$RSTAR_BACKEND" \ + "$@" \ + && make \ + && make install \ + || return +} + +build_prepare() { + local source="$1" + local destination="$(tempdir)" + + notice "Using $destination as working directory" + + cp -R -- "$source/." "$destination" \ + && cd -- "$destination" \ + || return +} + +install_raku_module() { + "$RSTAR_PREFIX/bin/raku" "$BASEDIR/lib/install-module.raku" "$1" +} -- cgit v1.1