/[gentoo-x86]/eclass/kde4-meta.eclass
Gentoo

Contents of /eclass/kde4-meta.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.50 - (show annotations) (download)
Fri Mar 11 19:50:52 2011 UTC (3 years, 6 months ago) by dilfridge
Branch: MAIN
Changes since 1.49: +26 -5 lines
<=gcc-4.3 and >=kde-4.6 dont mix well, so prevent the doomed attempt in the eclass

1 # Copyright 1999-2010 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/kde4-meta.eclass,v 1.49 2011/03/04 23:19:12 dilfridge Exp $
4 #
5 # @ECLASS: kde4-meta.eclass
6 # @MAINTAINER:
7 # kde@gentoo.org
8 # @BLURB: Eclass for writing "split" KDE packages.
9 # @DESCRIPTION:
10 # This eclass provides all necessary functions for writing split KDE ebuilds.
11 #
12 # You must define KMNAME to use this eclass, and do so before inheriting it. All other variables are optional.
13 # Do not include the same item in more than one of KMMODULE, KMMEXTRA, KMCOMPILEONLY, KMEXTRACTONLY.
14
15 inherit kde4-base toolchain-funcs versionator
16
17 case ${EAPI:-0} in
18 3)
19 KDEMETA_EXPF="pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm"
20 ;;
21 *)
22 KDEMETA_EXPF="pkg_pretend pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_postinst pkg_postrm"
23 ;;
24 esac
25 EXPORT_FUNCTIONS ${KDEMETA_EXPF}
26
27 [[ -z ${KMNAME} ]] && die "kde4-meta.eclass inherited but KMNAME not defined - broken ebuild"
28
29 # Add dependencies that all packages in a certain module share.
30 case ${KMNAME} in
31 kdebase|kdebase-apps|kdebase-workspace|kdebase-runtime|kdegraphics)
32 COMMONDEPEND+=" >=media-libs/qimageblitz-0.0.4"
33 ;;
34 kdepim|kdepim-runtime)
35 case ${PN} in
36 akregator|kaddressbook|kjots|kmail|knode|knotes|korganizer|ktimetracker)
37 IUSE+=" +kontact"
38 RDEPEND+=" kontact? ( $(add_kdebase_dep kontact) )"
39 ;;
40 esac
41 ;;
42 kdegames)
43 if [[ ${PN} != libkdegames ]]; then
44 COMMONDEPEND+=" $(add_kdebase_dep libkdegames)"
45 fi
46 ;;
47 koffice)
48 [[ ${PN} != koffice-data ]] && IUSE+=" debug"
49 RDEPEND+="
50 !app-office/${PN}:0
51 !app-office/koffice:0
52 !app-office/koffice-meta:0
53 "
54 if has openexr ${IUSE//+}; then
55 COMMONDEPEND+=" media-gfx/imagemagick[openexr?]"
56 else
57 COMMONDEPEND+=" media-gfx/imagemagick"
58 fi
59
60 COMMONDEPEND+="
61 dev-cpp/eigen:2
62 media-libs/fontconfig
63 media-libs/freetype:2
64 "
65 if [[ ${PN} != koffice-libs && ${PN} != koffice-data ]]; then
66 COMMONDEPEND+=" >=app-office/koffice-libs-${PV}:${SLOT}"
67 fi
68 ;;
69 esac
70
71 DEPEND+=" ${COMMONDEPEND}"
72 RDEPEND+=" ${COMMONDEPEND}"
73 unset COMMONDEPEND
74
75 debug-print "line ${LINENO} ${ECLASS}: DEPEND ${DEPEND} - after metapackage-specific dependencies"
76 debug-print "line ${LINENO} ${ECLASS}: RDEPEND ${RDEPEND} - after metapackage-specific dependencies"
77
78 # Useful to build kde4-meta style stuff from extragear/playground (plasmoids etc)
79 case ${BUILD_TYPE} in
80 live)
81 case ${KMNAME} in
82 extragear*|playground*)
83 ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}"
84 ESVN_PROJECT="${KMNAME}${ESVN_PROJECT_SUFFIX}"
85 ;;
86 esac
87 ;;
88 esac
89
90 # @ECLASS-VARIABLE: KMNAME
91 # @DESCRIPTION:
92 # Name of the parent-module (e.g. kdebase, kdepim, ...). You _must_ set it
93 # _before_ inheriting this eclass, (unlike the other parameters), since it's
94 # used to set $SRC_URI.
95
96 # @ECLASS-VARIABLE: KMMODULE
97 # @DESCRIPTION:
98 # Specify exactly one subdirectory of $KMNAME here. Defaults to $PN.
99 # The subdirectory listed here is treated exactly like items in $KMEXTRA.
100 #
101 # Example: The ebuild name of "kdebase/l10n" is kde-base/kdebase-l10n, because
102 # just 'l10n' would be too confusing. Hence it sets KMMODULE="l10n".
103
104 # @ECLASS-VARIABLE: KMNOMODULE
105 # @DESCRIPTION:
106 # If set to "true", $KMMODULE doesn't have to be defined.
107 #
108 # Example usage: If you're installing subdirectories of a package, like plugins,
109 # you mark the top subdirectory (containing the package) as $KMEXTRACTONLY, and
110 # set KMNOMODULE="true".
111 if [[ -z ${KMMODULE} ]] && [[ ${KMNOMODULE} != true ]]; then
112 KMMODULE=${PN}
113 fi
114
115 # @ECLASS-VARIABLE: KMEXTRA
116 # @DESCRIPTION:
117 # All subdirectories listed here will be extracted, compiled & installed.
118 # $KMMODULE is always added to $KMEXTRA.
119 # If KDE_HANDBOOK is 'always' or 'optional' and handbook USE-flag is set, and if this
120 # directory exists, then "doc/$KMMODULE" is added to $KMEXTRA. If there's additional
121 # documentation in different subdirectories, it should be added to KMEXTRA manually..
122
123 # @ECLASS-VARIABLE: KMCOMPILEONLY
124 # @DESCRIPTION:
125 # All subdirectories listed here will be extracted & compiled, but not installed.
126
127 # TODO: better formulation may be needed
128 # @ECLASS-VARIABLE: KMEXTRACTONLY
129 # @DESCRIPTION:
130 # All subdirectories listed here will be extracted, but neither compiled nor installed.
131 # This can be used to avoid compilation in a subdirectory of a directory in $KMMODULE or $KMEXTRA
132
133 # @ECLASS-VARIABLE: KMTARPARAMS
134 # @DESCRIPTION:
135 # Specify extra parameters to pass to tar, in kde4-meta_src_extract.
136 # '-xpf -j' are passed to tar by default.
137
138 # @FUNCTION: kde4-meta_pkg_pretend
139 # @DESCRIPTION:
140 # Currently only checks the gcc version.
141 kde4-meta_pkg_pretend() {
142 debug-print-function ${FUNCNAME} "$@"
143
144 slot_is_at_least 4.6 ${SLOT} && ( [[ $(gcc-major-version) -lt 4 ]] || \
145 ( [[ $(gcc-major-version) -eq 4 ]] && [[ $(gcc-minor-version) -le 3 ]] ) ) \
146 && die "Sorry, but gcc-4.3 and earlier wont work for KDE SC 4.6 (see bug 354837)."
147 }
148
149 # @FUNCTION: kde4-meta_pkg_setup
150 # @DESCRIPTION:
151 # Currently calls its equivalent in kde4-base.eclass(5) and checks the gcc version.
152 # Use this one in split ebuilds.
153 kde4-meta_pkg_setup() {
154 debug-print-function ${FUNCNAME} "$@"
155
156 has pkg_pretend ${KDEMETA_EXPF} || kde4-meta_pkg_pretend
157
158 kde4-base_pkg_setup
159 }
160
161 # @FUNCTION: kde4-meta_src_unpack
162 # @DESCRIPTION:
163 # This function unpacks the source for split ebuilds. See also
164 # kde4-meta-src_extract.
165 kde4-meta_src_unpack() {
166 debug-print-function ${FUNCNAME} "$@"
167
168 if [[ ${BUILD_TYPE} = live ]]; then
169 migrate_store_dir
170 S="${WORKDIR}/${P}"
171 mkdir -p "${S}"
172 ESVN_RESTRICT="export" subversion_src_unpack
173 subversion_wc_info
174 subversion_bootstrap
175 kde4-meta_src_extract
176 else
177 kde4-meta_src_extract
178 fi
179 }
180
181 # FIXME: the difference between kde4-meta_src_extract and kde4-meta_src_unpack?
182
183 # @FUNCTION: kde4-meta_src_extract
184 # @DESCRIPTION:
185 # A function to unpack the source for a split KDE ebuild.
186 # Also see KMMODULE, KMNOMODULE, KMEXTRA, KMCOMPILEONLY, KMEXTRACTONLY and
187 # KMTARPARAMS.
188 kde4-meta_src_extract() {
189 debug-print-function ${FUNCNAME} "$@"
190
191 if [[ ${BUILD_TYPE} = live ]]; then
192 local rsync_options subdir kmnamedir targetdir
193 # Export working copy to ${S}
194 einfo "Exporting parts of working copy to ${S}"
195 kde4-meta_create_extractlists
196
197 rsync_options="--group --links --owner --perms --quiet --exclude=.svn/"
198
199 # Copy ${KMNAME} non-recursively (toplevel files)
200 rsync ${rsync_options} "${ESVN_WC_PATH}"/${kmnamedir}* "${S}" \
201 || die "${ESVN}: can't export toplevel files to '${S}'."
202 # Copy cmake directory
203 if [[ -d "${ESVN_WC_PATH}/${kmnamedir}cmake" ]]; then
204 rsync --recursive ${rsync_options} "${ESVN_WC_PATH}/${kmnamedir}cmake" "${S}" \
205 || die "${ESVN}: can't export cmake files to '${S}'."
206 fi
207 # Copy all subdirectories
208 for subdir in $(__list_needed_subdirectories); do
209 targetdir=""
210 if [[ $subdir = doc/* && ! -e "$ESVN_WC_PATH/$kmnamedir$subdir" ]]; then
211 continue
212 fi
213
214 [[ ${subdir%/} = */* ]] && targetdir=${subdir%/} && targetdir=${targetdir%/*} && mkdir -p "${S}/${targetdir}"
215 rsync --recursive ${rsync_options} "${ESVN_WC_PATH}/${kmnamedir}${subdir%/}" "${S}/${targetdir}" \
216 || die "${ESVN}: can't export subdirectory '${subdir}' to '${S}/${targetdir}'."
217 done
218
219 if [[ ${KMNAME} = kdebase-runtime && ${PN} != kdebase-data ]]; then
220 sed -i -e '/^install(PROGRAMS[[:space:]]*[^[:space:]]*\/kde4[[:space:]]/s/^/#DONOTINSTALL /' \
221 "${S}"/CMakeLists.txt || die "Sed to exclude bin/kde4 failed"
222 fi
223 else
224 local abort tarball tarfile f extractlist moduleprefix postfix
225 case ${PV} in
226 4.[45].8[05] | 4.[45].9[023568])
227 # Block for normally packed upstream unstable snapshots
228 KMTARPARAMS+=" --bzip2" # bz2
229 postfix="bz2"
230 ;;
231 *)
232 KMTARPARAMS+=" --bzip2" # bz2
233 postfix="bz2"
234 ;;
235 esac
236 case ${KMNAME} in
237 kdebase-apps)
238 # kdebase/apps -> kdebase-apps
239 tarball="kdebase-${PV}.tar.${postfix}"
240 case ${PV} in
241 4.6.1)
242 ;;
243 *)
244 # Go one level deeper for kdebase-apps in tarballs
245 moduleprefix=apps/
246 KMTARPARAMS+=" --transform=s|apps/||"
247 ;;
248 esac
249 ;;
250 kdepim)
251 if [[ ${PV} == 4.5.93 ]] ; then
252 tarball="kdepim-4.6beta3.tar.${postfix}"
253 else
254 tarball="${KMNAME}-${PV}.tar.${postfix}"
255 fi
256 ;;
257 *)
258 # Create tarball name from module name (this is the default)
259 tarball="${KMNAME}-${PV}.tar.${postfix}"
260 ;;
261 esac
262
263 # Full path to source tarball
264 tarfile="${DISTDIR}/${tarball}"
265
266 # Detect real toplevel dir from tarball name - it will be used upon extraction
267 # and in __list_needed_subdirectories
268 topdir="${tarball%.tar.*}/"
269
270 ebegin "Unpacking parts of ${tarball} to ${WORKDIR}"
271
272 kde4-meta_create_extractlists
273
274 for f in cmake/ CMakeLists.txt ConfigureChecks.cmake config.h.cmake \
275 AUTHORS COPYING INSTALL README NEWS ChangeLog
276 do
277 extractlist+=" ${topdir}${moduleprefix}${f}"
278 done
279 extractlist+=" $(__list_needed_subdirectories)"
280
281 pushd "${WORKDIR}" > /dev/null
282 [[ -n ${KDE4_STRICTER} ]] && echo tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist}
283 if [[ ${I_KNOW_WHAT_I_AM_DOING} ]]; then
284 # to make the devs happy - bug 338397
285 tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist} || ewarn "tar extract command failed at least partially - continuing anyway"
286 else
287 tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist} 2> /dev/null || echo "tar extract command failed at least partially - continuing anyway"
288 fi
289
290 # Default $S is based on $P; rename the extracted directory to match $S if necessary
291 mv ${topdir} ${P} || die "Died while moving \"${topdir}\" to \"${P}\""
292
293 popd > /dev/null
294
295 eend $?
296
297 # We need to clear it here to make verification below work
298 unset moduleprefix
299
300 if [[ -n ${KDE4_STRICTER} ]]; then
301 for f in $(__list_needed_subdirectories fatal); do
302 if [[ ! -e "${S}/${f#*/}" ]]; then
303 eerror "'${f#*/}' is missing"
304 abort=true
305 fi
306 done
307 [[ -n ${abort} ]] && die "There were missing files."
308 fi
309
310 # We don't need it anymore
311 unset topdir
312 fi
313 }
314
315 # @FUNCTION: kde4-meta_create_extractlists
316 # @DESCRIPTION:
317 # Create lists of files and subdirectories to extract.
318 # Also see descriptions of KMMODULE, KMNOMODULE, KMEXTRA, KMCOMPILEONLY,
319 # KMEXTRACTONLY and KMTARPARAMS.
320 kde4-meta_create_extractlists() {
321 debug-print-function ${FUNCNAME} "$@"
322
323 # Add default handbook locations
324 # FIXME - legacy code - remove when 4.4.5 is gone or preferrably port 4.4.5.
325 if ! slot_is_at_least 4.5 ${SLOT} && has handbook ${IUSE//+} && use handbook && [[ -z ${KMNOMODULE} ]]; then
326 # We use the basename of $KMMODULE because $KMMODULE can contain
327 # the path to the module subdirectory.
328 KMEXTRA_NONFATAL+="
329 doc/${KMMODULE##*/}"
330 fi
331
332 # Add default handbook locations
333 if [[ -z ${KMNOMODULE} ]] && { [[ ${KDE_HANDBOOK} = always ]] || { [[ ${KDE_HANDBOOK} = optional ]] && use handbook; }; }; then
334 KMEXTRA_NONFATAL+=" doc/${KMMODULE##*/}"
335 fi
336
337 # Add some CMake-files to KMEXTRACTONLY.
338 # Note that this actually doesn't include KMEXTRA handling.
339 # In those cases you should care to add the relevant files to KMEXTRACTONLY
340 case ${KMNAME} in
341 kdebase)
342 case ${PV} in
343 4.6.1)
344 KMEXTRACTONLY+="
345 config-apps.h.cmake
346 ConfigureChecks.cmake"
347 ;;
348 *)
349 KMEXTRACTONLY+="
350 apps/config-apps.h.cmake
351 apps/ConfigureChecks.cmake"
352 ;;
353 esac
354 ;;
355 kdebase-apps)
356 KMEXTRACTONLY+="
357 config-apps.h.cmake
358 ConfigureChecks.cmake"
359 ;;
360 kdebase-runtime)
361 KMEXTRACTONLY+="
362 config-runtime.h.cmake"
363 ;;
364 kdebase-workspace)
365 KMEXTRACTONLY+="
366 config-unix.h.cmake
367 ConfigureChecks.cmake
368 config-workspace.h.cmake
369 config-X11.h.cmake
370 startkde.cmake
371 KDE4WorkspaceConfig.cmake.in"
372 ;;
373 kdegames)
374 if [[ ${PN} != libkdegames ]]; then
375 KMEXTRACTONLY+="
376 libkdegames/"
377 KMLOADLIBS="${KMLOADLIBS} libkdegames"
378 fi
379 ;;
380 kdepim)
381 if [[ ${PN} != libkdepim ]]; then
382 KMEXTRACTONLY+="
383 libkdepim/"
384 fi
385 KMEXTRACTONLY+="
386 config-enterprise.h.cmake
387 kleopatra/ConfigureChecks.cmake"
388 if slot_is_at_least 4.5 ${SLOT}; then
389 KMEXTRACTONLY+="
390 CTestCustom.cmake
391 kdepim-version.h.cmake"
392 else
393 KMEXTRACTONLY+="
394 kdepim-version.h"
395 fi
396 if has kontact ${IUSE//+} && use kontact; then
397 KMEXTRA+="
398 kontact/plugins/${PLUGINNAME:-${PN}}/"
399 fi
400 ;;
401 kdeutils)
402 KMEXTRACTONLY+="
403 kdeutils-version.h"
404 ;;
405 koffice)
406 KMEXTRACTONLY+="
407 filters/config-filters.h.cmake
408 "
409 case ${PV} in
410 2.0.*)
411 KMEXTRACTONLY+="
412 config-openctl.h.cmake
413 config-endian.h.cmake
414 config-openexr.h.cmake
415 config-opengl.h.cmake
416 config-prefix.h.cmake"
417 ;;
418 2.[12].*)
419 KMEXTRACTONLY+="
420 config-endian.h.cmake
421 config-openexr.h.cmake
422 config-opengl.h.cmake
423 config-prefix.h.cmake"
424 ;;
425 esac
426 ;;
427 esac
428 # Don't install cmake modules for split ebuilds, to avoid collisions.
429 case ${KMNAME} in
430 kdebase-runtime|kdebase-workspace|kdeedu|kdegames|kdegraphics)
431 case ${PN} in
432 libkdegames|libkdeedu|libkworkspace)
433 KMEXTRA+="
434 cmake/modules/"
435 ;;
436 *)
437 KMCOMPILEONLY+="
438 cmake/modules/"
439 ;;
440 esac
441 ;;
442 esac
443
444 debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME}: KMEXTRACTONLY ${KMEXTRACTONLY}"
445 }
446
447 __list_needed_subdirectories() {
448 local i j kmextra kmextra_expanded kmmodule_expanded kmcompileonly_expanded extractlist
449
450 # We expand KMEXTRA by adding CMakeLists.txt files
451 kmextra="${KMEXTRA}"
452 [[ ${1} != fatal ]] && kmextra+=" ${KMEXTRA_NONFATAL}"
453 for i in ${kmextra}; do
454 kmextra_expanded+=" ${i}"
455 j=$(dirname ${i})
456 while [[ ${j} != "." ]]; do
457 kmextra_expanded+=" ${j}/CMakeLists.txt";
458 j=$(dirname ${j})
459 done
460 done
461
462 # Expand KMMODULE
463 if [[ -n ${KMMODULE} ]]; then
464 kmmodule_expanded="${KMMODULE}"
465 j=$(dirname ${KMMODULE})
466 while [[ ${j} != "." ]]; do
467 kmmodule_expanded+=" ${j}/CMakeLists.txt";
468 j=$(dirname ${j})
469 done
470 fi
471
472 # Expand KMCOMPILEONLY
473 for i in ${KMCOMPILEONLY}; do
474 kmcompileonly_expanded+=" ${i}"
475 j=$(dirname ${i})
476 while [[ ${j} != "." ]]; do
477 kmcompileonly_expanded+=" ${j}/CMakeLists.txt";
478 j=$(dirname ${j})
479 done
480 done
481
482 debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmextra_expanded: ${kmextra_expanded}"
483 debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmmodule_expanded: ${kmmodule_expanded}"
484 debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmcompileonly_expanded: ${kmcompileonly_expanded}"
485
486 # Create final list of stuff to extract
487 # We append topdir only when specified (usually for tarballs)
488 for i in ${kmmodule_expanded} ${kmextra_expanded} ${kmcompileonly_expanded} \
489 ${KMEXTRACTONLY}
490 do
491 extractlist+=" ${topdir}${moduleprefix}${i}"
492 done
493
494 echo ${extractlist}
495 }
496
497 # @FUNCTION: kde4-meta_src_prepare
498 # @DESCRIPTION:
499 # Meta-package build system configuration handling - commenting out targets, etc..
500 kde4-meta_src_prepare() {
501 debug-print-function ${FUNCNAME} "$@"
502
503 kde4-meta_change_cmakelists
504 kde4-base_src_prepare
505 }
506
507 # FIXME: no comment here?
508 _change_cmakelists_parent_dirs() {
509 debug-print-function ${FUNCNAME} "$@"
510
511 local _olddir _dir
512 _dir="${S}"/${1}
513 until [[ ${_dir} == "${S}" ]]; do
514 _olddir=$(basename "${_dir}")
515 _dir=$(dirname "${_dir}")
516 debug-print "${LINENO}: processing ${_dir} CMakeLists.txt searching for ${_olddir}"
517 if [[ -f ${_dir}/CMakeLists.txt ]]; then
518 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" \
519 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" \
520 -i ${_dir}/CMakeLists.txt || die "${LINENO}: died in ${FUNCNAME} while processing ${_dir}"
521 fi
522 done
523 }
524
525 # @FUNCTION: kde4-meta_change_cmakelists
526 # @DESCRIPTION:
527 # Adjust CMakeLists.txt to comply to our splitting.
528 kde4-meta_change_cmakelists() {
529 debug-print-function ${FUNCNAME} "$@"
530
531 pushd "${S}" > /dev/null
532
533 comment_all_add_subdirectory ./
534
535 # Restore "add_subdirectory( cmake )" in ${S}/CMakeLists.txt
536 if [[ -f CMakeLists.txt ]]; then
537 sed -e '/add_subdirectory[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' \
538 -e '/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' \
539 -i CMakeLists.txt || die "${LINENO}: cmake sed died"
540 fi
541
542 if [[ -z ${KMNOMODULE} ]]; then
543 # Restore "add_subdirectory" in $KMMODULE subdirectories
544 find "${S}"/${KMMODULE} -name CMakeLists.txt -print0 | \
545 xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
546 die "${LINENO}: died in KMMODULE section"
547 _change_cmakelists_parent_dirs ${KMMODULE}
548 fi
549
550 local i
551
552 # KMEXTRACTONLY section - Some ebuilds need to comment out some subdirs in KMMODULE and they use KMEXTRACTONLY
553 for i in ${KMEXTRACTONLY}; do
554 if [[ -d ${i} && -f ${i}/../CMakeLists.txt ]]; then
555 sed -e "/([[:space:]]*$(basename $i)[[:space:]]*)/s/^/#DONOTCOMPILE /" \
556 -i ${i}/../CMakeLists.txt || \
557 die "${LINENO}: sed died while working in the KMEXTRACTONLY section while processing ${i}"
558 fi
559 done
560
561 # KMCOMPILEONLY
562 for i in ${KMCOMPILEONLY}; do
563 debug-print "${LINENO}: KMCOMPILEONLY, processing ${i}"
564 # Uncomment "add_subdirectory" instructions inside $KMCOMPILEONLY, then comment "install" instructions.
565 find "${S}"/${i} -name CMakeLists.txt -print0 | \
566 xargs -0 sed -i \
567 -e 's/^#DONOTCOMPILE //g' \
568 -e '/install(.*)/{s/^/#DONOTINSTALL /;}' \
569 -e '/^install(/,/)/{s/^/#DONOTINSTALL /;}' \
570 -e '/kde4_install_icons(.*)/{s/^/#DONOTINSTALL /;}' || \
571 die "${LINENO}: sed died in the KMCOMPILEONLY section while processing ${i}"
572 _change_cmakelists_parent_dirs ${i}
573 done
574
575 # KMEXTRA section
576 for i in ${KMEXTRA}; do
577 debug-print "${LINENO}: KMEXTRA section, processing ${i}"
578 find "${S}"/${i} -name CMakeLists.txt -print0 | \
579 xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
580 die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"
581 _change_cmakelists_parent_dirs ${i}
582 done
583 # KMEXTRA_NONFATAL section
584 for i in ${KMEXTRA_NONFATAL}; do
585 if [[ -d "${S}"/${i} ]]; then
586 find "${S}"/${i} -name CMakeLists.txt -print0 | \
587 xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
588 die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"
589 _change_cmakelists_parent_dirs ${i}
590 fi
591 done
592
593 case ${KMNAME} in
594 kdebase-workspace)
595 # COLLISION PROTECT section
596 # Install the startkde script just once, as a part of kde-base/kdebase-startkde,
597 # not as a part of every package.
598 if [[ ${PN} != kdebase-startkde && -f CMakeLists.txt ]]; then
599 # The startkde script moved to kdebase-workspace for KDE4 versions > 3.93.0.
600 sed -e '/startkde/s/^/#DONOTINSTALL /' \
601 -i CMakeLists.txt || die "${LINENO}: sed died in the kdebase-startkde collision prevention section"
602 fi
603 # Strip EXPORT feature section from workspace for KDE4 versions > 4.1.82
604 if [[ ${PN} != libkworkspace ]]; then
605 sed -e '/install(FILES ${CMAKE_CURRENT_BINARY_DIR}\/KDE4WorkspaceConfig.cmake/,/^[[:space:]]*FILE KDE4WorkspaceLibraryTargets.cmake )[[:space:]]*^/d' \
606 -i CMakeLists.txt || die "${LINENO}: sed died in kdebase-workspace strip config install and fix EXPORT section"
607 fi
608 ;;
609 kdebase-runtime)
610 # COLLISION PROTECT section
611 # Only install the kde4 script as part of kde-base/kdebase-data
612 if [[ ${PN} != kdebase-data && -f CMakeLists.txt ]]; then
613 sed -e '/^install(PROGRAMS[[:space:]]*[^[:space:]]*\/kde4[[:space:]]/s/^/#DONOTINSTALL /' \
614 -i CMakeLists.txt || die "Sed to exclude bin/kde4 failed"
615 fi
616 ;;
617 kdenetwork)
618 # Disable hardcoded kdepimlibs check
619 sed -e 's/find_package(KdepimLibs REQUIRED)/macro_optional_find_package(KdepimLibs)/' \
620 -i CMakeLists.txt || die "failed to disable hardcoded checks"
621 ;;
622 kdepim)
623 # Disable hardcoded checks
624 sed -r -e '/find_package\(KdepimLibs/s/REQUIRED//' \
625 -e '/find_package\((KdepimLibs|Boost|QGpgme|Akonadi|ZLIB|Strigi|SharedDesktopOntologies|Soprano|Nepomuk)/{/macro_optional_/!s/find/macro_optional_&/}' \
626 -e '/macro_log_feature\((Boost|QGPGME|Akonadi|ZLIB|STRIGI|SHAREDDESKTOPONTOLOGIES|Soprano|Nepomuk)_FOUND/s/ TRUE / FALSE /' \
627 -e '/if[[:space:]]*([[:space:]]*BUILD_.*)/s/^/#OVERRIDE /' \
628 -e '/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)/s/^/#OVERRIDE /' \
629 -i CMakeLists.txt || die "failed to disable hardcoded checks"
630 # Disable broken or redundant build logic
631 if ( has kontact ${IUSE//+} && use kontact ) || [[ ${PN} = kontact ]]; then
632 sed -e '/if[[:space:]]*([[:space:]]*BUILD_.*)/s/^/#OVERRIDE /' \
633 -e '/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)/s/^/#OVERRIDE /' \
634 -i kontact/plugins/CMakeLists.txt || die 'failed to override build logic'
635 fi
636 if ! slot_is_at_least 4.5 ${SLOT}; then
637 case ${PN} in
638 kalarm|kmailcvt|kontact|korganizer|korn)
639 sed -n -e '/qt4_generate_dbus_interface(.*org\.kde\.kmail\.\(kmail\|mailcomposer\)\.xml/p' \
640 -e '/add_custom_target(kmail_xml /,/)/p' \
641 -i kmail/CMakeLists.txt || die "uncommenting xml failed"
642 _change_cmakelists_parent_dirs kmail
643 ;;
644 esac
645 fi
646 ;;
647 kdewebdev)
648 # Disable hardcoded checks
649 sed -e 's/find_package(KdepimLibs REQUIRED)/macro_optional_find_package(KdepimLibs)/' \
650 -e 's/find_package(LibXml2 REQUIRED)/macro_optional_find_package(LibXml2)/' \
651 -e 's/find_package(LibXslt REQUIRED)/macro_optional_find_package(LibXslt)/' \
652 -e 's/find_package(Boost REQUIRED)/macro_optional_find_package(Boost)/' \
653 -i CMakeLists.txt || die "failed to disable hardcoded checks"
654 ;;
655 koffice)
656 # Prevent collisions
657 if [[ ${PN} != koffice-data ]]; then
658 sed -e '/install(.*FindKOfficeLibs.cmake/,/)/ d' \
659 -i cmake/modules/CMakeLists.txt || die "${LINENO}: sed died in collision prevention section"
660 sed -e '/install(.\+config-openexr\.h.\+)/d' \
661 -i CMakeLists.txt || die "${LINENO}: sed died in collision prevention section"
662 fi
663 # koffice 2.0
664 case ${PV} in
665 2.0.[1-9])
666 sed -i -n -e '1h;1!H;${g;s/install(.\+config-openexr.h.\+)//;p}' \
667 "${S}"/CMakeLists.txt || \
668 die "${LINENO}: sed died in collision prevention section"
669 ;;
670 *) ;;
671 esac
672 # koffice 2.1.[8-9][0-9] and 9999
673 case ${PV} in
674 2.1.8[0-9]|2.1.9[0-9]|9999)
675 sed -e '/^option(BUILD/s/ON/OFF/' \
676 -e '/^if(NOT BUILD_kchart/,/^endif(NOT BUILD_kchart/d' \
677 -e '/^if(BUILD_koreport/,/^endif(BUILD_koreport/d' \
678 -e 's/set(SHOULD_BUILD_F_OFFICE TRUE)/set(SHOULD_BUILD_F_OFFICE FALSE)/' \
679 -i "${S}"/CMakeLists.txt || die "sed died while fixing cmakelists"
680 if [[ ${PN} != koffice-data ]] && [[ ${PV} == 9999 ]]; then
681 sed -e '/config-opengl.h/d' \
682 -i "${S}"/CMakeLists.txt || die "sed died while fixing cmakelists"
683
684 fi
685 ;;
686 *) ;;
687 esac
688 esac
689
690 popd > /dev/null
691 }
692
693 # @FUNCTION: kde4-meta_src_configure
694 # @DESCRIPTION:
695 # Currently just calls its equivalent in kde4-base.eclass(5). Use this one in split
696 # ebuilds.
697 kde4-meta_src_configure() {
698 debug-print-function ${FUNCNAME} "$@"
699
700 # backwards-compatibility: make mycmakeargs an array, if it isn't already
701 if [[ $(declare -p mycmakeargs 2>&-) != "declare -a mycmakeargs="* ]]; then
702 mycmakeargs=(${mycmakeargs})
703 fi
704
705 # Set some cmake default values here (usually workarounds for automagic deps)
706 case ${KMNAME} in
707 kdewebdev)
708 mycmakeargs=(
709 -DWITH_KdepimLibs=OFF
710 -DWITH_LibXml2=OFF
711 -DWITH_LibXslt=OFF
712 -DWITH_Boost=OFF
713 -DWITH_LibTidy=OFF
714 "${mycmakeargs[@]}"
715 )
716 ;;
717 koffice)
718 case ${PV} in
719 2.1.8[0-9]|2.1.9[0-9]|9999)
720 if [[ ${PN} != "kchart" ]]; then
721 mycmakeargs=(
722 -DBUILD_koreport=OFF
723 "${mycmakeargs[@]}"
724 )
725 fi
726 ;;
727 esac
728 ;;
729 esac
730
731 kde4-base_src_configure
732 }
733
734 # @FUNCTION: kde4-meta_src_compile
735 # @DESCRIPTION:
736 # General function for compiling split KDE4 applications.
737 # Overrides kde4-base_src_compile.
738 kde4-meta_src_compile() {
739 debug-print-function ${FUNCNAME} "$@"
740
741 kde4-base_src_compile "$@"
742 }
743
744 # @FUNCTION: kde4-meta_src_test
745 # @DESCRIPTION:
746 # Currently just calls its equivalent in kde4-base.eclass(5) if
747 # I_KNOW_WHAT_I_AM_DOING is set. Use this in split ebuilds.
748 kde4-meta_src_test() {
749 debug-print-function $FUNCNAME "$@"
750
751 if [[ $I_KNOW_WHAT_I_AM_DOING ]]; then
752 kde4-base_src_test
753 else
754 einfo "Tests disabled"
755 fi
756 }
757
758 # @FUNCTION: kde4-meta_src_install
759 # @DESCRIPTION:
760 # Function for installing KDE4 split applications.
761 kde4-meta_src_install() {
762 debug-print-function $FUNCNAME "$@"
763
764 # Search ${S}/${KMMODULE} and install common documentation files found
765 local doc
766 for doc in "${S}/${KMMODULE}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
767 [[ -f "${doc}" ]] && [[ -s "${doc}" ]] && dodoc "${doc}"
768 done
769
770 kde4-base_src_install
771 }
772
773 # @FUNCTION: kde4-meta_pkg_postinst
774 # @DESCRIPTION:
775 # Invoke kbuildsycoca4.
776 kde4-meta_pkg_postinst() {
777 debug-print-function ${FUNCNAME} "$@"
778
779 kde4-base_pkg_postinst
780 }
781
782 # @FUNCTION: kde4-meta_pkg_postrm
783 # @DESCRIPTION:
784 # Currently just calls its equivalent in kde4-base.eclass(5). Use this in split
785 # ebuilds.
786 kde4-meta_pkg_postrm() {
787 debug-print-function ${FUNCNAME} "$@"
788
789 kde4-base_pkg_postrm
790 }

  ViewVC Help
Powered by ViewVC 1.1.20