#!/usr/bin/bash RSTAR_DEPS_BIN+=( awk gcc make perl ) RSTAR_DEPS_PERL+=( ExtUtils::Command Pod::Usage ) action() { local OPTIND local prefix_absolute local modules local init local duration while getopts ":b:p:" opt do case "$opt" in b) RSTAR_BACKEND=$OPTARG ;; p) RSTAR_PREFIX=$OPTARG ;; *) emerg "Invalid option specified: $opt" ;; esac done shift $(( OPTIND -1 )) # TODO: Check if binaries are available mkdir -p -- "$RSTAR_PREFIX" prefix_absolute="$(CDPATH="" cd -- "$RSTAR_PREFIX" && pwd -P)" info "Installing Raku in $prefix_absolute" init="$(date +%s)" # 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=() modules="$(tmpfile)" awk '/^[^#]/ {print $1}' "$BASEDIR/etc/modules.txt" > "$modules" while read -r module do info "Installing $module" install_raku_module "$BASEDIR/src/rakudo-star-modules/$module" \ && continue failed_modules+=("$module") done < "$modules" # 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 duration="$(pp_duration "$init")" # Friendly message info "Rakudo Star has been installed into $prefix_absolute!" info "The installation took $duration." info "" 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/src/moarvm-$VERSION" || return perl Configure.pl \ "$@" \ && make \ && make install \ || return } build_nqp() { info "Starting build on NQP" build_prepare "$BASEDIR/src/nqp-$VERSION" || return perl Configure.pl \ --backend="$RSTAR_BACKEND" \ "$@" \ && make \ && make install \ || return } build_rakudo() { info "Starting build on Rakudo" build_prepare "$BASEDIR/src/rakudo-$VERSION" || return perl Configure.pl \ --backend="$RSTAR_BACKEND" \ "$@" \ && make \ && make install \ || return } build_prepare() { local source="$1" local destination destination="$(tmpdir)" 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" }