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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.120 - (hide annotations) (download)
Tue Feb 28 18:53:45 2012 UTC (2 years, 1 month ago) by pesa
Branch: MAIN
Changes since 1.119: +19 -22 lines
Minor cleanup.

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

  ViewVC Help
Powered by ViewVC 1.1.20