You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1287 lines
38 KiB
Bash

#!/usr/bin/env bash
#############################################################################
# This script is based on the very good prework from trickster. #
# It is a result of the work from the people from #e.de (irc.freenode.net). #
# It will checkout the cvs and compile e17. #
# #
# License: BSD licence #
# Get the latest version at http://omicron.homeip.net/projects/#easy_e17.sh #
# Rewrite by morlenxus (morlenxus@gmx.net) #
# #
last_changes="2007-11-27" #
version="1.1.5" #
#############################################################################
# Edit these variables if you like:
install_path="/opt/e17"
cvs_path="$HOME/e17_cvs"
tmp_path="/tmp/easy_e17"
logs_path="$tmp_path/install_logs"
cvs_srv=":pserver:anonymous@anoncvs.enlightenment.org:/var/cvs/e";
conf_file="$HOME/.easy_e17.conf"
efl="imlib2 edb eet evas ecore efreet epeg embryo edje epsilon esmart emotion engrave etk etk_extra ewl exml enhance e_dbus"
apps="e entrance eclair evfs edje_viewer edje_editor elicit elitaire emphasis empower engycad entrance_edit_gui entropy ephoto estickies exhibit expedite exquisite extrackt e_phys"
apps_misc="enthrall rage scrot"
e17_modules="alarm bling calendar cpu deskshow emu flame forecasts language mail mem mixer moon net news penguins photo rain screenshot slideshow snow taskbar tclock uptime weather winselector wlan"
autogen_args="" # evas:--enable-gl-x11
linux_distri="" # if your distribution is wrongly detected, define it here
max_backoff=360 # Actual maximum backoff time is roughly this number in seconds.
nice_level=0 # nice level (19 == low, -20 == high)
os=$(uname) # operating system
threads=2 # make -j <threads>
# URL of latest stable release
online_source="http://omicron.homeip.net/projects/easy_e17/easy_e17.sh"
#############################################################################
function logo ()
{
clear
echo -e "\033[1m-------------------------------\033[7m Easy_e17.sh $version \033[0m\033[1m------------------------------\033[0m"
echo -e "\033[1m Developers:\033[0m Brian 'morlenxus' Miculcy"
echo -e " David 'onefang' Seikel"
echo -e "\033[1m Contributors:\033[0m Tim 'wtfoo' Zebulla"
echo -e " Daniel G. '_ke' Siegel"
echo -e " Stefan 'slax' Langner"
echo -e " Massimiliano 'Massi' Calamelli"
echo -e " Thomas 'thomasg' Gstaedtner"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo -e "\033[1m Updates:\033[0m http://omicron.homeip.net/projects/#easy_e17.sh"
echo -e "\033[1m Support:\033[0m #e.de, #get-e (irc.freenode.net)"
echo -e " morlenxus@gmx.net"
echo -e "\033[1m Patches:\033[0m Generally accepted, please contact me!"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo
echo -e "\033[1m-----------------------------\033[7m Current Configuration \033[0m\033[1m----------------------------\033[0m"
echo " Install path: $install_path"
echo " CVS path: $cvs_path"
echo " CVS server: $cvs_srv"
echo " Logs path: $logs_path"
if [ "$linux_distri" ]; then
echo " OS: $os (Distribution: $linux_distri)"
else
echo " OS: $os"
fi
echo
echo " Libraries: $efl"
echo " Applications: $apps"
echo " Miscellaneous: $apps_misc"
echo " Modules: $e17_modules"
if [ "$skip" ]; then
echo " Skipping: $skip"
fi
if [ "$only" ]; then
echo " Only: $only"
fi
echo
if [ "$fullcvs" ]; then
echo " Full cvs: yes"
fi
if [ "$skip_cvsupdate" ]; then
echo " Skip cvs update: yes"
fi
if [[ clean -eq 1 ]] ; then
echo " Run clean: yes"
fi
if [[ clean -eq 2 ]] ; then
echo " Run distclean: yes"
fi
if [[ clean -ge 3 ]] ; then
echo " Run uninstall: yes"
fi
if [ "$skip_errors" ]; then
echo " Skip errors: yes"
fi
if [ "$gen_docs" ]; then
echo " Generate docs: yes"
fi
if [ "$easy_e17_post_script" ]; then
echo " Post install: $easy_e17_post_script"
fi
if [ "$autogen_args" ]; then
echo " Autogen args: $autogen_args"
fi
if [ "$wait" ]; then
echo " Wait on exit: yes"
fi
if [ "$keep" ]; then
echo " Keep tempdir: yes"
fi
if [ "$accache" ]; then
echo " Use caches: yes"
fi
if [ "$threads" -ne 2 ]; then
echo " Threads: $threads"
fi
if [ "$nice_level" -ne 0 ]; then
echo " Nice level: $nice_level"
fi
if [ -z "$action" ]; then
action="MISSING!"
fi
echo " Script action: $action"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
if [ "$action" == "script" ]; then
return
fi
if [ $1 == 0 ]; then
if [ "$2" ]; then
echo -e "\033[1m-------------------------------\033[7m Bad script argument \033[0m\033[1m----------------------------\033[0m"
echo -e " \033[1m$2\033[0m"
fi
else
echo -e "\033[1m--------------------------------\033[7m Build phase $1/3 \033[0m\033[1m-------------------------------\033[0m"
fi
if [ -z "$2" ]; then
case $1 in
0)
if [ "$os" == "not supported" ]; then
echo -e "\033[1m-------------------------------\033[7m Not supported OS \033[0m\033[1m------------------------------\033[0m"
echo " Your operating system '$(uname)' is not supported by this script."
echo " If possible please provide a patch."
else if [ -z "$fullhelp" ]; then
echo -e "\033[1m-----------------\033[7m Short help 'easy_e17.sh <ACTION> <OPTIONS...>' \033[0m\033[1m---------------\033[0m"
echo " -i, --install = action: compile and install ALL of e17"
echo " -u, --update = action: update your installed e17"
echo " --help = full help"
else
echo -e "\033[1m-----------------\033[7m Full help 'easy_e17.sh <ACTION> <OPTIONS...>' \033[0m\033[1m----------------\033[0m"
echo -e " \033[1mACTION (ONLY ONE SELECTION POSSIBLE):\033[0m"
echo " -i, --install = action: compile and install ALL of e17"
echo " -u, --update = action: update your installed e17"
echo " -c, --clean = action: clean the sources"
echo " (more --cleans means more cleaning, up"
echo " to a maximum of three, which will"
echo " uninstall e17."
echo " If used with one of the other actions,"
echo " this will clean first.)"
echo " --only=<name1>,<name2>,... = action: checkout and compile ONLY the"
echo " named libs/apps"
echo " --cvsupdate = update only the cvs tree"
echo " -v, --check-script-version = check for a newer release of easy_e17"
echo " --help = this help"
echo
echo -e " \033[1mOPTIONS:\033[0m"
echo " --conf=<file> = use an alternate configuration file"
echo " --instpath=<path> = change the default install path"
echo " --cvspath=<path> = change the default cvs path"
echo " --cvssrv=<server> = change the default cvs server"
echo " --asuser = do everything as the user, not as root"
echo " --fullcvs = checkout optional cvs repositories:"
echo " - devs"
echo " - web"
echo " -s, --skip-cvsupdate = no update for your local cvs copy"
echo " -f, --fix-cvs-conflicts = deletes conflicting cvs files"
echo " --skip=<name1>,<name2>,... = this will skip installing the named"
echo " libs/apps"
echo " -d, --docs = generate programmers documentation"
echo " --postscript=<name> = full path to a script to run as root"
echo " after installation"
echo " -e, --skip-errors = continue compiling even if there is"
echo " an error"
echo " -w, --wait = don't exit the script after finishing,"
echo " this allows 'xterm -e ./easy_e17.sh -i'"
echo " without closing the xterm"
echo " -k, --keep = don't delete the temporary dir"
echo
echo " -l, --low = use lowest nice level (19, slowest,"
echo " takes more time to compile, select"
echo " this if you need to work on the pc"
echo " while compiling)"
echo " --normal = default nice level ($nice_level),"
echo " will be automatically used"
echo " -h, --high = use highest nice level (-20, fastest,"
echo " slows down the pc)"
echo " --cache = Use a common configure cache and"
echo " ccache if available"
echo " --threads=<int> = make can use threads, recommended on smp"
echo " systems (default: 2 threads)"
echo
echo " --efl=<name1>,<name2>,... = compile libraries in this order"
echo " --apps=<name1>,... = compile e17 applications in this order"
echo " --apps_misc=<name1>,... = compile e17 misc in this order"
echo " --e17_modules=<name1>,... = compile e17 modules in this order"
echo " --autogen_args=<n1>:<o1>+<o2>,. = pass some options to autogen:"
echo " <name1>:<opt1>+<opt2>,<name2>:<opt1>+..."
echo " --cflags=<flag1>,<flag2>,... = pass cflags to the gcc"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m----------------------\033[7m Configurationfile '~/.easy_e17.conf' \033[0m\033[1m--------------------\033[0m"
echo " Just create this file and save your favourite arguments."
echo " Example: If you use a diffent cvs path, add this line:"
echo " --cvspath=/home/brian.miculcy/enlightenment/e17_cvs"
fi fi
;;
1)
echo "- running some basic system checks"
echo "- pre cleaning"
echo "- cvs checkout/update"
;;
2)
echo "- lib-compilation and installation"
echo "- apps-compilation and installation"
;;
3)
echo "- cleaning"
echo "- install notes"
;;
esac
fi
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo
}
function define_os_vars ()
{
case $os in
SunOS)
ldconfig="$(which crle) -u" # there is no command like ldconfig on solaris! "crle" does nearly the same.
make="make"
export CFLAGS="$CFLAGS"
;;
Linux)
ldconfig="/sbin/ldconfig"
make="make"
export CFLAGS="$CFLAGS"
if [ -z "$linux_distri" ]; then
if [ -e "/etc/debian_version" ]; then linux_distri="debian"; fi
if [ -e "/etc/gentoo-release" ]; then linux_distri="gentoo"; fi
if [ -e "/etc/redhat-release" ]; then linux_distri="redhat"; fi
if [ -e "/etc/SuSE-release" ]; then linux_distri="suse"; fi
fi
;;
FreeBSD)
ldconfig="/sbin/ldconfig"
make="gmake"
export PATH=/usr/local/gnu-autotools/bin:$PATH
export ACLOCAL_FLAGS=" -I /usr/local/share/aclocal"
export CFLAGS="$CFLAGS -lintl -liconv -L/usr/local/lib -L/usr/X11R6/lib -I/usr/local/include -I/usr/X11R6/include"
export CPPFLAGS="$CPPFLAGS -I/usr/local/include"
;;
*)
os="not supported"
logo 0
exit
;;
esac
}
function find_path ()
{
basedir="$cvs_path/$1"
name=$2
path=""
for dir in `find "$basedir" -type d -name "$name" | awk -F "$cvs_path/" '{print $2}' | egrep -v -i "/bin/|/cvs/|/data/|/docs/|/oe/|/src/|/test/"`; do
if [ "${#dir}" -lt "${#path}" ] || [ -z "$path" ]; then
path=$dir
fi
done
echo "$cvs_path/$path"
}
function backoff_loop
{
cvscommand=$1
backoff=$(( 4 + (RANDOM % 5) ))
attempt=1;
while [ 1 ]; do
$cvscommand | tee -a "$tmp_path/cvs_update.log"
if [ "${PIPESTATUS[0]}" -gt 0 ]; then
if [ "$fix_cvs_conflicts" ]; then
for cfile in `egrep "^[C] " "$tmp_path/cvs_update.log" | cut -d' ' -f2`; do
echo "- fixing cvs conflict: $cfile"
if [ -e "$cfile" ]; then
rm "$cfile"
fi
done
fi
attempt=$(($attempt + 1))
for (( i = $backoff / 2; i > 0; i-- )) do
set_title "Checkout FAILED! Next attempt $attempt in $i seconds"
echo -n -e "\rFAILED! Next attempt $attempt in \033[1m$i\033[0m seconds"
sleep 1
done
echo -n -e "\r \r"
if [[ backoff -le max_backoff ]] ; then
backoff=$(( ($backoff * 2) + (RANDOM % 5) ))
fi
else
break
fi
done
}
function get_cvs ()
{
repo=$1
cd $cvs_path
if [ -d "$repo" ]; then
if [ -n "$only" ]; then
set_title "Updating source of '$repo' ($pkg_pos/$pkg_total)"
echo "- updating source of '`basename "$repo"`' (please wait, this won't output much) ..."
else
set_title "Updating source of repo '$repo'"
echo "- updating source of repo '$repo' (please wait, this won't output much) ..."
fi
cd "$repo"
backoff_loop "cvs -z3 -q update -dP"
else
if [ -n "$only" ]; then
set_title "Checkout source of '$repo' ($pkg_pos/$pkg_total)"
echo "- checkout source of '`basename "$repo"`' ..."
else
set_title "Checkout source of repo '$repo'"
echo "- checkout source of repo '$repo' ..."
fi
backoff_loop "cvs -z3 -q -d $cvs_srv co $repo"
fi
echo
}
function build_each ()
{
repo="$1"
array=$2
for name in $array
do
path=`find_path $repo $name`
compile "$name" "$path"
done
}
function run_command ()
{
name=$1
path=$2
title=$3
log_title=$4
mode_needed=$5
cmd=$6
set_title "$name: $title ($pkg_pos/$pkg_total)"
echo -n "$log_title"
logfile_banner "$cmd" "$logs_path/$name.log"
if [ $mode_needed == "rootonly" ]; then
mode_needed=$mode
else
if [ $nice_level -ge 0 ]; then
mode_needed="user"
fi
fi
rm -f $tmp_path/$name.noerrors
case "$mode_needed" in
"sudo")
echo "$sudopwd" | sudo -S nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
;;
*)
nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
;;
esac
pid="$!"
rotate "$pid" "$name"
}
function compile ()
{
name=$1
path=$2
cnt=${#name}
max=27
make_extra=""
touch "$logs_path/$name.log"
rm $tmp_path/$name.noerrors 2>/dev/null
echo -n "- $name "
while [ ! $cnt = $max ]
do
echo -n "."
cnt=`expr $cnt + 1`
done
echo -n " "
for one in $skip
do
if [ "$name" == "$one" ]; then
echo "SKIPPED"
touch $tmp_path/$name.skipped
return
fi
done
if [ "$only" ] || [ "$action" == "update" ]; then
found=""
for one in $only
do
if [ "$name" == "$one" ]; then
found=1
fi
done
if [ -z "$found" ]; then
echo "SKIPPED"
touch $tmp_path/$name.skipped
return
fi
fi
if [ ! -d "$path" ]; then
echo "NOT FOUND"
return
fi
cd "$path"
touch "$logs_path/$name.log"
pkg_pos=`expr $pkg_pos + 1`
if [[ clean -ge 1 ]] ; then
rm -f "$logs_path/$name.log"
touch "$logs_path/$name.log"
if [ ! -e "Makefile" ]; then
echo "can't clean"
return
fi
if [[ clean -eq 1 ]] ; then
cmd="$make clean"
logfile_banner "$cmd" "$logs_path/$name.log"
$cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
fi
if [[ clean -eq 2 ]] ; then
echo -n "distclean: "
cmd="$make clean distclean"
logfile_banner "$cmd" "$logs_path/$name.log"
$cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
fi
if [[ clean -ge 3 ]] ; then
echo -n "uninstall: "
cmd="$make uninstall clean distclean"
logfile_banner "$cmd" "$logs_path/$name.log"
case "$mode" in
"sudo")
echo "$sudopwd" | sudo -S nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
;;
*)
nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $tmp_path/$name.noerrors &
;;
esac
# It's no longer installed if we just uninstalled it.
# Even if the uninstall failed, it's best to mark it as uninstalled so that a partial uninstall gets fixed later.
rm -f $tmp_path/$name.installed
fi
pid="$!"
rotate "$pid" "$name"
rm -f $tmp_path/$name.noerrors
echo "ok"
return
fi
if [ -e "$tmp_path/$name.installed" ]; then
echo "previously installed"
return
fi
# get autogen arguments
args=""
for app_arg in `echo $autogen_args | tr -s '\,' ' '`
do
app=`echo $app_arg | cut -d':' -f1`
if [ "$app" == "$name" ]; then
args="$args `echo $app_arg | cut -d':' -f2- | tr -s '+' ' '`"
fi
done
if [ -e "autogen.sh" ]; then
run_command "$name" "$path" "autogen" "autogen: " "$mode" "./autogen.sh --prefix=$install_path $accache $args"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
else
if [ -e "bootstrap" ]; then
run_command "$name" "$path" "bootstrap" "bootstrap: " "$mode" "./bootstrap"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
run_command "$name" "$path" "configure" "configure: " "$mode" "./configure --prefix=$install_path $accache $args"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
else
if [ -e "Makefile.PL" ]; then
run_command "$name" "$path" "perl" "perl make: " "$mode" "perl Makefile.PL prefix=$install_path $args"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
else
if [ -e "Makefile" ]; then
make_extra="PREFIX=$install_path"
else
echo "no build system"
touch $tmp_path/$name.nobuild
return
fi
fi
fi
fi
run_command "$name" "$path" "make" "make : " "$mode" "$make $make_extra -j $threads"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
if [ "$gen_docs" ]; then
if [ -e "gendoc" ]; then
run_command "$name" "$path" "docs" "docs : " "$mode" "sh gendoc"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
fi
fi
run_command "$name" "$path" "install" "install: " "rootonly" "$make $make_extra install"
if [ ! -e "$tmp_path/$name.noerrors" ] ; then return ; fi
# All done, mark it as installed OK.
touch $tmp_path/$name.installed
rm -f $tmp_path/$name.noerrors
echo "ok"
}
function rotate ()
{
pid=$1
name=$2
star=1
log_line=""
while [ "`ps -p $pid -o comm=`" ]
do
last_line=`tail -1 "$logs_path/$name.log"`
if [ ! "$log_line" = "$last_line" ]; then
echo -e -n "\b\b\b"
case $star in
1)
echo -n "["
echo -n -e "\033[1m|\033[0m"
echo -n "]"
star=2
;;
2)
echo -n "["
echo -n -e "\033[1m/\033[0m"
echo -n "]"
star=3
;;
3)
echo -n "["
echo -n -e "\033[1m-\033[0m"
echo -n "]"
star=4
;;
4)
echo -n "["
echo -n -e "\033[1m"
echo -n "\\"
echo -n -e "\033[0m"
echo -n "]"
star=1
;;
esac
log_line=$last_line
fi
sleep 1
done
del_lines 12
if [ ! -e "$tmp_path/$name.noerrors" ]; then
echo -e "\033[1mERROR!\033[0m"
if [ ! "$skip_errors" ]; then
set_title "$name: ERROR"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m-----------------------------------\033[7m Last loglines \033[0m\033[1m------------------------------\033[0m"
echo -n -e "\033[1m"
tail -25 "$logs_path/$name.log"
echo -n -e "\033[0m"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo "-> Get more informations by checking the log file '$logs_path/$name.log'!"
echo
exit
fi
fi
}
function del_lines ()
{
cnt=0
max=$1
while [ ! "$cnt" == "$max" ]
do
echo -n -e "\b \b"
cnt=`expr $cnt + 1`
done
}
function error ()
{
set_title "ERROR: $1"
echo -e "\n\n\033[1mERROR: $1\033[0m\n\n"
exit 2
}
function set_title ()
{
if [ "$1" ]; then
message="- $1"
fi
if [ "$DISPLAY" ]; then
case "$TERM" in
xterm*|rxvt*|Eterm|eterm|Aterm|aterm)
echo -ne "\033]0;Easy_e17.sh $message\007"
;;
esac
fi
}
function logfile_banner ()
{
cmd=$1
logfile=$2
echo "-------------------------------------------------------------------------------" >> "$logfile"
echo "EASY_E17 CMD: $cmd" >> "$logfile"
echo "-------------------------------------------------------------------------------" >> "$logfile"
}
function get_repo ()
{
if [ -n "$only" ]; then
# single install
for pkg in $only
do
for each in $efl
do
if [ "$each" == "$pkg" ]; then
path=`find_path "e17/" "$pkg"`
get_cvs "$path"
fi
done
for each in $apps
do
if [ "$each" == "$pkg" ]; then
path=`find_path "e17/" "$pkg"`
get_cvs "$path"
fi
done
for each in $apps_misc
do
if [ "$each" == "$pkg" ]; then
path=`find_path "misc/" "$pkg"`
get_cvs "$path"
fi
done
for each in $e17_modules
do
if [ "$each" == "$pkg" ]; then
path=`find_path "e_modules/" "$pkg"`
get_cvs "$path"
fi
done
done
else
# full install
get_cvs e17
get_cvs misc
get_cvs e_modules
if [ "$fullcvs" ]; then
get_cvs devs
get_cvs web
fi
fi
}
function cnt_pkgs () {
pkg_total=0
pkg_pos=0
if [ -n "$only" ]; then
for each in $only
do
pkg_total=`expr $pkg_total + 1`
done
else
# Maybe some regexp which counts the spaces is faster?
total_pkgs="$efl $apps $apps_misc $e17_modules"
for each in $total_pkgs
do
pkg_total=`expr $pkg_total + 1`
done
fi
}
function check_script_version ()
{
echo "- local version .............. $version"
echo -n "- downloading script ......... "
remote_version=`wget $online_source -q -U "easy_e17.sh/$version" -O - | grep -m 2 -o [0-9]\.[0-9]\.[0-9] | sort -n | head -n 1`
echo "ok"
echo "- remote version ............. $remote_version"
remote_ver=`echo "$remote_version" | tr -d '.'`
local_ver=`echo "$version" | tr -d '.'`
echo
echo -n "- update available ........... "
if [ $remote_ver -gt $local_ver ]; then
echo -e "\033[1mYES!\033[0m"
else
echo "no"
fi
}
# SCRIPT:
EASY_PWD=`pwd`
set_title
define_os_vars
accache=""
easy_options=""
command_options=$@
clean=0
# Check for alternate conf file first.
test_options=$command_options
for arg in $test_options
do
option=`echo "'$arg'" | cut -d'=' -f1 | tr -d "'"`
value=`echo "'$arg'" | cut -d'=' -f2- | tr -d "'"`
if [ "$value" == "$option" ]; then
value=""
fi
if [ "$option" == "--conf" ]; then
conf_file=$value;
fi
done
if [ -e "$conf_file" ]; then
# load configfile
for option in `cat "$conf_file"`
do
easy_options="$easy_options $option"
done
fi
# append arguments
easy_options="$easy_options $command_options"
# check options
for arg in $easy_options
do
option=`echo "'$arg'" | cut -d'=' -f1 | tr -d "'"`
value=`echo "'$arg'" | cut -d'=' -f2- | tr -d "'"`
if [ "$value" == "$option" ]; then
value=""
fi
# $action can't be set twice
if [ "$action" ]; then
if [ "$option" == "-i" ] ||
[ "$option" == "--install" ] ||
[ "$option" == "-u" ] ||
[ "$option" == "--update" ] ||
[ "$option" == "--only" ] ||
[ "$option" == "--cvsupdate" ] ||
[ "$option" == "-v" ] ||
[ "$option" == "--check-script-version" ]; then
logo 0 "Only one action allowed! (currently using '--$action' and '$option')"
exit
fi
fi
case "$option" in
"-i") action="install" ;;
"--install") action="install" ;;
"-u") action="update" ;;
"--update") action="update" ;;
"-c") clean=$(( $clean + 1 )) ;;
"--clean") clean=$(( $clean + 1 )) ;;
"--conf") ;;
"--only")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
action="only"
only="`echo "$value" | tr -s '\,' '\ '` $only"
;;
"-v") action="script" ;;
"--check-script-version") action="script" ;;
"--cvsupdate")
action="cvsupdate"
skip="$efl $apps $apps_misc $e17_modules"
;;
"--instpath") install_path="$value" ;;
"--cvspath") cvs_path="$value" ;;
"--cvssrv")
cvs_srv="$value"
export CVS_RSH="ssh"
;;
"--asuser") asuser=1 ;;
"-d") gen_docs=1 ;;
"--docs") gen_docs=1 ;;
"--postscript") easy_e17_post_script="$value" ;;
"--fullcvs") fullcvs=1 ;;
"-s") skip_cvsupdate=1 ;;
"--skip-cvsupdate") skip_cvsupdate=1 ;;
"-f") fix_cvs_conflicts=1 ;;
"--fix-cvs-conflicts") fix_cvs_conflicts=1 ;;
"--skip")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
skip="`echo "$value" | tr -s '\,' '\ '` $skip"
;;
"-e") skip_errors=1 ;;
"--skip-errors") skip_errors=1 ;;
"-w") wait=1 ;;
"--wait") wait=1 ;;
"-k") keep=1 ;;
"--keep") keep=1 ;;
"-l") nice_level=19 ;;
"--low") nice_level=19 ;;
"--normal") ;;
"-h") nice_level=-20 ;;
"--high") nice_level=-20 ;;
"--cache")
accache=" --cache-file=$tmp_path/easy_e17.cache"
ccache=`whereis ccache`
if [ ! "$ccache" = "ccache:" ]; then
export CC="ccache gcc"
fi
;;
"--threads")
if [ -z "$value" ] || ! expr "$value" : "[0-9]*$" >/dev/null || [ "$value" -lt 1 ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
threads=$value
;;
"--efl")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
efl="`echo "$value" | tr -s '\,' '\ '`"
;;
"--apps")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
apps="`echo "$value" | tr -s '\,' '\ '`"
;;
"--apps_misc")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
apps_misc="`echo "$value" | tr -s '\,' '\ '`"
;;
"--e17_modules")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
e17_modules="`echo "$value" | tr -s '\,' '\ '`"
;;
"--autogen_args")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
autogen_args="$value"
;;
"--cflags")
if [ -z "$value" ]; then
logo 0 "Missing value for argument '$option'!"
exit
fi
CFLAGS="$CFLAGS `echo "$value" | tr -s '\,' '\ '`"
;;
"--help")
fullhelp=1
logo 0
exit
;;
*)
logo 0 "Unknown argument '$option'!"
exit
;;
esac
done
# Sanity check stuff if doing everything as user.
if [ "$asuser" ]; then
if [ $nice_level -lt 0 ]; then
nice_level=0
fi
fi
# special case to allow uninstall
if [ -z "$action" ] && [ "$clean" -ge 1 ]; then
action="clean"
fi
# quit if some basic option is missing
if [ -z "$action" ] || [ -z "$install_path" ] || [ -z "$cvs_path" ]; then
logo 0
exit
fi
# check for script updates
if [ "$action" == "script" ]; then
logo 0
echo -e "\033[1m------------------------------\033[7m Check script version \033[0m\033[1m----------------------------\033[0m"
check_script_version
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
exit 0
fi
# run script normally
logo 1
set_title "Basic system checks"
echo -e "\033[1m-------------------------------\033[7m Basic system checks \033[0m\033[1m----------------------------\033[0m"
echo -n "- cvs-dir .................... "
mkdir -p "$cvs_path" 2>/dev/null
if [ ! -w "$cvs_path" ]; then
error "The cvs-dir '$cvs_path' isn't writeable!"
else
echo "ok"
fi
touch "$HOME/.cvspass" 2>/dev/null
echo -n "- creating script dirs ....... "
mkdir -p "$tmp_path" 2>/dev/null
chmod 700 "$tmp_path"
mkdir -p "$logs_path" 2>/dev/null
echo "ok"
if [ ! "$action" == "cvsupdate" ]; then
echo -n "- build-user ................. "
if [ ! "$LOGNAME" == "root" ]; then
if [ "$asuser" ]; then
echo "$LOGNAME (as user)"
mode="user"
else
echo "$LOGNAME (non-root)"
echo -n "- sudo available ............. "
sudotest=`type sudo &>/dev/null ; echo $?`
if [ "$sudotest" == 0 ]; then
sudo -K
if [ -e "$tmp_path/sudo.test" ]; then
rm -f "$tmp_path/sudo.test"
fi
while [ -z "$sudopwd" ]
do
echo -n "enter sudo-password: "
stty -echo
read sudopwd
stty echo
# password check
echo "$sudopwd" | sudo -S touch "$tmp_path/sudo.test" &>/dev/null
if [ ! -e "$tmp_path/sudo.test" ]; then
sudopwd=""
fi
done
echo
mode="sudo"
rm -f "$tmp_path/sudo.test"
else
error "You're not root and sudo isn't available. Please run this script as root!"
fi
fi
else
echo "root"
mode="root"
fi
echo -n "- adding path to env ......... "
export PATH="$install_path/bin:$PATH"
export PKG_CONFIG_PATH="$install_path/lib/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="$install_path/lib:$LD_LIBRARY_PATH"
echo "ok"
echo -n "- checking lib-path in ldc ... "
case $os in
FreeBSD) ;; # placeholder
SunOS) ;; # need more testing of adding libraries on different solaris versions. atm this is not working
Linux)
libpath="`grep -r -l -i -m 1 $install_path/lib /etc/ld.so.conf*`"
if [ -z "$libpath" ]; then
case $linux_distri in
gentoo)
e17ldcfg="/etc/env.d/40e17paths"
echo -e "PATH=$install_path/bin\nROOTPATH=$install_path/sbin:$install_path/bin\nLDPATH=$install_path/lib\nPKG_CONFIG_PATH=$install_path/lib/pkgconfig" > $e17ldcfg
env-update &> /dev/null
echo "ok (path has been added to $e17ldcfg)";
;;
*)
if [ "`grep -l 'include /etc/ld.so.conf.d/' /etc/ld.so.conf`" ]; then
e17ldcfg="/etc/ld.so.conf.d/e17.conf"
rm $e17ldcfg 2>/dev/null
else
e17ldcfg="/etc/ld.so.conf";
cp $e17ldcfg $tmp_path;
fi
case "$mode" in
"user") ;;
"root") echo "$install_path/lib" >>$e17ldcfg ;;
"sudo")
echo "$install_path/lib" >> $tmp_path/`basename $e17ldcfg`
echo "$sudopwd" | sudo -S mv -f $tmp_path/`basename $e17ldcfg` $e17ldcfg
;;
esac
if [ "$asuser" ]; then
echo "skipped (running as user)";
else
echo "ok (path has been added to $e17ldcfg)";
fi
;;
esac
else
echo "ok ($libpath)";
fi
;;
esac
echo -n "- setting compile options .... "
export CPPFLAGS="$CPPFLAGS -I$install_path/include"
export LDFLAGS="$LDFLAGS -L$install_path/lib"
echo "ok"
fi
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
# do the clean first if not just cleaning.
if [[ clean -ge 1 ]] ; then
if [ "$action" != "clean" ]; then
set_title "Pre cleaning"
sleep 5
echo -e "\033[1m----------------------------\033[7m Precleaning libraries (EFL) \033[0m\033[1m-----------------------\033[0m"
pkg_pos=0
build_each "e17/" "$efl"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m-----------------------------\033[7m Precleaning applications \033[0m\033[1m-------------------------\033[0m"
build_each "e17/" "$apps"
build_each "misc/" "$apps_misc"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m-----------------------------\033[7m Precleaning e17 modules \033[0m\033[1m--------------------------\033[0m"
build_each "e_modules/" "$e17_modules"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
clean=0
fi
fi
# cvs
echo -e "\033[1m-------------------------------\033[7m CVS checkout/update \033[0m\033[1m----------------------------\033[0m"
if [ -z "$skip_cvsupdate" ]; then
rm "$tmp_path/cvs_update.log" 2>/dev/null
get_repo
else
echo -e "\n - - - SKIPPED - - -\n"
fi
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
if [ "$action" == "update" ] && [ -e "$tmp_path/cvs_update.log" ]; then
for update in `egrep "^[P|U] " "$tmp_path/cvs_update.log" | egrep "apps/|libs/|proto/" | cut -d'/' -f2 | sort -u`; do
for package in $efl $apps; do
if [ "$update" == "$package" ]; then
only="$update $only"
fi
done
done
for update in `egrep "^[P|U] " "$tmp_path/cvs_update.log" | egrep -v "apps/|libs/|proto/" | cut -d'/' -f1 | cut -d' ' -f2 | sort -u`; do
for package in $apps_misc $e17_modules; do
if [ "$update" == "$package" ]; then
only="$update $only"
fi
done
done
fi
cnt_pkgs # Count packages
echo -n "-> PREPARING FOR PHASE 2..."
set_title "Preparing for phase 2... compilation & installation"
sleep 5
logo 2
echo -e "\033[1m---------------------------\033[7m Installing libraries (EFL) \033[0m\033[1m-------------------------\033[0m"
pkg_pos=0
build_each "e17/" "$efl"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m----------------------------\033[7m Installing applications \033[0m\033[1m---------------------------\033[0m"
build_each "e17/" "$apps"
build_each "misc/" "$apps_misc"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -e "\033[1m-----------------------------\033[7m Installing e17 modules \033[0m\033[1m---------------------------\033[0m"
build_each "e_modules/" "$e17_modules"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
# Restore current directory in case post processing wants to be pathless.
cd $EASY_PWD
echo -e "\033[1m-----------------------------\033[7m Finishing installation \033[0m\033[1m---------------------------\033[0m"
echo -n "- registering libraries ...... "
if [ -z "$asuser" ]; then
case "$mode" in
"sudo") echo "$sudopwd" | sudo -S nice -n $nice_level $ldconfig > /dev/null 2>&1 ;;
*) nice -n $nice_level $ldconfig > /dev/null 2>&1 ;;
esac
echo "ok"
else
echo "skipped"
fi
echo -n "- post install script ........ "
if [ "$easy_e17_post_script" ]; then
echo -n " '$easy_e17_post_script' ... "
case "$mode" in
"sudo") echo "$sudopwd" | sudo -S nice -n $nice_level $easy_e17_post_script ;;
*) nice -n $nice_level $easy_e17_post_script ;;
esac
echo "ok"
else
echo "skipped"
fi
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
echo -n "-> PREPARING FOR PHASE 3..."
set_title "Preparing for phase 3..."
sleep 5
logo 3
set_title "Finished"
for file in $logs_path/*.log ; do
package=`basename "$file" | cut -d'.' -f1`
if [ -e "$tmp_path/$package.installed" ]; then
packages_installed="$packages_installed $package"
else
if [ -e "$tmp_path/$package.skipped" ]; then
packages_skipped="$packages_skipped $package"
else
if [ -e "$tmp_path/$package.nobuild" ]; then
packages_nobuild="$packages_nobuild $package"
else
packages_failed="$packages_failed $package"
fi
fi
fi
done
echo -e "\033[1m--------------------------------\033[7m Cleaning temp dir \033[0m\033[1m-----------------------------\033[0m"
if [ -z "$keep" ]; then
if [ "$packages_failed" ]; then
echo -n "- saving logs ................ "
for package in $packages_installed; do
rm "$tmp_path/$package.installed" 2>/dev/null
rm "$logs_path/$package.log" 2>/dev/null
done
else
echo -n "- deleting temp dir .......... "
rm -rf $tmp_path 2>/dev/null
fi
echo "ok"
else
echo "- saving temp dir ............ ok"
fi
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
if [ "$packages_failed" ]; then
echo -e "\033[1m---------------------------------\033[7m Failed packages \033[0m\033[1m------------------------------\033[0m"
for package in $packages_failed; do
echo "- $package (error log: $logs_path/$package.log)"
done
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
fi
if [ "$action" == "install" ]; then
echo "INSTALL NOTES:"
echo "-----------------------------------------------------------------------------"
echo "The most incredible and really unbelivable dream has become true:"
echo "You compiled e17 sucessfully!"
echo
echo "Starting e17:"
echo "Create a file ~/.xsession with the line 'exec $install_path/bin/enlightenment_start'."
echo "Add a link to this file using 'ln -s ~/.xsession ~/.xinitrc'."
echo
echo "If you're using a login manager (GDM/KDM), select the session type 'default' in them."
echo "If you're using the startx command, simply execute it now."
echo
echo "Note: e17 is still not released and it won't be in the near future. So don't"
echo "ask for a stable release. e17 is still very buggy and only for experienced users"
echo "who know what they do..."
echo
echo "Rasterman didn't write this script so don't ask him for help with it."
echo
echo "Hint: From now on you can easily keep your installation up to date."
echo "Simply run easy_e17.sh with -u instead of -i ."
echo
echo "We hope you will enjoy your trip into e17... Have fun!"
echo -e "\033[1m--------------------------------------------------------------------------------\033[0m"
echo
fi
# Clear this out if we ever set it.
export CC=""
# exit script or wait?
if [ "$wait" ]; then
echo
echo -e -n "\033[1mThe script is waiting here - simply press [enter] to exit.\033[0m"
read
fi
if [ "$packages_failed" ]; then
exit 2
else
exit 0
fi