540e970170
jhbuild now requires autogen.sh to be run, even when not using autotools. https://bugzilla.gnome.org/show_bug.cgi?id=668440
298 lines
8.8 KiB
Bash
Executable File
298 lines
8.8 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Script that sets up jhbuild to build gnome-shell. Run this to
|
|
# checkout jhbuild and the required configuration.
|
|
#
|
|
# Copyright (C) 2008, Red Hat, Inc.
|
|
#
|
|
# Some ideas and code taken from gtk-osx-build
|
|
#
|
|
# Copyright (C) 2006, 2007, 2008 Imendio AB
|
|
#
|
|
|
|
release_file=
|
|
|
|
if which lsb_release > /dev/null 2>&1; then
|
|
system=`lsb_release -is`
|
|
version=`lsb_release -rs`
|
|
elif [ -f /etc/fedora-release ] ; then
|
|
system=Fedora
|
|
release_file=/etc/fedora-release
|
|
elif [ -f /etc/SuSE-release ] ; then
|
|
system=SUSE
|
|
release_file=/etc/SuSE-release
|
|
elif [ -f /etc/mandriva-release ]; then
|
|
system=MandrivaLinux
|
|
release_file=/etc/mandriva-release
|
|
fi
|
|
|
|
if [ x$release_file != x ] ; then
|
|
version=`sed 's/[^0-9\.]*\([0-9\.]\+\).*/\1/' < $release_file`
|
|
fi
|
|
|
|
# This is the configuration of packages that we'll need to successfully jhbuild.
|
|
# Each line is of the form:
|
|
#
|
|
# name_of_depenency: <distro_chars>:package [<distro_chars>:package...]
|
|
#
|
|
# The dependency name is purely informative and isn't otherwise used. distro_chars are:
|
|
#
|
|
# f: Fedora
|
|
# d: Debian/Ubuntu
|
|
# s: SuSE
|
|
# m: Mandriva
|
|
#
|
|
# Rather than have some complicated system here, when we have packages that depend
|
|
# on distribution version, we just tweak the package list in the code below.
|
|
# Where known, the module that requires a library is commented.
|
|
|
|
all_packages() {
|
|
cat <<EOF
|
|
# For this script:
|
|
curl: fdsm:curl
|
|
git: f:git d:git-core
|
|
|
|
# Build tools
|
|
build-essential: d:build-essential
|
|
automake: fd:automake
|
|
binutils: f:binutils
|
|
bison: fds:bison
|
|
cmake: fd:cmake # libproxy
|
|
docbook-style-xsl: f:docbook-style-xsl d:docbook-xsl # gtk-doc
|
|
flex: fds:flex
|
|
gettext: fd:gettext
|
|
gcc: f:gcc
|
|
g++: f:gcc-c++
|
|
gperf: f:gperf d:gperf # evolution-data-server gudev
|
|
intltool: f:intltool
|
|
libtool: f:libtool
|
|
make: f:make
|
|
perl-XML-Simple: f:perl-XML-Simple d:libxml-simple-perl # icon-naming-utils
|
|
pkgconfig: f:pkgconfig
|
|
python: f:python
|
|
texinfo: fd:texinfo # libgtop
|
|
xsltproc: f:libxslt d:xsltproc # gtk-doc
|
|
|
|
# Image handling libraries
|
|
freetype: f:freetype-devel d:libfreetype6-dev # fontconfig
|
|
jasper: f:jasper-devel d:libjasper-dev # gdk-pixbuf
|
|
libjpeg: f:libjpeg-devel d:libjpeg-dev # gdk-pixbuf
|
|
libpng: f:libpng-devel d:libpng-dev # gdk-pixbuf
|
|
libtiff: fs:libtiff-devel d:libtiff-dev # gdk-pixbuf
|
|
|
|
# X libraries
|
|
GL: f:mesa-libGL-devel d:mesa-common-dev d:libgl1-mesa-dev m:GL-devel # cogl
|
|
libX11: s:xorg-x11-proto-devel s:xorg-x11-devel # gtk+
|
|
libXcomposite: f:libXcomposite-devel d:libxcomposite-dev # cogl mutter
|
|
libXcursor: f:libXcursor-devel libxcursor-dev # mousetweaks
|
|
libXdamage: f:libXdamage-devel m:libxdamage-devel d:libxdamage-dev # cogl mutter
|
|
libXi: f:libXi-devel d:libxi-dev # gtk+
|
|
libXrandr: f:libXrandr-devel d:libxrandr-dev # gnome-desktop
|
|
libXrender: f:libXrender-devel d: libxrender-dev # cairo WebKit
|
|
libXt: f:libXt-devel d:libxt-dev # WebKit
|
|
libXtst: f:libXtst-devel d:libxtst-dev # caribou
|
|
xcb: f:xcb-util-devel d:libx11-xcb-dev # startup-notification
|
|
|
|
# Other libraries
|
|
cups: fs:cups-devel d:libcups2-dev # gnome-control-center
|
|
db4: f:db4-devel d:libdb-dev # evolution-data-server
|
|
icu: f:libicu-devel d:libicu-dev # WebKit
|
|
libacl: f:libacl-devel d:libacl1-dev # gudev
|
|
libcurl: f:libcurl-devel # liboauth. See below for Debian
|
|
libffi: fs:libffi-devel d:libffi-dev # gobject-introspection
|
|
libtool-ltdl: f:libtool-ltdl-devel d:libltdl-dev # libcanberra
|
|
libusb: f:libusb1-devel d:libusb-1.0-0-dev # upower
|
|
openssl: f:openssl-devel d:libssl-dev # liboauth
|
|
pam: f:pam-devel d:libpam-dev # polkit
|
|
ppp: f:ppp-devel d:ppp-dev # NetworkManager
|
|
python-devel: f:python-devel d:python-dev # pygobject py2cairo
|
|
readline: fsm:readline-devel d:libreadline-dev
|
|
sane: f:sane-backends-devel d:libsane-dev # colord
|
|
sqlite: d:libsqlite3-dev f:sqlite-devel # libsoup
|
|
udev: f:libudev-devel d:libudev-dev # gudev
|
|
uuid: f:libuuid-devel d:uuid-dev # Networkmanager
|
|
vorbis: f:libvorbis-devel d:libvorbis-dev # libcanberra
|
|
|
|
# python libraries used by gnome-shell wrapper script
|
|
# These are commented out because the gnome-shell wrapper script
|
|
# isn't built by default, and needs updating for running on
|
|
# a pure-GNOME 3 system, rather than recovering to GNOME 2.
|
|
# dbus-python: f:dbus-python d:python-dbus
|
|
# python-gobject: f:pygobject2 d:python-gobject
|
|
# python-gconf: f:gnome-python2-gconf d:python-gconf
|
|
EOF
|
|
}
|
|
|
|
packages_for_distribution() {
|
|
distribution_char=$1
|
|
all_packages |
|
|
sed -n 's/#.*//; /[^ ]/p' | # Remove comments and blank lines
|
|
while read dependency_name words ; do
|
|
for word in $words ; do
|
|
# Word is <distribution-chars>:package
|
|
IFS=:
|
|
set $word
|
|
IFS=' '
|
|
case $1 in
|
|
*$distribution_char*) echo $2
|
|
esac
|
|
done
|
|
done
|
|
}
|
|
|
|
# We try to make it clear what we're doing via sudo so if a user gets prompted
|
|
# for their password, they have some idea why.
|
|
run_via_sudo() {
|
|
echo "Running: sudo $@"
|
|
if sudo "$@" ; then : ; else
|
|
echo 1>&2 "Command failed."
|
|
echo 1>&2 "Exiting gnome-shell-build-setup.sh. You can run it again safely."
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
if test "x$system" = xUbuntu -o "x$system" = xDebian -o "x$system" = xLinuxMint ; then
|
|
reqd=`packages_for_distribution d`
|
|
|
|
if apt-cache show libxcb-util0-dev > /dev/null 2> /dev/null; then
|
|
reqd="$reqd libxcb-util0-dev"
|
|
else
|
|
reqd="$reqd libxcb-event1-dev libxcb-aux0-dev"
|
|
fi
|
|
|
|
if apt-cache show autopoint > /dev/null 2> /dev/null; then
|
|
reqd="$reqd autopoint"
|
|
fi
|
|
|
|
if [ ! -x /usr/bin/dpkg-checkbuilddeps -o ! -x /usr/bin/apt-file ]; then
|
|
echo "Installing base dependencies"
|
|
run_via_sudo apt-get install dpkg-dev apt-file
|
|
fi
|
|
|
|
echo "Updating apt-file cache"
|
|
run_via_sudo apt-file update
|
|
|
|
# libcurl comes in both gnutls and openssl flavors. If the openssl
|
|
# flavor of the runtime is installed, install the matching -dev
|
|
# package, but default to the gnutls version. (the libcurl3 vs. libcurl4
|
|
# mismatch is intentional and is how things are packaged.)
|
|
|
|
if ! dpkg-checkbuilddeps -d libcurl-dev /dev/null 2> /dev/null; then
|
|
if dpkg -s libcurl3 /dev/null 2> /dev/null; then
|
|
missing="libcurl4-openssl-dev $missing"
|
|
elif dpkg -s libcurl3-nss /dev/null 2> /dev/null; then
|
|
missing="libcurl4-nss-dev $missing"
|
|
else
|
|
missing="libcurl4-gnutls-dev $missing"
|
|
fi
|
|
fi
|
|
|
|
for pkg in $reqd ; do
|
|
if ! dpkg-checkbuilddeps -d $pkg /dev/null 2> /dev/null; then
|
|
missing="$pkg $missing"
|
|
fi
|
|
done
|
|
if test ! "x$missing" = x; then
|
|
echo "Installing packages"
|
|
run_via_sudo apt-get install $missing
|
|
fi
|
|
fi
|
|
|
|
if test "x$system" = xFedora ; then
|
|
reqd=`packages_for_distribution f`
|
|
|
|
if expr $version = 14 > /dev/null ; then
|
|
reqd="$reqd gettext-autopoint"
|
|
elif expr $version \>= 15 > /dev/null ; then
|
|
reqd="$reqd gettext-devel"
|
|
fi
|
|
|
|
echo -n "Computing packages to install ... "
|
|
for pkg in $reqd ; do
|
|
if ! rpm -q --whatprovides $pkg > /dev/null 2>&1; then
|
|
missing="$pkg $missing"
|
|
fi
|
|
done
|
|
echo "done"
|
|
|
|
if test ! "x$missing" = x; then
|
|
echo -n "Installing packages ... "
|
|
gpk-install-package-name $missing
|
|
echo "done"
|
|
fi
|
|
fi
|
|
|
|
if test "x$system" = xSUSE -o "x$system" = "xSUSE LINUX" ; then
|
|
reqd=`packages_for_distribution s`
|
|
if test ! "x$reqd" = x; then
|
|
echo "Please run 'su --command=\"zypper install $reqd\"' and try again."
|
|
echo
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if test "x$system" = xMandrivaLinux ; then
|
|
reqd=`packages_for_distribution m`
|
|
if test ! "x$reqd" = x; then
|
|
gurpmi --auto $reqd
|
|
fi
|
|
fi
|
|
|
|
SOURCE=$HOME/Source
|
|
BASEURL=http://git.gnome.org/browse/gnome-shell/plain/tools/build
|
|
|
|
if [ -d $SOURCE ] ; then : ; else
|
|
mkdir $SOURCE
|
|
echo "Created $SOURCE"
|
|
fi
|
|
|
|
if [ -d $SOURCE/jhbuild ] ; then
|
|
if [ -d $SOURCE/jhbuild/.git ] ; then
|
|
echo -n "Updating jhbuild ... "
|
|
( cd $SOURCE/jhbuild && git pull --rebase > /dev/null ) || exit 1
|
|
echo "done"
|
|
else
|
|
echo "$SOURCE/jhbuild is not a git repository"
|
|
echo "You should remove it and rerun this script"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo -n "Checking out jhbuild into $SOURCE/jhbuild ... "
|
|
cd $SOURCE
|
|
git clone git://git.gnome.org/jhbuild > /dev/null || exit 1
|
|
echo "done"
|
|
fi
|
|
|
|
echo -n "Installing jhbuild ... "
|
|
(cd $SOURCE/jhbuild &&
|
|
./autogen.sh --simple-install &&
|
|
make -f Makefile.plain DISABLE_GETTEXT=1 bindir=$HOME/bin install) >/dev/null
|
|
echo "done"
|
|
|
|
if [ -e $HOME/.jhbuildrc ] ; then
|
|
if grep JHBUILDRC_GNOME_SHELL $HOME/.jhbuildrc > /dev/null ; then : ; else
|
|
mv $HOME/.jhbuildrc $HOME/.jhbuildrc.bak
|
|
echo "Saved ~/.jhbuildrc as ~/.jhbuildrc.bak"
|
|
fi
|
|
fi
|
|
|
|
echo -n "Writing ~/.jhbuildrc ... "
|
|
curl -L -s -o $HOME/.jhbuildrc $BASEURL/jhbuildrc-gnome-shell
|
|
echo "done"
|
|
|
|
if [ ! -f $HOME/.jhbuildrc-custom ]; then
|
|
echo -n "Writing example ~/.jhbuildrc-custom ... "
|
|
curl -L -s -o $HOME/.jhbuildrc-custom $BASEURL/jhbuildrc-custom-example
|
|
echo "done"
|
|
fi
|
|
|
|
echo "Installing modules as system packages when possible"
|
|
$HOME/bin/jhbuild sysdeps --install
|
|
|
|
if test "x`echo $PATH | grep $HOME/bin`" = x; then
|
|
echo "PATH does not contain $HOME/bin, it is recommended that you add that."
|
|
echo
|
|
fi
|
|
|
|
echo "Done."
|