forked from urho3d/urho3d
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild.gradle.kts
109 lines (100 loc) · 3.4 KB
/
build.gradle.kts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
// Copyright (c) 2008-2022 the Urho3D project
// License: MIT
import org.gradle.internal.io.NullOutputStream
import java.io.ByteArrayOutputStream
buildscript {
extra["kotlinVersion"] = "1.4.10"
val kotlinVersion: String by extra
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:4.2.0+")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion")
}
}
plugins {
id("com.jfrog.bintray") version "1.8.5" apply false
}
val kotlinVersion: String by ext
allprojects {
group = "io.urho3d"
version = determineVersion()
description = """
Urho3D is a free lightweight, cross-platform 2D and 3D game engine implemented in C++ and
released under the MIT license. Greatly inspired by OGRE and Horde3D.
""".trimIndent().replace('\n', ' ')
repositories {
google()
mavenCentral()
}
buildscript {
ext {
set("kotlinVersion", kotlinVersion)
set("ndkSideBySideVersion", "21.3.6528147")
set("cmakeVersion", "3.17.3+")
set("buildStagingDir", ".cxx")
}
}
}
tasks {
wrapper {
distributionType = Wrapper.DistributionType.ALL
}
"prepareKotlinBuildScriptModel" {
listOf("Debug", "Release").forEach {
dependsOn(":android:urho3d-lib:generateJsonModel$it")
}
}
register<Delete>("clean") {
// Clean the build artifacts generated by the Gradle build system only, but keep the buildDir
rootProject.buildDir.listFiles { _, name -> name == "intermediates" || name == "kotlin" }?.let {
delete = it.toSet()
}
}
register<Delete>("cleanAll") {
dependsOn("clean")
}
register("aarVersion") {
doLast {
println("AAR version: ${determineVersion()}")
}
}
}
/**
* Find the most recent tag that is reachable from a commit and use that to set the Gradle's project version.
*
* e.g. commit described as "1.7-664-g34b1" will be mapped to "1.8-SNAPSHOT", (development snapshot for next version)
* tag "1.8" will be mapped to "1.8" as is (point release version), so does tag "1.8-RC" (release candidate)
*/
fun determineVersion(): String {
// If it is explicitly specified then use the specified version instead
System.getenv("GRADLE_PROJECT_VERSION")?.let { return it }
val desc = describeCommit()
return Regex("^(.+?)-\\d").find(desc)?.destructured?.component1()?.let { "${bumpSemVer(it, 1)}-SNAPSHOT" } ?: desc
}
/**
* Find the most recent tag that is reachable from a commit.
*/
fun describeCommit(sha: String? = null) = ByteArrayOutputStream().also {
exec {
commandLine = listOf("git", "describe", "--tags", sha ?: "--dirty")
standardOutput = it
errorOutput = NullOutputStream.INSTANCE
isIgnoreExitValue = true // In case no GIT command line tool or not a GIT repository
}
}.toString().trim().let { if (it.isBlank()) "Unversioned" else it }
/**
* Bump the semantic versioning on the specified index, 0 for major version, 1 for minor version, and so on.
*/
fun bumpSemVer(version: String, index: Int) = version
.split('.')
.mapIndexed { i: Int, s: String ->
when {
i < index -> s
i == index -> if (s.contains('-')) s else (s.toInt() + 1).toString()
else -> "0"
}
}
.joinToString(".")