/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed 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.
 */
apply plugin: 'java'
apply plugin: 'kotlin'
apply plugin: 'jacoco-tools-base'
apply plugin: 'sdk-java-lib'

group = 'com.android.tools.fakeadbserver'
archivesBaseName = 'fakeadbserver'
version = rootProject.ext.baseVersion

dependencies {
    compile project(':base:common')
    compile libs.kxml
    compile libs.kotlin_stdlib
    compile libs.kotlin_reflect

    testCompile project(':base:testutils')
    testCompile libs.easymock
    testCompile libs.junit
}

sourceSets {
    main.resources.srcDir 'src/main/java'
    test.resources.srcDir 'src/test/java'
}

project.ext.pomName = 'Android Tools Fake ADB Server'
project.ext.pomDesc = 'Library implementing the ADB Server protocol'

jar {
    from 'NOTICE'
}

apply from: "$rootDir/buildSrc/base/publish.gradle"
apply from: "$rootDir/buildSrc/base/bintray.gradle"
apply from: "$rootDir/buildSrc/base/javadoc.gradle"
