cc

复制代码
#! /nix/store/4cq7zlsqbs3l2lf7bb3vr03xxf0v2czz-bash-4.4-p12/bin/bash
set -eu -o pipefail +o posix
shopt -s nullglob

if (( "${NIX_DEBUG:-0}" >= 7 )); then
    set -x
fi

path_backup="$PATH"

# That @-vars are substituted separately from bash evaluation makes
# shellcheck think this, and others like it, are useless conditionals.
# shellcheck disable=SC2157
if [[ -n "/nix/store/dpi4c08jkfqbpsp2y8fd1wx9pjfciza6-coreutils-8.29" && -n "/nix/store/dbc3rk5f2hgcxvwlns3xmbr253987dcr-gnugrep-3.1" ]]; then
    PATH="/nix/store/dpi4c08jkfqbpsp2y8fd1wx9pjfciza6-coreutils-8.29/bin:/nix/store/dbc3rk5f2hgcxvwlns3xmbr253987dcr-gnugrep-3.1/bin"
fi

source /nix/store/hdbr6240s17l7slgljd5n0ylpl0kjb4s-clang-wrapper-5.0.1/nix-support/utils.sh

# Flirting with a layer violation here.
if [ -z "${NIX_BINTOOLS_WRAPPER_x86_64_apple_darwin_FLAGS_SET:-}" ]; then
    source /nix/store/wxylzk7s2wk0ggldclcsp4b7dm018lj9-cctools-binutils-darwin-wrapper/nix-support/add-flags.sh
fi

# Put this one second so libc ldflags take priority.
if [ -z "${NIX_CC_WRAPPER_x86_64_apple_darwin_FLAGS_SET:-}" ]; then
    source /nix/store/hdbr6240s17l7slgljd5n0ylpl0kjb4s-clang-wrapper-5.0.1/nix-support/add-flags.sh
fi


# Parse command line options and set several variables.
# For instance, figure out if linker flags should be passed.
# GCC prints annoying warnings when they are not needed.
dontLink=0
nonFlagArgs=0
# shellcheck disable=SC2193
[[ "/nix/store/2vk76kbkb0n1fqwwnppml0qb98j13h1k-clang-5.0.1/bin/clang" = *++ ]] && isCpp=1 || isCpp=0
cppInclude=1

