aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/kernel/doc/src/app.xml4
-rw-r--r--lib/reltool/src/reltool_target.erl16
-rw-r--r--lib/sasl/doc/src/appup.xml24
-rw-r--r--lib/sasl/src/systools.hrl5
-rw-r--r--lib/sasl/src/systools_make.erl17
-rw-r--r--lib/sasl/test/systools_SUITE.erl24
6 files changed, 67 insertions, 23 deletions
diff --git a/lib/kernel/doc/src/app.xml b/lib/kernel/doc/src/app.xml
index ff8a12fe97..1914844b37 100644
--- a/lib/kernel/doc/src/app.xml
+++ b/lib/kernel/doc/src/app.xml
@@ -4,7 +4,7 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2011</year>
+ <year>1997</year><year>2012</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -75,7 +75,7 @@ MaxT int() infinity
Names [Name] []
Apps [App] []
Env [{Par,Val}] []
-Start {Module,StartArgs} undefined
+Start {Module,StartArgs} []
Phases [{Phase,PhaseArgs}] undefined
Module = Name = App = Par = Phase = atom()
Val = StartArgs = PhaseArgs = term()</code>
diff --git a/lib/reltool/src/reltool_target.erl b/lib/reltool/src/reltool_target.erl
index 3d83a77d99..44f1977ad6 100644
--- a/lib/reltool/src/reltool_target.erl
+++ b/lib/reltool/src/reltool_target.erl
@@ -247,10 +247,15 @@ gen_app(#app{name = Name,
env = Env,
mod = StartMod,
start_phases = StartPhases}}) ->
- StartMod2 =
- case StartMod =:= undefined of
- true -> [];
- false -> [{mod, StartMod}]
+ StartPhases2 =
+ case StartPhases of
+ undefined -> [];
+ _ -> [{start_phases, StartPhases}]
+ end,
+ Tail =
+ case StartMod of
+ undefined -> StartPhases2;
+ _ -> [{mod, StartMod} | StartPhases2]
end,
{application, Name,
[{description, Desc},
@@ -261,10 +266,9 @@ gen_app(#app{name = Name,
{applications, ReqApps},
{included_applications, InclApps},
{env, Env},
- {start_phases, StartPhases},
{maxT, MaxT},
{maxP, MaxP} |
- StartMod2]}.
+ Tail]}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Generate the contents of a rel file
diff --git a/lib/sasl/doc/src/appup.xml b/lib/sasl/doc/src/appup.xml
index 770b7c2492..bacfaa76ef 100644
--- a/lib/sasl/doc/src/appup.xml
+++ b/lib/sasl/doc/src/appup.xml
@@ -4,7 +4,7 @@
<fileref>
<header>
<copyright>
- <year>1997</year><year>2011</year>
+ <year>1997</year><year>2012</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -56,12 +56,20 @@
the application.</p>
</item>
<item>
- <p><c>UpFromVsn = string()</c> is an earlier version of
- the application to upgrade from.</p>
+ <p><c>UpFromVsn = string() | binary()</c> is an earlier
+ version of the application to upgrade from. If it is a
+ string, it will be interpreted as a specific version
+ number. If it is a binary, it will be interpreted as a
+ regular expression which can match multiple version
+ numbers.</p>
</item>
<item>
- <p><c>DownToVsn = string()</c> is an earlier version of
- the application to downgrade to.</p>
+ <p><c>DownToVsn = string() | binary()</c> is an earlier
+ version of the application to downgrade to. If it is a
+ string, it will be interpreted as a specific version
+ number. If it is a binary, it will be interpreted as a
+ regular expression which can match multiple version
+ numbers.</p>
</item>
<item>
<p><c>Instructions</c> is a list of <em>release upgrade instructions</em>, see below. It is recommended to use
@@ -70,6 +78,12 @@
creating the <c>relup</c> file.</p>
</item>
</list>
+ <p>In order to avoid duplication of upgrade instructions it is
+ allowed to use regular expressions to specify the <c>UpFromVsn</c>
+ and <c>DownToVsn</c>. To be considered a regular expression, the
+ version identifier must be specified as a binary, e.g.</p>
+ <code type="none">&lt;&lt;"2\\.1\\.[0-9]+">></code>
+ <p>will match all versions <c>2.1.x</c>, where x is any number.</p>
</section>
<section>
diff --git a/lib/sasl/src/systools.hrl b/lib/sasl/src/systools.hrl
index 9a3e98221c..da531dbee5 100644
--- a/lib/sasl/src/systools.hrl
+++ b/lib/sasl/src/systools.hrl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2009. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2012. 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
@@ -60,7 +60,8 @@
%% integer() | infinity.
mod = [], %% [] | {Mod, StartArgs}, Mod= atom(),
%% StartArgs = list().
- start_phases = [], %% [] | {Phase, PhaseArgs}, Phase = atom(),
+ start_phases, %% [{Phase, PhaseArgs}] | undefined,
+ %% Phase = atom(),
%% PhaseArgs = list().
dir = "" %% The directory where the .app file was
%% found (internal use).
diff --git a/lib/sasl/src/systools_make.erl b/lib/sasl/src/systools_make.erl
index 3c1002e4a6..61e660e918 100644
--- a/lib/sasl/src/systools_make.erl
+++ b/lib/sasl/src/systools_make.erl
@@ -482,7 +482,7 @@ mandatory_applications([_|Apps],Kernel,Stdlib,Sasl) ->
mandatory_applications([],Type,_,_) when Type=/=permanent ->
error_mandatory_application(kernel,Type);
mandatory_applications([],_,Type,_) when Type=/=permanent ->
- error_mandatory_application(sasl,Type);
+ error_mandatory_application(stdlib,Type);
mandatory_applications([],_,_,undefined) ->
{ok, [{warning,missing_sasl}]};
mandatory_applications([],_,_,_) ->
@@ -1468,15 +1468,18 @@ pack_app(#application{name=Name,vsn=V,id=Id,description=D,modules=M,
{applications, App},
{included_applications, Incs},
{env, Env},
- {start_phases, SF},
{maxT, MaxT},
{maxP, MaxP} |
- behave(Mod)]}.
-
+ behave([{start_phases,SF},{mod,Mod}])]}.
+
+behave([{mod,[]}|T]) ->
+ behave(T);
+behave([{start_phases,undefined}|T]) ->
+ behave(T);
+behave([H|T]) ->
+ [H|behave(T)];
behave([]) ->
- [];
-behave(Mod) ->
- [{mod, Mod}].
+ [].
%%______________________________________________________________________
%% mandatory modules; this modules must be loaded before processes
diff --git a/lib/sasl/test/systools_SUITE.erl b/lib/sasl/test/systools_SUITE.erl
index 72b3eb8954..878d582e6b 100644
--- a/lib/sasl/test/systools_SUITE.erl
+++ b/lib/sasl/test/systools_SUITE.erl
@@ -500,6 +500,22 @@ crazy_script(Config) when is_list(Config) ->
{error, _, {mandatory_app,kernel,load}} =
systools:make_script(LatestName3, [silent,{path,P}]),
+ %% Run with .rel file with non-permanent stdlib
+ {LatestDir4, LatestName4} = create_script(latest_stdlib_start_type, Config),
+ ok = file:set_cwd(LatestDir4),
+
+ error = systools:make_script(LatestName4),
+ {error, _, {mandatory_app,stdlib,load}} =
+ systools:make_script(LatestName4, [silent,{path,P}]),
+
+ %% Run with .rel file lacking stdlib
+ {LatestDir5, LatestName5} = create_script(latest_no_stdlib, Config),
+ ok = file:set_cwd(LatestDir5),
+
+ error = systools:make_script(LatestName5),
+ {error, _, {missing_mandatory_app,stdlib}} =
+ systools:make_script(LatestName5, [silent,{path,P}]),
+
ok = file:set_cwd(OldDir),
ok.
@@ -2044,8 +2060,14 @@ create_script(latest_nokernel,Config) ->
Apps = [{db,"2.1"},{fe,"3.1"}],
do_create_script(latest_nokernel,Config,"4.4",Apps);
create_script(latest_kernel_start_type,Config) ->
- Apps = [{kernel,"1.0",load},{db,"2.1"},{fe,"3.1"}],
+ Apps = [{kernel,"1.0",load},{stdlib,"1.0"},{db,"2.1"},{fe,"3.1"}],
do_create_script(latest_kernel_start_type,Config,"4.4",Apps);
+create_script(latest_stdlib_start_type,Config) ->
+ Apps = [{kernel,"1.0"},{stdlib,"1.0",load},{db,"2.1"},{fe,"3.1"}],
+ do_create_script(latest_stdlib_start_type,Config,"4.4",Apps);
+create_script(latest_no_stdlib,Config) ->
+ Apps = [{kernel,"1.0"},{db,"2.1"},{fe,"3.1"}],
+ do_create_script(latest_no_stdlib,Config,"4.4",Apps);
create_script(latest_app_start_type1,Config) ->
Apps = core_apps(current),
do_create_script(latest_app_start_type1,Config,current,Apps);