Navigation Menu

Skip to content

Commit

Permalink
Merge branch 'dgud/sasl/no_dot_erlang_boot/OTP-8479' into maint
Browse files Browse the repository at this point in the history
* dgud/sasl/no_dot_erlang_boot/OTP-8479:
  sasl: Add no_dot_erlang documentation and tests
  sasl: Add no_dot_erlang start script
  • Loading branch information
dgud committed Nov 29, 2013
2 parents ac7902c + a9340a1 commit d299987
Show file tree
Hide file tree
Showing 10 changed files with 143 additions and 17 deletions.
3 changes: 2 additions & 1 deletion erts/Makefile.in
Expand Up @@ -107,7 +107,8 @@ local_setup:
fi
@cd start_scripts && $(MAKE) $(ERL_TOP)/bin/start.script \
$(ERL_TOP)/bin/start_sasl.script \
$(ERL_TOP)/bin/start_clean.script
$(ERL_TOP)/bin/start_clean.script \
$(ERL_TOP)/bin/no_dot_erlang.script

# Run the configure script
.PHONY: configure
Expand Down
2 changes: 1 addition & 1 deletion erts/etc/unix/Install.src
Expand Up @@ -137,9 +137,9 @@ case $start_option in
esac

cp -p ../releases/%I_SYSTEM_VSN%/start_*.boot .
cp -p ../releases/%I_SYSTEM_VSN%/no_dot_erlang.boot .
cp -p $Name.boot start.boot
cp -p ../releases/%I_SYSTEM_VSN%/$Name.script start.script

#
# Fixing the man pages
#
Expand Down
2 changes: 1 addition & 1 deletion erts/etc/win32/Install.c
Expand Up @@ -47,7 +47,7 @@ int main(int argc, char **argv)
char *binaries[] = { "erl.exe", "werl.exe", "erlc.exe",
"dialyzer.exe", "typer.exe",
"escript.exe", "ct_run.exe", NULL };
char *scripts[] = { "start_clean.boot", "start_sasl.boot", NULL };
char *scripts[] = { "start_clean.boot", "start_sasl.boot", "no_dot_erlang.boot", NULL };
char fromname[MAX_PATH];
char toname[MAX_PATH];

Expand Down
33 changes: 30 additions & 3 deletions erts/start_scripts/Makefile
@@ -1,7 +1,7 @@
#
# %CopyrightBegin%
#
# Copyright Ericsson AB 1997-2012. All Rights Reserved.
# Copyright Ericsson AB 1997-2013. 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
Expand Down Expand Up @@ -34,12 +34,16 @@ INSTALL_SCRIPTS = \
$(SS_ROOT)/start_clean.script \
$(SS_ROOT)/start_clean.boot \
$(SS_ROOT)/start_sasl.boot \
$(SS_ROOT)/start_sasl.script
$(SS_ROOT)/start_sasl.script \
$(SS_ROOT)/no_dot_erlang.boot \
$(SS_ROOT)/no_dot_erlang.script


REL_SCRIPTS = \
$(SS_ROOT)/start_clean.rel \
$(SS_ROOT)/start_sasl.rel \
$(SS_ROOT)/start_all_example.rel
$(SS_ROOT)/start_all_example.rel \
$(SS_ROOT)/no_dot_erlang.rel \

ifneq ($(findstring win32,$(TARGET)),win32)
RELEASES_SRC = RELEASES.src
Expand Down Expand Up @@ -82,6 +86,13 @@ $(SS_ROOT)/start_sasl.boot: $(SS_ROOT)/start_sasl.rel
$(V_at)( cd $(SS_TMP) && \
$(ERLC) $(SASL_FLAGS) $(SCRIPT_PATH) -o $(SS_ROOT) $< )

