1 |
# Copyright 1999-2015 Gentoo Foundation |
2 |
# Distributed under the terms of the GNU General Public License v2 |
3 |
# $Header: /var/cvsroot/gentoo-x86/eclass/chromium.eclass,v 1.11 2015/05/21 12:28:00 floppym Exp $ |
4 |
|
5 |
# @ECLASS: chromium.eclass |
6 |
# @MAINTAINER: |
7 |
# Chromium Herd <chromium@gentoo.org> |
8 |
# @AUTHOR: |
9 |
# Mike Gilbert <floppym@gentoo.org> |
10 |
# @BLURB: Shared functions for chromium and google-chrome |
11 |
|
12 |
inherit eutils fdo-mime gnome2-utils linux-info |
13 |
|
14 |
if [[ ${CHROMIUM_EXPORT_PHASES} != no ]]; then |
15 |
EXPORT_FUNCTIONS pkg_preinst pkg_postinst pkg_postrm |
16 |
fi |
17 |
|
18 |
if [[ ${PN} == chromium ]]; then |
19 |
IUSE+=" custom-cflags" |
20 |
fi |
21 |
|
22 |
# @FUNCTION: chromium_suid_sandbox_check_kernel_config |
23 |
# @USAGE: |
24 |
# @DESCRIPTION: |
25 |
# Ensures the system kernel supports features needed for SUID sandbox to work. |
26 |
chromium_suid_sandbox_check_kernel_config() { |
27 |
has "${EAPI:-0}" 0 1 2 3 && die "EAPI=${EAPI} is not supported" |
28 |
|
29 |
if [[ "${MERGE_TYPE}" == "source" || "${MERGE_TYPE}" == "binary" ]]; then |
30 |
# Warn if the kernel does not support features needed for sandboxing. |
31 |
# Bug #363987. |
32 |
ERROR_PID_NS="PID_NS is required for sandbox to work" |
33 |
ERROR_NET_NS="NET_NS is required for sandbox to work" |
34 |
ERROR_USER_NS="USER_NS is required for sandbox to work" |
35 |
ERROR_SECCOMP_FILTER="SECCOMP_FILTER is required for sandbox to work" |
36 |
CONFIG_CHECK="~PID_NS ~NET_NS ~SECCOMP_FILTER ~USER_NS" |
37 |
check_extra_config |
38 |
fi |
39 |
} |
40 |
|
41 |
# @ECLASS-VARIABLE: CHROMIUM_LANGS |
42 |
# @DEFAULT_UNSET |
43 |
# @DESCRIPTION: |
44 |
# List of language packs available for this package. |
45 |
|
46 |
_chromium_set_linguas_IUSE() { |
47 |
[[ ${EAPI:-0} == 0 ]] && die "EAPI=${EAPI} is not supported" |
48 |
|
49 |
local lang |
50 |
for lang in ${CHROMIUM_LANGS}; do |
51 |
# Default to enabled since we bundle them anyway. |
52 |
# USE-expansion will take care of disabling the langs the user has not |
53 |
# selected via LINGUAS. |
54 |
IUSE+=" +linguas_${lang}" |
55 |
done |
56 |
} |
57 |
|
58 |
if [[ ${CHROMIUM_LANGS} ]]; then |
59 |
_chromium_set_linguas_IUSE |
60 |
fi |
61 |
|
62 |
_chromium_crlang() { |
63 |
local x |
64 |
for x in "$@"; do |
65 |
case $x in |
66 |
es_LA) echo es-419 ;; |
67 |
*) echo "${x/_/-}" ;; |
68 |
esac |
69 |
done |
70 |
} |
71 |
|
72 |
_chromium_syslang() { |
73 |
local x |
74 |
for x in "$@"; do |
75 |
case $x in |
76 |
es-419) echo es_LA ;; |
77 |
*) echo "${x/-/_}" ;; |
78 |
esac |
79 |
done |
80 |
} |
81 |
|
82 |
_chromium_strip_pak() { |
83 |
local x |
84 |
for x in "$@"; do |
85 |
echo "${x%.pak}" |
86 |
done |
87 |
} |
88 |
|
89 |
# @FUNCTION: chromium_remove_language_paks |
90 |
# @USAGE: |
91 |
# @DESCRIPTION: |
92 |
# Removes pak files from the current directory for languages that the user has |
93 |
# not selected via the LINGUAS variable. |
94 |
# Also performs QA checks to ensure CHROMIUM_LANGS has been set correctly. |
95 |
chromium_remove_language_paks() { |
96 |
local crlangs=$(_chromium_crlang ${CHROMIUM_LANGS}) |
97 |
local present_crlangs=$(_chromium_strip_pak *.pak) |
98 |
local present_langs=$(_chromium_syslang ${present_crlangs}) |
99 |
local lang |
100 |
|
101 |
# Look for missing pak files. |
102 |
for lang in ${crlangs}; do |
103 |
if ! has ${lang} ${present_crlangs}; then |
104 |
eqawarn "LINGUAS warning: no .pak file for ${lang} (${lang}.pak not found)" |
105 |
fi |
106 |
done |
107 |
|
108 |
# Look for extra pak files. |
109 |
# Remove pak files that the user does not want. |
110 |
for lang in ${present_langs}; do |
111 |
if [[ ${lang} == en_US ]]; then |
112 |
continue |
113 |
fi |
114 |
if ! has ${lang} ${CHROMIUM_LANGS}; then |
115 |
eqawarn "LINGUAS warning: no ${lang} in LANGS" |
116 |
continue |
117 |
fi |
118 |
if ! use linguas_${lang}; then |
119 |
rm "$(_chromium_crlang ${lang}).pak" || die |
120 |
fi |
121 |
done |
122 |
} |
123 |
|
124 |
chromium_pkg_preinst() { |
125 |
gnome2_icon_savelist |
126 |
} |
127 |
|
128 |
chromium_pkg_postinst() { |
129 |
fdo-mime_desktop_database_update |
130 |
gnome2_icon_cache_update |
131 |
|
132 |
# For more info see bug #292201, bug #352263, bug #361859. |
133 |
if ! has_version x11-themes/gnome-icon-theme && |
134 |
! has_version x11-themes/oxygen-icons ; then |
135 |
elog |
136 |
elog "Depending on your desktop environment, you may need" |
137 |
elog "to install additional packages to get icons on the Downloads page." |
138 |
elog |
139 |
elog "For KDE, the required package is kde-apps/oxygen-icons." |
140 |
elog |
141 |
elog "For other desktop environments, try one of the following:" |
142 |
elog " - x11-themes/gnome-icon-theme" |
143 |
elog " - x11-themes/tango-icon-theme" |
144 |
fi |
145 |
|
146 |
# For more info see bug #359153. |
147 |
elog |
148 |
elog "Some web pages may require additional fonts to display properly." |
149 |
elog "Try installing some of the following packages if some characters" |
150 |
elog "are not displayed properly:" |
151 |
elog " - media-fonts/arphicfonts" |
152 |
elog " - media-fonts/bitstream-cyberbit" |
153 |
elog " - media-fonts/droid" |
154 |
elog " - media-fonts/ipamonafont" |
155 |
elog " - media-fonts/ja-ipafonts" |
156 |
elog " - media-fonts/takao-fonts" |
157 |
elog " - media-fonts/wqy-microhei" |
158 |
elog " - media-fonts/wqy-zenhei" |
159 |
} |
160 |
|
161 |
chromium_pkg_postrm() { |
162 |
gnome2_icon_cache_update |
163 |
} |
164 |
|
165 |
chromium_pkg_die() { |
166 |
if [[ "${EBUILD_PHASE}" != "compile" ]]; then |
167 |
return |
168 |
fi |
169 |
|
170 |
# Prevent user problems like bug #348235. |
171 |
eshopts_push -s extglob |
172 |
if is-flagq '-g?(gdb)?([1-9])'; then |
173 |
ewarn |
174 |
ewarn "You have enabled debug info (i.e. -g or -ggdb in your CFLAGS/CXXFLAGS)." |
175 |
ewarn "This produces very large build files causes the linker to consume large" |
176 |
ewarn "amounts of memory." |
177 |
ewarn |
178 |
ewarn "Please try removing -g{,gdb} before reporting a bug." |
179 |
ewarn |
180 |
fi |
181 |
eshopts_pop |
182 |
|
183 |
# ccache often causes bogus compile failures, especially when the cache gets |
184 |
# corrupted. |
185 |
if has ccache ${FEATURES}; then |
186 |
ewarn |
187 |
ewarn "You have enabled ccache. Please try disabling ccache" |
188 |
ewarn "before reporting a bug." |
189 |
ewarn |
190 |
fi |
191 |
|
192 |
# No ricer bugs. |
193 |
if use_if_iuse custom-cflags; then |
194 |
ewarn |
195 |
ewarn "You have enabled the custom-cflags USE flag." |
196 |
ewarn "Please disable it before reporting a bug." |
197 |
ewarn |
198 |
fi |
199 |
|
200 |
# If the system doesn't have enough memory, the compilation is known to |
201 |
# fail. Print info about memory to recognize this condition. |
202 |
einfo |
203 |
einfo "$(grep MemTotal /proc/meminfo)" |
204 |
einfo "$(grep SwapTotal /proc/meminfo)" |
205 |
einfo |
206 |
} |
207 |
|
208 |
# @VARIABLE: EGYP_CHROMIUM_COMMAND |
209 |
# @DESCRIPTION: |
210 |
# Path to the gyp_chromium script. |
211 |
: ${EGYP_CHROMIUM_COMMAND:=build/gyp_chromium} |
212 |
|
213 |
# @VARIABLE: EGYP_CHROMIUM_DEPTH |
214 |
# @DESCRIPTION: |
215 |
# Depth for egyp_chromium. |
216 |
: ${EGYP_CHROMIUM_DEPTH:=.} |
217 |
|
218 |
# @FUNCTION: egyp_chromium |
219 |
# @USAGE: [gyp arguments] |
220 |
# @DESCRIPTION: |
221 |
# Calls EGYP_CHROMIUM_COMMAND with depth EGYP_CHROMIUM_DEPTH and given |
222 |
# arguments. The full command line is echoed for logging. |
223 |
egyp_chromium() { |
224 |
set -- "${EGYP_CHROMIUM_COMMAND}" --depth="${EGYP_CHROMIUM_DEPTH}" "$@" |
225 |
echo "$@" |
226 |
"$@" |
227 |
} |
228 |
|
229 |
# @FUNCTION: gyp_use |
230 |
# @USAGE: <USE flag> [GYP flag] [true suffix] [false suffix] |
231 |
# @DESCRIPTION: |
232 |
# If USE flag is set, echo -D[GYP flag]=[true suffix]. |
233 |
# |
234 |
# If USE flag is not set, echo -D[GYP flag]=[false suffix]. |
235 |
# |
236 |
# [GYP flag] defaults to use_[USE flag] with hyphens converted to underscores. |
237 |
# |
238 |
# [true suffix] defaults to 1. [false suffix] defaults to 0. |
239 |
gyp_use() { |
240 |
local gypflag="-D${2:-use_${1//-/_}}=" |
241 |
usex "$1" "${gypflag}" "${gypflag}" "${3-1}" "${4-0}" |
242 |
} |
243 |
|
244 |
# @FUNCTION: chromium_bundled_v8_version |
245 |
# @USAGE: [path to version.cc] |
246 |
# @DESCRIPTION: |
247 |
# Outputs the version of v8 parsed from a (bundled) copy of the source code. |
248 |
chromium_bundled_v8_version() { |
249 |
local vf=${1:-v8/src/version.cc} |
250 |
local major minor build patch |
251 |
major=$(sed -ne 's/#define MAJOR_VERSION *\([0-9]*\)/\1/p' "${vf}") |
252 |
minor=$(sed -ne 's/#define MINOR_VERSION *\([0-9]*\)/\1/p' "${vf}") |
253 |
build=$(sed -ne 's/#define BUILD_NUMBER *\([0-9]*\)/\1/p' "${vf}") |
254 |
patch=$(sed -ne 's/#define PATCH_LEVEL *\([0-9]*\)/\1/p' "${vf}") |
255 |
echo "${major}.${minor}.${build}.${patch}" |
256 |
} |
257 |
|
258 |
# @FUNCTION: chromium_installed_v8_version |
259 |
# @USAGE: |
260 |
# @DESCRIPTION: |
261 |
# Outputs the version of dev-lang/v8 currently installed on the host system. |
262 |
chromium_installed_v8_version() { |
263 |
local cpf=$(best_version dev-lang/v8) |
264 |
local pvr=${cpf#dev-lang/v8-} |
265 |
echo "${pvr%-r*}" |
266 |
} |