Add subdirectory support

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1261 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
alfred 2006-08-15 04:27:45 +00:00
parent 535329b5c1
commit e6a5df3bbd
4 changed files with 100 additions and 93 deletions

View File

@ -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]);
}
//---------------------------------------------------------------------------------------//
/*

View File

@ -39,6 +39,7 @@ public class ModuleInfo {
public Set<String> localmodulesources = new HashSet<String>(); //contains both .c and .h
public Set<String> preprocessedccodes = new HashSet<String>();
public Set<String> msaorinf = new HashSet<String>(); //only a little, hash may be too big for this
public Set<String> hashfuncc = new HashSet<String>();
public Set<String> hashfuncd = new HashSet<String>();
@ -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<String> 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<String> 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<String> ii = preprocessedccodes.iterator();
BufferedReader rd = null;
String ifile = null;
String line = null;
String temp = null;
//StringBuffer result = new StringBuffer();
Iterator<String> 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();
}
}
}

View File

@ -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<String> 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;
}

View File

@ -23,4 +23,6 @@ public interface UI {
public void println(String message);
public void println(Set<String> hash);
public String choose(String message, Object[] choicelist);
}