From e6a5df3bbd1d371ce18eebd0a692a50298cb31f3 Mon Sep 17 00:00:00 2001 From: alfred Date: Tue, 15 Aug 2006 04:27:45 +0000 Subject: [PATCH] Add subdirectory support git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1261 6f19259b-4bc3-4df7-8a09-765794883524 --- .../org/tianocore/migration/FirstPanel.java | 4 + .../org/tianocore/migration/ModuleInfo.java | 127 +++++++++--------- .../migration/SourceFileReplacer.java | 60 +++++---- .../org/tianocore/migration/UI.java | 2 + 4 files changed, 100 insertions(+), 93 deletions(-) diff --git a/Tools/Source/MigrationTools/org/tianocore/migration/FirstPanel.java b/Tools/Source/MigrationTools/org/tianocore/migration/FirstPanel.java index 5bd9cf1ce4..30085d449e 100644 --- a/Tools/Source/MigrationTools/org/tianocore/migration/FirstPanel.java +++ b/Tools/Source/MigrationTools/org/tianocore/migration/FirstPanel.java @@ -96,6 +96,10 @@ public class FirstPanel extends JPanel implements ActionListener, UI { } } + public String choose(String message, Object[] choicelist) { + return (String)JOptionPane.showInputDialog(this, message,"Choose",JOptionPane.PLAIN_MESSAGE,null,choicelist,choicelist[0]); + } + //---------------------------------------------------------------------------------------// /* diff --git a/Tools/Source/MigrationTools/org/tianocore/migration/ModuleInfo.java b/Tools/Source/MigrationTools/org/tianocore/migration/ModuleInfo.java index b238551cac..fa1843f15e 100644 --- a/Tools/Source/MigrationTools/org/tianocore/migration/ModuleInfo.java +++ b/Tools/Source/MigrationTools/org/tianocore/migration/ModuleInfo.java @@ -39,6 +39,7 @@ public class ModuleInfo { public Set localmodulesources = new HashSet(); //contains both .c and .h public Set preprocessedccodes = new HashSet(); + public Set msaorinf = new HashSet(); //only a little, hash may be too big for this public Set hashfuncc = new HashSet(); public Set hashfuncd = new HashSet(); @@ -54,50 +55,42 @@ public class ModuleInfo { private static String migrationcomment = "//%$//"; - private void moduleScan() throws Exception { - String[] list = new File(modulepath).list(); - boolean hasInf = false; - String infname = null; - boolean hasMsa = false; - String msaname = null; + private void dirScan(String subpath) throws Exception { + String[] list = new File(modulepath + File.separator + subpath).list(); // if no sub , separator need? + File test; for (int i = 0 ; i < list.length ; i++) { - if (new File(list[i]).isDirectory()) { - ; + test = new File(modulepath + File.separator + subpath + list[i]); + if (test.isDirectory()) { + if (list[i].contains("result") || list[i].contains("temp")) { + } else { + dirScan(subpath + list[i] + File.separator); + } } else { - if (list[i].contains(".c") || list[i].contains(".C")) { - localmodulesources.add(list[i]); - } else if (list[i].contains(".h") || list[i].contains(".H")) { - localmodulesources.add(list[i]); //the case that several .inf or .msa found is not concerned - } else if (list[i].contains(".dxs")) { - localmodulesources.add(list[i]); - } else if (list[i].contains(".uni")) { - localmodulesources.add(list[i]); - } else if (list[i].contains(".inf")) { - if (ui.yesOrNo("Found .inf file : " + list[i] + "\nDo you want to use this file as this module's .inf?")) { - hasInf = true; - infname = list[i]; - } else { - continue; - } - } else if (list[i].contains(".msa")) { - if (ui.yesOrNo("Found .msa file : " + list[i] + "\nDo you want to use this file as this module's .msa?")) { - hasMsa = true; - msaname = list[i]; - } else { - continue; - } + if (list[i].contains(".c") || list[i].contains(".C") || list[i].contains(".h") || + list[i].contains(".H") || list[i].contains(".dxs") || list[i].contains(".uni")) { + localmodulesources.add(subpath + list[i]); + } else if (list[i].contains(".inf") || list[i].contains(".msa")) { + msaorinf.add(subpath + list[i]); } } } - - ModuleReader mr = new ModuleReader(modulepath, this, db); - if (hasInf) { // this sequence shows using .inf as default - mr.readInf(infname); - } else if (hasMsa) { - mr.readMsa(msaname); + } + + private void moduleScan() throws Exception { + dirScan(""); + String filename = null; + if (msaorinf.isEmpty()) { + ui.println("No .inf nor .msa file found! Tool Halt!"); + System.exit(0); } else { - ui.println("No INF nor MSA file found!"); + filename = ui.choose("Found .inf or .msa file in the module\nChoose one Please", msaorinf.toArray()); + } + ModuleReader mr = new ModuleReader(modulepath, this, db); + if (filename.contains(".inf")) { + mr.readInf(filename); + } else if (filename.contains(".msa")) { + mr.readMsa(filename); } CommentOutNonLocalHFile(); @@ -106,7 +99,7 @@ public class ModuleInfo { new SourceFileReplacer(modulepath, this, db, ui).flush(); // some adding library actions are taken here,so it must be put before "MsaWriter" // show result - if (ui.yesOrNo("Parse of the Module Information has completed. View details?")) { + if (ui.yesOrNo("Parse Module Information Complete . See details ?")) { ui.println("\nModule Information : "); ui.println("Entrypoint : " + entrypoint); show(protocol, "Protocol : "); @@ -129,8 +122,8 @@ public class ModuleInfo { ui.println("Errors Left : " + db.error); ui.println("Complete!"); - ui.println("Your R9 module was placed here: " + modulepath + File.separator + "result"); - ui.println("Your logfile was placed here: " + modulepath); + ui.println("Your R9 module is placed at " + modulepath + File.separator + "result"); + ui.println("Your logfile is placed at " + modulepath); } private void show(Set hash, String show) { @@ -138,6 +131,19 @@ public class ModuleInfo { ui.println(hash); } + public void ensureDir(String objFileWhole) { + Pattern ptnseparate = Pattern.compile("(.*)\\\\[^\\\\]*"); + Matcher mtrseparate; + File tempdir; + + mtrseparate = ptnseparate.matcher(objFileWhole); + if (mtrseparate.find()) { + tempdir = new File(mtrseparate.group(1)); + if (!tempdir.exists()) tempdir.mkdirs(); + } + + } + // add '//' to all non-local include lines private void CommentOutNonLocalHFile() throws IOException { BufferedReader rd; @@ -146,20 +152,18 @@ public class ModuleInfo { PrintWriter outfile; Pattern ptninclude = Pattern.compile("[\"<](.*[.]h)[\">]"); - Matcher mtcinclude; - - File tempdir = new File(modulepath + File.separator + "temp" + File.separator); - if (!tempdir.exists()) tempdir.mkdir(); + Matcher mtrinclude; Iterator ii = localmodulesources.iterator(); while ( ii.hasNext() ) { curFile = ii.next(); rd = new BufferedReader(new FileReader(modulepath + File.separator + curFile)); + ensureDir(modulepath + File.separator + "temp" + File.separator + curFile); outfile = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "temp" + File.separator + curFile))); while ((line = rd.readLine()) != null) { if (line.contains("#include")) { - mtcinclude = ptninclude.matcher(line); - if (mtcinclude.find() && localmodulesources.contains(mtcinclude.group(1))) { + mtrinclude = ptninclude.matcher(line); + if (mtrinclude.find() && localmodulesources.contains(mtrinclude.group(1))) { } else { line = migrationcomment + line; } @@ -170,15 +174,7 @@ public class ModuleInfo { outfile.close(); } } - /* - private void search(String line, Pattern ptn, Method md) { - matmacro = Func.ptntmacro.matcher(line); - while (matmacro.find()) { - if ((temp = Func.registerMacro(matmacro, this, db)) != null) { - } - } - } - */ + private void parsePreProcessedSourceCode() throws Exception { //Cl cl = new Cl(modulepath); //cl.execute("Fat.c"); @@ -187,19 +183,20 @@ public class ModuleInfo { //System.out.println("Note!!!! The CL is not implemented now , pls do it manually!!! RUN :"); //System.out.println("cl " + modulepath + "\\temp\\*.c" + " -P"); //String[] list = new File(modulepath + File.separator + "temp").list(); // without CL , add - String[] list = new File(modulepath).list(); - for (int i = 0 ; i < list.length ; i++) { - if (list[i].contains(".c")) { // without CL , change to .i - preprocessedccodes.add(list[i]); - } - } - // - Iterator ii = preprocessedccodes.iterator(); BufferedReader rd = null; String ifile = null; String line = null; String temp = null; - //StringBuffer result = new StringBuffer(); + + Iterator ii = localmodulesources.iterator(); + while (ii.hasNext()) { + temp = ii.next(); + if (temp.contains(".c")) { + preprocessedccodes.add(temp); + } + } + + ii = preprocessedccodes.iterator(); Pattern patefifuncc = Pattern.compile("g?(BS|RT)\\s*->\\s*([a-zA-Z_]\\w*)",Pattern.MULTILINE); Pattern patentrypoint = Pattern.compile("EFI_([A-Z]*)_ENTRY_POINT\\s*\\(([^\\(\\)]*)\\)",Pattern.MULTILINE); @@ -291,4 +288,4 @@ public class ModuleInfo { public static void main(String[] args) throws Exception { FirstPanel.init(); } -} +} \ No newline at end of file diff --git a/Tools/Source/MigrationTools/org/tianocore/migration/SourceFileReplacer.java b/Tools/Source/MigrationTools/org/tianocore/migration/SourceFileReplacer.java index 2df0ffd104..34eb6be454 100644 --- a/Tools/Source/MigrationTools/org/tianocore/migration/SourceFileReplacer.java +++ b/Tools/Source/MigrationTools/org/tianocore/migration/SourceFileReplacer.java @@ -51,7 +51,7 @@ public class SourceFileReplacer { "EfiLibInstallAllDriverProtocols " + "EfiLibCompareLanguage " + "BufToHexString " + - "EfiStrTrim " + + "EfiStrTrim " + //is the r8only lib going to be enlarged???? Caution !!!! "EfiValueToHexStr " + "HexStringToBuf " + "IsHexDigit " + @@ -69,33 +69,37 @@ public class SourceFileReplacer { public void flush() throws Exception { PrintWriter outfile; - String temp = null; - if (ui.yesOrNo("Changes will be made to the Source Code. View details?")) { + String outname = null; + String inname = null; + if (ui.yesOrNo("Change Source Code is to be doing . See details ?")) { showdetails = true; } - File tempdir = new File(modulepath + File.separator + "result" + File.separator); - if (!tempdir.exists()) tempdir.mkdir(); - String[] list = new File(modulepath + File.separator + "temp").list(); //what I change is the non-local .h commented-out files - for (int i = 0 ; i < list.length ; i++) { - if (list[i].contains(".c")) { - ui.println("\nModifying file: " + list[i]); - outfile = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + list[i]))); - outfile.append(sourcefilereplace(modulepath + File.separator + "temp" + File.separator + list[i])); + + Iterator di = mi.localmodulesources.iterator(); + while (di.hasNext()) { + inname = di.next(); + if (inname.contains(".c") || inname.contains(".C")) { + if (inname.contains(".C")) { + outname = inname.replaceFirst(".C", ".c"); + } else { + outname = inname; + } + ui.println("\nModifying file : " + inname); + mi.ensureDir(modulepath + File.separator + "result" + File.separator + outname); + outfile = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + outname))); + outfile.append(sourcefilereplace(modulepath + File.separator + "temp" + File.separator + inname)); outfile.flush(); outfile.close(); - } else { - if (list[i].contains(".h")) { - temp = list[i]; - } else if (list[i].contains(".C")) { - temp = list[i].replaceFirst(".C", ".c"); - } else if (list[i].contains(".H")) { - temp = list[i].replaceFirst(".H", ".h"); + } else if (inname.contains(".h") || inname.contains(".H") || inname.contains(".dxs") || inname.contains(".uni")) { + if (inname.contains(".H")) { + outname = inname.replaceFirst(".H", ".h"); } else { - continue; + outname = inname; } - ui.println("\nCopying file: " + temp); - outfile = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + temp))); - outfile.append(sourcefiletostring(modulepath + File.separator + "temp" + File.separator + list[i])); + ui.println("\nCopying file : " + inname); + mi.ensureDir(modulepath + File.separator + "result" + File.separator + outname); + outfile = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + outname))); + outfile.append(sourcefiletostring(modulepath + File.separator + "temp" + File.separator + inname)); outfile.flush(); outfile.close(); } @@ -109,10 +113,9 @@ public class SourceFileReplacer { private void addr8only() throws Exception { String paragraph = null; String line = sourcefiletostring(Database.defaultpath + File.separator + "R8Lib.c"); + mi.ensureDir(modulepath + File.separator + "result" + File.separator + "R8Lib.c"); PrintWriter outfile1 = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + "R8Lib.c"))); PrintWriter outfile2 = new PrintWriter(new BufferedWriter(new FileWriter(modulepath + File.separator + "result" + File.separator + "R8Lib.h"))); - //outfile1.append("#include \"R8Lib.h\"\n\n"); - //outfile2.append("#include \"R8Lib.h\"\n\n"); Pattern ptnr8only = Pattern.compile("////#?(\\w*)?.*?R8_(\\w*).*?////~", Pattern.DOTALL); Matcher mtrr8only = ptnr8only.matcher(line); Matcher mtrr8onlyhead; @@ -134,6 +137,9 @@ public class SourceFileReplacer { outfile1.close(); outfile2.flush(); outfile2.close(); + + mi.localmodulesources.add("R8Lib.h"); + mi.localmodulesources.add("R8Lib.c"); } private String sourcefiletostring(String filename) throws Exception { @@ -167,7 +173,7 @@ public class SourceFileReplacer { // replace BS -> gBS , RT -> gRT Matcher mat = pat.matcher(line); if (mat.find()) { // add a library here - ui.println("Converting all BS->gBS, RT->gRT"); + ui.println("Converting all BS->gBS,RT->gRT"); line = mat.replaceAll("g$1$2$3"); //unknown correctiveness } mat.reset(); @@ -214,8 +220,6 @@ public class SourceFileReplacer { while (rt.hasNext()) { temp = rt.next(); if (r8only.contains(temp.r8thing)) { - mi.localmodulesources.add("R8Lib.h"); - mi.localmodulesources.add("R8Lib.c"); filer8only.add(r8thing); mi.hashr8only.add(r8thing); addr8 = true; @@ -310,7 +314,7 @@ public class SourceFileReplacer { fileppi.clear(); fileprotocol.clear(); filer8only.clear(); - + return line; } diff --git a/Tools/Source/MigrationTools/org/tianocore/migration/UI.java b/Tools/Source/MigrationTools/org/tianocore/migration/UI.java index 7552379300..7f91ebe461 100644 --- a/Tools/Source/MigrationTools/org/tianocore/migration/UI.java +++ b/Tools/Source/MigrationTools/org/tianocore/migration/UI.java @@ -23,4 +23,6 @@ public interface UI { public void println(String message); public void println(Set hash); + + public String choose(String message, Object[] choicelist); } -- 2.39.2