Home | History | Annotate | Line # | Download | only in gcc
opt-read.awk revision 1.1.1.8
      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 
     21 BEGIN {
     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