From c8f51a43fa97e5f42df9b82d1427c33b8d988bb8 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Sun, 11 Apr 2010 19:48:33 +0200 Subject: added function to quickly access a shell inside chroot started with enlightenment lib package (incomplete, commit just for transfer) --- broot.sh | 7 + chroot-scripts/build-e.sh | 250 ++++++++ chroot-scripts/easy_e17.sh | 1398 +++++++++++++++++++++++++++++++++++++++++++ inc/chroot-functions.inc.sh | 2 + inc/helper.inc.sh | 1 + tasks/build_e.sh | 18 + tasks/shell.task.sh | 8 + 7 files changed, 1684 insertions(+) create mode 100644 chroot-scripts/build-e.sh create mode 100755 chroot-scripts/easy_e17.sh create mode 100644 tasks/build_e.sh create mode 100644 tasks/shell.task.sh diff --git a/broot.sh b/broot.sh index e3d2c74..dd4d06f 100755 --- a/broot.sh +++ b/broot.sh @@ -3,6 +3,10 @@ . ./inc/env.inc.sh # read slx config to find paths . ./inc/functions.inc.sh +if [ "$(whoami)" != "root" ]; then + echo " You need to be root" + exit 12 +fi case $1 in "setup") @@ -15,6 +19,9 @@ case $1 in tasks="build_busybox" # chroot-exec /root/bin/build-bb.sh ;; + "shell") + tasks="shell" + ;; "build-initramfs-pkgs") tasks="build_busybox build_packages build_kernel" # updateScripts diff --git a/chroot-scripts/build-e.sh b/chroot-scripts/build-e.sh new file mode 100644 index 0000000..79ec812 --- /dev/null +++ b/chroot-scripts/build-e.sh @@ -0,0 +1,250 @@ +#!/bin/bash + +### +# this is a convenience script for getting/updating e17 from svn. +# (this is what you need to build e17 and entrance). +### + +### +# settings - feel free to change these... +### +# the directory to install into (a full path to where on the system to install) +PREFIX="/usr/local" +# install as root ("yes" or "no") - note. you CAN install as a user too, but +# only into directories you have permission to install into. also you will +# need to modify your LD_LIBRARY_PATH shell variable to access things +ROOT_INSTALL="yes" +# build enlightenment - the window manager ("yes" or "no") +BUILD_E="no" +### +# end config +### + + + + + + +# modules +CORE_MODULES="eina eet evas ecore e_dbus efreet embryo edje" +E_MODULES="e" + +MODULES=$CORE_MODULES +if [ $BUILD_E == "yes" ]; then + MODULES=$MODULES" "$E_MODULES +fi + +# actual working parts of the script (no need to really touch this) +if [ $ROOT_INSTALL == "yes" ]; then + echo "---------------------------------------------------------------------" + echo "" + # test sudo + echo "Check sudo access" + NOSUDO="no" + sudo ls /root || NOSUDO="yes" + + if [ $NOSUDO == "yes" ]; then + echo "You have no sudo access. You need this to install on the system." + echo "Try add this line to your /etc/sudoers file:" + echo "" + echo $USER" ALL=(ALL) NOPASSWD: ALL" + exit -1 + fi + + # check ldo.so.conf + echo "Check /etc/ld.so.conf sanity" + LDCONF=`grep $PREFIX/lib /etc/ld.so.conf /etc/ld.so.conf.d/*` + if [ -z "$LDCONF" ]; then + echo "Add "$PREFIX"/lib to /etc/ld.so.conf please." + exit -1 + fi +fi + +if [ "$NOSUDO" == "no" ]; then + # detect distribution here + if [ -f "/etc/apt/sources.list" ]; then + F=`grep "gutsy" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="ubuntu-gutsy" + else + F=`grep "feisty" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="ubuntu-feisty" + else + F=`grep "hardy" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="ubuntu-hardy" + else + F=`grep "intrepid" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="ubuntu-intrepid" + else + F=`grep "unstable" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="debian-unstable" + else + F=`grep " sid" "/etc/apt/sources.list"` + if [ -n "$F" ]; then + DISTRO="debian-unstable" + fi + fi + fi + fi + fi + fi + fi + echo "Detected distribution: $DISTRO" + if [ "$DISTRO" == "debian-unstable" ]; then +## FIXME: unknown is this works or not + sudo apt-get update + sudo apt-get install \ + xterm make gcc bison flex subversion \ + automake1.10 autoconf autoconf-archive libtool gettext \ + libc6-dev \ + zlib1g-dev libjpeg62-dev \ + libpng12-dev libfreetype6-dev \ + libxrender-dev libx11-dev libxinerama-dev \ + libxss-dev libxext-dev libxrandr-dev libxp-dev \ + libxfixes-dev libxdamage-dev libxcursor-dev \ + libpam0g-dev + elif [ "$DISTRO" == "ubuntu-feisty" ]; then + sudo apt-get update + sudo apt-get install \ + xterm make gcc bison flex subversion automake1.10 autoconf autotools-dev \ + autoconf-archive libtool gettext \ + libpam0g-dev libfreetype6-dev libpng12-dev zlib1g-dev libjpeg-dev \ + libtiff-dev libungif4-dev librsvg2-dev libx11-dev libxcursor-dev \ + libxrender-dev libxrandr-dev libxfixes-dev libxdamage-dev \ + libxcomposite-dev libxss-dev libxp-dev libxext-dev libxinerama-dev \ + libxft-dev libxfont-dev libxi-dev libxv-dev libxkbfile-dev \ + libxkbui-dev libxres-dev libxtst-dev libltdl3-dev libglu1-xorg-dev \ + libglut3-dev xserver-xephyr libdbus-1-dev + elif [ "$DISTRO" == "ubuntu-gutsy" ]; then + sudo apt-get update + sudo apt-get install \ + xterm make gcc bison flex subversion automake1.10 autoconf autotools-dev \ + autoconf-archive libtool gettext \ + libpam0g-dev libfreetype6-dev libpng12-dev zlib1g-dev libjpeg-dev \ + libtiff-dev libungif4-dev librsvg2-dev libx11-dev libxcursor-dev \ + libxrender-dev libxrandr-dev libxfixes-dev libxdamage-dev \ + libxcomposite-dev libxss-dev libxp-dev libxext-dev libxinerama-dev \ + libxft-dev libxfont-dev libxi-dev libxv-dev libxkbfile-dev \ + libxkbui-dev libxres-dev libxtst-dev libltdl3-dev libglu1-xorg-dev \ + libglut3-dev xserver-xephyr libdbus-1-dev + elif [ "$DISTRO" == "ubuntu-hardy" ]; then + sudo apt-get update + sudo apt-get install \ + xterm make gcc bison flex subversion automake1.10 autoconf autotools-dev \ + autoconf-archive libtool gettext \ + libpam0g-dev libfreetype6-dev libpng12-dev zlib1g-dev libjpeg-dev \ + libtiff-dev libungif4-dev librsvg2-dev libx11-dev libxcursor-dev \ + libxrender-dev libxrandr-dev libxfixes-dev libxdamage-dev \ + libxcomposite-dev libxss-dev libxp-dev libxext-dev libxinerama-dev \ + libxft-dev libxfont-dev libxi-dev libxv-dev libxkbfile-dev \ + libxkbui-dev libxres-dev libxtst-dev libltdl3-dev libglu1-xorg-dev \ + libglut3-dev xserver-xephyr libdbus-1-dev + elif [ "$DISTRO" == "ubuntu-intrepid" ]; then + #sudo apt-get update + sudo apt-get install \ + xterm make gcc bison flex subversion automake1.10 autoconf autotools-dev \ + autoconf-archive libtool gettext \ + libpam0g-dev libfreetype6-dev libpng12-dev zlib1g-dev libjpeg62-dev \ + libtiff4-dev libungif4-dev librsvg2-dev libx11-dev libxcursor-dev \ + libxrender-dev libxrandr-dev libxfixes-dev libxdamage-dev \ + libxcomposite-dev libxss-dev libxp-dev libxext-dev libxinerama-dev \ + libxft-dev libxfont-dev libxi-dev libxv-dev libxkbfile-dev \ + libxkbui-dev libxres-dev libxtst-dev libltdl7-dev libglu1-xorg-dev \ + libglut3-dev xserver-xephyr libdbus-1-dev + elif [ "$DISTRO" == "sample-distribution" ]; then + echo "sample distro" + # FIXME: put in whatever commands are needed to get a good list of + # dependencies for e and install themb - svn build tools etc. too. only + # put what is needed - there are optional libs like libtiiff/gif etc. + # but they hve no direct required to really suggested usefulness. + else + echo "Your distribution is not supported. Please adit this script and" + echo "add a section to detect your distribution and then to install" + echo "required packages for it." + fi +fi + +# make sure we have the prefix in the PATH for now +export PATH="$PREFIX/bin:$PATH" +export LD_LIBRARY_PATH="$PREFIX/lib:$LD_LIBRARY_PATH" +export PKG_CONFIG_PATH="$PREFIX/lib/pkgconfig:$PKG_CONFIG_PATH" + +CLEAN="no" + +# check if we have a svn tree already +if [ -d ./e/e/.svn ]; then + echo "---------------------------------------------------------------------" + echo "" + echo "Updating SVN" + CLEAN="yes" + cd ./e + for I in $MODULES; do + cd $I + svn update + cd .. + done + cd .. +else + # get svn + echo "---------------------------------------------------------------------" + echo "" + echo "Checking out SVN" + mkdir e + cd e + for I in $MODULES; do + svn co http://svn.enlightenment.org/svn/e/trunk/$I + done + cd .. +fi + +# enable error abort from now on +set -e + +# build and install it all +echo "---------------------------------------------------------------------" +echo "" +echo "Build..." +for I in $MODULES; do + pushd e/$I + echo "---------------------------------------------------------------------" + echo "" + echo "Building: "$I + echo "" + if [ $CLEAN == "yes" ]; then + make clean distclean || true + fi + echo "" + echo "Autofoo: "$I + echo "" + ./autogen.sh --prefix=$PREFIX + echo "" + echo "Compiling: "$I + echo "" + make + echo "" + echo "Installing: "$I + echo "" + if [ $ROOT_INSTALL == "yes" ]; then + sudo make install + sudo ldconfig + else + make install + fi + popd +done + +echo "---------------------------------------------------------------------" +echo "" +echo "NOTE: you will want to add "$PREFIX"/bin to your user's (and maybe" +echo " root's) PATH variable. (see your documentation on the PATH shell" +echo " variable for more information on how to do this)." +if [ $ROOT_INSTALL == "no" ]; then +echo "NOTE: you will want to add "$PREFIX"/lib to your user's (and maybe" +echo " root's) LD_LIBRARY_PATH variable. (see your documentation on the" +echo " LD_LIBRARY_PATH shell variable for more information on how to do" +echo " this)." +fi diff --git a/chroot-scripts/easy_e17.sh b/chroot-scripts/easy_e17.sh new file mode 100755 index 0000000..2d2fdad --- /dev/null +++ b/chroot-scripts/easy_e17.sh @@ -0,0 +1,1398 @@ +#!/usr/bin/env bash + +############################################################################# +# This script is a result of the ideas from the people of different e # +# channels at irc.freenode.net # +# It will checkout the repository and compile e17. # +# # +# License: BSD licence # +# Get the latest version at http://omicron.homeip.net/projects/#easy_e17.sh # +# Coded by Brian 'morlenxus' Miculcy (morlenxus@gmx.net) # +# # +last_changes="2010-03-16" # +version="1.3.2" # +############################################################################# + + +# Internal variables, most are available through cmd args! +tmp_path="/tmp/easy_e17" +logs_path="$tmp_path/install_logs" +status_path="$tmp_path/status" +src_cache_path="$tmp_path/src_cache" +src_path="$HOME/e17_src" + +src_url="http://svn.enlightenment.org/svn/e/trunk" +conf_files="/etc/easy_e17.conf $HOME/.easy_e17.conf $PWD/.easy_e17.conf" + +efl_basic="eina eet evas ecore efreet e_dbus embryo edje elementary" +efl_extra="imlib2 ethumb emotion elementary enlil ewl libast libeweather python-evas python-ecore python-e_dbus python-edje python-ethumb python-emotion python-elementary shellementary" +bin_basic="exchange e" +bin_extra="e_phys eyelight editje elicit elitaire empower emprint enki ephoto Eterm expedite exquisite exalt image-viewer rage" +e_modules_extra="alarm calendar cpu deskshow diskio drawer efm_nav efm_path efm_pathbar emu exalt-client execwatch eweather flame forecasts iiirk language mail mem moon mpdule net news notification penguins photo places quickaccess rain screenshot skel slideshow snow taskbar tclock tiling uptime weather winselector wlan" + +packages_basic="$efl_basic $bin_basic" +packages_half="$efl_basic $bin_basic $e_modules_extra" +packages_full="$efl_basic $efl_extra $bin_basic $bin_extra $e_modules_extra" +packages=$elf_basic #$packages_basic # default + +cmd_src_test="svn info" +cmd_src_list="svn list" +cmd_src_checkout="svn checkout" +cmd_src_update_conflicts_solve="svn update --accept theirs-full" +cmd_src_update_conflicts_ask="svn update" +src_mode="packages" +ignore_dirs="devs DOCS E16 TEST THEMES web" +autogen_args="" # evas:--enable-gl-x11 +linux_distri="" # if your distribution is wrongly detected, define it here +nice_level=0 # nice level (19 == low, -20 == high) +os=$(uname) # operating system +threads=2 # make -j + +animation="star" +online_source="http://omicron.homeip.net/projects/easy_e17/easy_e17.sh" # URL of latest stable release + + +############################################################################# +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 'amon' Zebulla" + echo -e " Daniel G. '_ke' Siegel" + echo -e " Stefan 'slax' Langner" + echo -e " Massimiliano 'Massi' Calamelli" + echo -e " Thomas 'thomasg' Gstaedtner" + echo -e " Roberto 'rex' Sigalotti" + 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 " Source path: $src_path" + echo " Source url: $src_url" + echo " Source mode: $src_mode" + echo " Logs path: $logs_path" + if [ "$linux_distri" ]; then + echo " OS: $os (Distribution: $linux_distri)" + else + echo " OS: $os" + fi + echo + echo " Packages: $packages" + if [ "$skip" ]; then echo " Skipping: $skip"; fi + if [ "$only" ]; then echo " Only: $only"; fi + echo + 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: install efl+e17" + echo " -u, --update = ACTION: update your installed software" + echo " --packagelist= = software package list:" + echo " - basic: only e17 (default)" + echo " - half: only e17 and extra modules" + echo " - full: simply everything" + 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:\033[0m" + echo " -i, --install = ACTION: install efl+e17" + echo " -u, --update = ACTION: update installed software" + echo " --only=,,... = ACTION: install ONLY named libs/apps" + echo " --packagelist= = software package list:" + echo " - basic: only e17 (default)" + echo " - half: only e17 and extra modules" + echo " - full: simply everything" + echo + echo " --srcupdate = update only the sources" + 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 " --srcpath= = change the default source path" + echo " --srcurl= = change the default source url" + echo " --srcmode= = checkout only required package source" + echo " or simply everthing (huge)" + echo " --asuser = do everything as the user, not as root" + echo " --no-sudopwd = sudo don't need a password..." + echo " -c, --clean = clean the sources before building" + echo " (more --cleans means more cleaning, up" + echo " to a maximum of three, which will" + echo " uninstall e17)" + echo " -s, --skip-srcupdate = don't update sources" + echo " -a, --ask-on-src-conflicts = ask what to do with a conflicting" + echo " source file" + 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 " --anim= = build animation:" + echo " - star: rotating star (default)" + echo " - weeh: waving man" + echo " -n --disable-notification = disable the osd notification" + 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" + echo " smp systems (default: 2 threads)" + echo " --autogen_args=:+,. = pass some options to autogen:" + echo " :+,:+..." + echo " --cflags=,,... = pass cflags to the gcc" + echo " --ldflags=,,... = pass ldflags 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 source path, add this line:" + echo " --srcpath=$HOME/enlightenment/e17_src" + fi fi + ;; + 1) + echo "- running some basic system checks" + echo "- source 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 + Darwin) + install_path="/opt/e17" + # ldconfig="/sbin/ldconfig" # FIXME: Someone with Darwin seeing this should check availability! + make="make" + export ACLOCAL_FLAGS="$ACLOCAL_FLAGS -I /opt/local/share/aclocal" + export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/opt/local/lib/pkgconfig" + export CPPFLAGS="$CPPFLAGS -I/opt/local/include" + export LDFLAGS="$LDFLAGS -Wl,-L/opt/local/lib" + ;; + FreeBSD) + install_path="/usr/local/e17" + ldconfig="/sbin/ldconfig" + make="gmake" + export ACLOCAL_FLAGS=" -I /usr/local/share/aclocal" + export CPPFLAGS="$CPPFLAGS -I/usr/local/include -I/usr/X11R6/include -I$install_path/include" + export CFLAGS="$CFLAGS -lintl -liconv -L/usr/local/lib -L/usr/X11R6/lib -L$install_path/lib -I/usr/local/include -I/usr/X11R6/include -I$install_path/include" # FIXME: Someone with FreeBSD seeing this should check if includes are needed here! + export LDFLAGS="$LDFLAGS -lexecinfo" + ;; + NetBSD) + install_path="/usr/pkg/e17" + ldconfig="config" + make="make" + export CFLAGS+="$CFLAGS -I/usr/pkg/include -I/usr/X11R7/include" + export CPPFLAGS+="$CPPFLAGS -I/usr/pkg/include -I/usr/X11R7/include" + export LDFLAGS+="$LDFLAGS -L/usr/pkg/include -L/usr/pkg/lib -L/usr/X11R7/lib" + ;; + + Linux) + install_path="/opt/e17" + ldconfig="/sbin/ldconfig" + make="make" + + 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 + ;; + SunOS) + install_path="/opt/e17" + ldconfig="$(which crle) -u" # there is no command like ldconfig on solaris! "crle" does nearly the same. + make="make" + ;; + *) + os="not supported" + logo 0 + set_title + exit 0 + ;; + esac +} + +function find_src_path () +{ + package=$1 + subdir=$2 + depth=$3 + cachefile=$src_cache_path/cache_`echo "$subdir" | tr '/' '_'` + + if [ $depth -gt 3 ]; then return; fi + + + if [ ! -e "$cachefile" ]; then + $cmd_src_list "$src_url/$subdir" | egrep "/$" >$cachefile + fi + contents=`cat $cachefile` + + for dir in $contents; do + if [ "$dir" == "$package/" ]; then + echo "$subdir/$dir" + return + fi + done + for dir in $contents; do + found=0 + for pkg in $packages; do + if [ "$dir" == "$pkg/" ]; then found=1; fi + done + if [ $found == 1 ]; then continue; fi + for idir in $ignore_dirs; do + if [ "$dir" == "$idir/" ]; then found=1; fi + done + if [ $found == 1 ]; then continue; fi + + svn_path=`find_src_path $package "$subdir/$dir" $(($depth+1))` + if [ "$svn_path" ]; then + echo "$svn_path" + return + fi + done +} + +function find_local_path () +{ + name=$1 + path="" + + for dir in `find "$src_path" -maxdepth 3 -type d -name "$name" | awk -F "$src_path" '{print $2}'`; do + found=0 + for idir in $ignore_dirs; do + if [ `echo "$dir" | grep -q "$idir"; echo $?` == 0 ]; then found=1; fi + done + if [ $found == 1 ]; then continue; fi + + if [ "${#dir}" -lt "${#path}" ] || [ -z "$path" ]; then + path=$dir + fi + done + + if [ "$path" ]; then echo "$src_path/$path"; fi +} + +function backoff_loop +{ + src_cmd=$1 + + backoff=30 + attempt=1; + + while [ 1 ]; do + $src_cmd | tee -a "$tmp_path/source_update.log" + if [ "${PIPESTATUS[0]}" -gt 0 ]; then + attempt=$(($attempt + 1)) + set_title "Source update failed, trying again in $backoff seconds..." + for (( i = $backoff / 2; i > 0; i-- )) do + echo -n -e "\rFAILED! Next attempt $attempt in \033[1m$i\033[0m seconds" + sleep 1 + done + echo -n -e "\r \r" + else + break + fi + done +} + +function get_src () +{ + cd "$src_path" + if [ "$src_mode" == "packages" ]; then + package=$1 + src_path_pkg="$src_path$package" + mkdir -p "$src_path_pkg" 2>/dev/null + + if [ "`$cmd_src_test $src_path_pkg &>/dev/null; echo $?`" == 0 ]; then + set_title "Updating sources in '$src_path_pkg' ..." + echo "- updating sources in '$src_path_pkg' ..." + + if [ "$ask_on_src_conflicts" ]; then + backoff_loop "$cmd_src_update_conflicts_ask $package" + else backoff_loop "$cmd_src_update_conflicts_solve $package"; fi + else + set_title "Checkout sources in '$src_path_pkg' ..." + + echo "- searching for direct source url for '$package' ..." + path=`find_src_path $package '' 1` + if [ "$path" ]; then + src_url_pkg="$src_url/$path" + + echo "- checkout sources in '$src_path_pkg' ..." + backoff_loop "$cmd_src_checkout $src_url_pkg $src_path_pkg" + else + echo "- direct source url not found, package moved to OLD/?" + fi + fi + elif [ "$src_mode" == "full" ]; then + if [ "`$cmd_src_test &>/dev/null; echo $?`" == 0 ]; then + set_title "Updating sources in '$src_path' ..." + echo "- updating sources in '$src_path' ..." + + if [ "$ask_on_src_conflicts" ]; then + backoff_loop "$cmd_src_update_conflicts_ask" + else backoff_loop "$cmd_src_update_conflicts_solve"; fi + else + set_title "Checkout sources in '$src_path' ..." + echo "- checkout sources in '$src_path' ..." + backoff_loop "$cmd_src_checkout $src_url $src_path" + fi + fi +} + +function build_each () +{ for pkg in $packages; do compile $pkg; 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 $status_path/$name.noerrors + case "$mode_needed" in + "sudo") + echo "$sudopwd" | sudo -S PKG_CONFIG_PATH="$PKG_CONFIG_PATH" PYTHONPATH="$PYTHONPATH" \ + nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $status_path/$name.noerrors & + ;; + *) + nice -n $nice_level $cmd >> "$logs_path/$name.log" 2>&1 && touch $status_path/$name.noerrors & + ;; + esac + + pid="$!" + rotate "$pid" "$name" +} + +function write_appname () +{ + name=$1 + hidden=$2 + cnt=${#name} + max=27 + + if [ "$hidden" ]; then + c=-3 + while [ ! $c = $cnt ]; do + echo -n " " + c=$(($c+1)) + done + else + echo -n "- $name " + fi + + while [ ! $cnt = $max ]; do + echo -n "." + cnt=$(($cnt+1)) + done + echo -n " " +} + +function compile () +{ + name=$1 + + write_appname "$name" + + for one in $skip; do + if [ "$name" == "$one" ]; then + echo "SKIPPED" + touch $status_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 $status_path/$name.skipped + return + fi + fi + + pkg_pos=$(($pkg_pos+1)) + + if [ -e "$status_path/$name.installed" ]; then + echo "previously installed" + return + fi + path=`find_local_path $name` + if [ ! -d "$path" ]; then + echo "SOURCEDIR NOT FOUND" + set_notification "critical" "Package '$name': sourcedir not found" + return + fi + cd "$path" + + rm -f $status_path/$name.noerrors + rm -f "$logs_path/$name.log" + + if [ $clean -ge 1 ]; then + if [ -e "Makefile" ]; then + if [ $clean -eq 1 ]; then + run_command "$name" "$path" "clean" "clean : " "$mode" "$make -j $threads clean" + if [ ! -e "$status_path/$name.noerrors" ]; then + if [ "$skip_errors" ]; then + write_appname "$name" "hidden" # clean might fail, that's ok + else + return + fi + fi + fi + if [ $clean -eq 2 ]; then + run_command "$name" "$path" "distclean" "distcln: " "$mode" "$make -j $threads clean distclean" + if [ ! -e "$status_path/$name.noerrors" ]; then + if [ "$skip_errors" ]; then + write_appname "$name" "hidden" # distclean might fail, that's ok + else + return + fi + fi + fi + if [ $clean -ge 3 ]; then + run_command "$name" "$path" "uninstall" "uninst : " "rootonly" "$make -j $threads uninstall clean distclean" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + + # 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 $status_path/$name.installed + fi + fi + 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 "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "make" "make: " "$mode" "$make -j $threads" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "install" "install: " "rootonly" "$make install" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + elif [ -e "bootstrap" ]; then + run_command "$name" "$path" "bootstrap" "bootstr: " "$mode" "./bootstrap" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "configure" "config: " "$mode" "./configure --prefix=$install_path $accache $args" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "make" "make: " "$mode" "$make -j $threads" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "install" "install: " "rootonly" "$make install" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + elif [ -e "Makefile.PL" ]; then + run_command "$name" "$path" "perl" "perl: " "$mode" "perl Makefile.PL prefix=$install_path $args" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "make" "make: " "$mode" "$make -j $threads" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "install" "install: " "rootonly" "$make install" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + elif [ -e "setup.py" ]; then + run_command "$name" "$path" "python" "python: " "$mode" "python setup.py build build_ext --include-dirs=$PYTHONINCLUDE $args" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "install" "install: " "rootonly" "python setup.py install --prefix=$install_path install_headers --install-dir=$PYTHONINCLUDE" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + elif [ -e "Makefile" ]; then + make_extra="PREFIX=$install_path" + run_command "$name" "$path" "make" "make: " "$mode" "$make $make_extra -j $threads" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + run_command "$name" "$path" "install" "install: " "rootonly" "$make $make_extra install" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + else + echo "no build system" + set_notification "critical" "Package '$name': no build system" + touch $status_path/$name.nobuild + return + fi + + if [ "$gen_docs" ]; then + if [ -e "gendoc" ]; then + run_command "$name" "$path" "docs" "docs : " "$mode" "sh gendoc" + if [ ! -e "$status_path/$name.noerrors" ] ; then return ; fi + fi + fi + + # All done, mark it as installed OK. + touch $status_path/$name.installed + rm -f $status_path/$name.noerrors + echo "ok" + set_notification "normal" "Package '$name': build successful" +} + +function rotate () +{ + pid=$1 + name=$2 + animation_state=1 + log_line="" + + case $animation in + "weeh") echo -n " " ;; + *) echo -n " " ;; + esac + while [ "`ps -p $pid -o comm=`" ]; do + last_line=`tail -1 "$logs_path/$name.log"` + if [ ! "$log_line" = "$last_line" ]; then + case $animation in + "weeh") + # waving man + echo -e -n "\b\b\b\b\b" + case $animation_state in + 1) + echo -n "[" + echo -n -e "\033[1m" + echo -n "\\o\\" + echo -n -e "\033[0m" + echo -n "]" + animation_state=2 + ;; + 2) + echo -n "[" + echo -n -e "\033[1m|o|\033[0m" + echo -n "]" + animation_state=3 + ;; + 3) + echo -n "[" + echo -n -e "\033[1m/o/\033[0m" + echo -n "]" + animation_state=4 + ;; + 4) + echo -n "[" + echo -n -e "\033[1m|o|\033[0m" + echo -n "]" + animation_state=5 + ;; + 5) + echo -n "[" + echo -n -e "\033[1m" + echo -n "\\o/" + echo -n -e "\033[0m" + echo -n "]" + animation_state=6 + ;; + 6) + echo -n "[" + echo -n -e "\033[1m|o|\033[0m" + echo -n "]" + animation_state=1 + ;; + + esac + ;; + *) + # rotating star + echo -e -n "\b\b\b" + case $animation_state in + 1) + echo -n "[" + echo -n -e "\033[1m|\033[0m" + echo -n "]" + animation_state=2 + ;; + 2) + echo -n "[" + echo -n -e "\033[1m/\033[0m" + echo -n "]" + animation_state=3 + ;; + 3) + echo -n "[" + echo -n -e "\033[1m-\033[0m" + echo -n "]" + animation_state=4 + ;; + 4) + echo -n "[" + echo -n -e "\033[1m" + echo -n "\\" + echo -n -e "\033[0m" + echo -n "]" + animation_state=1 + ;; + esac + ;; + esac + log_line=$last_line + fi + sleep 1 + done + + if [ -e "$status_path/$name.noerrors" ]; then + case $animation in + "weeh") del_lines 14 ;; + *) del_lines 12 ;; + esac + else + case $animation in + "weeh") del_lines 5 ;; + *) del_lines 3 ;; + esac + + echo -e "\033[1mERROR!\033[0m" + set_notification "critical" "Package '$name': build failed" + + 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 + set_title + exit 2 + fi + fi +} + +function del_lines () +{ + cnt=0 + max=$1 + while [ ! "$cnt" == "$max" ] + do + echo -n -e "\b \b" + cnt=$(($cnt+1)) + done +} + +function error () +{ + echo -e "\n\n\033[1mERROR: $1\033[0m\n\n" + set_title "ERROR: $1" + set_notification "critical" "Error: $1" + 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 set_notification () +{ + if [ -z "$DISPLAY" ] || [ "$notification_disabled" ]; then return; fi + notifier="$install_path/bin/e-notify-send" + urgency=$1 + text=$2 + + if [ -e "$notifier" ]; then + $notifier -u "$urgency" -t 5000 -i "$install_path/share/enlightenment/data/images/enlightenment.png" \ + -n "easy_e17.sh" "easy_e17.sh" "$text" &>/dev/null + fi +} + +function logfile_banner () +{ + cmd=$1 + logfile=$2 + echo "-------------------------------------------------------------------------------" >> "$logfile" + echo "EASY_E17 $version CMD: $cmd" >> "$logfile" + echo "-------------------------------------------------------------------------------" >> "$logfile" +} + +function cnt_pkgs () { + pkg_total=0 + pkg_pos=0 + + if [ -n "$only" ]; then + for each in $only; do + pkg_total=$(($pkg_total+1)) + done + else + # FIXME: Maybe some regexp which counts the spaces is faster? + for each in $packages; do + pkg_total=$(($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` + if [ "$remote_version" ]; then + 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 + else + echo -e "\033[1mERROR!\033[0m" + 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_files="$conf_files $value"; fi +done + +# remove duplicated configfile entries +for filea in $conf_files; do + exists=0 + for fileb in $tmp_conf_files; do + if [ "$filea" == "$fileb" ]; then + exists=1 + break + fi + done + + if [ $exists -eq 0 ]; then tmp_conf_files="$tmp_conf_files $filea"; fi +done +conf_files=$tmp_conf_files + +for file in $conf_files; do + if [ -e "$file" ]; then + # load configfile + for option in `cat "$file"`; do + easy_options="$easy_options $option" + done + fi +done + +# 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" == "--srcupdate" ] || + [ "$option" == "-v" ] || + [ "$option" == "--check-script-version" ]; then + logo 0 "Only one action allowed! (currently using '--$action' and '$option')" + exit 1 + fi + fi + + case "$option" in + "-i") action="install" ;; + "--install") action="install" ;; + "-u") action="update" ;; + "--update") action="update" ;; + "--packagelist") + case $value in + "half") packages="$packages_half" ;; + "full") packages="$packages_full" ;; + *) packages="$packages_basic" ;; + esac + ;; + "--conf") ;; + "--only") + if [ -z "$value" ]; then + logo 0 "Missing value for argument '$option'!" + exit 1 + fi + action="only" + only="`echo "$value" | tr -s '\,' '\ '` $only" + ;; + "-v") action="script" ;; + "--check-script-version") action="script" ;; + "--srcupdate") + action="srcupdate" + skip="$packages" + ;; + "--instpath") install_path="$value" ;; + "--srcpath") src_path="$value" ;; + "--srcurl") src_url="$value" ;; + "--srcmode") + case $value in + "packages") src_mode="packages" ;; + "full") src_mode="full" ;; + *) src_mode="packages" ;; + esac + ;; + "--asuser") asuser=1 ;; + "--no-sudopwd") no_sudopwd=1 ;; + "-c") clean=$(($clean + 1)) ;; + "--clean") clean=$(($clean + 1)) ;; + "-d") gen_docs=1 ;; + "--docs") gen_docs=1 ;; + "--postscript") easy_e17_post_script="$value" ;; + "-s") skip_srcupdate=1 ;; + "--skip-srcupdate") skip_srcupdate=1 ;; + "-a") ask_on_src_conflicts=1 ;; + "--ask-on-src-conflicts") ask_on_src_conflicts=1 ;; + "--skip") + if [ -z "$value" ]; then + logo 0 "Missing value for argument '$option'!" + exit 1 + fi + skip="`echo "$value" | tr -s '\,' '\ '` $skip" + ;; + "-e") skip_errors=1 ;; + "--skip-errors") skip_errors=1 ;; + "-w") wait=1 ;; + "--wait") wait=1 ;; + "--anim") + case $value in + "weeh") animation="weeh" ;; + *) animation="star" ;; + esac + ;; + "-n") notification_disabled=1 ;; + "--disable-notification") notification_disabled=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 1 + fi + threads=$value + ;; + "--autogen_args") + if [ -z "$value" ]; then + logo 0 "Missing value for argument '$option'!" + exit 1 + fi + autogen_args="$value" + ;; + "--cflags") + if [ -z "$value" ]; then + logo 0 "Missing value for argument '$option'!" + exit 1 + fi + CFLAGS="$CFLAGS `echo "$value" | tr -s '\,' '\ '`" + ;; + "--ldflags") + if [ -z "$value" ]; then + logo 0 "Missing value for argument '$option'!" + exit 1 + fi + LDFLAGS="$LDFLAGS `echo "$value" | tr -s '\,' '\ '`" + ;; + "--help") + fullhelp=1 + logo 0 + exit 0 + ;; + *) + logo 0 "Unknown argument '$option'!" + exit 1 + ;; + esac +done + + +# Sanity check stuff if doing everything as user. +if [ "$asuser" ] && [ $nice_level -lt 0 ]; then + nice_level=0 +fi + +# Fix issues with a slash at the end +if [ ! "${src_path:$((${#src_path}-1)):1}" == "/" ]; then + src_path="$src_path/" +fi + +# quit if some basic option is missing +if [ -z "$action" ] || [ -z "$install_path" ] || [ -z "$src_path" ]; then + logo 0 + exit 1 +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 "- creating script dirs ....... " +mkdir -p "$tmp_path" 2>/dev/null +mkdir -p "$logs_path" 2>/dev/null +mkdir -p "$status_path" 2>/dev/null +mkdir -p "$src_cache_path" 2>/dev/null +mkdir -p "$src_path" 2>/dev/null +chmod 700 "$tmp_path" +echo "ok" + +max=15 +for dep in automake gcc $make `echo "$cmd_src_checkout" | cut -d' ' -f1`; do + cnt=${#dep} + + echo -n "- '$dep' available " + while [ ! $cnt = $max ]; do + echo -n "." + cnt=$(($cnt+1)) + done + echo -n " " + + if [ `type $dep &>/dev/null; echo $?` -ne 0 ]; then + echo -e "\033[1mNOT INSTALLED!\033[0m" + error "Command missing!" + else + echo "ok" + fi +done + + +if [ ! "$action" == "srcupdate" ]; 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 + if [ "$no_sudopwd" == 1 ]; then + echo "ok" + else + 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 + rm -f "$tmp_path/sudo.test" + fi + echo + mode="sudo" + 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 "- setting env variables ...... " + export PATH="$install_path/bin:$PATH" + export LD_LIBRARY_PATH="$install_path/lib:$LD_LIBRARY_PATH" + export PKG_CONFIG_PATH="$install_path/lib/pkgconfig:$PKG_CONFIG_PATH" + export CPPFLAGS="$CPPFLAGS -I$install_path/include" + export LDFLAGS="$LDFLAGS -L$install_path/lib" + export CFLAGS="$CFLAGS" + export PYTHONPATH=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$install_path')" 2>/dev/null` + export PYTHONINCLUDE=`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc(prefix='$install_path')" 2>/dev/null` + echo "ok" + + echo -n "- checking lib-path in ldc ... " + case $os in + FreeBSD) ;; # TODO: placeholder + SunOS) ;; # TODO: 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" + 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 +fi + +echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" +echo + + +# sources +echo -e "\033[1m-----------------------------\033[7m Source checkout/update \033[0m\033[1m---------------------------\033[0m" +if [ -z "$skip_srcupdate" ]; then + rm "$tmp_path/source_update.log" 2>/dev/null + + cd "$src_path" + if [ "`$cmd_src_test &>/dev/null; echo $?`" == 0 ]; then + if [ "$src_mode" == "packages" ]; then + echo -e "\033[1m- Full checkout found, changed source mode to 'full'!\033[0m" + src_mode="full" + fi + fi + + if [ "$src_mode" == "packages" ]; then + if [ "$only" ]; then + for pkgo in $only; do + for pkga in $packages; do + if [ "$pkgo" == "$pkga" ]; then + get_src $pkgo + fi + done + done + else + for pkg in $packages; do + get_src $pkg + done + fi + elif [ "$src_mode" == "full" ]; then + get_src + fi +else + echo -e "\n - - - SKIPPED - - -\n" +fi +echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" +echo + + +if [ "$action" == "update" ] && [ -e "$tmp_path/source_update.log" ]; then + echo -e "\033[1m--------------------------------\033[7m Parsing updates \033[0m\033[1m-------------------------------\033[0m" + + for dir in `egrep "^[A|D|G|U] " "$tmp_path/source_update.log" | \ + awk '{print $2}' | sed 's,[^/]*$,,g' | sort -u`; do + add_pkg="" + found=0 + for idir in $ignore_dirs; do + if [ `echo "$dir" | grep -q "$idir"; echo $?` == 0 ]; then found=1; fi + done + if [ $found == 1 ]; then continue; fi + + for pkg in $packages; do + if [ `echo "$dir" | egrep -q "^$pkg/|/$pkg/"; echo $?` == 0 ]; then + if [ ! `echo "$only" | egrep -q "^$pkg | $pkg\$ | $pkg "; echo $?` == 0 ]; then + only="$pkg $only" + echo "- $pkg" + fi + break + fi + done + done + + if [ -z "$only" ]; then + echo -e "\n - - - NO UPDATES AVAILABLE - - -\n" + fi + + echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" + echo +fi + +cnt_pkgs # Count packages + + +echo -n "-> PREPARING FOR PHASE 2..." +set_title "Preparing for phase 2... compilation & installation" +sleep 5 + +if [ "$action" == "install" ]; then + set_notification "normal" "Now building packages..." +elif [ "$action" == "only" ]; then + set_notification "normal" "Now building following packages: $only" +elif [ "$action" == "update" ]; then + if [ "$only" ]; then + set_notification "normal" "Now building following packages: $only" + else set_notification "normal" "Everything is up to date, nothing to build"; fi +fi +logo 2 +echo -e "\033[1m------------------------------\033[7m Installing packages \033[0m\033[1m-----------------------------\033[0m" +pkg_pos=0 +build_each +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 + if [ "$file" == "$logs_path/*.log" ]; then break; fi + + pkg=`basename "$file" | cut -d'.' -f1` + if [ -e "$status_path/$pkg.installed" ]; then + packages_installed="$packages_installed $pkg" + else + if [ -e "$status_path/$pkg.skipped" ]; then + packages_skipped="$packages_skipped $pkg" + else + if [ -e "$status_path/$pkg.nobuild" ]; then + packages_nobuild="$packages_nobuild $pkg" + else packages_failed="$packages_failed $pkg"; 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 pkg in $packages_installed; do + rm "$status_path/$pkg.installed" 2>/dev/null + rm "$logs_path/$pkg.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 pkg in $packages_failed; do + echo "- $pkg (error log: $logs_path/$pkg.log)" + done + echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" + echo + set_notification "critical" "Script finished with build errors" +else + set_notification "normal" "Script finished successful" +fi + +if [ "$action" == "install" ]; then + echo + echo "INSTALL NOTES:" + echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" + echo "The most incredible and really unbelievable dream has become true:" + echo "You compiled e17 successfully!" + 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" +fi + +echo +echo "ADD THESE ENVIRONMENT VARIABLES:" +echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" +echo "export PATH=\"$install_path/bin:\$PATH\"" +echo "export PYTHONPATH=\"`python -c \"import distutils.sysconfig; print distutils.sysconfig.get_python_lib(prefix='$install_path')\" 2>/dev/null`:\$PYTHONPATH\"" +echo "export LD_LIBRARY_PATH=\"$install_path/lib:\$LD_LIBRARY_PATH\"" +echo -e "\033[1m--------------------------------------------------------------------------------\033[0m" +echo + +# 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 + +set_title +if [ "$packages_failed" ]; then + exit 2 +else exit 0; fi diff --git a/inc/chroot-functions.inc.sh b/inc/chroot-functions.inc.sh index 5693a54..35f2589 100644 --- a/inc/chroot-functions.inc.sh +++ b/inc/chroot-functions.inc.sh @@ -1,4 +1,5 @@ chroot-exec () { + export HOME="/root" if [ $(mount |grep -c $BROOT_BUILDROOT_PATH/dev) -eq 0 ]; then setupBindmounts fi @@ -6,6 +7,7 @@ chroot-exec () { } chroot-aptinstall () { + export HOME="/root" if [ $(mount |grep -c $BROOT_BUILDROOT_PATH/dev) -eq 0 ]; then setupBindmounts fi diff --git a/inc/helper.inc.sh b/inc/helper.inc.sh index 00c1915..6f63dfe 100644 --- a/inc/helper.inc.sh +++ b/inc/helper.inc.sh @@ -3,6 +3,7 @@ setupBindmounts() { mount -o bind /proc $BROOT_BUILDROOT_PATH/proc mount -t devtmpfs dev $BROOT_BUILDROOT_PATH/dev chroot $BROOT_BUILDROOT_PATH mount -t devpts devpts /dev/pts + [ "x$(cat /proc/mounts | grep -q "/tmp/deb")" == "x" ] && mount -o bind /tmp/deb $BROOT_BUILDROOT_PATH/var/cache/apt/archives } destroyBindmounts() { diff --git a/tasks/build_e.sh b/tasks/build_e.sh new file mode 100644 index 0000000..9dc40c7 --- /dev/null +++ b/tasks/build_e.sh @@ -0,0 +1,18 @@ +build_e_package_dependencies="buildtools" + +build_e() { + local ME=build_busybox + chroot-aptinstall automake pkgconfig debus-1-dev liblua5.1-0-dev \ + xterm make gcc bison flex subversion \ + automake1.10 autoconf autoconf-archive libtool gettext \ + libc6-dev \ + zlib1g-dev libjpeg62-dev \ + libpng12-dev libfreetype6-dev \ + libxrender-dev libx11-dev libxinerama-dev \ + libxss-dev libxext-dev libxrandr-dev libxp-dev \ + libxfixes-dev libxdamage-dev libxcursor-dev \ + libpam0g-dev doxygen + + echo " Building e" + chroot-exec /root/bin/build-e.sh >> $BROOT_LOG.$ME +} diff --git a/tasks/shell.task.sh b/tasks/shell.task.sh new file mode 100644 index 0000000..cf38adc --- /dev/null +++ b/tasks/shell.task.sh @@ -0,0 +1,8 @@ +shell() { + if [ ! -e $BROOT_BUILDROOT_PATH/bootstraped ]; then + echo " Can't find buildroot." + exit 13 + fi + echo " Switching to chroot" + chroot-exec /bin/bash +} -- cgit v1.2.3-55-g7522