From 458d59b4013326d152edcc9eddf50ffb212bdd53 Mon Sep 17 00:00:00 2001
From: tt2468 <tt2468@gmail.com>
Date: Tue, 13 Apr 2021 05:04:08 -0700
Subject: [PATCH] CI: Refactor much of the MacOS CI

---
 CI/macos/Brewfile                             |   5 -
 .../build-plugin-macos.sh}                    |   2 -
 CI/{ => macos}/install-build-obs-macos.sh     |   6 +-
 CI/{ => macos}/install-dependencies-macos.sh  |  36 ++---
 CI/{ => macos}/package-macos.sh               |   1 -
 CI/macos/qt.rb                                | 145 ------------------
 azure-pipelines.yml                           |  10 +-
 7 files changed, 26 insertions(+), 179 deletions(-)
 rename CI/{build-macos.sh => macos/build-plugin-macos.sh} (91%)
 rename CI/{ => macos}/install-build-obs-macos.sh (89%)
 rename CI/{ => macos}/install-dependencies-macos.sh (69%)
 rename CI/{ => macos}/package-macos.sh (96%)
 delete mode 100644 CI/macos/qt.rb

diff --git a/CI/macos/Brewfile b/CI/macos/Brewfile
index 20fabb71..923af906 100644
--- a/CI/macos/Brewfile
+++ b/CI/macos/Brewfile
@@ -1,10 +1,5 @@
-tap "akeru-inc/tap"
 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"
-brew "akeru-inc/tap/xcnotary"
\ No newline at end of file
diff --git a/CI/build-macos.sh b/CI/macos/build-plugin-macos.sh
similarity index 91%
rename from CI/build-macos.sh
rename to CI/macos/build-plugin-macos.sh
index 3a371a78..260fe50f 100755
--- a/CI/build-macos.sh
+++ b/CI/macos/build-plugin-macos.sh
@@ -14,8 +14,6 @@ if [ "${HAS_CMAKE}" = "" ]; then
     exit 1
 fi
 
-#export QT_PREFIX="$(find /usr/local/Cellar/qt5 -d 1 | tail -n 1)"
-
 echo "[obs-websocket] Building 'obs-websocket' for macOS."
 mkdir -p build && cd build
 cmake .. \
diff --git a/CI/install-build-obs-macos.sh b/CI/macos/install-build-obs-macos.sh
similarity index 89%
rename from CI/install-build-obs-macos.sh
rename to CI/macos/install-build-obs-macos.sh
index 7fea6fb8..a6e8ca82 100755
--- a/CI/install-build-obs-macos.sh
+++ b/CI/macos/install-build-obs-macos.sh
@@ -31,9 +31,9 @@ mkdir build && cd build
 echo "[obs-websocket] Building obs-studio.."
 cmake .. \
     -DQTDIR=/tmp/obsdeps \
-	-DCMAKE_OSX_DEPLOYMENT_TARGET=10.11 \
+    -DDepsPath=/tmp/obsdeps \
+	-DCMAKE_OSX_DEPLOYMENT_TARGET=10.13 \
 	-DDISABLE_PLUGINS=true \
 	-DENABLE_SCRIPTING=0 \
-	-DDepsPath=/tmp/obsdeps \
-	-DCMAKE_PREFIX_PATH=/usr/local/opt/qt/lib/cmake \
+	-DCMAKE_PREFIX_PATH=/tmp/obsdeps/lib/cmake \
 && make -j4
diff --git a/CI/install-dependencies-macos.sh b/CI/macos/install-dependencies-macos.sh
similarity index 69%
rename from CI/install-dependencies-macos.sh
rename to CI/macos/install-dependencies-macos.sh
index 9974fed4..872dcca5 100755
--- a/CI/install-dependencies-macos.sh
+++ b/CI/macos/install-dependencies-macos.sh
@@ -14,22 +14,22 @@ if [ "${HAS_BREW}" = "" ]; then
     exit 1
 fi
 
