################################################################################
##
##  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.
##
################################################################################
bin.includes = META-INF/,\
               plugin.xml,\
               fdb.jar
output.fdb.jar = target/
source.fdb.jar = src/main/java/

jars.compile.order = fdb.jar

# description values 
release=Apache Royale SWF Debugger


# JAR Manifest Entries
manifest.sealed=false
manifest.Implementation-Title=${release}
manifest.Implementation-Version=${release.version}
manifest.Implementation-Vendor=Apache Software Foundation
main.class=flex.tools.debugger.cli.DebugCLI

# Directories
basedir.bin=${basedir}/target
basedir.lib=${basedir}/../compiler/lib
basedir.src=${basedir}/src/main/java
basedir.swfutils=${basedir}/target/downloads/java
basedir.generated.src=${basedir}/target/generated-sources/jburg
basedir.manifest=${basedir}/META-INF
compiler.generated.lib=${basedir}/../compiler/lib
generated=${basedir}/target/generated-sources
dist=${basedir}/../compiler/lib

#JAR names
jar=fdb.jar
jar.dependencies=compiler.jar compiler-common.jar swfutils.jar external/commons-lang-2.6.jar



