From 6dc4273728e9dfcf69f18cd2f11411f03e43bda4 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:14:58 -0500 Subject: [PATCH 01/16] Add dependency to locally built Nokee plugins Signed-off-by: Daniel Lacasse --- buildSrc/build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index de14e160a..f90366d0e 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -5,10 +5,12 @@ plugins { repositories { jcenter() gradlePluginPortal() + mavenLocal() } dependencies { implementation gradleApi() + implementation platform('dev.nokee:nokee-gradle-plugins:0.5.0-SNAPSHOT') implementation 'org.apache.httpcomponents.client5:httpclient5:5.0.1' implementation 'com.google.guava:guava:28.2-jre' implementation 'org.gradle:test-retry-gradle-plugin:1.1.8' From 8f97efc874d852caca0440a0a4db863f0d3240f5 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:16:00 -0500 Subject: [PATCH 02/16] Add JNI Nokee plugin to replace the current JNI plugin Signed-off-by: Daniel Lacasse --- buildSrc/build.gradle | 4 ++ .../main/java/gradlebuild/JniNokeePlugin.java | 44 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index f90366d0e..7acd42282 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -32,6 +32,10 @@ gradlePlugin { id = "gradlebuild.jni" implementationClass = "gradlebuild.JniPlugin" } + jniNokee { + id = "gradlebuild.jni-nokee" + implementationClass = "gradlebuild.JniNokeePlugin" + } nativeComponent { id = "gradlebuild.native-platform-component" implementationClass = "gradlebuild.NativePlatformComponentPlugin" diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java new file mode 100644 index 000000000..86278c61f --- /dev/null +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -0,0 +1,44 @@ +package gradlebuild; + +import org.gradle.api.Plugin; +import org.gradle.api.Project; +import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskProvider; +import org.gradle.language.cpp.tasks.CppCompile; + +import java.io.File; + +@SuppressWarnings("UnstableApiUsage") +public abstract class JniNokeePlugin implements Plugin { + + @Override + public void apply(Project project) { + project.getPluginManager().apply(NativePlatformComponentPlugin.class); + project.getPluginManager().apply("dev.nokee.jni-library"); + + configureNativeVersionGeneration(project); + } + + private void configureNativeVersionGeneration(Project project) { + NativePlatformVersionExtension nativeVersion = project.getExtensions().create("nativeVersion", NativePlatformVersionExtension.class); + + File generatedFilesDir = new File(project.getBuildDir(), "generated"); + + TaskProvider writeNativeVersionSources = project.getTasks().register("writeNativeVersionSources", WriteNativeVersionSources.class, task -> { + task.getGeneratedNativeHeaderDirectory().set(new File(generatedFilesDir, "version/header")); + task.getGeneratedJavaSourcesDir().set(new File(generatedFilesDir, "version/java")); + task.getVersionClassPackageName().set(nativeVersion.getVersionClassPackageName()); + task.getVersionClassName().set(nativeVersion.getVersionClassName()); + }); + + + project.getTasks().withType(CppCompile.class).configureEach(task -> + task.includes(writeNativeVersionSources.flatMap(WriteNativeVersionSources::getGeneratedNativeHeaderDirectory) + )); + JavaPluginConvention javaPluginConvention = project.getConvention().getPlugin(JavaPluginConvention.class); + javaPluginConvention.getSourceSets().getByName(SourceSet.MAIN_SOURCE_SET_NAME).java(javaSources -> + javaSources.srcDir(writeNativeVersionSources.flatMap(WriteNativeVersionSources::getGeneratedJavaSourcesDir)) + ); + } +} From fc6f1d62bfb9ec21e3acd8521c99aa0ff1598fba Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:29:43 -0500 Subject: [PATCH 03/16] First pass for building on current host (macOS) Signed-off-by: Daniel Lacasse --- file-events/build.gradle | 124 ++++++++++++++++++++++------------- native-platform/build.gradle | 91 ++++++++++++++----------- 2 files changed, 129 insertions(+), 86 deletions(-) diff --git a/file-events/build.gradle b/file-events/build.gradle index 89758aee9..9a654cafe 100755 --- a/file-events/build.gradle +++ b/file-events/build.gradle @@ -1,9 +1,11 @@ plugins { id 'groovy' - id 'cpp' - id 'gradlebuild.jni' + id 'dev.nokee.cpp-language' + id 'gradlebuild.jni-nokee' } +import dev.nokee.language.cpp.CppSourceSet + nativeVersion { versionClassPackageName = "net.rubygrapefruit.platform.internal.jni" versionClassName = "FileEventsVersion" @@ -19,49 +21,79 @@ javadoc { exclude '**/internal/**' } -model { - components { - nativePlatformFileEvents(NativeLibrarySpec) { - baseName 'native-platform-file-events' - $.platforms.each { p -> - targetPlatform p.name - } - binaries.all { - if (targetPlatform.operatingSystem.macOsX - || targetPlatform.operatingSystem.linux) { - cppCompiler.args "-g" // Produce debug output - cppCompiler.args "-pthread" // Force nicer threading - cppCompiler.args "-pedantic" // Disable non-standard things - cppCompiler.args "--std=c++11" // Enable C++11 - cppCompiler.args "-Wall" // All warnings - cppCompiler.args "-Wextra" // Plus extra - cppCompiler.args "-Wformat=2" // Check printf format strings - cppCompiler.args "-Werror" // Warnings are errors - cppCompiler.args "-Wno-format-nonliteral" // Allow printf to have dynamic format string - cppCompiler.args "-Wno-unguarded-availability-new" // Newly introduced flags are not available on older macOS versions - linker.args "-pthread" - } else if (targetPlatform.operatingSystem.windows) { - cppCompiler.args "/DEBUG" // Produce debug output - cppCompiler.args "/std:c++17" // Won't hurt - cppCompiler.args "/permissive-" // Make compiler more standards compatible - cppCompiler.args "/EHsc" // Force exception handling mode - cppCompiler.args "/Zi" // Force PDB debugging - cppCompiler.args "/FS" // Force synchronous PDB writes - cppCompiler.args "/Zc:inline" // Hack - cppCompiler.args "/Zc:throwingNew" // Assume new throws on error - cppCompiler.args "/W3" // Enable lots of warnings, disbale individual warnings with /WD - cppCompiler.args "/WX" // Warnings are errors - cppCompiler.args "/D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING" - // Don't issue warnings for wstring_convert in generic_fsnotifier.cpp - linker.args "/DEBUG:FULL" // Generate all PDBs - } - } - sources { - cpp { - source.srcDirs = ['src/file-events/cpp'] - exportedHeaders.srcDirs = ['src/file-events/headers'] - } - } - } +library { + baseName = 'native-platform-file-events' + sources.configureEach(CppSourceSet) { + source.from('src/file-events/cpp') + headers.from('src/file-events/headers') + headers.from(sources.java.flatMap { it.compileTask }.flatMap { it.options.headerOutputDirectory }) + } + tasks.configureEach(CppCompile) { + compilerArgs.addAll(targetPlatform.map { + [ + "-g", // Produce debug output + "-pthread", // Force nicer threading + "-pedantic", // Disable non-standard things + "--std=c++11", // Enable C++11 + "-Wall", // All warnings + "-Wextra", // Plus extra + "-Wformat=2", // Check printf format strings + "-Werror", // Warnings are errors + "-Wno-format-nonliteral", // Allow printf to have dynamic format string + "-Wno-unguarded-availability-new", // Newly introduced flags are not available on older macOS versions + ] + }) + } + tasks.configureEach(LinkSharedLibrary) { + linkerArgs.addAll(targetPlatform.map { + ["-pthread"] + }) } } + +//model { +// components { +// nativePlatformFileEvents(NativeLibrarySpec) { +// baseName 'native-platform-file-events' +// $.platforms.each { p -> +// targetPlatform p.name +// } +// binaries.all { +// if (targetPlatform.operatingSystem.macOsX +// || targetPlatform.operatingSystem.linux) { +// cppCompiler.args "-g" // Produce debug output +// cppCompiler.args "-pthread" // Force nicer threading +// cppCompiler.args "-pedantic" // Disable non-standard things +// cppCompiler.args "--std=c++11" // Enable C++11 +// cppCompiler.args "-Wall" // All warnings +// cppCompiler.args "-Wextra" // Plus extra +// cppCompiler.args "-Wformat=2" // Check printf format strings +// cppCompiler.args "-Werror" // Warnings are errors +// cppCompiler.args "-Wno-format-nonliteral" // Allow printf to have dynamic format string +// cppCompiler.args "-Wno-unguarded-availability-new" // Newly introduced flags are not available on older macOS versions +// linker.args "-pthread" +// } else if (targetPlatform.operatingSystem.windows) { +// cppCompiler.args "/DEBUG" // Produce debug output +// cppCompiler.args "/std:c++17" // Won't hurt +// cppCompiler.args "/permissive-" // Make compiler more standards compatible +// cppCompiler.args "/EHsc" // Force exception handling mode +// cppCompiler.args "/Zi" // Force PDB debugging +// cppCompiler.args "/FS" // Force synchronous PDB writes +// cppCompiler.args "/Zc:inline" // Hack +// cppCompiler.args "/Zc:throwingNew" // Assume new throws on error +// cppCompiler.args "/W3" // Enable lots of warnings, disbale individual warnings with /WD +// cppCompiler.args "/WX" // Warnings are errors +// cppCompiler.args "/D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING" +// // Don't issue warnings for wstring_convert in generic_fsnotifier.cpp +// linker.args "/DEBUG:FULL" // Generate all PDBs +// } +// } +// sources { +// cpp { +// source.srcDirs = ['src/file-events/cpp'] +// exportedHeaders.srcDirs = ['src/file-events/headers'] +// } +// } +// } +// } +//} diff --git a/native-platform/build.gradle b/native-platform/build.gradle index 24183a76e..7c6076fd5 100755 --- a/native-platform/build.gradle +++ b/native-platform/build.gradle @@ -1,12 +1,14 @@ plugins { id 'groovy' id 'java-test-fixtures' - id 'cpp' - id 'gradlebuild.jni' - id 'gradlebuild.freebsd' - id 'gradlebuild.ncurses' + id 'dev.nokee.cpp-language' + id 'gradlebuild.jni-nokee' +// id 'gradlebuild.freebsd' +// id 'gradlebuild.ncurses' } +import dev.nokee.language.cpp.CppSourceSet + nativeVersion { versionClassPackageName = "net.rubygrapefruit.platform.internal.jni" versionClassName = "NativeVersion" @@ -20,41 +22,50 @@ javadoc { exclude '**/internal/**' } -model { - components { - nativePlatform(NativeLibrarySpec) { - baseName 'native-platform' - $.platforms.each { p -> - if (p.name.contains("ncurses")) { - return - } - targetPlatform p.name - } - sources { - cpp { - source.srcDirs = ['src/shared/cpp', 'src/main/cpp'] - exportedHeaders.srcDirs = ['src/shared/headers'] - } - } - } - - nativePlatformCurses(NativeLibrarySpec) { - baseName 'native-platform-curses' - $.platforms.each { p -> - if (p.operatingSystem.windows) { - return - } - if (p.operatingSystem.linux && !p.name.contains("ncurses")) { - return - } - targetPlatform p.name - } - sources { - cpp { - source.srcDirs = ['src/shared/cpp', 'src/curses/cpp'] - exportedHeaders.srcDirs = ['src/shared/headers'] - } - } - } +library { + baseName = 'native-platform' + sources.configureEach(CppSourceSet) { + source.from('src/shared/cpp', 'src/main/cpp') + headers.from('src/shared/headers', 'build/generated/jni-headers/main') + headers.from(sources.java.flatMap { it.compileTask }.flatMap { it.options.headerOutputDirectory }) } } + +//model { +// components { +// nativePlatform(NativeLibrarySpec) { +// baseName 'native-platform' +// $.platforms.each { p -> +// if (p.name.contains("ncurses")) { +// return +// } +// targetPlatform p.name +// } +// sources { +// cpp { +// source.srcDirs = ['src/shared/cpp', 'src/main/cpp'] +// exportedHeaders.srcDirs = ['src/shared/headers'] +// } +// } +// } +// +// nativePlatformCurses(NativeLibrarySpec) { +// baseName 'native-platform-curses' +// $.platforms.each { p -> +// if (p.operatingSystem.windows) { +// return +// } +// if (p.operatingSystem.linux && !p.name.contains("ncurses")) { +// return +// } +// targetPlatform p.name +// } +// sources { +// cpp { +// source.srcDirs = ['src/shared/cpp', 'src/curses/cpp'] +// exportedHeaders.srcDirs = ['src/shared/headers'] +// } +// } +// } +// } +//} From 080a58a9496730b91633566122813c3c0df0bdc8 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:32:07 -0500 Subject: [PATCH 04/16] Configure target machines (OS and architecture) Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index 86278c61f..f6bc4d47b 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -1,13 +1,26 @@ package gradlebuild; +import com.google.common.collect.ImmutableSet; +import dev.nokee.platform.jni.JavaNativeInterfaceLibrary; +import dev.nokee.runtime.nativebase.TargetMachine; +import dev.nokee.runtime.nativebase.TargetMachineFactory; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginConvention; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskProvider; import org.gradle.language.cpp.tasks.CppCompile; +import org.gradle.model.Mutate; +import org.gradle.model.RuleSource; +import org.gradle.nativeplatform.platform.OperatingSystem; +import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform; +import org.gradle.nativeplatform.toolchain.Clang; +import org.gradle.nativeplatform.toolchain.Gcc; +import org.gradle.nativeplatform.toolchain.NativeToolChainRegistry; +import org.gradle.nativeplatform.toolchain.VisualCpp; import java.io.File; +import java.util.Set; @SuppressWarnings("UnstableApiUsage") public abstract class JniNokeePlugin implements Plugin { @@ -16,10 +29,28 @@ public abstract class JniNokeePlugin implements Plugin { public void apply(Project project) { project.getPluginManager().apply(NativePlatformComponentPlugin.class); project.getPluginManager().apply("dev.nokee.jni-library"); + project.getPluginManager().apply(NativeToolChainRules.class); + + configureMainLibrary(project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); configureNativeVersionGeneration(project); } + private void configureMainLibrary(JavaNativeInterfaceLibrary library) { + library.getTargetMachines().set(supportedMachines(library.getMachines())); + } + + private static Set supportedMachines(TargetMachineFactory machines) { + ImmutableSet.Builder result = ImmutableSet.builder(); + result.add(machines.os("osx").architecture("amd64")); + result.add(machines.os("osx").architecture("aarch64")); + result.add(machines.getLinux().architecture("amd64")); + result.add(machines.getLinux().architecture("aarch64")); + result.add(machines.getWindows().architecture("i386")); + result.add(machines.getWindows().architecture("amd64")); + return result.build(); + } + private void configureNativeVersionGeneration(Project project) { NativePlatformVersionExtension nativeVersion = project.getExtensions().create("nativeVersion", NativePlatformVersionExtension.class); @@ -41,4 +72,23 @@ private void configureNativeVersionGeneration(Project project) { javaSources.srcDir(writeNativeVersionSources.flatMap(WriteNativeVersionSources::getGeneratedJavaSourcesDir)) ); } + + public static class NativeToolChainRules extends RuleSource { + @Mutate + void createToolChains(NativeToolChainRegistry toolChainRegistry) { + toolChainRegistry.create("gcc", Gcc.class, toolChain -> { + // The core Gradle toolchain for gcc only targets x86 and x86_64 out of the box. + // https://github.com/gradle/gradle/blob/36614ee523e5906ddfa1fed9a5dc00a5addac1b0/subprojects/platform-native/src/main/java/org/gradle/nativeplatform/toolchain/internal/gcc/AbstractGccCompatibleToolChain.java + toolChain.target("linuxaarch64"); + }); + toolChainRegistry.create("clang", Clang.class, toolChain -> { + // The core Gradle toolchain for Clang only targets x86 and x86_64 out of the box. + OperatingSystem os = new DefaultNativePlatform("current").getOperatingSystem(); + if (os.isMacOsX()) { + toolChain.target("macosaarch64"); + } + }); + toolChainRegistry.create("visualCpp", VisualCpp.class); + } + } } From bad86fa7840c9440e96cf9e9bd235894d76314ed Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:42:59 -0500 Subject: [PATCH 05/16] Configure buildable variant names Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index f6bc4d47b..fa5a31b63 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -1,5 +1,6 @@ package gradlebuild; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import dev.nokee.platform.jni.JavaNativeInterfaceLibrary; import dev.nokee.runtime.nativebase.TargetMachine; @@ -32,10 +33,27 @@ public void apply(Project project) { project.getPluginManager().apply(NativeToolChainRules.class); configureMainLibrary(project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); + configureVariants(project); configureNativeVersionGeneration(project); } + private void configureVariants(Project project) { + JavaNativeInterfaceLibrary library = project.getExtensions().getByType(JavaNativeInterfaceLibrary.class); + VariantsExtension variants = project.getExtensions().getByType(VariantsExtension.class); + variants.getVariantNames().set(library.getVariants().flatMap(it -> { + if (it.getSharedLibrary().isBuildable()) { + return ImmutableList.of(toVariantName(it.getTargetMachine())); + } else { + return ImmutableList.of(); + } + })); + } + + private static String toVariantName(TargetMachine targetMachine) { + return targetMachine.getOperatingSystemFamily().getName() + "-" + targetMachine.getArchitecture().getName(); + } + private void configureMainLibrary(JavaNativeInterfaceLibrary library) { library.getTargetMachines().set(supportedMachines(library.getMachines())); } From 70ea6fa6893ba605243040f9dac819cd6234a5dd Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 12:49:04 -0500 Subject: [PATCH 06/16] Add configuration of the main JAR POM Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index fa5a31b63..93ae1b5e5 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -5,9 +5,12 @@ import dev.nokee.platform.jni.JavaNativeInterfaceLibrary; import dev.nokee.runtime.nativebase.TargetMachine; import dev.nokee.runtime.nativebase.TargetMachineFactory; +import groovy.util.Node; import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.publish.PublishingExtension; +import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.tasks.SourceSet; import org.gradle.api.tasks.TaskProvider; import org.gradle.language.cpp.tasks.CppCompile; @@ -29,6 +32,7 @@ public abstract class JniNokeePlugin implements Plugin { @Override public void apply(Project project) { project.getPluginManager().apply(NativePlatformComponentPlugin.class); + VariantsExtension variants = project.getExtensions().getByType(VariantsExtension.class); project.getPluginManager().apply("dev.nokee.jni-library"); project.getPluginManager().apply(NativeToolChainRules.class); @@ -36,6 +40,8 @@ public void apply(Project project) { configureVariants(project); configureNativeVersionGeneration(project); + + configurePomOfMainJar(project, variants); } private void configureVariants(Project project) { @@ -91,6 +97,23 @@ private void configureNativeVersionGeneration(Project project) { ); } + private void configurePomOfMainJar(Project project, VariantsExtension variants) { + project.getExtensions().configure( + PublishingExtension.class, + extension -> extension.getPublications().named("main", MavenPublication.class, main -> + main.getPom().withXml(xmlProvider -> { + Node node = xmlProvider.asNode(); + Node deps = node.appendNode("dependencies"); + variants.getVariantNames().get().forEach(variantName -> { + Node dep = deps.appendNode("dependency"); + dep.appendNode("groupId", project.getGroup()); + dep.appendNode("artifactId", main.getArtifactId() + "-" + variantName); + dep.appendNode("version", project.getVersion()); + dep.appendNode("scope", "runtime"); + }); + }))); + } + public static class NativeToolChainRules extends RuleSource { @Mutate void createToolChains(NativeToolChainRegistry toolChainRegistry) { From f3289027e1cf5c1389d95569d8f81a1c33132e73 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:00:21 -0500 Subject: [PATCH 07/16] Respect onlyLocalVariants Gradle property Signed-off-by: Daniel Lacasse --- buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index 93ae1b5e5..d95496780 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -9,6 +9,7 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.provider.ProviderFactory; import org.gradle.api.publish.PublishingExtension; import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.tasks.SourceSet; @@ -48,10 +49,12 @@ private void configureVariants(Project project) { JavaNativeInterfaceLibrary library = project.getExtensions().getByType(JavaNativeInterfaceLibrary.class); VariantsExtension variants = project.getExtensions().getByType(VariantsExtension.class); variants.getVariantNames().set(library.getVariants().flatMap(it -> { - if (it.getSharedLibrary().isBuildable()) { - return ImmutableList.of(toVariantName(it.getTargetMachine())); - } else { + // Only depend on variants which can be built on the current machine + boolean onlyLocalVariants = project.getProviders().gradleProperty("onlyLocalVariants").forUseAtConfigurationTime().isPresent(); + if (onlyLocalVariants && !it.getSharedLibrary().isBuildable()) { return ImmutableList.of(); + } else { + return ImmutableList.of(toVariantName(it.getTargetMachine())); } })); } From 6285ad40e77ab67774a127d8c57613792227d11d Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:00:53 -0500 Subject: [PATCH 08/16] Configure compiler and linker arguments Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index d95496780..1c47e08f6 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -19,6 +19,7 @@ import org.gradle.model.RuleSource; import org.gradle.nativeplatform.platform.OperatingSystem; import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform; +import org.gradle.nativeplatform.tasks.LinkSharedLibrary; import org.gradle.nativeplatform.toolchain.Clang; import org.gradle.nativeplatform.toolchain.Gcc; import org.gradle.nativeplatform.toolchain.NativeToolChainRegistry; @@ -65,6 +66,32 @@ private static String toVariantName(TargetMachine targetMachine) { private void configureMainLibrary(JavaNativeInterfaceLibrary library) { library.getTargetMachines().set(supportedMachines(library.getMachines())); + library.getTasks().configureEach(CppCompile.class, task -> { + task.getCompilerArgs().addAll(task.getTargetPlatform().map(targetPlatform -> { + OperatingSystem targetOs = targetPlatform.getOperatingSystem(); + if (targetOs.isMacOsX()) { + return ImmutableList.of("-mmacosx-version-min=10.9"); + } else if (targetOs.isLinux()) { + return ImmutableList.of("-D_FILE_OFFSET_BITS=64"); + } else { + return ImmutableList.of(); // do nothing + } + })); + }); + library.getTasks().configureEach(LinkSharedLibrary.class, task -> { + task.getLinkerArgs().addAll(task.getTargetPlatform().map(targetPlatform -> { + OperatingSystem targetOs = targetPlatform.getOperatingSystem(); + if (targetOs.isMacOsX()) { + return ImmutableList.of( + "-mmacosx-version-min=10.9", + "-framework", "CoreServices"); + } else if (targetOs.isWindows()) { + return ImmutableList.of("Shlwapi.lib", "Advapi32.lib"); + } else { + return ImmutableList.of(); // do nothing + } + })); + }); } private static Set supportedMachines(TargetMachineFactory machines) { From 4edc4b7b50a2325376f1dab1ba89ba4f67b8acca Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:04:58 -0500 Subject: [PATCH 09/16] Configure Windows distribution (WINDOWS_MIN) As of this commit, the axis is not present so the configuration has no effect. Signed-off-by: Daniel Lacasse --- .../src/main/java/gradlebuild/JniNokeePlugin.java | 7 +++++++ .../main/java/gradlebuild/WindowsDistribution.java | 12 ++++++++++++ 2 files changed, 19 insertions(+) create mode 100644 buildSrc/src/main/java/gradlebuild/WindowsDistribution.java diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index 1c47e08f6..472c81f6e 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -92,6 +92,13 @@ private void configureMainLibrary(JavaNativeInterfaceLibrary library) { } })); }); + library.getVariants().configureEach(variant -> { + if (variant.getBuildVariant().hasAxisOf(WindowsDistribution.WINDOWS_XP_OR_LOWER)) { + variant.getTasks().configureEach(CppCompile.class, task -> { + task.getCompilerArgs().add("/DWINDOWS_MIN"); + }); + } + }); } private static Set supportedMachines(TargetMachineFactory machines) { diff --git a/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java b/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java new file mode 100644 index 000000000..845be7ba0 --- /dev/null +++ b/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java @@ -0,0 +1,12 @@ +package gradlebuild; + +import org.gradle.api.Named; + +public enum WindowsDistribution implements Named { + WINDOWS_XP_OR_LOWER, WINDOWS_VISTA_OR_HIGHER; + + @Override + public String getName() { + return name(); + } +} From 73dc4e87c0c8ffe819dde4c4c8f303c2637dee89 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:19:10 -0500 Subject: [PATCH 10/16] Migrate file-events compiler and linker arguments Signed-off-by: Daniel Lacasse --- file-events/build.gradle | 100 ++++++++++++++++----------------------- 1 file changed, 40 insertions(+), 60 deletions(-) diff --git a/file-events/build.gradle b/file-events/build.gradle index 9a654cafe..b28484512 100755 --- a/file-events/build.gradle +++ b/file-events/build.gradle @@ -30,70 +30,50 @@ library { } tasks.configureEach(CppCompile) { compilerArgs.addAll(targetPlatform.map { - [ - "-g", // Produce debug output - "-pthread", // Force nicer threading - "-pedantic", // Disable non-standard things - "--std=c++11", // Enable C++11 - "-Wall", // All warnings - "-Wextra", // Plus extra - "-Wformat=2", // Check printf format strings - "-Werror", // Warnings are errors - "-Wno-format-nonliteral", // Allow printf to have dynamic format string - "-Wno-unguarded-availability-new", // Newly introduced flags are not available on older macOS versions - ] + if (it.operatingSystem.macOsX + || it.operatingSystem.linux) { + [ + "-g", // Produce debug output + "-pthread", // Force nicer threading + "-pedantic", // Disable non-standard things + "--std=c++11", // Enable C++11 + "-Wall", // All warnings + "-Wextra", // Plus extra + "-Wformat=2", // Check printf format strings + "-Werror", // Warnings are errors + "-Wno-format-nonliteral", // Allow printf to have dynamic format string + "-Wno-unguarded-availability-new", // Newly introduced flags are not available on older macOS versions + ] + } else if (it.operatingSystem.windows) { + [ + "/DEBUG", // Produce debug output + "/std:c++17", // Won't hurt + "/permissive-", // Make compiler more standards compatible + "/EHsc", // Force exception handling mode + "/Zi", // Force PDB debugging + "/FS", // Force synchronous PDB writes + "/Zc:inline", // Hack + "/Zc:throwingNew", // Assume new throws on error + "/W3", // Enable lots of warnings, disbale individual warnings with /WD + "/WX", // Warnings are errors + "/D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING", + // Don't issue warnings for wstring_convert in generic_fsnotifier.cpp + ] + } else { + [] + } }) } tasks.configureEach(LinkSharedLibrary) { linkerArgs.addAll(targetPlatform.map { - ["-pthread"] + if (it.operatingSystem.macOsX + || it.operatingSystem.linux) { + ["-pthread"] + } else if (it.operatingSystem.windows) { + ["/DEBUG:FULL"] // Generate all PDBs + } else { + [] + } }) } } - -//model { -// components { -// nativePlatformFileEvents(NativeLibrarySpec) { -// baseName 'native-platform-file-events' -// $.platforms.each { p -> -// targetPlatform p.name -// } -// binaries.all { -// if (targetPlatform.operatingSystem.macOsX -// || targetPlatform.operatingSystem.linux) { -// cppCompiler.args "-g" // Produce debug output -// cppCompiler.args "-pthread" // Force nicer threading -// cppCompiler.args "-pedantic" // Disable non-standard things -// cppCompiler.args "--std=c++11" // Enable C++11 -// cppCompiler.args "-Wall" // All warnings -// cppCompiler.args "-Wextra" // Plus extra -// cppCompiler.args "-Wformat=2" // Check printf format strings -// cppCompiler.args "-Werror" // Warnings are errors -// cppCompiler.args "-Wno-format-nonliteral" // Allow printf to have dynamic format string -// cppCompiler.args "-Wno-unguarded-availability-new" // Newly introduced flags are not available on older macOS versions -// linker.args "-pthread" -// } else if (targetPlatform.operatingSystem.windows) { -// cppCompiler.args "/DEBUG" // Produce debug output -// cppCompiler.args "/std:c++17" // Won't hurt -// cppCompiler.args "/permissive-" // Make compiler more standards compatible -// cppCompiler.args "/EHsc" // Force exception handling mode -// cppCompiler.args "/Zi" // Force PDB debugging -// cppCompiler.args "/FS" // Force synchronous PDB writes -// cppCompiler.args "/Zc:inline" // Hack -// cppCompiler.args "/Zc:throwingNew" // Assume new throws on error -// cppCompiler.args "/W3" // Enable lots of warnings, disbale individual warnings with /WD -// cppCompiler.args "/WX" // Warnings are errors -// cppCompiler.args "/D_SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING" -// // Don't issue warnings for wstring_convert in generic_fsnotifier.cpp -// linker.args "/DEBUG:FULL" // Generate all PDBs -// } -// } -// sources { -// cpp { -// source.srcDirs = ['src/file-events/cpp'] -// exportedHeaders.srcDirs = ['src/file-events/headers'] -// } -// } -// } -// } -//} From 0a6cfa965d9e5e2639705463f8114dfbee11a27e Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:19:44 -0500 Subject: [PATCH 11/16] Fold ncurses and non-ncurses variant into single component The Ncurses dimension is not configure as of this commit. However, the configuration will be the same. Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/NcursesVersion.java | 18 ++++++++ native-platform/build.gradle | 45 +++---------------- 2 files changed, 24 insertions(+), 39 deletions(-) create mode 100644 buildSrc/src/main/java/gradlebuild/NcursesVersion.java diff --git a/buildSrc/src/main/java/gradlebuild/NcursesVersion.java b/buildSrc/src/main/java/gradlebuild/NcursesVersion.java new file mode 100644 index 000000000..0e6f066cd --- /dev/null +++ b/buildSrc/src/main/java/gradlebuild/NcursesVersion.java @@ -0,0 +1,18 @@ +package gradlebuild; + +import org.gradle.api.Named; + +public enum NcursesVersion implements Named { + NCURSES_5("5"), NCURSES_6("6"); + + private final String versionNumber; + + NcursesVersion(String versionNumber) { + this.versionNumber = versionNumber; + } + + @Override + public String getName() { + return "ncurses" + versionNumber; + } +} diff --git a/native-platform/build.gradle b/native-platform/build.gradle index 7c6076fd5..2485f70ed 100755 --- a/native-platform/build.gradle +++ b/native-platform/build.gradle @@ -8,6 +8,7 @@ plugins { } import dev.nokee.language.cpp.CppSourceSet +import gradlebuild.NcursesVersion nativeVersion { versionClassPackageName = "net.rubygrapefruit.platform.internal.jni" @@ -29,43 +30,9 @@ library { headers.from('src/shared/headers', 'build/generated/jni-headers/main') headers.from(sources.java.flatMap { it.compileTask }.flatMap { it.options.headerOutputDirectory }) } + variants.configureEach { + if (NcursesVersion.values().any { buildVariant.hasAxisOf(it) }) { + baseName = 'native-platform-curses' + } + } } - -//model { -// components { -// nativePlatform(NativeLibrarySpec) { -// baseName 'native-platform' -// $.platforms.each { p -> -// if (p.name.contains("ncurses")) { -// return -// } -// targetPlatform p.name -// } -// sources { -// cpp { -// source.srcDirs = ['src/shared/cpp', 'src/main/cpp'] -// exportedHeaders.srcDirs = ['src/shared/headers'] -// } -// } -// } -// -// nativePlatformCurses(NativeLibrarySpec) { -// baseName 'native-platform-curses' -// $.platforms.each { p -> -// if (p.operatingSystem.windows) { -// return -// } -// if (p.operatingSystem.linux && !p.name.contains("ncurses")) { -// return -// } -// targetPlatform p.name -// } -// sources { -// cpp { -// source.srcDirs = ['src/shared/cpp', 'src/curses/cpp'] -// exportedHeaders.srcDirs = ['src/shared/headers'] -// } -// } -// } -// } -//} From 0efaeae1163c7ac57744905ae2e3e3dc1f82492f Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:31:58 -0500 Subject: [PATCH 12/16] Add component sources to project source set We manually write the generated JNI headers to the C++ compile task instead of using the C++ source set as there seems to be a cycle in the configuration that uses writeNativeVersionSources. It's most likely due to up-to-date checks. Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 27 ++++++++++++++++++- file-events/build.gradle | 1 - native-platform/build.gradle | 1 - 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index 472c81f6e..9c53be4a6 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -2,6 +2,7 @@ import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import dev.nokee.language.cpp.CppSourceSet; import dev.nokee.platform.jni.JavaNativeInterfaceLibrary; import dev.nokee.runtime.nativebase.TargetMachine; import dev.nokee.runtime.nativebase.TargetMachineFactory; @@ -9,11 +10,12 @@ import org.gradle.api.Plugin; import org.gradle.api.Project; import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.provider.ProviderFactory; import org.gradle.api.publish.PublishingExtension; import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.tasks.SourceSet; +import org.gradle.api.tasks.TaskContainer; import org.gradle.api.tasks.TaskProvider; +import org.gradle.api.tasks.compile.JavaCompile; import org.gradle.language.cpp.tasks.CppCompile; import org.gradle.model.Mutate; import org.gradle.model.RuleSource; @@ -38,8 +40,10 @@ public void apply(Project project) { project.getPluginManager().apply("dev.nokee.jni-library"); project.getPluginManager().apply(NativeToolChainRules.class); + configureCppTasks(project); configureMainLibrary(project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); configureVariants(project); + addComponentSourcesSetsToProjectSourceSet(project.getTasks(), project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); configureNativeVersionGeneration(project); @@ -101,6 +105,27 @@ private void configureMainLibrary(JavaNativeInterfaceLibrary library) { }); } + private void addComponentSourcesSetsToProjectSourceSet(TaskContainer tasks, JavaNativeInterfaceLibrary library) { + tasks.withType(WriteNativeVersionSources.class, task -> { + task.getNativeSources().from(library.getSources().flatMap(sourceSet -> { + if (sourceSet instanceof CppSourceSet) { + return ImmutableList.of(sourceSet.getSourceDirectories(), ((CppSourceSet) sourceSet).getHeaders().getSourceDirectories()); + } else { + return ImmutableList.of(); + } + })); + }); + } + + private void configureCppTasks(Project project) { + TaskContainer tasks = project.getTasks(); + TaskProvider compileJavaProvider = tasks.named("compileJava", JavaCompile.class); + tasks.withType(CppCompile.class) + .configureEach(task -> task.includes( + compileJavaProvider.flatMap(it -> it.getOptions().getHeaderOutputDirectory()) + )); + } + private static Set supportedMachines(TargetMachineFactory machines) { ImmutableSet.Builder result = ImmutableSet.builder(); result.add(machines.os("osx").architecture("amd64")); diff --git a/file-events/build.gradle b/file-events/build.gradle index b28484512..831c5fad3 100755 --- a/file-events/build.gradle +++ b/file-events/build.gradle @@ -26,7 +26,6 @@ library { sources.configureEach(CppSourceSet) { source.from('src/file-events/cpp') headers.from('src/file-events/headers') - headers.from(sources.java.flatMap { it.compileTask }.flatMap { it.options.headerOutputDirectory }) } tasks.configureEach(CppCompile) { compilerArgs.addAll(targetPlatform.map { diff --git a/native-platform/build.gradle b/native-platform/build.gradle index 2485f70ed..3fde69e94 100755 --- a/native-platform/build.gradle +++ b/native-platform/build.gradle @@ -28,7 +28,6 @@ library { sources.configureEach(CppSourceSet) { source.from('src/shared/cpp', 'src/main/cpp') headers.from('src/shared/headers', 'build/generated/jni-headers/main') - headers.from(sources.java.flatMap { it.compileTask }.flatMap { it.options.headerOutputDirectory }) } variants.configureEach { if (NcursesVersion.values().any { buildVariant.hasAxisOf(it) }) { From 50a8eee8df17582f54b145162b3baf631ecfb4ce Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 13:46:54 -0500 Subject: [PATCH 13/16] Configure resource path to expected value (group + platform + variant) Signed-off-by: Daniel Lacasse --- .../src/main/java/gradlebuild/JniNokeePlugin.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index 9c53be4a6..eaa124403 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -41,7 +41,7 @@ public void apply(Project project) { project.getPluginManager().apply(NativeToolChainRules.class); configureCppTasks(project); - configureMainLibrary(project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); + configureMainLibrary(project); configureVariants(project); addComponentSourcesSetsToProjectSourceSet(project.getTasks(), project.getExtensions().getByType(JavaNativeInterfaceLibrary.class)); @@ -68,7 +68,8 @@ private static String toVariantName(TargetMachine targetMachine) { return targetMachine.getOperatingSystemFamily().getName() + "-" + targetMachine.getArchitecture().getName(); } - private void configureMainLibrary(JavaNativeInterfaceLibrary library) { + private void configureMainLibrary(Project project) { + JavaNativeInterfaceLibrary library = project.getExtensions().getByType(JavaNativeInterfaceLibrary.class); library.getTargetMachines().set(supportedMachines(library.getMachines())); library.getTasks().configureEach(CppCompile.class, task -> { task.getCompilerArgs().addAll(task.getTargetPlatform().map(targetPlatform -> { @@ -103,6 +104,12 @@ private void configureMainLibrary(JavaNativeInterfaceLibrary library) { }); } }); + library.getVariants().configureEach(variant -> { + variant.getResourcePath().set(String.join("/", + project.getGroup().toString().replace('.', '/'), + "platform", + toVariantName(variant.getTargetMachine()))); + }); } private void addComponentSourcesSetsToProjectSourceSet(TaskContainer tasks, JavaNativeInterfaceLibrary library) { From e4ebad43e2fe073d7c43263b4749c1994053f473 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Sat, 27 Nov 2021 14:12:01 -0500 Subject: [PATCH 14/16] Remove reference to generated JNI headers They are wired in from within the JniNokeePlugin. Signed-off-by: Daniel Lacasse --- native-platform/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native-platform/build.gradle b/native-platform/build.gradle index 3fde69e94..76aa25122 100755 --- a/native-platform/build.gradle +++ b/native-platform/build.gradle @@ -27,7 +27,7 @@ library { baseName = 'native-platform' sources.configureEach(CppSourceSet) { source.from('src/shared/cpp', 'src/main/cpp') - headers.from('src/shared/headers', 'build/generated/jni-headers/main') + headers.from('src/shared/headers') } variants.configureEach { if (NcursesVersion.values().any { buildVariant.hasAxisOf(it) }) { From a0f849174bbd2419117790d568bbe6ee256b9e0f Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Mon, 29 Nov 2021 17:49:38 -0500 Subject: [PATCH 15/16] Register Windows distribution axis We also changed the named for the enum values so it better reflect the original naming. Signed-off-by: Daniel Lacasse --- .../main/java/gradlebuild/JniNokeePlugin.java | 9 +++++++++ .../java/gradlebuild/WindowsDistribution.java | 18 ++++++++++++------ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java index eaa124403..6883c9975 100644 --- a/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java +++ b/buildSrc/src/main/java/gradlebuild/JniNokeePlugin.java @@ -9,7 +9,9 @@ import groovy.util.Node; import org.gradle.api.Plugin; import org.gradle.api.Project; +import org.gradle.api.plugins.ExtensionAware; import org.gradle.api.plugins.JavaPluginConvention; +import org.gradle.api.provider.SetProperty; import org.gradle.api.publish.PublishingExtension; import org.gradle.api.publish.maven.MavenPublication; import org.gradle.api.tasks.SourceSet; @@ -70,6 +72,7 @@ private static String toVariantName(TargetMachine targetMachine) { private void configureMainLibrary(Project project) { JavaNativeInterfaceLibrary library = project.getExtensions().getByType(JavaNativeInterfaceLibrary.class); + registerWindowsDistributionDimension(library); library.getTargetMachines().set(supportedMachines(library.getMachines())); library.getTasks().configureEach(CppCompile.class, task -> { task.getCompilerArgs().addAll(task.getTargetPlatform().map(targetPlatform -> { @@ -112,6 +115,12 @@ private void configureMainLibrary(Project project) { }); } + private void registerWindowsDistributionDimension(JavaNativeInterfaceLibrary library) { + SetProperty newDimension = library.getDimensions().newAxis(WindowsDistribution.class, builder -> builder.onlyOn(library.getMachines().getWindows().getOperatingSystemFamily())); + newDimension.convention(ImmutableSet.copyOf(WindowsDistribution.values())); + ((ExtensionAware) library).getExtensions().add("targetWindowsDistributions", newDimension); + } + private void addComponentSourcesSetsToProjectSourceSet(TaskContainer tasks, JavaNativeInterfaceLibrary library) { tasks.withType(WriteNativeVersionSources.class, task -> { task.getNativeSources().from(library.getSources().flatMap(sourceSet -> { diff --git a/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java b/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java index 845be7ba0..4d8c414e7 100644 --- a/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java +++ b/buildSrc/src/main/java/gradlebuild/WindowsDistribution.java @@ -3,10 +3,16 @@ import org.gradle.api.Named; public enum WindowsDistribution implements Named { - WINDOWS_XP_OR_LOWER, WINDOWS_VISTA_OR_HIGHER; - - @Override - public String getName() { - return name(); - } + WINDOWS_XP_OR_LOWER { + @Override + public String getName() { + return "min"; + } + }, + WINDOWS_VISTA_OR_HIGHER { + @Override + public String getName() { + return ""; + } + }; } From df9518664d8f0564849f6ef632aa8576e84681c6 Mon Sep 17 00:00:00 2001 From: Daniel Lacasse Date: Wed, 1 Dec 2021 11:53:41 -0500 Subject: [PATCH 16/16] Use integration release instead of local snapshot Signed-off-by: Daniel Lacasse --- buildSrc/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/buildSrc/build.gradle b/buildSrc/build.gradle index 7acd42282..f8ab27fe5 100644 --- a/buildSrc/build.gradle +++ b/buildSrc/build.gradle @@ -5,12 +5,12 @@ plugins { repositories { jcenter() gradlePluginPortal() - mavenLocal() + maven { url = 'https://repo.nokee.dev/snapshot' } } dependencies { implementation gradleApi() - implementation platform('dev.nokee:nokee-gradle-plugins:0.5.0-SNAPSHOT') + implementation platform('dev.nokee:nokee-gradle-plugins:0.4.1229-202112011142.4a01703c') implementation 'org.apache.httpcomponents.client5:httpclient5:5.0.1' implementation 'com.google.guava:guava:28.2-jre' implementation 'org.gradle:test-retry-gradle-plugin:1.1.8'