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