$(SS_ROOT)/no_dot_erlang.script \
$(SS_ROOT)/no_dot_erlang.boot: $(SS_ROOT)/no_dot_erlang.rel
$(gen_verbose)$(INSTALL_DIR) $(SS_TMP)
$(V_at)( cd $(SS_TMP) && \
$(ERLC) $(SASL_FLAGS) $(SCRIPT_PATH) +no_warn_sasl +no_dot_erlang -o $(SS_ROOT) $< )


$(SS_ROOT)/start_clean.rel: $(SS_ROOT)/start_clean.rel.src \
../vsn.mk \
$(LIBPATH)/kernel/vsn.mk \
Expand All @@ -104,6 +115,16 @@ $(SS_ROOT)/start_sasl.rel: $(SS_ROOT)/start_sasl.rel.src \
-e 's;%SASL_VSN%;$(SASL_VSN);' \
$(SS_ROOT)/start_sasl.rel.src > $(SS_ROOT)/start_sasl.rel

$(SS_ROOT)/no_dot_erlang.rel: $(SS_ROOT)/no_dot_erlang.rel.src \
../vsn.mk \
$(LIBPATH)/kernel/vsn.mk \
$(LIBPATH)/stdlib/vsn.mk
$(gen_verbose)sed -e 's;%SYS_VSN%;$(SYSTEM_VSN);' \
-e 's;%ERTS_VSN%;$(VSN);' \
-e 's;%KERNEL_VSN%;$(KERNEL_VSN);' \
-e 's;%STDLIB_VSN%;$(STDLIB_VSN);' \
$(SS_ROOT)/no_dot_erlang.rel.src > $(SS_ROOT)/no_dot_erlang.rel

$(SS_ROOT)/start_all_example.rel: $(SS_ROOT)/start_all_example.rel.src \
../vsn.mk \
$(LIBPATH)/kernel/vsn.mk \
Expand Down Expand Up @@ -140,7 +161,13 @@ $(ERL_TOP)/bin/start_clean.script:
$(V_at)( cd $(SS_TMP) && \
$(ERLC) $(SCRIPT_PATH) +no_warn_sasl +otp_build -o $@ $(SS_ROOT)/start_clean.rel )

$(ERL_TOP)/bin/no_dot_erlang.script:
$(gen_verbose)$(INSTALL_DIR) $(SS_TMP)
$(V_at)( cd $(SS_TMP) && \
$(ERLC) $(SCRIPT_PATH) +no_warn_sasl +otp_build +no_dot_erlang -o $@ $(SS_ROOT)/no_dot_erlang.rel )

## Special target used from system/build/Makefile for source code release bootstrap.
## Add no_dot_erlang after next release
bootstrap_scripts: $(SS_ROOT)/start_clean.rel
$(V_at)$(INSTALL_DIR) $(TESTROOT)/bin
$(V_at)$(INSTALL_DIR) $(SS_TMP)
Expand Down
21 changes: 21 additions & 0 deletions erts/start_scripts/no_dot_erlang.rel.src
@@ -0,0 +1,21 @@
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2013. 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%
%%
{release, {"OTP APN 181 01","%SYS_VSN%"}, {erts, "%ERTS_VSN%"},
[{kernel,"%KERNEL_VSN%"},
{stdlib,"%STDLIB_VSN%"}]}.
6 changes: 4 additions & 2 deletions lib/sasl/doc/src/systools.xml
Expand Up @@ -5,7 +5,7 @@
<header>
<copyright>
<year>1996</year>
<year>2011</year>
<year>2013</year>
<holder>Ericsson AB, All Rights Reserved</holder>
</copyright>
<legalnotice>
Expand Down Expand Up @@ -139,7 +139,7 @@
<type>
<v>Name = string()</v>
<v>Opt = src_tests | {path,[Dir]} | local | {variables,[Var]} | exref |
{exref,[App]}] | silent | {outdir,Dir} | no_warn_sasl |
{exref,[App]}] | silent | {outdir,Dir} | no_dot_erlang | no_warn_sasl |
warnings_as_errors</v>
<v>&nbsp;Dir = string()</v>
<v>&nbsp;Var = {VarName,Prefix}</v>
Expand Down Expand Up @@ -252,6 +252,8 @@
<c>Module:format_error(Error)</c>.</p>
<p>If the option <c>warnings_as_errors</c> is provided, warnings
are treated as errors.</p>
<p>If the option <c>no_dot_erlang</c> is provided, the instruction to
load the <c>.erlang</c> file during boot is <em>NOT</em> included.</p>
</desc>
</func>
<func>
Expand Down
18 changes: 12 additions & 6 deletions lib/sasl/src/systools_make.erl
Expand Up @@ -1135,10 +1135,10 @@ generate_script(Output, Release, Appls, Flags) ->
load_appl_mods(Appls, Mandatory ++ Preloaded,
PathFlag, Variables) ++
[{path, create_path(Appls, PathFlag, Variables)}] ++
create_kernel_procs(Appls) ++
create_load_appls(Appls) ++
create_start_appls(Appls) ++
script_end()
create_kernel_procs(Appls) ++
create_load_appls(Appls) ++
create_start_appls(Appls) ++
script_end(lists:member(no_dot_erlang, Flags))
},

