15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ECHO OFF
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Copyright (c) 2012 The Chromium Authors. All rights reserved.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Use of this source code is governed by a BSD-style license that can be
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM found in the LICENSE file.
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Copies an installer and symbols from a build directory on a network share
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM into the directory \[out|build]\[Debug|Release] on the current drive.
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Usage:
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM   \\build.share\<path_to_checkout>\src\tools\win\copy-installer.bat
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM By default, the script will copy the Debug build in the tree, falling back
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM to the Release build if one is not found.  Similarly, the ninja output
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM directory is preferred over the devenv output directory.  The x86 build is
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM preferred over the x64 build.  Specify any of "out|build", "Debug|Release"
17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM (case matters), or "x64" on the command line in any order to influence
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM selection.  The defaults for location and build type can also be overridden
19a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM in a given build tree by creating a "copy-installer.cfg" file alongside the
20a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM .gclient file that sets any of OUTPUT, BUILDTYPE, or ARCH variables.
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Install Robocopy for superior performance on Windows XP if desired (it is
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM present by default on Vista+).
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SETLOCAL
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Get the path to the build tree's src directory.
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CALL :_canonicalize "%~dp0..\.."
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET FROM=%RET%
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Read local configuration (set OUTPUT and BUILDTYPE there).
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF EXIST "%FROM%\..\copy-installer.cfg" CALL "%FROM%\..\copy-installer.cfg"
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)REM Read any of OUTPUT, BUILDTYPE, or ARCH from command line.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FOR %%a IN (%1 %2) do (
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%%a"=="out" SET OUTPUT=out
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%%a"=="build" SET OUTPUT=build
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%%a"=="Debug" SET BUILDTYPE=Debug
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%%a"=="Release" SET BUILDTYPE=Release
40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IF "%%s"=="x64" SET ARCH=_x64
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CALL :_find_build
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IF "%OUTPUT%%BUILDTYPE%%ARCH%"=="" (
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ECHO No build found to copy.
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)EXIT 1
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
49a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET FROM=%FROM%\%OUTPUT%\%BUILDTYPE%%ARCH%
50a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET TO=\%OUTPUT%\%BUILDTYPE%%ARCH%
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Figure out what files to copy based on the component type (shared/static).
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF EXIST "%FROM%\base.dll" (
54a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET TOCOPY=setup.exe chrome.7z *.dll
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET ARCHIVETODELETE=chrome.packed.7z
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET INSTALLER=setup.exe
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) ELSE (
5858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SET TOCOPY=mini_installer.exe mini_installer.exe.pdb
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET INSTALLER=mini_installer.exe
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)SET TOCOPY=%TOCOPY% *.dll.pdb chrome.exe.pdb setup.exe.pdb^
6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)           delegate_execute.exe.pdb
6458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CALL :_copyfiles
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM incremental_chrome_dll=1 puts chrome_dll.pdb into the "initial" dir.
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF EXIST "%FROM%\initial" (
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET FROM=%FROM%\initial
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET TOCOPY=*.pdb
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)CALL :_copyfiles
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Keeping the old chrome.packed.7z around could cause the new setup.exe to
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM use it instead of the new chrome.7z, delete it to save developers from
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM debugging nightmares!
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF NOT "%ARCHIVETODELETE%"=="" (
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF EXIST "%TO%\%ARCHIVETODELETE%" (
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ECHO Deleting old/deprecated %ARCHIVETODELETE%
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)del /Q "%TO%\%ARCHIVETODELETE%"
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ECHO Ready to run/debug %TO%\%INSTALLER%.
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO :EOF
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM All labels henceforth are subroutines intended to be invoked by CALL.
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Canonicalize the first argument, returning it in RET.
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles):_canonicalize
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET RET=%~f1
925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO :EOF
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Search for a mini_installer.exe in the candidate build outputs.
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles):_find_build
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%OUTPUT%"=="" (
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET OUTPUTS=out build
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) ELSE (
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET OUTPUTS=%OUTPUT%
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET OUTPUT=
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%BUILDTYPE%"=="" (
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET BUILDTYPES=Debug Release
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) ELSE (
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET BUILDTYPES=%BUILDTYPE%
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET BUILDTYPE=
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FOR %%o IN (%OUTPUTS%) DO (
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)FOR %%f IN (%BUILDTYPES%) DO (
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF EXIST "%FROM%\%%o\%%f\mini_installer.exe" (
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET OUTPUT=%%o
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SET BUILDTYPE=%%f
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO :EOF
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
117a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)IF EXIST "%FROM%\%%o\%%f_x64\mini_installer.exe" (
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET OUTPUT=%%o
119a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET BUILDTYPE=%%f
120a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)SET ARCH=_x64
121a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)GOTO :EOF
122a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles))
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO :EOF
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM Branch to handle copying via robocopy (fast) or xcopy (slow).
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles):_copyfiles
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)robocopy /? 1> nul 2> nul
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF NOT "%ERRORLEVEL%"=="9009" (
1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)robocopy "%FROM%" "%TO%" %TOCOPY% /MT /XX
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)) ELSE (
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF NOT EXIST "%TO%" mkdir "%TO%"
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)call :_xcopy_hack %TOCOPY%
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles))
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO :EOF
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM We can't use a for..in..do loop since we have wildcards, so we make a call
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)REM to this with the files to copy.
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles):_xcopy_hack
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)SHIFT
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IF "%0"=="" GOTO :EOF
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)xcopy "%FROM%\%0" "%TO%" /d /y
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)GOTO _xcopy_hack
145