Hi everyone,

We (actually mostly soap) rewrote parts of the intel-sdp.eclass and
decided to revbump it. Please review our changes.

Changes are:

* Move from EAPI=5 to 6
* Adopt to changed packaging layout
* Use ABI_ instead of multilib
* Drop eclipse support
* Require all RPM lists to be arrays
* Don't record in installation db


Thanks,

Justin
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# @ECLASS: intel-sdp-r1.eclass
# @MAINTAINER:
# Justin Lecher <j...@gentoo.org>
# David Seifert <s...@gentoo.org>
# Sci Team <s...@gentoo.org>
# @BLURB: Handling of Intel's Software Development Products package management

if [[ ! ${_INTEL_SDP_R1_ECLASS_} ]]; then

case "${EAPI:-0}" in
        6) ;;
        *) die "EAPI=${EAPI} is not supported" ;;
esac

# @ECLASS-VARIABLE: INTEL_DID
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download ID from Intel.
# To find out its value, see the links to download in
# https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
#
# e.g. 8365
#
# Must be defined before inheriting the eclass

# @ECLASS-VARIABLE: INTEL_DPN
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package name to download from Intel.
# To find out its value, see the links to download in
# https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
#
# e.g. parallel_studio_xe
#
# Must be defined before inheriting the eclass

# @ECLASS-VARIABLE: INTEL_DPV
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download version from Intel.
# To find out its value, see the links to download in
# https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
#
# e.g. 2016_update1
#
# Must be defined before inheriting the eclass

# @ECLASS-VARIABLE: INTEL_TARX
# @DESCRIPTION:
# The package extention.
# To find out its value, see the links to download in
# https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
#
# e.g. tar.gz
#
# Must be defined before inheriting the eclass
: ${INTEL_TARX:=tgz}

# @ECLASS-VARIABLE: INTEL_SUBDIR
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package sub-directory where it will end-up in /opt/intel
# To find out its value, you have to do a raw install from the Intel tar ball

# @ECLASS-VARIABLE: INTEL_SKIP_LICENSE
# @DEFAULT_UNSET
# @DESCRIPTION:
# Possibility to skip the mandatory check for licenses. Only set this if there
# is really no fix.

# @ECLASS-VARIABLE: INTEL_RPMS_DIR
# @DESCRIPTION:
# Main subdirectory which contains the rpms to extract.
: ${INTEL_RPMS_DIR:=rpm}

# @ECLASS-VARIABLE: INTEL_X86
# @DESCRIPTION:
# 32bit arch in rpm names
#
# e.g. i486
: ${INTEL_X86:=i486}

# @ECLASS-VARIABLE: INTEL_BIN_RPMS
# @DESCRIPTION:
# Functional name of rpm without any version/arch tag
# Has to be a bash array
#
# e.g. ("icc-l-all-devel")
#
# if the rpm is located in a directory other than INTEL_RPMS_DIR you can
# specify the full path
#
# e.g. CLI_install/rpm/intel-vtune-amplifier-xe-cli
: ${INTEL_BIN_RPMS:=()}

# @ECLASS-VARIABLE: INTEL_AMD64_RPMS
# @DESCRIPTION:
# AMD64 single arch rpms. Same syntax as INTEL_BIN_RPMS
# Has to be a bash array
: ${INTEL_AMD64_RPMS:=()}

# @ECLASS-VARIABLE: INTEL_X86_RPMS
# @DESCRIPTION:
# X86 single arch rpms. Same syntax as INTEL_BIN_RPMS
# Has to be a bash array
: ${INTEL_X86_RPMS:=()}

# @ECLASS-VARIABLE: INTEL_DAT_RPMS
# @DESCRIPTION:
# Functional name of rpm of common data which are arch free
# without any version tag
# Has to be a bash array
#
# e.g. ("openmp-l-all-devel")
#
# if the rpm is located in a directory different to INTEL_RPMS_DIR you can
# specify the full path
#
# e.g. CLI_install/rpm/intel-vtune-amplifier-xe-cli-common
: ${INTEL_DAT_RPMS:=()}

# @ECLASS-VARIABLE: INTEL_SINGLE_ARCH
# @DESCRIPTION:
# Unset, if only the multilib package will be provided by intel
: ${INTEL_SINGLE_ARCH:=true}

MULTILIB_COMPAT=( abi_x86_{32,64} )

inherit check-reqs eutils multilib-build versionator

_INTEL_PV1=$(get_version_component_range 1)
_INTEL_PV2=$(get_version_component_range 2)
_INTEL_PV3=$(get_version_component_range 3)
_INTEL_PV4=$(get_version_component_range 4)
_INTEL_PV=""
[[ -n ${_INTEL_PV4} ]] && _INTEL_PV+="${_INTEL_PV4}-"
[[ -n ${_INTEL_PV1} ]] && _INTEL_PV+="${_INTEL_PV1}"
[[ -n ${_INTEL_PV2} ]] && _INTEL_PV+=".${_INTEL_PV2}"
[[ -n ${_INTEL_PV3} ]] && _INTEL_PV+=".${_INTEL_PV3}"
[[ -n ${_INTEL_PV4} ]] && _INTEL_PV+="-${_INTEL_PV4}"

_INTEL_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/${INTEL_DID}/${INTEL_DPN}";

if [ ${INTEL_SINGLE_ARCH} == true ]; then
        SRC_URI="
                abi_x86_32? ( ${_INTEL_URI}_${INTEL_DPV}_ia32.${INTEL_TARX} )
                abi_x86_64? ( ${_INTEL_URI}_${INTEL_DPV}_intel64.${INTEL_TARX} 
)"
else
        SRC_URI="${_INTEL_URI}_${INTEL_DPV}.${INTEL_TARX}"
fi

LICENSE="Intel-SDP"
# Future work, #394411
#SLOT="${_INTEL_PV1}.${_INTEL_PV2}"
SLOT="0"

RESTRICT="mirror"

RDEPEND=""
DEPEND="app-arch/rpm2targz"

