#!/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 # 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 ' \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 ' \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=,,... = 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= = use an alternate configuration file" echo " --instpath= = change the default install path" echo " --cvspath= = change the default cvs path" echo " --cvssrv= = 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=,,... = this will skip installing the named" echo " libs/apps" echo " -d, --docs = generate programmers documentation" echo " --postscript= = 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= = make can use threads, recommended on smp" echo " systems (default: 2 threads)" echo echo " --efl=,,... = compile libraries in this order" echo " --apps=,... = compile e17 applications in this order" echo " --apps_misc=,... = compile e17 misc in this order" echo " --e17_modules=,... = compile e17 modules in this order" echo " --autogen_args=:+,. = pass some options to autogen:" echo " :+,:+..." echo " --cflags=,,... = 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