1 #region Copyright notice and license 2 3 // Copyright 2018 gRPC authors. 4 // 5 // Licensed under the Apache License, Version 2.0 (the "License"); 6 // you may not use this file except in compliance with the License. 7 // You may obtain a copy of the License at 8 // 9 // http://www.apache.org/licenses/LICENSE-2.0 10 // 11 // Unless required by applicable law or agreed to in writing, software 12 // distributed under the License is distributed on an "AS IS" BASIS, 13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 // See the License for the specific language governing permissions and 15 // limitations under the License. 16 17 #endregion 18 19 using System; 20 using System.IO; 21 using System.Runtime.CompilerServices; 22 using System.Runtime.InteropServices; 23 using System.Security; 24 using Grpc.Core.Internal; 25 26 namespace Grpc.Tools 27 { 28 // Metadata names (MSBuild item attributes) that we refer to often. 29 static class Metadata 30 { 31 // On output dependency lists. 32 public static string Source = "Source"; 33 // On Protobuf items. 34 public static string ProtoRoot = "ProtoRoot"; 35 public static string OutputDir = "OutputDir"; 36 public static string GrpcServices = "GrpcServices"; 37 public static string GrpcOutputDir = "GrpcOutputDir"; 38 }; 39 40 // A few flags used to control the behavior under various platforms. 41 internal static class Platform 42 { 43 public static readonly CommonPlatformDetection.OSKind Os = CommonPlatformDetection.GetOSKind(); 44 45 public static readonly CommonPlatformDetection.CpuArchitecture Cpu = CommonPlatformDetection.GetProcessArchitecture(); 46 47 // This is not necessarily true, but good enough. BCL lacks a per-FS 48 // API to determine file case sensitivity. 49 public static bool IsFsCaseInsensitive => Os == CommonPlatformDetection.OSKind.Windows; 50 public static bool IsWindows => Os == CommonPlatformDetection.OSKind.Windows; 51 }; 52 53 // Exception handling helpers. 54 static class Exceptions 55 { 56 // Returns true iff the exception indicates an error from an I/O call. See 57 // https://github.com/Microsoft/msbuild/blob/v15.4.8.50001/src/Shared/ExceptionHandling.cs#L101 58 static public bool IsIoRelated(Exception ex) => 59 ex is IOException || 60 (ex is ArgumentException && !(ex is ArgumentNullException)) || 61 ex is SecurityException || 62 ex is UnauthorizedAccessException || 63 ex is NotSupportedException; 64 }; 65 66 // String helpers. 67 static class Strings 68 { 69 // Compare string to argument using OrdinalIgnoreCase comparison. EqualNoCase(this string a, string b)70 public static bool EqualNoCase(this string a, string b) => 71 string.Equals(a, b, StringComparison.OrdinalIgnoreCase); 72 } 73 } 74