diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 000000000..f8532cc8d --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,348 @@ +name: 'CI Multiplatform Build' + +on: + push: + branches: + - master + pull_request: + paths-ignore: + - '**.md' + branches: + - master + +env: + CEF_BUILD_VERSION: '3770' + CEF_VERSION: '75.1.16+g16a67c4+chromium-75.0.3770.100' + +jobs: + macos64: + name: 'macOS 64-bit' + runs-on: [macos-latest] + env: + MACOS_DEPS_VERSION: '2020-04-18' + VLC_VERSION: '3.0.8' + SPARKLE_VERSION: '1.23.0' + QT_VERSION: '5.14.1' + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + submodules: 'recursive' + - name: 'Fetch Git Tags' + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisites (Homebrew)' + shell: bash + run: | + brew bundle --file ./CI/scripts/macos/Brewfile + - name: 'Install prerequisite: Pre-built dependencies' + shell: bash + run: | + curl -L -O https://github.com/obsproject/obs-deps/releases/download/${{ env.MACOS_DEPS_VERSION }}/osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz + tar -xf ./osx-deps-${{ env.MACOS_DEPS_VERSION }}.tar.gz -C "/tmp" + - name: 'Install prerequisite: VLC' + shell: bash + run: | + curl -L -O https://downloads.videolan.org/vlc/${{ env.VLC_VERSION }}/vlc-${{ env.VLC_VERSION }}.tar.xz + if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi + tar -xf ./vlc-${{ env.VLC_VERSION }}.tar.xz -C "${{ github.workspace }}/cmbuild" + - name: 'Install prerequisite: Sparkle' + shell: bash + run: | + curl -L -o sparkle.tar.bz2 https://github.com/sparkle-project/Sparkle/releases/download/${{ env.SPARKLE_VERSION }}/Sparkle-${{ env.SPARKLE_VERSION }}.tar.bz2 + mkdir ${{ github.workspace }}/cmbuild/sparkle + tar -xf ./sparkle.tar.bz2 -C ${{ github.workspace }}/cmbuild/sparkle + sudo cp -R ${{ github.workspace }}/cmbuild/sparkle/Sparkle.framework /Library/Frameworks/Sparkle.framework + - name: 'Restore Chromium Embedded Framework from cache' + id: cef-cache + uses: actions/cache@v1 + env: + CACHE_NAME: 'cef-cache' + with: + path: ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64 + key: ${{ runner.os }}-pr-${{ env.CACHE_NAME }}-${{ env.CEF_BUILD_VERSION }} + restore-keys: | + ${{ runner.os }}-pr-${{ env.CACHE_NAME }}- + - name: 'Install prerequisite: Chromium Embedded Framework' + if: steps.cef-cache.outputs.cache-hit != 'true' + shell: bash + run: | + curl -L -O https://obs-nightly.s3-us-west-2.amazonaws.com/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64.tar.bz2 + tar -xf ./cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64.tar.bz2 -C ${{ github.workspace }}/cmbuild/ + cd ${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64 + sed -i '.orig' '/add_subdirectory(tests\/ceftests)/d' ./CMakeLists.txt + # target 10.11 + sed -i '.orig' s/\"10.9\"/\"10.11\"/ ./cmake/cef_variables.cmake + mkdir build && cd build + cmake -DCMAKE_CXX_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_EXE_LINKER_FLAGS="-std=c++11 -stdlib=libc++" -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 .. + make -j4 + mkdir libcef_dll + cd ../../ + - name: 'Configure' + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DENABLE_SPARKLE_UPDATER=ON -DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 -DQTDIR="/usr/local/Cellar/qt/${{ env.QT_VERSION }}" -DDepsPath="/tmp/obsdeps" -DVLCPath="${{ github.workspace }}/cmbuild/vlc-${{ env.VLC_VERSION }}" -DBUILD_BROWSER=ON -DBROWSER_DEPLOY=ON -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_macosx64" .. + - name: 'Build' + shell: bash + working-directory: ${{ github.workspace }}/build + run: make -j4 + - name: 'Install prerequisite: Packages app' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + shell: bash + run: | + curl -L -O https://s3-us-west-2.amazonaws.com/obs-nightly/Packages.pkg + sudo installer -pkg ./Packages.pkg -target / + - name: 'Install prerequisite: DMGbuild' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + shell: bash + run: | + pip3 install dmgbuild + - name: 'Package' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + shell: bash + run: | + FILE_DATE=$(date +%Y-%m-%d) + FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-osx.dmg + echo "::set-env name=FILE_NAME::${FILE_NAME}" + ./CI/scripts/macos/prepareApp.sh + dmgbuild -s ./CI/scripts/macos/package/settings.json "OBS" OBS.dmg + mkdir ./nightly + sudo mv ./OBS.dmg ./nightly/${FILE_NAME} + - name: 'Publish' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.FILE_NAME }}' + path: ./nightly/*.dmg + ubuntu64: + name: 'Linux/Ubuntu 64-bit' + runs-on: [ubuntu-latest] + steps: + - name: 'Checkout' + uses: actions/checkout@v2 + with: + submodules: 'recursive' + - name: 'Fetch Git Tags' + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - 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 \ + libqt5svg5-dev \ + swig + - name: 'Install prerequisite: Chromium Embedded Framework' + shell: bash + run: | + curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64.tar.bz2 -f --retry 5 -o cef.tar.bz2 + if [ ! -d "${{ github.workspace }}/cmbuild" ]; then mkdir "${{ github.workspace }}/cmbuild"; fi + tar -C"${{ github.workspace }}/cmbuild" -xjf cef.tar.bz2 + - name: 'Configure' + shell: bash + run: | + mkdir ./build + cd ./build + cmake -DUNIX_STRUCTURE=0 -DCMAKE_INSTALL_PREFIX="${{ github.workspace }}/obs-studio-portable" -DBUILD_CAPTIONS=ON -DWITH_RTMPS=ON -DBUILD_BROWSER=ON -DCEF_ROOT_DIR="${{ github.workspace }}/cmbuild/cef_binary_${{ env.CEF_BUILD_VERSION }}_linux64" .. + - name: 'Build' + shell: bash + working-directory: ${{ github.workspace }}/build + run: make -j4 + - name: 'Package' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + shell: bash + run: | + FILE_DATE=$(date +%Y-%m-%d) + FILE_NAME=$FILE_DATE-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-linux64.tar.gz + echo "::set-env name=FILE_NAME::${FILE_NAME}" + cd ./build + sudo checkinstall --default --install=no --pkgname=obs-studio --fstrans=yes --backup=no --pkgversion="$(date +%Y%m%d)-git" --deldoc=yes + mkdir ../nightly + tar -cvzf "${FILE_NAME}" *.deb + mv "${FILE_NAME}" ../nightly/ + cd - + - name: 'Publish' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.FILE_NAME }}' + path: './nightly/*.tar.gz' + win64: + name: 'Windows 64-bit' + runs-on: [windows-latest] + env: + QT_VERSION: '5.10.1' + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_SYSTEM_VERSION: "10.0.18363.657" + WINDOWS_DEPS_VERSION: '2017' + TWITCH-CLIENTID: ${{ secrets.TWITCH_CLIENTID }} + TWITCH-HASH: ${{ secrets.TWITCH_HASH }} + MIXER-CLIENTID: ${{ secrets.MIXER_CLIENTID }} + MIXER-HASH: ${{ secrets.MIXER_HASH }} + RESTREAM-CLIENTID: ${{ secrets.RESTREAM-CLIENTID }} + RESTREAM-HASH: ${{ secrets.RESTREAM-HASH }} + steps: + - name: 'Add msbuild to PATH' + uses: microsoft/setup-msbuild@v1.0.0 + - name: 'Checkout' + uses: actions/checkout@v2 + with: + submodules: 'recursive' + - name: 'Fetch Git Tags' + shell: bash + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisite: QT' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - + 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}/cmbuild/QT" + - name: 'Install prerequisite: Pre-built dependencies' + 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: 'Install prerequisite: VLC' + run: | + curl -kL https://cdn-fastly.obsproject.com/downloads/vlc.zip -f --retry 5 -o vlc.zip + 7z x vlc.zip -o"${{ github.workspace }}/cmbuild/vlc" + - name: 'Install prerequisite: Chromium Embedded Framework' + run: | + curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal.zip -f --retry 5 -o cef.zip + 7z x cef.zip -o"${{ github.workspace }}/cmbuild" + - name: 'Configure' + run: | + mkdir ./build + mkdir ./build64 + cd ./build64 + cmake -G"${{ env.CMAKE_GENERATOR }}" -A"x64" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=true -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DDepsPath="${{ github.workspace }}/cmbuild/deps/win64" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017_64" -DCEF_ROOT_DIR="${{ github.workspace }}/cmdbuild/cef_binary_${{ env.CEF_VERSION }}_windows64_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE .. + - name: 'Build' + run: msbuild /m /p:Configuration=RelWithDebInfo .\build64\obs-studio.sln + - name: 'Package' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + run: | + $env:FILE_DATE=(Get-Date -UFormat "%F") + $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win64.zip" + echo "::set-env name=FILE_NAME::${env:FILE_NAME}" + robocopy .\build64\rundir\RelWithDebInfo .\build\ /E /XF .gitignore + 7z a ${env:FILE_NAME} .\build\* + - name: 'Publish' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.FILE_NAME }}' + path: '*-win64.zip' + + win32: + name: 'Windows 32-bit' + runs-on: [windows-latest] + env: + QT_VERSION: '5.10.1' + CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_SYSTEM_VERSION: "10.0.18363.657" + WINDOWS_DEPS_VERSION: '2017' + TWITCH-CLIENTID: ${{ secrets.TWITCH_CLIENTID }} + TWITCH-HASH: ${{ secrets.TWITCH_HASH }} + MIXER-CLIENTID: ${{ secrets.MIXER_CLIENTID }} + MIXER-HASH: ${{ secrets.MIXER_HASH }} + RESTREAM-CLIENTID: ${{ secrets.RESTREAM-CLIENTID }} + RESTREAM-HASH: ${{ secrets.RESTREAM-HASH }} + steps: + - name: 'Add msbuild to PATH' + uses: microsoft/setup-msbuild@v1.0.0 + - name: 'Checkout' + uses: actions/checkout@v2 + with: + submodules: 'recursive' + - name: 'Fetch Git Tags' + shell: bash + run: | + git fetch --prune --unshallow + echo ::set-env name=OBS_GIT_BRANCH::$(git rev-parse --abbrev-ref HEAD) + echo ::set-env name=OBS_GIT_HASH::$(git rev-parse --short HEAD) + echo ::set-env name=OBS_GIT_TAG::$(git describe --tags --abbrev=0) + - name: 'Install prerequisite: QT' + run: | + curl -kLO https://cdn-fastly.obsproject.com/downloads/Qt_${{ env.QT_VERSION }}.7z -f --retry 5 -C - + 7z x Qt_${{ env.QT_VERSION }}.7z -o"${{ github.workspace }}/cmbuild/QT" + - name: 'Install prerequisite: Pre-built dependencies' + 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: 'Install prerequisite: VLC' + run: | + curl -kL https://cdn-fastly.obsproject.com/downloads/vlc.zip -f --retry 5 -o vlc.zip + 7z x vlc.zip -o"${{ github.workspace }}/cmbuild/vlc" + - name: 'Install prerequisite: Chromium Embedded Framework' + run: | + curl -kL https://cdn-fastly.obsproject.com/downloads/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal.zip -f --retry 5 -o cef.zip + 7z x cef.zip -o"${{ github.workspace }}/cmbuild" + - name: 'Configure' + run: | + mkdir ./build + mkdir ./build32 + cd ./build32 + cmake -G"${{ env.CMAKE_GENERATOR }}" -A"Win32" -DCMAKE_SYSTEM_VERSION="${{ env.CMAKE_SYSTEM_VERSION }}" -DBUILD_BROWSER=true -DBUILD_CAPTIONS=true -DCOMPILE_D3D12_HOOK=true -DDepsPath="${{ github.workspace }}/cmbuild/deps/win32" -DQTDIR="${{ github.workspace }}/cmbuild/QT/${{ env.QT_VERSION }}/msvc2017" -DCEF_ROOT_DIR="${{ github.workspace }}/cmdbuild/cef_binary_${{ env.CEF_VERSION }}_windows32_minimal" -DCOPIED_DEPENDENCIES=FALSE -DCOPY_DEPENDENCIES=TRUE .. + - name: 'Build' + run: msbuild /m /p:Configuration=RelWithDebInfo .\build32\obs-studio.sln + - name: 'Package' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + run: | + $env:FILE_DATE=(Get-Date -UFormat "%F") + $env:FILE_NAME="${env:FILE_DATE}-${{ env.OBS_GIT_HASH }}-${{ env.OBS_GIT_TAG }}-win32.zip" + echo "::set-env name=FILE_NAME::${env:FILE_NAME}" + robocopy .\build32\rundir\RelWithDebInfo .\build\ /E /XF .gitignore + 7z a ${env:FILE_NAME} .\build\* + - name: 'Publish' + if: success() && (github.event_name != 'pull_request' || contains( github.event.pull_request.labels.*.name, 'Seeking Testers')) + uses: actions/upload-artifact@v2-preview + with: + name: '${{ env.FILE_NAME }}' + path: '*-win32.zip' diff --git a/CI/scripts/macos/Brewfile b/CI/scripts/macos/Brewfile new file mode 100644 index 000000000..5d1d86371 --- /dev/null +++ b/CI/scripts/macos/Brewfile @@ -0,0 +1,8 @@ +brew "jack" +brew "speexdsp" +brew "cmake" +brew "freetype" +brew "fdk-aac" +brew "https://gist.githubusercontent.com/DDRBoxman/9c7a2b08933166f4b61ed9a44b242609/raw/ef4de6c587c6bd7f50210eccd5bd51ff08e6de13/qt.rb" +brew "swig", link: false +brew "https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb" diff --git a/CI/scripts/macos/app/Info.plist b/CI/scripts/macos/app/Info.plist new file mode 100644 index 000000000..074e14aed --- /dev/null +++ b/CI/scripts/macos/app/Info.plist @@ -0,0 +1,28 @@ + + + + + CFBundleIconFile + obs.icns + CFBundleName + OBS + CFBundleGetInfoString + OBS - Free and Open Source Streaming/Recording Software + CFBundleExecutable + obs + CFBundleIdentifier + com.obsproject.obs-studio + CFBundlePackageType + APPL + LSMinimumSystemVersion + 10.8.5 + NSHighResolutionCapable + + LSAppNapIsDisabled + + NSCameraUsageDescription + OBS needs to access the camera to enable camera sources to work. + NSMicrophoneUsageDescription + OBS needs to access the microphone to enable audio input. + + diff --git a/CI/scripts/macos/app/OBSPublicDSAKey.pem b/CI/scripts/macos/app/OBSPublicDSAKey.pem new file mode 100644 index 000000000..91adb402f --- /dev/null +++ b/CI/scripts/macos/app/OBSPublicDSAKey.pem @@ -0,0 +1,36 @@ +-----BEGIN PUBLIC KEY----- +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 +MGjmuSOlPA1umQsToIcO4g== +-----END PUBLIC KEY----- diff --git a/CI/scripts/macos/app/obs.icns b/CI/scripts/macos/app/obs.icns new file mode 100644 index 000000000..6f878d6a3 Binary files /dev/null and b/CI/scripts/macos/app/obs.icns differ diff --git a/CI/scripts/macos/package/background.tiff b/CI/scripts/macos/package/background.tiff new file mode 100644 index 000000000..454874005 Binary files /dev/null and b/CI/scripts/macos/package/background.tiff differ diff --git a/CI/scripts/macos/package/dylibBundler b/CI/scripts/macos/package/dylibBundler new file mode 100755 index 000000000..a28f20985 Binary files /dev/null and b/CI/scripts/macos/package/dylibBundler differ diff --git a/CI/scripts/macos/package/settings.json b/CI/scripts/macos/package/settings.json new file mode 100644 index 000000000..e8093663f --- /dev/null +++ b/CI/scripts/macos/package/settings.json @@ -0,0 +1,14 @@ +{ + "title": "OBS", + "background": "./CI/scripts/macos/package/background.tiff", + "icon": "./CI/scripts/macos/app/obs.icns", + "format": "UDZO", + "compression-level": 9, + "window": { "position": { "x": 100, "y": 100 }, + "size": { "width": 540, "height": 380 } }, + "contents": [ + { "x": 120, "y": 180, "type": "file", + "path": "./OBS.app" }, + { "x": 420, "y": 180, "type": "link", "path": "/Applications" } + ] +} diff --git a/CI/scripts/macos/package/src/background.png b/CI/scripts/macos/package/src/background.png new file mode 100644 index 000000000..02c4d5501 Binary files /dev/null and b/CI/scripts/macos/package/src/background.png differ diff --git a/CI/scripts/macos/package/src/background@2x.png b/CI/scripts/macos/package/src/background@2x.png new file mode 100644 index 000000000..a001edf36 Binary files /dev/null and b/CI/scripts/macos/package/src/background@2x.png differ diff --git a/CI/scripts/macos/package/src/makeRetinaBG b/CI/scripts/macos/package/src/makeRetinaBG new file mode 100755 index 000000000..5d7f309b5 --- /dev/null +++ b/CI/scripts/macos/package/src/makeRetinaBG @@ -0,0 +1 @@ +tiffutil -cathidpicheck background.png background@2x.png -out background.tiff diff --git a/CI/scripts/macos/packageApp.sh b/CI/scripts/macos/packageApp.sh new file mode 100755 index 000000000..6d6cdd4b9 --- /dev/null +++ b/CI/scripts/macos/packageApp.sh @@ -0,0 +1,78 @@ +#!/usr/bin/env bash + +# Exit if something fails +set -e + +rm -rf ./OBS.app + +mkdir OBS.app +mkdir OBS.app/Contents +mkdir OBS.app/Contents/MacOS +mkdir OBS.app/Contents/PlugIns +mkdir OBS.app/Contents/Resources + +cp -R rundir/RelWithDebInfo/bin/ ./OBS.app/Contents/MacOS +cp -R rundir/RelWithDebInfo/data ./OBS.app/Contents/Resources +cp ../CI/scripts/macos/app/obs.icns ./OBS.app/Contents/Resources +cp -R rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/PlugIns +cp ../CI/scripts/macos/app/Info.plist ./OBS.app/Contents + +../CI/scripts/macos/package/dylibBundler -b -cd -d ./OBS.app/Contents/Frameworks -p @executable_path/../Frameworks/ \ +-s ./OBS.app/Contents/MacOS \ +-x ./OBS.app/Contents/PlugIns/coreaudio-encoder.so \ +-x ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so \ +-x ./OBS.app/Contents/PlugIns/frontend-tools.so \ +-x ./OBS.app/Contents/PlugIns/image-source.so \ +-x ./OBS.app/Contents/PlugIns/linux-jack.so \ +-x ./OBS.app/Contents/PlugIns/mac-avcapture.so \ +-x ./OBS.app/Contents/PlugIns/mac-capture.so \ +-x ./OBS.app/Contents/PlugIns/mac-decklink.so \ +-x ./OBS.app/Contents/PlugIns/mac-syphon.so \ +-x ./OBS.app/Contents/PlugIns/mac-vth264.so \ +-x ./OBS.app/Contents/PlugIns/obs-browser.so \ +-x ./OBS.app/Contents/PlugIns/obs-browser-page \ +-x ./OBS.app/Contents/PlugIns/obs-ffmpeg.so \ +-x ./OBS.app/Contents/PlugIns/obs-filters.so \ +-x ./OBS.app/Contents/PlugIns/obs-transitions.so \ +-x ./OBS.app/Contents/PlugIns/obs-vst.so \ +-x ./OBS.app/Contents/PlugIns/rtmp-services.so \ +-x ./OBS.app/Contents/MacOS/obs \ +-x ./OBS.app/Contents/MacOS/obs-ffmpeg-mux \ +-x ./OBS.app/Contents/MacOS/obslua.so \ +-x ./OBS.app/Contents/MacOS/_obspython.so \ +-x ./OBS.app/Contents/PlugIns/obs-x264.so \ +-x ./OBS.app/Contents/PlugIns/text-freetype2.so \ +-x ./OBS.app/Contents/PlugIns/obs-libfdk.so +# -x ./OBS.app/Contents/PlugIns/obs-outputs.so \ + +/usr/local/Cellar/qt/${QT_VERSION}/bin/macdeployqt ./OBS.app + +mv ./OBS.app/Contents/MacOS/libobs-opengl.so ./OBS.app/Contents/Frameworks + +rm -f -r ./OBS.app/Contents/Frameworks/QtNetwork.framework + +# put qt network in here becasuse streamdeck uses it +cp -R /usr/local/opt/qt/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks +chmod -R +w ./OBS.app/Contents/Frameworks/QtNetwork.framework +rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Headers +rm -r ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Headers/ +chmod 644 ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/Resources/Info.plist +install_name_tool -id @executable_path/../Frameworks/QtNetwork.framework/Versions/5/QtNetwork ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork +install_name_tool -change /usr/local/Cellar/qt/${QT_VERSION}/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork + + +# decklink ui qt +install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so +install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so +install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/decklink-ouput-ui.so + +# frontend tools qt +install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/frontend-tools.so +install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/frontend-tools.so +install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/frontend-tools.so + +# vst qt +install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/PlugIns/obs-vst.so +install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/PlugIns/obs-vst.so +install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/PlugIns/obs-vst.so +install_name_tool -change /usr/local/opt/qt/lib/QtMacExtras.framework/Versions/5/QtMacExtras @executable_path/../Frameworks/QtMacExtras.framework/Versions/5/QtMacExtras ./OBS.app/Contents/PlugIns/obs-vst.so diff --git a/CI/scripts/macos/prepareApp.sh b/CI/scripts/macos/prepareApp.sh new file mode 100755 index 000000000..1a6de88ad --- /dev/null +++ b/CI/scripts/macos/prepareApp.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +# Exit if something fails +set -e + +cd ./build + +mv ./rundir/RelWithDebInfo/data/obs-scripting/obslua.so ./rundir/RelWithDebInfo/bin/ +mv ./rundir/RelWithDebInfo/data/obs-scripting/_obspython.so ./rundir/RelWithDebInfo/bin/ +mv ./rundir/RelWithDebInfo/data/obs-scripting/obspython.py ./rundir/RelWithDebInfo/bin/ + +../CI/scripts/macos/packageApp.sh + +# fix obs outputs plugin it doesn't play nicely with dylibBundler at the moment +chmod +w ./OBS.app/Contents/Frameworks/*.dylib +install_name_tool -change libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so +install_name_tool -change libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so +install_name_tool -change libmbedx509.0.dylib @executable_path/../Frameworks/libmbedx509.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so +install_name_tool -change /usr/local/opt/curl/lib/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so +install_name_tool -change @rpath/libobs.0.dylib @executable_path/../Frameworks/libobs.0.dylib ./OBS.app/Contents/Plugins/obs-outputs.so +install_name_tool -change /tmp/obsdeps/bin/libjansson.4.dylib @executable_path/../Frameworks/libjansson.4.dylib ./OBS.app/Contents/Plugins/obs-outputs.so + +cp -R ${GITHUB_WORKSPACE}/cmbuild/sparkle/Sparkle.framework ./OBS.app/Contents/Frameworks/ +install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @executable_path/../Frameworks/Sparkle.framework/Versions/A/Sparkle ./OBS.app/Contents/MacOS/obs + +sudo mkdir -p ./OBS.app/Contents/Frameworks +sudo cp -R ${GITHUB_WORKSPACE}/cmbuild/cef_binary_${CEF_BUILD_VERSION}_macosx64/Release/Chromium\ Embedded\ Framework.framework ./OBS.app/Contents/Frameworks/ +install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui @executable_path/../Frameworks/QtGui.framework/Versions/5/QtGui ./OBS.app/Contents/Plugins/obs-browser.so +install_name_tool -change /usr/local/opt/qt/lib/QtCore.framework/Versions/5/QtCore @executable_path/../Frameworks/QtCore.framework/Versions/5/QtCore ./OBS.app/Contents/Plugins/obs-browser.so +install_name_tool -change /usr/local/opt/qt/lib/QtWidgets.framework/Versions/5/QtWidgets @executable_path/../Frameworks/QtWidgets.framework/Versions/5/QtWidgets ./OBS.app/Contents/Plugins/obs-browser.so + +cp ../CI/scripts/macos/app/OBSPublicDSAKey.pem ./OBS.app/Contents/Resources + +plutil -insert CFBundleVersion -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist +plutil -insert CFBundleShortVersionString -string $(basename ${GITHUB_REF}) ./OBS.app/Contents/Info.plist +plutil -insert OBSFeedsURL -string https://obsproject.com/osx_update/feeds.xml ./OBS.app/Contents/Info.plist +plutil -insert SUFeedURL -string https://obsproject.com/osx_update/stable/updates.xml ./OBS.app/Contents/Info.plist +plutil -insert SUPublicDSAKeyFile -string OBSPublicDSAKey.pem ./OBS.app/Contents/Info.plist + +mv ./OBS.app ../OBS.app +cd -