summaryrefslogtreecommitdiffstats
path: root/tools/build/gnome-shell-build-setup.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tools/build/gnome-shell-build-setup.sh')
-rwxr-xr-xtools/build/gnome-shell-build-setup.sh348
1 files changed, 348 insertions, 0 deletions
diff --git a/tools/build/gnome-shell-build-setup.sh b/tools/build/gnome-shell-build-setup.sh
new file mode 100755
index 0000000..59637e4
--- /dev/null
+++ b/tools/build/gnome-shell-build-setup.sh
@@ -0,0 +1,348 @@
+#!/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
+asn1Parser: f:libtasn1-tools d:libtasn1-3-bin s:libtasn1 # gcr
+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
+ruby: fds:ruby # WebKit
+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
+cracklib: fs:cracklib-devel d:libcrack2-dev # libpwquality
+cups: fs:cups-devel d:libcups2-dev # gnome-control-center
+libdb: d:libdb-dev # evolution-data-server - see below for Fedora
+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
+libsystemd-login: fs:systemd-devel # gnome-session gnome-settings-daemon polkit PackageKit
+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
+wireless-tools: f:wireless-tools-devel d:libiw-dev s:libiw-devel # NetworkManager
+
+# 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
+
+ # For evolution-data-server:
+ # /usr/include/db.h moved packages in Fedora 18
+ if expr $version \>= 18 > /dev/null ; then
+ reqd="$reqd libdb-devel"
+ else
+ reqd="$reqd db4-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 ... "
+ missing_str=
+ for pkg in $missing ; do
+ missing_str="$missing_str${missing_str:+,}\"$pkg\""
+ done
+ gdbus call -e -d org.freedesktop.PackageKit -o /org/freedesktop/PackageKit -m org.freedesktop.PackageKit.Modify.InstallPackageNames 0 "[$missing_str]" "hide-finished,show-warnings"
+ 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
+
+checkout_git() {
+ module=$1
+ source=$2
+
+ if [ -d $SOURCE/$1 ] ; then
+ if [ -d $SOURCE/$1/.git ] ; then
+ echo -n "Updating $1 ... "
+ ( cd $SOURCE/$1 && git pull --rebase > /dev/null ) || exit 1
+ echo "done"
+ else
+ echo "$SOURCE/$1 is not a git repository"
+ echo "You should remove it and rerun this script"
+ exit 1
+ fi
+ else
+ echo -n "Checking out $1 into $SOURCE/$1 ... "
+ cd $SOURCE
+ git clone $2 > /dev/null || exit 1
+ echo "done"
+ fi
+}
+
+checkout_git jhbuild git://git.gnome.org/jhbuild
+
+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
+
+if [ -d $HOME/gnome-shell -a \! -d $HOME/gnome ] ; then
+ cat <<EOF
+WARNING:
+ The old source and install directory '$HOME/gnome-shell' exists, but
+ '$HOME/gnome' doesn't. An empty $HOME/gnome will be created.
+
+ To avoid starting again from scratch you should remove the empty directory,
+ move your old '$HOME/gnome-shell' to '$HOME/gnome', and delete the old
+ install directory:
+
+ rm -rf $HOME/gnome
+ mv $HOME/gnome-shell $HOME/gnome
+ rm -rf $HOME/gnome/install
+EOF
+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
+
+checkout_git git-bz git://git.fishsoup.net/git-bz
+
+
+echo -n "Installing git-bz ... "
+old="`readlink $HOME/bin/git-bz`"
+( cd $HOME/bin && ln -sf ../Source/git-bz/git-bz . )
+new="`readlink $HOME/bin/git-bz`"
+echo "done"
+
+if test "$old" != "$new" -a "$old" != "" ; then
+ echo "WARNING: $HOME/bin/git-bz was changed from '$old' to '$new'"
+fi
+
+echo "Done."