| Index: chrome_linux/installer/common/installer.include
|
| ===================================================================
|
| --- chrome_linux/installer/common/installer.include (revision 0)
|
| +++ chrome_linux/installer/common/installer.include (revision 0)
|
| @@ -0,0 +1,241 @@
|
| +# Recursively replace @@include@@ template variables with the referenced file,
|
| +# and write the resulting text to stdout.
|
| +process_template_includes() {
|
| + INCSTACK+="$1->"
|
| + # Includes are relative to the file that does the include.
|
| + INCDIR=$(dirname $1)
|
| + # Clear IFS so 'read' doesn't trim whitespace
|
| + local OLDIFS="$IFS"
|
| + IFS=''
|
| + while read -r LINE
|
| + do
|
| + INCLINE=$(sed -e '/^[[:space:]]*@@include@@/!d' <<<$LINE)
|
| + if [ -n "$INCLINE" ]; then
|
| + INCFILE=$(echo $INCLINE | sed -e "s#@@include@@\(.*\)#\1#")
|
| + # Simple filename match to detect cyclic includes.
|
| + CYCLE=$(sed -e "\#$INCFILE#"'!d' <<<$INCSTACK)
|
| + if [ "$CYCLE" ]; then
|
| + echo "ERROR: Possible cyclic include detected." 1>&2
|
| + echo "$INCSTACK$INCFILE" 1>&2
|
| + exit 1
|
| + fi
|
| + if [ ! -r "$INCDIR/$INCFILE" ]; then
|
| + echo "ERROR: Couldn't read include file: $INCDIR/$INCFILE" 1>&2
|
| + exit 1
|
| + fi
|
| + process_template_includes "$INCDIR/$INCFILE"
|
| + else
|
| + echo "$LINE"
|
| + fi
|
| + done < "$1"
|
| + IFS="$OLDIFS"
|
| + INCSTACK=${INCSTACK%"$1->"}
|
| +}
|
| +
|
| +# Replace template variables (@@VARNAME@@) in the given template file. If a
|
| +# second argument is given, save the processed text to that filename, otherwise
|
| +# modify the template file in place.
|
| +process_template() (
|
| + # Don't worry if some of these substitution variables aren't set.
|
| + # Note that this function is run in a sub-shell so we don't leak this
|
| + # setting, since we still want unbound variables to be an error elsewhere.
|
| + set +u
|
| +
|
| + local TMPLIN="$1"
|
| + if [ -z "$2" ]; then
|
| + local TMPLOUT="$TMPLIN"
|
| + else
|
| + local TMPLOUT="$2"
|
| + fi
|
| + # Process includes first so included text also gets substitutions.
|
| + TMPLINCL="$(process_template_includes "$TMPLIN")"
|
| + sed \
|
| + -e "s#@@PACKAGE@@#${PACKAGE}#g" \
|
| + -e "s#@@PACKAGE_FILENAME@@#${PACKAGE_FILENAME}#g" \
|
| + -e "s#@@PROGNAME@@#${PROGNAME}#g" \
|
| + -e "s#@@CHANNEL@@#${CHANNEL}#g" \
|
| + -e "s#@@COMPANY_FULLNAME@@#${COMPANY_FULLNAME}#g" \
|
| + -e "s#@@VERSION@@#${VERSION}#g" \
|
| + -e "s#@@PACKAGE_RELEASE@@#${PACKAGE_RELEASE}#g" \
|
| + -e "s#@@VERSIONFULL@@#${VERSIONFULL}#g" \
|
| + -e "s#@@INSTALLDIR@@#${INSTALLDIR}#g" \
|
| + -e "s#@@BUILDDIR@@#${BUILDDIR}#g" \
|
| + -e "s#@@STAGEDIR@@#${STAGEDIR}#g" \
|
| + -e "s#@@SCRIPTDIR@@#${SCRIPTDIR}#g" \
|
| + -e "s#@@MENUNAME@@#${MENUNAME}#g" \
|
| + -e "s#@@PRODUCTURL@@#${PRODUCTURL}#g" \
|
| + -e "s#@@PREDEPENDS@@#${PREDEPENDS}#g" \
|
| + -e "s#@@DEPENDS@@#${DEPENDS}#g" \
|
| + -e "s#@@PROVIDES@@#${PROVIDES}#g" \
|
| + -e "s#@@REPLACES@@#${REPLACES}#g" \
|
| + -e "s#@@CONFLICTS@@#${CONFLICTS}#g" \
|
| + -e "s#@@ARCHITECTURE@@#${ARCHITECTURE}#g" \
|
| + -e "s#@@MAINTNAME@@#${MAINTNAME}#g" \
|
| + -e "s#@@MAINTMAIL@@#${MAINTMAIL}#g" \
|
| + -e "s#@@REPOCONFIG@@#${REPOCONFIG}#g" \
|
| + -e "s#@@SHORTDESC@@#${SHORTDESC}#g" \
|
| + -e "s#@@FULLDESC@@#${FULLDESC}#g" \
|
| + -e "s#@@DEFAULT_FLAGS@@#${DEFAULT_FLAGS:-}#g" \
|
| + > "$TMPLOUT" <<< "$TMPLINCL"
|
| +)
|
| +
|
| +# Setup the installation directory hierachy in the package staging area.
|
| +prep_staging_common() {
|
| + install -m 755 -d "${STAGEDIR}/${INSTALLDIR}" \
|
| + "${STAGEDIR}/usr/bin" \
|
| + "${STAGEDIR}/usr/share/applications" \
|
| + "${STAGEDIR}/usr/share/gnome-control-center/default-apps" \
|
| + "${STAGEDIR}/usr/share/man/man1"
|
| +}
|
| +
|
| +get_version_info() {
|
| + source "${BUILDDIR}/installer/version.txt"
|
| + VERSION="${MAJOR}.${MINOR}.${BUILD}.${PATCH}"
|
| + # TODO(phajdan.jr): Provide a mechanism to pass a different package
|
| + # release number if needed. The meaning of it is to bump it for
|
| + # packaging-only changes while the underlying software has the same version.
|
| + # This corresponds to the Release field in RPM spec files and debian_revision
|
| + # component of the Version field for DEB control file.
|
| + # Generally with Chrome's fast release cycle it'd be more hassle to try
|
| + # to bump this number between releases.
|
| + PACKAGE_RELEASE="1"
|
| +}
|
| +
|
| +stage_install_common() {
|
| + echo "Staging common install files in '${STAGEDIR}'..."
|
| +
|
| + # TODO(mmoss) This assumes we built the static binaries. To support shared
|
| + # builds, we probably want an install target in scons so it can give us all
|
| + # the right files. See also:
|
| + # http://code.google.com/p/chromium/issues/detail?id=4451
|
| + #
|
| + # app
|
| + # We need to add the debug link so gdb knows to look for the symbols.
|
| + DEBUGFILE="${BUILDDIR}/${PROGNAME}.debug"
|
| + STRIPPEDFILE="${BUILDDIR}/${PROGNAME}.stripped"
|
| + eu-strip -o "${STRIPPEDFILE}" -f "${DEBUGFILE}" "${BUILDDIR}/${PROGNAME}"
|
| + install -m 755 "${STRIPPEDFILE}" "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}"
|
| + rm "${DEBUGFILE}" "${STRIPPEDFILE}"
|
| +
|
| + # resources
|
| + install -m 644 "${BUILDDIR}/${PROGNAME}.pak" "${STAGEDIR}/${INSTALLDIR}/"
|
| + install -m 644 "${BUILDDIR}/resources.pak" "${STAGEDIR}/${INSTALLDIR}/"
|
| + # TODO(mmoss): This has broken a couple times on adding new .pak files. Maybe
|
| + # we should flag all installer files in FILES.cfg and get them from there, so
|
| + # there's only one place people need to keep track of such things (and in
|
| + # only the public repository).
|
| + if [ -r "${BUILDDIR}/chrome_100_percent.pak" ]; then
|
| + install -m 644 "${BUILDDIR}/chrome_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
|
| + else
|
| + install -m 644 "${BUILDDIR}/theme_resources_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
|
| + install -m 644 "${BUILDDIR}/ui_resources_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
|
| + fi
|
| +
|
| + # sandbox
|
| + # Rename sandbox binary with hyphen instead of underscore because that's what
|
| + # the code looks for, but the build targets can't use hyphens (scons bug?)
|
| + install -m 4755 -s "${BUILDDIR}/${PROGNAME}_sandbox" \
|
| + "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}-sandbox"
|
| +
|
| + # l10n paks
|
| + cp -a "${BUILDDIR}/locales" "${STAGEDIR}/${INSTALLDIR}/"
|
| + find "${STAGEDIR}/${INSTALLDIR}/locales" -type f -exec chmod 644 '{}' \;
|
| + find "${STAGEDIR}/${INSTALLDIR}/locales" -type d -exec chmod 755 '{}' \;
|
| +
|
| + # ffmpeg libs
|
| + install -m 644 -s "${BUILDDIR}/libffmpegsumo.so" "${STAGEDIR}/${INSTALLDIR}/"
|
| +
|
| + # Widevine CDM.
|
| + if [ -f "${BUILDDIR}/libwidevinecdmadapter.so" ]; then
|
| + install -m 644 -s "${BUILDDIR}/libwidevinecdmadapter.so" "${STAGEDIR}/${INSTALLDIR}/"
|
| + install -m 644 "${BUILDDIR}/libwidevinecdm.so" "${STAGEDIR}/${INSTALLDIR}/"
|
| + fi
|
| +
|
| + # Pepper Flash.
|
| + PEPPERFLASH_SRCDIR="${BUILDDIR}/PepperFlash"
|
| + PEPPERFLASH_DESTDIR="${STAGEDIR}/${INSTALLDIR}/PepperFlash"
|
| + install -m 755 -d "${PEPPERFLASH_DESTDIR}"
|
| + install -m 644 -s "${PEPPERFLASH_SRCDIR}/libpepflashplayer.so" \
|
| + "${PEPPERFLASH_DESTDIR}/"
|
| + install -m 644 "${PEPPERFLASH_SRCDIR}/manifest.json" \
|
| + "${PEPPERFLASH_DESTDIR}/"
|
| +
|
| + # pdf plugin
|
| + if [ -f "${BUILDDIR}/libpdf.so" ]; then
|
| + install -m 644 -s "${BUILDDIR}/libpdf.so" "${STAGEDIR}/${INSTALLDIR}/"
|
| + fi
|
| +
|
| + # peerconnection shared library
|
| + if [ -f "${BUILDDIR}/lib/libpeerconnection.so" ]; then
|
| + install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/lib/"
|
| + install -m 644 -s "${BUILDDIR}/lib/libpeerconnection.so" "${STAGEDIR}/${INSTALLDIR}/lib/"
|
| + fi
|
| +
|
| + # nacl pepper plugin
|
| + if [ -f "${BUILDDIR}/libppGoogleNaClPluginChrome.so" ]; then
|
| + install -m 644 -s "${BUILDDIR}/libppGoogleNaClPluginChrome.so" "${STAGEDIR}/${INSTALLDIR}/"
|
| + fi
|
| +
|
| + # nacl_helper and nacl_helper_bootstrap
|
| + # Don't use "-s" (strip) because this runs binutils "strip", which
|
| + # mangles the special ELF program headers of nacl_helper_bootstrap.
|
| + # Explicitly use eu-strip instead, because it doesn't have that problem.
|
| + for file in nacl_helper nacl_helper_bootstrap; do
|
| + buildfile="${BUILDDIR}/${file}"
|
| + if [ -f "${buildfile}" ]; then
|
| + strippedfile="${buildfile}.stripped"
|
| + debugfile="${buildfile}.debug"
|
| + eu-strip -o "${strippedfile}" -f "${debugfile}" "${buildfile}"
|
| + install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}"
|
| + fi
|
| + done
|
| + # Don't use "-s" (strip) because this would use the Linux toolchain to
|
| + # strip the NaCl binary, which has the potential to break it. It
|
| + # certainly resets the OSABI and ABIVERSION fields to non-NaCl values,
|
| + # although the NaCl IRT loader doesn't care about these fields. In any
|
| + # case, the IRT binaries are already stripped by NaCl's build process.
|
| + for filename in ${BUILDDIR}/nacl_irt_*.nexe; do
|
| + # Re-check the filename in case globbing matched nothing.
|
| + if [ -f "$filename" ]; then
|
| + install -m 644 "$filename" "${STAGEDIR}/${INSTALLDIR}/`basename "$filename"`"
|
| + fi
|
| + done
|
| +
|
| + # default apps
|
| + if [ -d "${BUILDDIR}/default_apps" ]; then
|
| + cp -a "${BUILDDIR}/default_apps" "${STAGEDIR}/${INSTALLDIR}/"
|
| + find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type d -exec chmod 755 '{}' \;
|
| + find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type f -exec chmod 644 '{}' \;
|
| + fi
|
| +
|
| + # launcher script and symlink
|
| + process_template "${BUILDDIR}/installer/common/wrapper" \
|
| + "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}"
|
| + chmod 755 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}"
|
| + pushd "${STAGEDIR}/usr/bin/"
|
| + ln -snf "${INSTALLDIR}/${PACKAGE}" "${PACKAGE}"
|
| + popd
|
| +
|
| + # app icons
|
| + install -m 644 \
|
| + "${BUILDDIR}/installer/theme/product_logo_"*.png \
|
| + "${BUILDDIR}/installer/theme/product_logo_32.xpm" \
|
| + "${STAGEDIR}/${INSTALLDIR}/"
|
| +
|
| + # desktop integration
|
| + install -m 755 "${BUILDDIR}/xdg-mime" "${STAGEDIR}${INSTALLDIR}/"
|
| + install -m 755 "${BUILDDIR}/xdg-settings" "${STAGEDIR}${INSTALLDIR}/"
|
| + process_template "${BUILDDIR}/installer/common/desktop.template" \
|
| + "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}.desktop"
|
| + chmod 644 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}.desktop"
|
| + process_template "${BUILDDIR}/installer/common/default-app.template" \
|
| + "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.xml"
|
| + chmod 644 "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.xml"
|
| + process_template "${BUILDDIR}/installer/common/default-app-block.template" \
|
| + "${STAGEDIR}${INSTALLDIR}/default-app-block"
|
| + chmod 644 "${STAGEDIR}${INSTALLDIR}/default-app-block"
|
| +
|
| + # documentation
|
| + install -m 755 "${BUILDDIR}/${PROGNAME}.1" \
|
| + "${STAGEDIR}/usr/share/man/man1/${PACKAGE}.1"
|
| +}
|
|
|