Skip to content

Instantly share code, notes, and snippets.

@ViktorNova
Last active August 29, 2015 14:10
Show Gist options
  • Save ViktorNova/643ce82f0d20130b0168 to your computer and use it in GitHub Desktop.
Save ViktorNova/643ce82f0d20130b0168 to your computer and use it in GitHub Desktop.
#!/bin/bash
#~ NINETEEN.SH
#~ This script allows you to easily install/update Enlightenment 19 stable on
#~ Ubuntu 14.04 LTS, or remove E19 from your system.
#~ Tip:
#~ Get the Faenza and Faience icon sets for your enlightened desktop before
#~ running the script.
#~ See http://www.noobslab.com/2014/06/faience-and-faenza-icons-for.html
#~ To execute the script:
#~ 1. Open Terminal
#~ 2. Change to the download folder
#~ 3. Make the script executable with chmod +x
#~ 4. Run it with ./nineteen.sh
#~ Warning:
#~ Enlightenment programs installed from .deb packages (or tarballs) will
#~ inevitably conflict with E19 programs compiled from source code, do NOT mix
#~ source code with precompiled binaries!
#~ Written by Philippe Jean Guillaumie (batden AT sfr DOT fr).
#~ Feel free to use this script as you see fit.
#~ Modified by Thiago Martins (thiagocmartinsc AT gmail DOT com).
#~ Comments:
#~ http://ubuntuforums.org/showthread.php?t=2203190
#~ ChangeLog:
#~ 2014-05-22 add warning.
#~ 2014-05-24 add libbluetooth-dev to dependencies.
#~ 2014-05-26 add link to ubuntuforums.
#~ 2014-05-31 do not disable connman module.
#~ 2014-06-01 add themes folder for elementary.
#~ 2014-06-02 add targets to deep_clean function.
#~ 2014-06-05 add linux-tools to bin_deps function.
#~ 2014-06-07 update noobslab link.
#~ 2014-08-06 add grive detection.
#~ 2014-08-13 add recommendation.
#~ 2014-08-19 add more targets to deep_clean function.
#~ 2014-09-16 add option to egrep.
#~ 2014-09-19 moving to E19 stable version.
trap '{ printf "\n$bdr%s $off%s\n\n" " KEYBOARD INTERRUPT."; exit 130; }' INT
#~ VARIABLES
bld="\e[1m" #~ Bold text.
bdr="\e[1;31m" #~ Bold red text.
bdg="\e[1;32m" #~ Bold green text.
bdy="\e[1;33m" #~ Bold yellow text.
off="\e[0m" #~ Turn off ansi colors.
export CPPFLAGS=-I/usr/local/include
export LDFLAGS=-L/usr/local/lib
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export CC="ccache gcc"
export CXX="ccache g++"
NCPU="$(getconf _NPROCESSORS_ONLN)"
NJOBS="$((NCPU*2))"
export MAKE="make -j $NJOBS"
PREFIX=/usr/local
E19="$HOME/Enlightenment19"
TITLE="wmctrl -r :ACTIVE: -N"
GEN="./configure --prefix=$PREFIX"
RELEASE=$(lsb_release -sc)
CODE=$(locale | grep LANGUAGE | cut -d= -f2 | cut -d_ -f1)
DROPB="https://dl.dropboxusercontent.com/u/"
DOCUDIR=$(test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \
source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
echo ${XDG_DOCUMENTS_DIR:-$HOME})
DEPS_EN="aspell-$CODE manpages imagemagick xserver-xephyr \
manpages-dev automake autopoint build-essential ccache \
check cowsay doxygen freeglut3-dev git libasound2-dev \
libblkid-dev libbluetooth-dev libbullet-dev libfontconfig1-dev \
libfreetype6-dev libfribidi-dev libgif-dev libglib2.0-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libharfbuzz-dev libiconv-hook-dev libjpeg-dev libblkid-dev \
libluajit-5.1-dev libmount-dev libpam0g-dev libpng12-dev \
libpoppler-dev libpulse-dev libraw-dev librsvg2-dev \
libsndfile1-dev libspectre-dev libssl-dev libtiff5-dev libtool \
libudev-dev libudisks2-dev libunibreak-dev libvlc-dev libwebp-dev \
libxcb-shape0-dev libxcb-keysyms1-dev libxcomposite-dev \
libxcursor-dev libxine-dev libxinerama-dev libxp-dev libxrandr-dev \
libxss-dev libxtst-dev ragel valgrind wmctrl"
TRIM_EN=${DEPS_EN:46}
DEPS="aspell-$CODE manpages.$CODE imagemagick xserver-xephyr \
manpages-dev manpages-$CODE-dev manpages-$CODE-extra automake \
autopoint build-essential ccache check cowsay doxygen freeglut3-dev \
git libasound2-dev libblkid-dev libbluetooth-dev libbullet-dev \
libfontconfig1-dev libfreetype6-dev libfribidi-dev \
libgif-dev libglib2.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libharfbuzz-dev libiconv-hook-dev \
libjpeg-dev libblkid-dev libluajit-5.1-dev libmount-dev libpam0g-dev \
libpng12-dev libpoppler-dev libpulse-dev libraw-dev librsvg2-dev \
libsndfile1-dev libspectre-dev libssl-dev libtiff5-dev libtool \
libudev-dev libudisks2-dev libunibreak-dev libvlc-dev libwebp-dev \
libxcb-shape0-dev libxcb-keysyms1-dev libxcomposite-dev \
libxcursor-dev libxine-dev libxinerama-dev libxp-dev libxrandr-dev \
libxss-dev libxtst-dev ragel valgrind wmctrl"
TRIM=${DEPS:48}
GETEFL="wget -qO- http://download.enlightenment.org/rel/libs/efl/efl-1.11.3.tar.gz | tar xz --transform 's/^efl-1.11.3/efl/'"
GETEVL="wget -qO- http://download.enlightenment.org/rel/libs/evas_generic_loaders/evas_generic_loaders-1.11.2.tar.gz | tar xz --transform 's/^evas_generic_loaders-1.11.2/evas_generic_loaders/'"
GETEGP="wget -qO- http://download.enlightenment.org/rel/libs/emotion_generic_players/emotion_generic_players-1.11.0.tar.gz | tar xz --transform 's/^emotion_generic_players-1.11.0/emotion_generic_players/'"
GETELM="wget -qO- http://download.enlightenment.org/rel/libs/elementary/elementary-1.11.3.tar.gz | tar xz --transform 's/^elementary-1.11.3/elementary/'"
GETE19="wget -qO- http://download.enlightenment.org/rel/apps/enlightenment/enlightenment-0.19.1.tar.gz | tar xz --transform 's/^enlightenment-0.19.1/enlightenment/'"
GETETY="wget -qO- http://download.enlightenment.org/rel/apps/terminology/terminology-0.7.0.tar.gz | tar xz --transform 's/^terminology-0.7.0/terminology/'"
#GETEBPFL="wget -qO- http://download.enlightenment.org/rel/bindings/python/python-efl-1.11.0.tar.gz | tar xz --transform 's/^python-efl-1.11.0/python-efl/'"
#GETECON="wget -qO- http://download.enlightenment.org/rel/apps/econnman/econnman-1.1.tar.gz | tar xz --transform 's/^econnman-1.1/econnman/'"
EPROG="efl evas_generic_loaders emotion_generic_players elementary
enlightenment terminology"
#~ Enable this option to force messages to display in English
#~ during the build process (bug reporting):
#~ export LC_ALL=C
#~ TESTS
printf "\n$bld%s $off%s\n" "SYSTEM REQUIREMENTS CHECK..."; sleep 1
if [ $RELEASE == trusty ]; then
printf "\n$bdg%s $off%s\n\n" "Ubuntu $RELEASE... OK"; sleep 1
else
printf "\n$bdr%s $off%s\n\n" " UNSUPPORTED VERSION."
beep_exit
exit 1
fi
dpkg -l | egrep -w 'e17|enlightenment' &>/dev/null
if [ $? == 0 ]; then
printf "\n$bdr%s $off%s\n" " ANOTHER VERSION OF ENLIGHTENMENT IS INSTALLED."
printf "$bdr%s $off%s\n\n" " SCRIPT ABORTED."
beep_exit
exit 1
fi
if [ "$(pidof enlightenment)" ]; then
printf "\n$bdr%s $off%s\n\n" "
PLEASE LOG IN TO UBUNTU TO EXECUTE THIS SCRIPT."
beep_exit
exit 1
fi
#~ FUNCTIONS
warn () {
zenity --no-wrap --info --text "
If you proceed with the installation,\n\
nearly 1.5 GB of additional disk space\n\
will be used.\n
Bear in mind that running other applications\n\
during the build process will affect\n\
compilation time."
}
beep_exit () {
canberra-gtk-play --id="suspend-error" &>/dev/null
}
beep_ok () {
canberra-gtk-play --id="complete" &>/dev/null
}
bin_deps () {
sudo apt-get update && sudo apt-get dist-upgrade --yes
if [ ! -f $DOCUDIR/installed.txt ]; then
dpkg --get-selections > $DOCUDIR/installed.txt
sed -i '/linux-generic*/d' $DOCUDIR/installed.txt
sed -i '/linux-headers*/d' $DOCUDIR/installed.txt
sed -i '/linux-image*/d' $DOCUDIR/installed.txt
sed -i '/linux-signed*/d' $DOCUDIR/installed.txt
sed -i '/linux-tools*/d' $DOCUDIR/installed.txt
fi
if [ $CODE == en ]; then
sudo apt-get install --yes $DEPS_EN
sleep 1
else
sudo apt-get install --yes $DEPS
sleep 1
fi
}
ls_ppa () {
PPA=$(awk '$1 == "Package:" { print $2 }' \
/var/lib/apt/lists/*ppa*Packages)
for I in $(echo $PPA | xargs -n1 | sort -u); do
dpkg-query -Wf'${db:Status-abbrev}' $I &>/dev/null
if [ $? == 0 ]; then
sed -i "/$I/d" $DOCUDIR/installed.txt
fi
done
}
ls_dir () {
COUNT=$(ls -d */ | wc -l)
if [ $COUNT == 6 ]; then
printf "$bdg%s $off%s\n\n" "
All programs have been downloaded successfully."
sleep 2
elif [ $COUNT == 0 ]; then
printf "\n$bdr%s $off%s\n\n" "
PLEASE CHECK YOUR NETWORK CONNECTION AND TRY AGAIN."
#~ (Relaunch the script and select option #1)
beep_exit
exit 1
else
printf "\n$bdy%s $off%s\n\n" "
WARNING: ONLY $COUNT OF 6 PROGRAMS HAVE BEEN DOWNLOADED."
sleep 4
fi
}
build () {
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I
printf "\n$bld%s $off%s\n\n" "Building $I..."
case $I in
efl) $GEN --enable-harfbuzz --enable-image-loader-webp \
--enable-multisense --enable-xine --enable-xinput22
;;
enlightenment) $GEN --enable-mount-eeze --disable-packagekit \
--disable-wl-desktop-shell
;;
*) $GEN
;;
esac
echo
make
if [ $? -ne 0 ]; then
printf "\n$bdr%s $off%s\n\n" " BUILD ERROR—TRY AGAIN LATER."
#~ (Relaunch the script at a later time and select option #1)
rm -rf $E19/$I
beep_exit
exit 1
fi
sudo make install
sudo ldconfig
done
}
build_no_nls () {
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I
printf "\n$bld%s $off%s\n\n" "Building $I..."
case $I in
efl) $GEN --enable-image-loader-webp --enable-multisense \
--enable-xine --enable-xinput22 --disable-harfbuzz --disable-nls
;;
elementary) $GEN --disable-nls
;;
enlightenment) $GEN --enable-mount-eeze --disable-nls \
--disable-packagekit --disable-wl-desktop-shell
;;
*) $GEN
;;
esac
echo
make
if [ $? -ne 0 ]; then
printf "\n$bdr%s $off%s\n\n" " BUILD ERROR—TRY AGAIN LATER."
#~ (Relaunch the script at a later time and select option #1)
rm -rf $E19/$I
beep_exit
exit 1
fi
sudo make install
sudo ldconfig
echo
done
}
rebuild () {
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I
printf "\n$bld%s $off%s\n\n" "Updating $I..."
make distclean &>/dev/null
git reset --hard &>/dev/null
git pull
echo
case $I in
efl) $GEN --enable-harfbuzz --enable-image-loader-webp \
--enable-multisense --enable-xine --enable-xinput22
;;
enlightenment) $GEN --enable-mount-eeze --disable-packagekit \
--disable-wl-desktop-shell
;;
*) $GEN
;;
esac
echo
make
if [ $? -ne 0 ]; then
printf "\n$bdr%s $off%s\n\n" " BUILD ERROR—TRY AGAIN LATER."
#~ (Relaunch the script at a later time and select option #2)
beep_exit
exit 1
fi
sudo make install
sudo ldconfig
echo
done
}
rebuild_no_nls () {
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I
printf "\n$bld%s $off%s\n\n" "Updating $I..."
make distclean &>/dev/null
git reset --hard &>/dev/null
git pull
echo
case $I in
efl) $GEN --enable-image-loader-webp --enable-multisense \
--enable-xine --enable-xinput22 --disable-harfbuzz --disable-nls
;;
elementary) $GEN --disable-nls
;;
enlightenment) $GEN --enable-mount-eeze --disable-nls \
--disable-packagekit --disable-wl-desktop-shell
;;
*) $GEN
;;
esac
echo
make
if [ $? -ne 0 ]; then
printf "\n$bdr%s $off%s\n\n" " BUILD ERROR—TRY AGAIN LATER."
#~ (Relaunch the script at a later time and select option #2)
beep_exit
exit 1
fi
sudo make install
sudo ldconfig
echo
done
}
remove () {
printf "\n$bld%s $off%s\n\n" "Cleaning $I..."
sudo make uninstall &>/dev/null
make maintainer-clean &>/dev/null
echo
}
deep_clean () {
printf "\n$bld%s $off%s\n\n" "Deeper cleaning..."; sleep 1
cd $E19
sudo rm -rf enlightenment/
sudo rm -rf elementary/
sudo rm -rf emotion_generic_players/
sudo rm -rf evas_generic_loaders/
sudo rm -rf terminology/
sudo rm -rf efl/
rm custom* &>/dev/null
cd $HOME
rm -rf Enlightenment19/
rm -rf .e/
rm -rf .elementary/
rm -rf .cache/efreet/
rm -rf .cache/evas_gl_common_caches/
rm -rf .config/terminology/
cd /usr/local/etc/
sudo rm -rf enlightenment/
cd /usr/local/include/
sudo rm -rf ecore*
sudo rm -rf edje*
sudo rm -rf eet*
sudo rm -rf eeze*
sudo rm -rf efl*
sudo rm -rf efreet*
sudo rm -rf eina*
sudo rm -rf eio*
sudo rm -rf eldbus*
sudo rm -rf elementary*
sudo rm -rf embryo*
sudo rm -rf emotion*
sudo rm -rf enlightenment*
sudo rm -rf eo*
sudo rm -rf ephysics*
sudo rm -rf ethumb*
sudo rm -rf evas*
cd /usr/local/lib/
sudo rm -rf ecore*
sudo rm -rf edje*
sudo rm -rf eeze*
sudo rm -rf efl*
sudo rm -rf efreet*
sudo rm -rf elementary*
sudo rm -rf emotion*
sudo rm -rf enlightenment*
sudo rm -rf eo*
sudo rm -rf ephysics*
sudo rm -rf ethumb*
sudo rm -rf evas*
sudo rm -rf libecore*
sudo rm -rf libedje*
sudo rm -rf libeet*
sudo rm -rf libeeze*
sudo rm -rf libefreet*
sudo rm -rf libeina*
sudo rm -rf libeio*
sudo rm -rf libeldbus*
sudo rm -rf libelementary*
sudo rm -rf libembryo*
sudo rm -rf libemotion*
sudo rm -rf libeo*
sudo rm -rf libeolian*
sudo rm -rf libephysics*
sudo rm -rf libethumb*
sudo rm -rf libevas*
cd /usr/local/lib/cmake/
sudo rm -rf Ecore*
sudo rm -rf Edje*
sudo rm -rf Eet*
sudo rm -rf Eeze*
sudo rm -rf Efreet*
sudo rm -rf Eina*
sudo rm -rf Eldbus*
sudo rm -rf Elementary*
sudo rm -rf Eo*
sudo rm -rf Ethumb*
sudo rm -rf Evas*
cd /usr/local/share/
sudo rm -rf dbus*
sudo rm -rf ecore*
sudo rm -rf edje*
sudo rm -rf eeze*
sudo rm -rf efreet*
sudo rm -rf elementary*
sudo rm -rf elua*
sudo rm -rf embryo*
sudo rm -rf emotion*
sudo rm -rf enlightenment*
sudo rm -rf eo*
sudo rm -rf ethumb*
sudo rm -rf evas*
sudo rm -rf terminology*
cd /usr/local/share/applications/
sudo sed -i '/enlightenment_filemanager/d' mimeinfo.cache
cd /usr/share/
sudo rm -rf xsessions/enlightenment.desktop
cd unity-greeter/
sudo rm custom_enlightenment_badge.png &>/dev/null
cd ../dbus-1/services/
sudo rm -rf org.enlightenment.Efreet.service
sudo rm -rf org.enlightenment.Ethumb.service
echo
}
#~ SELECTION
INPUT=0
printf "$bld%s $off%s\n" "Please enter the number of your choice."
if [ $INPUT -lt 1 ]; then
printf "\n$bld%s $off%s\n" "1. Install Enlightenment 19."
printf "$bld%s $off%s\n" "2. Update my E19 installation."
printf "$bld%s $off%s\n" "3. Uninstall E19 programs only."
printf "$bld%s $off%s\n\n" "4. Uninstall E19 programs AND \
binary dependencies."
sleep 1
printf "$bld%s $off%s\n\n" "(Or press Ctrl-C to quit)"
read INPUT
fi
#~ INSTALLATION
if [ $INPUT == 1 ]; then
clear; printf "\n$bld%s $off%s\n\n" "
Proceeding to install Enlightenment 19..."
canberra-gtk-play --id="window-attention" &>/dev/null
warn 2>/dev/null; sleep 1
if grep -q ppa /var/lib/apt/lists/*ppa* &>/dev/null; then
bin_deps
ls_ppa
else
unset -f ls_ppa
bin_deps
fi
cd $HOME; mkdir -p $E19; cd $E19
$TITLE "Downloading Source Code..."
printf "\n$bld%s $off%s\n\n" "Fetching Enlightenment tarballs..."
echo -n efl... ; eval ${GETEFL} ; echo done.
echo -n evas_generic_loaders... ; eval ${GETEVL} ; echo done.
echo -n emotion_generic_players... ; eval ${GETEGP}; echo done.
echo -n elementary... ; eval ${GETELM}; echo done.
echo -n enlightenment... ; eval ${GETE19}; echo done.
echo -n terminology... ; eval ${GETETY}; echo done.
# echo -n python-efl... ; eval ${GETEBPFL}; echo done.
# echo -n econnman... ; eval ${GETECON}; echo done.
ls_dir
$TITLE "Processing Enlightenment Programs..."
echo
read -p "Build internationalization support in Enlightenment? [Y/n] " answer
case $answer in
[yY] ) build
;;
[nN] ) build_no_nls
;;
* ) build
;;
esac
printf "\n%s\n\n" "Almost done..."
wget $DROPB/58695863/custom_enlightenment_badge.png &>/dev/null
sudo cp -f custom_enlightenment_badge.png /usr/share/unity-greeter
mkdir -p $HOME/.elementary/themes/
sudo ln -sf \
/usr/local/share/dbus-1/services/org.enlightenment.Ethumb.service \
/usr/share/dbus-1/services/org.enlightenment.Ethumb.service
sudo ln -sf \
/usr/local/share/dbus-1/services/org.enlightenment.Efreet.service \
/usr/share/dbus-1/services/org.enlightenment.Efreet.service
sudo ln -sf /usr/local/share/xsessions/enlightenment.desktop \
/usr/share/xsessions/enlightenment.desktop
sudo updatedb
beep_ok
$TITLE "Installation Complete."
echo; cowsay "That's All Folks!"; echo
#~ UPDATE
elif [ $INPUT == 2 ]; then
clear; printf "\n$bld%s $off%s\n\n" "
Proceeding to update Enlightenment 19..."
sleep 1
printf "\n$bld%s $off%s\n\n" "Checking required Ubuntu packages..."
if [ $CODE == en ]; then
sudo apt-get install --yes $DEPS_EN
sleep 1
else
sudo apt-get install --yes $DEPS
sleep 1
fi
echo
$TITLE "Processing Enlightenment Programs..."
echo
read -p "Build internationalization support in Enlightenment? [Y/n] " answer
case $answer in
[yY] ) rebuild; echo
;;
[nN] ) rebuild_no_nls; echo
;;
* ) rebuild; echo
;;
esac
printf "\n%s\n\n" "Almost done..."
cd $E19
wget -nc $DROPB/58695863/custom_enlightenment_badge.png &>/dev/null
sudo cp -f custom_enlightenment_badge.png /usr/share/unity-greeter
mkdir -p $HOME/.elementary/themes/
sudo ln -sf \
/usr/local/share/dbus-1/services/org.enlightenment.Ethumb.service \
/usr/share/dbus-1/services/org.enlightenment.Ethumb.service
sudo ln -sf \
/usr/local/share/dbus-1/services/org.enlightenment.Efreet.service \
/usr/share/dbus-1/services/org.enlightenment.Efreet.service
sudo ln -sf /usr/local/share/xsessions/enlightenment.desktop \
/usr/share/xsessions/enlightenment.desktop
sudo updatedb
beep_ok
$TITLE "Update Complete."
echo; cowsay -f www "That's All Folks!"; echo
#~ UNINSTALL E19
elif [ $INPUT == 3 ]; then
clear; printf "\n$bld%s $off%s\n\n" "
Proceeding to uninstall Enlightenment 19..."
sleep 1
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I && remove
done
deep_clean
sudo updatedb
beep_ok
echo; cowsay -d "That's All Folks!"; echo
#~ COMPLETE UNINSTALL
elif [ $INPUT == 4 ]; then
clear; printf "\n$bld%s $off%s\n\n" "
Complete uninstallation of E19 and deps..."
sleep 1
if [ -x /usr/bin/grive ]; then
sleep 1
printf "$bdr%s $off%s\n" " GRIVE IS INSTALLED ON YOUR SYSTEM."
printf "$bdr%s $off%s\n" " GOOGLE DRIVE WILL NOT FUNCTION PROPERLY IF"
printf "$bdr%s $off%s\n" " YOU REMOVE ALL THE E19 DEVELOPMENT DEPS."
printf "$bdr%s $off%s\n\n" " SORRY FOR THE INCONVENIENCE."
#~ (Relaunch the script and select option #3)
beep_exit
exit 1
fi
for I in $EPROG; do
$TITLE "Processing $I..."
cd $E19/$I && remove
done
deep_clean
$TITLE "Processing Ubuntu Packages..."
printf "\n$bld%s $off%s\n\n" "Removing binary dependencies..."
if [ $CODE == en ]; then
sudo apt-get autoremove $TRIM_EN
sleep 1
else
sudo apt-get autoremove $TRIM
sleep 1
fi
if [ $CODE == en ]; then
sudo apt-get autoremove $TRIM_EN
sleep 1
else
sudo apt-get autoremove $TRIM
sleep 1
fi
sudo dpkg --set-selections < $DOCUDIR/installed.txt
sudo apt-get dselect-upgrade
sudo apt-get update
sudo apt-get dist-upgrade
cd $HOME
rm -rf .ccache/
rm $DOCUDIR/installed.txt &>/dev/null
sudo apt-get autoremove --purge
sudo dpkg --purge $(COLUMNS=200 dpkg -l | grep "^rc" | tr -s ' ' | \
cut -d ' ' -f 2) &>/dev/null
sudo updatedb
beep_ok
printf "\n%s\n\n" "Uninstall Complete."
else
echo; beep_exit; exit 1
fi
#!/bin/bash
#
# NINETEEN.SH
# This script allows you to install/update Enlightenment 19 git version on
# Ubuntu 14.04 LTS or Debian wheezy/sid, or remove E19 git from your system.
# Originally from: http://ubuntuforums.org/showthread.php?t=2203190
# By: Philippe J. Guillaumie (batden AT sfr DOT fr).
# Additional updates by: Bryan Hundven (bryanhundven AT gmail DOT com).
#
# Tip:
# Running Ubuntu? Get the Faenza icon set for your enlightened desktop before
# running the script for the first time!
# See http://www.noobslab.com/2013/10/faience-and-faenza-icons-for.html
#
# If you are using Debian, you can find Faience theme here:
# http://gnome-look.org/content/show.php/Faenza?content=128143
# and the Faenza theme here:
# http://gnome-look.org/content/show.php/New+Faience+icon+pack?content=157437
#
# To execute the script:
# 1. Open Terminal
# 2. Change to the download folder
# 3. Make the script executable with chmod +x
# 4. Run it with ./nineteen.sh
#
# Feel free to use this script as you see fit.
# VARIABLES
bld="\e[1m" # Bold text.
bdr="\e[1;31m" # Bold red text.
bdg="\e[1;32m" # Bold green text.
bdy="\e[1;33m" # Bold yellow text.
off="\e[0m" # Turn off ansi colors.
msg_bold () {
printf "\n${bld}%s ${off}%s\n" "$@"
}
msg_red () {
printf "\n${bdr}%s ${off}%s\n" "$@"
}
msg_green () {
printf "\n${bdg}%s ${off}%s\n" "$@"
}
msg_yellow () {
printf "\n${bdy}%s ${off}%s\n" "$@"
}
trap '{ msg_red " KEYBOARD INTERRUPT."; exit 130; }' INT
PREFIX="/usr/local"
export CPPFLAGS="-I/usr/local/include -I${PREFIX}/include"
export LDFLAGS="-L/usr/local/lib -L${PREFIX}/lib"
export PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:${PREFIX}/lib/pkgconfig"
export CC="ccache gcc"
export CXX="ccache g++"
NCPU=$(getconf _NPROCESSORS_ONLN)
NJOBS=$((NCPU*2))
export MAKE="make -j ${NJOBS}"
E19="${HOME}/Enlightenment19"
TITLE="wmctrl -r :ACTIVE: -N"
GEN="./configure --prefix=${PREFIX}"
RELEASE="$(lsb_release -sc)"
CODE="$(locale | grep 'LANG=' | cut -d= -f2 | cut -d_ -f1)"
DROPB="https://dl.dropboxusercontent.com/u/"
NO_NLS=0
DOCUDIR="$(test -f ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs && \
source ${XDG_CONFIG_HOME:-~/.config}/user-dirs.dirs
echo ${XDG_DOCUMENTS_DIR:-$HOME})"
DEPS_EN="aspell-${CODE} manpages imagemagick xserver-xephyr \
manpages-dev automake autopoint build-essential ccache \
check doxygen freeglut3-dev git libasound2-dev \
libblkid-dev libbullet-dev libfontconfig1-dev \
libfreetype6-dev libfribidi-dev libgif-dev libglib2.0-dev \
libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
libharfbuzz-dev libiconv-hook-dev libjpeg-dev libblkid-dev \
libluajit-5.1-dev libmount-dev libpam0g-dev libpng12-dev \
libpoppler-dev libpulse-dev libraw-dev librsvg2-dev \
libsndfile1-dev libspectre-dev libssl-dev libtiff5-dev libtool \
libudev-dev libudisks2-dev libunibreak-dev libvlc-dev libwebp-dev \
libxcb-shape0-dev libxcb-keysyms1-dev libxcomposite-dev \
libxcursor-dev libxine-dev libxinerama-dev libxp-dev libxrandr-dev \
libxss-dev libxtst-dev ragel valgrind wmctrl cython"
TRIM_EN="${DEPS_EN:46}"
DEPS="aspell-${CODE} manpages.${CODE} imagemagick xserver-xephyr \
manpages-dev manpages-${CODE}-dev manpages-${CODE}-extra automake \
autopoint build-essential ccache check doxygen freeglut3-dev \
git libasound2-dev libblkid-dev libbullet-dev \
libfontconfig1-dev libfreetype6-dev libfribidi-dev \
libgif-dev libglib2.0-dev libgstreamer1.0-dev \
libgstreamer-plugins-base1.0-dev libharfbuzz-dev libiconv-hook-dev \
libjpeg-dev libblkid-dev libluajit-5.1-dev libmount-dev libpam0g-dev \
libpng12-dev libpoppler-dev libpulse-dev libraw-dev librsvg2-dev \
libsndfile1-dev libspectre-dev libssl-dev libtiff5-dev libtool \
libudev-dev libudisks2-dev libunibreak-dev libvlc-dev libwebp-dev \
libxcb-shape0-dev libxcb-keysyms1-dev libxcomposite-dev \
libxcursor-dev libxine-dev libxinerama-dev libxp-dev libxrandr-dev \
libxss-dev libxtst-dev ragel valgrind wmctrl cython"
TRIM="${DEPS:48}"
GETEFL="wget -qO- http://download.enlightenment.org/rel/libs/efl/efl-1.11.2.tar.gz | tar xz --transform 's/^efl-1.11.2/efl/'"
GETEVL="wget -qO- http://download.enlightenment.org/rel/libs/evas_generic_loaders/evas_generic_loaders-1.11.2.tar.gz | tar xz --transform 's/^evas_generic_loaders-1.11.2/evas_generic_loaders/'"
GETEGP="wget -qO- http://download.enlightenment.org/rel/libs/emotion_generic_players/emotion_generic_players-1.11.0.tar.gz | tar xz --transform 's/^emotion_generic_players-1.11.0/emotion_generic_players/'"
GETELM="wget -qO- http://download.enlightenment.org/rel/libs/elementary/elementary-1.11.2.tar.gz | tar xz --transform 's/^elementary-1.11.2/elementary/'"
GETE19="wget -qO- http://download.enlightenment.org/rel/apps/enlightenment/enlightenment-0.19.0.tar.gz | tar xz --transform 's/^enlightenment-0.19.0/enlightenment/'"
GETETY="wget -qO- http://download.enlightenment.org/rel/apps/terminology/terminology-0.6.1.tar.gz | tar xz --transform 's/^terminology-0.6.1/terminology/'"
GETEBPFL="wget -qO- http://download.enlightenment.org/rel/bindings/python/python-efl-1.10.0.tar.gz | tar xz --transform 's/^python-efl-1.10.0/python-efl/'"
GETECON="wget -qO- http://download.enlightenment.org/rel/apps/econnman/econnman-1.1.tar.gz | tar xz --transform 's/^econnman-1.1/econnman/'"
EPROG="efl evas_generic_loaders emotion_generic_players elementary
enlightenment terminology python-efl econnman"
tmp_count=0
EPROG_COUNT=$(for i in $(echo ${EPROG}); do tmp_count=$((tmp_count+1)); done && echo ${tmp_count})
unset tmp_count
# Enable this option to force messages to display in English
# during the build process (bug reporting):
# export LC_ALL=C
# TESTS
msg_bold "SYSTEM REQUIREMENTS CHECK..."; sleep 1
dpkg -l | egrep 'e17|enlightenment' &>/dev/null
if [ $? == 0 ]; then
msg_red " ANOTHER VERSION OF ENLIGHTENMENT IS INSTALLED."
msg_red " SCRIPT ABORTED."
exit 1
fi
if [ $(pidof enlightenment) ]; then
msg_red "PLEASE LOG IN TO UBUNTU TO EXECUTE THIS SCRIPT."
exit 1
fi
if [ "${RELEASE}" == "trusty" ]; then
msg_green "Ubuntu ${RELEASE}... OK"; sleep 1
elif [ "${RELEASE}" == "sid" -o "${RELEASE}" == "wheezy" ]; then
msg_green "Debian ${RELEASE}... OK"; sleep 1
else
msg_red " UNSUPPORTED VERSION."
exit 1
fi
# FUNCTIONS
warn () {
zenity --no-wrap --info --text "
If you proceed with the installation,\n\
nearly 1.5 GB of additional disk space\n\
will be used.\n
Bear in mind that running other applications\n\
during the build process will affect\n\
compilation time."
sleep 1
}
should_we_disable_nls () {
if [ ${NO_NLS} -eq 1 ]; then
GEN=${GEN} --disable-nls
msg_green "Building with NLS disabled!"
else
msg_green "Building with NLS enabled!"
fi
}
bin_deps () {
sudo apt-get update && sudo apt-get dist-upgrade --yes
if [ ! -f "${DOCUDIR}/installed.txt" ]; then
dpkg --get-selections > "${DOCUDIR}/installed.txt"
sed -i '/linux-headers*/d' "${DOCUDIR}/installed.txt"
sed -i '/linux-image*/d' "${DOCUDIR}/installed.txt"
sed -i '/linux-generic*/d' "${DOCUDIR}/installed.txt"
sed -i '/linux-signed*/d' "${DOCUDIR}/installed.txt"
fi
if [ "${CODE}" == "en" ]; then
sudo apt-get install --yes ${DEPS_EN}
sleep 1
else
sudo apt-get install --yes ${DEPS}
sleep 1
fi
}
ls_ppa () {
local PPA="$(awk '$1 == "Package:" { print $2 }' \
/var/lib/apt/lists/*ppa*Packages)"
for i in $(echo ${PPA} | xargs -n1 | sort -u); do
dpkg-query -Wf'${db:Status-abbrev}' ${i} &>/dev/null
if [ $? == 0 ]; then
sed -i "/${i}/d" "${DOCUDIR}/installed.txt"
fi
done
}
build () {
for i in ${EPROG}; do
${TITLE} "Processing $i..."
cd "${E19}/${i}"
should_we_disable_nls
msg_bold "Building ${i}..."
case ${i} in
"efl")
${GEN} --enable-harfbuzz --enable-image-loader-webp \
--enable-multisense --enable-xine --enable-xinput22
;;
"enlightenment")
${GEN} --enable-mount-eeze --disable-wl-desktop-shell
;;
"python-efl")
sudo python setup.py install --prefix=${PREFIX}
;;
*)
${GEN}
;;
esac
echo
if [ "${EPROG}" != "python-efl" ]; then
make
fi
if [ $? -ne 0 ]; then
msg_red " BUILD ERROR—TRY AGAIN LATER."
# (Relaunch the script at a later time and select option #1)
rm -rf "${E19}/${i}"
exit 1
fi
sudo make install
sudo ldconfig
done
}
rebuild () {
for i in ${EPROG}; do
${TITLE} "Processing ${i}..."
cd "${E19}/${i}"
should_we_disable_nls
msg_bold "Updating ${i}..."
make distclean &>/dev/null
git reset --hard &>/dev/null
git pull
echo
case ${i} in
"efl")
${GEN} --enable-harfbuzz --enable-image-loader-webp \
--enable-multisense --enable-xine --enable-xinput22
;;
"enlightenment")
${GEN} --enable-mount-eeze --disable-wl-desktop-shell
;;
*)
${GEN}
;;
esac
echo
if [ "${EPROG}" != "python-efl" ]; then
make
fi
if [ $? -ne 0 ]; then
msg_red " BUILD ERROR—TRY AGAIN LATER."
# (Relaunch the script at a later time and select option #2)
exit 1
fi
sudo make install
sudo ldconfig
echo
done
}
remove () {
msg_bold "Cleaning $i..."
sudo make uninstall &>/dev/null
make maintainer-clean &>/dev/null
echo
}
deep_clean () {
msg_bold "Deeper cleaning..."; sleep 1
for i in \
"econnman/" \
"python-efl/" \
"terminology/" \
"enlightenment/" \
"elementary/" \
"emotion_generic_players/" \
"evas_generic_loaders/" \
"terminology/" \
"efl/" \
"custom*"; \
do
rm -rf "${E19}/${i}"
done
for i in \
"Enlightenment19/" \
".e/" \
".elementary/" \
".cache/efreet/" \
".cache/evas_gl_common_caches/" \
".config/terminology/"; \
do
rm -rf "${HOME}/${i}"
done
for i in \
"enlightenment/"; \
do
sudo rm -rf "${PREFIX}/etc/${i}"
done
for i in \
"ecore*" \
"edje*" \
"eet*" \
"eeze*" \
"efl*" \
"efreet*" \
"eina*" \
"eio*" \
"eldbus*" \
"elementary*" \
"embryo*" \
"emotion*" \
"enlightenment*" \
"eo*" \
"ephysics*" \
"ethumb*" \
"evas*"; \
do
sudo rm -rf "${PREFIX}/include/${i}"
done
for i in \
"ecore*" \
"edje*" \
"eeze*" \
"efl*" \
"efreet*" \
"elementary*" \
"emotion*" \
"enlightenment*" \
"eo*" \
"ephysics*" \
"ethumb*" \
"evas*"; \
do
sudo rm -rf "${PREFIX}/lib/${i}"
done
for i in \
"Ecore*" \
"Edje*" \
"Eet*" \
"Eeze*" \
"Efreet*" \
"Eina*" \
"Eldbus*" \
"Elementary*" \
"Eo*" \
"Ethumb*" \
"Evas*" \
"Emotion*"; \
do
sudo rm -rf "${PREFIX}/lib/cmake/${i}"
done
for i in \
"ecore*" \
"e_dbus*" \
"edje*" \
"efl*" \
"elementary*" \
"emotion*" \
"evas*" \
"python_efl*.egg-info"; \
do
sudo rm -rf "${PREFIX}/lib/python2.7/dist-packages/${i}"
done
for i in \
"dbus*" \
"ecore*" \
"edje*" \
"eeze*" \
"efreet*" \
"elementary*" \
"embryo*" \
"emotion*" \
"enlightenment*" \
"eo*" \
"ethumb*" \
"evas*" \
"terminology*" \
"econnman*"; \
do
sudo rm -rf "${PREFIX}/share/${i}"
done
for i in \
"connman*"; \
do
sudo rm -rf "${PREFIX}/var/lib/{$i}"
done
cd /usr/share/
sudo rm -rf xsessions/enlightenment.desktop
cd unity-greeter/
sudo rm custom_enlightenment_badge.png &>/dev/null
cd ../dbus-1/services/
sudo rm -rf org.enlightenment.Efreet.service
sudo rm -rf org.enlightenment.Ethumb.service
echo
}
# SELECTION
INPUT=0
msg_bold "Please enter the number of your choice."
if [ $INPUT -lt 1 ]; then
msg_bold "1. Install Enlightenment 19."
msg_bold "2. Update my E19 installation."
msg_bold "3. Uninstall E19 programs only."
msg_bold "4. Uninstall E19 programs AND binary dependencies."
sleep 1
msg_bold "(Or press Ctrl-C to quit)"
read INPUT
fi
# INSTALLATION
if [ ${INPUT} == 1 ]; then
clear
msg_bold "Proceeding to install Enlightenment 19..."
warn 2>/dev/null; sleep 1
if grep -q ppa /var/lib/apt/lists/*ppa* &>/dev/null; then
bin_deps
ls_ppa
else
unset -f ls_ppa
bin_deps
fi
cd "${HOME}"; mkdir -p "${E19}"; cd "${E19}"
${TITLE} "Downloading Source Code..."
msg_bold "Fetching tarballs code..."
echo -n efl... ; eval ${GETEFL} ; echo done.
echo -n evas_generic_loaders... ; eval ${GETEVL} ; echo done.
echo -n emotion_generic_players... ; eval ${GETEGP}; echo done.
echo -n elementary... ; eval ${GETELM}; echo done.
echo -n enlightenment... ; eval ${GETE19}; echo done.
echo -n terminology... ; eval ${GETETY}; echo done.
echo -n python-efl... ; eval ${GETEBPFL}; echo done.
echo -n econnman... ; eval ${GETECON}; echo done.
COUNT=$(ls "${E19}" | wc -l)
if [ ${COUNT} -ge ${EPROG_COUNT} ]; then
msg_green "All programs have been downloaded."
sleep 2
elif [ ${COUNT} == 0 ]; then
msg_red "PLEASE CHECK YOUR NETWORK CONNECTION AND TRY AGAIN."
# (Relaunch the script and select option #1)
exit 1
else
msg_yellow "WARNING: ONLY ${COUNT} OF ${EPROG_COUNT} PROGRAMS HAVE BEEN DOWNLOADED."
sleep 3
fi
$TITLE "Processing Enlightenment Programs..."
echo
read -p "Build internationalization support in Enlightenment? [y/n] " answer
case "${answer}" in
[yY])
: Nothing... NLS is built by default.
build
;;
[nN])
NO_NLS=1
build
;;
*)
msg_yellow "Please answer y or n"
;;
esac
sudo ln -sf \
${PREFIX}/share/dbus-1/services/org.enlightenment.Ethumb.service \
/usr/share/dbus-1/services/org.enlightenment.Ethumb.service
sudo ln -sf \
${PREFIX}/share/dbus-1/services/org.enlightenment.Efreet.service \
/usr/share/dbus-1/services/org.enlightenment.Efreet.service
cd "${E19}"
wget "${DROPB}/58695863/custom_enlightenment_badge.png" &>/dev/null
sudo cp -f custom_enlightenment_badge.png /usr/share/unity-greeter
sudo ln -sf "${PREFIX}/share/xsessions/enlightenment.desktop" \
/usr/share/xsessions/enlightenment.desktop
sudo ldconfig
$TITLE "That's All Folks..."
printf "\n%s\n\n" " That's All Folks..."
# UPDATE
elif [ ${INPUT} == 2 ]; then
clear
msg_bold "Proceeding to update Enlightenment 19..."
sleep 1
msg_bold "Checking required Ubuntu/Debian packages..."
if [ "${CODE}" == "en" ]; then
sudo apt-get install --yes ${DEPS_EN}
sleep 1
else
sudo apt-get install --yes ${DEPS}
sleep 1
fi
echo
${TITLE} "Processing Enlightenment Programs..."
echo
read -p "Build internationalization support in Enlightenment? [y/n] " answer
case "${answer}" in
[yY])
# Rebuild
rebuild; echo
;;
[nN])
# Rebuild without NLS
NO_NLS=1
rebuild; echo
;;
*)
msg_yellow "Please answer y or n"
;;
esac
sudo ln -sf \
"${PREFIX}/share/dbus-1/services/org.enlightenment.Ethumb.service" \
/usr/share/dbus-1/services/org.enlightenment.Ethumb.service
sudo ln -sf \
"${PREFIX}/share/dbus-1/services/org.enlightenment.Efreet.service" \
/usr/share/dbus-1/services/org.enlightenment.Efreet.service
cd "${E19}"
wget -nc "$DROPB/58695863/custom_enlightenment_badge.png" &>/dev/null
sudo cp -f custom_enlightenment_badge.png /usr/share/unity-greeter
sudo ln -sf "${PREFIX}/share/xsessions/enlightenment.desktop" \
/usr/share/xsessions/enlightenment.desktop
sudo ldconfig
${TITLE} "That's All Folks..."
printf "\n%s\n\n" " That's All Folks..."
# UNINSTALL E19
elif [ ${INPUT} == 3 ]; then
clear
msg_bold "Proceeding to uninstall Enlightenment 19..."
sleep 1
for i in ${EPROG}; do
${TITLE} "Processing $i..."
cd "${E19}/${i}" && remove
done
deep_clean
${TITLE} "That's All Folks..."
printf "%s\n\n" " That's All Folks..."
# COMPLETE UNINSTALL
elif [ ${INPUT} == 4 ]; then
clear
msg_bold "Complete uninstallation of E19 and deps..."
sleep 1
for i in ${EPROG}; do
${TITLE} "Processing ${i}..."
cd "${E19}/${i}" && remove
done
deep_clean
${TITLE} "Processing Ubuntu Packages..."
msg_bold "Removing binary dependencies..."
if [ "${CODE}" == "en" ]; then
sudo apt-get autoremove ${TRIM_EN}
sleep 1
else
sudo apt-get autoremove ${TRIM}
sleep 1
fi
sudo dpkg --set-selections < "${DOCUDIR}/installed.txt"
sudo apt-get dselect-upgrade
sudo apt-get update
sudo apt-get dist-upgrade
rm "${DOCUDIR}/installed.txt" &>/dev/null
sudo updatedb
sudo apt-get autoremove --purge
sudo dpkg --purge $(COLUMNS=200 dpkg -l | grep '^rc' | tr -s ' ' | \
cut -d ' ' -f 2) &>/dev/null
printf "\n%s\n\n" " That's All Folks..."
printf "\n%s\n\n" " If you want, you should delete your ~/.ccache to save space."
else
echo; exit 1
fi
# vi: ts=4:sw=4:et
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment