1#!/usr/bin/env bash
2
3# A script for setting up environment for travis-ci testing.
4# Sets up Lua and Luarocks.
5# LUA must be "lua5.1", "lua5.2" or "luajit".
6# luajit2.0 - master v2.0
7# luajit2.1 - master v2.1
8
9set -eufxo pipefail
10
11LUAJIT_VERSION="2.0.4"
12LUAJIT_BASE="LuaJIT-$LUAJIT_VERSION"
13
14source .ci/platform.sh
15
16LUA_HOME_DIR=$TRAVIS_BUILD_DIR/install/lua
17
18LR_HOME_DIR=$TRAVIS_BUILD_DIR/install/luarocks
19
20mkdir "$HOME/.lua"
21
22LUAJIT="no"
23
24if [ "$PLATFORM" == "macosx" ]; then
25  if [ "$LUA" == "luajit" ]; then
26    LUAJIT="yes";
27  fi
28  if [ "$LUA" == "luajit2.0" ]; then
29    LUAJIT="yes";
30  fi
31  if [ "$LUA" == "luajit2.1" ]; then
32    LUAJIT="yes";
33  fi;
34elif [ "$(expr substr $LUA 1 6)" == "luajit" ]; then
35  LUAJIT="yes";
36fi
37
38mkdir -p "$LUA_HOME_DIR"
39
40if [ "$LUAJIT" == "yes" ]; then
41
42  if [ "$LUA" == "luajit" ]; then
43    curl --silent --location https://github.com/LuaJIT/LuaJIT/archive/v$LUAJIT_VERSION.tar.gz | tar xz;
44  else
45    git clone -q https://github.com/LuaJIT/LuaJIT.git $LUAJIT_BASE;
46  fi
47
48  cd $LUAJIT_BASE
49
50  if [ "$LUA" == "luajit2.1" ]; then
51    git checkout v2.1;
52    # force the INSTALL_TNAME to be luajit
53    perl -i -pe 's/INSTALL_TNAME=.+/INSTALL_TNAME= luajit/' Makefile
54  fi
55
56  make && make install PREFIX="$LUA_HOME_DIR"
57
58  ln -s "$LUA_HOME_DIR/bin/luajit" "$HOME/.lua/luajit"
59  ln -s "$LUA_HOME_DIR/bin/luajit" "$HOME/.lua/lua"
60
61else
62
63  if [ "$LUA" == "lua5.1" ]; then
64    curl --silent https://www.lua.org/ftp/lua-5.1.5.tar.gz | tar xz
65    cd lua-5.1.5;
66  elif [ "$LUA" == "lua5.2" ]; then
67    curl --silent https://www.lua.org/ftp/lua-5.2.4.tar.gz | tar xz
68    cd lua-5.2.4;
69  elif [ "$LUA" == "lua5.3" ]; then
70    curl --silent https://www.lua.org/ftp/lua-5.3.2.tar.gz | tar xz
71    cd lua-5.3.2;
72  elif [ "$LUA" == "lua5.4" ]; then
73    curl --silent https://www.lua.org/ftp/lua-5.4.1.tar.gz | tar xz
74    cd lua-5.4.1;
75  fi
76
77  # Build Lua without backwards compatibility for testing
78  perl -i -pe 's/-DLUA_COMPAT_(ALL|5_2|5_3)//' src/Makefile
79  make "$PLATFORM"
80  make INSTALL_TOP="$LUA_HOME_DIR" install;
81
82  ln -s "$LUA_HOME_DIR/bin/lua" "$HOME/.lua/lua"
83  ln -s "$LUA_HOME_DIR/bin/luac" "$HOME/.lua/luac"
84
85fi
86
87cd "$TRAVIS_BUILD_DIR"
88
89lua -v
90
91LUAROCKS_BASE=luarocks-$LUAROCKS
92
93# retry 5 times, connection to luarocks.org seems to timeout occassionally
94curl --silent --location --retry 5 "https://luarocks.org/releases/$LUAROCKS_BASE.tar.gz" | tar xz
95
96cd "$LUAROCKS_BASE"
97
98configure_args=("--prefix=$LR_HOME_DIR" "--with-lua=$LUA_HOME_DIR")
99
100if [ "${LUA#luajit}" != "$LUA" ]; then
101  # LuaJIT
102  if [ "${LUAROCKS#2.}" != "${LUAROCKS}" ]; then
103    configure_args+=('--lua-suffix=jit')
104    if [ "$LUA" = luajit ]; then
105      luajit_ver=2.0
106    else
107      luajit_ver=${LUA#luajit}
108    fi
109    configure_args+=("--with-lua-include=$LUA_HOME_DIR/include/luajit-${luajit_ver}")
110  else
111    configure_args+=('--with-lua-interpreter=luajit')
112  fi
113fi
114
115./configure "${configure_args[@]}"
116
117make build && make install
118
119ln -s "$LR_HOME_DIR/bin/luarocks" "$HOME/.lua/luarocks"
120
121cd "$TRAVIS_BUILD_DIR"
122
123luarocks --version
124
125rm -rf "$LUAROCKS_BASE"
126
127if [ "$LUAJIT" == "yes" ]; then
128  rm -rf $LUAJIT_BASE;
129elif [ "$LUA" == "lua5.1" ]; then
130  rm -rf lua-5.1.5;
131elif [ "$LUA" == "lua5.2" ]; then
132  rm -rf lua-5.2.4;
133elif [ "$LUA" == "lua5.3" ]; then
134  rm -rf lua-5.3.2;
135elif [ "$LUA" == "lua5.4" ]; then
136  rm -rf lua-5.4.1;
137fi
138