_INTEL_SDP_YEAR=${INTEL_DPV}
_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_sp*}
_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_update*}

# @ECLASS-VARIABLE: INTEL_SDP_DIR
# @DESCRIPTION:
# Full rootless path to installation dir
INTEL_SDP_DIR="opt/intel/${INTEL_SUBDIR}_${_INTEL_SDP_YEAR:-${_INTEL_PV1}}"
[[ -n ${_INTEL_PV3} ]] && INTEL_SDP_DIR+=".${_INTEL_PV3}"
[[ -n ${_INTEL_PV4} ]] && INTEL_SDP_DIR+=".${_INTEL_PV4}"

# @ECLASS-VARIABLE: INTEL_SDP_EDIR
# @DESCRIPTION:
# Full rooted path to installation dir
INTEL_SDP_EDIR="${EROOT%/}/${INTEL_SDP_DIR}"

S="${WORKDIR}"

QA_PREBUILT="${INTEL_SDP_DIR}/*"

# @ECLASS-VARIABLE: INTEL_ARCH
# @DEFAULT_UNSET
# @DESCRIPTION:
# Intels internal names of the arches; will be set at runtime accordingly
#
# e.g. amd64-multilib -> INTEL_ARCH="intel64 ia32"

# @FUNCTION: _isdp_big-warning
# @USAGE: [pre-check | test-failed]
# @INTERNAL
# @DESCRIPTION:
# warn user that we really require a license
_isdp_big-warning() {
        debug-print-function ${FUNCNAME} "${@}"

        case ${1} in
                pre-check )
                        echo ""
                        ewarn "License file not found!"
                        ;;

                test-failed )
                        echo ""
                        ewarn "Function test failed. Most probably due to an 
invalid license."
                        ewarn "This means you already tried to bypass the 
license check once."
                        ;;
        esac

        echo ""
        ewarn "Make sure you have received an Intel license."
        ewarn "To receive a non-commercial license, you need to register at:"
        ewarn "https://software.intel.com/en-us/qualify-for-free-software";
        ewarn "Install the license file into ${EPREFIX}/opt/intel/licenses"
        ewarn ""
        ewarn "Beginning with the 2016 suite of tools, license files are keyed"
        ewarn "to the MAC address of the eth0 interface. In order to retrieve"
        ewarn "a personalized license file, follow the instructions at"
        ewarn 
"https://software.intel.com/en-us/articles/how-do-i-get-my-license-file-for-intel-parallel-studio-xe-2016";

        case ${1} in
                pre-check )
                        ewarn "before proceeding with installation of ${P}"
                        echo ""
                        ;;
                * )
                        echo ""
                        ;;
                        esac
}

# @FUNCTION: _isdp_version_test
# @INTERNAL
# @DESCRIPTION:
# Testing for valid license by asking for version information of the compiler
_isdp_version_test() {
        debug-print-function ${FUNCNAME} "${@}"

        local comp comp_full arch warn
        case ${PN} in
                ifc )
                        debug-print "Testing ifort"
                        comp=ifort
                        ;;
                icc )
                        debug-print "Testing icc"
                        comp=icc
                        ;;
                *)
                        die "${PN} is not supported for testing"
                        ;;
        esac

        for arch in ${INTEL_ARCH}; do
                case ${EBUILD_PHASE} in
                        install )
                                
comp_full="${ED}/${INTEL_SDP_DIR}/linux/bin/${arch}/${comp}"
                                ;;
                        postinst )
                                
comp_full="${INTEL_SDP_EDIR}/linux/bin/${arch}/${comp}"
                                ;;
                        * )
                                ewarn "Compile test not supported in 
${EBUILD_PHASE}"
                                continue
                                ;;
                esac

                debug-print 
"LD_LIBRARY_PATH=\"${INTEL_SDP_EDIR}/linux/bin/${arch}/\" \"${comp_full}\" -V"

                LD_LIBRARY_PATH="${INTEL_SDP_EDIR}/linux/bin/${arch}/" 
"${comp_full}" -V &>/dev/null
                [[ $? -ne 0 ]] && warn=yes
        done
        [[ "${warn}" == "yes" ]] && _isdp_big-warning test-failed
}

# @FUNCTION: _isdp_run-test
# @INTERNAL
# @DESCRIPTION:
# Test if installed compiler is working
_isdp_run-test() {
        debug-print-function ${FUNCNAME} "${@}"

        if [[ -z ${INTEL_SKIP_LICENSE} ]]; then
                case ${PN} in
                        ifc | icc )
                                _isdp_version_test ;;
                        * )
                                debug-print "No test available for ${PN}"
                                ;;
                esac
        fi
}

# @FUNCTION: convert2intel_arch
# @USAGE: <arch>
# @DESCRIPTION:
# Convert between portage arch (e.g. amd64, x86) and intel arch
# nomenclature (e.g. intel64, ia32)
convert2intel_arch() {
        debug-print-function ${FUNCNAME} "${@}"

        case $1 in
                amd64|abi_x86_64|*amd64*)
                        echo "intel64"
                        ;;
                x86|abi_x86_32|*x86*)
                        echo "ia32"
                        ;;
                *)
                        die "Abi \'$1\' is unsupported"
                        ;;
        esac
}

