<div dir="ltr">Like an operating system, Erlang has several levels. The runtime system boot stuff assumes very little about standard libraries at all, and what you're going to do with any flags that don't affect the runtime system directly. Then the kernel and stdlib basics adds some conventions but still don't assume too much about overall system behaviour. Then, the application controller adds conventions about applications and -config (but lets you have as many config files as you like, with arbitrary names). Then, the release handler and reltool, if you use them, add further conventions, such as "you should only have one main config file". (For historical reasons, you may also find abstraction leaks between these layers.)<div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><br>        /Richard</div></div>
<br><div class="gmail_quote">2018-02-14 10:24 GMT+01:00 Xavier Noria <span dir="ltr"><<a href="mailto:fxn@hashref.com" target="_blank">fxn@hashref.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra">I have done a walkthrough, and the only thing that I see special-cased is that sys.config has <a href="https://github.com/erlang/otp/blob/bf0d03bd6f393b6a4f7836c5203e9a83caf457e8/lib/kernel/src/application_controller.erl#L1821" target="_blank">hard-coded support</a> for nesting.</div><div class="gmail_extra"><br></div><div class="gmail_extra">One of the first things that the application master does when it starts is to check `init:get_argument(config)`, which simply lists all the files passed to `-config` files. The `init/2` function iterates that list and *If* the basename of one of items is "sys.config", then we enter that `if` branch. But the implementation does not assume its existence. In particular, it does not assume its existence regardless of whether the mode is interactive or embedded (which is said in the config docs).</div><div class="gmail_extra"><br></div><div class="gmail_extra">I confirmed with a sample release, changed the value of `-config` to point to a dummy foo.config, the system boots normally, and `init:get_arguments(config)` indeed returns</div><div class="gmail_extra"><br></div><div class="gmail_extra">    {:ok, [['/Users/fxn/tmp/sample/_<wbr>build/prod/rel/sample/foo.<wbr>config']]}</div><div class="gmail_extra"><br></div><div class="gmail_extra">So my conclusion is that it is really a convention (except for the fact that the documented nesting does not work in arbitrary config files).</div></div>
<br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>