diff --git a/build.gradle.kts b/build.gradle.kts index 40fb5eabb..2d045f712 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,10 +2,10 @@ import com.dfsek.terra.configureCompilation import com.dfsek.terra.configureDependencies import com.dfsek.terra.configureDistribution import com.dfsek.terra.configurePublishing -import com.dfsek.terra.configureVersioning +import com.dfsek.terra.forSubProjects +import com.dfsek.terra.preRelease import com.dfsek.terra.version import com.dfsek.terra.versionProjects -import com.dfsek.terra.preRelease preRelease(true) @@ -18,11 +18,6 @@ versionProjects(":platforms", version("6.0.0")) allprojects { group = "com.dfsek.terra" - - afterEvaluate { - configureVersioning() - } - configureCompilation() configureDependencies() configurePublishing() @@ -54,7 +49,13 @@ allprojects { } afterEvaluate { - project(":platforms").subprojects.forEach { // Platform projects are where distribution happens - it.configureDistribution() + forSubProjects(":platforms") { + configureDistribution() + } + forSubProjects(":common:addons") { + dependencies { + "compileOnly"(project(":common:api")) + "testImplementation"(project(":common:api")) + } } } diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/AddonConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/AddonConfig.kt index 279dcf74a..88a197d22 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/AddonConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/AddonConfig.kt @@ -21,13 +21,13 @@ fun Project.addonDir(dir: File, task: Task) { println("Deleting old addon: " + it.absolutePath) it.delete() } - project(":common:addons").subprojects.forEach { addonProject -> - val jar = (addonProject.tasks.named("jar").get() as Jar) + forSubProjects(":common:addons") { + val jar = (tasks.named("jar").get() as Jar) - val boot = if (addonProject.project.extra.has("bootstrap") && addonProject.project.extra.get("bootstrap") as Boolean) "bootstrap/" else "" + val boot = if (extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "bootstrap/" else "" val target = File(dir, boot + jar.archiveFileName.get()) - val base = "${jar.archiveBaseName.get()}-${project.version}" + val base = "${jar.archiveBaseName.get()}-${version}" println("Copying addon ${jar.archiveFileName.get()} to ${target.absolutePath}. Base name: $base") diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt deleted file mode 100644 index 5fe68f42d..000000000 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/CommonConfig.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.dfsek.terra - -import java.io.ByteArrayOutputStream -import org.gradle.api.Project - -fun Project.getGitHash(): String { - val stdout = ByteArrayOutputStream() - exec { - commandLine = mutableListOf("git", "rev-parse", "--short", "HEAD") - standardOutput = stdout - } - return stdout.toString().trim() -} - -fun Project.gitClone(name: String) { - val stdout = ByteArrayOutputStream() - exec { - commandLine = mutableListOf("git", "clone", name) - standardOutput = stdout - } -} diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt index 847b7f50d..b3e39e22a 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/CompilationConfig.kt @@ -43,7 +43,18 @@ fun Project.configureCompilation() { "ISSUES" to properties["terra.issues"], "LICENSE" to properties["terra.license"] ) - ) + ) + } + + afterEvaluate { + tasks.withType { + include("**/*.*") + filter( + "tokens" to mapOf( + "VERSION" to version.toString() + ) + ) + } } tasks.withType { diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt index a9f96f55b..93097b270 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/DependencyConfig.kt @@ -49,11 +49,4 @@ fun Project.configureDependencies() { compileOnly("com.google.guava:guava:30.0-jre") testImplementation("com.google.guava:guava:30.0-jre") } - - if (project(":common:addons").subprojects.contains(this)) { // If this is an addon project, depend on the API. - dependencies { - compileOnly(project(":common:api")) - testImplementation(project(":common:api")) - } - } } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt index a2e34f068..2c584516d 100644 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/DistributionConfig.kt @@ -34,9 +34,9 @@ fun Project.configureDistribution() { val installAddons = tasks.create("installAddons") { group = "terra" - project(":common:addons").subprojects.forEach { - it.afterEvaluate { - dependsOn(it.tasks.getByName("build")) // Depend on addon JARs + forSubProjects(":common:addons") { + afterEvaluate { + dependsOn(tasks.getByName("build")) // Depend on addon JARs } } @@ -52,12 +52,12 @@ fun Project.configureDistribution() { dest.parentFile.mkdirs() val zip = ZipOutputStream(FileOutputStream(dest)) - - project(":common:addons").subprojects.forEach { addonProject -> - val jar = (addonProject.tasks.named("jar").get() as Jar) + + forSubProjects(":common:addons") { + val jar = (tasks.named("jar").get() as Jar) println("Packaging addon ${jar.archiveFileName.get()} to ${dest.absolutePath}.") - val boot = if(addonProject.project.extra.has("bootstrap") && addonProject.project.extra.get("bootstrap") as Boolean) "bootstrap/" else "" + val boot = if(extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "bootstrap/" else "" val entry = ZipEntry("addons/$boot${jar.archiveFileName.get()}") zip.putNextEntry(entry) @@ -88,10 +88,10 @@ fun Project.configureDistribution() { resources.computeIfAbsent("lang") { ArrayList() }.add(it.name) } - project(":common:addons").subprojects.forEach { addonProject -> - val jar = (addonProject.tasks.named("jar").get() as Jar).archiveFileName.get() + forSubProjects(":common:addons") { + val jar = (tasks.named("jar").get() as Jar).archiveFileName.get() resources.computeIfAbsent( - if (addonProject.project.extra.has("bootstrap") && addonProject.project.extra.get("bootstrap") as Boolean) "addons/bootstrap" + if (extra.has("bootstrap") && extra.get("bootstrap") as Boolean) "addons/bootstrap" else "addons" ) { ArrayList() }.add(jar) } diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/Utils.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/Utils.kt new file mode 100644 index 000000000..0ea3357cc --- /dev/null +++ b/buildSrc/src/main/kotlin/com/dfsek/terra/Utils.kt @@ -0,0 +1,49 @@ +package com.dfsek.terra + +import org.gradle.api.Action +import org.gradle.api.Project +import java.io.ByteArrayOutputStream + + +var isPrerelease = false + + +fun Project.getGitHash(): String { + val stdout = ByteArrayOutputStream() + exec { + commandLine = mutableListOf("git", "rev-parse", "--short", "HEAD") + standardOutput = stdout + } + return stdout.toString().trim() +} + +fun Project.gitClone(name: String) { + val stdout = ByteArrayOutputStream() + exec { + commandLine = mutableListOf("git", "clone", name) + standardOutput = stdout + } +} + +fun Project.forSubProjects(project: String, action: Action) { + project(project).subprojects.forEach { + action.execute(it) + } +} + +fun preRelease(preRelease: Boolean) { + isPrerelease = preRelease +} + +fun Project.versionProjects(project: String, version: String) { + forSubProjects(project) { + this.version = version + } +} + +fun Project.version(version: String): String { + return if (!isPrerelease) + version + else //Only use git hash if it's a prerelease. + "$version-BETA+${getGitHash()}" +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/com/dfsek/terra/VersionConfig.kt b/buildSrc/src/main/kotlin/com/dfsek/terra/VersionConfig.kt deleted file mode 100644 index 1f973e77a..000000000 --- a/buildSrc/src/main/kotlin/com/dfsek/terra/VersionConfig.kt +++ /dev/null @@ -1,37 +0,0 @@ -package com.dfsek.terra - -import org.apache.tools.ant.filters.ReplaceTokens -import org.gradle.api.Project -import org.gradle.kotlin.dsl.filter -import org.gradle.kotlin.dsl.withType -import org.gradle.language.jvm.tasks.ProcessResources - -var isPrerelease = false - -fun preRelease(preRelease: Boolean) { - isPrerelease = preRelease -} - -fun Project.versionProjects(project: String, version: String) { - project(project).subprojects.forEach { - it.version = version - } -} - -fun Project.version(version: String): String { - return if (!isPrerelease) - version - else //Only use git hash if it's a prerelease. - "$version-BETA+${getGitHash()}" -} - -fun Project.configureVersioning() { - tasks.withType { - include("**/*.*") - filter( - "tokens" to mapOf( - "VERSION" to version.toString() - ) - ) - } -} \ No newline at end of file diff --git a/common/implementation/base/src/main/java/com/dfsek/terra/addon/DependencySorter.java b/common/implementation/base/src/main/java/com/dfsek/terra/addon/DependencySorter.java index 14aaf74aa..a4cc53704 100644 --- a/common/implementation/base/src/main/java/com/dfsek/terra/addon/DependencySorter.java +++ b/common/implementation/base/src/main/java/com/dfsek/terra/addon/DependencySorter.java @@ -51,7 +51,7 @@ public class DependencySorter { if(!range.isSatisfiedBy(dependency.getVersion())) { throw new DependencyVersionException("Addon " + addon.getID() + " specifies dependency on " + id + ", versions " + range + - ", but non-matching version " + dependency.getVersion() + " is installed.."); + ", but non-matching version " + dependency.getVersion().getFormatted() + " is installed.."); } if(!visited.get(dependency.getID())) { // if we've not visited it yet