buildscript {
    repositories {
        mavenCentral()
        jcenter()
    }

    dependencies {
        classpath 'com.jfrog.bintray.gradle:gradle-bintray-plugin:1.4'
        classpath 'com.android.tools.build:gradle:1.2.3'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.0'
    }
}

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.library'
apply plugin: 'maven-publish'
apply plugin: 'wrapper'
apply plugin: 'com.jfrog.bintray'

// You should change this after releasing a new version of the library. See the
// list of published versions at https://repo1.maven.org/maven2/io/v/vanadium-android.
def releaseVersion = '1.5'

android {
    buildToolsVersion '23.0.1'
    compileSdkVersion 23

    defaultConfig {
        minSdkVersion 21
    }

    lintOptions {
        abortOnError false
    }

    defaultConfig {
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile project(':lib')
    compile 'com.android.support:support-v4:23.0.1'
    compile 'com.android.support:appcompat-v7:23.0.1'
    androidTestCompile 'junit:junit:4.12'
    androidTestCompile 'com.google.truth:truth:0.25'
    // This dependency exists only to work around an issue in the sdkmanager plugin v0.12.0. This
    // should be fixed when http://git.io/vIXec is checked in and a release is made.
    androidTestCompile 'com.android.support:appcompat-v7:23.0.1'
    androidTestCompile('com.android.support.test:runner:0.3') {
        exclude group: 'junit'  // junit:junit-dep conflicts with junit:unit
    }
}

public static isDarwin() {
    return getOS().contains("os x")
}

public static isLinux() {
    return getOS().contains("linux")
}

public static isAmd64() {
    return getArch().contains("x86_64") || getArch().contains("amd64")
}

public static getArch() {
    return System.properties['os.arch'].toLowerCase()
}

public static getOS() {
    return System.properties['os.name'].toLowerCase()
}

class VanadiumEnvironment {
    File jiriRoot;
    File jiriBin;

    public static getVanadiumEnvironment() {
        VanadiumEnvironment result = new VanadiumEnvironment()

        if (!System.getenv().containsKey('JIRI_ROOT')) {
            throw new InvalidUserDataException("JIRI_ROOT is not set. "
                    + "Please follow the Vanadium installation instructions at "
                    + "https://github.com/vanadium/docs/blob/master/installation.md")
        }

        result.jiriRoot = new File(System.getenv()['JIRI_ROOT'])
        result.jiriBin = new File(result.jiriRoot, ['devtools', 'bin', 'jiri'].join(File.separator))
        if (!result.jiriBin.exists() || !result.jiriBin.isFile() || !result.jiriBin.canExecute()) {
            throw new InvalidUserDataException(
                    result.jiriBin.toString() + " does not exist or is not an executable file. "
                    + "Please follow the Vanadium installation instructions at "
                    + "https://github.com/vanadium/docs/blob/master/installation.md")
        }
        return result
    }
}

enum VanadiumSupportedArchitecture {
    X86_64('x86_64', 'amd64'),
    ARM_V7A('armeabi-v7a', 'arm');

    public final String abiName
    public final String goArch

    private VanadiumSupportedArchitecture(String abiName, String goArch) {
        this.abiName = abiName
        this.goArch = goArch
    }
}

// Returns a task that will build the Vanadium native library for the given architecture.
def buildVanadiumLib(VanadiumSupportedArchitecture arch) {
    def jiriRoot = VanadiumEnvironment.getVanadiumEnvironment().jiriRoot.getAbsolutePath()
    def jiriBin = VanadiumEnvironment.getVanadiumEnvironment().jiriBin.getAbsolutePath()

    def check = task("checkVanadiumAndroidEnvironment-${arch.goArch}", type: Exec) {
        commandLine jiriBin, 'v23-profile', 'list',
                '--info', 'Target.InstallationDir', "--target=${arch.goArch}-android", 'android'
        standardOutput = new ByteArrayOutputStream()
        doLast {
            def androidOutputDir = new File(standardOutput.toString().trim())
            if (!androidOutputDir.exists() || !androidOutputDir.isDirectory()) {
                throw new InvalidUserDataException(
                        androidOutputDir.toString() + " does not exist or is not a directory. "
                                + "You probably didn't install the android base profile. Try running\n\n"
                                + "jiri v23-profile install "
                                + "--target=${arch.goArch}-android android\n\n"
                                + "and then try building again"
                )
            }
        }
    }

    def goBuild = task("goBuildVanadiumLib-${arch.goArch}", type: Exec, dependsOn: check) {
        // NOTE(spetrovic): we add the '-installsuffix=' flag as a safe measure, because the build
        // without it doesn't work on linux/arm.  (It does work on android/arm, but we are playing it
        // safe here.)
        environment "GOOS", "android"
        environment "GOARCH", "${arch.goArch}"
        commandLine jiriBin, 'go', "--target=${arch.goArch}-android", 'install',
                '-buildmode=c-shared', '-v', '-tags', 'android',
          '-installsuffix=shared', 'v.io/x/jni/main'
    }

    // Copy the shared library to its ultimate destination.
    def copyLib = task("copyVanadiumLib-${arch.goArch}", type: Copy, dependsOn: goBuild) {
        from jiriRoot + "/release/go/pkg/android_${arch.goArch}_shared_shared/v.io/x/jni"
        into "src/main/jniLibs/${arch.abiName}"
        include 'main.a'
        rename 'main.a', 'libv23.so'
    }

    tasks.preBuild.dependsOn(copyLib)
}

VanadiumSupportedArchitecture.values().each { arch ->
    buildVanadiumLib(arch)
}

clean {
    VanadiumSupportedArchitecture.values().each() { arch ->
        delete "src/main/jniLibs/${arch.abiName}/libv23.so"
    }
}

task sourceJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier "sources"
}

