blob: 30b88ddf0678fdbc2a13e138f09a9b26d8699b98 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
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"
}
|