| 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 "%%a"=="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 |
| |
| 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 |