diff --git a/CI/before-deploy-osx.sh b/CI/before-deploy-osx.sh index 2074af4978a053ca8c2fa2a6817ff086103c0414..fa84613e7f1d60c66d38b633c02b9add2fe25bc6 100755 --- a/CI/before-deploy-osx.sh +++ b/CI/before-deploy-osx.sh @@ -35,32 +35,17 @@ fi #sudo python ../CI/install/osx/build_app.py --public-key ../CI/install/osx/OBSPublicDSAKey.pem --sparkle-framework ../../sparkle/Sparkle.framework --stable=$STABLE -../CI/install/osx/packageApp +../CI/install/osx/packageApp.sh -# curl -cp /usr/local/opt/curl/lib/libcurl.4.dylib ./OBS.app/Contents/Frameworks/ -install_name_tool -change /usr/local/opt/curl/lib/libcurl.4.dylib @executable_path/../Frameworks/libcurl.4.dylib ./OBS.app/Contents/Plugins/rtmp-services.so - -# luajit -install_name_tool -change /tmp/obsdeps/lib/libluajit-5.1.2.dylib @executable_path/../Frameworks/libluajit-5.1.2.dylib ./OBS.app/Contents/Plugins/frontend-tools.so - -# jack -cp /usr/local/opt/jack/lib/libjack.0.dylib ./OBS.app/Contents/Frameworks/ -cp /usr/local/opt/berkeley-db/lib/libdb-18.1.dylib ./OBS.app/Contents/Frameworks/ -install_name_tool -change /usr/local/opt/jack/lib/libjack.0.dylib @executable_path/../Frameworks/libjack.0.dylib ./OBS.app/Contents/Plugins/linux-jack.so -install_name_tool -change /usr/local/opt/berkeley-db/lib/libdb-18.1.dylib @executable_path/../Frameworks/libdb-18.1.dylib ./OBS.app/Contents/Frameworks/libjack.0.dylib - -# speexdsp -cp /usr/local/opt/speexdsp/lib/libspeexdsp.1.dylib ./OBS.app/Contents/Frameworks/ -install_name_tool -change /usr/local/opt/speexdsp/lib/libspeexdsp.1.dylib @executable_path/../Frameworks/libspeexdsp.1.dylib ./OBS.app/Contents/Plugins/obs-filters.so - -# libmbedtls +# fix obs outputs cp /usr/local/opt/mbedtls/lib/libmbedtls.12.dylib ./OBS.app/Contents/Frameworks/ cp /usr/local/opt/mbedtls/lib/libmbedcrypto.3.dylib ./OBS.app/Contents/Frameworks/ cp /usr/local/opt/mbedtls/lib/libmbedx509.0.dylib ./OBS.app/Contents/Frameworks/ install_name_tool -change /usr/local/opt/mbedtls/lib/libmbedtls.12.dylib @executable_path/../Frameworks/libmbedtls.12.dylib ./OBS.app/Contents/Plugins/obs-outputs.so install_name_tool -change /usr/local/opt/mbedtls/lib/libmbedcrypto.3.dylib @executable_path/../Frameworks/libmbedcrypto.3.dylib ./OBS.app/Contents/Plugins/obs-outputs.so install_name_tool -change /usr/local/opt/mbedtls/lib/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 # copy sparkle into the app hr "Copying Sparkle.framework" @@ -76,9 +61,11 @@ install_name_tool -change /usr/local/opt/qt/lib/QtGui.framework/Versions/5/QtGui 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/install/osx/OBSPublicDSAKey.pem OBS.app/Contents/Resources + # edit plist -plutil -insert CFBundleVersion -string $GIT_TAG-$GIT_HASH ./OBS.app/Contents/Info.plist -plutil -insert CFBundleShortVersionString -string $GIT_TAG-$GIT_HASH ./OBS.app/Contents/Info.plist +plutil -insert CFBundleVersion -string $GIT_TAG ./OBS.app/Contents/Info.plist +plutil -insert CFBundleShortVersionString -string $GIT_TAG ./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 diff --git a/CI/install-dependencies-osx.sh b/CI/install-dependencies-osx.sh index 425ef3cfb159aa3a0bbeb362c4ed2eed22dce90d..ad398e48c354d754fa1884efbd0dbd71f5f277ae 100755 --- a/CI/install-dependencies-osx.sh +++ b/CI/install-dependencies-osx.sh @@ -30,7 +30,7 @@ sudo installer -pkg ./Packages.pkg -target / brew update #Base OBS Deps and ccache -brew install jack speexdsp ccache mbedtls clang-format +brew install jack speexdsp ccache mbedtls clang-format freetype fdk-aac brew install https://gist.githubusercontent.com/DDRBoxman/b3956fab6073335a4bf151db0dcbd4ad/raw/ed1342a8a86793ea8c10d8b4d712a654da121ace/qt.rb brew install https://gist.githubusercontent.com/DDRBoxman/4cada55c51803a2f963fa40ce55c9d3e/raw/572c67e908bfbc1bcb8c476ea77ea3935133f5b5/swig.rb diff --git a/CI/install/osx/dylibBundler b/CI/install/osx/dylibBundler new file mode 100755 index 0000000000000000000000000000000000000000..a28f209851b2875f02ecf46b2ae9a751870ed74e Binary files /dev/null and b/CI/install/osx/dylibBundler differ diff --git a/CI/install/osx/packageApp b/CI/install/osx/packageApp deleted file mode 100755 index 133decc2eaf799ed76ff2f5dcbea0db2fc89e15e..0000000000000000000000000000000000000000 --- a/CI/install/osx/packageApp +++ /dev/null @@ -1,25 +0,0 @@ -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/install/osx/obs.icns ./OBS.app/Contents/Resources -cp -r rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/Plugins -cp ../CI/install/osx/Info.plist ./OBS.app/Contents - -/usr/local/Cellar/qt/5.10.1/bin/macdeployqt ./OBS.app - -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 - -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 \ No newline at end of file diff --git a/CI/install/osx/packageApp.sh b/CI/install/osx/packageApp.sh new file mode 100755 index 0000000000000000000000000000000000000000..ec19c1ce50cf24a9fceacf197254b336cd5a69d5 --- /dev/null +++ b/CI/install/osx/packageApp.sh @@ -0,0 +1,66 @@ +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/install/osx/obs.icns ./OBS.app/Contents/Resources +cp -r rundir/RelWithDebInfo/obs-plugins/ ./OBS.app/Contents/Plugins +cp ../CI/install/osx/Info.plist ./OBS.app/Contents + +../CI/install/osx/dylibBundler -b -cd -d ./OBS.app/Contents/Frameworks -p @executable_path/../Frameworks/ \ +-s ./OBS.app/Contents/MacOS \ +-s /usr/local/opt/mbedtls/lib/ \ +-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/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/5.10.1/bin/macdeployqt ./OBS.app + +mv ./OBS.app/Contents/MacOS/libobs-opengl.so ./OBS.app/Contents/Frameworks + +# put qt network in here becasuse streamdeck uses it +cp -r /usr/local/opt/qt/lib/QtNetwork.framework ./OBS.app/Contents/Frameworks +chmod +w ./OBS.app/Contents/Frameworks/QtNetwork.framework/Versions/5/QtNetwork +install_name_tool -change /usr/local/Cellar/qt/5.10.1/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/UI/platform-osx.mm b/UI/platform-osx.mm index 2586e2589c436ba80c90299b921fc7faf84d3417..3d0c5334fca8aea6f47cac5806cd311ad728dba1 100644 --- a/UI/platform-osx.mm +++ b/UI/platform-osx.mm @@ -37,12 +37,14 @@ bool isInBundle() bool GetDataFilePath(const char *data, string &output) { if (isInBundle()) { - NSBundle *myBundle = [NSBundle mainBundle]; + NSRunningApplication *app = + [NSRunningApplication currentApplication]; + NSURL *bundleURL = [app bundleURL]; NSString *path = [NSString - stringWithFormat:@"data/obs-studio/%@", + stringWithFormat:@"Contents/Resources/data/obs-studio/%@", [NSString stringWithUTF8String:data]]; - NSString *absPath = [myBundle pathForResource:path ofType:nil]; - output = [absPath UTF8String]; + NSURL *dataURL = [bundleURL URLByAppendingPathComponent:path]; + output = [[dataURL path] UTF8String]; } else { stringstream str; str << OBS_DATA_PATH "/obs-studio/" << data; diff --git a/deps/obs-scripting/CMakeLists.txt b/deps/obs-scripting/CMakeLists.txt index 92fb1b9e136b1185a5bcd185f8954d8106a593c3..340eb30aea3c855ec67afdede5923daeebab8dba 100644 --- a/deps/obs-scripting/CMakeLists.txt +++ b/deps/obs-scripting/CMakeLists.txt @@ -12,6 +12,11 @@ if(MSVC) w32-pthreads) endif() +if(APPLE) + set(obs-scripting_PLATFORM_DEPS + objc) +endif() + option(DISABLE_LUA "Disable Lua scripting support" OFF) option(DISABLE_PYTHON "Disable Python scripting support" OFF) diff --git a/deps/obs-scripting/obs-scripting-lua.c b/deps/obs-scripting/obs-scripting-lua.c index a626555da37c58b6d479997d96a38502aeacd918..efdba345b4093bfcf2c988e3a4538f03b9e65b2b 100644 --- a/deps/obs-scripting/obs-scripting-lua.c +++ b/deps/obs-scripting/obs-scripting-lua.c @@ -43,7 +43,7 @@ static const char *startup_script_template = "\ for val in pairs(package.preload) do\n\ package.preload[val] = nil\n\ end\n\ -package.cpath = package.cpath .. \";\" .. \"%s\" .. \"/?." SO_EXT "\"\n\ +package.cpath = package.cpath .. \";\" .. \"%s/Contents/MacOS/?.so\" .. \";\" .. \"%s\" .. \"/?." SO_EXT "\"\n\ require \"obslua\"\n"; static const char *get_script_path_func = "\ @@ -1310,7 +1310,31 @@ void obs_lua_load(void) /* ---------------------------------------------- */ /* Initialize Lua startup script */ - dstr_printf(&tmp, startup_script_template, SCRIPT_DIR); +char* bundlePath = "./"; + +#ifdef __APPLE__ + Class nsRunningApplication = objc_lookUpClass("NSRunningApplication"); + SEL currentAppSel = sel_getUid("currentApplication"); + + typedef id (*running_app_func)(Class, SEL); + running_app_func operatingSystemName = (running_app_func)objc_msgSend; + id app = operatingSystemName(nsRunningApplication, currentAppSel); + + typedef id (*bundle_url_func)(id, SEL); + bundle_url_func bundleURL = (bundle_url_func)objc_msgSend; + id url = bundleURL(app, sel_getUid("bundleURL")); + + typedef id (*url_path_func)(id, SEL); + url_path_func urlPath = (url_path_func)objc_msgSend; + + id path = urlPath(url, sel_getUid("path")); + + typedef id (*string_func)(id, SEL); + string_func utf8String = (string_func)objc_msgSend; + bundlePath = (char *)utf8String(path, sel_registerName("UTF8String")); +#endif + + dstr_printf(&tmp, startup_script_template, bundlePath, SCRIPT_DIR); startup_script = tmp.array; dstr_free(&dep_paths);