buildscript { repositories { mavenCentral() } dependencies { classpath "org.jetbrains.dokka:dokka-gradle-plugin:0.9.17" classpath "com.netflix.nebula:nebula-release-plugin:15.3.1" } } plugins { // remember to update all the versions here when upgrading kotlin version id 'org.jetbrains.kotlin.jvm' apply false id 'org.jetbrains.kotlin.multiplatform' apply false id 'org.jetbrains.kotlin.plugin.serialization' version '1.6.0' apply false } def multiplatformModules = [ "orx-camera", "orx-color", "orx-compositor", "orx-easing", "orx-fx", "orx-gradient-descent", "orx-image-fit", "orx-no-clear", "orx-noise", "orx-parameters", "orx-shade-styles", "orx-shader-phrases", "orx-shapes", "orx-quadtree", ] def doNotPublish = ["openrndr-demos"] project.ext { kotlinApiVersion = '1.6' kotlinLanguageVersion = '1.6' kotlinVersion = '1.6.0' kotlinLoggingVersion = '2.0.8' kotlinxSerializationVersion = '1.3.1' spekVersion = '2.0.15' kluentVersion = '1.65' jsoupVersion = '1.13.1' kotestVersion = '4.4.3' junitJupiterVersion = '5.7.1' } apply plugin: 'org.jetbrains.dokka' ext.isReleaseVersion = !version.endsWith("SNAPSHOT") def openrndrUseSnapshot = isReleaseVersion project.ext { openrndrVersion = findProperty("OPENRNDR.version")?.replace("v","") ?: "0.5.1-SNAPSHOT" jvmTarget = "1.8" kotlinVersion = "1.6.0" kotlinApiVersion = "1.4" spekVersion = "2.0.15" libfreenectVersion = "0.5.7-1.5.4" librealsense2Version = "2.29.0-1.5.4" gsonVersion = "2.8.6" antlrVersion = "4.9.2" tensorflowVersion = "0.3.3" mklDnnVersion = "0.21.5-1.5.4" } allprojects { group 'org.openrndr.extra' repositories { mavenCentral() if (openrndrUseSnapshot) { mavenLocal() } maven { url = "https://maven.openrndr.org" } } } switch (org.gradle.internal.os.OperatingSystem.current()) { case org.gradle.internal.os.OperatingSystem.WINDOWS: project.ext.openrndrOS = "windows" break case org.gradle.internal.os.OperatingSystem.LINUX: project.ext.openrndrOS = "linux-x64" break case org.gradle.internal.os.OperatingSystem.MAC_OS: project.ext.openrndrOS = "macos" break } dokka { moduleName = "$rootProject.name" outputDirectory = "$buildDir/docs" outputFormat = "html" includes = ['Module.md'] sourceDirs = files(subprojects.collect { p -> new File(p.projectDir, "/src/main/kotlin") }) } task buildMainReadme { doFirst { def subProjects = project.subprojects //.findAll { !it.name.contains("kinect-common") && !it.name.contains // ("kinect-v1-") } // Load README.md and find [begin, end] section to replace def mainReadme = file("README.md") def lines = mainReadme.readLines() def begin = lines.findIndexOf { it == "" } def end = lines.findIndexOf { it == "" } if (begin == -1 || end == -1) { println("Comments for orx list generation not found in README.md!") return } def header = lines.subList(0, begin + 1) def footer = lines.subList(end, lines.size()) def newReadme = [] for (line in header) { newReadme.add(line) } // Search for the description at the top of the readme. // Skip the hash character from the headline, then start // on the next line and continue until the next empty line. // Don't fall into Windows line breaks. def descriptionRx = ~/(?s)\#.*?\n(.+?)\n\r?\n/ // Note: the readme needs an empty line after the description def orxMultiplatform = [] def orxJVMOnly = [] // Build orx list for (sub in subProjects) { def orxReadmeFile = sub.file("README.md") if (orxReadmeFile.exists()) { def orxReadmeText = orxReadmeFile.getText() orxReadmeText.find(descriptionRx) { description -> def trimmedDescription = description[1].trim() //.strip() supports unicode, java11 only .replace("\n", " ").replace("\r", "") def path = sub.path.substring(1).replace(":", "/") if (path.startsWith("orx-jvm")) { orxJVMOnly.add("| [`${sub.name}`]($path/) " + "| $trimmedDescription |") } else { orxMultiplatform.add("| [`${sub.name}`]($path/) " + "| $trimmedDescription |") } } } else { println("${sub.name}/README.md not found!") } } newReadme.add("\n## Multiplatform\n") newReadme.add("| name" + " " * 36 + " | description |") newReadme.add("| --- | --- |") newReadme.addAll(orxMultiplatform) newReadme.add("\n## JVM only\n") newReadme.add("| name" + " " * 36 + " | description |") newReadme.add("| --- | --- |") newReadme.addAll(orxJVMOnly) for (line in footer) { newReadme.add(line) } // Write result if (mainReadme.exists()) { mainReadme.delete() } mainReadme.write(newReadme.join("\n")) } } configure(allprojects.findAll { !doNotPublish.contains(it.name) && (multiplatformModules.contains(it.name)) }) { apply plugin: 'maven-publish' apply plugin: 'signing' def fjdj = tasks.create("fakeJavaDocJar", Jar) { archiveClassifier = "javadoc" } publishing { publications { all { pom { name = "$project.name" description = "$project.name" url = 'https://openrndr.org' developers { developer { id = 'edwinjakobs' name = 'Edwin Jakobs' email = 'edwin@openrndr.org' } } license { licenses { license { name = 'BSD-2-Clause' url = 'https://github.com/openrndr/openrndr/blob/master/LICENSE' distribution = 'repo' } } } scm { connection = "scm:git:git@github.com:openrndr/openrndr.git" developerConnection = "scm:git:ssh://github.com/openrndr/openrndr.git" url = "https://github.com/openrndr/openrndr" } } } } repositories { maven { credentials { username findProperty("ossrhUsername") ?: System.getenv("OSSRH_USERNAME") password findProperty("ossrhPassword") ?: System.getenv("OSSRH_PASSWORD") } if (!isReleaseVersion) { url "https://s01.oss.sonatype.org/content/repositories/snapshots" } else { url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2" } } } } signing { required { isReleaseVersion && gradle.taskGraph.hasTask("publish") } sign publishing.publications } } configure(allprojects.findAll { !doNotPublish.contains(it.name) && !multiplatformModules.contains(it.name) }) { // apply plugin: 'idea' apply plugin: 'java' apply plugin: 'kotlin' apply plugin: 'maven-publish' apply plugin: 'nebula.release' apply plugin: 'signing' def proj = it println proj java { withJavadocJar() withSourcesJar() } publishing { publications { maven(MavenPublication) { from components.java groupId = "org.openrndr.extra" artifactId = "$project.name" description = "$project.name" pom { name = "$project.name" description = "$project.name" url = 'https://openrndr.org' developers { developer { id = 'edwinjakobs' name = 'Edwin Jakobs' email = 'edwin@openrndr.org' } } license { licenses { license { name = 'BSD-2-Clause' url = 'https://github.com/openrndr/orx/blob/master/LICENSE' distribution = 'repo' } } } scm { connection = "scm:git:git@github.com:openrndr/orx.git" developerConnection = "scm:git:ssh://github.com/openrndr/orx.git" url = "https://github.com/openrndr/orx" } } } } repositories { maven { credentials { username findProperty("ossrhUsername") ?: System.getenv("OSSRH_USERNAME") password findProperty("ossrhPassword") ?: System.getenv("OSSRH_PASSWORD") } if (!isReleaseVersion) { url "https://s01.oss.sonatype.org/content/repositories/snapshots" } else { url "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2" } } } } signing { required { isReleaseVersion && gradle.taskGraph.hasTask("publish") } sign publishing.publications } dependencies { // Note: kotlin-logging and kotlinx-coroutines-core are loaded // too early and their versions cannot be parametrized implementation 'io.github.microutils:kotlin-logging:2.0.6' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlinVersion" implementation "org.openrndr:openrndr-application:$openrndrVersion" implementation "org.openrndr:openrndr-math:$openrndrVersion" testImplementation "org.spekframework.spek2:spek-dsl-jvm:$spekVersion" testImplementation "org.amshove.kluent:kluent:$kluentVersion" testImplementation "org.jetbrains.kotlin:kotlin-test:$kotlinVersion" testRuntimeOnly "org.spekframework.spek2:spek-runner-junit5:$spekVersion" testRuntimeOnly "org.jetbrains.kotlin:kotlin-reflect:$kotlinVersion" } test { useJUnitPlatform { includeEngines 'spek2' } } java { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } javadoc { options.addBooleanOption 'Xdoclint:none', true } tasks.withType(org.jetbrains.kotlin.gradle.tasks.AbstractKotlinCompile).all { kotlinOptions.freeCompilerArgs += ["-Xuse-experimental=kotlinx.coroutines.InternalCoroutinesApi"] } } //configure(allprojects.findAll { it.name != "openrndr-demos" }) { // apply plugin: 'maven-publish' // apply plugin: 'nebula.release' //} //collectScreenshots.dependsOn { // project.subprojects.findAll { it.sourceSets.hasProperty("demo") }.collect { it.tasks.demoClasses } //}