-# OBS Studio deps
+# OBS Studio Brew Deps
 echo "[obs-websocket] Updating Homebrew.."
 brew update >/dev/null
 echo "[obs-websocket] Checking installed Homebrew formulas.."
-BREW_PACKAGES=$(brew list --formula)
-BREW_DEPENDENCIES="jack speexdsp ccache swig mbedtls"
 
-for DEPENDENCY in ${BREW_DEPENDENCIES}; do
-    if echo "${BREW_PACKAGES}" | grep -q "^${DEPENDENCY}\$"; then
-        echo "[obs-websocket] Upgrading OBS-Studio dependency '${DEPENDENCY}'.."
-        brew upgrade ${DEPENDENCY} 2>/dev/null
-    else
-        echo "[obs-websocket] Installing OBS-Studio dependency '${DEPENDENCY}'.."
-        brew install ${DEPENDENCY} 2>/dev/null
-    fi
-done
+if [ -d /usr/local/opt/openssl@1.0.2t ]; then
+  brew uninstall openssl@1.0.2t
+  brew untap local/openssl
+fi
+
+if [ -d /usr/local/opt/python@2.7.17 ]; then
+  brew uninstall python@2.7.17
+  brew untap local/python2
+fi
+
+brew bundle --file ./CI/macos/Brewfile
 
 # Fetch and install Packages app
 # =!= NOTICE =!=
@@ -45,13 +45,13 @@ if [ "${HAS_PACKAGES}" = "" ]; then
     sudo installer -pkg /Volumes/Packages\ 1.2.9/Install\ Packages.pkg -target /
 fi
 
+# OBS Deps
+echo "[obs-websocket] Installing obs-websocket dependency 'OBS Deps ${OBS_DEPS_VERSION}'.."
+wget --quiet --retry-connrefused --waitretry=1 https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-deps-${OBS_DEPS_VERSION}.tar.gz
+tar -xf ./macos-deps-${OBS_DEPS_VERSION}.tar.gz -C /tmp
+
 # Qt deps
 echo "[obs-websocket] Installing obs-websocket dependency 'Qt ${QT_VERSION}'.."
 curl -L -O https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-qt-${QT_VERSION}-${OBS_DEPS_VERSION}.tar.gz
 tar -xf ./macos-qt-${QT_VERSION}-${OBS_DEPS_VERSION}.tar.gz -C "/tmp"
-xattr -r -d com.apple.quarantine /tmp/obsdeps
-
-# OBS Deps
-echo "[obs-websocket] Downloading and unpacking OBS dependencies"
-wget --quiet --retry-connrefused --waitretry=1 https://github.com/obsproject/obs-deps/releases/download/${OBS_DEPS_VERSION}/macos-deps-${OBS_DEPS_VERSION}.tar.gz
-tar -xf ./macos-deps-${OBS_DEPS_VERSION}.tar.gz -C /tmp
\ No newline at end of file
+xattr -r -d com.apple.quarantine /tmp/obsdeps
\ No newline at end of file
diff --git a/CI/package-macos.sh b/CI/macos/package-macos.sh
similarity index 96%
rename from CI/package-macos.sh
rename to CI/macos/package-macos.sh
index 4363a8ab..db8193b4 100755
--- a/CI/package-macos.sh
+++ b/CI/macos/package-macos.sh
@@ -10,7 +10,6 @@ if [ "${OSTYPE}" != "Darwin" ]; then
 fi
 
 echo "[obs-websocket] Preparing package build"
-export QT_CELLAR_PREFIX="$(/usr/bin/find /usr/local/Cellar/qt -d 1 | sort -t '.' -k 1,1n -k 2,2n -k 3,3n | tail -n 1)"
 
 GIT_HASH=$(git rev-parse --short HEAD)
 GIT_BRANCH_OR_TAG=$(git name-rev --name-only HEAD | awk -F/ '{print $NF}')
