| // Copyright 2017 The Bazel Authors. 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. |
| |
| #ifndef BAZEL_SRC_TOOLS_LAUNCHER_UTIL_LAUNCHER_UTIL_H_ |
| #define BAZEL_SRC_TOOLS_LAUNCHER_UTIL_LAUNCHER_UTIL_H_ |
| |
| #define PRINTF_ATTRIBUTE(string_index, first_to_check) |
| |
| #include <string> |
| |
| namespace bazel { |
| namespace launcher { |
| |
| std::string GetLastErrorString(); |
| |
| // Prints the specified error message and exits nonzero. |
| __declspec(noreturn) void die(const wchar_t* format, ...) |
| PRINTF_ATTRIBUTE(1, 2); |
| |
| // Prints the specified error message. |
| void PrintError(const wchar_t* format, ...) PRINTF_ATTRIBUTE(1, 2); |
| |
| // Strip the .exe extension from binary path. |
| // |
| // On Windows, if the binary path is foo/bar/bin.exe then return foo/bar/bin |
| std::wstring GetBinaryPathWithoutExtension(const std::wstring& binary); |
| |
| // Add executable extension to binary path |
| // |
| // On Windows, if the binary path is foo/bar/bin then return foo/bar/bin.exe |
| std::wstring GetBinaryPathWithExtension(const std::wstring& binary); |
| |
| // Escape a command line argument using Bash escaping syntax. |
| // |
| // If the argument has space, then we quote it. We escape quote with a backslash |
| // (from " to \") and escape a single backslash with another backslash (from \ |
| // to \\). |
| std::wstring BashEscapeArg(const std::wstring& arg); |
| |
| // Escape a command line argument using Windows escaping syntax. |
| // |
| // This escaping lets us safely pass arguments to subprocesses created with |
| // CreateProcessW. (The escaping rules are a bit complex, look at the function |
| // implementation.) |
| std::wstring WindowsEscapeArg(const std::wstring& arg); |
| |
| // TODO(laszlocsomor): Delete WindowsEscapeArg and use WindowsEscapeArg2. |
| // WindowsEscapeArg escapes incorrectly while WindowsEscapeArg2 escapes |
| // correctly. |
| std::wstring WindowsEscapeArg2(const std::wstring& arg); |
| |
| // Convert a path to an absolute Windows path with \\?\ prefix. |
| // This method will print an error and exit if it cannot convert the path. |
| std::wstring AsAbsoluteWindowsPath(const wchar_t* path); |
| |
| // Check if a file exists at a given path. |
| bool DoesFilePathExist(const wchar_t* path); |
| |
| // Check if a directory exists at a given path. |
| bool DoesDirectoryPathExist(const wchar_t* path); |
| |
| // Delete a file at a given path. |
| bool DeleteFileByPath(const wchar_t* path); |
| |
| // Delete a directory at a given path,. |
| // If it's a real directory, it must be empty |
| // If it's a junction, the target directory it points to doesn't have to be |
| // empty, the junction will be deleted regardless of the state of the target. |
| bool DeleteDirectoryByPath(const wchar_t* path); |
| |
| // Get the value of a specific environment variable |
| // |
| // Return true if succeeded and the result is stored in buffer. |
| // Return false if the environment variable doesn't exist or the value is empty. |
| bool GetEnv(const std::wstring& env_name, std::wstring* buffer); |
| |
| // Set the value of a specific environment variable |
| // |
| // Return true if succeeded, otherwise false. |
| bool SetEnv(const std::wstring& env_name, const std::wstring& value); |
| |
| // Return a random string with a given length. |
| // The string consists of a-zA-Z0-9 |
| std::wstring GetRandomStr(size_t len); |
| |
| // Normalize a path to a Windows path in lower case |
| bool NormalizePath(const std::wstring& path, std::wstring* result); |
| |
| // Get the base name from a normalized absoulute path |
| std::wstring GetBaseNameFromPath(const std::wstring& path); |
| |
| // Get parent directory from a normalized absoulute path |
| std::wstring GetParentDirFromPath(const std::wstring& path); |
| |
| // Calculate a relative path from `path` to `base`. |
| // This function expects normalized Windows path in lower case. |
| // `path` and `base` should be both absolute or both relative. |
| bool RelativeTo(const std::wstring& path, const std::wstring& base, |
| std::wstring* result); |
| |
| } // namespace launcher |
| } // namespace bazel |
| |
| #endif // BAZEL_SRC_TOOLS_LAUNCHER_UTIL_LAUNCHER_UTIL_H_ |