Skip to content

Commit ac96b9c

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

File tree

2 files changed

+169
-9
lines changed

2 files changed

+169
-9
lines changed

scripts/template_setup_posix

Lines changed: 85 additions & 5 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
{
@@ -71,6 +103,7 @@ usage()
71103
echo " -h Install host tools"
72104
echo " -o Create symbolic links matching the old SDK layout for old Zephyr (< 4.3) bisectability"
73105
echo " -c Register Zephyr SDK CMake package"
106+
echo " -dl <curl|wget> Force downloader (default: wget, fallback to curl)"
74107
echo
75108
echo "Supported GNU Toolchains:"
76109
echo
@@ -162,9 +195,20 @@ else
162195
-c)
163196
do_cmake_pkg="y"
164197
;;
198+
-dl)
199+
shift
200+
if [[ "$1" = "curl" ]]; then
201+
dl_force="curl"
202+
elif [[ "$1" = "wget" ]]; then
203+
dl_force="wget"
204+
else
205+
echo "ERROR: -dl expects <curl|wget>"
206+
exit 3
207+
fi
208+
;;
165209
-o)
166-
do_old_zephyr="y"
167-
;;
210+
do_old_zephyr="y"
211+
;;
168212
'-?')
169213
usage
170214
exit 0
@@ -213,7 +257,43 @@ echo
213257

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

218298
# Ask for user inputs if no argument is specified
219299
if [ "${interactive}" = "y" ]; then
@@ -238,7 +318,7 @@ if [ "${do_gnu_toolchain}" = "y" ]; then
238318
echo "Installing '${toolchain}' GNU toolchain ..."
239319

240320
# Download toolchain archive
241-
wget -q --show-progress -N -O "${toolchain_filename}" "${toolchain_uri}"
321+
download "${toolchain_uri}" "${toolchain_filename}"
242322
if [ $? != 0 ]; then
243323
rm -f "${toolchain_filename}"
244324
echo "ERROR: GNU toolchain download failed"
@@ -265,7 +345,7 @@ if [ "${do_llvm_toolchain}" = "y" ] && [ ! -d "llvm" ]; then
265345
toolchain_uri="${dl_rel_base}/${toolchain_filename}"
266346

267347
# Download toolchain archive
268-
wget -q --show-progress -N -O "${toolchain_filename}" "${toolchain_uri}"
348+
download "${toolchain_uri}" "${toolchain_filename}"
269349
if [ $? != 0 ]; then
270350
rm -f "${toolchain_filename}"
271351
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)