1 |
ingmar |
1.7 |
# Copyright 2007-2008 Gentoo Foundation |
2 |
caleb |
1.1 |
# Distributed under the terms of the GNU General Public License v2 |
3 |
yngwin |
1.16 |
# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.15 2008/08/11 12:52:10 yngwin Exp $ |
4 |
caleb |
1.1 |
|
5 |
|
|
# @ECLASS: qt4-build.eclass |
6 |
|
|
# @MAINTAINER: |
7 |
|
|
# Caleb Tennis <caleb@gentoo.org> |
8 |
ingmar |
1.8 |
# @BLURB: Eclass for Qt4 split ebuilds. |
9 |
caleb |
1.1 |
# @DESCRIPTION: |
10 |
|
|
# This eclass contains various functions that are used when building Qt4 |
11 |
|
|
|
12 |
|
|
inherit eutils multilib toolchain-funcs flag-o-matic |
13 |
|
|
|
14 |
ingmar |
1.12 |
IUSE="${IUSE} debug pch" |
15 |
caleb |
1.1 |
|
16 |
ingmar |
1.7 |
case "${PV}" in |
17 |
|
|
4.4.0_beta*) |
18 |
|
|
SRCTYPE="${SRCTYPE:-opensource-src}" |
19 |
|
|
MY_PV="${PV/_beta/-beta}" |
20 |
|
|
;; |
21 |
ingmar |
1.11 |
4.4.0_rc*) |
22 |
|
|
SRCTYPE="${SRCTYPE:-opensource-src}" |
23 |
|
|
MY_PV="${PV/_rc/-rc}" |
24 |
|
|
;; |
25 |
ingmar |
1.7 |
*) |
26 |
|
|
SRCTYPE="${SRCTYPE:-opensource-src}" |
27 |
|
|
MY_PV="${PV}" |
28 |
|
|
;; |
29 |
|
|
esac |
30 |
ingmar |
1.11 |
MY_P=qt-x11-${SRCTYPE}-${MY_PV} |
31 |
|
|
S=${WORKDIR}/${MY_P} |
32 |
ingmar |
1.7 |
|
33 |
ingmar |
1.11 |
SRC_URI="ftp://ftp.trolltech.com/qt/source/${MY_P}.tar.bz2" |
34 |
|
|
|
35 |
|
|
case "${PV}" in |
36 |
yngwin |
1.16 |
4.4.2|4.4.1|4.4.0|4.4.0_rc*) |
37 |
ingmar |
1.11 |
SRC_URI="${SRC_URI} mirror://gentoo/${MY_P}-headers.tar.bz2" |
38 |
|
|
;; |
39 |
|
|
*) |
40 |
|
|
;; |
41 |
|
|
esac |
42 |
ingmar |
1.7 |
|
43 |
caleb |
1.1 |
qt4-build_pkg_setup() { |
44 |
ingmar |
1.7 |
# Check USE requirements |
45 |
|
|
qt4-build_check_use |
46 |
|
|
|
47 |
caleb |
1.1 |
# Set up installation directories |
48 |
caleb |
1.5 |
QTBASEDIR=/usr/$(get_libdir)/qt4 |
49 |
|
|
QTPREFIXDIR=/usr |
50 |
|
|
QTBINDIR=/usr/bin |
51 |
|
|
QTLIBDIR=/usr/$(get_libdir)/qt4 |
52 |
|
|
QTPCDIR=/usr/$(get_libdir)/pkgconfig |
53 |
|
|
QTDATADIR=/usr/share/qt4 |
54 |
caleb |
1.6 |
QTDOCDIR=/usr/share/doc/qt-${PV} |
55 |
caleb |
1.5 |
QTHEADERDIR=/usr/include/qt4 |
56 |
|
|
QTPLUGINDIR=${QTLIBDIR}/plugins |
57 |
|
|
QTSYSCONFDIR=/etc/qt4 |
58 |
|
|
QTTRANSDIR=${QTDATADIR}/translations |
59 |
|
|
QTEXAMPLESDIR=${QTDATADIR}/examples |
60 |
|
|
QTDEMOSDIR=${QTDATADIR}/demos |
61 |
caleb |
1.1 |
|
62 |
caleb |
1.5 |
PLATFORM=$(qt_mkspecs_dir) |
63 |
caleb |
1.1 |
|
64 |
|
|
PATH="${S}/bin:${PATH}" |
65 |
|
|
LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}" |
66 |
|
|
} |
67 |
|
|
|
68 |
ingmar |
1.11 |
qt4_unpack() { |
69 |
|
|
local target targets |
70 |
yngwin |
1.15 |
for target in configure LICENSE.{GPL2,GPL3} projects.pro \ |
71 |
ingmar |
1.11 |
src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ |
72 |
ingmar |
1.13 |
${QT4_EXTRACT_DIRECTORIES}; do |
73 |
ingmar |
1.11 |
targets="${targets} ${MY_P}/${target}" |
74 |
|
|
done |
75 |
|
|
|
76 |
|
|
echo tar xjpf "${DISTDIR}"/${MY_P}.tar.bz2 ${targets} |
77 |
|
|
tar xjpf "${DISTDIR}"/${MY_P}.tar.bz2 ${targets} |
78 |
|
|
|
79 |
|
|
case "${PV}" in |
80 |
yngwin |
1.16 |
4.4.2|4.4.1|4.4.0|4.4.0_rc*) |
81 |
ingmar |
1.11 |
echo tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2 |
82 |
|
|
tar xjpf "${DISTDIR}"/${MY_P}-headers.tar.bz2 |
83 |
|
|
;; |
84 |
|
|
esac |
85 |
|
|
} |
86 |
|
|
|
87 |
caleb |
1.1 |
qt4-build_src_unpack() { |
88 |
ingmar |
1.11 |
qt4_unpack |
89 |
ingmar |
1.7 |
if [[ ${PN} != qt-core ]]; then |
90 |
ingmar |
1.11 |
cd "${S}" |
91 |
ingmar |
1.7 |
skip_qmake_build_patch |
92 |
|
|
skip_project_generation_patch |
93 |
|
|
symlink_binaries_to_buildtree |
94 |
|
|
fi |
95 |
|
|
|
96 |
|
|
sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ |
97 |
|
|
-e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ |
98 |
|
|
-e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ |
99 |
|
|
-e "s:X11R6/::" \ |
100 |
|
|
-i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" |
101 |
|
|
|
102 |
|
|
sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ |
103 |
|
|
-e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ |
104 |
|
|
-e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ |
105 |
|
|
-i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" |
106 |
|
|
} |
107 |
|
|
|
108 |
|
|
qt4-build_src_compile() { |
109 |
caleb |
1.1 |
# Don't let the user go too overboard with flags. If you really want to, uncomment |
110 |
|
|
# out the line below and give 'er a whirl. |
111 |
|
|
strip-flags |
112 |
|
|
replace-flags -O3 -O2 |
113 |
|
|
|
114 |
ingmar |
1.7 |
if [[ $(gcc-fullversion) == "3.4.6" && gcc-specs-ssp ]] ; then |
115 |
caleb |
1.1 |
ewarn "Appending -fno-stack-protector to CFLAGS/CXXFLAGS" |
116 |
|
|
append-flags -fno-stack-protector |
117 |
|
|
fi |
118 |
ingmar |
1.7 |
|
119 |
ingmar |
1.10 |
# Bug 178652 |
120 |
|
|
if [[ "$(gcc-major-version)" == "3" ]] && use amd64; then |
121 |
|
|
ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" |
122 |
|
|
append-flags -fno-gcse |
123 |
|
|
fi |
124 |
|
|
|
125 |
ingmar |
1.7 |
myconf="$(standard_configure_options) ${myconf}" |
126 |
|
|
|
127 |
|
|
echo ./configure ${myconf} |
128 |
|
|
./configure ${myconf} || die "./configure failed" |
129 |
|
|
|
130 |
|
|
build_target_directories |
131 |
caleb |
1.1 |
} |
132 |
|
|
|
133 |
caleb |
1.4 |
qt4-build_src_install() { |
134 |
|
|
install_directories "${QT4_TARGET_DIRECTORIES}" |
135 |
ingmar |
1.7 |
install_qconfigs |
136 |
caleb |
1.4 |
fix_library_files |
137 |
|
|
} |
138 |
|
|
|
139 |
caleb |
1.1 |
standard_configure_options() { |
140 |
|
|
local myconf="" |
141 |
|
|
|
142 |
ingmar |
1.7 |
[[ $(get_libdir) != "lib" ]] && myconf="${myconf} -L/usr/$(get_libdir)" |
143 |
caleb |
1.1 |
|
144 |
|
|
# Disable visibility explicitly if gcc version isn't 4 |
145 |
ingmar |
1.7 |
if [[ "$(gcc-major-version)" -lt "4" ]]; then |
146 |
caleb |
1.1 |
myconf="${myconf} -no-reduce-exports" |
147 |
|
|
fi |
148 |
|
|
|
149 |
ingmar |
1.12 |
# precompiled headers doesn't work on hardened, where the flag is masked. |
150 |
|
|
if use pch; then |
151 |
|
|
myconf="${myconf} -pch" |
152 |
|
|
else |
153 |
|
|
myconf="${myconf} -no-pch" |
154 |
|
|
fi |
155 |
|
|
|
156 |
ingmar |
1.7 |
if use debug; then |
157 |
|
|
myconf="${myconf} -debug -no-separate-debug-info" |
158 |
|
|
else |
159 |
|
|
myconf="${myconf} -release -no-separate-debug-info" |
160 |
|
|
fi |
161 |
caleb |
1.1 |
|
162 |
ingmar |
1.11 |
# ARCH is set on Gentoo. QT now falls back to generic on an unsupported |
163 |
|
|
# ${ARCH}. Therefore we convert it to supported values. |
164 |
|
|
case "${ARCH}" in |
165 |
|
|
amd64) myconf="${myconf} -arch x86_64" ;; |
166 |
|
|
ppc|ppc64) myconf="${myconf} -arch powerpc" ;; |
167 |
ingmar |
1.14 |
x86|x86-*) myconf="${myconf} -arch i386" ;; |
168 |
ingmar |
1.11 |
alpha|arm|ia64|mips|s390|sparc) myconf="${myconf} -arch ${ARCH}" ;; |
169 |
|
|
hppa|sh) myconf="${myconf} -arch generic" ;; |
170 |
|
|
*) die "${ARCH} is unsupported by this eclass. Please file a bug." ;; |
171 |
|
|
esac |
172 |
|
|
|
173 |
ingmar |
1.7 |
myconf="${myconf} -stl -verbose -largefile -confirm-license -no-rpath |
174 |
|
|
-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} |
175 |
|
|
-datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} |
176 |
|
|
-plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} |
177 |
|
|
-translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} |
178 |
|
|
-demosdir ${QTDEMOSDIR} -silent -fast -reduce-relocations |
179 |
|
|
-nomake examples -nomake demos" |
180 |
caleb |
1.1 |
|
181 |
|
|
echo "${myconf}" |
182 |
|
|
} |
183 |
|
|
|
184 |
caleb |
1.4 |
build_target_directories() { |
185 |
|
|
build_directories "${QT4_TARGET_DIRECTORIES}" |
186 |
|
|
} |
187 |
|
|
|
188 |
caleb |
1.1 |
build_directories() { |
189 |
|
|
local dirs="$@" |
190 |
|
|
for x in ${dirs}; do |
191 |
|
|
cd "${S}"/${x} |
192 |
ingmar |
1.7 |
"${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" |
193 |
|
|
emake || die "emake failed" |
194 |
caleb |
1.1 |
done |
195 |
|
|
} |
196 |
|
|
|
197 |
|
|
install_directories() { |
198 |
|
|
local dirs="$@" |
199 |
|
|
for x in ${dirs}; do |
200 |
ingmar |
1.7 |
pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" |
201 |
|
|
emake INSTALL_ROOT="${D}" install || die "emake install failed" |
202 |
|
|
popd >/dev/null || die "Can't popd from ${S}/${x}" |
203 |
caleb |
1.1 |
done |
204 |
|
|
} |
205 |
|
|
|
206 |
ingmar |
1.7 |
# @ECLASS-VARIABLE: QCONFIG_ADD |
207 |
|
|
# @DESCRIPTION: |
208 |
|
|
# List options that need to be added to QT_CONFIG in qconfig.pri |
209 |
|
|
QCONFIG_ADD="${QCONFIG_ADD:-}" |
210 |
|
|
|
211 |
|
|
# @ECLASS-VARIABLE: QCONFIG_REMOVE |
212 |
|
|
# @DESCRIPTION: |
213 |
|
|
# List options that need to be removed from QT_CONFIG in qconfig.pri |
214 |
|
|
QCONFIG_REMOVE="${QCONFIG_REMOVE:-}" |
215 |
|
|
|
216 |
|
|
# @ECLASS-VARIABLE: QCONFIG_DEFINE |
217 |
|
|
# @DESCRIPTION: |
218 |
|
|
# List variables that should be defined at the top of QtCore/qconfig.h |
219 |
|
|
QCONFIG_DEFINE="${QCONFIG_DEFINE:-}" |
220 |
|
|
|
221 |
|
|
install_qconfigs() { |
222 |
zlin |
1.9 |
local x |
223 |
|
|
if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then |
224 |
ingmar |
1.7 |
for x in QCONFIG_ADD QCONFIG_REMOVE; do |
225 |
|
|
[[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri |
226 |
|
|
done |
227 |
|
|
insinto ${QTDATADIR}/mkspecs/gentoo |
228 |
|
|
doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" |
229 |
zlin |
1.9 |
fi |
230 |
ingmar |
1.7 |
|
231 |
zlin |
1.9 |
if [[ -n ${QCONFIG_DEFINE} ]]; then |
232 |
ingmar |
1.7 |
for x in ${QCONFIG_DEFINE}; do |
233 |
|
|
echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h |
234 |
|
|
done |
235 |
|
|
insinto ${QTHEADERDIR}/Gentoo |
236 |
|
|
doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" |
237 |
|
|
fi |
238 |
|
|
} |
239 |
|
|
|
240 |
|
|
# Stubs for functions used by the Qt 4.4.0_technical_preview_1. |
241 |
|
|
qconfig_add_option() { : ; } |
242 |
|
|
qconfig_remove_option() { : ; } |
243 |
|
|
|
244 |
|
|
generate_qconfigs() { |
245 |
|
|
if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then |
246 |
|
|
local x qconfig_add qconfig_remove qconfig_new |
247 |
|
|
for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do |
248 |
|
|
[[ -f ${x} ]] || continue |
249 |
|
|
qconfig_add="${qconfig_add} $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" |
250 |
|
|
qconfig_remove="${qconfig_remove} $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" |
251 |
|
|
done |
252 |
|
|
|
253 |
|
|
# these error checks do not use die because dying in pkg_post{inst,rm} |
254 |
|
|
# just makes things worse. |
255 |
|
|
if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then |
256 |
|
|
# start with the qconfig.pri that qt-core installed |
257 |
|
|
if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \ |
258 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then |
259 |
|
|
eerror "cp qconfig failed." |
260 |
|
|
return 1 |
261 |
|
|
fi |
262 |
|
|
|
263 |
|
|
# generate list of QT_CONFIG entries from the existing list |
264 |
|
|
# including qconfig_add and excluding qconfig_remove |
265 |
|
|
for x in $(sed -n 's/^QT_CONFIG +=//p' \ |
266 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do |
267 |
|
|
hasq ${x} ${qconfig_remove} || qconfig_new="${qconfig_new} ${x}" |
268 |
|
|
done |
269 |
|
|
|
270 |
|
|
# replace the existing QT_CONFIG list with qconfig_new |
271 |
|
|
if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ |
272 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then |
273 |
|
|
eerror "Sed for QT_CONFIG failed" |
274 |
|
|
return 1 |
275 |
|
|
fi |
276 |
|
|
|
277 |
|
|
# create Gentoo/qconfig.h |
278 |
|
|
if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then |
279 |
|
|
if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then |
280 |
|
|
eerror "mkdir ${QTHEADERDIR}/Gentoo failed" |
281 |
|
|
return 1 |
282 |
|
|
fi |
283 |
|
|
fi |
284 |
|
|
: > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
285 |
|
|
for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do |
286 |
|
|
[[ -f ${x} ]] || continue |
287 |
|
|
cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
288 |
|
|
done |
289 |
|
|
else |
290 |
|
|
rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri |
291 |
|
|
rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
292 |
|
|
rmdir "${ROOT}${QTDATADIR}"/mkspecs \ |
293 |
|
|
"${ROOT}${QTDATADIR}" \ |
294 |
|
|
"${ROOT}${QTHEADERDIR}"/Gentoo \ |
295 |
|
|
"${ROOT}${QTHEADERDIR}" 2>/dev/null |
296 |
|
|
fi |
297 |
|
|
fi |
298 |
|
|
} |
299 |
|
|
|
300 |
|
|
qt4-build_pkg_postrm() { |
301 |
|
|
generate_qconfigs |
302 |
caleb |
1.1 |
} |
303 |
|
|
|
304 |
ingmar |
1.7 |
qt4-build_pkg_postinst() { |
305 |
|
|
generate_qconfigs |
306 |
caleb |
1.1 |
} |
307 |
|
|
|
308 |
|
|
skip_qmake_build_patch() { |
309 |
ingmar |
1.7 |
# Don't need to build qmake, as it's already installed from qt-core |
310 |
|
|
sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed" |
311 |
caleb |
1.1 |
} |
312 |
|
|
|
313 |
|
|
skip_project_generation_patch() { |
314 |
|
|
# Exit the script early by throwing in an exit before all of the .pro files are scanned |
315 |
ingmar |
1.7 |
sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ |
316 |
|
|
-i "${S}"/configure || die "Sed failed" |
317 |
caleb |
1.1 |
} |
318 |
|
|
|
319 |
ingmar |
1.7 |
symlink_binaries_to_buildtree() { |
320 |
|
|
for bin in qmake moc uic rcc; do |
321 |
|
|
ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed." |
322 |
|
|
done |
323 |
caleb |
1.1 |
} |
324 |
|
|
|
325 |
|
|
fix_library_files() { |
326 |
ingmar |
1.7 |
for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do |
327 |
|
|
if [[ -e ${libfile} ]]; then |
328 |
|
|
sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed." |
329 |
|
|
fi |
330 |
|
|
done |
331 |
caleb |
1.1 |
|
332 |
|
|
# pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: |
333 |
ingmar |
1.7 |
for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do |
334 |
|
|
if [[ -e ${libfile} ]]; then |
335 |
|
|
sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed" |
336 |
caleb |
1.1 |
|
337 |
|
|
# Move .pc files into the pkgconfig directory |
338 |
ingmar |
1.7 |
|
339 |
|
|
dodir ${QTPCDIR} |
340 |
|
|
mv ${libfile} "${D}"/${QTPCDIR}/ \ |
341 |
|
|
|| die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed." |
342 |
|
|
fi |
343 |
|
|
done |
344 |
|
|
|
345 |
|
|
# Don't install an empty directory |
346 |
|
|
rmdir "${D}"/${QTLIBDIR}/pkgconfig |
347 |
caleb |
1.1 |
} |
348 |
|
|
|
349 |
|
|
qt_use() { |
350 |
ingmar |
1.7 |
local flag="${1}" |
351 |
|
|
local feature="${1}" |
352 |
caleb |
1.5 |
local enableval= |
353 |
caleb |
1.1 |
|
354 |
ingmar |
1.7 |
[[ -n ${2} ]] && feature=${2} |
355 |
|
|
[[ -n ${3} ]] && enableval="-${3}" |
356 |
|
|
|
357 |
|
|
if use ${flag}; then |
358 |
|
|
echo "${enableval}-${feature}" |
359 |
|
|
else |
360 |
|
|
echo "-no-${feature}" |
361 |
|
|
fi |
362 |
|
|
} |
363 |
|
|
|
364 |
|
|
# @ECLASS-VARIABLE: QT4_BUILT_WITH_USE_CHECK |
365 |
|
|
# @DESCRIPTION: |
366 |
|
|
# The contents of $QT4_BUILT_WITH_USE_CHECK gets fed to built_with_use |
367 |
|
|
# (eutils.eclass), line per line. |
368 |
|
|
# |
369 |
|
|
# Example: |
370 |
|
|
# @CODE |
371 |
|
|
# pkg_setup() { |
372 |
|
|
# use qt3support && QT4_BUILT_WITH_USE_CHECK="${QT4_BUILT_WITH_USE_CHECK} |
373 |
|
|
# ~x11-libs/qt-gui-${PV} qt3support" |
374 |
|
|
# qt4-build_check_use |
375 |
|
|
# } |
376 |
|
|
# @CODE |
377 |
|
|
|
378 |
|
|
# Run built_with_use on each flag and print appropriate error messages if any |
379 |
|
|
# flags are missing |
380 |
|
|
_qt_built_with_use() { |
381 |
|
|
local missing opt pkg flag flags |
382 |
caleb |
1.1 |
|
383 |
ingmar |
1.7 |
if [[ ${1} = "--missing" ]]; then |
384 |
|
|
missing="${1} ${2}" && shift 2 |
385 |
|
|
fi |
386 |
|
|
if [[ ${1:0:1} = "-" ]]; then |
387 |
|
|
opt=${1} && shift |
388 |
|
|
fi |
389 |
|
|
|
390 |
|
|
pkg=${1} && shift |
391 |
|
|
|
392 |
|
|
for flag in "${@}"; do |
393 |
|
|
flags="${flags} ${flag}" |
394 |
|
|
if ! built_with_use ${missing} ${opt} ${pkg} ${flag}; then |
395 |
|
|
flags="${flags}*" |
396 |
|
|
else |
397 |
|
|
[[ ${opt} = "-o" ]] && return 0 |
398 |
|
|
fi |
399 |
|
|
done |
400 |
|
|
if [[ "${flags# }" = "${@}" ]]; then |
401 |
|
|
return 0 |
402 |
|
|
fi |
403 |
|
|
if [[ ${opt} = "-o" ]]; then |
404 |
|
|
eerror "This package requires '${pkg}' to be built with any of the following USE flags: '$*'." |
405 |
|
|
else |
406 |
|
|
eerror "This package requires '${pkg}' to be built with the following USE flags: '${flags# }'." |
407 |
|
|
fi |
408 |
|
|
return 1 |
409 |
|
|
} |
410 |
|
|
|
411 |
|
|
# @FUNCTION: qt4-build_check_use |
412 |
|
|
# @DESCRIPTION: |
413 |
|
|
# Check if the listed packages in $QT4_BUILT_WITH_USE_CHECK are built with the |
414 |
|
|
# USE flags listed. |
415 |
|
|
# |
416 |
|
|
# If any of the required USE flags are missing, an eerror will be printed for |
417 |
|
|
# each package with missing USE flags. |
418 |
|
|
qt4-build_check_use() { |
419 |
|
|
local line missing |
420 |
|
|
while read line; do |
421 |
|
|
[[ -z ${line} ]] && continue |
422 |
|
|
if ! _qt_built_with_use ${line}; then |
423 |
|
|
missing=true |
424 |
|
|
fi |
425 |
|
|
done <<< "${QT4_BUILT_WITH_USE_CHECK}" |
426 |
|
|
if [[ -n ${missing} ]]; then |
427 |
|
|
echo |
428 |
|
|
eerror "Flags marked with an * are missing." |
429 |
|
|
die "Missing USE flags found" |
430 |
|
|
fi |
431 |
caleb |
1.1 |
} |
432 |
|
|
|
433 |
|
|
qt_mkspecs_dir() { |
434 |
caleb |
1.5 |
# Allows us to define which mkspecs dir we want to use. |
435 |
|
|
local spec |
436 |
caleb |
1.1 |
|
437 |
caleb |
1.5 |
case ${CHOST} in |
438 |
|
|
*-freebsd*|*-dragonfly*) |
439 |
|
|
spec="freebsd" ;; |
440 |
|
|
*-openbsd*) |
441 |
|
|
spec="openbsd" ;; |
442 |
|
|
*-netbsd*) |
443 |
|
|
spec="netbsd" ;; |
444 |
ingmar |
1.7 |
*-darwin*) |
445 |
caleb |
1.5 |
spec="darwin" ;; |
446 |
|
|
*-linux-*|*-linux) |
447 |
|
|
spec="linux" ;; |
448 |
|
|
*) |
449 |
ingmar |
1.7 |
die "Unknown CHOST, no platform choosen." |
450 |
caleb |
1.5 |
esac |
451 |
|
|
|
452 |
|
|
CXX=$(tc-getCXX) |
453 |
|
|
if [[ ${CXX/g++/} != ${CXX} ]]; then |
454 |
|
|
spec="${spec}-g++" |
455 |
|
|
elif [[ ${CXX/icpc/} != ${CXX} ]]; then |
456 |
|
|
spec="${spec}-icc" |
457 |
|
|
else |
458 |
|
|
die "Unknown compiler ${CXX}." |
459 |
|
|
fi |
460 |
caleb |
1.1 |
|
461 |
caleb |
1.5 |
echo "${spec}" |
462 |
caleb |
1.1 |
} |
463 |
|
|
|
464 |
ingmar |
1.7 |
EXPORT_FUNCTIONS pkg_setup src_unpack src_compile src_install pkg_postrm pkg_postinst |