- getProject().setProperty("MODULE_DIR",\r
- getProject().replaceProperties(getProject().getProperty("MODULE_DIR")));\r
- }\r
- if (OutputManager.PLATFORM != null) {\r
- getProject().setProperty("PLATFORM", OutputManager.PLATFORM);\r
- }\r
- if (OutputManager.PLATFORM_DIR != null) {\r
- getProject().setProperty("PLATFORM_DIR", OutputManager.PLATFORM_DIR);\r
- }\r
- }\r
-\r
- /**\r
- The whole BaseName_build.xml is composed of seven part. \r
- <ul>\r
- <li> ANT properties; </li>\r
- <li> Dependent module (dependent library instances in most case); </li>\r
- <li> Source files; </li>\r
- <li> Sections if module is not library; </li>\r
- <li> Output (different for library module and driver module); </li>\r
- <li> Clean; </li>\r
- <li> Clean all. </li>\r
- </ul>\r
- \r
- @throws BuildException\r
- Error throws during BaseName_build.xml generating. \r
- **/\r
- private void genBuildFile() throws BuildException {\r
- FfsProcess fp = new FfsProcess();\r
- DocumentBuilderFactory domfac = DocumentBuilderFactory.newInstance();\r
- try {\r
- DocumentBuilder dombuilder = domfac.newDocumentBuilder();\r
- Document document = dombuilder.newDocument();\r
- Comment rootComment = document.createComment(info);\r
- //\r
- // create root element and its attributes\r
- //\r
- Element root = document.createElement("project");\r
- //\r
- // root.setAttribute("name", base_name);\r
- //\r
- root.setAttribute("default", "main");\r
- root.setAttribute("basedir", ".");\r
- //\r
- // element for External ANT tasks\r
- //\r
- root.appendChild(document.createComment("Apply external ANT tasks"));\r
- Element ele = document.createElement("taskdef");\r
- ele.setAttribute("resource", "frameworktasks.tasks");\r
- root.appendChild(ele);\r
- ele = document.createElement("taskdef");\r
- ele.setAttribute("resource", "cpptasks.tasks");\r
- root.appendChild(ele);\r
- ele = document.createElement("typedef");\r
- ele.setAttribute("resource", "cpptasks.types");\r
- root.appendChild(ele);\r
- ele = document.createElement("taskdef");\r
- ele.setAttribute("resource", "net/sf/antcontrib/antlib.xml");\r
- root.appendChild(ele);\r
- //\r
- // elements for Properties\r
- //\r
- root.appendChild(document.createComment("All Properties"));\r
- ele = document.createElement("property");\r
- ele.setAttribute("name", "BASE_NAME");\r
- ele.setAttribute("value", baseName);\r
- root.appendChild(ele);\r
- //\r
- // Generate the default target,\r
- // which depends on init, sections and output target\r
- //\r
- root.appendChild(document.createComment("Default target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "main");\r
- ele.setAttribute("depends", "libraries, sourcefiles, sections, output");\r
- root.appendChild(ele);\r
- //\r
- // compile all source files\r
- //\r
- root.appendChild(document.createComment("Compile all dependency Library instances."));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "libraries");\r
- //\r
- // Parse all sourfiles but files specified in sections\r
- //\r
- applyLibraryInstance(document, ele);\r
- root.appendChild(ele);\r
- //\r
- // compile all source files\r
- //\r
- root.appendChild(document.createComment("sourcefiles target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "sourcefiles");\r
- //\r
- // Parse all sourfiles but files specified in sections\r
- //\r
- applyCompileElement(document, ele);\r
- root.appendChild(ele);\r
- //\r
- // generate the init target\r
- // main purpose is create all nessary pathes\r
- // generate the sections target\r
- //\r
- root.appendChild(document.createComment("sections target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "sections");\r
- applySectionsElement(document, ele, fp);\r
- root.appendChild(ele);\r
- //\r
- // generate the output target\r
- //\r
- root.appendChild(document.createComment("output target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "output");\r
- applyOutputElement(document, ele, fp);\r
- root.appendChild(ele);\r
- //\r
- // generate the clean target\r
- //\r
- root.appendChild(document.createComment("clean target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "clean");\r
- applyCleanElement(document, ele);\r
- root.appendChild(ele);\r
- //\r
- // generate the Clean All target\r
- //\r
- root.appendChild(document.createComment("Clean All target"));\r
- ele = document.createElement("target");\r
- ele.setAttribute("name", "cleanall");\r
- applyDeepcleanElement(document, ele);\r
- root.appendChild(ele);\r
- //\r
- // add the root element to the document\r
- //\r
- document.appendChild(rootComment);\r
- document.appendChild(root);\r
- //\r
- // Prepare the DOM document for writing\r
- //\r
- Source source = new DOMSource(document);\r
- //\r
- // Prepare the output file\r
- //\r
- File file = new File(getProject().getProperty("DEST_DIR_OUTPUT") + File.separatorChar + baseName\r
- + "_build.xml");\r
- //\r
- // generate all directory path\r
- //\r
- (new File(file.getParent())).mkdirs();\r
- Result result = new StreamResult(file);\r
- //\r
- // Write the DOM document to the file\r
- //\r
- Transformer xformer = TransformerFactory.newInstance().newTransformer();\r
- xformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");\r
- xformer.setOutputProperty(OutputKeys.INDENT, "yes");\r
- xformer.transform(source, result);\r
- } catch (Exception ex) {\r
- throw new BuildException("Module [" + baseName + "] generating build file failed.\n" + ex.getMessage());\r
- }\r
- }\r
-\r
- /**\r
- Generate the clean elements for BaseName_build.xml. \r
- \r
- @param document current BaseName_build.xml XML document\r
- @param root Root element for current\r
- **/\r
- private void applyCleanElement(Document document, Node root) {\r
- String[] libinstances = libraries.toArray(new String[libraries.size()]);\r
- for (int i = 0; i < libinstances.length; i++) {\r
- File file = new File(GlobalData.getModulePath(libinstances[i]) + File.separatorChar + "build.xml");\r
-\r
- Element ifEle = document.createElement("if");\r
- Element availableEle = document.createElement("available");\r
- availableEle.setAttribute("file", file.getPath());\r
- ifEle.appendChild(availableEle);\r
- Element elseEle = document.createElement("then");\r
-\r
- Element ele = document.createElement("ant");\r
- ele.setAttribute("antfile", file.getPath());\r
- ele.setAttribute("inheritAll", "false");\r
- ele.setAttribute("target", libinstances[i] + "_clean");\r
- //\r
- // Workspace_DIR\r
- //\r
- Element property = document.createElement("property");\r
- property.setAttribute("name", "WORKSPACE_DIR");\r
- property.setAttribute("value", "${WORKSPACE_DIR}");\r
- ele.appendChild(property);\r
- //\r
- // Package Dir\r
- //\r
- property = document.createElement("property");\r
- property.setAttribute("name", "PACKAGE_DIR");\r
- property.setAttribute("value", "${WORKSPACE_DIR}" + File.separatorChar\r
- + GlobalData.getPackagePathForModule(libinstances[i]));\r
- ele.appendChild(property);\r
- //\r
- // ARCH\r