| OLD | NEW |
| (Empty) | |
| 1 # Recursively replace @@include@@ template variables with the referenced file, |
| 2 # and write the resulting text to stdout. |
| 3 process_template_includes() { |
| 4 INCSTACK+="$1->" |
| 5 # Includes are relative to the file that does the include. |
| 6 INCDIR=$(dirname $1) |
| 7 # Clear IFS so 'read' doesn't trim whitespace |
| 8 local OLDIFS="$IFS" |
| 9 IFS='' |
| 10 while read -r LINE |
| 11 do |
| 12 INCLINE=$(sed -e '/^[[:space:]]*@@include@@/!d' <<<$LINE) |
| 13 if [ -n "$INCLINE" ]; then |
| 14 INCFILE=$(echo $INCLINE | sed -e "s#@@include@@\(.*\)#\1#") |
| 15 # Simple filename match to detect cyclic includes. |
| 16 CYCLE=$(sed -e "\#$INCFILE#"'!d' <<<$INCSTACK) |
| 17 if [ "$CYCLE" ]; then |
| 18 echo "ERROR: Possible cyclic include detected." 1>&2 |
| 19 echo "$INCSTACK$INCFILE" 1>&2 |
| 20 exit 1 |
| 21 fi |
| 22 if [ ! -r "$INCDIR/$INCFILE" ]; then |
| 23 echo "ERROR: Couldn't read include file: $INCDIR/$INCFILE" 1>&2 |
| 24 exit 1 |
| 25 fi |
| 26 process_template_includes "$INCDIR/$INCFILE" |
| 27 else |
| 28 echo "$LINE" |
| 29 fi |
| 30 done < "$1" |
| 31 IFS="$OLDIFS" |
| 32 INCSTACK=${INCSTACK%"$1->"} |
| 33 } |
| 34 |
| 35 # Replace template variables (@@VARNAME@@) in the given template file. If a |
| 36 # second argument is given, save the processed text to that filename, otherwise |
| 37 # modify the template file in place. |
| 38 process_template() ( |
| 39 # Don't worry if some of these substitution variables aren't set. |
| 40 # Note that this function is run in a sub-shell so we don't leak this |
| 41 # setting, since we still want unbound variables to be an error elsewhere. |
| 42 set +u |
| 43 |
| 44 local TMPLIN="$1" |
| 45 if [ -z "$2" ]; then |
| 46 local TMPLOUT="$TMPLIN" |
| 47 else |
| 48 local TMPLOUT="$2" |
| 49 fi |
| 50 # Process includes first so included text also gets substitutions. |
| 51 TMPLINCL="$(process_template_includes "$TMPLIN")" |
| 52 sed \ |
| 53 -e "s#@@PACKAGE@@#${PACKAGE}#g" \ |
| 54 -e "s#@@PACKAGE_FILENAME@@#${PACKAGE_FILENAME}#g" \ |
| 55 -e "s#@@PROGNAME@@#${PROGNAME}#g" \ |
| 56 -e "s#@@CHANNEL@@#${CHANNEL}#g" \ |
| 57 -e "s#@@COMPANY_FULLNAME@@#${COMPANY_FULLNAME}#g" \ |
| 58 -e "s#@@VERSION@@#${VERSION}#g" \ |
| 59 -e "s#@@PACKAGE_RELEASE@@#${PACKAGE_RELEASE}#g" \ |
| 60 -e "s#@@VERSIONFULL@@#${VERSIONFULL}#g" \ |
| 61 -e "s#@@INSTALLDIR@@#${INSTALLDIR}#g" \ |
| 62 -e "s#@@BUILDDIR@@#${BUILDDIR}#g" \ |
| 63 -e "s#@@STAGEDIR@@#${STAGEDIR}#g" \ |
| 64 -e "s#@@SCRIPTDIR@@#${SCRIPTDIR}#g" \ |
| 65 -e "s#@@MENUNAME@@#${MENUNAME}#g" \ |
| 66 -e "s#@@PRODUCTURL@@#${PRODUCTURL}#g" \ |
| 67 -e "s#@@PREDEPENDS@@#${PREDEPENDS}#g" \ |
| 68 -e "s#@@DEPENDS@@#${DEPENDS}#g" \ |
| 69 -e "s#@@PROVIDES@@#${PROVIDES}#g" \ |
| 70 -e "s#@@REPLACES@@#${REPLACES}#g" \ |
| 71 -e "s#@@CONFLICTS@@#${CONFLICTS}#g" \ |
| 72 -e "s#@@ARCHITECTURE@@#${ARCHITECTURE}#g" \ |
| 73 -e "s#@@MAINTNAME@@#${MAINTNAME}#g" \ |
| 74 -e "s#@@MAINTMAIL@@#${MAINTMAIL}#g" \ |
| 75 -e "s#@@REPOCONFIG@@#${REPOCONFIG}#g" \ |
| 76 -e "s#@@SHORTDESC@@#${SHORTDESC}#g" \ |
| 77 -e "s#@@FULLDESC@@#${FULLDESC}#g" \ |
| 78 -e "s#@@DEFAULT_FLAGS@@#${DEFAULT_FLAGS:-}#g" \ |
| 79 > "$TMPLOUT" <<< "$TMPLINCL" |
| 80 ) |
| 81 |
| 82 # Setup the installation directory hierachy in the package staging area. |
| 83 prep_staging_common() { |
| 84 install -m 755 -d "${STAGEDIR}/${INSTALLDIR}" \ |
| 85 "${STAGEDIR}/usr/bin" \ |
| 86 "${STAGEDIR}/usr/share/applications" \ |
| 87 "${STAGEDIR}/usr/share/gnome-control-center/default-apps" \ |
| 88 "${STAGEDIR}/usr/share/man/man1" |
| 89 } |
| 90 |
| 91 get_version_info() { |
| 92 source "${BUILDDIR}/installer/version.txt" |
| 93 VERSION="${MAJOR}.${MINOR}.${BUILD}.${PATCH}" |
| 94 # TODO(phajdan.jr): Provide a mechanism to pass a different package |
| 95 # release number if needed. The meaning of it is to bump it for |
| 96 # packaging-only changes while the underlying software has the same version. |
| 97 # This corresponds to the Release field in RPM spec files and debian_revision |
| 98 # component of the Version field for DEB control file. |
| 99 # Generally with Chrome's fast release cycle it'd be more hassle to try |
| 100 # to bump this number between releases. |
| 101 PACKAGE_RELEASE="1" |
| 102 } |
| 103 |
| 104 stage_install_common() { |
| 105 echo "Staging common install files in '${STAGEDIR}'..." |
| 106 |
| 107 # TODO(mmoss) This assumes we built the static binaries. To support shared |
| 108 # builds, we probably want an install target in scons so it can give us all |
| 109 # the right files. See also: |
| 110 # http://code.google.com/p/chromium/issues/detail?id=4451 |
| 111 # |
| 112 # app |
| 113 # We need to add the debug link so gdb knows to look for the symbols. |
| 114 DEBUGFILE="${BUILDDIR}/${PROGNAME}.debug" |
| 115 STRIPPEDFILE="${BUILDDIR}/${PROGNAME}.stripped" |
| 116 eu-strip -o "${STRIPPEDFILE}" -f "${DEBUGFILE}" "${BUILDDIR}/${PROGNAME}" |
| 117 install -m 755 "${STRIPPEDFILE}" "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}" |
| 118 rm "${DEBUGFILE}" "${STRIPPEDFILE}" |
| 119 |
| 120 # resources |
| 121 install -m 644 "${BUILDDIR}/${PROGNAME}.pak" "${STAGEDIR}/${INSTALLDIR}/" |
| 122 install -m 644 "${BUILDDIR}/resources.pak" "${STAGEDIR}/${INSTALLDIR}/" |
| 123 # TODO(mmoss): This has broken a couple times on adding new .pak files. Maybe |
| 124 # we should flag all installer files in FILES.cfg and get them from there, so |
| 125 # there's only one place people need to keep track of such things (and in |
| 126 # only the public repository). |
| 127 if [ -r "${BUILDDIR}/chrome_100_percent.pak" ]; then |
| 128 install -m 644 "${BUILDDIR}/chrome_100_percent.pak" "${STAGEDIR}/${INSTALLDI
R}/" |
| 129 else |
| 130 install -m 644 "${BUILDDIR}/theme_resources_100_percent.pak" "${STAGEDIR}/${
INSTALLDIR}/" |
| 131 install -m 644 "${BUILDDIR}/ui_resources_100_percent.pak" "${STAGEDIR}/${INS
TALLDIR}/" |
| 132 fi |
| 133 |
| 134 # sandbox |
| 135 # Rename sandbox binary with hyphen instead of underscore because that's what |
| 136 # the code looks for, but the build targets can't use hyphens (scons bug?) |
| 137 install -m 4755 -s "${BUILDDIR}/${PROGNAME}_sandbox" \ |
| 138 "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}-sandbox" |
| 139 |
| 140 # l10n paks |
| 141 cp -a "${BUILDDIR}/locales" "${STAGEDIR}/${INSTALLDIR}/" |
| 142 find "${STAGEDIR}/${INSTALLDIR}/locales" -type f -exec chmod 644 '{}' \; |
| 143 find "${STAGEDIR}/${INSTALLDIR}/locales" -type d -exec chmod 755 '{}' \; |
| 144 |
| 145 # ffmpeg libs |
| 146 install -m 644 -s "${BUILDDIR}/libffmpegsumo.so" "${STAGEDIR}/${INSTALLDIR}/" |
| 147 |
| 148 # Widevine CDM. |
| 149 if [ -f "${BUILDDIR}/libwidevinecdmadapter.so" ]; then |
| 150 install -m 644 -s "${BUILDDIR}/libwidevinecdmadapter.so" "${STAGEDIR}/${INST
ALLDIR}/" |
| 151 install -m 644 "${BUILDDIR}/libwidevinecdm.so" "${STAGEDIR}/${INSTALLDIR}/" |
| 152 fi |
| 153 |
| 154 # Pepper Flash. |
| 155 PEPPERFLASH_SRCDIR="${BUILDDIR}/PepperFlash" |
| 156 PEPPERFLASH_DESTDIR="${STAGEDIR}/${INSTALLDIR}/PepperFlash" |
| 157 install -m 755 -d "${PEPPERFLASH_DESTDIR}" |
| 158 install -m 644 -s "${PEPPERFLASH_SRCDIR}/libpepflashplayer.so" \ |
| 159 "${PEPPERFLASH_DESTDIR}/" |
| 160 install -m 644 "${PEPPERFLASH_SRCDIR}/manifest.json" \ |
| 161 "${PEPPERFLASH_DESTDIR}/" |
| 162 |
| 163 # pdf plugin |
| 164 if [ -f "${BUILDDIR}/libpdf.so" ]; then |
| 165 install -m 644 -s "${BUILDDIR}/libpdf.so" "${STAGEDIR}/${INSTALLDIR}/" |
| 166 fi |
| 167 |
| 168 # peerconnection shared library |
| 169 if [ -f "${BUILDDIR}/lib/libpeerconnection.so" ]; then |
| 170 install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/lib/" |
| 171 install -m 644 -s "${BUILDDIR}/lib/libpeerconnection.so" "${STAGEDIR}/${INST
ALLDIR}/lib/" |
| 172 fi |
| 173 |
| 174 # nacl pepper plugin |
| 175 if [ -f "${BUILDDIR}/libppGoogleNaClPluginChrome.so" ]; then |
| 176 install -m 644 -s "${BUILDDIR}/libppGoogleNaClPluginChrome.so" "${STAGEDIR}/
${INSTALLDIR}/" |
| 177 fi |
| 178 |
| 179 # nacl_helper and nacl_helper_bootstrap |
| 180 # Don't use "-s" (strip) because this runs binutils "strip", which |
| 181 # mangles the special ELF program headers of nacl_helper_bootstrap. |
| 182 # Explicitly use eu-strip instead, because it doesn't have that problem. |
| 183 for file in nacl_helper nacl_helper_bootstrap; do |
| 184 buildfile="${BUILDDIR}/${file}" |
| 185 if [ -f "${buildfile}" ]; then |
| 186 strippedfile="${buildfile}.stripped" |
| 187 debugfile="${buildfile}.debug" |
| 188 eu-strip -o "${strippedfile}" -f "${debugfile}" "${buildfile}" |
| 189 install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}" |
| 190 fi |
| 191 done |
| 192 # Don't use "-s" (strip) because this would use the Linux toolchain to |
| 193 # strip the NaCl binary, which has the potential to break it. It |
| 194 # certainly resets the OSABI and ABIVERSION fields to non-NaCl values, |
| 195 # although the NaCl IRT loader doesn't care about these fields. In any |
| 196 # case, the IRT binaries are already stripped by NaCl's build process. |
| 197 for filename in ${BUILDDIR}/nacl_irt_*.nexe; do |
| 198 # Re-check the filename in case globbing matched nothing. |
| 199 if [ -f "$filename" ]; then |
| 200 install -m 644 "$filename" "${STAGEDIR}/${INSTALLDIR}/`basename "$filename
"`" |
| 201 fi |
| 202 done |
| 203 |
| 204 # default apps |
| 205 if [ -d "${BUILDDIR}/default_apps" ]; then |
| 206 cp -a "${BUILDDIR}/default_apps" "${STAGEDIR}/${INSTALLDIR}/" |
| 207 find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type d -exec chmod 755 '{}' \
; |
| 208 find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type f -exec chmod 644 '{}' \
; |
| 209 fi |
| 210 |
| 211 # launcher script and symlink |
| 212 process_template "${BUILDDIR}/installer/common/wrapper" \ |
| 213 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}" |
| 214 chmod 755 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}" |
| 215 pushd "${STAGEDIR}/usr/bin/" |
| 216 ln -snf "${INSTALLDIR}/${PACKAGE}" "${PACKAGE}" |
| 217 popd |
| 218 |
| 219 # app icons |
| 220 install -m 644 \ |
| 221 "${BUILDDIR}/installer/theme/product_logo_"*.png \ |
| 222 "${BUILDDIR}/installer/theme/product_logo_32.xpm" \ |
| 223 "${STAGEDIR}/${INSTALLDIR}/" |
| 224 |
| 225 # desktop integration |
| 226 install -m 755 "${BUILDDIR}/xdg-mime" "${STAGEDIR}${INSTALLDIR}/" |
| 227 install -m 755 "${BUILDDIR}/xdg-settings" "${STAGEDIR}${INSTALLDIR}/" |
| 228 process_template "${BUILDDIR}/installer/common/desktop.template" \ |
| 229 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}.desktop" |
| 230 chmod 644 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}.desktop" |
| 231 process_template "${BUILDDIR}/installer/common/default-app.template" \ |
| 232 "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.xml" |
| 233 chmod 644 "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.
xml" |
| 234 process_template "${BUILDDIR}/installer/common/default-app-block.template" \ |
| 235 "${STAGEDIR}${INSTALLDIR}/default-app-block" |
| 236 chmod 644 "${STAGEDIR}${INSTALLDIR}/default-app-block" |
| 237 |
| 238 # documentation |
| 239 install -m 755 "${BUILDDIR}/${PROGNAME}.1" \ |
| 240 "${STAGEDIR}/usr/share/man/man1/${PACKAGE}.1" |
| 241 } |
| OLD | NEW |