From 6cc885871247a1b3fddcc851a016aadd5ee768f0 Mon Sep 17 00:00:00 2001 From: Zach Nelson Date: Wed, 1 Apr 2026 22:18:34 -0500 Subject: [PATCH] mpv 0.41, ffmpeg 8.1 --- CoreZen.xcodeproj/project.pbxproj | 242 ++------------------- Scripts/dependencies.json | 10 +- Scripts/dependencies.resolved | 118 +++------- Scripts/stage_dependencies.py | 6 + Scripts/update_instructions.md | 25 +-- Scripts/update_project.py | 348 ++++++++++++++++++++++++++++++ 6 files changed, 423 insertions(+), 326 deletions(-) create mode 100755 Scripts/update_project.py diff --git a/CoreZen.xcodeproj/project.pbxproj b/CoreZen.xcodeproj/project.pbxproj index ea4526a..567039d 100644 --- a/CoreZen.xcodeproj/project.pbxproj +++ b/CoreZen.xcodeproj/project.pbxproj @@ -92,13 +92,8 @@ 53965336288F4C37007B53EC /* MPVViewLayer.m in Sources */ = {isa = PBXBuildFile; fileRef = 53965334288F4C37007B53EC /* MPVViewLayer.m */; }; 53965339288F4DF9007B53EC /* MPVFunctions.h in Headers */ = {isa = PBXBuildFile; fileRef = 53965337288F4DF9007B53EC /* MPVFunctions.h */; }; 5396533A288F4DF9007B53EC /* MPVFunctions.m in Sources */ = {isa = PBXBuildFile; fileRef = 53965338288F4DF9007B53EC /* MPVFunctions.m */; }; - F80BE2AEF2C8EEC32FD6C651 /* libSvtAv1Enc.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F137AD0AB27B809F957F3557 /* libSvtAv1Enc.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 27BE367774B38ACAC431583D /* libX11.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = BA4911D62A15BE9DC052C1CF /* libX11.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 6F8BA4D1D4E41C9B62F6ABB4 /* libXau.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 52B243A5C3D4094E9FA018AA /* libXau.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - CB9B1CE4784C84A0D32BE681 /* libXdmcp.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = A899F4AA43828866C3A75CC9 /* libXdmcp.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 571B85092ADB7B8E399FCC3E /* libaom.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 3306F3A976ACDBC74089E87C /* libaom.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + B7469EC717C6056BDA90B36D /* libSvtAv1Enc.4.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 338E9D5510AAABE6BC235106 /* libSvtAv1Enc.4.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; BA20A26B8C40C551059067D4 /* libarchive.13.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = AB8F1509A6B0E4B240D6BC41 /* libarchive.13.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 89D693177C652691C687044E /* libaribb24.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = FED3D1FBE30CA70588B6480A /* libaribb24.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E62E9E0F4B9AB6759A925EF5 /* libass.9.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D8CCCC3230B7A7F73025DD26 /* libass.9.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; AD4A19E043D38D7A9CEA01EA /* libavcodec.62.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = EF263A96A24D42B38FE543A5 /* libavcodec.62.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; A868EEBBA0547A28F39539B7 /* libavdevice.62.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 317E1ADEACD353C968441C7C /* libavdevice.62.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; @@ -107,90 +102,43 @@ 4D4EDB071C70198845FDB320 /* libavutil.60.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 37C6CE60E6FAE7A41E5758F2 /* libavutil.60.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 26E1F15BB14AF82C2D0679F5 /* libb2.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = A7882E7E4453C60E040D6B64 /* libb2.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 4BF3D2E96E7FADF765FDDE81 /* libbluray.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 558D924956380F0B363F451B /* libbluray.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 04139D5AFF1A7ED6943F3DA8 /* libbrotlicommon.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = E7D65ED301C7465B2B5BFC9B /* libbrotlicommon.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 5187A8720C89D2F638839D19 /* libbrotlidec.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 8B5D025EE76D156844D9A080 /* libbrotlidec.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 049DEDC45FA4FEFF62ABDCBB /* libbrotlienc.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 7EDFC8BAA049D116B1FAD1D5 /* libbrotlienc.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 523F83AD33EDBD0F8B1D16C7 /* libcjson.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 662F15D7CC399F5CE0D54BCD /* libcjson.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; C9F8F424F06A6671762550E7 /* libcrypto.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = C95E50CB134EF05D460B43B1 /* libcrypto.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3A43633FA8B2A80C116F797A /* libdav1d.7.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 7276A631DDB98D9BB16C5921 /* libdav1d.7.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 539C0ECF6F97BE9378FACC7C /* libfontconfig.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F2D5B7BBE60A6C8B42039A1C /* libfontconfig.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 406CF8534D3B351E50730519 /* libfreetype.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 040F31699408A12D8A2C1F0E /* libfreetype.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 2ABD75AB8FF400514C682020 /* libfribidi.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = FA21E31BF3290883CCB0B3E8 /* libfribidi.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - F884EF7B0C8475BDAFFD1FF1 /* libgif.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 2E5A2008E2FA936642F5E75B /* libgif.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 4B2A21F9E234AD75FC5F7C3D /* libglib-2.0.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = C8EE8155D3A25E72769459EC /* libglib-2.0.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - C29891A3AE1D0B146243F405 /* libgmp.10.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F3E1A79A0065411705331BFA /* libgmp.10.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 807030C63D405AC7682EFF10 /* libgnutls.30.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = CA58D97FF0EE2C0533ABB580 /* libgnutls.30.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3354010165DA893F0BB7115D /* libgraphite2.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 8829D6A7E4487529C3A95DF1 /* libgraphite2.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 23EEDD0454E18B07D253F589 /* libharfbuzz.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 5093DFE3B9DF4E08334671F6 /* libharfbuzz.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - FAC17CA60E982638A44D884A /* libhogweed.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = B6894320DB688DCD21FD4B8A /* libhogweed.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - A1CF570C427E373FD6E51D81 /* libhwy.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 92C136E1E88D31F2FF0D6B51 /* libhwy.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - C81DF6968AB997B03E2286AA /* libidn2.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = E0C254123A96B4C512E4014A /* libidn2.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 8D14A6A77BC218F5E31EA5D7 /* libintl.8.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 9F8284C506D98C8BEA49C22C /* libintl.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 53603AEB6644F855A8112649 /* libjpeg.8.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 2718E92A551894A3CD57E713 /* libjpeg.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 77158220E26523AE0965E1A6 /* libjxl.0.11.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 5EC6F775DCBDD60160C7177A /* libjxl.0.11.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - D7BCB286F31901B5BEA09AF3 /* libjxl_cms.0.11.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = C077E5A40E899892872F6259 /* libjxl_cms.0.11.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - D95BD36FA0622DBB4CC646EF /* libjxl_threads.0.11.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = BB4D30D277D8A7F56FBA86A1 /* libjxl_threads.0.11.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; BB2BC0984E1D849C7EAF093C /* liblcms2.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = B2B4B8DDC8F549F807EB4EA5 /* liblcms2.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 03012844799FE25A6BC3B3B4 /* libleptonica.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 9D160DA8143256B748ECF027 /* libleptonica.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; BD681C2D48B83BCBB460193A /* libluajit-5.1.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 9A86C23C9E70BE8718FEC2F3 /* libluajit-5.1.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; CD3CD57B2190D166B67A424E /* liblz4.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 81C8F7F7B01E72A7A42D5316 /* liblz4.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; D3DC60A04C49EAB4742AFB56 /* liblzma.5.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 09762B77388EBF709BE940D6 /* liblzma.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 8BD063B56E599257375CB8CA /* libmbedcrypto.16.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = C1741BBAB76AFAB88515F1DA /* libmbedcrypto.16.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 270E539B05793DF35C2EDF13 /* libmp3lame.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = EB9E75D7E3FEAFE17F7CDAD0 /* libmp3lame.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; E953EB1E6E0BADDC6719035E /* libmpv.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 14B85B4A23B3B9E64D362517 /* libmpv.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; EE841BB77B097FDEE2738283 /* libmujs.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = C36670FA055D715D2393FA8A /* libmujs.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 29BD41224B1707F43291C84B /* libnettle.8.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 6E6D14A2BD48867DD17CFBC1 /* libnettle.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - AEB27AA610182C35F825315A /* libogg.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = ABA167FB7439C8D92B973DFC /* libogg.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 21C70BB7AD9147CECEA79585 /* libopencore-amrnb.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = BD75F6700423FFF04BB553F2 /* libopencore-amrnb.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 3639153B9DB1FB198BC29406 /* libopencore-amrwb.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 7228490752F599A6744532D3 /* libopencore-amrwb.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - FD1F4AB72A4FDAD1ABD652DD /* libopenjp2.7.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 7CFFBC666EE571709AB4D070 /* libopenjp2.7.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 2D809E55BAFE1D63B39A25DA /* libopus.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 448A4E64947118B46F10D17F /* libopus.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 6652927C196FC96D64BCE700 /* libp11-kit.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F126B8FF8CF0C83683939698 /* libp11-kit.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 7F65EC8842DA83980C779D29 /* libpcre2-8.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = EBD254FB3709F214A825226B /* libpcre2-8.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 01E616526F47C1944B6C2F89 /* libplacebo.351.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F1A775E7A1A408E91D479B03 /* libplacebo.351.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 9F3E010A250465F9F6EC8239 /* libplacebo.360.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 41D687F79206CAB076403B15 /* libplacebo.360.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 73970E8494F18538EA699D32 /* libpng16.16.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 239F64BDCD187D4AD09FEC2F /* libpng16.16.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 2ECB441E311EE5A8729AAA03 /* libpython3.13.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 544952B30F33CD03152C83FE /* libpython3.13.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 5BAF06C38BA04B5DEC0E4D1D /* librav1e.0.8.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 3AA42C77E4484077D3E1B839 /* librav1e.0.8.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E02101E08241D579073ED647 /* librist.4.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 62C5B213C805B63AFCDFA648 /* librist.4.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + B440D0D934984A492CD95ABD /* libpython3.14.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F6759797AF0D03C2954A965B /* libpython3.14.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3CB62D8D0B6B1FBF04125540 /* librubberband.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = CDB07C829D8D2B6838C57922 /* librubberband.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; EDC8103B8B45EB95DF76F56F /* libsamplerate.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = B064FFFBEBCA652B2CB66B51 /* libsamplerate.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; BB3B92240B221EFE4C6B3C7D /* libshaderc_shared.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D146728623E3CBE4AADA39B8 /* libshaderc_shared.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - A85DA40ECECD29F2A4D9513B /* libsharpyuv.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D33D6EB97469EBF867631E44 /* libsharpyuv.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 00745B72E4FEB9865375E87A /* libsnappy.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 6121DFCC2BD21900B334CD63 /* libsnappy.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - DB62BBABCD1E995FC88FE2BA /* libsodium.26.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 06F02668BEC536ECB4CCD8D0 /* libsodium.26.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 5B6545209C00F1FABFB43AEF /* libsoxr.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 070A1C3C43B9CBB4B8DB5696 /* libsoxr.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 1C28BCA0A315E0B364846351 /* libspeex.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = CE03153969FF82FD5E990289 /* libspeex.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 996A03D7C66A6CA420ABDEB9 /* libsrt.1.5.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D35917A11AB6372B43DC1626 /* libsrt.1.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 3FE01942B175D5679443EC9F /* libssh.4.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = FCE7B88D4799ED8624D4A00E /* libssh.4.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; EC2C9951189F94E8A89C4080 /* libssl.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = E017074AEE7D3439B591A567 /* libssl.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3B5052CD4B37BED285D9CE38 /* libswresample.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = AA6A3E41F070F344B4F25471 /* libswresample.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 5BE0AB6F3991BC525EDA6C13 /* libswscale.9.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = AF2CEA40DF73E47475E7F86E /* libswscale.9.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E072F9E9A4E1B59E252D92E6 /* libtasn1.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = A6CDA5613CD3AD8E0BBB97DA /* libtasn1.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 502B2EBC87AB77089A95D134 /* libtesseract.5.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 66189F41EB2B42565BB84164 /* libtesseract.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - B9F2DA5C315D460D3673E662 /* libtheoradec.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = E772C609FA934D579C599EA0 /* libtheoradec.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 1575291007D45E38C06903D8 /* libtheoraenc.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 791FEB0D426A020F3037ACEC /* libtheoraenc.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 625209E6D065D1DD2633DFC1 /* libtiff.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 185C701C06DF01749E4384CA /* libtiff.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; DA2A7ED2F760B2178EA63A4B /* libuchardet.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 6C3B961E760820A64A424EF2 /* libuchardet.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 6E330B78601F103FECE00BE3 /* libudfread.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 008644D49FA12345FEA40FE3 /* libudfread.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; BE0CF1B0CD971C24B90881BD /* libunibreak.6.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = E793268C652F57A2451389D0 /* libunibreak.6.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - CC6914F7040D32083AAAA2A5 /* libunistring.5.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 2F70F1D0FC6118D1C1EB7E8D /* libunistring.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 0253042E2970F6314008B119 /* libvapoursynth-script.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = B2566009925B716DE6951B93 /* libvapoursynth-script.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 97194483A7C69C2C3FE4536E /* libvidstab.1.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 478A24D89854ADBAE1381181 /* libvidstab.1.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 9D6D9C0C43B870C9FFE141BE /* libvmaf.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 2EE9A9B2351D092CC6C313B5 /* libvmaf.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 628FA5E0E0029CF4B011942F /* libvorbis.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 5C39F30B49153D8D9D590B13 /* libvorbis.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - E570205EEBA2B4C120E652E7 /* libvorbisenc.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F00122B3E0A8F2F3F2787DA2 /* libvorbisenc.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 359B4F1EF284847FAB34B5E8 /* libvpx.11.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 8D0D7E448DB9EED4D2EA377A /* libvpx.11.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; + 016708AFB5A999779C0E330D /* libvpx.12.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D6D6F129DF5853D59560E10D /* libvpx.12.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 3BE67238C6BEAFD1770EF96A /* libvulkan.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 8CF10774A5FFF3CBFAD1868B /* libvulkan.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 4C0B25C5C44DCAA5763A5939 /* libwebp.7.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = B2DEF1433610F13F23BF519A /* libwebp.7.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - F0D8D52D3D11ADB780BC234E /* libwebpmux.3.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 52C1F81DCC4020B26A9B4EB4 /* libwebpmux.3.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 9026263BC17D155F489BB40C /* libx264.165.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 26C02C65F0F802BE03FE3608 /* libx264.165.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; A1E0558CCA3EFE24A55657D7 /* libx265.215.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = EBC0B79CB6ECA79084B59103 /* libx265.215.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 6113B643B12F0885BABB6F0C /* libxcb-shape.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F6D26FC6DF9369FA8D893CC8 /* libxcb-shape.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - C5732552F8AD0BE6C981BE6A /* libxcb-shm.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 5CDC9234B0C883DE27665E68 /* libxcb-shm.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - 3DA283A77C12D03E0F9F5435 /* libxcb-xfixes.0.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 85F241A72D1BF40DFAF7A93F /* libxcb-xfixes.0.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - FB7EC17360422A11B3CB42DB /* libxcb.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 37A58137DFD69CE198FC4A3D /* libxcb.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 23D61C02218C9885E5CEEE8A /* libzimg.2.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = D5DEE2FBBB900B720BE77B38 /* libzimg.2.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; - B826ABDF38900AA9358E28DB /* libzmq.5.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = F7528A1610B080B04FF63A40 /* libzmq.5.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; C5E59B78D94ED061BD0A658A /* libzstd.1.dylib in Copy Files */ = {isa = PBXBuildFile; fileRef = 82ACAB494FEC48D34BB37B7D /* libzstd.1.dylib */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; }; 40F56EAA422F6F2436ED73C3 /* libavcodec.62.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = EF263A96A24D42B38FE543A5 /* libavcodec.62.dylib */; }; 98A1ABAD38237E9A8C7F1F69 /* libavformat.62.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 3C11BCEEBD27DE0763C6BB89 /* libavformat.62.dylib */; }; @@ -216,13 +164,8 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - F80BE2AEF2C8EEC32FD6C651 /* libSvtAv1Enc.3.dylib in Copy Files */, - 27BE367774B38ACAC431583D /* libX11.6.dylib in Copy Files */, - 6F8BA4D1D4E41C9B62F6ABB4 /* libXau.6.dylib in Copy Files */, - CB9B1CE4784C84A0D32BE681 /* libXdmcp.6.dylib in Copy Files */, - 571B85092ADB7B8E399FCC3E /* libaom.3.dylib in Copy Files */, + B7469EC717C6056BDA90B36D /* libSvtAv1Enc.4.dylib in Copy Files */, BA20A26B8C40C551059067D4 /* libarchive.13.dylib in Copy Files */, - 89D693177C652691C687044E /* libaribb24.0.dylib in Copy Files */, E62E9E0F4B9AB6759A925EF5 /* libass.9.dylib in Copy Files */, AD4A19E043D38D7A9CEA01EA /* libavcodec.62.dylib in Copy Files */, A868EEBBA0547A28F39539B7 /* libavdevice.62.dylib in Copy Files */, @@ -231,90 +174,43 @@ 4D4EDB071C70198845FDB320 /* libavutil.60.dylib in Copy Files */, 26E1F15BB14AF82C2D0679F5 /* libb2.1.dylib in Copy Files */, 4BF3D2E96E7FADF765FDDE81 /* libbluray.3.dylib in Copy Files */, - 04139D5AFF1A7ED6943F3DA8 /* libbrotlicommon.1.dylib in Copy Files */, - 5187A8720C89D2F638839D19 /* libbrotlidec.1.dylib in Copy Files */, - 049DEDC45FA4FEFF62ABDCBB /* libbrotlienc.1.dylib in Copy Files */, - 523F83AD33EDBD0F8B1D16C7 /* libcjson.1.dylib in Copy Files */, C9F8F424F06A6671762550E7 /* libcrypto.3.dylib in Copy Files */, 3A43633FA8B2A80C116F797A /* libdav1d.7.dylib in Copy Files */, 539C0ECF6F97BE9378FACC7C /* libfontconfig.1.dylib in Copy Files */, 406CF8534D3B351E50730519 /* libfreetype.6.dylib in Copy Files */, 2ABD75AB8FF400514C682020 /* libfribidi.0.dylib in Copy Files */, - F884EF7B0C8475BDAFFD1FF1 /* libgif.dylib in Copy Files */, 4B2A21F9E234AD75FC5F7C3D /* libglib-2.0.0.dylib in Copy Files */, - C29891A3AE1D0B146243F405 /* libgmp.10.dylib in Copy Files */, - 807030C63D405AC7682EFF10 /* libgnutls.30.dylib in Copy Files */, 3354010165DA893F0BB7115D /* libgraphite2.3.dylib in Copy Files */, 23EEDD0454E18B07D253F589 /* libharfbuzz.0.dylib in Copy Files */, - FAC17CA60E982638A44D884A /* libhogweed.6.dylib in Copy Files */, - A1CF570C427E373FD6E51D81 /* libhwy.1.dylib in Copy Files */, - C81DF6968AB997B03E2286AA /* libidn2.0.dylib in Copy Files */, 8D14A6A77BC218F5E31EA5D7 /* libintl.8.dylib in Copy Files */, 53603AEB6644F855A8112649 /* libjpeg.8.dylib in Copy Files */, - 77158220E26523AE0965E1A6 /* libjxl.0.11.dylib in Copy Files */, - D7BCB286F31901B5BEA09AF3 /* libjxl_cms.0.11.dylib in Copy Files */, - D95BD36FA0622DBB4CC646EF /* libjxl_threads.0.11.dylib in Copy Files */, BB2BC0984E1D849C7EAF093C /* liblcms2.2.dylib in Copy Files */, - 03012844799FE25A6BC3B3B4 /* libleptonica.6.dylib in Copy Files */, BD681C2D48B83BCBB460193A /* libluajit-5.1.2.dylib in Copy Files */, CD3CD57B2190D166B67A424E /* liblz4.1.dylib in Copy Files */, D3DC60A04C49EAB4742AFB56 /* liblzma.5.dylib in Copy Files */, - 8BD063B56E599257375CB8CA /* libmbedcrypto.16.dylib in Copy Files */, 270E539B05793DF35C2EDF13 /* libmp3lame.0.dylib in Copy Files */, E953EB1E6E0BADDC6719035E /* libmpv.2.dylib in Copy Files */, EE841BB77B097FDEE2738283 /* libmujs.dylib in Copy Files */, - 29BD41224B1707F43291C84B /* libnettle.8.dylib in Copy Files */, - AEB27AA610182C35F825315A /* libogg.0.dylib in Copy Files */, - 21C70BB7AD9147CECEA79585 /* libopencore-amrnb.0.dylib in Copy Files */, - 3639153B9DB1FB198BC29406 /* libopencore-amrwb.0.dylib in Copy Files */, - FD1F4AB72A4FDAD1ABD652DD /* libopenjp2.7.dylib in Copy Files */, 2D809E55BAFE1D63B39A25DA /* libopus.0.dylib in Copy Files */, - 6652927C196FC96D64BCE700 /* libp11-kit.0.dylib in Copy Files */, 7F65EC8842DA83980C779D29 /* libpcre2-8.0.dylib in Copy Files */, - 01E616526F47C1944B6C2F89 /* libplacebo.351.dylib in Copy Files */, + 9F3E010A250465F9F6EC8239 /* libplacebo.360.dylib in Copy Files */, 73970E8494F18538EA699D32 /* libpng16.16.dylib in Copy Files */, - 2ECB441E311EE5A8729AAA03 /* libpython3.13.dylib in Copy Files */, - 5BAF06C38BA04B5DEC0E4D1D /* librav1e.0.8.dylib in Copy Files */, - E02101E08241D579073ED647 /* librist.4.dylib in Copy Files */, + B440D0D934984A492CD95ABD /* libpython3.14.dylib in Copy Files */, 3CB62D8D0B6B1FBF04125540 /* librubberband.3.dylib in Copy Files */, EDC8103B8B45EB95DF76F56F /* libsamplerate.0.dylib in Copy Files */, BB3B92240B221EFE4C6B3C7D /* libshaderc_shared.1.dylib in Copy Files */, - A85DA40ECECD29F2A4D9513B /* libsharpyuv.0.dylib in Copy Files */, - 00745B72E4FEB9865375E87A /* libsnappy.1.dylib in Copy Files */, - DB62BBABCD1E995FC88FE2BA /* libsodium.26.dylib in Copy Files */, - 5B6545209C00F1FABFB43AEF /* libsoxr.0.dylib in Copy Files */, - 1C28BCA0A315E0B364846351 /* libspeex.1.dylib in Copy Files */, - 996A03D7C66A6CA420ABDEB9 /* libsrt.1.5.dylib in Copy Files */, - 3FE01942B175D5679443EC9F /* libssh.4.dylib in Copy Files */, EC2C9951189F94E8A89C4080 /* libssl.3.dylib in Copy Files */, 3B5052CD4B37BED285D9CE38 /* libswresample.6.dylib in Copy Files */, 5BE0AB6F3991BC525EDA6C13 /* libswscale.9.dylib in Copy Files */, - E072F9E9A4E1B59E252D92E6 /* libtasn1.6.dylib in Copy Files */, - 502B2EBC87AB77089A95D134 /* libtesseract.5.dylib in Copy Files */, - B9F2DA5C315D460D3673E662 /* libtheoradec.2.dylib in Copy Files */, - 1575291007D45E38C06903D8 /* libtheoraenc.2.dylib in Copy Files */, - 625209E6D065D1DD2633DFC1 /* libtiff.6.dylib in Copy Files */, DA2A7ED2F760B2178EA63A4B /* libuchardet.0.dylib in Copy Files */, 6E330B78601F103FECE00BE3 /* libudfread.3.dylib in Copy Files */, BE0CF1B0CD971C24B90881BD /* libunibreak.6.dylib in Copy Files */, - CC6914F7040D32083AAAA2A5 /* libunistring.5.dylib in Copy Files */, 0253042E2970F6314008B119 /* libvapoursynth-script.0.dylib in Copy Files */, - 97194483A7C69C2C3FE4536E /* libvidstab.1.2.dylib in Copy Files */, - 9D6D9C0C43B870C9FFE141BE /* libvmaf.3.dylib in Copy Files */, - 628FA5E0E0029CF4B011942F /* libvorbis.0.dylib in Copy Files */, - E570205EEBA2B4C120E652E7 /* libvorbisenc.2.dylib in Copy Files */, - 359B4F1EF284847FAB34B5E8 /* libvpx.11.dylib in Copy Files */, + 016708AFB5A999779C0E330D /* libvpx.12.dylib in Copy Files */, 3BE67238C6BEAFD1770EF96A /* libvulkan.1.dylib in Copy Files */, - 4C0B25C5C44DCAA5763A5939 /* libwebp.7.dylib in Copy Files */, - F0D8D52D3D11ADB780BC234E /* libwebpmux.3.dylib in Copy Files */, 9026263BC17D155F489BB40C /* libx264.165.dylib in Copy Files */, A1E0558CCA3EFE24A55657D7 /* libx265.215.dylib in Copy Files */, - 6113B643B12F0885BABB6F0C /* libxcb-shape.0.dylib in Copy Files */, - C5732552F8AD0BE6C981BE6A /* libxcb-shm.0.dylib in Copy Files */, - 3DA283A77C12D03E0F9F5435 /* libxcb-xfixes.0.dylib in Copy Files */, - FB7EC17360422A11B3CB42DB /* libxcb.1.dylib in Copy Files */, 23D61C02218C9885E5CEEE8A /* libzimg.2.dylib in Copy Files */, - B826ABDF38900AA9358E28DB /* libzmq.5.dylib in Copy Files */, C5E59B78D94ED061BD0A658A /* libzstd.1.dylib in Copy Files */, 5350F8BB2886179200F8CA68 /* FMDB.framework in Copy Files */, ); @@ -411,13 +307,8 @@ 53965334288F4C37007B53EC /* MPVViewLayer.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPVViewLayer.m; sourceTree = ""; }; 53965337288F4DF9007B53EC /* MPVFunctions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MPVFunctions.h; sourceTree = ""; }; 53965338288F4DF9007B53EC /* MPVFunctions.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MPVFunctions.m; sourceTree = ""; }; - F137AD0AB27B809F957F3557 /* libSvtAv1Enc.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libSvtAv1Enc.3.dylib"; sourceTree = ""; }; - BA4911D62A15BE9DC052C1CF /* libX11.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libX11.6.dylib"; sourceTree = ""; }; - 52B243A5C3D4094E9FA018AA /* libXau.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libXau.6.dylib"; sourceTree = ""; }; - A899F4AA43828866C3A75CC9 /* libXdmcp.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libXdmcp.6.dylib"; sourceTree = ""; }; - 3306F3A976ACDBC74089E87C /* libaom.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libaom.3.dylib"; sourceTree = ""; }; + 338E9D5510AAABE6BC235106 /* libSvtAv1Enc.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libSvtAv1Enc.4.dylib"; sourceTree = ""; }; AB8F1509A6B0E4B240D6BC41 /* libarchive.13.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libarchive.13.dylib"; sourceTree = ""; }; - FED3D1FBE30CA70588B6480A /* libaribb24.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libaribb24.0.dylib"; sourceTree = ""; }; D8CCCC3230B7A7F73025DD26 /* libass.9.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libass.9.dylib"; sourceTree = ""; }; EF263A96A24D42B38FE543A5 /* libavcodec.62.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libavcodec.62.dylib"; sourceTree = ""; }; 317E1ADEACD353C968441C7C /* libavdevice.62.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libavdevice.62.dylib"; sourceTree = ""; }; @@ -426,90 +317,43 @@ 37C6CE60E6FAE7A41E5758F2 /* libavutil.60.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libavutil.60.dylib"; sourceTree = ""; }; A7882E7E4453C60E040D6B64 /* libb2.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libb2.1.dylib"; sourceTree = ""; }; 558D924956380F0B363F451B /* libbluray.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libbluray.3.dylib"; sourceTree = ""; }; - E7D65ED301C7465B2B5BFC9B /* libbrotlicommon.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libbrotlicommon.1.dylib"; sourceTree = ""; }; - 8B5D025EE76D156844D9A080 /* libbrotlidec.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libbrotlidec.1.dylib"; sourceTree = ""; }; - 7EDFC8BAA049D116B1FAD1D5 /* libbrotlienc.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libbrotlienc.1.dylib"; sourceTree = ""; }; - 662F15D7CC399F5CE0D54BCD /* libcjson.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libcjson.1.dylib"; sourceTree = ""; }; C95E50CB134EF05D460B43B1 /* libcrypto.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libcrypto.3.dylib"; sourceTree = ""; }; 7276A631DDB98D9BB16C5921 /* libdav1d.7.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libdav1d.7.dylib"; sourceTree = ""; }; F2D5B7BBE60A6C8B42039A1C /* libfontconfig.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libfontconfig.1.dylib"; sourceTree = ""; }; 040F31699408A12D8A2C1F0E /* libfreetype.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libfreetype.6.dylib"; sourceTree = ""; }; FA21E31BF3290883CCB0B3E8 /* libfribidi.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libfribidi.0.dylib"; sourceTree = ""; }; - 2E5A2008E2FA936642F5E75B /* libgif.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libgif.dylib"; sourceTree = ""; }; C8EE8155D3A25E72769459EC /* libglib-2.0.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libglib-2.0.0.dylib"; sourceTree = ""; }; - F3E1A79A0065411705331BFA /* libgmp.10.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libgmp.10.dylib"; sourceTree = ""; }; - CA58D97FF0EE2C0533ABB580 /* libgnutls.30.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libgnutls.30.dylib"; sourceTree = ""; }; 8829D6A7E4487529C3A95DF1 /* libgraphite2.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libgraphite2.3.dylib"; sourceTree = ""; }; 5093DFE3B9DF4E08334671F6 /* libharfbuzz.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libharfbuzz.0.dylib"; sourceTree = ""; }; - B6894320DB688DCD21FD4B8A /* libhogweed.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libhogweed.6.dylib"; sourceTree = ""; }; - 92C136E1E88D31F2FF0D6B51 /* libhwy.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libhwy.1.dylib"; sourceTree = ""; }; - E0C254123A96B4C512E4014A /* libidn2.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libidn2.0.dylib"; sourceTree = ""; }; 9F8284C506D98C8BEA49C22C /* libintl.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libintl.8.dylib"; sourceTree = ""; }; 2718E92A551894A3CD57E713 /* libjpeg.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libjpeg.8.dylib"; sourceTree = ""; }; - 5EC6F775DCBDD60160C7177A /* libjxl.0.11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libjxl.0.11.dylib"; sourceTree = ""; }; - C077E5A40E899892872F6259 /* libjxl_cms.0.11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libjxl_cms.0.11.dylib"; sourceTree = ""; }; - BB4D30D277D8A7F56FBA86A1 /* libjxl_threads.0.11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libjxl_threads.0.11.dylib"; sourceTree = ""; }; B2B4B8DDC8F549F807EB4EA5 /* liblcms2.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "liblcms2.2.dylib"; sourceTree = ""; }; - 9D160DA8143256B748ECF027 /* libleptonica.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libleptonica.6.dylib"; sourceTree = ""; }; 9A86C23C9E70BE8718FEC2F3 /* libluajit-5.1.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libluajit-5.1.2.dylib"; sourceTree = ""; }; 81C8F7F7B01E72A7A42D5316 /* liblz4.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "liblz4.1.dylib"; sourceTree = ""; }; 09762B77388EBF709BE940D6 /* liblzma.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "liblzma.5.dylib"; sourceTree = ""; }; - C1741BBAB76AFAB88515F1DA /* libmbedcrypto.16.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libmbedcrypto.16.dylib"; sourceTree = ""; }; EB9E75D7E3FEAFE17F7CDAD0 /* libmp3lame.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libmp3lame.0.dylib"; sourceTree = ""; }; 14B85B4A23B3B9E64D362517 /* libmpv.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libmpv.2.dylib"; sourceTree = ""; }; C36670FA055D715D2393FA8A /* libmujs.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libmujs.dylib"; sourceTree = ""; }; - 6E6D14A2BD48867DD17CFBC1 /* libnettle.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libnettle.8.dylib"; sourceTree = ""; }; - ABA167FB7439C8D92B973DFC /* libogg.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libogg.0.dylib"; sourceTree = ""; }; - BD75F6700423FFF04BB553F2 /* libopencore-amrnb.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libopencore-amrnb.0.dylib"; sourceTree = ""; }; - 7228490752F599A6744532D3 /* libopencore-amrwb.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libopencore-amrwb.0.dylib"; sourceTree = ""; }; - 7CFFBC666EE571709AB4D070 /* libopenjp2.7.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libopenjp2.7.dylib"; sourceTree = ""; }; 448A4E64947118B46F10D17F /* libopus.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libopus.0.dylib"; sourceTree = ""; }; - F126B8FF8CF0C83683939698 /* libp11-kit.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libp11-kit.0.dylib"; sourceTree = ""; }; EBD254FB3709F214A825226B /* libpcre2-8.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libpcre2-8.0.dylib"; sourceTree = ""; }; - F1A775E7A1A408E91D479B03 /* libplacebo.351.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libplacebo.351.dylib"; sourceTree = ""; }; + 41D687F79206CAB076403B15 /* libplacebo.360.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libplacebo.360.dylib"; sourceTree = ""; }; 239F64BDCD187D4AD09FEC2F /* libpng16.16.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libpng16.16.dylib"; sourceTree = ""; }; - 544952B30F33CD03152C83FE /* libpython3.13.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libpython3.13.dylib"; sourceTree = ""; }; - 3AA42C77E4484077D3E1B839 /* librav1e.0.8.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "librav1e.0.8.dylib"; sourceTree = ""; }; - 62C5B213C805B63AFCDFA648 /* librist.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "librist.4.dylib"; sourceTree = ""; }; + F6759797AF0D03C2954A965B /* libpython3.14.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libpython3.14.dylib"; sourceTree = ""; }; CDB07C829D8D2B6838C57922 /* librubberband.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "librubberband.3.dylib"; sourceTree = ""; }; B064FFFBEBCA652B2CB66B51 /* libsamplerate.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsamplerate.0.dylib"; sourceTree = ""; }; D146728623E3CBE4AADA39B8 /* libshaderc_shared.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libshaderc_shared.1.dylib"; sourceTree = ""; }; - D33D6EB97469EBF867631E44 /* libsharpyuv.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsharpyuv.0.dylib"; sourceTree = ""; }; - 6121DFCC2BD21900B334CD63 /* libsnappy.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsnappy.1.dylib"; sourceTree = ""; }; - 06F02668BEC536ECB4CCD8D0 /* libsodium.26.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsodium.26.dylib"; sourceTree = ""; }; - 070A1C3C43B9CBB4B8DB5696 /* libsoxr.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsoxr.0.dylib"; sourceTree = ""; }; - CE03153969FF82FD5E990289 /* libspeex.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libspeex.1.dylib"; sourceTree = ""; }; - D35917A11AB6372B43DC1626 /* libsrt.1.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libsrt.1.5.dylib"; sourceTree = ""; }; - FCE7B88D4799ED8624D4A00E /* libssh.4.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libssh.4.dylib"; sourceTree = ""; }; E017074AEE7D3439B591A567 /* libssl.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libssl.3.dylib"; sourceTree = ""; }; AA6A3E41F070F344B4F25471 /* libswresample.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libswresample.6.dylib"; sourceTree = ""; }; AF2CEA40DF73E47475E7F86E /* libswscale.9.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libswscale.9.dylib"; sourceTree = ""; }; - A6CDA5613CD3AD8E0BBB97DA /* libtasn1.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libtasn1.6.dylib"; sourceTree = ""; }; - 66189F41EB2B42565BB84164 /* libtesseract.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libtesseract.5.dylib"; sourceTree = ""; }; - E772C609FA934D579C599EA0 /* libtheoradec.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libtheoradec.2.dylib"; sourceTree = ""; }; - 791FEB0D426A020F3037ACEC /* libtheoraenc.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libtheoraenc.2.dylib"; sourceTree = ""; }; - 185C701C06DF01749E4384CA /* libtiff.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libtiff.6.dylib"; sourceTree = ""; }; 6C3B961E760820A64A424EF2 /* libuchardet.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libuchardet.0.dylib"; sourceTree = ""; }; 008644D49FA12345FEA40FE3 /* libudfread.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libudfread.3.dylib"; sourceTree = ""; }; E793268C652F57A2451389D0 /* libunibreak.6.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libunibreak.6.dylib"; sourceTree = ""; }; - 2F70F1D0FC6118D1C1EB7E8D /* libunistring.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libunistring.5.dylib"; sourceTree = ""; }; B2566009925B716DE6951B93 /* libvapoursynth-script.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvapoursynth-script.0.dylib"; sourceTree = ""; }; - 478A24D89854ADBAE1381181 /* libvidstab.1.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvidstab.1.2.dylib"; sourceTree = ""; }; - 2EE9A9B2351D092CC6C313B5 /* libvmaf.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvmaf.3.dylib"; sourceTree = ""; }; - 5C39F30B49153D8D9D590B13 /* libvorbis.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvorbis.0.dylib"; sourceTree = ""; }; - F00122B3E0A8F2F3F2787DA2 /* libvorbisenc.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvorbisenc.2.dylib"; sourceTree = ""; }; - 8D0D7E448DB9EED4D2EA377A /* libvpx.11.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvpx.11.dylib"; sourceTree = ""; }; + D6D6F129DF5853D59560E10D /* libvpx.12.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvpx.12.dylib"; sourceTree = ""; }; 8CF10774A5FFF3CBFAD1868B /* libvulkan.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libvulkan.1.dylib"; sourceTree = ""; }; - B2DEF1433610F13F23BF519A /* libwebp.7.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libwebp.7.dylib"; sourceTree = ""; }; - 52C1F81DCC4020B26A9B4EB4 /* libwebpmux.3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libwebpmux.3.dylib"; sourceTree = ""; }; 26C02C65F0F802BE03FE3608 /* libx264.165.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libx264.165.dylib"; sourceTree = ""; }; EBC0B79CB6ECA79084B59103 /* libx265.215.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libx265.215.dylib"; sourceTree = ""; }; - F6D26FC6DF9369FA8D893CC8 /* libxcb-shape.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libxcb-shape.0.dylib"; sourceTree = ""; }; - 5CDC9234B0C883DE27665E68 /* libxcb-shm.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libxcb-shm.0.dylib"; sourceTree = ""; }; - 85F241A72D1BF40DFAF7A93F /* libxcb-xfixes.0.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libxcb-xfixes.0.dylib"; sourceTree = ""; }; - 37A58137DFD69CE198FC4A3D /* libxcb.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libxcb.1.dylib"; sourceTree = ""; }; D5DEE2FBBB900B720BE77B38 /* libzimg.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libzimg.2.dylib"; sourceTree = ""; }; - F7528A1610B080B04FF63A40 /* libzmq.5.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libzmq.5.dylib"; sourceTree = ""; }; 82ACAB494FEC48D34BB37B7D /* libzstd.1.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; path = "libzstd.1.dylib"; sourceTree = ""; }; D298B2692E08BB1DA0768843 /* ac3_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ac3_parser.h; sourceTree = ""; }; 9D6DBB6D66FFE70045011021 /* adts_parser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = adts_parser.h; sourceTree = ""; }; @@ -525,6 +369,7 @@ 1FC65B7A60754FDCAB2ACDC4 /* dirac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dirac.h; sourceTree = ""; }; D588E439D111ED70887341AE /* dv_profile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dv_profile.h; sourceTree = ""; }; FAE6D9624C6946175D65F35C /* dxva2.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dxva2.h; sourceTree = ""; }; + 6B588140202F9D1782199B22 /* exif.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = exif.h; sourceTree = ""; }; 8DE2B3DBAA395F3C23ECCED9 /* jni.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jni.h; sourceTree = ""; }; 297D9B2ADF57E1A8EA9EF36C /* mediacodec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = mediacodec.h; sourceTree = ""; }; 12D8334F84E597925380D4AD /* packet.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = packet.h; sourceTree = ""; }; @@ -966,13 +811,8 @@ 53D4B6342B51E38E00B91FA0 /* lib */ = { isa = PBXGroup; children = ( - F137AD0AB27B809F957F3557 /* libSvtAv1Enc.3.dylib */, - BA4911D62A15BE9DC052C1CF /* libX11.6.dylib */, - 52B243A5C3D4094E9FA018AA /* libXau.6.dylib */, - A899F4AA43828866C3A75CC9 /* libXdmcp.6.dylib */, - 3306F3A976ACDBC74089E87C /* libaom.3.dylib */, + 338E9D5510AAABE6BC235106 /* libSvtAv1Enc.4.dylib */, AB8F1509A6B0E4B240D6BC41 /* libarchive.13.dylib */, - FED3D1FBE30CA70588B6480A /* libaribb24.0.dylib */, D8CCCC3230B7A7F73025DD26 /* libass.9.dylib */, EF263A96A24D42B38FE543A5 /* libavcodec.62.dylib */, 317E1ADEACD353C968441C7C /* libavdevice.62.dylib */, @@ -981,90 +821,43 @@ 37C6CE60E6FAE7A41E5758F2 /* libavutil.60.dylib */, A7882E7E4453C60E040D6B64 /* libb2.1.dylib */, 558D924956380F0B363F451B /* libbluray.3.dylib */, - E7D65ED301C7465B2B5BFC9B /* libbrotlicommon.1.dylib */, - 8B5D025EE76D156844D9A080 /* libbrotlidec.1.dylib */, - 7EDFC8BAA049D116B1FAD1D5 /* libbrotlienc.1.dylib */, - 662F15D7CC399F5CE0D54BCD /* libcjson.1.dylib */, C95E50CB134EF05D460B43B1 /* libcrypto.3.dylib */, 7276A631DDB98D9BB16C5921 /* libdav1d.7.dylib */, F2D5B7BBE60A6C8B42039A1C /* libfontconfig.1.dylib */, 040F31699408A12D8A2C1F0E /* libfreetype.6.dylib */, FA21E31BF3290883CCB0B3E8 /* libfribidi.0.dylib */, - 2E5A2008E2FA936642F5E75B /* libgif.dylib */, C8EE8155D3A25E72769459EC /* libglib-2.0.0.dylib */, - F3E1A79A0065411705331BFA /* libgmp.10.dylib */, - CA58D97FF0EE2C0533ABB580 /* libgnutls.30.dylib */, 8829D6A7E4487529C3A95DF1 /* libgraphite2.3.dylib */, 5093DFE3B9DF4E08334671F6 /* libharfbuzz.0.dylib */, - B6894320DB688DCD21FD4B8A /* libhogweed.6.dylib */, - 92C136E1E88D31F2FF0D6B51 /* libhwy.1.dylib */, - E0C254123A96B4C512E4014A /* libidn2.0.dylib */, 9F8284C506D98C8BEA49C22C /* libintl.8.dylib */, 2718E92A551894A3CD57E713 /* libjpeg.8.dylib */, - 5EC6F775DCBDD60160C7177A /* libjxl.0.11.dylib */, - C077E5A40E899892872F6259 /* libjxl_cms.0.11.dylib */, - BB4D30D277D8A7F56FBA86A1 /* libjxl_threads.0.11.dylib */, B2B4B8DDC8F549F807EB4EA5 /* liblcms2.2.dylib */, - 9D160DA8143256B748ECF027 /* libleptonica.6.dylib */, 9A86C23C9E70BE8718FEC2F3 /* libluajit-5.1.2.dylib */, 81C8F7F7B01E72A7A42D5316 /* liblz4.1.dylib */, 09762B77388EBF709BE940D6 /* liblzma.5.dylib */, - C1741BBAB76AFAB88515F1DA /* libmbedcrypto.16.dylib */, EB9E75D7E3FEAFE17F7CDAD0 /* libmp3lame.0.dylib */, 14B85B4A23B3B9E64D362517 /* libmpv.2.dylib */, C36670FA055D715D2393FA8A /* libmujs.dylib */, - 6E6D14A2BD48867DD17CFBC1 /* libnettle.8.dylib */, - ABA167FB7439C8D92B973DFC /* libogg.0.dylib */, - BD75F6700423FFF04BB553F2 /* libopencore-amrnb.0.dylib */, - 7228490752F599A6744532D3 /* libopencore-amrwb.0.dylib */, - 7CFFBC666EE571709AB4D070 /* libopenjp2.7.dylib */, 448A4E64947118B46F10D17F /* libopus.0.dylib */, - F126B8FF8CF0C83683939698 /* libp11-kit.0.dylib */, EBD254FB3709F214A825226B /* libpcre2-8.0.dylib */, - F1A775E7A1A408E91D479B03 /* libplacebo.351.dylib */, + 41D687F79206CAB076403B15 /* libplacebo.360.dylib */, 239F64BDCD187D4AD09FEC2F /* libpng16.16.dylib */, - 544952B30F33CD03152C83FE /* libpython3.13.dylib */, - 3AA42C77E4484077D3E1B839 /* librav1e.0.8.dylib */, - 62C5B213C805B63AFCDFA648 /* librist.4.dylib */, + F6759797AF0D03C2954A965B /* libpython3.14.dylib */, CDB07C829D8D2B6838C57922 /* librubberband.3.dylib */, B064FFFBEBCA652B2CB66B51 /* libsamplerate.0.dylib */, D146728623E3CBE4AADA39B8 /* libshaderc_shared.1.dylib */, - D33D6EB97469EBF867631E44 /* libsharpyuv.0.dylib */, - 6121DFCC2BD21900B334CD63 /* libsnappy.1.dylib */, - 06F02668BEC536ECB4CCD8D0 /* libsodium.26.dylib */, - 070A1C3C43B9CBB4B8DB5696 /* libsoxr.0.dylib */, - CE03153969FF82FD5E990289 /* libspeex.1.dylib */, - D35917A11AB6372B43DC1626 /* libsrt.1.5.dylib */, - FCE7B88D4799ED8624D4A00E /* libssh.4.dylib */, E017074AEE7D3439B591A567 /* libssl.3.dylib */, AA6A3E41F070F344B4F25471 /* libswresample.6.dylib */, AF2CEA40DF73E47475E7F86E /* libswscale.9.dylib */, - A6CDA5613CD3AD8E0BBB97DA /* libtasn1.6.dylib */, - 66189F41EB2B42565BB84164 /* libtesseract.5.dylib */, - E772C609FA934D579C599EA0 /* libtheoradec.2.dylib */, - 791FEB0D426A020F3037ACEC /* libtheoraenc.2.dylib */, - 185C701C06DF01749E4384CA /* libtiff.6.dylib */, 6C3B961E760820A64A424EF2 /* libuchardet.0.dylib */, 008644D49FA12345FEA40FE3 /* libudfread.3.dylib */, E793268C652F57A2451389D0 /* libunibreak.6.dylib */, - 2F70F1D0FC6118D1C1EB7E8D /* libunistring.5.dylib */, B2566009925B716DE6951B93 /* libvapoursynth-script.0.dylib */, - 478A24D89854ADBAE1381181 /* libvidstab.1.2.dylib */, - 2EE9A9B2351D092CC6C313B5 /* libvmaf.3.dylib */, - 5C39F30B49153D8D9D590B13 /* libvorbis.0.dylib */, - F00122B3E0A8F2F3F2787DA2 /* libvorbisenc.2.dylib */, - 8D0D7E448DB9EED4D2EA377A /* libvpx.11.dylib */, + D6D6F129DF5853D59560E10D /* libvpx.12.dylib */, 8CF10774A5FFF3CBFAD1868B /* libvulkan.1.dylib */, - B2DEF1433610F13F23BF519A /* libwebp.7.dylib */, - 52C1F81DCC4020B26A9B4EB4 /* libwebpmux.3.dylib */, 26C02C65F0F802BE03FE3608 /* libx264.165.dylib */, EBC0B79CB6ECA79084B59103 /* libx265.215.dylib */, - F6D26FC6DF9369FA8D893CC8 /* libxcb-shape.0.dylib */, - 5CDC9234B0C883DE27665E68 /* libxcb-shm.0.dylib */, - 85F241A72D1BF40DFAF7A93F /* libxcb-xfixes.0.dylib */, - 37A58137DFD69CE198FC4A3D /* libxcb.1.dylib */, D5DEE2FBBB900B720BE77B38 /* libzimg.2.dylib */, - F7528A1610B080B04FF63A40 /* libzmq.5.dylib */, 82ACAB494FEC48D34BB37B7D /* libzstd.1.dylib */, ); path = lib; @@ -1087,6 +880,7 @@ 1FC65B7A60754FDCAB2ACDC4 /* dirac.h */, D588E439D111ED70887341AE /* dv_profile.h */, FAE6D9624C6946175D65F35C /* dxva2.h */, + 6B588140202F9D1782199B22 /* exif.h */, 8DE2B3DBAA395F3C23ECCED9 /* jni.h */, 297D9B2ADF57E1A8EA9EF36C /* mediacodec.h */, 12D8334F84E597925380D4AD /* packet.h */, diff --git a/Scripts/dependencies.json b/Scripts/dependencies.json index 5656347..b2e58e8 100644 --- a/Scripts/dependencies.json +++ b/Scripts/dependencies.json @@ -25,5 +25,13 @@ "/usr/local" ] }, - "download_url": "https://0a915b6a-a05f-4da5-aaad-17b6419a38d6.s3.amazonaws.com/CoreZen/Dependencies_2025-09-17.tar.gz" + "linked_libraries": + [ + "libavcodec", + "libavformat", + "libavutil", + "libmpv", + "libswscale" + ], + "download_url": "https://0a915b6a-a05f-4da5-aaad-17b6419a38d6.s3.amazonaws.com/CoreZen/Dependencies_2026-04-01.tar.gz" } diff --git a/Scripts/dependencies.resolved b/Scripts/dependencies.resolved index 96a738f..70c2d25 100644 --- a/Scripts/dependencies.resolved +++ b/Scripts/dependencies.resolved @@ -1,100 +1,48 @@ -/opt/homebrew/Cellar/aom/3.13.1/lib/libaom.3.13.1.dylib -/opt/homebrew/Cellar/aribb24/1.0.4/lib/libaribb24.0.dylib -/opt/homebrew/Cellar/brotli/1.1.0/lib/libbrotlicommon.1.1.0.dylib -/opt/homebrew/Cellar/brotli/1.1.0/lib/libbrotlidec.1.1.0.dylib -/opt/homebrew/Cellar/brotli/1.1.0/lib/libbrotlienc.1.1.0.dylib -/opt/homebrew/Cellar/cjson/1.7.19/lib/libcjson.1.7.19.dylib -/opt/homebrew/Cellar/dav1d/1.5.1/lib/libdav1d.7.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libavcodec.62.11.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libavdevice.62.1.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libavfilter.11.4.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libavformat.62.3.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libavutil.60.8.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libswresample.6.1.100.dylib -/opt/homebrew/Cellar/ffmpeg/8.0_1/lib/libswscale.9.1.100.dylib +/opt/homebrew/Cellar/dav1d/1.5.3/lib/libdav1d.7.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libavcodec.62.28.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libavdevice.62.3.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libavfilter.11.14.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libavformat.62.12.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libavutil.60.26.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libswresample.6.3.100.dylib +/opt/homebrew/Cellar/ffmpeg/8.1/lib/libswscale.9.5.100.dylib /opt/homebrew/Cellar/fontconfig/2.17.1/lib/libfontconfig.1.dylib -/opt/homebrew/Cellar/freetype/2.14.1/lib/libfreetype.6.dylib +/opt/homebrew/Cellar/freetype/2.14.3/lib/libfreetype.6.dylib /opt/homebrew/Cellar/fribidi/1.0.16/lib/libfribidi.0.dylib -/opt/homebrew/Cellar/gettext/0.26/lib/libintl.8.dylib -/opt/homebrew/Cellar/giflib/5.2.2/lib/libgif.7.2.0.dylib -/opt/homebrew/Cellar/glib/2.86.0/lib/libglib-2.0.0.dylib -/opt/homebrew/Cellar/gmp/6.3.0/lib/libgmp.10.dylib -/opt/homebrew/Cellar/gnutls/3.8.10/lib/libgnutls.30.dylib +/opt/homebrew/Cellar/gettext/1.0/lib/libintl.8.dylib +/opt/homebrew/Cellar/glib/2.88.0/lib/libglib-2.0.0.dylib /opt/homebrew/Cellar/graphite2/1.3.14/lib/libgraphite2.3.2.1.dylib -/opt/homebrew/Cellar/harfbuzz/11.5.0/lib/libharfbuzz.0.dylib -/opt/homebrew/Cellar/highway/1.3.0/lib/libhwy.1.3.0.dylib -/opt/homebrew/Cellar/jpeg-turbo/3.1.2/lib/libjpeg.8.3.2.dylib -/opt/homebrew/Cellar/jpeg-xl/0.11.1_3/lib/libjxl.0.11.1.dylib -/opt/homebrew/Cellar/jpeg-xl/0.11.1_3/lib/libjxl_cms.0.11.1.dylib -/opt/homebrew/Cellar/jpeg-xl/0.11.1_3/lib/libjxl_threads.0.11.1.dylib +/opt/homebrew/Cellar/harfbuzz/14.0.0/lib/libharfbuzz.0.dylib +/opt/homebrew/Cellar/jpeg-turbo/3.1.4.1/lib/libjpeg.8.3.2.dylib /opt/homebrew/Cellar/lame/3.100/lib/libmp3lame.0.dylib -/opt/homebrew/Cellar/leptonica/1.85.0/lib/libleptonica.6.dylib -/opt/homebrew/Cellar/libarchive/3.8.1/lib/libarchive.13.dylib +/opt/homebrew/Cellar/libarchive/3.8.6/lib/libarchive.13.dylib /opt/homebrew/Cellar/libass/0.17.4/lib/libass.9.dylib /opt/homebrew/Cellar/libb2/0.98.1/lib/libb2.1.dylib -/opt/homebrew/Cellar/libbluray/1.4.0/lib/libbluray.3.dylib -/opt/homebrew/Cellar/libidn2/2.3.8/lib/libidn2.0.dylib -/opt/homebrew/Cellar/libogg/1.3.6/lib/libogg.0.8.6.dylib -/opt/homebrew/Cellar/libplacebo/7.351.0/lib/libplacebo.351.dylib -/opt/homebrew/Cellar/libpng/1.6.50/lib/libpng16.16.dylib -/opt/homebrew/Cellar/librist/0.2.11/lib/librist.4.dylib +/opt/homebrew/Cellar/libbluray/1.4.1/lib/libbluray.3.dylib +/opt/homebrew/Cellar/libplacebo/7.360.1/lib/libplacebo.360.dylib +/opt/homebrew/Cellar/libpng/1.6.56/lib/libpng16.16.dylib /opt/homebrew/Cellar/libsamplerate/0.2.2/lib/libsamplerate.0.2.2.dylib -/opt/homebrew/Cellar/libsodium/1.0.20/lib/libsodium.26.dylib -/opt/homebrew/Cellar/libsoxr/0.1.3/lib/libsoxr.0.1.2.dylib -/opt/homebrew/Cellar/libssh/0.11.3/lib/libssh.4.10.3.dylib -/opt/homebrew/Cellar/libtasn1/4.20.0/lib/libtasn1.6.dylib -/opt/homebrew/Cellar/libtiff/4.7.0/lib/libtiff.6.dylib /opt/homebrew/Cellar/libudfread/1.2.0/lib/libudfread.3.dylib /opt/homebrew/Cellar/libunibreak/6.1/lib/libunibreak.6.dylib -/opt/homebrew/Cellar/libunistring/1.3/lib/libunistring.5.dylib -/opt/homebrew/Cellar/libvidstab/1.1.1/lib/libvidstab.1.2.dylib -/opt/homebrew/Cellar/libvmaf/3.0.0/lib/libvmaf.3.dylib -/opt/homebrew/Cellar/libvorbis/1.3.7/lib/libvorbis.0.dylib -/opt/homebrew/Cellar/libvorbis/1.3.7/lib/libvorbisenc.2.dylib -/opt/homebrew/Cellar/libvpx/1.15.2/lib/libvpx.11.dylib -/opt/homebrew/Cellar/libx11/1.8.12/lib/libX11.6.dylib -/opt/homebrew/Cellar/libxau/1.0.12/lib/libXau.6.dylib -/opt/homebrew/Cellar/libxcb/1.17.0/lib/libxcb-shape.0.0.0.dylib -/opt/homebrew/Cellar/libxcb/1.17.0/lib/libxcb-shm.0.0.0.dylib -/opt/homebrew/Cellar/libxcb/1.17.0/lib/libxcb-xfixes.0.0.0.dylib -/opt/homebrew/Cellar/libxcb/1.17.0/lib/libxcb.1.1.0.dylib -/opt/homebrew/Cellar/libxdmcp/1.1.5/lib/libXdmcp.6.dylib -/opt/homebrew/Cellar/little-cms2/2.17/lib/liblcms2.2.dylib -/opt/homebrew/Cellar/luajit/2.1.1753364724/lib/libluajit-5.1.2.1.1753364724.dylib +/opt/homebrew/Cellar/libvpx/1.16.0/lib/libvpx.12.dylib +/opt/homebrew/Cellar/little-cms2/2.18/lib/liblcms2.2.dylib +/opt/homebrew/Cellar/luajit/2.1.1774896198/lib/libluajit-5.1.2.1.1774896198.dylib /opt/homebrew/Cellar/lz4/1.10.0/lib/liblz4.1.10.0.dylib -/opt/homebrew/Cellar/mbedtls/3.6.4/lib/libmbedcrypto.3.6.4.dylib -/opt/homebrew/Cellar/mpv/0.40.0_4/lib/libmpv.2.dylib -/opt/homebrew/Cellar/mujs/1.3.7/lib/libmujs.dylib -/opt/homebrew/Cellar/nettle/3.10.2/lib/libhogweed.6.11.dylib -/opt/homebrew/Cellar/nettle/3.10.2/lib/libnettle.8.11.dylib -/opt/homebrew/Cellar/opencore-amr/0.1.6/lib/libopencore-amrnb.0.dylib -/opt/homebrew/Cellar/opencore-amr/0.1.6/lib/libopencore-amrwb.0.dylib -/opt/homebrew/Cellar/openjpeg/2.5.3/lib/libopenjp2.2.5.3.dylib -/opt/homebrew/Cellar/openssl@3/3.5.2/lib/libcrypto.3.dylib -/opt/homebrew/Cellar/openssl@3/3.5.2/lib/libssl.3.dylib -/opt/homebrew/Cellar/opus/1.5.2/lib/libopus.0.dylib -/opt/homebrew/Cellar/p11-kit/0.25.8/lib/libp11-kit.0.dylib -/opt/homebrew/Cellar/pcre2/10.46/lib/libpcre2-8.0.dylib -/opt/homebrew/Cellar/python@3.13/3.13.7/Frameworks/Python.framework/Versions/3.13/Python -/opt/homebrew/Cellar/rav1e/0.8.1/lib/librav1e.0.8.1.dylib +/opt/homebrew/Cellar/mpv/0.41.0_4/lib/libmpv.2.dylib +/opt/homebrew/Cellar/mujs/1.3.9/lib/libmujs.dylib +/opt/homebrew/Cellar/openssl@3/3.6.1/lib/libcrypto.3.dylib +/opt/homebrew/Cellar/openssl@3/3.6.1/lib/libssl.3.dylib +/opt/homebrew/Cellar/opus/1.6.1/lib/libopus.0.dylib +/opt/homebrew/Cellar/pcre2/10.47_1/lib/libpcre2-8.0.dylib +/opt/homebrew/Cellar/python@3.14/3.14.3_1/Frameworks/Python.framework/Versions/3.14/Python /opt/homebrew/Cellar/rubberband/4.0.0/lib/librubberband.3.dylib -/opt/homebrew/Cellar/shaderc/2025.3/lib/libshaderc_shared.1.dylib -/opt/homebrew/Cellar/snappy/1.2.2/lib/libsnappy.1.2.2.dylib -/opt/homebrew/Cellar/speex/1.2.1/lib/libspeex.1.dylib -/opt/homebrew/Cellar/srt/1.5.4/lib/libsrt.1.5.4.dylib -/opt/homebrew/Cellar/svt-av1/3.1.2/lib/libSvtAv1Enc.3.1.2.dylib -/opt/homebrew/Cellar/tesseract/5.5.1/lib/libtesseract.5.dylib -/opt/homebrew/Cellar/theora/1.2.0/lib/libtheoradec.2.dylib -/opt/homebrew/Cellar/theora/1.2.0/lib/libtheoraenc.2.dylib +/opt/homebrew/Cellar/shaderc/2026.1/lib/libshaderc_shared.1.dylib +/opt/homebrew/Cellar/svt-av1/4.1.0/lib/libSvtAv1Enc.4.1.0.dylib /opt/homebrew/Cellar/uchardet/0.0.8/lib/libuchardet.0.0.8.dylib -/opt/homebrew/Cellar/vapoursynth/72/lib/libvapoursynth-script.0.dylib -/opt/homebrew/Cellar/vulkan-loader/1.4.325/lib/libvulkan.1.4.325.dylib -/opt/homebrew/Cellar/webp/1.6.0/lib/libsharpyuv.0.1.2.dylib -/opt/homebrew/Cellar/webp/1.6.0/lib/libwebp.7.2.0.dylib -/opt/homebrew/Cellar/webp/1.6.0/lib/libwebpmux.3.1.2.dylib +/opt/homebrew/Cellar/vapoursynth/73/lib/libvapoursynth-script.0.dylib +/opt/homebrew/Cellar/vulkan-loader/1.4.341.0/lib/libvulkan.1.4.341.dylib /opt/homebrew/Cellar/x264/r3222/lib/libx264.165.dylib /opt/homebrew/Cellar/x265/4.1/lib/libx265.215.dylib -/opt/homebrew/Cellar/xz/5.8.1/lib/liblzma.5.dylib -/opt/homebrew/Cellar/zeromq/4.3.5_2/lib/libzmq.5.dylib +/opt/homebrew/Cellar/xz/5.8.3/lib/liblzma.5.dylib /opt/homebrew/Cellar/zimg/3.0.6/lib/libzimg.2.dylib -/opt/homebrew/Cellar/zstd/1.5.7/lib/libzstd.1.5.7.dylib +/opt/homebrew/Cellar/zstd/1.5.7_1/lib/libzstd.1.5.7.dylib diff --git a/Scripts/stage_dependencies.py b/Scripts/stage_dependencies.py index 2b7306d..fda22d2 100755 --- a/Scripts/stage_dependencies.py +++ b/Scripts/stage_dependencies.py @@ -280,12 +280,18 @@ def locate_dependency(dylib_name, search_paths): proc = subprocess.Popen(['wget', '-nv', '-O', download_path, download_url]) proc.communicate() + if proc.returncode != 0: + print(f'ERROR: Download failed (exit code {proc.returncode})') + exit(1) print('Extracting...') print(f'Root: {root_path}') proc = subprocess.Popen(['tar', '-xvzf', download_path, '-C', root_path]) proc.communicate() + if proc.returncode != 0: + print(f'ERROR: Extraction failed (exit code {proc.returncode})') + exit(1) exit() if args.compress: diff --git a/Scripts/update_instructions.md b/Scripts/update_instructions.md index af2aeb9..5d7d6e6 100644 --- a/Scripts/update_instructions.md +++ b/Scripts/update_instructions.md @@ -60,22 +60,15 @@ rm -v ../Dependencies/dependencies.x86.resolved Upload archive to AWS. Remember to set read permissions to "world". -10. Update libraries in Xcode +10. Update Xcode project -Under `CoreZen > Dependencies > lib`, select and delete all libraries. Choose the "Remove References" option. - -From Finder, drag everything from `../Dependencies/lib` into Xcode under `CoreZen > Dependencies > lib`. Do not check the boxes to add the libraries to CoreZen or CoreZenTests automatically. - -Under `CoreZen > Build Phases > Link Binary with Libraries`, add the following by dragging from the left sidebar: -* libavcodec -* libavformat -* libmpv -* libswscale - -Under `CoreZen > Build Phases > Copy Files`, add everything under `Dependencies > lib` by clicking the `+` button at the bottom. - -11. Update headers in Xcode +```commandline +./update_project.py +``` -Under `CoreZen > Dependencies > include`, select and delete all folders of headers. Choose the "Remove References" option. +This updates `project.pbxproj` to match the current contents of `Dependencies/lib` and +`Dependencies/include`. It replaces all library file references, header references, +Copy Files entries, and Link Binary with Libraries entries. -From Finder, drag everything from `../Dependencies/include` into Xcode under `CoreZen > Dependencies > include`. +Libraries listed under `linked_libraries` in `dependencies.json` are added to +Link Binary with Libraries. Use `--dry-run` to preview changes without writing. diff --git a/Scripts/update_project.py b/Scripts/update_project.py new file mode 100755 index 0000000..162661b --- /dev/null +++ b/Scripts/update_project.py @@ -0,0 +1,348 @@ +#!/usr/bin/env python3 +""" +Update project.pbxproj to match the current contents of Dependencies/lib and +Dependencies/include. + +Automates the manual Xcode steps of removing and re-adding library and header +references after a dependency update (steps 10 and 11 of update_instructions.md). + +Usage: + ./update_project.py # Update project.pbxproj + ./update_project.py --dry-run # Preview changes without writing +""" + +import argparse +import hashlib +import json +import os +import re +import sys + +LIB_GROUP_ID = '53D4B6342B51E38E00B91FA0' +INCLUDE_GROUP_ID = '53D4B5992B51E38E00B91FA0' +COPY_FILES_PHASE_ID = '5350F8BA2886178900F8CA68' +FRAMEWORKS_PHASE_ID = '5309C3A62885A1DC00BC0AAE' +FMDB_COPY_BF_ID = '5350F8BB2886179200F8CA68' +FMDB_FW_BF_ID = '538499112885FF21004ED6A1' + + +def generate_id(seed, used_ids): + """Generate a deterministic 24-character hex ID, avoiding collisions.""" + n = 0 + while True: + obj_id = hashlib.md5(f'{seed}#{n}'.encode()).hexdigest()[:24].upper() + if obj_id not in used_ids: + used_ids.add(obj_id) + return obj_id + n += 1 + + +def quote_path(name): + """Quote a path for pbxproj format if it contains special characters.""" + if re.search(r'[-+. @/]', name): + return f'"{name}"' + return name + + +def find_object_block(content, obj_id): + """Find the start/end positions of an object definition block. + + Matches: \\t\\tID /* name */ = { ... }; + Returns (start, end) character positions, or (None, None) if not found. + """ + def_pattern = rf'\t\t{obj_id}\s*/\*[^*]*\*/\s*=\s*\{{' + m = re.search(def_pattern, content) + if not m: + return None, None + start = m.start() + end_m = re.search(r'\n\t\t\};\n', content[m.end():]) + if not end_m: + return None, None + return start, m.end() + end_m.end() + + +def find_list_ids(content, container_id, list_name): + """Extract 24-char hex IDs from a named list within a container object.""" + start, end = find_object_block(content, container_id) + if start is None: + return [] + block = content[start:end] + m = re.search(rf'{list_name}\s*=\s*\((.*?)\)\s*;', block, re.DOTALL) + return re.findall(r'([0-9A-F]{24})', m.group(1)) if m else [] + + +def find_build_file_ids(content, file_ref_ids): + """Find PBXBuildFile IDs that reference the given file reference IDs.""" + result = [] + for fref in file_ref_ids: + for m in re.finditer( + rf'([0-9A-F]{{24}})\s*/\*[^*]*\*/\s*=\s*\{{' + rf'isa = PBXBuildFile; fileRef = {fref}', + content): + result.append(m.group(1)) + return result + + +def remove_lines_by_id(content, ids_to_remove): + """Remove top-level object lines (2-tab indent) that start with any of the given IDs.""" + for obj_id in ids_to_remove: + content = re.sub( + rf'^\t\t{obj_id}\b[^\n]*\n', '', content, flags=re.MULTILINE) + return content + + +def remove_group_blocks(content, group_ids): + """Remove multi-line PBXGroup blocks identified by their IDs.""" + for gid in group_ids: + start, end = find_object_block(content, gid) + if start is not None: + content = content[:start] + content[end:] + return content + + +def replace_list(content, container_id, list_name, entries_str): + """Replace the contents of a named list within a container.""" + start, end = find_object_block(content, container_id) + if start is None: + print(f'WARNING: Object {container_id} not found') + return content + block = content[start:end] + pattern = rf'({list_name}\s*=\s*\().*?(\)\s*;)' + + if not re.search(pattern, block, re.DOTALL): + print(f'WARNING: {list_name} list not found in {container_id}') + return content + + def replacer(m): + return f'{m.group(1)}\n{entries_str}\t\t\t{m.group(2)}' + + new_block = re.sub(pattern, replacer, block, count=1, flags=re.DOTALL) + return content[:start] + new_block + content[end:] + + +def insert_before(content, marker, text): + """Insert text immediately before a marker string.""" + return content.replace(marker, text + marker) + + +def main(): + parser = argparse.ArgumentParser( + description='Update project.pbxproj to match Dependencies/') + parser.add_argument('--dry-run', action='store_true', + help='Preview changes without writing') + args = parser.parse_args() + + scripts_dir = os.path.dirname(os.path.abspath(__file__)) + root_dir = os.path.dirname(scripts_dir) + + pbxproj_path = os.path.join( + root_dir, 'CoreZen.xcodeproj', 'project.pbxproj') + lib_dir = os.path.join(root_dir, 'Dependencies', 'lib') + include_dir = os.path.join(root_dir, 'Dependencies', 'include') + config_path = os.path.join(scripts_dir, 'dependencies.json') + + for path in [pbxproj_path, lib_dir, include_dir, config_path]: + if not os.path.exists(path): + print(f'ERROR: Not found: {path}') + sys.exit(1) + + with open(config_path) as f: + config = json.load(f) + + linked_libs = config.get('linked_libraries', []) + if not linked_libs: + print('WARNING: No "linked_libraries" in dependencies.json') + print(' No libraries will be added to Link Binary with Libraries') + + # --- Scan filesystem --- + + dylibs = sorted(f for f in os.listdir(lib_dir) if f.endswith('.dylib')) + if not dylibs: + print('ERROR: No .dylib files found in Dependencies/lib/') + sys.exit(1) + + header_dirs = {} + for d in sorted(os.listdir(include_dir)): + dp = os.path.join(include_dir, d) + if os.path.isdir(dp): + files = sorted( + f for f in os.listdir(dp) + if os.path.isfile(os.path.join(dp, f))) + if files: + header_dirs[d] = files + + print(f'Dependencies/lib: {len(dylibs)} libraries') + print(f'Dependencies/include: {len(header_dirs)} directories') + + # --- Read and parse project file --- + + with open(pbxproj_path) as f: + content = f.read() + + all_ids = set(re.findall(r'\b([0-9A-F]{24})\b', content)) + + old_lib_frefs = find_list_ids(content, LIB_GROUP_ID, 'children') + old_inc_groups = find_list_ids(content, INCLUDE_GROUP_ID, 'children') + + old_hdr_frefs = [] + for gid in old_inc_groups: + old_hdr_frefs.extend(find_list_ids(content, gid, 'children')) + + old_bf_ids = find_build_file_ids(content, old_lib_frefs) + + all_old = set(old_lib_frefs + old_inc_groups + old_hdr_frefs + old_bf_ids) + + print(f'\nRemoving:') + print(f' {len(old_lib_frefs)} library file refs') + print(f' {len(old_bf_ids)} build file entries') + print(f' {len(old_inc_groups)} header groups') + print(f' {len(old_hdr_frefs)} header file refs') + + # Remove old IDs from collision set so regeneration is deterministic + all_ids -= all_old + + # --- Generate new IDs --- + + dylib_fref = {} + dylib_copy_bf = {} + dylib_link_bf = {} + + for name in dylibs: + dylib_fref[name] = generate_id(f'fileref:lib/{name}', all_ids) + dylib_copy_bf[name] = generate_id(f'buildfile:copy:{name}', all_ids) + + base = name.replace('.dylib', '') + lib_name = base.rsplit('.', 1)[0] if '.' in base else base + if lib_name in linked_libs: + dylib_link_bf[name] = generate_id( + f'buildfile:link:{name}', all_ids) + + inc_grp = {} + hdr_fref = {} + + for dn, headers in header_dirs.items(): + inc_grp[dn] = generate_id(f'group:include/{dn}', all_ids) + for h in headers: + hdr_fref[(dn, h)] = generate_id( + f'fileref:include/{dn}/{h}', all_ids) + + linked_names = sorted(dylib_link_bf.keys()) + + print(f'\nAdding:') + print(f' {len(dylibs)} library file refs') + print(f' {len(dylibs)} Copy Files entries') + print(f' {len(linked_names)} Link Binary entries:') + for name in linked_names: + print(f' {name}') + print(f' {len(inc_grp)} header groups') + print(f' {len(hdr_fref)} header file refs') + + if args.dry_run: + print('\nDry run — no changes written.') + return + + # --- Remove old entries --- + + content = remove_lines_by_id( + content, old_bf_ids + old_lib_frefs + old_hdr_frefs) + content = remove_group_blocks(content, old_inc_groups) + + # --- Add new PBXBuildFile entries --- + + bf_lines = [] + for name in dylibs: + bf_lines.append( + f'\t\t{dylib_copy_bf[name]} /* {name} in Copy Files */ = ' + f'{{isa = PBXBuildFile; fileRef = {dylib_fref[name]} ' + f'/* {name} */; settings = ' + f'{{ATTRIBUTES = (CodeSignOnCopy, ); }}; }};') + for name in linked_names: + bf_lines.append( + f'\t\t{dylib_link_bf[name]} /* {name} in Frameworks */ = ' + f'{{isa = PBXBuildFile; fileRef = {dylib_fref[name]} ' + f'/* {name} */; }};') + + content = insert_before( + content, '/* End PBXBuildFile section */', + '\n'.join(bf_lines) + '\n') + + # --- Add new PBXFileReference entries --- + + fr_lines = [] + for name in dylibs: + fr_lines.append( + f'\t\t{dylib_fref[name]} /* {name} */ = ' + f'{{isa = PBXFileReference; ' + f'lastKnownFileType = "compiled.mach-o.dylib"; ' + f'path = {quote_path(name)}; sourceTree = ""; }};') + for (dn, h) in sorted(hdr_fref): + fr_lines.append( + f'\t\t{hdr_fref[(dn, h)]} /* {h} */ = ' + f'{{isa = PBXFileReference; ' + f'lastKnownFileType = sourcecode.c.h; ' + f'path = {h}; sourceTree = ""; }};') + + content = insert_before( + content, '/* End PBXFileReference section */', + '\n'.join(fr_lines) + '\n') + + # --- Add new include PBXGroup blocks --- + + grp_blocks = [] + for dn in sorted(header_dirs): + children = '\n'.join( + f'\t\t\t\t{hdr_fref[(dn, h)]} /* {h} */,' + for h in header_dirs[dn]) + grp_blocks.append( + f'\t\t{inc_grp[dn]} /* {dn} */ = {{\n' + f'\t\t\tisa = PBXGroup;\n' + f'\t\t\tchildren = (\n' + f'{children}\n' + f'\t\t\t);\n' + f'\t\t\tpath = {dn};\n' + f'\t\t\tsourceTree = "";\n' + f'\t\t}};') + + content = insert_before( + content, '/* End PBXGroup section */', + '\n'.join(grp_blocks) + '\n') + + # --- Replace children/files lists --- + + lib_children = ''.join( + f'\t\t\t\t{dylib_fref[n]} /* {n} */,\n' for n in dylibs) + content = replace_list(content, LIB_GROUP_ID, 'children', lib_children) + + inc_children = ''.join( + f'\t\t\t\t{inc_grp[dn]} /* {dn} */,\n' + for dn in sorted(header_dirs)) + content = replace_list( + content, INCLUDE_GROUP_ID, 'children', inc_children) + + copy_files = ''.join( + f'\t\t\t\t{dylib_copy_bf[n]} /* {n} in Copy Files */,\n' + for n in dylibs) + copy_files += ( + f'\t\t\t\t{FMDB_COPY_BF_ID} /* FMDB.framework in Copy Files */,\n') + content = replace_list( + content, COPY_FILES_PHASE_ID, 'files', copy_files) + + fw_files = ( + f'\t\t\t\t{FMDB_FW_BF_ID} /* FMDB.framework in Frameworks */,\n') + for name in linked_names: + fw_files += ( + f'\t\t\t\t{dylib_link_bf[name]} ' + f'/* {name} in Frameworks */,\n') + content = replace_list( + content, FRAMEWORKS_PHASE_ID, 'files', fw_files) + + # --- Write --- + + with open(pbxproj_path, 'w') as f: + f.write(content) + + print(f'\nUpdated: {pbxproj_path}') + + +if __name__ == '__main__': + main()