diff --git a/PRESUBMIT.py b/PRESUBMIT.py index 3fdfe7fc11..5258549784 100755 --- a/PRESUBMIT.py +++ b/PRESUBMIT.py @@ -267,7 +267,14 @@ def _RunPythonTests(input_api, output_api): def _CommonChecks(input_api, output_api): """Checks common to both upload and commit.""" results = [] - results.extend(_CheckApprovedFilesLintClean(input_api, output_api)) + # Filter out files that are in objc or ios dirs from being cpplint-ed since + # they do not follow C++ lint rules. + black_list = input_api.DEFAULT_BLACK_LIST + ( + r".*\bobjc[\\\/].*", + ) + source_file_filter = lambda x: input_api.FilterSourceFile(x, None, black_list) + results.extend(_CheckApprovedFilesLintClean( + input_api, output_api, source_file_filter)) results.extend(input_api.canned_checks.RunPylint(input_api, output_api, black_list=(r'^.*gviz_api\.py$', r'^.*gaeunit\.py$', diff --git a/webrtc/base/BUILD.gn b/webrtc/base/BUILD.gn index 6d51003fed..4f42695854 100644 --- a/webrtc/base/BUILD.gn +++ b/webrtc/base/BUILD.gn @@ -605,3 +605,19 @@ static_library("rtc_base") { defines += [ "timezone=_timezone" ] } } + +if (is_ios) { + source_set("rtc_base_objc") { + deps = [ + ":rtc_base", + ] + cflags = [ "-fobjc-arc" ] + configs += [ "..:common_config" ] + public_configs = [ "..:common_inherited_config" ] + + sources = [ + "objc/RTCLogging.h", + "objc/RTCLogging.mm", + ] + } +} diff --git a/webrtc/base/base.gyp b/webrtc/base/base.gyp index 44aff84c43..23a3c26c77 100644 --- a/webrtc/base/base.gyp +++ b/webrtc/base/base.gyp @@ -22,6 +22,27 @@ }], ], }], + # TODO(tkchin): Mac support. There are a bunch of problems right now because + # of some settings pulled down from Chromium. + ['OS=="ios"', { + 'targets': [ + { + 'target_name': 'rtc_base_objc', + 'type': 'static_library', + 'dependencies': [ + 'rtc_base', + ], + 'sources': [ + 'objc/RTCLogging.h', + 'objc/RTCLogging.mm' + ], + 'xcode_settings': { + 'CLANG_ENABLE_OBJC_ARC': 'YES', + 'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'YES', + }, + } + ], + }], # OS=="ios" ], 'targets': [ { diff --git a/webrtc/base/objc/OWNERS b/webrtc/base/objc/OWNERS new file mode 100644 index 0000000000..cd06158b7f --- /dev/null +++ b/webrtc/base/objc/OWNERS @@ -0,0 +1 @@ +tkchin@webrtc.org diff --git a/webrtc/base/objc/RTCLogging.h b/webrtc/base/objc/RTCLogging.h new file mode 100644 index 0000000000..19fade5cfc --- /dev/null +++ b/webrtc/base/objc/RTCLogging.h @@ -0,0 +1,75 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import + +// Subset of rtc::LoggingSeverity. +typedef NS_ENUM(NSInteger, RTCLoggingSeverity) { + kRTCLoggingSeverityVerbose, + kRTCLoggingSeverityInfo, + kRTCLoggingSeverityWarning, + kRTCLoggingSeverityError, +}; + +#if defined(__cplusplus) +extern "C" void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string); +extern "C" void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); +extern "C" NSString* RTCFileName(const char* filePath); +#else + +// Wrapper for C++ LOG(sev) macros. +// Logs the log string to the webrtc logstream for the given severity. +extern void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string); + +// Wrapper for rtc::LogMessage::LogToDebug. +// Sets the minimum severity to be logged to console. +extern void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity); + +// Returns the filename with the path prefix removed. +extern NSString* RTCFileName(const char* filePath); + +#endif + +// Some convenience macros. + +#define RTCLogString(format, ...) \ + [NSString stringWithFormat:@"(%@:%d %s): " format, \ + RTCFileName(__FILE__), \ + __LINE__, \ + __FUNCTION__, \ + ##__VA_ARGS__] + +#define RTCLogFormat(severity, format, ...) \ + do { \ + NSString* log_string = RTCLogString(format, ##__VA_ARGS__); \ + RTCLogEx(severity, log_string); \ + } while (false) + +#define RTCLogVerbose(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityVerbose, format, ##__VA_ARGS__) \ + +#define RTCLogInfo(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityInfo, format, ##__VA_ARGS__) \ + +#define RTCLogWarning(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityWarning, format, ##__VA_ARGS__) \ + +#define RTCLogError(format, ...) \ + RTCLogFormat(kRTCLoggingSeverityError, format, ##__VA_ARGS__) \ + +#if !defined(NDEBUG) +#define RTCLogDebug(format, ...) RTCLogInfo(format, ##__VA_ARGS__) +#else +#define RTCLogDebug(format, ...) \ + do { \ + } while (false) +#endif + +#define RTCLog(format, ...) RTCLogInfo(format, ##__VA_ARGS__) diff --git a/webrtc/base/objc/RTCLogging.mm b/webrtc/base/objc/RTCLogging.mm new file mode 100644 index 0000000000..e9afe725d1 --- /dev/null +++ b/webrtc/base/objc/RTCLogging.mm @@ -0,0 +1,47 @@ +/* + * Copyright 2015 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#import "RTCLogging.h" + +#include "webrtc/base/logging.h" + +rtc::LoggingSeverity RTCGetNativeLoggingSeverity(RTCLoggingSeverity severity) { + switch (severity) { + case kRTCLoggingSeverityVerbose: + return rtc::LS_VERBOSE; + case kRTCLoggingSeverityInfo: + return rtc::LS_INFO; + case kRTCLoggingSeverityWarning: + return rtc::LS_WARNING; + case kRTCLoggingSeverityError: + return rtc::LS_ERROR; + } +} + +void RTCLogEx(RTCLoggingSeverity severity, NSString* log_string) { + if (log_string.length) { + const char* utf8_string = log_string.UTF8String; + LOG_V(RTCGetNativeLoggingSeverity(severity)) << utf8_string; + } +} + +void RTCSetMinDebugLogLevel(RTCLoggingSeverity severity) { + rtc::LogMessage::LogToDebug(RTCGetNativeLoggingSeverity(severity)); +} + +NSString* RTCFileName(const char* file_path) { + NSString* ns_file_path = + [[NSString alloc] initWithBytesNoCopy:const_cast(file_path) + length:strlen(file_path) + encoding:NSUTF8StringEncoding + freeWhenDone:NO]; + return ns_file_path.lastPathComponent; +} +