aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--README.md4
-rw-r--r--priv/templates/extended_bin.dtl10
-rw-r--r--src/rlx_prv_config.erl2
-rw-r--r--src/rlx_state.erl16
-rw-r--r--test/rlx_command_SUITE.erl2
-rw-r--r--test/rlx_release_SUITE.erl36
6 files changed, 44 insertions, 26 deletions
diff --git a/README.md b/README.md
index 47fe83f..a821622 100644
--- a/README.md
+++ b/README.md
@@ -31,7 +31,9 @@ To build relx and generate a standalone escript executable:
This creates the executable `relx`.
-Note, if using your own `rebar`, it must at least be > version [2.2.0](https://github.com/rebar/rebar/releases)
+Note, if using your own `rebar`, it must at least be > version
+2.2.0-20-g6e24cd6. Unfortunately, the 2.2.0 release of rebar is not
+sufficient.
Building on Windows
-------------------
diff --git a/priv/templates/extended_bin.dtl b/priv/templates/extended_bin.dtl
index 92e89f7..0b6c763 100644
--- a/priv/templates/extended_bin.dtl
+++ b/priv/templates/extended_bin.dtl
@@ -65,6 +65,11 @@ if [ -z "$VMARGS_PATH" ]; then
fi
fi
+if [ $RELX_REPLACE_OS_VARS ]; then
+ awk '{while(match($0,"[$]{[^}]*}")) {var=substr($0,RSTART+2,RLENGTH -3);gsub("[$]{"var"}",ENVIRON[var])}}1' < $VMARGS_PATH > $VMARGS_PATH.2.config
+ VMARGS_PATH=$VMARGS_PATH.2.config
+fi
+
# Make sure log directory exists
mkdir -p "$RUNNER_LOG_DIR"
@@ -76,6 +81,11 @@ if [ -z "$CONFIG_PATH" ]; then
fi
fi
+if [ $RELX_REPLACE_OS_VARS ]; then
+ awk '{while(match($0,"[$]{[^}]*}")) {var=substr($0,RSTART+2,RLENGTH -3);gsub("[$]{"var"}",ENVIRON[var])}}1' < $CONFIG_PATH > $CONFIG_PATH.2.config
+ CONFIG_PATH=$CONFIG_PATH.2.config
+fi
+
# Extract the target node name from node.args
NAME_ARG=$(egrep '^-s?name' "$VMARGS_PATH")
if [ -z "$NAME_ARG" ]; then
diff --git a/src/rlx_prv_config.erl b/src/rlx_prv_config.erl
index 7c2ace0..9efd8a0 100644
--- a/src/rlx_prv_config.erl
+++ b/src/rlx_prv_config.erl
@@ -200,7 +200,7 @@ load_terms({sys_config, SysConfig}, {ok, State}) ->
{ok, State}
end;
load_terms({output_dir, OutputDir}, {ok, State}) ->
- {ok, rlx_state:output_dir(State, filename:absname(OutputDir))};
+ {ok, rlx_state:base_output_dir(State, filename:absname(OutputDir))};
load_terms({overlay_vars, OverlayVars}, {ok, State}) ->
CurrentOverlayVars = rlx_state:get(State, overlay_vars),
NewOverlayVars0 = list_of_overlay_vars_files(OverlayVars),
diff --git a/src/rlx_state.erl b/src/rlx_state.erl
index c3c3176..5b488c8 100644
--- a/src/rlx_state.erl
+++ b/src/rlx_state.erl
@@ -26,8 +26,9 @@
-export([new/2,
log/1,
actions/1,
- output_dir/1,
- output_dir/2,
+ output_dir/1,
+ base_output_dir/1,
+ base_output_dir/2,
lib_dirs/1,
add_lib_dirs/2,
overrides/1,
@@ -185,11 +186,16 @@ log(#state_t{log=LogState}) ->
LogState.
-spec output_dir(t()) -> file:name().
-output_dir(#state_t{output_dir=OutDir}) ->
+output_dir(State=#state_t{output_dir=OutDir}) ->
+ {RelName, _RelVsn} = default_configured_release(State),
+ filename:join(OutDir, RelName).
+
+-spec base_output_dir(t()) -> file:name().
+base_output_dir(#state_t{output_dir=OutDir}) ->
OutDir.
--spec output_dir(t(), Directory::file:filename()) -> t().
-output_dir(State, Directory) ->
+-spec base_output_dir(t(), Directory::file:filename()) -> t().
+base_output_dir(State, Directory) ->
State#state_t{output_dir=Directory}.
-spec lib_dirs(t()) -> [file:name()].
diff --git a/test/rlx_command_SUITE.erl b/test/rlx_command_SUITE.erl
index 5ea4769..2e1ef1d 100644
--- a/test/rlx_command_SUITE.erl
+++ b/test/rlx_command_SUITE.erl
@@ -63,7 +63,7 @@ normal_passing_case(Config) ->
{ok, State} = rlx_cmd_args:args2state(Opts, Targets),
?assertMatch([Lib1, Lib2],
rlx_state:lib_dirs(State)),
- ?assertMatch(Outdir, rlx_state:output_dir(State)),
+ ?assertMatch(Outdir, rlx_state:base_output_dir(State)),
?assertMatch([{app1,{{33,33},{[],[<<"build4">>]}},lte},
{app2,
diff --git a/test/rlx_release_SUITE.erl b/test/rlx_release_SUITE.erl
index 8f27050..730e1d1 100644
--- a/test/rlx_release_SUITE.erl
+++ b/test/rlx_release_SUITE.erl
@@ -267,7 +267,7 @@ make_overridden_release(Config) ->
?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)),
?assert(lists:member({OverrideAppName, OverrideVsn}, AppSpecs)),
?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)),
- {ok, Real} = file:read_link(filename:join([OutputDir, "lib",
+ {ok, Real} = file:read_link(filename:join([OutputDir, "foo", "lib",
OverrideApp ++ "-" ++ OverrideVsn])),
?assertMatch(OverrideAppDir, Real).
@@ -485,7 +485,7 @@ make_rerun_overridden_release(Config) ->
?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)),
?assert(lists:member({OverrideAppName, OverrideVsn}, AppSpecs)),
?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)),
- {ok, Real} = file:read_link(filename:join([OutputDir, "lib",
+ {ok, Real} = file:read_link(filename:join([OutputDir, "foo", "lib",
OverrideApp ++ "-" ++ OverrideVsn])),
?assertMatch(OverrideAppDir, Real).
@@ -563,19 +563,19 @@ overlay_release(Config) ->
?assert(lists:member({goal_app_2, "0.0.1"}, AppSpecs)),
?assert(lists:member({lib_dep_1, "0.0.1", load}, AppSpecs)),
- ?assert(ec_file:exists(filename:join(OutputDir, "fooo"))),
- ?assert(ec_file:exists(filename:join([OutputDir, "foodir", "vars1.config"]))),
- ?assert(ec_file:exists(filename:join([OutputDir, "yahoo", "vars1.config"]))),
- io:format("DirFile ~p~n", [filename:join([OutputDir, SecondTestDir, TestDir, TestFile])]),
- ?assert(ec_file:exists(filename:join([OutputDir, SecondTestDir, TestDir, TestFile]))),
+ ?assert(ec_file:exists(filename:join([OutputDir, "foo", "fooo"]))),
+ ?assert(ec_file:exists(filename:join([OutputDir, "foo", "foodir", "vars1.config"]))),
+ ?assert(ec_file:exists(filename:join([OutputDir, "foo", "yahoo", "vars1.config"]))),
+ ?assert(ec_file:exists(filename:join([OutputDir, "foo", SecondTestDir, TestDir, TestFile]))),
- TemplateData = case file:consult(filename:join([OutputDir, "test_template_resolved"])) of
+ TemplateData = case file:consult(filename:join([OutputDir, "foo", "test_template_resolved"])) of
{ok, Details} ->
Details;
Error ->
erlang:throw({failed_to_consult, Error})
end,
- {ok, ReadFileInfo} = file:read_file_info(filename:join([OutputDir, "test_template_resolved"])),
+
+ {ok, ReadFileInfo} = file:read_file_info(filename:join([OutputDir, "foo", "test_template_resolved"])),
?assertEqual(8#100777, ReadFileInfo#file_info.mode),
?assertEqual(erlang:system_info(version),
@@ -610,9 +610,9 @@ overlay_release(Config) ->
proplists:get_value(lib_dep_1_link, TemplateData)),
?assertEqual("(3:debug)",
proplists:get_value(log, TemplateData)),
- ?assertEqual(OutputDir,
+ ?assertEqual(filename:join(OutputDir, "foo"),
proplists:get_value(output_dir, TemplateData)),
- ?assertEqual(OutputDir,
+ ?assertEqual(filename:join(OutputDir, "foo"),
proplists:get_value(target_dir, TemplateData)),
?assertEqual([],
proplists:get_value(overridden, TemplateData)),
@@ -917,14 +917,14 @@ make_dev_mode_release(Config) ->
OutputDir, ConfigFile),
[{{foo, "0.0.1"}, _Release}] = ec_dictionary:to_list(rlx_state:realized_releases(State)),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "non_goal_1-0.0.1"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "non_goal_2-0.0.1"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "goal_app_1-0.0.1"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "goal_app_2-0.0.1"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "lib", "lib_dep_1-0.0.1"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "releases", "0.0.1",
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "lib", "non_goal_1-0.0.1"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "lib", "non_goal_2-0.0.1"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "lib", "goal_app_1-0.0.1"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "lib", "goal_app_2-0.0.1"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "lib", "lib_dep_1-0.0.1"]))),
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "releases", "0.0.1",
"sys.config"]))),
- ?assert(ec_file:is_symlink(filename:join([OutputDir, "releases", "0.0.1",
+ ?assert(ec_file:is_symlink(filename:join([OutputDir, "foo", "releases", "0.0.1",
"vm.args"]))).