how to set/unset env variables in spec file

arnaud gaboury arnaud.gaboury at gmail.com
Tue Sep 8 12:56:08 UTC 2015


On Tue, Sep 8, 2015 at 2:11 PM, arnaud gaboury <arnaud.gaboury at gmail.com> wrote:
> On Tue, Sep 8, 2015 at 1:15 PM, Jan Chaloupka <jchaloup at redhat.com> wrote:
>> Hi Arnaud,
>>
>> I am assuming all scripts you are referring to are sourced and run in %build
>> section. Can you be more specific which commands are you running? %build
>> section is interpreted as a bash script so source and unset should work.
>> Without the concrete example it is hard to guess what is going wrong.
>
> These are the two scripts I have to run:
>
> ---------------------------------------------
> % cat /opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/bin/mklvars.sh
>
> #!/bin/sh
> #
> # Copyright (C) 2003-2015 Intel Corporation. All rights reserved.
> #
> # The information and source code contained herein is the exclusive property
> # of Intel Corporation and may not be disclosed, examined, or reproduced in
> # whole or in part without explicit written authorization from the Company.
> #
>
> mkl_help() {
>     echo ""
>     echo "Syntax:"
>     echo "  source $SCRIPT_NAME <arch> [MKL_interface] [${MOD_NAME}]"
>     echo ""
>     echo "   <arch> must be one of the following"
>     echo "       ia32         : Setup for IA-32 architecture"
>     echo "       intel64      : Setup for Intel(R) 64 architecture"
>     echo "       mic          : Setup for Intel(R) Many Integrated
> Core Architecture"
>     echo ""
>     echo "   ${MOD_NAME} (optional) - set path to MKL F95 modules"
>     echo ""
>     echo "   MKL_interface (optional) - MKL programming interface for intel64"
>     echo "                              Not applicable without ${MOD_NAME}"
>     echo "       lp64         : 4 bytes integer (default)"
>     echo "       ilp64        : 8 bytes integer"
>     echo ""
> }
>
> set_mkl_env() {
>     CPRO_PATH=/opt/intel/compilers_and_libraries_2016.0.109/linux
>     export MKLROOT=${CPRO_PATH}/mkl
>
>     typeset SCRIPT_NAME=$0
>     typeset MOD_NAME=mod
>
>     typeset MKL_LP64_ILP64=
>     typeset MKL_MOD=
>     typeset MKL_TARGET_ARCH=
>     typeset MKLVARS_VERBOSE=
>     typeset MKL_MIC_ARCH=
>     typeset MKL_BAD_SWITCH=
>     typeset OLD_LD_LIBRARY_PATH=
>     typeset OLD_LIBRARY_PATH=
>     typeset OLD_MIC_LD_LIBRARY_PATH=
>     typeset OLD_NLSPATH=
>     typeset OLD_CPATH=
>
>     if [ -z "$1" ] ; then
>         mkl_help
>     else
>
>         while [ -n "$1" ]; do
>            if   [ "$1" = "ia32" ]        ; then MKL_TARGET_ARCH=ia32;
>            elif [ "$1" = "intel64" ]     ; then
> MKL_TARGET_ARCH=intel64; MKL_MIC_ARCH=mic;
>            elif [ "$1" = "mic" ]         ; then MKL_TARGET_ARCH=mic;
>   MKL_MIC_ARCH=mic;
>            elif [ "$1" = "lp64" ]        ; then MKL_LP64_ILP64=lp64;
>            elif [ "$1" = "ilp64" ]       ; then MKL_LP64_ILP64=ilp64;
>            elif [ "$1" = "${MOD_NAME}" ] ; then MKL_MOD=${MOD_NAME};
>            elif [ "$1" = "verbose" ]     ; then MKLVARS_VERBOSE=verbose;
>            else
>                MKL_BAD_SWITCH=$1
>                break 10
>            fi
>            shift;
>         done
>
>         if [ -n "${MKL_BAD_SWITCH}" ] ; then
>
>             echo
>             echo "ERROR: Unknown option '${MKL_BAD_SWITCH}'"
>             mkl_help
>
>         else
>
>             if [ -z "${MKL_TARGET_ARCH}" ] ; then
>
>                 echo
>                 echo "ERROR: architecture is not defined. Accepted
> values: ia32, intel64, mic"
>                 mkl_help
>
>             else
>                 typeset
> mkl_ld_arch="${CPRO_PATH}/compiler/lib/${MKL_TARGET_ARCH}:${MKLROOT}/lib/${MKL_TARGET_ARCH}"
>                 typeset
> mkl_ld_intel64="${CPRO_PATH}/compiler/lib/intel64:${MKLROOT}/lib/intel64"
>                 typeset
> mkl_ld_mic="${CPRO_PATH}/compiler/lib/${MKL_MIC_ARCH}:${MKLROOT}/lib/${MKL_MIC_ARCH}"
>
>                 if [ -z "${TBBROOT}" ]; then
>                     typeset mkl_tbb_subdir="/gcc4.4"
>                     if [ "${MKL_TARGET_ARCH}" = "mic" ]; then
> mkl_tbb_subdir=""; fi
>
>                     typeset
> mkl_ld_arch="${CPRO_PATH}/tbb/lib/${MKL_TARGET_ARCH}${mkl_tbb_subdir}:${mkl_ld_arch}"
>                     typeset
> mkl_ld_intel64="${CPRO_PATH}/tbb/lib/intel64/gcc4.4:${mkl_ld_intel64}"
>                     typeset
> mkl_ld_mic="${CPRO_PATH}/tbb/lib/${MKL_MIC_ARCH}:${mkl_ld_mic}"
>                 fi
>
>                 if [ -n "${LD_LIBRARY_PATH}" ] ; then
> OLD_LD_LIBRARY_PATH=":${LD_LIBRARY_PATH}"; fi
>                 export LD_LIBRARY_PATH="${mkl_ld_arch}${OLD_LD_LIBRARY_PATH}"
>                 if [ -n "${MKL_MIC_ARCH}" ]; then
>                     if [ "${MKL_TARGET_ARCH}" = "mic" ] ; then
>                         export
> LD_LIBRARY_PATH="${mkl_ld_intel64}:${LD_LIBRARY_PATH}"
>                     fi
>                     if [ -d "/opt/intel/mic" ]; then
>                         export
> LD_LIBRARY_PATH="/opt/intel/mic/coi/host-linux-release/lib:/opt/intel/mic/myo/lib:${LD_LIBRARY_PATH}"
>                     fi
>                 fi
>
>                 if [ -n "${LIBRARY_PATH}" ] ; then
> OLD_LIBRARY_PATH=":${LIBRARY_PATH}"; fi
>                 if [ "${MKL_TARGET_ARCH}" = "mic" ] ; then
>                    export LIBRARY_PATH="${mkl_ld_inte64}${OLD_LIBRARY_PATH}"
>                 else
>                    export LIBRARY_PATH="${mkl_ld_arch}${OLD_LIBRARY_PATH}"
>                 fi
>
>                 if [ -n "${MKL_MIC_ARCH}" ]; then
>                     if [ -n "${MIC_LD_LIBRARY_PATH}" ]; then
> OLD_MIC_LD_LIBRARY_PATH=":${MIC_LD_LIBRARY_PATH}"; fi
>                     export
> MIC_LD_LIBRARY_PATH="${mkl_ld_mic}${OLD_MIC_LD_LIBRARY_PATH}"
>                     if [ -d "/opt/intel/mic" ]; then
>                         export
> MIC_LD_LIBRARY_PATH="/opt/intel/mic/coi/device-linux-release/lib:/opt/intel/mic/myo/lib:${MIC_LD_LIBRARY_PATH}"
>                     fi
>                 fi
>
>                 if [ -n "${NLSPATH}" ] ; then OLD_NLSPATH=":${NLSPATH}"; fi
>
>                 export
> NLSPATH="${MKLROOT}/lib/${MKL_TARGET_ARCH}/locale/%l_%t/%N${OLD_NLSPATH}"
>                 if [ "${MKL_TARGET_ARCH}" = "mic" ] ; then
>                     export
> NLSPATH="${MKLROOT}/lib/intel64/locale/%l_%t/%N:${NLSPATH}"
>                 fi
>
>                 if [ -z "${MANPATH}" ] ; then
>                     export MANPATH="${CPRO_PATH}/man/en_US:`manpath`"
>                 else
>                     export MANPATH="${CPRO_PATH}/man/en_US:${MANPATH}"
>                 fi
>
>                 if  [ -n "$CPATH" ] ; then OLD_CPATH=":${CPATH}"; fi
>                 export CPATH="${MKLROOT}/include${OLD_CPATH}"
>
>                 if [ "${MKL_MOD}" = "${MOD_NAME}" ] ; then
>                     if [ "${MKL_TARGET_ARCH}" = "ia32" ] ; then
>                         MKL_LP64_ILP64=
>                     else
>                         if [ -z "$MKL_LP64_ILP64" ] ; then
>                             MKL_LP64_ILP64=lp64
>                         fi
>                     fi
>                     export
> CPATH="${CPATH}:${MKLROOT}/include/${MKL_TARGET_ARCH}/${MKL_LP64_ILP64}"
>                     if [ "${MKL_TARGET_ARCH}" = "mic" ] ; then
>                         export
> CPATH="${CPATH}:${MKLROOT}/include/intel64/${MKL_LP64_ILP64}"
>                     fi
>                 fi
>
>                 if [ "${MKLVARS_VERBOSE}" = "verbose" ] ; then
>                     echo LD_LIBRARY_PATH=${LD_LIBRARY_PATH}
>                     echo LIBRARY_PATH=${LIBRARY_PATH}
>                     echo MIC_LD_LIBRARY_PATH=${MIC_LD_LIBRARY_PATH}
>                     echo NLSPATH=${NLSPATH}
>                     echo MANPATH=${MANPATH}
>                     echo CPATH=${CPATH}
>                 fi
>             fi
>         fi
>     fi
> }
>
> set_mkl_env "$@"
> ------------------------------------------------------------------------------
>
> % cat /opt/intel/bin/compilervars.sh
>
> #!/bin/sh
> #
> # Copyright  (C) 1985-2015 Intel Corporation. All rights reserved.
> #
> # The information and source code contained herein is the exclusive property
> # of Intel Corporation and may not be disclosed, examined, or reproduced in
> # whole or in part without explicit written authorization from the Company.
> #
>
> PROD_DIR="/opt/intel/compilers_and_libraries_2016.0.109/linux"
>
> TARGET_ARCH=
> TARGET_PLATFORM=linux
>
> if [ -e $PROD_DIR/bin/intel64/icl_fbsd.cfg ]; then
>     TARGET_ARCH=intel64
>     TARGET_PLATFORM=freebsd
> fi
>
> COMPILERVARS_ARGV=$#
> if [ $# -eq 0 ]; then
>   if [ "$COMPILERVARS_ARCHITECTURE" != '' ]; then
>     TARGET_ARCH=$COMPILERVARS_ARCHITECTURE
>   fi
>   if [ "$COMPILERVARS_PLATFORM" != '' ]; then
>     TARGET_PLATFORM=$COMPILERVARS_PLATFORM
>   fi
> fi
>
> while [ $# -gt 0 ]
> do
> opt="$1"
> case $opt in
>   -arch)
>   shift
>   TARGET_ARCH="$1"
>   shift
>   ;;
>   -platform)
>   shift
>   TARGET_PLATFORM="$1"
>   shift
>   ;;
>   *)
>   TARGET_ARCH="$1"
>   shift
>   ;;
> esac
> done
>
> if [ ! -e $PROD_DIR/bin/intel64/icl_fbsd.cfg ] && \
>    [ "$TARGET_ARCH" != "ia32" -a "$TARGET_ARCH" != "intel64" -o \
>      "$TARGET_PLATFORM" != "android" -a "$TARGET_PLATFORM" != "linux"
> -a "$TARGET_PLATFORM" != "mac" ]; then
>
>   echo "compilervars.sh <arch> [-arch <arch>] [-platform <platform>]"
>   echo ""
>   echo "  <arch> must be one of the following:"
>   echo "      ia32           : Set up for IA-32 target."
>   echo "      intel64        : Set up for Intel(R)64 target."
>   echo "  <platform> must be of the following:"
>   echo "      linux          : Set to Linux target."
>   echo "      mac            : Set to Mac target."
>   echo "      android        : Set to Android target."
>   echo ""
>   echo "If the arguments to the sourced script are ignored (consult docs"
>   echo "for your shell) the alternative way to specify target is environment"
>   echo "variables COMPILERVARS_ARCHITECTURE to pass <arch> to the script"
>   echo "and COMPILERVARS_PLATFORM to pass <platform>"
>
>   return 1
> elif [ -e $PROD_DIR/bin/intel64/icl_fbsd.cfg ] && \
>      [ "$TARGET_ARCH" != "intel64" -o \
>        "$TARGET_PLATFORM" != "freebsd" ]; then
>
>   echo "compilervars.sh <arch> [-arch <arch>] [-platform <platform>]"
>   echo ""
>   echo "  <arch> must be one of the following:"
>   echo "      intel64        : Set up for Intel(R)64 target."
>   echo "  <platform> must be of the following:"
>   echo "      freebsd        : Set to FreeBSD target."
>   echo ""
>   echo "If the arguments to the sourced script are ignored (consult docs"
>   echo "for your shell) the alternative way to specify target is environment"
>   echo "variables COMPILERVARS_ARCHITECTURE to pass <arch> to the script"
>   echo "and COMPILERVARS_PLATFORM to pass <platform>"
>
>   return 1
> fi
>
> if [ "$TARGET_PLATFORM" = "mac" ]; then
>   TARGET_PLATFORM="linux"
> fi
>
> if [ $COMPILERVARS_ARGV -eq 0 ] ; then
>   #pass default values via COMPILERVARS_*
>   if [ "$COMPILERVARS_ARCHITECTURE" = '' ]; then
>     COMPILERVARS_ARCHITECTURE=$TARGET_ARCH
>   fi
>   if [ "$COMPILERVARS_PLATFORM" = '' ]; then
>     COMPILERVARS_PLATFORM=$TARGET_PLATFORM
>   fi
>   TARGET_ARCH=
>   TARGET_PLATFORM=
> fi
>
> if [ -e $PROD_DIR/daal/bin/daalvars.sh ]; then
>    . $PROD_DIR/daal/bin/daalvars.sh $TARGET_ARCH
> fi
> if [ -e $PROD_DIR/../../debugger_2016/bin/debuggervars.sh ]; then
>   . $PROD_DIR/../../debugger_2016/bin/debuggervars.sh $TARGET_ARCH
> fi
> if [ -e $PROD_DIR/tbb/bin/tbbvars.sh ]; then
>    . $PROD_DIR/tbb/bin/tbbvars.sh $TARGET_ARCH
> fi
> if [ -e $PROD_DIR/mkl/bin/mklvars.sh ]; then
>   . $PROD_DIR/mkl/bin/mklvars.sh $TARGET_ARCH
> fi
> if [ -e $PROD_DIR/ipp/bin/ippvars.sh ]; then
>   . $PROD_DIR/ipp/bin/ippvars.sh $TARGET_ARCH $TARGET_PLATFORM
> fi
> if [ -e $PROD_DIR/pkg_bin/compilervars_arch.sh ]; then
>     . $PROD_DIR/pkg_bin/compilervars_arch.sh $TARGET_ARCH $TARGET_PLATFORM
> fi
> ----------------------------------------------------------
>
> Here is what I did under the %build section in my spec file:
>
>
> unset R_HOME
> source /opt/intel/compilers_and_libraries_2016/linux/mkl/bin/mklvars.sh intel64
> source /opt/intel/bin/compilervars.sh intel64
>
> ----------------------------------------
>  % rpmlint SPECS/R.spec
> SPECS/R.spec:436: W: macro-in-comment %endif
> SPECS/R.spec:458: W: macro-in-comment %endif
> SPECS/R.spec:602: W: macro-in-comment %{_libdir}
> SPECS/R.spec:608: W: macro-in-comment %lang
> SPECS/R.spec:608: W: macro-in-comment %{_libdir}
> SPECS/R.spec:828: W: macro-in-comment %{_libdir}
> SPECS/R.spec:842: W: macro-in-comment %{_includedir}
> SPECS/R.spec:895: W: macro-in-comment %__cat
> SPECS/R.spec:895: W: macro-in-comment %{_libdir}
> SPECS/R.spec:895: W: macro-in-comment %{_docdir}
> SPECS/R.spec:895: W: macro-in-comment %{version}
> SPECS/R.spec:897: W: macro-in-comment %{_libdir}
> SPECS/R.spec:897: W: macro-in-comment %{_docdir}
> SPECS/R.spec:897: W: macro-in-comment %{version}
> SPECS/R.spec:900: W: macro-in-comment %__cat
> SPECS/R.spec:900: W: macro-in-comment %{_datadir}
> SPECS/R.spec:900: W: macro-in-comment %{_docdir}
> SPECS/R.spec:900: W: macro-in-comment %{version}
> SPECS/R.spec:902: W: macro-in-comment %{_docdir}
> SPECS/R.spec:902: W: macro-in-comment %{version}
> 0 packages and 1 specfiles checked; 0 errors, 20 warnings.
> -------------------------------------------------
>
>  % rpmbuild -ba SPECS/R.spec
>
> ................
> make[2]: Entering directory '/home/poisonivy/rpmbuild/BUILD/R-3.2.1/src/unix'
> icc -std=c99 -I. -I../../src/include -I../../src/include
> -I/usr/local/include -DHAVE_CONFIG_H    -fpic  -ip -O3
> -opt-mem-layout-trans=3 -xHost -mavx -fp-model precise -wd188
> -DMKL_ILP64 -qopenmp -parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> -L/opt/intel/compilers_and_libraries_2016.0.109/linux/compiler/lib/intel64
> -DR_HOME='"/usr/lib64/R"' \
>   -o Rscript ./Rscript.c
> make[2]: icc: Command not found
> ..................................
>
> This error does not appear if I run mannually the source of the two
> scripts. What puzzles me is that this buid error arrises late in the
> make process, and I am surprised the error did not appear much before
> as everything is built with Intel Compiler (icc).
>
> As for the unset of R_HOME, it did the trick indeed!
>
> More about my config:
>
> -----------------------------------------------------------------------------------
>  % cat BUILD/R-3.2.1/CONFIGURE.log | grep -A30 'R is now'
>
> 755:R is now configured for x86_64-redhat-linux-gnu
> 756-
> 757-  Source directory:          .
> 758-  Installation directory:    /usr
> 759-
> 760-  C compiler:                icc -std=c99  -ip -O3
> -opt-mem-layout-trans=3 -xHost -mavx -fp-model precise -wd188
> -DMKL_ILP64 -qopenmp -parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> 761-  Fortran 77 compiler:       ifort  -ip -O3
> -opt-mem-layout-trans=3 -xHost -mavx -fp-model precise -DMKL_ILP64
> -qopenmp -parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> 762-
> 763-  C++ compiler:              icpc  -ip -O3 -opt-mem-layout-trans=3
> -xHost -mavx -fp-model precise -DMKL_ILP64 -qopenmp-parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> 764-  C++ 11 compiler:           icpc  -std=c++11 -ip -O3
> -opt-mem-layout-trans=3 -xHost -mavx -fp-model precise -DMKL_ILP64
> -qopenmp-parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> 765-  Fortran 90/95 compiler:    ifort -ip -O3 -opt-mem-layout-trans=3
> -xHost -mavx -fp-model precise -DMKL_ILP64 -qopenmp -parallel
> -I/opt/intel/compilers_and_libraries_2016.0.109/linux/mkl/include
> 766-  Obj-C compiler:     gcc -g -O2 -fobjc-exceptions
> ---------------------------------------------------------------------------------------
>
> ( %configure \
> %if %{system_tre}
>     --with-system-tre \
> %endif
>     --with-system-zlib --with-system-bzlib --with-system-pcre \
>     --with-system-valgrind-headers \
>     --with-lapack \
>     --with-blas="$MKL" \
> %endif
>     --with-tcl-config=%{_libdir}/tclConfig.sh \
>     --with-tk-config=%{_libdir}/tkConfig.sh \
>     --enable-R-shlib \
>     --enable-memory-profiling \
>     --enable-BLAS-shlib \
>     --enable-prebuilt-html \
> ------------------------------------------------------
>
>
> I have a warning too at the begining of the build. No idea where this
> option comes from:
> configure: WARNING: unrecognized options: --disable-dependency-tracking
>
>
> Hope these info can help to debug.

The more I work on my spec file, the more I think my issue has nothing
to do with the source command. I must have wrong or insufficient env
variables definition in my spec file.
>
>>
>> Jan
>>
>> On 09/08/2015 01:07 PM, arnaud gaboury wrote:
>>>
>>> I am building a rpm package. For make to success and have the correct
>>> env variables, I need to source a few scripts and unset a few
>>> variables.
>>> rpmbuild does not understand the source and unset commands.
>>>
>>> How shall I proceed to get the desired variables?
>>>
>>> Thank you
>>>
>>
>> --
>> devel mailing list
>> devel at lists.fedoraproject.org
>> https://admin.fedoraproject.org/mailman/listinfo/devel
>> Fedora Code of Conduct: http://fedoraproject.org/code-of-conduct
>
>
>
> --
>
> google.com/+arnaudgabourygabx



-- 

google.com/+arnaudgabourygabx


More information about the devel mailing list