1 apply plugin: 'java' 2 import org.gradle.internal.os.OperatingSystem 3 4 repositories { 5 mavenCentral() 6 } 7 8 def test_jvm = { 9 if (project.hasProperty('jbsdkhome')) { 10 file(jbsdkhome + (OperatingSystem.current().isWindows()?"/bin/java.exe" : "/bin/java")).absolutePath 11 } else { 12 if (OperatingSystem.current().isMacOsX()) { 13 file('../../../build/macosx-x86_64-server-release/images/jdk-bundle/jdk-13.jdk/Contents/Home/bin/java').absolutePath 14 } else if (OperatingSystem.current().isLinux()) { 15 file('../../../build/linux-x86_64-server-release/images/jdk/bin/java').absolutePath 16 } else { 17 file('../../../build/windows-x86_64-server-release/images/j2sdk-image/bin/java.exe').absolutePath 18 } 19 } 20 } 21 22 dependencies { 23 testCompile('junit:junit:4.12'){ 24 exclude group: 'org.hamcrest' 25 } 26 testCompile 'org.hamcrest:hamcrest-library:1.3' 27 testCompile 'net.java.dev.jna:jna:4.4.0' 28 testCompile 'com.twelvemonkeys.imageio:imageio-tiff:3.3.2' 29 testCompile 'org.apache.commons:commons-lang3:3.0' 30 } 31 32 def jdk_modules = ["java.base", "java.logging", "java.prefs", 33 "java.se.ee", "java.sql", "java.datatransfer", 34 "java.management", "java.rmi", "java.security.jgss", 35 "java.sql.rowset", "java.desktop", "java.management.rmi", 36 "java.scripting", "java.security.sasl", "java.transaction", 37 "java.instrument", "java.naming", "java.se", 38 "java.smartcardio", "java.xml.crypto"] 39 40 def jdk_class_dirs = [] 41 42 jdk_modules.collect(jdk_class_dirs) { 43 new File("../../../src/" + it + "/share/classes") 44 } 45 46 if (OperatingSystem.current().isMacOsX()) 47 jdk_modules.collect(jdk_class_dirs) { 48 "../../../src/" + it + "/macosx/classes" 49 } 50 else if (OperatingSystem.current().isLinux()) { 51 jdk_modules.collect(jdk_class_dirs) { 52 "../../../src/" + it + "/solaris/classes" 53 } 54 jdk_modules.collect(jdk_class_dirs) { 55 "../../../src/" + it + "/unix/classes" 56 } 57 } else 58 jdk_modules.collect(jdk_class_dirs) { 59 "../../../src/" + it + "/windows/classes" 60 } 61 62 sourceSets.main.java.srcDirs = jdk_class_dirs 63 64 sourceSets { 65 test { 66 java { 67 srcDir "../../../test/jdk/jbu" 68 } 69 } 70 } 71 72 test.dependsOn.clear() 73 74 test.dependsOn tasks.compileTestJava 75 76 test { 77 systemProperty "jb.java2d.metal", "true" 78 systemProperty "testdata", file('../../../test/jdk/jbu/testdata').absolutePath 79 80 // Generate golden images for DroidFontTest and MixedTextTest 81 // systemProperty "gentestdata", "" 82 83 // Enable Java2D logging (https://confluence.jetbrains.com/display/JRE/Java2D+Rendering+Logging) 84 // systemProperty "sun.java2d.trace", "count,notimpl 85 // systemProperty "sun.java2d.trace", "log" 86 87 outputs.upToDateWhen { false } 88 executable = test_jvm() 89 90 // Enable async/dtrace profiler 91 jvmArgs "-XX:+PreserveFramePointer" 92 // Enable native J2D logging (only in debug build) 93 // Can be turned on for J2D by adding "#define DEBUG 1" into jdk/src/share/native/sun/java2d/Trace.h 94 95 // environment 'J2D_TRACE_LEVEL', '4' 96 } 97 98 def buildDir = project.buildscript.sourceFile.parentFile.parentFile.parentFile.parentFile 99 100 def make_cmd = "make" 101 if (OperatingSystem.current().isWindows()) { 102 def cyg_make_cmd = new File("c:/cygwin64/bin/make.exe") 103 if (cyg_make_cmd.exists()) make_cmd = cyg_make_cmd.absolutePath 104 } 105 def test_run = false 106 task make_images << { 107 if (!test_run) { 108 def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "images") 109 def proc = pb.redirectErrorStream(true).start() 110 proc.inputStream.eachLine { println it } 111 assert proc.waitFor() == 0 112 } 113 } 114 115 task make_clean << { 116 def pb = new ProcessBuilder().command(make_cmd.toString(), "-C", buildDir.absolutePath, "clean") 117 def proc = pb.redirectErrorStream(true).start() 118 proc.inputStream.eachLine {println it} 119 assert proc.waitFor() == 0 120 } 121 122 task run_test << { 123 test_run = true 124 } 125 126 tasks.cleanTest.dependsOn tasks.run_test 127 classes.dependsOn.clear() 128 classes.dependsOn tasks.make_images 129 tasks.cleanClasses.dependsOn tasks.make_clean