# Copyright 1999-2013 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ # # Original Author: fat-zer # Purpose: support planty of ebuilds for trinity project (a kde3 fork). # RESTRICT=network-sandbox inherit trinity-functions cmake-utils base # FIXME we don't need to write to both addwrite "/usr/qt/3/etc/settings" addpredict "/usr/qt/3/etc/settings" addwrite "/usr/tqt3/etc/settings" addpredict "/usr/tqt3/etc/settings" # ban EAPI 0, 1 and 2 case $EAPI in 0|1|2|3|4) die "EAPI=${EAPI} is not supported" ;; 5) ;; *) die "Unknown EAPI=${EAPI}" esac # @ECLASS-VARIABLE: BUILD_TYPE # @DESCRIPTION: # Determins he build type: live or release if [[ ${PV} = *9999* ]]; then BUILD_TYPE="live" else BUILD_TYPE="release" fi export BUILD_TYPE # @ECLASS-VARIABLE: TRINITY_MODULE_NAME # @DESCRIPTION: # The name of trinity module; It's used for multiple purposes. First of all it # determines the tarball name (git repository for live packages) echo "${TRINITY_MODULE_NAME:=${PN}}" >/dev/null # @ECLASS-VARIABLE: TRINITY_SCM # @DESCRIPTION: # Determins from what version control system code is chiking out for live # ebuilds. # @ECLASS-VARIABLE: TMP_DOCDIR # @DESCRIPTION: # A temporary directory used to copy common documentation before installing it # # @ECLASS-VARIABLE: TRINTY_BASE_NO_INSTALL_DOC # @DESCRIPTION: # if setted to anything except "no" this variable prevents # trinity-base_src_install() to install documentation # # @ECLASS-VARIABLE: TRINTY_LANGS # @DESCRIPTION: # This is a whitespace-separated list of translations this ebuild supports. # These translations are automatically added to IUSE. Therefore ebuilds must set # this variable before inheriting any eclasses. To enable only selected # translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does # this for you. # @ECLASS-VARIABLE: TRINTY_DOC_LANGS # @DESCRIPTION: # This is a whitespace-separated list of translations this ebuild supports. # These translations are automatically added to IUSE. Therefore ebuilds must set # this variable before inheriting any eclasses. To enable only selected # translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does # this for you. # @ECLASS-VARIABLE: TRINITY_HANDBOOK # @DESCRIPTION: # Set to enable handbook in application. Possible values are 'always', 'optional' # (handbook USE flag) and 'never'. # This variable must be set before inheriting any eclasses. Defaults to 'never'. # As well It ensures buildtime and runtime dependencies. TRINITY_HANDBOOK="${TRINITY_HANDBOOK:-never}" # @ECLASS-VARIABLE: TRINITY_EXTRAGEAR_PACKAGING # @DESCRIPTION: # Set TRINITY_EXTRAGEAR_PACKAGING=yes before inheriting if the package use extragear-like # packaging and then supports ${TRINITY_LANGS}, ${TRINITY_DOC_LANGS} and # ${TRINITY_HANDBOOK} variables. The translations are found in the directory # pointed by the TEG_PO_DIR variable. # @ECLASS-VARIABLE: TRINITY_GIT_MIRROR # @DESCRIPTION: # User (or ebuild) can decide another git mirror if it's needed; # Defaults to http://scm.trinitydesktop.org/scm/git # @ECLASS-VARIABLE: TRINITY_GIT_BRANCH # @DESCRIPTION: # Specify git branch for live ebuilds. Default: master # @ECLASS-VARIABLE: TRINITY_COMMON_DOCS # @DESCRIPTION: # Common doc names that was found in trinity project's dirs. TRINITY_COMMON_DOCS="AUTHORS BUGS CHANGELOG CHANGES COMMENTS COMPLIANCE COMPILING CONFIG_FORMAT CONFIGURING COPYING COPYRIGHT CREDITS DEBUG DESIGN FAQ HACKING HISTORY HOWTO IDEAS INSTALL LICENSE MAINTAINERS NAMING NEWS NOTES PLUGINS PORTING README SECURITY-HOLES TASKGROUPS TEMPLATE TESTCASES THANKS THOUGHTS TODO VERSION" # @ECLASS-VARIABLE: TRINITY_TARBALL # @DESCRIPTION: # This variable holds the name of the tarboll with current module's source code. # @ECLASS-VARIABLE: TRINITY_BASE_SRC_URI # @DESCRIPTION: # The top SRC_URI for all trinity packages TRINITY_BASE_SRC_URI="http://www.mirrorservice.org/sites/trinitydesktop.org/trinity/releases/" # TRINITY_BASE_SRC_URI="http://trinity.blackmag.net/releases" # the old one #reset TRINITY_SCM and inherit proper eclass if [[ ${BUILD_TYPE} = live ]]; then # set default TRINITY_SCM if not set [[ -z "$TRINITY_SCM" ]] && TRINITY_SCM=git case ${TRINITY_SCM} in git) inherit git-2 ;; *) die "Unsupported TRINITY_SCM=${TRINITY_SCM}" ;; esac #set some varyables case ${TRINITY_SCM} in git) EGIT_REPO_URI="${TRINITY_GIT_MIRROR:=https://mirror.git.trinitydesktop.org/gitea/TDE}/${TRINITY_MODULE_NAME}" EGIT_BRANCH="${TRINITY_GIT_BRANCH:=master}" EGIT_PROJECT="trinity/${TRINITY_MODULE_NAME}" EGIT_HAS_SUBMODULES="yes" ;; esac S="${WORKDIR}/${TRINITY_MODULE_NAME}" elif [[ "${BUILD_TYPE}" == release ]]; then mod_name="${TRINITY_MODULE_NAME}" mod_ver="${TRINITY_MODULE_VER:=${PV}}" case ${mod_ver} in 3.5.13.1) full_mod_name="${mod_name}-${mod_ver}" TRINITY_TARBALL="${full_mod_name}.tar.gz" ;; 3.5.13.2) full_mod_name="${mod_name}-trinity-${mod_ver}" TRINITY_TARBALL="${full_mod_name}.tar.xz" ;; *) full_mod_name="${mod_name}-${mod_ver}" TRINITY_TARBALL="${full_mod_name}.tar.xz" esac if [[ -n "${TRINITY_MODULE_TYPE}" ]] ; then SRC_URI="${TRINITY_BASE_SRC_URI}/${mod_ver}/${TRINITY_MODULE_TYPE}/$TRINITY_TARBALL" else SRC_URI="${TRINITY_BASE_SRC_URI}/${mod_ver}/$TRINITY_TARBALL" fi S="${WORKDIR}/${full_mod_name}" else die "Unknown BUILD_TYPE=${BUILD_TYPE}" fi if [[ -n "${TRINITY_EXTRAGEAR_PACKAGING}" ]]; then # @ECLASS-VARIABLE: TEG_PO_DIR # @DESCRIPTION: # Change the translation directory for extragear packages. The default is ${S}/po TEG_PO_DIR="${TEG_PO_DIR:-${S}/po}" # @ECLASS-VARIABLE: TEG_DOC_DIR # @DESCRIPTION: # Change the documentation directory for extragear packages. The default is # ${S}/doc TEG_DOC_DIR="${TEG_DOC_DIR:-${S}/doc}" if [[ -n "${TRINITY_LANGS}" || -n "${TRINITY_DOC_LANGS}" ]]; then for lang in ${TRINITY_LANGS} ${TRINITY_DOC_LANGS}; do IUSE="${IUSE} linguas_${lang}" done trinityhandbookdepend=" app-text/docbook-xml-dtd:4.2 app-text/docbook-xsl-stylesheets " case ${TRINITY_HANDBOOK} in yes | always) DEPEDND+=" ${trinityhandbookdepend}" ;; optional) IUSE+=" +handbook" DEPEND+=" handbook? ( ${trinityhandbookdepend} )" ;; *) ;; esac fi fi # @FUNCTION: trinity-base_src_unpack # @DESCRIPTION: # A default src unpack function to be call git-2_src_unpack either trinity-base_src_unpack() { if [[ ${BUILD_TYPE} = live ]]; then case "${TRINITY_SCM}" in git) git-2_src_unpack ;; *) die "TRINITY_SCM: ${TRINITY_SCM} is not supported by ${FUNCNAME}" ;; esac else base_src_unpack fi } # @FUNCTION: trinity-base_src_prepare # @DESCRIPTION: # General pre-configure and pre-compile function for Trinity applications. trinity-base_src_prepare() { debug-print-function ${FUNCNAME} "$@" # # Only enable selected languages, used for KDE extragear apps. # if [[ -n ${KDE_LINGUAS} ]]; then # enable_selected_linguas # fi local dir lang # SCM bootstrap if [[ ${BUILD_TYPE} = live ]]; then case ${TRINITY_SCM} in svn) subversion_src_prepare ;; git) ;; *) die "TRINITY_SCM: ${TRINITY_SCM} is not supported by ${FUNCNAME}" esac fi # Apply patches base_src_prepare # Handle documentation and translations for extragear packages if [[ -n "$TRINITY_EXTRAGEAR_PACKAGING" ]]; then # remove not selected languages if [[ -n $TRINITY_LANGS ]]; then einfo "Removing unselected translations from ${TEG_PO_DIR}" for dir in $(find ${TEG_PO_DIR} -mindepth 1 -maxdepth 1 -type d ); do lang="$(basename "$dir")" if ! has "$lang" ${TRINITY_LANGS}; then eerror "Translation $lang seems to present in the package but is not supported by the ebuild" elif ! has $lang ${LINGUAS}; then rm -rf $dir fi done fi # if we removed all translations we should point it if [[ -z $(find ${TEG_PO_DIR} -mindepth 1 -maxdepth 1 -type d) ]]; then TRINITY_NO_TRANSLATIONS=yes fi # remove not selected documentation if [[ -n $TRINITY_DOC_LANGS ]]; then einfo "Removing unselected documentation from ${TEG_DOC_DIR}" for dir in $(find ${TEG_DOC_DIR} -mindepth 1 -maxdepth 1 -type d ); do lang="$(basename "$dir")" if [[ "$lang" == "${PN}" || \ "$lang" == "${TRINITY_MODULE_NAME}" ]] ; then echo -n; # do nothing it's main documentation elif ! has "$lang" ${TRINITY_LANGS}; then eerror "Documentation translated to language $lang seems to present in the package but is not supported by the ebuild" elif ! has $lang ${LINGUAS}; then rm -rf $dir fi done fi fi } # @FUNCTION: trinity-base_src_configure # @DESCRIPTION: # Call standart cmake-utils_src_onfigure and add some common arguments. trinity-base_src_configure() { debug-print-function ${FUNCNAME} "$@" local eg_cmakeargs [[ -n "${PREFIX}" ]] && export PREFIX="${TDEDIR}" if [[ -n "$TRINITY_EXTRAGEAR_PACKAGING" ]]; then eg_cmakeargs=( -DBUILD_ALL=ON ) if [[ "$TRINITY_NO_TRANSLATIONS" == "yes" ]]; then eg_cmakeargs=( -DBUILD_TRANSLATIONS=OFF "${eg_cmakeargs[@]}" ) else eg_cmakeargs=( -DBUILD_TRANSLATIONS=ON "${eg_cmakeargs[@]}" ) fi if [[ "${TRINITY_HANDBOOK}" == optional ]]; then eg_cmakeargs=( $(cmake-utils_use_with handbook DOC) "${eg_cmakeargs[@]}" ) fi fi mycmakeargs=( -DCMAKE_INSTALL_PREFIX="${EPREFIX}${TDEDIR}" -DCMAKE_INSTALL_RPATH="${EPREFIX}${TDEDIR}" $([[ "${TRINITY_NEED_ARTS}" == "optional" ]] && cmake-utils_use_with arts ARTS) "${eg_cmakeargs[@]}" "${mycmakeargs[@]}" ) cmake-utils_src_configure } # @FUNCTION: trinity-base_src_compile # @DESCRIPTION: # Just call cmake-utils_src_compile. trinity-base_src_compile() { debug-print-function ${FUNCNAME} "$@" cmake-utils_src_compile } # @FUNCTION: trinity-base_src_install # @DESCRIPTION: # Call standart cmake-utils_src_install and installs common documentation. trinity-base_src_install() { debug-print-function ${FUNCNAME} "$@" cmake-utils_src_install trinity-base_fix_desktop_files if [[ -z "$TRINITY_BASE_NO_INSTALL_DOC" || "$TRINITY_BASE_NO_INSTALL_DOC" == "no" ]]; then trinity-base_create_tmp_docfiles trinity-base_install_docfiles fi } # @FUNCTION: trinity-base_create_tmp_docfiles # @DESCRIPTION: # Create docfiles in the form ${TMP_DOCDIR}/path.to.docfile.COMMON_NAME # Also see the description for TRINITY_COMMON_DOCS and TMP_DOCDIR. trinity-base_create_tmp_docfiles() { debug-print-function ${FUNCNAME} "$@" local srcdirs dir docfile targetdoc if [[ -z "$TMP_DOCDIR" || ! -d "$TMP_DOCDIR" ]] ; then TMP_DOCDIR="$T/docs" mkdir -p ${TMP_DOCDIR} fi if [[ -z "$@" ]] ; then srcdirs="./" else srcdirs="$@" fi einfo "Generating documentation list..." for dir in $srcdirs; do for doc in ${TRINITY_COMMON_DOCS}; do for docfile in $(find $dir -type f -name "*${doc}*"); do targetdoc="${docfile//\//.}" targetdoc="${targetdoc#..}" cp "${docfile}" "$TMP_DOCDIR/${targetdoc}" done done done # if [[ "${TRINITY_INSTALL_ROOT_DOCS}" == "yes" && " ${srcdirs} " == "* ./ *" ]]; then # for doc in ${TRINITY_COMMON_DOCS}; do # for docfile in $(ls ./"*${doc}*"); do # targetdoc="${docfile//\//.}" # targetdoc="${targetdoc#..}" # cp "${docfile}" "$TMP_DOCDIR/${targetdoc}" # done # done # fi } # @FUNCTION: trinity-base_install_docfiles # @DESCRIPTION: # Install documentation from ${TMP_DOCDIR} or from first argument. trinity-base_install_docfiles() { debug-print-function ${FUNCNAME} "$@" local doc docdir [[ -n "$TMP_DOCDIR" ]] && docdir="$TMP_DOCDIR" [[ -n "$1" ]] && docdir="$1" [[ -z "$docdir" ]] && die "docdir is not set in ${FUNCNAME}." pushd "${docdir}" >/dev/null find . -maxdepth 1 -type f | while read doc; do einfo "Installing documentation: ${doc##*/}" dodoc "${doc}" done popd >/dev/null } # @FUNCTION: trinity-base_fix_desktop_files # @DESCRIPTION: # Perform desktop files modifications according to current version. You can pass # either desktop files or direcories to the parametrs. In case you'd pass a # directory the function will recursively search for all desktop files and # modify them. If no argument specified the function assume to work on the ${D}; trinity-base_fix_desktop_files() { # Test if we have to perform any file fixing for current version case "3.5" in *${TRINITY_VER}*);; *) return 0 ;; esac local file_list dir_list f if [ "$#" != 0 ]; then # Get directories and files from arguments for f in $@; do if [ -f "$f" ]; then file_list+=" $f" elif [ -d "$f" ]; then dir_list+=" $f" else eerror "${FUNCNAME}: bad argument type: $(stat -c %F "$f")" fi done else dir_list="${D}" fi # Recursivly search for desktop files in directories for f in $dir_list; do file_list+="$(find ${f} -type f -name '*.desktop')" done # Performe the updates case "${TRINITY_VER}" in 3.5) for f in $file_list; do sed -i '/^OnlyShowIn=/s/KDE/TDE/g' "$f" done;; esac } EXPORT_FUNCTIONS src_configure src_compile src_install src_prepare