|
| 1 | +@echo off |
| 2 | + |
| 3 | +rem This is a wrapper script, that automatically selects or downloads Mill from Maven Central or GitHub release pages. |
| 4 | +rem |
| 5 | +rem This script determines the Mill version to use by trying these sources |
| 6 | +rem - env-variable `MILL_VERSION` |
| 7 | +rem - local file `.mill-version` |
| 8 | +rem - local file `.config/mill-version` |
| 9 | +rem - `mill-version` from YAML fronmatter of current buildfile |
| 10 | +rem - if accessible, find the latest stable version available on Maven Central (https://repo1.maven.org/maven2) |
| 11 | +rem - env-variable `DEFAULT_MILL_VERSION` |
| 12 | +rem |
| 13 | +rem If a version has the suffix '-native' a native binary will be used. |
| 14 | +rem If a version has the suffix '-jvm' an executable jar file will be used, requiring an already installed Java runtime. |
| 15 | +rem If no such suffix is found, the script will pick a default based on version and platform. |
| 16 | +rem |
| 17 | +rem Once a version was determined, it tries to use either |
| 18 | +rem - a system-installed mill, if found and it's version matches |
| 19 | +rem - an already downloaded version under %USERPROFILE%\.mill\download |
| 20 | +rem |
| 21 | +rem If no working mill version was found on the system, |
| 22 | +rem this script downloads a binary file from Maven Central or Github Pages (this is version dependent) |
| 23 | +rem into a cache location (%USERPROFILE%\.mill\download). |
| 24 | +rem |
| 25 | +rem Mill Project URL: https://github.com/com-lihaoyi/mill |
| 26 | +rem Script Version: 1.0.0-M1-21-7b6fae-DIRTY892b63e8 |
| 27 | +rem |
| 28 | +rem If you want to improve this script, please also contribute your changes back! |
| 29 | +rem This script was generated from: dist/scripts/src/mill.bat |
| 30 | +rem |
| 31 | +rem Licensed under the Apache License, Version 2.0 |
| 32 | + |
| 33 | +rem setlocal seems to be unavailable on Windows 95/98/ME |
| 34 | +rem but I don't think we need to support them in 2019 |
| 35 | +setlocal enabledelayedexpansion |
| 36 | + |
| 37 | +if [!DEFAULT_MILL_VERSION!]==[] ( set "DEFAULT_MILL_VERSION=0.12.10" ) |
| 38 | + |
| 39 | +if [!MILL_GITHUB_RELEASE_CDN!]==[] ( set "MILL_GITHUB_RELEASE_CDN=" ) |
| 40 | + |
| 41 | +if [!MILL_MAIN_CLI!]==[] ( set "MILL_MAIN_CLI=%~f0" ) |
| 42 | + |
| 43 | +set "MILL_REPO_URL=https://github.com/com-lihaoyi/mill" |
| 44 | + |
| 45 | +SET MILL_BUILD_SCRIPT= |
| 46 | + |
| 47 | +if exist "build.mill" ( |
| 48 | + set MILL_BUILD_SCRIPT=build.mill |
| 49 | +) else ( |
| 50 | + if exist "build.mill.scala" ( |
| 51 | + set MILL_BUILD_SCRIPT=build.mill.scala |
| 52 | + ) else ( |
| 53 | + if exist "build.sc" ( |
| 54 | + set MILL_BUILD_SCRIPT=build.sc |
| 55 | + ) else ( |
| 56 | + rem no-op |
| 57 | + ) |
| 58 | + ) |
| 59 | +) |
| 60 | + |
| 61 | +if [!MILL_VERSION!]==[] ( |
| 62 | + if exist .mill-version ( |
| 63 | + set /p MILL_VERSION=<.mill-version |
| 64 | + ) else ( |
| 65 | + if exist .config\mill-version ( |
| 66 | + set /p MILL_VERSION=<.config\mill-version |
| 67 | + ) else ( |
| 68 | + if not "%MILL_BUILD_SCRIPT%"=="" ( |
| 69 | + for /f "tokens=1-2*" %%a in ('findstr /C:"//| mill-version:" %MILL_BUILD_SCRIPT%') do ( |
| 70 | + set "MILL_VERSION=%%c" |
| 71 | + ) |
| 72 | + ) else ( |
| 73 | + rem no-op |
| 74 | + ) |
| 75 | + ) |
| 76 | + ) |
| 77 | +) |
| 78 | + |
| 79 | +if [!MILL_VERSION!]==[] set MILL_VERSION=%DEFAULT_MILL_VERSION% |
| 80 | + |
| 81 | +if [!MILL_DOWNLOAD_PATH!]==[] set MILL_DOWNLOAD_PATH=%USERPROFILE%\.mill\download |
| 82 | + |
| 83 | +rem without bat file extension, cmd doesn't seem to be able to run it |
| 84 | + |
| 85 | +set "MILL_NATIVE_SUFFIX=-native" |
| 86 | +set "MILL_JVM_SUFFIX=-jvm" |
| 87 | +set "FULL_MILL_VERSION=%MILL_VERSION%" |
| 88 | +set "MILL_EXT=.bat" |
| 89 | +set "ARTIFACT_SUFFIX=" |
| 90 | +REM Check if MILL_VERSION contains MILL_NATIVE_SUFFIX |
| 91 | +echo !MILL_VERSION! | findstr /C:"%MILL_NATIVE_SUFFIX%" >nul |
| 92 | +if !errorlevel! equ 0 ( |
| 93 | + set "MILL_VERSION=%MILL_VERSION:-native=%" |
| 94 | + REM -native images compiled with graal do not support windows-arm |
| 95 | + REM https://github.com/oracle/graal/issues/9215 |
| 96 | + IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( |
| 97 | + set "ARTIFACT_SUFFIX=-native-windows-amd64" |
| 98 | + set "MILL_EXT=.exe" |
| 99 | + ) else ( |
| 100 | + rem no-op |
| 101 | + ) |
| 102 | +) else ( |
| 103 | + echo !MILL_VERSION! | findstr /C:"%MILL_JVM_SUFFIX%" >nul |
| 104 | + if !errorlevel! equ 0 ( |
| 105 | + set "MILL_VERSION=%MILL_VERSION:-jvm=%" |
| 106 | + ) else ( |
| 107 | + set "SKIP_VERSION=false" |
| 108 | + set "MILL_PREFIX=%MILL_VERSION:~0,4%" |
| 109 | + if "!MILL_PREFIX!"=="0.1." set "SKIP_VERSION=true" |
| 110 | + if "!MILL_PREFIX!"=="0.2." set "SKIP_VERSION=true" |
| 111 | + if "!MILL_PREFIX!"=="0.3." set "SKIP_VERSION=true" |
| 112 | + if "!MILL_PREFIX!"=="0.4." set "SKIP_VERSION=true" |
| 113 | + if "!MILL_PREFIX!"=="0.5." set "SKIP_VERSION=true" |
| 114 | + if "!MILL_PREFIX!"=="0.6." set "SKIP_VERSION=true" |
| 115 | + if "!MILL_PREFIX!"=="0.7." set "SKIP_VERSION=true" |
| 116 | + if "!MILL_PREFIX!"=="0.8." set "SKIP_VERSION=true" |
| 117 | + if "!MILL_PREFIX!"=="0.9." set "SKIP_VERSION=true" |
| 118 | + set "MILL_PREFIX=%MILL_VERSION:~0,5%" |
| 119 | + if "!MILL_PREFIX!"=="0.10." set "SKIP_VERSION=true" |
| 120 | + if "!MILL_PREFIX!"=="0.11." set "SKIP_VERSION=true" |
| 121 | + if "!MILL_PREFIX!"=="0.12." set "SKIP_VERSION=true" |
| 122 | + |
| 123 | + if "!SKIP_VERSION!"=="false" ( |
| 124 | + IF /I NOT "%PROCESSOR_ARCHITECTURE%"=="ARM64" ( |
| 125 | + set "ARTIFACT_SUFFIX=-native-windows-amd64" |
| 126 | + set "MILL_EXT=.exe" |
| 127 | + ) |
| 128 | + ) else ( |
| 129 | + rem no-op |
| 130 | + ) |
| 131 | + ) |
| 132 | +) |
| 133 | + |
| 134 | +set MILL=%MILL_DOWNLOAD_PATH%\!FULL_MILL_VERSION!!MILL_EXT! |
| 135 | + |
| 136 | +set MILL_RESOLVE_DOWNLOAD= |
| 137 | + |
| 138 | +if not exist "%MILL%" ( |
| 139 | + set MILL_RESOLVE_DOWNLOAD=true |
| 140 | +) else ( |
| 141 | + if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT ( |
| 142 | + set MILL_RESOLVE_DOWNLOAD=true |
| 143 | + ) else ( |
| 144 | + rem no-op |
| 145 | + ) |
| 146 | +) |
| 147 | + |
| 148 | + |
| 149 | +if [!MILL_RESOLVE_DOWNLOAD!]==[true] ( |
| 150 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,4% |
| 151 | + set MILL_SHORT_VERSION_PREFIX=%MILL_VERSION:~0,2% |
| 152 | + rem Since 0.5.0 |
| 153 | + set MILL_DOWNLOAD_SUFFIX=-assembly |
| 154 | + rem Since 0.11.0 |
| 155 | + set MILL_DOWNLOAD_FROM_MAVEN=1 |
| 156 | + if [!MILL_VERSION_PREFIX!]==[0.0.] ( |
| 157 | + set MILL_DOWNLOAD_SUFFIX= |
| 158 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 159 | + ) |
| 160 | + if [!MILL_VERSION_PREFIX!]==[0.1.] ( |
| 161 | + set MILL_DOWNLOAD_SUFFIX= |
| 162 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 163 | + ) |
| 164 | + if [!MILL_VERSION_PREFIX!]==[0.2.] ( |
| 165 | + set MILL_DOWNLOAD_SUFFIX= |
| 166 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 167 | + ) |
| 168 | + if [!MILL_VERSION_PREFIX!]==[0.3.] ( |
| 169 | + set MILL_DOWNLOAD_SUFFIX= |
| 170 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 171 | + ) |
| 172 | + if [!MILL_VERSION_PREFIX!]==[0.4.] ( |
| 173 | + set MILL_DOWNLOAD_SUFFIX= |
| 174 | + set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 175 | + ) |
| 176 | + if [!MILL_VERSION_PREFIX!]==[0.5.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 177 | + if [!MILL_VERSION_PREFIX!]==[0.6.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 178 | + if [!MILL_VERSION_PREFIX!]==[0.7.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 179 | + if [!MILL_VERSION_PREFIX!]==[0.8.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 180 | + if [!MILL_VERSION_PREFIX!]==[0.9.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 181 | + |
| 182 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5% |
| 183 | + if [!MILL_VERSION_PREFIX!]==[0.10.] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 184 | + |
| 185 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,8% |
| 186 | + if [!MILL_VERSION_PREFIX!]==[0.11.0-M] set MILL_DOWNLOAD_FROM_MAVEN=0 |
| 187 | + |
| 188 | + set MILL_VERSION_PREFIX=%MILL_VERSION:~0,5% |
| 189 | + set DOWNLOAD_EXT=exe |
| 190 | + if [!MILL_SHORT_VERSION_PREFIX!]==[0.] set DOWNLOAD_EXT=jar |
| 191 | + if [!MILL_VERSION_PREFIX!]==[0.12.] set DOWNLOAD_EXT=exe |
| 192 | + if [!MILL_VERSION!]==[0.12.0] set DOWNLOAD_EXT=jar |
| 193 | + if [!MILL_VERSION!]==[0.12.1] set DOWNLOAD_EXT=jar |
| 194 | + if [!MILL_VERSION!]==[0.12.2] set DOWNLOAD_EXT=jar |
| 195 | + if [!MILL_VERSION!]==[0.12.3] set DOWNLOAD_EXT=jar |
| 196 | + if [!MILL_VERSION!]==[0.12.4] set DOWNLOAD_EXT=jar |
| 197 | + if [!MILL_VERSION!]==[0.12.5] set DOWNLOAD_EXT=jar |
| 198 | + if [!MILL_VERSION!]==[0.12.6] set DOWNLOAD_EXT=jar |
| 199 | + if [!MILL_VERSION!]==[0.12.7] set DOWNLOAD_EXT=jar |
| 200 | + if [!MILL_VERSION!]==[0.12.8] set DOWNLOAD_EXT=jar |
| 201 | + if [!MILL_VERSION!]==[0.12.9] set DOWNLOAD_EXT=jar |
| 202 | + if [!MILL_VERSION!]==[0.12.10] set DOWNLOAD_EXT=jar |
| 203 | + if [!MILL_VERSION!]==[0.12.11] set DOWNLOAD_EXT=jar |
| 204 | + |
| 205 | + set MILL_VERSION_PREFIX= |
| 206 | + set MILL_SHORT_VERSION_PREFIX= |
| 207 | + |
| 208 | + for /F "delims=- tokens=1" %%A in ("!MILL_VERSION!") do set MILL_VERSION_BASE=%%A |
| 209 | + set MILL_VERSION_MILESTONE= |
| 210 | + for /F "delims=- tokens=2" %%A in ("!MILL_VERSION!") do set MILL_VERSION_MILESTONE=%%A |
| 211 | + set MILL_VERSION_MILESTONE_START=!MILL_VERSION_MILESTONE:~0,1! |
| 212 | + if [!MILL_VERSION_MILESTONE_START!]==[M] ( |
| 213 | + set MILL_VERSION_TAG=!MILL_VERSION_BASE!-!MILL_VERSION_MILESTONE! |
| 214 | + ) else ( |
| 215 | + set MILL_VERSION_TAG=!MILL_VERSION_BASE! |
| 216 | + ) |
| 217 | + if [!MILL_DOWNLOAD_FROM_MAVEN!]==[1] ( |
| 218 | + 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! |
| 219 | + ) else ( |
| 220 | + set MILL_DOWNLOAD_URL=!MILL_GITHUB_RELEASE_CDN!%MILL_REPO_URL%/releases/download/!MILL_VERSION_TAG!/!MILL_VERSION!!MILL_DOWNLOAD_SUFFIX! |
| 221 | + ) |
| 222 | + |
| 223 | + if defined MILL_TEST_DRY_RUN_LAUNCHER_SCRIPT ( |
| 224 | + echo !MILL_DOWNLOAD_URL! |
| 225 | + echo !MILL! |
| 226 | + exit /b 0 |
| 227 | + ) |
| 228 | + |
| 229 | + rem there seems to be no way to generate a unique temporary file path (on native Windows) |
| 230 | + set MILL_DOWNLOAD_FILE=%MILL%.tmp |
| 231 | + |
| 232 | + echo Downloading mill !MILL_VERSION! from !MILL_DOWNLOAD_URL! ... 1>&2 |
| 233 | + |
| 234 | + if not exist "%MILL_DOWNLOAD_PATH%" mkdir "%MILL_DOWNLOAD_PATH%" |
| 235 | + rem curl is bundled with recent Windows 10 |
| 236 | + rem but I don't think we can expect all the users to have it in 2019 |
| 237 | + where /Q curl |
| 238 | + if !ERRORLEVEL! EQU 0 ( |
| 239 | + curl -f -L "!MILL_DOWNLOAD_URL!" -o "!MILL_DOWNLOAD_FILE!" |
| 240 | + ) else ( |
| 241 | + rem bitsadmin seems to be available on Windows 7 |
| 242 | + rem without /dynamic, github returns 403 |
| 243 | + rem bitsadmin is sometimes needlessly slow but it looks better with /priority foreground |
| 244 | + bitsadmin /transfer millDownloadJob /dynamic /priority foreground "!MILL_DOWNLOAD_URL!" "!MILL_DOWNLOAD_FILE!" |
| 245 | + ) |
| 246 | + if not exist "!MILL_DOWNLOAD_FILE!" ( |
| 247 | + echo Could not download mill !MILL_VERSION! 1>&2 |
| 248 | + exit /b 1 |
| 249 | + ) |
| 250 | + |
| 251 | + move /y "!MILL_DOWNLOAD_FILE!" "%MILL%" |
| 252 | + |
| 253 | + set MILL_DOWNLOAD_FILE= |
| 254 | + set MILL_DOWNLOAD_SUFFIX= |
| 255 | +) |
| 256 | + |
| 257 | +set MILL_DOWNLOAD_PATH= |
| 258 | +set MILL_VERSION= |
| 259 | +set MILL_REPO_URL= |
| 260 | + |
| 261 | +rem Need to preserve the first position of those listed options |
| 262 | +set MILL_FIRST_ARG= |
| 263 | +if [%~1%]==[--bsp] ( |
| 264 | + set MILL_FIRST_ARG=%1% |
| 265 | +) else ( |
| 266 | + if [%~1%]==[-i] ( |
| 267 | + set MILL_FIRST_ARG=%1% |
| 268 | + ) else ( |
| 269 | + if [%~1%]==[--interactive] ( |
| 270 | + set MILL_FIRST_ARG=%1% |
| 271 | + ) else ( |
| 272 | + if [%~1%]==[--no-server] ( |
| 273 | + set MILL_FIRST_ARG=%1% |
| 274 | + ) else ( |
| 275 | + if [%~1%]==[--no-daemon] ( |
| 276 | + set MILL_FIRST_ARG=%1% |
| 277 | + ) else ( |
| 278 | + if [%~1%]==[--repl] ( |
| 279 | + set MILL_FIRST_ARG=%1% |
| 280 | + ) else ( |
| 281 | + if [%~1%]==[--help] ( |
| 282 | + set MILL_FIRST_ARG=%1% |
| 283 | + ) |
| 284 | + ) |
| 285 | + ) |
| 286 | + ) |
| 287 | + ) |
| 288 | + ) |
| 289 | +) |
| 290 | +set "MILL_PARAMS=%*%" |
| 291 | + |
| 292 | +if not [!MILL_FIRST_ARG!]==[] ( |
| 293 | + for /f "tokens=1*" %%a in ("%*") do ( |
| 294 | + set "MILL_PARAMS=%%b" |
| 295 | + ) |
| 296 | +) |
| 297 | + |
| 298 | +rem -D mill.main.cli is for compatibility with Mill 0.10.9 - 0.13.0-M2 |
| 299 | +"%MILL%" %MILL_FIRST_ARG% -D "mill.main.cli=%MILL_MAIN_CLI%" %MILL_PARAMS% |
0 commit comments