From 77b8e9202715d526b1bae06b4a8a7882e501dfdc Mon Sep 17 00:00:00 2001 From: emtenet Date: Sat, 16 Apr 2016 13:09:58 +1000 Subject: Add a boot variable to Windows scripts Add missing -boot_var argument to Windows scripts when starting erlang. Use different boot variables on Windows vs non-Windows. The built-in $ROOT boot variable points to the erts directory on Windows (dictated by erl.ini [erlang] Rootdir=) and so a boot variable $RELEASE_DIR is made pointing to the release directory --- priv/templates/bin_windows | 3 ++- priv/templates/extended_bin_windows | 6 ++++-- src/rlx_prv_assembler.erl | 24 +++++++++++++++++++++++- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/priv/templates/bin_windows b/priv/templates/bin_windows index 7b1d4d8..fbe4a71 100644 --- a/priv/templates/bin_windows +++ b/priv/templates/bin_windows @@ -34,7 +34,8 @@ cd %rootdir% @echo Rootdir=%converted_rootdir% >> "%erl_ini%" :: Start the release in an `erl` shell -@"%erl%" %erl_opts% %sys_config% -boot "%boot_script%" %* +@set boot=-boot "%boot_script%" -boot_var RELEASE_DIR "%release_root_dir%" +@"%erl%" %erl_opts% %sys_config% %boot% %* @goto :eof diff --git a/priv/templates/extended_bin_windows b/priv/templates/extended_bin_windows index 7adff36..51c1bb2 100644 --- a/priv/templates/extended_bin_windows +++ b/priv/templates/extended_bin_windows @@ -186,7 +186,8 @@ :: Start a console :console -@start "%rel_name% console" %werl% -boot "%boot_script%" %sys_config% ^ +@set boot=-boot "%boot_script%" -boot_var RELEASE_DIR "%release_root_dir%" +@start "%rel_name% console" %werl% %boot% %sys_config% ^ -args_file "%vm_args%" @goto :eof @@ -202,6 +203,7 @@ :: Attach to a running node :attach -@start "%node_name% attach" %werl% -boot "%clean_boot_script%" ^ +@set boot=-boot "%clean_boot_script%" -boot_var RELEASE_DIR "%release_root_dir%" +@start "%node_name% attach" %werl% %boot% ^ -remsh %node_name% %node_type% console -setcookie %cookie% @goto :eof diff --git a/src/rlx_prv_assembler.erl b/src/rlx_prv_assembler.erl index 2f08005..53b7dfa 100644 --- a/src/rlx_prv_assembler.erl +++ b/src/rlx_prv_assembler.erl @@ -525,7 +525,7 @@ include_erts(State, Release, OutputDir, RelDir) -> make_boot_script(State, Release, OutputDir, RelDir) -> Options = [{path, [RelDir | rlx_util:get_code_paths(Release, OutputDir)]}, {outdir, RelDir}, - {variables, [{"ERTS_LIB_DIR", code:lib_dir()}]}, + {variables, make_boot_script_variables(State)}, no_module_tests, silent], Name = erlang:atom_to_list(rlx_release:name(Release)), ReleaseFile = filename:join([RelDir, Name ++ ".rel"]), @@ -551,6 +551,28 @@ make_boot_script(State, Release, OutputDir, RelDir) -> ?RLX_ERROR({release_script_generation_error, Module, Error}) end. +make_boot_script_variables(State) -> + % A boot variable is needed when {include_erts, false} and the application + % directories are split between the release/lib directory and the erts/lib + % directory. + % The built-in $ROOT variable points to the erts directory on Windows + % (dictated by erl.ini [erlang] Rootdir=) and so a boot variable is made + % pointing to the release directory + % On non-Windows, $ROOT is set by the ROOTDIR environment variable as the + % release directory, so a boot variable is made pointing to the erts + % directory. + % NOTE the boot variable can point to either the release/erts root directory + % or the release/erts lib directory, as long as the usage here matches the + % usage used in the start up scripts + case {os:type(), rlx_state:get(State, include_erts, true)} of + {{win32, _}, false} -> + [{"RELEASE_DIR", rlx_state:output_dir(State)}]; + {{win32, _}, true} -> + []; + _ -> + [{"ERTS_LIB_DIR", code:lib_dir()}] + end. + create_start_clean(RelDir, OutputDir, Options, State) -> case rlx_util:make_script(Options, fun(CorrectedOptions) -> -- cgit v1.2.3