diff --git a/UTM.xcodeproj/project.pbxproj b/UTM.xcodeproj/project.pbxproj index 313ed984..681ff26c 100644 --- a/UTM.xcodeproj/project.pbxproj +++ b/UTM.xcodeproj/project.pbxproj @@ -9,11 +9,117 @@ /* Begin PBXBuildFile section */ CE2D63D32265154700FC7E63 /* UTMRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = CE2D63CF2265154700FC7E63 /* UTMRenderer.m */; }; CE2D63D42265154700FC7E63 /* UTMShaders.metal in Sources */ = {isa = PBXBuildFile; fileRef = CE2D63D02265154700FC7E63 /* UTMShaders.metal */; }; + CE2D641B22653C7600FC7E63 /* libgmodule-2.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63D822653C7300FC7E63 /* libgmodule-2.0.0.dylib */; }; + CE2D641C22653C7600FC7E63 /* libjpeg.62.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63D922653C7300FC7E63 /* libjpeg.62.dylib */; }; + CE2D641D22653C7600FC7E63 /* libintl.8.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DA22653C7300FC7E63 /* libintl.8.dylib */; }; + CE2D641E22653C7600FC7E63 /* libgstapp-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DB22653C7300FC7E63 /* libgstapp-1.0.0.dylib */; }; + CE2D641F22653C7600FC7E63 /* libgthread-2.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DC22653C7300FC7E63 /* libgthread-2.0.0.dylib */; }; + CE2D642022653C7600FC7E63 /* libgstrtp-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DD22653C7400FC7E63 /* libgstrtp-1.0.0.dylib */; }; + CE2D642122653C7600FC7E63 /* libgstriff-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DE22653C7400FC7E63 /* libgstriff-1.0.0.dylib */; }; + CE2D642222653C7600FC7E63 /* libqemu-system-nios2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63DF22653C7400FC7E63 /* libqemu-system-nios2.dylib */; }; + CE2D642322653C7600FC7E63 /* libgstreamer-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E022653C7400FC7E63 /* libgstreamer-1.0.0.dylib */; }; + CE2D642422653C7600FC7E63 /* libqemu-system-sh4eb.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E122653C7400FC7E63 /* libqemu-system-sh4eb.dylib */; }; + CE2D642522653C7600FC7E63 /* libjson-glib-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E222653C7400FC7E63 /* libjson-glib-1.0.0.dylib */; }; + CE2D642622653C7600FC7E63 /* libffi.6.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E322653C7400FC7E63 /* libffi.6.dylib */; }; + CE2D642822653C7600FC7E63 /* libgstnet-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E522653C7400FC7E63 /* libgstnet-1.0.0.dylib */; }; + CE2D642B22653C7600FC7E63 /* libgstbase-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63E822653C7400FC7E63 /* libgstbase-1.0.0.dylib */; }; + CE2D643122653C7600FC7E63 /* libgstcontroller-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63EE22653C7400FC7E63 /* libgstcontroller-1.0.0.dylib */; }; + CE2D643222653C7600FC7E63 /* libgstaudio-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63EF22653C7400FC7E63 /* libgstaudio-1.0.0.dylib */; }; + CE2D643422653C7600FC7E63 /* libgpg-error.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F122653C7400FC7E63 /* libgpg-error.0.dylib */; }; + CE2D643622653C7600FC7E63 /* libgcrypt.20.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F322653C7400FC7E63 /* libgcrypt.20.dylib */; }; + CE2D643822653C7600FC7E63 /* libgobject-2.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F522653C7400FC7E63 /* libgobject-2.0.0.dylib */; }; + CE2D643922653C7600FC7E63 /* libgsttag-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F622653C7400FC7E63 /* libgsttag-1.0.0.dylib */; }; + CE2D643B22653C7600FC7E63 /* libgio-2.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F822653C7400FC7E63 /* libgio-2.0.0.dylib */; }; + CE2D643C22653C7600FC7E63 /* libgstvideo-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63F922653C7400FC7E63 /* libgstvideo-1.0.0.dylib */; }; + CE2D644122653C7600FC7E63 /* libspice-client-glib-2.0.8.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D63FE22653C7500FC7E63 /* libspice-client-glib-2.0.8.dylib */; }; + CE2D644422653C7600FC7E63 /* libgstrtsp-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640122653C7500FC7E63 /* libgstrtsp-1.0.0.dylib */; }; + CE2D644622653C7600FC7E63 /* libopus.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640322653C7500FC7E63 /* libopus.0.dylib */; }; + CE2D644722653C7600FC7E63 /* libglib-2.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640422653C7500FC7E63 /* libglib-2.0.0.dylib */; }; + CE2D644822653C7600FC7E63 /* libpng16.16.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640522653C7500FC7E63 /* libpng16.16.dylib */; }; + CE2D644C22653C7600FC7E63 /* libgstfft-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640922653C7500FC7E63 /* libgstfft-1.0.0.dylib */; }; + CE2D644D22653C7600FC7E63 /* libcrypto.1.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640A22653C7500FC7E63 /* libcrypto.1.1.dylib */; }; + CE2D645122653C7600FC7E63 /* libgstpbutils-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D640E22653C7500FC7E63 /* libgstpbutils-1.0.0.dylib */; }; + CE2D645322653C7600FC7E63 /* libgstgl-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641022653C7500FC7E63 /* libgstgl-1.0.0.dylib */; }; + CE2D645422653C7600FC7E63 /* libgstallocators-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641122653C7500FC7E63 /* libgstallocators-1.0.0.dylib */; }; + CE2D645722653C7600FC7E63 /* libgstcheck-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641422653C7500FC7E63 /* libgstcheck-1.0.0.dylib */; }; + CE2D645822653C7600FC7E63 /* libiconv.2.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641522653C7500FC7E63 /* libiconv.2.dylib */; }; + CE2D645922653C7600FC7E63 /* libgstsdp-1.0.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641622653C7500FC7E63 /* libgstsdp-1.0.0.dylib */; }; + CE2D645A22653C7600FC7E63 /* libssl.1.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641722653C7500FC7E63 /* libssl.1.1.dylib */; }; + CE2D645B22653C7600FC7E63 /* libspice-server.1.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641822653C7500FC7E63 /* libspice-server.1.dylib */; }; + CE2D645C22653C7600FC7E63 /* libpixman-1.0.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = CE2D641922653C7600FC7E63 /* libpixman-1.0.dylib */; }; + CE2D645D22653C8400FC7E63 /* libcrypto.1.1.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640A22653C7500FC7E63 /* libcrypto.1.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D645E22653C8400FC7E63 /* libffi.6.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E322653C7400FC7E63 /* libffi.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D645F22653C8400FC7E63 /* libgcrypt.20.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F322653C7400FC7E63 /* libgcrypt.20.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646022653C8400FC7E63 /* libgio-2.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F822653C7400FC7E63 /* libgio-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646122653C8400FC7E63 /* libglib-2.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640422653C7500FC7E63 /* libglib-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646222653C8400FC7E63 /* libgmodule-2.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63D822653C7300FC7E63 /* libgmodule-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646322653C8400FC7E63 /* libgobject-2.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F522653C7400FC7E63 /* libgobject-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646422653C8400FC7E63 /* libgpg-error.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F122653C7400FC7E63 /* libgpg-error.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646522653C8400FC7E63 /* libgstallocators-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641122653C7500FC7E63 /* libgstallocators-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646622653C8400FC7E63 /* libgstapp-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DB22653C7300FC7E63 /* libgstapp-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646722653C8400FC7E63 /* libgstaudio-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EF22653C7400FC7E63 /* libgstaudio-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646822653C8400FC7E63 /* libgstbase-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E822653C7400FC7E63 /* libgstbase-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646922653C8400FC7E63 /* libgstcheck-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641422653C7500FC7E63 /* libgstcheck-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646A22653C8400FC7E63 /* libgstcontroller-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EE22653C7400FC7E63 /* libgstcontroller-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646B22653C8400FC7E63 /* libgstfft-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640922653C7500FC7E63 /* libgstfft-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646C22653C8400FC7E63 /* libgstgl-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641022653C7500FC7E63 /* libgstgl-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646D22653C8400FC7E63 /* libgstnet-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E522653C7400FC7E63 /* libgstnet-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646E22653C8400FC7E63 /* libgstpbutils-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640E22653C7500FC7E63 /* libgstpbutils-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D646F22653C8400FC7E63 /* libgstreamer-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E022653C7400FC7E63 /* libgstreamer-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647022653C8400FC7E63 /* libgstriff-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DE22653C7400FC7E63 /* libgstriff-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647122653C8400FC7E63 /* libgstrtp-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DD22653C7400FC7E63 /* libgstrtp-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647222653C8400FC7E63 /* libgstrtsp-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640122653C7500FC7E63 /* libgstrtsp-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647322653C8400FC7E63 /* libgstsdp-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641622653C7500FC7E63 /* libgstsdp-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647422653C8400FC7E63 /* libgsttag-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F622653C7400FC7E63 /* libgsttag-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647522653C8400FC7E63 /* libgstvideo-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F922653C7400FC7E63 /* libgstvideo-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647622653C8400FC7E63 /* libgthread-2.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DC22653C7300FC7E63 /* libgthread-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647722653C8400FC7E63 /* libiconv.2.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641522653C7500FC7E63 /* libiconv.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647822653C8400FC7E63 /* libintl.8.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DA22653C7300FC7E63 /* libintl.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647922653C8400FC7E63 /* libjpeg.62.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63D922653C7300FC7E63 /* libjpeg.62.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647A22653C8400FC7E63 /* libjson-glib-1.0.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E222653C7400FC7E63 /* libjson-glib-1.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647B22653C8400FC7E63 /* libopus.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640322653C7500FC7E63 /* libopus.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647C22653C8400FC7E63 /* libpixman-1.0.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641922653C7600FC7E63 /* libpixman-1.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647D22653C8400FC7E63 /* libpng16.16.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640522653C7500FC7E63 /* libpng16.16.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647E22653C8500FC7E63 /* libqemu-system-aarch64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FD22653C7500FC7E63 /* libqemu-system-aarch64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D647F22653C8500FC7E63 /* libqemu-system-alpha.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641322653C7500FC7E63 /* libqemu-system-alpha.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648022653C8500FC7E63 /* libqemu-system-arm.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640722653C7500FC7E63 /* libqemu-system-arm.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648122653C8500FC7E63 /* libqemu-system-cris.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E622653C7400FC7E63 /* libqemu-system-cris.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648222653C8500FC7E63 /* libqemu-system-hppa.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F222653C7400FC7E63 /* libqemu-system-hppa.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648322653C8500FC7E63 /* libqemu-system-i386.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63D722653C7300FC7E63 /* libqemu-system-i386.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648422653C8500FC7E63 /* libqemu-system-lm32.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E922653C7400FC7E63 /* libqemu-system-lm32.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648522653C8500FC7E63 /* libqemu-system-m68k.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EB22653C7400FC7E63 /* libqemu-system-m68k.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648622653C8500FC7E63 /* libqemu-system-microblaze.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E422653C7400FC7E63 /* libqemu-system-microblaze.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648722653C8500FC7E63 /* libqemu-system-microblazeel.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F022653C7400FC7E63 /* libqemu-system-microblazeel.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648822653C8500FC7E63 /* libqemu-system-mips.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FF22653C7500FC7E63 /* libqemu-system-mips.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648922653C8500FC7E63 /* libqemu-system-mips64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F422653C7400FC7E63 /* libqemu-system-mips64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648A22653C8500FC7E63 /* libqemu-system-mips64el.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640822653C7500FC7E63 /* libqemu-system-mips64el.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648B22653C8500FC7E63 /* libqemu-system-mipsel.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640622653C7500FC7E63 /* libqemu-system-mipsel.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648C22653C8500FC7E63 /* libqemu-system-moxie.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EA22653C7400FC7E63 /* libqemu-system-moxie.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648D22653C8500FC7E63 /* libqemu-system-nios2.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63DF22653C7400FC7E63 /* libqemu-system-nios2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648E22653C8500FC7E63 /* libqemu-system-or1k.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640B22653C7500FC7E63 /* libqemu-system-or1k.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D648F22653C8600FC7E63 /* libqemu-system-ppc.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E722653C7400FC7E63 /* libqemu-system-ppc.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649022653C8600FC7E63 /* libqemu-system-ppc64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640C22653C7500FC7E63 /* libqemu-system-ppc64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649122653C8600FC7E63 /* libqemu-system-riscv32.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FA22653C7400FC7E63 /* libqemu-system-riscv32.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649222653C8600FC7E63 /* libqemu-system-riscv64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FB22653C7500FC7E63 /* libqemu-system-riscv64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649322653C8600FC7E63 /* libqemu-system-s390x.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FC22653C7500FC7E63 /* libqemu-system-s390x.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649422653C8600FC7E63 /* libqemu-system-sh4.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640222653C7500FC7E63 /* libqemu-system-sh4.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649522653C8600FC7E63 /* libqemu-system-sh4eb.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63E122653C7400FC7E63 /* libqemu-system-sh4eb.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649622653C8600FC7E63 /* libqemu-system-sparc.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640D22653C7500FC7E63 /* libqemu-system-sparc.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649722653C8600FC7E63 /* libqemu-system-sparc64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640F22653C7500FC7E63 /* libqemu-system-sparc64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649822653C8600FC7E63 /* libqemu-system-tricore.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63EC22653C7400FC7E63 /* libqemu-system-tricore.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649922653C8600FC7E63 /* libqemu-system-unicore32.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63F722653C7400FC7E63 /* libqemu-system-unicore32.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649A22653C8600FC7E63 /* libqemu-system-x86_64.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D640022653C7500FC7E63 /* libqemu-system-x86_64.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649B22653C8700FC7E63 /* libqemu-system-xtensa.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63ED22653C7400FC7E63 /* libqemu-system-xtensa.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649C22653C8700FC7E63 /* libqemu-system-xtensaeb.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641222653C7500FC7E63 /* libqemu-system-xtensaeb.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649D22653C8700FC7E63 /* libspice-client-glib-2.0.8.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D63FE22653C7500FC7E63 /* libspice-client-glib-2.0.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649E22653C8700FC7E63 /* libspice-server.1.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641822653C7500FC7E63 /* libspice-server.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + CE2D649F22653C8700FC7E63 /* libssl.1.1.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE2D641722653C7500FC7E63 /* libssl.1.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CE31C245225E555600A965DD /* UTMConfiguration.m in Sources */ = {isa = PBXBuildFile; fileRef = CE31C244225E555600A965DD /* UTMConfiguration.m */; }; CE31C24B225EA37400A965DD /* VMConfigViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE31C24A225EA37400A965DD /* VMConfigViewController.m */; }; CE31C24D225EA4A200A965DD /* VMConfigCreateViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE31C24C225EA4A200A965DD /* VMConfigCreateViewController.m */; }; CE4AA1492263B24F002E4A54 /* CSDisplayMetal.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4AA1482263B24F002E4A54 /* CSDisplayMetal.m */; }; CE4AA14C2264004F002E4A54 /* CSConnection.m in Sources */ = {isa = PBXBuildFile; fileRef = CE4AA14B2264004F002E4A54 /* CSConnection.m */; }; + CE4AA1502265B15B002E4A54 /* libqemu-img.dylib in Embed Libraries */ = {isa = PBXBuildFile; fileRef = CE4AA14E2265B152002E4A54 /* libqemu-img.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CE550BCE225947990063E575 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = CE550BCD225947990063E575 /* AppDelegate.m */; }; CE550BD1225947990063E575 /* VMListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE550BD0225947990063E575 /* VMListViewController.m */; }; CE550BD4225947990063E575 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = CE550BD2225947990063E575 /* Main.storyboard */; }; @@ -32,9 +138,112 @@ CE74C28F225D88ED004E4FF1 /* VMConfigSoundViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74C284225D88ED004E4FF1 /* VMConfigSoundViewController.m */; }; CE74C290225D88ED004E4FF1 /* VMConfigSystemViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE74C285225D88ED004E4FF1 /* VMConfigSystemViewController.m */; }; CE7BED4C225FBB8600A1E1B6 /* VMConfigDrivesViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7BED4B225FBB8600A1E1B6 /* VMConfigDrivesViewController.m */; }; + CE9D18F82265410E00355E14 /* qemu in Resources */ = {isa = PBXBuildFile; fileRef = CE9D18F72265410E00355E14 /* qemu */; }; + CE9D19662265425A00355E14 /* libgstautodetect.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19522265425900355E14 /* libgstautodetect.a */; }; + CE9D19672265425A00355E14 /* libgstaudiotestsrc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19532265425900355E14 /* libgstaudiotestsrc.a */; }; + CE9D19682265425A00355E14 /* libgstvideoconvert.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19542265425900355E14 /* libgstvideoconvert.a */; }; + CE9D19692265425A00355E14 /* libgstaudioconvert.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19552265425900355E14 /* libgstaudioconvert.a */; }; + CE9D196A2265425A00355E14 /* libgstvideoscale.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19562265425900355E14 /* libgstvideoscale.a */; }; + CE9D196B2265425A00355E14 /* libgstvolume.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19572265425900355E14 /* libgstvolume.a */; }; + CE9D196C2265425A00355E14 /* libgstcoreelements.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19582265425900355E14 /* libgstcoreelements.a */; }; + CE9D196D2265425A00355E14 /* libgstvideorate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19592265425900355E14 /* libgstvideorate.a */; }; + CE9D196E2265425A00355E14 /* libgstjpeg.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195A2265425900355E14 /* libgstjpeg.a */; }; + CE9D196F2265425A00355E14 /* libgstaudioresample.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195B2265425900355E14 /* libgstaudioresample.a */; }; + CE9D19702265425A00355E14 /* libgstplayback.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195C2265425900355E14 /* libgstplayback.a */; }; + CE9D19712265425A00355E14 /* libgstadder.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195D2265425900355E14 /* libgstadder.a */; }; + CE9D19722265425A00355E14 /* libgstopengl.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195E2265425900355E14 /* libgstopengl.a */; }; + CE9D19732265425A00355E14 /* libgstaudiorate.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D195F2265425900355E14 /* libgstaudiorate.a */; }; + CE9D19742265425A00355E14 /* libgstvideofilter.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19602265425900355E14 /* libgstvideofilter.a */; }; + CE9D19752265425A00355E14 /* libgstapp.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19612265425900355E14 /* libgstapp.a */; }; + CE9D19762265425A00355E14 /* libgstgio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19622265425A00355E14 /* libgstgio.a */; }; + CE9D19772265425A00355E14 /* libgsttypefindfunctions.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19632265425A00355E14 /* libgsttypefindfunctions.a */; }; + CE9D19782265425A00355E14 /* libgstvideotestsrc.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19642265425A00355E14 /* libgstvideotestsrc.a */; }; + CE9D19792265425A00355E14 /* libgstosxaudio.a in Frameworks */ = {isa = PBXBuildFile; fileRef = CE9D19652265425A00355E14 /* libgstosxaudio.a */; }; + CE9D197C226542FE00355E14 /* UTMQemu.m in Sources */ = {isa = PBXBuildFile; fileRef = CE9D197B226542FE00355E14 /* UTMQemu.m */; }; CEDC1DF22260EE4B008D9A6D /* StaticDataTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = CEDC1DF12260EE4B008D9A6D /* StaticDataTableViewController.m */; }; /* End PBXBuildFile section */ +/* Begin PBXCopyFilesBuildPhase section */ + CE2D64A022653C8700FC7E63 /* Embed Libraries */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + CE2D646422653C8400FC7E63 /* libgpg-error.0.dylib in Embed Libraries */, + CE2D648A22653C8500FC7E63 /* libqemu-system-mips64el.dylib in Embed Libraries */, + CE2D646A22653C8400FC7E63 /* libgstcontroller-1.0.0.dylib in Embed Libraries */, + CE2D646522653C8400FC7E63 /* libgstallocators-1.0.0.dylib in Embed Libraries */, + CE2D646822653C8400FC7E63 /* libgstbase-1.0.0.dylib in Embed Libraries */, + CE2D645E22653C8400FC7E63 /* libffi.6.dylib in Embed Libraries */, + CE2D649F22653C8700FC7E63 /* libssl.1.1.dylib in Embed Libraries */, + CE2D646022653C8400FC7E63 /* libgio-2.0.0.dylib in Embed Libraries */, + CE2D647D22653C8400FC7E63 /* libpng16.16.dylib in Embed Libraries */, + CE2D646D22653C8400FC7E63 /* libgstnet-1.0.0.dylib in Embed Libraries */, + CE2D648122653C8500FC7E63 /* libqemu-system-cris.dylib in Embed Libraries */, + CE2D645D22653C8400FC7E63 /* libcrypto.1.1.dylib in Embed Libraries */, + CE2D649222653C8600FC7E63 /* libqemu-system-riscv64.dylib in Embed Libraries */, + CE2D646622653C8400FC7E63 /* libgstapp-1.0.0.dylib in Embed Libraries */, + CE2D648C22653C8500FC7E63 /* libqemu-system-moxie.dylib in Embed Libraries */, + CE2D648622653C8500FC7E63 /* libqemu-system-microblaze.dylib in Embed Libraries */, + CE2D649422653C8600FC7E63 /* libqemu-system-sh4.dylib in Embed Libraries */, + CE2D646C22653C8400FC7E63 /* libgstgl-1.0.0.dylib in Embed Libraries */, + CE2D647422653C8400FC7E63 /* libgsttag-1.0.0.dylib in Embed Libraries */, + CE2D648E22653C8500FC7E63 /* libqemu-system-or1k.dylib in Embed Libraries */, + CE2D647122653C8400FC7E63 /* libgstrtp-1.0.0.dylib in Embed Libraries */, + CE2D647022653C8400FC7E63 /* libgstriff-1.0.0.dylib in Embed Libraries */, + CE2D648F22653C8600FC7E63 /* libqemu-system-ppc.dylib in Embed Libraries */, + CE2D647622653C8400FC7E63 /* libgthread-2.0.0.dylib in Embed Libraries */, + CE2D647E22653C8500FC7E63 /* libqemu-system-aarch64.dylib in Embed Libraries */, + CE2D648822653C8500FC7E63 /* libqemu-system-mips.dylib in Embed Libraries */, + CE2D649322653C8600FC7E63 /* libqemu-system-s390x.dylib in Embed Libraries */, + CE2D646322653C8400FC7E63 /* libgobject-2.0.0.dylib in Embed Libraries */, + CE2D646222653C8400FC7E63 /* libgmodule-2.0.0.dylib in Embed Libraries */, + CE2D649822653C8600FC7E63 /* libqemu-system-tricore.dylib in Embed Libraries */, + CE2D649722653C8600FC7E63 /* libqemu-system-sparc64.dylib in Embed Libraries */, + CE2D649122653C8600FC7E63 /* libqemu-system-riscv32.dylib in Embed Libraries */, + CE2D648922653C8500FC7E63 /* libqemu-system-mips64.dylib in Embed Libraries */, + CE2D648522653C8500FC7E63 /* libqemu-system-m68k.dylib in Embed Libraries */, + CE2D649622653C8600FC7E63 /* libqemu-system-sparc.dylib in Embed Libraries */, + CE2D649022653C8600FC7E63 /* libqemu-system-ppc64.dylib in Embed Libraries */, + CE2D647F22653C8500FC7E63 /* libqemu-system-alpha.dylib in Embed Libraries */, + CE2D649522653C8600FC7E63 /* libqemu-system-sh4eb.dylib in Embed Libraries */, + CE2D646122653C8400FC7E63 /* libglib-2.0.0.dylib in Embed Libraries */, + CE2D649A22653C8600FC7E63 /* libqemu-system-x86_64.dylib in Embed Libraries */, + CE2D649C22653C8700FC7E63 /* libqemu-system-xtensaeb.dylib in Embed Libraries */, + CE2D648022653C8500FC7E63 /* libqemu-system-arm.dylib in Embed Libraries */, + CE2D647822653C8400FC7E63 /* libintl.8.dylib in Embed Libraries */, + CE2D646F22653C8400FC7E63 /* libgstreamer-1.0.0.dylib in Embed Libraries */, + CE2D647522653C8400FC7E63 /* libgstvideo-1.0.0.dylib in Embed Libraries */, + CE2D647A22653C8400FC7E63 /* libjson-glib-1.0.0.dylib in Embed Libraries */, + CE2D647C22653C8400FC7E63 /* libpixman-1.0.dylib in Embed Libraries */, + CE2D647922653C8400FC7E63 /* libjpeg.62.dylib in Embed Libraries */, + CE2D648722653C8500FC7E63 /* libqemu-system-microblazeel.dylib in Embed Libraries */, + CE2D648222653C8500FC7E63 /* libqemu-system-hppa.dylib in Embed Libraries */, + CE2D648322653C8500FC7E63 /* libqemu-system-i386.dylib in Embed Libraries */, + CE2D649D22653C8700FC7E63 /* libspice-client-glib-2.0.8.dylib in Embed Libraries */, + CE2D647B22653C8400FC7E63 /* libopus.0.dylib in Embed Libraries */, + CE2D648422653C8500FC7E63 /* libqemu-system-lm32.dylib in Embed Libraries */, + CE2D647322653C8400FC7E63 /* libgstsdp-1.0.0.dylib in Embed Libraries */, + CE2D648D22653C8500FC7E63 /* libqemu-system-nios2.dylib in Embed Libraries */, + CE4AA1502265B15B002E4A54 /* libqemu-img.dylib in Embed Libraries */, + CE2D646722653C8400FC7E63 /* libgstaudio-1.0.0.dylib in Embed Libraries */, + CE2D646922653C8400FC7E63 /* libgstcheck-1.0.0.dylib in Embed Libraries */, + CE2D649B22653C8700FC7E63 /* libqemu-system-xtensa.dylib in Embed Libraries */, + CE2D647722653C8400FC7E63 /* libiconv.2.dylib in Embed Libraries */, + CE2D648B22653C8500FC7E63 /* libqemu-system-mipsel.dylib in Embed Libraries */, + CE2D647222653C8400FC7E63 /* libgstrtsp-1.0.0.dylib in Embed Libraries */, + CE2D649E22653C8700FC7E63 /* libspice-server.1.dylib in Embed Libraries */, + CE2D649922653C8600FC7E63 /* libqemu-system-unicore32.dylib in Embed Libraries */, + CE2D645F22653C8400FC7E63 /* libgcrypt.20.dylib in Embed Libraries */, + CE2D646B22653C8400FC7E63 /* libgstfft-1.0.0.dylib in Embed Libraries */, + CE2D646E22653C8400FC7E63 /* libgstpbutils-1.0.0.dylib in Embed Libraries */, + ); + name = "Embed Libraries"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ CE2B89332262A21E00C6D9D8 /* UTMVirtualMachine.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMVirtualMachine.h; sourceTree = ""; }; CE2B89352262B2F600C6D9D8 /* UTMVirtualMachineDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMVirtualMachineDelegate.h; sourceTree = ""; }; @@ -43,6 +252,73 @@ CE2D63D12265154700FC7E63 /* UTMShaderTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTMShaderTypes.h; sourceTree = ""; }; CE2D63D22265154700FC7E63 /* UTMRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTMRenderer.h; sourceTree = ""; }; CE2D63D5226517D600FC7E63 /* UTMRendererDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UTMRendererDelegate.h; sourceTree = ""; }; + CE2D63D722653C7300FC7E63 /* libqemu-system-i386.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-i386.dylib"; path = "sysroot/lib/libqemu-system-i386.dylib"; sourceTree = ""; }; + CE2D63D822653C7300FC7E63 /* libgmodule-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgmodule-2.0.0.dylib"; path = "sysroot/lib/libgmodule-2.0.0.dylib"; sourceTree = ""; }; + CE2D63D922653C7300FC7E63 /* libjpeg.62.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libjpeg.62.dylib; path = sysroot/lib/libjpeg.62.dylib; sourceTree = ""; }; + CE2D63DA22653C7300FC7E63 /* libintl.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libintl.8.dylib; path = sysroot/lib/libintl.8.dylib; sourceTree = ""; }; + CE2D63DB22653C7300FC7E63 /* libgstapp-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstapp-1.0.0.dylib"; path = "sysroot/lib/libgstapp-1.0.0.dylib"; sourceTree = ""; }; + CE2D63DC22653C7300FC7E63 /* libgthread-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgthread-2.0.0.dylib"; path = "sysroot/lib/libgthread-2.0.0.dylib"; sourceTree = ""; }; + CE2D63DD22653C7400FC7E63 /* libgstrtp-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstrtp-1.0.0.dylib"; path = "sysroot/lib/libgstrtp-1.0.0.dylib"; sourceTree = ""; }; + CE2D63DE22653C7400FC7E63 /* libgstriff-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstriff-1.0.0.dylib"; path = "sysroot/lib/libgstriff-1.0.0.dylib"; sourceTree = ""; }; + CE2D63DF22653C7400FC7E63 /* libqemu-system-nios2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-nios2.dylib"; path = "sysroot/lib/libqemu-system-nios2.dylib"; sourceTree = ""; }; + CE2D63E022653C7400FC7E63 /* libgstreamer-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstreamer-1.0.0.dylib"; path = "sysroot/lib/libgstreamer-1.0.0.dylib"; sourceTree = ""; }; + CE2D63E122653C7400FC7E63 /* libqemu-system-sh4eb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-sh4eb.dylib"; path = "sysroot/lib/libqemu-system-sh4eb.dylib"; sourceTree = ""; }; + CE2D63E222653C7400FC7E63 /* libjson-glib-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libjson-glib-1.0.0.dylib"; path = "sysroot/lib/libjson-glib-1.0.0.dylib"; sourceTree = ""; }; + CE2D63E322653C7400FC7E63 /* libffi.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libffi.6.dylib; path = sysroot/lib/libffi.6.dylib; sourceTree = ""; }; + CE2D63E422653C7400FC7E63 /* libqemu-system-microblaze.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-microblaze.dylib"; path = "sysroot/lib/libqemu-system-microblaze.dylib"; sourceTree = ""; }; + CE2D63E522653C7400FC7E63 /* libgstnet-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstnet-1.0.0.dylib"; path = "sysroot/lib/libgstnet-1.0.0.dylib"; sourceTree = ""; }; + CE2D63E622653C7400FC7E63 /* libqemu-system-cris.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-cris.dylib"; path = "sysroot/lib/libqemu-system-cris.dylib"; sourceTree = ""; }; + CE2D63E722653C7400FC7E63 /* libqemu-system-ppc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-ppc.dylib"; path = "sysroot/lib/libqemu-system-ppc.dylib"; sourceTree = ""; }; + CE2D63E822653C7400FC7E63 /* libgstbase-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstbase-1.0.0.dylib"; path = "sysroot/lib/libgstbase-1.0.0.dylib"; sourceTree = ""; }; + CE2D63E922653C7400FC7E63 /* libqemu-system-lm32.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-lm32.dylib"; path = "sysroot/lib/libqemu-system-lm32.dylib"; sourceTree = ""; }; + CE2D63EA22653C7400FC7E63 /* libqemu-system-moxie.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-moxie.dylib"; path = "sysroot/lib/libqemu-system-moxie.dylib"; sourceTree = ""; }; + CE2D63EB22653C7400FC7E63 /* libqemu-system-m68k.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-m68k.dylib"; path = "sysroot/lib/libqemu-system-m68k.dylib"; sourceTree = ""; }; + CE2D63EC22653C7400FC7E63 /* libqemu-system-tricore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-tricore.dylib"; path = "sysroot/lib/libqemu-system-tricore.dylib"; sourceTree = ""; }; + CE2D63ED22653C7400FC7E63 /* libqemu-system-xtensa.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-xtensa.dylib"; path = "sysroot/lib/libqemu-system-xtensa.dylib"; sourceTree = ""; }; + CE2D63EE22653C7400FC7E63 /* libgstcontroller-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstcontroller-1.0.0.dylib"; path = "sysroot/lib/libgstcontroller-1.0.0.dylib"; sourceTree = ""; }; + CE2D63EF22653C7400FC7E63 /* libgstaudio-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstaudio-1.0.0.dylib"; path = "sysroot/lib/libgstaudio-1.0.0.dylib"; sourceTree = ""; }; + CE2D63F022653C7400FC7E63 /* libqemu-system-microblazeel.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-microblazeel.dylib"; path = "sysroot/lib/libqemu-system-microblazeel.dylib"; sourceTree = ""; }; + CE2D63F122653C7400FC7E63 /* libgpg-error.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgpg-error.0.dylib"; path = "sysroot/lib/libgpg-error.0.dylib"; sourceTree = ""; }; + CE2D63F222653C7400FC7E63 /* libqemu-system-hppa.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-hppa.dylib"; path = "sysroot/lib/libqemu-system-hppa.dylib"; sourceTree = ""; }; + CE2D63F322653C7400FC7E63 /* libgcrypt.20.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libgcrypt.20.dylib; path = sysroot/lib/libgcrypt.20.dylib; sourceTree = ""; }; + CE2D63F422653C7400FC7E63 /* libqemu-system-mips64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-mips64.dylib"; path = "sysroot/lib/libqemu-system-mips64.dylib"; sourceTree = ""; }; + CE2D63F522653C7400FC7E63 /* libgobject-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgobject-2.0.0.dylib"; path = "sysroot/lib/libgobject-2.0.0.dylib"; sourceTree = ""; }; + CE2D63F622653C7400FC7E63 /* libgsttag-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgsttag-1.0.0.dylib"; path = "sysroot/lib/libgsttag-1.0.0.dylib"; sourceTree = ""; }; + CE2D63F722653C7400FC7E63 /* libqemu-system-unicore32.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-unicore32.dylib"; path = "sysroot/lib/libqemu-system-unicore32.dylib"; sourceTree = ""; }; + CE2D63F822653C7400FC7E63 /* libgio-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgio-2.0.0.dylib"; path = "sysroot/lib/libgio-2.0.0.dylib"; sourceTree = ""; }; + CE2D63F922653C7400FC7E63 /* libgstvideo-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstvideo-1.0.0.dylib"; path = "sysroot/lib/libgstvideo-1.0.0.dylib"; sourceTree = ""; }; + CE2D63FA22653C7400FC7E63 /* libqemu-system-riscv32.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-riscv32.dylib"; path = "sysroot/lib/libqemu-system-riscv32.dylib"; sourceTree = ""; }; + CE2D63FB22653C7500FC7E63 /* libqemu-system-riscv64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-riscv64.dylib"; path = "sysroot/lib/libqemu-system-riscv64.dylib"; sourceTree = ""; }; + CE2D63FC22653C7500FC7E63 /* libqemu-system-s390x.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-s390x.dylib"; path = "sysroot/lib/libqemu-system-s390x.dylib"; sourceTree = ""; }; + CE2D63FD22653C7500FC7E63 /* libqemu-system-aarch64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-aarch64.dylib"; path = "sysroot/lib/libqemu-system-aarch64.dylib"; sourceTree = ""; }; + CE2D63FE22653C7500FC7E63 /* libspice-client-glib-2.0.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libspice-client-glib-2.0.8.dylib"; path = "sysroot/lib/libspice-client-glib-2.0.8.dylib"; sourceTree = ""; }; + CE2D63FF22653C7500FC7E63 /* libqemu-system-mips.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-mips.dylib"; path = "sysroot/lib/libqemu-system-mips.dylib"; sourceTree = ""; }; + CE2D640022653C7500FC7E63 /* libqemu-system-x86_64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-x86_64.dylib"; path = "sysroot/lib/libqemu-system-x86_64.dylib"; sourceTree = ""; }; + CE2D640122653C7500FC7E63 /* libgstrtsp-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstrtsp-1.0.0.dylib"; path = "sysroot/lib/libgstrtsp-1.0.0.dylib"; sourceTree = ""; }; + CE2D640222653C7500FC7E63 /* libqemu-system-sh4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-sh4.dylib"; path = "sysroot/lib/libqemu-system-sh4.dylib"; sourceTree = ""; }; + CE2D640322653C7500FC7E63 /* libopus.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libopus.0.dylib; path = sysroot/lib/libopus.0.dylib; sourceTree = ""; }; + CE2D640422653C7500FC7E63 /* libglib-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libglib-2.0.0.dylib"; path = "sysroot/lib/libglib-2.0.0.dylib"; sourceTree = ""; }; + CE2D640522653C7500FC7E63 /* libpng16.16.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libpng16.16.dylib; path = sysroot/lib/libpng16.16.dylib; sourceTree = ""; }; + CE2D640622653C7500FC7E63 /* libqemu-system-mipsel.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-mipsel.dylib"; path = "sysroot/lib/libqemu-system-mipsel.dylib"; sourceTree = ""; }; + CE2D640722653C7500FC7E63 /* libqemu-system-arm.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-arm.dylib"; path = "sysroot/lib/libqemu-system-arm.dylib"; sourceTree = ""; }; + CE2D640822653C7500FC7E63 /* libqemu-system-mips64el.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-mips64el.dylib"; path = "sysroot/lib/libqemu-system-mips64el.dylib"; sourceTree = ""; }; + CE2D640922653C7500FC7E63 /* libgstfft-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstfft-1.0.0.dylib"; path = "sysroot/lib/libgstfft-1.0.0.dylib"; sourceTree = ""; }; + CE2D640A22653C7500FC7E63 /* libcrypto.1.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libcrypto.1.1.dylib; path = sysroot/lib/libcrypto.1.1.dylib; sourceTree = ""; }; + CE2D640B22653C7500FC7E63 /* libqemu-system-or1k.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-or1k.dylib"; path = "sysroot/lib/libqemu-system-or1k.dylib"; sourceTree = ""; }; + CE2D640C22653C7500FC7E63 /* libqemu-system-ppc64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-ppc64.dylib"; path = "sysroot/lib/libqemu-system-ppc64.dylib"; sourceTree = ""; }; + CE2D640D22653C7500FC7E63 /* libqemu-system-sparc.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-sparc.dylib"; path = "sysroot/lib/libqemu-system-sparc.dylib"; sourceTree = ""; }; + CE2D640E22653C7500FC7E63 /* libgstpbutils-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstpbutils-1.0.0.dylib"; path = "sysroot/lib/libgstpbutils-1.0.0.dylib"; sourceTree = ""; }; + CE2D640F22653C7500FC7E63 /* libqemu-system-sparc64.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-sparc64.dylib"; path = "sysroot/lib/libqemu-system-sparc64.dylib"; sourceTree = ""; }; + CE2D641022653C7500FC7E63 /* libgstgl-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstgl-1.0.0.dylib"; path = "sysroot/lib/libgstgl-1.0.0.dylib"; sourceTree = ""; }; + CE2D641122653C7500FC7E63 /* libgstallocators-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstallocators-1.0.0.dylib"; path = "sysroot/lib/libgstallocators-1.0.0.dylib"; sourceTree = ""; }; + CE2D641222653C7500FC7E63 /* libqemu-system-xtensaeb.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-xtensaeb.dylib"; path = "sysroot/lib/libqemu-system-xtensaeb.dylib"; sourceTree = ""; }; + CE2D641322653C7500FC7E63 /* libqemu-system-alpha.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-system-alpha.dylib"; path = "sysroot/lib/libqemu-system-alpha.dylib"; sourceTree = ""; }; + CE2D641422653C7500FC7E63 /* libgstcheck-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstcheck-1.0.0.dylib"; path = "sysroot/lib/libgstcheck-1.0.0.dylib"; sourceTree = ""; }; + CE2D641522653C7500FC7E63 /* libiconv.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libiconv.2.dylib; path = sysroot/lib/libiconv.2.dylib; sourceTree = ""; }; + CE2D641622653C7500FC7E63 /* libgstsdp-1.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libgstsdp-1.0.0.dylib"; path = "sysroot/lib/libgstsdp-1.0.0.dylib"; sourceTree = ""; }; + CE2D641722653C7500FC7E63 /* libssl.1.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libssl.1.1.dylib; path = sysroot/lib/libssl.1.1.dylib; sourceTree = ""; }; + CE2D641822653C7500FC7E63 /* libspice-server.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libspice-server.1.dylib"; path = "sysroot/lib/libspice-server.1.dylib"; sourceTree = ""; }; + CE2D641922653C7600FC7E63 /* libpixman-1.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libpixman-1.0.dylib"; path = "sysroot/lib/libpixman-1.0.dylib"; sourceTree = ""; }; CE31C243225E553500A965DD /* UTMConfiguration.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMConfiguration.h; sourceTree = ""; }; CE31C244225E555600A965DD /* UTMConfiguration.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UTMConfiguration.m; sourceTree = ""; }; CE31C246225E9FED00A965DD /* UTMConfigurationDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMConfigurationDelegate.h; sourceTree = ""; }; @@ -54,6 +330,7 @@ CE4AA14A2264004F002E4A54 /* CSConnection.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSConnection.h; sourceTree = ""; }; CE4AA14B2264004F002E4A54 /* CSConnection.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = CSConnection.m; sourceTree = ""; }; CE4AA14D22642EB4002E4A54 /* CSConnectionDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CSConnectionDelegate.h; sourceTree = ""; }; + CE4AA14E2265B152002E4A54 /* libqemu-img.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = "libqemu-img.dylib"; path = "sysroot/lib/libqemu-img.dylib"; sourceTree = ""; }; CE550BC9225947990063E575 /* UTM.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = UTM.app; sourceTree = BUILT_PRODUCTS_DIR; }; CE550BCC225947990063E575 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; CE550BCD225947990063E575 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; @@ -88,6 +365,29 @@ CE74C287225D88ED004E4FF1 /* VMConfigDriveDetailViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VMConfigDriveDetailViewController.h; sourceTree = ""; }; CE7BED4A225FBB8600A1E1B6 /* VMConfigDrivesViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VMConfigDrivesViewController.h; sourceTree = ""; }; CE7BED4B225FBB8600A1E1B6 /* VMConfigDrivesViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = VMConfigDrivesViewController.m; sourceTree = ""; }; + CE9D18F72265410E00355E14 /* qemu */ = {isa = PBXFileReference; lastKnownFileType = folder; name = qemu; path = sysroot/share/qemu; sourceTree = ""; }; + CE9D19522265425900355E14 /* libgstautodetect.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstautodetect.a; path = "sysroot/lib/gstreamer-1.0/libgstautodetect.a"; sourceTree = ""; }; + CE9D19532265425900355E14 /* libgstaudiotestsrc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstaudiotestsrc.a; path = "sysroot/lib/gstreamer-1.0/libgstaudiotestsrc.a"; sourceTree = ""; }; + CE9D19542265425900355E14 /* libgstvideoconvert.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvideoconvert.a; path = "sysroot/lib/gstreamer-1.0/libgstvideoconvert.a"; sourceTree = ""; }; + CE9D19552265425900355E14 /* libgstaudioconvert.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstaudioconvert.a; path = "sysroot/lib/gstreamer-1.0/libgstaudioconvert.a"; sourceTree = ""; }; + CE9D19562265425900355E14 /* libgstvideoscale.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvideoscale.a; path = "sysroot/lib/gstreamer-1.0/libgstvideoscale.a"; sourceTree = ""; }; + CE9D19572265425900355E14 /* libgstvolume.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvolume.a; path = "sysroot/lib/gstreamer-1.0/libgstvolume.a"; sourceTree = ""; }; + CE9D19582265425900355E14 /* libgstcoreelements.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstcoreelements.a; path = "sysroot/lib/gstreamer-1.0/libgstcoreelements.a"; sourceTree = ""; }; + CE9D19592265425900355E14 /* libgstvideorate.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvideorate.a; path = "sysroot/lib/gstreamer-1.0/libgstvideorate.a"; sourceTree = ""; }; + CE9D195A2265425900355E14 /* libgstjpeg.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstjpeg.a; path = "sysroot/lib/gstreamer-1.0/libgstjpeg.a"; sourceTree = ""; }; + CE9D195B2265425900355E14 /* libgstaudioresample.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstaudioresample.a; path = "sysroot/lib/gstreamer-1.0/libgstaudioresample.a"; sourceTree = ""; }; + CE9D195C2265425900355E14 /* libgstplayback.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstplayback.a; path = "sysroot/lib/gstreamer-1.0/libgstplayback.a"; sourceTree = ""; }; + CE9D195D2265425900355E14 /* libgstadder.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstadder.a; path = "sysroot/lib/gstreamer-1.0/libgstadder.a"; sourceTree = ""; }; + CE9D195E2265425900355E14 /* libgstopengl.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstopengl.a; path = "sysroot/lib/gstreamer-1.0/libgstopengl.a"; sourceTree = ""; }; + CE9D195F2265425900355E14 /* libgstaudiorate.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstaudiorate.a; path = "sysroot/lib/gstreamer-1.0/libgstaudiorate.a"; sourceTree = ""; }; + CE9D19602265425900355E14 /* libgstvideofilter.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvideofilter.a; path = "sysroot/lib/gstreamer-1.0/libgstvideofilter.a"; sourceTree = ""; }; + CE9D19612265425900355E14 /* libgstapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstapp.a; path = "sysroot/lib/gstreamer-1.0/libgstapp.a"; sourceTree = ""; }; + CE9D19622265425A00355E14 /* libgstgio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstgio.a; path = "sysroot/lib/gstreamer-1.0/libgstgio.a"; sourceTree = ""; }; + CE9D19632265425A00355E14 /* libgsttypefindfunctions.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgsttypefindfunctions.a; path = "sysroot/lib/gstreamer-1.0/libgsttypefindfunctions.a"; sourceTree = ""; }; + CE9D19642265425A00355E14 /* libgstvideotestsrc.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstvideotestsrc.a; path = "sysroot/lib/gstreamer-1.0/libgstvideotestsrc.a"; sourceTree = ""; }; + CE9D19652265425A00355E14 /* libgstosxaudio.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; name = libgstosxaudio.a; path = "sysroot/lib/gstreamer-1.0/libgstosxaudio.a"; sourceTree = ""; }; + CE9D197A226542FE00355E14 /* UTMQemu.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = UTMQemu.h; sourceTree = ""; }; + CE9D197B226542FE00355E14 /* UTMQemu.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = UTMQemu.m; sourceTree = ""; }; CEDC1DF02260EE4B008D9A6D /* StaticDataTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StaticDataTableViewController.h; sourceTree = ""; }; CEDC1DF12260EE4B008D9A6D /* StaticDataTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = StaticDataTableViewController.m; sourceTree = ""; }; /* End PBXFileReference section */ @@ -97,6 +397,64 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + CE9D19662265425A00355E14 /* libgstautodetect.a in Frameworks */, + CE9D19672265425A00355E14 /* libgstaudiotestsrc.a in Frameworks */, + CE9D19682265425A00355E14 /* libgstvideoconvert.a in Frameworks */, + CE9D19692265425A00355E14 /* libgstaudioconvert.a in Frameworks */, + CE9D196A2265425A00355E14 /* libgstvideoscale.a in Frameworks */, + CE9D196B2265425A00355E14 /* libgstvolume.a in Frameworks */, + CE9D196C2265425A00355E14 /* libgstcoreelements.a in Frameworks */, + CE9D196D2265425A00355E14 /* libgstvideorate.a in Frameworks */, + CE9D196E2265425A00355E14 /* libgstjpeg.a in Frameworks */, + CE9D196F2265425A00355E14 /* libgstaudioresample.a in Frameworks */, + CE9D19702265425A00355E14 /* libgstplayback.a in Frameworks */, + CE9D19712265425A00355E14 /* libgstadder.a in Frameworks */, + CE9D19722265425A00355E14 /* libgstopengl.a in Frameworks */, + CE9D19732265425A00355E14 /* libgstaudiorate.a in Frameworks */, + CE9D19742265425A00355E14 /* libgstvideofilter.a in Frameworks */, + CE9D19752265425A00355E14 /* libgstapp.a in Frameworks */, + CE9D19762265425A00355E14 /* libgstgio.a in Frameworks */, + CE9D19772265425A00355E14 /* libgsttypefindfunctions.a in Frameworks */, + CE9D19782265425A00355E14 /* libgstvideotestsrc.a in Frameworks */, + CE9D19792265425A00355E14 /* libgstosxaudio.a in Frameworks */, + CE2D641B22653C7600FC7E63 /* libgmodule-2.0.0.dylib in Frameworks */, + CE2D641C22653C7600FC7E63 /* libjpeg.62.dylib in Frameworks */, + CE2D641D22653C7600FC7E63 /* libintl.8.dylib in Frameworks */, + CE2D641E22653C7600FC7E63 /* libgstapp-1.0.0.dylib in Frameworks */, + CE2D641F22653C7600FC7E63 /* libgthread-2.0.0.dylib in Frameworks */, + CE2D642022653C7600FC7E63 /* libgstrtp-1.0.0.dylib in Frameworks */, + CE2D642122653C7600FC7E63 /* libgstriff-1.0.0.dylib in Frameworks */, + CE2D642222653C7600FC7E63 /* libqemu-system-nios2.dylib in Frameworks */, + CE2D642322653C7600FC7E63 /* libgstreamer-1.0.0.dylib in Frameworks */, + CE2D642422653C7600FC7E63 /* libqemu-system-sh4eb.dylib in Frameworks */, + CE2D642522653C7600FC7E63 /* libjson-glib-1.0.0.dylib in Frameworks */, + CE2D642622653C7600FC7E63 /* libffi.6.dylib in Frameworks */, + CE2D642822653C7600FC7E63 /* libgstnet-1.0.0.dylib in Frameworks */, + CE2D642B22653C7600FC7E63 /* libgstbase-1.0.0.dylib in Frameworks */, + CE2D643122653C7600FC7E63 /* libgstcontroller-1.0.0.dylib in Frameworks */, + CE2D643222653C7600FC7E63 /* libgstaudio-1.0.0.dylib in Frameworks */, + CE2D643422653C7600FC7E63 /* libgpg-error.0.dylib in Frameworks */, + CE2D643622653C7600FC7E63 /* libgcrypt.20.dylib in Frameworks */, + CE2D643822653C7600FC7E63 /* libgobject-2.0.0.dylib in Frameworks */, + CE2D643922653C7600FC7E63 /* libgsttag-1.0.0.dylib in Frameworks */, + CE2D643B22653C7600FC7E63 /* libgio-2.0.0.dylib in Frameworks */, + CE2D643C22653C7600FC7E63 /* libgstvideo-1.0.0.dylib in Frameworks */, + CE2D644122653C7600FC7E63 /* libspice-client-glib-2.0.8.dylib in Frameworks */, + CE2D644422653C7600FC7E63 /* libgstrtsp-1.0.0.dylib in Frameworks */, + CE2D644622653C7600FC7E63 /* libopus.0.dylib in Frameworks */, + CE2D644722653C7600FC7E63 /* libglib-2.0.0.dylib in Frameworks */, + CE2D644822653C7600FC7E63 /* libpng16.16.dylib in Frameworks */, + CE2D644C22653C7600FC7E63 /* libgstfft-1.0.0.dylib in Frameworks */, + CE2D644D22653C7600FC7E63 /* libcrypto.1.1.dylib in Frameworks */, + CE2D645122653C7600FC7E63 /* libgstpbutils-1.0.0.dylib in Frameworks */, + CE2D645322653C7600FC7E63 /* libgstgl-1.0.0.dylib in Frameworks */, + CE2D645422653C7600FC7E63 /* libgstallocators-1.0.0.dylib in Frameworks */, + CE2D645722653C7600FC7E63 /* libgstcheck-1.0.0.dylib in Frameworks */, + CE2D645822653C7600FC7E63 /* libiconv.2.dylib in Frameworks */, + CE2D645922653C7600FC7E63 /* libgstsdp-1.0.0.dylib in Frameworks */, + CE2D645A22653C7600FC7E63 /* libssl.1.1.dylib in Frameworks */, + CE2D645B22653C7600FC7E63 /* libspice-server.1.dylib in Frameworks */, + CE2D645C22653C7600FC7E63 /* libpixman-1.0.dylib in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -115,6 +473,101 @@ path = Renderer; sourceTree = ""; }; + CE2D63D622653C7300FC7E63 /* Frameworks */ = { + isa = PBXGroup; + children = ( + CE9D195D2265425900355E14 /* libgstadder.a */, + CE9D19612265425900355E14 /* libgstapp.a */, + CE9D19552265425900355E14 /* libgstaudioconvert.a */, + CE9D195F2265425900355E14 /* libgstaudiorate.a */, + CE9D195B2265425900355E14 /* libgstaudioresample.a */, + CE9D19532265425900355E14 /* libgstaudiotestsrc.a */, + CE9D19522265425900355E14 /* libgstautodetect.a */, + CE9D19582265425900355E14 /* libgstcoreelements.a */, + CE9D19622265425A00355E14 /* libgstgio.a */, + CE9D195A2265425900355E14 /* libgstjpeg.a */, + CE9D195E2265425900355E14 /* libgstopengl.a */, + CE9D19652265425A00355E14 /* libgstosxaudio.a */, + CE9D195C2265425900355E14 /* libgstplayback.a */, + CE9D19632265425A00355E14 /* libgsttypefindfunctions.a */, + CE9D19542265425900355E14 /* libgstvideoconvert.a */, + CE9D19602265425900355E14 /* libgstvideofilter.a */, + CE9D19592265425900355E14 /* libgstvideorate.a */, + CE9D19562265425900355E14 /* libgstvideoscale.a */, + CE9D19642265425A00355E14 /* libgstvideotestsrc.a */, + CE9D19572265425900355E14 /* libgstvolume.a */, + CE2D640A22653C7500FC7E63 /* libcrypto.1.1.dylib */, + CE2D63E322653C7400FC7E63 /* libffi.6.dylib */, + CE2D63F322653C7400FC7E63 /* libgcrypt.20.dylib */, + CE2D63F822653C7400FC7E63 /* libgio-2.0.0.dylib */, + CE2D640422653C7500FC7E63 /* libglib-2.0.0.dylib */, + CE2D63D822653C7300FC7E63 /* libgmodule-2.0.0.dylib */, + CE2D63F522653C7400FC7E63 /* libgobject-2.0.0.dylib */, + CE2D63F122653C7400FC7E63 /* libgpg-error.0.dylib */, + CE2D641122653C7500FC7E63 /* libgstallocators-1.0.0.dylib */, + CE2D63DB22653C7300FC7E63 /* libgstapp-1.0.0.dylib */, + CE2D63EF22653C7400FC7E63 /* libgstaudio-1.0.0.dylib */, + CE2D63E822653C7400FC7E63 /* libgstbase-1.0.0.dylib */, + CE2D641422653C7500FC7E63 /* libgstcheck-1.0.0.dylib */, + CE2D63EE22653C7400FC7E63 /* libgstcontroller-1.0.0.dylib */, + CE2D640922653C7500FC7E63 /* libgstfft-1.0.0.dylib */, + CE2D641022653C7500FC7E63 /* libgstgl-1.0.0.dylib */, + CE2D63E522653C7400FC7E63 /* libgstnet-1.0.0.dylib */, + CE2D640E22653C7500FC7E63 /* libgstpbutils-1.0.0.dylib */, + CE2D63E022653C7400FC7E63 /* libgstreamer-1.0.0.dylib */, + CE2D63DE22653C7400FC7E63 /* libgstriff-1.0.0.dylib */, + CE2D63DD22653C7400FC7E63 /* libgstrtp-1.0.0.dylib */, + CE2D640122653C7500FC7E63 /* libgstrtsp-1.0.0.dylib */, + CE2D641622653C7500FC7E63 /* libgstsdp-1.0.0.dylib */, + CE2D63F622653C7400FC7E63 /* libgsttag-1.0.0.dylib */, + CE2D63F922653C7400FC7E63 /* libgstvideo-1.0.0.dylib */, + CE2D63DC22653C7300FC7E63 /* libgthread-2.0.0.dylib */, + CE2D641522653C7500FC7E63 /* libiconv.2.dylib */, + CE2D63DA22653C7300FC7E63 /* libintl.8.dylib */, + CE2D63D922653C7300FC7E63 /* libjpeg.62.dylib */, + CE2D63E222653C7400FC7E63 /* libjson-glib-1.0.0.dylib */, + CE2D640322653C7500FC7E63 /* libopus.0.dylib */, + CE2D641922653C7600FC7E63 /* libpixman-1.0.dylib */, + CE2D640522653C7500FC7E63 /* libpng16.16.dylib */, + CE4AA14E2265B152002E4A54 /* libqemu-img.dylib */, + CE2D63FD22653C7500FC7E63 /* libqemu-system-aarch64.dylib */, + CE2D641322653C7500FC7E63 /* libqemu-system-alpha.dylib */, + CE2D640722653C7500FC7E63 /* libqemu-system-arm.dylib */, + CE2D63E622653C7400FC7E63 /* libqemu-system-cris.dylib */, + CE2D63F222653C7400FC7E63 /* libqemu-system-hppa.dylib */, + CE2D63D722653C7300FC7E63 /* libqemu-system-i386.dylib */, + CE2D63E922653C7400FC7E63 /* libqemu-system-lm32.dylib */, + CE2D63EB22653C7400FC7E63 /* libqemu-system-m68k.dylib */, + CE2D63E422653C7400FC7E63 /* libqemu-system-microblaze.dylib */, + CE2D63F022653C7400FC7E63 /* libqemu-system-microblazeel.dylib */, + CE2D63FF22653C7500FC7E63 /* libqemu-system-mips.dylib */, + CE2D63F422653C7400FC7E63 /* libqemu-system-mips64.dylib */, + CE2D640822653C7500FC7E63 /* libqemu-system-mips64el.dylib */, + CE2D640622653C7500FC7E63 /* libqemu-system-mipsel.dylib */, + CE2D63EA22653C7400FC7E63 /* libqemu-system-moxie.dylib */, + CE2D63DF22653C7400FC7E63 /* libqemu-system-nios2.dylib */, + CE2D640B22653C7500FC7E63 /* libqemu-system-or1k.dylib */, + CE2D63E722653C7400FC7E63 /* libqemu-system-ppc.dylib */, + CE2D640C22653C7500FC7E63 /* libqemu-system-ppc64.dylib */, + CE2D63FA22653C7400FC7E63 /* libqemu-system-riscv32.dylib */, + CE2D63FB22653C7500FC7E63 /* libqemu-system-riscv64.dylib */, + CE2D63FC22653C7500FC7E63 /* libqemu-system-s390x.dylib */, + CE2D640222653C7500FC7E63 /* libqemu-system-sh4.dylib */, + CE2D63E122653C7400FC7E63 /* libqemu-system-sh4eb.dylib */, + CE2D640D22653C7500FC7E63 /* libqemu-system-sparc.dylib */, + CE2D640F22653C7500FC7E63 /* libqemu-system-sparc64.dylib */, + CE2D63EC22653C7400FC7E63 /* libqemu-system-tricore.dylib */, + CE2D63F722653C7400FC7E63 /* libqemu-system-unicore32.dylib */, + CE2D640022653C7500FC7E63 /* libqemu-system-x86_64.dylib */, + CE2D63ED22653C7400FC7E63 /* libqemu-system-xtensa.dylib */, + CE2D641222653C7500FC7E63 /* libqemu-system-xtensaeb.dylib */, + CE2D63FE22653C7500FC7E63 /* libspice-client-glib-2.0.8.dylib */, + CE2D641822653C7500FC7E63 /* libspice-server.1.dylib */, + CE2D641722653C7500FC7E63 /* libssl.1.1.dylib */, + ); + name = Frameworks; + sourceTree = ""; + }; CE31C242225E543A00A965DD /* Configuration */ = { isa = PBXGroup; children = ( @@ -147,7 +600,9 @@ CE2D63CE2265150F00FC7E63 /* Renderer */, CE7BED4D22600F5000A1E1B6 /* Views */, CE550BCB225947990063E575 /* UTM */, + CE9D18F72265410E00355E14 /* qemu */, CE550BCA225947990063E575 /* Products */, + CE2D63D622653C7300FC7E63 /* Frameworks */, ); sourceTree = ""; }; @@ -208,6 +663,8 @@ CE5F1659226138AB00F3D56B /* Managers */ = { isa = PBXGroup; children = ( + CE9D197A226542FE00355E14 /* UTMQemu.h */, + CE9D197B226542FE00355E14 /* UTMQemu.m */, CE2B89352262B2F600C6D9D8 /* UTMVirtualMachineDelegate.h */, CE2B89332262A21E00C6D9D8 /* UTMVirtualMachine.h */, CE5F165B2261395000F3D56B /* UTMVirtualMachine.m */, @@ -245,6 +702,7 @@ CE550BC5225947990063E575 /* Sources */, CE550BC6225947990063E575 /* Frameworks */, CE550BC7225947990063E575 /* Resources */, + CE2D64A022653C8700FC7E63 /* Embed Libraries */, ); buildRules = ( ); @@ -292,6 +750,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + CE9D18F82265410E00355E14 /* qemu in Resources */, CE550BD92259479D0063E575 /* LaunchScreen.storyboard in Resources */, CE550BD62259479D0063E575 /* Assets.xcassets in Resources */, CE550BD4225947990063E575 /* Main.storyboard in Resources */, @@ -307,6 +766,7 @@ files = ( CE550BD1225947990063E575 /* VMListViewController.m in Sources */, CE31C24D225EA4A200A965DD /* VMConfigCreateViewController.m in Sources */, + CE9D197C226542FE00355E14 /* UTMQemu.m in Sources */, CE74C288225D88ED004E4FF1 /* VMConfigNetworkingViewController.m in Sources */, CE74C28E225D88ED004E4FF1 /* VMConfigSharingViewController.m in Sources */, CE74C28F225D88ED004E4FF1 /* VMConfigSoundViewController.m in Sources */, @@ -471,13 +931,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/build/sysroot/include", - "$(PROJECT_DIR)/build/sysroot/include/gstreamer-1.0", - "$(PROJECT_DIR)/build/sysroot/include/glib-2.0", - "$(PROJECT_DIR)/build/sysroot/lib/glib-2.0/include", - "$(PROJECT_DIR)/build/sysroot/include/spice-client-glib-2.0", - "$(PROJECT_DIR)/build/sysroot/include/spice-1", + "$(PROJECT_DIR)/sysroot/include", + "$(PROJECT_DIR)/sysroot/include/gstreamer-1.0", + "$(PROJECT_DIR)/sysroot/include/glib-2.0", + "$(PROJECT_DIR)/sysroot/lib/glib-2.0/include", + "$(PROJECT_DIR)/sysroot/include/spice-client-glib-2.0", + "$(PROJECT_DIR)/sysroot/include/spice-1", ); INFOPLIST_FILE = UTM/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -485,6 +946,10 @@ "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(PROJECT_DIR)/sysroot/lib", + "$(PROJECT_DIR)/sysroot/lib/gstreamer-1.0", + ); PRODUCT_BUNDLE_IDENTIFIER = com.halts.UTM; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; @@ -497,13 +962,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; DEVELOPMENT_TEAM = ""; + ENABLE_BITCODE = NO; HEADER_SEARCH_PATHS = ( - "$(PROJECT_DIR)/build/sysroot/include", - "$(PROJECT_DIR)/build/sysroot/include/gstreamer-1.0", - "$(PROJECT_DIR)/build/sysroot/include/glib-2.0", - "$(PROJECT_DIR)/build/sysroot/lib/glib-2.0/include", - "$(PROJECT_DIR)/build/sysroot/include/spice-client-glib-2.0", - "$(PROJECT_DIR)/build/sysroot/include/spice-1", + "$(PROJECT_DIR)/sysroot/include", + "$(PROJECT_DIR)/sysroot/include/gstreamer-1.0", + "$(PROJECT_DIR)/sysroot/include/glib-2.0", + "$(PROJECT_DIR)/sysroot/lib/glib-2.0/include", + "$(PROJECT_DIR)/sysroot/include/spice-client-glib-2.0", + "$(PROJECT_DIR)/sysroot/include/spice-1", ); INFOPLIST_FILE = UTM/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 11.0; @@ -511,6 +977,10 @@ "$(inherited)", "@executable_path/Frameworks", ); + LIBRARY_SEARCH_PATHS = ( + "$(PROJECT_DIR)/sysroot/lib", + "$(PROJECT_DIR)/sysroot/lib/gstreamer-1.0", + ); PRODUCT_BUNDLE_IDENTIFIER = com.halts.UTM; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; diff --git a/build_dependencies.sh b/build_dependencies.sh new file mode 100755 index 00000000..caee0f24 --- /dev/null +++ b/build_dependencies.sh @@ -0,0 +1,366 @@ +#!/bin/sh +# Based off of https://github.com/szanni/ios-autotools/blob/master/iconfigure +# Copyright (c) 2014, Angelo Haller +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +set -e + +# Source files for qemu +FFI_SRC="https://sourceware.org/ftp/libffi/libffi-3.2.1.tar.gz" +ICONV_SRC="https://ftp.gnu.org/gnu/libiconv/libiconv-1.15.tar.gz" +GETTEXT_SRC="https://ftp.gnu.org/gnu/gettext/gettext-0.19.8.1.tar.gz" +PNG_SRC="https://ftp.osuosl.org/pub/blfs/conglomeration/libpng/libpng-1.6.36.tar.xz" +JPEG_TURBO_SRC="https://ftp.osuosl.org/pub/blfs/conglomeration/libjpeg-turbo/libjpeg-turbo-1.5.3.tar.gz" +GLIB_SRC="ftp://ftp.gnome.org/pub/GNOME/sources/glib/2.55/glib-2.55.2.tar.xz" +GPG_ERROR_SRC="https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.36.tar.gz" +GCRYPT_SRC="https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.4.tar.gz" +PIXMAN_SRC="https://www.cairographics.org/releases/pixman-0.38.0.tar.gz" +OPENSSL_SRC="https://www.openssl.org/source/openssl-1.1.1b.tar.gz" +OPUS_SRC="https://archive.mozilla.org/pub/opus/opus-1.3.tar.gz" +SPICE_PROTOCOL_SRC="https://www.spice-space.org/download/releases/spice-protocol-0.12.15.tar.bz2" +SPICE_SERVER_SRC="https://www.spice-space.org/download/releases/spice-server/spice-0.14.1.tar.bz2" +NCURSES_SRC="https://invisible-mirror.net/archives/ncurses/ncurses-6.1.tar.gz" +QEMU_GIT="https://github.com/halts/qemu.git" + +# Source files for spice-client +JSON_GLIB_SRC="https://ftp.gnome.org/pub/GNOME/sources/json-glib/1.2/json-glib-1.2.8.tar.xz" +GST_SRC="https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.15.2.tar.xz" +GST_BASE_SRC="https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-1.15.2.tar.xz" +GST_GOOD_SRC="https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-1.15.2.tar.xz" +SPICE_CLIENT_SRC="https://www.spice-space.org/download/gtk/spice-gtk-0.36.tar.bz2" + +# Directories +BUILD_DIR="build" +PATCHES_DIR="patches" +SYSROOT_DIR="sysroot" + +# Printing coloured lines +GREEN='\033[0;32m' +RED='\033[0;31m' +NC='\033[0m' + +# Build environment +ARCH=$1 +CHOST= +SDK= +SDKMINVER="8.0" +NCPU=$(sysctl -n hw.ncpu) + +command -v realpath >/dev/null 2>&1 || realpath() { + [[ $1 = /* ]] && echo "$1" || echo "$PWD/${1#./}" +} + +[ -d "$SYSROOT_DIR" ] || mkdir -p "$SYSROOT_DIR" +PREFIX="$(realpath "$SYSROOT_DIR")" + +usage () { + echo "Usage: [VARIABLE...] $(basename $0) [architecture]" + echo "" + echo " architecture Target architecture. Default arm64. [armv7|armv7s|arm64|i386|x86_64]" + echo "" + echo " VARIABLEs are:" + echo " SDKVERSION Target a specific SDK version." + echo " CHOST Configure host, set if not deducable by ARCH." + echo " SDK SDK target, set if not deducable by ARCH. [iphoneos|iphonesimulator]" + echo "" + echo " CFLAGS CPPFLAGS CXXFLAGS LDFLAGS PKG_CONFIG_PATH" + echo "" + exit 1 +} + +check_env () { + command -v pkg-config >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'pkg-config' on your host machine.${NC}"; exit 1; } + command -v msgfmt >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'gettext' on your host machine.\n\t'msgfmt' needs to be in your \$PATH as well.${NC}"; exit 1; } + command -v glib-mkenums >/dev/null 2>&1 || { echo >&2 "${RED}You must install 'glib' on your host machine.\n\t'glib-mkenums' needs to be in your \$PATH as well.${NC}"; exit 1; } + command -v xcrun >/dev/null 2>&1 || { echo >&2 "${RED}'xcrun' is not found. Make sure you are running on OSX."; exit 1; } + command -v otool >/dev/null 2>&1 || { echo >&2 "${RED}'otool' is not found. Make sure you are running on OSX."; exit 1; } + command -v install_name_tool >/dev/null 2>&1 || { echo >&2 "${RED}'install_name_tool' is not found. Make sure you are running on OSX."; exit 1; } + # TODO: check bison version >= 2.4 +} + +download () { + URL=$1 + FILE="$(basename $URL)" + NAME="${FILE%.tar.*}" + TARGET="$BUILD_DIR/$FILE" + DIR="$BUILD_DIR/$NAME" + PATCH="$PATCHES_DIR/${NAME}.patch" + if [ -f "$TARGET" ]; then + echo "${GREEN}$TARGET already downloaded! Delete it to re-download.${NC}" + else + echo "${GREEN}Downloading ${URL}...${NC}" + curl -L -O "$URL" + mv "$FILE" "$TARGET" + fi + echo "${GREEN}Unpacking ${NAME}...${NC}" + tar -xf "$TARGET" -C "$BUILD_DIR" + if [ -f "$PATCH" ]; then + echo "${GREEN}Patching ${NAME}...${NC}" + patch -d "$DIR" -p1 < "$PATCH" + fi +} + +download_all () { + [ -d "$BUILD_DIR" ] || mkdir -p "$BUILD_DIR" + download $FFI_SRC + download $ICONV_SRC + download $GETTEXT_SRC + download $PNG_SRC + download $JPEG_TURBO_SRC + download $GLIB_SRC + download $GPG_ERROR_SRC + download $GCRYPT_SRC + download $PIXMAN_SRC + download $OPENSSL_SRC + download $OPUS_SRC + download $SPICE_PROTOCOL_SRC + download $SPICE_SERVER_SRC + download $NCURSES_SRC + download $JSON_GLIB_SRC + download $GST_SRC + download $GST_BASE_SRC + download $GST_GOOD_SRC + download $SPICE_CLIENT_SRC +} + +build_openssl() { + URL=$1 + shift 1 + FILE="$(basename $URL)" + NAME="${FILE%.tar.*}" + DIR="$BUILD_DIR/$NAME" + pwd="$(pwd)" + + TOOLCHAIN_PATH="$(dirname $(xcrun --sdk $SDK -find clang))" + PATH="$PATH:$TOOLCHAIN_PATH" + CROSS_TOP="$(xcrun --sdk $SDK --show-sdk-platform-path)/Developer" # for openssl + CROSS_SDK="$SDKNAME.$SDKVERSION.sdk" # for openssl + export CROSS_TOP + export CROSS_SDK + export PATH + case $ARCH in + armv7 | armv7s ) + OPENSSL_CROSS=iphoneos-cross + ;; + arm64 ) + OPENSSL_CROSS=ios64-cross + ;; + i386 ) + OPENSSL_CROSS=darwin-i386-cc + ;; + x86_64 ) + OPENSSL_CROSS=darwin64-x86_64-cc + ;; + esac + + cd "$DIR" + echo "${GREEN}Configuring ${NAME}...${NC}" + ./Configure $OPENSSL_CROSS no-dso no-hw no-engine --prefix="$PREFIX" $@ + echo "${GREEN}Building ${NAME}...${NC}" + make "$MAKEFLAGS" + echo "${GREEN}Installing ${NAME}...${NC}" + make "$MAKEFLAGS" install + cd "$pwd" +} + +build () { + URL=$1 + shift 1 + FILE="$(basename $URL)" + NAME="${FILE%.tar.*}" + DIR="$BUILD_DIR/$NAME" + pwd="$(pwd)" + + cd "$DIR" + echo "${GREEN}Configuring ${NAME}...${NC}" + ./configure --prefix="$PREFIX" --host="$CHOST" $@ + echo "${GREEN}Building ${NAME}...${NC}" + make "$MAKEFLAGS" + echo "${GREEN}Installing ${NAME}...${NC}" + make "$MAKEFLAGS" install + cd "$pwd" +} + +build_qemu_dependencies () { + build $FFI_SRC + build $ICONV_SRC + build $GETTEXT_SRC + build $PNG_SRC + build $JPEG_TURBO_SRC + build $GLIB_SRC glib_cv_stack_grows=no glib_cv_uscore=no --with-pcre=internal + build $GPG_ERROR_SRC + build $GCRYPT_SRC + build $PIXMAN_SRC + build_openssl $OPENSSL_SRC + build $OPUS_SRC + build $SPICE_PROTOCOL_SRC + build $SPICE_SERVER_SRC + build $NCURSES_SRC --without-debug --enable-overwrite --enable-widec --with-ospeed=int16_t --without-progs --without-tack --without-tests +} + +build_qemu () { + QEMU_DIR="$BUILD_DIR/qemu" + if [ ! -d "$QEMU_DIR" ]; then + echo "${GREEN}Cloning qemu...${NC}" + git clone --depth 1 --recursive --shallow-submodules "$QEMU_GIT" "$QEMU_DIR" + fi + QEMU_CFLAGS="$CFLAGS" + QEMU_CXXFLAGS="$CXXFLAGS" + QEMU_LDFLAGS="$LDFLAGS" + export QEMU_CFLAGS + export QEMU_CXXFLAGS + export QEMU_LDFLAGS + CFLAGS= + CXXFLAGS= + LDFLAGS= + build qemu --enable-shared-lib + CFLAGS="$QEMU_CFLAGS" + CXXFLAGS="$QEMU_CXXFLAGS" + LDFLAGS="$QEMU_LDFLAGS" +} + +steal_libucontext () { + # HACK: use the libucontext built by qemu + cp "$BUILD_DIR/qemu/libucontext/libucontext.a" "$PREFIX/lib/libucontext.a" + cp "$BUILD_DIR/qemu/libucontext/include/libucontext.h" "$PREFIX/include/libucontext.h" +} + +build_spice_client () { + build $JSON_GLIB_SRC + build $GST_SRC --enable-static --enable-static-plugins --disable-registry + build $GST_BASE_SRC --enable-static --disable-fatal-warnings + build $GST_GOOD_SRC --enable-static + build $SPICE_CLIENT_SRC --with-gtk=no +} + +fixup () { + FILE=$1 + LIST=$(otool -L "$FILE" | tail -n +3 | cut -d ' ' -f 1 | awk '{$1=$1};1') + OLDIFS=$IFS + IFS=$'\n' + echo "${GREEN}Fixing up $FILE...${NC}" + install_name_tool -id "@rpath/$(basename "$FILE")" "$FILE" + for f in $LIST + do + base=$(basename "$f") + dir=$(dirname "$f") + if [ "$dir" == "$PREFIX/lib" ]; then + install_name_tool -change "$f" "@rpath/$base" "$FILE" + fi + done + IFS=$OLDIFS +} + +fixup_all () { + FILES=$(find "$SYSROOT_DIR/lib" -type f -name "*.dylib") + OLDIFS=$IFS + IFS=$'\n' + for f in $FILES + do + fixup $f + done + IFS=$OLDIFS +} + +remove_shared_gst_plugins () { + find "$SYSROOT_DIR/lib/gstreamer-1.0" \( -name '*.so' -or -name '*.la' \) -exec rm \{\} \; +} + +if [ "x$ARCH" == "x" ]; then + ARCH=arm64 +fi +export ARCH + +# Export supplied CHOST or deduce by ARCH +if [ -z "$CHOST" ]; then + case $ARCH in + armv7 | armv7s ) + CHOST=arm-apple-darwin + ;; + arm64 ) + CHOST=aarch64-apple-darwin + ;; + i386 | x86_64 ) + CHOST=$ARCH-apple-darwin + ;; + * ) + usage + ;; + esac +fi +export CHOST + +# Export supplied SDK or deduce by ARCH +if [ -z "$SDK" ]; then + case $ARCH in + armv7 | armv7s | arm64 ) + SDK=iphoneos + ;; + i386 | x86_64 ) + SDK=iphonesimulator + ;; + * ) + usage + ;; + esac +fi + +# Export supplied SDKVERSION or use system default +if [ ! -z "$SDKVERSION" ]; then + SDKNAME=$(basename $(xcrun --sdk $SDK --show-sdk-platform-path) .platform) + SDKROOT=$(xcrun --sdk $SDK --show-sdk-platform-path)"/Developer/SDKs/$SDKNAME.$SDKVERSION.sdk" +else + SDKVERSION=$(xcrun --sdk $SDK --show-sdk-version) # current version + SDKROOT=$(xcrun --sdk $SDK --show-sdk-path) # current version +fi + +if [ -z "$SDKMINVER" ]; then + SDKMINVER="$SDKVERSION" +fi + +# Export tools +CC=$(xcrun --sdk $SDK --find gcc) +CPP=$(xcrun --sdk $SDK --find gcc)" -E" +CXX=$(xcrun --sdk $SDK --find g++) +LD=$(xcrun --sdk $SDK --find ld) +export CC +export CPP +export CXX +export LD +export PREFIX + +# Flags +CFLAGS="$CFLAGS -arch $ARCH -isysroot $SDKROOT -I$PREFIX/include -miphoneos-version-min=$SDKMINVER" +CPPFLAGS="$CPPFLAGS -arch $ARCH -isysroot $SDKROOT -I$PREFIX/include -miphoneos-version-min=$SDKMINVER" +CXXFLAGS="$CXXFLAGS -arch $ARCH -isysroot $SDKROOT -I$PREFIX/include" +LDFLAGS="$LDFLAGS -arch $ARCH -isysroot $SDKROOT -L$PREFIX/lib" +MAKEFLAGS="-j$NCPU" +PKG_CONFIG_PATH="$PKG_CONFIG_PATH":"$SDKROOT/usr/lib/pkgconfig":"$PREFIX/lib/pkgconfig":"$PREFIX/share/pkgconfig" +PKG_CONFIG_LIBDIR="" +export CFLAGS +export CPPFLAGS +export CXXFLAGS +export LDFLAGS +export MAKEFLAGS +export PKG_CONFIG_PATH +export PKG_CONFIG_LIBDIR + +check_env +download_all +build_qemu_dependencies +build_qemu +steal_libucontext # should be a better way... +build_spice_client +fixup_all +remove_shared_gst_plugins # another hack... +echo "${GREEN}All done!${NC}" diff --git a/patches/glib-2.55.2.patch b/patches/glib-2.55.2.patch new file mode 100644 index 00000000..4eadeea9 --- /dev/null +++ b/patches/glib-2.55.2.patch @@ -0,0 +1,29 @@ +diff -aur a/glib/genviron.c b/glib/genviron.c +--- a/glib/genviron.c 2018-01-22 12:28:02.000000000 -0800 ++++ b/glib/genviron.c 2019-03-26 13:50:40.000000000 -0700 +@@ -29,8 +29,16 @@ + #include + #include + #ifdef HAVE_CRT_EXTERNS_H ++#ifdef __APPLE__ ++#include "TargetConditionals.h" ++#if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR ++#define APPLE_USE_CRT_EXTERNS ++#endif ++#endif ++#ifdef APPLE_USE_CRT_EXTERNS + #include /* for _NSGetEnviron */ + #endif ++#endif + #ifdef G_OS_WIN32 + #include + #endif +@@ -303,7 +311,7 @@ + return result == 0; + } + +-#ifdef HAVE__NSGETENVIRON ++#ifdef APPLE_USE_CRT_EXTERNS + #define environ (*_NSGetEnviron()) + #else + /* According to the Single Unix Specification, environ is not diff --git a/patches/gst-plugins-base-1.15.2.patch b/patches/gst-plugins-base-1.15.2.patch new file mode 100644 index 00000000..79af4047 --- /dev/null +++ b/patches/gst-plugins-base-1.15.2.patch @@ -0,0 +1,12 @@ +diff -aur a/gst-libs/gst/rtp/gstrtcpbuffer.c b/gst-libs/gst/rtp/gstrtcpbuffer.c +--- a/gst-libs/gst/rtp/gstrtcpbuffer.c 2019-01-26 10:51:01.000000000 -0800 ++++ b/gst-libs/gst/rtp/gstrtcpbuffer.c 2019-04-01 14:27:21.000000000 -0700 +@@ -564,7 +564,7 @@ + * start a compount packet. Next we figure out if we have enough free space in + * the buffer to continue. */ + len = rtcp_packet_min_length (type); +- if (type == -1) ++ if ((int)type == -1) + goto unknown_type; + if (packet->offset + len >= maxsize) + goto no_space; diff --git a/patches/libgcrypt-1.8.4.patch b/patches/libgcrypt-1.8.4.patch new file mode 100644 index 00000000..4d2279ed --- /dev/null +++ b/patches/libgcrypt-1.8.4.patch @@ -0,0 +1,129 @@ +diff -aur a/mpi/aarch64/mpih-add1.S b/mpi/aarch64/mpih-add1.S +--- a/mpi/aarch64/mpih-add1.S 2017-11-23 10:16:58.000000000 -0800 ++++ b/mpi/aarch64/mpih-add1.S 2019-03-25 13:02:30.000000000 -0700 +@@ -33,9 +33,9 @@ + + .text + +-.globl _gcry_mpih_add_n +-.type _gcry_mpih_add_n,%function +-_gcry_mpih_add_n: ++.globl __gcry_mpih_add_n ++#.type _gcry_mpih_add_n,%function ++__gcry_mpih_add_n: + and x5, x3, #3; + adds xzr, xzr, xzr; /* clear carry flag */ + +@@ -68,4 +68,5 @@ + .Lend: + adc x0, xzr, xzr; + ret; +-.size _gcry_mpih_add_n,.-_gcry_mpih_add_n; ++#.size _gcry_mpih_add_n,.-_gcry_mpih_add_n; ++.align 2 +diff -aur a/mpi/aarch64/mpih-mul1.S b/mpi/aarch64/mpih-mul1.S +--- a/mpi/aarch64/mpih-mul1.S 2017-11-23 10:16:58.000000000 -0800 ++++ b/mpi/aarch64/mpih-mul1.S 2019-03-25 13:02:52.000000000 -0700 +@@ -33,9 +33,9 @@ + + .text + +-.globl _gcry_mpih_mul_1 +-.type _gcry_mpih_mul_1,%function +-_gcry_mpih_mul_1: ++.globl __gcry_mpih_mul_1 ++#.type _gcry_mpih_mul_1,%function ++__gcry_mpih_mul_1: + and x5, x2, #3; + mov x4, xzr; + +@@ -93,4 +93,5 @@ + .Lend: + mov x0, x4; + ret; +-.size _gcry_mpih_mul_1,.-_gcry_mpih_mul_1; ++#.size _gcry_mpih_mul_1,.-_gcry_mpih_mul_1; ++.align 2 +diff -aur a/mpi/aarch64/mpih-mul2.S b/mpi/aarch64/mpih-mul2.S +--- a/mpi/aarch64/mpih-mul2.S 2017-11-23 10:16:58.000000000 -0800 ++++ b/mpi/aarch64/mpih-mul2.S 2019-03-25 13:02:56.000000000 -0700 +@@ -33,9 +33,9 @@ + + .text + +-.globl _gcry_mpih_addmul_1 +-.type _gcry_mpih_addmul_1,%function +-_gcry_mpih_addmul_1: ++.globl __gcry_mpih_addmul_1 ++#.type _gcry_mpih_addmul_1,%function ++__gcry_mpih_addmul_1: + and x5, x2, #3; + mov x6, xzr; + mov x7, xzr; +@@ -105,4 +105,5 @@ + .Lend: + mov x0, x6; + ret; +-.size _gcry_mpih_addmul_1,.-_gcry_mpih_addmul_1; ++#.size _gcry_mpih_addmul_1,.-_gcry_mpih_addmul_1; ++.align 2 +diff -aur a/mpi/aarch64/mpih-mul3.S b/mpi/aarch64/mpih-mul3.S +--- a/mpi/aarch64/mpih-mul3.S 2017-11-23 10:16:58.000000000 -0800 ++++ b/mpi/aarch64/mpih-mul3.S 2019-03-25 13:02:59.000000000 -0700 +@@ -33,9 +33,9 @@ + + .text + +-.globl _gcry_mpih_submul_1 +-.type _gcry_mpih_submul_1,%function +-_gcry_mpih_submul_1: ++.globl __gcry_mpih_submul_1 ++#.type _gcry_mpih_submul_1,%function ++__gcry_mpih_submul_1: + and x5, x2, #3; + mov x7, xzr; + cbz x5, .Large_loop; +@@ -118,4 +118,5 @@ + .Loop_end: + cinc x0, x7, cc; + ret; +-.size _gcry_mpih_submul_1,.-_gcry_mpih_submul_1; ++#.size _gcry_mpih_submul_1,.-_gcry_mpih_submul_1; ++.align 2 +diff -aur a/mpi/aarch64/mpih-sub1.S b/mpi/aarch64/mpih-sub1.S +--- a/mpi/aarch64/mpih-sub1.S 2017-11-23 10:16:58.000000000 -0800 ++++ b/mpi/aarch64/mpih-sub1.S 2019-03-25 13:03:02.000000000 -0700 +@@ -33,9 +33,9 @@ + + .text + +-.globl _gcry_mpih_sub_n +-.type _gcry_mpih_sub_n,%function +-_gcry_mpih_sub_n: ++.globl __gcry_mpih_sub_n ++#.type _gcry_mpih_sub_n,%function ++__gcry_mpih_sub_n: + and x5, x3, #3; + subs xzr, xzr, xzr; /* prepare carry flag for sub */ + +@@ -68,4 +68,5 @@ + .Lend: + cset x0, cc; + ret; +-.size _gcry_mpih_sub_n,.-_gcry_mpih_sub_n; ++#.size _gcry_mpih_sub_n,.-_gcry_mpih_sub_n; ++.align 2 +diff -aur a/tests/random.c b/tests/random.c +--- a/tests/random.c 2017-11-23 10:16:58.000000000 -0800 ++++ b/tests/random.c 2019-03-25 13:00:20.000000000 -0700 +@@ -553,8 +553,8 @@ + strcat (cmdline, " --progress"); + strcat (cmdline, " "); + strcat (cmdline, options[idx]); +- if (system (cmdline)) +- die ("running '%s' failed\n", cmdline); ++ //if (system (cmdline)) ++ // die ("running '%s' failed\n", cmdline); + } + + free (cmdline); diff --git a/patches/libpng-1.6.36.patch b/patches/libpng-1.6.36.patch new file mode 100644 index 00000000..f5419c2e --- /dev/null +++ b/patches/libpng-1.6.36.patch @@ -0,0 +1,11 @@ +diff -aur a/libpng.pc.in b/libpng.pc.in +--- a/libpng.pc.in 2018-12-01 06:36:00.000000000 -0800 ++++ b/libpng.pc.in 2019-04-01 10:22:25.000000000 -0700 +@@ -6,7 +6,6 @@ + Name: libpng + Description: Loads and saves PNG files + Version: @PNGLIB_VERSION@ +-Requires: zlib + Libs: -L${libdir} -lpng@PNGLIB_MAJOR@@PNGLIB_MINOR@ + Libs.private: @LIBS@ + Cflags: -I${includedir} diff --git a/patches/pixman-0.38.0.patch b/patches/pixman-0.38.0.patch new file mode 100644 index 00000000..2ff4fcc5 --- /dev/null +++ b/patches/pixman-0.38.0.patch @@ -0,0 +1,49 @@ +diff -aur a/Makefile.am b/Makefile.am +--- a/Makefile.am 2019-01-21 03:17:13.000000000 -0800 ++++ b/Makefile.am 2019-03-25 13:38:31.000000000 -0700 +@@ -1,4 +1,4 @@ +-SUBDIRS = pixman demos test ++SUBDIRS = pixman + + pkgconfigdir=$(libdir)/pkgconfig + pkgconfig_DATA=pixman-1.pc +diff -aur a/Makefile.in b/Makefile.in +--- a/Makefile.in 2019-02-11 04:24:53.000000000 -0800 ++++ b/Makefile.in 2019-03-25 13:39:24.000000000 -0700 +@@ -190,7 +190,7 @@ + am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ + $(srcdir)/pixman-1-uninstalled.pc.in $(srcdir)/pixman-1.pc.in \ + AUTHORS COPYING ChangeLog INSTALL NEWS README compile \ +- config.guess config.sub install-sh ltmain.sh missing ++ config.guess config.sub depcomp install-sh ltmain.sh missing + DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) + distdir = $(PACKAGE)-$(VERSION) + top_distdir = $(distdir) +@@ -373,7 +373,6 @@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ + psdir = @psdir@ +-runstatedir = @runstatedir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + srcdir = @srcdir@ +@@ -382,7 +381,7 @@ + top_build_prefix = @top_build_prefix@ + top_builddir = @top_builddir@ + top_srcdir = @top_srcdir@ +-SUBDIRS = pixman demos test ++SUBDIRS = pixman + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = pixman-1.pc + GPGKEY = 3892336E +diff -aur a/test/Makefile.in b/test/Makefile.in +--- a/test/Makefile.in 2019-02-11 04:24:53.000000000 -0800 ++++ b/test/Makefile.in 2019-03-25 13:35:30.000000000 -0700 +@@ -812,7 +812,6 @@ + prefix = @prefix@ + program_transform_name = @program_transform_name@ + psdir = @psdir@ +-runstatedir = @runstatedir@ + sbindir = @sbindir@ + sharedstatedir = @sharedstatedir@ + srcdir = @srcdir@ diff --git a/patches/spice-0.14.1.patch b/patches/spice-0.14.1.patch new file mode 100644 index 00000000..9a5e66a6 --- /dev/null +++ b/patches/spice-0.14.1.patch @@ -0,0 +1,89 @@ +diff -aur a/Makefile.in b/Makefile.in +--- a/Makefile.in 2018-08-22 04:32:02.000000000 -0700 ++++ b/Makefile.in 2019-03-30 12:26:29.000000000 -0700 +@@ -422,7 +422,7 @@ + valgrind_tools = @valgrind_tools@ + NULL = + ACLOCAL_AMFLAGS = -I m4 +-SUBDIRS = subprojects/spice-common server docs tools ++SUBDIRS = subprojects/spice-common server docs + pkgconfigdir = $(libdir)/pkgconfig + pkgconfig_DATA = spice-server.pc + DISTCHECK_CONFIGURE_FLAGS = \ +diff -aur a/server/red-stream.c b/server/red-stream.c +--- a/server/red-stream.c 2018-07-23 03:01:37.000000000 -0700 ++++ b/server/red-stream.c 2019-03-30 11:00:26.000000000 -0700 +@@ -352,8 +352,16 @@ + memcpy(CMSG_DATA(cmsg), &fd, fd_size); + } + ++#if defined(__APPLE__) ++ int set = 1; ++ setsockopt(stream->socket, SOL_SOCKET, SO_NOSIGPIPE, (void *)&set, sizeof(int)); ++#endif + do { ++#if defined(__APPLE__) ++ r = sendmsg(stream->socket, &msgh, 0); ++#else + r = sendmsg(stream->socket, &msgh, MSG_NOSIGNAL); ++#endif + } while (r < 0 && (errno == EINTR || errno == EAGAIN)); + + return r; +diff -aur a/server/red-worker.c b/server/red-worker.c +--- a/server/red-worker.c 2018-08-09 04:09:22.000000000 -0700 ++++ b/server/red-worker.c 2019-03-30 11:02:48.000000000 -0700 +@@ -1391,7 +1391,9 @@ + spice_error("create thread failed %d", r); + } + pthread_sigmask(SIG_SETMASK, &curr_sig_mask, NULL); ++#if !defined(__APPLE__) // not supported + pthread_setname_np(worker->thread, "SPICE Worker"); ++#endif + + return r == 0; + } +diff -aur a/server/reds.c b/server/reds.c +--- a/server/reds.c 2018-08-09 04:09:22.000000000 -0700 ++++ b/server/reds.c 2019-03-31 10:39:25.000000000 -0700 +@@ -3555,6 +3555,7 @@ + static const char* parse_next_video_codec(const char *codecs, char **encoder, + char **codec) + { ++ size_t len; + if (!codecs) { + return NULL; + } +@@ -3562,8 +3563,22 @@ + if (!*codecs) { + return NULL; + } ++ len = strcspn(codecs, ";"); + int n; + *encoder = *codec = NULL; ++#if defined(__APPLE__) ++ char *aencoder = malloc(len); ++ char *acodec = malloc(len); ++ if (sscanf(codecs, "%[0-9a-zA-Z_]:%[0-9a-zA-Z_]%n", aencoder, acodec, &n) == 2) { ++ // this avoids accepting "encoder:codec" followed by garbage like "$%*" ++ if (codecs[n] != ';' && codecs[n] != '\0') { ++ free(acodec); ++ acodec = NULL; ++ } ++ } ++ *encoder = aencoder; ++ *codec = acodec; ++#else + if (sscanf(codecs, "%m[0-9a-zA-Z_]:%m[0-9a-zA-Z_]%n", encoder, codec, &n) == 2) { + // this avoids accepting "encoder:codec" followed by garbage like "$%*" + if (codecs[n] != ';' && codecs[n] != '\0') { +@@ -3571,7 +3586,8 @@ + *codec = NULL; + } + } +- return codecs + strcspn(codecs, ";"); ++#endif ++ return codecs + len; + } + + static void reds_set_video_codecs_from_string(RedsState *reds, const char *codecs) diff --git a/patches/spice-gtk-0.36.patch b/patches/spice-gtk-0.36.patch new file mode 100644 index 00000000..a171a192 --- /dev/null +++ b/patches/spice-gtk-0.36.patch @@ -0,0 +1,369 @@ +diff -aur a/config.h.in b/config.h.in +--- a/config.h.in 2019-01-16 05:38:41.000000000 -0800 ++++ b/config.h.in 2019-04-01 15:08:41.000000000 -0700 +@@ -61,6 +61,9 @@ + /* Define to 1 if you have the header file. */ + #undef HAVE_INTTYPES_H + ++/* Use libucontext? */ ++#undef HAVE_LIBUCONTEXT ++ + /* Define if libva is available */ + #undef HAVE_LIBVA + +diff -aur a/configure b/configure +--- a/configure 2019-01-16 05:38:40.000000000 -0800 ++++ b/configure 2019-04-01 15:08:40.000000000 -0700 +@@ -727,6 +727,7 @@ + INTROSPECTION_SCANNER + HAVE_INTROSPECTION_FALSE + HAVE_INTROSPECTION_TRUE ++UCONTEXT_LIBS + WITH_GTHREAD_FALSE + WITH_GTHREAD_TRUE + WITH_WINFIBER_FALSE +@@ -17851,6 +17852,97 @@ + + fi + fi ++ ++pkg_failed=no ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cairo >= 1.2.0" >&5 ++$as_echo_n "checking for cairo >= 1.2.0... " >&6; } ++ ++if test -n "$CAIRO_CFLAGS"; then ++ pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "cairo >= 1.2.0") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.2.0" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++if test -n "$CAIRO_LIBS"; then ++ pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" ++ elif test -n "$PKG_CONFIG"; then ++ if test -n "$PKG_CONFIG" && \ ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.0\""; } >&5 ++ ($PKG_CONFIG --exists --print-errors "cairo >= 1.2.0") 2>&5 ++ ac_status=$? ++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 ++ test $ac_status = 0; }; then ++ pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.2.0" 2>/dev/null` ++ test "x$?" != "x0" && pkg_failed=yes ++else ++ pkg_failed=yes ++fi ++ else ++ pkg_failed=untried ++fi ++ ++ ++ ++if test $pkg_failed = yes; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ ++if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then ++ _pkg_short_errors_supported=yes ++else ++ _pkg_short_errors_supported=no ++fi ++ if test $_pkg_short_errors_supported = yes; then ++ CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= 1.2.0" 2>&1` ++ else ++ CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= 1.2.0" 2>&1` ++ fi ++ # Put the nasty error message in config.log where it belongs ++ echo "$CAIRO_PKG_ERRORS" >&5 ++ ++ as_fn_error $? "Package requirements (cairo >= 1.2.0) were not met: ++ ++$CAIRO_PKG_ERRORS ++ ++Consider adjusting the PKG_CONFIG_PATH environment variable if you ++installed software in a non-standard prefix. ++ ++Alternatively, you may set the environment variables CAIRO_CFLAGS ++and CAIRO_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details." "$LINENO" 5 ++elif test $pkg_failed = untried; then ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 ++$as_echo "no" >&6; } ++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 ++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} ++as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it ++is in your PATH or set the PKG_CONFIG environment variable to the full ++path to pkg-config. ++ ++Alternatively, you may set the environment variables CAIRO_CFLAGS ++and CAIRO_LIBS to avoid the need to call pkg-config. ++See the pkg-config man page for more details. ++ ++To get pkg-config, see . ++See \`config.log' for more details" "$LINENO" 5; } ++else ++ CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS ++ CAIRO_LIBS=$pkg_cv_CAIRO_LIBS ++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 ++$as_echo "yes" >&6; } ++ ++fi + GTK_CFLAGS="$GTK_CFLAGS -DGDK_VERSION_MIN_REQUIRED=$GTK_ENCODED_VERSION \ + -DGDK_VERSION_MAX_ALLOWED=$GTK_ENCODED_VERSION" + fi +@@ -18264,100 +18356,8 @@ + + + pkg_failed=no +-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for CAIRO" >&5 +-$as_echo_n "checking for CAIRO... " >&6; } +- +-if test -n "$CAIRO_CFLAGS"; then +- pkg_cv_CAIRO_CFLAGS="$CAIRO_CFLAGS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ +- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.0\""; } >&5 +- ($PKG_CONFIG --exists --print-errors "cairo >= 1.2.0") 2>&5 +- ac_status=$? +- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 +- test $ac_status = 0; }; then +- pkg_cv_CAIRO_CFLAGS=`$PKG_CONFIG --cflags "cairo >= 1.2.0" 2>/dev/null` +- test "x$?" != "x0" && pkg_failed=yes +-else +- pkg_failed=yes +-fi +- else +- pkg_failed=untried +-fi +-if test -n "$CAIRO_LIBS"; then +- pkg_cv_CAIRO_LIBS="$CAIRO_LIBS" +- elif test -n "$PKG_CONFIG"; then +- if test -n "$PKG_CONFIG" && \ +- { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"cairo >= 1.2.0\""; } >&5 +- ($PKG_CONFIG --exists --print-errors "cairo >= 1.2.0") 2>&5 +- ac_status=$? +- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 +- test $ac_status = 0; }; then +- pkg_cv_CAIRO_LIBS=`$PKG_CONFIG --libs "cairo >= 1.2.0" 2>/dev/null` +- test "x$?" != "x0" && pkg_failed=yes +-else +- pkg_failed=yes +-fi +- else +- pkg_failed=untried +-fi +- +- +- +-if test $pkg_failed = yes; then +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +- +-if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then +- _pkg_short_errors_supported=yes +-else +- _pkg_short_errors_supported=no +-fi +- if test $_pkg_short_errors_supported = yes; then +- CAIRO_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "cairo >= 1.2.0" 2>&1` +- else +- CAIRO_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "cairo >= 1.2.0" 2>&1` +- fi +- # Put the nasty error message in config.log where it belongs +- echo "$CAIRO_PKG_ERRORS" >&5 +- +- as_fn_error $? "Package requirements (cairo >= 1.2.0) were not met: +- +-$CAIRO_PKG_ERRORS +- +-Consider adjusting the PKG_CONFIG_PATH environment variable if you +-installed software in a non-standard prefix. +- +-Alternatively, you may set the environment variables CAIRO_CFLAGS +-and CAIRO_LIBS to avoid the need to call pkg-config. +-See the pkg-config man page for more details." "$LINENO" 5 +-elif test $pkg_failed = untried; then +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +-$as_echo "no" >&6; } +- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 +-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} +-as_fn_error $? "The pkg-config script could not be found or is too old. Make sure it +-is in your PATH or set the PKG_CONFIG environment variable to the full +-path to pkg-config. +- +-Alternatively, you may set the environment variables CAIRO_CFLAGS +-and CAIRO_LIBS to avoid the need to call pkg-config. +-See the pkg-config man page for more details. +- +-To get pkg-config, see . +-See \`config.log' for more details" "$LINENO" 5; } +-else +- CAIRO_CFLAGS=$pkg_cv_CAIRO_CFLAGS +- CAIRO_LIBS=$pkg_cv_CAIRO_LIBS +- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 +-$as_echo "yes" >&6; } +- +-fi +- +- +-pkg_failed=no + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTHREAD" >&5 + $as_echo_n "checking for GTHREAD... " >&6; } + + if test -n "$GTHREAD_CFLAGS"; then + pkg_cv_GTHREAD_CFLAGS="$GTHREAD_CFLAGS" +@@ -20119,6 +20119,50 @@ + fi + + ++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for libucontext_makecontext in -lucontext" >&5 ++$as_echo_n "checking for libucontext_makecontext in -lucontext... " >&6; } ++if ${ac_cv_lib_ucontext_libucontext_makecontext+:} false; then : ++ $as_echo_n "(cached) " >&6 ++else ++ ac_check_lib_save_LIBS=$LIBS ++LIBS="-lucontext $LIBS" ++cat confdefs.h - <<_ACEOF >conftest.$ac_ext ++/* end confdefs.h. */ ++ ++/* Override any GCC internal prototype to avoid an error. ++ Use char because int might match the return type of a GCC ++ builtin and then its argument prototype would still apply. */ ++#ifdef __cplusplus ++extern "C" ++#endif ++char libucontext_makecontext (); ++int ++main () ++{ ++return libucontext_makecontext (); ++ ; ++ return 0; ++} ++_ACEOF ++if ac_fn_c_try_link "$LINENO"; then : ++ ac_cv_lib_ucontext_libucontext_makecontext=yes ++else ++ ac_cv_lib_ucontext_libucontext_makecontext=no ++fi ++rm -f core conftest.err conftest.$ac_objext \ ++ conftest$ac_exeext conftest.$ac_ext ++LIBS=$ac_check_lib_save_LIBS ++fi ++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ucontext_libucontext_makecontext" >&5 ++$as_echo "$ac_cv_lib_ucontext_libucontext_makecontext" >&6; } ++if test "x$ac_cv_lib_ucontext_libucontext_makecontext" = xyes; then : ++ UCONTEXT_LIBS='-lucontext' ++$as_echo "#define HAVE_LIBUCONTEXT 1" >>confdefs.h ++ ++fi ++ ++ ++ + if test "0" = "1"; then + HAVE_INTROSPECTION_TRUE= + HAVE_INTROSPECTION_FALSE='#' +diff -aur a/configure.ac b/configure.ac +--- a/configure.ac 2019-01-16 03:31:42.000000000 -0800 ++++ b/configure.ac 2019-04-01 15:08:24.000000000 -0700 +@@ -147,7 +147,8 @@ + AS_IF([test "x$with_gtk" != "xno"], + [AS_IF([test "x$os_win32" = "xyes"], + [PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED)], +- [PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED epoxy)])] ++ [PKG_CHECK_MODULES(GTK, gtk+-3.0 >= $GTK_REQUIRED epoxy)]) ++ PKG_CHECK_MODULES(CAIRO, cairo >= 1.2.0)] + [GTK_CFLAGS="$GTK_CFLAGS -DGDK_VERSION_MIN_REQUIRED=$GTK_ENCODED_VERSION \ + -DGDK_VERSION_MAX_ALLOWED=$GTK_ENCODED_VERSION"]) + SPICE_GTK_REQUIRES="${SPICE_GTK_REQUIRES} gtk+-3.0 >= $GTK_REQUIRED" +@@ -169,8 +170,6 @@ + + PKG_CHECK_MODULES(GIO, gio-2.0 >= 2.36 $gio_os) + +-PKG_CHECK_MODULES(CAIRO, cairo >= 1.2.0) +- + PKG_CHECK_MODULES(GTHREAD, gthread-2.0) + + PKG_CHECK_MODULES(JSON, json-glib-1.0) +@@ -435,6 +434,9 @@ + AC_DEFINE_UNQUOTED([WITH_GTHREAD],[$WITH_GTHREAD], [Whether to use gthread coroutine impl]) + AM_CONDITIONAL(WITH_GTHREAD, [test "x$WITH_GTHREAD" = "x1"]) + ++AC_CHECK_LIB(ucontext, libucontext_makecontext, UCONTEXT_LIBS='-lucontext' AC_DEFINE([HAVE_LIBUCONTEXT], 1, [Use libucontext?]), []) ++AC_SUBST(UCONTEXT_LIBS) ++ + AM_CONDITIONAL([HAVE_INTROSPECTION], [test "0" = "1"]) + m4_ifdef([GOBJECT_INTROSPECTION_CHECK],[ + PKG_CHECK_EXISTS([GOBJECT_INTROSPECTION], +diff -aur a/src/Makefile.am b/src/Makefile.am +--- a/src/Makefile.am 2019-01-16 03:31:42.000000000 -0800 ++++ b/src/Makefile.am 2019-04-01 15:09:24.000000000 -0700 +@@ -201,6 +201,7 @@ + $(USBREDIR_LIBS) \ + $(GUDEV_LIBS) \ + $(PHODAV_LIBS) \ ++ $(UCONTEXT_LIBS) \ + $(NULL) + + if WITH_POLKIT +diff -aur a/src/Makefile.in b/src/Makefile.in +--- a/src/Makefile.in 2019-01-16 05:38:41.000000000 -0800 ++++ b/src/Makefile.in 2019-04-01 15:10:59.000000000 -0700 +@@ -210,8 +210,8 @@ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ + $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ +- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ +- $(am__DEPENDENCIES_1) ++ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ ++ $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) + am__libspice_client_glib_impl_la_SOURCES_DIST = bio-gio.c bio-gio.h \ + spice-audio.c spice-audio-priv.h spice-gstaudio.c \ + spice-gstaudio.h spice-common.h spice-util.c spice-util-priv.h \ +@@ -628,6 +628,7 @@ + SSL_LIBS = @SSL_LIBS@ + STOW = @STOW@ + STRIP = @STRIP@ ++UCONTEXT_LIBS = @UCONTEXT_LIBS@ + USBREDIR_CFLAGS = @USBREDIR_CFLAGS@ + USBREDIR_LIBS = @USBREDIR_LIBS@ + USB_IDS = @USB_IDS@ +@@ -848,7 +849,8 @@ + $(JPEG_LIBS) $(JSON_LIBS) $(Z_LIBS) $(LZ4_LIBS) $(PIXMAN_LIBS) \ + $(SSL_LIBS) $(PULSE_LIBS) $(GSTAUDIO_LIBS) $(GSTVIDEO_LIBS) \ + $(SASL_LIBS) $(SMARTCARD_LIBS) $(USBREDIR_LIBS) $(GUDEV_LIBS) \ +- $(PHODAV_LIBS) $(NULL) $(am__append_10) $(am__append_12) ++ $(PHODAV_LIBS) $(UCONTEXT_LIBS) $(NULL) $(am__append_10) \ ++ $(am__append_12) + @WITH_POLKIT_FALSE@USB_ACL_HELPER_SRCS = + @WITH_POLKIT_TRUE@USB_ACL_HELPER_SRCS = \ + @WITH_POLKIT_TRUE@ usb-acl-helper.c \ +diff -aur a/src/continuation.h b/src/continuation.h +--- a/src/continuation.h 2017-06-20 09:14:41.000000000 -0700 ++++ b/src/continuation.h 2019-04-01 15:10:46.000000000 -0700 +@@ -23,7 +23,16 @@ + + #include "spice-common.h" + #include ++#ifdef HAVE_LIBUCONTEXT ++#include ++#define ucontext_t libucontext_ucontext_t ++#define getcontext libucontext_getcontext ++#define setcontext libucontext_setcontext ++#define swapcontext libucontext_swapcontext ++#define makecontext libucontext_makecontext ++#else + #include ++#endif + #include + + struct continuation diff --git a/patches/spiceglue-2.2.patch b/patches/spiceglue-2.2.patch new file mode 100644 index 00000000..33eca59e --- /dev/null +++ b/patches/spiceglue-2.2.patch @@ -0,0 +1,234 @@ +diff -aur a/src/glue-clipboard-macos.c b/src/glue-clipboard-macos.c +--- a/src/glue-clipboard-macos.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/glue-clipboard-macos.c 2019-04-03 15:12:20.000000000 -0700 +@@ -29,6 +29,7 @@ + #include "glue-spice-widget-priv.h" + #include "glue-clipboard.h" + ++extern GMainContext *g_spice_glue_context; + gboolean enableClipboardToGuest = FALSE; + gboolean enableClipboardToClient = FALSE; + uint32_t *guestClipboard = NULL; +@@ -122,7 +123,10 @@ + return 0; + } + +- g_idle_add(grab_guest_clipboard, NULL); ++ GSource *source = g_idle_source_new(); ++ g_source_set_callback(source, grab_guest_clipboard, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + + return 0; + } +@@ -156,7 +160,10 @@ + return 0; + } + +- g_idle_add(release_guest_clipboard, NULL); ++ GSource *source = g_idle_source_new(); ++ g_source_set_callback(source, release_guest_clipboard, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + + return 0; + } +@@ -192,7 +199,10 @@ + return 0; + } + +- g_idle_add(clipboard_get_data, NULL); ++ GSource *source = g_idle_source_new(); ++ g_source_set_callback(source, clipboard_get_data, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + + return 1; + } +diff -aur a/src/glue-clipboard-win32.c b/src/glue-clipboard-win32.c +--- a/src/glue-clipboard-win32.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/glue-clipboard-win32.c 2019-04-03 15:16:18.000000000 -0700 +@@ -81,6 +81,8 @@ + GMutex data_mutex; + GCond data_cond; + ++extern GMainContext *g_spice_glue_context; ++ + //If more clipboard formats are to be supported, use CBData + typedef struct + { +@@ -503,9 +505,10 @@ + } + + if (wparam == CF_UNICODETEXT) { +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- onRenderFormat_text, +- NULL, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, onRenderFormat_text, NULL, NULL); ++ id = g_source_attach(source, g_spice_glue_context); ++ g_source_unref (source); + /* https://msdn.microsoft.com/en-us/library/windows/desktop/ms649016(v=vs.85).aspx */ + + // Allocate a buffer for the text. +diff -aur a/src/glue-connection.c b/src/glue-connection.c +--- a/src/glue-connection.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/glue-connection.c 2019-04-02 13:13:31.000000000 -0700 +@@ -245,6 +245,6 @@ + + void spice_connection_power_event_request(SpiceConnection *conn, int powerEvent) + { +- if (conn->main != NULL) +- spice_main_power_event_request(conn->main, powerEvent); +-} +\ No newline at end of file ++ //if (conn->main != NULL) ++ // spice_main_power_event_request(conn->main, powerEvent); ++} +diff -aur a/src/glue-service.c b/src/glue-service.c +--- a/src/glue-service.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/glue-service.c 2019-04-03 13:33:21.000000000 -0700 +@@ -72,6 +72,8 @@ + #include + static FILE *logfile = NULL; + ++GMainContext *g_spice_glue_context; ++ + void logToFile (const gchar *log_domain, GLogLevelFlags log_level, + const gchar *message, gpointer user_data) + { +@@ -179,7 +181,7 @@ + + void SpiceGlibGlue_MainLoop(void) + { +- GMainLoop *mainloop = g_main_loop_new(NULL, FALSE); ++ GMainLoop *mainloop = g_main_loop_new(g_spice_glue_context, FALSE); + g_main_loop_run(mainloop); + g_main_loop_unref(mainloop); + #if defined(PRINTING) || defined(SSO) +@@ -197,9 +199,10 @@ + + void SpiceGlibGlue_Disconnect(void) + { +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- disconnect1, +- NULL, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, disconnect1, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + } + + int16_t SpiceGlibGlue_Connect(char* host, +@@ -250,6 +253,7 @@ + + void SpiceGlibGlueInitializeGlue() + { ++ g_spice_glue_context = g_main_context_new(); + #ifdef PRINTING + initializeFollowMePrinting(); + #endif +@@ -326,7 +330,8 @@ + * in spice-protocol enums.h + **/ + void SpiceGlibGlue_SendPowerEvent(int16_t powerEvent) { +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- (GSourceFunc)sendPowerEvent1, +- (gpointer)powerEvent, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, (GSourceFunc)sendPowerEvent1, (gpointer)powerEvent, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + } +diff -aur a/src/glue-spice-widget.c b/src/glue-spice-widget.c +--- a/src/glue-spice-widget.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/glue-spice-widget.c 2019-04-03 13:16:28.000000000 -0700 +@@ -41,6 +41,7 @@ + #include "mono-glue-types.h" + #include "glue-clipboard.h" + ++extern GMainContext *g_spice_glue_context; + + static struct { + uint32_t *buffer; +@@ -1063,7 +1064,10 @@ + } + + if (!d->copy_scheduled) { +- g_timeout_add(30, (GSourceFunc) copy_display_to_glue, NULL); ++ GSource *source = g_timeout_source_new(30); ++ g_source_set_callback(source, (GSourceFunc) copy_display_to_glue, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + d->copy_scheduled = 1; + } + } +@@ -1623,7 +1627,10 @@ + if (global_display() != NULL) { + SpiceDisplayPrivate *d = SPICE_DISPLAY_GET_PRIVATE(global_display()); + if (!d->copy_scheduled) { +- g_timeout_add(30, (GSourceFunc) copy_display_to_glue, NULL); ++ GSource *source = g_timeout_source_new(30); ++ g_source_set_callback(source, (GSourceFunc) copy_display_to_glue, NULL, NULL); ++ g_source_attach(source, g_spice_glue_context); ++ g_source_unref(source); + d->copy_scheduled = 1; + } + } +diff -aur a/src/usb-device-widget.c b/src/usb-device-widget.c +--- a/src/usb-device-widget.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/usb-device-widget.c 2019-04-03 15:16:12.000000000 -0700 +@@ -25,6 +25,8 @@ + #include "usb-device-widget.h" + #include + ++extern GMainContext *g_spice_glue_context; ++ + /** + * SECTION:usb-device-widget + * @short_description: USB device selection glue +@@ -510,9 +512,10 @@ + connect_cb_data *data = g_new(connect_cb_data, 1); + data->self = g_object_ref(self); + data->device = device; +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- spice_usb_device_widget_unshare1, +- data, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, spice_usb_device_widget_unshare1, NULL, NULL); ++ id = g_source_attach(source, g_spice_glue_context); ++ g_source_unref (source); + + } + +diff -aur a/src/usb-glue.c b/src/usb-glue.c +--- a/src/usb-glue.c 2019-04-01 19:04:28.000000000 -0700 ++++ b/src/usb-glue.c 2019-04-03 15:16:05.000000000 -0700 +@@ -108,9 +108,10 @@ + + void SpiceGlibGlue_InitWindowsEvents() { + +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- startMessageLoop, +- NULL, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, startMessageLoop, NULL, NULL); ++ id = g_source_attach(source, g_spice_glue_context); ++ g_source_unref (source); + } + + static gboolean finalizeMessageWindow() { +@@ -122,9 +123,10 @@ + } + + void SpiceGlibGlue_FinalizeWindowsEvents() { +- g_timeout_add_full(G_PRIORITY_HIGH, 0, +- finalizeMessageWindow, +- NULL, NULL); ++ GSource *source = g_timeout_source_new(0); ++ g_source_set_callback(source, finalizeMessageWindow, NULL, NULL); ++ id = g_source_attach(source, g_spice_glue_context); ++ g_source_unref (source); + } + + #endif