dev-util/qbs: version bump
[gentoo.git] / eclass / kde4-meta.eclass
1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Id$
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 if [[ -z ${_KDE4_META_ECLASS} ]]; then
16 _KDE4_META_ECLASS=1
17
18 [[ -z ${KMNAME} ]] && die "kde4-meta.eclass inherited but KMNAME not defined - broken ebuild"
19
20 inherit kde4-base
21
22 KDEMETA_EXPF="pkg_setup src_unpack src_prepare src_configure src_compile src_test src_install pkg_preinst pkg_postinst pkg_postrm"
23 EXPORT_FUNCTIONS ${KDEMETA_EXPF}
24
25 # Add dependencies that all packages in a certain module share.
26 case ${KMNAME} in
27         kdepim|kdepim-runtime)
28                 case ${PN} in
29                         akregator|kaddressbook|kjots|kmail|knode|knotes|korganizer|ktimetracker)
30                                 IUSE+=" +kontact"
31                                 RDEPEND+=" kontact? ( $(add_kdebase_dep kontact) )"
32                                 ;;
33                 esac
34                 ;;
35 esac
36
37 DEPEND+=" ${COMMONDEPEND}"
38 RDEPEND+=" ${COMMONDEPEND}"
39 unset COMMONDEPEND
40
41 debug-print "line ${LINENO} ${ECLASS}: DEPEND ${DEPEND} - after metapackage-specific dependencies"
42 debug-print "line ${LINENO} ${ECLASS}: RDEPEND ${RDEPEND} - after metapackage-specific dependencies"
43
44 # Useful to build kde4-meta style stuff from extragear/playground (plasmoids etc)
45 case ${KDE_BUILD_TYPE} in
46         live)
47                 if [[ ${KDE_SCM} == svn ]]; then
48                         case ${KMNAME} in
49                                 extragear*|playground*)
50                                         ESVN_REPO_URI="${ESVN_MIRROR}/trunk/${KMNAME}"
51                                         ESVN_PROJECT="${KMNAME}${ESVN_PROJECT_SUFFIX}"
52                                         ;;
53                         esac
54                 fi
55                 ;;
56 esac
57
58 # @ECLASS-VARIABLE: KMNAME
59 # @DESCRIPTION:
60 # Name of the parent-module (e.g. kdebase, kdepim, ...). You _must_ set it
61 # _before_ inheriting this eclass, (unlike the other parameters), since it's
62 # used to set $SRC_URI.
63
64 # @ECLASS-VARIABLE: KMMODULE
65 # @DESCRIPTION:
66 # Specify exactly one subdirectory of $KMNAME here. Defaults to $PN.
67 # The subdirectory listed here is treated exactly like items in $KMEXTRA.
68 #
69 # Example: The ebuild name of "kdebase/l10n" is kde-base/kdebase-l10n, because
70 # just 'l10n' would be too confusing. Hence it sets KMMODULE="l10n".
71
72 # @ECLASS-VARIABLE: KMNOMODULE
73 # @DESCRIPTION:
74 # If set to "true", $KMMODULE doesn't have to be defined.
75 #
76 # Example usage: If you're installing subdirectories of a package, like plugins,
77 # you mark the top subdirectory (containing the package) as $KMEXTRACTONLY, and
78 # set KMNOMODULE="true".
79 if [[ -z ${KMMODULE} ]] && [[ ${KMNOMODULE} != true ]]; then
80         KMMODULE=${PN}
81 fi
82
83 # @ECLASS-VARIABLE: KMEXTRA
84 # @DESCRIPTION:
85 # All subdirectories listed here will be extracted, compiled & installed.
86 # $KMMODULE is always added to $KMEXTRA.
87 # If KDE_HANDBOOK is 'always' or 'optional' and handbook USE-flag is set, and if this
88 # directory exists, then "doc/$KMMODULE" is added to $KMEXTRA. If there's additional
89 # documentation in different subdirectories, it should be added to KMEXTRA manually..
90
91 # @ECLASS-VARIABLE: KMCOMPILEONLY
92 # @DESCRIPTION:
93 # All subdirectories listed here will be extracted & compiled, but not installed.
94
95 # TODO: better formulation may be needed
96 # @ECLASS-VARIABLE: KMEXTRACTONLY
97 # @DESCRIPTION:
98 # All subdirectories listed here will be extracted, but neither compiled nor installed.
99 # This can be used to avoid compilation in a subdirectory of a directory in $KMMODULE or $KMEXTRA
100
101 # @ECLASS-VARIABLE: KMTARPARAMS
102 # @DESCRIPTION:
103 # Specify extra parameters to pass to tar, in kde4-meta_src_extract.
104 # '-xpf -j' are passed to tar by default.
105
106 # @FUNCTION: kde4-meta_pkg_setup
107 # @DESCRIPTION:
108 # Currently calls its equivalent in kde4-base.eclass(5) and checks the gcc version.
109 # Use this one in split ebuilds.
110 kde4-meta_pkg_setup() {
111         debug-print-function ${FUNCNAME} "$@"
112
113         kde4-base_pkg_setup
114 }
115
116 # @FUNCTION: kde4-meta_src_unpack
117 # @DESCRIPTION:
118 # This function unpacks the source for split ebuilds.
119 # Further more is processed in kde4-meta_src_extract
120 kde4-meta_src_unpack() {
121         debug-print-function ${FUNCNAME} "$@"
122
123         if [[ ${KDE_BUILD_TYPE} = live ]]; then
124                 case "${KDE_SCM}" in
125                         svn)
126                                 S="${WORKDIR}/${P}"
127                                 mkdir -p "${S}"
128                                 ESVN_RESTRICT="export" subversion_src_unpack
129                                 subversion_wc_info
130                                 subversion_bootstrap
131                                 ;;
132                         git)
133                                 git-r3_src_unpack
134                                 ;;
135                 esac
136         fi
137         kde4-meta_src_extract
138 }
139
140 # @FUNCTION: kde4-meta_src_extract
141 # @DESCRIPTION:
142 # A function to extract the source for a split KDE ebuild.
143 # Also see KMMODULE, KMNOMODULE, KMEXTRA, KMCOMPILEONLY, KMEXTRACTONLY and
144 # KMTARPARAMS.
145 kde4-meta_src_extract() {
146         debug-print-function ${FUNCNAME} "$@"
147
148         if [[ ${KDE_BUILD_TYPE} = live ]]; then
149                 # Export working copy to ${S}
150                 einfo "Exporting parts of working copy to ${S}"
151                 kde4-meta_create_extractlists
152
153                 case ${KDE_SCM} in
154                         svn)
155                                 local rsync_options subdir targetdir wc_path escm
156
157                                 rsync_options="--group --links --owner --perms --quiet --exclude=.svn/ --exclude=.git/"
158                                 wc_path="${ESVN_WC_PATH}"
159                                 escm="{ESVN}"
160
161                                 # Copy ${KMNAME} non-recursively (toplevel files)
162                                 rsync ${rsync_options} "${wc_path}"/* "${S}" \
163                                         || die "${escm}: can't export toplevel files to '${S}'."
164                                 # Copy cmake directory
165                                 if [[ -d "${wc_path}/cmake" ]]; then
166                                         rsync --recursive ${rsync_options} "${wc_path}/cmake" "${S}" \
167                                                 || die "${escm}: can't export cmake files to '${S}'."
168                                 fi
169                                 # Copy all subdirectories
170                                 for subdir in $(_list_needed_subdirectories); do
171                                         targetdir=""
172                                         if [[ $subdir = doc/* && ! -e "$wc_path/$subdir" ]]; then
173                                                 continue
174                                         fi
175
176                                         [[ ${subdir%/} = */* ]] && targetdir=${subdir%/} && targetdir=${targetdir%/*} && mkdir -p "${S}/${targetdir}"
177                                         rsync --recursive ${rsync_options} "${wc_path}/${subdir%/}" "${S}/${targetdir}" \
178                                                 || die "${escm}: can't export subdirectory '${subdir}' to '${S}/${targetdir}'."
179                                 done
180                                 ;;
181                 esac
182         else
183                 local abort tarball tarfile f extractlist postfix
184
185                 if [[ ${PV} =~ 4.4.11 ]]; then
186                         postfix="bz2"
187                         KMTARPARAMS+=" --bzip2"
188                 else
189                         postfix="xz"
190                         KMTARPARAMS+=" --xz"
191                 fi
192
193                 tarball="${KMNAME}-${PV}.tar.${postfix}"
194
195                 # Full path to source tarball
196                 tarfile="${DISTDIR}/${tarball}"
197
198                 # Detect real toplevel dir from tarball name - it will be used upon extraction
199                 # and in _list_needed_subdirectories
200                 topdir="${tarball%.tar.*}/"
201
202                 ebegin "Unpacking parts of ${tarball} to ${WORKDIR}"
203
204                 kde4-meta_create_extractlists
205
206                 for f in cmake/ CMakeLists.txt ConfigureChecks.cmake config.h.cmake
207                 do
208                         extractlist+=" ${topdir}${f}"
209                 done
210                 extractlist+=" $(_list_needed_subdirectories)"
211
212                 pushd "${WORKDIR}" > /dev/null
213
214                 # @ECLASS-VARIABLE: KDE4_STRICTER
215                 # @DESCRIPTION:
216                 # Print out all issues found executing tar / kmextract files
217                 # Set on if you want to find issues in kde-base ebuild unpack sequences
218                 [[ -n ${KDE4_STRICTER} ]] && echo 'tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist}'
219                 tar -xpf "${tarfile}" ${KMTARPARAMS} ${extractlist} 2> /dev/null || echo "tar extract command failed at least partially - continuing anyway"
220
221                 # Default $S is based on $P; rename the extracted directory to match $S if necessary
222                 if [[ ${KMNAME} != ${PN} ]]; then
223                         mv ${topdir} ${P} || die "Died while moving \"${topdir}\" to \"${P}\""
224                 fi
225
226                 popd > /dev/null
227
228                 eend $?
229
230                 if [[ -n ${KDE4_STRICTER} ]]; then
231                         for f in $(_list_needed_subdirectories fatal); do
232                                 if [[ ! -e ${S}/${f#*/} ]]; then
233                                         eerror "'${f#*/}' is missing"
234                                         abort=true
235                                 fi
236                         done
237                         [[ -n ${abort} ]] && die "There were missing files."
238                 fi
239
240                 # We don't need it anymore
241                 unset topdir
242         fi
243 }
244
245 # @FUNCTION: kde4-meta_create_extractlists
246 # @DESCRIPTION:
247 # Create lists of files and subdirectories to extract.
248 # Also see descriptions of KMMODULE, KMNOMODULE, KMEXTRA, KMCOMPILEONLY,
249 # KMEXTRACTONLY and KMTARPARAMS.
250 kde4-meta_create_extractlists() {
251         debug-print-function ${FUNCNAME} "$@"
252
253         # Add default handbook locations
254         # FIXME - legacy code - remove when 4.4.5 is gone or preferrably port 4.4.5.
255         if [[ $(get_kde_version) < 4.5 ]] && use_if_iuse handbook && [[ -z ${KMNOMODULE} ]]; then
256                 # We use the basename of $KMMODULE because $KMMODULE can contain
257                 # the path to the module subdirectory.
258                 KMEXTRA_NONFATAL+="
259                         doc/${KMMODULE##*/}"
260         fi
261
262         # Add default handbook locations
263         if [[ -z ${KMNOMODULE} ]] && ( [[ ${KDE_HANDBOOK} == always ]] || ( [[ ${KDE_HANDBOOK} == optional ]] && use handbook ) ); then
264                 KMEXTRA_NONFATAL+=" doc/${KMMODULE##*/}"
265         fi
266
267         # Add some CMake-files to KMEXTRACTONLY.
268         # Note that this actually doesn't include KMEXTRA handling.
269         # In those cases you should care to add the relevant files to KMEXTRACTONLY
270         case ${KMNAME} in
271                 kde-baseapps)
272                         KMEXTRACTONLY+="
273                                 CTestConfig.cmake
274                                 config-apps.h.cmake
275                                 ConfigureChecks.cmake"
276                         ;;
277                 kde-runtime)
278                         KMEXTRACTONLY+="
279                                 cmake/modules/
280                                 CTestConfig.cmake
281                                 config-runtime.h.cmake"
282                         ;;
283                 kde-workspace)
284                         KMEXTRACTONLY+="
285                                 cmake/modules/
286                                 config-unix.h.cmake
287                                 ConfigureChecks.cmake
288                                 config-workspace.h.cmake
289                                 config-X11.h.cmake
290                                 startkde.cmake
291                                 KDE4WorkspaceConfig.cmake.in"
292                         ;;
293                 kdepim)
294                         if [[ ${PN} != libkdepim ]]; then
295                                 KMEXTRACTONLY+="
296                                         libkdepim/"
297                         fi
298                         KMEXTRACTONLY+="
299                                 config-enterprise.h.cmake
300                                 kleopatra/ConfigureChecks.cmake
301                                 CTestCustom.cmake
302                                 kdepim-version.h.cmake
303                                 kdepim-version.h"
304                         if use_if_iuse kontact; then
305                                 KMEXTRA+="
306                                         kontact/plugins/${PLUGINNAME:-${PN}}/"
307                         fi
308                         ;;
309         esac
310
311         debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME}: KMEXTRACTONLY ${KMEXTRACTONLY}"
312 }
313
314 _list_needed_subdirectories() {
315         local i j kmextra kmextra_expanded kmmodule_expanded kmcompileonly_expanded extractlist
316
317         # We expand KMEXTRA by adding CMakeLists.txt files
318         kmextra="${KMEXTRA}"
319         [[ ${1} != fatal ]] && kmextra+=" ${KMEXTRA_NONFATAL}"
320         for i in ${kmextra}; do
321                 kmextra_expanded+=" ${i}"
322                 j=$(dirname ${i})
323                 while [[ ${j} != "." ]]; do
324                         kmextra_expanded+=" ${j}/CMakeLists.txt";
325                         j=$(dirname ${j})
326                 done
327         done
328
329         # Expand KMMODULE
330         if [[ -n ${KMMODULE} ]]; then
331                 kmmodule_expanded="${KMMODULE}"
332                 j=$(dirname ${KMMODULE})
333                 while [[ ${j} != "." ]]; do
334                         kmmodule_expanded+=" ${j}/CMakeLists.txt";
335                         j=$(dirname ${j})
336                 done
337         fi
338
339         # Expand KMCOMPILEONLY
340         for i in ${KMCOMPILEONLY}; do
341                 kmcompileonly_expanded+=" ${i}"
342                 j=$(dirname ${i})
343                 while [[ ${j} != "." ]]; do
344                         kmcompileonly_expanded+=" ${j}/CMakeLists.txt";
345                         j=$(dirname ${j})
346                 done
347         done
348
349         debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmextra_expanded: ${kmextra_expanded}"
350         debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmmodule_expanded:  ${kmmodule_expanded}"
351         debug-print "line ${LINENO} ${ECLASS} ${FUNCNAME} - kmcompileonly_expanded: ${kmcompileonly_expanded}"
352
353         # Create final list of stuff to extract
354         # We append topdir only when specified (usually for tarballs)
355         for i in ${kmmodule_expanded} ${kmextra_expanded} ${kmcompileonly_expanded} \
356                 ${KMEXTRACTONLY}
357         do
358                 extractlist+=" ${topdir}${i}"
359         done
360
361         echo ${extractlist}
362 }
363
364 # @FUNCTION: kde4-meta_src_prepare
365 # @DESCRIPTION:
366 # Meta-package build system configuration handling - commenting out targets, etc..
367 kde4-meta_src_prepare() {
368         debug-print-function ${FUNCNAME} "$@"
369
370         kde4-meta_change_cmakelists
371         kde4-base_src_prepare
372 }
373
374 # @FUNCTION: _change_cmakelists_parent_dirs
375 # @DESCRIPTION:
376 # Adjust CMakeLists.txt to shadow subdirectories
377 # that are not required for the build.
378 _change_cmakelists_parent_dirs() {
379         debug-print-function ${FUNCNAME} "$@"
380
381         local _olddir _dir
382         _dir="${S}"/${1}
383         until [[ ${_dir} == ${S} ]]; do
384                 _olddir=$(basename "${_dir}")
385                 _dir=$(dirname "${_dir}")
386                 debug-print "${LINENO}: processing ${_dir} CMakeLists.txt searching for ${_olddir}"
387                 if [[ -f ${_dir}/CMakeLists.txt ]]; then
388                         sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" \
389                                 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${_olddir}[[:space:]]*)/s/#DONOTCOMPILE //g" \
390                                 -i ${_dir}/CMakeLists.txt || die "${LINENO}: died in ${FUNCNAME} while processing ${_dir}"
391                 fi
392         done
393 }
394
395 # @FUNCTION: kde4-meta_change_cmakelists
396 # @DESCRIPTION:
397 # Adjust CMakeLists.txt to comply to our splitting.
398 kde4-meta_change_cmakelists() {
399         debug-print-function ${FUNCNAME} "$@"
400
401         pushd "${S}" > /dev/null
402
403         comment_all_add_subdirectory ./
404
405         # Restore "add_subdirectory( cmake )" in ${S}/CMakeLists.txt
406         if [[ -f CMakeLists.txt ]]; then
407                 sed -e '/add_subdirectory[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' \
408                         -e '/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*cmake[[:space:]]*)/s/^#DONOTCOMPILE //' \
409                         -i CMakeLists.txt || die "${LINENO}: cmake sed died"
410         fi
411
412         # Restore "add_subdirectory( ${ ..." (this is done in kdesdk)
413         if [[ -f CMakeLists.txt ]]; then
414                 sed -e '/add_subdirectory[[:space:]]*([[:space:]]*\${/s/^#DONOTCOMPILE //' \
415                         -e '/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*\${/s/^#DONOTCOMPILE //' \
416                         -i CMakeLists.txt || die "${LINENO}: cmake sed died"
417         fi
418
419         if [[ -z ${KMNOMODULE} ]]; then
420                 # Restore "add_subdirectory" in $KMMODULE subdirectories
421                 find "${S}"/${KMMODULE} -name CMakeLists.txt -print0 | \
422                         xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
423                                 die "${LINENO}: died in KMMODULE section"
424                 _change_cmakelists_parent_dirs ${KMMODULE}
425         fi
426
427         local i
428
429         # KMEXTRACTONLY section - Some ebuilds need to comment out some subdirs in KMMODULE and they use KMEXTRACTONLY
430         for i in ${KMEXTRACTONLY}; do
431                 if [[ -d ${i} && -f ${i}/../CMakeLists.txt ]]; then
432                         sed -e "/([[:space:]]*$(basename $i)[[:space:]]*)/s/^/#DONOTCOMPILE /" \
433                                 -i ${i}/../CMakeLists.txt || \
434                                 die "${LINENO}: sed died while working in the KMEXTRACTONLY section while processing ${i}"
435                 fi
436         done
437
438         # KMCOMPILEONLY
439         for i in ${KMCOMPILEONLY}; do
440                 debug-print "${LINENO}: KMCOMPILEONLY, processing ${i}"
441                 # Uncomment "add_subdirectory" instructions inside $KMCOMPILEONLY, then comment "install" instructions.
442                 find "${S}"/${i} -name CMakeLists.txt -print0 | \
443                         xargs -0 sed -i \
444                                 -e 's/^#DONOTCOMPILE //g' \
445                                 -e '/install(.*)/I{s/^/#DONOTINSTALL /;}' \
446                                 -e '/^install(/,/)/I{s/^/#DONOTINSTALL /;}' \
447                                 -e '/kde4_install_icons(.*)/I{s/^/#DONOTINSTALL /;}' || \
448                                 die "${LINENO}: sed died in the KMCOMPILEONLY section while processing ${i}"
449                 _change_cmakelists_parent_dirs ${i}
450         done
451
452         # KMEXTRA section
453         for i in ${KMEXTRA}; do
454                 debug-print "${LINENO}: KMEXTRA section, processing ${i}"
455                 find "${S}"/${i} -name CMakeLists.txt -print0 | \
456                         xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
457                         die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"
458                 _change_cmakelists_parent_dirs ${i}
459         done
460         # KMEXTRA_NONFATAL section
461         for i in ${KMEXTRA_NONFATAL}; do
462                 if [[ -d "${S}"/${i} ]]; then
463                         find "${S}"/${i} -name CMakeLists.txt -print0 | \
464                                 xargs -0 sed -i -e 's/^#DONOTCOMPILE //g' || \
465                                         die "${LINENO}: sed died uncommenting add_subdirectory instructions in KMEXTRA section while processing ${i}"
466                         _change_cmakelists_parent_dirs ${i}
467                 fi
468         done
469
470         case ${KMNAME} in
471                 kde-workspace)
472                         # COLLISION PROTECT section
473                         # Install the startkde script just once, as a part of kde-base/kdebase-startkde,
474                         # not as a part of every package.
475                         if [[ ${PN} != kdebase-startkde && -f CMakeLists.txt ]]; then
476                                 # The startkde script moved to kdebase-workspace for KDE4 versions > 3.93.0.
477                                 sed -e '/startkde/s/^/#DONOTINSTALL /' \
478                                         -i CMakeLists.txt || die "${LINENO}: sed died in the kdebase-startkde collision prevention section"
479                         fi
480                         # Remove workspace target prefix in order to get direct linking to workspace libs
481                         sed -e '/set(KDE4WORKSPACE_TARGET_PREFIX/s/^/#OVERRIDE /' \
482                                 -i CMakeLists.txt || die "${LINENO}: sed died in KDE4WORKSPACE_TARGET_PREFIX removal section"
483                         # Strip EXPORT feature section from workspace for KDE4 versions > 4.1.82
484                         if [[ ${PN} != libkworkspace ]]; then
485                                 sed -e '/install(FILES ${CMAKE_CURRENT_BINARY_DIR}\/KDE4WorkspaceConfig.cmake/,/^[[:space:]]*FILE KDE4WorkspaceLibraryTargets.cmake )[[:space:]]*^/d' \
486                                         -i CMakeLists.txt || die "${LINENO}: sed died in kde-workspace strip config install and fix EXPORT section"
487                         fi
488                         # <KDE/4.11
489                         if [[ ${PN} != plasma-workspace ]]; then
490                                 sed -e '/KActivities/s/REQUIRED//' \
491                                         -i CMakeLists.txt || die "${LINENO}: sed died in kde-workspace dep reduction section"
492                         fi
493                         sed -e '/QImageBlitz/s/REQUIRED//' \
494                                 -i CMakeLists.txt || die "${LINENO}: sed died in kde-workspace dep reduction section 2"
495
496                         # >=KDE/4.11
497                         sed -e 's/TYPE REQUIRED/TYPE OPTIONAL/' -e 's/XCB REQUIRED/XCB/' -e 's/X11 REQUIRED/X11/' \
498                                 -e 's/message(FATAL_ERROR/message(/' -i CMakeLists.txt \
499                                 || die "${LINENO}: sed died in kde-workspace dep reduction section"
500                         if [[ "${PN}" != "kwin" ]]; then
501                                 sed -i -e "/^    macro_log_feature(OPENGL_OR_ES_FOUND/s/TRUE/FALSE/" \
502                                         "${S}"/CMakeLists.txt || die "${LINENO}: sed died removing kde-workspace opengl dependency"
503                         fi
504                         ;;
505                 kde-runtime)
506                         sed -e 's/TYPE REQUIRED/TYPE OPTIONAL/' -e '/LibGcrypt/s/REQUIRED//' -i CMakeLists.txt \
507                                 || die "${LINENO}: sed died in kde-runtime dep reduction section"
508
509                         # COLLISION PROTECT section
510                         # Only install the kde4 script as part of kde-base/kdebase-data
511                         if [[ ${PN} != kdebase-data && -f CMakeLists.txt ]]; then
512                                 sed -e '/^install(PROGRAMS[[:space:]]*[^[:space:]]*\/kde4[[:space:]]/s/^/#DONOTINSTALL /' \
513                                         -i CMakeLists.txt || die "Sed to exclude bin/kde4 failed"
514                         fi
515                         ;;
516                 kdenetwork)
517                         # Disable hardcoded kdepimlibs check
518                         sed -e 's/find_package(KdepimLibs REQUIRED)/macro_optional_find_package(KdepimLibs)/' \
519                                 -i CMakeLists.txt || die "failed to disable hardcoded checks"
520                         ;;
521                 kdepim)
522                         # Disable hardcoded checks
523                         sed -r -e 's/TYPE REQUIRED/TYPE OPTIONAL/' -e '/find_package\(KdepimLibs/s/REQUIRED//' \
524                                 -e '/find_package\((KdepimLibs|Boost|QGpgme|Akonadi|ZLIB|Strigi|SharedDesktopOntologies|Soprano|Nepomuk)/{/macro_optional_/!s/find/macro_optional_&/}' \
525                                 -e '/macro_log_feature\((Boost|QGPGME|Akonadi|ZLIB|STRIGI|SHAREDDESKTOPONTOLOGIES|Soprano|Nepomuk)_FOUND/s/ TRUE / FALSE /' \
526                                 -e 's/if[[:space:]]*([[:space:]]*BUILD_.*)[[:space:]]*/if(1) # &/' \
527                                 -e 's/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)[[:space:]]*$/if(1) # &/' \
528                                 -i CMakeLists.txt || die "failed to disable hardcoded checks"
529                         # Disable broken or redundant build logic
530                         if use_if_iuse kontact || [[ ${PN} = kontact ]]; then
531                                 sed -e 's/if[[:space:]]*([[:space:]]*BUILD_.*)[[:space:]]*$/if(1) # &/' \
532                                         -e 's/if[[:space:]]*([[:space:]]*[[:alnum:]]*_FOUND[[:space:]]*)[[:space:]]*$/if(1) # &/' \
533                                         -i kontact/plugins/CMakeLists.txt || die 'failed to override build logic'
534                         fi
535                         case ${PV} in
536                                 4.4*)
537                                         case ${PN} in
538                                                 kalarm|kmailcvt|kontact|korganizer|korn)
539                                                         sed -n -e '/qt4_generate_dbus_interface(.*org\.kde\.kmail\.\(kmail\|mailcomposer\)\.xml/p' \
540                                                                 -e '/add_custom_target(kmail_xml /,/)/p' \
541                                                                 -i kmail/CMakeLists.txt || die "uncommenting xml failed"
542                                                         _change_cmakelists_parent_dirs kmail
543                                                         ;;
544                                         esac
545                                         ;;
546                         esac
547                         ;;
548         esac
549
550         popd > /dev/null
551 }
552
553 # @FUNCTION: kde4-meta_src_configure
554 # @DESCRIPTION:
555 # Currently just calls its equivalent in kde4-base.eclass(5). Use this one in split
556 # ebuilds.
557 kde4-meta_src_configure() {
558         debug-print-function ${FUNCNAME} "$@"
559
560         kde4-base_src_configure
561 }
562
563 # @FUNCTION: kde4-meta_src_compile
564 # @DESCRIPTION:
565 # General function for compiling split KDE4 applications.
566 # Overrides kde4-base_src_compile.
567 kde4-meta_src_compile() {
568         debug-print-function ${FUNCNAME} "$@"
569
570         kde4-base_src_compile "$@"
571 }
572
573 # @FUNCTION: kde4-meta_src_test
574 # @DESCRIPTION:
575 # Currently just calls its equivalent in kde4-base.eclass(5) if
576 # I_KNOW_WHAT_I_AM_DOING is set. Use this in split ebuilds.
577 kde4-meta_src_test() {
578         debug-print-function ${FUNCNAME} "$@"
579
580         if [[ $I_KNOW_WHAT_I_AM_DOING ]]; then
581                 kde4-base_src_test
582         else
583                 einfo "Tests disabled"
584         fi
585 }
586
587 # @FUNCTION: kde4-meta_src_install
588 # @DESCRIPTION:
589 # Function for installing KDE4 split applications.
590 kde4-meta_src_install() {
591         debug-print-function ${FUNCNAME} "$@"
592
593         # Search ${S}/${KMMODULE} and install common documentation files found
594         local doc
595         for doc in "${S}/${KMMODULE}"/{AUTHORS,CHANGELOG,ChangeLog*,README*,NEWS,TODO,HACKING}; do
596                 [[ -f "${doc}" ]] && [[ -s "${doc}" ]] && dodoc "${doc}"
597         done
598
599         kde4-base_src_install
600 }
601
602 # @FUNCTION: kde4-meta_pkg_preinst
603 # @DESCRIPTION:
604 # Invoke its equivalent in kde4-base.eclass.
605 kde4-meta_pkg_preinst() {
606         debug-print-function ${FUNCNAME} "$@"
607
608         kde4-base_pkg_preinst
609 }
610
611 # @FUNCTION: kde4-meta_pkg_postinst
612 # @DESCRIPTION:
613 # Invoke kbuildsycoca4.
614 kde4-meta_pkg_postinst() {
615         debug-print-function ${FUNCNAME} "$@"
616
617         kde4-base_pkg_postinst
618 }
619
620 # @FUNCTION: kde4-meta_pkg_postrm
621 # @DESCRIPTION:
622 # Currently just calls its equivalent in kde4-base.eclass(5). Use this in split
623 # ebuilds.
624 kde4-meta_pkg_postrm() {
625         debug-print-function ${FUNCNAME} "$@"
626
627         kde4-base_pkg_postrm
628 }
629
630 fi