From f7a3466dc153637e5e42e9d3f6ba5cab0455c7d9 Mon Sep 17 00:00:00 2001 From: Pasam Soujanya Date: Wed, 4 Dec 2024 19:26:54 +0530 Subject: [PATCH] Remove IBM-1047 export option and generate makefiles on JDK21+ z/OS in IBM-1047 encoding --- makefile | 10 +++++----- src/org/testKitGen/MkGen.java | 25 ++++++++++++++++++++++--- src/org/testKitGen/ModesDictionary.java | 2 +- src/org/testKitGen/UtilsGen.java | 8 +++++--- 4 files changed, 33 insertions(+), 12 deletions(-) diff --git a/makefile b/makefile index 882e3950..1eb0e2cb 100644 --- a/makefile +++ b/makefile @@ -42,14 +42,14 @@ $(info UNAME_OS is $(UNAME_OS)) ifeq ($(findstring CYGWIN,$(UNAME_OS)), CYGWIN) LIB_DIR:=$(shell cygpath -w $(LIB_DIR)) else ifeq ($(UNAME_OS),OS/390) -# The issue is still being investigated. See backlog/issues/1424 -# set -Dfile.encoding=IBM-1047 for JDK21+ zOS for now ifeq ($(shell test $(JDK_VERSION) -ge 21; echo $$?),0) -export IBM_JAVA_OPTIONS="-Dfile.encoding=IBM-1047" -$(info export IBM_JAVA_OPTIONS="-Dfile.encoding=IBM-1047") +# Pass -Dfile.encoding=IBM-1047 to create autoGen.mk contents readable on z/OS for JDK21+ +JVM_OPTIONS=-Dfile.encoding=IBM-1047 +$(info JVM_OPTIONS is "-Dfile.encoding=IBM-1047") endif endif + export LIB_DIR:=$(subst \,/,$(LIB_DIR)) $(info LIB_DIR is set to $(LIB_DIR)) @@ -90,7 +90,7 @@ compile: buildListGen # If AUTO_DETECT is turned on, compile and execute envDetector in build_envInfo.xml. ####################################### envDetect: compileTools - ${TEST_JDK_HOME}$(D)bin$(D)java -cp .$(D)bin$(D)TestKitGen.jar org.openj9.envInfo.EnvDetector + ${TEST_JDK_HOME}$(D)bin$(D)java $(JVM_OPTIONS) -cp .$(D)bin$(D)TestKitGen.jar org.openj9.envInfo.EnvDetector ####################################### # Generate refined BUILD_LIST. diff --git a/src/org/testKitGen/MkGen.java b/src/org/testKitGen/MkGen.java index 15ed029c..f1d39542 100644 --- a/src/org/testKitGen/MkGen.java +++ b/src/org/testKitGen/MkGen.java @@ -14,8 +14,12 @@ package org.testKitGen; +import java.io.FileOutputStream; import java.io.FileWriter; import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -27,6 +31,7 @@ public class MkGen { private List subdirs; private String makeFile; private PlaylistInfo pli; + private Writer writer; public MkGen(Arguments arg, TestTarget tt, PlaylistInfo pli, String makeFile, List dirList, List subdirs) { this.arg = arg; @@ -46,7 +51,7 @@ public void start() { } private void writeVars() { - try (FileWriter f = new FileWriter(makeFile)) { + try (Writer f = getWriterObject(makeFile)) { String realtiveRoot = ""; int subdirlevel = dirList.size(); if (subdirlevel == 0) { @@ -72,7 +77,7 @@ private void writeVars() { } } - private void writeSingleTest(List testsInPlaylist, TestInfo testInfo, FileWriter f) throws IOException { + private void writeSingleTest(List testsInPlaylist, TestInfo testInfo, Writer f) throws IOException { for (Variation var : testInfo.getVars()) { // Generate make target String testTargetName = var.getSubTestName(); @@ -227,7 +232,7 @@ private void writeSingleTest(List testsInPlaylist, TestInfo testInfo, Fi } private void writeTargets() { - try (FileWriter f = new FileWriter(makeFile, true)) { + try (Writer f = getWriterObject(makeFile)) { if (!pli.getIncludeList().isEmpty()) { for (String include : pli.getIncludeList()) { f.write("-include " + include + "\n\n"); @@ -251,4 +256,18 @@ private void writeTargets() { System.exit(1); } } + + public Writer getWriterObject(String filetype) { + try { + if (arg.getSpec().toLowerCase().contains("zos") && (arg.getJdkVersion().matches("2\\d"))) { + writer = new OutputStreamWriter(new FileOutputStream(filetype, true), Charset.forName("IBM-1047")); + } else { + writer = new FileWriter(filetype, true); + } + } catch(IOException e) { + e.printStackTrace(); + System.exit(1); + } + return writer; + } } \ No newline at end of file diff --git a/src/org/testKitGen/ModesDictionary.java b/src/org/testKitGen/ModesDictionary.java index 7ddfa383..173f1c81 100644 --- a/src/org/testKitGen/ModesDictionary.java +++ b/src/org/testKitGen/ModesDictionary.java @@ -98,7 +98,7 @@ private void parseInvalidSpec(Element modes) throws IOException { ArrayList specs = new ArrayList(); int lineNum = 0; BufferedReader reader = null; - if (arg.getSpec().toLowerCase().contains("zos")) { + if (arg.getSpec().toLowerCase().contains("zos") && !(arg.getJdkVersion().matches("2\\d"))) { reader = Files.newBufferedReader(Paths.get(ottawaCsv), Charset.forName("IBM-1047")); } else { reader = Files.newBufferedReader(Paths.get(ottawaCsv)); diff --git a/src/org/testKitGen/UtilsGen.java b/src/org/testKitGen/UtilsGen.java index 990b4fed..671eb2ee 100644 --- a/src/org/testKitGen/UtilsGen.java +++ b/src/org/testKitGen/UtilsGen.java @@ -15,13 +15,14 @@ package org.testKitGen; import java.io.File; -import java.io.FileWriter; import java.io.IOException; +import java.io.Writer; import java.util.List; public class UtilsGen { private Arguments arg; private ModesDictionary md; + private MkGen mg; private String utilsMk; private String rerunMk; private List ignoreOnRerunList; @@ -29,6 +30,7 @@ public class UtilsGen { public UtilsGen(Arguments arg, ModesDictionary md, List ignoreOnRerunList) { this.arg = arg; this.md = md; + this.mg = new MkGen(arg, null, null, rerunMk, ignoreOnRerunList, ignoreOnRerunList); this.utilsMk = arg.getProjectRootDir() + "/TKG/" + Constants.UTILSMK; this.rerunMk = arg.getProjectRootDir() + "/TKG/" + Constants.RERUNMK; this.ignoreOnRerunList = ignoreOnRerunList; @@ -40,7 +42,7 @@ public void generateFiles() { } private void generateUtil() { - try (FileWriter f = new FileWriter(utilsMk)) { + try (Writer f = mg.getWriterObject(utilsMk)) { f.write(Constants.HEADERCOMMENTS); f.write("TOTALCOUNT := " + TestInfo.numOfTests() + "\n"); f.write("PLATFORM=\n"); @@ -56,7 +58,7 @@ private void generateUtil() { } private void generateRerun() { - try (FileWriter f = new FileWriter(rerunMk)) { + try (Writer f = mg.getWriterObject(rerunMk)) { f.write(Constants.HEADERCOMMENTS); String ignoreOnRerunStr = String.join(",", ignoreOnRerunList); f.write("IGNORE_ON_RERUN=");