Mercurial > hg > truffle
annotate src/share/tools/ProjectCreator/FileTreeCreatorVC10.java @ 17990:00c8a1255912
8033626: assert(ex_map->jvms()->same_calls_as(_exceptions->jvms())) failed: all collected exceptions must come from the same place
Reviewed-by: kvn, roland
author | vlivanov |
---|---|
date | Tue, 17 Jun 2014 09:02:30 +0000 |
parents | bd0e82136b03 |
children | 3cce976666d9 |
rev | line source |
---|---|
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
1 /* |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
2 * Copyright (c) 2012, 2013, Oracle and/or its affiliates. All rights reserved. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
4 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
5 * This code is free software; you can redistribute it and/or modify it |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
6 * under the terms of the GNU General Public License version 2 only, as |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
7 * published by the Free Software Foundation. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
8 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
9 * This code is distributed in the hope that it will be useful, but WITHOUT |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
12 * version 2 for more details (a copy is included in the LICENSE file that |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
13 * accompanied this code). |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
14 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
15 * You should have received a copy of the GNU General Public License version |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
16 * 2 along with this work; if not, write to the Free Software Foundation, |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
18 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
20 * or visit www.oracle.com if you need additional information or have any |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
21 * questions. |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
22 * |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
23 */ |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
24 |
6801 | 25 import static java.nio.file.FileVisitResult.CONTINUE; |
26 | |
27 import java.io.IOException; | |
28 import java.nio.file.FileSystems; | |
29 import java.nio.file.FileVisitResult; | |
30 import java.nio.file.Files; | |
31 import java.nio.file.Path; | |
32 import java.nio.file.attribute.BasicFileAttributes; | |
33 import java.util.Stack; | |
34 import java.util.Vector; | |
35 | |
36 public class FileTreeCreatorVC10 extends FileTreeCreator { | |
37 | |
38 public FileTreeCreatorVC10(Path startDir, Vector<BuildConfig> allConfigs, WinGammaPlatformVC10 wg) { | |
39 super(startDir, allConfigs, wg); | |
40 } | |
41 | |
42 @Override | |
43 public FileVisitResult visitFile(Path file, BasicFileAttributes attr) { | |
44 DirAttributes currentFileAttr = attributes.peek().clone(); | |
45 boolean usePch = false; | |
46 boolean disablePch = false; | |
47 boolean useIgnore = false; | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
48 boolean isAltSrc = false; // only needed as a debugging crumb |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
49 boolean isReplacedByAltSrc = false; |
6801 | 50 String fileName = file.getFileName().toString(); |
51 | |
52 // TODO hideFile | |
53 | |
54 // usePch applies to all configs for a file. | |
55 if (fileName.equals(BuildConfig.getFieldString(null, "UseToGeneratePch"))) { | |
56 usePch = true; | |
57 } | |
58 | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
59 String fileLoc = vcProjLocation.relativize(file).toString(); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
60 |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
61 // isAltSrc and isReplacedByAltSrc applies to all configs for a file |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
62 if (BuildConfig.matchesRelativeAltSrcInclude( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
63 file.toAbsolutePath().toString())) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
64 // current file is an alternate source file so track it |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
65 isAltSrc = true; |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
66 BuildConfig.trackRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
67 file.toAbsolutePath().toString()); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
68 } else if (BuildConfig.matchesRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
69 file.toAbsolutePath().toString())) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
70 // current file is a regular file that matches an alternate |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
71 // source file so yack about replacing the regular file |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
72 isReplacedByAltSrc = true; |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
73 System.out.println("INFO: alternate source file '" + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
74 BuildConfig.getMatchingRelativeAltSrcFile( |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
75 file.toAbsolutePath().toString()) + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
76 "' replaces '" + fileLoc + "'"); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
77 } |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
78 |
6801 | 79 for (BuildConfig cfg : allConfigs) { |
80 if (cfg.lookupHashFieldInContext("IgnoreFile", fileName) != null) { | |
81 useIgnore = true; | |
82 currentFileAttr.setIgnore(cfg); | |
83 } else if (cfg.matchesIgnoredPath(file.toAbsolutePath().toString())) { | |
84 useIgnore = true; | |
85 currentFileAttr.setIgnore(cfg); | |
86 } | |
87 | |
88 if (cfg.lookupHashFieldInContext("DisablePch", fileName) != null) { | |
89 disablePch = true; | |
90 currentFileAttr.setDisablePch(cfg); | |
91 } | |
92 | |
93 Vector<String> rv = new Vector<String>(); | |
94 cfg.collectRelevantVectors(rv, "AdditionalFile"); | |
95 for(String addFile : rv) { | |
96 if (addFile.equals(fileName)) { | |
97 // supress any ignore | |
98 // TODO - may need some adjustments | |
99 if (file.toAbsolutePath().toString().contains(cfg.get("Flavour"))) { | |
100 currentFileAttr.removeFromIgnored(cfg); | |
101 } | |
102 } | |
103 } | |
104 } | |
105 | |
12021 | 106 String tagName = wg10.getFileTagFromSuffix(fileName); |
6801 | 107 |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
108 if (!useIgnore && !disablePch && !usePch && !isReplacedByAltSrc) { |
6801 | 109 wg.tag(tagName, new String[] { "Include", fileLoc}); |
110 } else { | |
111 wg.startTag( | |
112 tagName, | |
113 new String[] { "Include", fileLoc}); | |
114 | |
115 for (BuildConfig cfg : allConfigs) { | |
116 boolean ignore = currentFileAttr.hasIgnore(cfg); | |
117 if (ignore) { | |
118 wg.tagData("ExcludedFromBuild", "true", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
119 } | |
120 if (usePch) { | |
121 wg.tagData("PrecompiledHeader", "Create", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
122 } | |
123 if (disablePch) { | |
124 wg.tag("PrecompiledHeader", "Condition", "'$(Configuration)|$(Platform)'=='" + cfg.get("Name") + "'"); | |
125 } | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
126 if (isReplacedByAltSrc) { |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
127 wg.tagData("ExcludedFromBuild", "true", "Condition", |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
128 "'$(Configuration)|$(Platform)'=='" + |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
129 cfg.get("Name") + "'"); |
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
130 } |
6801 | 131 } |
132 wg.endTag(); | |
133 } | |
134 | |
135 String filter = startDir.relativize(file.getParent().toAbsolutePath()).toString(); | |
12021 | 136 wg10.addFilterDependency(fileLoc, filter); |
6801 | 137 |
138 return CONTINUE; | |
139 } | |
140 | |
141 @Override | |
142 public FileVisitResult preVisitDirectory(Path path, BasicFileAttributes attrs) | |
143 throws IOException { | |
144 Boolean hide = false; | |
145 // TODO remove attrs, if path is matched in this dir, then it is too in every subdir. | |
146 // And we will check anyway | |
147 DirAttributes newAttr = attributes.peek().clone(); | |
148 | |
149 // check per config ignorePaths! | |
150 for (BuildConfig cfg : allConfigs) { | |
151 if (cfg.matchesIgnoredPath(path.toAbsolutePath().toString())) { | |
152 newAttr.setIgnore(cfg); | |
153 } | |
154 | |
155 // Hide is always on all configs. And additional files are never hiddden | |
156 if (cfg.matchesHidePath(path.toAbsolutePath().toString())) { | |
157 hide = true; | |
158 break; | |
159 } | |
160 } | |
161 | |
162 if (!hide) { | |
163 String name = startDir.relativize(path.toAbsolutePath()).toString(); | |
164 if (!"".equals(name)) { | |
12021 | 165 wg10.addFilter(name); |
6801 | 166 } |
167 | |
168 attributes.push(newAttr); | |
169 return super.preVisitDirectory(path, attrs); | |
170 } else { | |
171 return FileVisitResult.SKIP_SUBTREE; | |
172 } | |
173 } | |
174 | |
175 @Override | |
176 public FileVisitResult postVisitDirectory(Path dir, IOException exc) { | |
177 //end matching attributes set by ignorepath | |
178 attributes.pop(); | |
179 return CONTINUE; | |
180 } | |
181 | |
182 @Override | |
183 public FileVisitResult visitFileFailed(Path file, IOException exc) { | |
184 return CONTINUE; | |
185 } | |
186 | |
187 public void writeFileTree() throws IOException { | |
188 Files.walkFileTree(this.startDir, this); | |
189 } | |
12014
31f3b1e1c5e5
8016601: Unable to build hsx24 on Windows using project creator and Visual Studio
dcubed
parents:
6801
diff
changeset
|
190 } |