Packages
gpb
4.19.9
5.0.0
4.21.7
4.21.6
4.21.5
4.21.4
4.21.3
4.21.2
4.21.1
4.21.0
4.20.0
4.19.9
4.19.8
4.19.7
4.19.6
4.19.5
4.19.4
4.19.3
4.19.2
4.19.1
4.19.0
4.18.0
4.17.7
4.17.6
4.17.5
4.17.3
4.17.2
4.17.1
4.17.0
4.16.2
4.16.1
4.16.0
4.15.2
4.15.1
4.14.2
4.14.1
4.14.0
4.13.0
4.12.0
4.11.2
4.11.1
4.11.0
4.10.6
4.10.5
4.10.4
4.10.3
4.10.2
4.10.1
4.10.0
4.9.3
4.9.2
4.9.1
4.9.0
4.8.0
4.7.3
4.7.2
4.7.1
4.7.0
4.6.0
4.5.1
4.5.0
4.4.1
4.4.0
4.3.3
4.3.2
4.3.1
4.3.0
4.2.3
4.2.2
4.2.1
4.2.0
4.1.9
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.2
4.0.1
4.0.0
3.28.1
3.28.0
3.27.7
3.27.6
3.27.5
3.27.4
3.27.3
3.27.2
3.27.1
3.27.0
3.26.8
3.26.7
3.26.6
3.26.5
3.26.4
3.26.3
3.26.2
3.26.1
3.26.0
3.25.2
3.25.1
3.25.0
3.24.4
3.24.3
3.24.2
3.24.1
3.24.0
3.23.2
3.23.1
3.23.0
3.22.5
3.22.4
3.22.3
3.22.2
3.22.1
3.22.0
3.21.3
3.21.2
3.21.1
3.21.0
3.20.3
3.20.2
3.20.0
3.19.0
3.18.10
3.18.9
3.18.8
3.18.7
3.18.6
3.18.5
3.18.4
3.18.3
3.18.2
3.18.1
3.18.0
3.17.13
3.17.12
3.17.11
3.17.10
3.17.9
3.17.8
3.17.5
3.17.4
3.17.3
3.17.2
3.17.1
3.17.0
3.16.0
3.15.0
3.14.0
3.13.0
3.12.2
3.12.1
3.12.0
3.11.0
A compiler for Google protocol buffer definitions files for Erlang.
Current section
Files
Jump to
Current section
Files
build/mk_version_hrl
#!/usr/bin/env escript
%% -*- erlang -*-
-mode(compile).
main(Argv) ->
{Opts, Args} = parse_opts(Argv, [], []),
[InFile, OutFile] = if length(Args) == 2 -> Args;
true -> usage(), halt(1)
end,
{Vsn, VsnSource} =
case proplists:get_value(override_version, Opts) of
undefined ->
find_vsn_and_source();
Version ->
{Version, overriding_option}
end,
BaseStr = case file:read_file(InFile) of
{ok, S} ->
S;
{error, Reason} ->
file_err(read_file, InFile, Reason)
end,
SedList =
[
{<<"@vsn@">>, Vsn},
{<<"@vsn-source@">>, VsnSource},
{<<"is expected to be">>, <<"was">>},
{<<"%% The version below">>,
[<<"%% DO NOT EDIT -- generated from gpb_version.hrl.in\n">>,
<<"%% The version below">>]},
{<<"%% NB: The build.mk_version_hrl depends.*">>, <<"">>}
],
Content =
iolist_to_binary(
lists:foldl(
fun({Patten, Replacement}, Acc) ->
re:replace(Acc, Patten, Replacement, [{return, binary}])
end, BaseStr, SedList)),
case file:read_file(OutFile) of
{ok, Content} ->
%% Don't overwrite the file with identical data.
%% This can cause build systems to rebuild unnecessarily.
ok;
_ ->
case file:write_file(OutFile, Content) of
ok ->
ok;
{error, Reason2} ->
file_err(write_file, OutFile, Reason2)
end
end.
parse_opts(["--override-version="++Vsn | Rest], Opts, Args) ->
parse_opts(Rest, [{override_version, Vsn} | Opts], Args);
parse_opts([Arg | Rest], Opts, Args) ->
parse_opts(Rest, Opts, [Arg | Args]);
parse_opts([], Opts, Args) ->
{lists:reverse(Opts), lists:reverse(Args)}.
usage() ->
io:format("mk_version_hrl [Opts] InFile OutFile~n"
"Opts: --override-version=VSN~n").
-define(NO_VERSION_ERR_MSG,
"ERROR: To build outside a git work tree, you must explicitly
set the version, either by writing it to a file gpb.vsn,
or by creating a versioned archive, and then unpack and
build that.
If you want to create a versioned archive, then
use helpers/mk-versioned-archive.
The helpers/mk-versioned-archive can be used from a git worktree
or from eg Github's automatically generated tar/zip files
or similar. If you use it from a (non-shallow) git work tree
with tags intact, the version will get picked up automatically,
otherwise you must know the proper version and specify it manually,
see mk-versioned-archive --help for further assistance.
For further info, see the README.md, the section section
named Building outside of a git work tree.").
find_vsn_and_source() ->
FindVsnCmd = "escript ./build/find-vsn",
case os:cmd(FindVsnCmd ++ " --have-vsn") of
"true" ++ _ ->
Vsn = first_line_no_nl(
os:cmd(FindVsnCmd ++ " --show-vsn")),
VsnSource = first_line_no_nl(
os:cmd(FindVsnCmd ++ " --show-vsn-source")),
{Vsn, VsnSource};
"false" ++ _ ->
io:format(standard_error, "~s~n", [?NO_VERSION_ERR_MSG]),
halt(1)
end.
first_line_no_nl("\r" ++ _) -> "";
first_line_no_nl("\n" ++ _) -> "";
first_line_no_nl([C | Tl]) -> [C | first_line_no_nl(Tl)];
first_line_no_nl("") -> "".
file_err(FunName, FileName, Reason) ->
io:format(standard_error, "file:~p(~s) execute failed!, Reason :~s ~n",
[FunName, FileName, file:format_error(Reason)]),
halt(1).