]> gitweb.factorcode.org Git - factor.git/blobdiff - build.cmd
scryfall: better moxfield words
[factor.git] / build.cmd
index b0430bbfb7df6014da728ae3e1a9765bb71bbfff..1fd1ab54f7eb33decfafb811d0012228a9db1a40 100644 (file)
--- a/build.cmd
+++ b/build.cmd
@@ -1,14 +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
-) 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"=="update" (
+    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
@@ -27,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
@@ -84,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