Ninja
includes_normalize.h
Go to the documentation of this file.
00001 // Copyright 2012 Google Inc. All Rights Reserved.
00002 //
00003 // Licensed under the Apache License, Version 2.0 (the "License");
00004 // you may not use this file except in compliance with the License.
00005 // You may obtain a copy of the License at
00006 //
00007 //     http://www.apache.org/licenses/LICENSE-2.0
00008 //
00009 // Unless required by applicable law or agreed to in writing, software
00010 // distributed under the License is distributed on an "AS IS" BASIS,
00011 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00012 // See the License for the specific language governing permissions and
00013 // limitations under the License.
00014 
00015 #include <string>
00016 #include <vector>
00017 using namespace std;
00018 
00019 struct StringPiece;
00020 
00021 /// Utility functions for normalizing include paths on Windows.
00022 /// TODO: this likely duplicates functionality of CanonicalizePath; refactor.
00023 struct IncludesNormalize {
00024   // Internal utilities made available for testing, maybe useful otherwise.
00025   static string Join(const vector<string>& list, char sep);
00026   static vector<string> Split(const string& input, char sep);
00027   static string ToLower(const string& s);
00028   static string AbsPath(StringPiece s);
00029   static string Relativize(StringPiece path, const string& start);
00030 
00031   /// Normalize by fixing slashes style, fixing redundant .. and . and makes the
00032   /// path relative to |relative_to|. Case is normalized to lowercase on
00033   /// Windows too.
00034   static string Normalize(const string& input, const char* relative_to);
00035 };