Skip to content

Commit e1eecb8

Browse files
authored
Move path loading and IEx booting to Elixir (#12375)
This gives us more control to cache paths and over boot compared to relying on scripts. This also makes it easier for someone to provide alternatives to IEx.
1 parent bcf789f commit e1eecb8

File tree

11 files changed

+235
-286
lines changed

11 files changed

+235
-286
lines changed

bin/elixir

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ Usage: $(basename "$0") [options] [.exs file] [data]
1818
-pz "PATH" Appends the given path to Erlang code path (*)
1919
-v, --version Prints Erlang/OTP and Elixir versions (standalone)
2020
21-
--app APP Starts the given app and its dependencies (*)
2221
--erl "SWITCHES" Switches to be passed down to Erlang (*)
2322
--eval "COMMAND" Evaluates the given command, same as -e (*)
2423
--logger-otp-reports BOOL Enables or disables OTP reporting
@@ -95,7 +94,6 @@ starts_with () {
9594
}
9695

9796
ERL_EXEC="erl"
98-
MODE="elixir"
9997
I=1
10098
E=0
10199
LENGTH=$#
@@ -106,18 +104,13 @@ while [ $I -le $LENGTH ]; do
106104
S=0
107105
C=0
108106
case "$1" in
109-
+iex)
107+
+elixirc|+iex)
110108
C=1
111-
MODE="iex"
112-
;;
113-
+elixirc)
114-
C=1
115-
MODE="elixirc"
116109
;;
117110
-v|--no-halt|--dbg)
118111
C=1
119112
;;
120-
-e|-r|-pr|-pa|-pz|--app|--eval|--remsh|--dot-iex)
113+
-e|-r|-pr|-pa|-pz|--eval|--remsh|--dot-iex)
121114
C=2
122115
;;
123116
--rpc-eval)
@@ -220,7 +213,6 @@ SELF=$(readlink_f "$0")
220213
SCRIPT_PATH=$(dirname "$SELF")
221214

222215
if [ "$OSTYPE" = "cygwin" ]; then SCRIPT_PATH=$(cygpath -m "$SCRIPT_PATH"); fi
223-
if [ "$MODE" != "iex" ]; then ERL="-noshell -s elixir start_cli $ERL"; fi
224216

225217
if [ "$OS" != "Windows_NT" ] && [ -z "$NO_COLOR" ]; then
226218
if test -t 1 -a -t 2; then ERL="-elixir ansi_enabled true $ERL"; fi
@@ -231,7 +223,7 @@ fi
231223
ERTS_BIN=
232224
ERTS_BIN="$ERTS_BIN"
233225

