13dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen#!/bin/bash -e 23dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 33dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Copyright (c) 2011 The Chromium Authors. All rights reserved. 43dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Use of this source code is governed by a BSD-style license that can be 53dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# found in the LICENSE file. 63dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 73dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Script to install everything needed to build chromium (well, ideally, anyway) 83dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# See http://code.google.com/p/chromium/wiki/LinuxBuildInstructions 93dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# and http://code.google.com/p/chromium/wiki/LinuxBuild64Bit 103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenusage() { 123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Usage: $0 [--options]" 133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Options:" 143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "--[no-]syms: enable or disable installation of debugging symbols" 153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "--[no-]gold: enable or disable installation of gold linker" 163dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "--[no-]lib32: enable or disable installation of 32 bit libraries" 173dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Script will prompt interactively if options not given." 183dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1 193dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen} 203dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 213dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenwhile test "$1" != "" 223dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendo 233dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen case "$1" in 243dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --syms) do_inst_syms=1;; 253dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --no-syms) do_inst_syms=0;; 263dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --gold) do_inst_gold=1;; 273dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --no-gold) do_inst_gold=0;; 283dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --lib32) do_inst_lib32=1;; 293dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --no-lib32) do_inst_lib32=0;; 303dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen *) usage;; 313dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen esac 323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen shift 333dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendone 343dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 353dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monseninstall_gold() { 363dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Gold is optional; it's a faster replacement for ld, 373dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # and makes life on 2GB machines much more pleasant. 383dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 393dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # First make sure root can access this directory, as that's tripped 403dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # up some folks. 413dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if sudo touch xyz.$$ 423dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 433dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo rm xyz.$$ 443dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen else 453dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo root cannot write to the current directory, not installing gold 463dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen return 473dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 483dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 493dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen BINUTILS=binutils-2.21 503dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen BINUTILS_URL=http://ftp.gnu.org/gnu/binutils/$BINUTILS.tar.bz2 513dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen BINUTILS_SHA1=ef93235588eb443e4c4a77f229a8d131bccaecc6 523dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 533dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen test -f $BINUTILS.tar.bz2 || wget $BINUTILS_URL 543dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if test "`sha1sum $BINUTILS.tar.bz2|cut -d' ' -f1`" != "$BINUTILS_SHA1" 553dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 563dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo Bad sha1sum for $BINUTILS.tar.bz2 573dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1 583dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 593dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 603dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tar -xjvf $BINUTILS.tar.bz2 613dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen cd $BINUTILS 623dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen patch -p1 <<EOF 633dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendiff -u -r1.103 -r1.103.2.1 643dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen--- src/gold/object.h 2010/09/08 23:54:51 1.103 653dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen+++ src/gold/object.h 2011/02/10 01:15:28 1.103.2.1 663dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen@@ -1,6 +1,6 @@ 673dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // object.h -- support for an object file for linking in gold -*- C++ -*- 683dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 693dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 703dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 713dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // Written by Ian Lance Taylor <iant@google.com>. 723dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 733dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // This file is part of gold. 743dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen@@ -2165,15 +2165,6 @@ 753dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Output_symtab_xindex*, 763dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Output_symtab_xindex*); 773dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 783dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- // Clear the local symbol information. 793dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- void 803dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- clear_local_symbols() 813dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- { 823dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- this->local_values_.clear(); 833dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- this->local_got_offsets_.clear(); 843dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- this->local_plt_offsets_.clear(); 853dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- } 863dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- 873dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // Record a mapping from discarded section SHNDX to the corresponding 883dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // kept section. 893dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen void 903dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendiff -u -r1.60 -r1.60.2.1 913dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen--- src/gold/reloc.cc 2010/10/14 22:10:22 1.60 923dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen+++ src/gold/reloc.cc 2011/02/10 01:15:28 1.60.2.1 933dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen@@ -1,6 +1,6 @@ 943dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // reloc.cc -- relocate input files for gold. 953dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 963dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen-// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. 973dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen+// Copyright 2006, 2007, 2008, 2009, 2010, 2011 Free Software Foundation, Inc. 983dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // Written by Ian Lance Taylor <iant@google.com>. 993dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1003dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // This file is part of gold. 1013dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen@@ -685,9 +685,6 @@ 1023dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // Write out the local symbols. 1033dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen this->write_local_symbols(of, layout->sympool(), layout->dynpool(), 1043dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen layout->symtab_xindex(), layout->dynsym_xindex()); 1053dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- 1063dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- // We should no longer need the local symbol values. 1073dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen- this->clear_local_symbols(); 1083dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen } 1093dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen // Sort a Read_multiple vector by file offset. 1113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian MonsenEOF 1123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ./configure --prefix=/usr/local/gold --enable-gold --enable-threads 1133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen make maybe-all-binutils maybe-all-gold -j4 1143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if sudo make maybe-install-binutils maybe-install-gold 1153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 1163dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Still need to figure out graceful way of pointing gyp to use 1173dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # /usr/local/gold/bin/ld without requiring him to set environment 1183dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # variables. That will go into bootstrap-linux.sh when it's ready. 1193dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installing gold as /usr/bin/ld." 1203dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "To uninstall, do 'cd /usr/bin; sudo rm ld; sudo mv ld.orig ld'" 1213dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen test -f /usr/bin/ld && test ! -f /usr/bin/ld.orig && \ 1223dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo mv /usr/bin/ld /usr/bin/ld.orig 1233dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo strip /usr/local/gold/bin/ld 1243dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo ln -fs /usr/local/gold/bin/ld /usr/bin/ld.gold 1253dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo ln -fs /usr/bin/ld.gold /usr/bin/ld 1263dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen else 1273dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "make install failed, not installing gold" 1283dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 1293dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen} 1303dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1313dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif ! egrep -q \ 1323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 'Ubuntu (8\.04|8\.10|9\.04|9\.10|10\.04|10\.10|karmic|lucid|maverick)' \ 1333dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen /etc/issue; then 1343dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Only Ubuntu 8.04 (hardy) through 10.10 (maverick) are currently" \ 1353dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen "supported" >&2 1363dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1 1373dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 1383dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1393dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif ! uname -m | egrep -q "i686|x86_64"; then 1403dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Only x86 architectures are currently supported" >&2 1413dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1423dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 1433dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1443dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif [ "x$(id -u)" != x0 ]; then 1453dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Running as non-root user." 1463dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "You might have to enter your password one or more times for 'sudo'." 1473dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 1483dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 1493dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1503dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Packages needed for chromeos only 1513dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenchromeos_dev_list="libpulse-dev" 1523dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1533dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Packages need for development 1543dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendev_list="bison fakeroot flex g++ gperf libapache2-mod-php5 libasound2-dev 1553dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libbz2-dev libcairo2-dev libdbus-glib-1-dev libgconf2-dev 1563dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libgl1-mesa-dev libglu1-mesa-dev libglib2.0-dev libgnome-keyring-dev 1573dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libgtk2.0-dev libjpeg62-dev libnspr4-dev libnss3-dev libpam0g-dev 1583dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libsctp-dev libsqlite3-dev libxslt1-dev libxss-dev libxtst-dev 1593dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen mesa-common-dev msttcorefonts patch perl php5-cgi pkg-config python 1603dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen python-dev rpm subversion ttf-dejavu-core ttf-kochi-gothic 1613dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ttf-kochi-mincho wdiff libcurl4-gnutls-dev 1623dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen $chromeos_dev_list" 1633dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1643dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Run-time libraries required by chromeos only 1653dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenchromeos_lib_list="libpulse0 libbz2-1.0 libcurl4-gnutls-dev" 1663dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1673dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Full list of required run-time libraries 1683dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenlib_list="libatk1.0-0 libc6 libasound2 libcairo2 libdbus-glib-1-2 libexpat1 1693dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libfontconfig1 libfreetype6 libglib2.0-0 libgnome-keyring0 libgtk2.0-0 1703dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libnspr4-0d libnss3-1d libpam0g libpango1.0-0 libpcre3 libpixman-1-0 1713dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libpng12-0 libstdc++6 libsqlite3-0 libx11-6 libxau6 libxcb1 1723dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 1733dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libxi6 libxinerama1 libxrandr2 libxrender1 libxtst6 zlib1g 1743dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen $chromeos_lib_list" 1753dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1763dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Debugging symbols for all of the run-time libraries 1773dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsendbg_list="libatk1.0-dbg libc6-dbg libcairo2-dbg 1783dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libfontconfig1-dbg libglib2.0-0-dbg libgtk2.0-0-dbg libnspr4-0d-dbg 1793dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libnss3-1d-dbg libpango1.0-0-dbg libpcre3-dbg libpixman-1-0-dbg 1803dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libx11-6-dbg libxau6-dbg libxcb1-dbg libxcomposite1-dbg 1813dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libxcursor1-dbg libxdamage1-dbg libxdmcp6-dbg libxext6-dbg 1823dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libxfixes3-dbg libxi6-dbg libxinerama1-dbg libxrandr2-dbg 1833dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen libxrender1-dbg libxtst6-dbg zlib1g-dbg" 1843dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1853dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# CUPS package changed its name from hardy to the next version. Include 1863dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# proper package here depending on the system. 1873dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif egrep -q 'Ubuntu (8\.04|8\.10)' /etc/issue; then 1883dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dev_list="${dev_list} libcupsys2-dev" 1893dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenelse 1903dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dev_list="${dev_list} libcups2-dev" 1913dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 1923dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 1933dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# apache2.2-bin package was introduced in karmic. 1943dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif egrep -q 'Ubuntu (8\.04|8\.10|9\.04)' /etc/issue; then 1953dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dev_list="${dev_list} apache2" 1963dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenelse 1973dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dev_list="${dev_list} apache2.2-bin" 1983dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 1993dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2003dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is 2013dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has 2023dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# been provided to yes_no(), the function also accepts RETURN as a user input. 2033dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# The parameter specifies the exit code that should be returned in that case. 2043dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# The function will echo the user's selection followed by a newline character. 2053dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Users can abort the function by pressing CTRL-C. This will call "exit 1". 2063dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenyes_no() { 2073dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen local c 2083dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen while :; do 2093dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT 2103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen stty -echo iuclc -icanon 2>/dev/null 2113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dd count=1 bs=1 2>/dev/null | od -An -tx1)" 2123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen case "$c" in 2133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen " 0a") if [ -n "$1" ]; then 2143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ $1 -eq 0 ] && echo "Y" || echo "N" 2153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen return $1 2163dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 2173dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ;; 2183dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen " 79") echo "Y" 2193dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen return 0 2203dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ;; 2213dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen " 6e") echo "N" 2223dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen return 1 2233dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ;; 2243dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen "") echo "Aborted" >&2 2253dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1 2263dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ;; 2273dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen *) # The user pressed an unrecognized key. As we are not echoing 2283dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # any incorrect user input, alert the user by ringing the bell. 2293dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen (tput bel) 2>/dev/null 2303dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ;; 2313dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen esac 2323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen done 2333dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen} 2343dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2353dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif test "$do_inst_syms" = "" 2363dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenthen 2373dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "This script installs all tools and libraries needed to build Chromium." 2383dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "" 2393dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "For most of the libraries, it can also install debugging symbols, which" 2403dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "will allow you to debug code in the system libraries. Most developers" 2413dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "won't need these symbols." 2423dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo -n "Do you want me to install them for you (y/N) " 2433dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if yes_no 1; then 2443dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen do_inst_syms=1 2453dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 2463dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 2473dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif test "$do_inst_syms" = "1"; then 2483dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installing debugging symbols." 2493dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenelse 2503dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Skipping installation of debugging symbols." 2513dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dbg_list= 2523dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 2533dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2543dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsensudo apt-get update 2553dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2563dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# We initially run "apt-get" with the --reinstall option and parse its output. 2573dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# This way, we can find all the packages that need to be newly installed 2583dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# without accidentally promoting any packages from "auto" to "manual". 2593dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# We then re-run "apt-get" with just the list of missing packages. 2603dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenecho "Finding missing packages..." 2613dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenpackages="${dev_list} ${lib_list} ${dbg_list}" 2623dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Intentially leaving $packages unquoted so it's more readable. 2633dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenecho "Packages required: " $packages 2643dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenecho 2653dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsennew_list_cmd="sudo apt-get install --reinstall $(echo $packages)" 2663dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif new_list="$(yes n | LANG=C $new_list_cmd)"; then 2673dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # We probably never hit this following line. 2683dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "No missing packages, and the packages are up-to-date." 2693dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenelif [ $? -eq 1 ]; then 2703dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # We expect apt-get to have exit status of 1. 2713dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # This indicates that we canceled the install with "yes n|". 2723dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen new_list=$(echo "$new_list" | 2733dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d') 2743dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen new_list=$(echo "$new_list" | sed 's/ *$//') 2753dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if [ -z "$new_list" ] ; then 2763dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "No missing packages, and the packages are up-to-date." 2773dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen else 2783dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installing missing packages: $new_list." 2793dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo apt-get install ${new_list} 2803dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 2813dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 2823dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenelse 2833dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # An apt-get exit status of 100 indicates that a real error has occurred. 2843dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2853dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # I am intentionally leaving out the '"'s around new_list_cmd, 2863dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # as this makes it easier to cut and paste the output 2873dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "The following command failed: " ${new_list_cmd} 2883dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 2893dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "It produces the following output:" 2903dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen yes n | $new_list_cmd || true 2913dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 2923dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "You will have to install the above packages yourself." 2933dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 2943dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 100 2953dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 2963dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 2973dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Some operating systems already ship gold (on recent Debian and 2983dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Ubuntu you can do "apt-get install binutils-gold" to get it), but 2993dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# older releases didn't. Additionally, gold 2.20 (included in Ubuntu 3003dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Lucid) makes binaries that just segfault, and 2.20.1 does not support 3013dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# --map-whole-files. 3023dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# So install from source if we don't have a good version. 3033dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3043dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsencase `ld --version` in 3053dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen*gold*2.2[1-9].*) ;; 3063dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen* ) 3073dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if test "$do_inst_gold" = "" 3083dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 3093dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Gold is a new linker that links Chrome 5x faster than ld." 3103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Don't use it if you need to link other apps (e.g. valgrind, wine)" 3113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo -n "REPLACE SYSTEM LINKER ld with gold and back up ld? (y/N) " 3123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if yes_no 1; then 3133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen do_inst_gold=1 3143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3163dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if test "$do_inst_gold" = "1" 3173dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 3183dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # If the system provides a good version of gold, just install it. 3193dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if apt-cache show binutils-gold | grep -Eq 'Version: 2.2[1-9].*'; then 3203dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installing binutils-gold. Backing up ld as ld.single." 3213dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo apt-get install binutils-gold 3223dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen else 3233dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # FIXME: avoid installing as /usr/bin/ld 3243dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Building binutils. Backing up ld as ld.orig." 3253dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen install_gold || exit 99 3263dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3273dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen else 3283dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Not installing gold." 3293dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3303dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenesac 3313dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen# Install 32bit backwards compatibility support for 64bit systems 3333dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenif [ "$(uname -m)" = "x86_64" ]; then 3343dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if test "$do_inst_lib32" = "" 3353dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 3363dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installing 32bit libraries not already provided by the system" 3373dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 3383dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "This is only needed to build a 32-bit Chrome on your 64-bit system." 3393dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo 3403dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "While we only need to install a relatively small number of library" 3413dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "files, we temporarily need to download a lot of large *.deb packages" 3423dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "that contain these files. We will create new *.deb packages that" 3433dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "include just the 32bit libraries. These files will then be found on" 3443dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "your system in places like /lib32, /usr/lib32, /usr/lib/debug/lib32," 3453dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "/usr/lib/debug/usr/lib32. If you ever need to uninstall these files," 3463dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "look for packages named *-ia32.deb." 3473dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Do you want me to download all packages needed to build new 32bit" 3483dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo -n "package files (Y/n) " 3493dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if yes_no 0; then 3503dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen do_inst_lib32=1 3513dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3523dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3533dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen if test "$do_inst_lib32" != "1" 3543dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen then 3553dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Exiting without installing any 32bit libraries." 3563dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 0 3573dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen fi 3583dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3593dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Standard 32bit compatibility libraries 3603dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "First, installing the limited existing 32-bit support..." 3613dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen cmp_list="ia32-libs lib32asound2-dev lib32readline5-dev lib32stdc++6 lib32z1 3623dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen lib32z1-dev libc6-dev-i386 libc6-i386 g++-multilib" 3633dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo apt-get install $cmp_list 3643dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3653dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tmp=/tmp/install-32bit.$$ 3663dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen trap 'rm -rf "${tmp}"' EXIT INT TERM QUIT 3673dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen mkdir -p "${tmp}/apt/lists/partial" "${tmp}/cache" "${tmp}/partial" 3683dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen touch "${tmp}/status" 3693dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3703dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ -r /etc/apt/apt.conf ] && cp /etc/apt/apt.conf "${tmp}/apt/" 3713dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen cat >>"${tmp}/apt/apt.conf" <<EOF 3723dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Apt::Architecture "i386"; 3733dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Dir::Cache "${tmp}/cache"; 3743dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Dir::Cache::Archives "${tmp}/"; 3753dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Dir::State::Lists "${tmp}/apt/lists/"; 3763dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen Dir::State::status "${tmp}/status"; 3773dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian MonsenEOF 3783dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3793dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Download 32bit packages 3803dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Computing list of available 32bit packages..." 3813dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo apt-get -c="${tmp}/apt/apt.conf" update 3823dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3833dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Downloading available 32bit packages..." 3843dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo apt-get -c="${tmp}/apt/apt.conf" \ 3853dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen --yes --download-only --force-yes --reinstall install \ 3863dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ${lib_list} ${dbg_list} 3873dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 3883dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Open packages, remove everything that is not a library, move the 3893dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # library to a lib32 directory and package everything as a *.deb file. 3903dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Repackaging and installing 32bit packages for use on 64bit systems..." 3913dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen for i in ${lib_list} ${dbg_list}; do 3923dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen orig="$(echo "${tmp}/${i}"_*_i386.deb)" 3933dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen compat="$(echo "${orig}" | 3943dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e 's,\(_[^_/]*_\)i386\(.deb\),-ia32\1amd64\2,')" 3953dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen rm -rf "${tmp}/staging" 3963dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen msg="$(fakeroot -u sh -exc ' 3973dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Unpack 32bit Debian archive 3983dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen umask 022 3993dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen mkdir -p "'"${tmp}"'/staging/dpkg/DEBIAN" 4003dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen cd "'"${tmp}"'/staging" 4013dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen ar x "'${orig}'" 4023dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tar zCfx dpkg data.tar.gz 4033dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tar zCfx dpkg/DEBIAN control.tar.gz 4043dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4053dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Create a posix extended regular expression fragment that will 4063dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # recognize the includes which have changed. Should be rare, 4073dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # will almost always be empty. 4083dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen includes=`sed -n -e "s/^[0-9a-z]* //g" \ 4093dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "\,usr/include/,p" dpkg/DEBIAN/md5sums | 4103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen xargs -n 1 -I FILE /bin/sh -c \ 4113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen "cmp -s dpkg/FILE /FILE || echo FILE" | 4123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tr "\n" "|" | 4133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e "s,|$,,"` 4143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # If empty, set it to not match anything. 4163dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen test -z "$includes" && includes="^//" 4173dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4183dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Turn the conflicts into an extended RE for removal from the 4193dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Provides line. 4203dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen conflicts=`sed -n -e "/Conflicts/s/Conflicts: *//;T;s/, */|/g;p" \ 4213dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dpkg/DEBIAN/control` 4223dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4233dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Rename package, change architecture, remove conflicts and dependencies 4243dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -r -i \ 4253dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Package/s/$/-ia32/" \ 4263dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Architecture/s/:.*$/: amd64/" \ 4273dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Depends/s/:.*/: ia32-libs/" \ 4283dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Provides/s/($conflicts)(, *)?//g;T1;s/, *$//;:1" \ 4293dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Recommends/d" \ 4303dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/Conflicts/d" \ 4313dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dpkg/DEBIAN/control 4323dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4333dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Only keep files that live in "lib" directories or the includes 4343dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # that have changed. 4353dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -r -i \ 4363dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "/\/lib64\//d" -e "/\/.?bin\//d" \ 4373dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "\,$includes,s,[ /]include/,&32/,g;s,include/32/,include32/,g" \ 4383dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "s, lib/, lib32/,g" \ 4393dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "s,/lib/,/lib32/,g" \ 4403dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "t;d" \ 4413dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e "\,^/usr/lib32/debug\(.*/lib32\),s,^/usr/lib32/debug,/usr/lib/debug," \ 4423dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dpkg/DEBIAN/md5sums 4433dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4443dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Re-run ldconfig after installation/removal 4453dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen { echo "#!/bin/sh"; echo "[ \"x\$1\" = xconfigure ]&&ldconfig||:"; } \ 4463dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen >dpkg/DEBIAN/postinst 4473dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen { echo "#!/bin/sh"; echo "[ \"x\$1\" = xremove ]&&ldconfig||:"; } \ 4483dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen >dpkg/DEBIAN/postrm 4493dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen chmod 755 dpkg/DEBIAN/postinst dpkg/DEBIAN/postrm 4503dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4513dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Remove any other control files 4523dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find dpkg/DEBIAN -mindepth 1 "(" -name control -o -name md5sums -o \ 4533dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -name postinst -o -name postrm ")" -o -print | 4543dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen xargs -r rm -rf 4553dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4563dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Remove any files/dirs that live outside of "lib" directories, 4573dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # or are not in our list of changed includes. 4583dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find dpkg -mindepth 1 -regextype posix-extended \ 4593dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen "(" -name DEBIAN -o -name lib -o -regex "dpkg/($includes)" ")" \ 4603dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -prune -o -print | tac | 4613dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen xargs -r -n 1 sh -c "rm \$0 2>/dev/null || rmdir \$0 2>/dev/null || : " 4623dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find dpkg -name lib64 -o -name bin -o -name "?bin" | 4633dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen tac | xargs -r rm -rf 4643dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4653dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Remove any symbolic links that were broken by the above steps. 4663dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find -L dpkg -type l -print | tac | xargs -r rm -rf 4673dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4683dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Rename lib to lib32, but keep debug symbols in /usr/lib/debug/usr/lib32 4693dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # That is where gdb looks for them. 4703dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find dpkg -type d -o -path "*/lib/*" -print | 4713dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen xargs -r -n 1 sh -c " 4723dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen i=\$(echo \"\${0}\" | 4733dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e s,/lib/,/lib32/,g \ 4743dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen -e s,/usr/lib32/debug\\\\\(.*/lib32\\\\\),/usr/lib/debug\\\\1,); 4753dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen mkdir -p \"\${i%/*}\"; 4763dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen mv \"\${0}\" \"\${i}\"" 4773dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4783dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Rename include to include32. 4793dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ -d "dpkg/usr/include" ] && mv "dpkg/usr/include" "dpkg/usr/include32" 4803dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4813dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Prune any empty directories 4823dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen find dpkg -type d | tac | xargs -r -n 1 rmdir 2>/dev/null || : 4833dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4843dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Create our own Debian package 4853dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen cd .. 4863dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen dpkg --build staging/dpkg .' 2>&1)" 4873dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen compat="$(eval echo $(echo "${compat}" | 4883dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e 's,_[^_/]*_amd64.deb,_*_amd64.deb,'))" 4893dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ -r "${compat}" ] || { 4903dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "${msg}" >&2 4913dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Failed to build new Debian archive!" >&2 4923dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen exit 1 4933dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen } 4943dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 4953dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen msg="$(sudo dpkg -i "${compat}" 2>&1)" && { 4963dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Installed ${compat##*/}" 4973dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen } || { 4983dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # echo "${msg}" >&2 4993dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Skipped ${compat##*/}" 5003dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen } 5013dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen done 5023dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen 5033dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen # Add symbolic links for developing 32bit code 5043dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen echo "Adding missing symbolic links, enabling 32bit code development..." 5053dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen for i in $(find /lib32 /usr/lib32 -maxdepth 1 -name \*.so.\* | 5063dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sed -e 's/[.]so[.][0-9].*/.so/' | 5073dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sort -u); do 5083dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ "x${i##*/}" = "xld-linux.so" ] && continue 5093dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ -r "$i" ] && continue 5103dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen j="$(ls "$i."* | sed -e 's/.*[.]so[.]\([^.]*\)$/\1/;t;d' | 5113dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sort -n | tail -n 1)" 5123dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen [ -r "$i.$j" ] || continue 5133dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen sudo ln -s "${i##*/}.$j" "$i" 5143dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsen done 5153dff810fe0cc4962a5fa554318e9bf8bc45f5274Kristian Monsenfi 516