diff --git a/CI/macos/qt.rb b/CI/macos/qt.rb
deleted file mode 100644
index 4405a240..00000000
--- a/CI/macos/qt.rb
+++ /dev/null
@@ -1,145 +0,0 @@
-# Patches for Qt must be at the very least submitted to Qt's Gerrit codereview
-# rather than their bug-report Jira. The latter is rarely reviewed by Qt.
-class Qt < Formula
-  desc "Cross-platform application and UI framework"
-  homepage "https://www.qt.io/"
-  url "https://download.qt.io/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz"
-  mirror "https://www.mirrorservice.org/sites/download.qt-project.org/official_releases/qt/5.10/5.10.1/single/qt-everywhere-src-5.10.1.tar.xz"
-  sha256 "05ffba7b811b854ed558abf2be2ddbd3bb6ddd0b60ea4b5da75d277ac15e740a"
-  head "https://code.qt.io/qt/qt5.git", :branch => "5.10", :shallow => false
-
-  bottle do
-    sha256 "8b4bad005596a5f8790150fe455db998ac2406f4e0f04140d6656205d844d266" => :high_sierra
-    sha256 "9c488554935fb573554a4e36d36d3c81e47245b7fefc4b61edef894e67ba1740" => :sierra
-    sha256 "c0407afba5951df6cc4c6f6c1c315972bd41c99cecb4e029919c4c15ab6f7bdc" => :el_capitan
-  end
-
-  keg_only "Qt 5 has CMake issues when linked"
-
-  option "with-docs", "Build documentation"
-  option "with-examples", "Build examples"
-  option "without-proprietary-codecs", "Don't build with proprietary codecs (e.g. mp3)"
-
-  # OS X 10.7 Lion is still supported in Qt 5.5, but is no longer a reference
-  # configuration and thus untested in practice. Builds on OS X 10.7 have been
-  # reported to fail: <https://github.com/Homebrew/homebrew/issues/45284>.
-  # depends_on :macos => :mountain_lion
-
-  depends_on "pkg-config" => :build
-  depends_on :xcode => :build
-  depends_on "mysql" => :optional
-  depends_on "postgresql" => :optional
-
-  # Restore `.pc` files for framework-based build of Qt 5 on OS X. This
-  # partially reverts <https://codereview.qt-project.org/#/c/140954/> merged
-  # between the 5.5.1 and 5.6.0 releases. (Remove this as soon as feasible!)
-  #
-  # Core formulae known to fail without this patch (as of 2016-10-15):
-  #   * gnuplot  (with `--with-qt` option)
-  #   * mkvtoolnix (with `--with-qt` option, silent build failure)
-  #   * poppler    (with `--with-qt` option)
-  patch do
-    url "https://raw.githubusercontent.com/Homebrew/formula-patches/e8fe6567/qt5/restore-pc-files.patch"
-    sha256 "48ff18be2f4050de7288bddbae7f47e949512ac4bcd126c2f504be2ac701158b"
-  end
-
-  def install
-    args = %W[
-      -verbose
-      -prefix #{prefix}
-      -release
-      -opensource -confirm-license
-      -system-zlib
-      -qt-libpng
-      -qt-libjpeg
-      -qt-freetype
-      -qt-pcre
-      -nomake tests
-      -no-rpath
-      -pkg-config
-      -dbus-runtime
-    ]
-
-    args << "-nomake" << "examples" if build.without? "examples"
-
-    if build.with? "mysql"
-      args << "-plugin-sql-mysql"
-      (buildpath/"brew_shim/mysql_config").write <<~EOS
-        #!/bin/sh
-        if [ x"$1" = x"--libs" ]; then
-          mysql_config --libs | sed "s/-lssl -lcrypto//"
-        else
-          exec mysql_config "$@"
-        fi
-      EOS
-      chmod 0755, "brew_shim/mysql_config"
-      args << "-mysql_config" << buildpath/"brew_shim/mysql_config"
-    end
-
-    args << "-plugin-sql-psql" if build.with? "postgresql"
-    args << "-proprietary-codecs" if build.with? "proprietary-codecs"
-
-    system "./configure", *args
-    system "make"
-    ENV.deparallelize
-    system "make", "install"
-
-    if build.with? "docs"
-      system "make", "docs"
-      system "make", "install_docs"
-    end
-
-    # Some config scripts will only find Qt in a "Frameworks" folder
-    frameworks.install_symlink Dir["#{lib}/*.framework"]
-
-    # The pkg-config files installed suggest that headers can be found in the
-    # `include` directory. Make this so by creating symlinks from `include` to
-    # the Frameworks' Headers folders.
-    Pathname.glob("#{lib}/*.framework/Headers") do |path|
-      include.install_symlink path => path.parent.basename(".framework")
-    end
-
-    # Move `*.app` bundles into `libexec` to expose them to `brew linkapps` and
-    # because we don't like having them in `bin`.
-    # (Note: This move breaks invocation of Assistant via the Help menu
-    # of both Designer and Linguist as that relies on Assistant being in `bin`.)
-    libexec.mkpath
-    Pathname.glob("#{bin}/*.app") { |app| mv app, libexec }
-  end
-
-  def caveats; <<~EOS
-    We agreed to the Qt opensource license for you.
-    If this is unacceptable you should uninstall.
-    EOS
-  end
-
-  test do
-    (testpath/"hello.pro").write <<~EOS
-      QT       += core
-      QT       -= gui
-      TARGET = hello
-      CONFIG   += console
-      CONFIG   -= app_bundle
-      TEMPLATE = app
-      SOURCES += main.cpp
-    EOS
-
-    (testpath/"main.cpp").write <<~EOS
-      #include <QCoreApplication>
-      #include <QDebug>
-
-      int main(int argc, char *argv[])
-      {
-        QCoreApplication a(argc, argv);
-        qDebug() << "Hello World!";
-        return 0;
-      }
-    EOS
-
-    system bin/"qmake", testpath/"hello.pro"
-    system "make"
-    assert_predicate testpath/"hello", :exist?
-    assert_predicate testpath/"main.o", :exist?
-    system "./hello"
-  end
-end
\ No newline at end of file
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
index d5da8c6f..4103d3af 100644
--- a/azure-pipelines.yml
+++ b/azure-pipelines.yml
@@ -156,7 +156,7 @@ jobs:
 
 - job: 'Build_macOS'
   pool:
