Sélectionner une révision Git
validate.bash 7,33 Kio
#!/bin/bash
### GLOBAL VARIABLES #########################################################
INFORMATION_COLOR="$(printf "\\033[0;32m")"
DEFAULT_COLOR="$(printf "\\033[0;39m")"
IMPORTANT_COLOR="$(printf "\\033[1;31m")"
WARNING_COLOR="$(printf "\\033[4;33m")"
LKT_DEBUG="" # Whether or not to build in debug mode
LKT_STATIC_MODULES="" # Build modules inside liblektor.so or not
LKT_COMPILER="" # The compiler to use, the basename
LKT_STEP="" # Steps: configure, build, etc
LKT_DIR="$PWD" # The project directory
LKT_CONFIGURE_OPTIONS="" # Options to pass to the configure command
LKT_CORE_NUMBER=4 # Number of cores to use with make
LKT_TEST="" # Which tests to perform
LKT_SRC=$SRC_DIR # Where to find the sources of lektor
LKT_WORK=$WORK_DIR # The work dir, where to play
# Below: global variables that will be initialized latter
LKT_INSTALL="" # Install folder of lektor
LKT_BUILD="" # Build folder of lektor
### AVAILABLE TESTS ##########################################################
function test_simple ()
{
check_cd $LKT_INSTALL
./lektord &
local _child_pid=$!
./lkt pwd=hashire adm kil
sleep 5
kill $_child_pid
}
### Utility functions ########################################################
function die ()
{
printf "$IMPORTANT_COLOR$@$DEFAULT_COLOR\n"
exit 1
}
function check_cd ()
{
[ $# -ne 1 ] && die "Invalid number of argument '$#' for cd command"
cd $1 || die "Can't go to folder $1"
}
function check_mkdir ()
{
mkdir $* || die "Failed to mkdir '$*'"
}
function check_configure ()
{
$LKT_DIR/configure $* || die "Failed to configure with $LKT_COMPILER"
}
function check_make ()
{
make $* || die "Failed to make with compiler $LKT_COMPILER"
}
function help ()
{
cat << EOF
Usage validate.bash --build=* --step=* [option]
--help, -h Prints this help message.
--build=comp Specify the compiler.
--step=AA,BB,.. Specify the steps to do. The list may contains the
following items: configure, launch, build.
Step configure options:
--debug Perform a debug build.
--static-modules Build modules inside liblektor.so, not in their own
.so files.
Step launch options:
--test=AA,BB,.. Perform the specified tests.
EOF
}
if ! [ -f $PWD/scripts/validate.bash ] ; then
die "This script should be run from the root of the project, you are in $PWD"
fi
SQLITE3=$(which sqlite3)
[ $? -ne 0 ] && die "Can't find the sqlite3 executable"
### PREPARE ##################################################################
# Globals: #
# - LKT_COMPILER Which compiler to use #
# - LKT_WORK The base folder which will contains all the #
# builds and installs #
function do_prepare ()
{
check_mkdir -p $LKT_WORK/{build.$LKT_COMPILER,install.$LKT_COMPILER}
echo "Created folders $LKT_WORK/{build.$LKT_COMPILER,install.$LKT_COMPILER}"
}
### CONFIGURE ################################################################
# Globals: #
# - LKT_DIR Project root directory #
# - LKT_COMPILER The compiler used to build #
# - LKT_CONFIGURE_OPTIONS Options to pass to the configure command #
function do_configure ()
{
check_cd $LKT_BUILD
check_configure \
--prefix=$LKT_DIR/install.$LKT_COMPILER \
$LKT_CONFIGURE_OPTIONS
check_cd $LKT_DIR
}
### BUILD THE PROJECT ########################################################
# Globals: #
# - LKT_DIR Project root directory #
# - LKT_COMPILER The compiler used to build #
function do_build ()
{
check_cd $LKT_BUILD
check_make -j$LKT_CORE_NUMBER
check_make install
check_cd $LKT_DIR
}
### PERFORM THE STEPS ########################################################
# Globals: #
# - LKT_STEP Steps to perform #
function do_steps ()
{
local _prepare=""
local _build=""
local _configure=""
local _launch=""
for step in $LKT_STEP ; do
case "$step" in
build) _build="yes";;
configure) _configure="yes";;
launch) _launch="yes";;
prepare) _prepare="yes";;
esac
done
[ "x$_prepare" = "xyes" ] && do_prepare
[ "x$_configure" = "xyes" ] && do_configure
[ "x$_build" = "xyes" ] && do_build
[ "x$_launch" = "xyes" ] && do_launch
}
### PERFORM THE TESTS ########################################################
# Globals: #
# - LKT_TEST Which tests to perform #
# - LKT_DIR The project root directory #
function do_launch ()
{
for test in $LKT_TEST ; do
case "$test" in
simple) test_simple;;
*) die "Test not available"
esac
done
}
### PROCESS ARGS #############################################################
# Globals: #
# - LKT_DEBUG Whether or not to build in debug mode #
# - LKT_STATIC_MODULES Build lektor modules inside liblektor.so #
# - LKT_CONFIGURE_OPTIONS Options to pass to the configure command #
function process_args ()
{
if [ "x$LKT_DEBUG" = "xyes" ] ; then
LKT_CONFIGURE_OPTIONS="$LKT_CONFIGURE_OPTIONS --with-debug"
fi
if [ "x$LKT_STATIC_MODULES" = "xyes" ] ; then
LKT_CONFIGURE_OPTIONS="$LKT_CONFIGURE_OPTIONS --with-static-module"
fi
LKT_CONFIGURE_OPTIONS="$LKT_CONFIGURE_OPTIONS CC=$LKT_COMPILER"
}
### PARSE ARGS ###############################################################
for arg in $* ; do
case "$arg" in
--help|-h)
help
exit 0
;;
--debug)
LKT_DEBUG="yes"
;;
--build=*)
LKT_COMPILER=$(echo "A$arg" | sed -e 's/A--build=//g')
;;
--static-modules)
LKT_STATIC_MODULES="yes"
;;
--step=*)
LKT_STEP=$(echo "A$arg" | sed -e 's/A--step=//g' -e 's/,/ /g')
;;
--test=*)
LKT_TEST=$(echo "A$arg" | sed -e 's/A--test=//g' -e 's/,/ /g')
;;
*)
die "Unknown argument $arg"
;;
esac
done
### GLOBALS THAT NEEDS ARGUMENTS TO BE INITIALIZED ###########################
# - LKT_INSTALL Where lektor will be installed #
# - LKT_BUILD Where lektor will be configured #
LKT_INSTALL=$WORK_DIR/install.$LKT_COMPILER
LKT_BUILD=$WORK_DIR/build.$LKT_COMPILER
### DO OUR STUFF HERE ########################################################
process_args
do_steps
exit 0