Browse Source

CI: Use custom macdylibbundler for OSX deps

Colin Edwards 6 years ago
parent
commit
32690926b9

+ 8 - 21
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

+ 1 - 1
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
 

BIN
CI/install/osx/dylibBundler


+ 0 - 25
CI/install/osx/packageApp

@@ -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

+ 66 - 0
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

+ 6 - 4
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;

+ 5 - 0
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)
 

+ 26 - 2
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);