Updated Release Archive
Updated Release Archive. Fixed Mage-killer prereqs. Removed old LETO & ConvoCC related files. Added organized spell scroll store. Fixed Gloura spellbook. Various TLK fixes. Reorganized Repo. Removed invalid user folders. Added DocGen back in.
This commit is contained in:
222
nwn/nwnprc/DocGen/trunk/prc/makedep/Main.java
Normal file
222
nwn/nwnprc/DocGen/trunk/prc/makedep/Main.java
Normal file
@@ -0,0 +1,222 @@
|
||||
/**
|
||||
* A system for calculating nwscript dependencies. Makes some assumptions specific
|
||||
* to the PRC setup.
|
||||
*/
|
||||
package prc.makedep;
|
||||
|
||||
import java.util.*;
|
||||
import java.io.*;
|
||||
|
||||
import static prc.Main.*;
|
||||
|
||||
|
||||
/**
|
||||
* Calculates nwscript dependencies.
|
||||
*
|
||||
* Usage: makedep [-aio?] targetlist
|
||||
* Options:
|
||||
* -a Append to outputfile. This option must be defined before -o
|
||||
* -n Ignore include file if not found
|
||||
* -sPATH[,PATH...] List of source directories
|
||||
* -oFILE Use FILE as outputfile, stdout assumed
|
||||
* -?, --help This text
|
||||
*
|
||||
*
|
||||
* @author Ornedan
|
||||
*/
|
||||
public class Main {
|
||||
|
||||
static Map<String, NSSNode> scripts = new LinkedHashMap<String, NSSNode>();
|
||||
|
||||
protected static boolean append = false,
|
||||
ignoreMissing = false,
|
||||
error = false;
|
||||
static PrintStream oStrm = System.out;
|
||||
|
||||
/**
|
||||
* Main method. Entrypoint to the program
|
||||
*
|
||||
* @param args The arguments. See readMe() for accepted ones
|
||||
*/
|
||||
public static void main(String[] args) {
|
||||
HashMap<String, String> targetList = new LinkedHashMap<String, String>();
|
||||
List<String> targetListFileNames = new ArrayList<String>();
|
||||
boolean targetsFromStdin = false;
|
||||
|
||||
// Parse arguments
|
||||
for(int i = 0; i < args.length; i++) {//[-aio?] targetslist+
|
||||
// Parameter parseage
|
||||
String param = args[i];
|
||||
if(param.startsWith("-")) {
|
||||
if(param.startsWith("-s")) {
|
||||
getFiles(param.substring(2));
|
||||
}
|
||||
else if(param.startsWith("-o")) {
|
||||
setOutput(param.substring(2));
|
||||
}
|
||||
else {
|
||||
if(param.equals("--help")) readMe();
|
||||
else if(param.equals("-")) {
|
||||
targetsFromStdin = true;
|
||||
}
|
||||
else {
|
||||
for(char c : param.substring(1).toCharArray()){
|
||||
switch(c) {
|
||||
case 'a':
|
||||
append = true;
|
||||
break;
|
||||
case 'n':
|
||||
ignoreMissing = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
System.out.println("Unknown parameter: " + c);
|
||||
case '?':
|
||||
readMe();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
// It's a targets list file
|
||||
targetListFileNames.add(param);
|
||||
}
|
||||
}
|
||||
|
||||
// Read targets from stdin if so specified
|
||||
Scanner scan;
|
||||
String targetName;
|
||||
if(targetsFromStdin) {
|
||||
scan = new Scanner(System.in);
|
||||
while(scan.hasNextLine()) {
|
||||
targetName = scan.nextLine().toLowerCase();
|
||||
// Strip everything after the .ncs from the line
|
||||
targetName = targetName.substring(0, targetName.indexOf(".ncs") + 4);
|
||||
targetList.put(NSSNode.getScriptName(targetName), targetName);
|
||||
}
|
||||
}
|
||||
|
||||
// Parse the target file list
|
||||
File targetListFile;
|
||||
for(String fileName : targetListFileNames) {
|
||||
targetListFile = new File(fileName);
|
||||
// Read the contents
|
||||
try {
|
||||
scan = new Scanner(targetListFile);
|
||||
} catch (FileNotFoundException e) {
|
||||
err_pr.println("Error: Could not find file: " + fileName);
|
||||
error = true;
|
||||
continue;
|
||||
}
|
||||
|
||||
while(scan.hasNextLine()) {
|
||||
targetName = scan.nextLine().toLowerCase();
|
||||
// Strip everything after the .ncs from the line
|
||||
targetName = targetName.substring(0, targetName.indexOf(".ncs") + 4);
|
||||
targetList.put(NSSNode.getScriptName(targetName), targetName);
|
||||
}
|
||||
}
|
||||
|
||||
// Input sanity checks
|
||||
if(targetList.size() == 0) {
|
||||
err_pr.println("Error: No targets specified.");
|
||||
error = true;
|
||||
}
|
||||
for(String target : targetList.keySet()) {
|
||||
if(scripts.get(target.toLowerCase()) == null) {
|
||||
err_pr.println("Error: Script file for target " + target + " not found in given source directories.");
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
|
||||
// Terminate if errored
|
||||
if(error) System.exit(1);
|
||||
|
||||
// TODO: Load the files concurrently. I suspect it will give a slight performance boost
|
||||
//NSSNode[] debugArr = debugMap.values().toArray(new NSSNode[0]);
|
||||
for(NSSNode script: scripts.values())
|
||||
script.linkDirect();
|
||||
|
||||
// Check for errors again
|
||||
if(error) System.exit(1);
|
||||
|
||||
|
||||
// Start a depth-first-search to find all the include trees
|
||||
for(NSSNode node : scripts.values()){
|
||||
node.linkFullyAndGetIncludes(null);
|
||||
//node.printSelf(oStrm, append);
|
||||
}
|
||||
|
||||
// Do the printing
|
||||
for(String target : targetList.keySet()) {
|
||||
scripts.get(target.toLowerCase()).printSelf(oStrm, append, targetList.get(target));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Prints usage and terminates.
|
||||
*/
|
||||
private static void readMe() {
|
||||
// 0 1 2 3 4 5 6 7 8
|
||||
// 12345678901234567890123456789012345678901234567890123456789012345678901234567890
|
||||
System.out.println("Usage: makedep [-aio?] targetslist+\n" +
|
||||
"Options:\n" +
|
||||
"-a Append to outputfile. This option must be defined before -o\n"+
|
||||
"-n Ignore include file if not found\n"+
|
||||
"-sPATH[,PATH...] List of source directories\n"+
|
||||
"-oFILE Use FILE as outputfile, stdout assumed\n" +
|
||||
"- Read targets from stdin. Same format as targets list files\n"+
|
||||
"-?, --help This text\n"+
|
||||
"\n"+
|
||||
"targetslist Name of a file containing a list of object (.ncs) files to\n"+
|
||||
" generate a make targets for.\n" +
|
||||
" File format is one path-to-target per line."
|
||||
);
|
||||
System.exit(0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Looks in the directories specified by the given list for .nss
|
||||
* files and adds them to the sources list.
|
||||
*
|
||||
* @param pathList comma-separated list of directories to look in
|
||||
*/
|
||||
private static void getFiles(String pathList){
|
||||
String[] paths = pathList.split(",");
|
||||
File[] files;
|
||||
String temp;
|
||||
for(String path : paths){
|
||||
files = new File(path).listFiles(new FileFilter(){
|
||||
public boolean accept(File file){
|
||||
return file.getName().endsWith(".nss");
|
||||
}
|
||||
});
|
||||
for(File file: files){
|
||||
temp = NSSNode.getScriptName(file.getName()).toLowerCase();
|
||||
if(!scripts.containsKey(temp))
|
||||
scripts.put(temp, new NSSNode(file.getPath()));
|
||||
else{
|
||||
err_pr.println("Error: Duplicate script file: " + temp);
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the output to write the results to to a file specified by the
|
||||
* given filename.
|
||||
* If the file is not found, the program terminates.
|
||||
*
|
||||
* @param outFileName Name of the file to print results to
|
||||
*/
|
||||
private static void setOutput(String outFileName){
|
||||
try{
|
||||
oStrm = new PrintStream(new FileOutputStream(outFileName, append), true);
|
||||
}catch(FileNotFoundException e){
|
||||
err_pr.println("Error: Missing output file " + outFileName + "\nTerminating!");
|
||||
System.exit(1);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user