]> gitweb.factorcode.org Git - factor.git/blobdiff - build.cmd
moving build-support/factor.(sh|cmd) to ./build.(sh|cmd).
[factor.git] / build.cmd
diff --git a/build.cmd b/build.cmd
new file mode 100644 (file)
index 0000000..b0430bb
--- /dev/null
+++ b/build.cmd
@@ -0,0 +1,96 @@
+@echo off
+setlocal
+
+if "%1"=="/?" (
+    goto usage
+) else if "%1"=="" (
+    set _bootimage_version=latest
+) else if "%1"=="latest" (
+    set _bootimage_version=latest
+) else if "%1"=="clean" (
+    set _bootimage_version=clean
+) else goto usage
+
+if not exist Nmakefile goto wrongdir
+
+call cl 2>&1 | find "x86" >nul
+if not errorlevel 1 (
+    echo x86-32 cl.exe detected.
+    set _target=x86-32
+    set _bootimage=boot.windows-x86.32.image
+) else (
+    call cl 2>&1 | find "x64" >nul
+    if not errorlevel 1 (
+        echo x86-64 cl.exe detected.
+        set _target=x86-64
+        set _bootimage=boot.windows-x86.64.image
+    ) 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
+
+echo Building vm...
+nmake /nologo /f Nmakefile clean
+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
+
+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 Build complete.
+goto :EOF
+
+:fail
+echo Build failed.
+goto :EOF
+
+:wrongdir
+echo build.cmd must be run from the root of the Factor source tree.
+goto :EOF
+
+:nocl
+echo Unable to detect cl.exe target platform.
+echo Make sure you're running within the Visual Studio or Windows SDK environment.
+goto :EOF
+
+:usage
+echo Usage: build.cmd [latest/clean]
+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.
+goto :EOF