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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.147 - (hide annotations) (download)
Sat Jul 6 07:57:14 2013 UTC (16 months, 3 weeks ago) by pesa
Branch: MAIN
Changes since 1.146: +7 -8 lines
Update SRC_URI. Drop support for EAPI 3.

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 pesa 1.147 # $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.146 2013/04/28 16:15:33 zmedico 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.147 4|5) : ;;
14 pesa 1.139 *) 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.147 SRC_URI="http://download.qt-project.org/official_releases/qt/${PV%.*}/${PV}/${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 pesa 1.147 STRIP=":"
556 pesa 1.109 popd >/dev/null || die
557 caleb 1.1 done
558     }
559    
560 hwoarang 1.34 # @FUNCTION: install_directories
561     # @USAGE: < directories >
562 pesa 1.110 # @INTERNAL
563 hwoarang 1.34 # @DESCRIPTION:
564 pesa 1.109 # Runs emake install in the given directories, which are separated by spaces.
565 caleb 1.1 install_directories() {
566 abcd 1.55 for x in "$@"; do
567 pesa 1.109 pushd "${S}"/${x} >/dev/null || die
568 pesa 1.147 emake INSTALL_ROOT="${D}" install
569 pesa 1.109 popd >/dev/null || die
570 caleb 1.1 done
571     }
572    
573 ingmar 1.7 # @ECLASS-VARIABLE: QCONFIG_ADD
574     # @DESCRIPTION:
575     # List options that need to be added to QT_CONFIG in qconfig.pri
576 abcd 1.55 : ${QCONFIG_ADD:=}
577 ingmar 1.7
578     # @ECLASS-VARIABLE: QCONFIG_REMOVE
579     # @DESCRIPTION:
580     # List options that need to be removed from QT_CONFIG in qconfig.pri
581 abcd 1.55 : ${QCONFIG_REMOVE:=}
582 ingmar 1.7
583     # @ECLASS-VARIABLE: QCONFIG_DEFINE
584     # @DESCRIPTION:
585     # List variables that should be defined at the top of QtCore/qconfig.h
586 abcd 1.55 : ${QCONFIG_DEFINE:=}
587 ingmar 1.7
588 hwoarang 1.34 # @FUNCTION: install_qconfigs
589 pesa 1.110 # @INTERNAL
590 vapier 1.93 # @DESCRIPTION:
591 pesa 1.109 # Install gentoo-specific mkspecs configurations.
592 ingmar 1.7 install_qconfigs() {
593 zlin 1.9 local x
594     if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} ]]; then
595 ingmar 1.7 for x in QCONFIG_ADD QCONFIG_REMOVE; do
596     [[ -n ${!x} ]] && echo ${x}=${!x} >> "${T}"/${PN}-qconfig.pri
597     done
598 abcd 1.57 insinto ${QTDATADIR#${EPREFIX}}/mkspecs/gentoo
599 pesa 1.147 doins "${T}"/${PN}-qconfig.pri
600 zlin 1.9 fi
601 ingmar 1.7
602 zlin 1.9 if [[ -n ${QCONFIG_DEFINE} ]]; then
603 ingmar 1.7 for x in ${QCONFIG_DEFINE}; do
604     echo "#define ${x}" >> "${T}"/gentoo-${PN}-qconfig.h
605     done
606 abcd 1.57 insinto ${QTHEADERDIR#${EPREFIX}}/Gentoo
607 pesa 1.147 doins "${T}"/gentoo-${PN}-qconfig.h
608 ingmar 1.7 fi
609     }
610    
611 hwoarang 1.34 # @FUNCTION: generate_qconfigs
612 pesa 1.110 # @INTERNAL
613 vapier 1.93 # @DESCRIPTION:
614 pesa 1.109 # Generates gentoo-specific qconfig.{h,pri}.
615 ingmar 1.7 generate_qconfigs() {
616 pesa 1.144 if [[ -n ${QCONFIG_ADD} || -n ${QCONFIG_REMOVE} || -n ${QCONFIG_DEFINE} || ${CATEGORY}/${PN} == dev-qt/qtcore ]]; then
617 ingmar 1.7 local x qconfig_add qconfig_remove qconfig_new
618     for x in "${ROOT}${QTDATADIR}"/mkspecs/gentoo/*-qconfig.pri; do
619     [[ -f ${x} ]] || continue
620 abcd 1.55 qconfig_add+=" $(sed -n 's/^QCONFIG_ADD=//p' "${x}")"
621     qconfig_remove+=" $(sed -n 's/^QCONFIG_REMOVE=//p' "${x}")"
622 ingmar 1.7 done
623    
624     # these error checks do not use die because dying in pkg_post{inst,rm}
625     # just makes things worse.
626     if [[ -e "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri ]]; then
627 pesa 1.144 # start with the qconfig.pri that qtcore installed
628 ingmar 1.7 if ! cp "${ROOT}${QTDATADIR}"/mkspecs/gentoo/qconfig.pri \
629     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
630     eerror "cp qconfig failed."
631     return 1
632     fi
633    
634     # generate list of QT_CONFIG entries from the existing list
635     # including qconfig_add and excluding qconfig_remove
636     for x in $(sed -n 's/^QT_CONFIG +=//p' \
637     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri) ${qconfig_add}; do
638 ssuominen 1.91 has ${x} ${qconfig_remove} || qconfig_new+=" ${x}"
639 ingmar 1.7 done
640    
641     # replace the existing QT_CONFIG list with qconfig_new
642     if ! sed -i -e "s/QT_CONFIG +=.*/QT_CONFIG += ${qconfig_new}/" \
643     "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri; then
644     eerror "Sed for QT_CONFIG failed"
645     return 1
646     fi
647    
648     # create Gentoo/qconfig.h
649     if [[ ! -e ${ROOT}${QTHEADERDIR}/Gentoo ]]; then
650     if ! mkdir -p "${ROOT}${QTHEADERDIR}"/Gentoo; then
651     eerror "mkdir ${QTHEADERDIR}/Gentoo failed"
652     return 1
653     fi
654     fi
655     : > "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
656     for x in "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-*-qconfig.h; do
657     [[ -f ${x} ]] || continue
658     cat "${x}" >> "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
659     done
660     else
661     rm -f "${ROOT}${QTDATADIR}"/mkspecs/qconfig.pri
662     rm -f "${ROOT}${QTHEADERDIR}"/Gentoo/gentoo-qconfig.h
663     rmdir "${ROOT}${QTDATADIR}"/mkspecs \
664     "${ROOT}${QTDATADIR}" \
665     "${ROOT}${QTHEADERDIR}"/Gentoo \
666     "${ROOT}${QTHEADERDIR}" 2>/dev/null
667     fi
668     fi
669     }
670    
671 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postrm
672 vapier 1.93 # @DESCRIPTION:
673 pesa 1.109 # Regenerate configuration when the package is completely removed.
674 ingmar 1.7 qt4-build_pkg_postrm() {
675     generate_qconfigs
676 caleb 1.1 }
677    
678 hwoarang 1.34 # @FUNCTION: qt4-build_pkg_postinst
679 vapier 1.93 # @DESCRIPTION:
680 pesa 1.109 # Regenerate configuration, plus throw a message about possible
681 hwoarang 1.34 # breakages and proposed solutions.
682 ingmar 1.7 qt4-build_pkg_postinst() {
683     generate_qconfigs
684 caleb 1.1 }
685    
686 pesa 1.100 # @FUNCTION: skip_qmake_build
687 pesa 1.110 # @INTERNAL
688 hwoarang 1.34 # @DESCRIPTION:
689 pesa 1.144 # Patches configure to skip qmake compilation, as it's already installed by qtcore.
690 pesa 1.100 skip_qmake_build() {
691 pesa 1.109 sed -i -e "s:if true:if false:g" "${S}"/configure || die
692 caleb 1.1 }
693    
694 pesa 1.100 # @FUNCTION: skip_project_generation
695 pesa 1.110 # @INTERNAL
696 hwoarang 1.34 # @DESCRIPTION:
697 pesa 1.109 # Exit the script early by throwing in an exit before all of the .pro files are scanned.
698 pesa 1.100 skip_project_generation() {
699 pesa 1.109 sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure || die
700 caleb 1.1 }
701    
702 hwoarang 1.34 # @FUNCTION: symlink_binaries_to_buildtree
703 pesa 1.110 # @INTERNAL
704 hwoarang 1.34 # @DESCRIPTION:
705 pesa 1.109 # Symlinks generated binaries to buildtree, so they can be used during compilation time.
706 ingmar 1.7 symlink_binaries_to_buildtree() {
707     for bin in qmake moc uic rcc; do
708 pesa 1.100 ln -s "${QTBINDIR}"/${bin} "${S}"/bin/ || die "symlinking ${bin} to ${S}/bin failed"
709 ingmar 1.7 done
710 caleb 1.1 }
711    
712 hwoarang 1.34 # @FUNCTION: fix_library_files
713 pesa 1.110 # @INTERNAL
714 hwoarang 1.34 # @DESCRIPTION:
715 pesa 1.109 # Fixes the paths in *.la, *.prl, *.pc, as they are wrong due to sandbox and
716     # moves the *.pc files into the pkgconfig directory.
717 caleb 1.1 fix_library_files() {
718 pesa 1.109 local libfile
719 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/{*.la,*.prl,pkgconfig/*.pc}; do
720     if [[ -e ${libfile} ]]; then
721 pesa 1.98 sed -i -e "s:${S}/lib:${QTLIBDIR}:g" ${libfile} || die "sed on ${libfile} failed"
722 ingmar 1.7 fi
723     done
724 caleb 1.1
725 pesa 1.109 # pkgconfig files refer to WORKDIR/bin as the moc and uic locations
726 ingmar 1.7 for libfile in "${D}"/${QTLIBDIR}/pkgconfig/*.pc; do
727     if [[ -e ${libfile} ]]; then
728 pesa 1.109 sed -i -e "s:${S}/bin:${QTBINDIR}:g" ${libfile} || die "sed on ${libfile} failed"
729 caleb 1.1
730 abcd 1.55 # Move .pc files into the pkgconfig directory
731 abcd 1.57 dodir ${QTPCDIR#${EPREFIX}}
732 pesa 1.109 mv ${libfile} "${D}"/${QTPCDIR}/ || die "moving ${libfile} to ${D}/${QTPCDIR}/ failed"
733 ingmar 1.7 fi
734     done
735    
736     # Don't install an empty directory
737     rmdir "${D}"/${QTLIBDIR}/pkgconfig
738 caleb 1.1 }
739    
740 hwoarang 1.34 # @FUNCTION: qt_use
741     # @USAGE: < flag > [ feature ] [ enableval ]
742 yngwin 1.39 # @DESCRIPTION:
743 pesa 1.111 # This will echo "-${enableval}-${feature}" if <flag> is enabled, or
744     # "-no-${feature}" if it's disabled. If [feature] is not specified, <flag>
745 hwoarang 1.34 # will be used for that. If [enableval] is not specified, it omits the
746 pesa 1.111 # "-${enableval}" part.
747 caleb 1.1 qt_use() {
748 pesa 1.111 use "$1" && echo "${3:+-$3}-${2:-$1}" || echo "-no-${2:-$1}"
749 ingmar 1.7 }
750    
751 hwoarang 1.34 # @FUNCTION: qt_mkspecs_dir
752     # @RETURN: the specs-directory w/o path
753 yngwin 1.39 # @DESCRIPTION:
754 hwoarang 1.34 # Allows us to define which mkspecs dir we want to use.
755 caleb 1.1 qt_mkspecs_dir() {
756 pesa 1.109 local spec=
757 pesa 1.122
758     case "${CHOST}" in
759 caleb 1.5 *-freebsd*|*-dragonfly*)
760 abcd 1.55 spec=freebsd ;;
761 caleb 1.5 *-openbsd*)
762 abcd 1.55 spec=openbsd ;;
763 caleb 1.5 *-netbsd*)
764 abcd 1.55 spec=netbsd ;;
765 ingmar 1.7 *-darwin*)
766 abcd 1.57 if use aqua; then
767     # mac with carbon/cocoa
768     spec=macx
769     else
770     # darwin/mac with x11
771     spec=darwin
772     fi
773     ;;
774     *-solaris*)
775     spec=solaris ;;
776 caleb 1.5 *-linux-*|*-linux)
777 abcd 1.55 spec=linux ;;
778 caleb 1.5 *)
779 pesa 1.122 die "${FUNCNAME}(): Unknown CHOST '${CHOST}'" ;;
780 caleb 1.5 esac
781    
782 pesa 1.122 case "$(tc-getCXX)" in
783     *g++*)
784     spec+=-g++ ;;
785     *icpc*)
786     spec+=-icc ;;
787     *)
788     die "${FUNCNAME}(): Unknown compiler '$(tc-getCXX)'" ;;
789     esac
790 caleb 1.1
791 abcd 1.57 # Add -64 for 64bit profiles
792     if use x64-freebsd ||
793     use amd64-linux ||
794     use x64-macos ||
795     use x64-solaris ||
796     use sparc64-solaris
797     then
798     spec+=-64
799     fi
800    
801 caleb 1.5 echo "${spec}"
802 caleb 1.1 }
803    
804 hwoarang 1.77 # @FUNCTION: qt_nolibx11
805 pesa 1.110 # @INTERNAL
806 hwoarang 1.77 # @DESCRIPTION:
807 pesa 1.109 # Ignore X11 tests for packages that don't need X libraries installed.
808 hwoarang 1.77 qt_nolibx11() {
809     sed -i "/unixtests\/compile.test.*config.tests\/x11\/xlib/,/fi$/d" "${S}"/configure ||
810     die "x11 check sed failed"
811     }
812    
813 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