diff options
author | Caleb Tennis <caleb@gentoo.org> | 2007-12-21 16:11:18 +0000 |
---|---|---|
committer | Caleb Tennis <caleb@gentoo.org> | 2007-12-21 16:11:18 +0000 |
commit | a497a97d1b861e3e7ffaa614cf90548966517a26 (patch) | |
tree | 8e6e9b5c1bff3cd583d51c810dcc334c3a524799 /eclass/qt4-build.eclass | |
parent | Another set of new qt4 packages (diff) | |
download | gentoo-2-a497a97d1b861e3e7ffaa614cf90548966517a26.tar.gz gentoo-2-a497a97d1b861e3e7ffaa614cf90548966517a26.tar.bz2 gentoo-2-a497a97d1b861e3e7ffaa614cf90548966517a26.zip |
Add new eclass
Diffstat (limited to 'eclass/qt4-build.eclass')
-rw-r--r-- | eclass/qt4-build.eclass | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/eclass/qt4-build.eclass b/eclass/qt4-build.eclass new file mode 100644 index 000000000000..bb129bb924a3 --- /dev/null +++ b/eclass/qt4-build.eclass @@ -0,0 +1,179 @@ +# Copyright 2005 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: /var/cvsroot/gentoo-x86/eclass/qt4-build.eclass,v 1.1 2007/12/21 16:11:18 caleb Exp $ + +# @ECLASS: qt4-build.eclass +# @MAINTAINER: +# Caleb Tennis <caleb@gentoo.org> +# @BLURB: +# Eclass for Qt4 +# @DESCRIPTION: +# This eclass contains various functions that are used when building Qt4 + +inherit eutils multilib toolchain-funcs flag-o-matic + +IUSE="${IUSE} debug" + +qt4-build_pkg_setup() { + # Set up installation directories + + QTBASEDIR=/usr/$(get_libdir)/qt4 + QTPREFIXDIR=/usr + QTBINDIR=/usr/bin + QTLIBDIR=/usr/$(get_libdir)/qt4 + QTPCDIR=/usr/$(get_libdir)/pkgconfig + QTDATADIR=/usr/share/qt4 + QTDOCDIR=/usr/share/doc/${PF} + QTHEADERDIR=/usr/include/qt4 + QTPLUGINDIR=${QTLIBDIR}/plugins + QTSYSCONFDIR=/etc/qt4 + QTTRANSDIR=${QTDATADIR}/translations + QTEXAMPLESDIR=${QTDATADIR}/examples + QTDEMOSDIR=${QTDATADIR}/demos + + PLATFORM=$(qt_mkspecs_dir) + + PATH="${S}/bin:${PATH}" + LD_LIBRARY_PATH="${S}/lib:${LD_LIBRARY_PATH}" +} + +qt4-build_src_unpack() { + unpack ${A} + cd "${S}" + + # Don't let the user go too overboard with flags. If you really want to, uncomment + # out the line below and give 'er a whirl. + strip-flags + replace-flags -O3 -O2 + + if [[ $( gcc-fullversion ) == "3.4.6" && gcc-specs-ssp ]] ; then + ewarn "Appending -fno-stack-protector to CFLAGS/CXXFLAGS" + append-flags -fno-stack-protector + fi +} + +standard_configure_options() { + local myconf="" + + [ $(get_libdir) != "lib" ] && myconf="${myconf} -L/usr/$(get_libdir)" + + # Disable visibility explicitly if gcc version isn't 4 + if [[ "$(gcc-major-version)" != "4" ]]; then + myconf="${myconf} -no-reduce-exports" + fi + + use debug && myconf="${myconf} -debug -no-separate-debug-info" || myconf="${myconf} -release -no-separate-debug-info" + + myconf="${myconf} -stl -verbose -largefile -confirm-license -no-rpath\ + -prefix ${QTPREFIXDIR} -bindir ${QTBINDIR} -libdir ${QTLIBDIR} -datadir ${QTDATADIR} \ + -docdir ${QTDOCDIR} -headerdir ${QTHEADERDIR} -plugindir ${QTPLUGINDIR} \ + -sysconfdir ${QTSYSCONFDIR} -translationdir ${QTTRANSDIR} \ + -examplesdir ${QTEXAMPLESDIR} -demosdir ${QTDEMOSDIR}" + + myconf="${myconf} -fast -reduce-relocations -nomake examples -nomake demos" + + echo "${myconf}" +} + +build_directories() { + local dirs="$@" + for x in ${dirs}; do + cd "${S}"/${x} + qmake "LIBS+=-L${QTLIBDIR}" && emake || die + done +} + +install_directories() { + local dirs="$@" + for x in ${dirs}; do + cd "${S}"/${x} + emake INSTALL_ROOT="${D}" install || die + done +} + +qconfig_add_option() { + local option=$1 + qconfig_remove_option $1 + sed -i -e "s:QT_CONFIG +=:QT_CONFIG += ${option}:g" /usr/share/qt4/mkspecs/qconfig.pri +} + +qconfig_remove_option() { + local option=$1 + sed -i -e "s: ${option}::g" /usr/share/qt4/mkspecs/qconfig.pri +} + +skip_qmake_build_patch() { + # Don't need to build qmake, as it's already installed from qmake-core + sed -i -e "s:if true:if false:g" "${S}"/configure +} + +skip_project_generation_patch() { + # Exit the script early by throwing in an exit before all of the .pro files are scanned + sed -i -e "s:echo \"Finding:exit 0\n\necho \"Finding:g" "${S}"/configure +} + +install_binaries_to_buildtree() +{ + cp ${QTBINDIR}/qmake ${S}/bin + cp ${QTBINDIR}/moc ${S}/bin + cp ${QTBINDIR}/uic ${S}/bin + cp ${QTBINDIR}/rcc ${S}/bin +} + +fix_library_files() { + sed -i -e "s:${S}/lib:${QTLIBDIR}:g" "${D}"/${QTLIBDIR}/*.la + sed -i -e "s:${S}/lib:${QTLIBDIR}:g" "${D}"/${QTLIBDIR}/*.prl + sed -i -e "s:${S}/lib:${QTLIBDIR}:g" "${D}"/${QTLIBDIR}/pkgconfig/*.pc + + # pkgconfig files refer to WORKDIR/bin as the moc and uic locations. Fix: + sed -i -e "s:${S}/bin:${QTBINDIR}:g" "${D}"/${QTLIBDIR}/pkgconfig/*.pc + + # Move .pc files into the pkgconfig directory + dodir ${QTPCDIR} + mv "${D}"/${QTLIBDIR}/pkgconfig/*.pc "${D}"/${QTPCDIR} +} + +qt_use() { + local flag="$1" + local feature="$1" + local enableval= + + [[ -n $2 ]] && feature=$2 + [[ -n $3 ]] && enableval="-$3" + + useq $flag && echo "${enableval}-${feature}" || echo "-no-${feature}" + return 0 +} + +qt_mkspecs_dir() { + # Allows us to define which mkspecs dir we want to use. + local spec + + case ${CHOST} in + *-freebsd*|*-dragonfly*) + spec="freebsd" ;; + *-openbsd*) + spec="openbsd" ;; + *-netbsd*) + spec="netbsd" ;; + *-darwin*) + spec="darwin" ;; + *-linux-*|*-linux) + spec="linux" ;; + *) + die "Unknown CHOST, no platform choosed." + esac + + CXX=$(tc-getCXX) + if [[ ${CXX/g++/} != ${CXX} ]]; then + spec="${spec}-g++" + elif [[ ${CXX/icpc/} != ${CXX} ]]; then + spec="${spec}-icc" + else + die "Unknown compiler ${CXX}." + fi + + echo "${spec}" +} + +EXPORT_FUNCTIONS pkg_setup src-unpack |