summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorDominik Kapusta <ayoy@gentoo.org>2009-12-15 16:32:43 +0000
committerDominik Kapusta <ayoy@gentoo.org>2009-12-15 16:32:43 +0000
commiteb17cd11be1bc071e659f02371345b5573c5395a (patch)
treea1b456f2102fdfca7dc112e606f6bcf42a7f0b57 /eclass
parentalpha/s390/sh/sparc stable wrt #282290 (diff)
downloadgentoo-2-eb17cd11be1bc071e659f02371345b5573c5395a.tar.gz
gentoo-2-eb17cd11be1bc071e659f02371345b5573c5395a.tar.bz2
gentoo-2-eb17cd11be1bc071e659f02371345b5573c5395a.zip
Initial commit of qt4-r2.eclass
Diffstat (limited to 'eclass')
-rw-r--r--eclass/qt4-r2.eclass273
1 files changed, 273 insertions, 0 deletions
diff --git a/eclass/qt4-r2.eclass b/eclass/qt4-r2.eclass
new file mode 100644
index 000000000000..23d326e87ab5
--- /dev/null
+++ b/eclass/qt4-r2.eclass
@@ -0,0 +1,273 @@
+# Copyright 2009 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-r2.eclass,v 1.1 2009/12/15 16:32:43 ayoy Exp $
+
+# @ECLASS: qt4-r2.eclass
+# @MAINTAINER:
+# Ben de Groot <yngwin@gentoo.org>,
+# Markos Chandras <hwoarang@gentoo.org>,
+# Davide Pesavento <davidepesa@gmail.com>,
+# Dominik Kapusta <ayoy@gentoo.org>
+# @BLURB: Eclass for Qt4 packages, second edition
+# @DESCRIPTION:
+# This eclass contains various functions that may be useful when
+# dealing with packages using Qt4 libraries. Requires EAPI=2.
+
+case ${EAPI} in
+ 2) : ;;
+ *) DEPEND="EAPI-INCOMPATIBLE" ;;
+esac
+
+inherit base eutils multilib toolchain-funcs
+
+export XDG_CONFIG_HOME="${T}"
+
+# @ECLASS-VARIABLE: LANGS
+# @DESCRIPTION:
+# In case your Qt4 application provides various translations, use this variable
+# to specify them in order to populate "linguas_*" IUSE automatically. Make sure
+# that you set this variable BEFORE inheriting qt4-r2 eclass.
+# example: LANGS="en el de"
+for x in ${LANGS}; do
+ IUSE="${IUSE} linguas_${x}"
+done
+
+# @ECLASS-VARIABLE: LANGSLONG
+# @DESCRIPTION:
+# Same as above, but this variable is for LINGUAS that must be in long format.
+# Remember to set this variable BEFORE inheriting qt4-r2 eclass.
+# Look at ${PORTDIR}/profiles/desc/linguas.desc for details.
+for x in ${LANGSLONG}; do
+ IUSE="${IUSE} linguas_${x%_*}"
+done
+
+# @FUNCTION: qt4-r2_src_unpack
+# @DESCRIPTION:
+# Default src_unpack function for packages that depend on qt4. If you have to
+# override src_unpack in your ebuild (probably you don't need to), call
+# qt4-r2_src_unpack in it.
+qt4-r2_src_unpack() {
+ debug-print-function $FUNCNAME "$@"
+ base_src_unpack "$@"
+
+ # Fallback to ${WORKDIR}/${MY_P} when ${WORKDIR}/${P} doesn't exist.
+ # Feel free to re-implement this
+ if [[ "${S}" == "${WORKDIR}/${P}" && ! -d ${S} && -d ${WORKDIR}/${MY_P} ]]; then
+ ewarn "Falling back to '${WORKDIR}/${MY_P}'"
+ S="${WORKDIR}/${MY_P}"
+ fi
+}
+
+# @ECLASS-VARIABLE: PATCHES
+# @DESCRIPTION:
+# In case you have patches to apply, specify them in PATCHES variable. Make sure
+# to specify the full path. This variable is used in src_prepare phase.
+# example:
+# PATCHES=( "${FILESDIR}"/mypatch.patch
+# "${FILESDIR}"/mypatch2.patch )
+#
+# @FUNCTION: qt4-r2_src_prepare
+# @DESCRIPTION:
+# Default src_prepare function for packages that depend on qt4. If you have to
+# override src_prepare in your ebuild, you should call qt4-r2_src_prepare in it,
+# otherwise autopatcher will not work!
+qt4-r2_src_prepare() {
+ debug-print-function $FUNCNAME "$@"
+
+ base_src_prepare "$@"
+}
+
+# @FUNCTION: qt4-r2_src_configure
+# @DESCRIPTION:
+# Default src_configure function for packages that depend on qt4. If you have to
+# override src_configure in your ebuild, call qt4-r2_src_configure in it.
+qt4-r2_src_configure() {
+ debug-print-function $FUNCNAME "$@"
+
+ local project_file="$(_find_project_file)"
+
+ if [[ -n ${project_file} ]]; then
+ eqmake4 ${project_file}
+ else
+ base_src_configure "$@"
+ fi
+}
+
+# @FUNCTION: qt4-r2_src_compile
+# @DESCRIPTION:
+# Default src_compile function for packages that depend on qt4. If you have to
+# override src_compile in your ebuild (probably you don't need to), call
+# qt4-r2_src_compile in it.
+qt4-r2_src_compile() {
+ debug-print-function $FUNCNAME "$@"
+
+ base_src_compile "$@"
+}
+
+# @ECLASS-VARIABLE: DOCS
+# @DESCRIPTION:
+# Use this variable if you want to install any documentation.
+# example: DOCS="README AUTHORS"
+#
+# @ECLASS-VARIABLE: DOCSDIR
+# @DESCRIPTION:
+# Directory containing documentation. If not specified, ${S} will be used
+# instead.
+#
+# @FUNCTION: qt4-r2_src_install
+# @DESCRIPTION:
+# Default src_install function for qt4-based packages. Installs compiled code,
+# documentation (via DOCS variable) and translations (via LANGS and
+# LANGSLONG variables).
+qt4-r2_src_install() {
+ debug-print-function $FUNCNAME "$@"
+
+ emake INSTALL_ROOT="${D}" DESTDIR="${D}" install || die "emake install failed"
+
+ # install documentation
+ if [[ -n "${DOCS}" ]]; then
+ local dir=${DOCSDIR:-${S}}
+ for doc in ${DOCS}; do
+ dodoc "${dir}/${doc}" || die "dodoc failed"
+ done
+ fi
+}
+
+# Internal function, used by eqmake4 and qt4-r2_src_configure
+# Look for project files:
+# 0 *.pro files found - output null string
+# 1 *.pro file found - output its name
+# 2 or more *.pro files found - if ${PN}.pro or $(basename ${S}).pro
+# are there, output any of them
+# Outputs a project file argument used by eqmake4. Sets nullglob locally
+# to avoid expanding *.pro as "*.pro" when there are no matching files.
+_find_project_file() {
+ shopt -s nullglob
+ local pro_files=(*.pro)
+ shopt -u nullglob
+ local dir_name="$(basename ${S})"
+
+ case ${#pro_files[@]} in
+ 1)
+ echo "${pro_files[0]}"
+ ;;
+ *)
+ for pro_file in "${pro_files[@]}"; do
+ if [[ "${pro_file}" == "${dir_name}" ||
+ "${pro_file}" == "${PN}.pro" ]]; then
+ echo "${pro_file}"
+ break
+ fi
+ done
+ ;;
+ esac
+}
+
+# @FUNCTION: eqmake4
+# @USAGE: [project file] [parameters to qmake]
+# @DESCRIPTION:
+# Wrapper for Qt4's qmake. If project file isn't specified eqmake4 will
+# look for it in current directory (${S}, non-recursively). If more than
+# one project file is found, the ${PN}.pro is processed, provided that it
+# exists. Otherwise eqmake4 fails.
+# All the arguments are appended unmodified to qmake command line. For
+# recursive build systems, i.e. those based on the subdirs template, you
+# should run eqmake4 on the top-level project file only, unless you have
+# strong reasons to do things differently. During the building, qmake
+# will be automatically re-invoked with the right arguments on every
+# directory specified inside the top-level project file by the SUBDIRS
+# variable.
+eqmake4() {
+ ebegin "Running qmake"
+
+ local qmake_args="$@"
+
+ # check if project file was passed as a first argument
+ # if not, then search for it
+ local regexp='.*\.pro'
+ if ! [[ "${1}" =~ ${regexp} ]]; then
+ local project_file="$(_find_project_file)"
+ if [[ -z "${project_file}" ]]; then
+ echo
+ eerror "No project file found in ${S}!"
+ eerror "This shouldn't happen - please send a bug report to http://bugs.gentoo.org/"
+ echo
+ die "eqmake4 failed"
+ fi
+ qmake_args="${qmake_args} ${project_file}"
+ fi
+
+ # make sure CONFIG variable is correctly set for both release and debug builds
+ local CONFIG_ADD="release"
+ local CONFIG_REMOVE="debug"
+ if has debug ${IUSE} && use debug; then
+ CONFIG_ADD="debug"
+ CONFIG_REMOVE="release"
+ fi
+ local awkscript='BEGIN {
+ printf "### eqmake4 was here ###\n" > file;
+ fixed=0;
+ }
+ /^[[:blank:]]*CONFIG[[:blank:]]*[\+\*]?=/ {
+ for (i=1; i <= NF; i++) {
+ if ($i ~ rem || $i ~ /debug_and_release/)
+ { $i=add; fixed=1; }
+ }
+ }
+ /^[[:blank:]]*CONFIG[[:blank:]]*-=/ {
+ for (i=1; i <= NF; i++) {
+ if ($i ~ add) { $i=rem; fixed=1; }
+ }
+ }
+ {
+ print >> file;
+ }
+ END {
+ printf "\nCONFIG -= debug_and_release %s\n", rem >> file;
+ printf "CONFIG += %s\n", add >> file;
+ print fixed;
+ }'
+ local file=
+ while read file; do
+ grep -q '^### eqmake4 was here ###$' "${file}" && continue
+ local retval=$({
+ rm -f "${file}" || echo "FAILED"
+ awk -v file="${file}" -- "${awkscript}" add=${CONFIG_ADD} rem=${CONFIG_REMOVE} || echo "FAILED"
+ } < "${file}")
+ if [[ ${retval} == 1 ]]; then
+ einfo " - fixed CONFIG in ${file}"
+ elif [[ ${retval} != 0 ]]; then
+ eerror "An error occurred while processing ${file}"
+ die "eqmake4 failed to process '${file}'"
+ fi
+ done < <(find . -type f -name "*.pr[io]" -printf '%P\n' 2>/dev/null)
+
+ /usr/bin/qmake -makefile -nocache \
+ QTDIR=/usr/$(get_libdir) \
+ QMAKE=/usr/bin/qmake \
+ QMAKE_CC=$(tc-getCC) \
+ QMAKE_CXX=$(tc-getCXX) \
+ QMAKE_LINK=$(tc-getCXX) \
+ QMAKE_CFLAGS_RELEASE="${CFLAGS}" \
+ QMAKE_CFLAGS_DEBUG="${CFLAGS}" \
+ QMAKE_CXXFLAGS_RELEASE="${CXXFLAGS}" \
+ QMAKE_CXXFLAGS_DEBUG="${CXXFLAGS}" \
+ QMAKE_LFLAGS_RELEASE="${LDFLAGS}" \
+ QMAKE_LFLAGS_DEBUG="${LDFLAGS}" \
+ QMAKE_RPATH= \
+ QMAKE_STRIP= \
+ ${qmake_args}
+
+ # was qmake successful?
+ if ! eend $? ; then
+ echo
+ eerror "Running qmake has failed! (see above for details)"
+ eerror "This shouldn't happen - please send a bug report to http://bugs.gentoo.org/"
+ echo
+ die "eqmake4 failed"
+ fi
+
+ return 0
+}
+
+EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install