detect-compileron commit Merge branch 'cc/perf-bisect' (02d11bb)
   1#!/bin/sh
   2#
   3# Probe the compiler for vintage, version, etc. This is used for setting
   4# optional make knobs under the DEVELOPER knob.
   5
   6CC="$*"
   7
   8# we get something like (this is at least true for gcc and clang)
   9#
  10# FreeBSD clang version 3.4.1 (tags/RELEASE...)
  11get_version_line() {
  12        $CC -v 2>&1 | grep ' version '
  13}
  14
  15get_family() {
  16        get_version_line | sed 's/^\(.*\) version [0-9][^ ]* .*/\1/'
  17}
  18
  19get_version() {
  20        get_version_line | sed 's/^.* version \([0-9][^ ]*\) .*/\1/'
  21}
  22
  23print_flags() {
  24        family=$1
  25        version=$(get_version | cut -f 1 -d .)
  26
  27        # Print a feature flag not only for the current version, but also
  28        # for any prior versions we encompass. This avoids needing to do
  29        # numeric comparisons in make, which are awkward.
  30        while test "$version" -gt 0
  31        do
  32                echo $family$version
  33                version=$((version - 1))
  34        done
  35}
  36
  37case "$(get_family)" in
  38gcc)
  39        print_flags gcc
  40        ;;
  41clang)
  42        print_flags clang
  43        ;;
  44"FreeBSD clang")
  45        print_flags clang
  46        ;;
  47"Apple LLVM")
  48        print_flags clang
  49        ;;
  50*)
  51        : unknown compiler family
  52        ;;
  53esac