summaryrefslogtreecommitdiffstats
path: root/src/includes_normalize.h
diff options
context:
space:
mode:
authorScott Graham <scottmg@chromium.org>2012-08-12 22:51:21 (GMT)
committerEvan Martin <martine@danga.com>2012-08-12 22:58:47 (GMT)
commit0af67f1babe08c7e00ba194ccb47c4a0c60fa52a (patch)
treee1e7be9da98c6bfc2716af0eff748ef9dec8cd29 /src/includes_normalize.h
parentc08766e86d10f0ef5417f6c6accbff37706b08c4 (diff)
downloadNinja-0af67f1babe08c7e00ba194ccb47c4a0c60fa52a.zip
Ninja-0af67f1babe08c7e00ba194ccb47c4a0c60fa52a.tar.gz
Ninja-0af67f1babe08c7e00ba194ccb47c4a0c60fa52a.tar.bz2
add functions for normalizing win32 include paths
(Note from Evan: this is landing Scott's code more or less verbatim without a lot of analysis; it could maybe be simplified and reduced, but it's only intended to be used in the MSVC helper so it's fine to be experimental.)
Diffstat (limited to 'src/includes_normalize.h')
-rw-r--r--src/includes_normalize.h35
1 files changed, 35 insertions, 0 deletions
diff --git a/src/includes_normalize.h b/src/includes_normalize.h
new file mode 100644
index 0000000..458613a
--- /dev/null
+++ b/src/includes_normalize.h
@@ -0,0 +1,35 @@
+// Copyright 2012 Google Inc. All Rights Reserved.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include <string>
+#include <vector>
+using namespace std;
+
+struct StringPiece;
+
+/// Utility functions for normalizing include paths on Windows.
+/// TODO: this likely duplicates functionality of CanonicalizePath; refactor.
+struct IncludesNormalize {
+ // Internal utilities made available for testing, maybe useful otherwise.
+ static string Join(const vector<string>& list, char sep);
+ static vector<string> Split(const string& input, char sep);
+ static string ToLower(const string& s);
+ static string AbsPath(StringPiece s);
+ static string Relativize(StringPiece path, const string& start);
+
+ /// Normalize by fixing slashes style, fixing redundant .. and . and makes the
+ /// path relative to |relative_to|. Case is normalized to lowercase on
+ /// Windows too.
+ static string Normalize(StringPiece input, const char* relative_to);
+};