diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2021-07-09 19:43:04 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-07-09 19:43:04 +0200 |
commit | c0b31562f51606fc1b1c662e99dffde1044a9583 (patch) | |
tree | 3157fbaec9bb148c64cb4fd3fa40bad6e8ad3864 | |
parent | eeabf0a8446c41ce8b11c063ede07337ba7eabbb (diff) | |
parent | 69f92fa26c7bef3b042d8da5e520fe60b22e01b7 (diff) | |
download | fork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.tar.gz fork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.tar.bz2 fork-godot-webrtc-native-c0b31562f51606fc1b1c662e99dffde1044a9583.zip |
Merge pull request #39 from Faless/style/clang_black
Add static checks
-rw-r--r-- | .clang-format | 128 | ||||
-rw-r--r-- | .github/workflows/build_release.yml | 27 | ||||
-rw-r--r-- | SConstruct | 387 | ||||
-rwxr-xr-x | misc/scripts/black_format.sh | 34 | ||||
-rwxr-xr-x | misc/scripts/clang_format.sh | 58 | ||||
-rwxr-xr-x | misc/scripts/copyright_headers.py | 95 | ||||
-rwxr-xr-x | misc/scripts/file_format.sh | 48 | ||||
-rw-r--r-- | src/WebRTCLibDataChannel.cpp | 36 | ||||
-rw-r--r-- | src/WebRTCLibDataChannel.hpp | 32 | ||||
-rw-r--r-- | src/WebRTCLibPeerConnection.cpp | 43 | ||||
-rw-r--r-- | src/WebRTCLibPeerConnection.hpp | 32 | ||||
-rw-r--r-- | src/init.cpp | 35 | ||||
-rw-r--r-- | src/net/WebRTCDataChannelNative.cpp | 30 | ||||
-rw-r--r-- | src/net/WebRTCDataChannelNative.hpp | 30 | ||||
-rw-r--r-- | src/net/WebRTCPeerConnectionNative.cpp | 30 | ||||
-rw-r--r-- | src/net/WebRTCPeerConnectionNative.hpp | 30 |
16 files changed, 883 insertions, 192 deletions
diff --git a/.clang-format b/.clang-format new file mode 100644 index 0000000..1c26421 --- /dev/null +++ b/.clang-format @@ -0,0 +1,128 @@ +# Commented out parameters are those with the same value as base LLVM style +# We can uncomment them if we want to change their value, or enforce the +# chosen value in case the base style changes (last sync: Clang 6.0.1). +--- +### General config, applies to all languages ### +BasedOnStyle: LLVM +AccessModifierOffset: -4 +AlignAfterOpenBracket: DontAlign +# AlignConsecutiveAssignments: false +# AlignConsecutiveDeclarations: false +# AlignEscapedNewlines: Right +# AlignOperands: true +AlignTrailingComments: false +AllowAllParametersOfDeclarationOnNextLine: false +# AllowShortBlocksOnASingleLine: false +# AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +# AllowShortIfStatementsOnASingleLine: false +# AllowShortLoopsOnASingleLine: false +# AlwaysBreakAfterDefinitionReturnType: None +# AlwaysBreakAfterReturnType: None +# AlwaysBreakBeforeMultilineStrings: false +# AlwaysBreakTemplateDeclarations: false +# BinPackArguments: true +# BinPackParameters: true +# BraceWrapping: +# AfterClass: false +# AfterControlStatement: false +# AfterEnum: false +# AfterFunction: false +# AfterNamespace: false +# AfterObjCDeclaration: false +# AfterStruct: false +# AfterUnion: false +# AfterExternBlock: false +# BeforeCatch: false +# BeforeElse: false +# IndentBraces: false +# SplitEmptyFunction: true +# SplitEmptyRecord: true +# SplitEmptyNamespace: true +# BreakBeforeBinaryOperators: None +# BreakBeforeBraces: Attach +# BreakBeforeInheritanceComma: false +BreakBeforeTernaryOperators: false +# BreakConstructorInitializersBeforeComma: false +BreakConstructorInitializers: AfterColon +# BreakStringLiterals: true +ColumnLimit: 0 +# CommentPragmas: '^ IWYU pragma:' +# CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: false +# DerivePointerAlignment: false +# DisableFormat: false +# ExperimentalAutoDetectBinPacking: false +# FixNamespaceComments: true +# ForEachMacros: +# - foreach +# - Q_FOREACH +# - BOOST_FOREACH +# IncludeBlocks: Preserve +IncludeCategories: + - Regex: '".*"' + Priority: 1 + - Regex: '^<.*\.h>' + Priority: 2 + - Regex: '^<.*' + Priority: 3 +# IncludeIsMainRegex: '(Test)?$' +IndentCaseLabels: true +# IndentPPDirectives: None +IndentWidth: 4 +# IndentWrappedFunctionNames: false +# JavaScriptQuotes: Leave +# JavaScriptWrapImports: true +KeepEmptyLinesAtTheStartOfBlocks: false +# MacroBlockBegin: '' +# MacroBlockEnd: '' +# MaxEmptyLinesToKeep: 1 +# NamespaceIndentation: None +# PenaltyBreakAssignment: 2 +# PenaltyBreakBeforeFirstCallParameter: 19 +# PenaltyBreakComment: 300 +# PenaltyBreakFirstLessLess: 120 +# PenaltyBreakString: 1000 +# PenaltyExcessCharacter: 1000000 +# PenaltyReturnTypeOnItsOwnLine: 60 +# PointerAlignment: Right +# RawStringFormats: +# - Delimiter: pb +# Language: TextProto +# BasedOnStyle: google +# ReflowComments: true +# SortIncludes: true +# SortUsingDeclarations: true +# SpaceAfterCStyleCast: false +# SpaceAfterTemplateKeyword: true +# SpaceBeforeAssignmentOperators: true +# SpaceBeforeParens: ControlStatements +# SpaceInEmptyParentheses: false +# SpacesBeforeTrailingComments: 1 +# SpacesInAngles: false +# SpacesInContainerLiterals: true +# SpacesInCStyleCastParentheses: false +# SpacesInParentheses: false +# SpacesInSquareBrackets: false +TabWidth: 4 +UseTab: Always +--- +### C++ specific config ### +Language: Cpp +Standard: Cpp11 +--- +### ObjC specific config ### +Language: ObjC +Standard: Cpp11 +ObjCBlockIndentWidth: 4 +# ObjCSpaceAfterProperty: false +# ObjCSpaceBeforeProtocolList: true +--- +### Java specific config ### +Language: Java +# BreakAfterJavaFieldAnnotations: false +JavaImportGroups: ['org.godotengine', 'android', 'androidx', 'com.android', 'com.google', 'java', 'javax'] +... diff --git a/.github/workflows/build_release.yml b/.github/workflows/build_release.yml index 0205afa..19a59c9 100644 --- a/.github/workflows/build_release.yml +++ b/.github/workflows/build_release.yml @@ -2,9 +2,36 @@ name: 🔧 Build -> Package 📦 on: [push, pull_request] jobs: + static-checks: + name: 📊 Static Checks (clang-format, black format, file format) + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Install dependencies + run: | + sudo apt-get install -qq dos2unix recode clang-format-11 + sudo update-alternatives --remove-all clang-format + sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-11 100 + sudo pip3 install black==20.8b1 pygments + + - name: File formatting checks (file_format.sh) + run: | + bash ./misc/scripts/file_format.sh + + - name: Style checks via clang-format (clang_format.sh) + run: | + bash ./misc/scripts/clang_format.sh + + - name: Python style checks via black (black_format.sh) + run: | + bash ./misc/scripts/black_format.sh + build: runs-on: ${{ matrix.os }} name: 🔧 Build + needs: static-checks strategy: matrix: include: @@ -3,221 +3,214 @@ import os, sys, platform, json, subprocess if sys.version_info < (3,): + def decode_utf8(x): return x + + else: import codecs + def decode_utf8(x): return codecs.utf_8_decode(x)[0] def add_sources(sources, dirpath, extension): - for f in os.listdir(dirpath): - if f.endswith('.' + extension): - sources.append(dirpath + '/' + f) + for f in os.listdir(dirpath): + if f.endswith("." + extension): + sources.append(dirpath + "/" + f) def gen_gdnative_lib(target, source, env): for t in target: - with open(t.srcnode().path, 'w') as w: - w.write(decode_utf8(source[0].get_contents()).replace('{GDNATIVE_PATH}', os.path.splitext(t.name)[0]).replace('{TARGET}', env['target'])) + with open(t.srcnode().path, "w") as w: + w.write( + decode_utf8(source[0].get_contents()) + .replace("{GDNATIVE_PATH}", os.path.splitext(t.name)[0]) + .replace("{TARGET}", env["target"]) + ) env = Environment() -target_arch = ARGUMENTS.get('b', ARGUMENTS.get('bits', '64')) -target_platform = ARGUMENTS.get('p', ARGUMENTS.get('platform', 'linux')) -if target_platform == 'windows': +target_arch = ARGUMENTS.get("b", ARGUMENTS.get("bits", "64")) +target_platform = ARGUMENTS.get("p", ARGUMENTS.get("platform", "linux")) +if target_platform == "windows": # This makes sure to keep the session environment variables on windows, # that way you can run scons in a vs 2017 prompt and it will find all the required tools - if (target_arch == '64'): - env = Environment(ENV = os.environ, TARGET_ARCH='amd64') + if target_arch == "64": + env = Environment(ENV=os.environ, TARGET_ARCH="amd64") else: - env = Environment(ENV = os.environ, TARGET_ARCH='x86') + env = Environment(ENV=os.environ, TARGET_ARCH="x86") -env.Append(BUILDERS={'GDNativeLibBuilder': Builder(action=gen_gdnative_lib)}) +env.Append(BUILDERS={"GDNativeLibBuilder": Builder(action=gen_gdnative_lib)}) -customs = ['custom.py'] +customs = ["custom.py"] opts = Variables(customs, ARGUMENTS) -opts.Add(BoolVariable('use_llvm', 'Use the LLVM compiler', False)) -opts.Add(EnumVariable('target', "Compilation target", 'debug', ('debug', 'release'))) +opts.Add(BoolVariable("use_llvm", "Use the LLVM compiler", False)) +opts.Add(EnumVariable("target", "Compilation target", "debug", ("debug", "release"))) -opts.Add(EnumVariable( - 'android_arch', - 'Target Android architecture', - 'armv7', - ['armv7','arm64v8', 'x86', 'x86_64'] -)) +opts.Add(EnumVariable("android_arch", "Target Android architecture", "armv7", ["armv7", "arm64v8", "x86", "x86_64"])) opts.Add( - 'android_api_level', - 'Target Android API level', - '18' if ARGUMENTS.get("android_arch", 'armv7') in ['armv7', 'x86'] else '21' + "android_api_level", + "Target Android API level", + "18" if ARGUMENTS.get("android_arch", "armv7") in ["armv7", "x86"] else "21", ) opts.Add( - 'ANDROID_NDK_ROOT', - 'Path to your Android NDK installation. By default, uses ANDROID_NDK_ROOT from your defined environment variables.', - os.environ.get("ANDROID_NDK_ROOT", None) + "ANDROID_NDK_ROOT", + "Path to your Android NDK installation. By default, uses ANDROID_NDK_ROOT from your defined environment variables.", + os.environ.get("ANDROID_NDK_ROOT", None), ) -opts.Add(EnumVariable( - 'ios_arch', - 'Target iOS architecture', - 'arm64', - ['armv7', 'arm64', 'x86_64'] -)) -opts.Add(BoolVariable( - 'ios_simulator', - 'Target iOS Simulator', - False -)) +opts.Add(EnumVariable("ios_arch", "Target iOS architecture", "arm64", ["armv7", "arm64", "x86_64"])) +opts.Add(BoolVariable("ios_simulator", "Target iOS Simulator", False)) opts.Add( - 'IPHONEPATH', - 'Path to iPhone toolchain', - '/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain', + "IPHONEPATH", + "Path to iPhone toolchain", + "/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain", ) # Update environment (parse options) opts.Update(env) -target = env['target'] +target = env["target"] -if target_platform == 'android': - target_arch = env['android_arch'] -elif target_platform == 'ios': - target_arch = env['ios_arch'] +if target_platform == "android": + target_arch = env["android_arch"] +elif target_platform == "ios": + target_arch = env["ios_arch"] host_platform = platform.system() # Local dependency paths, adapt them to your setup -godot_headers = ARGUMENTS.get('headers', 'godot-cpp/godot-headers') -godot_cpp_headers = ARGUMENTS.get('godot_cpp_headers', 'godot-cpp/include') -godot_cpp_lib_dir = ARGUMENTS.get('godot_cpp_lib_dir', 'godot-cpp/bin') -result_path = os.path.join('bin', 'webrtc' if env['target'] == 'release' else 'webrtc_debug', 'lib') +godot_headers = ARGUMENTS.get("headers", "godot-cpp/godot-headers") +godot_cpp_headers = ARGUMENTS.get("godot_cpp_headers", "godot-cpp/include") +godot_cpp_lib_dir = ARGUMENTS.get("godot_cpp_lib_dir", "godot-cpp/bin") +result_path = os.path.join("bin", "webrtc" if env["target"] == "release" else "webrtc_debug", "lib") lib_prefix = "" # Convenience check to enforce the use_llvm overrides when CXX is clang(++) -if 'CXX' in env and 'clang' in os.path.basename(env['CXX']): - env['use_llvm'] = True +if "CXX" in env and "clang" in os.path.basename(env["CXX"]): + env["use_llvm"] = True -if target_platform == 'linux': - env['CXX']='g++' +if target_platform == "linux": + env["CXX"] = "g++" # LLVM - if env['use_llvm']: - if ('clang++' not in os.path.basename(env['CXX'])): - env['CC'] = 'clang' + if env["use_llvm"]: + if "clang++" not in os.path.basename(env["CXX"]): + env["CC"] = "clang" env["CXX"] = "clang++" env["LINK"] = "clang++" - if (env["target"] == "debug"): - env.Prepend(CCFLAGS=['-g3']) - env.Append(LINKFLAGS=['-rdynamic']) + if env["target"] == "debug": + env.Prepend(CCFLAGS=["-g3"]) + env.Append(LINKFLAGS=["-rdynamic"]) else: - env.Prepend(CCFLAGS=['-O3']) + env.Prepend(CCFLAGS=["-O3"]) - env.Append(CCFLAGS=['-fPIC', '-std=c++14']) + env.Append(CCFLAGS=["-fPIC", "-std=c++14"]) - if target_arch == '32': - env.Append(CCFLAGS = [ '-m32' ]) - env.Append(LINKFLAGS = [ '-m32' ]) - elif target_arch == '64': - env.Append(CCFLAGS = [ '-m64' ]) - env.Append(LINKFLAGS = [ '-m64' ]) + if target_arch == "32": + env.Append(CCFLAGS=["-m32"]) + env.Append(LINKFLAGS=["-m32"]) + elif target_arch == "64": + env.Append(CCFLAGS=["-m64"]) + env.Append(LINKFLAGS=["-m64"]) # i386 does not like static libstdc++ - env.Append(LINKFLAGS=['-static-libgcc', '-static-libstdc++']) + env.Append(LINKFLAGS=["-static-libgcc", "-static-libstdc++"]) -elif target_platform == 'windows': - if host_platform == 'Windows': +elif target_platform == "windows": + if host_platform == "Windows": lib_prefix = "lib" - env.Append(LINKFLAGS = [ '/WX' ]) - if target == 'debug': - env.Append(CCFLAGS = ['/EHsc', '/D_DEBUG', '/MDd' ]) + env.Append(LINKFLAGS=["/WX"]) + if target == "debug": + env.Append(CCFLAGS=["/EHsc", "/D_DEBUG", "/MDd"]) else: - env.Append(CCFLAGS = ['/O2', '/EHsc', '/DNDEBUG', '/MD' ]) + env.Append(CCFLAGS=["/O2", "/EHsc", "/DNDEBUG", "/MD"]) else: - if target_arch == '32': - env['CXX']='i686-w64-mingw32-g++' - elif target_arch == '64': - env['CXX']='x86_64-w64-mingw32-g++' + if target_arch == "32": + env["CXX"] = "i686-w64-mingw32-g++" + elif target_arch == "64": + env["CXX"] = "x86_64-w64-mingw32-g++" - if env['target'] == 'debug': - env.Append(CCFLAGS=['-Og', '-g']) - elif env['target'] == 'release': - env.Append(CCFLAGS=['-O3']) + if env["target"] == "debug": + env.Append(CCFLAGS=["-Og", "-g"]) + elif env["target"] == "release": + env.Append(CCFLAGS=["-O3"]) - env.Append(CCFLAGS = [ '-std=c++14', '-Wwrite-strings' ]) - env.Append(LINKFLAGS = [ '--static', '-Wl,--no-undefined', '-static-libgcc', '-static-libstdc++' ]) + env.Append(CCFLAGS=["-std=c++14", "-Wwrite-strings"]) + env.Append(LINKFLAGS=["--static", "-Wl,--no-undefined", "-static-libgcc", "-static-libstdc++"]) -elif target_platform == 'osx': - if env['use_llvm']: - env['CXX'] = 'clang++' +elif target_platform == "osx": + if env["use_llvm"]: + env["CXX"] = "clang++" # Only 64-bits is supported for OS X - target_arch = '64' + target_arch = "64" - env.Append(CCFLAGS = [ '-std=c++14', '-arch', 'x86_64' ]) - env.Append(LINKFLAGS = [ '-arch', 'x86_64', '-framework', 'Cocoa', '-Wl,-undefined,dynamic_lookup' ]) + env.Append(CCFLAGS=["-std=c++14", "-arch", "x86_64"]) + env.Append(LINKFLAGS=["-arch", "x86_64", "-framework", "Cocoa", "-Wl,-undefined,dynamic_lookup"]) - if env['target'] == 'debug': - env.Append(CCFLAGS=['-Og', '-g']) - elif env['target'] == 'release': - env.Append(CCFLAGS=['-O3']) + if env["target"] == "debug": + env.Append(CCFLAGS=["-Og", "-g"]) + elif env["target"] == "release": + env.Append(CCFLAGS=["-O3"]) -elif target_platform == 'ios': - if env['ios_simulator']: - sdk_name = 'iphonesimulator' - env.Append(CCFLAGS=['-mios-simulator-version-min=10.0']) - env['LIBSUFFIX'] = ".simulator" + env['LIBSUFFIX'] +elif target_platform == "ios": + if env["ios_simulator"]: + sdk_name = "iphonesimulator" + env.Append(CCFLAGS=["-mios-simulator-version-min=10.0"]) + env["LIBSUFFIX"] = ".simulator" + env["LIBSUFFIX"] else: - sdk_name = 'iphoneos' - env.Append(CCFLAGS=['-miphoneos-version-min=10.0']) + sdk_name = "iphoneos" + env.Append(CCFLAGS=["-miphoneos-version-min=10.0"]) try: - sdk_path = decode_utf8(subprocess.check_output(['xcrun', '--sdk', sdk_name, '--show-sdk-path']).strip()) + sdk_path = decode_utf8(subprocess.check_output(["xcrun", "--sdk", sdk_name, "--show-sdk-path"]).strip()) except (subprocess.CalledProcessError, OSError): raise ValueError("Failed to find SDK path while running xcrun --sdk {} --show-sdk-path.".format(sdk_name)) - compiler_path = env['IPHONEPATH'] + '/usr/bin/' - env['ENV']['PATH'] = env['IPHONEPATH'] + "/Developer/usr/bin/:" + env['ENV']['PATH'] + compiler_path = env["IPHONEPATH"] + "/usr/bin/" + env["ENV"]["PATH"] = env["IPHONEPATH"] + "/Developer/usr/bin/:" + env["ENV"]["PATH"] - env['CC'] = compiler_path + 'clang' - env['CXX'] = compiler_path + 'clang++' - env['AR'] = compiler_path + 'ar' - env['RANLIB'] = compiler_path + 'ranlib' + env["CC"] = compiler_path + "clang" + env["CXX"] = compiler_path + "clang++" + env["AR"] = compiler_path + "ar" + env["RANLIB"] = compiler_path + "ranlib" - env.Append(CCFLAGS=['-std=c++14', '-arch', env['ios_arch'], '-isysroot', sdk_path]) - env.Append(LINKFLAGS=[ - '-arch', - env['ios_arch'], - '-Wl,-undefined,dynamic_lookup', - '-isysroot', sdk_path, - '-F' + sdk_path - ]) + env.Append(CCFLAGS=["-std=c++14", "-arch", env["ios_arch"], "-isysroot", sdk_path]) + env.Append( + LINKFLAGS=["-arch", env["ios_arch"], "-Wl,-undefined,dynamic_lookup", "-isysroot", sdk_path, "-F" + sdk_path] + ) - if env['target'] == 'debug': - env.Append(CCFLAGS=['-Og', '-g']) - elif env['target'] == 'release': - env.Append(CCFLAGS=['-O3']) + if env["target"] == "debug": + env.Append(CCFLAGS=["-Og", "-g"]) + elif env["target"] == "release": + env.Append(CCFLAGS=["-O3"]) -elif target_platform == 'android': +elif target_platform == "android": # Verify NDK root - if not 'ANDROID_NDK_ROOT' in env: - raise ValueError("To build for Android, ANDROID_NDK_ROOT must be defined. Please set ANDROID_NDK_ROOT to the root folder of your Android NDK installation.") + if not "ANDROID_NDK_ROOT" in env: + raise ValueError( + "To build for Android, ANDROID_NDK_ROOT must be defined. Please set ANDROID_NDK_ROOT to the root folder of your Android NDK installation." + ) # Validate API level - api_level = int(env['android_api_level']) - if target_arch in ['arm64v8', 'x86_64'] and api_level < 21: + api_level = int(env["android_api_level"]) + if target_arch in ["arm64v8", "x86_64"] and api_level < 21: print("WARN: 64-bit Android architectures require an API level of at least 21; setting android_api_level=21") - env['android_api_level'] = '21' + env["android_api_level"] = "21" api_level = 21 # Setup toolchain - toolchain = env['ANDROID_NDK_ROOT'] + "/toolchains/llvm/prebuilt/" + toolchain = env["ANDROID_NDK_ROOT"] + "/toolchains/llvm/prebuilt/" if host_platform == "Windows": toolchain += "windows" import platform as pltfm + if pltfm.machine().endswith("64"): toolchain += "-x86_64" elif host_platform == "Linux": @@ -227,36 +220,51 @@ elif target_platform == 'android': # Get architecture info arch_info_table = { - "armv7" : { - "march":"armv7-a", "target":"armv7a-linux-androideabi", "tool_path":"arm-linux-androideabi", "compiler_path":"armv7a-linux-androideabi", - "ccflags" : ['-mfpu=neon'] - }, - "arm64v8" : { - "march":"armv8-a", "target":"aarch64-linux-android", "tool_path":"aarch64-linux-android", "compiler_path":"aarch64-linux-android", - "ccflags" : [] - }, - "x86" : { - "march":"i686", "target":"i686-linux-android", "tool_path":"i686-linux-android", "compiler_path":"i686-linux-android", - "ccflags" : ['-mstackrealign'] - }, - "x86_64" : {"march":"x86-64", "target":"x86_64-linux-android", "tool_path":"x86_64-linux-android", "compiler_path":"x86_64-linux-android", - "ccflags" : [] - } + "armv7": { + "march": "armv7-a", + "target": "armv7a-linux-androideabi", + "tool_path": "arm-linux-androideabi", + "compiler_path": "armv7a-linux-androideabi", + "ccflags": ["-mfpu=neon"], + }, + "arm64v8": { + "march": "armv8-a", + "target": "aarch64-linux-android", + "tool_path": "aarch64-linux-android", + "compiler_path": "aarch64-linux-android", + "ccflags": [], + }, + "x86": { + "march": "i686", + "target": "i686-linux-android", + "tool_path": "i686-linux-android", + "compiler_path": "i686-linux-android", + "ccflags": ["-mstackrealign"], + }, + "x86_64": { + "march": "x86-64", + "target": "x86_64-linux-android", + "tool_path": "x86_64-linux-android", + "compiler_path": "x86_64-linux-android", + "ccflags": [], + }, } arch_info = arch_info_table[target_arch] # Setup tools - env['CC'] = toolchain + "/bin/clang" - env['CXX'] = toolchain + "/bin/clang++" + env["CC"] = toolchain + "/bin/clang" + env["CXX"] = toolchain + "/bin/clang++" - env.Append(CCFLAGS=['--target=' + arch_info['target'] + env['android_api_level'], '-march=' + arch_info['march'], '-fPIC']) - env.Append(CCFLAGS=arch_info['ccflags']) - env.Append(LINKFLAGS=['--target=' + arch_info['target'] + env['android_api_level'], '-march=' + arch_info['march']]) + env.Append( + CCFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"], "-fPIC"] + ) + env.Append(CCFLAGS=arch_info["ccflags"]) + env.Append(LINKFLAGS=["--target=" + arch_info["target"] + env["android_api_level"], "-march=" + arch_info["march"]]) - if env['target'] == 'debug': - env.Append(CCFLAGS=['-Og', '-g']) - elif env['target'] == 'release': - env.Append(CCFLAGS=['-O3']) + if env["target"] == "debug": + env.Append(CCFLAGS=["-Og", "-g"]) + elif env["target"] == "release": + env.Append(CCFLAGS=["-O3"]) else: print("No valid target platform selected.") @@ -264,34 +272,41 @@ else: # Godot CPP bindings env.Append(CPPPATH=[godot_headers]) -env.Append(CPPPATH=[godot_cpp_headers, godot_cpp_headers + '/core', godot_cpp_headers + '/gen']) +env.Append(CPPPATH=[godot_cpp_headers, godot_cpp_headers + "/core", godot_cpp_headers + "/gen"]) env.Append(LIBPATH=[godot_cpp_lib_dir]) -env.Append(LIBS=['%sgodot-cpp.%s.%s.%s%s' % (lib_prefix, target_platform, target, target_arch, ".simulator" if env["ios_simulator"] else "")]) +env.Append( + LIBS=[ + "%sgodot-cpp.%s.%s.%s%s" + % (lib_prefix, target_platform, target, target_arch, ".simulator" if env["ios_simulator"] else "") + ] +) # WebRTC stuff webrtc_dir = "webrtc" -lib_name = 'libwebrtc_full' +lib_name = "libwebrtc_full" lib_path = os.path.join(webrtc_dir, target_platform) -lib_path += {'32': '/x86', - '64': '/x64', - 'armv7': '/arm', - 'arm64v8': '/arm64', - 'arm64': '/arm64', - 'x86': '/x86', - 'x86_64': '/x64'}[target_arch] - -if target == 'debug': - lib_path += '/Debug' +lib_path += { + "32": "/x86", + "64": "/x64", + "armv7": "/arm", + "arm64v8": "/arm64", + "arm64": "/arm64", + "x86": "/x86", + "x86_64": "/x64", +}[target_arch] + +if target == "debug": + lib_path += "/Debug" else: - lib_path += '/Release' + lib_path += "/Release" env.Append(CPPPATH=[webrtc_dir + "/include", webrtc_dir + "/include/third_party/abseil-cpp"]) if target_platform == "linux": env.Append(LIBS=[lib_name, "atomic"]) env.Append(LIBPATH=[lib_path]) - #env.Append(CCFLAGS=["-std=c++11"]) + # env.Append(CCFLAGS=["-std=c++11"]) env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_LINUX"]) env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"]) @@ -303,7 +318,17 @@ elif target_platform == "windows": env.Append(LIBPATH=[lib_path]) # Mostly "gcc" else: - env.Append(CCFLAGS=["-DWINVER=0x0603", "-D_WIN32_WINNT=0x0603", "-DWEBRTC_WIN", "-DWIN32_LEAN_AND_MEAN", "-DNOMINMAX", "-DRTC_UNUSED=", "-DNO_RETURN="]) + env.Append( + CCFLAGS=[ + "-DWINVER=0x0603", + "-D_WIN32_WINNT=0x0603", + "-DWEBRTC_WIN", + "-DWIN32_LEAN_AND_MEAN", + "-DNOMINMAX", + "-DRTC_UNUSED=", + "-DNO_RETURN=", + ] + ) env.Append(LINKFLAGS=[p + env["LIBSUFFIX"] for p in ["secur32", "advapi32", "winmm", lib_name]]) env.Append(LIBPATH=[lib_path]) @@ -313,42 +338,42 @@ elif target_platform == "osx": env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_MAC"]) env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"]) -elif target_platform == 'ios': +elif target_platform == "ios": env.Append(LIBS=[lib_name]) env.Append(LIBPATH=[lib_path]) env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_MAC", "-DWEBRTC_IOS"]) env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"]) elif target_platform == "android": - env.Append(LIBS=['log']) + env.Append(LIBS=["log"]) env.Append(LIBS=[lib_name]) env.Append(LIBPATH=[lib_path]) env.Append(CCFLAGS=["-DWEBRTC_POSIX", "-DWEBRTC_LINUX", "-DWEBRTC_ANDROID"]) env.Append(CCFLAGS=["-DRTC_UNUSED=''", "-DNO_RETURN=''"]) - if target_arch == 'arm64v8': + if target_arch == "arm64v8": env.Append(CCFLAGS=["-DWEBRTC_ARCH_ARM64", "-DWEBRTC_HAS_NEON"]) - elif target_arch == 'armv7': + elif target_arch == "armv7": env.Append(CCFLAGS=["-DWEBRTC_ARCH_ARM", "-DWEBRTC_ARCH_ARM_V7", "-DWEBRTC_HAS_NEON"]) # Our includes and sources -env.Append(CPPPATH=['src/']) +env.Append(CPPPATH=["src/"]) sources = [] -add_sources(sources, 'src/', 'cpp') -add_sources(sources, 'src/net/', 'cpp') +add_sources(sources, "src/", "cpp") +add_sources(sources, "src/net/", "cpp") # Suffix -suffix = '.%s.%s' % (target, target_arch) +suffix = ".%s.%s" % (target, target_arch) env["SHOBJSUFFIX"] = suffix + env["SHOBJSUFFIX"] # Make the shared library -result_name = 'webrtc_native.%s.%s.%s' % (target_platform, target, target_arch) + env["SHLIBSUFFIX"] +result_name = "webrtc_native.%s.%s.%s" % (target_platform, target, target_arch) + env["SHLIBSUFFIX"] library = env.SharedLibrary(target=os.path.join(result_path, result_name), source=sources) Default(library) # GDNativeLibrary -gdnlib = 'webrtc' -if target != 'release': - gdnlib += '_debug' -Default(env.GDNativeLibBuilder([os.path.join('bin', gdnlib, gdnlib + '.tres')], ['misc/gdnlib.tres'])) +gdnlib = "webrtc" +if target != "release": + gdnlib += "_debug" +Default(env.GDNativeLibBuilder([os.path.join("bin", gdnlib, gdnlib + ".tres")], ["misc/gdnlib.tres"])) diff --git a/misc/scripts/black_format.sh b/misc/scripts/black_format.sh new file mode 100755 index 0000000..f6b7925 --- /dev/null +++ b/misc/scripts/black_format.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +# This script runs black on all Python files in the repo. + +set -uo pipefail + +# Apply black. +echo -e "Formatting Python files..." +PY_FILES=$(find \( -path "./.git" \ + -o -path "./webrtc" \ + -o -path "./godot-cpp" \ + \) -prune \ + -o \( -name "SConstruct" \ + -o -name "SCsub" \ + -o -name "*.py" \ + \) -print) +black -l 120 $PY_FILES + +git diff > patch.patch + +# If no patch has been generated all is OK, clean up, and exit. +if [ ! -s patch.patch ] ; then + printf "Files in this commit comply with the black style rules.\n" + rm -f patch.patch + exit 0 +fi + +# A patch has been created, notify the user, clean up, and exit. +printf "\n*** The following differences were found between the code " +printf "and the formatting rules:\n\n" +cat patch.patch +printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n" +rm -f patch.patch +exit 1 diff --git a/misc/scripts/clang_format.sh b/misc/scripts/clang_format.sh new file mode 100755 index 0000000..63c66d4 --- /dev/null +++ b/misc/scripts/clang_format.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +# This script runs clang-format and fixes copyright headers on all relevant files in the repo. +# This is the primary script responsible for fixing style violations. + +set -uo pipefail +IFS=$'\n\t' + +CLANG_FORMAT_FILE_EXTS=(".c" ".h" ".cpp" ".hpp" ".cc" ".hh" ".cxx" ".m" ".mm" ".inc" ".java" ".glsl") + +# Loops through all text files tracked by Git. +git grep -zIl '' | +while IFS= read -rd '' f; do + # Exclude some files. + if [[ "$f" == "thirdparty"* ]]; then + continue + elif [[ "$f" == "platform/android/java/lib/src/com/google"* ]]; then + continue + elif [[ "$f" == *"-so_wrap."* ]]; then + continue + fi + + for extension in ${CLANG_FORMAT_FILE_EXTS[@]}; do + if [[ "$f" == *"$extension" ]]; then + # Run clang-format. + clang-format -i "$f" + # Fix copyright headers, but not all files get them. + if [[ "$f" == *"inc" ]]; then + continue 2 + elif [[ "$f" == *"glsl" ]]; then + continue 2 + elif [[ "$f" == *"theme_data.h" ]]; then + continue 2 + elif [[ "$f" == "platform/android/java/lib/src/org/godotengine/godot/input/InputManager"* ]]; then + continue 2 + fi + python misc/scripts/copyright_headers.py "$f" + continue 2 + fi + done +done + +git diff > patch.patch + +# If no patch has been generated all is OK, clean up, and exit. +if [ ! -s patch.patch ] ; then + printf "Files in this commit comply with the clang-format style rules.\n" + rm -f patch.patch + exit 0 +fi + +# A patch has been created, notify the user, clean up, and exit. +printf "\n*** The following differences were found between the code " +printf "and the formatting rules:\n\n" +cat patch.patch +printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n" +rm -f patch.patch +exit 1 diff --git a/misc/scripts/copyright_headers.py b/misc/scripts/copyright_headers.py new file mode 100755 index 0000000..2f3e4a1 --- /dev/null +++ b/misc/scripts/copyright_headers.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +import sys + +header = """\ +/*************************************************************************/ +/* $filename */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ +""" + +fname = sys.argv[1] + +# Handle replacing $filename with actual filename and keep alignment +fsingle = fname.strip() +if fsingle.find("/") != -1: + fsingle = fsingle[fsingle.rfind("/") + 1 :] +rep_fl = "$filename" +rep_fi = fsingle +len_fl = len(rep_fl) +len_fi = len(rep_fi) +# Pad with spaces to keep alignment +if len_fi < len_fl: + for x in range(len_fl - len_fi): + rep_fi += " " +elif len_fl < len_fi: + for x in range(len_fi - len_fl): + rep_fl += " " +if header.find(rep_fl) != -1: + text = header.replace(rep_fl, rep_fi) +else: + text = header.replace("$filename", fsingle) +text += "\n" + +# We now have the proper header, so we want to ignore the one in the original file +# and potentially empty lines and badly formatted lines, while keeping comments that +# come after the header, and then keep everything non-header unchanged. +# To do so, we skip empty lines that may be at the top in a first pass. +# In a second pass, we skip all consecutive comment lines starting with "/*", +# then we can append the rest (step 2). + +fileread = open(fname.strip(), "r") +line = fileread.readline() +header_done = False + +while line.strip() == "": # Skip empty lines at the top + line = fileread.readline() + +if line.find("/**********") == -1: # Godot header starts this way + # Maybe starting with a non-Godot comment, abort header magic + header_done = True + +while not header_done: # Handle header now + if line.find("/*") != 0: # No more starting with a comment + header_done = True + if line.strip() != "": + text += line + line = fileread.readline() + +while line != "": # Dump everything until EOF + text += line + line = fileread.readline() + +fileread.close() + +# Write +filewrite = open(fname.strip(), "w") +filewrite.write(text) +filewrite.close() diff --git a/misc/scripts/file_format.sh b/misc/scripts/file_format.sh new file mode 100755 index 0000000..e6e1fe2 --- /dev/null +++ b/misc/scripts/file_format.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash + +# This script ensures proper POSIX text file formatting and a few other things. +# This is supplementary to clang_format.sh and black_format.sh, but should be +# run before them. + +# We need dos2unix and recode. +if [ ! -x "$(command -v dos2unix)" -o ! -x "$(command -v recode)" ]; then + printf "Install 'dos2unix' and 'recode' to use this script.\n" +fi + +set -uo pipefail +IFS=$'\n\t' + +# Loops through all text files tracked by Git. +git grep -zIl '' | +while IFS= read -rd '' f; do + # Exclude some types of files. + if [[ "$f" == "webrtc"* ]]; then + continue + elif [[ "$f" == "godot-cpp"* ]]; then + continue + fi + # Ensure that files are UTF-8 formatted. + recode UTF-8 "$f" 2> /dev/null + # Ensure that files have LF line endings and do not contain a BOM. + dos2unix "$f" 2> /dev/null + # Remove trailing space characters and ensures that files end + # with newline characters. -l option handles newlines conveniently. + perl -i -ple 's/\s*$//g' "$f" +done + +git diff > patch.patch + +# If no patch has been generated all is OK, clean up, and exit. +if [ ! -s patch.patch ] ; then + printf "Files in this commit comply with the formatting rules.\n" + rm -f patch.patch + exit 0 +fi + +# A patch has been created, notify the user, clean up, and exit. +printf "\n*** The following differences were found between the code " +printf "and the formatting rules:\n\n" +cat patch.patch +printf "\n*** Aborting, please fix your commit(s) with 'git commit --amend' or 'git rebase -i <hash>'\n" +rm -f patch.patch +exit 1 diff --git a/src/WebRTCLibDataChannel.cpp b/src/WebRTCLibDataChannel.cpp index d64d082..f29d562 100644 --- a/src/WebRTCLibDataChannel.cpp +++ b/src/WebRTCLibDataChannel.cpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCLibDataChannel.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #include "WebRTCLibDataChannel.hpp" #include "GDNativeLibrary.hpp" @@ -40,7 +70,6 @@ WebRTCLibDataChannel *WebRTCLibDataChannel::new_data_channel(rtc::scoped_refptr< return tmp; } - void WebRTCLibDataChannel::bind_channel(rtc::scoped_refptr<webrtc::DataChannelInterface> p_channel) { ERR_FAIL_COND(p_channel.get() == nullptr); @@ -120,7 +149,7 @@ godot_error WebRTCLibDataChannel::poll() { } void WebRTCLibDataChannel::close() { - if(channel.get() != nullptr) { + if (channel.get() != nullptr) { channel->Close(); channel->UnregisterObserver(); } @@ -167,7 +196,8 @@ void WebRTCLibDataChannel::_init() { register_interface(&interface); } -WebRTCLibDataChannel::WebRTCLibDataChannel() : observer(this) { +WebRTCLibDataChannel::WebRTCLibDataChannel() : + observer(this) { mutex = new std::mutex; } diff --git a/src/WebRTCLibDataChannel.hpp b/src/WebRTCLibDataChannel.hpp index decba98..1d1ce0f 100644 --- a/src/WebRTCLibDataChannel.hpp +++ b/src/WebRTCLibDataChannel.hpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCLibDataChannel.hpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #ifndef WEBRTC_DATA_CHANNEL_H #define WEBRTC_DATA_CHANNEL_H @@ -6,8 +36,8 @@ #include "api/peer_connection_interface.h" // interface for all things needed from WebRTC #include "media/base/media_engine.h" // needed for CreateModularPeerConnectionFactory -#include "net/WebRTCDataChannelNative.hpp" #include "PoolArrays.hpp" +#include "net/WebRTCDataChannelNative.hpp" #include <mutex> namespace godot_webrtc { diff --git a/src/WebRTCLibPeerConnection.cpp b/src/WebRTCLibPeerConnection.cpp index eb4e8cc..d090654 100644 --- a/src/WebRTCLibPeerConnection.cpp +++ b/src/WebRTCLibPeerConnection.cpp @@ -1,6 +1,36 @@ +/*************************************************************************/ +/* WebRTCLibPeerConnection.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + +#include "WebRTCLibPeerConnection.hpp" #include "WebRTCDataChannel.hpp" #include "WebRTCDataChannelGDNative.hpp" -#include "WebRTCLibPeerConnection.hpp" #include "WebRTCLibDataChannel.hpp" using namespace godot_webrtc; @@ -84,7 +114,12 @@ godot_error _parse_ice_server(webrtc::PeerConnectionInterface::RTCConfiguration godot_error _parse_channel_config(webrtc::DataChannelInit &r_config, godot::Dictionary p_dict) { godot::Variant v; -#define _SET_N(PROP, PNAME, TYPE) if (p_dict.has(#PROP)) { v = p_dict[#PROP]; if(v.get_type() == godot::Variant::TYPE) r_config.PNAME = v; } +#define _SET_N(PROP, PNAME, TYPE) \ + if (p_dict.has(#PROP)) { \ + v = p_dict[#PROP]; \ + if (v.get_type() == godot::Variant::TYPE) \ + r_config.PNAME = v; \ + } #define _SET(PROP, TYPE) _SET_N(PROP, PROP, TYPE) _SET(negotiated, BOOL); _SET(id, INT); @@ -107,7 +142,7 @@ WebRTCLibPeerConnection::ConnectionState WebRTCLibPeerConnection::get_connection ERR_FAIL_COND_V(peer_connection.get() == nullptr, STATE_CLOSED); webrtc::PeerConnectionInterface::IceConnectionState state = peer_connection->ice_connection_state(); - switch(state) { + switch (state) { case webrtc::PeerConnectionInterface::kIceConnectionNew: return STATE_NEW; case webrtc::PeerConnectionInterface::kIceConnectionChecking: @@ -218,7 +253,7 @@ void WebRTCLibPeerConnection::close() { peer_connection->Close(); } peer_connection = nullptr; - while(!signal_queue.empty()) { + while (!signal_queue.empty()) { signal_queue.pop(); } } diff --git a/src/WebRTCLibPeerConnection.hpp b/src/WebRTCLibPeerConnection.hpp index 85ef33f..a265bc1 100644 --- a/src/WebRTCLibPeerConnection.hpp +++ b/src/WebRTCLibPeerConnection.hpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCLibPeerConnection.hpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #ifndef WEBRTC_PEER_H #define WEBRTC_PEER_H @@ -18,6 +48,7 @@ private: godot_error _create_pc(webrtc::PeerConnectionInterface::RTCConfiguration &config); static std::unique_ptr<rtc::Thread> signaling_thread; + public: static void _register_methods(); static void initialize_signaling(); @@ -97,6 +128,7 @@ private: godot::String method; godot::Variant argv[3]; int argc = 0; + public: Signal(godot::String p_method, int p_argc, const godot::Variant *p_argv) { method = p_method; diff --git a/src/init.cpp b/src/init.cpp index a9a64ad..a6066c3 100644 --- a/src/init.cpp +++ b/src/init.cpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* init.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #include "WebRTCLibDataChannel.hpp" #include "WebRTCLibPeerConnection.hpp" #include "net/WebRTCPeerConnectionNative.hpp" @@ -34,14 +64,14 @@ godot_error create_peer_connection_wp(godot_object *out) { _singleton_api->godot_string_destroy(&s); // Bind script to Object - const void *args3[] = { (void *)script }; + const void *args3[] = { (void *)script }; _singleton_api->godot_method_bind_ptrcall(_set_script_mb, out, args3, nullptr); return GODOT_OK; } godot_net_webrtc_library library = { - {3, 2}, + { 3, 2 }, &unregistered, &create_peer_connection_wp, NULL, @@ -72,7 +102,6 @@ extern "C" void GDN_EXPORT godot_gdnative_singleton() { extern "C" void GDN_EXPORT godot_gdnative_init(godot_gdnative_init_options *o) { const godot_gdnative_core_api_struct *api = o->api_struct; for (int i = 0; i < api->num_extensions; i++) { - if (api->extensions[i]->type != GDNATIVE_EXT_NET) continue; diff --git a/src/net/WebRTCDataChannelNative.cpp b/src/net/WebRTCDataChannelNative.cpp index 8e1d3b1..86d0afa 100644 --- a/src/net/WebRTCDataChannelNative.cpp +++ b/src/net/WebRTCDataChannelNative.cpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCDataChannelNative.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #include "WebRTCDataChannelNative.hpp" #include "net/WebRTCPeerConnectionNative.hpp" diff --git a/src/net/WebRTCDataChannelNative.hpp b/src/net/WebRTCDataChannelNative.hpp index eaeb95d..37b8616 100644 --- a/src/net/WebRTCDataChannelNative.hpp +++ b/src/net/WebRTCDataChannelNative.hpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCDataChannelNative.hpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #ifndef WEBRTC_DATA_CHANNEL_NATIVE #define WEBRTC_DATA_CHANNEL_NATIVE diff --git a/src/net/WebRTCPeerConnectionNative.cpp b/src/net/WebRTCPeerConnectionNative.cpp index 5f7d83e..c8c7587 100644 --- a/src/net/WebRTCPeerConnectionNative.cpp +++ b/src/net/WebRTCPeerConnectionNative.cpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCPeerConnectionNative.cpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #include "WebRTCPeerConnectionNative.hpp" const godot_gdnative_ext_net_3_2_api_struct *WebRTCPeerConnectionNative::_net_api = NULL; diff --git a/src/net/WebRTCPeerConnectionNative.hpp b/src/net/WebRTCPeerConnectionNative.hpp index 3b0ac79..fb75a46 100644 --- a/src/net/WebRTCPeerConnectionNative.hpp +++ b/src/net/WebRTCPeerConnectionNative.hpp @@ -1,3 +1,33 @@ +/*************************************************************************/ +/* WebRTCPeerConnectionNative.hpp */ +/*************************************************************************/ +/* This file is part of: */ +/* GODOT ENGINE */ +/* https://godotengine.org */ +/*************************************************************************/ +/* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */ +/* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */ +/* */ +/* Permission is hereby granted, free of charge, to any person obtaining */ +/* a copy of this software and associated documentation files (the */ +/* "Software"), to deal in the Software without restriction, including */ +/* without limitation the rights to use, copy, modify, merge, publish, */ +/* distribute, sublicense, and/or sell copies of the Software, and to */ +/* permit persons to whom the Software is furnished to do so, subject to */ +/* the following conditions: */ +/* */ +/* The above copyright notice and this permission notice shall be */ +/* included in all copies or substantial portions of the Software. */ +/* */ +/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */ +/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */ +/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/ +/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */ +/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */ +/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ +/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +/*************************************************************************/ + #ifndef WEBRTC_PEER_NATIVE #define WEBRTC_PEER_NATIVE |