aboutsummaryrefslogtreecommitdiffstats
path: root/z3/buildSrc/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'z3/buildSrc/src/main')
-rw-r--r--z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java48
-rw-r--r--z3/buildSrc/src/main/kotlin/tools/refinery/z3/gradle/java-library.gradle.kts75
2 files changed, 123 insertions, 0 deletions
diff --git a/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java b/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java
new file mode 100644
index 00000000..5ac56005
--- /dev/null
+++ b/z3/buildSrc/src/main/java/tools/refinery/z3/gradle/ClassFilePatcher.java
@@ -0,0 +1,48 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6package tools.refinery.z3.gradle;
7
8import org.objectweb.asm.*;
9
10import java.io.File;
11import java.io.FileInputStream;
12import java.io.FileOutputStream;
13import java.io.IOException;
14
15public final class ClassFilePatcher {
16 private ClassFilePatcher() {
17 throw new IllegalStateException("This is a static utility class and should not be instantiated directly");
18 }
19
20 public static void removeClassInitializer(File classFile) throws IOException {
21 byte[] resultBytes;
22 try (var fileReader = new FileInputStream(classFile)) {
23 var classReader = new ClassReader(fileReader);
24 var classWriter = new ClassWriter(classReader, 0);
25 var classVisitor = new Visitor(classWriter);
26 classReader.accept(classVisitor, 0);
27 resultBytes = classWriter.toByteArray();
28 }
29 try (var fileWriter = new FileOutputStream(classFile)) {
30 fileWriter.write(resultBytes);
31 }
32 }
33
34 private static class Visitor extends ClassVisitor {
35 protected Visitor(ClassVisitor classVisitor) {
36 super(Opcodes.ASM9, classVisitor);
37 }
38
39 @Override
40 public MethodVisitor visitMethod(int access, String name, String descriptor, String signature,
41 String[] exceptions) {
42 if (name.equals("<clinit>")) {
43 return null;
44 }
45 return super.visitMethod(access, name, descriptor, signature, exceptions);
46 }
47 }
48}
diff --git a/z3/buildSrc/src/main/kotlin/tools/refinery/z3/gradle/java-library.gradle.kts b/z3/buildSrc/src/main/kotlin/tools/refinery/z3/gradle/java-library.gradle.kts
new file mode 100644
index 00000000..75d64a6f
--- /dev/null
+++ b/z3/buildSrc/src/main/kotlin/tools/refinery/z3/gradle/java-library.gradle.kts
@@ -0,0 +1,75 @@
1/*
2 * SPDX-FileCopyrightText: 2023 The Refinery Authors <https://refinery.tools/>
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6package tools.refinery.z3.gradle
7
8plugins {
9 `java-library`
10 `maven-publish`
11}
12
13java {
14 toolchain {
15 languageVersion.set(JavaLanguageVersion.of(21))
16 }
17}
18
19repositories {
20 mavenCentral()
21
22 // Configuration based on https://stackoverflow.com/a/34327202 to pretend that GitHub is an Ivy repository
23 // in order to take advantage of Gradle dependency caching.
24 val github = ivy {
25 setUrl("https://github.com")
26 patternLayout {
27 artifact("/[organisation]/[module]/releases/download/[module]-[revision]/[classifier].[ext]")
28 artifact("/[organisation]/[module]/archive/refs/tags/[module]-[revision].[ext]")
29 }
30 metadataSources {
31 artifact()
32 }
33 }
34
35 exclusiveContent {
36 forRepositories(github)
37 filter {
38 includeGroup("Z3Prover")
39 }
40 }
41}
42
43val z3: Provider<Configuration> by configurations.registering {
44 isCanBeConsumed = false
45 isCanBeResolved = true
46}
47
48tasks {
49 jar {
50 manifest {
51 attributes(
52 "Bundle-SymbolicName" to "${project.group}.${project.name}",
53 "Bundle-Version" to project.version
54 )
55 }
56 }
57}
58
59publishing.publications {
60 register<MavenPublication>("mavenJava") {
61 from(components["java"])
62 pom {
63 licenses {
64 license {
65 name = "MIT License"
66 url = "https://raw.githubusercontent.com/Z3Prover/z3/master/LICENSE.txt"
67 }
68 license {
69 name = "The Apache License, Version 2.0"
70 url = "http://www.apache.org/licenses/LICENSE-2.0.txt"
71 }
72 }
73 }
74 }
75}