/*
 * 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
groovydoc {
    dependsOn( { project(':groovy-groovydoc').classes })
    dependsOn( { project(':groovy-docgenerator').classes })
    groovyClasspath = files(
            rootProject.compileJava.destinationDir,
            rootProject.compileJava.classpath,
            { project(':groovy-docgenerator').compileJava.destinationDir },
            { project(':groovy-groovydoc').compileJava.destinationDir },
            { project(':groovy-groovydoc').sourceSets.main.runtimeClasspath },
            { project(':groovy-ant').compileJava.destinationDir },
            { project(':groovy-templates').compileJava.destinationDir },
    )
}