%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2010-2011. All Rights Reserved. %% %% The contents of this file are subject to the Erlang Public License, %% Version 1.1, (the "License"); you may not use this file except in %% compliance with the License. You should have received a copy of the %% Erlang Public License along with this software. If not, it can be %% retrieved online at http://www.erlang.org/. %% %% Software distributed under the License is distributed on an "AS IS" %% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See %% the License for the specific language governing rights and limitations %% under the License. %% %% %CopyrightEnd% %% %% %% Driver for the encoder generator utility. %% -module(diameter_make). -export([spec/0, hrl/0, erl/0]). -spec spec() -> no_return(). -spec hrl() -> no_return(). -spec erl() -> no_return(). spec() -> make(spec). hrl() -> make(hrl). erl() -> make(erl). %% make/1 make(Mode) -> Args = init:get_plain_arguments(), Opts = try options(Args) catch throw: help -> help(Mode) end, Files = proplists:get_value(files, Opts, []), lists:foreach(fun(F) -> from_file(F, Mode, Opts) end, Files), halt(0). %% from_file/3 from_file(F, Mode, Opts) -> try to_spec(F, Mode, Opts) of Spec -> from_spec(F, Spec, Mode, Opts) catch error: Reason -> io:format("==> ~p parse failure:~n~p~n", [F, {Reason, erlang:get_stacktrace()}]), halt(1) end. %% to_spec/2 %% Try to read the input as an already parsed file or else parse it. to_spec(F, spec, Opts) -> diameter_spec_util:parse(F, Opts); to_spec(F, _, _) -> {ok, [Spec]} = file:consult(F), Spec. %% from_spec/4 from_spec(File, Spec, Mode, Opts) -> try diameter_codegen:from_spec(File, Spec, Opts, Mode) catch error: Reason -> io:format("==> ~p codegen failure:~n~p~n~p~n", [Mode, File, {Reason, erlang:get_stacktrace()}]), halt(1) end. %% options/1 options(["-v" | Rest]) -> [verbose | options(Rest)]; options(["-o", Outdir | Rest]) -> [{outdir, Outdir} | options(Rest)]; options(["-i", Incdir | Rest]) -> [{include, Incdir} | options(Rest)]; options(["-h" | _]) -> throw(help); options(["--" | Fs]) -> [{files, Fs}]; options(["-" ++ _ = Opt | _]) -> io:fwrite("==> unknown option: ~s~n", [Opt]), throw(help); options(Fs) -> %% trailing arguments options(["--" | Fs]). %% help/1 help(M) -> io:fwrite("Usage: ~p ~p [Options] [--] File ...~n" "Options:~n" " -v verbose output~n" " -h shows this help message~n" " -o OutDir where to put the output files~n" " -i IncludeDir where to search for beams to import~n", [?MODULE, M]), halt(1).