Skip to content

Instantly share code, notes, and snippets.

@bhundven
Last active November 22, 2023 17:06
Show Gist options
  • Save bhundven/11439386 to your computer and use it in GitHub Desktop.
Save bhundven/11439386 to your computer and use it in GitHub Desktop.
Enlightenment 19 build script for Ubuntu/Debian
#!/bin/bash
# vi: ts=4:sw=4:et
#
# 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.
#set -x
set -e
set -u
# 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; }' SIGHUP SIGINT SIGTERM
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++"
# Normal optimization
export CFLAGS="-O3 -ffast-math -march=native"
# Fast, Debugging
#export CFLAGS="-O2 -ffast-math -march=native -g -ggdb3"
# Less optimization, Debugging
#export CFLAGS="-O -ffast-math -march=native -g -ggdb3"
export CXXFLAGS="${CFLAGS}"
NCPU=$(getconf _NPROCESSORS_ONLN)
NJOBS=$((NCPU+1))
export MAKE="make -j ${NJOBS}"
BUILD_DIR="${HOME}/Enlightenment19"
GEN="./autogen.sh --prefix=${PREFIX} --sysconfdir=/etc --localstatedir=/var"
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="
aspell-${CODE}
autoconf
automake
autopoint
bison
build-essential
ccache
check
cmake
connman
connman-dev
connman-vpn
doxygen
flex
freeglut3-dev
git
graphviz
graphviz-dev
imagemagick
libasound2-dev
libblkid-dev
libblkid-dev
libbullet-dev
libclang-dev
libdbus-1-dev
libffi-dev
libffi6-dbg
libfontconfig1-dev
libfreetype6-dev
libfribidi-dev
libgbm-dev
libgif-dev
libgles2-mesa-dev
libglib2.0-dev
libgstreamer-plugins-bad1.0-dev
libgstreamer-plugins-base1.0-dev
libgstreamer1.0-dev
libharfbuzz-dev
libibus-1.0-dev
libiconv-hook-dev
libinput-dev
libjpeg-dev
libluajit-5.1-dev
libmount-dev
libmtdev-dev
libopenjpeg-dev
libpam0g-dev
libpng12-dev
libpoppler-dev
libpulse-dev
libraw-dev
librsvg2-dev
libscim-dev
libsndfile1-dev
libspectre-dev
libssl-dev
libsystemd-dev
libtiff5-dev
libtool
libtool-bin
libtorrent-rasterbar-dev
libudev-dev
libudisks2-dev
libunibreak-dev
libv8-dev
libvlc-dev
libwebp-dev
libxcb-keysyms1-dev
libxcb-shape0-dev
libxcomposite-dev
libxcursor-dev
libxine2-dev
libxinerama-dev
libxkbcommon-dev
libxrandr-dev
libxrender-dev
libxss-dev
libxtst-dev
mtdev-tools
pkg-config
python-dbus
python-dev
python-distutils-extra
python-xdg
ragel
valgrind
wmctrl
xserver-xephyr
"
TRIM="${DEPS:88}"
BASEURL="git://git.enlightenment.org"
#BASEURL="file:///home/bhundven/enlightenment"
declare -a PKGS
declare -a PKGS_REV
# Core packages
PKGS+=("core/efl")
PKGS+=("core/evas_generic_loaders")
PKGS+=("core/emotion_generic_players")
PKGS+=("core/elementary")
PKGS+=("bindings/elev8")
PKGS+=("bindings/python/python-efl")
PKGS+=("misc/polkit-efl")
PKGS+=("core/enlightenment")
# Apps
PKGS+=("apps/econnman")
PKGS+=("apps/ecrire")
PKGS+=("apps/ephoto")
PKGS+=("apps/epour")
PKGS+=("apps/equate")
PKGS+=("apps/eruler")
PKGS+=("apps/espionage")
PKGS+=("apps/express")
PKGS+=("apps/rage")
PKGS+=("apps/terminology")
# Developer Tools
PKGS+=("tools/clouseau")
PKGS+=("tools/edi")
PKGS+=("tools/eflete")
PKGS+=("tools/enventor")
#PKGS+=("tools/erigo")
for (( idx=${#PKGS[@]}-1; idx>=0; idx-- )); do
PKGS_REV+=("${PKGS[idx]}")
done
# 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
if [[ $(dpkg -l | egrep 'e17|enlightenment' | egrep '^i' &>/dev/null ) ]]; then
msg_red " ANOTHER VERSION OF ENLIGHTENMENT IS INSTALLED."
msg_red " SCRIPT ABORTED."
exit 1
fi
if [ "${RELEASE}" = "wily" -o "${RELEASE}" = "vivid" -o "${RELEASE}" = "trusty" ]; then
msg_green "Ubuntu ${RELEASE}... OK"; sleep 1
elif [ "${RELEASE}" = "sid" -o "${RELEASE}" = "jessie" -o "${RELEASE}" = "wheezy" ]; then
msg_green "Debian ${RELEASE}... OK"; sleep 1
else
msg_red " UNSUPPORTED VERSION."
exit 1
fi
# FUNCTIONS
warn () {
msg="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."
if [ -n "${DISPLAY}" ]; then
zenity --no-wrap --info --text "${msg}"
sleep 1
else
msg_yellow "${msg}"
fi
}
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
sudo apt-get install --yes ${DEPS}
sleep 1
}
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 [ $? -eq 0 ]; then
sed -i "/${i}/d" "${DOCUDIR}/installed.txt"
fi
done
}
build () {
local rebuild=${1}; shift
local skip_make=0
pushd "${BUILD_DIR}"
for pkg in "${PKGS[@]}"; do
msg_bold "Processing ${pkg}..."
should_we_disable_nls
pushd "${pkg}"
if [ ${rebuild} -eq 1 ]; then
if [ -f "Makefile" ]; then
make distclean &>/dev/null
echo
elif [ -f "setup.py" ]; then
python ./setup.py clean
fi
fi
msg_bold "Building ${pkg}..."
case "${pkg}" in
"core/efl")
${GEN} --enable-harfbuzz --enable-image-loader-webp \
--enable-multisense --enable-xine --enable-xinput22 \
--enable-drm --enable-egl --with-opengl=es \
--enable-systemd --enable-image-loader-jp2k
;;
"core/enlightenment")
${GEN} --enable-mount-eeze --disable-wl-desktop-shell
;;
"bindings/python/python-efl")
sed -i -e \
"s#setup.py install#setup.py install --prefix=${PREFIX} --record installed_files.txt#" \
Makefile
;;
"misc/polkit-efl")
skip_make=1
python ./setup.py build
sudo python ./setup.py install --prefix="${PREFIX}" --record installed_files.txt
;;
"apps/ecrire")
cmake .
;;
"apps/epour")
skip_make=1
python ./setup.py build
sudo python ./setup.py install --prefix="${PREFIX}" --record installed_files.txt
;;
"apps/espionage")
skip_make=1
python ./setup.py build
sudo python ./setup.py install --prefix="${PREFIX}" --record installed_files.txt
;;
"tools/erigo")
cmake .
;;
*)
${GEN}
;;
esac
echo
if [ ${skip_make} -ne 1 ]; then
make
if [ $? -ne 0 ]; then
msg_red " BUILD ERROR—TRY AGAIN LATER."
# (Relaunch the script at a later time and select option #1)
rm -rf "${BUILD_DIR}/${pkg}"
exit 1
fi
sudo make install
else
skip_make=0
fi
sudo ldconfig
echo
popd # ${pkg}
done
popd # BUILD_DIR
}
remove () {
pkg="$1"
msg_bold "Cleaning ${pkg}..."
pushd "${pkg}"
if [ -f Makefile ]; then
if ! [ "${pkg}" = "bindings/python/python-efl" ]; then
sudo make uninstall &>/dev/null
else
make clean &>/dev/null
cat installed_files.txt | xargs sudo rm -rf
fi
echo
elif [ -f setup.py ]; then
if [ -f installed_files.txt ]; then
cat installed_files.txt | xargs sudo rm -rf
fi
python ./setup.py clean
fi
popd
}
deep_clean () {
msg_bold "Deeper cleaning..."; sleep 1
for i in \
"econnman/" \
"polkit-efl/" \
"python-efl/" \
"terminology/" \
"enlightenment/" \
"elementary/" \
"emotion_generic_players/" \
"evas_generic_loaders/" \
"terminology/" \
"efl/" \
"custom*"; \
do
sudo rm -rf "${BUILD_DIR}/${i}"
done
for i in \
"Enlightenment19/" \
".e/" \
".elementary/" \
".cache/efreet/" \
".cache/evas_gl_common_caches/" \
".config/terminology/"; \
do
sudo rm -rf "${HOME}/${i}"
done
for i in \
"enlightenment/"; \
do
sudo rm -rf "${PREFIX}/etc/${i}"
done
for i in \
"ecore*" \
"ector*" \
"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" \
"polkit_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
if [ -d "unity-greeter" ]; then
cd unity-greeter/
sudo rm custom_enlightenment_badge.png &>/dev/null
cd ..
fi
if [ -d "dbus-1/services" ]; then
cd dbus-1/services/
sudo rm -rf org.enlightenment.Efreet.service
sudo rm -rf org.enlightenment.Ethumb.service
cd ..
fi
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} -eq 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 "${BUILD_DIR}"; cd "${BUILD_DIR}"
msg_bold "Fetching git code..."
for pkg in "${PKGS[@]}"; do
if ! [ -d "${pkg}" ]; then
msg_bold "Cloning ${pkg}"
git clone "${BASEURL}/${pkg}.git" "${pkg}"
else
msg_bold "Updating ${pkg}"
pushd "${pkg}"
git clean -ffxd &>/dev/null
git checkout -- * &> /dev/null
git pull --all
popd
fi
done
read -p "Build internationalization support in Enlightenment? [y/n] " answer
case "${answer}" in
[yY])
: Nothing... NLS is built by default.
build 0
;;
[nN])
NO_NLS=1
build 0
;;
*)
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 "${BUILD_DIR}"
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
printf "\n%s\n\n" " That's All Folks..."
# UPDATE
elif [ ${INPUT} -eq 2 ]; then
clear
msg_bold "Proceeding to update Enlightenment 19..."
sleep 1
msg_bold "Checking required Ubuntu/Debian packages..."
sudo apt-get install --yes ${DEPS}
sleep 1
echo
read -p "Build internationalization support in Enlightenment? [y/n] " answer
case "${answer}" in
[yY])
# Rebuild
build 1; echo
;;
[nN])
# Rebuild without NLS
NO_NLS=1
build 1; 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 "${BUILD_DIR}"
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
printf "\n%s\n\n" " That's All Folks..."
# UNINSTALL E19
elif [ ${INPUT} -eq 3 ]; then
clear
msg_bold "Proceeding to uninstall Enlightenment 19..."
sleep 1
pushd "${BUILD_DIR}"
for i in "${PKGS_REV[@]}"; do
msg_bold "Processing ${i}..."
remove "${i}"
done
popd
deep_clean
printf "%s\n\n" " That's All Folks..."
# COMPLETE UNINSTALL
elif [ ${INPUT} -eq 4 ]; then
clear
msg_bold "Complete uninstallation of E19 and deps..."
sleep 1
pushd "${BUILD_DIR}"
for i in "${PKGS_REV[@]}"; do
msg_bold "Processing ${i}..."
remove "${i}"
done
popd
deep_clean
msg_bold "Removing binary dependencies..."
sudo apt-get autoremove ${TRIM}
sleep 1
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
@bhundven
Copy link
Author

