/*
 * Copyright 2003-2012 the original author or authors.
 *
 * 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.
 */

// Define a GroovyDoc task which depends on the generated groovydoc tool
allprojects {
    groovydoc {
        dependsOn( { project(':groovy-groovydoc').classes })
        dependsOn( { project(':groovy-docgenerator').classes })
        groovyClasspath = files(
                rootProject.compileJava.classpath,
                rootProject.bootstrapJar.archivePath,
                { project(':groovy-docgenerator').compileJava.destinationDir },
                { project(':groovy-groovydoc').compileJava.destinationDir },
                { project(':groovy-groovydoc').sourceSets.main.runtimeClasspath },
                { project(':groovy-ant').sourceSets.main.runtimeClasspath },
                { project(':groovy-templates').sourceSets.main.runtimeClasspath },
        )
    }
}