Skip to content
Snippets Groups Projects

activate-gfortran_osx-64.sh

  • Clone with SSH
  • Clone with HTTPS
  • Embed
  • Share
    The snippet can be accessed without any authentication.
    Authored by Matt Wala
    Edited
    activate-gfortran_osx-64.sh 3.62 KiB
    #!/bin/bash
    
    # This function takes no arguments
    # It tries to determine the name of this file in a programatic way.
    function _get_sourced_filename() {
        if [ -n "${BASH_SOURCE[0]}" ]; then
            basename "${BASH_SOURCE[0]}"
        elif [ -n "${(%):-%x}" ]; then
            # in zsh use prompt-style expansion to introspect the same information
            # see http://stackoverflow.com/questions/9901210/bash-source0-equivalent-in-zsh
            basename "${(%):-%x}"
        else
            echo "UNKNOWN FILE"
        fi
    }
    
    # The arguments to this are:
    # 1. activation nature {activate|deactivate}
    # 2. toolchain nature {build|host|ccc}
    # 3. machine (should match -dumpmachine)
    # 4. prefix (including any final -)
    # 5+ program (or environment var comma value)
    # The format for 5+ is name{,,value}. If value is specified
    #  then name taken to be an environment variable, otherwise
    #  it is taken to be a program. In this case, which is used
    #  to find the full filename during activation. The original
    #  value is stored in environment variable CONDA_BACKUP_NAME
    #  For deactivation, the distinction is irrelevant as in all
    #  cases NAME simply gets reset to CONDA_BACKUP_NAME.  It is
    #  a fatal error if a program is identified but not present.
    function _tc_activation() {
      local act_nature=$1; shift
      local tc_nature=$1; shift
      local tc_machine=$1; shift
      local tc_prefix=$1; shift
      local thing
      local newval
      local from
      local to
      local which
      local pass
    
      if [ "${act_nature}" = "activate" ]; then
        from=""
        to="CONDA_BACKUP_"
      else
        from="CONDA_BACKUP_"
        to=""
      fi
    
      for pass in check apply; do
        for thing in $tc_nature,$tc_machine "$@"; do
          case "${thing}" in
            *,*)
              newval=$(echo "${thing}" | sed "s,^[^\,]*\,\(.*\),\1,")
              thing=$(echo "${thing}" | sed "s,^\([^\,]*\)\,.*,\1,")
              ;;
            *)
              newval=$(which ${CONDA_PREFIX}/bin/${tc_prefix}${thing} 2>/dev/null)
              if [ -z "${newval}" -a "${pass}" = "check" ]; then
                echo "ERROR: This cross-compiler package contains no program ${CONDA_PREFIX}/bin/${tc_prefix}${thing}"
                return 1
              fi
              ;;
          esac
          if [ "${pass}" = "apply" ]; then
            thing=$(echo ${thing} | tr 'a-z+-' 'A-ZX_')
            eval oldval="\$${from}$thing"
            if [ -n "${oldval}" ]; then
              eval export "${to}'${thing}'=\"${oldval}\""
            else
              eval unset '${to}${thing}'
            fi
            if [ -n "${newval}" ]; then
              eval export "'${from}${thing}=${newval}'"
            else
              eval unset '${from}${thing}'
            fi
          fi
        done
      done
      return 0
    }
    
    env > /tmp/old-env-$$.txt
    _tc_activation \
      activate host x86_64-apple-darwin13.4.0 x86_64-apple-darwin13.4.0- \
      gfortran \
      "FFLAGS,${FFLAGS:--march=nocona -mtune=core2 -ftree-vectorize -fPIC -fstack-protector -O2 -pipe}" \
      "FORTRANFLAGS,${FORTRANFLAGS:--march=nocona -mtune=core2 -ftree-vectorize -fPIC -fstack-protector -O2 -pipe}" \
      "DEBUG_FFLAGS,${DEBUG_FFLAGS:--march=nocona -mtune=core2 -ftree-vectorize -fPIC -fstack-protector -O2 -pipe -march=nocona -mtune=core2 -ftree-vectorize -fPIC -fstack-protector -O2 -pipe -Og -g -Wall -Wextra -fcheck=all -fbacktrace -fimplicit-none -fvar-tracking-assignments}"
    
    # extra ones:
    export FC="$GFORTRAN"
    export F95="$GFORTRAN"
    
    if [ $? -ne 0 ]; then
      echo "ERROR: $(_get_sourced_filename) failed, see above for details"
    else
      env > /tmp/new-env-$$.txt
      echo "INFO: $(_get_sourced_filename) made the following environmental changes:"
      diff -U 0 -rN /tmp/old-env-$$.txt /tmp/new-env-$$.txt | tail -n +4 | grep "^-.*\|^+.*" | grep -v "CONDA_BACKUP_" | sort
    fi
    rm -f /tmp/old-env-$$.txt /tmp/new-env-$$.txt || true
    0% Loading or .
    You are about to add 0 people to the discussion. Proceed with caution.
    Finish editing this message first!
    Please register or to comment