@ECHO OFF

REM   Licensed to the Apache Software Foundation (ASF) under one
REM   or more contributor license agreements.  See the NOTICE file
REM   distributed with this work for additional information
REM   regarding copyright ownership.  The ASF licenses this file
REM   to you under the Apache License, Version 2.0 (the
REM   "License"); you may not use this file except in compliance
REM   with the License.  You may obtain a copy of the License at
REM
REM    http://www.apache.org/licenses/LICENSE-2.0
REM
REM   Unless required by applicable law or agreed to in writing,
REM   software distributed under the License is distributed on an
REM   "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
REM   KIND, either express or implied.  See the License for the
REM   specific language governing permissions and limitations
REM   under the License.

@REM Called as a pre-build step to check some environment variables
@REM UIMACPP_HOME is used as the default location of the apr & icu & xerces builds
@REM which are include in the SDK
@REM These may be overridden by setting APR_HOME or ICU_HOME or XERCES_HOME

if not exist "%JAVA_INCLUDE%\jni.h" (
  echo Error: failed to find JDK headers in %JAVA_INCLUDE%
  goto end
)

if "%UIMACPP_HOME%"=="" goto noTAF
if "%APR_HOME%"=="" echo Note: Using APR build under UIMACPP_HOME
if "%ICU_HOME%"=="" echo Note: Using ICU build under UIMACPP_HOME
if "%XERCES_HOME%"=="" echo Note: Using XERCES build under UIMACPP_HOME
goto end

:noTAF
if "%APR_HOME%"=="" (
  echo Error: Must set APR_HOME [or use SDK via UIMACPP_HOME]
) else (
  if "%ICU_HOME%"=="" (
    echo Error: Must set ICU_HOME [or use SDK via UIMACPP_HOME]
  ) else (
    if "%XERCES_HOME%"=="" (
      echo Error: Must set XERCES_HOME [or use SDK via UIMACPP_HOME]
    ) else ( goto end ) 
  )
)
echo **** Pre-build check failed ***
exit 99
:end
