@echo off
REM License Block
GOTO LicenseEnd
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at
  
 http://www.apache.org/licenses/LICENSE-2.0
  
 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
:LicenseEnd

SET TARGETS=simple
SET AREA=all
SET CONFIGURATION=Release
IF [%1] NEQ [] SET TARGETS=%1
IF [%2] NEQ [] SET AREA=%2
IF [%3] NEQ [] SET CONFIGURATION=%3

%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe build/scripts/build.targets /t:%TARGETS% /p:BuildArea=%AREA% /p:Configuration=%Configuration% /nologo 