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

Contents of /eclass/qt4-build.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.149 - (hide annotations) (download)
Tue Aug 13 10:05:37 2013 UTC (23 months, 2 weeks ago) by pesa
Branch: MAIN
Changes since 1.148: +3 -16 lines
Remove workarounds for very old and unsupported gcc-3 versions. Warn if trying to use gcc < 4.4 and USE=c++0x.

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