-    vmImage: 'macos-10.14'
+    vmImage: 'macOS-10.15'
   variables:
     obsDepsVersion: '2020-12-22'
     qtVersion: '5.15.2'
@@ -164,16 +164,16 @@ jobs:
     - checkout: self
       submodules: true
 
-    - script: ./CI/install-dependencies-macos.sh
+    - script: ./CI/macos/install-dependencies-macos.sh
       displayName: 'Install dependencies'
       env:
         OBS_DEPS_VERSION: $(obsDepsVersion)
         QT_VERSION: $(qtVersion)
 
-    - script: ./CI/install-build-obs-macos.sh
+    - script: ./CI/macos/install-build-obs-macos.sh
       displayName: 'Build OBS'
 
-    - script: ./CI/build-macos.sh
+    - script: ./CI/macos/build-plugin-macos.sh
       displayName: 'Build obs-websocket'
 
     - task: InstallAppleCertificate@2
@@ -183,7 +183,7 @@ jobs:
         certSecureFile: 'Certificates.p12'
         certPwd: $(secrets.macOS.certificatesImportPassword)
 
-    - script: ./CI/package-macos.sh
+    - script: ./CI/macos/package-macos.sh
       displayName: 'Package obs-websocket'
       env:
         RELEASE_MODE: $(isReleaseMode)