1- import org.gradle.internal.extensions.stdlib.capitalized
1+ import dev.silenium.libs.jni.NativePlatform
2+ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
3+ import org.jetbrains.kotlin.gradle.dsl.KotlinVersion
4+
5+ buildscript {
6+ repositories {
7+ maven(" https://reposilite.silenium.dev/releases" ) {
8+ name = " silenium-releases"
9+ }
10+ }
11+ dependencies {
12+ classpath(libs.jni.utils)
13+ }
14+ }
215
316plugins {
4- base
17+ alias(libs.plugins.kotlin)
518 `maven- publish`
619}
720
8- group = " dev.silenium.libs"
21+ group = " dev.silenium.libs.ffmpeg "
922version = findProperty(" deploy.version" ) as String? ? : " 0.0.0-SNAPSHOT"
1023
11- val platformTxt = layout.buildDirectory.file(" platform.txt" ).apply {
12- get().asFile.parentFile.mkdirs()
24+ repositories {
25+ mavenCentral()
26+ maven(" https://reposilite.silenium.dev/releases" ) {
27+ name = " silenium-releases"
28+ }
1329}
14- exec {
15- commandLine(
16- " bash" ,
17- " -c" ,
18- " bash " + layout.projectDirectory.file(" detect-platform.sh" ).asFile.absolutePath + " > " + platformTxt.get().asFile.absolutePath,
19- )
20- workingDir(layout.projectDirectory.asFile)
21- }.assertNormalExitValue()
22- val platform: String = platformTxt.get().asFile.readText().trim()
23- val platformExtension = findProperty(" native.extension" ) as String? ? : " "
24- logger.lifecycle(" Building for platform: $platform${platformExtension} " )
2530
26- val compileDir = layout.projectDirectory.dir(" ffmpeg/cppbuild/${platform}${platformExtension} " )
31+ dependencies {
32+ implementation(libs.jni.utils)
33+ }
34+
35+ val withGPL: Boolean = findProperty(" ffmpeg.gpl" )?.toString()?.toBoolean() ? : false
36+ val platformExtension = " -gpl" .takeIf { withGPL }.orEmpty()
37+ val platform = NativePlatform .platform(platformExtension)
2738
2839val compileNative by tasks.registering(Exec ::class ) {
2940 commandLine(
3041 " bash" ,
3142 layout.projectDirectory.file(" cppbuild.sh" ).asFile.absolutePath,
32- " -extension" , platformExtension,
33- " install" ,
43+ " -extension" , platform.extension,
44+ " -platform" , platform.osArch,
45+ " install" , " ffmpeg" ,
3446 )
3547 workingDir(layout.projectDirectory.asFile)
36- environment(" PROJECTS" to " ffmpeg" )
3748
3849 inputs.property(" platform" , platform)
50+ inputs.files(layout.projectDirectory.files(" cppbuild.sh" ))
51+ inputs.files(layout.projectDirectory.files(" detect-platform.sh" ))
52+ inputs.files(layout.projectDirectory.files(" ffmpeg/cppbuild.sh" ))
3953 inputs.files(layout.projectDirectory.files(" ffmpeg/*.patch" ))
4054 inputs.files(layout.projectDirectory.files(" ffmpeg/*.diff" ))
41- inputs.files(layout.projectDirectory.files(" ffmpeg/cppbuild.sh" ))
42- outputs.dir(compileDir)
55+ outputs.dir(layout.projectDirectory.dir(" ffmpeg/cppbuild/${platform} " ))
4356 outputs.cacheIf { true }
4457}
4558
46- tasks.build {
47- dependsOn(compileNative)
48- }
59+ tasks.processResources {
60+ val platform = NativePlatform .platform(platformExtension)
4961
50- val bundleJar by tasks.registering(Jar ::class ) {
5162 from(compileNative.get().outputs.files) {
5263 include(" lib/*.so" )
5364 include(" lib/*.dll" )
5465 include(" lib/*.dylib" )
5566 eachFile {
56- path = " natives/$platform /${ this . name} "
67+ path = " natives/$platform /$name "
5768 }
5869 into(" natives/$platform /" )
5970 }
@@ -68,12 +79,24 @@ val zipBuild by tasks.registering(Zip::class) {
6879 }
6980}
7081
82+ kotlin {
83+ compilerOptions {
84+ jvmTarget = JvmTarget .JVM_1_8
85+ languageVersion = KotlinVersion .KOTLIN_1_7
86+ }
87+ jvmToolchain(8 )
88+ }
89+
90+ java {
91+ withSourcesJar()
92+ }
93+
7194publishing {
7295 publications {
73- create<MavenPublication >(" native${platform.split( " - " ).joinToString( " " ) { it. capitalized() } } " ) {
74- artifact(bundleJar )
96+ create<MavenPublication >(" native${platform.capitalized} " ) {
97+ from(components[ " java " ] )
7598 artifact(zipBuild)
76- artifactId = " ffmpeg-natives-${platform}${platformExtension} "
99+ artifactId = " ffmpeg-natives-${platform} "
77100 }
78101 }
79102
0 commit comments