diff options
author | Henrik Nord <[email protected]> | 2011-09-13 12:02:19 +0200 |
---|---|---|
committer | Henrik Nord <[email protected]> | 2011-09-13 12:02:23 +0200 |
commit | e9e118a25ee822e4568d785844d249e083cd88cf (patch) | |
tree | 636bddf9f6d41aefdf36cd6821560df4a66d249b /lib/parsetools/src/yecc.erl | |
parent | a40655461a03f6b075a1140810f020f5b2bf35b1 (diff) | |
parent | bbdc6a3c0fac080af7b60e6cf7d9732532027939 (diff) | |
download | otp-e9e118a25ee822e4568d785844d249e083cd88cf.tar.gz otp-e9e118a25ee822e4568d785844d249e083cd88cf.tar.bz2 otp-e9e118a25ee822e4568d785844d249e083cd88cf.zip |
Merge branch 'ta/werror' into dev
* ta/werror:
snmp: extend warnings_as_errors test
systools: add warnings_as_errors option
asn1ct: add warnings_as_errors option
leex: optimize werror/1
yecc: optimize werror/1
yecc: use more descriptive name: 'werror'
leex: use more descriptive name: 'werror'
compile: optimize werror/1
compile: log warnings as errors if -Werror is enabled
yecc: log warnings as errors if -Werror is enabled
leex: log warnings as errors if -Werror is enabled
yecc: honour -Werror passed from erlc
leex: honour -Werror passed from erlc
Do not write beam file if Werr and warnings /= []
parsetools: test if warnings_as_errors writes file
OTP-9536
Diffstat (limited to 'lib/parsetools/src/yecc.erl')
-rw-r--r-- | lib/parsetools/src/yecc.erl | 37 |
1 files changed, 24 insertions, 13 deletions
diff --git a/lib/parsetools/src/yecc.erl b/lib/parsetools/src/yecc.erl index 72cff3af92..354d56527d 100644 --- a/lib/parsetools/src/yecc.erl +++ b/lib/parsetools/src/yecc.erl @@ -133,12 +133,15 @@ %%% Interface to erl_compile. compile(Input0, Output0, - #options{warning = WarnLevel, verbose=Verbose, includes=Includes}) -> + #options{warning = WarnLevel, verbose=Verbose, includes=Includes, + specific=Specific}) -> Input = shorten_filename(Input0), Output = shorten_filename(Output0), Includefile = lists:sublist(Includes, 1), + Werror = proplists:get_bool(warnings_as_errors, Specific), Opts = [{parserfile,Output}, {includefile,Includefile}, {verbose,Verbose}, - {report_errors, true}, {report_warnings, WarnLevel > 0}], + {report_errors, true}, {report_warnings, WarnLevel > 0}, + {warnings_as_errors, Werror}], case file(Input, Opts) of {ok, _OutFile} -> ok; @@ -411,15 +414,15 @@ infile(Parent, Infilex, Options) -> {error, Reason} -> add_error(St0#yecc.infile, none, {file_error, Reason}, St0) end, - case {St#yecc.errors, werr(St)} of + case {St#yecc.errors, werror(St)} of {[], false} -> ok; _ -> _ = file:delete(St#yecc.outfile) end, Parent ! {self(), yecc_ret(St)}. -werr(St) -> - member(warnings_as_errors, St#yecc.options) - andalso length(St#yecc.warnings) > 0. +werror(St) -> + St#yecc.warnings =/= [] + andalso member(warnings_as_errors, St#yecc.options). outfile(St0) -> case file:open(St0#yecc.outfile, [write, delayed_write]) of @@ -783,9 +786,9 @@ yecc_ret(St0) -> report_warnings(St), Es = pack_errors(St#yecc.errors), Ws = pack_warnings(St#yecc.warnings), - Werr = werr(St), + Werror = werror(St), if - Werr -> + Werror -> do_error_return(St, Es, Ws); Es =:= [] -> case member(return_warnings, St#yecc.options) of @@ -849,14 +852,22 @@ report_errors(St) -> end. report_warnings(St) -> - case member(report_warnings, St#yecc.options) of + Werror = member(warnings_as_errors, St#yecc.options), + Prefix = case Werror of + true -> ""; + false -> "Warning: " + end, + ReportWerror = Werror andalso member(report_errors, St#yecc.options), + case member(report_warnings, St#yecc.options) orelse ReportWerror of true -> foreach(fun({File,{none,Mod,W}}) -> - io:fwrite(<<"~s: Warning: ~s\n">>, - [File,Mod:format_error(W)]); + io:fwrite(<<"~s: ~s~s\n">>, + [File,Prefix, + Mod:format_error(W)]); ({File,{Line,Mod,W}}) -> - io:fwrite(<<"~s:~w: Warning: ~s\n">>, - [File,Line,Mod:format_error(W)]) + io:fwrite(<<"~s:~w: ~s~s\n">>, + [File,Line,Prefix, + Mod:format_error(W)]) end, sort(St#yecc.warnings)); false -> ok |