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