|
| 1 | +@echo off |
| 2 | + |
| 3 | +setlocal enabledelayedexpansion |
| 4 | + |
| 5 | +if [!DEFAULT_MILL_VERSION!]==[] ( set "DEFAULT_MILL_VERSION=1.1.0-RC4" ) |
| 6 | + |
| 7 | +if [!MILL_GITHUB_RELEASE_CDN!]==[] ( set "MILL_GITHUB_RELEASE_CDN=" ) |
| 8 | + |
| 9 | +if [!MILL_MAIN_CLI!]==[] ( set "MILL_MAIN_CLI=%~f0" ) |
| 10 | + |
| 11 | +set "MILL_REPO_URL=https://github.com/com-lihaoyi/mill" |
| 12 | + |
| 13 | +SET MILL_BUILD_SCRIPT= |
| 14 | + |
| 15 | +if exist "build.mill" ( |
| 16 | + set MILL_BUILD_SCRIPT=build.mill |
| 17 | +) else ( |
| 18 | + if exist "build.mill.scala" ( |
| 19 | + set MILL_BUILD_SCRIPT=build.mill.scala |
| 20 | + ) else ( |
| 21 | + if exist "build.sc" ( |
| 22 | + set MILL_BUILD_SCRIPT=build.sc |
| 23 | + ) else ( |
| 24 | + rem no-op |
| 25 | + ) |
| 26 | + ) |
| 27 | +) |
| 28 | + |
| 29 | +if [!MILL_VERSION!]==[] ( |
| 30 | + if exist .mill-version ( |
| 31 | + set /p MILL_VERSION=<.mill-version |
| 32 | + ) else ( |
| 33 | + if exist .config\mill-version ( |
| 34 | + set /p MILL_VERSION=<.config\mill-version |
| 35 | + ) else ( |
| 36 | + rem Determine which config file to use for version extraction |
| 37 | + set "MILL_VERSION_CONFIG_FILE=" |
| 38 | + set "MILL_VERSION_SEARCH_PATTERN=" |
| 39 | + |
| 40 | + if exist build.mill.yaml ( |
| 41 | + set "MILL_VERSION_CONFIG_FILE=build.mill.yaml" |
| 42 | + set "MILL_VERSION_SEARCH_PATTERN=mill-version:" |
| 43 | + ) else ( |
| 44 | + if not "%MILL_BUILD_SCRIPT%"=="" ( |
| 45 | + set "MILL_VERSION_CONFIG_FILE=%MILL_BUILD_SCRIPT%" |
| 46 | + set "MILL_VERSION_SEARCH_PATTERN=//\|.*mill-version" |
| 47 | + ) |
| 48 | + ) |
| 49 | + |
| 50 | + rem Process the config file if found |
| 51 | + if not "!MILL_VERSION_CONFIG_FILE!"=="" ( |
| 52 | + rem Find the line and process it |
| 53 | + for /f "tokens=*" %%a in ('findstr /R /C:"!MILL_VERSION_SEARCH_PATTERN!" "!MILL_VERSION_CONFIG_FILE!"') do ( |
| 54 | + set "line=%%a" |
| 55 | + |
| 56 | + rem --- 1. Replicate sed 's/.*://' --- |
| 57 | + rem This removes everything up to and including the first colon |
| 58 | + set "line=!line:*:=!" |
| 59 | + |
| 60 | + rem --- 2. Replicate sed 's/#.*//' --- |
| 61 | + rem Split on '#' and keep the first part |
| 62 | + for /f "tokens=1 delims=#" %%b in ("!line!") do ( |
| 63 | + set "line=%%b" |
| 64 | + ) |
| 65 | + |
| 66 | + rem --- 3. Replicate sed 's/['"]//g' --- |
| 67 | + rem Remove all quotes |
| 68 | + set "line=!line:'=!" |
| 69 | + set "line=!line:"=!" |
| 70 | + |
| 71 | + rem --- 4. Replicate sed's trim/space removal --- |
| 72 | + rem Remove all space characters from the result. This is more robust. |
| 73 | + set "MILL_VERSION=!line: =!" |
| 74 | + |
| 75 | + rem We found the version, so we can exit the loop |
| 76 | + goto :version_found |
| 77 | + ) |
| 78 | + |
| 79 | + :version_found |
| 80 | + rem no-op |
| 81 | + ) |
| 82 | + ) |
| 83 | + ) |
| 84 | +) |
| 85 | + |
| 86 | +if [!MILL_VERSION!]==[] ( |
| 87 | + set MILL_VERSION=%DEFAULT_MILL_VERSION% |
| 88 | +) |
| 89 | + |
| 90 | +if [!MILL_FINAL_DOWNLOAD_FOLDER!]==[] set MILL_FINAL_DOWNLOAD_FOLDER=%USERPROFILE%\.cache\mill\download |
| 91 | + |
| 92 | +rem without bat file extension, cmd doesn't seem to be able to run it |
| 93 | + |
| 94 | +set "MILL_NATIVE_SUFFIX=-native" |
| 95 | +set "MILL_JVM_SUFFIX=-jvm" |
| 96 | +set "MILL_FULL_VERSION=%MILL_VERSION%" |
| 97 | +set "MILL_DOWNLOAD_EXT=.bat" |
| 98 | +set "ARTIFACT_SUFFIX=" |
| 99 | +REM Check if MILL_VERSION contains MILL_NATIVE_SUFFIX |
| 100 | +echo !MILL_VERSION! | findstr /C:"%MILL_NATIVE_SUFFIX%" >nul |
| 101 | +if !errorlevel! equ 0 ( |
| 102 | + set "MILL_VERSION=%MILL_VERSION:-native=%" |
| 103 | + REM -native images compiled with graal do not support windows-arm |
| 104 | + REM https://github.com/oracle/graal/issues/9215 |
| 105 | + IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( |
| 106 | + set "ARTIFACT_SUFFIX=-native-windows-amd64" |
| 107 | + set "MILL_DOWNLOAD_EXT=.exe" |
| 108 | + ) else ( |
| 109 | + rem no-op |
| 110 | + ) |
| 111 | +) else ( |
| 112 | + echo !MILL_VERSION! | findstr /C:"%MILL_JVM_SUFFIX%" >nul |
| 113 | + if !errorlevel! equ 0 ( |
| 114 | + set "MILL_VERSION=%MILL_VERSION:-jvm=%" |
| 115 | + ) else ( |
| 116 | + set "SKIP_VERSION=false" |
| 117 | + set "MILL_PREFIX=%MILL_VERSION:~0,4%" |
| 118 | + if "!MILL_PREFIX!"=="0.1." set "SKIP_VERSION=true" |
| 119 | + if "!MILL_PREFIX!"=="0.2." set "SKIP_VERSION=true" |
| 120 | + if "!MILL_PREFIX!"=="0.3." set "SKIP_VERSION=true" |
| 121 | + if "!MILL_PREFIX!"=="0.4." set "SKIP_VERSION=true" |
| 122 | + if "!MILL_PREFIX!"=="0.5." set "SKIP_VERSION=true" |
| 123 | + if "!MILL_PREFIX!"=="0.6." set "SKIP_VERSION=true" |
| 124 | + if "!MILL_PREFIX!"=="0.7." set "SKIP_VERSION=true" |
| 125 | + if "!MILL_PREFIX!"=="0.8." set "SKIP_VERSION=true" |
| 126 | + if "!MILL_PREFIX!"=="0.9." set "SKIP_VERSION=true" |
| 127 | + set "MILL_PREFIX=%MILL_VERSION:~0,5%" |
| 128 | + if "!MILL_PREFIX!"=="0.10." set "SKIP_VERSION=true" |
| 129 | + if "!MILL_PREFIX!"=="0.11." set "SKIP_VERSION=true" |
| 130 | + if "!MILL_PREFIX!"=="0.12." set "SKIP_VERSION=true" |
| 131 | + |
| 132 | + if "!SKIP_VERSION!"=="false" ( |
| 133 | + IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( |
| 134 | + set "ARTIFACT_SUFFIX=-native-windows-amd64" |
| 135 | + set "MILL_DOWNLOAD_EXT=.exe" |
| 136 | + ) |
| 137 | + ) else ( |
| 138 | + rem no-op |
| 139 | + ) |
| 140 | + ) |
| 141 | +) |
| 142 | + |
| 143 | +set MILL=%MILL_FINAL_DOWNLOAD_FOLDER%\!MILL_FULL_VERSION!!MILL_DOWNLOAD_EXT! |
| 144 | + |
| 145 | +set MILL_RESOLVE_DOWNLOAD= |
| 146 | + |
| 147 | +if not exist "%MILL%" ( |
| 148 | + set MILL_RESOLVE_DOWNLOAD=true |
| 149 | +) else ( |
| 150 | + if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT ( |
| 151 | + set MILL_RESOLVE_DOWNLOAD=true |
| 152 | + ) else ( |
| 153 | + rem no-op |
| 154 | + ) |
| 155 | +) |
| 156 | + |
| 157 | + |
| 158 | +if [!MILL_RESOLVE_DOWNLOAD!]==[true] ( |
| 159 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,4% |
| 160 | + set MILL_SHORT_VERSION_PREFIX=%MILL_VERSION:~0,2% |
| 161 | + rem Since 0.5.0 |
| 162 | + set MILL_DOWNLOAD_SUFFIX=-assembly |
| 163 | + rem Since 0.11.0 |
| 164 | + set MILL_DOWNLOAD_FROM_MAVEN=1 |
| 165 | + if [!MILL_VERSION_PREFIX!]==[0.0.] ( |
| 166 | + set MILL_DOWNLOAD_SUFFIX= |
| 167 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 168 | + ) |
| 169 | + if [!MILL_VERSION_PREFIX!]==[0.1.] ( |
| 170 | + set MILL_DOWNLOAD_SUFFIX= |
| 171 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 172 | + ) |
| 173 | + if [!MILL_VERSION_PREFIX!]==[0.2.] ( |
| 174 | + set MILL_DOWNLOAD_SUFFIX= |
| 175 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 176 | + ) |
| 177 | + if [!MILL_VERSION_PREFIX!]==[0.3.] ( |
| 178 | + set MILL_DOWNLOAD_SUFFIX= |
| 179 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 180 | + ) |
| 181 | + if [!MILL_VERSION_PREFIX!]==[0.4.] ( |
| 182 | + set MILL_DOWNLOAD_SUFFIX= |
| 183 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 184 | + ) |
| 185 | + if [!MILL_VERSION_PREFIX!]==[0.5.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 186 | + if [!MILL_VERSION_PREFIX!]==[0.6.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 187 | + if [!MILL_VERSION_PREFIX!]==[0.7.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 188 | + if [!MILL_VERSION_PREFIX!]==[0.8.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 189 | + if [!MILL_VERSION_PREFIX!]==[0.9.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 190 | + |
| 191 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5% |
| 192 | + if [!MILL_VERSION_PREFIX!]==[0.10.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 193 | + |
| 194 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,8% |
| 195 | + if [!MILL_VERSION_PREFIX!]==[0.11.0-M] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 196 | + |
| 197 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5% |
| 198 | + set DOWNLOAD_EXT=exe |
| 199 | + if [!MILL_SHORT_VERSION_PREFIX!]==[0.] set DOWNLOAD_EXT=jar |
| 200 | + if [!MILL_VERSION_PREFIX!]==[0.12.] set DOWNLOAD_EXT=exe |
| 201 | + if [!MILL_VERSION!]==[0.12.0] set DOWNLOAD_EXT=jar |
| 202 | + if [!MILL_VERSION!]==[0.12.1] set DOWNLOAD_EXT=jar |
| 203 | + if [!MILL_VERSION!]==[0.12.2] set DOWNLOAD_EXT=jar |
| 204 | + if [!MILL_VERSION!]==[0.12.3] set DOWNLOAD_EXT=jar |
| 205 | + if [!MILL_VERSION!]==[0.12.4] set DOWNLOAD_EXT=jar |
| 206 | + if [!MILL_VERSION!]==[0.12.5] set DOWNLOAD_EXT=jar |
| 207 | + if [!MILL_VERSION!]==[0.12.6] set DOWNLOAD_EXT=jar |
| 208 | + if [!MILL_VERSION!]==[0.12.7] set DOWNLOAD_EXT=jar |
| 209 | + if [!MILL_VERSION!]==[0.12.8] set DOWNLOAD_EXT=jar |
| 210 | + if [!MILL_VERSION!]==[0.12.9] set DOWNLOAD_EXT=jar |
| 211 | + if [!MILL_VERSION!]==[0.12.10] set DOWNLOAD_EXT=jar |
| 212 | + if [!MILL_VERSION!]==[0.12.11] set DOWNLOAD_EXT=jar |
| 213 | + |
| 214 | + set MILL_VERSION_PREFIX= |
| 215 | + set MILL_SHORT_VERSION_PREFIX= |
| 216 | + |
| 217 | + for /F "delims=- tokens=1" %%A in ("!MILL_VERSION!") do set MILL_VERSION_BASE=%%A |
| 218 | + set MILL_VERSION_MILESTONE= |
| 219 | + for /F "delims=- tokens=2" %%A in ("!MILL_VERSION!") do set MILL_VERSION_MILESTONE=%%A |
| 220 | + set MILL_VERSION_MILESTONE_START=!MILL_VERSION_MILESTONE:~0,1! |
| 221 | + if [!MILL_VERSION_MILESTONE_START!]==[M] ( |
| 222 | + set MILL_VERSION_TAG=!MILL_VERSION_BASE!-!MILL_VERSION_MILESTONE! |
| 223 | + ) else ( |
| 224 | + set MILL_VERSION_TAG=!MILL_VERSION_BASE! |
| 225 | + ) |
| 226 | + if [!MILL_DOWNLOAD_FROM_MAVEN!]==[1] ( |
| 227 | + set MILL_DOWNLOAD_URL=https://repo1.maven.org/maven2/com/lihaoyi/mill-dist!ARTIFACT_SUFFIX!/!MILL_VERSION!/mill-dist!ARTIFACT_SUFFIX!-!MILL_VERSION!.!DOWNLOAD_EXT! |
| 228 | + ) else ( |
| 229 | + set MILL_DOWNLOAD_URL=!MILL_GITHUB_RELEASE_CDN!%MILL_REPO_URL%/releases/download/!MILL_VERSION_TAG!/!MILL_VERSION!!MILL_DOWNLOAD_SUFFIX! |
| 230 | + ) |
| 231 | + |
| 232 | + if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT ( |
| 233 | + echo !MILL_DOWNLOAD_URL! |
| 234 | + echo !MILL! |
| 235 | + exit /b 0 |
| 236 | + ) |
| 237 | + |
| 238 | + rem there seems to be no way to generate a unique temporary file path (on native Windows) |
| 239 | + if defined MILL_OUTPUT_DIR ( |
| 240 | + set MILL_TEMP_DOWNLOAD_FILE=%MILL_OUTPUT_DIR%\mill-temp-download |
| 241 | + if not exist "%MILL_OUTPUT_DIR%" mkdir "%MILL_OUTPUT_DIR%" |
| 242 | + ) else ( |
| 243 | + set MILL_TEMP_DOWNLOAD_FILE=out\mill-bootstrap-download |
| 244 | + if not exist "out" mkdir "out" |
| 245 | + ) |
| 246 | + |
| 247 | + echo Downloading mill !MILL_VERSION! from !MILL_DOWNLOAD_URL! ... 1>&2 |
| 248 | + |
| 249 | + curl -f -L "!MILL_DOWNLOAD_URL!" -o "!MILL_TEMP_DOWNLOAD_FILE!" |
| 250 | + |
| 251 | + if not exist "%MILL_FINAL_DOWNLOAD_FOLDER%" mkdir "%MILL_FINAL_DOWNLOAD_FOLDER%" |
| 252 | + move /y "!MILL_TEMP_DOWNLOAD_FILE!" "%MILL%" |
| 253 | + |
| 254 | + set MILL_TEMP_DOWNLOAD_FILE= |
| 255 | + set MILL_DOWNLOAD_SUFFIX= |
| 256 | +) |
| 257 | + |
| 258 | +set MILL_FINAL_DOWNLOAD_FOLDER= |
| 259 | +set MILL_VERSION= |
| 260 | +set MILL_REPO_URL= |
| 261 | + |
| 262 | +rem Need to preserve the first position of those listed options |
| 263 | +set MILL_FIRST_ARG= |
| 264 | +if [%~1%]==[--bsp] ( |
| 265 | + set MILL_FIRST_ARG=%1% |
| 266 | +) else ( |
| 267 | + if [%~1%]==[-i] ( |
| 268 | + set MILL_FIRST_ARG=%1% |
| 269 | + ) else ( |
| 270 | + if [%~1%]==[--interactive] ( |
| 271 | + set MILL_FIRST_ARG=%1% |
| 272 | + ) else ( |
| 273 | + if [%~1%]==[--no-server] ( |
| 274 | + set MILL_FIRST_ARG=%1% |
| 275 | + ) else ( |
| 276 | + if [%~1%]==[--no-daemon] ( |
| 277 | + set MILL_FIRST_ARG=%1% |
| 278 | + ) else ( |
| 279 | + if [%~1%]==[--repl] ( |
| 280 | + set MILL_FIRST_ARG=%1% |
| 281 | + ) else ( |
| 282 | + if [%~1%]==[--help] ( |
| 283 | + set MILL_FIRST_ARG=%1% |
| 284 | + ) |
| 285 | + ) |
| 286 | + ) |
| 287 | + ) |
| 288 | + ) |
| 289 | + ) |
| 290 | +) |
| 291 | +set "MILL_PARAMS=%*%" |
| 292 | + |
| 293 | +if not [!MILL_FIRST_ARG!]==[] ( |
| 294 | + for /f "tokens=1*" %%a in ("%*") do ( |
| 295 | + set "MILL_PARAMS=%%b" |
| 296 | + ) |
| 297 | +) |
| 298 | + |
| 299 | +rem -D mill.main.cli is for compatibility with Mill 0.10.9 - 0.13.0-M2 |
| 300 | +"%MILL%" %MILL_FIRST_ARG% -D "mill.main.cli=%MILL_MAIN_CLI%" %MILL_PARAMS% |
0 commit comments