@echo off
:: ----------------------------------------------------------------------------
::
::   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.
::
:: build.bat - Win32 Build Script for Apache Batik
::
:: $Id$
:: ----------------------------------------------------------------------------

:: ----- Verify and Set Required Environment Variables ------------------------

if not "%JAVA_HOME%" == "" goto gotJavaHome
echo You must set JAVA_HOME to point at your Java Development Kit installation
goto cleanup
:gotJavaHome

if not "%ANT_HOME%" == "" goto gotAntHome

:: ----- Set Up The Runtime Classpath -----------------------------------------


set CP="%JAVA_HOME%\lib\tools.jar";.\lib\build\ant-1.9.7.jar;.\lib\build\ant-launcher-1.9.7.jar;.\lib\build\crimson-1.1.3.jar
 
:: If Forrest is present, add the ForrestBot dependency jars to the classpath.

if "%FORREST_HOME%" == "" goto forrestNotPresent
for %%f in ("%FORREST_HOME%\tools\forrestbot\lib\*.jar") do set CP=%CP%;"%%f"
:forrestNotPresent

:: ----- Execute The Requested Build ------------------------------------------

echo "%JAVA_HOME%\bin\java.exe" %ANT_OPTS% -classpath %CP% org.apache.tools.ant.Main -emacs -Dant.home=. %1 -Dargs="%2 %3 %4 %5 %6 %7 %8 %9"
"%JAVA_HOME%\bin\java.exe" %ANT_OPTS% -classpath %CP% org.apache.tools.ant.Main -emacs -Dant.home=. %1 -Dargs="%2 %3 %4 %5 %6 %7 %8 %9"

:: ----- Cleanup the environment ----------------------------------------------

goto cleanup

:gotAntHome

call ant -Dargs="%2 %3 %4 %5 %6 %7 %8 %9" %1

goto cleanup

:cleanup
set CP=

