[OE-core] [PATCH 1/2] Use alternatives for the binutils-symlinks package.
Saul Wold
sgw at linux.intel.com
Sat Oct 19 05:22:40 UTC 2013
Peter,
The commit short message needs to be corrected to the binutils: ...
format please.
I will test this version in MUT.
Thanks
Sau!
On 10/18/2013 04:24 PM, Peter Seebach wrote:
> The ar and strings utilities are provided as alternatives, but
> the rest of binutils is being done with binutils-symlinks. This
> has the side effect that if you want "as", and you install
> binutils-symlinks to get it, you don't get "ar" from it, because
> it's not in the symlinks package.
>
> Solution: Use the same mechanisms for everything, putting
> everything in ALTERNATIVES, so installing binutils on a target
> produces the expected behavior of having the various utilities in place.
> (We do this only for class-target, though.)
>
> Issues: The "embedspu" and "ld.gold" binaries may or may not exist,
> but the determination of whether to list them as alternatives is
> being made before the point at which we can easily check for them,
> so that can produce warnings.
>
> Signed-off-by: Peter Seebach <peter.seebach at windriver.com>
> ---
> meta/recipes-devtools/binutils/binutils.inc | 67 ++++++++++++++++----------
> 1 files changed, 41 insertions(+), 26 deletions(-)
>
> diff --git a/meta/recipes-devtools/binutils/binutils.inc b/meta/recipes-devtools/binutils/binutils.inc
> index 5e78dc0..eaf20bf 100644
> --- a/meta/recipes-devtools/binutils/binutils.inc
> +++ b/meta/recipes-devtools/binutils/binutils.inc
> @@ -22,31 +22,49 @@ FILES_${PN} = " \
> ${libdir}/lib*-*.so \
> ${prefix}/${TARGET_SYS}/bin/*"
>
> +# Use alternatives rather than actual symlinks.
> +FILES_${PN}-symlinks = ""
> +
> +ALLOW_EMPTY_${PN}-symlinks = "1"
> +
> FILES_${PN}-dev = " \
> ${includedir} \
> ${libdir}/*.la \
> ${libdir}/libbfd.so \
> ${libdir}/libopcodes.so"
>
> -FILES_${PN}-symlinks = " \
> - ${bindir}/addr2line \
> - ${bindir}/as \
> - ${bindir}/c++filt \
> - ${bindir}/embedspu \
> - ${bindir}/gprof \
> - ${bindir}/ld \
> - ${bindir}/ld.bfd \
> - ${bindir}/ld.gold \
> - ${bindir}/nm \
> - ${bindir}/objcopy \
> - ${bindir}/objdump \
> - ${bindir}/ranlib \
> - ${bindir}/readelf \
> - ${bindir}/elfedit \
> - ${bindir}/size \
> - ${bindir}/strip"
> -
> -FILES_${PN}-dbg += "${prefix}/${TARGET_SYS}/bin/.debug"
> +# Rather than duplicating multiple entries for these, make one
> +# list and reuse it.
> +
> +USE_ALTERNATIVES_FOR = " \
> + addr2line \
> + ar \
> + as \
> + c++filt \
> + elfedit \
> + gprof \
> + ld \
> + ${@base_contains('DISTRO_FEATURES', 'ld-is-gold', 'ld.gold', 'ld.bfd', d)} \
> + nm \
> + objcopy \
> + objdump \
> + ranlib \
> + readelf \
> + size \
> + strings \
> + strip \
> +"
> +
> +python do_package_prepend() {
> + make_alts = d.getVar("USE_ALTERNATIVES_FOR", True) or ""
> + prefix = d.getVar("TARGET_PREFIX", True)
> + bindir = d.getVar("bindir", True)
> + for alt in make_alts.split():
> + d.setVarFlag('ALTERNATIVE_TARGET', alt, bindir + "/" + prefix + alt)
> + d.setVarFlag('ALTERNATIVE_LINK_NAME', alt, bindir + "/" + alt)
> +}
> +
> +# FILES_${PN}-dbg = "${prefix}/${TARGET_SYS}/bin/.debug ${prefix}/${libdir}/.debug"
>
> B = "${S}/build.${HOST_SYS}.${TARGET_SYS}"
>
> @@ -120,7 +138,9 @@ do_install () {
> ln -sf $p `echo $p | sed -e s,${TARGET_PREFIX},,`
> done
>
> - rm -f ${D}${bindir}/ar ${D}${bindir}/strings
> + for alt in ${USE_ALTERNATIVES_FOR}; do
> + rm -f ${D}${bindir}/$alt
> + done
>
> oe_multilib_header bfd.h
> }
> @@ -129,10 +149,5 @@ inherit update-alternatives
>
> ALTERNATIVE_PRIORITY = "100"
>
> -ALTERNATIVE_${PN}-symlinks = "ar strings"
> -
> -ALTERNATIVE_LINK_NAME[ar] = "${bindir}/ar"
> -ALTERNATIVE_TARGET[ar] = "${bindir}/${TARGET_PREFIX}ar"
> +ALTERNATIVE_${PN}-symlinks_class-target = "${USE_ALTERNATIVES_FOR}"
>
> -ALTERNATIVE_LINK_NAME[strings] = "${bindir}/strings"
> -ALTERNATIVE_TARGET[strings] = "${bindir}/${TARGET_PREFIX}strings"
>
More information about the Openembedded-core
mailing list