X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=blobdiff_plain;f=build.cmd;h=49d56dc1c62522d14f0bafa68d70a1407eb0f91f;hp=918a12e3c59a80b17bbbccd71a7e403f8fc765cc;hb=HEAD;hpb=82960e81f3c42de01b605490d8a2c19ac0a10dda diff --git a/build.cmd b/build.cmd index 918a12e3c5..1fd1ab54f7 100644 --- a/build.cmd +++ b/build.cmd @@ -1,16 +1,63 @@ @echo off setlocal +goto start + +:download +rem branch url filename +echo Fetching %1 boot image from %2 +cscript /nologo misc\http-get.vbs %2 %3 +exit /b + +:start +: Check which branch we are on, or just assume master if we are not in a git repository +for /f %%z in ('git rev-parse --abbrev-ref HEAD') do set GIT_BRANCH=%%z +if not defined GIT_BRANCH ( + set GIT_BRANCH=master +) + if "%1"=="/?" ( goto usage ) else if "%1"=="" ( - set _bootimage_version=latest + set _git_pull=1 + set _compile_vm=1 + set _bootimage_type=download + set _bootstrap_factor=1 ) else if "%1"=="latest" ( - set _bootimage_version=latest + set _git_pull=1 + set _compile_vm=1 + set _bootimage_type=download + set _bootstrap_factor=1 ) else if "%1"=="update" ( - set _bootimage_version=latest -) else if "%1"=="clean" ( - set _bootimage_version=clean + set _git_pull=1 + set _compile_vm=1 + set _bootimage_type=download + set _bootstrap_factor=1 +) else if "%1"=="compile" ( + set _git_pull=0 + set _compile_vm=1 + set _bootimage_type=current + set _bootstrap_factor=0 +) else if "%1"=="self-bootstrap" ( + set _git_pull=1 + set _compile_vm=0 + set _bootimage_type=make + set _bootstrap_factor=1 +) else if "%1"=="bootstrap" ( + set _git_pull=0 + set _compile_vm=0 + set _bootimage_type=current + set _bootstrap_factor=1 +) else if "%1"=="net-bootstrap" ( + set _git_pull=0 + set _compile_vm=1 + set _bootimage_type=download + set _bootstrap_factor=1 +) else if "%1"=="update-boot-image" ( + set _git_pull=0 + set _compile_vm=0 + set _bootimage_type=download + set _bootstrap_factor=0 ) else goto usage if not exist Nmakefile goto wrongdir @@ -29,45 +76,47 @@ if not errorlevel 1 ( ) else goto nocl ) -: Fun syntax -for /f %%x in ('git describe --all') do set GIT_DESCRIBE=%%x -for /f %%y in ('git rev-parse HEAD') do set GIT_ID=%%y - -set git_label=%GIT_DESCRIBE%-%GIT_ID% -set version=0.98 - -if %_bootimage_version%==clean ( - set _git_branch=clean-windows-%_target% - set _bootimage_path=clean/windows-%_target% -) else ( - set _git_branch=master - set _bootimage_path=latest -) - echo Deleting staging images from temp/... del temp\staging.*.image -echo Updating working copy from %_git_branch%... -call git pull git://factorcode.org/git/factor.git %_git_branch% -if errorlevel 1 goto fail +if "%_git_pull%"=="1" ( + echo Updating working copy from %GIT_BRANCH%... + call git pull https://github.com/factor/factor %GIT_BRANCH% + if errorlevel 1 goto fail +) + +if "%_compile_vm%"=="1" ( + echo Building vm... + nmake /nologo /f Nmakefile clean + if errorlevel 1 goto fail -echo Building vm... -nmake /nologo /f Nmakefile clean -if errorlevel 1 goto fail -nmake /nologo /f Nmakefile %_target% -if errorlevel 1 goto fail + nmake /nologo /f Nmakefile %_target% + if errorlevel 1 goto fail +) -echo Fetching %_bootimage_version% boot image... -cscript /nologo misc\http-get.vbs http://downloads.factorcode.org/images/%_bootimage_path%/%_bootimage% %_bootimage% -if errorlevel 1 goto fail +set _bootimage_url=https://downloads.factorcode.org/images/%GIT_BRANCH%/%_bootimage% +if "%_bootimage_type%"=="download" ( + call :download %GIT_BRANCH% %_bootimage_url% %_bootimage% + if errorlevel 1 ( + echo boot image for branch %GIT_BRANCH% is not on server, trying master instead + call :download master https://downloads.factorcode.org/images/master/%_bootimage% %_bootimage% + ) + if errorlevel 1 goto fail +) else if "%_bootimage_type%"=="make" ( + echo Making boot image... + .\factor.com -run=bootstrap.image %_bootimage% + if errorlevel 1 goto fail +) -echo Bootstrapping... -.\factor.com -i=%_bootimage% -if errorlevel 1 goto fail +if "%_bootstrap_factor%"=="1" ( + echo Bootstrapping... + .\factor.com -i=%_bootimage% + if errorlevel 1 goto fail -echo Copying fresh factor.image to factor.image.fresh. -copy factor.image factor.image.fresh -if errorlevel 1 goto fail + echo Copying fresh factor.image to factor.image.fresh. + copy factor.image factor.image.fresh + if errorlevel 1 goto fail +) echo Build complete. goto :EOF @@ -86,13 +135,16 @@ echo Make sure you're running within the Visual Studio or Windows SDK environmen goto :EOF :usage -echo Usage: build.cmd [latest/clean] +echo Usage: build.cmd [command] echo Updates the working copy, cleans and builds the vm using nmake, echo fetches a boot image, and bootstraps factor. -echo If latest is specified, then the working copy is updated to the -echo upstream "master" branch and the boot image corresponding to the -echo most recent factor build is downloaded. This is the default. -echo If clean is specified, then the working copy is updated to the -echo upstream "clean-windows-*" branch corresponding to the current -echo platform and the corresponding boot image is downloaded. +echo: +echo The branch that bootstraps is the one that is checked out locally. +echo: +echo compile - recompile vm +echo update - git pull, recompile vm, download a boot image, bootstrap +echo self-bootstrap - git pull, make a boot image, bootstrap +echo bootstrap - existing boot image, bootstrap +echo net-bootstrap - recompile vm, download a boot image, bootstrap +echo update-boot-image - get the boot image for the current branch goto :EOF