Include material design asset pak files for browser top chrome on Linux
[chromium-blink-merge.git] / chrome / installer / linux / common / installer.include
blobb0589429a08edee8d9b4d3e5dfc95d6e300a6685
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->"}
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
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#@@SSLREPOCONFIG@@#${SSLREPOCONFIG}#g" \
77     -e "s#@@SHORTDESC@@#${SHORTDESC}#g" \
78     -e "s#@@FULLDESC@@#${FULLDESC}#g" \
79     -e "s#@@DEFAULT_FLAGS@@#${DEFAULT_FLAGS:-}#g" \
80     -e "s#@@SXS_USER_DATA_DIR@@#${SXS_USER_DATA_DIR:-}#g" \
81     -e "s#@@USR_BIN_SYMLINK_NAME@@#${USR_BIN_SYMLINK_NAME:-}#g" \
82     > "$TMPLOUT" <<< "$TMPLINCL"
85 # Setup the installation directory hierachy in the package staging area.
86 prep_staging_common() {
87   install -m 755 -d "${STAGEDIR}/${INSTALLDIR}" \
88     "${STAGEDIR}/usr/bin" \
89     "${STAGEDIR}/usr/share/applications" \
90     "${STAGEDIR}/usr/share/gnome-control-center/default-apps" \
91     "${STAGEDIR}/usr/share/man/man1"
94 get_version_info() {
95   source "${BUILDDIR}/installer/version.txt"
96   VERSION="${MAJOR}.${MINOR}.${BUILD}.${PATCH}"
97   # TODO(phajdan.jr): Provide a mechanism to pass a different package
98   # release number if needed. The meaning of it is to bump it for
99   # packaging-only changes while the underlying software has the same version.
100   # This corresponds to the Release field in RPM spec files and debian_revision
101   # component of the Version field for DEB control file.
102   # Generally with Chrome's fast release cycle it'd be more hassle to try
103   # to bump this number between releases.
104   PACKAGE_RELEASE="1"
107 stage_install_common() {
108   echo "Staging common install files in '${STAGEDIR}'..."
110   # TODO(mmoss) This assumes we built the static binaries. To support shared
111   # builds, we probably want an install target in scons so it can give us all
112   # the right files. See also:
113   # http://code.google.com/p/chromium/issues/detail?id=4451
114   #
115   # app
116   # We need to add the debug link so gdb knows to look for the symbols.
117   DEBUGFILE="${BUILDDIR}/${PROGNAME}.debug"
118   STRIPPEDFILE="${BUILDDIR}/${PROGNAME}.stripped"
119   "${BUILDDIR}/installer/common/eu-strip" -o "${STRIPPEDFILE}" -f "${DEBUGFILE}" "${BUILDDIR}/${PROGNAME}"
120   install -m 755 "${STRIPPEDFILE}" "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}"
121   rm "${DEBUGFILE}" "${STRIPPEDFILE}"
123   # resources
124   install -m 644 "${BUILDDIR}/resources.pak" "${STAGEDIR}/${INSTALLDIR}/"
125   # TODO(mmoss): This has broken a couple times on adding new .pak files. Maybe
126   # we should flag all installer files in FILES.cfg and get them from there, so
127   # there's only one place people need to keep track of such things (and in
128   # only the public repository).
129   if [ -r "${BUILDDIR}/chrome_100_percent.pak" ]; then
130     install -m 644 "${BUILDDIR}/chrome_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
131     install -m 644 "${BUILDDIR}/chrome_200_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
132     install -m 644 "${BUILDDIR}/chrome_material_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
133     install -m 644 "${BUILDDIR}/chrome_material_200_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
134   else
135     install -m 644 "${BUILDDIR}/theme_resources_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
136     install -m 644 "${BUILDDIR}/ui_resources_100_percent.pak" "${STAGEDIR}/${INSTALLDIR}/"
137   fi
139   # ICU data file; only necessary when icu_use_data_file_flag is set to 1
140   # in build/common.gypi.
141   install -m 644 "${BUILDDIR}/icudtl.dat" "${STAGEDIR}/${INSTALLDIR}/"
143   # V8 snapshot files; only necessary when v8_use_external_startup_data is
144   # set to 1 in build/common.gypi.
145   if [ -f "${BUILDDIR}/natives_blob.bin" ]; then
146     install -m 644 "${BUILDDIR}/natives_blob.bin" "${STAGEDIR}/${INSTALLDIR}/"
147     install -m 644 "${BUILDDIR}/snapshot_blob.bin" "${STAGEDIR}/${INSTALLDIR}/"
148   fi
150   # sandbox
151   # Rename sandbox binary with hyphen instead of underscore because that's what
152   # the code looks for, but the build targets can't use hyphens (scons bug?)
153   install -m 4755 -s "${BUILDDIR}/${PROGNAME}_sandbox" \
154     "${STAGEDIR}/${INSTALLDIR}/${PROGNAME}-sandbox"
156   # l10n paks
157   cp -a "${BUILDDIR}/locales" "${STAGEDIR}/${INSTALLDIR}/"
158   find "${STAGEDIR}/${INSTALLDIR}/locales" -type f -exec chmod 644 '{}' \;
159   find "${STAGEDIR}/${INSTALLDIR}/locales" -type d -exec chmod 755 '{}' \;
161   # Widevine CDM.
162   if [ -f "${BUILDDIR}/libwidevinecdmadapter.so" ]; then
163     install -m 644 -s "${BUILDDIR}/libwidevinecdmadapter.so" "${STAGEDIR}/${INSTALLDIR}/"
164     install -m 644 "${BUILDDIR}/libwidevinecdm.so" "${STAGEDIR}/${INSTALLDIR}/"
165   fi
167   # Pepper Flash.
168   PEPPERFLASH_SRCDIR="${BUILDDIR}/PepperFlash"
169   PEPPERFLASH_DESTDIR="${STAGEDIR}/${INSTALLDIR}/PepperFlash"
170   install -m 755 -d "${PEPPERFLASH_DESTDIR}"
171   install -m 644 -s "${PEPPERFLASH_SRCDIR}/libpepflashplayer.so" \
172     "${PEPPERFLASH_DESTDIR}/"
173   install -m 644 "${PEPPERFLASH_SRCDIR}/manifest.json" \
174     "${PEPPERFLASH_DESTDIR}/"
176   # peerconnection shared library
177   if [ -f "${BUILDDIR}/lib/libpeerconnection.so" ]; then
178     install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/lib/"
180     install -m 644 -s "${BUILDDIR}/lib/libpeerconnection.so" "${STAGEDIR}/${INSTALLDIR}/lib/"
181   fi
183   # libc++
184   if [ -f "${BUILDDIR}/lib/libc++.so" ]; then
185     install -m 755 -d "${STAGEDIR}/${INSTALLDIR}/lib/"
187     install -m 644 -s "${BUILDDIR}/lib/libc++.so" "${STAGEDIR}/${INSTALLDIR}/lib/"
188   fi
191   # nacl_helper and nacl_helper_bootstrap
192   # Don't use "-s" (strip) because this runs binutils "strip", which
193   # mangles the special ELF program headers of nacl_helper_bootstrap.
194   # Explicitly use eu-strip instead, because it doesn't have that problem.
195   for file in nacl_helper nacl_helper_bootstrap; do
196     buildfile="${BUILDDIR}/${file}"
197     if [ -f "${buildfile}" ]; then
198       strippedfile="${buildfile}.stripped"
199       debugfile="${buildfile}.debug"
200       "${BUILDDIR}/installer/common/eu-strip" -o "${strippedfile}" -f "${debugfile}" "${buildfile}"
201       install -m 755 "${strippedfile}" "${STAGEDIR}/${INSTALLDIR}/${file}"
202     fi
203   done
204   # Don't use "-s" (strip) because this would use the Linux toolchain to
205   # strip the NaCl binary, which has the potential to break it.  It
206   # certainly resets the OSABI and ABIVERSION fields to non-NaCl values,
207   # although the NaCl IRT loader doesn't care about these fields.  In any
208   # case, the IRT binaries are already stripped by NaCl's build process.
209   for filename in ${BUILDDIR}/nacl_irt_*.nexe; do
210     # Re-check the filename in case globbing matched nothing.
211     if [ -f "$filename" ]; then
212       install -m 644 "$filename" "${STAGEDIR}/${INSTALLDIR}/`basename "$filename"`"
213     fi
214   done
216   # default apps
217   if [ -d "${BUILDDIR}/default_apps" ]; then
218     cp -a "${BUILDDIR}/default_apps" "${STAGEDIR}/${INSTALLDIR}/"
219     find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type d -exec chmod 755 '{}' \;
220     find "${STAGEDIR}/${INSTALLDIR}/default_apps" -type f -exec chmod 644 '{}' \;
221   fi
223   # launcher script and symlink
224   process_template "${BUILDDIR}/installer/common/wrapper" \
225     "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}"
226   chmod 755 "${STAGEDIR}/${INSTALLDIR}/${PACKAGE}"
227   if [ ! -f "${STAGEDIR}/${INSTALLDIR}/google-chrome" ]; then
228     ln -sn "${INSTALLDIR}/${PACKAGE}" \
229       "${STAGEDIR}/${INSTALLDIR}/google-chrome"
230   fi
231   ln -snf "${INSTALLDIR}/${PACKAGE}" \
232     "${STAGEDIR}/usr/bin/${USR_BIN_SYMLINK_NAME}"
234   # app icons
235   install -m 644 \
236     "${BUILDDIR}/installer/theme/product_logo_"*.png \
237     "${BUILDDIR}/installer/theme/product_logo_32.xpm" \
238     "${STAGEDIR}/${INSTALLDIR}/"
240   # desktop integration
241   install -m 755 "${BUILDDIR}/xdg-mime" "${STAGEDIR}${INSTALLDIR}/"
242   install -m 755 "${BUILDDIR}/xdg-settings" "${STAGEDIR}${INSTALLDIR}/"
243   process_template "${BUILDDIR}/installer/common/desktop.template" \
244     "${STAGEDIR}/usr/share/applications/${PACKAGE}.desktop"
245   chmod 644 "${STAGEDIR}/usr/share/applications/${PACKAGE}.desktop"
246   process_template "${BUILDDIR}/installer/common/default-app.template" \
247     "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.xml"
248   chmod 644 "${STAGEDIR}/usr/share/gnome-control-center/default-apps/${PACKAGE}.xml"
249   process_template "${BUILDDIR}/installer/common/default-app-block.template" \
250     "${STAGEDIR}${INSTALLDIR}/default-app-block"
251   chmod 644 "${STAGEDIR}${INSTALLDIR}/default-app-block"
253   # documentation
254   install -m 755 "${BUILDDIR}/${PROGNAME}.1" \
255     "${STAGEDIR}/usr/share/man/man1/${PACKAGE}.1"