#!/bin/sh # Defaults PREFIX="/usr/local" SYSCONFDIR="$PREFIX/etc/luarocks" ROCKS_TREE="$PREFIX" # ---------------------------------------------------------------------------- # FUNCTION DEFINITIONS # ---------------------------------------------------------------------------- # Utility functions # ----------------- # Resolves a full path # - alternative to "readlink -f", which is not available on solaris # based on https://stackoverflow.com/a/6554854/1793220 canonicalpath() { oldpwd="$PWD" if [ -d "$1" ] then if cd "$1" >/dev/null 2>&1 then echo "$PWD" else echo "$1" fi else if cd "$(dirname "$1")" >/dev/null 2>&1 then echo "$PWD/$(basename "$1")" else echo "$1" fi fi cd "$oldpwd" >/dev/null 2>&1 || return } find_program() { prog=$(command -v "$1" 2>/dev/null) if [ -n "$prog" ] then dirname "$prog" fi } die() { echo "$*" echo RED "configure failed." echo echo exit 1 } echo_n() { printf "%s" "$*" } bold='\033[1m' red='\033[1;31m' green='\033[1;32m' blue='\033[1;36m' reset='\033[0m' BOLD() { printf "$bold%s$reset" "$*" } RED() { printf "$red%s$reset" "$*" } GREEN() { printf "$green%s$reset" "$*" } BLUE() { printf "$blue%s$reset" "$*" } # Help # ---- show_help() { cat < /dev/null) if [ "$detected_lua" != "nil" ] then if [ "$LUA_VERSION_SET" != "yes" ] then echo "Lua version detected: $(GREEN "$detected_lua")" LUA_VERSION=$detected_lua return 0 elif [ "$LUA_VERSION" = "$detected_lua" ] then return 0 fi fi return 1 } search_interpreter() { suffix="$1" lua_at="" if [ "$LUA_BINDIR_SET" = "yes" ] then lua_at="$LUA_BINDIR" elif [ "$LUA_DIR_SET" = "yes" ] then LUA_BINDIR="$LUA_DIR/bin" if [ -f "$LUA_BINDIR/lua$suffix" ] then lua_at="$LUA_BINDIR" fi else lua_at=$(find_program "lua$suffix") fi if [ -n "$lua_at" ] && [ -x "$lua_at/lua$suffix" ] then if detect_lua_version "$lua_at/lua$suffix" then echo "Lua interpreter found: $(GREEN "$lua_at/lua$suffix")" if [ "$LUA_BINDIR_SET" != "yes" ] then LUA_BINDIR="$lua_at" fi if [ "$LUA_DIR_SET" != "yes" ] then LUA_DIR=$(dirname "$lua_at") fi LUA_INTERPRETER="lua$suffix" return 0 fi fi return 1 } # ---------------------------------------------------------------------------- # MAIN PROGRAM # ---------------------------------------------------------------------------- # Parse options while [ -n "$1" ] do value="$(echo "$1" | sed 's/[^=]*.\(.*\)/\1/')" key="$(echo "$1" | sed 's/=.*//')" if echo "$value" | grep "~" >/dev/null 2>/dev/null then echo echo "$(RED WARNING:) the '~' sign is not expanded in flags." echo "If you mean the home directory, use \$HOME instead." echo fi case "$key" in # Help # ---- --help) show_help exit 0 ;; # Where to install LuaRocks: # -------------------------- --prefix) [ -n "$value" ] || die "Missing value in flag $key." PREFIX="$(canonicalpath "$value")" PREFIX_SET=yes ;; --sysconfdir) [ -n "$value" ] || die "Missing value in flag $key." SYSCONFDIR="$(canonicalpath "$value")" SYSCONFDIR_SET=yes ;; # Where to install files provided by rocks: # ----------------------------------------- --rocks-tree) [ -n "$value" ] || die "Missing value in flag $key." ROCKS_TREE="$(canonicalpath "$value")" ROCKS_TREE_SET=yes ;; # Where is your Lua interpreter: # ------------------------------ --lua-version|--with-lua-version) [ -n "$value" ] || die "Missing value in flag $key." LUA_VERSION="$value" case "$LUA_VERSION" in 5.1|5.2|5.3|5.4) ;; *) die "Invalid Lua version in flag $key." esac LUA_VERSION_SET=yes ;; --with-lua) [ -n "$value" ] || die "Missing value in flag $key." LUA_DIR="$(canonicalpath "$value")" [ -d "$LUA_DIR" ] || die "Bad value for --with-lua: $LUA_DIR is not a valid directory." LUA_DIR_SET=yes ;; --with-lua-bin) [ -n "$value" ] || die "Missing value in flag $key." LUA_BINDIR="$(canonicalpath "$value")" [ -d "$LUA_BINDIR" ] || die "Bad value for --with-lua-bin: $LUA_BINDIR is not a valid directory." LUA_BINDIR_SET=yes ;; --with-lua-include) [ -n "$value" ] || die "Missing value in flag $key." LUA_INCDIR="$(canonicalpath "$value")" [ -d "$LUA_INCDIR" ] || die "Bad value for --with-lua-include: $LUA_INCDIR is not a valid directory." ;; --with-lua-lib) [ -n "$value" ] || die "Missing value in flag $key." LUA_LIBDIR="$(canonicalpath "$value")" [ -d "$LUA_LIBDIR" ] || die "Bad value for --with-lua-lib: $LUA_LIBDIR is not a valid directory." ;; # For specialized uses of LuaRocks: # --------------------------------- --force-config) FORCE_CONFIG=yes ;; # Old options that no longer apply # -------------------------------- --versioned-rocks-dir) echo "--versioned-rocks-dir is no longer necessary." echo "The rocks tree in LuaRocks 3.0 is always versioned." ;; --lua-suffix) echo "--lua-suffix is no longer necessary." echo "The suffix is automatically detected." ;; *) die "Error: Unknown flag: $1" ;; esac shift done echo BLUE "Configuring LuaRocks..." echo echo # ---------------------------------------- # Derive options from the ones given # ---------------------------------------- if [ "$PREFIX_SET" = "yes" ] && [ ! "$SYSCONFDIR_SET" = "yes" ] then if [ "$PREFIX" = "/usr" ] then SYSCONFDIR=/etc/luarocks else SYSCONFDIR=$PREFIX/etc/luarocks fi fi if [ "$PREFIX_SET" = "yes" ] && [ ! "$ROCKS_TREE_SET" = "yes" ] then ROCKS_TREE=$PREFIX fi # ---------------------------------------- # Search for Lua # ---------------------------------------- lua_interp_found=no case "$LUA_VERSION" in 5.1) suffixes="5.1 51 -5.1 -51 jit" ;; 5.2) suffixes="5.2 52 -5.2 -52" ;; 5.3) suffixes="5.3 53 -5.3 -53" ;; 5.4) suffixes="5.4 54 -5.4 -54" ;; *) suffixes="5.4 54 -5.4 -54 5.3 53 -5.3 -53 5.2 52 -5.2 -52 5.1 51 -5.1 -51 jit" ;; esac for suffix in $suffixes "" do search_interpreter "$suffix" && { lua_interp_found=yes break } done if [ "$lua_interp_found" != "yes" ] then if [ "$LUA_VERSION_SET" ] then interp="Lua $LUA_VERSION" else interp="Lua" fi if [ "$LUA_DIR_SET" ] || [ "$LUA_BINDIR_SET" ] then where="$LUA_BINDIR" else where="\$PATH" fi echo "$(RED $interp interpreter not found) in $where" echo "You may want to use the flags $(BOLD --with-lua), $(BOLD --with-lua-bin) and/or $(BOLD --lua-version)" die "Run $(BOLD ./configure --help) for details." fi if [ "$LUA_VERSION_SET" = "yes" ] then echo_n "Checking if $LUA_BINDIR/$LUA_INTERPRETER is Lua version $LUA_VERSION... " if detect_lua_version "$LUA_BINDIR/$LUA_INTERPRETER" then echo "yes" else echo "no" die "You may want to use the flags --with-lua, --with-lua-bin and/or --lua-version. See --help." fi fi unzip_found=$(find_program "unzip") if [ -n "$unzip_found" ] then echo "unzip found in PATH: $(GREEN "$unzip_found")" else RED "Could not find 'unzip'." die "Make sure it is installed and available in your PATH." fi # Write config make clean > /dev/null 2> /dev/null rm -f built cat < config.unix # This file was automatically generated by the configure script. # Run "./configure --help" for details. PREFIX=$PREFIX SYSCONFDIR=$SYSCONFDIR ROCKS_TREE=$ROCKS_TREE LUA_VERSION=$LUA_VERSION LUA_INTERPRETER=$LUA_INTERPRETER LUA_DIR=$LUA_DIR LUA_BINDIR=$LUA_BINDIR LUA_INCDIR=$LUA_INCDIR LUA_LIBDIR=$LUA_LIBDIR FORCE_CONFIG=$FORCE_CONFIG EOF { echo '-- LuaRocks configuration' echo echo 'rocks_trees = {' echo ' { name = "user", root = home .. "/.luarocks" },' echo ' { name = "system", root = "'"$ROCKS_TREE"'" },' echo '}' if [ -n "$LUA_INTERPRETER" ]; then echo 'lua_interpreter = "'"$LUA_INTERPRETER"'"' ; fi if [ -n "$LUA_DIR" ]; then echo 'variables.LUA_DIR = "'"$LUA_DIR"'"' ; fi if [ -n "$LUA_INCDIR" ]; then echo 'variables.LUA_INCDIR = "'"$LUA_INCDIR"'"' ; fi if [ -n "$LUA_BINDIR" ]; then echo 'variables.LUA_BINDIR = "'"$LUA_BINDIR"'"' ; fi if [ -n "$LUA_LIBDIR" ]; then echo 'variables.LUA_LIBDIR = "'"$LUA_LIBDIR"'"' ; fi } > "config-$LUA_VERSION.lua.in" echo BLUE "Done configuring." echo echo echo "LuaRocks will be installed at......: $(GREEN "$PREFIX")" echo "LuaRocks will install rocks at.....: $(GREEN "$ROCKS_TREE")" echo "LuaRocks configuration directory...: $(GREEN "$SYSCONFDIR")" echo "Using Lua from.....................: $(GREEN "$LUA_DIR")" echo echo "* Type $(BOLD make build) and $(BOLD make install):" echo " to install to $PREFIX as usual." echo "* Type $(BOLD make bootstrap):" echo " to install LuaRocks into $ROCKS_TREE as a rock." echo