/
rpackage
executable file
·128 lines (111 loc) · 2.64 KB
/
rpackage
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
128
#!/bin/bash
# Set up R libraries
# Example:
# setuplib.sh -R ~/devel/bin/R RUnit testthat parser
R=R
repo="https://cloud.r-project.org/"
set_toolchain() {
platform=$(uname -s)
if [ "$platform" = "Darwin" ]
then
echo "NOTE: Using GNU coreutils on Darwin"
sed=gsed
readlink=greadlink
else
sed=sed
readlink=readlink
fi
unzip=$(which unzip)
[ -z "$unzip" ] && unzip='jar xf'
}
install_package() {
pkg=$1
${R}script --vanilla \
-e "withCallingHandlers(install.packages('$pkg', repos='$repo', \
dependencies=$dependencies, INSTALL_opts=$install_opts), \
warning=function(w) stop(w))"
}
install_local() {
package=$(echo $1 | $sed -r 's/.tar$//')
url=$2
curl -LO "$url"
${R} CMD INSTALL $package.tar.gz
}
install_source() {
package=$1
url=$2
echo "PERL5LIB: $PERL5LIB"
suffix=$(echo $url | $sed -r 's|.*/.*[.]([a-zA-Z0-9]+)|\1|')
case $suffix in
zip)
curl -LO "$url"
branch=$(echo $url | $sed -r 's|.*/(.*)[.][a-zA-Z0-9]+|\1|')
$unzip $branch.zip
cd ${package}-${branch}
crant -Ci
[ -n "$cleanup" ] && cd - && rm $branch.zip
[ -n "$cleanup" ] && cd - && rm -rf ${package}-${branch};;
git)
git clone $url $package
cd $package
crant -Ci
[ -n "$cleanup" ] && cd - && rm -rf $package;;
*) echo "File of type $suffix is not supported. Sorry.";;
esac
}
install_perl() {
package=$(echo $1 | $sed -r 's/.tar$//')
url=$2
curl -LO "$url"
tar zxf $package.tar.gz
cd $package
perl Makefile.PL PREFIX=$perl_lib
make
make install
}
get_package() {
name=$(echo $1 | $sed -r 's|.*github.com/([^/]+)/([^/]+)/archive/(.*)[.][a-zA-Z0-9]+$|\2|')
[ "$name" = "$1" ] && name=$(echo $1 | $sed -r 's|.*/(.*)[.][a-zA-Z0-9]+|\1|')
echo $name
}
get_suffix() {
suffix=$(echo $1 | $sed -r 's/.*[.]([a-zA-Z0-9]+)$/\1/')
[ "$suffix" = "$1" ] && suffix=''
echo $suffix
}
set_toolchain
dependencies=NA
install_opts=NULL
cleanup=yes
while getopts "Cr:tdR:p:" opt
do
case $opt in
C) cleanup=;;
r) repo=$OPTARG;;
t) install_opts='--install-tests';;
d) dependencies=TRUE;;
R) R=$OPTARG;;
p) perl_lib=$OPTARG;;
esac
done
shift $(($OPTIND - 1))
exit_code=0
for pkg in $*
do
comment=$(echo "$pkg" | grep '^#')
[ -n "$comment" ] && continue
echo "Installing $pkg"
package=$(get_package $pkg)
suffix=$(get_suffix $pkg)
[ -n "$perl_lib" ] && suffix=perl
case $suffix in
zip) install_source $package $pkg;;
git) install_source $package $pkg;;
gz) install_local $package $pkg;;
perl) install_perl $package $pkg;;
*) install_package $pkg;;
esac
e=$?
[[ $e -ne 0 ]] && exit_code=$e
done
exit $exit_code