ScriptFile = Output ++ ".script",
Expand Down Expand Up @@ -1229,9 +1229,12 @@ create_load_appls([]) ->
%%______________________________________________________________________
%% The final part of the script.

script_end() ->
script_end(false) -> %% Do not skip loading of $HOME/.erlang
[{apply, {c, erlangrc, []}},
{progress, started}].
{progress, started}];
script_end(true) -> %% Ignore loading of $HOME/.erlang
[{progress, started}].


%%-----------------------------------------------------------------
%% Function: sort_appls(Appls) -> {ok, Appls'} | throw({error, Error})
Expand Down Expand Up @@ -2055,6 +2058,9 @@ cas([no_warn_sasl | Args], X) ->
%%% no_module_tests (kept for backwards compatibility, but ignored) ----
cas([no_module_tests | Args], X) ->
cas(Args, X);
cas([no_dot_erlang | Args], X) ->
cas(Args, X);

%%% ERROR --------------------------------------------------------------
cas([Y | Args], X) ->
cas(Args, X++[Y]).
Expand Down
33 changes: 32 additions & 1 deletion lib/sasl/test/release_handler_SUITE.erl
Expand Up @@ -64,7 +64,7 @@ cases() ->
supervisor_which_children_timeout,
release_handler_which_releases, install_release_syntax_check,
upgrade_supervisor, upgrade_supervisor_fail, otp_9864,
otp_10463_upgrade_script_regexp].
otp_10463_upgrade_script_regexp, no_dot_erlang].

