#!/bin/bash # Use "build-gtk.sh" or "build-gtk.sh 64" to build a 64-bits tarball for tooltool. # Use "build-gtk.sh 32" to build a 32-bits tarball for tooltool. # Mock environments used: # - 64-bits: # https://s3.amazonaws.com/mozilla-releng-mock-archive/67b65e51eb091fba7941a04d249343924a3ee653 # + libxml2-devel.x86_64 gettext.x86_64 libjpeg-devel.x86_64 # - 32-bits: # https://s3.amazonaws.com/mozilla-releng-mock-archive/58d76c6acca148a1aedcbec7fc1b8212e12807b4 # + libxml2-devel.i686 gettext.i686 libjpeg-devel.i686 set -e pkg_config_version=0.28 fontconfig_version=2.8.0 libffi_version=3.0.13 glib_version=2.34.3 gdk_pixbuf_version=2.26.5 pixman_version=0.20.2 cairo_version=1.10.2 pango_version=1.30.1 atk_version=2.2.0 gtk__version=3.4.4 pkg_config_url=http://pkgconfig.freedesktop.org/releases/pkg-config-${pkg_config_version}.tar.gz fontconfig_url=http://www.freedesktop.org/software/fontconfig/release/fontconfig-${fontconfig_version}.tar.gz libffi_url=ftp://sourceware.org/pub/libffi/libffi-${libffi_version}.tar.gz glib_url=http://ftp.gnome.org/pub/gnome/sources/glib/${glib_version%.*}/glib-${glib_version}.tar.xz gdk_pixbuf_url=http://ftp.gnome.org/pub/gnome/sources/gdk-pixbuf/${gdk_pixbuf_version%.*}/gdk-pixbuf-${gdk_pixbuf_version}.tar.xz pixman_url=http://cairographics.org/releases/pixman-${pixman_version}.tar.gz cairo_url=http://cairographics.org/releases/cairo-${cairo_version}.tar.gz pango_url=http://ftp.gnome.org/pub/GNOME/sources/pango/${pango_version%.*}/pango-${pango_version}.tar.xz atk_url=http://ftp.gnome.org/pub/GNOME/sources/atk/${atk_version%.*}/atk-${atk_version}.tar.xz gtk__url=http://ftp.gnome.org/pub/gnome/sources/gtk+/${gtk__version%.*}/gtk+-${gtk__version}.tar.xz cwd=$(pwd) root_dir=$(mktemp -d) cd $root_dir if test -z $TMPDIR; then TMPDIR=/tmp/ fi make_flags=-j12 build() { name=$1 shift pkg=$(echo $name | tr '+-' '__') version=$(eval echo \$${pkg}_version) url=$(eval echo \$${pkg}_url) wget -c -P $TMPDIR $url tar -axf $TMPDIR/$name-$version.tar.* mkdir -p build/$name cd build/$name eval ../../$name-$version/configure --disable-static $* $configure_args make $make_flags make install DESTDIR=$root_dir/gtk3 find $root_dir/gtk3 -name \*.la -delete cd ../.. } case "$1" in 32) configure_args='--host=i686-pc-linux --build=i686-pc-linux CC="gcc -m32" CXX="g++ -m32"' lib=lib ;; *) configure_args= lib=lib64 ;; esac export PKG_CONFIG_LIBDIR=/usr/$lib/pkgconfig:/usr/share/pkgconfig # The pkg-config version in the mock images is buggy is how it handles # PKG_CONFIG_SYSROOT_DIR. So we need our own. build pkg-config ln -sf /usr/include $root_dir/gtk3/usr/ ln -sf /usr/$lib $root_dir/gtk3/usr/ if [ "$lib" = lib64 ]; then ln -s lib $root_dir/gtk3/usr/local/lib64 fi export PKG_CONFIG_PATH=$root_dir/gtk3/usr/local/lib/pkgconfig export PKG_CONFIG_SYSROOT_DIR=$root_dir/gtk3 export LD_LIBRARY_PATH=$root_dir/gtk3/usr/local/lib export PATH=$root_dir/gtk3/usr/local/bin:${PATH} build fontconfig build libffi build glib build gdk-pixbuf --without-libtiff build pixman --disable-gtk build cairo --enable-tee build pango build atk make_flags="$make_flags GLIB_COMPILE_SCHEMAS=glib-compile-schemas" build gtk+ rm -rf $root_dir/gtk3/usr/local/share/gtk-doc rm -rf $root_dir/gtk3/usr/local/share/locale # mock build environment doesn't have fonts in /usr/share/fonts, but # has some in /usr/share/X11/fonts. Add this directory to the # fontconfig configuration without changing the gtk3 tooltool package. cat << EOF > $root_dir/gtk3/usr/local/etc/fonts/local.conf /usr/share/X11/fonts EOF cat < $root_dir/gtk3/setup.sh #!/bin/sh cd \$(dirname \$0) HERE=\$(pwd) # pango expects absolute paths in pango.modules, and TOOLTOOL_DIR may vary... LD_LIBRARY_PATH=\$HERE/usr/local/lib \ PANGO_SYSCONFDIR=\$HERE/usr/local/etc \ PANGO_LIBDIR=\$HERE/usr/local/lib \ \$HERE/usr/local/bin/pango-querymodules > \$HERE/usr/local/etc/pango/pango.modules # same with gdb-pixbuf and loaders.cache LD_LIBRARY_PATH=\$HERE/usr/local/lib \ GDK_PIXBUF_MODULE_FILE=\$HERE/usr/local/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache \ GDK_PIXBUF_MODULEDIR=\$HERE/usr/local/lib/gdk-pixbuf-2.0/2.10.0/loaders \ \$HERE/usr/local/bin/gdk-pixbuf-query-loaders > \ \$HERE/usr/local/lib/gdk-pixbuf-2.0/2.10.0/loaders.cache # The fontconfig version in the tooltool package has known uses of # uninitialized memory when creating its cache, and while most users # will already have an existing cache, running Firefox on automation # will create it. Combined with valgrind, this generates irrelevant # errors. # So create the fontconfig cache beforehand. FONTCONFIG_PATH=\$HERE/usr/local/etc/fonts \ LD_LIBRARY_PATH=\$HERE/usr/local/lib \ \$HERE/usr/local/bin/fc-cache EOF chmod +x $root_dir/gtk3/setup.sh cd $cwd tar -C $root_dir -Jcf gtk3.tar.xz gtk3