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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.146 - (hide annotations) (download)
Sun Apr 28 16:15:33 2013 UTC (15 months, 3 weeks ago) by zmedico
Branch: MAIN
Changes since 1.145: +2 -2 lines
Bug #467646 - Refer to /etc/portage/make.conf, not /etc/make.conf.

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