bhundven commented Nov 4, 2015

All credit really goes to the EFL team. If not for them this script wouldn't exist.

@bhundven
Copy link
Author

bhundven commented Nov 4, 2015

Also, the wayland support in e19 is still very experimental. So, I wouldn't expect it to be a daily driver until it's marked stable. (most of what you're currently downloading and building is alpha/beta quality)

@DiosyJanjo
Copy link

@bhundven
Still, this looks and feels great its not clunky it hasn't given me any problem from what I had, its faster.

What I'm going to do right now is to slim my Debian down to the resources I only need.

Do you have any idea if this I can install from a net install version of Debian/Sid?

The reason is to avoid all the extra things it installs when I have to install a basic version of whatever Desktop Environment

If so what would be the regular components I'd need in order to do so like aptitude, nano to edit the repositories etc.

I know this is something that I have to investigate in how to do (because its mostly all in the internet) but if you know how and don't bother in telling me how I'd appreciate it.

Regardless of anything, you've done a great job and for what I know e19 is almost at e20 so this version is in the "very stable" part of things

@bhundven
Copy link
Author

bhundven commented Nov 5, 2015

Ok, I've updated this script quite a bit today.
I've also added nineteen-wayland.sh here: https://gist.github.com/bhundven/04a77502907ab2c03ea9

@CRImier
Copy link

CRImier commented Jan 17, 2016

EDIT: It seems there is bug which would only show yourself if you disabled NLS during compilation, it'd fail saying ./autogen.sh is not found.
GEN=${GEN} --disable-nls should look like GEN=${GEN}" --disable-nls"

@gamersalpha
Copy link

Hello, can compile the last efl version ?

@raw-bin
Copy link

raw-bin commented Feb 4, 2019

@bhundven
Copy link
Author

As of writing this, that site is down. I haven't tried to build this in a while...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment