Skip to content

Commit b10b2e0

Browse files
committed
Add curl fallback and option to setup scripts
Signed-off-by: paulober <[email protected]>
1 parent 330d8f4 commit b10b2e0

File tree

2 files changed

+170
-7
lines changed

2 files changed

+170
-7
lines changed

scripts/template_setup_posix

Lines changed: 86 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,13 @@ check_command()
4848
fi
4949
}
5050

51+
# Silently check if command is available (for fallback logic)
52+
check_command_silent()
53+
{
54+
which $1 &> /dev/null
55+
return $?
56+
}
57+
5158
# Check if the current installation is a full SDK with all GNU toolchains
5259
check_full_gnu_sdk()
5360
{
@@ -60,6 +67,31 @@ check_full_gnu_sdk()
6067
return 0
6168
}
6269

70+
# Download helper function
71+
# Usage: download URL OUTFILE
72+
download()
73+
{
74+
local url="$1"
75+
local outfile="$2"
76+
77+
if [ "${dl_tool}" = "wget" ]; then
78+
# Emulate quiet+progress+timestamping
79+
wget -q --show-progress -N -O "${outfile}" "${url}"
80+
return $?
81+
else
82+
# curl: -f fail on HTTP errors; -L follow redirects
83+
# --remote-time preserves Last-Modified on the file
84+
# -z OUTFILE does conditional GET (only download if newer)
85+
# --progress-bar shows progress
86+
if [ -f "${outfile}" ]; then
87+
curl -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -z "${outfile}" -o "${outfile}" "${url}"
88+
else
89+
curl -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -o "${outfile}" "${url}"
90+
fi
91+
return $?
92+
fi
93+
}
94+
6395
# Display script usage
6496
usage()
6597
{
@@ -70,6 +102,7 @@ usage()
70102
echo " -l Install LLVM toolchain"
71103
echo " -h Install host tools"
72104
echo " -c Register Zephyr SDK CMake package"
105+
echo " -dl <curl|wget> Force downloader (default: wget, fallback to curl)"
73106
echo
74107
echo "Supported GNU Toolchains:"
75108
echo
@@ -159,6 +192,20 @@ else
159192
-c)
160193
do_cmake_pkg="y"
161194
;;
195+
-dl)
196+
shift
197+
if [[ "$1" = "curl" ]]; then
198+
dl_force="curl"
199+
elif [[ "$1" = "wget" ]]; then
200+
dl_force="wget"
201+
else
202+
echo "ERROR: -dl expects <curl|wget>"
203+
exit 3
204+
fi
205+
;;
206+
-o)
207+
do_old_zephyr="y"
208+
;;
162209
'-?')
163210
usage
164211
exit 0
@@ -207,7 +254,43 @@ echo
207254

208255
# Check dependencies
209256
check_command cmake 90
210-
check_command wget 91
257+
258+
# Choose downloader (default: wget; fallback to curl). Allow -dl override.
259+
dl_tool=""
260+
261+
if [ "${dl_force}" = "curl" ]; then
262+
check_command_silent curl
263+
if [ $? -eq 0 ]; then
264+
dl_tool="curl"
265+
else
266+
echo "ERROR: -dl curl requested but 'curl' not found in PATH."
267+
exit 91
268+
fi
269+
elif [ "${dl_force}" = "wget" ]; then
270+
check_command_silent wget
271+
if [ $? -eq 0 ]; then
272+
dl_tool="wget"
273+
else
274+
echo "ERROR: -dl wget requested but 'wget' not found in PATH."
275+
exit 91
276+
fi
277+
else
278+
# Default behavior: prefer wget, else curl
279+
check_command_silent wget
280+
if [ $? -eq 0 ]; then
281+
dl_tool="wget"
282+
else
283+
check_command_silent curl
284+
if [ $? -eq 0 ]; then
285+
dl_tool="curl"
286+
fi
287+
fi
288+
fi
289+
290+
if [ -z "${dl_tool}" ]; then
291+
echo "Zephyr SDK setup requires either 'wget' or 'curl' in PATH."
292+
exit 91
293+
fi
211294

212295
# Ask for user inputs if no argument is specified
213296
if [ "${interactive}" = "y" ]; then
@@ -232,7 +315,7 @@ if [ "${do_gnu_toolchain}" = "y" ]; then
232315
echo "Installing '${toolchain}' GNU toolchain ..."
233316

234317
# Download toolchain archive
235-
wget -q --show-progress -N -O "${toolchain_filename}" "${toolchain_uri}"
318+
download "${toolchain_uri}" "${toolchain_filename}"
236319
if [ $? != 0 ]; then
237320
rm -f "${toolchain_filename}"
238321
echo "ERROR: GNU toolchain download failed"
@@ -259,7 +342,7 @@ if [ "${do_llvm_toolchain}" = "y" ] && [ ! -d "llvm" ]; then
259342
toolchain_uri="${dl_rel_base}/${toolchain_filename}"
260343

261344
# Download toolchain archive
262-
wget -q --show-progress -N -O "${toolchain_filename}" "${toolchain_uri}"
345+
download "${toolchain_uri}" "${toolchain_filename}"
263346
if [ $? != 0 ]; then
264347
rm -f "${toolchain_filename}"
265348
echo "ERROR: LLVM toolchain download failed"

scripts/template_setup_win

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ if [%ERRORLEVEL%] neq [0] (
2121
)
2222
exit /b 0
2323

24+
REM # Silently check if command is available (for fallback logic)
25+
:check_command_silent
26+
where %1 >nul 2>&1
27+
exit /b %ERRORLEVEL%
28+
2429
:entry
2530

2631
REM # Initialise GNU toolchain list
@@ -53,8 +58,7 @@ REM # Check dependencies
5358

5459
call :check_command cmake 90
5560
if [%ERRORLEVEL%] neq [0] goto end
56-
call :check_command wget 91
57-
if [%ERRORLEVEL%] neq [0] goto end
61+
5862
call :check_command 7z 92
5963
if [%ERRORLEVEL%] neq [0] goto end
6064

@@ -81,6 +85,17 @@ if /i [%1] equ [/t] (
8185
)
8286
set DO_GNU_TOOLCHAIN=y
8387
shift
88+
) else if /i [%1] equ [/dl] (
89+
if /i [%2] equ [curl] (
90+
set DL_FORCE=curl
91+
) else if /i [%2] equ [wget] (
92+
set DL_FORCE=wget
93+
) else (
94+
echo ERROR: /dl expects ^<curl^|wget^>
95+
set EXITCODE=3
96+
goto end
97+
)
98+
shift
8499
) else if /i [%1] equ [/l] (
85100
set DO_LLVM_TOOLCHAIN=y
86101
) else if /i [%1] equ [/h] (
@@ -144,7 +159,71 @@ if [%ERRORLEVEL%] equ [1] set DO_CMAKE_PKG=y
144159

145160
echo.
146161

162+
REM # Download helper
163+
REM # usage: call :download URL OUTFILE
164+
:download
165+
setlocal ENABLEDELAYEDEXPANSION
166+
set _URL=%~1
167+
set _OUT=%~2
168+
169+
if /i [%DL_TOOL%] equ [wget] (
170+
REM Emulate quiet+progress+timestamping:
171+
wget -q --show-progress -N -O "!_OUT!" "!_URL!"
172+
endlocal & exit /b %ERRORLEVEL%
173+
) else (
174+
REM curl: -f fail on HTTP errors; -L follow redirects
175+
REM --remote-time preserves Last-Modified on the file
176+
REM -z OUTFILE does conditional GET (only download if newer)
177+
REM Replace the --progress-bar with an -sS to make it quiet if needed
178+
if exist "!_OUT!" (
179+
curl.exe -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -z "!_OUT!" -o "!_OUT!" "!_URL!"
180+
) else (
181+
curl.exe -fL --retry 5 --retry-delay 2 --progress-bar --remote-time -o "!_OUT!" "!_URL!"
182+
)
183+
endlocal & exit /b %ERRORLEVEL%
184+
)
185+
147186
:process
187+
REM # Choose downloader (default: wget; fallback to curl). Allow /dl override.
188+
set DL_TOOL=
189+
190+
if /i [%DL_FORCE%] equ [curl] (
191+
call :check_command curl 91
192+
if [!ERRORLEVEL!] equ [0] (
193+
set DL_TOOL=curl
194+
) else (
195+
echo ERROR: /dl curl requested but 'curl' not found in PATH.
196+
set EXITCODE=91
197+
goto end
198+
)
199+
) else if /i [%DL_FORCE%] equ [wget] (
200+
call :check_command wget 91
201+
if [!ERRORLEVEL!] equ [0] (
202+
set DL_TOOL=wget
203+
) else (
204+
echo ERROR: /dl wget requested but 'wget' not found in PATH.
205+
set EXITCODE=91
206+
goto end
207+
)
208+
) else (
209+
REM Default behavior: prefer wget, else curl
210+
call :check_command_silent wget
211+
if [!ERRORLEVEL!] equ [0] (
212+
set DL_TOOL=wget
213+
) else (
214+
call :check_command_silent curl
215+
if [!ERRORLEVEL!] equ [0] (
216+
set DL_TOOL=curl
217+
)
218+
)
219+
)
220+
221+
if [%DL_TOOL%] equ [] (
222+
echo Zephyr SDK setup requires either 'wget' or 'curl' in PATH.
223+
set EXITCODE=91
224+
goto end
225+
)
226+
148227
REM # Install GNU toolchains
149228
if [%DO_GNU_TOOLCHAIN%] neq [] (
150229
if not exist gnu\ mkdir gnu
@@ -158,7 +237,7 @@ if [%DO_GNU_TOOLCHAIN%] neq [] (
158237
echo Installing '%%t' GNU toolchain ...
159238

160239
REM # Download toolchain archive
161-
wget -q --show-progress -N -O !TOOLCHAIN_FILENAME! !TOOLCHAIN_URI!
240+
call :download !TOOLCHAIN_URI! !TOOLCHAIN_FILENAME!
162241
if [!ERRORLEVEL!] neq [0] (
163242
del /q !TOOLCHAIN_FILENAME!
164243
echo ERROR: GNU toolchain download failed
@@ -190,7 +269,7 @@ if [%DO_LLVM_TOOLCHAIN%] neq [] (
190269
set TOOLCHAIN_URI=%DL_REL_BASE%/!TOOLCHAIN_FILENAME!
191270

192271
REM # Download toolchain archive
193-
wget -q --show-progress -N -O !TOOLCHAIN_FILENAME! !TOOLCHAIN_URI!
272+
call :download !TOOLCHAIN_URI! !TOOLCHAIN_FILENAME!
194273
if [!ERRORLEVEL!] neq [0] (
195274
del /q !TOOLCHAIN_FILENAME!
196275
echo ERROR: LLVM toolchain download failed
@@ -243,6 +322,7 @@ echo all Install all GNU toolchains
243322
echo /l Install LLVM toolchain
244323
echo /h Install host tools
245324
echo /c Register Zephyr SDK CMake package
325+
echo /dl ^<curl^|wget^> Force downloader (default: wget, fallback to curl)
246326
echo.
247327
echo Supported GNU Toolchains:
248328
echo.

0 commit comments

Comments
 (0)