| 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.48 2008/08/03 20:47:27 carlo Exp $ |
3 | # $Header: /var/cvsroot/gentoo-x86/eclass/Attic/qt4.eclass,v 1.54 2009/05/09 14:59:03 hwoarang Exp $ |
| 4 | |
4 | |
| 5 | # @ECLASS: qt4.eclass |
5 | # @ECLASS: qt4.eclass |
| 6 | # @MAINTAINER: |
6 | # @MAINTAINER: |
|
|
7 | # Ben de Groot <yngwin@gentoo.org>, |
|
|
8 | # Markos Chandras <hwoarang@gentoo.org>, |
| 7 | # Caleb Tennis <caleb@gentoo.org> |
9 | # Caleb Tennis <caleb@gentoo.org>, |
|
|
10 | # Przemyslaw Maciag <troll@gentoo.org>, |
|
|
11 | # Davide Pesavento <davidepesa@gmail.com> |
| 8 | # @BLURB: Eclass for Qt4 packages |
12 | # @BLURB: Eclass for Qt4 packages |
| 9 | # @DESCRIPTION: |
13 | # @DESCRIPTION: |
| 10 | # This eclass contains various functions that may be useful |
14 | # This eclass contains various functions that may be useful |
| 11 | # when dealing with packages using Qt4 libraries. |
15 | # when dealing with packages using Qt4 libraries. |
| 12 | |
16 | |
| 13 | # 08.16.06 - Renamed qt_min_* to qt4_min_* to avoid conflicts with the qt3 eclass. |
|
|
| 14 | # - Caleb Tennis <caleb@gentoo.org> |
|
|
| 15 | |
|
|
| 16 | inherit eutils multilib toolchain-funcs versionator |
17 | inherit base eutils multilib toolchain-funcs versionator |
| 17 | |
|
|
| 18 | QTPKG="x11-libs/qt-" |
|
|
| 19 | QT4MAJORVERSIONS="4.4 4.3 4.2 4.1 4.0" |
|
|
| 20 | QT4VERSIONS="4.4.1 4.4.0 4.4.0_beta1 4.4.0_rc1 |
|
|
| 21 | 4.3.4-r1 4.3.5 4.3.4 4.3.3 4.3.2-r1 4.3.2 4.3.1-r1 4.3.1 |
|
|
| 22 | 4.3.0-r2 4.3.0-r1 4.3.0 4.3.0_rc1 4.3.0_beta1 |
|
|
| 23 | 4.2.3-r1 4.2.3 4.2.2 4.2.1 4.2.0-r2 4.2.0-r1 4.2.0 |
|
|
| 24 | 4.1.4-r2 4.1.4-r1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 |
|
|
| 25 | 4.0.1 4.0.0" |
|
|
| 26 | |
|
|
| 27 | # @FUNCTION: qt4_min_version |
|
|
| 28 | # @USAGE: [minimum version] |
|
|
| 29 | # @DESCRIPTION: |
|
|
| 30 | # This function is deprecated. Use slot dependencies instead. |
|
|
| 31 | qt4_min_version() { |
|
|
| 32 | local deps="$@" |
|
|
| 33 | ewarn "${CATEGORY}/${PF}: qt4_min_version() is deprecated. Use slot dependencies instead." |
|
|
| 34 | case ${EAPI:-0} in |
|
|
| 35 | # EAPIs without SLOT dependencies |
|
|
| 36 | 0) echo "|| (" |
|
|
| 37 | qt4_min_version_list "${deps}" |
|
|
| 38 | echo ")" |
|
|
| 39 | ;; |
|
|
| 40 | # EAPIS with SLOT dependencies. |
|
|
| 41 | *) echo ">=${QTPKG}${1}:4" |
|
|
| 42 | ;; |
|
|
| 43 | esac |
|
|
| 44 | } |
|
|
| 45 | |
|
|
| 46 | qt4_min_version_list() { |
|
|
| 47 | local MINVER="$1" |
|
|
| 48 | local VERSIONS="" |
|
|
| 49 | |
|
|
| 50 | case "${MINVER}" in |
|
|
| 51 | 4|4.0|4.0.0) VERSIONS="=${QTPKG}4*";; |
|
|
| 52 | 4.1|4.1.0|4.2|4.2.0|4.3|4.3.0|4.4|4.4.0) |
|
|
| 53 | for x in ${QT4MAJORVERSIONS}; do |
|
|
| 54 | if version_is_at_least "${MINVER}" "${x}"; then |
|
|
| 55 | VERSIONS="${VERSIONS} =${QTPKG}${x}*" |
|
|
| 56 | fi |
|
|
| 57 | done |
|
|
| 58 | ;; |
|
|
| 59 | 4*) |
|
|
| 60 | for x in ${QT4VERSIONS}; do |
|
|
| 61 | if version_is_at_least "${MINVER}" "${x}"; then |
|
|
| 62 | VERSIONS="${VERSIONS} =${QTPKG}${x}" |
|
|
| 63 | fi |
|
|
| 64 | done |
|
|
| 65 | ;; |
|
|
| 66 | *) VERSIONS="=${QTPKG}4*";; |
|
|
| 67 | esac |
|
|
| 68 | |
|
|
| 69 | echo "${VERSIONS}" |
|
|
| 70 | } |
|
|
| 71 | |
18 | |
| 72 | qt4_monolithic_to_split_flag() { |
19 | qt4_monolithic_to_split_flag() { |
| 73 | case ${1} in |
20 | case ${1} in |
| 74 | zlib) |
21 | zlib) |
| 75 | # Qt 4.4+ is always built with zlib enabled, so this flag isn't needed |
22 | # Qt 4.4+ is always built with zlib enabled, so this flag isn't needed |
| … | |
… | |
| 119 | ;; |
66 | ;; |
| 120 | esac |
67 | esac |
| 121 | } |
68 | } |
| 122 | |
69 | |
| 123 | # @FUNCTION: qt4_pkg_setup |
70 | # @FUNCTION: qt4_pkg_setup |
| 124 | # @MAINTAINER: |
|
|
| 125 | # Caleb Tennis <caleb@gentoo.org> |
|
|
| 126 | # Przemyslaw Maciag <troll@gentoo.org> |
|
|
| 127 | # @DESCRIPTION: |
71 | # @DESCRIPTION: |
| 128 | # Default pkg_setup function for packages that depends on qt4. If you have to |
72 | # Default pkg_setup function for packages that depends on qt4. If you have to |
| 129 | # create ebuilds own pkg_setup in your ebuild, call qt4_pkg_setup in it. |
73 | # create ebuilds own pkg_setup in your ebuild, call qt4_pkg_setup in it. |
| 130 | # This function uses two global vars from ebuild: |
74 | # This function uses two global vars from ebuild: |
| 131 | # - QT4_BUILT_WITH_USE_CHECK - contains use flags that need to be turned on for |
75 | # - QT4_BUILT_WITH_USE_CHECK - contains use flags that need to be turned on for |
| 132 | # =x11-libs/qt-4* |
76 | # =x11-libs/qt-4* |
| 133 | # - QT4_OPTIONAL_BUILT_WITH_USE_CHECK - qt4 flags that provides some |
77 | # - QT4_OPTIONAL_BUILT_WITH_USE_CHECK - qt4 flags that provides some |
| 134 | # functionality, but can alternatively be disabled in ${CATEGORY}/${PN} |
78 | # functionality, but can alternatively be disabled in ${CATEGORY}/${PN} |
| 135 | # (so qt4 don't have to be recompiled) |
79 | # (so qt4 don't have to be recompiled) |
| 136 | # |
80 | # |
|
|
81 | # NOTE: Using the above vars is now deprecated in favor of eapi-2 use deps |
|
|
82 | # |
| 137 | # flags to watch for for Qt4.4: |
83 | # flags to watch for for Qt4.4: |
| 138 | # zlib png | opengl dbus qt3support | sqlite3 ssl |
84 | # zlib png | opengl dbus qt3support | sqlite3 ssl |
| 139 | qt4_pkg_setup() { |
85 | qt4_pkg_setup() { |
| 140 | local x y checkpkgs checkflags fatalerrors=0 requiredflags="" |
86 | local x y checkpkgs checkflags fatalerrors=0 requiredflags="" |
| 141 | |
87 | |
| 142 | # lots of has_version calls can be very expensive |
88 | # lots of has_version calls can be very expensive |
| 143 | if [[ -n ${QT4_BUILT_WITH_USE_CHECK}${QT4_OPTIONAL_BUILT_WITH_USE_CHECK} ]]; then |
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." |
| 144 | has_version x11-libs/qt-core && local QT44=true |
93 | has_version x11-libs/qt-core && local QT44=true |
| 145 | fi |
94 | fi |
| 146 | |
95 | |
| 147 | for x in ${QT4_BUILT_WITH_USE_CHECK}; do |
96 | for x in ${QT4_BUILT_WITH_USE_CHECK}; do |
| 148 | if [[ -n ${QT44} ]]; then |
97 | if [[ -n ${QT44} ]]; then |
| … | |
… | |
| 217 | fi |
166 | fi |
| 218 | |
167 | |
| 219 | [[ -n ${diemessage} ]] && die "can't install ${CATEGORY}/${PN}: ${diemessage}" |
168 | [[ -n ${diemessage} ]] && die "can't install ${CATEGORY}/${PN}: ${diemessage}" |
| 220 | } |
169 | } |
| 221 | |
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" |
|
|
179 | # |
|
|
180 | # @FUNCTION: qt4_src_prepare |
|
|
181 | # @DESCRIPTION: |
|
|
182 | # Default src_prepare function for packages that depend on qt4. If you have to |
|
|
183 | # override src_prepare in your ebuild, you should call qt4_src_prepare in it, |
|
|
184 | # otherwise autopatcher will not work! |
|
|
185 | qt4_src_prepare() { |
|
|
186 | debug-print-function $FUNCNAME "$@" |
|
|
187 | base_src_prepare |
|
|
188 | } |
|
|
189 | |
|
|
190 | # @FUNCTION: qt4_src_configure |
|
|
191 | # @DESCRIPTION: |
|
|
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 | #} |
|
|
198 | |
|
|
199 | # @FUNCTION: qt4_src_compile |
|
|
200 | # @DESCRIPTION: |
|
|
201 | # Default src_compile function for packages that depend on qt4. If you have to |
|
|
202 | # override src_compile in your ebuild (probably you don't need to), call |
|
|
203 | # qt4_src_compile in it. |
|
|
204 | #qt4_src_compile() { |
|
|
205 | # debug-print-function $FUNCNAME "$@" |
|
|
206 | # case "${EAPI:-0}" in |
|
|
207 | # 2) |
|
|
208 | # emake || die "emake failed" |
|
|
209 | # ;; |
|
|
210 | # 0|1) |
|
|
211 | # qt4_src_prepare |
|
|
212 | # qt4_src_configure |
|
|
213 | # emake || die "emake failed" |
|
|
214 | # ;; |
|
|
215 | # esac |
|
|
216 | #} |
|
|
217 | |
| 222 | # @FUNCTION: eqmake4 |
218 | # @FUNCTION: eqmake4 |
| 223 | # @USAGE: [.pro file] [additional parameters to qmake] |
219 | # @USAGE: [.pro file] [additional parameters to qmake] |
| 224 | # @MAINTAINER: |
|
|
| 225 | # Przemyslaw Maciag <troll@gentoo.org> |
|
|
| 226 | # Davide Pesavento <davidepesa@gmail.com> |
|
|
| 227 | # @DESCRIPTION: |
220 | # @DESCRIPTION: |
| 228 | # Runs qmake on the specified .pro file (defaults to |
221 | # Runs qmake on the specified .pro file (defaults to ${PN}.pro if called |
| 229 | # ${PN}.pro if eqmake4 was called with no argument). |
222 | # without arguments). Additional parameters are appended unmodified to |
| 230 | # Additional parameters are passed unmodified to qmake. |
223 | # qmake command line. For recursive build systems, i.e. those based on |
|
|
224 | # the subdirs template, you should run eqmake4 on the top-level project |
|
|
225 | # file only, unless you have strong reasons to do things differently. |
|
|
226 | # During the building, qmake will be automatically re-invoked with the |
|
|
227 | # right arguments on every directory specified inside the top-level |
|
|
228 | # project file by the SUBDIRS variable. |
| 231 | eqmake4() { |
229 | eqmake4() { |
| 232 | local LOGFILE="${T}/qmake-$$.out" |
230 | local projectfile="${1:-${PN}.pro}" |
| 233 | local projprofile="${1}" |
|
|
| 234 | [[ -z ${projprofile} ]] && projprofile="${PN}.pro" |
|
|
| 235 | shift 1 |
231 | shift |
| 236 | |
232 | |
| 237 | ebegin "Processing qmake ${projprofile}" |
|
|
| 238 | |
|
|
| 239 | # file exists? |
|
|
| 240 | if [[ ! -f ${projprofile} ]]; then |
233 | if [[ ! -f ${projectfile} ]]; then |
| 241 | echo |
234 | echo |
| 242 | eerror "Project .pro file \"${projprofile}\" does not exists" |
235 | eerror "Project file '${projectfile#${WORKDIR}/}' does not exists!" |
| 243 | eerror "qmake cannot handle non-existing .pro files" |
236 | eerror "eqmake4 cannot handle non-existing project files." |
|
|
237 | eerror |
|
|
238 | eerror "This shouldn't happen - please send a bug report to http://bugs.gentoo.org/" |
| 244 | echo |
239 | echo |
| 245 | eerror "This shouldn't happen - please send a bug report to bugs.gentoo.org" |
|
|
| 246 | echo |
|
|
| 247 | die "Project file not found in ${PN} sources" |
240 | die "Project file not found in ${CATEGORY}/${PN} sources." |
| 248 | fi |
241 | fi |
| 249 | |
242 | |
| 250 | echo >> ${LOGFILE} |
243 | ebegin "Running qmake on ${projectfile}" |
| 251 | echo "****** qmake ${projprofile} ******" >> ${LOGFILE} |
|
|
| 252 | echo >> ${LOGFILE} |
|
|
| 253 | |
244 | |
| 254 | # as a workaround for broken qmake, put everything into file |
245 | # make sure CONFIG variable is correctly set for both release and debug builds |
|
|
246 | local CONFIG_ADD="release" |
|
|
247 | local CONFIG_REMOVE="debug" |
| 255 | if has debug ${IUSE} && use debug; then |
248 | if has debug ${IUSE} && use debug; then |
| 256 | echo -e "\nCONFIG -= release\nCONFIG += no_fixpath debug" >> ${projprofile} |
249 | CONFIG_ADD="debug" |
| 257 | else |
250 | CONFIG_REMOVE="release" |
| 258 | echo -e "\nCONFIG -= debug\nCONFIG += no_fixpath release" >> ${projprofile} |
251 | fi |
|
|
252 | local awkscript='BEGIN { |
|
|
253 | printf "### eqmake4 was here ###\n" > file; |
|
|
254 | fixed=0; |
|
|
255 | } |
|
|
256 | /^[[:blank:]]*CONFIG[[:blank:]]*[\+\*]?=/ { |
|
|
257 | for (i=1; i <= NF; i++) { |
|
|
258 | if ($i ~ rem || $i ~ /debug_and_release/) |
|
|
259 | { $i=add; fixed=1; } |
|
|
260 | } |
|
|
261 | } |
|
|
262 | /^[[:blank:]]*CONFIG[[:blank:]]*-=/ { |
|
|
263 | for (i=1; i <= NF; i++) { |
|
|
264 | if ($i ~ add) { $i=rem; fixed=1; } |
|
|
265 | } |
|
|
266 | } |
|
|
267 | { |
|
|
268 | print >> file; |
|
|
269 | } |
|
|
270 | END { |
|
|
271 | printf "CONFIG -= debug_and_release %s\n", rem >> file; |
|
|
272 | printf "CONFIG += %s\n", add >> file; |
|
|
273 | print fixed; |
|
|
274 | }' |
|
|
275 | local file= |
|
|
276 | while read file; do |
|
|
277 | grep -q '^### eqmake4 was here ###$' "${file}" && continue |
|
|
278 | local retval=$({ |
|
|
279 | rm -f "${file}" || echo "FAILED" |
|
|
280 | awk -v file="${file}" -- "${awkscript}" add=${CONFIG_ADD} rem=${CONFIG_REMOVE} || echo "FAILED" |
|
|
281 | } < "${file}") |
|
|
282 | if [[ ${retval} == 1 ]]; then |
|
|
283 | einfo " Fixed CONFIG in ${file}" |
|
|
284 | elif [[ ${retval} != 0 ]]; then |
|
|
285 | eerror " An error occurred while processing ${file}" |
|
|
286 | die "eqmake4 failed to process '${file}'." |
| 259 | fi |
287 | fi |
|
|
288 | done < <(find "$(dirname "${projectfile}")" -type f -name "*.pr[io]" -printf '%P\n' 2>/dev/null) |
| 260 | |
289 | |
| 261 | /usr/bin/qmake ${projprofile} \ |
290 | /usr/bin/qmake -makefile -nocache \ |
| 262 | QTDIR=/usr/$(get_libdir) \ |
291 | QTDIR=/usr/$(get_libdir) \ |
| 263 | QMAKE=/usr/bin/qmake \ |
292 | QMAKE=/usr/bin/qmake \ |
| 264 | QMAKE_CC=$(tc-getCC) \ |
293 | QMAKE_CC=$(tc-getCC) \ |
| 265 | QMAKE_CXX=$(tc-getCXX) \ |
294 | QMAKE_CXX=$(tc-getCXX) \ |
| 266 | QMAKE_LINK=$(tc-getCXX) \ |
295 | QMAKE_LINK=$(tc-getCXX) \ |
| … | |
… | |
| 269 | QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" \ |
298 | QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" \ |
| 270 | QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS}" \ |
299 | QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS}" \ |
| 271 | QMAKE_LFLAGS_RELEASE="${LDFLAGS}" \ |
300 | QMAKE_LFLAGS_RELEASE="${LDFLAGS}" \ |
| 272 | QMAKE_LFLAGS_DEBUG="${LDFLAGS}" \ |
301 | QMAKE_LFLAGS_DEBUG="${LDFLAGS}" \ |
| 273 | QMAKE_RPATH= \ |
302 | QMAKE_RPATH= \ |
| 274 | "${@}" >> ${LOGFILE} 2>&1 |
303 | QMAKE_STRIP= \ |
|
|
304 | "${projectfile}" "${@}" |
| 275 | |
305 | |
| 276 | local result=$? |
306 | eend $? |
| 277 | eend ${result} |
|
|
| 278 | |
307 | |
| 279 | # was qmake successful? |
308 | # was qmake successful? |
| 280 | if [[ ${result} -ne 0 ]]; then |
309 | if [[ $? -ne 0 ]]; then |
| 281 | echo |
310 | echo |
| 282 | eerror "Running qmake on \"${projprofile}\" has failed" |
311 | eerror "Running qmake on '${projectfile#${WORKDIR}/}' has failed!" |
|
|
312 | eerror "This shouldn't happen - please send a bug report to http://bugs.gentoo.org/" |
| 283 | echo |
313 | echo |
| 284 | eerror "This shouldn't happen - please send a bug report to bugs.gentoo.org" |
|
|
| 285 | echo |
|
|
| 286 | die "qmake failed on ${projprofile}" |
314 | die "qmake failed on '${projectfile}'." |
| 287 | fi |
315 | fi |
| 288 | |
316 | |
| 289 | return ${result} |
317 | return 0 |
| 290 | } |
318 | } |
| 291 | |
319 | |
|
|
320 | case ${EAPI:-0} in |
|
|
321 | 2) |
|
|
322 | EXPORT_FUNCTIONS pkg_setup src_prepare |
|
|
323 | ;; |
|
|
324 | 0|1) |
| 292 | EXPORT_FUNCTIONS pkg_setup |
325 | EXPORT_FUNCTIONS pkg_setup |
|
|
326 | ;; |
|
|
327 | esac |