From 7a09f38a64536a32017e1b60eba3ef725712cf4f Mon Sep 17 00:00:00 2001 From: tt2468 Date: Fri, 13 May 2022 20:23:03 -0700 Subject: [PATCH] base: Remove actions building and refactor CMake for submodule --- .clang-format | 107 +++++ .clang-format.json | 14 + .editorconfig | 12 +- .github/workflows/main.yml | 560 ---------------------- CI/macos/obs-websocket.pkgproj | 726 ----------------------------- CMakeLists.txt | 391 +++++----------- README.md | 6 +- cmake/FindLibObs.cmake | 107 ----- installer/installer-windows.iss.in | 74 --- 9 files changed, 243 insertions(+), 1754 deletions(-) create mode 100644 .clang-format create mode 100644 .clang-format.json delete mode 100644 .github/workflows/main.yml delete mode 100644 CI/macos/obs-websocket.pkgproj delete mode 100644 cmake/FindLibObs.cmake delete mode 100644 installer/installer-windows.iss.in diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..c9dfc48e --- /dev/null +++ b/.clang-format @@ -0,0 +1,107 @@ +# please use clang-format version 8 or later + +Standard: Cpp11 +AccessModifierOffset: -8 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +#AllowAllArgumentsOnNextLine: false # requires clang-format 9 +#AllowAllConstructorInitializersOnNextLine: false # requires clang-format 9 +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortFunctionsOnASingleLine: Inline +AllowShortIfStatementsOnASingleLine: false +#AllowShortLambdasOnASingleLine: Inline # requires clang-format 9 +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterDefinitionReturnType: None +AlwaysBreakAfterReturnType: None +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: false +BinPackArguments: true +BinPackParameters: true +BraceWrapping: + AfterClass: false + AfterControlStatement: false + AfterEnum: false + AfterFunction: true + 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: Custom +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakStringLiterals: false # apparently unpredictable +ColumnLimit: 80 +CompactNamespaces: false +ConstructorInitializerAllOnOneLineOrOnePerLine: true +ConstructorInitializerIndentWidth: 8 +ContinuationIndentWidth: 8 +Cpp11BracedListStyle: true +DerivePointerAlignment: false +DisableFormat: false +FixNamespaceComments: false +ForEachMacros: + - 'json_object_foreach' + - 'json_object_foreach_safe' + - 'json_array_foreach' +IncludeBlocks: Preserve +IndentCaseLabels: false +IndentPPDirectives: None +IndentWidth: 8 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: true +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +#ObjCBinPackProtocolList: Auto # requires clang-format 7 +ObjCBlockIndentWidth: 8 +ObjCSpaceAfterProperty: true +ObjCSpaceBeforeProtocolList: true + +PenaltyBreakAssignment: 10 +PenaltyBreakBeforeFirstCallParameter: 30 +PenaltyBreakComment: 10 +PenaltyBreakFirstLessLess: 0 +PenaltyBreakString: 10 +PenaltyExcessCharacter: 100 +PenaltyReturnTypeOnItsOwnLine: 60 + +PointerAlignment: Right +ReflowComments: false +SortIncludes: false +SortUsingDeclarations: false +SpaceAfterCStyleCast: false +#SpaceAfterLogicalNot: false # requires clang-format 9 +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +#SpaceBeforeCtorInitializerColon: true # requires clang-format 7 +#SpaceBeforeInheritanceColon: true # requires clang-format 7 +SpaceBeforeParens: ControlStatements +#SpaceBeforeRangeBasedForLoopColon: true # requires clang-format 7 +SpaceInEmptyParentheses: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInCStyleCastParentheses: false +SpacesInContainerLiterals: false +SpacesInParentheses: false +SpacesInSquareBrackets: false +#StatementMacros: # requires clang-format 8 +# - 'Q_OBJECT' +TabWidth: 8 +#TypenameMacros: # requires clang-format 9 +# - 'DARRAY' +UseTab: ForContinuationAndIndentation +--- +Language: ObjC diff --git a/.clang-format.json b/.clang-format.json new file mode 100644 index 00000000..0ccd9bf0 --- /dev/null +++ b/.clang-format.json @@ -0,0 +1,14 @@ +{ + "additional_commands": { + "find_qt": { + "flags": [], + "kwargs": { + "VERSION": "+", + "COMPONENTS": "+", + "COMPONENTS_WIN": "+", + "COMPONENTS_MACOS": "+", + "COMPONENTS_LINUX": "+" + } + } + } +} diff --git a/.editorconfig b/.editorconfig index c3253a25..c654e3d0 100644 --- a/.editorconfig +++ b/.editorconfig @@ -9,8 +9,16 @@ indent_style = tab indent_size = 4 [CMakeLists.txt] -indent_style = tab -indent_size = 4 +indent_style = space +indent_size = 2 + +[**/CMakeLists.txt] +indent_style = space +indent_size = 2 + +[cmake/**/*.cmake] +indent_style = space +indent_size = 2 [*.{yml,yaml}] indent_style = space diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml deleted file mode 100644 index 0068dac2..00000000 --- a/.github/workflows/main.yml +++ /dev/null @@ -1,560 +0,0 @@ -name: 'CI Multiplatform Build' - -on: - push: - paths-ignore: - - 'docs/**' - branches: - - master - tags: - - '[45].[0-9]+.[0-9]+*' - pull_request: - paths-ignore: - - 'docs/**' - - '**.md' - branches: - - master - -jobs: - windows: - name: 'Windows 32/64-bit' - runs-on: [windows-2019] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - QT_CACHE_VERSION: '2' # Change whenever updating OBS dependencies URL, in order to force a cache reset - QT_VERSION: '5.15.2' - WINDOWS_DEPS_CACHE_VERSION: '1' # Change whenever updating Qt dependency URL, in order to force a cache reset - WINDOWS_DEPS_VERSION: '2019' - CMAKE_GENERATOR: 'Visual Studio 16 2019' - CMAKE_SYSTEM_VERSION: '10.0' - steps: - - name: 'Add msbuild to PATH' - uses: microsoft/setup-msbuild@v1.0.2 - - name: 'Checkout obs-websocket' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-websocket - submodules: 'recursive' - - name: 'Checkout OBS Studio' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS Studio Git Info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - name: 'Checkout last OBS Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-websocket Git Info' - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket - run: | - git fetch --prune --unshallow - GIT_HASH=$(git rev-parse --short HEAD) - echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV - GIT_TAG=$(git describe --exact-match --tags --abbrev=0) || GIT_TAG="" - echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV - if [ "$GIT_TAG" ] ; then \ - VERSION="$GIT_TAG" \ - VERSION_SUFFIX=$(echo "$GIT_TAG" | cut -c6-20) ; \ - else \ - VERSION="$GIT_HASH-git" \ - VERSION_SUFFIX="-$GIT_HASH-git" ; \ - fi - echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_ENV - echo "CMAKE_VERSION_SUFFIX=$VERSION_SUFFIX" >> $GITHUB_ENV - - name: 'Restore Cached Qt' - id: qtcache - uses: actions/cache@v2 - with: - path: Qt_${{ env.QT_VERSION }}.7z - key: 'qtdep-${{ env.QT_CACHE_VERSION }} | ${{ runner.os }}' - - name: 'Download Prerequisite: Qt' - if: steps.qtcache.outputs.cache-hit != 'true' - run: | - curl -kLO https://tt2468.net/dl/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - - - name: 'Extract Prerequisite: Qt' - run: | - 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}\cmbuild\QT" - - name: 'Restore Cached OBS Studio Dependencies' - id: obscache - uses: actions/cache@v2 - with: - path: ${{ github.workspace }}\cmbuild\deps\** - key: 'obsdep-${{ env.WINDOWS_DEPS_CACHE_VERSION }} | ${{ runner.os }}' - - name: 'Install Prerequisite: Pre-built OBS Studio dependencies' - if: steps.obscache.outputs.cache-hit != 'true' - run: | - curl -kLO https://cdn-fastly.obsproject.com/downloads/dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -f --retry 5 -C - - 7z x dependencies${{ env.WINDOWS_DEPS_VERSION }}.zip -o"${{ github.workspace }}\cmbuild\deps" - - name: 'Restore OBS Studio 32-bit Build v${{ env.OBS_GIT_TAG }} from Cache' - id: build-cache-obs-32 - uses: actions/cache@v2 - env: - CACHE_NAME: 'build-cache-obs-32' - with: - path: ${{ github.workspace }}/obs-studio/build32 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - - name: 'Configure OBS Studio 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - if(!(Test-Path -Path ".\build32")){New-Item -ItemType directory -Path .\build32} - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win32" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES -DBUILD_BROWSER=OFF .. - - name: 'Build OBS Studio 32-bit' - if: steps.build-cache-obs-32.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build32\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build32\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Restore OBS Studio 64-bit Build v${{ env.OBS_GIT_TAG }} from Cache' - id: build-cache-obs-64 - uses: actions/cache@v1 - env: - CACHE_NAME: 'build-cache-obs-64' - with: - path: ${{ github.workspace }}/obs-studio/build64 - key: ${{ runner.os }}-${{ env.CACHE_NAME }}-${{ env.OBS_GIT_TAG }} - - name: 'Configure OBS Studio 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - if(!(Test-Path -Path ".\build64")){New-Item -ItemType directory -Path .\build64} - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019_64" -DDepsPath="${{ github.workspace }}\cmbuild\deps\win64" -DCOPIED_DEPENDENCIES=NO -DCOPY_DEPENDENCIES=YES -DBUILD_BROWSER=OFF .. - - name: 'Build OBS Studio 64-bit' - if: steps.build-cache-obs-64.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - run: | - msbuild /m /p:Configuration=RelWithDebInfo .\build64\libobs\libobs.vcxproj - msbuild /m /p:Configuration=RelWithDebInfo .\build64\UI\obs-frontend-api\obs-frontend-api.vcxproj - - name: 'Configure obs-websocket 32-bit' - working-directory: ${{ github.workspace }}/obs-websocket - run: | - mkdir .\build32 - cd .\build32 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A Win32 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build32\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build32\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build32\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" -DOBS_WEBSOCKET_VERSION_SUFFIX="${{ env.CMAKE_VERSION_SUFFIX }}" .. - - name: 'Configure obs-websocket 64-bit' - working-directory: ${{ github.workspace }}/obs-websocket - run: | - mkdir .\build64 - cd .\build64 - cmake -G "${{ env.CMAKE_GENERATOR }}" -A x64 -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DQTDIR="${{ github.workspace }}\cmbuild\QT\${{ env.QT_VERSION }}\msvc2019_64" -DLibObs_DIR="${{ github.workspace }}\obs-studio\build64\libobs" -DLIBOBS_INCLUDE_DIR="${{ github.workspace }}\obs-studio\libobs" -DLIBOBS_LIB="${{ github.workspace }}\obs-studio\build64\libobs\RelWithDebInfo\obs.lib" -DOBS_FRONTEND_LIB="${{ github.workspace }}\obs-studio\build64\UI\obs-frontend-api\RelWithDebInfo\obs-frontend-api.lib" -DOBS_WEBSOCKET_VERSION_SUFFIX="${{ env.CMAKE_VERSION_SUFFIX }}" .. - - name: 'Build obs-websocket 32-bit' - working-directory: ${{ github.workspace }}/obs-websocket - run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-websocket.sln - - name: 'Build obs-websocket 64-bit' - working-directory: ${{ github.workspace }}/obs-websocket - run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-websocket.sln - - name: 'Set PR Artifact Filename' - shell: bash - run: | - echo "WIN_FILENAME=obs-websocket-${{ env.PACKAGE_VERSION }}-Windows" >> $GITHUB_ENV - - name: 'Package obs-websocket' - working-directory: ${{ github.workspace }}/obs-websocket - run: | - mkdir package - cd package - 7z a "${{ env.WIN_FILENAME }}.zip" "..\release\*" - iscc ..\installer\installer-windows.generated.iss /O. /F"${{ env.WIN_FILENAME }}-Installer" - - name: 'Publish ${{ env.WIN_FILENAME }}.zip' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: 'obs-websocket-${{ env.PACKAGE_VERSION }}-Windows' - path: ${{ github.workspace }}/obs-websocket/package/*.zip - - name: 'Publish ${{ env.WIN_FILENAME }}-Installer.exe' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: 'obs-websocket-${{ env.PACKAGE_VERSION }}-Windows-Installer' - path: ${{ github.workspace }}/obs-websocket/package/*.exe - ubuntu64: - name: 'Linux/Ubuntu 64-bit' - runs-on: [ubuntu-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - steps: - - name: 'Checkout obs-websocket' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-websocket - submodules: 'recursive' - - name: 'Checkout OBS Studio' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Get OBS Studio Git Info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - name: 'Checkout last OBS Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-websocket git info' - working-directory: ${{ github.workspace }}/obs-websocket - run: | - git fetch --prune --unshallow - GIT_HASH=$(git rev-parse --short HEAD) - echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV - GIT_TAG=$(git describe --exact-match --tags --abbrev=0) || GIT_TAG="" - echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV - if [ "$GIT_TAG" ] ; then \ - VERSION="$GIT_TAG" \ - VERSION_SUFFIX=$(echo "$GIT_TAG" | cut -c6-20) ; \ - else \ - VERSION="$GIT_HASH-git" \ - VERSION_SUFFIX="-$GIT_HASH-git" ; \ - fi - echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_ENV - echo "CMAKE_VERSION_SUFFIX=$VERSION_SUFFIX" >> $GITHUB_ENV - - name: 'Install prerequisites (Apt)' - shell: bash - run: | - sudo dpkg --add-architecture amd64 - sudo apt-get -qq update - sudo apt-get install -y \ - build-essential \ - checkinstall \ - cmake \ - libasound2-dev \ - libavcodec-dev \ - libavdevice-dev \ - libavfilter-dev \ - libavformat-dev \ - libavutil-dev \ - libcurl4-openssl-dev \ - libfdk-aac-dev \ - libfontconfig-dev \ - libfreetype6-dev \ - libgl1-mesa-dev \ - libjack-jackd2-dev \ - libjansson-dev \ - libluajit-5.1-dev \ - libpulse-dev \ - libqt5x11extras5-dev \ - libspeexdsp-dev \ - libswresample-dev \ - libswscale-dev \ - libudev-dev \ - libv4l-dev \ - libva-dev \ - libvlc-dev \ - libx11-dev \ - libx264-dev \ - libxcb-randr0-dev \ - libxcb-shm0-dev \ - libxcb-xinerama0-dev \ - libxcomposite-dev \ - libxinerama-dev \ - libmbedtls-dev \ - pkg-config \ - python3-dev \ - qtbase5-dev \ - qtbase5-private-dev \ - libqt5svg5-dev \ - swig \ - libxcb-randr0-dev \ - libxcb-xfixes0-dev \ - libx11-xcb-dev \ - libxcb1-dev \ - libxss-dev \ - - name: 'Configure OBS Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir ./build - cd ./build - cmake -DDISABLE_PLUGINS=YES -DENABLE_SCRIPTING=NO -DUNIX_STRUCTURE=YES -DCMAKE_INSTALL_PREFIX=/usr .. - - name: 'Build OBS Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - set -e - cd ./build - make -j4 libobs obs-frontend-api - - name: 'Install OBS Studio' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - cd ./build - sudo cp ./libobs/libobs.so /usr/lib - sudo cp ./UI/obs-frontend-api/libobs-frontend-api.so /usr/lib - sudo mkdir -p /usr/include/obs - sudo cp ../UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/obs-frontend-api.h - - name: 'Configure obs-websocket' - working-directory: ${{ github.workspace }}/obs-websocket - shell: bash - run: | - mkdir ./build - cd ./build - if [ "${{ env.GIT_TAG }}" ] ; then \ - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr -DUSE_UBUNTU_FIX=TRUE -DOBS_WEBSOCKET_VERSION_SUFFIX="${{ env.CMAKE_VERSION_SUFFIX }}" -DCMAKE_BUILD_TYPE=Release .. ; \ - else \ - cmake -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs -DCMAKE_INSTALL_PREFIX=/usr -DUSE_UBUNTU_FIX=TRUE -DOBS_WEBSOCKET_VERSION_SUFFIX="${{ env.CMAKE_VERSION_SUFFIX }}" -DPLUGIN_TESTS=TRUE .. ; \ - fi - - name: 'Build obs-websocket' - working-directory: ${{ github.workspace }}/obs-websocket - shell: bash - run: | - set -e - cd ./build - make -j4 - - name: 'Set PR Artifact Filename' - shell: bash - run: | - echo "LINUX_FILENAME=obs-websocket-${{ env.PACKAGE_VERSION }}-Ubuntu64.deb" >> $GITHUB_ENV - - name: 'Package ${{ env.LINUX_FILENAME }}' - if: success() - working-directory: ${{ github.workspace }}/obs-websocket - shell: bash - run: | - if [ "${{ env.GIT_TAG }}" ] ; then \ - CHECKINSTALL_VERSION="${{ env.PACKAGE_VERSION }}" ; \ - else \ - CHECKINSTALL_VERSION="1-${{ env.PACKAGE_VERSION }}" ; \ - fi - cd ./build - sudo checkinstall -y --type=debian --fstrans=no -nodoc \ - --backup=no --deldoc=yes --install=no --pkgname=obs-websocket --pkgversion="$CHECKINSTALL_VERSION" \ - --pkglicense="GPLv2.0" --maintainer="${{ github.event.pusher.email }}" --pkggroup="video" \ - --pkgsource="${{ github.event.repository.html_url }}" \ - --requires="obs-studio,libqt5network5,libqt5concurrent5,qt5-image-formats-plugins" \ - --pakdir="../package" - sudo chmod ao+r ../package/* - sudo mv ../package/* ../package/${{ env.LINUX_FILENAME }} - cd - - - name: 'Publish ${{ env.LINUX_FILENAME }}' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: 'obs-websocket-${{ env.PACKAGE_VERSION }}-Ubuntu64' - path: '${{ github.workspace }}/obs-websocket/package/*.deb' - macOS: - name: 'macOS 64-bit' - runs-on: [macos-latest] - if: contains(github.event.head_commit.message, '[skip ci]') != true - env: - MACOS_DEPS_VERSION: '2022-01-01' - MACOS_DEPS_CACHE_VERSION: '2' # Change whenever updating dependencies version, in order to force a cache reset - steps: - - name: 'Checkout obs-websocket' - uses: actions/checkout@v2 - with: - path: ${{ github.workspace }}/obs-websocket - submodules: 'recursive' - - name: 'Checkout OBS Studio' - uses: actions/checkout@v2 - with: - repository: obsproject/obs-studio - path: ${{ github.workspace }}/obs-studio - submodules: 'recursive' - - name: 'Install Prerequisite: Binary Signing Certificate' - if: github.event_name != 'pull_request' - uses: apple-actions/import-codesign-certs@v1 - with: - p12-file-base64: ${{ secrets.MACOS_SIGNING_CERT }} - p12-password: ${{ secrets.MACOS_SIGNING_CERT_PASSWORD }} - create-keychain: true - keychain-password: ${{ secrets.MACOS_TEMP_CI_KEYCHAIN_PASSWORD }} - - name: 'Install Prerequisite: Installer Signing Certificate' - if: github.event_name != 'pull_request' - uses: apple-actions/import-codesign-certs@v1 - with: - p12-file-base64: ${{ secrets.MACOS_INSTALLER_CERT }} - p12-password: ${{ secrets.MACOS_INSTALLER_CERT_PASSWORD }} - create-keychain: false - keychain-password: ${{ secrets.MACOS_TEMP_CI_KEYCHAIN_PASSWORD }} - - name: 'Get OBS Studio Git Info' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git fetch --prune --unshallow - echo "OBS_GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV - echo "OBS_GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV - - name: 'Checkout last OBS Studio release (${{ env.OBS_GIT_TAG }})' - shell: bash - working-directory: ${{ github.workspace }}/obs-studio - run: | - git checkout ${{ env.OBS_GIT_TAG }} - git submodule update - - name: 'Get obs-websocket git info' - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket - run: | - git fetch --prune --unshallow - GIT_HASH=$(git rev-parse --short HEAD) - echo "GIT_HASH=$GIT_HASH" >> $GITHUB_ENV - GIT_TAG=$(git describe --exact-match --tags --abbrev=0) || GIT_TAG="" - echo "GIT_TAG=$GIT_TAG" >> $GITHUB_ENV - if [ "$GIT_TAG" ] ; then \ - VERSION="$GIT_TAG" \ - VERSION_SUFFIX=$(echo "$GIT_TAG" | cut -c6-20) ; \ - else \ - VERSION="$GIT_HASH-git" \ - VERSION_SUFFIX="-$GIT_HASH-git" ; \ - fi - echo "PACKAGE_VERSION=$VERSION" >> $GITHUB_ENV - echo "CMAKE_VERSION_SUFFIX=$VERSION_SUFFIX" >> $GITHUB_ENV - - name: 'Install Packages' - shell: bash - run: | - curl -L -O http://s.sudre.free.fr/Software/files/Packages.dmg - sudo hdiutil attach ./Packages.dmg - sudo installer -pkg /Volumes/Packages\ 1.2.10/Install\ Packages.pkg -target / - - name: 'Restore Cached Qt & OBS Studio dependencies' - id: deps-cache - uses: actions/cache@v2 - with: - path: ${{ github.workspace }}/obsdeps/** - key: 'deps-cache-${{ env.MACOS_DEPS_CACHE_VERSION }} | ${{ runner.os }}' - - name: 'Install Prerequisite: Qt + OBS Studio dependencies' - if: steps.deps-cache.outputs.cache-hit != 'true' - shell: bash - run: | - mkdir -p obsdeps - curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-deps-qt-${{ env.MACOS_DEPS_VERSION }}-universal.tar.xz - tar -xf macos-deps-qt-${{ env.MACOS_DEPS_VERSION }}-universal.tar.xz -C "./obsdeps" - curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/macos-deps-${{ env.MACOS_DEPS_VERSION }}-universal.tar.xz - tar -xf macos-deps-${{ env.MACOS_DEPS_VERSION }}-universal.tar.xz -C "./obsdeps" - - run: xattr -r -d com.apple.quarantine ./obsdeps - shell: bash - - name: 'Configue OBS Studio' - if: steps.cache-obs-build.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio - shell: bash - run: | - mkdir -p ./build - cd ./build - cmake .. \ - -DQTDIR=${{ github.workspace }}/obsdeps \ - -DDepsPath=${{ github.workspace }}/obsdeps \ - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \ - -DDISABLE_PLUGINS=true \ - -DENABLE_SCRIPTING=0 \ - -DCMAKE_PREFIX_PATH=${{ github.workspace }}/obsdeps/lib/cmake - - name: 'Build OBS Studio' - if: steps.cache-obs-build.outputs.cache-hit != 'true' - working-directory: ${{ github.workspace }}/obs-studio/build - shell: bash - run: | - set -e - make -j4 libobs obs-frontend-api - - name: 'Configure obs-websocket' - working-directory: ${{ github.workspace }}/obs-websocket - shell: bash - run: | - mkdir -p build - cd build - cmake .. \ - -DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \ - -DQTDIR=${{ github.workspace }}/obsdeps \ - -DLIBOBS_INCLUDE_DIR=${{ github.workspace }}/obs-studio/libobs \ - -DLIBOBS_LIB=${{ github.workspace }}/obs-studio/libobs \ - -DOBS_FRONTEND_LIB="${{ github.workspace }}/obs-studio/build/UI/obs-frontend-api/libobs-frontend-api.dylib" \ - -DCMAKE_BUILD_TYPE=RelWithDebInfo \ - -DCMAKE_INSTALL_PREFIX=/usr \ - -DOBS_WEBSOCKET_VERSION_SUFFIX="${{ env.CMAKE_VERSION_SUFFIX }}" - - name: 'Build obs-websocket' - working-directory: ${{ github.workspace }}/obs-websocket/build - shell: bash - run: | - set -e - make -j4 - - name: 'Relink Qt' - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket/build - run: | - install_name_tool \ - -change /tmp/obsdeps/lib/QtWidgets.framework/Versions/5/QtWidgets \ - @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets \ - -change /tmp/obsdeps/lib/QtGui.framework/Versions/5/QtGui \ - @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui \ - -change /tmp/obsdeps/lib/QtCore.framework/Versions/5/QtCore \ - @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore \ - -change /tmp/obsdeps/lib/QtNetwork.framework/Versions/5/QtNetwork \ - @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork \ - -change /tmp/obsdeps/lib/QtSvg.framework/Versions/5/QtSvg \ - @executable_path/../Frameworks/QtSvg.framework/Versions/5/QtSvg \ - ./obs-websocket.so - - name: 'Sign plugin binary' - if: github.event_name != 'pull_request' - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket/build - run: | - codesign --sign "${{ secrets.MACOS_SIGNING_IDENTITY }}" ./obs-websocket.so - - name: 'Set PR Artifact Filename' - shell: bash - run: | - echo "MACOS_FILENAME=obs-websocket-${{ env.PACKAGE_VERSION }}-macOS.pkg" >> $GITHUB_ENV - echo "MACOS_FILENAME_UNSIGNED=obs-websocket-${{ env.PACKAGE_VERSION }}-macOS-Unsigned.pkg" >> $GITHUB_ENV - - name: 'Package ${{ env.MACOS_FILENAME_UNSIGNED }}' - if: success() - working-directory: ${{ github.workspace }}/obs-websocket - shell: bash - run: | - packagesbuild ./CI/macos/obs-websocket.pkgproj - mv ./release/obs-websocket.pkg ./release/${{ env.MACOS_FILENAME_UNSIGNED }} - - name: 'Sign plugin package' - if: ${{ env.GIT_TAG != '' }} - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket - run: | - productsign \ - --sign "${{ secrets.MACOS_INSTALLER_IDENTITY }}" \ - ./release/${{ env.MACOS_FILENAME_UNSIGNED }} \ - ./release/${{ env.MACOS_FILENAME }} - rm ./release/${{ env.MACOS_FILENAME_UNSIGNED }} - - name: 'Notarize package' - if: ${{ env.GIT_TAG != '' }} - shell: bash - working-directory: ${{ github.workspace }}/obs-websocket - run: | - zip -r ./release/${{ env.MACOS_FILENAME }}.zip ./release/${{ env.MACOS_FILENAME }} - UPLOAD_RESULT=$(xcrun altool --notarize-app \ - --primary-bundle-id "com.obsproject.obs-websocket" \ - --username "${{ secrets.MACOS_NOTARIZATION_USERNAME }}" \ - --password "${{ secrets.MACOS_NOTARIZATION_PASSWORD }}" \ - --asc-provider "${{ secrets.ASC_PROVIDER_SHORTNAME }}" \ - --file "./release/${{ env.MACOS_FILENAME }}.zip") - - rm ./release/${{ env.MACOS_FILENAME }}.zip - - REQUEST_UUID=$(echo $UPLOAD_RESULT | awk -F ' = ' '/RequestUUID/ {print $2}') - - # Pieces of code borrowed from rednoah/notarized-app - while sleep 30 && date; do - CHECK_RESULT=$(xcrun altool \ - --notarization-info "$REQUEST_UUID" \ - --username "${{ secrets.MACOS_NOTARIZATION_USERNAME }}" \ - --password "${{ secrets.MACOS_NOTARIZATION_PASSWORD }}" \ - --asc-provider "${{ secrets.ASC_PROVIDER_SHORTNAME }}") - - if ! grep -q "Status: in progress" <<< "$CHECK_RESULT"; then - xcrun stapler staple ./release/${{ env.MACOS_FILENAME }} - break - fi - done - - name: 'Publish Packages' - if: success() - uses: actions/upload-artifact@v2-preview - with: - name: 'obs-websocket-${{ env.PACKAGE_VERSION }}-macOS' - path: '${{ github.workspace }}/obs-websocket/release/*.pkg' diff --git a/CI/macos/obs-websocket.pkgproj b/CI/macos/obs-websocket.pkgproj deleted file mode 100644 index d38b3a2e..00000000 --- a/CI/macos/obs-websocket.pkgproj +++ /dev/null @@ -1,726 +0,0 @@ - - - - - PROJECT - - PACKAGE_FILES - - DEFAULT_INSTALL_LOCATION - / - HIERARCHY - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - - CHILDREN - - GID - 80 - PATH - ../../build/obs-websocket.so - PATH_TYPE - 1 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - GID - 80 - PATH - bin - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 2 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - ../../data - PATH_TYPE - 1 - PERMISSIONS - 493 - TYPE - 3 - UID - 0 - - - GID - 80 - PATH - obs-websocket - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 2 - UID - 0 - - - GID - 80 - PATH - plugins - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 2 - UID - 0 - - - GID - 80 - PATH - obs-studio - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 2 - UID - 0 - - - GID - 80 - PATH - Application Support - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Automator - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Documentation - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Extensions - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Filesystems - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Frameworks - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Input Methods - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Internet Plug-Ins - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchAgents - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - LaunchDaemons - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PreferencePanes - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Preferences - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 80 - PATH - Printers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - PrivilegedHelperTools - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickLook - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - QuickTime - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Screen Savers - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Scripts - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Services - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - GID - 0 - PATH - Widgets - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - Library - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - CHILDREN - - - CHILDREN - - GID - 0 - PATH - Shared - PATH_TYPE - 0 - PERMISSIONS - 1023 - TYPE - 1 - UID - 0 - - - GID - 80 - PATH - Users - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - - GID - 0 - PATH - / - PATH_TYPE - 0 - PERMISSIONS - 493 - TYPE - 1 - UID - 0 - - PAYLOAD_TYPE - 0 - VERSION - 4 - - PACKAGE_SCRIPTS - - RESOURCES - - - PACKAGE_SETTINGS - - AUTHENTICATION - 1 - CONCLUSION_ACTION - 0 - IDENTIFIER - com.obsproject.obs-websocket - OVERWRITE_PERMISSIONS - - VERSION - 5.0.0 - - PROJECT_COMMENTS - - NOTES - - PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1M - IDQuMDEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQv - c3RyaWN0LmR0ZCI+CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1l - cXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7 - IGNoYXJzZXQ9VVRGLTgiPgo8bWV0YSBodHRwLWVxdWl2PSJDb250 - ZW50LVN0eWxlLVR5cGUiIGNvbnRlbnQ9InRleHQvY3NzIj4KPHRp - dGxlPjwvdGl0bGU+CjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29u - dGVudD0iQ29jb2EgSFRNTCBXcml0ZXIiPgo8bWV0YSBuYW1lPSJD - b2NvYVZlcnNpb24iIGNvbnRlbnQ9IjE0MDQuMTMiPgo8c3R5bGUg - dHlwZT0idGV4dC9jc3MiPgo8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5 - Pgo8L2JvZHk+CjwvaHRtbD4K - - - PROJECT_SETTINGS - - BUILD_PATH - - PATH - ../../release - PATH_TYPE - 1 - - EXCLUDED_FILES - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .DS_Store - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .DS_Store files - PROXY_TOOLTIP - Remove ".DS_Store" files created by the Finder. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - .pbdevelopment - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove .pbdevelopment files - PROXY_TOOLTIP - Remove ".pbdevelopment" files created by ProjectBuilder or Xcode. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - CVS - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .cvsignore - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .cvspass - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - .svn - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .git - TYPE - 1 - - - REGULAR_EXPRESSION - - STRING - .gitignore - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Remove SCM metadata - PROXY_TOOLTIP - Remove helper files and folders used by the CVS, SVN or Git Source Code Management systems. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - classes.nib - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - designable.db - TYPE - 0 - - - REGULAR_EXPRESSION - - STRING - info.nib - TYPE - 0 - - - PROTECTED - - PROXY_NAME - Optimize nib files - PROXY_TOOLTIP - Remove "classes.nib", "info.nib" and "designable.nib" files within .nib bundles. - STATE - - - - PATTERNS_ARRAY - - - REGULAR_EXPRESSION - - STRING - Resources Disabled - TYPE - 1 - - - PROTECTED - - PROXY_NAME - Remove Resources Disabled folders - PROXY_TOOLTIP - Remove "Resources Disabled" folders. - STATE - - - - SEPARATOR - - - - NAME - obs-websocket - - - TYPE - 1 - VERSION - 2 - - diff --git a/CMakeLists.txt b/CMakeLists.txt index 83b00ea6..ebd96db8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,38 +1,9 @@ -cmake_minimum_required(VERSION 3.16...3.20) - -# Version variables project(obs-websocket VERSION 5.0.0) set(OBS_WEBSOCKET_RPC_VERSION 1) - -# Set correct version string -if(DEFINED OBS_WEBSOCKET_VERSION_SUFFIX AND NOT OBS_WEBSOCKET_VERSION_SUFFIX STREQUAL "") - set(OBS_WEBSOCKET_VERSION "${CMAKE_PROJECT_VERSION}${OBS_WEBSOCKET_VERSION_SUFFIX}") - message(WARNING "-----------------------------------\nVersion Suffix provided. OBS_WEBSOCKET_VERSION is now ${OBS_WEBSOCKET_VERSION}\n-----------------------------------") -else() - set(OBS_WEBSOCKET_VERSION "${CMAKE_PROJECT_VERSION}") -endif() - - -set(CMAKE_CXX_STANDARD 17) -set(CMAKE_CXX_STANDARD_REQUIRED ON) - - -# Prohibit in-source builds -file(TO_CMAKE_PATH "${PROJECT_BINARY_DIR}/CMakeLists.txt" _LOC_PATH) -if(EXISTS "${LOC_PATH}") - message(FATAL_ERROR "obs-websocket: You cannot build in a source directory (or any directory with " - "CMakeLists.txt file). Please make a build subdirectory. Feel free to " - "remove CMakeCache.txt and CMakeFiles.") -endif() -unset(_LOC_PATH) - - -# Allow selection of common build types via UI -if(NOT CMAKE_BUILD_TYPE) - set(CMAKE_BUILD_TYPE "RelWithDebInfo" CACHE STRING - "OBS build type [Release, RelWithDebInfo, Debug, MinSizeRel]" FORCE) - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS Release RelWithDebInfo Debug MinSizeRel) +if(NOT ENABLE_UI) + message(STATUS "OBS: DISABLED obs-websocket") + return() endif() @@ -45,25 +16,8 @@ set(CMAKE_PREFIX_PATH "${QTDIR}") set(CMAKE_INCLUDE_CURRENT_DIR ON) set(CMAKE_AUTOMOC ON) set(CMAKE_AUTOUIC ON) - set(CMAKE_AUTORCC ON) # For resources.qrc -# Tell websocketpp not to use system boost -add_definitions(-DASIO_STANDALONE) - - -# Arm build fixes -if (${CMAKE_SYSTEM_PROCESSOR} MATCHES "arm") - set(CMAKE_CXX_FLAGS "-mfpu=neon") -endif() - - -# Find libobs -if (WIN32 OR APPLE) - include(cmake/FindLibObs.cmake) -endif() -find_package(LibObs REQUIRED) - # Find Qt5 find_package(Qt5 REQUIRED COMPONENTS Core Widgets Svg Network) @@ -74,267 +28,138 @@ set(JSON_BuildTests OFF CACHE INTERNAL "") add_subdirectory(deps/json) +# Tell websocketpp not to use system boost +add_definitions(-DASIO_STANDALONE) + + # Configure files configure_file( src/plugin-macros.h.in ../src/plugin-macros.generated.h ) -configure_file( - installer/installer-windows.iss.in - ../installer/installer-windows.generated.iss -) -# Inlude sources -set(obs-websocket_SOURCES - src/obs-websocket.cpp - src/Config.cpp - src/WebSocketApi.cpp - src/websocketserver/WebSocketServer.cpp - src/websocketserver/WebSocketServer_Protocol.cpp - src/websocketserver/rpc/WebSocketSession.cpp - src/eventhandler/EventHandler.cpp - src/eventhandler/EventHandler_General.cpp - src/eventhandler/EventHandler_Config.cpp - src/eventhandler/EventHandler_Scenes.cpp - src/eventhandler/EventHandler_Inputs.cpp - src/eventhandler/EventHandler_Transitions.cpp - src/eventhandler/EventHandler_Filters.cpp - src/eventhandler/EventHandler_Outputs.cpp - src/eventhandler/EventHandler_SceneItems.cpp - src/eventhandler/EventHandler_MediaInputs.cpp - src/eventhandler/EventHandler_Ui.cpp - src/requesthandler/RequestHandler.cpp - src/requesthandler/RequestBatchHandler.cpp - src/requesthandler/RequestHandler_General.cpp - src/requesthandler/RequestHandler_Config.cpp - src/requesthandler/RequestHandler_Sources.cpp - src/requesthandler/RequestHandler_Scenes.cpp - src/requesthandler/RequestHandler_Inputs.cpp - src/requesthandler/RequestHandler_Transitions.cpp - src/requesthandler/RequestHandler_Filters.cpp - src/requesthandler/RequestHandler_SceneItems.cpp - src/requesthandler/RequestHandler_Outputs.cpp - src/requesthandler/RequestHandler_Stream.cpp - src/requesthandler/RequestHandler_Record.cpp - src/requesthandler/RequestHandler_MediaInputs.cpp - src/requesthandler/RequestHandler_Ui.cpp - src/requesthandler/rpc/Request.cpp - src/requesthandler/rpc/RequestBatchRequest.cpp - src/requesthandler/rpc/RequestResult.cpp - src/forms/SettingsDialog.cpp - src/forms/ConnectInfo.cpp - src/forms/resources.qrc - src/utils/Crypto.cpp - src/utils/Json.cpp - src/utils/Obs.cpp - src/utils/Obs_StringHelper.cpp - src/utils/Obs_EnumHelper.cpp - src/utils/Obs_NumberHelper.cpp - src/utils/Obs_ArrayHelper.cpp - src/utils/Obs_ObjectHelper.cpp - src/utils/Obs_SearchHelper.cpp - src/utils/Obs_ActionHelper.cpp - src/utils/Obs_VolumeMeter.cpp - src/utils/Platform.cpp - src/utils/Compat.cpp - deps/qr/cpp/QrCode.cpp) +# Setup target +add_library(obs-websocket MODULE) +add_library(OBS::websocket ALIAS obs-websocket) -set(obs-websocket_HEADERS - src/obs-websocket.h - src/Config.h - src/WebSocketApi.h - src/websocketserver/WebSocketServer.h - src/websocketserver/types/WebSocketCloseCode.h - src/websocketserver/types/WebSocketOpCode.h - src/websocketserver/rpc/WebSocketSession.h - src/eventhandler/EventHandler.h - src/eventhandler/types/EventSubscription.h - src/requesthandler/RequestHandler.h - src/requesthandler/RequestBatchHandler.h - src/requesthandler/types/RequestStatus.h - src/requesthandler/types/RequestBatchExecutionType.h - src/requesthandler/rpc/Request.h - src/requesthandler/rpc/RequestBatchRequest.h - src/requesthandler/rpc/RequestResult.h - src/forms/SettingsDialog.h - src/forms/ConnectInfo.h - src/utils/Crypto.h - src/utils/Json.h - src/utils/Obs.h - src/utils/Obs_VolumeMeter.h - src/utils/Obs_VolumeMeter_Helpers.h - src/utils/Platform.h - src/utils/Compat.h - src/utils/Utils.h - lib/obs-websocket-api.h - deps/qr/cpp/QrCode.hpp) +target_sources( + obs-websocket PRIVATE + src/obs-websocket.cpp + src/obs-websocket.h + src/Config.cpp + src/Config.h + lib/obs-websocket-api.h + src/forms/SettingsDialog.cpp + src/forms/SettingsDialog.h + src/forms/ConnectInfo.cpp + src/forms/ConnectInfo.h + src/forms/resources.qrc + src/WebSocketApi.cpp + src/WebSocketApi.h + src/websocketserver/WebSocketServer.cpp + src/websocketserver/WebSocketServer_Protocol.cpp + src/websocketserver/WebSocketServer.h + src/websocketserver/rpc/WebSocketSession.cpp + src/websocketserver/rpc/WebSocketSession.h + src/websocketserver/types/WebSocketCloseCode.h + src/websocketserver/types/WebSocketOpCode.h + src/eventhandler/EventHandler.cpp + src/eventhandler/EventHandler_General.cpp + src/eventhandler/EventHandler_Config.cpp + src/eventhandler/EventHandler_Scenes.cpp + src/eventhandler/EventHandler_Inputs.cpp + src/eventhandler/EventHandler_Transitions.cpp + src/eventhandler/EventHandler_Filters.cpp + src/eventhandler/EventHandler_Outputs.cpp + src/eventhandler/EventHandler_SceneItems.cpp + src/eventhandler/EventHandler_MediaInputs.cpp + src/eventhandler/EventHandler_Ui.cpp + src/eventhandler/EventHandler.h + src/eventhandler/types/EventSubscription.h + src/requesthandler/RequestHandler.cpp + src/requesthandler/RequestHandler_General.cpp + src/requesthandler/RequestHandler_Config.cpp + src/requesthandler/RequestHandler_Sources.cpp + src/requesthandler/RequestHandler_Scenes.cpp + src/requesthandler/RequestHandler_Inputs.cpp + src/requesthandler/RequestHandler_Transitions.cpp + src/requesthandler/RequestHandler_Filters.cpp + src/requesthandler/RequestHandler_SceneItems.cpp + src/requesthandler/RequestHandler_Outputs.cpp + src/requesthandler/RequestHandler_Stream.cpp + src/requesthandler/RequestHandler_Record.cpp + src/requesthandler/RequestHandler_MediaInputs.cpp + src/requesthandler/RequestHandler_Ui.cpp + src/requesthandler/RequestHandler.h + src/requesthandler/RequestBatchHandler.cpp + src/requesthandler/RequestBatchHandler.h + src/requesthandler/rpc/Request.cpp + src/requesthandler/rpc/Request.h + src/requesthandler/rpc/RequestBatchRequest.cpp + src/requesthandler/rpc/RequestBatchRequest.h + src/requesthandler/rpc/RequestResult.cpp + src/requesthandler/rpc/RequestResult.h + src/requesthandler/types/RequestStatus.h + src/requesthandler/types/RequestBatchExecutionType.h + src/utils/Crypto.cpp + src/utils/Crypto.h + src/utils/Json.cpp + src/utils/Json.h + src/utils/Obs.cpp + src/utils/Obs_StringHelper.cpp + src/utils/Obs_EnumHelper.cpp + src/utils/Obs_NumberHelper.cpp + src/utils/Obs_ArrayHelper.cpp + src/utils/Obs_ObjectHelper.cpp + src/utils/Obs_SearchHelper.cpp + src/utils/Obs_ActionHelper.cpp + src/utils/Obs.h + src/utils/Obs_VolumeMeter.cpp + src/utils/Obs_VolumeMeter.h + src/utils/Obs_VolumeMeter_Helpers.h + src/utils/Platform.cpp + src/utils/Platform.h + src/utils/Compat.cpp + src/utils/Compat.h + src/utils/Utils.h + deps/qr/cpp/QrCode.cpp + deps/qr/cpp/QrCode.hpp) - -# Platform-independent build settings -add_library(obs-websocket MODULE - ${obs-websocket_SOURCES} - ${obs-websocket_HEADERS}) - -include_directories( - "${LIBOBS_INCLUDE_DIR}/../UI/obs-frontend-api" +target_include_directories(obs-websocket PRIVATE ${Qt5Core_INCLUDES} ${Qt5Widgets_INCLUDES} ${Qt5Svg_INCLUDES} ${Qt5Network_INCLUDES} - "${CMAKE_SOURCE_DIR}/deps/asio/asio/include" - "${CMAKE_SOURCE_DIR}/deps/websocketpp") + "deps/asio/asio/include" + "deps/websocketpp") -target_link_libraries(obs-websocket - libobs +target_link_libraries(obs-websocket PRIVATE + OBS::libobs + OBS::frontend-api Qt5::Core Qt5::Widgets Qt5::Svg Qt5::Network nlohmann_json::nlohmann_json) +target_compile_features(obs-websocket PRIVATE cxx_std_17) + +set_target_properties(obs-websocket PROPERTIES FOLDER "plugins/obs-websocket") + if(PLUGIN_TESTS) target_compile_definitions(obs-websocket PRIVATE PLUGIN_TESTS) endif() -# Windows-specific build settings and tasks +# Random other things if(WIN32) - if(NOT DEFINED OBS_FRONTEND_LIB) - set(OBS_FRONTEND_LIB "OBS_FRONTEND_LIB-NOTFOUND" CACHE FILEPATH "OBS frontend library") - message(FATAL_ERROR "Could not find OBS Frontend API's library!") - endif() - - if(MSVC) - # Enable Multicore Builds and disable FH4 (to not depend on VCRUNTIME140_1.DLL) - add_definitions(/MP /d2FH4-) - endif() - add_definitions(-D_WEBSOCKETPP_CPP11_STL_) - - if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(ARCH_NAME "64bit") - set(OBS_BUILDDIR_ARCH "build64") - else() - set(ARCH_NAME "32bit") - set(OBS_BUILDDIR_ARCH "build32") - endif() - - include_directories( - "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/UI" - ) - - target_link_libraries(obs-websocket - "${OBS_FRONTEND_LIB}") - - # Release package helper - # The "release" folder has a structure similar OBS' one on Windows - set(RELEASE_DIR "${PROJECT_SOURCE_DIR}/release") - - add_custom_command(TARGET obs-websocket POST_BUILD - # If config is Release or RelWithDebInfo, package release files - COMMAND if $,$>==1 ( - "${CMAKE_COMMAND}" -E make_directory - "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}" - ) - - COMMAND if $,$>==1 ( - "${CMAKE_COMMAND}" -E copy_directory - "${PROJECT_SOURCE_DIR}/data" - "${RELEASE_DIR}/data/obs-plugins/obs-websocket" - ) - - COMMAND if $,$>==1 ( - "${CMAKE_COMMAND}" -E copy - "$" - "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}" - ) - - # In Release or RelWithDebInfo mode, copy Qt image format plugins - COMMAND if $,$>==1 ( - "${CMAKE_COMMAND}" -E make_directory - "${RELEASE_DIR}/bin/${ARCH_NAME}/imageformats" - ) - COMMAND if $,$>==1 ( - "${CMAKE_COMMAND}" -E copy - "${QTDIR}/plugins/imageformats/qicns.dll" - "${QTDIR}/plugins/imageformats/qico.dll" - "${QTDIR}/plugins/imageformats/qjpeg.dll" - "${QTDIR}/plugins/imageformats/qtiff.dll" - "${QTDIR}/plugins/imageformats/qwbmp.dll" - "${QTDIR}/plugins/imageformats/qwebp.dll" - "${RELEASE_DIR}/bin/${ARCH_NAME}/imageformats" - ) - - # If config is RelWithDebInfo, package PDB file for target - COMMAND if $==1 ( - "${CMAKE_COMMAND}" -E copy - "$" - "${RELEASE_DIR}/obs-plugins/${ARCH_NAME}" - ) - - # In the Debug configuration, copy to obs-studio dev environment for immediate testing - COMMAND if $==1 ( - "${CMAKE_COMMAND}" -E copy - "$" - "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/obs-plugins/${ARCH_NAME}" - ) - - COMMAND if $==1 ( - "${CMAKE_COMMAND}" -E copy - "$" - "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/obs-plugins/${ARCH_NAME}" - ) - - COMMAND if $==1 ( - "${CMAKE_COMMAND}" -E make_directory - "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/data/obs-plugins/obs-websocket" - ) - - COMMAND if $==1 ( - "${CMAKE_COMMAND}" -E copy_directory - "${PROJECT_SOURCE_DIR}/data" - "${LIBOBS_INCLUDE_DIR}/../${OBS_BUILDDIR_ARCH}/rundir/$/data/obs-plugins/obs-websocket" - ) - ) +elseif(UNIX AND NOT APPLE) + target_compile_options(obs-websocket PRIVATE -Wall -Wextra -Wno-missing-field-initializers -Wno-variadic-macros) endif() -# Linux-specific build settings and tasks -if(UNIX AND NOT APPLE) - include(GNUInstallDirs) - - target_compile_options(obs-websocket PRIVATE -Wall -Wextra -Wpedantic -Werror -Wno-missing-field-initializers) - - set_target_properties(obs-websocket PROPERTIES PREFIX "") - target_link_libraries(obs-websocket obs-frontend-api) - - # Manually set permissions for locales - file(GLOB locale_files data/locale/*.ini) - set(CMAKE_INSTALL_DEFAULT_DIRECTORY_PERMISSIONS - OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) - - # Manually set file permissions for binary - install(TARGETS obs-websocket LIBRARY - DESTINATION "${CMAKE_INSTALL_FULL_LIBDIR}/obs-plugins" - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) - - # OBS on Ubuntu installs into a different directory than most linux distros - if(${USE_UBUNTU_FIX}) - install(TARGETS obs-websocket LIBRARY - DESTINATION "/usr/lib/obs-plugins" - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) - endif() - - install(FILES ${locale_files} - DESTINATION "${CMAKE_INSTALL_FULL_DATAROOTDIR}/obs/obs-plugins/obs-websocket/locale") -endif() - -# MacOS-specific build settings and tasks -if(APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -fvisibility=default") - - set(CMAKE_SKIP_RPATH TRUE) - set_target_properties(obs-websocket PROPERTIES PREFIX "") - target_link_libraries(obs-websocket "${OBS_FRONTEND_LIB}") -endif() +# Final CMake helpers +setup_plugin_target(obs-websocket) +setup_target_resources(obs-websocket "obs-plugins/obs-websocket") diff --git a/README.md b/README.md index 821f1725..6c562f8a 100644 --- a/README.md +++ b/README.md @@ -13,11 +13,13 @@ WebSocket API for OBS Studio. ## Downloads -Binaries for Windows, MacOS, and Linux are available in the [Releases](https://github.com/obsproject/obs-websocket/releases) section. +obs-websocket is now included by default with OBS Studio 28.0.0 and above. As such, **there should be no need to download obs-websocket if you have OBS Studio > 28.0.0.** + +Binaries **for OBS Studio < 28.0.0** on Windows, MacOS, and Linux are available in the [Releases](https://github.com/obsproject/obs-websocket/releases) section. ## Using obs-websocket -It is **highly recommended** to protect obs-websocket with a password against unauthorized control. To do this, open the "Websocket server settings" dialog under OBS' "Tools" menu. In the settings dialogs, you can enable or disable authentication and set a password for it. +It is **highly recommended** to keep obs-websocket protected with a password against unauthorized control. obs-websocket generates a password for you automatically when you load it for the first time. To change this, open the "obs-websocket Settings" dialog under OBS' "Tools" menu. In the settings dialog, you can enable or disable authentication and set a password for it. (Psst. You can use `--websocket_port`(value), `--websocket_password`(value), `--websocket_debug`(flag) and `--websocket_ipv4_only`(flag) on the command line to override the configured values.) diff --git a/cmake/FindLibObs.cmake b/cmake/FindLibObs.cmake deleted file mode 100644 index ab0a3dea..00000000 --- a/cmake/FindLibObs.cmake +++ /dev/null @@ -1,107 +0,0 @@ -# This module can be copied and used by external plugins for OBS -# -# Once done these will be defined: -# -# LIBOBS_FOUND -# LIBOBS_INCLUDE_DIRS -# LIBOBS_LIBRARIES - -find_package(PkgConfig QUIET) -if (PKG_CONFIG_FOUND) - pkg_check_modules(_OBS QUIET obs libobs) -endif() - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(_lib_suffix 64) -else() - set(_lib_suffix 32) -endif() - -if(DEFINED CMAKE_BUILD_TYPE) - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(_build_type_base "debug") - else() - set(_build_type_base "release") - endif() -endif() - -find_path(LIBOBS_INCLUDE_DIR - NAMES obs.h - HINTS - ENV obsPath${_lib_suffix} - ENV obsPath - ${obsPath} - PATHS - /usr/include /usr/local/include /opt/local/include /sw/include - PATH_SUFFIXES - libobs - ) - -function(find_obs_lib base_name repo_build_path lib_name) - string(TOUPPER "${base_name}" base_name_u) - - if(DEFINED _build_type_base) - set(_build_type_${repo_build_path} "${_build_type_base}/${repo_build_path}") - set(_build_type_${repo_build_path}${_lib_suffix} "${_build_type_base}${_lib_suffix}/${repo_build_path}") - endif() - - find_library(${base_name_u}_LIB - NAMES ${_${base_name_u}_LIBRARIES} ${lib_name} lib${lib_name} - HINTS - ENV obsPath${_lib_suffix} - ENV obsPath - ${obsPath} - ${_${base_name_u}_LIBRARY_DIRS} - PATHS - /usr/lib /usr/local/lib /opt/local/lib /sw/lib - PATH_SUFFIXES - lib${_lib_suffix} lib - libs${_lib_suffix} libs - bin${_lib_suffix} bin - ../lib${_lib_suffix} ../lib - ../libs${_lib_suffix} ../libs - ../bin${_lib_suffix} ../bin - # base repo non-msvc-specific search paths - ${_build_type_${repo_build_path}} - ${_build_type_${repo_build_path}${_lib_suffix}} - build/${repo_build_path} - build${_lib_suffix}/${repo_build_path} - # base repo msvc-specific search paths on windows - build${_lib_suffix}/${repo_build_path}/Debug - build${_lib_suffix}/${repo_build_path}/RelWithDebInfo - build/${repo_build_path}/Debug - build/${repo_build_path}/RelWithDebInfo - ) -endfunction() - -find_obs_lib(LIBOBS libobs obs) - -if(MSVC) - find_obs_lib(W32_PTHREADS deps/w32-pthreads w32-pthreads) -endif() - -include(FindPackageHandleStandardArgs) -find_package_handle_standard_args(Libobs DEFAULT_MSG LIBOBS_LIB LIBOBS_INCLUDE_DIR) -mark_as_advanced(LIBOBS_INCLUDE_DIR LIBOBS_LIB) - -if(LIBOBS_FOUND) - if(MSVC) - if (NOT DEFINED W32_PTHREADS_LIB) - message(FATAL_ERROR "Could not find the w32-pthreads library" ) - endif() - - set(W32_PTHREADS_INCLUDE_DIR ${LIBOBS_INCLUDE_DIR}/../deps/w32-pthreads) - endif() - - set(LIBOBS_INCLUDE_DIRS ${LIBOBS_INCLUDE_DIR} ${W32_PTHREADS_INCLUDE_DIR}) - set(LIBOBS_LIBRARIES ${LIBOBS_LIB} ${W32_PTHREADS_LIB}) - include(${LIBOBS_INCLUDE_DIR}/../cmake/external/ObsPluginHelpers.cmake) - - # allows external plugins to easily use/share common dependencies that are often included with libobs (such as FFmpeg) - if(NOT DEFINED INCLUDED_LIBOBS_CMAKE_MODULES) - set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${LIBOBS_INCLUDE_DIR}/../cmake/Modules/") - set(INCLUDED_LIBOBS_CMAKE_MODULES true) - endif() -else() - message(FATAL_ERROR "Could not find the libobs library" ) -endif() diff --git a/installer/installer-windows.iss.in b/installer/installer-windows.iss.in deleted file mode 100644 index 6bcad060..00000000 --- a/installer/installer-windows.iss.in +++ /dev/null @@ -1,74 +0,0 @@ -#define MyAppName "obs-websocket" -#define MyAppVersion "@OBS_WEBSOCKET_VERSION@" -#define MyAppPublisher "obs-websocket" -#define MyAppURL "http://github.com/obsproject/obs-websocket" - -[Setup] -; NOTE: The value of AppId uniquely identifies this application. -; Do not use the same AppId value in installers for other applications. -; (To generate a new GUID, click Tools | Generate GUID inside the IDE.) -AppId={{117EE44F-48E1-49E5-A381-CC8D9195CF35} -AppName={#MyAppName} -AppVersion={#MyAppVersion} -AppPublisher={#MyAppPublisher} -AppPublisherURL={#MyAppURL} -AppSupportURL={#MyAppURL} -AppUpdatesURL={#MyAppURL} -DefaultDirName={code:GetDirName} -DefaultGroupName={#MyAppName} -OutputBaseFilename=obs-websocket-{#MyAppVersion}-Windows-Installer -Compression=lzma -SolidCompression=yes -DirExistsWarning=no - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" - -[Files] -Source: "..\release\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs -Source: "..\LICENSE"; Flags: dontcopy -; NOTE: Don't use "Flags: ignoreversion" on any shared system files - -[Icons] -Name: "{group}\{cm:ProgramOnTheWeb,{#MyAppName}}"; Filename: "{#MyAppURL}" -Name: "{group}\{cm:UninstallProgram,{#MyAppName}}"; Filename: "{uninstallexe}" - -[Code] -procedure InitializeWizard(); -var - GPLText: AnsiString; - Page: TOutputMsgMemoWizardPage; -begin - ExtractTemporaryFile('LICENSE'); - LoadStringFromFile(ExpandConstant('{tmp}\LICENSE'), GPLText); - Page := CreateOutputMsgMemoPage(wpWelcome, - 'License Information', 'Please review the license terms before installing obs-websocket', - 'Press Page Down to see the rest of the agreement. Once you are aware of your rights, click Next to continue.', - String(GPLText) - ); -end; - -// Validate that obs-studio is installed before installing the plugin -function PrepareToInstall(var NeedsRestart: Boolean): String; -begin - Result := ''; - - if not DirExists(ExpandConstant('{app}\obs-plugins')) then - begin - Result := 'The selected install directory does not appear to be valid. Please install OBS Studio before installing {#MyAppName} or correct your install path.'; - end; -end; - -// credit where it's due : -// following function come from https://github.com/Xaymar/obs-studio_amf-encoder-plugin/blob/master/%23Resources/Installer.in.iss#L45 -function GetDirName(Value: string): string; -var - InstallPath: string; -begin - // initialize default path, which will be returned when the following registry - // key queries fail due to missing keys or for some different reason - Result := '{commonpf}\obs-studio'; - // query the first registry value; if this succeeds, return the obtained value - if RegQueryStringValue(HKLM32, 'SOFTWARE\OBS Studio', '', InstallPath) then - Result := InstallPath -end;