Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1342)

Unified Diff: chrome_linux/installer/rpm/build.sh

Issue 33333002: Roll Linux reference build to official build 30.0.1599.33 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/reference_builds/
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome_linux/installer/debian/prerm ('k') | chrome_linux/installer/rpm/chrome.spec.template » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome_linux/installer/rpm/build.sh
===================================================================
--- chrome_linux/installer/rpm/build.sh (revision 0)
+++ chrome_linux/installer/rpm/build.sh (revision 0)
@@ -0,0 +1,300 @@
+#!/bin/bash
+#
+# Copyright (c) 2012 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+# TODO(mmoss) This currently only works with official builds, since non-official
+# builds don't add the "${BUILDDIR}/installer/" files needed for packaging.
+
+set -e
+if [ "$VERBOSE" ]; then
+ set -x
+fi
+set -u
+
+gen_spec() {
+ rm -f "${SPEC}"
+ # Trunk packages need to install to a custom path so they don't conflict with
+ # release channel packages.
+ local PACKAGE_FILENAME="${PACKAGE}"
+ if [ "$CHANNEL" = "trunk" ] || [ "$CHANNEL" = "asan" ]; then
+ local INSTALLDIR="${INSTALLDIR}-${CHANNEL}"
+ PACKAGE_FILENAME="${PACKAGE}-${CHANNEL}"
+ local MENUNAME="${MENUNAME} (${CHANNEL})"
+ fi
+ process_template "${SCRIPTDIR}/chrome.spec.template" "${SPEC}"
+}
+
+# Setup the installation directory hierachy in the package staging area.
+prep_staging_rpm() {
+ prep_staging_common
+ install -m 755 -d "${STAGEDIR}/etc/cron.daily"
+}
+
+# Put the package contents in the staging area.
+stage_install_rpm() {
+ # Trunk packages need to install to a custom path and with custom filenames
+ # (e.g. not /usr/bin/google-chrome) so they don't conflict with release
+ # channel packages.
+ if [ "$CHANNEL" = "trunk" ] || [ "$CHANNEL" = "asan" ]; then
+ local PACKAGE="${PACKAGE}-${CHANNEL}"
+ local INSTALLDIR="${INSTALLDIR}-${CHANNEL}"
+ # This would ideally be compiled into the app, but that's a bit too
+ # intrusive of a change for these limited use channels, so we'll just hack
+ # it into the wrapper script. The user can still override since it seems to
+ # work to specify --user-data-dir multiple times on the command line, with
+ # the last occurrence winning.
+ local DEFAULT_FLAGS="--user-data-dir=\"\${HOME}/.config/${PACKAGE}\""
+ local MENUNAME="${MENUNAME} (${CHANNEL})"
+ fi
+ prep_staging_rpm
+ stage_install_common
+ echo "Staging RPM install files in '${STAGEDIR}'..."
+ process_template "${BUILDDIR}/installer/common/rpmrepo.cron" \
+ "${STAGEDIR}/etc/cron.daily/${PACKAGE}"
+ chmod 755 "${STAGEDIR}/etc/cron.daily/${PACKAGE}"
+}
+
+# Actually generate the package file.
+do_package() {
+ echo "Packaging ${ARCHITECTURE}..."
+ PROVIDES="${PACKAGE}"
+ local REPS="$REPLACES"
+ REPLACES=""
+ for rep in $REPS; do
+ if [ -z "$REPLACES" ]; then
+ REPLACES="$PACKAGE-$rep"
+ else
+ REPLACES="$REPLACES $PACKAGE-$rep"
+ fi
+ done
+
+ # The symbols in libX11.so are not versioned, so when a newer version has new
+ # symbols like _XGetRequest, RPM's find-requires tool does not detect it, and
+ # there is no way to specify a libX11.so version number to prevent
+ # installation on affected distros like OpenSUSE 12.1 and Fedora 16.
+ # Thus there has to be distro-specific conflict here.
+ # TODO(thestig) Remove these in the future when other requirements prevent
+ # installation on affected distros.
+ ADDITIONAL_CONFLICTS="xorg-x11-libX11 < 7.6_1 libX11 < 1.4.99"
+ REPLACES="$REPLACES $ADDITIONAL_CONFLICTS"
+
+ # If we specify a dependecy of foo.so below, we would depend on both the
+ # 32 and 64-bit versions on a 64-bit machine. The current version of RPM
+ # we use is too old and doesn't provide %{_isa}, so we do this manually.
+ if [ "$ARCHITECTURE" = "x86_64" ] ; then
+ local EMPTY_VERSION="()"
+ local PKG_ARCH="(64bit)"
+ elif [ "$ARCHITECTURE" = "i386" ] ; then
+ local EMPTY_VERSION=""
+ local PKG_ARCH=""
+ fi
+
+ # Use find-requires script to make sure the dependencies are complete
+ # (especially libc and libstdc++ versions). Filter out udev to avoid
+ # libudev.so.0 vs. libudev.so.1 mismatches.
+ DETECTED_DEPENDS="$(echo "${BUILDDIR}/chrome" | /usr/lib/rpm/find-requires |
+ grep -v udev)"
+
+ # Compare the expected dependency list to the generated list.
+ BAD_DIFF=0
+ diff "$SCRIPTDIR/expected_deps_$ARCHITECTURE" \
+ <(echo "${DETECTED_DEPENDS}") || BAD_DIFF=1
+ if [ $BAD_DIFF -ne 0 ] && [ -z "${IGNORE_DEPS_CHANGES:-}" ]; then
+ echo
+ echo "ERROR: Shared library dependencies changed!"
+ echo "If this is intentional, please update:"
+ echo "chrome/installer/linux/rpm/expected_deps_i686"
+ echo "chrome/installer/linux/rpm/expected_deps_x86_64"
+ echo
+ exit $BAD_DIFF
+ fi
+
+ # libgdk_pixbuf is added in LSB 3.2 and no longer explicitly required.
+ # libcairo, libpangocairo, libasound are in LSB 4. and no longer explicitly
+ # required.
+ # xdg-utils is still optional in LSB 4.0.
+ # nss (bundled) is optional in LSB 4.0.
+ #
+ # We want to depend on the system SSL certs so wget can upload crash reports
+ # securely, but there's no common capability between the distros. Bugs filed:
+ # https://qa.mandriva.com/show_bug.cgi?id=55714
+ # https://bugzilla.redhat.com/show_bug.cgi?id=538158
+ # https://bugzilla.novell.com/show_bug.cgi?id=556248
+ DEPENDS="lsb >= 4.0, \
+ libcurl.so.4${EMPTY_VERSION}${PKG_ARCH}, \
+ libnss3.so(NSS_3.14.3)${PKG_ARCH}, \
+ wget, \
+ xdg-utils, \
+ zlib, \
+ $(echo "${DETECTED_DEPENDS}" | tr '\n' ',')"
+ gen_spec
+
+ # Create temporary rpmbuild dirs.
+ RPMBUILD_DIR=$(mktemp -d -t rpmbuild.XXXXXX) || exit 1
+ mkdir -p "$RPMBUILD_DIR/BUILD"
+ mkdir -p "$RPMBUILD_DIR/RPMS"
+
+ # '__os_install_post ${nil}' disables a bunch of automatic post-processing
+ # (brp-compress, etc.), which by default appears to only be enabled on 32-bit,
+ # and which doesn't gain us anything since we already explicitly do all the
+ # compression, symbol stripping, etc. that we want.
+ fakeroot rpmbuild -bb --target="$ARCHITECTURE" --rmspec \
+ --define "_topdir $RPMBUILD_DIR" \
+ --define "_binary_payload w9.bzdio" \
+ --define "__os_install_post %{nil}" \
+ "${SPEC}"
+ PKGNAME="${PACKAGE}-${CHANNEL}-${VERSION}-${PACKAGE_RELEASE}"
+ mv "$RPMBUILD_DIR/RPMS/$ARCHITECTURE/${PKGNAME}.${ARCHITECTURE}.rpm" \
+ "${OUTPUTDIR}"
+ # Make sure the package is world-readable, otherwise it causes problems when
+ # copied to share drive.
+ chmod a+r "${OUTPUTDIR}/${PKGNAME}.$ARCHITECTURE.rpm"
+ rm -rf "$RPMBUILD_DIR"
+}
+
+# Remove temporary files and unwanted packaging output.
+cleanup() {
+ rm -rf "${STAGEDIR}"
+ rm -rf "${TMPFILEDIR}"
+}
+
+usage() {
+ echo "usage: $(basename $0) [-c channel] [-a target_arch] [-o 'dir']"
+ echo " [-b 'dir']"
+ echo "-c channel the package channel (trunk, asan, unstable, beta, stable)"
+ echo "-a arch package architecture (ia32 or x64)"
+ echo "-o dir package output directory [${OUTPUTDIR}]"
+ echo "-b dir build input directory [${BUILDDIR}]"
+ echo "-h this help message"
+}
+
+# Check that the channel name is one of the allowable ones.
+verify_channel() {
+ case $CHANNEL in
+ stable )
+ CHANNEL=stable
+ REPLACES="unstable beta"
+ ;;
+ unstable|dev|alpha )
+ CHANNEL=unstable
+ REPLACES="stable beta"
+ ;;
+ testing|beta )
+ CHANNEL=beta
+ REPLACES="unstable stable"
+ ;;
+ trunk|asan )
+ # This is a special package, mostly for development testing, so don't make
+ # it replace any installed release packages.
+ REPLACES="dummy"
+ # Setting this to empty will prevent it from updating any existing configs
+ # from release packages.
+ REPOCONFIG=""
+ ;;
+ * )
+ echo
+ echo "ERROR: '$CHANNEL' is not a valid channel type."
+ echo
+ exit 1
+ ;;
+ esac
+}
+
+process_opts() {
+ while getopts ":o:b:c:a:h" OPTNAME
+ do
+ case $OPTNAME in
+ o )
+ OUTPUTDIR=$(readlink -f "${OPTARG}")
+ mkdir -p "${OUTPUTDIR}"
+ ;;
+ b )
+ BUILDDIR=$(readlink -f "${OPTARG}")
+ ;;
+ c )
+ CHANNEL="$OPTARG"
+ verify_channel
+ ;;
+ a )
+ TARGETARCH="$OPTARG"
+ ;;
+ h )
+ usage
+ exit 0
+ ;;
+ \: )
+ echo "'-$OPTARG' needs an argument."
+ usage
+ exit 1
+ ;;
+ * )
+ echo "invalid command-line option: $OPTARG"
+ usage
+ exit 1
+ ;;
+ esac
+ done
+}
+
+#=========
+# MAIN
+#=========
+
+SCRIPTDIR=$(readlink -f "$(dirname "$0")")
+OUTPUTDIR="${PWD}"
+STAGEDIR=$(mktemp -d -t rpm.build.XXXXXX) || exit 1
+TMPFILEDIR=$(mktemp -d -t rpm.tmp.XXXXXX) || exit 1
+CHANNEL="trunk"
+# Default target architecture to same as build host.
+if [ "$(uname -m)" = "x86_64" ]; then
+ TARGETARCH="x64"
+else
+ TARGETARCH="ia32"
+fi
+SPEC="${TMPFILEDIR}/chrome.spec"
+
+# call cleanup() on exit
+trap cleanup 0
+process_opts "$@"
+if [ ! "$BUILDDIR" ]; then
+ BUILDDIR=$(readlink -f "${SCRIPTDIR}/../../../../../out/Release")
+fi
+
+source ${BUILDDIR}/installer/common/installer.include
+
+get_version_info
+
+if [ "$CHROMIUM_BUILD" = "_google_chrome" ]; then
+ source "${BUILDDIR}/installer/common/google-chrome.info"
+else
+ source "${BUILDDIR}/installer/common/chromium-browser.info"
+fi
+eval $(sed -e "s/^\([^=]\+\)=\(.*\)$/export \1='\2'/" \
+ "${BUILDDIR}/installer/theme/BRANDING")
+
+REPOCONFIG="http://dl.google.com/linux/${PACKAGE#google-}/rpm/stable"
+verify_channel
+
+# Make everything happen in the OUTPUTDIR.
+cd "${OUTPUTDIR}"
+
+case "$TARGETARCH" in
+ ia32 )
+ export ARCHITECTURE="i386"
+ stage_install_rpm
+ ;;
+ x64 )
+ export ARCHITECTURE="x86_64"
+ stage_install_rpm
+ ;;
+ * )
+ echo
+ echo "ERROR: Don't know how to build RPMs for '$TARGETARCH'."
+ echo
+ exit 1
+ ;;
+esac
+
+do_package
Property changes on: chrome_linux/installer/rpm/build.sh
___________________________________________________________________
Added: svn:executable
+ *
« no previous file with comments | « chrome_linux/installer/debian/prerm ('k') | chrome_linux/installer/rpm/chrome.spec.template » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698