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-v2>&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. 30whiletest"$version"-gt0 31do 32echo$family$version 33 version=$((version - 1)) 34done 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