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

Contents of /eclass/kde4-functions.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.12 - (hide annotations) (download)
Tue Feb 10 20:07:24 2009 UTC (5 years, 7 months ago) by scarabeus
Branch: MAIN
Changes since 1.11: +35 -37 lines
Make NEED_KDE=none packages pick correct kdedir :] Fixed thanks to Tomáš Caithaml and pva for helping with this. Per bug #257616.

1 ingmar 1.1 # Copyright 1999-2008 Gentoo Foundation
2     # Distributed under the terms of the GNU General Public License v2
3 scarabeus 1.12 # $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.11 2009/01/12 19:40:34 scarabeus Exp $
4 ingmar 1.1
5     # @ECLASS: kde4-functions.eclass
6     # @MAINTAINER:
7     # kde@gentoo.org
8 scarabeus 1.10 # @BLURB: Common ebuild functions for KDE 4 packages
9 ingmar 1.1 # @DESCRIPTION:
10     # This eclass contains all functions shared by the different eclasses,
11 scarabeus 1.10 # for KDE 4 ebuilds.
12    
13     # @ECLASS-VARIABLE: EAPI
14     # @DESCRIPTION:
15     # By default kde eclass wants eapi 2 which might be redefinable.
16     case ${EAPI} in
17     2) : ;;
18     *) die "No way! EAPI older than 2 is not supported." ;;
19     esac
20 ingmar 1.1
21     # @ECLASS-VARIABLE: KDEBASE
22     # @DESCRIPTION:
23     # This gets set to a non-zero value when a package is considered a kde or
24     # koffice ebuild.
25    
26 scarabeus 1.10 if [[ $CATEGORY = kde-base ]]; then
27 ingmar 1.1 debug-print "${ECLASS}: KDEBASE ebuild recognized"
28 scarabeus 1.10 KDEBASE=kde-base
29 ingmar 1.1 fi
30    
31     # is this a koffice ebuild?
32 scarabeus 1.10 if [[ $KMNAME = koffice || $PN = koffice ]]; then
33 ingmar 1.1 debug-print "${ECLASS}: KOFFICE ebuild recognized"
34 scarabeus 1.10 KDEBASE=koffice
35 ingmar 1.1 fi
36    
37 jmbsvicetto 1.8 # @ECLASS-VARIABLE: KDE_SLOTS
38     # @DESCRIPTION:
39 scarabeus 1.10 # The slots used by all KDE versions later than 4.0. The live-ebuilds use
40     # KDE_LIVE_SLOTS instead.
41     KDE_SLOTS=( kde-4 4.1 4.2 )
42 jmbsvicetto 1.8
43     # @ECLASS-VARIABLE: KDE_LIVE_SLOTS
44     # @DESCRIPTION:
45     # The slots used by all KDE live versions.
46 scarabeus 1.10 KDE_LIVE_SLOTS=( live )
47 ingmar 1.1
48     # @FUNCTION: buildsycoca
49     # @DESCRIPTION:
50     # Function to rebuild the KDE System Configuration Cache.
51     # All KDE ebuilds should run this in pkg_postinst and pkg_postrm.
52     #
53     # Note that kde4-base.eclass already does this.
54     buildsycoca() {
55     debug-print-function ${FUNCNAME} "$@"
56    
57 scarabeus 1.10 if [[ -z ${ROOT%%/} && -x ${KDEDIR}/bin/kbuildsycoca4 ]]; then
58 jmbsvicetto 1.8 # Make sure tha cache file exists, or kbuildsycoca4 will fail
59     touch "${KDEDIR}/share/kde4/services/ksycoca4"
60    
61     # We have to unset DISPLAY and DBUS_SESSION_BUS_ADDRESS, the ones
62     # in the user's environment (through su [without '-']) may cause
63     # kbuildsycoca4 to hang.
64 ingmar 1.1
65     ebegin "Running kbuildsycoca4 to build global database"
66     # This is needed because we support multiple kde versions installed together.
67 ingmar 1.6 XDG_DATA_DIRS="/usr/share:${KDEDIRS//:/\/share:}/share:/usr/local/share" \
68 jmbsvicetto 1.8 DISPLAY="" DBUS_SESSION_BUS_ADDRESS="" \
69     ${KDEDIR}/bin/kbuildsycoca4 --global --noincremental &> /dev/null
70 ingmar 1.1 eend $?
71     fi
72     }
73    
74     # @FUNCTION: comment_all_add_subdirectory
75     # @USAGE: [list of directory names]
76     # @DESCRIPTION:
77 scarabeus 1.10 # Recursively comment all add_subdirectory instructions in listed directories,
78     # except those in cmake/.
79 ingmar 1.1 comment_all_add_subdirectory() {
80     find "$@" -name CMakeLists.txt -print0 | grep -vFzZ "./cmake" | \
81 ingmar 1.6 xargs -0 sed -i -e '/add_subdirectory/s/^/#DONOTCOMPILE /' -e '/ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' || \
82 ingmar 1.1 die "${LINENO}: Initial sed died"
83     }
84    
85 zlin 1.5 # @ECLASS-VARIABLE: KDE_LINGUAS
86     # @DESCRIPTION:
87 scarabeus 1.10 # This is a whitespace-separated list of translations this ebuild supports.
88     # These translations are automatically added to IUSE. Therefore ebuilds must set
89     # this variable before inheriting any eclasses. To enable only selected
90     # translations, ebuilds must call enable_selected_linguas(). kde4-base.eclass does
91 zlin 1.5 # this for you.
92     #
93     # Example: KDE_LINGUAS="en_GB de nl"
94     for _lingua in ${KDE_LINGUAS}; do
95     IUSE="${IUSE} linguas_${_lingua}"
96     done
97    
98     # @FUNCTION: enable_selected_linguas
99     # @DESCRIPTION:
100 scarabeus 1.10 # Enable translations based on LINGUAS settings and translations supported by
101     # the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po
102 zlin 1.5 # but this default can be overridden by defining KDE_LINGUAS_DIR.
103     enable_selected_linguas() {
104 scarabeus 1.10 local lingua sr_mess wp
105     # inform user about kde-l10n for full translation.
106     if ! has_version kde-base/kde-l10n; then
107     echo
108     elog "For fully translated application you should also emerge"
109     elog "kde-base/kde-l10n package which ships translated kde core"
110     elog "strings."
111     echo
112     fi
113    
114     # ebuild overridable linguas directory definition
115     KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:=${S}/po}
116     cd "$KDE_LINGUAS_DIR" || die "wrong linguas dir specified"
117    
118     # fix all various crazy sr@Latn variations
119     # this part is only ease for ebuilds, so there wont be any die when this
120     # fail at any point
121     sr_mess="sr@latn sr@latin sr@Latin"
122     for wp in ${sr_mess}; do
123     [[ -e "$wp.po" ]] && mv "$wp.po" "sr@Latn.po"
124     if [[ -d "$wp" ]]; then
125     # move dir and fix cmakelists
126     mv "$wp" "sr@Latn"
127     sed -i \
128     -e "s:$wp:sr@Latin:g" \
129     CMakeLists.txt
130     fi
131     done
132 jmbsvicetto 1.8
133     for lingua in ${KDE_LINGUAS}; do
134 scarabeus 1.10 if [[ -e "$lingua.po" ]]; then
135     mv "$lingua.po" "$lingua.po.old"
136 jmbsvicetto 1.8 fi
137     done
138 scarabeus 1.10 comment_all_add_subdirectory "${KDE_LINGUAS_DIR}"
139 jmbsvicetto 1.8 for lingua in ${LINGUAS}; do
140 scarabeus 1.10 ebegin "Enabling LANGUAGE: ${lingua}"
141     if [[ -d "$lingua" ]]; then
142 ingmar 1.6 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
143     -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
144 scarabeus 1.10 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
145 zlin 1.5 fi
146 scarabeus 1.10 if [[ -e "$lingua.po.old" ]]; then
147     mv "$lingua.po.old" "$lingua.po"
148 jmbsvicetto 1.8 fi
149 scarabeus 1.10 eend $?
150 zlin 1.5 done
151     }
152    
153 scarabeus 1.10 # @FUNCTION: koffice_fix_libraries
154     # @DESCRIPTION:
155     # replace the weird koffice lib search with hardcoded one, so it
156     # actually builds and works.
157     koffice_fix_libraries() {
158     local LIB_ARRAY R_QT_kostore R_BAS_kostore R_BAS_koodf R_KROSS_kokross R_QT_komain
159     local R_CMS_pigmentcms R_BAS_pigmentcms R_BAS_koresources R_BAS_flake R_BAS_koguiutils
160     local R_BAS_kopageapp R_BAS_kotext R_BAS_kowmf libname R
161     case ${PN} in
162     koffice-data|koffice-libs)
163     ;;
164     *)
165     ### basic array
166     LIB_ARRAY="kostore koodf kokross komain pigmentcms koresources flake koguiutils kopageapp kotext kowmf"
167     ### dep array
168     R_QT_kostore="\"/usr/$(get_libdir)/qt4/libQtCore.so\"
169     \"/usr/$(get_libdir)/qt4/libQtXml.so\"
170     \"${KDEDIR}/$(get_libdir)/libkdecore.so\""
171     R_BAS_kostore="libkostore ${R_QT_kostore}"
172     R_BAS_koodf="libkoodf ${R_BAS_kostore}"
173     R_KROSS_kokross="
174     \"${KDEDIR}/$(get_libdir)/libkrossui.so\"
175     \"${KDEDIR}/$(get_libdir)/libkrosscore.so\""
176     R_BAS_kokross="libkokross ${R_BAS_koodf} ${R_KROSS_kokross}"
177     R_QT_komain="\"/usr/$(get_libdir)/qt4/libQtGui.so\""
178     R_BAS_komain="libkomain ${R_BAS_koodf} ${R_QT_komain}"
179     R_CMS_pigmentcms="\"/usr/$(get_libdir)/liblcms.so\""
180     R_BAS_pigmentcms="libpigmentcms ${R_BAS_komain} ${R_CMS_pigmentcms}"
181     R_BAS_koresources="libkoresources ${R_BAS_pigmentcms}"
182     R_BAS_flake="libflake ${R_BAS_pigmentcms}"
183     R_BAS_koguiutils="libkoguiutils libkoresources libflake ${R_BAS_pigmentcms}"
184     R_BAS_kopageapp="libkopageapp ${R_BAS_koguitls}"
185     R_BAS_kotext="libkotext libkoresources libflake ${R_BAS_pigmentcms}"
186     ### additional unmentioned stuff
187     R_BAS_kowmf="libkowmf"
188     for libname in ${LIB_ARRAY}; do
189     ebegin "Fixing library ${libname} with hardcoded path"
190     for libpath in $(eval "echo \$R_BAS_${libname}"); do
191     if [[ "${libpath}" != "\"/usr/"* ]]; then
192     R="${R} \"${KDEDIR}/$(get_libdir)/${libpath}.so\""
193     else
194     R="${R} ${libpath}"
195     fi
196     done
197     find "${S}" -name CMakeLists.txt -print| xargs -i \
198     sed -i \
199     -e "s: ${libname} : ${R} :g" \
200     -e "s: ${libname}): ${R}):g" \
201     -e "s:(${libname} :(${R} :g" \
202     -e "s:(${libname}):(${R}):g" \
203     -e "s: ${libname}$: ${R}:g" \
204     {} || die "Fixing library names failed."
205     eend $?
206     done
207     ;;
208     esac
209     }
210     # @FUNCTION: get_build_type
211 ingmar 1.1 # @DESCRIPTION:
212 scarabeus 1.10 # Determine whether we are using live ebuild or tbzs.
213     get_build_type() {
214     if [[ $SLOT = live || $PV = 9999* ]]; then
215     BUILD_TYPE="live"
216     else
217     BUILD_TYPE="release"
218     fi
219     export BUILD_TYPE
220     }
221 ingmar 1.1
222 scarabeus 1.10 # @FUNCTION: get_latest_kdedir
223 ingmar 1.1 # @DESCRIPTION:
224 scarabeus 1.10 # We set up KDEDIR according to the latest KDE version installed; installing our
225     # package for all available installs is just insane.
226     # We can check for kdelibs because it is the most basic package; no KDE package
227     # working without it. This might be changed in future.
228     get_latest_kdedir() {
229 scarabeus 1.12 case ${KDE_WANTED} in
230     # note this will need to be updated as stable moves and so on
231     live)
232     _versions="9999 4.1.69 4.1.0"
233     ;;
234     snapshot)
235     _versions="4.1.69 4.1.0 9999"
236     ;;
237     testing)
238     _versions="4.1.0 4.1.69 9999"
239     ;;
240     stable)
241     _versions="4.1.0 4.1.69 9999"
242     ;;
243     *) die "KDE_WANTED=${KDE_WANTED} not supported here." ;;
244     esac
245     # check if exists and fallback as we go
246     for X in ${_versions}; do
247     if has_version ">=kde-base/kdelibs-${X}"; then
248     # figure out which X we are in and set it into _kdedir
249     case ${X} in
250     # also keep track here same for kde_wanted
251     9999)
252     _kdedir="live"
253     break
254 scarabeus 1.10 ;;
255 scarabeus 1.12 4.1.69)
256     _kdedir="4.2"
257     break
258 scarabeus 1.10 ;;
259 scarabeus 1.12 4.1.0)
260     _kdedir="4.1"
261     break
262 scarabeus 1.10 ;;
263 scarabeus 1.12 esac
264     fi
265     done
266 scarabeus 1.10 }
267 ingmar 1.1
268 scarabeus 1.11 # @FUNCTION: migrate_store_dir
269     # @DESCRIPTION:
270     # Migrate the remnants of ${ESVN_STORE_DIR}/KDE/ to ${ESVN_STORE_DIR}/.
271     # Perform experimental split of kdebase to kdebase-apps.
272     migrate_store_dir() {
273     local cleandir
274     cleandir="${ESVN_STORE_DIR}/KDE"
275     if [[ -d "${cleandir}" ]]; then
276     ewarn "'${cleandir}' has been found. Moving contents to new location."
277     addwrite "${ESVN_STORE_DIR}"
278     # Split kdebase
279     local module
280     if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then
281     for module in `find . -maxdepth 1 -type d -name [a-z0-9]\*`; do
282     module="${module#./}"
283     mkdir -p "${ESVN_STORE_DIR}/kdebase-${module}" && mv -f "${module}" "${ESVN_STORE_DIR}/kdebase-${module}" || \
284     die "Failed to move to '${ESVN_STORE_DIR}/kdebase-${module}'."
285     done
286     popd > /dev/null
287     rm -fr "${cleandir}/kdebase" || \
288     die "Failed to remove ${cleandir}/kdebase. You need to remove it manually."
289     fi
290     # Move the rest
291     local pkg
292     for pkg in "${cleandir}"/*; do
293     mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "failed to move ${pkg}"
294     done
295     rmdir "${cleandir}" || die "Could not move obsolete KDE store dir. Please move '${cleandir}' contents to appropriate location (possibly ${ESVN_STORE_DIR}) and manually remove '${cleandir}' in order to continue."
296     fi
297     }
298    
299 scarabeus 1.10 # Functions handling KMLOADLIBS and KMSAVELIBS
300 ingmar 1.1
301 scarabeus 1.10 # @FUNCTION: save_library_dependencies
302     # @DESCRIPTION:
303     # Add exporting CMake dependencies for current package
304     save_library_dependencies() {
305     local depsfile="${T}/${PN}:${SLOT}"
306    
307     ebegin "Saving library dependendencies in ${depsfile##*/}"
308     echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \
309     die "Failed to save the library dependencies."
310     eend $?
311 ingmar 1.1 }
312    
313 scarabeus 1.10 # @FUNCTION: install_library_dependencies
314 ingmar 1.1 # @DESCRIPTION:
315 scarabeus 1.10 # Install generated CMake library dependencies to /var/lib/kde
316     install_library_dependencies() {
317     local depsfile="$T/$PN:$SLOT"
318     ebegin "Installing library dependendencies as ${depsfile##*/}"
319     insinto /var/lib/kde
320     doins "${depsfile}" || die "Failed to install library dependencies."
321     eend $?
322     }
323 ingmar 1.1
324 scarabeus 1.10 # @FUNCTION: load_library_dependencies
325     # @DESCRIPTION:
326     # Inject specified library dependencies in current package
327     load_library_dependencies() {
328     local pn i depsfile
329     ebegin "Injecting library dependendencies from '${KMLOADLIBS}'"
330    
331     i=0
332     for pn in ${KMLOADLIBS} ; do
333     ((i++))
334     depsfile="/var/lib/kde/${pn}:${SLOT}"
335     [[ -r "${depsfile}" ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}."
336     sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
337     die "Failed to include library dependencies for ${pn}"
338     done
339     eend $?
340 ingmar 1.1 }

  ViewVC Help
Powered by ViewVC 1.1.20