/**
 * This is *NOT* the main build script for F-Droid.  The main build.gradle
 * is in F-Droid/build.gradle. Usually multi-project builds don't have a
 * build.gradle in the top level directory (http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Dependencies-Android-Libraries-and-Multi-project-setup).
 *
 * This build script contains miscellaneous hacks to ensure that all of
 * F-Droids dependencies can be built from source.
 * Each hack should be documented, and in the future, may need to be changed
 * in order to ensure that we keep pace with any changes upstream makes to
 * their build processes.
 *
 *  - Some subprojects don't have gradle build scripts, so they are setup here.
 *
 *  - The android support libraries make a lot of dependencies about the project
 *    two folders up from themselves, which we will have to provide for them.
 */

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.3'

        // libsuperuser submodule requires these plugins, even though
        // the F-Droid build process never invokes code from them. It
        // would be nice to do away with this in the future, so we don't
        // force people do download stuff they wont use.
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.0'
        classpath 'com.github.dcendents:android-maven-plugin:1.2'
    }
}

if ( hasProperty( 'sourceDeps' ) ) {

project(':extern:UniversalImageLoader:library') {

    apply plugin: 'android-library'

    android {
        compileSdkVersion 16
        buildToolsVersion '22.0.1'

        sourceSets {
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
        }
    }
}

project(':extern:zipsigner') {

    apply plugin: 'java'

    dependencies {
        compile project(':extern:spongycastle:core')
        compile project(':extern:spongycastle:pkix')
        compile project(':extern:spongycastle:prov')
    }
}

}

subprojects {

    // This is the hacky way which we force the subprojects to use the same build tools:
    // http://stackoverflow.com/a/21032272
    afterEvaluate {
        if ( it.hasProperty( 'android' ) ) {
            android {

                // The android build task only lets you configure the buildToolsVersion once, so if
                // we execute the closure below to configure our subprojects, it will fail when it
                // hits the second subproject. Therefore, we will only do it once, and I guess the
                // android plugin will re-use the existing value I set.
                // https://android.googlesource.com/platform/tools/build/+/master/gradle/src/main/groovy/com/android/build/gradle/BaseExtension.groovy
                try {
                    buildToolsVersion '22.0.1'
                    logger.info("Set buildToolsVersion to '22.0.1'")
                } catch (GradleException e) {
                    logger.info("Tried to set the buildToolsVersion, however we were not allowed to: $e.message")
                }

                // don't abort build on lint errors
                // http://stackoverflow.com/a/25149514
                configure(android.lintOptions) {
                    abortOnError false
                }
            }
        }
    }
}