Change behavior if found more than one FPD files from let user choice one to report Error and stop build.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1695 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
wuyizhong 2006-10-10 02:15:44 +00:00
parent 55ab23ae35
commit 0f769af196
1 changed files with 21 additions and 74 deletions

View File

@ -13,10 +13,8 @@
**/ **/
package org.tianocore.build; package org.tianocore.build;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Hashtable; import java.util.Hashtable;
import java.util.Iterator; import java.util.Iterator;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
@ -57,8 +55,7 @@ import org.tianocore.common.logger.EdkLog;
4. No MSA file, and ACTIVE_PLATFORM is specified, build the active platform; 4. No MSA file, and ACTIVE_PLATFORM is specified, build the active platform;
5. No MSA file, no ACTIVE_PLATFORM, and no FPD file, report error; 5. No MSA file, no ACTIVE_PLATFORM, and no FPD file, report error;
6. No MSA file, no ACTIVE_PLATFORM, and only one FPD file, build the platform; 6. No MSA file, no ACTIVE_PLATFORM, and only one FPD file, build the platform;
7. No MSA file, no ACTIVE_PLATFORM, and more than one FPD files, list all platform 7. No MSA file, no ACTIVE_PLATFORM, and more than one FPD files, Report Error!
and let user choose one.
</pre> </pre>
<p> <p>
@ -76,8 +73,6 @@ import org.tianocore.common.logger.EdkLog;
**/ **/
public class FrameworkBuildTask extends Task{ public class FrameworkBuildTask extends Task{
private Set<File> buildFiles = new LinkedHashSet<File>();
private Set<File> fpdFiles = new LinkedHashSet<File>(); private Set<File> fpdFiles = new LinkedHashSet<File>();
private Set<File> msaFiles = new LinkedHashSet<File>(); private Set<File> msaFiles = new LinkedHashSet<File>();
@ -149,32 +144,27 @@ public class FrameworkBuildTask extends Task{
} }
private void processFrameworkBuild() throws EdkException, GenBuildException, AutoGenException, PcdAutogenException, PlatformPcdPreprocessBuildException { private void processFrameworkBuild() throws EdkException, GenBuildException, AutoGenException, PcdAutogenException, PlatformPcdPreprocessBuildException {
//
// Seach build.xml -> .FPD -> .MSA file
//
try { try {
// //
// Gen Current Working Directory // Get current working dir
// //
File dummyFile = new File("."); File dummyFile = new File(".");
File cwd = dummyFile.getCanonicalFile(); File cwd = dummyFile.getCanonicalFile();
File[] files = cwd.listFiles(); File[] files = cwd.listFiles();
//
// Scan current dir, and find out all .FPD and .MSA files
//
for (int i = 0; i < files.length; i++) { for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) { if (files[i].isFile()) {
if (files[i].getName().equalsIgnoreCase("build.xml")) { if (files[i].getName().endsWith(ToolDefinitions.FPD_EXTENSION)) {
// //
// First, search build.xml, if found, ANT call it // Found FPD file
//
buildFiles.add(files[i]);
} else if (files[i].getName().endsWith(ToolDefinitions.FPD_EXTENSION)) {
//
// Second, search FPD file, if found, build it
// //
fpdFiles.add(files[i]); fpdFiles.add(files[i]);
} else if (files[i].getName().endsWith(ToolDefinitions.MSA_EXTENSION)) { } else if (files[i].getName().endsWith(ToolDefinitions.MSA_EXTENSION)) {
// //
// Third, search MSA file, if found, build it // Found MSA file
// //
msaFiles.add(files[i]); msaFiles.add(files[i]);
} }
@ -187,9 +177,9 @@ public class FrameworkBuildTask extends Task{
} }
// //
// Deal with all environment variable (Add them to properties) // Import all system environment variables to ANT properties
// //
backupSystemProperties(); importSystemEnvVariables();
// //
// Read target.txt file // Read target.txt file
@ -208,11 +198,11 @@ public class FrameworkBuildTask extends Task{
// else fail build. // else fail build.
// If without MSA file, and ACTIVE_PLATFORM is set, build the ACTIVE_PLATFORM. // If without MSA file, and ACTIVE_PLATFORM is set, build the ACTIVE_PLATFORM.
// If ACTIVE_PLATFORM is not set, and only find one FPD file, build the platform; // If ACTIVE_PLATFORM is not set, and only find one FPD file, build the platform;
// If find more than one FPD files, let user select one. // If find more than one FPD files, report error.
// //
File buildFile = null; File buildFile = null;
if (msaFiles.size() > 1) { if (msaFiles.size() > 1) {
throw new BuildException("Having more than one MSA file in a directory is not allowed!"); throw new BuildException("Found " + msaFiles.size() + " MSA files in current dir. ");
} else if (msaFiles.size() == 1 && activePlatform == null) { } else if (msaFiles.size() == 1 && activePlatform == null) {
throw new BuildException("If trying to build a single module, please set ACTIVE_PLATFORM in file [" + targetFilename + "]. "); throw new BuildException("If trying to build a single module, please set ACTIVE_PLATFORM in file [" + targetFilename + "]. ");
} else if (msaFiles.size() == 1 && activePlatform != null) { } else if (msaFiles.size() == 1 && activePlatform != null) {
@ -225,8 +215,9 @@ public class FrameworkBuildTask extends Task{
} else if (fpdFiles.size() == 1) { } else if (fpdFiles.size() == 1) {
buildFile = fpdFiles.toArray(new File[1])[0]; buildFile = fpdFiles.toArray(new File[1])[0];
} else if (fpdFiles.size() > 1) { } else if (fpdFiles.size() > 1) {
buildFile = intercommuniteWithUser(); throw new BuildException("Found " + fpdFiles.size() + " FPD files in current dir. ");
} }
// //
// If there is no build files or FPD files or MSA files, stop build // If there is no build files or FPD files or MSA files, stop build
// //
@ -296,11 +287,11 @@ public class FrameworkBuildTask extends Task{
} }
/** /**
Transfer system environment variables to ANT properties. If system variable Import system environment variables to ANT properties. If system variable
already exiests in ANT properties, skip it. already exiests in ANT properties, skip it.
**/ **/
private void backupSystemProperties() { private void importSystemEnvVariables() {
Map<String, String> sysProperties = System.getenv(); Map<String, String> sysProperties = System.getenv();
Iterator<String> iter = sysProperties.keySet().iterator(); Iterator<String> iter = sysProperties.keySet().iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
@ -322,54 +313,6 @@ public class FrameworkBuildTask extends Task{
} }
} }
private File intercommuniteWithUser(){
File file = null;
if (fpdFiles.size() > 1) {
File[] allFiles = new File[fpdFiles.size()];
int index = 0;
Iterator<File> iter = fpdFiles.iterator();
while (iter.hasNext()) {
allFiles[index] = iter.next();
index++;
}
EdkLog.log(this, "Finding " + allFiles.length + " FPD files: ");
for (int i = 0; i < allFiles.length; i++) {
System.out.println("[" + (i + 1) + "]: " + allFiles[i].getName());
}
boolean flag = true;
EdkLog.log(this, "Please select one of the following FPD files to build:[1] ");
do{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
try {
String str = br.readLine();
if (str.trim().length() == 0) {
file = allFiles[0];
flag = false;
continue ;
}
int indexSelect = Integer.parseInt(str);
if (indexSelect <=0 || indexSelect > allFiles.length) {
EdkLog.log(this, "Please enter a number between [1.." + allFiles.length + "]:[1] ");
continue ;
} else {
file = allFiles[indexSelect - 1];
flag = false;
continue ;
}
} catch (Exception e) {
EdkLog.log(this, "Please enter a valid number:[1] ");
flag = true;
}
} while (flag);
} else if (fpdFiles.size() == 1) {
file = fpdFiles.toArray(new File[1])[0];
}
return file;
}
public void setType(String type) { public void setType(String type) {
if (type.equalsIgnoreCase("clean") || type.equalsIgnoreCase("cleanall")) { if (type.equalsIgnoreCase("clean") || type.equalsIgnoreCase("cleanall")) {
this.type = type.toLowerCase(); this.type = type.toLowerCase();
@ -433,6 +376,10 @@ public class FrameworkBuildTask extends Task{
MAX_CONCURRENT_THREAD_NUMBER = threadNum; MAX_CONCURRENT_THREAD_NUMBER = threadNum;
} }
} catch (Exception ex) { } catch (Exception ex) {
//
// Give a warning message, and keep the default value
//
EdkLog.log(this, EdkLog.EDK_WARNING, "Incorrent number specified for MAX_CONCURRENT_THREAD_NUMBER in file [" + targetFilename + "]");
} }
} }
} }