1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
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."
|