apply plugin: 'com.android.library'
apply plugin: 'maven-publish'

def jniLibsDir = System.properties['jniLibsDir']
def buildDir = System.properties['buildDir']
def publishDir = System.properties['publishDir']
def minSdkVer = System.properties['minSdkVer'] ?: 24
def targetSdkVer = System.properties['targetSdkVer'] ?: 32
def ndkVer = System.properties['ndkVer'] ?: "25.1.8937393"

// Since Android requires a higher numbers indicating more recent versions
// This function assume ORT version number will be in format of A.B.C such as 1.7.0
// We generate version code A[0{0,1}]B[0{0,1}]C,
// for example '1.7.0' -> 10700, '1.6.15' -> 10615
def getVersionCode(String version) {
    String[] code = version.split('\\-')
    String[] codes = code[0].split('\\.')
    // This will have problem if we have 3 digit [sub]version number, such as 1.7.199
    // but it is highly unlikely to happen
    String versionCodeStr = String.format("%d%02d%02d", codes[0] as int, codes[1] as int, codes[2] as int)
    return versionCodeStr as int
}

project.buildDir = buildDir
project.group = "com.microsoft.onnxruntime"
project.version = rootProject.file('../version.txt').text.trim()

def mavenArtifactId = project.name + '-android'

buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.3.0'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

android {
    compileSdkVersion 32
    ndkVersion ndkVer
    defaultConfig {
        minSdkVersion minSdkVer
        targetSdkVersion targetSdkVer
        versionCode = getVersionCode(project.version)
        versionName = project.version

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    android {
        lintOptions {
            abortOnError false
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            debuggable false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        sourceCompatibility = JavaVersion.VERSION_1_8
        targetCompatibility = JavaVersion.VERSION_1_8
    }

    sourceSets {
        main {
            jniLibs.srcDirs = [jniLibsDir]
        }
    }

    publishing {
        singleVariant("release") {
            withSourcesJar()
            withJavadocJar()
        }
    }

}

task sourcesJar(type: Jar) {
    archiveClassifier = "sources"
    from android.sourceSets.main.java.srcDirs
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    archiveClassifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

dependencies {
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.7.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.7.0'
    testImplementation 'com.google.protobuf:protobuf-java:3.21.7'
}

project.afterEvaluate {
    publishing {
        publications {
            maven(MavenPublication) {
                from components.release
                groupId = project.group
                artifactId = mavenArtifactId
                version = project.version

                pom {
                    name = 'onnxruntime-extensions'
                    description = 'ONNXRuntime-Extensions is a library for Android for pre- and post-processing.'
                    url = 'https://microsoft.github.io/onnxruntime/'
                    licenses {
                        license {
                            name = 'MIT License'
                            url = 'https://opensource.org/licenses/MIT'
                        }
                    }
                    organization {
                        name = 'Microsoft'
                        url = 'http://www.microsoft.com'
                    }
                    scm {
                        connection = 'scm:git:git://github.com:microsoft/onnxruntime-extensions.git'
                        developerConnection = 'scm:git:ssh://github.com/microsoft/onnxruntime-extensions.git'
                        url = 'http://github.com/microsoft/onnxruntime-extensions'
                    }
                    developers {
                        developer {
                            id = 'onnxruntime'
                            name = 'ONNX Runtime'
                            email = 'onnxruntime@microsoft.com'
                        }
                    }
                }
            }
        }

        //publish to filesystem repo
        repositories {
            maven {
                url "$publishDir"
            }
        }
    }
}
