opth-gen.awk: Generate mapping from cpp message reasons to the options that enable them.

gcc/ChangeLog:

2014-09-09  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	* opth-gen.awk: Generate mapping from cpp message reasons to the
	options that enable them.
	* doc/options.texi (CppReason): Document.

gcc/c-family/ChangeLog:

2014-09-09  Manuel López-Ibáñez  <manu@gcc.gnu.org>

	* c.opt: Add CppReason to various flags.
	(Wdate-time): Re-sort.
	* c-common.c: Include c-common.h earlier.
	(struct reason_option_codes_t): Delete.
	(c_option_controlling_cpp_error): Prefix global type and struct
	with cpp_.

From-SVN: r215095
parent 1ef33fd4
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org> 2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* opth-gen.awk: Generate mapping from cpp message reasons to the
options that enable them.
* doc/options.texi (CppReason): Document.
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* doc/invoke.texi (Wnormalized=): Update. * doc/invoke.texi (Wnormalized=): Update.
2014-09-09 Segher Boessenkool <segher@kernel.crashing.org> 2014-09-09 Segher Boessenkool <segher@kernel.crashing.org>
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org> 2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c.opt: Add CppReason to various flags.
(Wdate-time): Re-sort.
* c-common.c: Include c-common.h earlier.
(struct reason_option_codes_t): Delete.
(c_option_controlling_cpp_error): Prefix global type and struct
with cpp_.
2014-09-09 Manuel López-Ibáñez <manu@gcc.gnu.org>
* c.opt (Wnormalized): New. * c.opt (Wnormalized): New.
(Wnormalized=): Use Enum and Reject Negative. (Wnormalized=): Use Enum and Reject Negative.
* c-opts.c (c_common_handle_option): Do not handle Wnormalized here. * c-opts.c (c_common_handle_option): Do not handle Wnormalized here.
......
...@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see ...@@ -20,6 +20,7 @@ along with GCC; see the file COPYING3. If not see
#include "config.h" #include "config.h"
#include "system.h" #include "system.h"
#include "coretypes.h" #include "coretypes.h"
#include "c-common.h"
#include "tm.h" #include "tm.h"
#include "intl.h" #include "intl.h"
#include "tree.h" #include "tree.h"
...@@ -32,7 +33,6 @@ along with GCC; see the file COPYING3. If not see ...@@ -32,7 +33,6 @@ along with GCC; see the file COPYING3. If not see
#include "trans-mem.h" #include "trans-mem.h"
#include "flags.h" #include "flags.h"
#include "c-pragma.h" #include "c-pragma.h"
#include "c-common.h"
#include "c-objc.h" #include "c-objc.h"
#include "tm_p.h" #include "tm_p.h"
#include "obstack.h" #include "obstack.h"
...@@ -9666,47 +9666,15 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type, ...@@ -9666,47 +9666,15 @@ c_parse_error (const char *gmsgid, enum cpp_ttype token_type,
#undef catenate_messages #undef catenate_messages
} }
/* Mapping for cpp message reasons to the options that enable them. */
struct reason_option_codes_t
{
const int reason; /* cpplib message reason. */
const int option_code; /* gcc option that controls this message. */
};
static const struct reason_option_codes_t option_codes[] = {
{CPP_W_BUILTIN_MACRO_REDEFINED, OPT_Wbuiltin_macro_redefined},
{CPP_W_C90_C99_COMPAT, OPT_Wc90_c99_compat},
{CPP_W_COMMENTS, OPT_Wcomment},
{CPP_W_CXX_OPERATOR_NAMES, OPT_Wc___compat},
{CPP_W_DATE_TIME, OPT_Wdate_time},
{CPP_W_DEPRECATED, OPT_Wdeprecated},
{CPP_W_ENDIF_LABELS, OPT_Wendif_labels},
{CPP_W_INVALID_PCH, OPT_Winvalid_pch},
{CPP_W_LITERAL_SUFFIX, OPT_Wliteral_suffix},
{CPP_W_LONG_LONG, OPT_Wlong_long},
{CPP_W_MISSING_INCLUDE_DIRS, OPT_Wmissing_include_dirs},
{CPP_W_MULTICHAR, OPT_Wmultichar},
{CPP_W_NORMALIZE, OPT_Wnormalized_},
{CPP_W_PEDANTIC, OPT_Wpedantic},
{CPP_W_TRADITIONAL, OPT_Wtraditional},
{CPP_W_TRIGRAPHS, OPT_Wtrigraphs},
{CPP_W_UNDEF, OPT_Wundef},
{CPP_W_UNUSED_MACROS, OPT_Wunused_macros},
{CPP_W_VARIADIC_MACROS, OPT_Wvariadic_macros},
{CPP_W_WARNING_DIRECTIVE, OPT_Wcpp},
{CPP_W_NONE, 0}
};
/* Return the gcc option code associated with the reason for a cpp /* Return the gcc option code associated with the reason for a cpp
message, or 0 if none. */ message, or 0 if none. */
static int static int
c_option_controlling_cpp_error (int reason) c_option_controlling_cpp_error (int reason)
{ {
const struct reason_option_codes_t *entry; const struct cpp_reason_option_codes_t *entry;
for (entry = option_codes; entry->reason != CPP_W_NONE; entry++) for (entry = cpp_reason_option_codes; entry->reason != CPP_W_NONE; entry++)
{ {
if (entry->reason == reason) if (entry->reason == reason)
return entry->option_code; return entry->option_code;
......
...@@ -292,11 +292,11 @@ C ObjC C++ ObjC++ Var(warn_bool_compare) Warning LangEnabledBy(C ObjC C++ ObjC++ ...@@ -292,11 +292,11 @@ C ObjC C++ ObjC++ Var(warn_bool_compare) Warning LangEnabledBy(C ObjC C++ ObjC++
Warn about boolean expression compared with an integer value different from true/false Warn about boolean expression compared with an integer value different from true/false
Wbuiltin-macro-redefined Wbuiltin-macro-redefined
C ObjC C++ ObjC++ CPP(warn_builtin_macro_redefined) Var(cpp_warn_builtin_macro_redefined) Init(1) Warning C ObjC C++ ObjC++ CPP(warn_builtin_macro_redefined) CppReason(CPP_W_BUILTIN_MACRO_REDEFINED) Var(cpp_warn_builtin_macro_redefined) Init(1) Warning
Warn when a built-in preprocessor macro is undefined or redefined Warn when a built-in preprocessor macro is undefined or redefined
Wc90-c99-compat Wc90-c99-compat
C ObjC CPP(cpp_warn_c90_c99_compat) Var(warn_c90_c99_compat) Init(-1) Warning C ObjC CPP(cpp_warn_c90_c99_compat) CppReason(CPP_W_C90_C99_COMPAT) Var(warn_c90_c99_compat) Init(-1) Warning
Warn about features not present in ISO C90, but present in ISO C99 Warn about features not present in ISO C90, but present in ISO C99
Wc99-c11-compat Wc99-c11-compat
...@@ -304,7 +304,7 @@ C ObjC Var(warn_c99_c11_compat) Init(-1) Warning ...@@ -304,7 +304,7 @@ C ObjC Var(warn_c99_c11_compat) Init(-1) Warning
Warn about features not present in ISO C99, but present in ISO C11 Warn about features not present in ISO C99, but present in ISO C11
Wc++-compat Wc++-compat
C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) Init(0) Warning C ObjC Var(warn_cxx_compat) CPP(warn_cxx_operator_names) CppReason(CPP_W_CXX_OPERATOR_NAMES) Init(0) Warning
Warn about C constructs that are not in the common subset of C and C++ Warn about C constructs that are not in the common subset of C and C++
Wc++0x-compat Wc++0x-compat
...@@ -328,7 +328,7 @@ C ObjC C++ ObjC++ Var(warn_clobbered) Warning EnabledBy(Wextra) ...@@ -328,7 +328,7 @@ C ObjC C++ ObjC++ Var(warn_clobbered) Warning EnabledBy(Wextra)
Warn about variables that might be changed by \"longjmp\" or \"vfork\" Warn about variables that might be changed by \"longjmp\" or \"vfork\"
Wcomment Wcomment
C ObjC C++ ObjC++ CPP(warn_comments) Var(cpp_warn_comment) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) C ObjC C++ ObjC++ CPP(warn_comments) CppReason(CPP_W_COMMENTS) Var(cpp_warn_comment) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn about possibly nested block comments, and C++ comments spanning more than one physical line Warn about possibly nested block comments, and C++ comments spanning more than one physical line
Wcomments Wcomments
...@@ -347,10 +347,18 @@ Wconversion-null ...@@ -347,10 +347,18 @@ Wconversion-null
C++ ObjC++ Var(warn_conversion_null) Init(1) Warning C++ ObjC++ Var(warn_conversion_null) Init(1) Warning
Warn for converting NULL from/to a non-pointer type Warn for converting NULL from/to a non-pointer type
Wcpp
C ObjC C++ ObjC++ CppReason(CPP_W_WARNING_DIRECTIVE)
; Documented in common.opt
Wctor-dtor-privacy Wctor-dtor-privacy
C++ ObjC++ Var(warn_ctor_dtor_privacy) Warning C++ ObjC++ Var(warn_ctor_dtor_privacy) Warning
Warn when all constructors and destructors are private Warn when all constructors and destructors are private
Wdate-time
C ObjC C++ ObjC++ CPP(warn_date_time) CppReason(CPP_W_DATE_TIME) Var(cpp_warn_date_time) Init(0) Warning
Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage
Wdeclaration-after-statement Wdeclaration-after-statement
C ObjC Var(warn_declaration_after_statement) Init(-1) Warning C ObjC Var(warn_declaration_after_statement) Init(-1) Warning
Warn when a declaration is found after a statement Warn when a declaration is found after a statement
...@@ -368,7 +376,7 @@ LangEnabledBy(C++ ObjC++,Weffc++) ...@@ -368,7 +376,7 @@ LangEnabledBy(C++ ObjC++,Weffc++)
; ;
Wdeprecated Wdeprecated
C C++ ObjC ObjC++ CPP(cpp_warn_deprecated) Var(warn_deprecated) Init(1) Warning C C++ ObjC ObjC++ CPP(cpp_warn_deprecated) CppReason(CPP_W_DEPRECATED) Var(warn_deprecated) Init(1) Warning
Warn if a deprecated compiler feature, class, method, or field is used Warn if a deprecated compiler feature, class, method, or field is used
Wdesignated-init Wdesignated-init
...@@ -392,7 +400,7 @@ C ObjC C++ ObjC++ Var(warn_empty_body) Warning EnabledBy(Wextra) ...@@ -392,7 +400,7 @@ C ObjC C++ ObjC++ Var(warn_empty_body) Warning EnabledBy(Wextra)
Warn about an empty body in an if or else statement Warn about an empty body in an if or else statement
Wendif-labels Wendif-labels
C ObjC C++ ObjC++ CPP(warn_endif_labels) Var(cpp_warn_endif_labels) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) C ObjC C++ ObjC++ CPP(warn_endif_labels) CppReason(CPP_W_ENDIF_LABELS) Var(cpp_warn_endif_labels) Init(1) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn about stray tokens after #elif and #endif Warn about stray tokens after #elif and #endif
Wenum-compare Wenum-compare
...@@ -503,7 +511,7 @@ C++ ObjC++ Var(warn_invalid_offsetof) Init(1) Warning ...@@ -503,7 +511,7 @@ C++ ObjC++ Var(warn_invalid_offsetof) Init(1) Warning
Warn about invalid uses of the \"offsetof\" macro Warn about invalid uses of the \"offsetof\" macro
Winvalid-pch Winvalid-pch
C ObjC C++ ObjC++ CPP(warn_invalid_pch) Var(cpp_warn_invalid_pch) Init(0) Warning C ObjC C++ ObjC++ CPP(warn_invalid_pch) CppReason(CPP_W_INVALID_PCH) Var(cpp_warn_invalid_pch) Init(0) Warning
Warn about PCH files that are found but not used Warn about PCH files that are found but not used
Wjump-misses-init Wjump-misses-init
...@@ -511,7 +519,7 @@ C ObjC Var(warn_jump_misses_init) Warning LangEnabledby(C ObjC,Wc++-compat) ...@@ -511,7 +519,7 @@ C ObjC Var(warn_jump_misses_init) Warning LangEnabledby(C ObjC,Wc++-compat)
Warn when a jump misses a variable initialization Warn when a jump misses a variable initialization
Wliteral-suffix Wliteral-suffix
C++ ObjC++ CPP(warn_literal_suffix) Var(cpp_warn_literal_suffix) Init(1) Warning C++ ObjC++ CPP(warn_literal_suffix) CppReason(CPP_W_LITERAL_SUFFIX) Var(cpp_warn_literal_suffix) Init(1) Warning
Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore. Warn when a string or character literal is followed by a ud-suffix which does not begin with an underscore.
Wlogical-op Wlogical-op
...@@ -523,7 +531,7 @@ C ObjC C++ ObjC++ Var(warn_logical_not_paren) Warning LangEnabledBy(C ObjC C++ O ...@@ -523,7 +531,7 @@ C ObjC C++ ObjC++ Var(warn_logical_not_paren) Warning LangEnabledBy(C ObjC C++ O
Warn when logical not is used on the left hand side operand of a comparison Warn when logical not is used on the left hand side operand of a comparison
Wlong-long Wlong-long
C ObjC C++ ObjC++ CPP(cpp_warn_long_long) Var(warn_long_long) Init(-1) Warning LangEnabledBy(C ObjC,Wc90-c99-compat) C ObjC C++ ObjC++ CPP(cpp_warn_long_long) CppReason(CPP_W_LONG_LONG) Var(warn_long_long) Init(-1) Warning LangEnabledBy(C ObjC,Wc90-c99-compat)
Do not warn about using \"long long\" when -pedantic Do not warn about using \"long long\" when -pedantic
Wmain Wmain
...@@ -583,7 +591,7 @@ C ObjC C++ ObjC++ Alias(Wsuggest-attribute=format) ...@@ -583,7 +591,7 @@ C ObjC C++ ObjC++ Alias(Wsuggest-attribute=format)
; ;
Wmissing-include-dirs Wmissing-include-dirs
C ObjC C++ ObjC++ CPP(warn_missing_include_dirs) Var(cpp_warn_missing_include_dirs) Init(0) Warning C ObjC C++ ObjC++ CPP(warn_missing_include_dirs) CppReason(CPP_W_MISSING_INCLUDE_DIRS) Var(cpp_warn_missing_include_dirs) Init(0) Warning
Warn about user-specified include directories that do not exist Warn about user-specified include directories that do not exist
Wmissing-parameter-type Wmissing-parameter-type
...@@ -598,7 +606,7 @@ Wmudflap ...@@ -598,7 +606,7 @@ Wmudflap
C ObjC C++ ObjC++ Ignore Warn(switch %qs is no longer supported) C ObjC C++ ObjC++ Ignore Warn(switch %qs is no longer supported)
Wmultichar Wmultichar
C ObjC C++ ObjC++ CPP(warn_multichar) Var(cpp_warn_multichar) Init(0) Warning C ObjC C++ ObjC++ CPP(warn_multichar) CppReason(CPP_W_MULTICHAR) Var(cpp_warn_multichar) Init(0) Warning
Warn about use of multi-character character constants Warn about use of multi-character character constants
Wnarrowing Wnarrowing
...@@ -638,7 +646,7 @@ C ObjC C++ ObjC++ Alias(Wnormalized=,nfc,none) ...@@ -638,7 +646,7 @@ C ObjC C++ ObjC++ Alias(Wnormalized=,nfc,none)
; ;
Wnormalized= Wnormalized=
C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(warn_normalize) Init(normalized_C) Var(cpp_warn_normalize) Enum(cpp_normalize_level) C ObjC C++ ObjC++ RejectNegative Joined Warning CPP(warn_normalize) CppReason(CPP_W_NORMALIZE) Init(normalized_C) Var(cpp_warn_normalize) Enum(cpp_normalize_level)
-Wnormalized=<none|id|nfc|nfkc> Warn about non-normalised Unicode strings -Wnormalized=<none|id|nfc|nfkc> Warn about non-normalised Unicode strings
; Required for these enum values. ; Required for these enum values.
...@@ -697,7 +705,7 @@ C ObjC C++ ObjC++ Var(warn_parentheses) Warning LangEnabledBy(C ObjC C++ ObjC++, ...@@ -697,7 +705,7 @@ C ObjC C++ ObjC++ Var(warn_parentheses) Warning LangEnabledBy(C ObjC C++ ObjC++,
Warn about possibly missing parentheses Warn about possibly missing parentheses
Wpedantic Wpedantic
C ObjC C++ ObjC++ CPP(cpp_pedantic) Warning C ObjC C++ ObjC++ CPP(cpp_pedantic) CppReason(CPP_W_PEDANTIC) Warning
; Documented in common.opt ; Documented in common.opt
Wpmf-conversions Wpmf-conversions
...@@ -724,10 +732,6 @@ Wpragmas ...@@ -724,10 +732,6 @@ Wpragmas
C ObjC C++ ObjC++ Var(warn_pragmas) Init(1) Warning C ObjC C++ ObjC++ Var(warn_pragmas) Init(1) Warning
Warn about misuses of pragmas Warn about misuses of pragmas
Wdate-time
C ObjC C++ ObjC++ CPP(warn_date_time) Var(cpp_warn_date_time) Init(0) Warning
Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage
Wproperty-assign-default Wproperty-assign-default
ObjC ObjC++ Var(warn_property_assign_default) Init(1) Warning ObjC ObjC++ Var(warn_property_assign_default) Init(1) Warning
Warn if a property for an Objective-C object has no assign semantics specified Warn if a property for an Objective-C object has no assign semantics specified
...@@ -809,7 +813,7 @@ C ObjC C++ ObjC++ Warning ...@@ -809,7 +813,7 @@ C ObjC C++ ObjC++ Warning
; Documented in common.opt ; Documented in common.opt
Wtraditional Wtraditional
C ObjC CPP(cpp_warn_traditional) Var(warn_traditional) Init(0) Warning C ObjC CPP(cpp_warn_traditional) CppReason(CPP_W_TRADITIONAL) Var(warn_traditional) Init(0) Warning
Warn about features not present in traditional C Warn about features not present in traditional C
Wtraditional-conversion Wtraditional-conversion
...@@ -817,7 +821,7 @@ C ObjC Var(warn_traditional_conversion) Warning ...@@ -817,7 +821,7 @@ C ObjC Var(warn_traditional_conversion) Warning
Warn of prototypes causing type conversions different from what would happen in the absence of prototype Warn of prototypes causing type conversions different from what would happen in the absence of prototype
Wtrigraphs Wtrigraphs
C ObjC C++ ObjC++ CPP(warn_trigraphs) Var(cpp_warn_trigraphs) Init(2) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall) C ObjC C++ ObjC++ CPP(warn_trigraphs) CppReason(CPP_W_TRIGRAPHS) Var(cpp_warn_trigraphs) Init(2) Warning LangEnabledBy(C ObjC C++ ObjC++,Wall)
Warn if trigraphs are encountered that might affect the meaning of the program Warn if trigraphs are encountered that might affect the meaning of the program
Wundeclared-selector Wundeclared-selector
...@@ -825,7 +829,7 @@ ObjC ObjC++ Var(warn_undeclared_selector) Warning ...@@ -825,7 +829,7 @@ ObjC ObjC++ Var(warn_undeclared_selector) Warning
Warn about @selector()s without previously declared methods Warn about @selector()s without previously declared methods
Wundef Wundef
C ObjC C++ ObjC++ CPP(warn_undef) Var(cpp_warn_undef) Init(0) Warning C ObjC C++ ObjC++ CPP(warn_undef) CppReason(CPP_W_UNDEF) Var(cpp_warn_undef) Init(0) Warning
Warn if an undefined macro is used in an #if directive Warn if an undefined macro is used in an #if directive
Wuninitialized Wuninitialized
...@@ -853,7 +857,7 @@ C ObjC C++ ObjC++ Var(warn_unused_local_typedefs) Warning EnabledBy(Wunused) ...@@ -853,7 +857,7 @@ C ObjC C++ ObjC++ Var(warn_unused_local_typedefs) Warning EnabledBy(Wunused)
Warn when typedefs locally defined in a function are not used Warn when typedefs locally defined in a function are not used
Wunused-macros Wunused-macros
C ObjC C++ ObjC++ Var(cpp_warn_unused_macros) Warning C ObjC C++ ObjC++ CppReason(CPP_W_UNUSED_MACROS) Var(cpp_warn_unused_macros) Warning
Warn about macros defined in the main file that are not used Warn about macros defined in the main file that are not used
Wunused-result Wunused-result
...@@ -861,7 +865,7 @@ C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning ...@@ -861,7 +865,7 @@ C ObjC C++ ObjC++ Var(warn_unused_result) Init(1) Warning
Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value Warn if a caller of a function, marked with attribute warn_unused_result, does not use its return value
Wvariadic-macros Wvariadic-macros
C ObjC C++ ObjC++ CPP(warn_variadic_macros) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic) C ObjC C++ ObjC++ CPP(warn_variadic_macros) CppReason(CPP_W_VARIADIC_MACROS) Var(cpp_warn_variadic_macros) Init(0) Warning LangEnabledBy(C ObjC C++ ObjC++,Wpedantic)
Warn about using variadic macros Warn about using variadic macros
Wvariadic-macros Wvariadic-macros
......
...@@ -488,4 +488,9 @@ The state of this option should be kept in sync with the preprocessor ...@@ -488,4 +488,9 @@ The state of this option should be kept in sync with the preprocessor
option @var{var}. If this property is set, then properties @code{Var} option @var{var}. If this property is set, then properties @code{Var}
and @code{Init} must be set as well. and @code{Init} must be set as well.
@item CppReason(@var{CPP_W_Enum})
This warning option corresponds to @code{cpplib.h} warning reason code
@var{CPP_W_Enum}. This should only be used for warning options of the
C-family front-ends.
@end table @end table
...@@ -479,5 +479,32 @@ print " OPT_SPECIAL_program_name," ...@@ -479,5 +479,32 @@ print " OPT_SPECIAL_program_name,"
print " OPT_SPECIAL_input_file" print " OPT_SPECIAL_input_file"
print "};" print "};"
print "" print ""
print "#ifdef GCC_C_COMMON_H"
print "/* Mapping from cpp message reasons to the options that enable them. */"
print "#include <cpplib.h>"
print "struct cpp_reason_option_codes_t"
print "{"
print " const int reason; /* cpplib message reason. */"
print " const int option_code; /* gcc option that controls this message. */"
print "};"
print ""
print "static const struct cpp_reason_option_codes_t cpp_reason_option_codes[] = {"
for (i = 0; i < n_opts; i++) {
# With identical flags, pick only the last one. The
# earlier loop ensured that it has all flags merged,
# and a nonempty help text if one of the texts was nonempty.
while( i + 1 != n_opts && opts[i] == opts[i + 1] ) {
i++;
}
cpp_reason = nth_arg(0, opt_args("CppReason", flags[i]));
if (cpp_reason != "") {
cpp_reason = cpp_reason ",";
printf(" {%-40s %s},\n", cpp_reason, opt_enum(opts[i]))
}
}
printf(" {%-40s 0},\n", "CPP_W_NONE,")
print "};"
print "#endif"
print ""
print "#endif /* OPTIONS_H */" print "#endif /* OPTIONS_H */"
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment