/**
 * 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.
 */


description = 'The S4 tools platform.'

apply plugin: 'java'

task "create-dirs" << {
   sourceSets.all*.java.srcDirs*.each { it.mkdirs() }
   sourceSets.all*.resources.srcDirs*.each { it.mkdirs() }
}

dependencies {
    compile project(":s4-base")
    compile project(":s4-comm")
    compile project(":s4-core")
    compile libraries.jcommander
    compile libraries.zkclient
    compile libraries.gradle_base_services
    compile libraries.gradle_core
    compile libraries.gradle_tooling_api
    compile libraries.gradle_wrapper

}

apply plugin:'application'
mainClassName = "org.apache.s4.tools.Tools"

task copyTemplates << {
    copy {
        from 'src/main/java/hello'
        into 'src/main/resources'
    }
}

run {
    // run doesn't yet directly accept command line parameters...
    if ( project.hasProperty('args') ) {
        args project.args.split('\\s+')
        print args
    }
 }
 
distZip {
    // what we build here is really a binary release of S4 with required subprojects and dependencies (hence refs to rootProject)
    classifier='bin'
    version = rootProject.version
    baseName=rootProject.ext.archivesBaseName
}

test {
    forkEvery=1
}
