add support for USE=libffi #199850
authorMike Frysinger <vapier@gentoo.org>
Sat, 16 Feb 2008 22:27:51 +0000 (22:27 +0000)
committerMike Frysinger <vapier@gentoo.org>
Sat, 16 Feb 2008 22:27:51 +0000 (22:27 +0000)
eclass/toolchain.eclass

index 2a36ae34cdab6358577672d81cdafcf0981626f3..7e05b394861173c4893b1393a9bac5ec16906ed1 100644 (file)
@@ -1,6 +1,6 @@
 # Copyright 1999-2007 Gentoo Foundation
 # Distributed under the terms of the GNU General Public License v2
-# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain.eclass,v 1.345 2008/02/05 18:09:58 tgall Exp $
+# $Header: /var/cvsroot/gentoo-x86/eclass/toolchain.eclass,v 1.346 2008/02/16 22:27:51 vapier Exp $
 #
 # Maintainer: Toolchain Ninjas <toolchain@gentoo.org>
 
@@ -144,8 +144,8 @@ else
                [[ -n ${HTB_VER} ]] && IUSE="${IUSE} boundschecking"
                [[ -n ${D_VER}   ]] && IUSE="${IUSE} d"
 
-               if version_is_at_least 3 ; then
-                       IUSE="${IUSE} bootstrap doc gcj gtk hardened multilib objc vanilla"
+               if tc_version_is_at_least 3 ; then
+                       IUSE="${IUSE} bootstrap doc gcj gtk hardened libffi multilib objc vanilla"
 
                        # gcc-{nios2,bfin} don't accept these
                        if [[ ${PN} == "gcc" ]] ; then
@@ -958,6 +958,14 @@ gcc-compiler_src_unpack() {
                einfo "updating configuration to build hardened GCC"
                make_gcc_hard || die "failed to make gcc hard"
        fi
+
+       if is_libffi ; then
+               # move the libffi target out of gcj and into all
+               sed -i \
+                       -e '/^libgcj=/s:target-libffi::' \
+                       -e '/^target_lib/s:=":="target-libffi :' \
+                       "${S}"/configure || die
+       fi
 }
 gcc-library_src_unpack() {
        :
@@ -1720,10 +1728,9 @@ gcc-compiler_src_install() {
                #       "#include <ffitarget.h>" which (correctly, as it's an "extra" file)
                #       is installed in .../GCCVER/include/libffi; the following fixes
                #       ffi.'s include of ffitarget.h - Armando Di Cianno <fafhrd@gentoo.org>
-               if is_objc && ! is_gcj ; then
-                       #dosed "s:<ffitarget.h>:<libffi/ffitarget.h>:g" /${LIBPATH}/include/ffi.h
-                       mv "${D}"${LIBPATH}/include/libffi/* "${D}"${LIBPATH}/include
-                       rm -Rf "${D}"${LIBPATH}/include/libffi
+               if [[ -d ${D}${LIBPATH}/include/libffi ]] ; then
+                       mv -i "${D}"${LIBPATH}/include/libffi/* "${D}"${LIBPATH}/include || die
+                       rm -r "${D}"${LIBPATH}/include/libffi || die
                fi
        fi
 
@@ -2367,6 +2374,12 @@ is_gcj() {
        use gcj
 }
 
+is_libffi() {
+       has libffi ${USE} || return 1
+       use build && return 1
+       use libffi
+}
+
 is_objc() {
        gcc-lang-supported objc || return 1
        use build && return 1