| 1 | # Copyright 2005 Gentoo Foundation |
1 | # Copyright 2005-2009 Gentoo Foundation |
| 2 | # Distributed under the terms of the GNU General Public License v2 |
2 | # Distributed under the terms of the GNU General Public License v2 |
| 3 | # $Header: /var/cvsroot/gentoo-x86/eclass/Attic/qt4.eclass,v 1.2 2006/05/08 11:13:57 caleb Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/Attic/qt4.eclass,v 1.51 2009/03/14 15:31:28 yngwin Exp $ |
|
|
4 | |
|
|
5 | # @ECLASS: qt4.eclass |
|
|
6 | # @MAINTAINER: |
|
|
7 | # Ben de Groot <yngwin@gentoo.org>, |
|
|
8 | # Markos Chandras <hwoarang@gentoo.org>, |
|
|
9 | # Caleb Tennis <caleb@gentoo.org>, |
|
|
10 | # Przemyslaw Maciag <troll@gentoo.org>, |
|
|
11 | # Davide Pesavento <davidepesa@gmail.com> |
|
|
12 | # @BLURB: Eclass for Qt4 packages |
|
|
13 | # @DESCRIPTION: |
|
|
14 | # This eclass contains various functions that may be useful |
|
|
15 | # when dealing with packages using Qt4 libraries. |
|
|
16 | |
|
|
17 | inherit base eutils multilib toolchain-funcs versionator |
|
|
18 | |
|
|
19 | qt4_monolithic_to_split_flag() { |
|
|
20 | case ${1} in |
|
|
21 | zlib) |
|
|
22 | # Qt 4.4+ is always built with zlib enabled, so this flag isn't needed |
|
|
23 | ;; |
|
|
24 | gif|jpeg|png) |
|
|
25 | # qt-gui always installs with these enabled |
|
|
26 | checkpkgs+=" x11-libs/qt-gui" |
|
|
27 | ;; |
|
|
28 | dbus|opengl) |
|
|
29 | # Make sure the qt-${1} package has been installed already |
|
|
30 | checkpkgs+=" x11-libs/qt-${1}" |
|
|
31 | ;; |
|
|
32 | qt3support) |
|
|
33 | checkpkgs+=" x11-libs/qt-${1}" |
|
|
34 | checkflags+=" x11-libs/qt-core:${1} x11-libs/qt-gui:${1} x11-libs/qt-sql:${1}" |
|
|
35 | ;; |
|
|
36 | ssl) |
|
|
37 | # qt-core controls this flag |
|
|
38 | checkflags+=" x11-libs/qt-core:${1}" |
|
|
39 | ;; |
|
|
40 | cups|mng|nas|nis|tiff|xinerama|input_devices_wacom) |
|
|
41 | # qt-gui controls these flags |
|
|
42 | checkflags+=" x11-libs/qt-gui:${1}" |
|
|
43 | ;; |
|
|
44 | firebird|mysql|odbc|postgres|sqlite3) |
|
|
45 | # qt-sql controls these flags. sqlite2 is no longer supported so it uses sqlite instead of sqlite3. |
|
|
46 | checkflags+=" x11-libs/qt-sql:${1%3}" |
|
|
47 | ;; |
|
|
48 | accessibility) |
|
|
49 | eerror "(QA message): Use guiaccessibility and/or qt3accessibility to specify which of qt-gui and qt-qt3support are relevant for this package." |
|
|
50 | # deal with this gracefully by checking the flag for what is available |
|
|
51 | for y in gui qt3support; do |
|
|
52 | has_version x11-libs/qt-${y} && checkflags+=" x11-libs/qt-${y}:${1}" |
|
|
53 | done |
|
|
54 | ;; |
|
|
55 | guiaccessibility) |
|
|
56 | checkflags+=" x11-libs/qt-gui:accessibility" |
|
|
57 | ;; |
|
|
58 | qt3accessibility) |
|
|
59 | checkflags+=" x11-libs/qt-qt3support:accessibility" |
|
|
60 | ;; |
|
|
61 | debug|doc|examples|glib|pch|sqlite|*) |
|
|
62 | # packages probably shouldn't be checking these flags so we don't handle them currently |
|
|
63 | eerror "qt4.eclass currently doesn't handle the use flag ${1} in QT4_BUILT_WITH_USE_CHECK for qt-4.4. This is either an" |
|
|
64 | eerror "eclass bug or an ebuild bug. Please report it at http://bugs.gentoo.org/" |
|
|
65 | ((fatalerrors+=1)) |
|
|
66 | ;; |
|
|
67 | esac |
|
|
68 | } |
|
|
69 | |
|
|
70 | # @FUNCTION: qt4_pkg_setup |
|
|
71 | # @DESCRIPTION: |
|
|
72 | # Default pkg_setup function for packages that depends on qt4. If you have to |
|
|
73 | # create ebuilds own pkg_setup in your ebuild, call qt4_pkg_setup in it. |
|
|
74 | # This function uses two global vars from ebuild: |
|
|
75 | # - QT4_BUILT_WITH_USE_CHECK - contains use flags that need to be turned on for |
|
|
76 | # =x11-libs/qt-4* |
|
|
77 | # - QT4_OPTIONAL_BUILT_WITH_USE_CHECK - qt4 flags that provides some |
|
|
78 | # functionality, but can alternatively be disabled in ${CATEGORY}/${PN} |
|
|
79 | # (so qt4 don't have to be recompiled) |
| 4 | # |
80 | # |
| 5 | # Author Caleb Tennis <caleb@gentoo.org> |
81 | # NOTE: Using the above vars is now deprecated in favor of eapi-2 use deps |
| 6 | # |
82 | # |
| 7 | # This eclass is simple. Inherit it, and in your depend, do something like this: |
83 | # flags to watch for for Qt4.4: |
|
|
84 | # zlib png | opengl dbus qt3support | sqlite3 ssl |
|
|
85 | qt4_pkg_setup() { |
|
|
86 | local x y checkpkgs checkflags fatalerrors=0 requiredflags="" |
|
|
87 | |
|
|
88 | # lots of has_version calls can be very expensive |
|
|
89 | if [[ -n ${QT4_BUILT_WITH_USE_CHECK}${QT4_OPTIONAL_BUILT_WITH_USE_CHECK} ]]; then |
|
|
90 | ewarn "QA notice: The QT4_BUILT_WITH_USE functionality is deprecated and" |
|
|
91 | ewarn "will be removed from future versions of qt4.eclass. Please update" |
|
|
92 | ewarn "the ebuild to use eapi-2 use dependencies instead." |
|
|
93 | has_version x11-libs/qt-core && local QT44=true |
|
|
94 | fi |
|
|
95 | |
|
|
96 | for x in ${QT4_BUILT_WITH_USE_CHECK}; do |
|
|
97 | if [[ -n ${QT44} ]]; then |
|
|
98 | # The use flags are different in 4.4 and above, and it's split packages, so this is used to catch |
|
|
99 | # the various use flag combos specified in the ebuilds to make sure we don't error out for no reason. |
|
|
100 | qt4_monolithic_to_split_flag ${x} |
|
|
101 | else |
|
|
102 | [[ ${x} == *accessibility ]] && x=${x#gui} && x=${x#qt3} |
|
|
103 | if ! built_with_use =x11-libs/qt-4* ${x}; then |
|
|
104 | requiredflags="${requiredflags} ${x}" |
|
|
105 | fi |
|
|
106 | fi |
|
|
107 | done |
|
|
108 | |
|
|
109 | local optionalflags="" |
|
|
110 | for x in ${QT4_OPTIONAL_BUILT_WITH_USE_CHECK}; do |
|
|
111 | if use ${x}; then |
|
|
112 | if [[ -n ${QT44} ]]; then |
|
|
113 | # The use flags are different in 4.4 and above, and it's split packages, so this is used to catch |
|
|
114 | # the various use flag combos specified in the ebuilds to make sure we don't error out for no reason. |
|
|
115 | qt4_monolithic_to_split_flag ${x} |
|
|
116 | elif ! built_with_use =x11-libs/qt-4* ${x}; then |
|
|
117 | optionalflags="${optionalflags} ${x}" |
|
|
118 | fi |
|
|
119 | fi |
|
|
120 | done |
|
|
121 | |
|
|
122 | # The use flags are different in 4.4 and above, and it's split packages, so this is used to catch |
|
|
123 | # the various use flag combos specified in the ebuilds to make sure we don't error out for no reason. |
|
|
124 | for y in ${checkpkgs}; do |
|
|
125 | if ! has_version ${y}; then |
|
|
126 | eerror "You must first install the ${y} package. It should be added to the dependencies for this package (${CATEGORY}/${PN}). See bug #217161." |
|
|
127 | ((fatalerrors+=1)) |
|
|
128 | fi |
|
|
129 | done |
|
|
130 | for y in ${checkflags}; do |
|
|
131 | if ! has_version ${y%:*}; then |
|
|
132 | eerror "You must first install the ${y%:*} package with the ${y##*:} flag enabled." |
|
|
133 | eerror "It should be added to the dependencies for this package (${CATEGORY}/${PN}). See bug #217161." |
|
|
134 | ((fatalerrors+=1)) |
|
|
135 | else |
|
|
136 | if ! built_with_use ${y%:*} ${y##*:}; then |
|
|
137 | eerror "You must first install the ${y%:*} package with the ${y##*:} flag enabled." |
|
|
138 | ((fatalerrors+=1)) |
|
|
139 | fi |
|
|
140 | fi |
|
|
141 | done |
|
|
142 | |
|
|
143 | local diemessage="" |
|
|
144 | if [[ ${fatalerrors} -ne 0 ]]; then |
|
|
145 | diemessage="${fatalerrors} fatal errors were detected. Please read the above error messages and act accordingly." |
|
|
146 | fi |
|
|
147 | if [[ -n ${requiredflags} ]]; then |
|
|
148 | eerror |
|
|
149 | eerror "(1) In order to compile ${CATEGORY}/${PN} first you need to build" |
|
|
150 | eerror "=x11-libs/qt-4* with USE=\"${requiredflags}\" flag(s)" |
|
|
151 | eerror |
|
|
152 | diemessage="(1) recompile qt4 with \"${requiredflags}\" USE flag(s) ; " |
|
|
153 | fi |
|
|
154 | if [[ -n ${optionalflags} ]]; then |
|
|
155 | eerror |
|
|
156 | eerror "(2) You are trying to compile ${CATEGORY}/${PN} package with" |
|
|
157 | eerror "USE=\"${optionalflags}\"" |
|
|
158 | eerror "while qt4 is built without this particular flag(s): it will" |
|
|
159 | eerror "not work." |
|
|
160 | eerror |
|
|
161 | eerror "Possible solutions to this problem are:" |
|
|
162 | eerror "a) install package ${CATEGORY}/${PN} without \"${optionalflags}\" USE flag(s)" |
|
|
163 | eerror "b) re-emerge qt4 with \"${optionalflags}\" USE flag(s)" |
|
|
164 | eerror |
|
|
165 | diemessage="${diemessage}(2) recompile qt4 with \"${optionalflags}\" USE flag(s) or disable them for ${PN} package\n" |
|
|
166 | fi |
|
|
167 | |
|
|
168 | [[ -n ${diemessage} ]] && die "can't install ${CATEGORY}/${PN}: ${diemessage}" |
|
|
169 | } |
|
|
170 | |
|
|
171 | # @ECLASS-VARIABLE: PATCHES |
|
|
172 | # @DESCRIPTION: |
|
|
173 | # In case you have patches to apply, specify them in the PATCHES variable. |
|
|
174 | # Make sure to specify the full path. This variable is necessary for the |
|
|
175 | # src_prepare phase. |
|
|
176 | # example: |
|
|
177 | # PATCHES="${FILESDIR}/mypatch.patch |
|
|
178 | # ${FILESDIR}/mypatch2.patch" |
| 8 | # |
179 | # |
| 9 | # DEPEND="$(qt_min_version 4)" |
180 | # @FUNCTION: qt4_src_prepare |
| 10 | # |
181 | # @DESCRIPTION: |
| 11 | # and it handles the rest for you |
182 | # Default src_prepare function for packages that depend on qt4. If you have to |
| 12 | # |
183 | # override src_prepare in your ebuild, you should call qt4_src_prepare in it, |
| 13 | |
184 | # otherwise autopatcher will not work! |
| 14 | inherit versionator |
185 | qt4_src_prepare() { |
| 15 | |
186 | debug-print-function $FUNCNAME "$@" |
| 16 | QTPKG="x11-libs/qt-" |
187 | base_src_prepare |
| 17 | QT4MAJORVERSIONS="4.1 4.0" |
|
|
| 18 | QT4VERSIONS="4.1.2 4.1.1 4.1.0 4.0.1 4.0.0" |
|
|
| 19 | |
|
|
| 20 | qt_min_version() { |
|
|
| 21 | echo "|| (" |
|
|
| 22 | qt_min_version_list "$@" |
|
|
| 23 | echo ")" |
|
|
| 24 | } |
188 | } |
| 25 | |
189 | |
| 26 | qt_min_version_list() { |
190 | # @FUNCTION: qt4_src_configure |
| 27 | local MINVER="$1" |
191 | # @DESCRIPTION: |
| 28 | local VERSIONS="" |
192 | # Default src_configure function for packages that depend on qt4. If you have to |
|
|
193 | # override src_configure in your ebuild, call qt4_src_configure in it. |
|
|
194 | qt4_src_configure() { |
|
|
195 | debug-print-function $FUNCNAME "$@" |
|
|
196 | eqmake4 |
|
|
197 | } |
| 29 | |
198 | |
| 30 | case "${MINVER}" in |
199 | # @FUNCTION: qt4_src_compile |
| 31 | 4|4.0|4.0.0) VERSIONS="=${QTPKG}4*";; |
200 | # @DESCRIPTION: |
| 32 | 4.1|4.1.0) |
201 | # Default src_compile function for packages that depend on qt4. If you have to |
| 33 | for x in ${QT4MAJORVERSIONS}; do |
202 | # override src_compile in your ebuild (probably you don't need to), call |
| 34 | if $(version_is_at_least "${MINVER}" "${x}"); then |
203 | # qt4_src_compile in it. |
| 35 | VERSIONS="${VERSIONS} =${QTPKG}${x}*" |
204 | qt4_src_compile() { |
| 36 | fi |
205 | debug-print-function $FUNCNAME "$@" |
| 37 | done |
206 | case "${EAPI:-0}" in |
|
|
207 | 2) |
|
|
208 | emake || die "emake failed" |
| 38 | ;; |
209 | ;; |
| 39 | 4*) |
210 | 0|1) |
| 40 | for x in ${QT4VERSIONS}; do |
211 | qt4_src_prepare |
| 41 | if $(version_is_at_least "${MINVER}" "${x}"); then |
212 | qt4_src_configure |
| 42 | VERSIONS="${VERSIONS} =${QTPKG}${x}" |
213 | emake || die "emake failed" |
| 43 | fi |
|
|
| 44 | done |
|
|
| 45 | ;; |
214 | ;; |
| 46 | *) VERSIONS="=${QTPKG}4*";; |
|
|
| 47 | esac |
215 | esac |
| 48 | |
|
|
| 49 | echo "${VERSIONS}" |
|
|
| 50 | } |
216 | } |
|
|
217 | |
|
|
218 | # @FUNCTION: eqmake4 |
|
|
219 | # @USAGE: [.pro file] [additional parameters to qmake] |
|
|
220 | # @DESCRIPTION: |
|
|
221 | # Runs qmake on the specified .pro file (defaults to |
|
|
222 | # ${PN}.pro if eqmake4 was called with no argument). |
|
|
223 | # Additional parameters are passed unmodified to qmake. |
|
|
224 | eqmake4() { |
|
|
225 | local LOGFILE="${T}/qmake-$$.out" |
|
|
226 | local projprofile="${1}" |
|
|
227 | [[ -z ${projprofile} ]] && projprofile="${PN}.pro" |
|
|
228 | shift 1 |
|
|
229 | |
|
|
230 | ebegin "Processing qmake ${projprofile}" |
|
|
231 | |
|
|
232 | # file exists? |
|
|
233 | if [[ ! -f ${projprofile} ]]; then |
|
|
234 | echo |
|
|
235 | eerror "Project .pro file \"${projprofile}\" does not exists" |
|
|
236 | eerror "qmake cannot handle non-existing .pro files" |
|
|
237 | echo |
|
|
238 | eerror "This shouldn't happen - please send a bug report to bugs.gentoo.org" |
|
|
239 | echo |
|
|
240 | die "Project file not found in ${PN} sources" |
|
|
241 | fi |
|
|
242 | |
|
|
243 | echo >> ${LOGFILE} |
|
|
244 | echo "****** qmake ${projprofile} ******" >> ${LOGFILE} |
|
|
245 | echo >> ${LOGFILE} |
|
|
246 | |
|
|
247 | # as a workaround for broken qmake, put everything into file |
|
|
248 | if has debug ${IUSE} && use debug; then |
|
|
249 | echo -e "\nCONFIG -= release\nCONFIG += no_fixpath debug" >> ${projprofile} |
|
|
250 | else |
|
|
251 | echo -e "\nCONFIG -= debug\nCONFIG += no_fixpath release" >> ${projprofile} |
|
|
252 | fi |
|
|
253 | |
|
|
254 | /usr/bin/qmake ${projprofile} \ |
|
|
255 | QTDIR=/usr/$(get_libdir) \ |
|
|
256 | QMAKE=/usr/bin/qmake \ |
|
|
257 | QMAKE_CC=$(tc-getCC) \ |
|
|
258 | QMAKE_CXX=$(tc-getCXX) \ |
|
|
259 | QMAKE_LINK=$(tc-getCXX) \ |
|
|
260 | QMAKE_CFLAGS_RELEASE="${CFLAGS}" \ |
|
|
261 | QMAKE_CFLAGS_DEBUG="${CFLAGS}" \ |
|
|
262 | QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" \ |
|
|
263 | QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS}" \ |
|
|
264 | QMAKE_LFLAGS_RELEASE="${LDFLAGS}" \ |
|
|
265 | QMAKE_LFLAGS_DEBUG="${LDFLAGS}" \ |
|
|
266 | QMAKE_RPATH= \ |
|
|
267 | QMAKE_STRIP= \ |
|
|
268 | "${@}" >> ${LOGFILE} 2>&1 |
|
|
269 | |
|
|
270 | local result=$? |
|
|
271 | eend ${result} |
|
|
272 | |
|
|
273 | # was qmake successful? |
|
|
274 | if [[ ${result} -ne 0 ]]; then |
|
|
275 | echo |
|
|
276 | eerror "Running qmake on \"${projprofile}\" has failed" |
|
|
277 | echo |
|
|
278 | eerror "This shouldn't happen - please send a bug report to bugs.gentoo.org" |
|
|
279 | echo |
|
|
280 | die "qmake failed on ${projprofile}" |
|
|
281 | fi |
|
|
282 | |
|
|
283 | return ${result} |
|
|
284 | } |
|
|
285 | |
|
|
286 | case ${EAPI:-0} in |
|
|
287 | 2) |
|
|
288 | EXPORT_FUNCTIONS pkg_setup src_prepare src_configure src_compile |
|
|
289 | ;; |
|
|
290 | 0|1) |
|
|
291 | EXPORT_FUNCTIONS pkg_setup src_compile |
|
|
292 | ;; |
|
|
293 | esac |