#!/bin/sh

################################################################################
##
##  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.
##
################################################################################

# aasdoc script for Unix.
# This simply executes the asdoc script in the same directory,
# inserting the option +configname=air, which makes
# asdoc use air-config.xml rather than flex-config.xml.
# On Windows, aasdoc.bat is used instead.

#
# Either the AIR_HOME environment variable must be set or
# or the env.AIR_HOME property must be set in %FLEX_HOME%/env.properties.
# If both are set the property takes precedence.
#

asdoc=`dirname "$0"`/asdoc
"$asdoc" +configname=air "$@"