# @FUNCTION: intel-sdp-r1_pkg_pretend
# @DESCRIPTION:
# @CODE
# * Check that the user has a (valid) license file before going on.
# * Check for space requirements being fullfilled
# @CODE
intel-sdp-r1_pkg_pretend() {
        debug-print-function ${FUNCNAME} "${@}"

        local warn=1 dir dirs ret arch a p

        : ${CHECKREQS_DISK_BUILD:=256M}
        check-reqs_pkg_pretend

        if [[ -z ${INTEL_SKIP_LICENSE} ]]; then
                if echo ${INTEL_LICENSE_FILE} | grep -q @; then
                        einfo "Looks like you are using following license 
server:"
                        einfo "   ${INTEL_LICENSE_FILE}"
                        return 0
                fi

                dirs=(
                        "${EPREFIX}/opt/intel/licenses"
                        "${INTEL_SDP_EDIR}/licenses"
                        "${INTEL_SDP_EDIR}/Licenses"
                        )
                for dir in "${dirs[@]}" ; do
                        ebegin "Checking for a license in: ${dir}"
                        #maybe use nullglob or [[ $(echo ${dir/*lic) != 
"${dir}/*lic" ]]
                        [[ $( ls "${dir}"/*lic 2>/dev/null ) ]]; ret=$?
                        eend ${ret}
                        if [[ ${ret} == "0" ]]; then
                                warn=${ret}
                                break
                        fi
                done
                if [[ ${warn} == "1" ]]; then
                        _isdp_big-warning pre-check
                        die "Could not find license file"
                fi
        else
                eqawarn "The ebuild doesn't check for presence of a proper 
intel license!"
                eqawarn "This shouldn't be done unless there is a very good 
reason."
        fi
}

# @FUNCTION: intel-sdp-r1_pkg_setup
# @DESCRIPTION:
# Setting up and sorting some internal variables
intel-sdp-r1_pkg_setup() {
        debug-print-function ${FUNCNAME} "${@}"
        local arch a p

        INTEL_ARCH=""

        if use abi_x86_64; then
                arch+=" x86_64"
                INTEL_ARCH+=" intel64"
        fi
        if use abi_x86_32; then
                arch+=" ${INTEL_X86}"
                INTEL_ARCH+=" ia32"
        fi
        INTEL_RPMS=()
        INTEL_RPMS_FULL=()

        for p in "${INTEL_BIN_RPMS[@]}"; do
                for a in ${arch}; do
                        if [ ${p} == $(basename ${p}) ]; then
                                # check for variables ending in ".rpm"
                                # these are excluded from version expansion, 
due to Intel's
                                # idiosyncratic versioning scheme beginning 
with their 2016
                                # suite of tools.
                                if [[ "${p}" == *.rpm ]]; then
                                        INTEL_RPMS+=( intel-${p} )
                                else
                                        INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.${a}.rpm )
                                fi
                        else
                                if [[ "${p}" == *.rpm ]]; then
                                        INTEL_RPMS_FULL+=( ${p} )
                                else
                                        INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.${a}.rpm )
                                fi
                        fi
                done
        done

        if use amd64; then
                for p in "${INTEL_AMD64_RPMS[@]}"; do
                        if [ ${p} == $(basename ${p}) ]; then
                                if [[ "${p}" == *.rpm ]]; then
                                        INTEL_RPMS+=( intel-${p} )
                                else
                                        INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.x86_64.rpm )
                                fi
                        else
                                if [[ "${p}" == *.rpm ]]; then
                                        INTEL_RPMS_FULL+=( ${p} )
                                else
                                        INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.x86_64.rpm )
                                fi
                        fi
                done
        fi

        for p in "${INTEL_X86_RPMS[@]}"; do
                if [ ${p} == $(basename ${p}) ]; then
                        if [[ "${p}" == *.rpm ]]; then
                                INTEL_RPMS+=( intel-${p} )
                        else
                                INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.${INTEL_X86}.rpm )
                        fi
                else
                        if [[ "${p}" == *.rpm ]]; then
                                INTEL_RPMS_FULL+=( ${p} )
                        else
                                INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.${INTEL_X86}.rpm )
                        fi
                fi
        done

        for p in "${INTEL_DAT_RPMS[@]}"; do
                if [ ${p} == $(basename ${p}) ]; then
                        if [[ "${p}" == *.rpm ]]; then
                                INTEL_RPMS+=( intel-${p} )
                        else
                                INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.noarch.rpm )
                        fi
                else
                        if [[ "${p}" == *.rpm ]]; then
                                INTEL_RPMS_FULL+=( ${p} )
                        else
                                INTEL_RPMS_FULL+=( ${p}-${_INTEL_PV}.noarch.rpm 
)
                        fi
                fi
        done
}

# @FUNCTION: intel-sdp-r1_src_unpack
# @DESCRIPTION:
# Unpacking necessary rpms from tarball, extract them and rearrange the output.
intel-sdp-r1_src_unpack() {
        local l r subdir rb t list=() debug_list

        for t in ${A}; do
                for r in "${INTEL_RPMS[@]}"; do
                        rpmdir=${t%%.*}/${INTEL_RPMS_DIR}
                        list+=( ${rpmdir}/${r} )
                done

                for r in "${INTEL_RPMS_FULL[@]}"; do
                        list+=( ${t%%.*}/${r} )
                done

                debug_list="$(IFS=$'\n'; echo ${list[@]} )"

                debug-print "Adding to decompression list:"
                debug-print ${debug_list}

                tar xvf "${DISTDIR}"/${t} ${list[@]} &> 
"${T}"/rpm-extraction.log

                for r in ${list[@]}; do
                        rb=$(basename ${r})
                        einfo "Unpacking ${rb}"
                        rpm2tar -O ${r} | tar xvf - | sed -e \
                                "s:^\.:${EROOT#/}:g" > /dev/null; assert 
"unpacking ${r} failed"
                done
        done
}

# @FUNCTION: intel-sdp-r1_src_install
# @DESCRIPTION:
# Install everything
intel-sdp-r1_src_install() {
        debug-print-function ${FUNCNAME} "${@}"

        # remove uninstall information
        if path_exists opt/intel/"${INTEL_DPN}"*/uninstall; then
                ebegin "Cleaning out uninstall"
                rm -r opt/intel/"${INTEL_DPN}"*/uninstall || die
                eend
        fi

        # handle documentation
        if path_exists "opt/intel/documentation_${_INTEL_SDP_YEAR}"; then
                if path_exists 
"opt/intel/documentation_${_INTEL_SDP_YEAR}/en/man/common/man1"; then
                        doman 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/en/man/common/man1/*
                        rm -r 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/en/man || die
                fi

                if use doc; then
                        if ! use linguas_ja; then
                                rm -r 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/ja || die
                        fi
                        dodoc -r opt/intel/documentation_"${_INTEL_SDP_YEAR}"/*
                fi

                ebegin "Cleaning out documentation"
                rm -r "opt/intel/documentation_${_INTEL_SDP_YEAR}" || die
                rm "${INTEL_SDP_DIR}"/linux/{documentation,man} || die
                eend
        fi

        # handle examples
        if path_exists "opt/intel/samples_${_INTEL_SDP_YEAR}"; then
                if use examples; then
                        if ! use linguas_ja; then
                                rm -r opt/intel/samples_"${_INTEL_SDP_YEAR}"/ja 
|| die
                        fi
                        dodoc -r opt/intel/samples_"${_INTEL_SDP_YEAR}"/*
                fi

                ebegin "Cleaning out examples"
                rm -r "opt/intel/samples_${_INTEL_SDP_YEAR}" || die
                eend
        fi

        # remove eclipse
        rm -rf opt/intel/ide_support_* || die

        ebegin "Tagging ${PN}"
        find opt -name \*sh -type f -exec sed -i \
                -e "s:<.*DIR>:${INTEL_SDP_EDIR}/linux:g" \
                '{}' + || die
        eend

        [[ -d "${ED}" ]] || dodir /
        mv opt "${ED}"/ || die "moving files failed"

        dodir "${INTEL_SDP_DIR}"/licenses /opt/intel/ism/rm
        keepdir "${INTEL_SDP_DIR}"/licenses /opt/intel/ism/rm
}

# @FUNCTION: intel-sdp-r1_pkg_postinst
# @DESCRIPTION:
# Test for all things working
intel-sdp-r1_pkg_postinst() {
        debug-print-function ${FUNCNAME} "${@}"

        _isdp_run-test

        if [[ ${PN} = icc ]] && has_version ">=dev-util/ccache-3.1.9-r2" ; then
                #add ccache links as icc might get installed after ccache
                "${EROOT}"/usr/bin/ccache-config --install-links
        fi

        elog "Beginning with the 2016 suite of Intel tools, Gentoo has removed"
        elog "support for the eclipse plugin. If you require the IDE support,"
        elog "you will have to install the suite on your own, outside portage."
}

# @FUNCTION: intel-sdp-r1_pkg_postrm
# @DESCRIPTION:
# Sanitize cache links
intel-sdp-r1_pkg_postrm() {
        debug-print-function ${FUNCNAME} "${@}"

        if [[ ${PN} = icc ]] && has_version ">=dev-util/ccache-3.1.9-r2" && [[ 
-z ${REPLACED_BY_VERSION} ]]; then
                # --remove-links would remove all links, --install-links 
updates them
                "${EROOT}"/usr/bin/ccache-config --install-links
        fi
}

EXPORT_FUNCTIONS pkg_setup src_unpack src_install pkg_postinst pkg_postrm 
pkg_pretend

_INTEL_SDP_R1_ECLASS_=1
fi
--- eclass/intel-sdp.eclass     2016-02-15 09:15:03.000000000 +0100
+++ /Volumes/iExtra/justin/src/gentoo/science/eclass/intel-sdp-r1.eclass        
2016-02-15 09:13:59.000000000 +0100
@@ -2,16 +2,17 @@
 # Distributed under the terms of the GNU General Public License v2
 # $Id$
 
-# @ECLASS: intel-sdp.eclass
+# @ECLASS: intel-sdp-r1.eclass
 # @MAINTAINER:
 # Justin Lecher <j...@gentoo.org>
+# David Seifert <s...@gentoo.org>
 # Sci Team <s...@gentoo.org>
 # @BLURB: Handling of Intel's Software Development Products package management
 
-if [[ ! ${_INTEL_SDP_ECLASS_} ]]; then
+if [[ ! ${_INTEL_SDP_R1_ECLASS_} ]]; then
 
 case "${EAPI:-0}" in
-       5) ;;
+       6) ;;
        *) die "EAPI=${EAPI} is not supported" ;;
 esac
 
@@ -22,7 +23,7 @@
 # To find out its value, see the links to download in
 # https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
 #
-# e.g. 2504
+# e.g. 8365
 #
 # Must be defined before inheriting the eclass
 
@@ -44,7 +45,7 @@
 # To find out its value, see the links to download in
 # https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
 #
-# e.g. 2011_sp1_update2
+# e.g. 2016_update1
 #
 # Must be defined before inheriting the eclass
 
@@ -80,56 +81,74 @@
 # @DESCRIPTION:
 # 32bit arch in rpm names
 #
-# e.g. i484
+# e.g. i486
 : ${INTEL_X86:=i486}
 
 # @ECLASS-VARIABLE: INTEL_BIN_RPMS
 # @DESCRIPTION:
 # Functional name of rpm without any version/arch tag
+# Has to be a bash array
 #
-# e.g. compilerprof
+# e.g. ("icc-l-all-devel")
 #
-# if the rpm is located in a directory different to INTEL_RPMS_DIR you can
+# if the rpm is located in a directory other than INTEL_RPMS_DIR you can
 # specify the full path
 #
 # e.g. CLI_install/rpm/intel-vtune-amplifier-xe-cli
+: ${INTEL_BIN_RPMS:=()}
+
+# @ECLASS-VARIABLE: INTEL_AMD64_RPMS
+# @DESCRIPTION:
+# AMD64 single arch rpms. Same syntax as INTEL_BIN_RPMS
+# Has to be a bash array
+: ${INTEL_AMD64_RPMS:=()}
+
+# @ECLASS-VARIABLE: INTEL_X86_RPMS
+# @DESCRIPTION:
+# X86 single arch rpms. Same syntax as INTEL_BIN_RPMS
+# Has to be a bash array
+: ${INTEL_X86_RPMS:=()}
 
 # @ECLASS-VARIABLE: INTEL_DAT_RPMS
 # @DESCRIPTION:
 # Functional name of rpm of common data which are arch free
 # without any version tag
+# Has to be a bash array
 #
-# e.g. openmp
+# e.g. ("openmp-l-all-devel")
 #
 # if the rpm is located in a directory different to INTEL_RPMS_DIR you can
 # specify the full path
 #
 # e.g. CLI_install/rpm/intel-vtune-amplifier-xe-cli-common
-: ${INTEL_DAT_RPMS:=""}
+: ${INTEL_DAT_RPMS:=()}
 
 # @ECLASS-VARIABLE: INTEL_SINGLE_ARCH
 # @DESCRIPTION:
 # Unset, if only the multilib package will be provided by intel
 : ${INTEL_SINGLE_ARCH:=true}
 
-# @ECLASS-VARIABLE: INTEL_SDP_DB
-# @DESCRIPTION:
-# Full path to intel registry db
-INTEL_SDP_DB="${EROOT%/}"/opt/intel/intel-sdp-products.db
+MULTILIB_COMPAT=( abi_x86_{32,64} )
 
-inherit check-reqs eutils multilib versionator
+inherit check-reqs eutils multilib-build versionator
 
 _INTEL_PV1=$(get_version_component_range 1)
 _INTEL_PV2=$(get_version_component_range 2)
 _INTEL_PV3=$(get_version_component_range 3)
 _INTEL_PV4=$(get_version_component_range 4)
-_INTEL_URI="http://registrationcenter-download.intel.com/irc_nas/${INTEL_DID}/${INTEL_DPN}";
+_INTEL_PV=""
+[[ -n ${_INTEL_PV4} ]] && _INTEL_PV+="${_INTEL_PV4}-"
+[[ -n ${_INTEL_PV1} ]] && _INTEL_PV+="${_INTEL_PV1}"
+[[ -n ${_INTEL_PV2} ]] && _INTEL_PV+=".${_INTEL_PV2}"
+[[ -n ${_INTEL_PV3} ]] && _INTEL_PV+=".${_INTEL_PV3}"
+[[ -n ${_INTEL_PV4} ]] && _INTEL_PV+="-${_INTEL_PV4}"
+
+_INTEL_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/${INTEL_DID}/${INTEL_DPN}";
 
 if [ ${INTEL_SINGLE_ARCH} == true ]; then
        SRC_URI="
-               amd64? ( multilib? ( ${_INTEL_URI}_${INTEL_DPV}.${INTEL_TARX} ) 
)
-               amd64? ( !multilib? ( 
${_INTEL_URI}_${INTEL_DPV}_intel64.${INTEL_TARX} ) )
-               x86?    ( ${_INTEL_URI}_${INTEL_DPV}_ia32.${INTEL_TARX} )"
+               abi_x86_32? ( ${_INTEL_URI}_${INTEL_DPV}_ia32.${INTEL_TARX} )
+               abi_x86_64? ( ${_INTEL_URI}_${INTEL_DPV}_intel64.${INTEL_TARX} 
)"
 else
        SRC_URI="${_INTEL_URI}_${INTEL_DPV}.${INTEL_TARX}"
 fi
@@ -138,20 +157,22 @@
 # Future work, #394411
 #SLOT="${_INTEL_PV1}.${_INTEL_PV2}"
 SLOT="0"
-IUSE="examples multilib"
 
 RESTRICT="mirror"
 
 RDEPEND=""
 DEPEND="app-arch/rpm2targz"
 
-_INTEL_SDP_YEAR=${INTEL_DPV%_update*}
-_INTEL_SDP_YEAR=${INTEL_DPV%_sp*}
+_INTEL_SDP_YEAR=${INTEL_DPV}
+_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_sp*}
+_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_update*}
 
 # @ECLASS-VARIABLE: INTEL_SDP_DIR
 # @DESCRIPTION:
 # Full rootless path to installation dir
-INTEL_SDP_DIR="opt/intel/${INTEL_SUBDIR}-${_INTEL_SDP_YEAR:-${_INTEL_PV1}}.${_INTEL_PV3}.${_INTEL_PV4}"
+INTEL_SDP_DIR="opt/intel/${INTEL_SUBDIR}_${_INTEL_SDP_YEAR:-${_INTEL_PV1}}"
+[[ -n ${_INTEL_PV3} ]] && INTEL_SDP_DIR+=".${_INTEL_PV3}"
+[[ -n ${_INTEL_PV4} ]] && INTEL_SDP_DIR+=".${_INTEL_PV4}"
 
 # @ECLASS-VARIABLE: INTEL_SDP_EDIR
 # @DESCRIPTION:
@@ -169,34 +190,6 @@
 #
 # e.g. amd64-multilib -> INTEL_ARCH="intel64 ia32"
 
-# @FUNCTION: _isdp_link_eclipse_plugins
-# @INTERNAL
-# @DESCRIPTION:
-# Creating necessary links to use intel compiler with eclipse
-_isdp_link_eclipse_plugins() {
-       debug-print-function ${FUNCNAME} "${@}"
-
-       local c f
-       pushd ${INTEL_SDP_DIR}/eclipse_support > /dev/null || die
-               for c in cdt*; do
-                       local cv=${c#cdt} ev=3.$(( ${cv:0:1} - 1))
-                       if has_version "dev-util/eclipse-sdk:${ev}"; then
-                               einfo "Linking eclipse (v${ev}) plugin cdt 
(v${cv})"
-                               for f in cdt${cv}/eclipse/features/*; do
-                                       dodir 
/usr/$(get_libdir)/eclipse-${ev}/features
-                                       dosym 
"${INTEL_SDP_EDIR}"/eclipse_support/${f} \
-                                               
/usr/$(get_libdir)/eclipse-${ev}/features/ || die
-                               done
-                               for f in cdt${cv}/eclipse/plugins/*; do
-                                       dodir 
/usr/$(get_libdir)/eclipse-${ev}/plugins
-                                       dosym 
"${INTEL_SDP_EDIR}"/eclipse_support/${f} \
-                                               
/usr/$(get_libdir)/eclipse-${ev}/plugins/ || die
-                               done
-                       fi
-               done
-       popd > /dev/null || die
-}
-
 # @FUNCTION: _isdp_big-warning
 # @USAGE: [pre-check | test-failed]
 # @INTERNAL
@@ -212,7 +205,7 @@
                        ;;
 
                test-failed )
-                       echo
+                       echo ""
                        ewarn "Function test failed. Most probably due to an 
invalid license."
                        ewarn "This means you already tried to bypass the 
license check once."
                        ;;
@@ -222,7 +215,12 @@
        ewarn "Make sure you have received an Intel license."
        ewarn "To receive a non-commercial license, you need to register at:"
        ewarn "https://software.intel.com/en-us/qualify-for-free-software";
-       ewarn "Install the license file into ${INTEL_SDP_EDIR}/licenses/"
+       ewarn "Install the license file into ${EPREFIX}/opt/intel/licenses"
+       ewarn ""
+       ewarn "Beginning with the 2016 suite of tools, license files are keyed"
+       ewarn "to the MAC address of the eth0 interface. In order to retrieve"
+       ewarn "a personalized license file, follow the instructions at"
+       ewarn 
"https://software.intel.com/en-us/articles/how-do-i-get-my-license-file-for-intel-parallel-studio-xe-2016";
 
        case ${1} in
                pre-check )
@@ -260,10 +258,10 @@
        for arch in ${INTEL_ARCH}; do
                case ${EBUILD_PHASE} in
                        install )
-                               
comp_full="${ED}/${INTEL_SDP_DIR}/bin/${arch}/${comp}"
+                               
comp_full="${ED}/${INTEL_SDP_DIR}/linux/bin/${arch}/${comp}"
                                ;;
                        postinst )
-                               
comp_full="${INTEL_SDP_EDIR}/bin/${arch}/${comp}"
+                               
comp_full="${INTEL_SDP_EDIR}/linux/bin/${arch}/${comp}"
                                ;;
                        * )
                                ewarn "Compile test not supported in 
${EBUILD_PHASE}"
@@ -271,9 +269,9 @@
                                ;;
                esac
 
-               debug-print "LD_LIBRARY_PATH=\"${INTEL_SDP_EDIR}/bin/${arch}/\" 
\"${comp_full}\" -V"
+               debug-print 
"LD_LIBRARY_PATH=\"${INTEL_SDP_EDIR}/linux/bin/${arch}/\" \"${comp_full}\" -V"
 
-               LD_LIBRARY_PATH="${INTEL_SDP_EDIR}/bin/${arch}/" "${comp_full}" 
-V &>/dev/null
+               LD_LIBRARY_PATH="${INTEL_SDP_EDIR}/linux/bin/${arch}/" 
"${comp_full}" -V &>/dev/null
                [[ $? -ne 0 ]] && warn=yes
        done
        [[ "${warn}" == "yes" ]] && _isdp_big-warning test-failed
@@ -297,13 +295,34 @@
        fi
 }
 
-# @FUNCTION: intel-sdp_pkg_pretend
+# @FUNCTION: convert2intel_arch
+# @USAGE: <arch>
+# @DESCRIPTION:
+# Convert between portage arch (e.g. amd64, x86) and intel arch
+# nomenclature (e.g. intel64, ia32)
+convert2intel_arch() {
+       debug-print-function ${FUNCNAME} "${@}"
+
+       case $1 in
+               amd64|abi_x86_64|*amd64*)
+                       echo "intel64"
+                       ;;
+               x86|abi_x86_32|*x86*)
+                       echo "ia32"
+                       ;;
+               *)
+                       die "Abi \'$1\' is unsupported"
+                       ;;
+       esac
+}
+
+# @FUNCTION: intel-sdp-r1_pkg_pretend
 # @DESCRIPTION:
 # @CODE
 # * Check that the user has a (valid) license file before going on.
 # * Check for space requirements being fullfilled
 # @CODE
-intel-sdp_pkg_pretend() {
+intel-sdp-r1_pkg_pretend() {
        debug-print-function ${FUNCNAME} "${@}"
 
        local warn=1 dir dirs ret arch a p
@@ -319,9 +338,9 @@
                fi
 
                dirs=(
+                       "${EPREFIX}/opt/intel/licenses"
                        "${INTEL_SDP_EDIR}/licenses"
                        "${INTEL_SDP_EDIR}/Licenses"
-                       "${EPREFIX}/opt/intel/licenses"
                        )
                for dir in "${dirs[@]}" ; do
                        ebegin "Checking for a license in: ${dir}"
@@ -338,63 +357,108 @@
                        die "Could not find license file"
                fi
        else
-               eqawarn "The ebuild doesn't check for presents of a proper 
intel license!"
-               eqawarn "This shouldn't be done unless there is a serious 
reason."
+               eqawarn "The ebuild doesn't check for presence of a proper 
intel license!"
+               eqawarn "This shouldn't be done unless there is a very good 
reason."
        fi
 }
 
-# @FUNCTION: intel-sdp_pkg_setup
+# @FUNCTION: intel-sdp-r1_pkg_setup
 # @DESCRIPTION:
 # Setting up and sorting some internal variables
-intel-sdp_pkg_setup() {
+intel-sdp-r1_pkg_setup() {
        debug-print-function ${FUNCNAME} "${@}"
        local arch a p
 
-       if use x86; then
-               arch=${INTEL_X86}
-               INTEL_ARCH="ia32"
-       elif use amd64; then
-               arch=x86_64
-               INTEL_ARCH="intel64"
-               if has_multilib_profile; then
-                       arch="x86_64 ${INTEL_X86}"
-                       INTEL_ARCH="intel64 ia32"
-               fi
+       INTEL_ARCH=""
+
+       if use abi_x86_64; then
+               arch+=" x86_64"
+               INTEL_ARCH+=" intel64"
+       fi
+       if use abi_x86_32; then
+               arch+=" ${INTEL_X86}"
+               INTEL_ARCH+=" ia32"
        fi
        INTEL_RPMS=()
        INTEL_RPMS_FULL=()
-       if [[ $(declare -p INTEL_BIN_RPMS) = "declare -a "* ]] ; then
-               _INTEL_BIN_RPMS=( ${INTEL_BIN_RPMS[@]} )
-       else
-               read -r -d '' -a _INTEL_BIN_RPMS <<<"${INTEL_BIN_RPMS}"
-       fi
-       for p in "${_INTEL_BIN_RPMS[@]}"; do
+
+       for p in "${INTEL_BIN_RPMS[@]}"; do
                for a in ${arch}; do
                        if [ ${p} == $(basename ${p}) ]; then
-                               INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV4}-${_INTEL_PV1}.${_INTEL_PV2}-${_INTEL_PV3}.${a}.rpm )
+                               # check for variables ending in ".rpm"
+                               # these are excluded from version expansion, 
due to Intel's
+                               # idiosyncratic versioning scheme beginning 
with their 2016
+                               # suite of tools.
+                               if [[ "${p}" == *.rpm ]]; then
+                                       INTEL_RPMS+=( intel-${p} )
+                               else
+                                       INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.${a}.rpm )
+                               fi
                        else
-                               INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV4}-${_INTEL_PV1}.${_INTEL_PV2}-${_INTEL_PV3}.${a}.rpm )
+                               if [[ "${p}" == *.rpm ]]; then
+                                       INTEL_RPMS_FULL+=( ${p} )
+                               else
+                                       INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.${a}.rpm )
+                               fi
                        fi
                done
        done
-       if [[ $(declare -p INTEL_DAT_RPMS) = "declare -a "* ]] ; then
-               _INTEL_DAT_RPMS=( ${INTEL_DAT_RPMS[@]} )
-       else
-               read -r -d '' -a _INTEL_DAT_RPMS <<<"${INTEL_DAT_RPMS}"
+
+       if use amd64; then
+               for p in "${INTEL_AMD64_RPMS[@]}"; do
+                       if [ ${p} == $(basename ${p}) ]; then
+                               if [[ "${p}" == *.rpm ]]; then
+                                       INTEL_RPMS+=( intel-${p} )
+                               else
+                                       INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.x86_64.rpm )
+                               fi
+                       else
+                               if [[ "${p}" == *.rpm ]]; then
+                                       INTEL_RPMS_FULL+=( ${p} )
+                               else
+                                       INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.x86_64.rpm )
+                               fi
+                       fi
+               done
        fi
-       for p in "${_INTEL_DAT_RPMS[@]}"; do
+
+       for p in "${INTEL_X86_RPMS[@]}"; do
+               if [ ${p} == $(basename ${p}) ]; then
+                       if [[ "${p}" == *.rpm ]]; then
+                               INTEL_RPMS+=( intel-${p} )
+                       else
+                               INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.${INTEL_X86}.rpm )
+                       fi
+               else
+                       if [[ "${p}" == *.rpm ]]; then
+                               INTEL_RPMS_FULL+=( ${p} )
+                       else
+                               INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV}.${INTEL_X86}.rpm )
+                       fi
+               fi
+       done
+
+       for p in "${INTEL_DAT_RPMS[@]}"; do
                if [ ${p} == $(basename ${p}) ]; then
-                       INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV4}-${_INTEL_PV1}.${_INTEL_PV2}-${_INTEL_PV3}.noarch.rpm )
+                       if [[ "${p}" == *.rpm ]]; then
+                               INTEL_RPMS+=( intel-${p} )
+                       else
+                               INTEL_RPMS+=( 
intel-${p}-${_INTEL_PV}.noarch.rpm )
+                       fi
                else
-                       INTEL_RPMS_FULL+=( 
${p}-${_INTEL_PV4}-${_INTEL_PV1}.${_INTEL_PV2}-${_INTEL_PV3}.noarch.rpm )
+                       if [[ "${p}" == *.rpm ]]; then
+                               INTEL_RPMS_FULL+=( ${p} )
+                       else
+                               INTEL_RPMS_FULL+=( ${p}-${_INTEL_PV}.noarch.rpm 
)
+                       fi
                fi
        done
 }
 
-# @FUNCTION: intel-sdp_src_unpack
+# @FUNCTION: intel-sdp-r1_src_unpack
 # @DESCRIPTION:
 # Unpacking necessary rpms from tarball, extract them and rearrange the output.
-intel-sdp_src_unpack() {
+intel-sdp-r1_src_unpack() {
        local l r subdir rb t list=() debug_list
 
        for t in ${A}; do
@@ -416,71 +480,66 @@
 
                for r in ${list[@]}; do
                        rb=$(basename ${r})
-                       l=.${rb}_$(date +'%d%m%y_%H%M%S').log
                        einfo "Unpacking ${rb}"
                        rpm2tar -O ${r} | tar xvf - | sed -e \
-                               "s:^\.:${EROOT#/}:g" > ${l}; assert "unpacking 
${r} failed"
-                       mv ${l} opt/intel/ || die "failed moving extract log 
file"
+                               "s:^\.:${EROOT#/}:g" > /dev/null; assert 
"unpacking ${r} failed"
                done
        done
-
-       mv opt/intel/* ${INTEL_SDP_DIR} || die "mv to INTEL_SDP_DIR failed"
 }
 
-# @FUNCTION: intel-sdp_src_install
+# @FUNCTION: intel-sdp-r1_src_install
 # @DESCRIPTION:
 # Install everything
-intel-sdp_src_install() {
+intel-sdp-r1_src_install() {
        debug-print-function ${FUNCNAME} "${@}"
 
-       if path_exists "${INTEL_SDP_DIR}"/uninstall*; then
-               ebegin "Cleaning out uninstall information"
-               find "${INTEL_SDP_DIR}"/uninstall* -delete || die
+       # remove uninstall information
+       if path_exists opt/intel/"${INTEL_DPN}"*/uninstall; then
+               ebegin "Cleaning out uninstall"
+               rm -r opt/intel/"${INTEL_DPN}"*/uninstall || die
                eend
        fi
 
-       if path_exists "${INTEL_SDP_DIR}"/Documentation; then
-               dodoc -r "${INTEL_SDP_DIR}"/Documentation/*
+       # handle documentation
+       if path_exists "opt/intel/documentation_${_INTEL_SDP_YEAR}"; then
+               if path_exists 
"opt/intel/documentation_${_INTEL_SDP_YEAR}/en/man/common/man1"; then
+                       doman 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/en/man/common/man1/*
+                       rm -r 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/en/man || die
+               fi
+
+               if use doc; then
+                       if ! use linguas_ja; then
+                               rm -r 
opt/intel/documentation_"${_INTEL_SDP_YEAR}"/ja || die
+                       fi
+                       dodoc -r opt/intel/documentation_"${_INTEL_SDP_YEAR}"/*
+               fi
 
                ebegin "Cleaning out documentation"
-               find "${INTEL_SDP_DIR}"/Documentation -delete || die
+               rm -r "opt/intel/documentation_${_INTEL_SDP_YEAR}" || die
+               rm "${INTEL_SDP_DIR}"/linux/{documentation,man} || die
                eend
        fi
 
-       if path_exists "${INTEL_SDP_DIR}"/Samples; then
-               if use examples ; then
-                       insinto /usr/share/${P}/examples/
-                       doins -r "${INTEL_SDP_DIR}"/Samples/*
+       # handle examples
+       if path_exists "opt/intel/samples_${_INTEL_SDP_YEAR}"; then
+               if use examples; then
+                       if ! use linguas_ja; then
+                               rm -r opt/intel/samples_"${_INTEL_SDP_YEAR}"/ja 
|| die
+                       fi
+                       dodoc -r opt/intel/samples_"${_INTEL_SDP_YEAR}"/*
                fi
+
                ebegin "Cleaning out examples"
-               find "${INTEL_SDP_DIR}"/Samples -delete || die
+               rm -r "opt/intel/samples_${_INTEL_SDP_YEAR}" || die
                eend
        fi
 
-       if path_exists "${INTEL_SDP_DIR}"/eclipse_support; then
-               if has eclipse ${IUSE} && use eclipse; then
-                       _isdp_link_eclipse_plugins
-               else
-                       ebegin "Cleaning out eclipse plugin"
-                       find "${INTEL_SDP_DIR}"/eclipse_support -delete || die
-                       eend
-               fi
-       fi
-
-       if path_exists "${INTEL_SDP_DIR}"/man; then
-               path_exists "${INTEL_SDP_DIR}"/man/en_US/man1/* && \
-                       doman "${INTEL_SDP_DIR}"/man/en_US/man1/*
-               path_exists "${INTEL_SDP_DIR}"/man/man1/* && \
-                       doman "${INTEL_SDP_DIR}"/man/man1/*
-               has linguas_ja ${IUSE} && use linguas_ja && \
-                       doman -i18n=ja_JP "${INTEL_SDP_DIR}"/man/ja_JP/man1/*
-
-               find "${INTEL_SDP_DIR}"/man -delete || die
-       fi
+       # remove eclipse
+       rm -rf opt/intel/ide_support_* || die
 
        ebegin "Tagging ${PN}"
        find opt -name \*sh -type f -exec sed -i \
-               -e "s:<.*DIR>:${INTEL_SDP_EDIR}:g" \
+               -e "s:<.*DIR>:${INTEL_SDP_EDIR}/linux:g" \
                '{}' + || die
        eend
 
@@ -491,43 +550,30 @@
        keepdir "${INTEL_SDP_DIR}"/licenses /opt/intel/ism/rm
 }
 
-# @FUNCTION: intel-sdp_pkg_postinst
+# @FUNCTION: intel-sdp-r1_pkg_postinst
 # @DESCRIPTION:
-# Add things to intel database
-intel-sdp_pkg_postinst() {
+# Test for all things working
+intel-sdp-r1_pkg_postinst() {
        debug-print-function ${FUNCNAME} "${@}"
 
-       # add product registry to intel "database"
-       local l r
-       for r in ${INTEL_RPMS}; do
-               l="$(ls -1 ${EROOT%/}/opt/intel/.${r}_*.log | head -n 1)"
-               echo >> ${INTEL_SDP_DB} \
-                       
"<:${r%-${_INTEL_PV4}*}-${_INTEL_PV4}:${r}:${INTEL_SDP_EDIR}:${l}:>"
-       done
        _isdp_run-test
 
        if [[ ${PN} = icc ]] && has_version ">=dev-util/ccache-3.1.9-r2" ; then
                #add ccache links as icc might get installed after ccache
                "${EROOT}"/usr/bin/ccache-config --install-links
        fi
+
+       elog "Beginning with the 2016 suite of Intel tools, Gentoo has removed"
+       elog "support for the eclipse plugin. If you require the IDE support,"
+       elog "you will have to install the suite on your own, outside portage."
 }
 
-# @FUNCTION: intel-sdp_pkg_postrm
+# @FUNCTION: intel-sdp-r1_pkg_postrm
 # @DESCRIPTION:
-# Sanitize intel database
-intel-sdp_pkg_postrm() {
+# Sanitize cache links
+intel-sdp-r1_pkg_postrm() {
        debug-print-function ${FUNCNAME} "${@}"
 
-       # remove from intel "database"
-       if [[ -e ${INTEL_SDP_DB} ]]; then
-               local r
-               for r in ${INTEL_RPMS}; do
-                       sed -i \
-                               -e "/${r}/d" \
-                               ${INTEL_SDP_DB}
-               done
-       fi
-
        if [[ ${PN} = icc ]] && has_version ">=dev-util/ccache-3.1.9-r2" && [[ 
-z ${REPLACED_BY_VERSION} ]]; then
                # --remove-links would remove all links, --install-links 
updates them
                "${EROOT}"/usr/bin/ccache-config --install-links
@@ -536,5 +582,5 @@
 
 EXPORT_FUNCTIONS pkg_setup src_unpack src_install pkg_postinst pkg_postrm 
pkg_pretend
 
-_INTEL_SDP_ECLASS_=1
+_INTEL_SDP_R1_ECLASS_=1
 fi

Attachment: signature.asc
Description: OpenPGP digital signature

Reply via email to