* [gentoo-dev] RFC: intel-sdp-r1.eclass, Take #2
@ 2016-02-20 20:41 David Seifert
0 siblings, 0 replies; only message in thread
From: David Seifert @ 2016-02-20 20:41 UTC (permalink / raw
To: gentoo-dev
[-- Attachment #1: Type: text/plain, Size: 613 bytes --]
Dear all,
after much criticism, I present you with an improved eclass for
handling the Intel 2016 (and hopefully beyond) suite of software.
We have improved the following:
* Made variables names more clear, to separate upstream vars from
internal/Gentoo vars.
* Practically no more global state in the eclass. Everything is handled
by getter functions now. Due to strong concerns voiced with regards to
egencache, getter functions are NOT used in global scope, except for
one occurrence. We believe the improved abstraction/encapsulation makes
this one use of a function in global scope bearable.
Regards
David
[-- Attachment #2: intel-sdp-r1.eclass.diff --]
[-- Type: text/x-patch, Size: 19147 bytes --]
diff --git a/eclass/intel-sdp-r1.eclass b/eclass/intel-sdp-r1.eclass
index 14467b7..1413109 100644
--- a/eclass/intel-sdp-r1.eclass
+++ b/eclass/intel-sdp-r1.eclass
@@ -9,62 +9,71 @@
# Sci Team <sci@gentoo.org>
# @BLURB: Handling of Intel's Software Development Products package management
+MULTILIB_COMPAT=( abi_x86_{32,64} )
+
+inherit check-reqs eutils multilib-build versionator
+
+EXPORT_FUNCTIONS pkg_setup src_unpack src_install pkg_postinst pkg_postrm pkg_pretend
+
if [[ ! ${_INTEL_SDP_R1_ECLASS_} ]]; then
-case "${EAPI:-0}" in
+case "${EAPI}" in
6) ;;
*) die "EAPI=${EAPI} is not supported" ;;
esac
-# @ECLASS-VARIABLE: INTEL_DID
+# @ECLASS-VARIABLE: INTEL_DIST_SKU
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download ID from Intel.
-# To find out its value, see the links to download in
+# To determine 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
+# Must be defined before inheriting the eclass.
-# @ECLASS-VARIABLE: INTEL_DPN
+# @ECLASS-VARIABLE: INTEL_DIST_NAME
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package name to download from Intel.
-# To find out its value, see the links to download in
+# To determine 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
+# Must be defined before inheriting the eclass.
-# @ECLASS-VARIABLE: INTEL_DPV
+# @ECLASS-VARIABLE: INTEL_DIST_PV
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download version from Intel.
-# To find out its value, see the links to download in
+# To determine 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
+# 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
+# The package suffix.
+# To determine 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
+# 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
+# The package sub-directory (without version numbers) where it will end-up in /opt/intel
+#
+# e.g. compilers_and_libraries
+#
+# To determine its value, you have to do a raw install from the Intel tarball.
# @ECLASS-VARIABLE: INTEL_SKIP_LICENSE
# @DEFAULT_UNSET
@@ -86,7 +95,7 @@ esac
# @ECLASS-VARIABLE: INTEL_BIN_RPMS
# @DESCRIPTION:
-# Functional name of rpm without any version/arch tag
+# Functional name of rpm without any version/arch tag.
# Has to be a bash array
#
# e.g. ("icc-l-all-devel")
@@ -94,63 +103,81 @@ esac
# 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:=()}
+# e.g. ("CLI_install/rpm/intel-vtune-amplifier-xe-cli")
+[[ ${INTEL_BIN_RPMS[@]} ]] || 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:=()}
+# AMD64 single arch rpms. Same syntax as INTEL_BIN_RPMS.
+# Has to be a bash array.
+[[ ${INTEL_AMD64_RPMS[@]} ]] || 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:=()}
+# X86 single arch rpms. Same syntax as INTEL_BIN_RPMS.
+# Has to be a bash array.
+[[ ${INTEL_X86_RPMS[@]} ]] || 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
+# 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:=()}
+# e.g. ("CLI_install/rpm/intel-vtune-amplifier-xe-cli-common")
+[[ ${INTEL_DAT_RPMS[@]} ]] || INTEL_DAT_RPMS=()
# @ECLASS-VARIABLE: INTEL_SINGLE_ARCH
+# @DEFAULT_UNSET
# @DESCRIPTION:
-# Unset, if only the multilib package will be provided by intel
-: ${INTEL_SINGLE_ARCH:=true}
+# Set to "true" if arches are to be fetched separately, instead of using the combined tarball.
-MULTILIB_COMPAT=( abi_x86_{32,64} )
+# @FUNCTION: _isdp_set-version-vars
+# @INTERNAL
+# @DESCRIPTION:
+# Sets the internal Intel version variables. This should be used temporarily
+# and unset using _isdp_unset-version-vars when not needed anymore.
+_isdp_set-version-vars() {
+ local i
+ for i in {1..4}; do
+ declare -g _INTEL_PV${i}=$(get_version_component_range ${i})
+ done
-inherit check-reqs eutils multilib-build versionator
+ local prefixes=('' '-' '.' '.' '-')
+ local indices=(4 1 2 3 4)
+ local var
+ _INTEL_PV=""
+ for i in {0..4}; do
+ var="_INTEL_PV${indices[i]}"
+ _INTEL_PV+="${prefixes[i]}${!var}"
+ done
+}
-_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}"
+# @FUNCTION: _isdp_unset-version-vars
+# @INTERNAL
+# @DESCRIPTION:
+# Unsets the internal Intel version variables, in order to keep the
+# global environment clean.
+_isdp_unset-version-vars() {
+ local i
+ for i in {1..4}; do
+ unset _INTEL_PV${i}
+ done
+ unset _INTEL_PV
+}
-_INTEL_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/${INTEL_DID}/${INTEL_DPN}"
+_INTEL_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/${INTEL_DIST_SKU}/${INTEL_DIST_NAME}"
-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} )"
+if [[ "${INTEL_SINGLE_ARCH}" != true ]]; then
+ SRC_URI="${_INTEL_URI}_${INTEL_DIST_PV}.${INTEL_TARX}"
else
- SRC_URI="${_INTEL_URI}_${INTEL_DPV}.${INTEL_TARX}"
+ SRC_URI="
+ abi_x86_32? ( ${_INTEL_URI}_${INTEL_DIST_PV}_ia32.${INTEL_TARX} )
+ abi_x86_64? ( ${_INTEL_URI}_${INTEL_DIST_PV}_intel64.${INTEL_TARX} )"
fi
LICENSE="Intel-SDP"
@@ -163,32 +190,30 @@ RESTRICT="mirror"
RDEPEND=""
DEPEND="app-arch/rpm2targz"
-_INTEL_SDP_YEAR=${INTEL_DPV}
+_INTEL_SDP_YEAR=${INTEL_DIST_PV}
_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_sp*}
_INTEL_SDP_YEAR=${_INTEL_SDP_YEAR%_update*}
# @ECLASS-VARIABLE: INTEL_SDP_DIR
+# @INTERNAL
# @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}"
+_isdp_set-version-vars
+INTEL_SDP_DIR="opt/intel/${INTEL_SUBDIR}_${_INTEL_SDP_YEAR:-${_INTEL_PV1}}.${_INTEL_PV3}.${_INTEL_PV4}"
+_isdp_unset-version-vars
S="${WORKDIR}"
QA_PREBUILT="${INTEL_SDP_DIR}/*"
# @ECLASS-VARIABLE: INTEL_ARCH
+# @INTERNAL
# @DEFAULT_UNSET
# @DESCRIPTION:
+# Has to be a bash array
# Intels internal names of the arches; will be set at runtime accordingly
#
-# e.g. amd64-multilib -> INTEL_ARCH="intel64 ia32"
+# e.g. amd64-multilib -> INTEL_ARCH=("intel64" "ia32")
# @FUNCTION: _isdp_big-warning
# @USAGE: [pre-check | test-failed]
@@ -200,18 +225,16 @@ _isdp_big-warning() {
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 ""
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"
@@ -225,12 +248,10 @@ _isdp_big-warning() {
case ${1} in
pre-check )
ewarn "before proceeding with installation of ${P}"
- echo ""
;;
* )
- echo ""
;;
- esac
+ esac
}
# @FUNCTION: _isdp_version_test
@@ -255,26 +276,25 @@ _isdp_version_test() {
;;
esac
- for arch in ${INTEL_ARCH}; do
+ for arch in ${INTEL_ARCH[@]}; do
case ${EBUILD_PHASE} in
install )
- comp_full="${ED}/${INTEL_SDP_DIR}/linux/bin/${arch}/${comp}"
+ comp_full="${ED%/}/${INTEL_SDP_DIR}/linux/bin/${arch}/${comp}"
;;
postinst )
- comp_full="${INTEL_SDP_EDIR}/linux/bin/${arch}/${comp}"
+ comp_full="${EROOT%/}/${INTEL_SDP_DIR}/linux/bin/${arch}/${comp}"
;;
* )
- ewarn "Compile test not supported in ${EBUILD_PHASE}"
+ die "Compile test not supported in ${EBUILD_PHASE}"
continue
;;
esac
- debug-print "LD_LIBRARY_PATH=\"${INTEL_SDP_EDIR}/linux/bin/${arch}/\" \"${comp_full}\" -V"
+ debug-print "LD_LIBRARY_PATH=\"${EROOT%/}/${INTEL_SDP_DIR}/linux/bin/${arch}/\" \"${comp_full}\" -V"
- LD_LIBRARY_PATH="${INTEL_SDP_EDIR}/linux/bin/${arch}/" "${comp_full}" -V &>/dev/null
- [[ $? -ne 0 ]] && warn=yes
+ LD_LIBRARY_PATH="${EROOT%/}/${INTEL_SDP_DIR}/linux/bin/${arch}/" "${comp_full}" -V &>/dev/null || warn=yes
done
- [[ "${warn}" == "yes" ]] && _isdp_big-warning test-failed
+ [[ ${warn} == yes ]] && _isdp_big-warning test-failed
}
# @FUNCTION: _isdp_run-test
@@ -284,10 +304,11 @@ _isdp_version_test() {
_isdp_run-test() {
debug-print-function ${FUNCNAME} "${@}"
- if [[ -z ${INTEL_SKIP_LICENSE} ]]; then
+ if [[ -z "${INTEL_SKIP_LICENSE}" ]]; then
case ${PN} in
ifc | icc )
- _isdp_version_test ;;
+ _isdp_version_test
+ ;;
* )
debug-print "No test available for ${PN}"
;;
@@ -295,19 +316,20 @@ _isdp_run-test() {
fi
}
-# @FUNCTION: convert2intel_arch
+# @FUNCTION: _isdp_convert2intel-arch
# @USAGE: <arch>
+# @INTERNAL
# @DESCRIPTION:
# Convert between portage arch (e.g. amd64, x86) and intel arch
# nomenclature (e.g. intel64, ia32)
-convert2intel_arch() {
+_isdp_convert2intel-arch() {
debug-print-function ${FUNCNAME} "${@}"
case $1 in
- amd64|abi_x86_64|*amd64*)
+ *amd64*|abi_x86_64)
echo "intel64"
;;
- x86|abi_x86_32|*x86*)
+ *x86*)
echo "ia32"
;;
*)
@@ -318,10 +340,11 @@ convert2intel_arch() {
# @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
+#
+# * Check for a (valid) license before proceeding.
+#
+# * Check for space requirements being fulfilled.
+#
intel-sdp-r1_pkg_pretend() {
debug-print-function ${FUNCNAME} "${@}"
@@ -331,7 +354,7 @@ intel-sdp-r1_pkg_pretend() {
check-reqs_pkg_pretend
if [[ -z ${INTEL_SKIP_LICENSE} ]]; then
- if echo ${INTEL_LICENSE_FILE} | grep -q @; then
+ if [[ ${INTEL_LICENSE_FILE} == *@* ]]; then
einfo "Looks like you are using following license server:"
einfo " ${INTEL_LICENSE_FILE}"
return 0
@@ -339,20 +362,19 @@ intel-sdp-r1_pkg_pretend() {
dirs=(
"${EPREFIX}/opt/intel/licenses"
- "${INTEL_SDP_EDIR}/licenses"
- "${INTEL_SDP_EDIR}/Licenses"
+ "${EROOT%/}/${INTEL_SDP_DIR}/licenses"
+ "${EROOT%/}/${INTEL_SDP_DIR}/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}
+ path_exists "${dir}"/*lic && warn=0
+ eend ${warn}
+
+ if [[ ${warn} == 0 ]]; then
break
fi
done
- if [[ ${warn} == "1" ]]; then
+ if [[ ${warn} == 1 ]]; then
_isdp_big-warning pre-check
die "Could not find license file"
fi
@@ -367,122 +389,94 @@ intel-sdp-r1_pkg_pretend() {
# Setting up and sorting some internal variables
intel-sdp-r1_pkg_setup() {
debug-print-function ${FUNCNAME} "${@}"
- local arch a p
- INTEL_ARCH=""
+ INTEL_ARCH=()
+ INTEL_RPMS=()
+ local arch
if use abi_x86_64; then
- arch+=" x86_64"
- INTEL_ARCH+=" intel64"
+ arch+="x86_64"
+ INTEL_ARCH+=($(_isdp_convert2intel-arch "abi_x86_64"))
fi
if use abi_x86_32; then
arch+=" ${INTEL_X86}"
- INTEL_ARCH+=" ia32"
+ INTEL_ARCH+=($(_isdp_convert2intel-arch "abi_x86_32"))
fi
- INTEL_RPMS=()
- INTEL_RPMS_FULL=()
- for p in "${INTEL_BIN_RPMS[@]}"; do
- for a in ${arch}; do
- if [ ${p} == $(basename ${p}) ]; then
+ # Expand components into full RPM filenames
+ expand_component_into_full_rpm() {
+ local deref_var="${1}[@]"
+ local arch="${2}"
+
+ local p a rpm_prefix rpm_suffix
+
+ for p in "${!deref_var}"; do
+ for a in ${arch}; do
+ # check if a directory is prefixed
+ if [[ "${p}" == "${p##*/}" ]]; then
+ rpm_prefix="${INTEL_RPMS_DIR}/intel-"
+ else
+ rpm_prefix=""
+ fi
+
# 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
+ # suite of tools. For instance
+ #
+ # intel-ccompxe-2016.1-056.noarch.rpm
+ #
+ # which is completely unpredictable using versions
if [[ "${p}" == *.rpm ]]; then
- INTEL_RPMS_FULL+=( ${p} )
+ rpm_suffix=""
else
- INTEL_RPMS_FULL+=( ${p}-${_INTEL_PV}.${a}.rpm )
+ rpm_suffix="-${_INTEL_PV}.${a}.rpm"
fi
- fi
+
+ INTEL_RPMS+=( "${rpm_prefix}${p}${rpm_suffix}" )
+ done
done
- done
+ }
+
+ local vars_to_expand=("INTEL_BIN_RPMS" "INTEL_X86_RPMS" "INTEL_DAT_RPMS")
+ local vars_to_expand_suffixes=("${arch}" "${INTEL_X86}" "noarch")
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
+ vars_to_expand+=("INTEL_AMD64_RPMS")
+ vars_to_expand_suffixes+=("x86_64")
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
+ _isdp_set-version-vars
+ local i
+ for ((i=0; i<${#vars_to_expand[@]}; i++)); do
+ expand_component_into_full_rpm "${vars_to_expand[i]}" "${vars_to_expand_suffixes[i]}"
done
+ _isdp_unset-version-vars
}
# @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
-
+ local t
for t in ${A}; do
+ local r list=()
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
+ local debug_list
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
+ 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"
+ einfo "Unpacking ${r}"
+ echo "Unpacking ${r}" >> "${T}"/rpm-extraction.log
+ rpm2tar -O ${r} | tar -xvf - &>> "${T}"/rpm-extraction.log; assert "Unpacking ${r} failed"
done
done
}
@@ -494,9 +488,9 @@ intel-sdp-r1_src_install() {
debug-print-function ${FUNCNAME} "${@}"
# remove uninstall information
- if path_exists opt/intel/"${INTEL_DPN}"*/uninstall; then
+ if path_exists opt/intel/"${INTEL_DIST_NAME}"*/uninstall; then
ebegin "Cleaning out uninstall"
- rm -r opt/intel/"${INTEL_DPN}"*/uninstall || die
+ rm -r opt/intel/"${INTEL_DIST_NAME}"*/uninstall || die
eend
fi
@@ -534,19 +528,29 @@ intel-sdp-r1_src_install() {
eend
fi
- # remove eclipse
+ # remove eclipse unconditionally
+ ebegin "Cleaning out eclipse files"
rm -rf opt/intel/ide_support_* || die
+ eend
+
+ # remove remaining japanese stuff
+ if ! use linguas_ja; then
+ ebegin "Cleaning out japanese language directories"
+ local i
+ while IFS='\n' read -r -d '' i; do
+ rm -r "${i}" || die
+ done < <(find opt -type d -name "ja" -print0)
+ eend
+ fi
ebegin "Tagging ${PN}"
find opt -name \*sh -type f -exec sed -i \
- -e "s:<.*DIR>:${INTEL_SDP_EDIR}/linux:g" \
+ -e "s:<.*DIR>:${EROOT%/}/${INTEL_SDP_DIR}/linux:g" \
'{}' + || die
eend
- [[ -d "${ED}" ]] || dodir /
- mv opt "${ED}"/ || die "moving files failed"
+ 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
}
@@ -574,13 +578,11 @@ intel-sdp-r1_pkg_postinst() {
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
+ 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
[-- Attachment #3: intel-sdp-r1.eclass --]
[-- Type: text/plain, Size: 17191 bytes --]
# 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 <jlec@gentoo.org>
# David Seifert <soap@gentoo.org>
# Sci Team <sci@gentoo.org>
# @BLURB: Handling of Intel's Software Development Products package management
MULTILIB_COMPAT=( abi_x86_{32,64} )
inherit check-reqs eutils multilib-build versionator
EXPORT_FUNCTIONS src_unpack src_install pkg_postinst pkg_postrm pkg_pretend
if [[ ! ${_INTEL_SDP_R1_ECLASS_} ]]; then
case "${EAPI}" in
6) ;;
*) die "EAPI=${EAPI} is not supported" ;;
esac
# @ECLASS-VARIABLE: INTEL_DIST_SKU
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download ID from Intel.
# To determine 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_DIST_NAME
# @DESCRIPTION:
# The package name to download from Intel.
# To determine 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.
: ${INTEL_DIST_NAME:=parallel_studio_xe}
# @ECLASS-VARIABLE: INTEL_DIST_PV
# @DEFAULT_UNSET
# @DESCRIPTION:
# The package download version from Intel.
# To determine 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_DIST_TARX
# @DESCRIPTION:
# The package distfile suffix.
# To determine its value, see the links to download in
# https://registrationcenter.intel.com/RegCenter/MyProducts.aspx
#
# e.g. tgz
#
# Must be defined before inheriting the eclass.
: ${INTEL_DIST_TARX:=tgz}
# @ECLASS-VARIABLE: INTEL_SUBDIR
# @DESCRIPTION:
# The package sub-directory (without version numbers) where it will end-up in /opt/intel
#
# e.g. compilers_and_libraries
#
# To determine its value, you have to do a raw install from the Intel tarball.
: ${INTEL_SUBDIR:=compilers_and_libraries}
# @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_DIST_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_DIST_BIN_RPMS[@]} ]] || INTEL_DIST_BIN_RPMS=()
# @ECLASS-VARIABLE: INTEL_DIST_AMD64_RPMS
# @DESCRIPTION:
# AMD64 single arch rpms. Same syntax as INTEL_DIST_BIN_RPMS.
# Has to be a bash array.
[[ ${INTEL_DIST_AMD64_RPMS[@]} ]] || INTEL_DIST_AMD64_RPMS=()
# @ECLASS-VARIABLE: INTEL_DIST_X86_RPMS
# @DESCRIPTION:
# X86 single arch rpms. Same syntax as INTEL_DIST_BIN_RPMS.
# Has to be a bash array.
[[ ${INTEL_DIST_X86_RPMS[@]} ]] || INTEL_DIST_X86_RPMS=()
# @ECLASS-VARIABLE: INTEL_DIST_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_DIST_DAT_RPMS[@]} ]] || INTEL_DIST_DAT_RPMS=()
# @ECLASS-VARIABLE: INTEL_DIST_SPLIT_ARCH
# @DESCRIPTION:
# Set to "true" if arches are to be fetched separately, instead of using
# the combined tarball.
: ${INTEL_DIST_SPLIT_ARCH:=false}
# @FUNCTION: _isdp_get-sdp-full-pv
# @INTERNAL
# @DESCRIPTION:
# Gets the full internal Intel version specifier.
_isdp_get-sdp-full-pv() {
local _intel_pv=($(get_version_components))
local _intel_pv_full="${_intel_pv[3]}-${_intel_pv[0]}.${_intel_pv[1]}.${_intel_pv[2]}-${_intel_pv[3]}"
echo "${_intel_pv_full}"
}
# @FUNCTION: _isdp_get-sdp-year
# @INTERNAL
# @DESCRIPTION:
# Gets the year component from INTEL_DIST_PV
_isdp_get-sdp-year() {
local _intel_sdp_year
_intel_sdp_year=${INTEL_DIST_PV}
_intel_sdp_year=${_intel_sdp_year%_sp*}
_intel_sdp_year=${_intel_sdp_year%_update*}
echo "${_intel_sdp_year}"
}
# @FUNCTION: isdp_get-sdp-dir
# @DESCRIPTION:
# Gets the full rootless path to the installation directory
#
# e.g. opt/intel/compilers_and_libraries_2016.1.150
isdp_get-sdp-dir() {
local _intel_sdp_dir="opt/intel/${INTEL_SUBDIR}_$(_isdp_get-sdp-year).$(get_version_component_range 3-4)"
echo "${_intel_sdp_dir}"
}
# @FUNCTION: isdp_get-sdp-edir
# @DESCRIPTION:
# Gets the full rooted/prefixed path to the installation directory
#
# e.g. /opt/intel/compilers_and_libraries_2016.1.150
isdp_get-sdp-edir() {
local _intel_sdp_edir="${EPREFIX%/}/$(isdp_get-sdp-dir)"
echo "${_intel_sdp_edir}"
}
_INTEL_URI="http://registrationcenter-download.intel.com/akdlm/irc_nas/${INTEL_DIST_SKU}/${INTEL_DIST_NAME}"
if [[ "${INTEL_DIST_SPLIT_ARCH}" != true ]]; then
SRC_URI="${_INTEL_URI}_${INTEL_DIST_PV}.${INTEL_DIST_TARX}"
else
SRC_URI="
abi_x86_32? ( ${_INTEL_URI}_${INTEL_DIST_PV}_ia32.${INTEL_DIST_TARX} )
abi_x86_64? ( ${_INTEL_URI}_${INTEL_DIST_PV}_intel64.${INTEL_DIST_TARX} )"
fi
unset _INTEL_URI
LICENSE="Intel-SDP"
# TODO: Proper slotting
# Future work, #394411
SLOT="0"
RESTRICT="mirror"
RDEPEND=""
DEPEND="app-arch/rpm2targz"
S="${WORKDIR}"
QA_PREBUILT="$(isdp_get-sdp-dir)/*"
# @FUNCTION: isdp_convert2intel-arch
# @USAGE: <arch>
# @DESCRIPTION:
# Convert between portage arch (e.g. amd64, x86) and intel installed arch
# nomenclature (e.g. intel64, ia32)
isdp_convert2intel-arch() {
debug-print-function ${FUNCNAME} "${@}"
case $1 in
*amd64*|abi_x86_64)
echo "intel64"
;;
*x86*)
echo "ia32"
;;
*)
die "Abi \'$1\' is unsupported"
;;
esac
}
# @FUNCTION: isdp_get-native-abi-arch
# @DESCRIPTION:
# Determine the the intel arch string of the native ABI
isdp_get-native-abi-arch() {
debug-print-function ${FUNCNAME} "${@}"
use amd64 && echo "$(isdp_convert2intel-arch abi_x86_64)"
use x86 && echo "$(isdp_convert2intel-arch abi_x86_32)"
}
# @FUNCTION: isdp_get-sdp-installed-arches
# @DESCRIPTION:
# Returns a space separated list of the arch suffixes used in directory
# names for enabled ABIs. Intel uses "ia32" for x86 and "intel64" for
# amd64. The result would be "ia32 intel64" if both ABIs were enabled.
isdp_get-sdp-installed-arches() {
local arch=()
use abi_x86_64 && arch+=($(isdp_convert2intel-arch abi_x86_64))
use abi_x86_32 && arch+=($(isdp_convert2intel-arch abi_x86_32))
echo "${arch[*]}"
}
# @FUNCTION: _isdp_get-sdp-source-rpm-arches
# @INTERNAL
# @DESCRIPTION:
# Returns a space separated list of the arch suffixes used in the RPM filenames, e.g.
#
# intel-openmp-l-all-150-16.0.1-150.i486.rpm
# intel-openmp-l-all-150-16.0.1-150.x86_64.rpm
#
# the result would consist of "i486 x86_64".
_isdp_get-sdp-source-rpm-arches() {
local arch=()
use abi_x86_64 && arch+=("x86_64")
use abi_x86_32 && arch+=("${INTEL_X86}")
echo "${arch[*]}"
}
# @FUNCTION: _isdp_generate-list-install-rpms
# @INTERNAL
# @DESCRIPTION:
# Generates the list of fully expanded RPMs to be extracted.
_isdp_generate-list-install-rpms() {
debug-print-function ${FUNCNAME} "${@}"
# Expand components into full RPM filenames
expand_component_into_full_rpm() {
local deref_var="${1}[@]"
local arch="${2}"
local p a rpm_prefix rpm_suffix expanded_full_rpms=()
for p in "${!deref_var}"; do
for a in ${arch}; do
# check if a directory is prefixed
if [[ "${p}" == "${p##*/}" ]]; then
rpm_prefix="${INTEL_RPMS_DIR}/intel-"
else
rpm_prefix=""
fi
# 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. For instance
#
# intel-ccompxe-2016.1-056.noarch.rpm
#
# which is completely unpredictable using versions
if [[ "${p}" == *.rpm ]]; then
rpm_suffix=""
else
rpm_suffix="-$(_isdp_get-sdp-full-pv).${a}.rpm"
fi
expanded_full_rpms+=( "${rpm_prefix}${p}${rpm_suffix}" )
done
done
echo ${expanded_full_rpms[*]}
}
local vars_to_expand=("INTEL_DIST_BIN_RPMS" "INTEL_DIST_DAT_RPMS")
local vars_to_expand_suffixes=("$(_isdp_get-sdp-source-rpm-arches)" "noarch")
if use abi_x86_32; then
vars_to_expand+=("INTEL_DIST_X86_RPMS")
vars_to_expand_suffixes+=("${INTEL_X86}")
fi
if use abi_x86_64; then
vars_to_expand+=("INTEL_DIST_AMD64_RPMS")
vars_to_expand_suffixes+=("x86_64")
fi
local i fully_expanded_intel_rpms=()
for ((i=0; i<${#vars_to_expand[@]}; i++)); do
fully_expanded_intel_rpms+=($(expand_component_into_full_rpm "${vars_to_expand[i]}" "${vars_to_expand_suffixes[i]}"))
done
echo ${fully_expanded_intel_rpms[*]}
}
# @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 )
ewarn "License file not found!"
;;
test-failed )
ewarn "Function test failed. Most probably due to an invalid license."
ewarn "This means you already tried to bypass the license check once."
;;
esac
ewarn
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}"
;;
* )
;;
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
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
local comp_full arch warn
for arch in $(isdp_get-sdp-installed-arches); do
case ${EBUILD_PHASE} in
install )
comp_full="${ED%/}/$(isdp_get-sdp-dir)/linux/bin/${arch}/${comp}"
;;
postinst )
comp_full="$(isdp_get-sdp-edir)/linux/bin/${arch}/${comp}"
;;
* )
die "Compile test not supported in ${EBUILD_PHASE}"
;;
esac
debug-print "LD_LIBRARY_PATH=\"$(isdp_get-sdp-edir)/linux/bin/${arch}/\" \"${comp_full}\" -V"
LD_LIBRARY_PATH="$(isdp_get-sdp-edir)/linux/bin/${arch}/" "${comp_full}" -V &>/dev/null || 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: intel-sdp-r1_pkg_pretend
# @DESCRIPTION:
#
# * Check for a (valid) license before proceeding.
#
# * Check for space requirements being fulfilled.
#
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 [[ ${INTEL_LICENSE_FILE} == *@* ]]; then
einfo "Looks like you are using following license server:"
einfo " ${INTEL_LICENSE_FILE}"
return 0
fi
dirs=(
"${EPREFIX}/opt/intel/licenses"
"$(isdp_get-sdp-edir)/licenses"
"$(isdp_get-sdp-edir)/Licenses"
)
for dir in "${dirs[@]}" ; do
ebegin "Checking for a license in: ${dir}"
path_exists "${dir}"/*lic && warn=0
eend ${warn} && break
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_src_unpack
# @DESCRIPTION:
# Unpacking necessary rpms from tarball, extract them and rearrange the output.
intel-sdp-r1_src_unpack() {
local t
for t in ${A}; do
local r list=() source_rpms=($(_isdp_generate-list-install-rpms))
for r in "${source_rpms[@]}"; do
list+=( ${t%%.*}/${r} )
done
local debug_list
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
einfo "Unpacking ${r}"
printf "\nUnpacking %s\n" "${r}" >> "${T}"/rpm-extraction.log
rpm2tar -O ${r} | tar -xvf - &>> "${T}"/rpm-extraction.log; assert "Unpacking ${r} failed"
done
done
}
# @FUNCTION: intel-sdp-r1_src_install
# @DESCRIPTION:
# Install everything
intel-sdp-r1_src_install() {
debug-print-function ${FUNCNAME} "${@}"
local i
# remove uninstall information
ebegin "Cleaning out uninstall"
while IFS='\n' read -r -d '' i; do
rm -r "${i}" || die
done < <(find opt -regextype posix-extended -regex '.*(uninstall|uninstall.sh)$' -print0)
eend
# remove remaining japanese stuff
if ! use linguas_ja; then
ebegin "Cleaning out japanese language directories"
while IFS='\n' read -r -d '' i; do
rm -r "${i}" || die
done < <(find opt -type d -regextype posix-extended -regex '.*(ja|ja_JP)$' -print0)
eend
fi
# handle documentation
if path_exists "opt/intel/documentation_$(_isdp_get-sdp-year)"; then
# normal man pages
if path_exists "opt/intel/documentation_$(_isdp_get-sdp-year)/en/man/common/man1"; then
doman opt/intel/documentation_"$(_isdp_get-sdp-year)"/en/man/common/man1/*
rm -r opt/intel/documentation_"$(_isdp_get-sdp-year)"/en/man || die
fi
use doc && dodoc -r opt/intel/documentation_"$(_isdp_get-sdp-year)"/*
ebegin "Cleaning out documentation"
rm -r "opt/intel/documentation_$(_isdp_get-sdp-year)" || die
rm -rf "$(isdp_get-sdp-dir)"/linux/{documentation,man} || die
eend
fi
# MPI man pages
if path_exists "$(isdp_get-sdp-dir)/linux/mpi/man/man3"; then
doman "$(isdp_get-sdp-dir)"/linux/mpi/man/man3/*
rm -r "$(isdp_get-sdp-dir)"/linux/mpi/man || die
fi
# licensing docs
if path_exists "$(isdp_get-sdp-dir)/licensing/documentation"; then
dodoc -r "$(isdp_get-sdp-dir)/licensing/documentation"/*
rm -rf "$(isdp_get-sdp-dir)/licensing/documentation" || die
fi
if path_exists opt/intel/"${INTEL_DIST_NAME}"*/licensing; then
dodoc -r opt/intel/"${INTEL_DIST_NAME}"*/licensing
rm -rf opt/intel/"${INTEL_DIST_NAME}"* || die
fi
# handle examples
if path_exists "opt/intel/samples_$(_isdp_get-sdp-year)"; then
use examples && dodoc -r opt/intel/samples_"$(_isdp_get-sdp-year)"/*
ebegin "Cleaning out examples"
rm -r "opt/intel/samples_$(_isdp_get-sdp-year)" || die
eend
fi
# remove eclipse unconditionally
ebegin "Cleaning out eclipse files"
rm -rf opt/intel/ide_support_* || die
eend
# repair shell scripts used for sourcing PATH (iccvars.sh and such)
ebegin "Tagging ${PN}"
find opt -name \*sh -type f -exec sed -i \
-e "s:<.*DIR>:$(isdp_get-sdp-edir)/linux:g" \
'{}' + || die
eend
ebegin "Removing broken symlinks"
while IFS='\n' read -r -d '' i; do
rm "${i}" || die
done < <(find opt -xtype l -print0)
eend
mv opt "${ED%/}"/ || die "moving files failed"
keepdir "$(isdp_get-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
}
_INTEL_SDP_R1_ECLASS_=1
fi
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2016-02-20 20:41 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-02-20 20:41 [gentoo-dev] RFC: intel-sdp-r1.eclass, Take #2 David Seifert
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox