From e227606bdd196ac77b55b60a5e9d104ad5e77658 Mon Sep 17 00:00:00 2001 From: Jeremy Huddleston Date: Wed, 12 Jan 2005 11:13:28 +0000 Subject: [PATCH] Added multilib functions to handle installing include files for separate ABIs. --- eclass/kernel-2.eclass | 15 ++- eclass/multilib.eclass | 239 +++++++++++++++++++++++++++++++++++++---- 2 files changed, 226 insertions(+), 28 deletions(-) diff --git a/eclass/kernel-2.eclass b/eclass/kernel-2.eclass index 6123c91a1240..11f3e80313e0 100644 --- a/eclass/kernel-2.eclass +++ b/eclass/kernel-2.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2005 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.76 2005/01/12 05:07:24 eradicator Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/kernel-2.eclass,v 1.77 2005/01/12 11:13:28 eradicator Exp $ # Description: kernel.eclass rewrite for a clean base regarding the 2.6 # series of kernel with back-compatibility for 2.4 @@ -42,7 +42,7 @@ # UNIPATCH_STRICTORDER - if this is set places patches into directories of # order, so they are applied in the order passed -inherit toolchain-funcs +inherit toolchain-funcs multilib ECLASS="kernel-2" INHERITED="$INHERITED $ECLASS" @@ -300,18 +300,17 @@ install_headers() { dodir ${ddir}/asm-sparc64 cp -ax ${S}/include/asm-sparc/* ${D}/usr/include/asm-sparc cp -ax ${S}/include/asm-sparc64/* ${D}/usr/include/asm-sparc64 - generate_sparc_asm ${D}/usr/include - else - cp -ax ${S}/include/asm/* ${D}/${ddir}/asm - fi - if [ "${ARCH}" = "amd64" ]; then + #generate_sparc_asm ${D}/usr/include + create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64 + elif [ "${ARCH}" = "amd64" ]; then rm -Rf ${D}/${ddir}/asm dodir ${ddir}/asm-i386 dodir ${ddir}/asm-x86_64 cp -ax ${S}/include/asm-i386/* ${D}/usr/include/asm-i386 cp -ax ${S}/include/asm-x86_64/* ${D}/usr/include/asm-x86_64 - /bin/sh ${FILESDIR}/generate-asm-amd64 ${D}/usr/include + #/bin/sh ${FILESDIR}/generate-asm-amd64 ${D}/usr/include + create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64 else cp -ax ${S}/include/asm/* ${D}/${ddir}/asm fi diff --git a/eclass/multilib.eclass b/eclass/multilib.eclass index aa065b22feff..10d33a67d1be 100644 --- a/eclass/multilib.eclass +++ b/eclass/multilib.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2004 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/multilib.eclass,v 1.1 2005/01/12 00:21:53 eradicator Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/multilib.eclass,v 1.2 2005/01/12 11:13:28 eradicator Exp $ # # Author: Jeremy Huddleston # @@ -12,6 +12,8 @@ INHERITED="$INHERITED $ECLASS" DESCRIPTION="Based on the ${ECLASS} eclass" +DEPEND="!build? ( sys-apps/sed sys-apps/findutils sys-apps/coreutils )" + # This function simply returns the desired lib directory. With portage # 2.0.51, we now have support for installing libraries to lib32/lib64 # to accomidate the needs of multilib systems. It's no longer a good idea @@ -30,16 +32,7 @@ get_libdir() { if [ ! -z "${CONF_LIBDIR_OVERRIDE}" ] ; then # if there is an override, we want to use that... always. CONF_LIBDIR="${CONF_LIBDIR_OVERRIDE}" - # We don't need to know the verison of portage. We only need to know - # if there is support for CONF_LIBDIR in econf and co. - # Danny van Dyk 2004/17/09 - #elif portageq has_version / ' approach... + elif [ -n "$(get_abi_LIBDIR)" ]; then CONF_LIBDIR="$(get_abi_LIBDIR)" elif [ "${LIBDIR_TEST/CONF_LIBDIR}" == "${LIBDIR_TEST}" ]; then # we don't have CONF_LIBDIR support # will be : where +# is what is put in the #ifdef for choosing that dir. +# +# Ideas for this code came from debian's sparc-linux headers package. +# +# Example: +# create_ml_includes /usr/include/asm __sparc__:/usr/include/asm-sparc __sparc64__:/usr/include/asm-sparc64 +# create_ml_includes /usr/include/asm __i386__:/usr/include/asm-i386 __x86_64__:/usr/include/asm-x86_64 +create_ml_includes() { + local dest="${1}" + shift + local mlinfo="${@}" + local basedirs=$(create_ml_includes-listdirs ${mlinfo}) + + create_ml_includes-makedestdirs ${dest} ${basedirs} + + local file + for file in $(create_ml_includes-allfiles ${basedirs}); do + local name="$(echo $file | tr a-z A-Z | sed 's:[^A-Z]:_:g')" + { + echo "/* Common header file autogenerated by create_ml_includes in multilib.eclass */" + echo "#ifndef __CREATE_ML_INCLUDES_STUB_${name}__" + echo "#define __CREATE_ML_INCLUDES_STUB_${name}__" + echo "" + + local dir + for dir in ${basedirs}; do + if [ -f "${D}/${dir}/${file}" ]; then + echo "#ifdef $(create_ml_includes-sym_for_dir ${dir} ${mlinfo})" + echo "#include \"$(create_ml_includes-relative_between ${dest} ${dir})/${file}\"" + echo "#endif /* $(create_ml_includes-sym_for_dir ${dir} ${mlinfo}) */" + echo "" + fi + done + + echo "#endif /* __CREATE_ML_INCLUDES_STUB_${name}__ */" + } > ${D}/${dest}/${file} + done +} + +# Helper function for create_ml_includes +# TODO: This needs to be updated to spit out relative paths... +create_ml_includes-relative_between() { + local from=${1} + local to=${2} + + echo "${ROOT}${to}" +} + +# Helper function for create_ml_includes +create_ml_includes-listdirs() { + local dirs + local data + for data in ${@}; do + dirs="${dirs} ${data/*:/}" + done + echo ${dirs:1} +} + +# Helper function for create_ml_includes +create_ml_includes-makedestdirs() { + local dest=${1} + shift + local basedirs=${@} + + dodir ${dest} + + local basedir + for basedir in ${basedirs}; do + local dir + for dir in $(find ${D}/${basedir} -type d); do + dodir ${dest}/${dir/${D}\/${basedir}/} + done + done +} + +# Helper function for create_ml_includes +create_ml_includes-allfiles() { + local basedirs=${@} + + local files + for basedir in ${basedirs}; do + local file + for file in $(find ${D}/${basedir} -type f); do + echo ${file/${D}\/${basedir}\//} + done + done | sort | uniq +} + +# Helper function for create_ml_includes +create_ml_includes-sym_for_dir() { + local dir="${1}" + shift + local data + for data in ${@}; do + if [ "${dir}" = "${data/*:/}" ]; then + echo ${data/:*/} + return 0 + fi + done + echo "Should be here -- create_ml_includes-sym_for_dir ${1} ${@}" + # exit because we'll likely be called from a subshell + exit 1 +} -- 2.26.2