/[gentoo-x86]/eclass/qt4-build.eclass
Gentoo

Diff of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.134 Revision 1.160
1# Copyright 1999-2012 Gentoo Foundation 1# Copyright 1999-2015 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.134 2012/07/10 21:43:19 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.160 2015/03/11 14:07:56 dlan Exp $
4 4
5# @ECLASS: qt4-build.eclass 5# @ECLASS: qt4-build.eclass
6# @MAINTAINER: 6# @MAINTAINER:
7# Qt herd <qt@gentoo.org> 7# Qt herd <qt@gentoo.org>
8# @BLURB: Eclass for Qt4 split ebuilds. 8# @BLURB: Eclass for Qt4 split ebuilds.
9# @DESCRIPTION: 9# @DESCRIPTION:
10# This eclass contains various functions that are used when building Qt4. 10# This eclass contains various functions that are used when building Qt4.
11 11
12case ${EAPI} in 12case ${EAPI} in
13 2|3|4) : ;; 13 4|5) : ;;
14 *) die "qt4-build.eclass requires EAPI 2, 3 or 4." ;; 14 *) die "qt4-build.eclass: unsupported EAPI=${EAPI:-0}" ;;
15esac 15esac
16 16
17inherit eutils flag-o-matic multilib toolchain-funcs versionator 17inherit eutils flag-o-matic multilib toolchain-funcs
18 18
19if [[ ${PV} == *9999* ]]; then 19HOMEPAGE="https://www.qt.io/ https://qt-project.org/"
20 QT4_BUILD_TYPE="live"
21 inherit git-2
22else
23 QT4_BUILD_TYPE="release"
24fi
25
26HOMEPAGE="http://qt-project.org/ http://qt.nokia.com/"
27LICENSE="|| ( LGPL-2.1 GPL-3 )" 20LICENSE="|| ( LGPL-2.1 GPL-3 )"
21SLOT="4"
28 22
29MY_PV=${PV/_/-} 23case ${PV} in
30MY_P=qt-everywhere-opensource-src-${MY_PV} 24 4.?.9999)
31 25 QT4_BUILD_TYPE="live"
32case ${QT4_BUILD_TYPE} in 26 EGIT_REPO_URI=(
33 live)
34 EGIT_REPO_URI="git://gitorious.org/qt/qt.git 27 "git://gitorious.org/qt/qt.git"
35 https://git.gitorious.org/qt/qt.git" 28 "https://git.gitorious.org/qt/qt.git"
29 )
36 EGIT_BRANCH=${PV%.9999} 30 EGIT_BRANCH=${PV%.9999}
31 inherit git-r3
37 ;; 32 ;;
38 release) 33 *)
39 if version_is_at_least 4.8.1; then 34 QT4_BUILD_TYPE="release"
40 SRC_URI="http://releases.qt-project.org/qt4/source/${MY_P}.tar.gz" 35 MY_P=qt-everywhere-opensource-src-${PV/_/-}
41 else 36 SRC_URI="http://download.qt.io/archive/qt/${PV%.*}/${PV}/${MY_P}.tar.gz"
42 SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz" 37 S=${WORKDIR}/${MY_P}
43 fi
44 ;; 38 ;;
45esac 39esac
46 40
47IUSE="aqua debug pch" 41IUSE="aqua debug pch"
48[[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE+=" +exceptions" 42[[ ${PN} != qtxmlpatterns ]] && IUSE+=" +exceptions"
49if version_is_at_least 4.8; then
50 [[ ${CATEGORY}/${PN} != x11-libs/qt-webkit ]] && IUSE+=" c++0x"
51 version_is_at_least 4.8.3 || IUSE+=" qpa"
52fi
53 43
54DEPEND="virtual/pkgconfig" 44DEPEND="virtual/pkgconfig"
55if [[ ${QT4_BUILD_TYPE} == live ]]; then 45if [[ ${QT4_BUILD_TYPE} == live ]]; then
56 DEPEND+=" dev-lang/perl" 46 DEPEND+=" dev-lang/perl"
57fi 47fi
58 48
59RDEPEND="
60 !<x11-libs/qt-assistant-${PV}:4
61 !>x11-libs/qt-assistant-${PV}-r9999:4
62 !<x11-libs/qt-bearer-${PV}:4
63 !>x11-libs/qt-bearer-${PV}-r9999:4
64 !<x11-libs/qt-core-${PV}:4
65 !>x11-libs/qt-core-${PV}-r9999:4
66 !<x11-libs/qt-dbus-${PV}:4
67 !>x11-libs/qt-dbus-${PV}-r9999:4
68 !<x11-libs/qt-declarative-${PV}:4
69 !>x11-libs/qt-declarative-${PV}-r9999:4
70 !<x11-libs/qt-demo-${PV}:4
71 !>x11-libs/qt-demo-${PV}-r9999:4
72 !<x11-libs/qt-gui-${PV}:4
73 !>x11-libs/qt-gui-${PV}-r9999:4
74 !<x11-libs/qt-multimedia-${PV}:4
75 !>x11-libs/qt-multimedia-${PV}-r9999:4
76 !<x11-libs/qt-opengl-${PV}:4
77 !>x11-libs/qt-opengl-${PV}-r9999:4
78 !<x11-libs/qt-openvg-${PV}:4
79 !>x11-libs/qt-openvg-${PV}-r9999:4
80 !<x11-libs/qt-phonon-${PV}:4
81 !>x11-libs/qt-phonon-${PV}-r9999:4
82 !<x11-libs/qt-qt3support-${PV}:4
83 !>x11-libs/qt-qt3support-${PV}-r9999:4
84 !<x11-libs/qt-script-${PV}:4
85 !>x11-libs/qt-script-${PV}-r9999:4
86 !<x11-libs/qt-sql-${PV}:4
87 !>x11-libs/qt-sql-${PV}-r9999:4
88 !<x11-libs/qt-svg-${PV}:4
89 !>x11-libs/qt-svg-${PV}-r9999:4
90 !<x11-libs/qt-test-${PV}:4
91 !>x11-libs/qt-test-${PV}-r9999:4
92 !<x11-libs/qt-webkit-${PV}:4
93 !>x11-libs/qt-webkit-${PV}-r9999:4
94 !<x11-libs/qt-xmlpatterns-${PV}:4
95 !>x11-libs/qt-xmlpatterns-${PV}-r9999:4
96"
97
98S=${WORKDIR}/${MY_P}
99
100# @FUNCTION: qt4-build_pkg_setup 49# @FUNCTION: qt4-build_pkg_setup
101# @DESCRIPTION: 50# @DESCRIPTION:
102# Sets up PATH and LD_LIBRARY_PATH. 51# Sets up PATH and LD_LIBRARY_PATH.
103qt4-build_pkg_setup() { 52qt4-build_pkg_setup() {
104 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX= 53 # Warn users of possible breakage when downgrading to a previous release.
105
106 # Protect users by not allowing downgrades between releases.
107 # Downgrading revisions within the same release should be allowed. 54 # Downgrading revisions within the same release is safe.
108 if has_version ">${CATEGORY}/${P}-r9999:4"; then 55 if has_version ">${CATEGORY}/${P}-r9999:4"; then
109 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then 56 ewarn
110 eerror " *** Sanity check to keep you from breaking your system ***"
111 eerror "Downgrading Qt is completely unsupported and will break your system!"
112 die "aborting to save your system"
113 else
114 ewarn "Downgrading Qt is completely unsupported and will break your system!" 57 ewarn "Downgrading Qt is completely unsupported and can break your system!"
115 fi 58 ewarn
116 fi 59 fi
117 60
118 PATH="${S}/bin${PATH:+:}${PATH}" 61 PATH="${S}/bin${PATH:+:}${PATH}"
119 if [[ ${CHOST} != *-darwin* ]]; then 62 if [[ ${CHOST} != *-darwin* ]]; then
120 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 63 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
127 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm 70 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
128 ${QT4_EXTRACT_DIRECTORIES}" 71 ${QT4_EXTRACT_DIRECTORIES}"
129 fi 72 fi
130} 73}
131 74
75# @ECLASS-VARIABLE: PATCHES
76# @DEFAULT_UNSET
77# @DESCRIPTION:
78# Array variable containing all the patches to be applied. This variable
79# is expected to be defined in the global scope of ebuilds. Make sure to
80# specify the full path. This variable is used in src_prepare phase.
81#
82# Example:
83# @CODE
84# PATCHES=(
85# "${FILESDIR}/mypatch.patch"
86# "${FILESDIR}/patches_folder/"
87# )
88# @CODE
89
132# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES 90# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
133# @DEFAULT_UNSET 91# @DEFAULT_UNSET
134# @DESCRIPTION: 92# @DESCRIPTION:
135# Space-separated list including the directories that will be extracted from 93# Space-separated list of directories that will be extracted
136# Qt tarball. 94# from Qt tarball.
137 95
138# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 96# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
139# @DEFAULT_UNSET 97# @DEFAULT_UNSET
140# @DESCRIPTION: 98# @DESCRIPTION:
141# Arguments for build_target_directories. Takes the directories in which the 99# Space-separated list of directories that will be configured,
142# code should be compiled. This is a space-separated list. 100# compiled, and installed. All paths must be relative to ${S}.
143 101
144# @FUNCTION: qt4-build_src_unpack 102# @FUNCTION: qt4-build_src_unpack
145# @DESCRIPTION: 103# @DESCRIPTION:
146# Unpacks the sources. 104# Unpacks the sources.
147qt4-build_src_unpack() { 105qt4-build_src_unpack() {
148 setqtenv 106 setqtenv
149 107
150 if ! version_is_at_least 4.1 $(gcc-version); then 108 if [[ $(gcc-major-version) -lt 4 ]] || [[ $(gcc-major-version) -eq 4 && $(gcc-minor-version) -lt 4 ]]; then
109 ewarn
151 ewarn "Using a GCC version lower than 4.1 is not supported." 110 ewarn "Using a GCC version lower than 4.4 is not supported."
111 ewarn
152 fi 112 fi
153 113
154 if [[ ${PN} == qt-webkit ]]; then 114 if [[ ${PN} == qtwebkit ]]; then
155 eshopts_push -s extglob 115 eshopts_push -s extglob
156 if is-flagq '-g?(gdb)?([1-9])'; then 116 if is-flagq '-g?(gdb)?([1-9])'; then
157 echo 117 ewarn
158 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)." 118 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
159 ewarn "You may experience really long compilation times and/or increased memory usage." 119 ewarn "You may experience really long compilation times and/or increased memory usage."
160 ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug." 120 ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug."
161 ewarn "For more info check out https://bugs.gentoo.org/307861" 121 ewarn "For more info check out https://bugs.gentoo.org/307861"
162 echo 122 ewarn
163 fi 123 fi
164 eshopts_pop 124 eshopts_pop
165 fi 125 fi
166 126
167 case ${QT4_BUILD_TYPE} in 127 case ${QT4_BUILD_TYPE} in
168 live) 128 live)
169 git-2_src_unpack 129 git-r3_src_unpack
170 ;; 130 ;;
171 release) 131 release)
172 local tarball="${MY_P}.tar.gz" target= targets= 132 local tarball="${MY_P}.tar.gz" target= targets=
173 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \ 133 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
174 src/{qbase,qt_targets,qt_install}.pri bin config.tests \ 134 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
182 eend $? || die "failed to unpack" 142 eend $? || die "failed to unpack"
183 ;; 143 ;;
184 esac 144 esac
185} 145}
186 146
187# @ECLASS-VARIABLE: PATCHES
188# @DEFAULT_UNSET
189# @DESCRIPTION:
190# PATCHES array variable containing all various patches to be applied.
191# This variable is expected to be defined in global scope of ebuild.
192# Make sure to specify the full path. This variable is utilised in
193# src_unpack/src_prepare phase, based on EAPI.
194#
195# @CODE
196# PATCHES=( "${FILESDIR}/mypatch.patch"
197# "${FILESDIR}/patches_folder/" )
198# @CODE
199
200# @FUNCTION: qt4-build_src_prepare 147# @FUNCTION: qt4-build_src_prepare
201# @DESCRIPTION: 148# @DESCRIPTION:
202# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 149# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
203# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf. 150# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in make.conf.
204qt4-build_src_prepare() { 151qt4-build_src_prepare() {
205 setqtenv 152 setqtenv
206 153
207 if [[ ${QT4_BUILD_TYPE} == live ]]; then 154 if [[ ${QT4_BUILD_TYPE} == live ]]; then
208 QTDIR="." ./bin/syncqt || die "syncqt failed" 155 QTDIR="." ./bin/syncqt || die "syncqt failed"
209 fi 156 fi
210 157
211 if version_is_at_least 4.7; then
212 # avoid X11 dependency in non-gui packages 158 # avoid X11 dependency in non-gui packages
213 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 159 local nolibx11_pkgs="qtbearer qtcore qtdbus qtscript qtsql qttest qtxmlpatterns"
214 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 160 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
215 fi
216 161
217 if use aqua; then 162 if use aqua; then
218 # provide a proper macx-g++-64 163 # provide a proper macx-g++-64
219 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 164 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
220 165
221 sed -e '/^CONFIG/s:app_bundle::' \ 166 sed -e '/^CONFIG/s:app_bundle::' \
222 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \ 167 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
223 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 168 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
224 fi 169 fi
225 170
226 if [[ ${PN} != qt-core ]]; then 171 if [[ ${CATEGORY}/${PN} != dev-qt/qtcore ]]; then
227 skip_qmake_build 172 skip_qmake_build
228 skip_project_generation 173 skip_project_generation
229 symlink_binaries_to_buildtree 174 symlink_binaries_to_buildtree
230 fi 175 fi
231 176
232 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
233 # qmake bus errors with -O2 or -O3 but -O1 works
234 # Bug 373061
235 replace-flags -O[23] -O1
236 fi
237
238 # Bug 178652
239 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
240 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
241 append-flags -fno-gcse
242 fi
243
244 if use_if_iuse c++0x; then 177 if use_if_iuse c++0x; then
245 append-cxxflags -std=c++0x 178 append-cxxflags -std=c++0x
246 fi 179 fi
247 180
248 # Unsupported old gcc versions - hardened needs this :(
249 if [[ $(gcc-major-version) -lt 4 ]]; then
250 ewarn "Appending -fno-stack-protector to CXXFLAGS"
251 append-cxxflags -fno-stack-protector
252 # Bug 253127
253 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
254 -i mkspecs/common/g++.conf || die
255 fi
256
257 # Bug 261632 181 # Bug 261632
258 if use ppc64; then 182 if use ppc64; then
259 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
260 append-flags -mminimal-toc 183 append-flags -mminimal-toc
184 fi
185
186 # Bug 373061
187 # qmake bus errors with -O2 or -O3 but -O1 works
188 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
189 replace-flags -O[23] -O1
190 fi
191
192 # Bug 417105
193 # graphite on gcc 4.7 causes miscompilations
194 if [[ $(gcc-version) == "4.7" ]]; then
195 filter-flags -fgraphite-identity
261 fi 196 fi
262 197
263 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache 198 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
264 sed -e "/^SYSTEM_VARIABLES=/i \ 199 sed -e "/^SYSTEM_VARIABLES=/i \
265 CC='$(tc-getCC)'\n\ 200 CC='$(tc-getCC)'\n\
266 CXX='$(tc-getCXX)'\n\ 201 CXX='$(tc-getCXX)'\n\
267 CFLAGS='${CFLAGS}'\n\ 202 CFLAGS='${CFLAGS}'\n\
268 CXXFLAGS='${CXXFLAGS}'\n\ 203 CXXFLAGS='${CXXFLAGS}'\n\
269 LDFLAGS='${LDFLAGS}'\n" \ 204 LDFLAGS='${LDFLAGS}'\n\
205 QMakeVar set QMAKE_CFLAGS_RELEASE\n\
206 QMakeVar set QMAKE_CFLAGS_DEBUG\n\
207 QMakeVar set QMAKE_CXXFLAGS_RELEASE\n\
208 QMakeVar set QMAKE_CXXFLAGS_DEBUG\n\
209 QMakeVar set QMAKE_LFLAGS_RELEASE\n\
210 QMakeVar set QMAKE_LFLAGS_DEBUG\n"\
270 -i configure \ 211 -i configure \
271 || die "sed SYSTEM_VARIABLES failed" 212 || die "sed SYSTEM_VARIABLES failed"
272 213
273 # Respect CC, CXX, LINK and *FLAGS in config.tests 214 # Respect CC, CXX, LINK and *FLAGS in config.tests
274 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \ 215 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
275 sed -i -e "/bin\/qmake/ s: \"QT_BUILD_TREE=: \ 216 sed -i -e "/bin\/qmake/ s: \"\$SRCDIR/: \
276 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \ 217 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
277 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \ 218 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
278 || die "sed config.tests failed" 219 || die "sed config.tests failed"
279
280 if ! version_is_at_least 4.8; then
281 # Strip predefined CFLAGS from mkspecs (bugs 312689 and 352778)
282 sed -i -e '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf || die
283 fi
284 220
285 # Bug 172219 221 # Bug 172219
286 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 222 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
287 223
288 if [[ ${CHOST} == *-darwin* ]]; then 224 if [[ ${CHOST} == *-darwin* ]]; then
368 -bindir ${QTBINDIR} 304 -bindir ${QTBINDIR}
369 -libdir ${QTLIBDIR} 305 -libdir ${QTLIBDIR}
370 -docdir ${QTDOCDIR} 306 -docdir ${QTDOCDIR}
371 -headerdir ${QTHEADERDIR} 307 -headerdir ${QTHEADERDIR}
372 -plugindir ${QTPLUGINDIR} 308 -plugindir ${QTPLUGINDIR}
373 $(version_is_at_least 4.7 && echo -importdir ${QTIMPORTDIR}) 309 -importdir ${QTIMPORTDIR}
374 -datadir ${QTDATADIR} 310 -datadir ${QTDATADIR}
375 -translationdir ${QTTRANSDIR} 311 -translationdir ${QTTRANSDIR}
376 -sysconfdir ${QTSYSCONFDIR} 312 -sysconfdir ${QTSYSCONFDIR}
377 -examplesdir ${QTEXAMPLESDIR} 313 -examplesdir ${QTEXAMPLESDIR}
378 -demosdir ${QTDEMOSDIR} 314 -demosdir ${QTDEMOSDIR}
388 ppc|ppc64|ppc-*) conf+=" -arch powerpc" ;; 324 ppc|ppc64|ppc-*) conf+=" -arch powerpc" ;;
389 sparc|sparc-*|sparc64-*) conf+=" -arch sparc" ;; 325 sparc|sparc-*|sparc64-*) conf+=" -arch sparc" ;;
390 x86-macos) conf+=" -arch x86" ;; 326 x86-macos) conf+=" -arch x86" ;;
391 x86|x86-*) conf+=" -arch i386" ;; 327 x86|x86-*) conf+=" -arch i386" ;;
392 alpha|arm|ia64|mips|s390) conf+=" -arch $(tc-arch)" ;; 328 alpha|arm|ia64|mips|s390) conf+=" -arch $(tc-arch)" ;;
393 hppa|sh) conf+=" -arch generic" ;; 329 arm64|hppa|sh) conf+=" -arch generic" ;;
394 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;; 330 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
395 esac 331 esac
396 332
397 conf+=" -platform $(qt_mkspecs_dir)" 333 conf+=" -platform $(qt_mkspecs_dir)"
398 334
407 conf+=" -no-separate-debug-info" 343 conf+=" -no-separate-debug-info"
408 344
409 # exceptions USE flag 345 # exceptions USE flag
410 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)" 346 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
411 347
412 # disable rpath on Qt >= 4.8 (bug 380415) 348 # disable rpath (bug 380415), except on prefix (bug 417169)
413 # but leave it enabled on prefix (bug 417169) 349 use prefix || conf+=" -no-rpath"
414 version_is_at_least 4.8 && use !prefix && conf+=" -no-rpath"
415 350
416 # precompiled headers don't work on hardened, where the flag is masked 351 # precompiled headers don't work on hardened, where the flag is masked
417 conf+=" $(qt_use pch)" 352 conf+=" $(qt_use pch)"
418 353
419 # -reduce-relocations 354 # -reduce-relocations
432 if use_if_iuse glib; then 367 if use_if_iuse glib; then
433 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)" 368 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
434 # avoid the -pthread argument 369 # avoid the -pthread argument
435 conf+=" ${glibflags//-pthread}" 370 conf+=" ${glibflags//-pthread}"
436 unset glibflags 371 unset glibflags
437 fi
438
439 if use_if_iuse qpa; then
440 echo
441 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
442 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
443 ewarn "disable it before reporting any bugs related to this useflag."
444 echo
445 conf+=" -qpa"
446 fi 372 fi
447 373
448 if use aqua; then 374 if use aqua; then
449 # On (snow) leopard use the new (frameworked) cocoa code. 375 # On (snow) leopard use the new (frameworked) cocoa code.
450 if [[ ${CHOST##*-darwin} -ge 9 ]]; then 376 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
488# @FUNCTION: qt4-build_src_test 414# @FUNCTION: qt4-build_src_test
489# @DESCRIPTION: 415# @DESCRIPTION:
490# Runs tests only in target directories. 416# Runs tests only in target directories.
491qt4-build_src_test() { 417qt4-build_src_test() {
492 # QtMultimedia does not have any test suite (bug #332299) 418 # QtMultimedia does not have any test suite (bug #332299)
493 [[ ${PN} == qt-multimedia ]] && return 419 [[ ${CATEGORY}/${PN} == dev-qt/qtmultimedia ]] && return
494 420
495 for dir in ${QT4_TARGET_DIRECTORIES}; do 421 for dir in ${QT4_TARGET_DIRECTORIES}; do
496 emake -j1 check -C ${dir} 422 emake -j1 check -C ${dir}
497 done 423 done
498} 424}
542 468
543# @FUNCTION: qt4-build_src_install 469# @FUNCTION: qt4-build_src_install
544# @DESCRIPTION: 470# @DESCRIPTION:
545# Perform the actual installation including some library fixes. 471# Perform the actual installation including some library fixes.
546qt4-build_src_install() { 472qt4-build_src_install() {
547 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
548 setqtenv 473 setqtenv
549 474
550 install_directories ${QT4_TARGET_DIRECTORIES} 475 install_directories ${QT4_TARGET_DIRECTORIES}
551 install_qconfigs 476 install_qconfigs
552 fix_library_files 477 fix_library_files
553 fix_includes 478 fix_includes
554 479
555 # remove .la files since we are building only shared Qt libraries 480 # remove .la files since we are building only shared libraries
556 find "${D}"${QTLIBDIR} -type f -name '*.la' -print0 | xargs -0 rm -f 481 prune_libtool_files
557} 482}
558 483
559# @FUNCTION: setqtenv 484# @FUNCTION: setqtenv
560# @INTERNAL 485# @INTERNAL
561setqtenv() { 486setqtenv() {
562 # Set up installation directories 487 # Set up installation directories
563 QTPREFIXDIR=${EPREFIX}/usr 488 QTPREFIXDIR=${EPREFIX}/usr
564 QTBINDIR=${EPREFIX}/usr/bin 489 QTBINDIR=${QTPREFIXDIR}/bin
565 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4 490 QTLIBDIR=${QTPREFIXDIR}/$(get_libdir)/qt4
566 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig 491 QTPCDIR=${QTPREFIXDIR}/$(get_libdir)/pkgconfig
567 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV} 492 QTDOCDIR=${QTPREFIXDIR}/share/doc/qt-${PV}
568 QTHEADERDIR=${EPREFIX}/usr/include/qt4 493 QTHEADERDIR=${QTPREFIXDIR}/include/qt4
569 QTPLUGINDIR=${QTLIBDIR}/plugins 494 QTPLUGINDIR=${QTLIBDIR}/plugins
570 QTIMPORTDIR=${QTLIBDIR}/imports 495 QTIMPORTDIR=${QTLIBDIR}/imports
571 QTDATADIR=${EPREFIX}/usr/share/qt4 496 QTDATADIR=${QTPREFIXDIR}/share/qt4
572 QTTRANSDIR=${QTDATADIR}/translations 497 QTTRANSDIR=${QTDATADIR}/translations
573 QTSYSCONFDIR=${EPREFIX}/etc/qt4 498 QTSYSCONFDIR=${EPREFIX}/etc/qt4
574 QTEXAMPLESDIR=${QTDATADIR}/examples 499 QTEXAMPLESDIR=${QTDATADIR}/examples
575 QTDEMOSDIR=${QTDATADIR}/demos 500 QTDEMOSDIR=${QTDATADIR}/demos
576 QMAKE_LIBDIR_QT=${QTLIBDIR} 501 QMAKE_LIBDIR_QT=${QTLIBDIR}
577 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
578 502
579 PLATFORM=$(qt_mkspecs_dir) 503 PLATFORM=$(qt_mkspecs_dir)
580 unset QMAKESPEC 504 unset QMAKESPEC
581 505
582 export XDG_CONFIG_HOME="${T}" 506 export XDG_CONFIG_HOME="${T}"
589# Generates Makefiles for the given list of directories. 513# Generates Makefiles for the given list of directories.
590prepare_directories() { 514prepare_directories() {
591 for x in "$@"; do 515 for x in "$@"; do
592 pushd "${S}"/${x} >/dev/null || die 516 pushd "${S}"/${x} >/dev/null || die
593 einfo "Running qmake in: ${x}" 517 einfo "Running qmake in: ${x}"
594 # avoid running over the maximum argument number, bug #299810 518 "${S}"/bin/qmake \
595 { 519 "LIBS+=-L${QTLIBDIR}" \
596 echo "${S}"/mkspecs/common/*.conf 520 "CONFIG+=nostrip" \
597 find "${S}" -name '*.pr[io]' 521 || die "qmake failed"
598 } | xargs sed -i \
599 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
600 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
601 || die
602 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
603 popd >/dev/null || die 522 popd >/dev/null || die
604 done 523 done
605} 524}
606
607 525
608# @FUNCTION: build_directories 526# @FUNCTION: build_directories
609# @USAGE: < directories > 527# @USAGE: < directories >
610# @INTERNAL 528# @INTERNAL
611# @DESCRIPTION: 529# @DESCRIPTION:
612# Compiles the code in the given list of directories. 530# Compiles the code in the given list of directories.
613build_directories() { 531build_directories() {
614 for x in "$@"; do 532 for x in "$@"; do
615 pushd "${S}"/${x} >/dev/null || die 533 pushd "${S}"/${x} >/dev/null || die
534 emake \
535 AR="$(tc-getAR) cqs" \
616 emake CC="$(tc-getCC)" \ 536 CC="$(tc-getCC)" \
617 CXX="$(tc-getCXX)" \ 537 CXX="$(tc-getCXX)" \
618 LINK="$(tc-getCXX)" || die "emake failed" 538 LINK="$(tc-getCXX)" \
539 RANLIB=":" \
540 STRIP=":"
619 popd >/dev/null || die 541 popd >/dev/null || die
620 done 542 done
621} 543}
622 544
623# @FUNCTION: install_directories 545# @FUNCTION: install_directories
626# @DESCRIPTION: 548# @DESCRIPTION:
627# Runs emake install in the given directories, which are separated by spaces. 549# Runs emake install in the given directories, which are separated by spaces.
628install_directories() { 550install_directories() {
629 for x in "$@"; do 551 for x in "$@"; do
630 pushd "${S}"/${x} >/dev/null || die 552 pushd "${S}"/${x} >/dev/null || die
631 emake INSTALL_ROOT="${D}" install || die "emake install failed" 553 emake INSTALL_ROOT="${D}" install
632 popd >/dev/null || die 554 popd >/dev/null || die
633 done 555 done
634} 556}
635 557
636# @ECLASS-VARIABLE: QCONFIG_ADD 558# @ECLASS-VARIABLE: QCONFIG_ADD
657 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 579 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
658 for x in QCONFIG_ADD QCONFIG_REMOVE; do 580 for x in QCONFIG_ADD QCONFIG_REMOVE; do
659 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 581 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
660 done 582 done
661 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo 583 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
662 doins "${T}"/${PN}-qconfig.pri || die "installing ${PN}-qconfig.pri failed" 584 doins "${T}"/${PN}-qconfig.pri
663 fi 585 fi
664 586
665 if [[ -n ${QCONFIG_DEFINE} ]]; then 587 if [[ -n ${QCONFIG_DEFINE} ]]; then
666 for x in ${QCONFIG_DEFINE}; do 588 for x in ${QCONFIG_DEFINE}; do
667 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h 589 echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
668 done 590 done
669 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo 591 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
670 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 592 doins "${T}"/gentoo-${PN}-qconfig.h
671 fi 593 fi
672} 594}
673 595
674# @FUNCTION: generate_qconfigs 596# @FUNCTION: generate_qconfigs
675# @INTERNAL 597# @INTERNAL
676# @DESCRIPTION: 598# @DESCRIPTION:
677# Generates gentoo-specific qconfig.{h,pri}. 599# Generates gentoo-specific qconfig.{h,pri}.
678generate_qconfigs() { 600generate_qconfigs() {
679 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${PN} == qt-core ]]; then 601 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == dev-qt/qtcore ]]; then
680 local x qconfig_add qconfig_remove qconfig_new 602 local x qconfig_add qconfig_remove qconfig_new
681 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 603 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
682 [[ -f ${x} ]] || continue 604 [[ -f ${x} ]] || continue
683 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" 605 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
684 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" 606 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
685 done 607 done
686 608
687 # these error checks do not use die because dying in pkg_post{inst,rm} 609 # these error checks do not use die because dying in pkg_post{inst,rm}
688 # just makes things worse. 610 # just makes things worse.
689 if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then 611 if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
690 # start with the qconfig.pri that qt-core installed 612 # start with the qconfig.pri that qtcore installed
691 if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \ 613 if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
692 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then 614 "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
693 eerror "cp qconfig failed." 615 eerror "cp qconfig failed."
694 return 1 616 return 1
695 fi 617 fi
747} 669}
748 670
749# @FUNCTION: skip_qmake_build 671# @FUNCTION: skip_qmake_build
750# @INTERNAL 672# @INTERNAL
751# @DESCRIPTION: 673# @DESCRIPTION:
752# Patches configure to skip qmake compilation, as it's already installed by qt-core. 674# Patches configure to skip qmake compilation, as it's already installed by qtcore.
753skip_qmake_build() { 675skip_qmake_build() {
754 sed -i -e "s:if true:if false:g" "${S}"/configure || die 676 sed -i -e "s:if true:if false:g" "${S}"/configure || die
755} 677}
756 678
757# @FUNCTION: skip_project_generation 679# @FUNCTION: skip_project_generation
865} 787}
866 788
867# @FUNCTION: qt_nolibx11 789# @FUNCTION: qt_nolibx11
868# @INTERNAL 790# @INTERNAL
869# @DESCRIPTION: 791# @DESCRIPTION:
870# Ignore X11 tests for packages that don't need X libraries installed. 792# Skip X11 tests for packages that don't need X libraries installed.
871qt_nolibx11() { 793qt_nolibx11() {
872 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 794 sed -i -e '/^if.*PLATFORM_X11.*CFG_GUI/,/^fi$/d' "${S}"/configure || die
873 die "x11 check sed failed"
874} 795}
875 796
876EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 797EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.134  
changed lines
  Added in v.1.160

  ViewVC Help
Powered by ViewVC 1.1.20