Hi,
next patch for intel-sdp.eclass
Problem:
If the intel compiler are installed but no valid license is present,
several buildsystem including cmake generate sandbox violations.
Solution:
Do not let the user install the package without valid license. Its
useless anyway without.
Realized in two checks, first in pkg_pretend check for simple existence
of a license file; second check in pkg_postinst calls for version
informations from compiler (runtime test).
First test is deadly; Second not, because user already intervened
manually to bypass first check and we consider this as
he-knows-what-he-is-doing.
Thanks justin
+# @ECLASS-FUNCTION: big-warning
+# @INTERNAL
+# warn user that we really require a license
+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 Make sure you have recieved the an Intel license.
+ewarn To receive a non-commercial license, you need to register at:
+ewarn http://software.intel.com/en-us/articles/non-commercial-software-development/;
+ewarn Install the license file into ${INTEL_SDP_EDIR}/licenses/
+
+case ${1} in
+pre-check )
+ewarn before proceeding with installation of ${P}
+echo
+;;
+* )
+echo
+;;
+esac
+}
+
+# @ECLASS-FUNCTION: _version_test
+# @INTERNAL
+# Testing for valid license by asking for version information of the compiler
+_version_test() {
+local _comp _comp_full _arch _file _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}/bin/${_arch}/${_comp}
+;;
+postinst )
+_comp_full=${INTEL_SDP_EDIR}/bin/${_arch}/${_comp}
+;;
+* )
+ewarn Compile test not supported in ${EBUILD_PHASE}
+continue
+;;
+esac
+
+debug-print LD_LIBRARY_PATH=\${INTEL_SDP_EDIR}/bin/${_arch}/\ \${_comp_full}\ -V
+
+LD_LIBRARY_PATH=${INTEL_SDP_EDIR}/bin/${_arch}/ ${_comp_full} -V /dev/null
+[[ $? -ne 0 ]] _warn=yes
+done
+[[ ${_warn} == yes ]] big-warning test-failed
+}
+
+# @ECLASS-FUNCTION: run-test
+# @INTERNAL
+# Test if installed compiler is working
+run-test() {
+case ${PN} in
+ifc | icc )
+_version_test ;;
+* )
+debug-print No test available for ${PN}
+;;
+esac
+}
+
+# @ECLASS-FUNCTION: intel-sdp_pkg_pretend
+# @DESCRIPTION:
+# * Check that the user has a (valid) license file before going on.
+#
+# * Check for space requirements being fullfilled
+intel-sdp_pkg_pretend() {
+ local _warn=1 _dirs i _ret arch a p
+
+ : ${CHECKREQS_DISK_BUILD:=256M}
+ check-reqs_pkg_pretend
+
+ _dirs=(
+ ${INTEL_SDP_EDIR}/licenses
+ ${INTEL_SDP_EDIR}/Licenses
+ ${EPREFIX}/opt/intel/licenses
+ )
+ for ((i = 0; i ${#_dirs[@]}; i++)); do
+ ebegin Checking for a license in: ${_dirs[$i]}
+ [[ $( ls ${_dirs[$i]}/*lic 2/dev/null ) ]]; _ret=$?
+ eend ${_ret}
+ if [[ ${_ret} == 0 ]]; then
+ _warn=${_ret}
+ break
+ fi
+ done
+ if [[ ${_warn} == 1 ]]; then
+ big-warning pre-check
+ die Could not find license file
+ fi
+}
@@ -238,8 +390,12 @@ intel-sdp_pkg_postinst() {
echo ${INTEL_SDP_DB} \
:${r%-${_INTEL_PV4}*}-${_INTEL_PV4}:${r}:${INTEL_SDP_EDIR}:${l}:
done
+ run-test
}
signature.asc
Description: OpenPGP digital signature