| ECHO OFF | |
| REM Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
| REM Use of this source code is governed by a BSD-style license that can be | |
| REM found in the LICENSE file. | |
| REM Copies an installer and symbols from a build directory on a network share | |
| REM into the directory \[out|build]\[Debug|Release] on the current drive. | |
| REM | |
| REM Usage: | |
| REM \\build.share\<path_to_checkout>\src\tools\win\copy-installer.bat | |
| REM | |
| REM By default, the script will copy the Debug build in the tree, falling back | |
| REM to the Release build if one is not found. Similarly, the ninja output | |
| REM directory is preferred over the devenv output directory. The x86 build is | |
| REM preferred over the x64 build. Specify any of "out|build", "Debug|Release" | |
| REM (case matters), or "x64" on the command line in any order to influence | |
| REM selection. The defaults for location and build type can also be overridden | |
| REM in a given build tree by creating a "copy-installer.cfg" file alongside the | |
| REM .gclient file that sets any of OUTPUT, BUILDTYPE, or ARCH variables. | |
| REM | |
| REM Install Robocopy for superior performance on Windows XP if desired (it is | |
| REM present by default on Vista+). | |
| SETLOCAL | |
| REM Get the path to the build tree's src directory. | |
| CALL :_canonicalize "%~dp0..\.." | |
| SET FROM=%RET% | |
| REM Read local configuration (set OUTPUT and BUILDTYPE there). | |
| IF EXIST "%FROM%\..\copy-installer.cfg" CALL "%FROM%\..\copy-installer.cfg" | |
| REM Read any of OUTPUT, BUILDTYPE, or ARCH from command line. | |
| FOR %%a IN (%1 %2) do ( | |
| IF "%%a"=="out" SET OUTPUT=out | |
| IF "%%a"=="build" SET OUTPUT=build | |
| IF "%%a"=="Debug" SET BUILDTYPE=Debug | |
| IF "%%a"=="Release" SET BUILDTYPE=Release | |
| IF "%%s"=="x64" SET ARCH=_x64 | |
| ) | |
| CALL :_find_build | |
| IF "%OUTPUT%%BUILDTYPE%%ARCH%"=="" ( | |
| ECHO No build found to copy. | |
| EXIT 1 | |
| ) | |
| SET FROM=%FROM%\%OUTPUT%\%BUILDTYPE%%ARCH% | |
| SET TO=\%OUTPUT%\%BUILDTYPE%%ARCH% | |
| SET TOCOPY=mini_installer.exe *.dll.pdb chrome.exe.pdb mini_installer.exe.pdb^ | |
| setup.exe.pdb delegate_execute.exe.pdb | |
| CALL :_copyfiles | |
| REM incremental_chrome_dll=1 puts chrome_dll.pdb into the "initial" dir. | |
| IF EXIST "%FROM%\initial" ( | |
| SET FROM=%FROM%\initial | |
| SET TOCOPY=*.pdb | |
| CALL :_copyfiles | |
| ) | |
| ECHO Ready to run/debug %TO%\mini_installer.exe. | |
| GOTO :EOF | |
| REM All labels henceforth are subroutines intended to be invoked by CALL. | |
| REM Canonicalize the first argument, returning it in RET. | |
| :_canonicalize | |
| SET RET=%~f1 | |
| GOTO :EOF | |
| REM Search for a mini_installer.exe in the candidate build outputs. | |
| :_find_build | |
| IF "%OUTPUT%"=="" ( | |
| SET OUTPUTS=out build | |
| ) ELSE ( | |
| SET OUTPUTS=%OUTPUT% | |
| SET OUTPUT= | |
| ) | |
| IF "%BUILDTYPE%"=="" ( | |
| SET BUILDTYPES=Debug Release | |
| ) ELSE ( | |
| SET BUILDTYPES=%BUILDTYPE% | |
| SET BUILDTYPE= | |
| ) | |
| FOR %%o IN (%OUTPUTS%) DO ( | |
| FOR %%f IN (%BUILDTYPES%) DO ( | |
| IF EXIST "%FROM%\%%o\%%f\mini_installer.exe" ( | |
| SET OUTPUT=%%o | |
| SET BUILDTYPE=%%f | |
| GOTO :EOF | |
| ) | |
| IF EXIST "%FROM%\%%o\%%f_x64\mini_installer.exe" ( | |
| SET OUTPUT=%%o | |
| SET BUILDTYPE=%%f | |
| SET ARCH=_x64 | |
| GOTO :EOF | |
| ) | |
| ) | |
| ) | |
| GOTO :EOF | |
| REM Branch to handle copying via robocopy (fast) or xcopy (slow). | |
| :_copyfiles | |
| robocopy /? 1> nul 2> nul | |
| IF NOT "%ERRORLEVEL%"=="9009" ( | |
| robocopy "%FROM%" "%TO%" %TOCOPY% /MT /XX | |
| ) ELSE ( | |
| IF NOT EXIST "%TO%" mkdir "%TO%" | |
| call :_xcopy_hack %TOCOPY% | |
| ) | |
| GOTO :EOF | |
| REM We can't use a for..in..do loop since we have wildcards, so we make a call | |
| REM to this with the files to copy. | |
| :_xcopy_hack | |
| SHIFT | |
| IF "%0"=="" GOTO :EOF | |
| xcopy "%FROM%\%0" "%TO%" /d /y | |
| GOTO _xcopy_hack |