@REM @file
@REM Windows batch file, Edk2Setup.bat, to set up an EDK II build environment
@REM
@REM This script will be renamed to edksetup.bat after initial testing and
@REM acceptance by the open source community.
@REM
@REM This script will set the following system environment variables:
@REM   WORKSPACE, EDK_TOOLS_PATH, PATH
@REM If rebuilding the tools:
@REM   BASE_TOOLS_PATH, PYTHON_FREEZER_PATH, PYTHONPATH
@REM It will also create a Conf/target.txt, tools_def.txt and build_rule.txt files
@REM if they do not exist
@REM If the reset flag is set, all environment variables will be reset and 
@REM the Conf/target.txt, tools_def.txt and build_rule.txt files will be overwritten
@REM
@REM Three other scripts, located in the BaseTools\Scripts directory, may be called
@REM by this script.
@REM SetVisualStudio.bat    - will set the Visual Studio environment based on the --vs* flags
@REM                          it is also used to build the Win32 binaries, calling nmake 
@REM                          using the WORKSPACE\BaseTools\Makefile
@REM ShowEnvironment.bat    - will display the current EDK II Build environment
@REM UpdateBuildVersions.py - script is called prior to building the EDK II BaseTools from
@REM                          Sources. This tool will modify the BuildVersion.* files so that
@REM                          when the tools get built, they will have a custom version entry
@REM                          similar to the following:
@REM     e:\edk2>build --version
@REM     build.exe Version 0.51 Developer Build based on Revision: 15668
@REM
@REM Copyright (c) 2014, Intel Corporation. All rights reserved.<BR>
@REM This program and the accompanying materials
@REM are licensed and made available under the terms and conditions of the BSD License
@REM which accompanies this distribution.  The full text of the license may be found at
@REM http://opensource.org/licenses/bsd-license.php
@REM
@REM THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
@REM WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
@REM
@REM
@REM usage:
@REM   Edk2Setup.bat [--help | -h] [-v | --version] [-r | --reset] 
@REM                 [--reconfig] [--edk-tools-path DirName]
@REM                 [--pull [Directory]| --rebuild [Directory]]
@REM                 [--nt32 [X64]]

@REM ##############################################################
@REM # You should not have to modify anything below this line
@REM #
@echo off
@set SCRIPT_NAME=%0
@set SCRIPT_VERSION=0.9.2.
@set SVN_REVISION=$Revision$
@set RESET_ENVIRONMENT=FALSE
@set NT32PKG=FALSE
@set NT32_64=FALSE
@set BUILD_TOOLS_WITH=
@set LOCATION=
@set REBUILD_TOOLS=
@set SVN_PULL=
@set SRC_CONF=
@set ARGUMENT=
@set SCRIPT=EDKSETUP_BAT

@if not defined ORIGINAL_PATH set "ORIGINAL_PATH=%PATH%"
@REM Always set the WORKSPACE environment variable to the current directory
@set "WORKSPACE=%CD%"
@if exist "%WORKSPACE%\BaseTools" @set "BASE_TOOLS_PATH=%WORKSPACE%\BaseTools"
@if not exist "%WORKSPACE%\Conf" @mkdir "%WORKSPACE%\Conf"

@@if not defined EDK_TOOLS_PATH @set "EDK_TOOLS_PATH=%WORKSPACE%\BaseTools"
@rem   @set "PATH=%WORKSPACE%\BaseTools\Bin\Win32;%PATH%"
@rem   @set WORKSPACE_TOOLS_PATH=%WORKSPACE%\BaseTools
@rem )

@REM Keep the existing EDK_TOOLS_PATH value, the --reset flag will set it
@REM back to WORKSPACE\BaseTools while the --location DIRECTORY flag will
@REM still take precedence if the location option follows the reset option
@REM on the command line.
@if defined EDK_TOOLS_PATH @set "LOCATION=%EDK_TOOLS_PATH%"

:parse_cmd_line
@if "%1"=="" @goto MainRoutine
@if /I "%1"=="-h" @goto Usage
@if /I "%1"=="--help" @goto Usage
@if /I "%1"=="/?" @goto Usage
@if /I "%1"=="--version" @goto Version

