################################################################################
##
##  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 = bin/
source.fdb.jar = src/,\
				../swfutils/,\
				generated/src/
jars.compile.order = fdb.jar

# description values 
release=Flash Debugger
release.version=1.0.0


# 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}/bin
basedir.lib=${basedir}/lib
basedir.src=${basedir}/src
basedir.swfutils=${basedir}/../swfutils
basedir.generated.src=${basedir}/generated/src
basedir.manifest=${basedir}/META-INF
compiler.generated.lib=${basedir}/../compiler/generated/dist/sdk/lib
generated=${basedir}/generated
dist=${basedir}/../compiler/generated/dist/sdk/lib

#JAR names
jar=fdb.jar
jar.dependencies=compiler.jar swfutils.jar



