001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041:
042: package dwarfvsmodel;
043:
044: import java.io.File;
045: import java.io.IOException;
046: import java.util.ArrayList;
047: import java.util.StringTokenizer;
048: import org.netbeans.modules.cnd.api.model.CsmFile;
049:
050: /**
051: *
052: * @author ak119685
053: */
054: public class FileInfo {
055: private String srcFileName = null;
056: private String objFileName = null;
057: private String compiler = null;
058: private String workdir = null;
059: private ArrayList<String> includes = null;
060: private ArrayList<String> defines = null;
061: private CsmFile csmFile = null;
062:
063: /** Creates a new instance of CompileInfo */
064: public FileInfo(String compileStr) throws IllegalArgumentException {
065:
066: // Check if it is a compilation string ...
067: if (compileStr.indexOf(" -c ") == -1) { // NOI18N
068: throw new IllegalArgumentException(
069: "This is not a compilation string."); // NOI18N
070: }
071:
072: includes = new ArrayList<String>();
073: defines = new ArrayList<String>();
074:
075: StringTokenizer st = new StringTokenizer(compileStr, " "); // NOI18N
076:
077: int total_count = st.countTokens();
078:
079: compiler = st.nextToken();
080: workdir = st.nextToken();
081:
082: int token_count = 2;
083:
084: if (workdir.startsWith("\"")) { // NOI18N
085: String tok = st.nextToken();
086: do {
087: workdir += " " + tok; // NOI18N
088: token_count++;
089: } while (!tok.endsWith("\"")); // NOI18N
090:
091: workdir = workdir.substring(1, workdir.length() - 1);
092: }
093:
094: while (st.hasMoreTokens()) {
095: String token = st.nextToken();
096: token_count++;
097:
098: if (token.equals("-o")) { // NOI18N
099: objFileName = calculatePath(st.nextToken());
100: token_count++;
101: } else if (token.startsWith("-I")) { // NOI18N
102: if (token.length() == 2) {
103: includes.add(calculatePath(st.nextToken()));
104: token_count++;
105: } else {
106: includes.add(calculatePath(token.substring(2)));
107: }
108: } else if (token.startsWith("-D")) { // NOI18N
109: if (token.length() == 2) {
110: defines.add(st.nextToken());
111: token_count++;
112: } else {
113: defines.add(token.substring(2));
114: }
115: } else {
116: // TODO: Change algorythm!
117: if (!token.startsWith("-")) { // NOI18N
118: srcFileName = calculatePath(token);
119: }
120: }
121: }
122:
123: if (objFileName == null && srcFileName != null) {
124: objFileName = srcFileName.substring(0, srcFileName
125: .lastIndexOf('.'))
126: + ".o"; // NOI18N
127: }
128: }
129:
130: public String getSrcFileName() {
131: return srcFileName;
132: }
133:
134: public String getObjFileName() {
135: return objFileName;
136: }
137:
138: public ArrayList<String> getSysIncludes() {
139: return includes;
140: }
141:
142: public ArrayList<String> getQuoteIncludes() {
143: // TODO: make disting. b/w sys and quote
144: return includes;
145: }
146:
147: public ArrayList<String> getDefines() {
148: return defines;
149: }
150:
151: private String calculatePath(String file) {
152: String path = "";
153:
154: try {
155: if (file.startsWith("/") || file.startsWith("\\")) { // NOI18N
156: path = new File(file).getCanonicalPath();
157: } else {
158: path = new File(workdir + File.separator + file)
159: .getCanonicalPath();
160: }
161: } catch (IOException ex) {
162: throw new IllegalArgumentException("Cannot convert " + file
163: + " to canonical path"); // NOI18N
164: }
165:
166: return path;
167: }
168:
169: ArrayList<String> convertPaths(ArrayList<String> paths) {
170: ArrayList<String> result = new ArrayList<String>();
171:
172: for (String path : paths) {
173: result.add(calculatePath(path));
174: }
175:
176: return result;
177: }
178:
179: public CsmFile getCsmFile() {
180: return csmFile;
181: }
182:
183: public void setCsmFile(CsmFile csmFile) {
184: this.csmFile = csmFile;
185: }
186: }
|