1# Copyright (C) 2003-2021 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 val_flags = "0" 101 val_flags = val_flags \ 102 test_flag("Canonical", props, "| CL_ENUM_CANONICAL") \ 103 test_flag("DriverOnly", props, "| CL_ENUM_DRIVER_ONLY") 104 enum_data[enum_name] = enum_data[enum_name] \ 105 " { " quote string quote ", " value ", " val_flags \ 106 " },\n" 107 } 108 else { 109 name = opt_args("Mask", $1) 110 if (name == "") { 111 opts[n_opts] = $1 112 opt_numbers[$1] = n_opts 113 flags[n_opts] = $2 114 help[n_opts] = $3 115 for (i = 4; i <= NF; i++) 116 help[n_opts] = help[n_opts] " " $i 117 n_opts++; 118 } 119 else { 120 extra_masks[n_extra_masks++] = name 121 } 122 } 123 } 124 125