234-
set -- "$ERTS_BIN$ERL_EXEC" -pa "$SCRIPT_PATH"/../lib/*/ebin $ELIXIR_ERL_OPTIONS $ERL "$@"
226+
set -- "$ERTS_BIN$ERL_EXEC" -noshell -elixir_root "$SCRIPT_PATH"/../lib -pa "$SCRIPT_PATH"/../lib/elixir/ebin $ELIXIR_ERL_OPTIONS -s elixir start_cli $ERL "$@"
235227

236228
if [ -n "$RUN_ERL_PIPE" ]; then
237229
ESCAPED=""

bin/elixir.bat

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ echo -pa "PATH" Prepends the given path to Erlang code path
2525
echo -pz "PATH" Appends the given path to Erlang code path (*)
2626
echo -v, --version Prints Erlang/OTP and Elixir versions (standalone)
2727
echo.
28-
echo --app APP Starts the given app and its dependencies (*)
2928
echo --erl "SWITCHES" Switches to be passed down to Erlang (*)
3029
echo --eval "COMMAND" Evaluates the given command, same as -e (*)
3130
echo --logger-otp-reports BOOL Enables or disables OTP reporting
@@ -97,7 +96,7 @@ rem Recursive loop called for each parameter that parses the cmd line parameters
9796
set "par=%~1"
9897
if "!par!"=="" (
9998
rem skip if no parameter
100-
goto expand_erl_libs
99+
goto run
101100
)
102101
shift
103102
set par="!par:"=\"!"
@@ -107,8 +106,8 @@ if !endLoop! == 1 (
107106
)
108107
rem ******* EXECUTION OPTIONS **********************
109108
if !par!=="--werl" (set useWerl=1 && goto startloop)
110-
if !par!=="+iex" (set parsElixir=!parsElixir! +iex && set runMode="iex" && goto startloop)
111-
if !par!=="+elixirc" (set parsElixir=!parsElixir! +elixirc && set runMode="elixirc" && goto startloop)
109+
if !par!=="+iex" (set parsElixir=!parsElixir! +iex && goto startloop)
110+
if !par!=="+elixirc" (set parsElixir=!parsElixir! +elixirc && goto startloop)
112111
rem ******* EVAL PARAMETERS ************************
113112
if ""==!par:-e=! (
114113
set "VAR=%~1"
@@ -139,7 +138,6 @@ if ""==!par:-pa=! (set "parsElixir=!parsElixir! -pa %~1" && shift && got
139138
if ""==!par:-pz=! (set "parsElixir=!parsElixir! -pz %~1" && shift && goto startloop)
140139
if ""==!par:-v=! (set "parsElixir=!parsElixir! -v" && goto startloop)
141140
if ""==!par:--version=! (set "parsElixir=!parsElixir! --version" && goto startloop)
142-
if ""==!par:--app=! (set "parsElixir=!parsElixir! --app %~1" && shift && goto startloop)
143141
if ""==!par:--no-halt=! (set "parsElixir=!parsElixir! --no-halt" && goto startloop)
144142
if ""==!par:--remsh=! (set "parsElixir=!parsElixir! --remsh %~1" && shift && goto startloop)
145143
if ""==!par:--dot-iex=! (set "parsElixir=!parsElixir! --dot-iex %~1" && shift && goto startloop)
@@ -149,7 +147,6 @@ if ""==!par:--boot=! (set "parsErlang=!parsErlang! -boot %~1" &&
149147
if ""==!par:--boot-var=! (set "parsErlang=!parsErlang! -boot_var %~1 %~2" && shift && shift && goto startloop)
150148
if ""==!par:--cookie=! (set "parsErlang=!parsErlang! -setcookie %~1" && shift && goto startloop)
151149
if ""==!par:--hidden=! (set "parsErlang=!parsErlang! -hidden" && goto startloop)
152-
if ""==!par:--detached=! (set "parsErlang=!parsErlang! -detached" && echo warning: the --detached option is deprecated && goto startloop)
153150
if ""==!par:--erl-config=! (set "parsErlang=!parsErlang! -config %~1" && shift && goto startloop)
154151
if ""==!par:--logger-otp-reports=! (set "parsErlang=!parsErlang! -logger handle_otp_reports %1" && shift && goto startloop)
155152
if ""==!par:--logger-sasl-reports=! (set "parsErlang=!parsErlang! -logger handle_sasl_reports %1" && shift && goto startloop)
@@ -162,21 +159,14 @@ set endLoop=1
162159
set parsElixir=!parsElixir! !par!
163160
goto startloop
164161

165-
:expand_erl_libs
166-
rem expand all ebin paths as Windows does not support the ..\*\ebin wildcard
167-
set ext_libs=
168-
for /d %%d in ("!SCRIPT_PATH!..\lib\*.") do (
169-
set ext_libs=!ext_libs! -pa "%%~fd\ebin"
170-
)
171-
172162
:run
173163
reg query HKCU\Console /v VirtualTerminalLevel 2>nul | findstr /e "0x1" >nul 2>nul
174164
if %errorlevel% == 0 (
175165
set beforeExtra=-elixir ansi_enabled true !beforeExtra!
176166
)
177-
if not !runMode! == "iex" (
178-
set beforeExtra=-noshell -s elixir start_cli !beforeExtra!
179-
)
167+
168+
set beforeExtra=-noshell -elixir_root !SCRIPT_PATH!..\lib -pa !SCRIPT_PATH!..\lib\elixir\ebin -s elixir start_cli !beforeExtra!
169+
180170
if defined ELIXIR_CLI_DRY_RUN (
181171
if defined useWerl (
182172
echo start "" "!ERTS_BIN!werl.exe" !ext_libs! !ELIXIR_ERL_OPTIONS! !parsErlang! !beforeExtra! -extra !parsElixir!

bin/iex

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,4 +30,4 @@ readlink_f () {
3030

3131
SELF=$(readlink_f "$0")
3232
SCRIPT_PATH=$(dirname "$SELF")
33-
exec "$SCRIPT_PATH"/elixir --no-halt --erl "-noshell -user Elixir.IEx.CLI" +iex "$@"
33+
exec "$SCRIPT_PATH"/elixir --no-halt --erl "-user elixir" +iex "$@"

bin/iex.bat

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,6 @@ goto end
2424

2525
:run
2626
if defined IEX_WITH_WERL (set __ELIXIR_IEX_FLAGS=--werl) else (set __ELIXIR_IEX_FLAGS=)
27-
call "%~dp0\elixir.bat" --no-halt --erl "-noshell -user Elixir.IEx.CLI" +iex %__ELIXIR_IEX_FLAGS% %*
27+
call "%~dp0\elixir.bat" --no-halt --erl "-user elixir" +iex %__ELIXIR_IEX_FLAGS% %*
2828
:end
2929
endlocal

0 commit comments

Comments
 (0)