Search in sources :

Example 6 with Artifact

use of com.ibm.uma.om.Artifact in project openj9 by eclipse.

the class PlatformImplementation method writePlatformSpecificFiles.

/* (non-Javadoc)
	 * @see com.ibm.uma.platform.IPlatform#writePlatformSpecificFiles(com.ibm.uma.Artifact)
	 */
public void writePlatformSpecificFiles(Artifact artifact) throws UMAException {
    writeExportFile(artifact);
    if (!artifact.flagSet("requiresPrimitiveTable") && !artifact.flagSet("dumpMasterPrimitiveTable")) {
        return;
    }
    String filename = UMA.getUma().getRootDirectory() + artifact.getContainingModule().getFullName() + "/" + artifact.getTargetName() + "exp.c";
    Vector<Export> exports = artifact.getExportedFunctions();
    FileAssistant fa = new FileAssistant(filename);
    StringBuffer buffer = fa.getStringBuffer();
    buffer.append(configuration.getcCopyrightNotice());
    buffer.append("#include \"j9comp.h\"\n#include \"j9static.h\"\n\n");
    buffer.append("#if !defined(J9VM_SHARED_LIBRARIES_SUPPORTED) || defined(J9VM_OPT_BUNDLE_CORE_MODULES)\n");
    if (artifact.flagSet("requiresPrimitiveTable")) {
        if (artifact.flagSet("dumpGenericProtosForPrimTable")) {
            for (Export export : exports) {
                buffer.append("extern void VMCALL " + export.getExport() + "(void);\n");
            }
        } else {
            // "We ask the the module to give us a header file name to include with the public prototypes"
            String[] prototypeHeaderFileNames = artifact.getData("prototypeHeaderFileNames");
            if (prototypeHeaderFileNames != null) {
                for (String fnm : prototypeHeaderFileNames) {
                    buffer.append("#include \"" + fnm + "\"\n");
                }
            }
            if (artifact.flagSet("extraPrototypesForExportFile")) {
                String[] extraProtos = artifact.getData("extraPrototypesForExportFile");
                for (String proto : extraProtos) {
                    buffer.append("extern void VMCALL " + proto + "(void);\n");
                }
            }
        }
        buffer.append("\nEsDefinePrimitiveTable(" + artifact.getTargetName().toUpperCase() + "PrimitiveTable)\n");
        for (Export export : exports) {
            String strippedExportName = stripExportName(export.getExport());
            buffer.append("\tEsPrimitiveTableEntry(\"" + strippedExportName + "\"," + strippedExportName + ")\n");
        }
        buffer.append("EsEndPrimitiveTable\n");
    }
    if (artifact.flagSet("dumpMasterPrimitiveTable")) {
        buffer.append("\n");
        Vector<Library> libs = artifact.getStaticLinkLibraries();
        if (artifact.getType() == Artifact.TYPE_BUNDLE) {
            libs.addAll(artifact.getLibraries());
        }
        Vector<Artifact> artifacts = new Vector<Artifact>();
        for (Library lib : libs) {
            switch(lib.getType()) {
                case Library.TYPE_BUILD:
                    Artifact artifact2 = UMA.getUma().getArtifact(lib.getName());
                    if (artifact2 != null && artifact2.evaluate()) {
                        artifacts.add(artifact2);
                    }
                    break;
            }
        }
        for (Artifact oa : artifacts) {
            if (oa.evaluate() && oa.flagSet("requiresPrimitiveTable")) {
                buffer.append("extern EsPrimitiveTable " + oa.getTargetName().toUpperCase() + "PrimitiveTable;\n");
            }
        }
        buffer.append("\nEsDefinePrimitiveTable(J9LinkedNatives)\n");
        for (Artifact oa : artifacts) {
            if (oa.evaluate() && oa.flagSet("requiresPrimitiveTable")) {
                String startComment = "";
                String endComment = "";
                if (!oa.flagSet("isRequired") && !oa.flagSet("isRequiredFor" + artifact.getTargetNameWithScope())) {
                    startComment = "/* ";
                    endComment = " */";
                }
                buffer.append("\t" + startComment + "EsPrimitiveTableEntry(\"" + getTargetNameWithRelease(oa) + "\", " + oa.getTargetName().toUpperCase() + "PrimitiveTable)" + endComment + "\n");
            }
        }
        buffer.append("EsEndPrimitiveTable\n");
    }
    buffer.append("\n#endif\n");
    fa.writeToDisk();
}
Also used : FileAssistant(com.ibm.uma.util.FileAssistant) Export(com.ibm.uma.om.Export) Library(com.ibm.uma.om.Library) Vector(java.util.Vector) Artifact(com.ibm.uma.om.Artifact)