groups() ->
[{release,[],
Expand Down Expand Up @@ -1709,6 +1709,37 @@ otp_10463_upgrade_script_regexp(_Config) ->
release_handler:upgrade_script(kernel,code:lib_dir(kernel)),
ok.

no_dot_erlang(Conf) ->
PrivDir = priv_dir(Conf),
{ok, OrigWd} = file:get_cwd(),
try
ok = file:set_cwd(PrivDir),

Erl = filename:join([code:root_dir(),"bin","erl"]),
Args = " -noinput -run io put_chars \"TESTOK\" -run erlang halt",
ok = file:write_file(".erlang", <<"io:put_chars(\"DOT_ERLANG_READ\\n\").\n">>),

case os:cmd(Erl ++ Args) of
"DOT_ERLANG_READ" ++ _ -> ok;
Other1 ->
io:format("Failed: ~s~n",[Erl ++ Args]),
io:format("Expected: ~s ++ _~n",["DOT_ERLANG_READ "]),
io:format("Got: ~s~n",[Other1]),
exit(failed_to_start, test_error)
end,
NO_DOT_ERL = " -boot no_dot_erlang",
case os:cmd(Erl ++ NO_DOT_ERL ++ Args) of
"TESTOK" ++ _ -> ok;
Other2 ->
io:format("Failed: ~s~n",[Erl ++ Args]),
io:format("Expected: ~s~n",["TESTOK"]),
io:format("Got: ~s~n",[Other2]),
exit(failed_to_start, no_dot_erlang)
end
after
_ = file:delete(".erlang"),
ok = file:set_cwd(OrigWd)
end.

%%%=================================================================
%%% Misceleaneous functions
Expand Down
32 changes: 31 additions & 1 deletion lib/sasl/test/systools_SUITE.erl
Expand Up @@ -43,6 +43,7 @@
-export([script_options/1, normal_script/1, unicode_script/1,
unicode_script/2, no_mod_vsn_script/1,
wildcard_script/1, variable_script/1, no_sasl_script/1,
no_dot_erlang_script/1,
abnormal_script/1, src_tests_script/1, crazy_script/1,
included_script/1, included_override_script/1,
included_fail_script/1, included_bug_script/1, exref_script/1,
Expand Down Expand Up @@ -79,7 +80,8 @@ groups() ->
[{script, [],
[script_options, normal_script, unicode_script, no_mod_vsn_script,
wildcard_script, variable_script, abnormal_script,
no_sasl_script, src_tests_script, crazy_script,
no_sasl_script, no_dot_erlang_script,
src_tests_script, crazy_script,
included_script, included_override_script,
included_fail_script, included_bug_script, exref_script,
otp_3065_circular_dependenies, included_and_used_sort_script]},
Expand Down Expand Up @@ -457,6 +459,34 @@ no_sasl_script(Config) when is_list(Config) ->
ok = file:set_cwd(OldDir),
ok.

%% make_script: Create script with no_dot_erlang. Check script contents.
no_dot_erlang_script(Config) when is_list(Config) ->
{ok, OldDir} = file:get_cwd(),

{LatestDir, LatestName} = create_script(latest1_no_sasl,Config),

DataDir = filename:absname(?copydir),
LibDir = [fname([DataDir, d_normal, lib])],
P = [fname([LibDir, '*', ebin]),
fname([DataDir, lib, kernel, ebin]),
fname([DataDir, lib, stdlib, ebin]),
fname([DataDir, lib, sasl, ebin])],

ok = file:set_cwd(LatestDir),

{ok, _ , []} =
systools:make_script(LatestName,[{path, P},silent, no_warn_sasl]),
{ok, [{_, _, LoadDotErlang}]} = read_script_file(LatestName),
[erlangrc] = [E || {apply, {c, E, []}} <- LoadDotErlang],

{ok, _ , []} =
systools:make_script(LatestName,[{path, P},silent, no_warn_sasl, no_dot_erlang]),
{ok, [{_, _, DoNotLoadDotErlang}]} = read_script_file(LatestName),
[] = [E || {apply, {c, E, []}} <- DoNotLoadDotErlang],

ok = file:set_cwd(OldDir),
ok.


%% make_script: Do not check date of object file or that source code
%% can be found.
Expand Down
10 changes: 9 additions & 1 deletion system/doc/system_principles/system_principles.xml
Expand Up @@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
<year>1996</year><year>2009</year>
<year>1996</year><year>2013</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
Expand Down Expand Up @@ -105,6 +105,14 @@ init:stop()</pre>
<p>Loads the code for and starts the applications Kernel,
STDLIB and SASL.</p>
</item>
<tag><c>no_dot_erlang.boot</c></tag>
<item>
<p>Loads the code for and starts the applications Kernel and
STDLIB, skips loading the <c>.erlang</c> file.
Useful for scripts and other tools that should be behave the
same irregardless of user preferences.
</p>
</item>
</taglist>
<p>Which of <c>start_clean</c> and <c>start_sasl</c> to use as
default is decided by the user when installing Erlang/OTP using
Expand Down

0 comments on commit d299987

Please sign in to comment.