// Adds XML nodes representing fields required for publication to Maven central to the given node.
def addMavenCentralMetadata(Node node) {
    node.appendNode('name', 'Vanadium Android library')
    node.appendNode('description',
            'Java libraries for writing Vanadium Android applications')
    node.appendNode('url', 'https://github.com/vanadium/java/tree/master/android-lib')

    def license = node.appendNode('licenses').appendNode('license')
    license.appendNode('name', 'New BSD License')
    license.appendNode('url', 'https://github.com/vanadium/java/blob/master/LICENSE')
    license.appendNode('distribution', 'repo')

    node.appendNode('scm').appendNode('url',
            'https://github.com/vanadium/java.git')

    def developerInfo = node.appendNode('developers').appendNode('developer')
    developerInfo.appendNode('id', 'vanadium')
    developerInfo.appendNode('name', 'The Vanadium Contributors')
    developerInfo.appendNode('email', 'vanadium-discuss@v.io')
}

def pomDependencyText = """
<dependencies>
    <dependency>
        <groupId>io.v</groupId>
        <artifactId>vanadium-without-natives</artifactId>
        <version>${releaseVersion}</version>
    </dependency>
</dependencies>
"""

def pomDependencies = new XmlParser().parseText(pomDependencyText)

// Add compile time dependencies to the list.
configurations.compile.allDependencies.withType(ExternalDependency).each {
    def dependencyNode = pomDependencies.appendNode('dependency')
    dependencyNode.appendNode('groupId', it.group)
    dependencyNode.appendNode('artifactId', it.name)
    dependencyNode.appendNode('version', it.version)
}

publishing {
    publications {
        androidLibrary(MavenPublication) {
            groupId 'io.v'
            artifactId 'vanadium-android'
            version releaseVersion

            artifact sourceJar
            artifact "$buildDir/outputs/aar/android-lib-release.aar"

            pom.withXml {
                addMavenCentralMetadata(asNode())
                asNode().append(pomDependencies)
            }
        }
    }
}

wrapper {
    gradleVersion = '2.4'
}

tasks.publishToMavenLocal.dependsOn(tasks.assemble)
tasks.bintrayUpload.dependsOn(tasks.assemble)

bintray {
    user = project.properties.bintrayUsername
    key = project.properties.bintrayApiKey
    pkg {
        desc = 'Java libraries for writing Vanadium Android applications'
        websiteUrl = 'https://github.com/vanadium/java'
        repo = 'io.v'
        name = 'vanadium-android'
        licenses = ['BSD New']
        vcsUrl = 'https://github.com/vanadium/java.git'
        version {
            name = releaseVersion
            gpg {
                sign = true
            }
        }
        userOrg = 'vanadium'
    }
    publications = ['androidLibrary']
}