expandResponseParams "$@"
declare -i n=0
nParams=${#params[@]}
while (( "$n" < "$nParams" )); do
    p=${params[n]}
    p2=${params[n+1]:-} # handle `p` being last one
    if [ "$p" = -c ]; then
        dontLink=1
    elif [ "$p" = -S ]; then
        dontLink=1
    elif [ "$p" = -E ]; then
        dontLink=1
    elif [ "$p" = -E ]; then
        dontLink=1
    elif [ "$p" = -M ]; then
        dontLink=1
    elif [ "$p" = -MM ]; then
        dontLink=1
    elif [[ "$p" = -x && "$p2" = *-header ]]; then
        dontLink=1
    elif [[ "$p" = -x && "$p2" = c++* && "$isCpp" = 0 ]]; then
        isCpp=1
    elif [ "$p" = -nostdlib ]; then
        isCpp=-1
    elif [ "$p" = -nostdinc ]; then
        cppInclude=0
    elif [ "$p" = -nostdinc++ ]; then
        cppInclude=0
    elif [[ "$p" != -?* ]]; then
        # A dash alone signifies standard input; it is not a flag
        nonFlagArgs=1
    fi
    n+=1
done

# If we pass a flag like -Wl, then gcc will call the linker unless it
# can figure out that it has to do something else (e.g., because of a
# "-c" flag).  So if no non-flag arguments are given, don't pass any
# linker flags.  This catches cases like "gcc" (should just print
# "gcc: no input files") and "gcc -v" (should print the version).
if [ "$nonFlagArgs" = 0 ]; then
    dontLink=1
fi

# Optionally filter out paths not refering to the store.
if [[ "${NIX_ENFORCE_PURITY:-}" = 1 && -n "$NIX_STORE" ]]; then
    rest=()
    nParams=${#params[@]}
    declare -i n=0
    while (( "$n" < "$nParams" )); do
        p=${params[n]}
        p2=${params[n+1]:-} # handle `p` being last one
        if [ "${p:0:3}" = -L/ ] && badPath "${p:2}"; then
            skip "${p:2}"
        elif [ "$p" = -L ] && badPath "$p2"; then
            n+=1; skip "$p2"
        elif [ "${p:0:3}" = -I/ ] && badPath "${p:2}"; then
            skip "${p:2}"
        elif [ "$p" = -I ] && badPath "$p2"; then
            n+=1; skip "$p2"
        elif [ "$p" = -isystem ] && badPath "$p2"; then
            n+=1; skip "$p2"
        else
            rest+=("$p")
        fi
        n+=1
    done
    # Old bash empty array hack
    params=(${rest+"${rest[@]}"})
fi


# Clear march/mtune=native -- they bring impurity.
if [ "$NIX_x86_64_apple_darwin_ENFORCE_NO_NATIVE" = 1 ]; then
    rest=()
    temp=""
    # Old bash empty array hack
    for p in ${params+"${params[@]}"}; do
        if [[ "$p" = -m*=native ]]; then
            skip "$p"
        else
            # printf "rest %q\n" ${rest+"${rest[@]}"}  >&2
            if [[ $temp == *"$p@"* ]]; then
            #   printf "\n into skip :$p" >&2
            #   skip "$p"
              rest+=("$p")
            else  
              rest+=("$p")
              temp+="$p@ \n"
            #   printf "\n into add : $p" >&2
            #   printf "\n temp value : $temp" >&2
            fi
        fi
    done
    temp=""
    # Old bash empty array hack
    params=(${rest+"${rest[@]}"})
fi

if [[ "$isCpp" = 1 ]]; then
    if [[ "$cppInclude" = 1 ]]; then
        NIX_x86_64_apple_darwin_CFLAGS_COMPILE+=" ${NIX_x86_64_apple_darwin_CXXSTDLIB_COMPILE-}"
    fi
    NIX_x86_64_apple_darwin_CFLAGS_LINK+=" $NIX_x86_64_apple_darwin_CXXSTDLIB_LINK"
fi

source /nix/store/hdbr6240s17l7slgljd5n0ylpl0kjb4s-clang-wrapper-5.0.1/nix-support/add-hardening.sh

# Add the flags for the C compiler proper.
extraAfter=($NIX_x86_64_apple_darwin_CFLAGS_COMPILE "${hardeningCFlags[@]}")
extraBefore=()

if [ "$dontLink" != 1 ]; then

    # Add the flags that should only be passed to the compiler when
    # linking.
    extraAfter+=($NIX_x86_64_apple_darwin_CFLAGS_LINK)

    # Add the flags that should be passed to the linker (and prevent
    # `ld-wrapper' from adding NIX_x86_64_apple_darwin_LDFLAGS again).
    for i in $NIX_x86_64_apple_darwin_LDFLAGS_BEFORE; do
        extraBefore+=("-Wl,$i")
    done
    temp=""
    for i in $NIX_x86_64_apple_darwin_LDFLAGS; do
        if [ "${i:0:3}" = -L/ ]; then
            if [[ $temp == *"$i@"* ]]; then
              skip "$i"
            else  
              extraAfter+=("$i")
              temp+="$i@ \n"
            fi
            # extraAfter+=("$i")
        else
            extraAfter+=("-Wl,$i")
        fi
    done
    export NIX_x86_64_apple_darwin_LDFLAGS_SET=1
fi

# As a very special hack, if the arguments are just `-v', then don't
# add anything.  This is to prevent `gcc -v' (which normally prints
# out the version number and returns exit code 0) from printing out
# `No input files specified' and returning exit code 1.
if [ "$*" = -v ]; then
    extraAfter=()
    extraBefore=()
fi

# Optionally print debug info.
if (( "${NIX_DEBUG:-0}" >= 1 )); then
    # Old bash workaround, see ld-wrapper for explanation.
    echo "extra flags before to /nix/store/2vk76kbkb0n1fqwwnppml0qb98j13h1k-clang-5.0.1/bin/clang:" >&2
    printf "  %q\n" ${extraBefore+"${extraBefore[@]}"}  >&2
    echo "original flags to /nix/store/2vk76kbkb0n1fqwwnppml0qb98j13h1k-clang-5.0.1/bin/clang:" >&2
    printf "  %q\n" ${params+"${params[@]}"} >&2
    echo "extra flags after to /nix/store/2vk76kbkb0n1fqwwnppml0qb98j13h1k-clang-5.0.1/bin/clang:" >&2
    printf "  %q\n" ${extraAfter+"${extraAfter[@]}"} >&2
fi

PATH="$path_backup"
# Old bash workaround, see above.
exec /nix/store/2vk76kbkb0n1fqwwnppml0qb98j13h1k-clang-5.0.1/bin/clang \
    ${extraBefore+"${extraBefore[@]}"} \
    ${params+"${params[@]}"} \
    ${extraAfter+"${extraAfter[@]}"}
复制代码

 

posted @   Gyoung  阅读(258)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示