1#  Copyright (C) 2003-2022 Free Software Foundation, Inc.
2#  Contributed by Kelley Cook, June 2004.
3#  Original code from Neil Booth, May 2003.
4#
5# This program is free software; you can redistribute it and/or modify it
6# under the terms of the GNU General Public License as published by the
7# Free Software Foundation; either version 3, or (at your option) any
8# later version.
9#
10# This program is distributed in the hope that it will be useful,
11# but WITHOUT ANY WARRANTY; without even the implied warranty of
12# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13# GNU General Public License for more details.
14#
15# You should have received a copy of the GNU General Public License
16# along with this program; see the file COPYING3.  If not see
17# <http://www.gnu.org/licenses/>.
18
19# Read in the option records generated from opt-gather.awk.
20
21BEGIN {
22          n_opts = 0
23          n_langs = 0
24          n_target_save = 0
25          n_extra_vars = 0
26          n_extra_target_vars = 0
27          n_extra_masks = 0
28          n_extra_c_includes = 0
29          n_extra_h_includes = 0
30          n_enums = 0
31          have_save = 0;
32          quote = "\042"
33          comma = ","
34          FS=SUBSEP
35          # Default the name of header created from opth-gen.awk to options.h
36          if (header_name == "") header_name="options.h"
37}
38
39# Collect the text and flags of each option into an array
40          {
41                    if ($1 == "Language") {
42                              langs[n_langs] = $2
43                        lang_numbers[$2] = n_langs
44                              n_langs++;
45                    }
46                    else if ($1 == "TargetSave") {
47                              # Make sure the declarations are put in source order
48                              target_save_decl[n_target_save] = $2
49                              n_target_save++
50                    }
51                    else if ($1 == "Variable") {
52                              extra_vars[n_extra_vars] = $2
53                              n_extra_vars++
54                              name = host_wide_int_var_name($2)
55                              if (name != "")
56                                        host_wide_int[name] = "yes"
57                    }
58                    else if ($1 == "TargetVariable") {
59                              # Combination of TargetSave and Variable
60                              extra_vars[n_extra_vars] = $2
61                              n_extra_vars++
62
63                              var = $2
64                              sub(" *=.*", "", var)
65                              orig_var = var
66                              name = var
67                              type = var
68                              sub("^.*[ *]", "", name)
69                              sub(" *" name "$", "", type)
70                              target_save_decl[n_target_save] = type " x_" name
71                              n_target_save++
72
73                              extra_target_vars[n_extra_target_vars] = name
74                              extra_target_var_types[n_extra_target_vars] = type
75                              n_extra_target_vars++
76                    }
77                    else if ($1 == "HeaderInclude") {
78                              extra_h_includes[n_extra_h_includes++] = $2;
79                    }
80                    else if ($1 == "SourceInclude")  {
81                              extra_c_includes[n_extra_c_includes++] = $2;
82                    }
83                    else if ($1 == "Enum") {
84                              props = $2
85                              name = opt_args_non_empty("Name", props)
86                              type = opt_args_non_empty("Type", props)
87                              unknown_error = opt_args("UnknownError", props)
88                              enum_names[n_enums] = name
89                              enum_type[name] = type
90                              enum_index[name] = n_enums
91                              enum_unknown_error[name] = unknown_error
92                              enum_help[name] = $3
93                              n_enums++
94                    }
95                    else if ($1 == "EnumValue")  {
96                              props = $2
97                              enum_name = opt_args_non_empty("Enum", props)
98                              string = opt_args_non_empty("String", props)
99                              value = opt_args_non_empty("Value", props)
100                              set = opt_args("Set", props)
101                              val_flags = "0"
102                              val_flags = val_flags \
103                                test_flag("Canonical", props, "| CL_ENUM_CANONICAL") \
104                                test_flag("DriverOnly", props, "| CL_ENUM_DRIVER_ONLY")
105                              if (set != "")
106                                        val_flags = val_flags "| ((" set \
107                                                      ") << CL_ENUM_SET_SHIFT)"
108                              enum_data[enum_name] = enum_data[enum_name] \
109                                "  { " quote string quote ", " value ", " val_flags \
110                                " },\n"
111                    }
112                    else {
113                              name = opt_args("Mask", $1)
114                              if (name == "") {
115                                        opts[n_opts]  = $1
116                                        opt_numbers[$1] = n_opts
117                                        flags[n_opts] = $2
118                                        help[n_opts]  = $3
119                                        for (i = 4; i <= NF; i++)
120                                                  help[n_opts] = help[n_opts] " " $i
121                                        n_opts++;
122                              }
123                              else {
124                                        extra_masks[n_extra_masks++] = name
125                              }
126                    }
127          }
128
129