Skip to content

Commit 2ea1382

Browse files
committed
refactor usage of GraalVM on the windows platform
1 parent 4a76d8a commit 2ea1382

File tree

1 file changed

+32
-12
lines changed

1 file changed

+32
-12
lines changed

buildSrc/src/main/groovy/org/openstreetmap/josm/plugins/scripting/build/GraalVMDownloadTask.groovy

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@ import org.gradle.api.tasks.Internal
99
import org.gradle.api.tasks.Optional
1010
import org.gradle.api.tasks.TaskAction
1111

12+
import java.util.zip.ZipEntry
13+
import java.util.zip.ZipFile
14+
1215
/**
1316
* The platforms for which distributions of the GraalVM are available
1417
* for download.
@@ -109,8 +112,7 @@ abstract class GraalVMDownloadTask extends DefaultTask {
109112
if (configuredGraalVMPlatform == GraalVMPlatform.LINUX_AMD64) {
110113
platform = "linux-x64"
111114
} else if (configuredGraalVMPlatform == GraalVMPlatform.WINDOWS_AMD64) {
112-
//TODO: check
113-
platform = "windows"
115+
platform = "windows-x64"
114116
}
115117
final suffix = configuredGraalVMPlatform.isWindows() ? "zip" : "tar.gz"
116118
final fileName = "graalvm-${jdk}_${platform}_bin.${suffix}"
@@ -218,28 +220,45 @@ abstract class GraalVMDownloadTask extends DefaultTask {
218220
return tempFile
219221
}
220222

221-
File buildInstallationDir() {
222-
final jdk = configuredGraalVMJDK.name
223-
final installBaseDir = new File(project.projectDir, "software")
224-
return new File(installBaseDir, "graalvm-$jdk").absoluteFile
223+
File buildInstallationBaseDir() {
224+
//final jdk = configuredGraalVMJDK.name
225+
return new File(project.projectDir, "software")
226+
//return new File(installBaseDir, "graalvm-$jdk").absoluteFile
225227
}
226228

227-
def createInstallationDir() {
228-
final installDir = buildInstallationDir()
229+
def createInstallationBaseDir() {
230+
final installDir = buildInstallationBaseDir()
229231
if (!installDir.exists()) {
230232
installDir.mkdirs()
231233
}
232234
return installDir
233235
}
234236

237+
def rootZipEntry(final File zipFile) {
238+
new ZipFile(zipFile).withCloseable {zip ->
239+
return zip.stream().findFirst().get().getName().split("/")[0]
240+
}
241+
}
242+
235243
def installGraalVM(final File tempFile) {
236-
def installDir = buildInstallationDir()
244+
final jdk = configuredGraalVMJDK.name
245+
def installDir
237246
if (configuredGraalVMPlatform.isWindows()) {
247+
installDir = buildInstallationBaseDir()
238248
// windows OS: extract .zip file
249+
final root = rootZipEntry(tempFile.absoluteFile)
239250
def ant = new AntBuilder()
240251
ant.unzip(src: tempFile.absolutePath, dest: installDir.absolutePath, overwrite: false)
252+
installDir = new File(installDir, root)
253+
final targetDir = new File(buildInstallationBaseDir(), "graalvm-$jdk")
254+
installDir.renameTo(targetDir)
255+
installDir = targetDir
241256
} else {
257+
installDir = new File(buildInstallationBaseDir(), "graalvm-$jdk").absoluteFile
242258
// linux OS: extract .tgz file
259+
if (!installDir.exists()) {
260+
installDir.mkdirs()
261+
}
243262
def command = "tar xvf ${tempFile.absolutePath} --directory ${installDir.absolutePath} --strip-components=1"
244263
def process = command.execute()
245264
process.out.close()
@@ -254,7 +273,8 @@ abstract class GraalVMDownloadTask extends DefaultTask {
254273
}
255274

256275
// add JS language to the GraalVM
257-
final binDir = new File(buildInstallationDir(), "bin")
276+
logger.info("Installation JS language in GraalVM for JDK '$jdk' in directory '$installDir'")
277+
final binDir = new File(installDir, "bin")
258278
final guCommand = configuredGraalVMPlatform.isWindows()
259279
? new File(binDir, "gu.cmd")
260280
: new File(binDir, "gu")
@@ -275,15 +295,15 @@ abstract class GraalVMDownloadTask extends DefaultTask {
275295
final platform = this.configuredGraalVMPlatform
276296
final jdk = this.configuredGraalVMJDK
277297
logger.info("Downloading GraalVM for JDK '${jdk}' and platform '$platform' ...")
278-
def installDir = buildInstallationDir()
298+
def installDir = new File(buildInstallationBaseDir(), "graalvm-${configuredGraalVMJDK.name}").absoluteFile
279299
if (installDir.exists() && installDir.isDirectory()) {
280300
logger.info("GraalVM for JDK '$jdk' already installed in '${installDir.absolutePath}. Skipping download.'")
281301
return
282302
}
283303

284304
def url = buildDownloadUrl()
285305
def distribFile = downloadGraalVM(url)
286-
def installBaseDir = createInstallationDir()
306+
def installBaseDir = createInstallationBaseDir()
287307
installGraalVM(distribFile)
288308
installDir = new File(installBaseDir, distribFile.name)
289309
logger.info("Successfully downloaded GraalVM for JDK '$jdk'")

0 commit comments

Comments
 (0)