summaryrefslogtreecommitdiff
path: root/bin/algorithm-install
blob: 77cb3d312f396e87e4fe7c911300a5ca2f020c65 (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
128
129
130
131
#!/bin/sh
#
# Installs Opentox Webservices.
# Author: Christoph Helma, Andreas Maunz.

SELF=$(basename $0 -install)
OT_PREFIX="$HOME/opentox-ruby"
OT_CONFIG="$HOME/.opentox"
RUBY_VER="1.9.3-p125"
RUBY_DWL="http://ftp.ruby-lang.org/pub/ruby/1.9"
RUBY_DIR="$HOME/.rbenv/versions/$RUBY_VER"
FMINER_BRANCH="development"

[ "`id -u`" = "0" ] && echo "This script must be run as non-root." 1>&2 && exit 1

# check wd is root of service
DIR=`pwd`
if echo $DIR | grep "algorithm/bin" >/dev/null 2>&1 ; then cd ..; fi

# check main directories present
([ -d $OT_PREFIX ] && [ -d $OT_CONFIG ]) || (echo "Main directories missing." 1>&2 && exit 1)
[ -d $OT_PREFIX/opentox-server ] || (echo "Warning: opentox-server missing." 1>&2)

# load main config
! [ -f $OT_CONFIG/opentox-ui.sh ] && echo "Main config file missing." 1>&2 && exit 1 || . $OT_CONFIG/opentox-ui.sh 

# check utils
utils="git rbenv curl gem make"
for u in $utils; do
  eval `echo $u | tr "[:lower:]" "[:upper:]"`=`which $u` || (echo "'$u' missing. Install '$u' first." 1>&2 && exit 1)
done

# util functions
run_cmd ()
{
  local cmd="$1"; local title="$2"
  printf "%50s" "'$title'"
  if ! eval $cmd >>$LOG 2>&1 ; then  
    printf "%30s\n" "FAIL"
    echo "Last 10 lines of log:"
    tail -10 "$LOG"
    exit 1
  fi
  printf "%30s\n" "DONE"
}
install_ruby() {
  printf "\n%50s\n" "RUBY"
  local DIR=`pwd`
  if ! $RBENV versions $RUBY_VER | grep $RUBY_VER>/dev/null 2>&1; then
    [ -d $DIR/tmp ] || mkdir -p $DIR/tmp && cd $DIR/tmp
    ([ -d $DIR/tmp/ruby-$RUBY_VER ] || $CURL $RUBY_DWL/ruby-$RUBY_VER.tar.gz 2>/dev/null | tar xz) && cd ruby-$RUBY_VER
    cmd="./configure --prefix=$RUBY_DIR" && run_cmd "$cmd" "Configure"
    cmd="make -j2" && run_cmd "$cmd" "Make"
    [ -d $RUBY_DIR ] && rm -rf $RUBY_DIR
    cmd="make install" && run_cmd "$cmd" "Install"
  fi
  cd $DIR
  cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash"
  cmd="$RBENV local $RUBY_VER" && run_cmd "$cmd" "rbenv set ruby"
}
install_ob_ruby() {
  printf "\n%50s\n" "OB RUBY BINDINGS"
  local DIR=`pwd`
  SRC_DIR=$(dirname $(find $OT_PREFIX -name openbabel-ruby.cpp))
  [ -d "$SRC_DIR" ] || (echo "Sources not found." 1>&2 && exit 1)
  cd $SRC_DIR
  sed -i 's/Init_OpenBabel/Init_openbabel/g' openbabel-ruby.cpp # apply fix
  RUBY=`which ruby`
  cmd="$RUBY extconf.rb --with-openbabel-include=../../include --with-openbabel-lib=../../src/.libs" && run_cmd "$cmd" "Extconf ruby bindings"
  cmd="$MAKE" && run_cmd "$cmd" "Make OB ruby bindings"
  cmd="$MAKE install" && run_cmd "$cmd" "Install OB ruby bindings"
  cd $DIR
  cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash"
}
install_fminer() {
  printf "\n%50s\n" "FMINER"
  local DIR=`pwd`
  eval RUBY_INC="-I`dirname $RUBY_DIR/include/ruby*/*linux/ruby`\ -I`dirname $RUBY_DIR/include/ruby*/ruby`"
  eval OPBB_INC="-I`dirname $OT_PREFIX/openbabel*/include/openbabel*/openbabel`"
  cmd="$GIT submodule init" && run_cmd "$cmd" "Fminer Init"
  cmd="$GIT submodule update" && run_cmd "$cmd" "Fminer Update"
  cd "libfminer/libbbrc">>$LOG 2>&1
  $GIT checkout $FMINER_BRANCH>>$LOG 2>&1
  $GIT pull >>$LOG 2>&1
  cd - >>$LOG 2>&1
  cd "libfminer/liblast">>$LOG 2>&1
  $GIT checkout $FMINER_BRANCH>>$LOG 2>&1
  $GIT pull >>$LOG 2>&1
  cd - >>$LOG 2>&1
  for mylib in bbrc last; do
    cmd="sed -i 's,^INCLUDE_OB.*,INCLUDE_OB\ =\ $OPBB_INC,g' `pwd`/libfminer/lib$mylib/Makefile" && run_cmd "$cmd" "Makefile $mylib (OB)"
    cmd="sed -i 's,^INCLUDE_RB.*,INCLUDE_RB\ =\ $RUBY_INC,g' `pwd`/libfminer/lib$mylib/Makefile" && run_cmd "$cmd" "Makefile $mylib (RB)"
  done
  cd "libfminer/libbbrc">>$LOG 2>&1
  cmd="make ruby" && run_cmd "$cmd" "Make BBRC"
  cd - >>$LOG 2>&1
  cd "libfminer/liblast">>$LOG 2>&1
  cmd="make ruby" && run_cmd "$cmd" "Make LAST"
  cd - >>$LOG 2>&1
  cd "last-utils">>$LOG 2>&1
  $GIT checkout $FMINER_BRANCH>>$LOG 2>&1
  $GIT pull >>$LOG 2>&1
  cd $DIR
}
install_bundler() {
  $GEM list | grep bundler >/dev/null 2>&1 || (cmd="$GEM install bundler" && run_cmd "$cmd" "Install bundler")
  cmd="$RBENV rehash" && run_cmd "$cmd" "rbenv rehash"
  BUNDLER=`which bundle`
  cmd="$BUNDLER install" && run_cmd "$cmd" "Bundle install"
}


# # # Install

LOG="$OT_PREFIX/tmp/`basename $0`.log"
echo
echo "Installation ('$LOG'):"
echo

[ -d $OT_CONFIG/log ] || cmd="mkdir -p $OT_CONFIG/log" && run_cmd "$cmd" "Main log directory"
[ -d $OT_CONFIG/config/$SELF ] || cmd="mkdir -p $OT_CONFIG/config/$SELF" && run_cmd "$cmd" "$SELF config directory"

[ "`$RBENV local 2>/dev/null`" = "$RUBY_VER" ] || install_ruby
[ -n "`find $RUBY_DIR -name openbabel.so 2>/dev/null`" ] || install_ob_ruby
( [ -n "`find libfminer/ -name bbrc.so 2>/dev/null`" ] && [ -n "`find libfminer/ -name last.so 2>/dev/null`" ] ) || install_fminer

echo
install_bundler

# return to wd
cd "$DIR"