Example 7 with Artifact

use of com.ibm.uma.om.Artifact in project openj9 by eclipse.

the class UMA method writeDirectoryMakefile.

// This function takes a module and creates a makefile for the directory,
// then recursively calls this function on all sub-modules.
void writeDirectoryMakefile(Module module) throws UMAException {
    if (!module.evaluate())
        return;
    String modulePath = new File(module.getModulePath()).getParent();
    Logger.getLogger().println(Logger.InformationL2Log, "Producing makefile(s) for " + modulePath);
    for (Artifact artifact : module.getArtifacts()) {
        writeMakefileForArtifact(artifact);
    }
    if (module.requiresDispatchMakefile()) {
        // There needs to be a dispatch makefile
        String makefileName = modulePath + File.separator + "makefile";
        StringBuffer buffer = new StringBuffer();
        FileAssistant fa = new FileAssistant(makefileName, buffer);
        buffer.append(configuration.getMakefileCopyrightNotice());
        String pathToRoot = determinePathToRoot(module);
        Vector<String> targets = new Vector<String>();
        Vector<String> specialTargets = new Vector<String>();
        for (Artifact artifact : module.getAllArtifactsInTree()) {
            if (!artifact.evaluate())
                continue;
            if (artifact.getType() == Artifact.TYPE_TARGET) {
                if (artifact.includeInAllTarget()) {
                    /* 
						 * The separation of targets into targets and specialTargets
						 * is being done to allow the 'TARGET' type artifacts to be built first.
						 * This is a weak way of saying that the whole system is dependent on 
						 * these targets without having to add the dependency to each and every
						 * artifact.
						 * 
						 * This only works when not using -j on gmake and because
						 * gmake will do the targets in the order they are on the dependency line.
						 * 
						 */
                    specialTargets.add(artifact.getMakefileName());
                }
            } else {
                if (artifact.includeInAllTarget()) {
                    targets.add(artifact.getMakefileName());
                }
            }
        }
        buffer.append(UMA_PATH_TO_ROOT + "=" + pathToRoot + "\n");
        buffer.append(OMR_DIR + "?=" + pathToRoot + "omr\n");
        StringBuffer targetsInTreeBuffer = new StringBuffer();
        LineWrapMakefileDirective lwmd = new LineWrapMakefileDirective(targetsInTreeBuffer);
        targetsInTreeBuffer.append(UMA_TARGETS_IN_TREE + "=");
        for (String target : specialTargets) {
            lwmd.addItem(target);
        }
        for (String target : targets) {
            lwmd.addItem(target);
        }
        buffer.append(targetsInTreeBuffer.toString());
        buffer.append("\n\ninclude " + UMA_PATH_TO_ROOT_VAR + UMA_MKCONSTANTS_PATH_FROM_ROOT + "\n");
        buffer.append("include " + UMA_PATH_TO_ROOT_VAR + UMA_MACROS_PATH_FROM_ROOT + "\n\n");
        buffer.append(phasePrefix + "all: " + UMA_TARGETS_IN_TREE_VAR + "\n\n");
        buffer.append("clean: $(addprefix clean_," + UMA_TARGETS_IN_TREE_VAR + ")\n\n");
        buffer.append("ddrgen: $(addprefix ddrgen_," + UMA_TARGETS_IN_TREE_VAR + ")\n\n");
        buffer.append("static: UMA_STATIC_BUILD=1\n" + "	export UMA_STATIC_BUILD\n\n" + "static:\n" + "	$(MAKE) -f makefile\n\n\n");
        for (int phase = 0; phase < configuration.numberOfPhases(); phase++) {
            Vector<String> phaseTargets = new Vector<String>();
            Vector<String> specialPhaseTargets = new Vector<String>();
            for (Artifact artifact : module.getAllArtifactsInTree()) {
                if (!artifact.evaluate())
                    continue;
                if (!artifact.isInPhase(phase))
                    continue;
                if (artifact.getType() == Artifact.TYPE_TARGET) {
                    /* 
						 * The separation of targets into phaseTargets and specialPhaseTargets
						 * is being done to allow the 'TARGET' type artifacts to be built first.
						 * This is a weak way of saying that the whole system is dependent on 
						 * these targets without having to add the dependency to each and every
						 * artifact.
						 * 
						 * This only works when not using -j on gmake and because
						 * gmake will do the targets in the order they are on the dependency line.
						 * 
						 */
                    specialPhaseTargets.add(artifact.getMakefileName());
                } else {
                    phaseTargets.add(artifact.getMakefileName());
                }
            }
            buffer.append(phasePrefix + "phase_" + configuration.phaseName(phase) + ":");
            StringBuffer targetsInPhaseBuffer = new StringBuffer();
            lwmd = new LineWrapMakefileDirective(targetsInPhaseBuffer);
            for (String target : specialPhaseTargets) {
                lwmd.addItem(target);
            }
            for (String target : phaseTargets) {
                lwmd.addItem(target);
            }
            buffer.append(targetsInPhaseBuffer.toString() + "\n");
        }
        buffer.append("\n");
        for (Artifact artifact : module.getAllArtifactsInTree()) {
            if (!artifact.evaluate())
                continue;
            switch(artifact.getType()) {
                case Artifact.TYPE_SUBDIR:
                    // to glue the tree together.
                    break;
                case Artifact.TYPE_TARGET:
                    buffer.append("clean_" + artifact.getMakefileName() + ":\n");
                    for (Command command : artifact.getCommands()) {
                        if (!command.evaluate() || command.getType() != Command.TYPE_CLEAN)
                            continue;
                        buffer.append("\t" + command.getCommand() + "\n");
                    }
                    buffer.append("\n");
                    buffer.append("ddrgen_" + artifact.getMakefileName() + ":\n");
                    for (Command command : artifact.getCommands()) {
                        if (!command.evaluate() || command.getType() != Command.TYPE_DDRGEN)
                            continue;
                        buffer.append("\t" + command.getCommand() + "\n");
                    }
                    buffer.append("\n");
                    buffer.append(artifact.getMakefileName() + ":");
                    for (Dependency dependency : artifact.getDependendies()) {
                        if (!dependency.evaluate())
                            continue;
                        buffer.append(" " + dependency.getDependency());
                    }
                    buffer.append("\n");
                    for (Command command : artifact.getCommands()) {
                        if (!command.evaluate() || command.getType() != Command.TYPE_ALL)
                            continue;
                        buffer.append("\t" + command.getCommand() + "\n");
                    }
                    buffer.append("\n");
                    break;
                default:
                    buffer.append("clean_" + artifact.getMakefileName() + ":\n\t$(" + artifact.getMakefileName() + "_build) clean\n\n");
                    buffer.append("ddrgen_" + artifact.getMakefileName() + ":\n\t$(" + artifact.getMakefileName() + "_build) ddrgen\n\n");
                    buffer.append(artifact.getMakefileName() + ": $(" + artifact.getMakefileName() + "_dependencies)\n\t$(" + artifact.getMakefileName() + "_build)\n\n");
                    break;
            }
        }
        if (module.isTopLevel()) {
            platform.writeTopLevelTargets(buffer);
        }
        buffer.append(".PHONY: all clean ddrgen");
        StringBuffer phonyTargetsBuffer = new StringBuffer();
        lwmd = new LineWrapMakefileDirective(phonyTargetsBuffer);
        for (String phonyTarget : specialTargets) {
            lwmd.addItem(phonyTarget);
            lwmd.addItem(" clean_" + phonyTarget);
        }
        for (String phonyTarget : targets) {
            lwmd.addItem(phonyTarget);
            lwmd.addItem(" clean_" + phonyTarget);
        }
        buffer.append(phonyTargetsBuffer.toString() + "\n");
        fa.writeToDisk();
    }
    for (Artifact artifact : module.getArtifacts()) {
        if (artifact.getType() == Artifact.TYPE_SUBDIR) {
            SubdirArtifact subdirArtifact = (SubdirArtifact) artifact;
            writeDirectoryMakefile(subdirArtifact.getSubdirModule());
        }
    }
}
Also used : FileAssistant(com.ibm.uma.util.FileAssistant) Command(com.ibm.uma.om.Command) SubdirArtifact(com.ibm.uma.om.SubdirArtifact) Dependency(com.ibm.uma.om.Dependency) File(java.io.File) Vector(java.util.Vector) SubdirArtifact(com.ibm.uma.om.SubdirArtifact) Artifact(com.ibm.uma.om.Artifact)

