diff --git a/build.py b/build.py new file mode 100644 index 0000000..12c9c39 --- /dev/null +++ b/build.py @@ -0,0 +1,149 @@ +import requests +import os +import subprocess +import traceback +import shutil +import zipfile + +def clone_repository(github_url, subfolder_name): + folderpath = os.path.join("temp", subfolder_name) + subprocess.run(['git', 'clone', '--recursive', + github_url, folderpath], check=True) + + +def build(*paths): + llvmpath = "" + obssourcepath = os.path.abspath("temp/obs-streamfx/third-party/obs-studio") + obsbuildpath = os.path.abspath("temp/obs-streamfx/build/libobs") + obsinstallpath = os.path.abspath("temp/obs-streamfx/build/libobs/install") + + fxsourcepath = os.path.abspath("temp/obs-streamfx/") + fxbuildpath = os.path.abspath("temp/obs-streamfx/build/fx") + fxinstallpath = os.path.abspath("temp/obs-streamfx/build/fx/install") + + packagebuildpath = os.path.abspath("temp/obs-streamfx/build/package") + + #cmake -S "$ROOT/third-party/obs-studio" -B "$ROOT/build/obs" -G "Visual Studio 17 2022" -A x64 -DCMAKE_SYSTEM_VERSION="10.0.20348.0" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="$ROOT/build/obs/install" -DENABLE_PLUGINS=OFF -DENABLE_UI=OFF -DENABLE_SCRIPTING=OFF -DCMAKE_PREFIX_PATH="$OBS;$OBS_QT6" + subprocess.run(['cmake', + '-S', obssourcepath, + '-B', obsbuildpath, + '-G', 'Visual Studio 17 2022', + '-A', 'x64', + '-DCMAKE_SYSTEM_VERSION="10.0.20348.0"', + '-DCMAKE_BUILD_TYPE="Release"', + f'-DCMAKE_INSTALL_PREFIX={obsinstallpath}', + '-DENABLE_PLUGINS=OFF', + '-DENABLE_UI=OFF', + '-DENABLE_SCRIPTING=OFF', + f'-DCMAKE_PREFIX_PATH={";".join(paths)}"', + "-Wno-dev" + ]) + + #cmake --build "$ROOT/build/obs" --config Release --target obs-frontend-api + subprocess.run(['cmake', '--build', obsbuildpath, '--config Release', '--target obs-frontend-api']) + + #cmake --install "$ROOT/build/obs" --config Release --component obs_libraries + subprocess.run(['cmake', '--install', obsbuildpath, + '--config Release', '--component obs_libraries']) + + #cmake -S "$ROOT" -B "$ROOT/build/ci" -G "Visual Studio 17 2022" -A x64 -DCMAKE_SYSTEM_VERSION="10.0.20348.0" -DCMAKE_BUILD_TYPE="Release" -DCMAKE_INSTALL_PREFIX="$ROOT/build/ci/install" + #-DPACKAGE_NAME="streamfx-windows" -DPACKAGE_PREFIX="$ROOT/build/package" + # -DENABLE_CLANG=TRUE -DCLANG_PATH="$LLVM" -DENABLE_PROFILING=ON -Dlibobs_DIR="$ROOT/build/obs/install" + # -DQt_DIR="$OBS_QT6" -DFFmpeg_DIR="$OBS" -DCURL_DIR="$OBS". $LLVM + subprocess.run(['cmake', + '-S', fxsourcepath, + '-B', fxbuildpath, + '-G', 'Visual Studio 17 2022', + '-A', 'x64', + '-DCMAKE_SYSTEM_VERSION="10.0.20348.0"', + '-DCMAKE_BUILD_TYPE="Release"', + f'-DCMAKE_INSTALL_PREFIX={fxinstallpath}', + '-DPACKAGE_NAME="streamfx-windows"', + f'-DPACKAGE_PREFIX={packagebuildpath}', + '-DENABLE_CLANG=TRUE', + #f'-DCLANG_PATH={llvmpath}', + "-DENABLE_PROFILING=ON", + f"-Dlibobs_DIR={obsinstallpath}", + f"-DFFmpeg_DIR={paths[0]}", + f"-DCURL_DIR={paths[0]}", + f"-DQt_DIR={paths[1]}", + "-Wno-dev" + ]) + + #cmake --build "$ROOT/build/ci" --config RelWithDebInfo --target install + subprocess.run(['cmake', '--build', fxbuildpath, + '--config RelWithDebInfo', '--target install']) + + inno = "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" + installerpath = os.path.abspath("temp/obs-streamfx/build/fx/installer.iss") + + #& "$INNO" /V10 "$ROOT\build\ci\" + subprocess.run([inno, "/V10", installerpath]) + +def download_assets(github_user, github_repo, release_tag=None, filename=None, filenames=None): + if release_tag: + api_url = f'https://api.github.com/repos/{github_user}/{github_repo}/releases/tags/{release_tag}' + else: + api_url = f'https://api.github.com/repos/{github_user}/{github_repo}/releases/latest' + response = requests.get(api_url) + if response.status_code == 200: + release_info = response.json() + tag_name = release_info['tag_name'] + fileurls = [] + formatted_filenames = [] + if filename: + formatted_filenames.append(filename.format(tag=tag_name)) + if filenames: + for filename in filenames: + formatted_filenames.append(filename.format(tag=tag_name)) + + for asset in release_info['assets']: + if asset['name'] in formatted_filenames: + fileurls.append( + (asset['name'], asset['browser_download_url'])) + + for filename, asset_url in fileurls: + filepath = os.path.join("temp", filename) + if (os.path.exists(filepath)): + print(f"Skipping {filename} because it already exists.") + else: + with open(filepath, 'wb') as file: + print(f"Downloading {filename}") + fileresponse = requests.get(asset_url) + fileresponse.raise_for_status() + file.write(fileresponse.content) + if filename.endswith(".zip"): + with zipfile.ZipFile(os.path.abspath( + filepath), 'r') as zip_ref: + zip_ref.extractall(filepath[:-4]) + return tag_name + else: + response.raise_for_status() + + +if __name__ == "__main__": + github_url = 'https://github.com/Xaymar/obs-StreamFX.git' + subfolder_name = 'obs-streamfx' + + try: + if(os.path.exists("temp")): + print("Clearing old temp folder.") + #shutil.rmtree("temp") + #realos.makedirs("temp") + + try: + clone_repository(github_url, subfolder_name) + except: pass + tag = download_assets("obsproject", "obs-deps", filenames=["windows-deps-{tag}-x64.zip", + "windows-deps-qt6-{tag}-x64-Debug.zip"]) + + depspath = os.path.abspath( f"temp/windows-deps-{tag}-x64") + qtpath = os.path.abspath(f"temp/windows-deps-qt6-{tag}-x64-Debug") + + build(depspath, qtpath) + + #shutil.rmtree("temp") + + + except Exception as e: + traceback.print_exc()