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

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.159

  ViewVC Help
Powered by ViewVC 1.1.20