Example 8 with Artifact

use of com.ibm.uma.om.Artifact in project openj9 by eclipse.

the class UMA method validateArtifactLocations.

public void validateArtifactLocations() throws DuplicateArtifactKeyException, UMAException {
    // Artifacts won't know if they are in bundles until all artifacts are created
    for (Artifact artifact : getArtifacts().values()) {
        if (artifact.evaluate()) {
            String artifactLocationKey = platform.getLibOnDiskName(artifact);
            Artifact artifactLocationInMap = artifactLocationMap.get(artifactLocationKey);
            if (artifactLocationInMap != null) {
                throw new DuplicateArtifactKeyException("Duplicate artifact locations found [" + artifactLocationKey + "] in file " + artifact.getContainingFile() + " already found in file " + artifactLocationInMap.getContainingFile());
            }
            artifactLocationMap.put(artifactLocationKey, artifact);
        }
    }
}
Also used : SubdirArtifact(com.ibm.uma.om.SubdirArtifact) Artifact(com.ibm.uma.om.Artifact)

Example 9 with Artifact

use of com.ibm.uma.om.Artifact in project openj9 by eclipse.

the class UMA method writeTargetInformationMacrosFile.

void writeTargetInformationMacrosFile() throws UMAException {
    /*
		 *  Buffer for information about which libraries are static vs. shared 
		 *  and their locations on disk and references on the target and link lines.
		 */
    StringBuffer libLocations = new StringBuffer();
    /* 
		 * Buffer for target rules.
		 */
    StringBuffer targetRules = new StringBuffer();
    /*
		 * A couple of hashtable to gather information an artifacts build dependencies.
		 */
    Hashtable<String, LinkedHashSet<String>> buildDependencies = new Hashtable<String, LinkedHashSet<String>>();
    Hashtable<String, LinkedHashSet<String>> staticBuildDependencies = new Hashtable<String, LinkedHashSet<String>>();
    for (Module module : modules) {
        if (!module.evaluate())
            continue;
        // determine build dependencies
        for (Artifact artifact : module.getArtifacts()) {
            if (!artifact.evaluate())
                continue;
            switch(artifact.getType()) {
                // Fall Through
                case Artifact.TYPE_BUNDLE:
                case Artifact.TYPE_SHARED:
                    libLocations.append(artifact.getTargetNameWithScope() + "_alllib=" + artifact.getTargetName() + "\n");
                    libLocations.append(artifact.getTargetNameWithScope() + "_sharedlib=" + artifact.getTargetName() + "\n");
                    platform.addLibraryLocationInformation(artifact, libLocations);
                    expandLibraryDependencies(artifact, libLocations);
                    break;
                case Artifact.TYPE_STATIC:
                    libLocations.append(artifact.getTargetNameWithScope() + "_alllib=" + artifact.getTargetName() + "\n");
                    libLocations.append(artifact.getTargetNameWithScope() + "_staticlib=" + artifact.getTargetName() + "\n");
                    platform.addLibraryLocationInformation(artifact, libLocations);
                    expandLibraryDependencies(artifact, libLocations);
                    break;
                case Artifact.TYPE_EXECUTABLE:
                    break;
            }
            switch(artifact.getType()) {
                // Fall Through
                case Artifact.TYPE_BUNDLE:
                // Fall Through
                case Artifact.TYPE_SHARED:
                // Fall Through
                case Artifact.TYPE_STATIC:
                case // Fall Through
                Artifact.TYPE_EXECUTABLE:
                    targetRules.append(artifact.getMakefileName() + "_build" + "=+$(MAKE) $(UMA_WINDOWS_PARRALLEL_HACK) -C " + UMA_PATH_TO_ROOT_VAR + artifact.getContainingModule().getFullName() + " -f " + artifact.getMakefileFileName() + "\n");
                    break;
            }
            addDependencies(artifact.getLibraries(), buildDependencies, artifact);
            addDependencies(artifact.getStaticLinkLibraries(), staticBuildDependencies, artifact);
        }
    }
    /*
		 * Write uma macros helper makefile.  This file contains several variable definitions that allow
		 * easy reference to information about the artifacts. e.g., 
		 */
    File makelibDirectory = new File(UMA.getUma().getRootDirectory() + UMA_MAKELIB_DIR);
    makelibDirectory.mkdir();
    FileAssistant fa = new FileAssistant(UMA.getUma().getRootDirectory() + UMA_MACROS_PATH_FROM_ROOT);
    StringBuffer buffer = fa.getStringBuffer();
    buffer.append("# UMA Macro Helper Definition Makefile\n");
    buffer.append(configuration.getMakefileCopyrightNotice());
    buffer.append(libLocations.toString() + "\n\n\n");
    for (String target : buildDependencies.keySet()) {
        buffer.append("\n");
        for (String dependency : buildDependencies.get(target)) {
            buffer.append(target + "_dependencies+=$(findstring " + dependency + "," + UMA_TARGETS_IN_TREE_VAR + ")\n");
        }
        buffer.append("\n");
    }
    buffer.append("\n\nifdef UMA_STATIC_BUILD\n\n");
    for (String target : staticBuildDependencies.keySet()) {
        buffer.append("\n");
        for (String dependency : staticBuildDependencies.get(target)) {
            buffer.append(target + "_dependencies+=$(findstring " + dependency + "," + UMA_TARGETS_IN_TREE_VAR + ")\n");
        }
        buffer.append("\n");
    }
    buffer.append("\n\nendif\n\n");
    buffer.append(targetRules.toString());
    fa.writeToDisk();
}
Also used : LinkedHashSet(java.util.LinkedHashSet) FileAssistant(com.ibm.uma.util.FileAssistant) Hashtable(java.util.Hashtable) Module(com.ibm.uma.om.Module) File(java.io.File) SubdirArtifact(com.ibm.uma.om.SubdirArtifact) Artifact(com.ibm.uma.om.Artifact)