@REM These options will reset the system environment
@if /I "%1"=="-r" (
    @setlocal EnableDelayedExpansion
    @set "WORKSPACE=%CD%"
    @set "EDK_TOOLS_PATH=%CD%\BaseTools"
    @set "LOCATION=!EDK_TOOLS_PATH!"
    @endlocal
    @shift
    @goto parse_cmd_line
)
@if /I "%1"=="--reset" (
    @set "WORKSPACE=%CD%"
    @set "EDK_TOOLS_PATH=%WORKSPACE%\BaseTools"
    @set "LOCATION=%WORKSPACE%\BaseTools"
    @shift
    @goto parse_cmd_line
)

@REM This option is used to overwrite the Conf/*.txt files with the
@REM WORKSPACE\BaseTools\Conf\*.template files.
@if /I "%1"=="--reconfig" (
    @set RECONFIG=TRUE
    @shift
    @goto parse_cmd_line
)

@REM This option can be used to set the EDK_TOOLS_PATH containing the Win32 binaries to an
@REM alternate directory
@if /I "%1"=="--edk-tools-path" (
    @setlocal EnableDelayedExpansion
    @set ARGUMENT=%2
    @if "!ARGUMENT:~0,2!"=="--" (
        @echo.
        @echo ERROR : The --edk-tools-path flag requires an argument
        @echo.
        @endlocal
        @goto Usage
    )
    @endlocal
    @set "LOCATION=%WORKSPACE%\%2"
    @shift
    @shift
    @goto parse_cmd_line
)

@REM Force pulling updated (or checkout if they do not exist) from SVN for the BaseTools\Bin\Win32 directory
@REM or the directory pointed to by the --location option
@if /I "%1"=="--pull" (
    @if "%REBUILD_TOOLS%"=="TRUE" (
        @echo.
        @echo ERROR: The --pull option may not be used with the --rebuild option
        @shift
        @goto ExitFailure
    )
    @set SVN_PULL=TRUE
    @setlocal EnableDelayedExpansion
    @set ARGUMENT=%2
    @if not "!ARGUMENT:~0,2!"=="--" (
        @endlocal
        @set "LOCATION=%2"
        @shift
    )
    @shift
    @goto parse_cmd_line
)

@REM This options forces rebuilding the tools (provided the required tools are available
@if /I "%1"=="--rebuild" (
    @if "%SVN_PULL%"=="TRUE" (
        @echo.
        @echo ERROR: The --reset option may not be used with the --pull option
        @shift
        @goto ExitFailure
    )
    @set REBUILD_TOOLS=TRUE
    @setlocal EnableDelayedExpansion
    @set ARGUMENT=%2
    @if not "!ARGUMENT:~0,2!"=="--" (
        @endlocal
        @set "LOCATION=%2"
        @shift
    )
    @shift
    goto parse_cmd_line
)

@REM This option will try to set the compiler environment for building Nt32Pkg/Nt32Pkg.dsc
@REM If the compiler environment is already installed, then no additional work is required.
@if /I "%1"=="--nt32" (
    @set NT32PKG=TRUE
    @if not defined BUILD_TOOLS_WITH (
        @set BUILD_TOOLS_WITH=Latest
    )
    @REM This option will try to set the environment for building the Nt32Pkg/Nt32Pkg; on a 64-bit 
    @REM Windows OS
    @if /I "%2"=="X64" (
        @set NT32_64=TRUE
        @shift
    )
  @shift
  @goto parse_cmd_line
)

@if not "%1"=="" goto UnknownOptionOrArgument
@goto MainRoutine

:Usage
@echo Usage: %SCRIPT_NAME% [Options]
@echo Copyright(c) 2014, Intel Corporation. All rights reserved.
@echo.
@echo The system environment variable, WORKSPACE, is always set to the current 
@echo working directory.
@echo.
@echo Options:
@echo   --help, -h          Print this help screen and exit.
@echo.
@echo   --version           Print this script's version and exit.
@echo.
@echo   --reset, -r         Reset the EDK_TOOLS_PATH and PATH system environment
@echo                       variables. The EDK_TOOLS_PATH default is 
@echo                       WORKSPACE\BaseTools, however, it may be overridden by
@echo                       arguments given to the --edk-tools-path, --pull and/or
@echo                       --rebuild options.
@echo                       Once set, the EDK_TOOLS_PATH environment variable reset
@echo                       by opening up a new command prompt window or through one
@echo                       of the options provided by this tool
@echo.
@echo   --reconfig          Overwrite the WORKSPACE/Conf/*.txt files with the
@echo                       template files from the BaseTools/Conf directory.
@echo.
@echo   --edk-tools-path  DIRECTORY
@echo                       This option sets the EDK_TOOLS_PATH to the DIRECTORY
@echo                       value instead of the default (WORKSPACE\BaseTools).
@echo.
@echo   --nt32 [X64]        If a compiler tool chain is not available in the
@echo                       environment, call a script to attempt to set one up.
@echo                       This flag is only required if building the
@echo                       Nt32Pkg/Nt32Pkg.dsc system emulator.
@echo                       If the X64 argument is set, and a compiler tool chain is
@echo                       not available, attempt to set up a tool chain that will
@echo                       create X64 binaries. Setting these two options have the
@echo                       potential side effect of changing tool chains used for a
@echo                       rebuild.
@echo.
@pause
@echo.
@echo   --pull [DIRECTORY]  Get the EDK II BaseTools binaries from source control 
@echo                       (must not be used with --rebuild).
@echo                       If the optional DIRECTORY argument is specified, the tool
@echo                       sets EDK_TOOLS_PATH to DIRECTORY.
@echo                       If the DIRECTORY argument is not specified, the tools are
@echo                       placed in the directory tree pointed to by the current 
@echo                       EDK_TOOLS_PATH environment variable. If the binaries
@echo                       cannot be obtained from source control, the 
@echo                       EDK_TOOLS_PATH will be set to the default, 
@echo                       WORKSPACE\BaseTools directory.
@echo.
@echo   --rebuild  [DIRECTORY]
@echo                       Force Rebuilding the EDK II BaseTools from source
@echo                      (must not be used with --pull).
@echo                           NOTE: The build will use whatever compiler tool set
@echo                                 is available in the environment prior to
@echo                                 running edksetup.bat.
@echo                       If the optional DIRECTORY argument is specified, the tool
@echo                       sets EDK_TOOLS_PATH to DIRECTORY. Tools binaries will be
@echo                       placed in the appropriate subdirectory in the 
@echo                       EDK_TOOLS_PATH directory. If the build fails, the
@echo                       EDK_TOOLS_PATH will be set to the default,
@echo                       WORKSPACE\BaseTools directory.
@goto ExitSuccess

:Version
@echo %SCRIPT_NAME% Version: %SCRIPT_VERSION%%SVN_REVISION:~11,-1%
@echo Copyright(c) 2014, Intel Corporation. All rights reserved.
@set HIDE_PATH=TRUE
@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"
@set HIDE_PATH=
@goto ExitSuccess

:UnknownOptionOrArgument
@echo. ERROR : This argument is not valid: %1
@echo.
@goto ExitFailure

:NoVisualStudio
@echo ERROR : Unable to determine if a compiler tool chain has been enabled in this
@echo         command-prompt window. Rebuilding of the tools with this script is not
@echo         possible.
@echo         Refer to the BaseTools\BuildNotes.txt for directions for building 
@echo         the BaseTools binaries.
@echo.
@goto ExitFailure

:NoPython
@echo ERROR : Unable to rebuild the BaseTools binaries, python does not appear to be
@echo         installed. If python is installed, please set the environment
@echo         variable, PYTHONHOME to the Path to the python.exe, for example,
@echo         if python.exe is located in the C:\Python27 directory, then:
@echo         set PYTHONHOME=C:\Python27
@echo.
@goto ExitFailure

:BadPython
@echo ERROR : Unable to rebuild the BaseTools binaries, python does not appear to be
@echo         installed. 
@echo         The python executable was not found in the PYTHONHOME: %PYTHONHOME%
@echo         If python is installed, please set the environment variable, PYTHONHOME 
@echo         to the Path that contains python.exe, for example, if python.exe is
@echo         located in the C:\Python27 directory, then:
@echo         set PYTHONHOME=C:\Python27
@echo.
@goto ExitFailure

:NoCxFreeze
@echo ERROR : Unable to locate cx_Freeze 4.2.3. The cxfreeze.bat file must be located
@echo         in the %PYTHONHOME%\Scripts directoryin order to rebuild the BaseTools
@echo         binaries.
@echo.
@goto ExitFailure

:NoBaseTools
@echo ERROR: Unable to locate the BaseTools directory containing the Source tree
@echo.
@goto ExitFailure

@REM #########################################################################################
@REM MAIN ROUTINE
@REM Set up the Build System environment
@REM #########################################################################################
:MainRoutine
@if defined LOCATION @set "EDK_TOOLS_PATH=%LOCATION%"
@REM SET the EDK_TOOLS_PATH.
@if not exist "%EDK_TOOLS_PATH%" (
    @mkdir %EDK_TOOLS_PATH%
)
@if not defined NASM_PREFIX (
    @echo.
    @echo WARNING : NASM_PREFIX environment variable is not set
    @if exist "C:\nasm\nasm.exe" @set "NASM_PREFIX=C:\nasm\"
    @if exist "C:\nasm\nasm.exe" @echo   Found nasm.exe, setting the environment variable to C:\nasm\
    @if not exist "C:\nasm\nasm.exe" echo   Attempting to build modules that require NASM will fail.
)
@REM Set up the path to include the EDK_TOOLS_PATH\Bin\Win32 directory; this test determines
@REM whether the path is in the workspace or a fully qualified path that may be outside of
@REM the workspace
@if exist "%WORKSPACE%\%EDK_TOOLS_PATH%" @set "EDK_TOOLS_PATH=%WORKSPACE%\%EDK_TOOLS_PATH%"

@if defined REBUILD_TOOLS goto SetConf
@if defined SVN_PULL goto SetConf
@if not exist "%EDK_TOOLS_PATH%\Bin\Win32\build.exe" (
    @echo ERROR : %EDK_TOOLS_PATH%\Bin\Win32\build.exe does not exist
    @echo         Re-run this script using --reset, --pull or --rebuild
    @echo.
    @goto ExitFailure
)
@echo.
@echo Rebuilding of the tools is not required. Binaries of the latest,
@echo tested versions of the tools have been tested and included in the
@echo EDK II repository.
@echo.
@echo If you really want to build the tools, use the --rebuild option.
@echo.
@if not defined CYGWIN_HOME @echo "!!! WARNING !!! No CYGWIN_HOME set, gcc build may not be used !!!"
@if not defined CYGWIN_HOME @echo.
@REM Make sure the WORKSPACE\Conf directory contains the required text files that will be
@REM copied or replaced from the WORKSPACE\BaseTools\Conf directories' template files.
:SetConf
@if not exist "%EDK_TOOLS_PATH%\Conf" (
    @if exist "%WORKSPACE%\BaseTools\Conf" (
        @set "SRC_CONF=%WORKSPACE%\BaseTools\Conf"
    )
) else (
    @set "SRC_CONF=%EDK_TOOLS_PATH%\Conf"
)
@if not defined SRC_CONF (
    @echo ERROR : Unable to locate the BaseTools directory tree
    @goto ExitFailure
)

@REM The script will test to see if the files exist, and also use the RESET_ENVIRONMENT flag
@REM to overwrite the WORKSPACE\Conf *.txt files.
@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"
@if errorlevel 1 (
    @echo Unable to copy the template files from "%SRC_CONF%" to "%WORKSPACE%\Conf"
    @goto ExitFailure
)
@set SRC_CONF=

@REM Set up Visual Studio if required to build the Nt32Pkg/Nt32Pkg.dsc emulator
@if "%NT32PKG%"=="TRUE" (
    @if not defined VSINSTALLDIR @set "PATH=%ORIGINAL_PATH%"
    @if not defined NT32_X64 @call "%WORKSPACE%\BaseTools\get_vsvars.bat"
    @if defined NT32_X64 call "%WORKSPACE%\BaseTools\Scripts\SetVisualStudio.bat"
    @set NT32_X64=
)
@if "%NT32PKG%"=="TRUE" (
    @if not defined VS_PATH set "VS_PATH=%PATH%"
)
@if defined VS_PATH @set "PATH=%VS_PATH%"
@if not defined VS_PATH @set "PATH=%ORIGINAL_PATH%"
@set "PATH=%EDK_TOOLS_PATH%\Bin\Win32;%PATH%"

@if "%REBUILD_TOOLS%"=="TRUE" @goto Rebuild
@if "%SVN_PULL%"== "TRUE" (
    if defined PYTHONHOME (
        @REM Use the python script if possible to test is the svn command is available, if it fails, the user may be
        @REM able to rebuild the Win32 binaries
        @call "%WORKSPACE%\BaseTools\Scripts\UpdateBuildVersions.py" --svn-test -v
        @if errorlevel 1 (
            @echo ERROR : The command-line svn tool is not available and the Win32 binaries do not exist
            @echo         Please re-run this script again with the --rebuild option to attempt to build 
            @echo         the binaries
            @echo.
            @goto ExitFailure
        )
        @if exist %EDK_TOOLS_PATH%\Bin\Win32 @rmdir /S /Q %EDK_TOOLS_PATH%\Bin\Win32
        @call svn co https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 "%EDK_TOOLS_PATH%\Bin\Win32"
    ) else (
        @call svn co https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32 "%EDK_TOOLS_PATH%\Bin\Win32"
        @if errorlevel 1 (
            @echo ERROR : The command-line svn tool is not available and the Win32 binaries do not exist
            @echo         Python does not appear to be available either. This script cannot be used to
            @echo         build the Win32 binaries or to obtain them from this repository:
            @echo            https://svn.code.sf.net/p/edk2-toolbinaries/code/trunk/Win32
            @goto ExitFailure
        )
    )
    @goto ShowAndExit
)

@if not "%REBUILD_TOOLS%"=="TRUE" @goto ShowAndExit

@REM The following code is used to rebuild the Win32 BaseTools binaries - check that required tools are available
:Rebuild
@if not defined BASE_TOOLS_PATH @set "BASE_TOOLS_PATH=%WORKSPACE%\BaseTools"
@if not exist "%BASE_TOOLS_PATH%\Source" @goto NoBaseTools
@endlocal
@if not defined VCINSTALLDIR @goto NoVisualStudio
@if not defined PYTHONHOME @goto NoPython
@if not exist "%PYTHONHOME%\python.exe" @goto BadPython
@REM python.exe has been located, now make sure it's in the PATH
@call python --version > nul 2>&1
@if errorlevel 1 @set "PATH=%PYTHONHOME%\python.exe;%PATH%"
@if not defined PYTHON_FREEZER_PATH (
    @if not exist "%PYTHONHOME%\Scripts\cxfreeze.bat" @goto NoCxFreeze
    @set "PYTHON_FREEZER_PATH=%PYTHONHOME%\Scripts"
)
@call "%WORKSPACE%\BaseTools\Scripts\SetVisualStudio.bat"
@if errorlevel 1 @goto ExitFailure

:ShowAndExit
@call "%WORKSPACE%\BaseTools\Scripts\ShowEnvironment.bat"

@REM #########################################################################################
@REM EXIT ROUTINES
@REM #########################################################################################
:ExitSuccess
@set SCRIPT_NAME=
@set SCRIPT_VERSION=
@set SVN_REVISION=
@set RESET_ENVIRONMENT=
@set RECONFIG=
@set NT32PKG=
@set NT32_64=
@set BUILD_TOOLS_WITH=
@set LOCATION=
@set REBUILD_TOOLS=
@set SVN_PULL=
@set SRC_CONF=
@set ARGUMENT=
@set SCRIPT=
@set LIST_VS_VERSIONS=
@set PYTHON_FREEZER_PATH=
@echo on
@exit /B 0

:ExitFailure
@set SCRIPT_NAME=
@set SCRIPT_VERSION=
@set SVN_REVISION=
@set RESET_ENVIRONMENT=
@set RECONFIG=
@set NT32PKG=
@set NT32_64=
@set BUILD_TOOLS_WITH=
@set LOCATION=
@set REBUILD_TOOLS=
@set SVN_PULL=
@set SRC_CONF=
@set ARGUMENT=
@set SCRIPT=
@set LIST_VS_VERSIONS=
@set PYTHON_FREEZER_PATH=
@echo on
@exit /B 1
