/[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.108 Revision 1.141
1# Copyright 1999-2011 Gentoo Foundation 1# Copyright 1999-2012 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.108 2011/12/25 18:49:52 pesa Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.141 2012/12/31 06:29:42 pesa 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
13 3|4|5) : ;;
14 *) die "qt4-build.eclass: unsupported EAPI=${EAPI:-0}" ;;
15esac
16
12inherit base eutils multilib toolchain-funcs flag-o-matic versionator 17inherit eutils flag-o-matic multilib toolchain-funcs versionator
18
19if [[ ${PV} == *9999* ]]; then
20 QT4_BUILD_TYPE="live"
21 inherit git-2
22else
23 QT4_BUILD_TYPE="release"
24fi
25
26HOMEPAGE="http://qt-project.org/ http://qt.digia.com/"
27LICENSE="|| ( LGPL-2.1 GPL-3 )"
13 28
14MY_PV=${PV/_/-} 29MY_PV=${PV/_/-}
15MY_P=qt-everywhere-opensource-src-${MY_PV} 30MY_P=qt-everywhere-opensource-src-${MY_PV}
16 31
17HOMEPAGE="http://qt.nokia.com/ http://qt-project.org/" 32case ${QT4_BUILD_TYPE} in
33 live)
34 EGIT_REPO_URI="git://gitorious.org/qt/qt.git
35 https://git.gitorious.org/qt/qt.git"
36 EGIT_BRANCH=${PV%.9999}
37 ;;
38 release)
18SRC_URI="http://get.qt.nokia.com/qt/source/${MY_P}.tar.gz" 39 SRC_URI="http://releases.qt-project.org/qt4/source/${MY_P}.tar.gz"
19LICENSE="|| ( LGPL-2.1 GPL-3 )" 40 ;;
41esac
20 42
21IUSE="aqua debug pch" 43IUSE="aqua debug pch"
22
23[[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && 44[[ ${CATEGORY}/${PN} != x11-libs/qt-xmlpatterns ]] && IUSE+=" +exceptions"
24[[ ${CATEGORY}/${PN} != x11-themes/qgtkstyle ]] && 45[[ ${CATEGORY}/${PN} != x11-libs/qt-webkit ]] && IUSE+=" c++0x"
25 IUSE+=" +exceptions"
26 46
27if version_is_at_least 4.7.99999999; then 47DEPEND="virtual/pkgconfig"
28 IUSE+=" c++0x qpa" 48if [[ ${QT4_BUILD_TYPE} == live ]]; then
49 DEPEND+=" dev-lang/perl"
29fi 50fi
30 51
31DEPEND="dev-util/pkgconfig"
32RDEPEND=" 52RDEPEND="
33 !<x11-libs/qt-assistant-${PV} 53 !<x11-libs/qt-assistant-${PV}:4
34 !>x11-libs/qt-assistant-${PV}-r9999 54 !>x11-libs/qt-assistant-${PV}-r9999:4
55 !<x11-libs/qt-bearer-${PV}:4
56 !>x11-libs/qt-bearer-${PV}-r9999:4
35 !<x11-libs/qt-core-${PV} 57 !<x11-libs/qt-core-${PV}:4
36 !>x11-libs/qt-core-${PV}-r9999 58 !>x11-libs/qt-core-${PV}-r9999:4
37 !<x11-libs/qt-dbus-${PV} 59 !<x11-libs/qt-dbus-${PV}:4
38 !>x11-libs/qt-dbus-${PV}-r9999 60 !>x11-libs/qt-dbus-${PV}-r9999:4
39 !<x11-libs/qt-declarative-${PV} 61 !<x11-libs/qt-declarative-${PV}:4
40 !>x11-libs/qt-declarative-${PV}-r9999 62 !>x11-libs/qt-declarative-${PV}-r9999:4
41 !<x11-libs/qt-demo-${PV} 63 !<x11-libs/qt-demo-${PV}:4
42 !>x11-libs/qt-demo-${PV}-r9999 64 !>x11-libs/qt-demo-${PV}-r9999:4
43 !<x11-libs/qt-gui-${PV} 65 !<x11-libs/qt-gui-${PV}:4
44 !>x11-libs/qt-gui-${PV}-r9999 66 !>x11-libs/qt-gui-${PV}-r9999:4
45 !<x11-libs/qt-multimedia-${PV} 67 !<x11-libs/qt-multimedia-${PV}:4
46 !>x11-libs/qt-multimedia-${PV}-r9999 68 !>x11-libs/qt-multimedia-${PV}-r9999:4
47 !<x11-libs/qt-opengl-${PV} 69 !<x11-libs/qt-opengl-${PV}:4
48 !>x11-libs/qt-opengl-${PV}-r9999 70 !>x11-libs/qt-opengl-${PV}-r9999:4
71 !<x11-libs/qt-openvg-${PV}:4
72 !>x11-libs/qt-openvg-${PV}-r9999:4
49 !<x11-libs/qt-phonon-${PV} 73 !<x11-libs/qt-phonon-${PV}:4
50 !>x11-libs/qt-phonon-${PV}-r9999 74 !>x11-libs/qt-phonon-${PV}-r9999:4
51 !<x11-libs/qt-qt3support-${PV} 75 !<x11-libs/qt-qt3support-${PV}:4
52 !>x11-libs/qt-qt3support-${PV}-r9999 76 !>x11-libs/qt-qt3support-${PV}-r9999:4
53 !<x11-libs/qt-script-${PV} 77 !<x11-libs/qt-script-${PV}:4
54 !>x11-libs/qt-script-${PV}-r9999 78 !>x11-libs/qt-script-${PV}-r9999:4
55 !<x11-libs/qt-sql-${PV} 79 !<x11-libs/qt-sql-${PV}:4
56 !>x11-libs/qt-sql-${PV}-r9999 80 !>x11-libs/qt-sql-${PV}-r9999:4
57 !<x11-libs/qt-svg-${PV} 81 !<x11-libs/qt-svg-${PV}:4
58 !>x11-libs/qt-svg-${PV}-r9999 82 !>x11-libs/qt-svg-${PV}-r9999:4
59 !<x11-libs/qt-test-${PV} 83 !<x11-libs/qt-test-${PV}:4
60 !>x11-libs/qt-test-${PV}-r9999 84 !>x11-libs/qt-test-${PV}-r9999:4
61 !<x11-libs/qt-webkit-${PV} 85 !<x11-libs/qt-webkit-${PV}:4
62 !>x11-libs/qt-webkit-${PV}-r9999 86 !>x11-libs/qt-webkit-${PV}-r9999:4
63 !<x11-libs/qt-xmlpatterns-${PV} 87 !<x11-libs/qt-xmlpatterns-${PV}:4
64 !>x11-libs/qt-xmlpatterns-${PV}-r9999 88 !>x11-libs/qt-xmlpatterns-${PV}-r9999:4
65" 89"
66 90
67S=${WORKDIR}/${MY_P} 91S=${WORKDIR}/${MY_P}
68 92
69# @FUNCTION: qt4-build_pkg_setup 93# @FUNCTION: qt4-build_pkg_setup
70# @DESCRIPTION: 94# @DESCRIPTION:
71# Sets up S, MY_P, PATH, and LD_LIBRARY_PATH 95# Sets up PATH and LD_LIBRARY_PATH.
72qt4-build_pkg_setup() { 96qt4-build_pkg_setup() {
73 [[ ${EAPI} == 2 ]] && use !prefix && EPREFIX=
74
75 # Protect users by not allowing downgrades between releases 97 # Protect users by not allowing downgrades between releases.
76 # Downgrading revisions within the same release should be allowed 98 # Downgrading revisions within the same release should be allowed.
77 if has_version '>'${CATEGORY}/${P}-r9999; then 99 if has_version ">${CATEGORY}/${P}-r9999:4"; then
78 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then 100 if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then
79 eerror "Sanity check to keep you from breaking your system:" 101 eerror " *** Sanity check to keep you from breaking your system ***"
80 eerror " Downgrading Qt is completely unsupported and will break your system!" 102 eerror "Downgrading Qt is completely unsupported and will break your system!"
81 die "aborting to save your system" 103 die "aborting to save your system"
82 else 104 else
83 ewarn "Downgrading Qt is completely unsupported and will break your system!" 105 ewarn "Downgrading Qt is completely unsupported and will break your system!"
84 fi 106 fi
85 fi
86
87 if [[ ${PN} == "qt-webkit" ]]; then
88 eshopts_push -s extglob
89 if is-flagq '-g?(gdb)?([1-9])'; then
90 echo
91 ewarn "You have enabled debug info (probably have -g or -ggdb in your \$C{,XX}FLAGS)."
92 ewarn "You may experience really long compilation times and/or increased memory usage."
93 ewarn "If compilation fails, please try removing -g{,gdb} before reporting a bug."
94 ewarn "For more info check out bug #307861"
95 echo
96 fi
97 eshopts_pop
98 fi 107 fi
99 108
100 PATH="${S}/bin${PATH:+:}${PATH}" 109 PATH="${S}/bin${PATH:+:}${PATH}"
101 if [[ ${CHOST} != *-darwin* ]]; then 110 if [[ ${CHOST} != *-darwin* ]]; then
102 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}" 111 LD_LIBRARY_PATH="${S}/lib${LD_LIBRARY_PATH:+:}${LD_LIBRARY_PATH}"
107 # avoid extract failure. 116 # avoid extract failure.
108 [[ ${CHOST} == *-apple-darwin* ]] && \ 117 [[ ${CHOST} == *-apple-darwin* ]] && \
109 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm 118 QT4_EXTRACT_DIRECTORIES="src/gui/kernel/qapplication_mac.mm
110 ${QT4_EXTRACT_DIRECTORIES}" 119 ${QT4_EXTRACT_DIRECTORIES}"
111 fi 120 fi
112
113 # Make sure ebuilds use the required EAPI
114 if [[ ${EAPI} != [23] ]]; then
115 eerror "The qt4-build eclass requires EAPI=2 or EAPI=3, but this ebuild is using"
116 eerror "EAPI=${EAPI:-0}. The ebuild author or editor failed. This ebuild needs to be"
117 eerror "fixed. Using qt4-build eclass without EAPI=2 or EAPI=3 will fail."
118 die "qt4-build eclass requires EAPI=2 or EAPI=3"
119 fi
120
121 if ! version_is_at_least 4.1 $(gcc-version); then
122 ewarn "Using a GCC version lower than 4.1 is not supported!"
123 fi
124} 121}
122
123# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
124# @DEFAULT_UNSET
125# @DESCRIPTION:
126# Space-separated list including the directories that will be extracted from
127# Qt tarball.
125 128
126# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES 129# @ECLASS-VARIABLE: QT4_TARGET_DIRECTORIES
130# @DEFAULT_UNSET
127# @DESCRIPTION: 131# @DESCRIPTION:
128# Arguments for build_target_directories. Takes the directories, in which the 132# Arguments for build_target_directories. Takes the directories in which the
129# code should be compiled. This is a space-separated list 133# code should be compiled. This is a space-separated list.
130
131# @ECLASS-VARIABLE: QT4_EXTRACT_DIRECTORIES
132# @DESCRIPTION:
133# Space separated list including the directories that will be extracted from Qt
134# tarball
135 134
136# @FUNCTION: qt4-build_src_unpack 135# @FUNCTION: qt4-build_src_unpack
137# @DESCRIPTION: 136# @DESCRIPTION:
138# Unpacks the sources 137# Unpacks the sources.
139qt4-build_src_unpack() { 138qt4-build_src_unpack() {
140 setqtenv 139 setqtenv
141 local unpack_p="${MY_P}" 140
142 case "${PV}" in 141 if ! version_is_at_least 4.1 $(gcc-version); then
143 4.8.0_*) 142 ewarn "Using a GCC version lower than 4.1 is not supported."
144 unpack_p="qt-everywhere-opensource-src-${PV/_*}" 143 fi
144
145 if [[ ${PN} == qt-webkit ]]; then
146 eshopts_push -s extglob
147 if is-flagq '-g?(gdb)?([1-9])'; then
148 echo
149 ewarn "You have enabled debug info (probably have -g or -ggdb in your CFLAGS/CXXFLAGS)."
150 ewarn "You may experience really long compilation times and/or increased memory usage."
151 ewarn "If compilation fails, please try removing -g/-ggdb before reporting a bug."
152 ewarn "For more info check out https://bugs.gentoo.org/307861"
153 echo
154 fi
155 eshopts_pop
156 fi
157
158 case ${QT4_BUILD_TYPE} in
159 live)
160 git-2_src_unpack
145 ;; 161 ;;
162 release)
163 local tarball="${MY_P}.tar.gz" target= targets=
164 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
165 src/{qbase,qt_targets,qt_install}.pri bin config.tests \
166 mkspecs qmake ${QT4_EXTRACT_DIRECTORIES}
167 do
168 targets+="${MY_P}/${target} "
169 done
170
171 ebegin "Unpacking parts of ${tarball}:" ${targets//${MY_P}\/}
172 tar -xzf "${DISTDIR}/${tarball}" ${targets}
173 eend $? || die "failed to unpack"
174 ;;
146 esac 175 esac
147 local target targets=
148 for target in configure LICENSE.GPL3 LICENSE.LGPL projects.pro \
149 src/{qbase,qt_targets,qt_install}.pri bin config.tests mkspecs qmake \
150 ${QT4_EXTRACT_DIRECTORIES}; do
151 targets+=" ${unpack_p}/${target}"
152 done
153
154 echo tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets}
155 tar xzf "${DISTDIR}"/${MY_P}.tar.gz ${targets} || die
156 case "${PV}" in
157 4.8.0_*)
158 mv ${WORKDIR}/qt-everywhere-opensource-src-${PV/_*} \
159 ${WORKDIR}/qt-everywhere-opensource-src-${MY_PV}
160 ;;
161 esac
162} 176}
163 177
164# @ECLASS-VARIABLE: PATCHES 178# @ECLASS-VARIABLE: PATCHES
179# @DEFAULT_UNSET
165# @DESCRIPTION: 180# @DESCRIPTION:
166# In case you have patches to apply, specify them in PATCHES variable. Make sure 181# PATCHES array variable containing all various patches to be applied.
167# to specify the full path. This variable is necessary for src_prepare phase. 182# This variable is expected to be defined in global scope of ebuild.
168# example: 183# Make sure to specify the full path. This variable is utilised in
169# PATCHES="${FILESDIR}"/mypatch.patch 184# src_prepare() phase.
170# ${FILESDIR}"/mypatch2.patch"
171# 185#
186# @CODE
187# PATCHES=( "${FILESDIR}/mypatch.patch"
188# "${FILESDIR}/patches_folder/" )
189# @CODE
172 190
173# @FUNCTION: qt4-build_src_prepare 191# @FUNCTION: qt4-build_src_prepare
174# @DESCRIPTION: 192# @DESCRIPTION:
175# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix 193# Prepare the sources before the configure phase. Strip CFLAGS if necessary, and fix
176# source files in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified on /etc/make.conf. 194# the build system in order to respect CFLAGS/CXXFLAGS/LDFLAGS specified in /etc/make.conf.
177qt4-build_src_prepare() { 195qt4-build_src_prepare() {
178 setqtenv 196 setqtenv
179 cd "${S}"
180 197
181 if version_is_at_least "4.7"; then 198 if [[ ${QT4_BUILD_TYPE} == live ]]; then
199 QTDIR="." ./bin/syncqt || die "syncqt failed"
200 fi
201
182 # fix libX11 dependency on non X packages 202 # avoid X11 dependency in non-gui packages
183 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns" 203 local nolibx11_pkgs="qt-core qt-dbus qt-script qt-sql qt-test qt-xmlpatterns"
184 has ${PN} ${nolibx11_pkgs} && qt_nolibx11 204 has ${PN} ${nolibx11_pkgs} && qt_nolibx11
185
186 qt_assistant_cleanup
187 fi
188 205
189 if use aqua; then 206 if use aqua; then
190 # provide a proper macx-g++-64 207 # provide a proper macx-g++-64
191 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir) 208 use x64-macos && ln -s macx-g++ mkspecs/$(qt_mkspecs_dir)
192 209
193 sed -e '/^CONFIG/s:app_bundle::' \ 210 sed -e '/^CONFIG/s:app_bundle::' \
194 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \ 211 -e '/^CONFIG/s:plugin_no_soname:plugin_with_soname absolute_library_soname:' \
195 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed failed" 212 -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
196 fi 213 fi
197 214
198 if [[ ${PN} != qt-core ]]; then 215 if [[ ${PN} != qt-core ]]; then
199 skip_qmake_build 216 skip_qmake_build
200 skip_project_generation 217 skip_project_generation
201 symlink_binaries_to_buildtree 218 symlink_binaries_to_buildtree
202 fi 219 fi
203 220
204 if [[ ${CHOST} == *86*-apple-darwin* ]] ; then 221 if [[ ${CHOST} == *86*-apple-darwin* ]]; then
205 # qmake bus errors with -O2 but -O3 works 222 # qmake bus errors with -O2 or -O3 but -O1 works
223 # Bug 373061
206 replace-flags -O2 -O3 224 replace-flags -O[23] -O1
207 fi 225 fi
208 226
209 # Bug 178652 227 # Bug 178652
210 if [[ $(gcc-major-version) == 3 ]] && use amd64; then 228 if [[ $(gcc-major-version) == 3 ]] && use amd64; then
211 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS" 229 ewarn "Appending -fno-gcse to CFLAGS/CXXFLAGS"
212 append-flags -fno-gcse 230 append-flags -fno-gcse
213 fi 231 fi
214 232
215 if use_if_iuse c++0x; then 233 if use_if_iuse c++0x; then
216 ewarn "You are about to build Qt4 using the C++11 standard. Even though"
217 ewarn "this is an official standard, some of the reverse dependencies"
218 ewarn "may fail to compile or link againt the Qt4 libraries. Before"
219 ewarn "reporting a bug, make sure your bug is reproducible with c++0x"
220 ewarn "disabled."
221 append-flags -std=c++0x 234 append-cxxflags -std=c++0x
222 fi 235 fi
223 236
224 # Unsupported old gcc versions - hardened needs this :( 237 # Unsupported old gcc versions - hardened needs this :(
225 if [[ $(gcc-major-version) -lt 4 ]] ; then 238 if [[ $(gcc-major-version) -lt 4 ]]; then
226 ewarn "Appending -fno-stack-protector to CXXFLAGS" 239 ewarn "Appending -fno-stack-protector to CXXFLAGS"
227 append-cxxflags -fno-stack-protector 240 append-cxxflags -fno-stack-protector
228 # Bug 253127 241 # Bug 253127
229 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \ 242 sed -e "/^QMAKE_CFLAGS\t/ s:$: -fno-stack-protector-all:" \
230 -i "${S}"/mkspecs/common/g++.conf || die "sed ${S}/mkspecs/common/g++.conf failed" 243 -i mkspecs/common/g++.conf || die
231 fi 244 fi
232 245
233 # Bug 261632 246 # Bug 261632
234 if use ppc64; then 247 if use ppc64; then
235 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS" 248 ewarn "Appending -mminimal-toc to CFLAGS/CXXFLAGS"
236 append-flags -mminimal-toc 249 append-flags -mminimal-toc
237 fi 250 fi
238 251
239 # Bug 282984 && Bug 295530 252 # Respect CC, CXX, {C,CXX,LD}FLAGS in .qmake.cache
240 sed -e "s:\(^SYSTEM_VARIABLES\):CC=\"$(tc-getCC)\"\nCXX=\"$(tc-getCXX)\"\nCFLAGS=\"${CFLAGS}\"\nCXXFLAGS=\"${CXXFLAGS}\"\nLDFLAGS=\"${LDFLAGS}\"\n\1:" \ 253 sed -e "/^SYSTEM_VARIABLES=/i \
241 -i configure || die "sed qmake compilers failed" 254 CC='$(tc-getCC)'\n\
255 CXX='$(tc-getCXX)'\n\
256 CFLAGS='${CFLAGS}'\n\
257 CXXFLAGS='${CXXFLAGS}'\n\
258 LDFLAGS='${LDFLAGS}'\n\
259 QMakeVar set QMAKE_CFLAGS_RELEASE\n\
260 QMakeVar set QMAKE_CFLAGS_DEBUG\n\
261 QMakeVar set QMAKE_CXXFLAGS_RELEASE\n\
262 QMakeVar set QMAKE_CXXFLAGS_DEBUG\n\
263 QMakeVar set QMAKE_LFLAGS_RELEASE\n\
264 QMakeVar set QMAKE_LFLAGS_DEBUG\n"\
265 -i configure \
266 || die "sed SYSTEM_VARIABLES failed"
242 267
243 # Bug 321335 268 # Respect CC, CXX, LINK and *FLAGS in config.tests
244 if version_is_at_least 4.6; then 269 find config.tests/unix -name '*.test' -type f -print0 | xargs -0 \
245 find ./config.tests/unix -name "*.test" -type f -exec grep -lZ \$MAKE '{}' \; | \ 270 sed -i -e "/bin\/qmake/ s: \"\$SRCDIR/: \
246 xargs -0 \ 271 'QMAKE_CC=$(tc-getCC)' 'QMAKE_CXX=$(tc-getCXX)' 'QMAKE_LINK=$(tc-getCXX)' \
247 sed -e "s:\(\$MAKE\):\1 CC=\"$(tc-getCC)\" CXX=\"$(tc-getCXX)\" LD=\"$(tc-getCXX)\" LINK=\"$(tc-getCXX)\":g" \ 272 'QMAKE_CFLAGS+=${CFLAGS}' 'QMAKE_CXXFLAGS+=${CXXFLAGS}' 'QMAKE_LFLAGS+=${LDFLAGS}'&:" \
248 -i || die "sed test compilers failed" 273 || die "sed config.tests failed"
249 fi
250 274
251 # Bug 172219 275 # Bug 172219
252 sed -e "s:X11R6/::" \ 276 sed -e 's:/X11R6/:/:' -i mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
253 -i "${S}"/mkspecs/$(qt_mkspecs_dir)/qmake.conf || die "sed ${S}/mkspecs/$(qt_mkspecs_dir)/qmake.conf failed"
254 277
255 if [[ ${CHOST} == *-darwin* ]]; then 278 if [[ ${CHOST} == *-darwin* ]]; then
256 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib 279 # Set FLAGS *and* remove -arch, since our gcc-apple is multilib
257 # crippled (by design) :/ 280 # crippled (by design) :/
281 local mac_gpp_conf=
282 if [[ -f mkspecs/common/mac-g++.conf ]]; then
283 # qt < 4.8 has mac-g++.conf
284 mac_gpp_conf="mkspecs/common/mac-g++.conf"
285 elif [[ -f mkspecs/common/g++-macx.conf ]]; then
286 # qt >= 4.8 has g++-macx.conf
287 mac_gpp_conf="mkspecs/common/g++-macx.conf"
288 else
289 die "no known conf file for mac found"
290 fi
291 sed \
258 sed -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \ 292 -e "s:QMAKE_CFLAGS_RELEASE.*=.*:QMAKE_CFLAGS_RELEASE=${CFLAGS}:" \
259 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \ 293 -e "s:QMAKE_CXXFLAGS_RELEASE.*=.*:QMAKE_CXXFLAGS_RELEASE=${CXXFLAGS}:" \
260 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \ 294 -e "s:QMAKE_LFLAGS_RELEASE.*=.*:QMAKE_LFLAGS_RELEASE=-headerpad_max_install_names ${LDFLAGS}:" \
261 -e "s:-arch\s\w*::g" \ 295 -e "s:-arch\s\w*::g" \
262 -i mkspecs/common/mac-g++.conf || die "sed mkspecs/common/mac-g++.conf failed" 296 -i ${mac_gpp_conf} \
297 || die "sed ${mac_gpp_conf} failed"
263 298
264 # Fix configure's -arch settings that appear in qmake/Makefile and also 299 # Fix configure's -arch settings that appear in qmake/Makefile and also
265 # fix arch handling (automagically duplicates our -arch arg and breaks 300 # fix arch handling (automagically duplicates our -arch arg and breaks
266 # pch). Additionally disable Xarch support. 301 # pch). Additionally disable Xarch support.
302 local mac_gcc_confs="${mac_gpp_conf}"
303 if [[ -f mkspecs/common/gcc-base-macx.conf ]]; then
304 mac_gcc_confs+=" mkspecs/common/gcc-base-macx.conf"
305 fi
267 sed \ 306 sed \
268 -e "s:-arch i386::" \ 307 -e "s:-arch i386::" \
269 -e "s:-arch ppc::" \ 308 -e "s:-arch ppc::" \
270 -e "s:-arch x86_64::" \ 309 -e "s:-arch x86_64::" \
271 -e "s:-arch ppc64::" \ 310 -e "s:-arch ppc64::" \
272 -e "s:-arch \$i::" \ 311 -e "s:-arch \$i::" \
273 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \ 312 -e "/if \[ ! -z \"\$NATIVE_64_ARCH\" \]; then/,/fi/ d" \
274 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \ 313 -e "s:CFG_MAC_XARCH=yes:CFG_MAC_XARCH=no:g" \
275 -e "s:-Xarch_x86_64::g" \ 314 -e "s:-Xarch_x86_64::g" \
276 -e "s:-Xarch_ppc64::g" \ 315 -e "s:-Xarch_ppc64::g" \
277 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 316 -i configure ${mac_gcc_confs} \
317 || die "sed -arch/-Xarch failed"
278 318
279 # On Snow Leopard don't fall back to 10.5 deployment target. 319 # On Snow Leopard don't fall back to 10.5 deployment target.
280 if [[ ${CHOST} == *-apple-darwin10 ]] ; then 320 if [[ ${CHOST} == *-apple-darwin10 ]]; then
281 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \ 321 sed -e "s:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET.*:QMakeVar set QMAKE_MACOSX_DEPLOYMENT_TARGET 10.6:g" \
282 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \ 322 -e "s:-mmacosx-version-min=10.[0-9]:-mmacosx-version-min=10.6:g" \
283 -i configure mkspecs/common/mac-g++.conf || die "sed configure failed" 323 -i configure ${mac_gpp_conf} \
324 || die "sed deployment target failed"
284 fi 325 fi
285 fi 326 fi
286 327
287 # this one is needed for all systems with a separate -liconv, apart from 328 # this one is needed for all systems with a separate -liconv, apart from
288 # Darwin, for which the sources already cater for -liconv 329 # Darwin, for which the sources already cater for -liconv
289 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] ; then 330 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
290 sed \ 331 sed -e 's|mac:\(LIBS += -liconv\)|\1|g' \
291 -e "s|mac:LIBS += -liconv|LIBS += -liconv|g" \
292 -i config.tests/unix/iconv/iconv.pro \ 332 -i config.tests/unix/iconv/iconv.pro \
293 || die "sed on iconv.pro failed" 333 || die "sed iconv.pro failed"
294 fi 334 fi
295 335
296 # we need some patches for Solaris 336 # we need some patches for Solaris
297 sed -i \
298 -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \ 337 sed -i -e '/^QMAKE_LFLAGS_THREAD/a\QMAKE_LFLAGS_DYNAMIC_LIST = -Wl,--dynamic-list,' \
299 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 338 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
300 # use GCC over SunStudio 339 # use GCC over SunStudio
301 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die 340 sed -i -e '/PLATFORM=solaris-cc/s/cc/g++/' configure || die
302 # don't flirt with non-Prefix stuff, we're quite possessive 341 # do not flirt with non-Prefix stuff, we're quite possessive
303 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \ 342 sed -i -e '/^QMAKE_\(LIB\|INC\)DIR\(_X11\|_OPENGL\|\)\t/s/=.*$/=/' \
304 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die 343 mkspecs/$(qt_mkspecs_dir)/qmake.conf || die
305 # strip predefined CFLAGS from qmake ( bug #312689 )
306 sed -i '/^QMAKE_CFLAGS_RELEASE/s:+=.*:+=:' mkspecs/common/g++.conf
307 344
308 base_src_prepare 345 # apply patches
346 [[ -n ${PATCHES[@]} ]] && epatch "${PATCHES[@]}"
347 epatch_user
309} 348}
310 349
311# @FUNCTION: qt4-build_src_configure 350# @FUNCTION: qt4-build_src_configure
312# @DESCRIPTION: 351# @DESCRIPTION:
313# Default configure phase 352# Default configure phase
314qt4-build_src_configure() { 353qt4-build_src_configure() {
315 setqtenv 354 setqtenv
316 myconf="$(standard_configure_options) ${myconf}"
317 355
318 # this one is needed for all systems with a separate -liconv, apart from 356 local conf="
319 # Darwin, for which the sources already cater for -liconv 357 -prefix ${QTPREFIXDIR}
320 use !elibc_glibc && [[ ${CHOST} != *-darwin* ]] && \ 358 -bindir ${QTBINDIR}
321 myconf+=" -liconv" 359 -libdir ${QTLIBDIR}
360 -docdir ${QTDOCDIR}
361 -headerdir ${QTHEADERDIR}
362 -plugindir ${QTPLUGINDIR}
363 -importdir ${QTIMPORTDIR}
364 -datadir ${QTDATADIR}
365 -translationdir ${QTTRANSDIR}
366 -sysconfdir ${QTSYSCONFDIR}
367 -examplesdir ${QTEXAMPLESDIR}
368 -demosdir ${QTDEMOSDIR}
369 -opensource -confirm-license
370 -shared -fast -largefile -stl -verbose
371 -nomake examples -nomake demos"
322 372
323 if use_if_iuse glib; then 373 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported
324 # use -I, -L and -l from configure 374 # $(tc-arch). Therefore we convert it to supported values.
325 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)" 375 case "$(tc-arch)" in
326 # avoid the -pthread argument 376 amd64|x64-*) conf+=" -arch x86_64" ;;
327 myconf+=" ${glibflags//-pthread}" 377 ppc-macos) conf+=" -arch ppc" ;;
328 unset glibflags 378 ppc|ppc64|ppc-*) conf+=" -arch powerpc" ;;
329 fi 379 sparc|sparc-*|sparc64-*) conf+=" -arch sparc" ;;
380 x86-macos) conf+=" -arch x86" ;;
381 x86|x86-*) conf+=" -arch i386" ;;
382 alpha|arm|ia64|mips|s390) conf+=" -arch $(tc-arch)" ;;
383 hppa|sh) conf+=" -arch generic" ;;
384 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
385 esac
330 386
331 if use_if_iuse qpa; then 387 conf+=" -platform $(qt_mkspecs_dir)"
332 ewarn
333 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
334 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
335 ewarn "disable it before reporting any bugs related to this useflag."
336 ewarn
337 myconf+=" -qpa"
338 fi
339 388
340 if use aqua ; then
341 # On (snow) leopard use the new (frameworked) cocoa code.
342 if [[ ${CHOST##*-darwin} -ge 9 ]] ; then
343 myconf+=" -cocoa -framework"
344
345 # We are crazy and build cocoa + qt3support :-)
346 if use qt3support; then
347 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
348 -i configure
349 fi
350
351 # We need the source's headers, not the installed ones.
352 myconf+=" -I${S}/include"
353
354 # Add hint for the framework location.
355 myconf+=" -F${QTLIBDIR}"
356 fi
357 else
358 # freetype2 include dir is non-standard, thus include it on configure
359 # use -I from configure
360 myconf+=" $(pkg-config --cflags freetype2)"
361 fi
362
363 echo ./configure ${myconf}
364 ./configure ${myconf} || die "./configure failed"
365 myconf=""
366
367 prepare_directories ${QT4_TARGET_DIRECTORIES}
368}
369
370# @FUNCTION: qt4-build_src_compile
371# @DESCRIPTION:
372# Actual compile phase
373qt4-build_src_compile() {
374 setqtenv
375
376 build_directories ${QT4_TARGET_DIRECTORIES}
377}
378
379# @FUNCTION: qt4-build_src_test
380# @DESCRIPTION:
381# Runs tests only in target directories.
382qt4-build_src_test() {
383 for dir in ${QT4_TARGET_DIRECTORIES}; do
384 emake -j1 check -C ${dir}
385 done
386}
387
388# @FUNCTION: fix_includes
389# @DESCRIPTION:
390# For MacOSX we need to add some symlinks when frameworks are
391# being used, to avoid complications with some more or less stupid packages.
392fix_includes() {
393 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]] ; then
394 # Some packages tend to include <Qt/...>
395 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
396
397 # Fake normal headers when frameworks are installed... eases life later on
398 local dest f
399 for frw in "${D}${QTLIBDIR}"/*.framework; do
400 [[ -e "${frw}"/Headers ]] || continue
401 f=$(basename ${frw})
402 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
403 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers "${dest}"
404
405 # Link normal headers as well.
406 for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
407 h=$(basename ${hdr})
408 dosym "${QTLIBDIR#${EPREFIX}}"/${f}/Headers/${h} "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
409 done
410 done
411 fi
412}
413
414# @FUNCTION: qt4-build_src_install
415# @DESCRIPTION:
416# Perform the actual installation including some library fixes.
417qt4-build_src_install() {
418 [[ ${EAPI} == 2 ]] && use !prefix && ED=${D}
419 setqtenv
420
421 install_directories ${QT4_TARGET_DIRECTORIES}
422 install_qconfigs
423 fix_library_files
424 fix_includes
425
426 # remove .la files since we are building only shared Qt libraries
427 find "${D}"${QTLIBDIR} -name "*.la" -print0 | xargs -0 rm
428}
429
430# @FUNCTION: setqtenv
431setqtenv() {
432 # Set up installation directories
433 QTBASEDIR=${EPREFIX}/usr/$(get_libdir)/qt4
434 QTPREFIXDIR=${EPREFIX}/usr
435 QTBINDIR=${EPREFIX}/usr/bin
436 QTLIBDIR=${EPREFIX}/usr/$(get_libdir)/qt4
437 QMAKE_LIBDIR_QT=${QTLIBDIR}
438 QTPCDIR=${EPREFIX}/usr/$(get_libdir)/pkgconfig
439 QTDATADIR=${EPREFIX}/usr/share/qt4
440 QTDOCDIR=${EPREFIX}/usr/share/doc/qt-${PV}
441 QTHEADERDIR=${EPREFIX}/usr/include/qt4
442 QTPLUGINDIR=${QTLIBDIR}/plugins
443 QTIMPORTDIR=${QTLIBDIR}/imports
444 QTSYSCONFDIR=${EPREFIX}/etc/qt4
445 QTTRANSDIR=${QTDATADIR}/translations
446 QTEXAMPLESDIR=${QTDATADIR}/examples
447 QTDEMOSDIR=${QTDATADIR}/demos
448 QT_INSTALL_PREFIX=${EPREFIX}/usr/$(get_libdir)/qt4
449 PLATFORM=$(qt_mkspecs_dir)
450
451 unset QMAKESPEC
452}
453
454# @FUNCTION: standard_configure_options
455# @DESCRIPTION:
456# Sets up some standard configure options, like libdir (if necessary), whether
457# debug info is wanted or not.
458standard_configure_options() {
459 local myconf="-prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR}
460 -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR}
461 -importdir ${QTIMPORTDIR} -datadir ${QTDATADIR} -translationdir ${QTTRANSDIR}
462 -sysconfdir ${QTSYSCONFDIR} -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}
463 -opensource -confirm-license -shared -fast -largefile -stl -verbose
464 -platform $(qt_mkspecs_dir) -nomake examples -nomake demos"
465
466 [[ $(get_libdir) != lib ]] && myconf+=" -L${EPREFIX}/usr/$(get_libdir)" 389 [[ $(get_libdir) != lib ]] && conf+=" -L${EPREFIX}/usr/$(get_libdir)"
467 390
468 # debug/release 391 # debug/release
469 if use debug; then 392 if use debug; then
470 myconf+=" -debug" 393 conf+=" -debug"
471 else 394 else
472 myconf+=" -release" 395 conf+=" -release"
473 fi 396 fi
474 myconf+=" -no-separate-debug-info" 397 conf+=" -no-separate-debug-info"
475 398
476 # exceptions USE flag 399 # exceptions USE flag
477 local exceptions="-exceptions" 400 conf+=" $(in_iuse exceptions && qt_use exceptions || echo -exceptions)"
478 in_iuse exceptions && exceptions="$(qt_use exceptions)"
479 myconf+=" ${exceptions}"
480 401
481 # disable RPATH on Qt >= 4.8 (bug 380415) 402 # disable rpath (bug 380415), except on prefix (bug 417169)
482 version_is_at_least 4.8 && myconf+=" -no-rpath" 403 use prefix || conf+=" -no-rpath"
483 404
484 # precompiled headers don't work on hardened, where the flag is masked 405 # precompiled headers don't work on hardened, where the flag is masked
485 myconf+=" $(qt_use pch)" 406 conf+=" $(qt_use pch)"
486 407
487 # -reduce-relocations 408 # -reduce-relocations
488 # This flag seems to introduce major breakage to applications, 409 # This flag seems to introduce major breakage to applications,
489 # mostly to be seen as a core dump with the message "QPixmap: Must 410 # mostly to be seen as a core dump with the message "QPixmap: Must
490 # construct a QApplication before a QPaintDevice" on Solaris. 411 # construct a QApplication before a QPaintDevice" on Solaris.
491 # -- Daniel Vergien 412 # -- Daniel Vergien
492 [[ ${CHOST} != *-solaris* ]] && myconf+=" -reduce-relocations" 413 [[ ${CHOST} != *-solaris* ]] && conf+=" -reduce-relocations"
493 414
494 use aqua && myconf+=" -no-framework" 415 # this one is needed for all systems with a separate -liconv, apart from
416 # Darwin, for which the sources already cater for -liconv
417 if use !elibc_glibc && [[ ${CHOST} != *-darwin* ]]; then
418 conf+=" -liconv"
419 fi
495 420
496 # ARCH is set on Gentoo. Qt now falls back to generic on an unsupported 421 if use_if_iuse glib; then
497 # $(tc-arch). Therefore we convert it to supported values. 422 local glibflags="$(pkg-config --cflags --libs glib-2.0 gthread-2.0)"
498 case "$(tc-arch)" in 423 # avoid the -pthread argument
499 amd64|x64-*) myconf+=" -arch x86_64" ;; 424 conf+=" ${glibflags//-pthread}"
500 ppc-macos) myconf+=" -arch ppc" ;; 425 unset glibflags
501 ppc|ppc64|ppc-*) myconf+=" -arch powerpc" ;; 426 fi
502 sparc|sparc-*|sparc64-*) myconf+=" -arch sparc" ;;
503 x86-macos) myconf+=" -arch x86" ;;
504 x86|x86-*) myconf+=" -arch i386" ;;
505 alpha|arm|ia64|mips|s390) myconf+=" -arch $(tc-arch)" ;;
506 hppa|sh) myconf+=" -arch generic" ;;
507 *) die "$(tc-arch) is unsupported by this eclass. Please file a bug." ;;
508 esac
509 427
428 if use_if_iuse qpa; then
429 echo
430 ewarn "The qpa useflag enables the Qt Platform Abstraction, formely"
431 ewarn "known as Qt Lighthouse. If you are not sure what that is, then"
432 ewarn "disable it before reporting any bugs related to this useflag."
433 echo
434 conf+=" -qpa"
435 fi
436
437 if use aqua; then
438 # On (snow) leopard use the new (frameworked) cocoa code.
439 if [[ ${CHOST##*-darwin} -ge 9 ]]; then
440 conf+=" -cocoa -framework"
441 # We need the source's headers, not the installed ones.
442 conf+=" -I${S}/include"
443 # Add hint for the framework location.
444 conf+=" -F${QTLIBDIR}"
445
446 # We are crazy and build cocoa + qt3support :-)
447 if use qt3support; then
448 sed -e "/case \"\$PLATFORM,\$CFG_MAC_COCOA\" in/,/;;/ s|CFG_QT3SUPPORT=\"no\"|CFG_QT3SUPPORT=\"yes\"|" \
449 -i configure || die
450 fi
451 else
452 conf+=" -no-framework"
453 fi
454 else
455 # freetype2 include dir is non-standard, thus pass it to configure
456 conf+=" $(pkg-config --cflags-only-I freetype2)"
457 fi
458
510 echo "${myconf}" 459 conf+=" ${myconf}"
460 myconf=
461
462 echo ./configure ${conf}
463 ./configure ${conf} || die "./configure failed"
464
465 prepare_directories ${QT4_TARGET_DIRECTORIES}
466}
467
468# @FUNCTION: qt4-build_src_compile
469# @DESCRIPTION:
470# Actual compile phase
471qt4-build_src_compile() {
472 setqtenv
473
474 build_directories ${QT4_TARGET_DIRECTORIES}
475}
476
477# @FUNCTION: qt4-build_src_test
478# @DESCRIPTION:
479# Runs tests only in target directories.
480qt4-build_src_test() {
481 # QtMultimedia does not have any test suite (bug #332299)
482 [[ ${PN} == qt-multimedia ]] && return
483
484 for dir in ${QT4_TARGET_DIRECTORIES}; do
485 emake -j1 check -C ${dir}
486 done
487}
488
489# @FUNCTION: fix_includes
490# @DESCRIPTION:
491# For MacOS X we need to add some symlinks when frameworks are
492# being used, to avoid complications with some more or less stupid packages.
493fix_includes() {
494 if use aqua && [[ ${CHOST##*-darwin} -ge 9 ]]; then
495 local frw dest f h rdir
496 # Some packages tend to include <Qt/...>
497 dodir "${QTHEADERDIR#${EPREFIX}}"/Qt
498
499 # Fake normal headers when frameworks are installed... eases life later
500 # on, make sure we use relative links though, as some ebuilds assume
501 # these dirs exist in src_install to add additional files
502 f=${QTHEADERDIR}
503 h=${QTLIBDIR}
504 while [[ -n ${f} && ${f%%/*} == ${h%%/*} ]] ; do
505 f=${f#*/}
506 h=${h#*/}
507 done
508 rdir=${h}
509 f="../"
510 while [[ ${h} == */* ]] ; do
511 f="${f}../"
512 h=${h#*/}
513 done
514 rdir="${f}${rdir}"
515
516 for frw in "${D}${QTLIBDIR}"/*.framework; do
517 [[ -e "${frw}"/Headers ]] || continue
518 f=$(basename ${frw})
519 dest="${QTHEADERDIR#${EPREFIX}}"/${f%.framework}
520 dosym "${rdir}"/${f}/Headers "${dest}"
521
522 # Link normal headers as well.
523 for hdr in "${D}/${QTLIBDIR}/${f}"/Headers/*; do
524 h=$(basename ${hdr})
525 dosym "../${rdir}"/${f}/Headers/${h} \
526 "${QTHEADERDIR#${EPREFIX}}"/Qt/${h}
527 done
528 done
529 fi
530}
531
532# @FUNCTION: qt4-build_src_install
533# @DESCRIPTION:
534# Perform the actual installation including some library fixes.
535qt4-build_src_install() {
536 setqtenv
537
538 install_directories ${QT4_TARGET_DIRECTORIES}
539 install_qconfigs
540 fix_library_files
541 fix_includes
542
543 # remove .la files since we are building only shared libraries
544 prune_libtool_files
545}
546
547# @FUNCTION: setqtenv
548# @INTERNAL
549setqtenv() {
550 # Set up installation directories
551 QTPREFIXDIR=${EPREFIX}/usr
552 QTBINDIR=${QTPREFIXDIR}/bin
553 QTLIBDIR=${QTPREFIXDIR}/$(get_libdir)/qt4
554 QTPCDIR=${QTPREFIXDIR}/$(get_libdir)/pkgconfig
555 QTDOCDIR=${QTPREFIXDIR}/share/doc/qt-${PV}
556 QTHEADERDIR=${QTPREFIXDIR}/include/qt4
557 QTPLUGINDIR=${QTLIBDIR}/plugins
558 QTIMPORTDIR=${QTLIBDIR}/imports
559 QTDATADIR=${QTPREFIXDIR}/share/qt4
560 QTTRANSDIR=${QTDATADIR}/translations
561 QTSYSCONFDIR=${EPREFIX}/etc/qt4
562 QTEXAMPLESDIR=${QTDATADIR}/examples
563 QTDEMOSDIR=${QTDATADIR}/demos
564 QMAKE_LIBDIR_QT=${QTLIBDIR}
565
566 PLATFORM=$(qt_mkspecs_dir)
567 unset QMAKESPEC
568
569 export XDG_CONFIG_HOME="${T}"
511} 570}
512 571
513# @FUNCTION: prepare_directories 572# @FUNCTION: prepare_directories
514# @USAGE: < directories > 573# @USAGE: < directories >
574# @INTERNAL
515# @DESCRIPTION: 575# @DESCRIPTION:
516# Generates makefiles for the directories set in $QT4_TARGET_DIRECTORIES 576# Generates Makefiles for the given list of directories.
517prepare_directories() { 577prepare_directories() {
578 # avoid running over the maximum argument number, bug #299810
579 {
580 echo "${S}"/mkspecs/common/*.conf
581 find "${S}" -name '*.pr[io]'
582 } | xargs sed -i \
583 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
584 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
585 || die
586
518 for x in "$@"; do 587 for x in "$@"; do
519 pushd "${S}"/${x} >/dev/null 588 pushd "${S}"/${x} >/dev/null || die
520 einfo "Running qmake in: ${x}" 589 einfo "Running qmake in: ${x}"
521 # avoid running over the maximum argument number, bug #299810 590 "${S}"/bin/qmake \
522 { 591 "LIBS+=-L${QTLIBDIR}" \
523 echo "${S}"/mkspecs/common/*.conf 592 "CONFIG+=nostrip" \
524 find "${S}" -name '*.pr[io]' 593 || die "qmake failed"
525 } | xargs sed -i \
526 -e "s:\$\$\[QT_INSTALL_LIBS\]:${QTLIBDIR}:g" \
527 -e "s:\$\$\[QT_INSTALL_PLUGINS\]:${QTPLUGINDIR}:g" \
528 || die
529 "${S}"/bin/qmake "LIBS+=-L${QTLIBDIR}" "CONFIG+=nostrip" || die "qmake failed"
530 popd >/dev/null 594 popd >/dev/null || die
531 done 595 done
532} 596}
533
534 597
535# @FUNCTION: build_directories 598# @FUNCTION: build_directories
536# @USAGE: < directories > 599# @USAGE: < directories >
600# @INTERNAL
537# @DESCRIPTION: 601# @DESCRIPTION:
538# Compiles the code in $QT4_TARGET_DIRECTORIES 602# Compiles the code in the given list of directories.
539build_directories() { 603build_directories() {
540 for x in "$@"; do 604 for x in "$@"; do
541 pushd "${S}"/${x} >/dev/null 605 pushd "${S}"/${x} >/dev/null || die
606 emake \
607 AR="$(tc-getAR) cqs" \
542 emake CC="$(tc-getCC)" \ 608 CC="$(tc-getCC)" \
543 CXX="$(tc-getCXX)" \ 609 CXX="$(tc-getCXX)" \
544 LINK="$(tc-getCXX)" || die "emake failed" 610 LINK="$(tc-getCXX)" \
611 RANLIB=":" \
612 STRIP=":" \
613 || die "emake failed"
545 popd >/dev/null 614 popd >/dev/null || die
546 done 615 done
547} 616}
548 617
549# @FUNCTION: install_directories 618# @FUNCTION: install_directories
550# @USAGE: < directories > 619# @USAGE: < directories >
620# @INTERNAL
551# @DESCRIPTION: 621# @DESCRIPTION:
552# run emake install in the given directories, which are separated by spaces 622# Runs emake install in the given directories, which are separated by spaces.
553install_directories() { 623install_directories() {
554 for x in "$@"; do 624 for x in "$@"; do
555 pushd "${S}"/${x} >/dev/null || die "Can't pushd ${S}/${x}" 625 pushd "${S}"/${x} >/dev/null || die
556 emake INSTALL_ROOT="${D}" install || die "emake install failed" 626 emake INSTALL_ROOT="${D}" install || die "emake install failed"
557 popd >/dev/null || die "Can't popd from ${S}/${x}" 627 popd >/dev/null || die
558 done 628 done
559} 629}
560 630
561# @ECLASS-VARIABLE: QCONFIG_ADD 631# @ECLASS-VARIABLE: QCONFIG_ADD
562# @DESCRIPTION: 632# @DESCRIPTION:
572# @DESCRIPTION: 642# @DESCRIPTION:
573# List variables that should be defined at the top of QtCore/qconfig.h 643# List variables that should be defined at the top of QtCore/qconfig.h
574: ${QCONFIG_DEFINE:=} 644: ${QCONFIG_DEFINE:=}
575 645
576# @FUNCTION: install_qconfigs 646# @FUNCTION: install_qconfigs
647# @INTERNAL
577# @DESCRIPTION: 648# @DESCRIPTION:
578# Install gentoo-specific mkspecs configurations 649# Install gentoo-specific mkspecs configurations.
579install_qconfigs() { 650install_qconfigs() {
580 local x 651 local x
581 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then 652 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
582 for x in QCONFIG_ADD QCONFIG_REMOVE; do 653 for x in QCONFIG_ADD QCONFIG_REMOVE; do
583 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri 654 [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
594 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed" 665 doins "${T}"/gentoo-${PN}-qconfig.h || die "installing ${PN}-qconfig.h failed"
595 fi 666 fi
596} 667}
597 668
598# @FUNCTION: generate_qconfigs 669# @FUNCTION: generate_qconfigs
670# @INTERNAL
599# @DESCRIPTION: 671# @DESCRIPTION:
600# Generates gentoo-specific configurations 672# Generates gentoo-specific qconfig.{h,pri}.
601generate_qconfigs() { 673generate_qconfigs() {
602 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == x11-libs/qt-core ]]; then 674 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${PN} == qt-core ]]; then
603 local x qconfig_add qconfig_remove qconfig_new 675 local x qconfig_add qconfig_remove qconfig_new
604 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do 676 for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
605 [[ -f ${x} ]] || continue 677 [[ -f ${x} ]] || continue
606 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")" 678 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
607 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")" 679 qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
654 fi 726 fi
655} 727}
656 728
657# @FUNCTION: qt4-build_pkg_postrm 729# @FUNCTION: qt4-build_pkg_postrm
658# @DESCRIPTION: 730# @DESCRIPTION:
659# Generate configurations when the package is completely removed 731# Regenerate configuration when the package is completely removed.
660qt4-build_pkg_postrm() { 732qt4-build_pkg_postrm() {
661 generate_qconfigs 733 generate_qconfigs
662} 734}
663 735
664# @FUNCTION: qt4-build_pkg_postinst 736# @FUNCTION: qt4-build_pkg_postinst
665# @DESCRIPTION: 737# @DESCRIPTION:
666# Generate configuration, plus throws a message about possible 738# Regenerate configuration, plus throw a message about possible
667# breakages and proposed solutions. 739# breakages and proposed solutions.
668qt4-build_pkg_postinst() { 740qt4-build_pkg_postinst() {
669 generate_qconfigs 741 generate_qconfigs
670} 742}
671 743
672# @FUNCTION: skip_qmake_build 744# @FUNCTION: skip_qmake_build
745# @INTERNAL
673# @DESCRIPTION: 746# @DESCRIPTION:
674# Don't need to build qmake, as it's already installed from qt-core 747# Patches configure to skip qmake compilation, as it's already installed by qt-core.
675skip_qmake_build() { 748skip_qmake_build() {
676 # Don't need to build qmake, as it's already installed from qt-core
677 sed -i -e "s:if true:if false:g" "${S}"/configure || die "sed failed" 749 sed -i -e "s:if true:if false:g" "${S}"/configure || die
678} 750}
679 751
680# @FUNCTION: skip_project_generation 752# @FUNCTION: skip_project_generation
753# @INTERNAL
681# @DESCRIPTION: 754# @DESCRIPTION:
682# Exit the script early by throwing in an exit before all of the .pro files are scanned 755# Exit the script early by throwing in an exit before all of the .pro files are scanned.
683skip_project_generation() { 756skip_project_generation() {
684 # Exit the script early by throwing in an exit before all of the .pro files are scanned
685 sed -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" \ 757 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
686 -i "${S}"/configure || die "sed failed"
687} 758}
688 759
689# @FUNCTION: symlink_binaries_to_buildtree 760# @FUNCTION: symlink_binaries_to_buildtree
761# @INTERNAL
690# @DESCRIPTION: 762# @DESCRIPTION:
691# Symlink generated binaries to buildtree so they can be used during compilation 763# Symlinks generated binaries to buildtree, so they can be used during compilation time.
692# time
693symlink_binaries_to_buildtree() { 764symlink_binaries_to_buildtree() {
694 for bin in qmake moc uic rcc; do 765 for bin in qmake moc uic rcc; do
695 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed" 766 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
696 done 767 done
697} 768}
698 769
699# @FUNCTION: fix_library_files 770# @FUNCTION: fix_library_files
771# @INTERNAL
700# @DESCRIPTION: 772# @DESCRIPTION:
701# Fixes the pathes in *.la, *.prl, *.pc, as they are wrong due to sandbox and 773# Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
702# moves the *.pc-files into the pkgconfig directory 774# moves the *.pc files into the pkgconfig directory.
703fix_library_files() { 775fix_library_files() {
776 local libfile
704 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do 777 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
705 if [[ -e ${libfile} ]]; then 778 if [[ -e ${libfile} ]]; then
706 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed" 779 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
707 fi 780 fi
708 done 781 done
709 782
710 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: 783 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
711 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do 784 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
712 if [[ -e ${libfile} ]]; then 785 if [[ -e ${libfile} ]]; then
713 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed failed" 786 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
714 787
715 # Move .pc files into the pkgconfig directory 788 # Move .pc files into the pkgconfig directory
716 dodir ${QTPCDIR#${EPREFIX}} 789 dodir ${QTPCDIR#${EPREFIX}}
717 mv ${libfile} "${D}"/${QTPCDIR}/ \ 790 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
718 || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
719 fi 791 fi
720 done 792 done
721 793
722 # Don't install an empty directory 794 # Don't install an empty directory
723 rmdir "${D}"/${QTLIBDIR}/pkgconfig 795 rmdir "${D}"/${QTLIBDIR}/pkgconfig
724} 796}
725 797
726# @FUNCTION: qt_use 798# @FUNCTION: qt_use
727# @USAGE: < flag > [ feature ] [ enableval ] 799# @USAGE: < flag > [ feature ] [ enableval ]
728# @DESCRIPTION: 800# @DESCRIPTION:
729# This will echo "${enableval}-${feature}" if <flag> is enabled, or 801# This will echo "-${enableval}-${feature}" if <flag> is enabled, or
730# "-no-${feature} if the flag is disabled. If [feature] is not specified <flag> 802# "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
731# will be used for that. If [enableval] is not specified, it omits the 803# will be used for that. If [enableval] is not specified, it omits the
732# assignment-part 804# "-${enableval}" part.
733qt_use() { 805qt_use() {
734 local flag=$1 806 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
735 local feature=$1
736 local enableval=
737
738 [[ -n $2 ]] && feature=$2
739 [[ -n $3 ]] && enableval=-$3
740
741 if use ${flag}; then
742 echo "${enableval}-${feature}"
743 else
744 echo "-no-${feature}"
745 fi
746} 807}
747 808
748# @FUNCTION: qt_mkspecs_dir 809# @FUNCTION: qt_mkspecs_dir
749# @RETURN: the specs-directory w/o path 810# @RETURN: the specs-directory w/o path
750# @DESCRIPTION: 811# @DESCRIPTION:
751# Allows us to define which mkspecs dir we want to use. 812# Allows us to define which mkspecs dir we want to use.
752qt_mkspecs_dir() { 813qt_mkspecs_dir() {
753 # Allows us to define which mkspecs dir we want to use.
754 local spec 814 local spec=
755 815
756 case ${CHOST} in 816 case "${CHOST}" in
757 *-freebsd*|*-dragonfly*) 817 *-freebsd*|*-dragonfly*)
758 spec=freebsd ;; 818 spec=freebsd ;;
759 *-openbsd*) 819 *-openbsd*)
760 spec=openbsd ;; 820 spec=openbsd ;;
761 *-netbsd*) 821 *-netbsd*)
772 *-solaris*) 832 *-solaris*)
773 spec=solaris ;; 833 spec=solaris ;;
774 *-linux-*|*-linux) 834 *-linux-*|*-linux)
775 spec=linux ;; 835 spec=linux ;;
776 *) 836 *)
777 die "Unknown CHOST, no platform chosen" 837 die "${FUNCNAME}(): Unknown CHOST '${CHOST}'" ;;
778 esac 838 esac
779 839
780 CXX=$(tc-getCXX) 840 case "$(tc-getCXX)" in
781 if [[ ${CXX} == *g++* ]]; then 841 *g++*)
782 spec+=-g++ 842 spec+=-g++ ;;
783 elif [[ ${CXX} == *icpc* ]]; then 843 *icpc*)
784 spec+=-icc 844 spec+=-icc ;;
785 else 845 *)
786 die "Unknown compiler '${CXX}'" 846 die "${FUNCNAME}(): Unknown compiler '$(tc-getCXX)'" ;;
787 fi 847 esac
788 if [[ -n ${LIBDIR/lib} ]]; then
789 spec+=-${LIBDIR/lib}
790 fi
791 848
792 # Add -64 for 64bit profiles 849 # Add -64 for 64bit profiles
793 if use x64-freebsd || 850 if use x64-freebsd ||
794 use amd64-linux || 851 use amd64-linux ||
795 use x64-macos || 852 use x64-macos ||
800 fi 857 fi
801 858
802 echo "${spec}" 859 echo "${spec}"
803} 860}
804 861
805# @FUNCTION: qt_assistant_cleanup
806# @RETURN: nothing
807# @DESCRIPTION:
808# Tries to clean up tools.pro for qt-assistant ebuilds.
809# Meant to be called in src_prepare().
810# Since Qt 4.7.4 this function is a no-op.
811qt_assistant_cleanup() {
812 # apply patching to qt-assistant ebuilds only
813 [[ ${PN} != "qt-assistant" ]] && return
814
815 # no longer needed for 4.7.4 and later
816 version_is_at_least "4.7.4" && return
817
818 # different versions (and branches...) may need different handling,
819 # add a case if you need special handling
820 case "${MY_PV_EXTRA}" in
821 *kde-qt*)
822 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
823 -e "/mac/,/^embedded.*makeqpf$/d" \
824 -i tools/tools.pro || die "patching tools.pro failed"
825 ;;
826 *)
827 sed -e "/^[ \t]*porting/,/^[ \t]*win32.*activeqt$/d" \
828 -e "/mac/,/^embedded.*makeqpf$/d" \
829 -e "s/^\([ \t]*pixeltool\) /\1 qdoc3 /" \
830 -i tools/tools.pro || die "patching tools.pro failed"
831 ;;
832 esac
833}
834
835# @FUNCTION: qt_nolibx11 862# @FUNCTION: qt_nolibx11
836# @RETURN: nothing 863# @INTERNAL
837# @DESCRIPTION: 864# @DESCRIPTION:
838# Ignore X11 tests for packages that don't need X libraries installed 865# Ignore X11 tests for packages that don't need X libraries installed.
839qt_nolibx11() { 866qt_nolibx11() {
840 einfo "Removing X11 check to allow X-less compilation"
841 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure || 867 sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
842 die "x11 check sed failed" 868 die "x11 check sed failed"
843} 869}
844 870
845EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst 871EXPORT_FUNCTIONS pkg_setup src_unpack src_prepare src_configure src_compile src_install src_test pkg_postrm pkg_postinst

Legend:
Removed from v.1.108  
changed lines
  Added in v.1.141

  ViewVC Help
Powered by ViewVC 1.1.20