Example 10 with Artifact

use of com.ibm.uma.om.Artifact in project openj9 by eclipse.

the class ArtifactParser method parse.

public static Artifact parse(Node artifactNode, Module module) throws UMAException {
    Artifact artifact = new Artifact(module);
    NodeList nodeList = artifactNode.getChildNodes();
    for (int i = 0; i < nodeList.getLength(); i++) {
        Node node = nodeList.item(i);
        String nodeName = node.getLocalName();
        if (nodeName == null)
            continue;
        if (nodeName.equalsIgnoreCase("description")) {
            NodeList descChildren = node.getChildNodes();
            Node descChild = descChildren.item(0);
            artifact.setDescription(descChild.getNodeValue());
        } else if (nodeName.equalsIgnoreCase("options")) {
            NodeList optionsNodeList = node.getChildNodes();
            for (int j = 0; j < optionsNodeList.getLength(); j++) {
                Node optionItem = optionsNodeList.item(j);
                NamedNodeMap attributes = optionItem.getAttributes();
                if (attributes == null)
                    continue;
                Option option = OptionParser.parse(optionItem, artifact.getContainingFile());
                artifact.addOption(option);
            }
        } else if (nodeName.equalsIgnoreCase("phase")) {
            NodeList phaseChildren = node.getChildNodes();
            for (int j = 0; j < phaseChildren.getLength(); j++) {
                Node phasesNode = phaseChildren.item(j);
                String phaselist = phasesNode.getNodeValue();
                String[] phases = phaselist.split("\\s");
                for (int k = 0; k < phases.length; k++) {
                    try {
                        artifact.setPhase(UMA.getUma().getConfiguration().phaseFromString(phases[k]), true);
                    } catch (UMABadPhaseNameException e) {
                        throw new UMAException("in file: " + artifact.getContainingFile(), e);
                    }
                }
            }
        } else if (nodeName.equalsIgnoreCase("includes")) {
            NodeList includesNodeList = node.getChildNodes();
            for (int j = 0; j < includesNodeList.getLength(); j++) {
                Node includeItem = includesNodeList.item(j);
                NamedNodeMap attributes = includeItem.getAttributes();
                if (attributes == null)
                    continue;
                Include include = new Include(artifact.getContainingFile());
                include.setPath(attributes.getNamedItem("path").getNodeValue());
                include.setType(attributes.getNamedItem("type").getNodeValue());
                artifact.addInclude(include);
                Parser.populatePredicateList(includeItem.getChildNodes(), include);
            }
        } else if (nodeName.equalsIgnoreCase("commands")) {
            NodeList commandsNodeList = node.getChildNodes();
            for (int j = 0; j < commandsNodeList.getLength(); j++) {
                Node commandItem = commandsNodeList.item(j);
                NamedNodeMap attributes = commandItem.getAttributes();
                if (attributes == null)
                    continue;
                Command command = new Command(artifact.getContainingFile());
                command.setCommand(attributes.getNamedItem("line").getNodeValue());
                command.setType(attributes.getNamedItem("type").getNodeValue());
                artifact.addCommand(command);
                Parser.populatePredicateList(commandItem.getChildNodes(), command);
            }
        } else if (nodeName.equalsIgnoreCase("dependencies")) {
            NodeList dependenciesNodeList = node.getChildNodes();
            for (int j = 0; j < dependenciesNodeList.getLength(); j++) {
                Node dependencyItem = dependenciesNodeList.item(j);
                NamedNodeMap attributes = dependencyItem.getAttributes();
                if (attributes == null)
                    continue;
                Dependency dependency = new Dependency(artifact.getContainingFile());
                dependency.setDependency(attributes.getNamedItem("name").getNodeValue());
                artifact.addDependency(dependency);
                Parser.populatePredicateList(dependencyItem.getChildNodes(), dependency);
            }
        } else if (nodeName.equalsIgnoreCase("libraries")) {
            NodeList linkNodeList = node.getChildNodes();
            for (int j = 0; j < linkNodeList.getLength(); j++) {
                Node linkItem = linkNodeList.item(j);
                if (linkItem.getNodeName().equalsIgnoreCase("library")) {
                    Library library = LibraryParser.parse(linkItem, artifact.getContainingFile());
                    artifact.addLibrary(library);
                }
            }
        } else if (nodeName.equalsIgnoreCase("static-link-libraries")) {
            NodeList linkNodeList = node.getChildNodes();
            for (int j = 0; j < linkNodeList.getLength(); j++) {
                Node linkItem = linkNodeList.item(j);
                if (linkItem.getNodeName().equalsIgnoreCase("library")) {
                    Library library = LibraryParser.parse(linkItem, artifact.getContainingFile());
                    artifact.addStaticLinkLibrary(library);
                }
            }
        } else if (nodeName.equalsIgnoreCase("objects")) {
            NodeList linkNodeList = node.getChildNodes();
            for (int j = 0; j < linkNodeList.getLength(); j++) {
                Node linkItem = linkNodeList.item(j);
                if (linkItem.getNodeName().equalsIgnoreCase("group") || linkItem.getNodeName().equalsIgnoreCase("object")) {
                    Object object = ObjectParser.parse(linkNodeList.item(j), artifact.getContainingFile());
                    artifact.addObject(object);
                }
            }
        } else if (nodeName.equalsIgnoreCase("vpaths")) {
            NodeList vpathsNodeList = node.getChildNodes();
            for (int j = 0; j < vpathsNodeList.getLength(); j++) {
                Node vpathItem = vpathsNodeList.item(j);
                if (vpathItem.getNodeName().equalsIgnoreCase("vpath")) {
                    VPath vpath = VPathParser.parse(vpathItem, artifact.getContainingFile());
                    artifact.addVPath(vpath);
                }
            }
        } else if (nodeName.equalsIgnoreCase("makefilestubs")) {
            NodeList mfsNodeList = node.getChildNodes();
            for (int j = 0; j < mfsNodeList.getLength(); j++) {
                Node mfsItem = mfsNodeList.item(j);
                if (mfsItem.getNodeName().equalsIgnoreCase("makefilestub")) {
                    NamedNodeMap attributes = mfsItem.getAttributes();
                    Node dataNode = attributes.getNamedItem("data");
                    MakefileStub makefileStub = new MakefileStub(dataNode.getNodeValue(), artifact.getContainingFile());
                    artifact.addMakefileStub(makefileStub);
                    Parser.populatePredicateList(mfsItem.getChildNodes(), makefileStub);
                }
            }
        } else if (nodeName.equalsIgnoreCase("exports")) {
            NodeList exportsNodeList = node.getChildNodes();
            for (int j = 0; j < exportsNodeList.getLength(); j++) {
                Node exportNode = exportsNodeList.item(j);
                if (exportNode.getNodeName().equalsIgnoreCase("group")) {
                    Export group = ExportParser.parse(exportNode, artifact.getContainingFile());
                    artifact.addExport(group);
                    group.setType(Export.TYPE_GROUP);
                } else if (exportNode.getNodeName().equalsIgnoreCase("export")) {
                    Export group = ExportParser.parse(exportNode, artifact.getContainingFile());
                    artifact.addExport(group);
                    group.setType(Export.TYPE_FUNCTION);
                }
            }
        } else if (nodeName.equalsIgnoreCase("flags")) {
            NodeList flagsNodeList = node.getChildNodes();
            for (int j = 0; j < flagsNodeList.getLength(); j++) {
                Node item = flagsNodeList.item(j);
                Flag f = FlagParser.parse(item, artifact.getContainingFile());
                if (f != null) {
                    artifact.addFlag(f);
                }
            }
        }
    }
    NamedNodeMap attributes = artifactNode.getAttributes();
    Node nameNode = attributes.getNamedItem("name");
    artifact.setName(nameNode.getNodeValue());
    Node typeNode = attributes.getNamedItem("type");
    artifact.setType(typeNode.getNodeValue());
    Node bundleNode = attributes.getNamedItem("bundle");
    if (bundleNode != null) {
        artifact.setBundle(bundleNode.getNodeValue());
    }
    Node scopeNode = attributes.getNamedItem("scope");
    if (scopeNode != null) {
        artifact.setScope(scopeNode.getNodeValue());
    }
    Node includeInAllTargetNode = attributes.getNamedItem("all");
    if (includeInAllTargetNode.getNodeValue().equalsIgnoreCase("true")) {
        artifact.setIncludeInAllTarget(true);
    } else {
        artifact.setIncludeInAllTarget(false);
    }
    Node loadgroupNode = attributes.getNamedItem("loadgroup");
    if (loadgroupNode != null) {
        artifact.setLoadgroup(loadgroupNode.getNodeValue());
    }
    Node buildLocal = attributes.getNamedItem("buildlocal");
    if (buildLocal.getNodeValue().equalsIgnoreCase("true")) {
        artifact.setBuildLocal(true);
    }
    Node appendReleaseNode = attributes.getNamedItem("appendrelease");
    if (appendReleaseNode.getNodeValue().equalsIgnoreCase("true")) {
        artifact.setAppendRelease(true);
    }
    Node consoleNode = attributes.getNamedItem("console");
    if (consoleNode.getNodeValue().equalsIgnoreCase("false")) {
        artifact.setConsoleApplication(false);
    } else {
        artifact.setConsoleApplication(true);
    }
    Parser.populatePredicateList(nodeList, artifact);
    return artifact;
}
Also used : NamedNodeMap(org.w3c.dom.NamedNodeMap) NodeList(org.w3c.dom.NodeList) Node(org.w3c.dom.Node) MakefileStub(com.ibm.uma.om.MakefileStub) Include(com.ibm.uma.om.Include) UMAException(com.ibm.uma.UMAException) Dependency(com.ibm.uma.om.Dependency) Flag(com.ibm.uma.om.Flag) Artifact(com.ibm.uma.om.Artifact) Command(com.ibm.uma.om.Command) Export(com.ibm.uma.om.Export) Option(com.ibm.uma.om.Option) Object(com.ibm.uma.om.Object) VPath(com.ibm.uma.om.VPath) Library(com.ibm.uma.om.Library) UMABadPhaseNameException(com.ibm.uma.UMABadPhaseNameException)

Aggregations

Artifact (com.ibm.uma.om.Artifact)12 SubdirArtifact (com.ibm.uma.om.SubdirArtifact)8 Library (com.ibm.uma.om.Library)5 Vector (java.util.Vector)5 Dependency (com.ibm.uma.om.Dependency)3 Module (com.ibm.uma.om.Module)3 FileAssistant (com.ibm.uma.util.FileAssistant)3 Command (com.ibm.uma.om.Command)2 Export (com.ibm.uma.om.Export)2 Flag (com.ibm.uma.om.Flag)2 File (java.io.File)2 Hashtable (java.util.Hashtable)2 Node (org.w3c.dom.Node)2 NodeList (org.w3c.dom.NodeList)2 UMABadPhaseNameException (com.ibm.uma.UMABadPhaseNameException)1 UMAException (com.ibm.uma.UMAException)1 Exports (com.ibm.uma.om.Exports)1 Flags (com.ibm.uma.om.Flags)1 Include (com.ibm.uma.om.Include)1 MakefileStub (com.ibm.uma.om.MakefileStub)1