linux/scripts/gcc-plugin.sh
<<
>>
Prefs
   1#!/bin/sh
   2srctree=$(dirname "$0")
   3
   4SHOW_ERROR=
   5if [ "$1" = "--show-error" ] ; then
   6        SHOW_ERROR=1
   7        shift || true
   8fi
   9
  10gccplugins_dir=$($3 -print-file-name=plugin)
  11plugincc=$($1 -E -x c++ - -o /dev/null -I"${srctree}"/gcc-plugins -I"${gccplugins_dir}"/include 2>&1 <<EOF
  12#include "gcc-common.h"
  13#if BUILDING_GCC_VERSION >= 4008 || defined(ENABLE_BUILD_WITH_CXX)
  14#warning $2 CXX
  15#else
  16#warning $1 CC
  17#endif
  18EOF
  19)
  20
  21if [ $? -ne 0 ]
  22then
  23        if [ -n "$SHOW_ERROR" ] ; then
  24                echo "${plugincc}" >&2
  25        fi
  26        exit 1
  27fi
  28
  29case "$plugincc" in
  30        *"$1 CC"*)
  31                echo "$1"
  32                exit 0
  33                ;;
  34
  35        *"$2 CXX"*)
  36                # the c++ compiler needs another test, see below
  37                ;;
  38
  39        *)
  40                exit 1
  41                ;;
  42esac
  43
  44# we need a c++ compiler that supports the designated initializer GNU extension
  45plugincc=$($2 -c -x c++ -std=gnu++98 - -fsyntax-only -I"${srctree}"/gcc-plugins -I"${gccplugins_dir}"/include 2>&1 <<EOF
  46#include "gcc-common.h"
  47class test {
  48public:
  49        int test;
  50} test = {
  51        .test = 1
  52};
  53EOF
  54)
  55
  56if [ $? -eq 0 ]
  57then
  58        echo "$2"
  59        exit 0
  60fi
  61
  62if [ -n "$SHOW_ERROR" ] ; then
  63        echo "${plugincc}" >&2
  64fi
  65exit 1
  66