1 |
abcd |
1.55 |
# Copyright 1999-2009 Gentoo Foundation |
2 |
caleb |
1.1 |
# Distributed under the terms of the GNU General Public License v2 |
3 |
abcd |
1.55 |
# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.54 2009/12/06 09:34:36 hwoarang Exp $ |
4 |
caleb |
1.1 |
|
5 |
|
|
# @ECLASS: qt4-build.eclass |
6 |
|
|
# @MAINTAINER: |
7 |
yngwin |
1.25 |
# Ben de Groot <yngwin@gentoo.org>, |
8 |
|
|
# Markos Chandras <hwoarang@gentoo.org>, |
9 |
caleb |
1.1 |
# Caleb Tennis <caleb@gentoo.org> |
10 |
wired |
1.46 |
# Alex Alexander <wired@gentoo.org> |
11 |
ingmar |
1.8 |
# @BLURB: Eclass for Qt4 split ebuilds. |
12 |
caleb |
1.1 |
# @DESCRIPTION: |
13 |
|
|
# This eclass contains various functions that are used when building Qt4 |
14 |
|
|
|
15 |
hwoarang |
1.37 |
inherit base eutils multilib toolchain-funcs flag-o-matic versionator |
16 |
caleb |
1.1 |
|
17 |
abcd |
1.55 |
IUSE="debug pch" |
18 |
hwoarang |
1.36 |
RDEPEND=" |
19 |
|
|
!<x11-libs/qt-assistant-${PV} |
20 |
|
|
!>x11-libs/qt-assistant-${PV}-r9999 |
21 |
|
|
!<x11-libs/qt-core-${PV} |
22 |
|
|
!>x11-libs/qt-core-${PV}-r9999 |
23 |
|
|
!<x11-libs/qt-dbus-${PV} |
24 |
|
|
!>x11-libs/qt-dbus-${PV}-r9999 |
25 |
|
|
!<x11-libs/qt-demo-${PV} |
26 |
|
|
!>x11-libs/qt-demo-${PV}-r9999 |
27 |
|
|
!<x11-libs/qt-gui-${PV} |
28 |
|
|
!>x11-libs/qt-gui-${PV}-r9999 |
29 |
|
|
!<x11-libs/qt-opengl-${PV} |
30 |
|
|
!>x11-libs/qt-opengl-${PV}-r9999 |
31 |
|
|
!<x11-libs/qt-phonon-${PV} |
32 |
|
|
!>x11-libs/qt-phonon-${PV}-r9999 |
33 |
|
|
!<x11-libs/qt-qt3support-${PV} |
34 |
|
|
!>x11-libs/qt-qt3support-${PV}-r9999 |
35 |
|
|
!<x11-libs/qt-script-${PV} |
36 |
|
|
!>x11-libs/qt-script-${PV}-r9999 |
37 |
|
|
!<x11-libs/qt-sql-${PV} |
38 |
|
|
!>x11-libs/qt-sql-${PV}-r9999 |
39 |
|
|
!<x11-libs/qt-svg-${PV} |
40 |
|
|
!>x11-libs/qt-svg-${PV}-r9999 |
41 |
|
|
!<x11-libs/qt-test-${PV} |
42 |
|
|
!>x11-libs/qt-test-${PV}-r9999 |
43 |
|
|
!<x11-libs/qt-webkit-${PV} |
44 |
|
|
!>x11-libs/qt-webkit-${PV}-r9999 |
45 |
|
|
!<x11-libs/qt-xmlpatterns-${PV} |
46 |
|
|
!>x11-libs/qt-xmlpatterns-${PV}-r9999 |
47 |
|
|
" |
48 |
abcd |
1.55 |
|
49 |
|
|
MY_PV=${PV/_/-} |
50 |
wired |
1.48 |
|
51 |
|
|
if version_is_at_least 4.5.99999999 ${PV} ; then |
52 |
abcd |
1.55 |
MY_P=qt-everywhere-opensource-src-${MY_PV} |
53 |
wired |
1.48 |
else |
54 |
abcd |
1.55 |
MY_P=qt-x11-opensource-src-${MY_PV} |
55 |
wired |
1.48 |
fi |
56 |
abcd |
1.55 |
|
57 |
ingmar |
1.11 |
S=${WORKDIR}/${MY_P} |
58 |
ingmar |
1.7 |
|
59 |
hwoarang |
1.44 |
HOMEPAGE="http://qt.nokia.com/" |
60 |
abcd |
1.55 |
SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz" |
61 |
ingmar |
1.11 |
|
62 |
abcd |
1.55 |
LICENSE="|| ( LGPL-2.1 GPL-3 )" |
63 |
yngwin |
1.25 |
|
64 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_pkg_setup |
65 |
|
|
# @DESCRIPTION: |
66 |
abcd |
1.55 |
# Sets up PATH and LD_LIBRARY_PATH |
67 |
caleb |
1.1 |
qt4-build_pkg_setup() { |
68 |
abcd |
1.55 |
PATH="${S}/bin${PATH:+:}${PATH}" |
69 |
|
|
LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" |
70 |
yngwin |
1.20 |
|
71 |
abcd |
1.55 |
# Make sure ebuilds use the required EAPI |
72 |
|
|
if [[ ${EAPI} != 2 ]]; then |
73 |
|
|
eerror "The qt4-build eclass requires EAPI=2, but this ebuild does not" |
74 |
|
|
eerror "have EAPI=2 set. The ebuild author or editor failed. This ebuild needs" |
75 |
|
|
eerror "to be fixed. Using qt4-build-edge eclass without EAPI=2 will fail." |
76 |
|
|
die "qt4-build-edge eclass requires EAPI=2" |
77 |
yngwin |
1.20 |
fi |
78 |
caleb |
1.1 |
|
79 |
abcd |
1.55 |
if ! version_is_at_least 4.1 $(gcc-version); then |
80 |
yngwin |
1.20 |
ewarn "Using a GCC version lower than 4.1 is not supported!" |
81 |
|
|
echo |
82 |
gengor |
1.31 |
ebeep 3 |
83 |
yngwin |
1.20 |
fi |
84 |
wired |
1.52 |
|
85 |
abcd |
1.55 |
if [[ ${P} == qt-core-4.6.0_rc1 ]]; then |
86 |
wired |
1.52 |
ewarn |
87 |
|
|
ewarn "Binary compatibility broke between 4.6.0_beta1 and 4.6.0_rc1." |
88 |
|
|
ewarn "If you are upgrading from 4.6.0_beta1, you'll have to" |
89 |
|
|
ewarn "re-emerge everything that depends on Qt." |
90 |
|
|
ewarn "Use the following command:" |
91 |
|
|
ewarn |
92 |
deathwing00 |
1.53 |
ewarn " emerge -av1 \$(for i in \$(qlist -IC x11-libs/qt-);" |
93 |
|
|
ewarn " do equery -q d \$i | grep -v 'x11-libs/qt-' |" |
94 |
|
|
ewarn " sed \"s/^/=/\"; done)" |
95 |
abcd |
1.55 |
ewarn |
96 |
wired |
1.52 |
ewarn "YOU'VE BEEN WARNED" |
97 |
|
|
ewarn |
98 |
|
|
ebeep 3 |
99 |
|
|
fi |
100 |
abcd |
1.55 |
|
101 |
caleb |
1.1 |
} |
102 |
|
|
|
103 |
hwoarang |
1.34 |
# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES |
104 |
|
|
# @DESCRIPTION: |
105 |
|
|
# Arguments for build_target_directories. Takes the directories, in which the |
106 |
|
|
# code should be compiled. This is a space-separated list |
107 |
|
|
|
108 |
|
|
# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES |
109 |
|
|
# @DESCRIPTION: |
110 |
|
|
# Space separated list including the directories that will be extracted from Qt |
111 |
|
|
# tarball |
112 |
|
|
|
113 |
|
|
# @FUNCTION: qt4-build_src_unpack |
114 |
|
|
# @DESCRIPTION: |
115 |
|
|
# Unpacks the sources |
116 |
yngwin |
1.20 |
qt4-build_src_unpack() { |
117 |
hwoarang |
1.42 |
setqtenv |
118 |
abcd |
1.55 |
local target targets= |
119 |
|
|
for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ |
120 |
ingmar |
1.11 |
src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \ |
121 |
ingmar |
1.13 |
${QT4_EXTRACT_DIRECTORIES}; do |
122 |
abcd |
1.55 |
targets+=" ${MY_P}/${target}" |
123 |
ingmar |
1.11 |
done |
124 |
|
|
|
125 |
abcd |
1.55 |
echo tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} |
126 |
|
|
tar xzpf "${DISTDIR}"/${MY_P}.tar.gz ${targets} |
127 |
ingmar |
1.11 |
} |
128 |
|
|
|
129 |
hwoarang |
1.37 |
# @ECLASS-VARIABLE: PATCHES |
130 |
|
|
# @DESCRIPTION: |
131 |
|
|
# In case you have patches to apply, specify them in PATCHES variable. Make sure |
132 |
|
|
# to specify the full path. This variable is necessary for src_prepare phase. |
133 |
|
|
# example: |
134 |
|
|
# PATCHES="${FILESDIR}"/mypatch.patch |
135 |
|
|
# ${FILESDIR}"/mypatch2.patch" |
136 |
|
|
# |
137 |
hwoarang |
1.34 |
|
138 |
|
|
# @FUNCTION: qt4-build_src_prepare |
139 |
|
|
# @DESCRIPTION: |
140 |
|
|
# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix |
141 |
|
|
# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. |
142 |
yngwin |
1.20 |
qt4-build_src_prepare() { |
143 |
hwoarang |
1.42 |
setqtenv |
144 |
yngwin |
1.20 |
cd "${S}" |
145 |
|
|
|
146 |
ingmar |
1.7 |
if [[ ${PN} != qt-core ]]; then |
147 |
|
|
skip_qmake_build_patch |
148 |
|
|
skip_project_generation_patch |
149 |
|
|
symlink_binaries_to_buildtree |
150 |
|
|
fi |
151 |
hwoarang |
1.24 |
|
152 |
hwoarang |
1.54 |
# Bug 282984 && Bug 295530 |
153 |
|
|
sed -e "s:\(^SYSTEM_VARIABLES\):CC=$(tc-getCC)\nCXX=$(tc-getCXX)\n\1:" \ |
154 |
ayoy |
1.50 |
-i configure || die "sed qmake compilers failed" |
155 |
hwoarang |
1.54 |
sed -e "s:\(\$MAKE\):\1 CC=$(tc-getCC) CXX=$(tc-getCXX) LD=$(tc-getCXX):" \ |
156 |
ayoy |
1.50 |
-i config.tests/unix/compile.test || die "sed test compilers failed" |
157 |
|
|
|
158 |
hwoarang |
1.21 |
# Bug 178652 |
159 |
abcd |
1.55 |
if [[ $(gcc-major-version) == 3 ]] && use amd64; then |
160 |
hwoarang |
1.21 |
ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" |
161 |
|
|
append-flags -fno-gcse |
162 |
gengor |
1.18 |
fi |
163 |
|
|
|
164 |
gengor |
1.30 |
# Unsupported old gcc versions - hardened needs this :( |
165 |
abcd |
1.55 |
if [[ $(gcc-major-version) -lt 4 ]] ; then |
166 |
gengor |
1.30 |
ewarn "Appending -fno-stack-protector to CXXFLAGS" |
167 |
|
|
append-cxxflags -fno-stack-protector |
168 |
|
|
# Bug 253127 |
169 |
gengor |
1.29 |
sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ |
170 |
|
|
-i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" |
171 |
|
|
fi |
172 |
|
|
|
173 |
ayoy |
1.49 |
# Bug 261632 |
174 |
|
|
if use ppc64; then |
175 |
|
|
ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" |
176 |
|
|
append-flags -mminimal-toc |
177 |
|
|
fi |
178 |
|
|
|
179 |
hwoarang |
1.24 |
# Bug 172219 |
180 |
ingmar |
1.7 |
sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ |
181 |
|
|
-e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ |
182 |
|
|
-e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ |
183 |
|
|
-e "s:X11R6/::" \ |
184 |
|
|
-i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed" |
185 |
|
|
|
186 |
|
|
sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ |
187 |
|
|
-e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ |
188 |
|
|
-e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=${LDFLAGS}:" \ |
189 |
|
|
-i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" |
190 |
yngwin |
1.39 |
|
191 |
hwoarang |
1.37 |
base_src_prepare |
192 |
ingmar |
1.7 |
} |
193 |
|
|
|
194 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_src_configure |
195 |
|
|
# @DESCRIPTION: |
196 |
|
|
# Default configure phase |
197 |
yngwin |
1.20 |
qt4-build_src_configure() { |
198 |
hwoarang |
1.42 |
setqtenv |
199 |
ingmar |
1.7 |
myconf="$(standard_configure_options) ${myconf}" |
200 |
|
|
|
201 |
|
|
echo ./configure ${myconf} |
202 |
|
|
./configure ${myconf} || die "./configure failed" |
203 |
tommy |
1.43 |
myconf="" |
204 |
yngwin |
1.20 |
} |
205 |
ingmar |
1.7 |
|
206 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_src_compile |
207 |
|
|
# @DESCRIPTION: Actual compile phase |
208 |
yngwin |
1.20 |
qt4-build_src_compile() { |
209 |
hwoarang |
1.42 |
setqtenv |
210 |
yngwin |
1.20 |
|
211 |
abcd |
1.55 |
build_directories ${QT4_TARGET_DIRECTORIES} |
212 |
caleb |
1.1 |
} |
213 |
|
|
|
214 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_src_install |
215 |
|
|
# @DESCRIPTION: |
216 |
|
|
# Perform the actual installation including some library fixes. |
217 |
caleb |
1.4 |
qt4-build_src_install() { |
218 |
hwoarang |
1.42 |
setqtenv |
219 |
abcd |
1.55 |
install_directories ${QT4_TARGET_DIRECTORIES} |
220 |
ingmar |
1.7 |
install_qconfigs |
221 |
caleb |
1.4 |
fix_library_files |
222 |
|
|
} |
223 |
|
|
|
224 |
hwoarang |
1.42 |
# @FUNCTION: setqtenv |
225 |
|
|
setqtenv() { |
226 |
|
|
# Set up installation directories |
227 |
|
|
QTBASEDIR=/usr/$(get_libdir)/qt4 |
228 |
|
|
QTPREFIXDIR=/usr |
229 |
|
|
QTBINDIR=/usr/bin |
230 |
|
|
QTLIBDIR=/usr/$(get_libdir)/qt4 |
231 |
|
|
QMAKE_LIBDIR_QT=${QTLIBDIR} |
232 |
|
|
QTPCDIR=/usr/$(get_libdir)/pkgconfig |
233 |
|
|
QTDATADIR=/usr/share/qt4 |
234 |
|
|
QTDOCDIR=/usr/share/doc/qt-${PV} |
235 |
|
|
QTHEADERDIR=/usr/include/qt4 |
236 |
|
|
QTPLUGINDIR=${QTLIBDIR}/plugins |
237 |
|
|
QTSYSCONFDIR=/etc/qt4 |
238 |
|
|
QTTRANSDIR=${QTDATADIR}/translations |
239 |
|
|
QTEXAMPLESDIR=${QTDATADIR}/examples |
240 |
|
|
QTDEMOSDIR=${QTDATADIR}/demos |
241 |
|
|
QT_INSTALL_PREFIX=/usr/$(get_libdir)/qt4 |
242 |
|
|
PLATFORM=$(qt_mkspecs_dir) |
243 |
|
|
|
244 |
|
|
unset QMAKESPEC |
245 |
|
|
} |
246 |
|
|
|
247 |
hwoarang |
1.34 |
# @FUNCTION: standard_configure_options |
248 |
|
|
# @DESCRIPTION: |
249 |
|
|
# Sets up some standard configure options, like libdir (if necessary), whether |
250 |
|
|
# debug info is wanted or not. |
251 |
caleb |
1.1 |
standard_configure_options() { |
252 |
abcd |
1.55 |
local myconf= |
253 |
caleb |
1.1 |
|
254 |
abcd |
1.55 |
[[ $(get_libdir) != lib ]] && myconf+=" -L/usr/$(get_libdir)" |
255 |
caleb |
1.1 |
|
256 |
|
|
# Disable visibility explicitly if gcc version isn't 4 |
257 |
abcd |
1.55 |
if [[ $(gcc-major-version) -lt 4 ]]; then |
258 |
|
|
myconf+=" -no-reduce-exports" |
259 |
caleb |
1.1 |
fi |
260 |
|
|
|
261 |
ingmar |
1.12 |
# precompiled headers doesn't work on hardened, where the flag is masked. |
262 |
abcd |
1.55 |
myconf+=" $(qt_use pch)" |
263 |
ingmar |
1.12 |
|
264 |
ingmar |
1.7 |
if use debug; then |
265 |
abcd |
1.55 |
myconf+=" -debug" |
266 |
ingmar |
1.7 |
else |
267 |
abcd |
1.55 |
myconf+=" -release" |
268 |
ingmar |
1.7 |
fi |
269 |
abcd |
1.55 |
myconf+=" -no-separate-debug-info" |
270 |
caleb |
1.1 |
|
271 |
yngwin |
1.20 |
# ARCH is set on Gentoo. Qt now falls back to generic on an unsupported |
272 |
flameeyes |
1.27 |
# $(tc-arch). Therefore we convert it to supported values. |
273 |
|
|
case "$(tc-arch)" in |
274 |
abcd |
1.55 |
amd64) myconf+=" -arch x86_64" ;; |
275 |
|
|
ppc|ppc64) myconf+=" -arch powerpc" ;; |
276 |
|
|
x86|x86-*) myconf+=" -arch i386" ;; |
277 |
|
|
alpha|arm|ia64|mips|s390|sparc) myconf+=" -arch $(tc-arch)" ;; |
278 |
|
|
hppa|sh) myconf+=" -arch generic" ;; |
279 |
flameeyes |
1.27 |
*) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; |
280 |
ingmar |
1.11 |
esac |
281 |
|
|
|
282 |
wired |
1.48 |
# 4.6: build qt-core with exceptions or qt-xmlpatterns won't build |
283 |
|
|
local exceptions= |
284 |
|
|
case "${PV}" in |
285 |
|
|
4.6.*) |
286 |
|
|
if [[ ${PN} != "qt-core" ]] && [[ ${PN} != "qt-xmlpatterns" ]]; then |
287 |
|
|
exceptions="-no-exceptions" |
288 |
|
|
fi |
289 |
|
|
;; |
290 |
|
|
*) |
291 |
|
|
[[ ${PN} == "qt-xmlpatterns" ]] || exceptions="-no-exceptions" |
292 |
|
|
;; |
293 |
|
|
esac |
294 |
|
|
|
295 |
abcd |
1.55 |
myconf+=" -platform $(qt_mkspecs_dir) -stl -verbose -largefile -confirm-license |
296 |
ingmar |
1.7 |
-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} |
297 |
|
|
-datadir ${QTDATADIR} -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} |
298 |
|
|
-plugindir ${QTPLUGINDIR} -sysconfdir ${QTSYSCONFDIR} |
299 |
|
|
-translationdir ${QTTRANSDIR} -examplesdir ${QTEXAMPLESDIR} |
300 |
abcd |
1.55 |
-demosdir ${QTDEMOSDIR} -silent -fast -opensource |
301 |
wired |
1.48 |
${exceptions} |
302 |
aballier |
1.28 |
-reduce-relocations -nomake examples -nomake demos" |
303 |
yngwin |
1.39 |
|
304 |
caleb |
1.1 |
echo "${myconf}" |
305 |
|
|
} |
306 |
|
|
|
307 |
hwoarang |
1.34 |
# @FUNCTION: build_directories |
308 |
|
|
# @USAGE: < directories > |
309 |
|
|
# @DESCRIPTION: |
310 |
|
|
# Compiles the code in $QT4_TARGET_DIRECTORIES |
311 |
caleb |
1.1 |
build_directories() { |
312 |
abcd |
1.55 |
for x in "$@"; do |
313 |
caleb |
1.1 |
cd "${S}"/${x} |
314 |
hwoarang |
1.42 |
sed -i -e "s:\$\$\[QT_INSTALL_LIBS\]:/usr/$(get_libdir)/qt4:g" $(find "${S}" -name '*.pr[io]') "${S}"/mkspecs/common/linux.conf || die |
315 |
ingmar |
1.7 |
"${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed" |
316 |
ayoy |
1.47 |
emake CC="@echo compiling \$< && $(tc-getCC)" \ |
317 |
|
|
CXX="@echo compiling \$< && $(tc-getCXX)" \ |
318 |
|
|
LINK="@echo linking \$@ && $(tc-getCXX)" || die "emake failed" |
319 |
caleb |
1.1 |
done |
320 |
|
|
} |
321 |
|
|
|
322 |
hwoarang |
1.34 |
# @FUNCTION: install_directories |
323 |
|
|
# @USAGE: < directories > |
324 |
|
|
# @DESCRIPTION: |
325 |
|
|
# run emake install in the given directories, which are separated by spaces |
326 |
caleb |
1.1 |
install_directories() { |
327 |
abcd |
1.55 |
for x in "$@"; do |
328 |
ingmar |
1.7 |
pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" |
329 |
|
|
emake INSTALL_ROOT="${D}" install || die "emake install failed" |
330 |
|
|
popd >/dev/null || die "Can't popd from ${S}/${x}" |
331 |
caleb |
1.1 |
done |
332 |
|
|
} |
333 |
|
|
|
334 |
ingmar |
1.7 |
# @ECLASS-VARIABLE: QCONFIG_ADD |
335 |
|
|
# @DESCRIPTION: |
336 |
|
|
# List options that need to be added to QT_CONFIG in qconfig.pri |
337 |
abcd |
1.55 |
: ${QCONFIG_ADD:=} |
338 |
ingmar |
1.7 |
|
339 |
|
|
# @ECLASS-VARIABLE: QCONFIG_REMOVE |
340 |
|
|
# @DESCRIPTION: |
341 |
|
|
# List options that need to be removed from QT_CONFIG in qconfig.pri |
342 |
abcd |
1.55 |
: ${QCONFIG_REMOVE:=} |
343 |
ingmar |
1.7 |
|
344 |
|
|
# @ECLASS-VARIABLE: QCONFIG_DEFINE |
345 |
|
|
# @DESCRIPTION: |
346 |
|
|
# List variables that should be defined at the top of QtCore/qconfig.h |
347 |
abcd |
1.55 |
: ${QCONFIG_DEFINE:=} |
348 |
ingmar |
1.7 |
|
349 |
hwoarang |
1.34 |
# @FUNCTION: install_qconfigs |
350 |
|
|
# @DESCRIPTION: Install gentoo-specific mkspecs configurations |
351 |
ingmar |
1.7 |
install_qconfigs() { |
352 |
zlin |
1.9 |
local x |
353 |
|
|
if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then |
354 |
ingmar |
1.7 |
for x in QCONFIG_ADD QCONFIG_REMOVE; do |
355 |
|
|
[[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri |
356 |
|
|
done |
357 |
|
|
insinto ${QTDATADIR}/mkspecs/gentoo |
358 |
|
|
doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" |
359 |
zlin |
1.9 |
fi |
360 |
ingmar |
1.7 |
|
361 |
zlin |
1.9 |
if [[ -n ${QCONFIG_DEFINE} ]]; then |
362 |
ingmar |
1.7 |
for x in ${QCONFIG_DEFINE}; do |
363 |
|
|
echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h |
364 |
|
|
done |
365 |
|
|
insinto ${QTHEADERDIR}/Gentoo |
366 |
|
|
doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" |
367 |
|
|
fi |
368 |
|
|
} |
369 |
|
|
|
370 |
hwoarang |
1.34 |
# @FUNCTION: generate_qconfigs |
371 |
|
|
# @DESCRIPTION: Generates gentoo-specific configurations |
372 |
ingmar |
1.7 |
generate_qconfigs() { |
373 |
|
|
if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then |
374 |
|
|
local x qconfig_add qconfig_remove qconfig_new |
375 |
|
|
for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do |
376 |
|
|
[[ -f ${x} ]] || continue |
377 |
abcd |
1.55 |
qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" |
378 |
|
|
qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" |
379 |
ingmar |
1.7 |
done |
380 |
|
|
|
381 |
|
|
# these error checks do not use die because dying in pkg_post{inst,rm} |
382 |
|
|
# just makes things worse. |
383 |
|
|
if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then |
384 |
|
|
# start with the qconfig.pri that qt-core installed |
385 |
|
|
if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \ |
386 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then |
387 |
|
|
eerror "cp qconfig failed." |
388 |
|
|
return 1 |
389 |
|
|
fi |
390 |
|
|
|
391 |
|
|
# generate list of QT_CONFIG entries from the existing list |
392 |
|
|
# including qconfig_add and excluding qconfig_remove |
393 |
|
|
for x in $(sed -n 's/^QT_CONFIG +=//p' \ |
394 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do |
395 |
abcd |
1.55 |
hasq ${x} ${qconfig_remove} || qconfig_new+=" ${x}" |
396 |
ingmar |
1.7 |
done |
397 |
|
|
|
398 |
|
|
# replace the existing QT_CONFIG list with qconfig_new |
399 |
|
|
if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \ |
400 |
|
|
"${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then |
401 |
|
|
eerror "Sed for QT_CONFIG failed" |
402 |
|
|
return 1 |
403 |
|
|
fi |
404 |
|
|
|
405 |
|
|
# create Gentoo/qconfig.h |
406 |
|
|
if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then |
407 |
|
|
if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then |
408 |
|
|
eerror "mkdir ${QTHEADERDIR}/Gentoo failed" |
409 |
|
|
return 1 |
410 |
|
|
fi |
411 |
|
|
fi |
412 |
|
|
: > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
413 |
|
|
for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do |
414 |
|
|
[[ -f ${x} ]] || continue |
415 |
|
|
cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
416 |
|
|
done |
417 |
|
|
else |
418 |
|
|
rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri |
419 |
|
|
rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h |
420 |
|
|
rmdir "${ROOT}${QTDATADIR}"/mkspecs \ |
421 |
|
|
"${ROOT}${QTDATADIR}" \ |
422 |
|
|
"${ROOT}${QTHEADERDIR}"/Gentoo \ |
423 |
|
|
"${ROOT}${QTHEADERDIR}" 2>/dev/null |
424 |
|
|
fi |
425 |
|
|
fi |
426 |
|
|
} |
427 |
|
|
|
428 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_pkg_postrm |
429 |
|
|
# @DESCRIPTION: Generate configurations when the package is completely removed |
430 |
ingmar |
1.7 |
qt4-build_pkg_postrm() { |
431 |
|
|
generate_qconfigs |
432 |
caleb |
1.1 |
} |
433 |
|
|
|
434 |
hwoarang |
1.34 |
# @FUNCTION: qt4-build_pkg_postinst |
435 |
|
|
# @DESCRIPTION: Generate configuration, plus throws a message about possible |
436 |
|
|
# breakages and proposed solutions. |
437 |
ingmar |
1.7 |
qt4-build_pkg_postinst() { |
438 |
|
|
generate_qconfigs |
439 |
wired |
1.52 |
|
440 |
|
|
if [[ "${PN}" == "qt-core" ]]; then |
441 |
|
|
echo |
442 |
|
|
ewarn "After a rebuild or upgrade of Qt, it can happen that Qt plugins (such as Qt" |
443 |
|
|
ewarn "and KDE styles and widgets) can no longer be loaded. In this situation you" |
444 |
|
|
ewarn "should recompile the packages providing these plugins. Also, make sure you" |
445 |
|
|
ewarn "compile the Qt packages, and the packages that depend on it, with the same" |
446 |
|
|
ewarn "GCC version and the same USE flag settings (especially the debug flag)." |
447 |
|
|
ewarn |
448 |
|
|
ewarn "Packages that typically need to be recompiled are kdelibs from KDE4, any" |
449 |
|
|
ewarn "additional KDE4/Qt4 styles, qscintilla and PyQt4. Before filing a bug report," |
450 |
|
|
ewarn "make sure all your Qt4 packages are up-to-date and built with the same" |
451 |
|
|
ewarn "configuration." |
452 |
|
|
ewarn |
453 |
|
|
ewarn "For more information, see http://doc.trolltech.com/${PV%.*}/plugins-howto.html" |
454 |
|
|
echo |
455 |
|
|
fi |
456 |
caleb |
1.1 |
} |
457 |
|
|
|
458 |
hwoarang |
1.34 |
# @FUNCTION: skip_qmake_build_patch |
459 |
|
|
# @DESCRIPTION: |
460 |
|
|
# Don't need to build qmake, as it's already installed from qt-core |
461 |
caleb |
1.1 |
skip_qmake_build_patch() { |
462 |
ingmar |
1.7 |
# Don't need to build qmake, as it's already installed from qt-core |
463 |
|
|
sed -i -e "s:if true:if false:g" "${S}"/configure || die "Sed failed" |
464 |
caleb |
1.1 |
} |
465 |
|
|
|
466 |
hwoarang |
1.34 |
# @FUNCTION: skip_project_generation_patch |
467 |
|
|
# @DESCRIPTION: |
468 |
|
|
# Exit the script early by throwing in an exit before all of the .pro files are scanned |
469 |
caleb |
1.1 |
skip_project_generation_patch() { |
470 |
|
|
# Exit the script early by throwing in an exit before all of the .pro files are scanned |
471 |
ingmar |
1.7 |
sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ |
472 |
|
|
-i "${S}"/configure || die "Sed failed" |
473 |
caleb |
1.1 |
} |
474 |
|
|
|
475 |
hwoarang |
1.34 |
# @FUNCTION: symlink_binaries_to_buildtree |
476 |
|
|
# @DESCRIPTION: |
477 |
|
|
# Symlink generated binaries to buildtree so they can be used during compilation |
478 |
|
|
# time |
479 |
ingmar |
1.7 |
symlink_binaries_to_buildtree() { |
480 |
|
|
for bin in qmake moc uic rcc; do |
481 |
|
|
ln -s ${QTBINDIR}/${bin} "${S}"/bin/ || die "Symlinking ${bin} to ${S}/bin failed." |
482 |
|
|
done |
483 |
caleb |
1.1 |
} |
484 |
|
|
|
485 |
hwoarang |
1.34 |
# @FUNCTION: fix_library_files |
486 |
|
|
# @DESCRIPTION: |
487 |
|
|
# Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and |
488 |
|
|
# moves the *.pc-files into the pkgconfig directory |
489 |
caleb |
1.1 |
fix_library_files() { |
490 |
ingmar |
1.7 |
for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do |
491 |
|
|
if [[ -e ${libfile} ]]; then |
492 |
|
|
sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "Sed on ${libfile} failed." |
493 |
|
|
fi |
494 |
|
|
done |
495 |
caleb |
1.1 |
|
496 |
|
|
# pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: |
497 |
ingmar |
1.7 |
for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do |
498 |
|
|
if [[ -e ${libfile} ]]; then |
499 |
|
|
sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "Sed failed" |
500 |
caleb |
1.1 |
|
501 |
abcd |
1.55 |
# Move .pc files into the pkgconfig directory |
502 |
ingmar |
1.7 |
dodir ${QTPCDIR} |
503 |
|
|
mv ${libfile} "${D}"/${QTPCDIR}/ \ |
504 |
|
|
|| die "Moving ${libfile} to ${D}/${QTPCDIR}/ failed." |
505 |
|
|
fi |
506 |
|
|
done |
507 |
|
|
|
508 |
|
|
# Don't install an empty directory |
509 |
|
|
rmdir "${D}"/${QTLIBDIR}/pkgconfig |
510 |
caleb |
1.1 |
} |
511 |
|
|
|
512 |
hwoarang |
1.34 |
# @FUNCTION: qt_use |
513 |
|
|
# @USAGE: < flag > [ feature ] [ enableval ] |
514 |
yngwin |
1.39 |
# @DESCRIPTION: |
515 |
hwoarang |
1.34 |
# This will echo "${enableval}-${feature}" if <flag> is enabled, or |
516 |
|
|
# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> |
517 |
|
|
# will be used for that. If [enableval] is not specified, it omits the |
518 |
|
|
# assignment-part |
519 |
caleb |
1.1 |
qt_use() { |
520 |
abcd |
1.55 |
local flag=$1 |
521 |
|
|
local feature=$1 |
522 |
caleb |
1.5 |
local enableval= |
523 |
caleb |
1.1 |
|
524 |
abcd |
1.55 |
[[ -n $2 ]] && feature=$2 |
525 |
|
|
[[ -n $3 ]] && enableval=-$3 |
526 |
ingmar |
1.7 |
|
527 |
|
|
if use ${flag}; then |
528 |
|
|
echo "${enableval}-${feature}" |
529 |
|
|
else |
530 |
|
|
echo "-no-${feature}" |
531 |
|
|
fi |
532 |
|
|
} |
533 |
|
|
|
534 |
hwoarang |
1.34 |
# @FUNCTION: qt_mkspecs_dir |
535 |
|
|
# @RETURN: the specs-directory w/o path |
536 |
yngwin |
1.39 |
# @DESCRIPTION: |
537 |
hwoarang |
1.34 |
# Allows us to define which mkspecs dir we want to use. |
538 |
caleb |
1.1 |
qt_mkspecs_dir() { |
539 |
caleb |
1.5 |
# Allows us to define which mkspecs dir we want to use. |
540 |
|
|
local spec |
541 |
caleb |
1.1 |
|
542 |
caleb |
1.5 |
case ${CHOST} in |
543 |
|
|
*-freebsd*|*-dragonfly*) |
544 |
abcd |
1.55 |
spec=freebsd ;; |
545 |
caleb |
1.5 |
*-openbsd*) |
546 |
abcd |
1.55 |
spec=openbsd ;; |
547 |
caleb |
1.5 |
*-netbsd*) |
548 |
abcd |
1.55 |
spec=netbsd ;; |
549 |
ingmar |
1.7 |
*-darwin*) |
550 |
abcd |
1.55 |
spec=darwin ;; |
551 |
caleb |
1.5 |
*-linux-*|*-linux) |
552 |
abcd |
1.55 |
spec=linux ;; |
553 |
caleb |
1.5 |
*) |
554 |
ingmar |
1.7 |
die "Unknown CHOST, no platform choosen." |
555 |
caleb |
1.5 |
esac |
556 |
|
|
|
557 |
|
|
CXX=$(tc-getCXX) |
558 |
abcd |
1.55 |
if [[ ${CXX} == *g++* ]]; then |
559 |
|
|
spec+=-g++ |
560 |
|
|
elif [[ ${CXX} == *icpc* ]]; then |
561 |
|
|
spec+=-icc |
562 |
caleb |
1.5 |
else |
563 |
|
|
die "Unknown compiler ${CXX}." |
564 |
|
|
fi |
565 |
abcd |
1.55 |
if [[ -n ${LIBDIR/lib} ]]; then |
566 |
|
|
spec+=-${LIBDIR/lib} |
567 |
hwoarang |
1.42 |
fi |
568 |
caleb |
1.1 |
|
569 |
caleb |
1.5 |
echo "${spec}" |
570 |
caleb |
1.1 |
} |
571 |
|
|
|
572 |
abcd |
1.55 |
EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install pkg_postrm pkg_postinst |