commit:     de8a67771a85c097b2037cb2c1f8ba00b24b71f4
Author:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
AuthorDate: Wed Jun 11 16:00:16 2025 +0000
Commit:     Joonas Niilola <juippis <AT> gentoo <DOT> org>
CommitDate: Wed Jun 11 16:00:16 2025 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=de8a6777

www-client/firefox: add 139.0.4

Signed-off-by: Joonas Niilola <juippis <AT> gentoo.org>

 www-client/firefox/Manifest               |  101 +++
 www-client/firefox/firefox-139.0.4.ebuild | 1399 +++++++++++++++++++++++++++++
 2 files changed, 1500 insertions(+)

diff --git a/www-client/firefox/Manifest b/www-client/firefox/Manifest
index c7c70d49d78a..64984e27016d 100644
--- a/www-client/firefox/Manifest
+++ b/www-client/firefox/Manifest
@@ -507,6 +507,107 @@ DIST firefox-139.0.1-xh.xpi 276209 BLAKE2B 
5fd65b97236df7f923845d15a2a077f430b20
 DIST firefox-139.0.1-zh-CN.xpi 464985 BLAKE2B 
37acb33e3736af558385d13d983d52ed867c93fa8ec4a3d1e6d96c9a7efcadb0e268a671447c8dd76ad10d2ebbb8c9304a951b02df8e0c17fe5aa1f355207676
 SHA512 
960024ca7bfd6dfb9a379b82a2a94d3151eb45dae6d861d905e4fa652ebfaabdeb3175b3d8db020bbb5f91ab6f089cf028c2e3b104460848e560bf9ab2a1f3f7
 DIST firefox-139.0.1-zh-TW.xpi 468028 BLAKE2B 
b0554dace96ab6993f068126ffa722f2883aabd30c764239198886a4528424b42b0723561319f4a6f51be7326c85d88ed93339d2352a9cff80e6e900534b4e54
 SHA512 
c0daf3e7af74704de3911abd806fa3bf9b5394ccec602325813c7421351aa71d6ac1a462523453d33f86d11522459f58e559817fd114b9f1dbd545de9c314518
 DIST firefox-139.0.1.source.tar.xz 647117708 BLAKE2B 
b3c9841a060461ae2a0317a39a8999c15f8b0130874a270c308a751097be33f436ec37d4881581eb33b28c6e038be0bd1556af82e2f91e409ff84fa51852978d
 SHA512 
78ae10fc14900eb1273b7ff798a159504f68166c39b1f12ef9ea04243debc78472c24499da01641590feb5d2b28475131d2ec94d6f28fd4f2f644a721f7f40ba
+DIST firefox-139.0.4-ach.xpi 297654 BLAKE2B 
d5b1628693f7ac0c9ac40fbea0fdbccf22c5d0db04b5278b27d45ac23c3a8c5f80f1e20aa6da99db0e71735d4c7d60178cca4d60219fe134e79c1b7e8500fc82
 SHA512 
4fbc2f085a05c9b7d9d47ba0b4d8f5ce9a03d2c41abe1fc860f668a273c2731ee0f3475b972d22da0b835e82b3227776dc966afd351af77163746c6c3b5d2e8c
+DIST firefox-139.0.4-af.xpi 269819 BLAKE2B 
dae733a6debbce487ffebd6257caefe13298a35ac88a17214bb460fa21c376d25dcca2afe7269d3871f85895b4a537b355fe59476bbfbb7fc5471e5bb9fdb9cf
 SHA512 
31d6cdd49942a67a8e25259ef3418df990df192f70e9dc14d86b0364c2636c4da6b7f79e21cdd92e2a638a598631aac3a0706fc5b653814dacfafa06c98254af
+DIST firefox-139.0.4-an.xpi 335654 BLAKE2B 
f792c7d3cf942bbf6896198348f53bb300f0bcd8a2489ebf26cbc3af60dc8070f06c6a22611fd0af13888f7293028d10264e44e801e2acb7808ff3fb4b756663
 SHA512 
5f10833dd6a93c2972d8c019b153bc23442368cfb68236bfe9df44a2ffe1dfc2fac1d9fa7c63f9c6bc89a1c4477b45356eaba91749b3616ab314649dddc31529
+DIST firefox-139.0.4-ar.xpi 444095 BLAKE2B 
f39e8395a6bab00ef4354b5662974079990ac32a104d96375b4e9ee78f5a6872f5ae2ac2ed75c267b81c65393b304eb53031e6330f14dd8311a7f17461e46019
 SHA512 
9e8011f9cb50fa9fb95d30cbb09ed5e27d60741c5ed5f788bbbfcad90bf6b896f001309c270f4fb55ec65854328eb823a1b62b5e3031023f1d5757cb0366767d
+DIST firefox-139.0.4-ast.xpi 316643 BLAKE2B 
e6348b9a8e34677c43556a9c2adc92c8bee21e281f229d636a5986a237ea963ef45223c03ed40bd28caf0fcea5d679e7f8b17c0238071a58ecc6dba00d814d44
 SHA512 
b4f515a8a54cb9c3fbb5b858e32af44d65d2fc3acce965d6e9060c9d75e4170246ed3440642a49f8051f0049e3421eb3c65bf7433eca6ecf3cdfe1c4518b2df0
+DIST firefox-139.0.4-az.xpi 321612 BLAKE2B 
59b53bd413a1c745b0dfc6a6d985444ed3fa554ab6b533d2d9bd94272e7769a460a2cf3ecd321210512dc7c6cacdcf440d416db45400dd2bb95835ef45e8d9fe
 SHA512 
e8464485969552056368853a98b16c3e76568861f0ad2fb4c06527f4aa752f7ae6a54d0e5619f5c3f5c9a7fbb6ce52ef24a1187c141c950791330bf1bdddd5fc
+DIST firefox-139.0.4-be.xpi 525079 BLAKE2B 
e5e188dd8d3bf4fb44ba72d9f7f8d3e4a15d9608cb8b5a330422393cfa248caf1960ae82e8feb5d08c8c7c2721929ca7dbfc59986b028becfd6bb2afd125660b
 SHA512 
6958ed8db2a06adf5fb920d3c8d68bde60b6882c174c47abbf511f97de4384e17d2e1e7df604656e5ebabfe0aa135c40459114f7d6f859c00ab5908366962ea3
+DIST firefox-139.0.4-bg.xpi 454356 BLAKE2B 
a991f25007407717de2e9bdf0adacd87e6f5f6f0db12a77a4cad0cc4484d2b32f025cd928b1a3a7ee9287ae5b3bea930a86663a7903161a59fdd23c7b97c1aac
 SHA512 
f5d27085a60a304682528a51d897d0893a5d170f1bbf5d7622bdcd1ad91140cb1ad9f4cf80cce4c8bccea649cf4777edcca5f9ee5c8cb00bc34b7ff969cd73cd
+DIST firefox-139.0.4-bn.xpi 415413 BLAKE2B 
75e691bd972aa939eb6a39f25ced49c60e47372d30fae86d9368dd9e111d41eec3f85a0d0b5d9f319082056932b73f21a64003b63a914151d7a5b30890535b92
 SHA512 
f6f8c9aad196216f1e7eec85b5b37b7f4154b0d281d8a7c13cc90e713ad9171686da2bac52033899980e5c311ccb0e2e57a94a3fb8ea1363342471eaf888deae
+DIST firefox-139.0.4-br.xpi 398155 BLAKE2B 
5ec04d7ee2cb948169457bbf94ab06c88a53786d5417b3a5f2ffe59eafb394e726e28497b4c6701f8bed7755eb536f42424fc6c1a709087d339182ec3ea67c00
 SHA512 
865db3b1703cd7e6b6cdd1b1397dc0f30e4e5419817539cca3f8420cd52c549df24951c3f7283e633d290aac37daabf6dbe07f4acd09d07493a29b8449fc866a
+DIST firefox-139.0.4-bs.xpi 366745 BLAKE2B 
f1ad73011363ee9a23c45ac1678f4e7939a54edd3254aea8054fc11a027821a0268544276e2e4b467a293bab15152fcc3d435194bc5184df085226ba2d7e2234
 SHA512 
b112efa1cc63f41cdc07d14a61ab9cdade256775af0bf5acad1b92ca442089c31462c94dd2c5481e7cc6beb895f97691f81689991cf11e132891b5873eeb4d9c
+DIST firefox-139.0.4-ca-valencia.xpi 361695 BLAKE2B 
4a2d57fd98a70a254d76cc3cc5ce01d4242ce6670fc1302dd725fd74964456856fc8892e80657600bb37264bd5ff63fd112289af2396f8ef30bc361b72e064b9
 SHA512 
cd28bca2504ba65da38cd4aed0e7e47dc79ef96aa1763e4071ece75bb366adb4eece70378f9936c8c5750a635282d2ef65f5dcc7fab36f50e295af5d7feb4b1b
+DIST firefox-139.0.4-ca.xpi 404023 BLAKE2B 
a99fb4d4c08db057d93153c79902565bf40fa92eea7abbf038feb57c5a5b1cf7e0bd10c803d9664d93b3f3755186852d0f3b388a6664fb66d8192fc3d6600515
 SHA512 
43605f83fccd7cf17216264566ecf03a213ba26df89a240a473e5eec8a5e41c7647451ba22ba18101767cf0e0d8af6abab9e3f472cd1016111fe40245893fcab
+DIST firefox-139.0.4-cak.xpi 394728 BLAKE2B 
f1225481ae08d8ff4df97df93f3c30022596d50745c8c6acc6d6d624020bdfafd2351d6e88213428677edbf1f25e37632ad71018c6028d9f2b50f47015aee2e0
 SHA512 
9ee376ebccc78f840148fb2040d6d2ea130f8f2bb308096a2e44ee78193d6489df3baa4399c0079e4b6e1bdbd1090652652a134451cb2335b09960a1f054b28c
+DIST firefox-139.0.4-cs.xpi 479925 BLAKE2B 
b1dcc50e08fc7fe60f6bbfa07a0b08b62f1e45ceac1b2325cbe36d7a0cdb94d7ecb7c973d0581a4078040347f16904b67b6b0d5cb99f06cbb56a8f7db213a2f8
 SHA512 
b6a2fd7960419ebf5d2ebf4200d69ddd4867ec65a8fba7ab751cb015c8f225b34c3977720b3587d9a2eb8e6aa1b0117e2f49b9c033c98bdcd4de7f887cfeaf92
+DIST firefox-139.0.4-cy.xpi 446095 BLAKE2B 
d069ff928d0684166e55fc4c31910ece429e4358c35ac0074c98214e3002ae95082d47d3684e5cb06a289695ccc89a1d5baeb203990385eeec4d6f35870cf25b
 SHA512 
39620879a09d8c89bc31a4e81bcf5313cee05a5cec75ac05808a5a313dcd5318cebf2390d3202ea7ac239b1327360a4b5dbd6f0872d032e2b1f9c131086c3259
+DIST firefox-139.0.4-da.xpi 435217 BLAKE2B 
2146dcf527c98e823612a8f0337fb078f450c12cd22ec494396b02e4c8d814d0a2949b967145d05104392f8882195e70ad042d551cb3b8b8b4cef6e46ecd6d82
 SHA512 
225cd08021c0675bc21cbb91790c6fd7cd8b848bc6c27829e4851812890390e0f20f1040622684fea899610fe4c043a8720f2e6cdcd52cfd58a0d399aca3bc11
+DIST firefox-139.0.4-de.xpi 456792 BLAKE2B 
152e976f11807a3209b94ee5164905b61bae5190c3806cf7fa583fabf79626d36e4218994334dd5f29dc79610d3ad31510c0964a74d0425b09e30fb91878606c
 SHA512 
27c4c1906746e0a8cf5dc89d9bee095fa868b6441560d867fc99dd391bb0322d61366642477686fc58c5a7d818a23fd1dd7ed988815647ad15efc84afb7601ec
+DIST firefox-139.0.4-dsb.xpi 470270 BLAKE2B 
c4ac71d1e0e0f84d760797d00f4b1757e78016f5f2b3b8d88d110c82787d0abbbc449ce861b2265596be46d198bac33b0be95d50428937118df5e7e2d58628e7
 SHA512 
301b4b267a3f99de9f105adee55a14a9a58711e127cc77caefd6ff4cd9ab3a79b6a6ace3a7d431b43ab4fc92b22bc1320fb58029af66c2fca9b9e15561467786
+DIST firefox-139.0.4-el.xpi 541204 BLAKE2B 
f4d6085774e399b272f3add7f1cb0ed2866cd6b49c121c51d7338a45d04354f1b92a447601d309677ed7c3b706423efc28270a481ac928268ee994593751349f
 SHA512 
eeb968fee861c1b21a99bf6f807edc889066581574ad6ab16a66a6222c3598a533810584cc9033e492818f248291e0a28977a35a7ca77c45bac02613d59667fb
+DIST firefox-139.0.4-en-CA.xpi 413598 BLAKE2B 
5b380e9b92a635a619bc175a6816b4a36bbba5ca921cab79a282b741e5f326b3bbe1a1c9fd8bc4fae0b8cae68453a9242ae1eed81a82c6378acf35a94899c0ed
 SHA512 
e819ae6d11cfd8c4864c8c7b94a8b30402b6b5096015fc018543f38178c0e743f3d513825057f440cda0ec45dcb01d66a33ea4d654542ad76958d9d85079d037
+DIST firefox-139.0.4-en-GB.xpi 415484 BLAKE2B 
d2cc5e26a746c3acbe555127dbcc11331d26761d110c9313032e77227c5048bad32f41529fa795fe6d2280b57b006cf979fbf9214b3de2f63100f046290c1984
 SHA512 
465becae62c9805f41f971c197631985d3639ab45f0e4ec8d93fdfb4370b06f86c808ec60c17400db2da218d930130305014941330e800bdf8e8be3a3305efcf
+DIST firefox-139.0.4-eo.xpi 437559 BLAKE2B 
f20b0ce33e1294a66bbf4286a962457e67d962b32ad8aa8a992e0fca74de50db1bd63af3b83beb55464c952d7f86e7d919561569eafae03a616889bd02ca87d9
 SHA512 
0d6da9388f33c3e1d2bbe3ae79e6d9bc379a5e9ee25cf8a6e942a9ef6e542393a05ad0b2d0d7b5964cdc34bc33051892d0d355ff88a8bcee2c5607aba37693a3
+DIST firefox-139.0.4-es-AR.xpi 449714 BLAKE2B 
a57a3e744d7f66b579976dec200a34b0ab936525f839a23f56fb2c5b5054c67ce4ceddbf2e2972b25b7ef34774606a8237676d8b79979348a8cc934ea5b12879
 SHA512 
875b80c07cc7f4dbebd8ead21bf3be3990266f10dffb99999851ddfcf2014576bf1756394b8551cef23d005116cc75c2f03e39b92e58ad6e03711ff7703457cb
+DIST firefox-139.0.4-es-CL.xpi 450467 BLAKE2B 
91527c143419604c35a0a4bd6bebd076a04af732c91eae3411c6dfc338c199678ef996a28b4b372ea060eefb07823f2662ac9a82615c1fd97dc700556075277c
 SHA512 
625372cabe0101b354283a2e22ae84d082be9e082b2147895d0a53c10b3f4840bdf112ad8f677cf68d72445b944bf93c1be381d061b704ad00c8dc82f9d7053c
+DIST firefox-139.0.4-es-ES.xpi 451245 BLAKE2B 
58ea99d9cc2e821900f0eed68049bbbbc4e361f491986dc98cdc18b9640e5a803e56b3e5dbb8413d193323837b26080eb75cae72ec25ce58841c72ce32948984
 SHA512 
7b1bf58d45f2bdd158571536776bb07a406fd876dfab45a71c0885c6b84230e21b4c7a3e6cb03b0c897a58890ed7d15641e805093c05fd754f0aa7957bba4740
+DIST firefox-139.0.4-es-MX.xpi 444384 BLAKE2B 
c58a3113183081d19c9f8cda7840cd86420df0a83c1d43af1c45e425ecb92e1c49f385ed424d1a19ef345fdaef20378e6a4b48f571f2214419154fe278c896df
 SHA512 
68b010cb0d799b6fba809b27e90d2754c3526bb4261b61e34d0b5b49bc69514949e01feb771cba80554a7be30bcfe055e7e7a3c3c515ecf7b89a010b019f1e4a
+DIST firefox-139.0.4-et.xpi 362504 BLAKE2B 
0008feb71a26618fab1ce552ffdeea91e62ca85244d066cb83677bd24a53545c5247c2257345ae8a98b82119a156b136d564cf00aa19ae2af1a9cbc9ad2a1264
 SHA512 
3e8eb0db7a78a45650b8f6f037069f9bf1c75cd89fae181c94657dbd6dddb29764539833998ee2a37dd31678781d0e067901142a01b8bd2382868e0443645ab8
+DIST firefox-139.0.4-eu.xpi 416690 BLAKE2B 
b96e8e0b29f15fe7e53f77771e1feb19c916048d608dada090677a2d8e6b510c24a039ef84018e40ea423bbd58cd351fea1beac11bca3224346349e1ae6228eb
 SHA512 
dcb3fe7e5a23bd4e51a4954a733658c4240d4147b311bf460b3479e6d0bf1d939bdfb3c05d33f078b522f1df1e41fb01ab4004959e3beb9ca89c4eb62070af06
+DIST firefox-139.0.4-fa.xpi 424169 BLAKE2B 
a77a8947883e24e4fe6bdf3180c2e30397b33ccba1af480527402d60dba5ca1cfd3cc58a27c11c01bf222c3505791523b348ae3e5daecd8bab9d2ae875e90e57
 SHA512 
958fb5479069651066feb83244a72bffbb408cf9c985ebf16cf08210022e0a086f811fdc517e9a60615db8431f7b447fbf001d8e4ba6e49d80f9e8c6b334b379
+DIST firefox-139.0.4-ff.xpi 313848 BLAKE2B 
129f6eb0650883a7111f4cfe6f472f6373c6112f7d83c19c12badebefdb2b2b7f6a6becf6a2d6124627972f69756c654dcd52ab84541abcbb89b598a0c348224
 SHA512 
2f4f0849747e72198d3768d648534fbd6673dd7a980890a93bd08a07b328d8046b622a8016aa4cb8724da9b03a8ccaf32ea445eb8c407fb568883f9d08ba5149
+DIST firefox-139.0.4-fi.xpi 432408 BLAKE2B 
a13bc9da68757b49b7835f410b5f6940afc224338367033ea3f2e76d66509608743ecd7e80b99a99c930c9193c9055c91e6a31c6fd2e104c9a3c2b5c5bdfdc68
 SHA512 
47c18b4f61406d66054b032d27ef99f1e374ba5a39235e76dba47052ba59f28061dcf151a2a8d7d73c089282a5416c0b1f518ac8354d241178d71ee59b3079ff
+DIST firefox-139.0.4-fr.xpi 462404 BLAKE2B 
62878095a5168af14684289d11de656717dcaf5ab281e883978567f6dc4c4647acd1be3539a3bc4a7e48f6dd7cf49c2f86036e4c72fea61cfe6b1839b357552f
 SHA512 
d7ff9b3bc75b784696c7ed387e65eaa448f306ef3ce9fc65f74ce0a327e4462d3d44582e16e573143d6fecce37f234bf4d60e150f927385fe8025cb258a82ec1
+DIST firefox-139.0.4-fur.xpi 453093 BLAKE2B 
d95f2a464df8ebf76bf93911a3f3359675bae48fa71d02f446793be7df994de11d7838c046761280cc305518f51a63d04eec99c0e340089ddeb1f82ba60cb2b5
 SHA512 
77e708a55f8157df2efc0068a5ce7bc2d23a90e7b8664f19732b15190a42a296bbd8f597cdc798e89778d353eb6671b97401626858f12edee038151b61c55688
+DIST firefox-139.0.4-fy-NL.xpi 446346 BLAKE2B 
a7a96dfe6dc82b20c62c06c4c20e9d80500168551d59d1d1f192620c60d8f1401d6044e69ab02ad1138ce989109860249edabcd58e195679250c471d07268efa
 SHA512 
dd0b02b02fee211fd01e6e3446e340b34388b5c070d4a2b41a21aeefa9435a161794dbe1d9cc205828dfdf98e0e432887f54f43d975b6af3b9d5501009e1a2af
+DIST firefox-139.0.4-ga-IE.xpi 318546 BLAKE2B 
ac2aaa952b2034e203da7a679191cb52e0397ea2ed9b2e5128b19b11199e28621e88ac7af7069929d07fa3a10a53bf1bb0953445f790dc3fd6122f625a1f9a91
 SHA512 
b5982aa5f574390057cde9eabb0296e51104b3034cb58d6e78ee194dddb3d372fa2be46b86d01afd7e52d869dbb17622ffcbb3637a6b0661631371141b29b2f3
+DIST firefox-139.0.4-gd.xpi 402975 BLAKE2B 
21a89db46f671c328d828f468bcc75fea7055deb22c57a4a149f96661126a6c613d43740e77a6e5b2efcd2dec68be64a3516c015d7bd9607fd26935f67a3ba86
 SHA512 
694bd2a22d91bb8f5a2b88e2ed4e9b8a6b41f895e7ccc34d6d8a0651c0bbc1a8ad38739840097e7c723dad8707eaef516d2113dacb2da44014fd357004292516
+DIST firefox-139.0.4-gl.xpi 409741 BLAKE2B 
7a8918d88fd057b3628b05b09a09d49878199a5254998208c03f7151c167a3d536f423e3796c4222d1942eaf4fc4c9825ac9a5a0fe9dc051243d9c89ae044403
 SHA512 
6853b527f7ac2663f8feaed580af18c180a98e7ff3101577dad7d55d9f4ce6f176db30586049d24f11fd60a2da8033efd04f79d55e7f111819a05bd4ac06f786
+DIST firefox-139.0.4-gn.xpi 453112 BLAKE2B 
6fcb3c873e209aeefd36df1a0cba04b816139b57580df5703c1f147db821805c10a9ecbf2d84167ba7f55d62ffe8b310c9e4ad1c73752d0b0d11d5e303082de5
 SHA512 
01630ed1d1fb6d79b177c1ddd3f58b56783d03b28b269d8606bcdc50d85a20ffcb96a568a76cd6df2aee02843ddc54b118376aa06db58ee378292418fd618aea
+DIST firefox-139.0.4-gu-IN.xpi 362207 BLAKE2B 
926dd4491c4d31d1fca4c593676f0a01c9afa06fac9ffe7704a21c59109a692caca76b013a72f5dc365b730b0e60a1e1f2625268c181bae72260e7d7e7e98ef1
 SHA512 
cc67329d915c2f30c7f37abcbbcd7f4974949d513c45d000d21cbae242c21713cd77d85d5c280aa3b153458b43da45ad9e7b5925c8798b2ef8469381ca6fbea1
+DIST firefox-139.0.4-he.xpi 448712 BLAKE2B 
4b40cad8bb53f3aa83a38c3eb0a8cdb3f91161c27ddcb81d53befbdc395f0dcb20467e740ab8d7b671ad030b9d2ece447ecd4f2678f0b5638fad493b6a2a0d3b
 SHA512 
5321c2e2fe9df1ec07736f1bd408b55c07c33e6f9ed860a02ade4480800be06e5cf4f3bb3f49c313987b06e16b5977c1ef6769daca6a217610550ef1b032a233
+DIST firefox-139.0.4-hi-IN.xpi 380713 BLAKE2B 
4d027cfcd5548995810549a6f7089648d22cf60be1b3b69dabf8cab4ae3be8c2cc6238b288cacff97b519570ffe58a5090f8bb57be789cb8cde139d1aa3b3684
 SHA512 
1b287b1503d7f3383a65500fe0f8e678a847e68a658f6fb1b2ea1242e5e3fce14fd1349a66fc99ee709c20789927f7f5964722aff64f9b4b38648228334cf2f7
+DIST firefox-139.0.4-hr.xpi 431200 BLAKE2B 
d27fb4a195ed4e1fdf67c9f11b60ac47663f9e405bca6fabcd8bb388469ddf55f282f1281bda92184a3de9c4a7f20fe4fd1c8240f68655d853a56f04d53909b9
 SHA512 
dcd21b53563ccf0448d18ecaab72d5c6920cc07abfa43262b4b338407dc0b122728d1ef8106f5f2710d0e286061403cd8e46a049b5b7ba25ae1b3b6fbd25082d
+DIST firefox-139.0.4-hsb.xpi 466846 BLAKE2B 
5541cc83790611e91a27329b9f4daa50804a02be0dfdd0e23a788ce076942e80936d8c3dc99a47856d2c81d89392bf2894295d698f69654df7f2e49b3f38d042
 SHA512 
44e0bb7223daa4ac848ed780a0d1b7d71404132712958888b291e811ee29edb929f4706d43e64356439fc4a5ece67855053f65acee652c28fb4e5fd83dbc8cc1
+DIST firefox-139.0.4-hu.xpi 470469 BLAKE2B 
dab188675213234babbb51c0d31174a278ca86a6dce171dc5a109afad38a186ff150bbdbe7a4f36cd3ab827dac54c9b673c8c9115dd75f7018e6b5b95547b109
 SHA512 
a0b4bfee4a40b4cc69bbe5814b5a822a9c8f22e368d6c5cfc575b827810da79d21f3341498dd88ea10e0f739821709f64450f94ec8807d728f384884b0fce3d0
+DIST firefox-139.0.4-hy-AM.xpi 457458 BLAKE2B 
3b32778c1c75be59e627e3013ffe95ea428d3a15b65d4abbeea519dd78ce154fc30797b8076b92b07b59b20f068d73e0ce7a5fe3bda62d4547813ef0bd740b12
 SHA512 
3bb9e1ed96c14aa36dc792d2e86a54a12161c42fcb163d3e0c896e224cc6eb91ba2ea348fa955a807304fea543d4a0825d544ce31f6a52dad1b3d682b7b43d42
+DIST firefox-139.0.4-ia.xpi 434206 BLAKE2B 
ce80e304a311ffeb28227ab9ab274a88df2021f54705ca1b8c1b94b070e4400c33f9cfe7367d23c95e8beb2902473c9d644b02f2cc92263636ccd4e5d5171ce2
 SHA512 
eaa88dd6cff22d1efcf3afd64f2c6837e8f2880d88e3394e53ef735d4f259a7db0ee1a293059ca7af773d6eca7f037a7c66880182581015fd1bbfc09f5217d03
+DIST firefox-139.0.4-id.xpi 426322 BLAKE2B 
9b65e53c48ccd67dd60e304c898c333907c35e122ab1f0fc9e30a543d537f4b57fec115edfd7b9ef748de022afe1dc5e6188af750e914b0b7e1a03ae0fc11bce
 SHA512 
5ba907cd9187b8a9b30543b0c9be288655c0eda3a3de937c581af27a20e3e293ca9ea2fcbc578e6dfd479bee19282d60ad88498bc313aa6300f1dbd3805a497a
+DIST firefox-139.0.4-is.xpi 436864 BLAKE2B 
0746c0fa067eb330f20fde613ed257d9f11d2c57f7b35499cfed753b339d566d2a0c84b6e597a43c92be1d8126dca526357deb8556066eaf9ea5510140b90613
 SHA512 
e90376e63c203966f29484f934db7be2f85e6cca1352817ef97b1ba987041ce3cceb1a63a06d45c44e1e860f54d159ad349087dbacd82b561870e2db7b19cfe2
+DIST firefox-139.0.4-it.xpi 444954 BLAKE2B 
e93d84e1d3a6c9646eb86b13c7f7c9eb5369b74cb751e9c1e474b2fec6134b78b825ba7c3170bc7e34d3dc1e582a23d3006862e65838eb67a4501565118dd1cf
 SHA512 
68f33576e15baad7cd5c169fa2098a00f63c22c1e8c47470a3504f7bd9dba08a6d2b8294434a319e58a75205d5169d18141d943f90615687106baffc03377924
+DIST firefox-139.0.4-ja.xpi 485457 BLAKE2B 
931247304a10402257902026d9251a50d3c88a991fb3c1f34c06fc1c6afa507153e1c5bd5434bb29ced0440fb354b79a39f180bcf06a94ce97e592034cbd3174
 SHA512 
2ad4c3ea2db39ed6b0cf9f5384499c69391bff063098f8b8af11edfe4e5f5ecea52a53c9656e1e49cea59e3df6f9527616fb0ec1836b853f8698b646e6b08b57
+DIST firefox-139.0.4-ka.xpi 498906 BLAKE2B 
ae5c538abd84e37dfca7a600d9d2d90c8e2545e41be62f27b206f58719ba6d54e6a0d4853162d264488b65e2fe6273cab0767c4987441f90df58610f2596e5e6
 SHA512 
6ec43f1eae60976a503855eff8e822c3f5f42821fafd2bc928ac2f326b988f00800f1b45a724c217076f106da93ba63bf01a3b0bb468267fe0f87e8af2eef095
+DIST firefox-139.0.4-kab.xpi 425603 BLAKE2B 
de6524420ccdb3fcee3bb192643ea6140153520ea36955e8d1db6715ac409ec594f2f0d811b174a0fa1abc01ed37afb367935b7db8cc06644d7a7c68ed89bcdf
 SHA512 
2eb8a94137512fb7057172003e9a92ebc41dbb75f81f7f52f0e077a8765ed27f5e122a507159c8766db3078766d87e93047d693eba77f0f2f6bee0feac77d213
+DIST firefox-139.0.4-kk.xpi 507021 BLAKE2B 
259d094f28ec0e3815b480daaec38527b6698683a2481745c753104f981dde7c1d178f387bbaad161cb2caf708b28e15ec4579b2eea046ab874302dd9833b723
 SHA512 
aa60ae5bfd880987964f854097d507e05067a16326e3d6c4ebefcacea7155ebb4b8276877c9e8733ed7d60833392b31e6a01540d9e3474c4277340643b930e6a
+DIST firefox-139.0.4-km.xpi 352029 BLAKE2B 
c8ecacd33c4408bc7d99b17472b879d3a2b8fc0c0f2b815c26d902e4ce036de5a3c4ae0a5042431208b62dd60387ba9597430a47250611c1bee64670bd521918
 SHA512 
c075865368043539fb664608f962318708dfb6fae49770bbebc985145e0ce43e9bb47873a05fcca781c7b5cefc0f146f85e4532deb599ac5e51dfaca65acacd4
+DIST firefox-139.0.4-kn.xpi 334933 BLAKE2B 
d7f30f2a447ab2979abd9ef0f80f2885ef8c53e99c106c3600a7848272a520f91d63113b7cd20a88dc3805537fdb0ca63c2b8237345d0212a236bf95d4036f95
 SHA512 
7dc2c2df887bc9418243f6e85b3f37ea55f94f2ef401325ad078015c452490f0fa2068a032e030cd9ca5189f3097a13c1167b81cc6655093b6c37d7562b76f1f
+DIST firefox-139.0.4-ko.xpi 471630 BLAKE2B 
3f89ed98e7b372566b86d42fc2840c19ed6e6f2d61bf5580a62cf89ca27ac9bc72c85b1d5662a9d8988060dc292438118fef34c9b65e66fc8fb7a09132b41d48
 SHA512 
8747883259f0d468dc9991586d71eb7084bf0ae72dae8e9dc418ac4c24961833abbefc27b0f2eaf3b4784168eae7d7aa06691041dfcb856126f4404ed4e46c4b
+DIST firefox-139.0.4-lij.xpi 321762 BLAKE2B 
48673aaaac27080f1131859549fcbd75b593339e21b9826592ff68680e79e8d5f61384bf73056a8af1a4ce72f5a8cd6f83c2a226f8a32657acbb3000e0e62ed5
 SHA512 
79274a85108497054c4efabfee32b9f0a28c556b86fdbca779b176900efbbb57fd251e126e8b7cdf8ac10018bdcae80f49f67909994aac6be1f8314692af89f5
+DIST firefox-139.0.4-lt.xpi 383471 BLAKE2B 
743c4f429f18693104ef2e5e9f87d279c35a0d835fc0e9899197e19728c013627d4f1b1e9a664e608e68bd2054e209d3170943e2292ce9cc213fd337b65f9bb4
 SHA512 
bedd8f850056df5164854aec2b603eeb4acfcecf3f70d6dec1d542428227cd9d31fd9138f2459dcb30c7a50e51bac3c9c12bb2d87f8d3635f2f39a5f5b16b296
+DIST firefox-139.0.4-lv.xpi 391400 BLAKE2B 
6e9a05c0b43364a0e492a3ab07a5515f00298f903596569b0e11a5f89cbbd688988e4b2af1653ad9cc582ce1d8d95aea396344162000db1fd25e5a6b1f368e3a
 SHA512 
6b4ee1f4d2b3b503399acea8dec4437e90b7313aff745829039607614cb063f3f31c77d0fd125b6b954a8e9840caf5381b9fd1af71f308bac9d28a3f13c0ccac
+DIST firefox-139.0.4-mk.xpi 320008 BLAKE2B 
56f752b3baeee3885b39f16aa431dac0b9c7def2090dc12cf2de5ce0fa64b70b6d59180f8b22ec56064e6aded099b8434f8ca6fef18e187dc69a1842820b979b
 SHA512 
e403f49d967ceef545e8ce0d0ad8da337c070683abc944fc3115c12912ee30d9df5568f674ed1421a4da18d4a113894586b68be74a7dbd46b4a921f5e0fdadcb
+DIST firefox-139.0.4-mr.xpi 359454 BLAKE2B 
67dba86ad1ffc87f3efc71b5badcd0983c7940897357ffbe875b0f2054d7059bb76ac9d058741ab4d09885dece6b940f62f6d5b3b227613e62cba150f7734de5
 SHA512 
ee3d0b489581a9fa1335876c9f509c93eba02254d8e0c97a09f679bbbd86ccd841d8b730e2a56966122e4cc355437596c40ef1207fc9c2bc195779eb1ca1a56a
+DIST firefox-139.0.4-ms.xpi 298597 BLAKE2B 
cb87c898e1e6bc1b9950fa58dc6407724b70258aafe0698cf774089ab9d6bed16f6c012394b8239b46dd631747de0987d0f85489ec4bba7085453e3b4f28d5ee
 SHA512 
1fbc95912bd8ea79d66f3f631df63aa041b14cba8d59768d27a7b47f0c61bc3f4efa5668142e3efab86d9649dcaaa3961c5be79dfabff790f90716cf8d60168f
+DIST firefox-139.0.4-my.xpi 346255 BLAKE2B 
2f05889f116a9735efc7b94507a095f9a846dcef0aace42cb8750ca10ba667161b6bbe0a7aa327a6aa8434fdba4330eb13b5c0707654141711116633d4e58e0c
 SHA512 
ccb1baf80fbb6c4fcb106e6416253eb3d5803a565cc0d1e246ffd1938445815152ee5a4a428922a7975e6762c613de7801b4e3d384c27605dea6c0011f672d92
+DIST firefox-139.0.4-nb-NO.xpi 425039 BLAKE2B 
76884e6c1ccfd81845b6da078fde74d5514229f65bc3ae2febd0517b8563ad778e09f62e8df6fa03a71de2f09d19c7434ca981c220a969891dd5760aae59e9d0
 SHA512 
d5d1160efeffae6b29ac4f25f7df3ffb71435c32f04089e070e9af605414f170685a7c18460983f38a762334dfb2c46528e0162aaecbb978289fe3de4e0520fa
+DIST firefox-139.0.4-ne-NP.xpi 352268 BLAKE2B 
e7e3e17f4f521203ae8ab1c815d27b27d40ca66150eadc8b73ff6e8e85b4bbb8f31c2fd0254599979fca911f914d9d257e4644656d98a85a2d2539cb22b264b3
 SHA512 
5ade61915438771d0ff9634350ce9e193ceb63a3e5cb13028277da981fee4a285e5095922802f08c9168660e5a48404519778d50f72c9c159e7fb00102683466
+DIST firefox-139.0.4-nl.xpi 440334 BLAKE2B 
c339c56ba973a4f2ca41e2716e411875a809983e71db271dc39e9cab2d595fc082741230da779af73d8e0a5256c93c05ffbea65e18d54f2ac6332b0d63af10de
 SHA512 
c5c2d57ae010fe86161b489bcc410f9c4184a5b7e6ac9831fbbcf7a34e98596f230084983bcde5cf6157e1e7d869906694a3097e6de6088b9fe860e5ac6d623b
+DIST firefox-139.0.4-nn-NO.xpi 432707 BLAKE2B 
746dd31d41c3e052d04ff40aa211c6b25e8e2dcebc0e8f3cd49346820179263f785eb908e28e948a368cce538481f7f8a471d3ed029e8ae41cb08d4b295c6ad0
 SHA512 
a34b470e6bda530f73a28c580940566f9d2cb418885b07424f620b1563f1b9e4ee07f2b969b182d2f2fef93b42589f224733425ed6a815614386850f9f632dd8
+DIST firefox-139.0.4-oc.xpi 416067 BLAKE2B 
54a6e986c6fe0edbe113e448483ce97666513a9e1a318e84b69ad3d54dbdb1d08d34b353a654c1341cbc05183f619117fd2c62f7dc96138af79f9c4d43347136
 SHA512 
a4982d4504ea38d55ef59eb69ef3815ae095c72564c46ac74733069d49123c607b361d09c95fcb561ba43fb3f71204ec2fa5399243c580ed9c3bafd84bf44057
+DIST firefox-139.0.4-pa-IN.xpi 496786 BLAKE2B 
63cd8beb6cc68fb523b607304a0aea6b775a0cb59a115564344faf66450ae8f9e0436048409f5399eb434c279fb97b678805d6d22a2a8eb0459caee18e29269f
 SHA512 
2310dfc756149f2a9be31d858304d63a8c84a9b02891b862920f15616f793e0cf2262946d1d85d707cac479987af32ed34ddd261aaa8c06a8c7d8f5c4de56014
+DIST firefox-139.0.4-pl.xpi 459798 BLAKE2B 
0a8394a5aaf498a647f15138ba038c2611bb11fc97f5b3e8ee6f61fad6fa18ff1933e2bb32a62bef5f2c2258837ae950f2e0c6e5d16911b21b275955955c2c25
 SHA512 
7d9100b1561e34f9834d17c89eac1f0c4ec51a73c1cbce7dcbfdfb3e72a5d5db60398c906579233868874dc28bb08c2d46ac57fd02b0137c274568156beac60b
+DIST firefox-139.0.4-pt-BR.xpi 444925 BLAKE2B 
dab39a6ec5c7548a4e37a2c7d21156e4f84ad69136e54ad9c2ca3d4ee5997f8e012d92c6068ed95c2931e801146ce6d0c33e4d321e6a2eb02d94a9658c13f7b4
 SHA512 
07185760d6d80212b5a501952199677880b61115ad13b4941a6965f24ba024ce25fef3f5b71380586c89b010c724ab6b05739381b87ea3a64daaf54e5fc06013
+DIST firefox-139.0.4-pt-PT.xpi 450735 BLAKE2B 
f4d4333273e58a8b611063339f129da2cbb6c8276ded92e194c49a04f67ba3e330c746b4ad9a3bddb197e6c1bdaed85314957d5173ce23be5df7b1501491b32c
 SHA512 
65b1528309838820c58d3018808cd85240cd2b68909854863987ce7a460fb37051f8253d09751e67c712963b32a34654e76e97a008ca3b0a475a5c7ed1297b3d
+DIST firefox-139.0.4-rm.xpi 442543 BLAKE2B 
0c167c71fc87ba95a787a87f0f6a1ec8481f40fb7bdc2cad2ab534f9a8ec77b968bb63c6cab4309ee4b042aa2c9f46b73eb6aeba973acee82d00a1f38c9aed47
 SHA512 
eb0d6239d4c4a04c89b9cd0088cf79e5a6a2a9e767c82a3711394f2bb5a7b53ba250d51a494fc520e79a42f6d8c85978f3047aaa4f6aca63225c3fe390959f63
+DIST firefox-139.0.4-ro.xpi 369473 BLAKE2B 
27a8b8a182cb72cb8d9dcb88da7e6e38251de3bd2272fe1fad5980a0a55c46824c2e8cc74a9710705246dd89c8856cc7891fb23e36232e1425e266d8c1c97397
 SHA512 
5fe268325defe5d7627a29264feae6b0fda0a7a4fabfc91625d9aa3399d655b6f11eb763581e09cf8085ed56a953b55ddf678fc6999b044dcf7c135a3cba5c1f
+DIST firefox-139.0.4-ru.xpi 529326 BLAKE2B 
d3767de92aa6456211daa929d51c47fd5d61bec4979d8308c8fb50298822ae6721f02f0bc1d9c86249cf5c3ce7f0a5067b4e9e9b5aeb31b9ee45f9cd526b702f
 SHA512 
7f5016c5e8941bb8ef7ac6b4b878621d29a2bd72458c54c435da66a02a97ffc79e5757d06b1b6c8a5bd9e7ffc6a8c2e2fef0a3aafccd842f5d2ceada86715ace
+DIST firefox-139.0.4-sc.xpi 409838 BLAKE2B 
887e8fdcd7713a0bfd7eabdee5fd0978f49b77f8c60b03f5eca454bb6824292e212355b52afb7e55d4c6fa803a326d10e4ef8aefafc0522a4e5ad1720f31beb8
 SHA512 
a95b8125dfbf9b1f76cce62ff780a6241ece124045670635a06a3d47109887514aab8218877bb02d912b52a214f29604e1e01dd927b150f38718afc76c892c86
+DIST firefox-139.0.4-sco.xpi 327276 BLAKE2B 
e0b577b8f95680deb3dcd1f7b8d093c1aa8c098988e066ef242ca69116614bc7a2c7167ec875f4c87df37c392ec914801173424449d1f29125069268092984db
 SHA512 
51aacf17a1ae4468304bc45697ff8b0ea2c2046b06a5f11ad35e57bb24383f7f30cf31adc5f9d6f0ee8f799fa251f4257167933a9547ac0a25642b1d44e7f84e
+DIST firefox-139.0.4-si.xpi 416097 BLAKE2B 
8b91e0361093a42eff6f74adba8f0cc2e4d81c6bdfd586c1a73ac46f12234e79e229da308e3e41580a7f3a20388e3511f3955155ac5e781a9cbaad82ec4a268c
 SHA512 
b8889df7204a2cb5c0204ccfcaee131f2102f29495f9a2f320c8f9e99e047accb1be61dd8f15b90d01a582f64c2ed8ea2132f7a49fcb83c5d7259fd4126dbcc7
+DIST firefox-139.0.4-sk.xpi 472190 BLAKE2B 
8ebc019b1247e0b47d1d29d52ab8dcfaf60812508bc8dcff9fdad306877eb57874987ad4ebcd88c3045474ae975af2340594748d1430b79176a82fd560796678
 SHA512 
94d6f8db2ef376d5b6c2745726658c8f3d35bf9d50c761957cfc6f9845cf14a3f951e94c97880ee8158884505210242dcfdd1a38d8fed2a3b9fb5344c9187171
+DIST firefox-139.0.4-skr.xpi 493735 BLAKE2B 
ca8a8ba409d859395585515b60938313daed10c53d1b882c40a2ff079e1807f14e6d0cf3a8fdbb3b53050a11a62cffc4dd74789c8744977c129ba261c08a7c5a
 SHA512 
86f78fb2e1fe5442a08e6e396c17c20596cb6c3fde87d1bf927457be28982dc75caa74becdd6a8da987efc332841ed1eda8ff064509c47871d8550a601f3b38b
+DIST firefox-139.0.4-sl.xpi 444964 BLAKE2B 
f52d699280f664f4ae45377068ef513ba14142b661fc7e2f414bbb0f94633c70604159d4da77759de8dbe6c53bd2ea880339d1bec22c3eb5d93415bb38c8b011
 SHA512 
e5ea5bf0558ca3d3f2ca82a885f83e203d97ad24ad9f62dba5041c43fceea83924a60f26dae73ba7b9811d124b9dd57fdd9a550f96174c1590cbfdbddae8728a
+DIST firefox-139.0.4-son.xpi 276303 BLAKE2B 
a467253483821a92e16da4eb810cb2ddc4b10c662a586a9efb686a691683792bc12b2bea2e19b23d3da8e93789cf6854f794ba75388281e10cdd3f883e353b65
 SHA512 
f9b571ea64c49da06aa9c8f157a632f579989e62edd7d9cf1cb611b9bbcfbd8eb917a3b4a1802a5e45371c8995fd83784c59d6cdc7b3e63b64701a33c6ecaf57
+DIST firefox-139.0.4-sq.xpi 460096 BLAKE2B 
a42e780f4003253725062fb0c5aa4506d2e05fa07c5ad37d4e95ae21b0c8a9818d2b5f28b74b6dab6b98ee1769751547fa4d10d935e627d62976a71a8eedbe96
 SHA512 
6d1afd2cacfe47e32c21812166efd1e7f7626cfdd3d96bf07b89ce5c674891126507b9836847816fe79b7f210d92cd73c4c67fa40b56a9c7a0fb955f148ab768
+DIST firefox-139.0.4-sr.xpi 456117 BLAKE2B 
4dc15f4f2a8971901b068c83ea68ad97d1ab76342256b4009514a89bbb9e479768b633f6d5943e09a4d1be5b56b894b6cdd66ab391d3f734458ecb862efc50a3
 SHA512 
171d77f1f7b5608a2f701a40b65dcb64e3d38c4660e630a4c79edaf0600d9c45fd9413da3bd83bbdf3082bf68ea9d580352d237b4001c610ad20ab70624fc8d6
+DIST firefox-139.0.4-sv-SE.xpi 440193 BLAKE2B 
5770777e7dd1ebaf2030bd3de9415bbb346dda74513dd07ba95d1cbe82f93d33469e31cfbc9e88b48cde7b5482b0a93935fd5dba137259b8a51bc0fefe2556a5
 SHA512 
1e8ebf982d8e1da8d1819f3458344c06ae32b9b51fb18b118f3e4e2ac8562f0a3d733c0b520ade5ad61589c413651af248b1707c2106bf94fe6540e0ef8f94c3
+DIST firefox-139.0.4-szl.xpi 346231 BLAKE2B 
7f887f22ee168851c32a65f4f6edb29044fc96196709cabb8276a31564511231fbd6a86c1ec800269c7507296a40abf6f7bb0808eb4088a8fa9901f282895024
 SHA512 
48e3387df4dd54d395e11bafef73037a23aad30bb3e6baf8d91522aa2f9e0f799771a49cc1799e2cb4511272f9f57dab120757c0b55759588dd1b2139a2a5ff1
+DIST firefox-139.0.4-ta.xpi 341129 BLAKE2B 
f5127796aeb087488c89f4c58432d49e256fe976ff2f089d804843cb658169035dc474259afe18f126c17cdc7de87d89e6513202f62014552b8dbe4a0e02961b
 SHA512 
2d98aaf48eb47f90e14e6837791cc689dc79a5f2ee2334c7f52dee203957a557e3bd5c7399044bbe29a2328ca3b31144488a23b091fbc8fb9fbf18951363c133
+DIST firefox-139.0.4-te.xpi 385829 BLAKE2B 
159fa9749eba8b603b7d4f103b54dc0917fcba3f2650179fb3ecce96f193df331bb715b659999c944df937b2369ae5ccce073d417f71e578ae80abde64594720
 SHA512 
b04c985139dccbc1427805745e1eaf43493dc64000b3b21e8af6951730a45834c9ea77d6afb89e11ef83d6373f66d0a9524abc92ecf6352926956beb9c50b7c4
+DIST firefox-139.0.4-th.xpi 507674 BLAKE2B 
e0374ab1470ee0c775bda920758c544944285b04009b253073cea9278836d8ec12cd3792ba466f4a98ef1dbac9694c37552315675adc545661c9ec70daa6e22e
 SHA512 
b7278d3552ef802eacd3af5f5636f2b4e1173a49b97aabfca81957f2157afa6c615f36a665e306331ce0cc5c4b8ca558b39ef8ed800d0f96cc8126d5ffce00b1
+DIST firefox-139.0.4-tl.xpi 360236 BLAKE2B 
f94a4cf20d36ffd6884b31deb40ef7a1595f2933b752d0b86501269b4ffbd67ac9fcbe09cca9c9eff87fe00b5811ddc975fb24da0c81fb63688a7d9428700067
 SHA512 
143b40fff4e30b619b70b394d65bdf5d7ba37835c78ff7339c2f00326534b0b1cc76d2c2f1c728fc24added4c1bc1c35d0dc3dbd00d4cf0facc26a456f7c50d3
+DIST firefox-139.0.4-tr.xpi 452739 BLAKE2B 
b6484015170421ef951cf5a3b96ff28c3d5a3e3d4cb066c64dbbc403ee0dc87adf532bdd5f544d0973cc92888be4040b3137896a7f9c9239bc4db7590d958ea6
 SHA512 
71ea99052c65a3f6bb83513f4e851c8c3124600241925425a224075643463f9f1d296de383cd2217e19bd0f8ffde640f613732e12d6e5e698ff309652f5b4c57
+DIST firefox-139.0.4-trs.xpi 326657 BLAKE2B 
3df4449ed15c80b7df52ccf953c93d78a3b6d756c4f6698cc893287e1b5a930bed891168d0d7ddef46180e24906a951da875885da0c9d0b75aa2879c725dd549
 SHA512 
86f67a6bc13cd77f78bbe6dd628331d50f45aa1065e4e36094ab3379a075da188b82e2e3b264cd0dc54050d768cc671606f525eba4e49cd452cd335904e1dfef
+DIST firefox-139.0.4-uk.xpi 521125 BLAKE2B 
0f215715e9f208ef4c47cde6b7281a93ec519aec0970775fcac508369e740aad1876ea24a96eb75addc70270fd512c4b8559969f8804c0caad617c99da676b11
 SHA512 
e259b05e59896d1fc45c146cac3852fc621bdafb2956eb42a460bc109b52dd292b9237c6e1934bf44bd766917711ea38012e0fb66b0097133996872bb497a3c3
+DIST firefox-139.0.4-ur.xpi 373553 BLAKE2B 
9341c1078a6f10269bbf76c366450237a8823e308dfe4ba35e0d86f4019c9ea038b1efd15859c12c4dddaed86d7b674b0a342a1b9168b780d3bc4a66f9adcaaa
 SHA512 
758d654d905b91d265fb6cee2add8b6f8e718ad48aa6f3df9ca31ed9d00deaae113e71467d79bb09c54fa12da99c47cd7e525fe212451f12dfeff00096eda5fd
+DIST firefox-139.0.4-uz.xpi 306875 BLAKE2B 
8aa402fdba8d2cb0285561b3c2fe7d4665bd9643c5b75433423eefb462e23b1f33cf68d6e1b6f5cec8e1bdd0a2f92398161d4621c3de702cf67d8d747cc86c0d
 SHA512 
d8482b12f1ea598ecf73654f5f637411d27594204961fd7fb356753dec366fbab4403218d063dbd73b93dc61d30ac9a5a72639c662d30c63f4b8c30bdb03dd08
+DIST firefox-139.0.4-vi.xpi 473297 BLAKE2B 
71433e939c21b9341e431b0e6363087d6fb628d0da493592ad326d1d7d746fd0beb2af470f05f686afa01826a5b7730da7389cf1d5551fa16ad1fb7117ce25bf
 SHA512 
9ee4b96446b78fdfb804346a71553f7afdc65d48a040d78beb3e7ca14a1a6949d3d64cbcff515bd82cfc6be84a5e983e0f447ad4308181d1a7e7478315525c98
+DIST firefox-139.0.4-xh.xpi 276202 BLAKE2B 
876aff68532546b5f95e457ee7fe0133cc8ea1ea796333ce5e8d0d807a5ac193704c7a32aff95a95ec7cba2365d4c57c42316c81f359cca4edb6cb61abe2e952
 SHA512 
7080639faca1b0d439f6e2b866cb90506132187d77aa278ba0375e6b9117763942688c2c18186d3d74a1e484943fd255d19c29bf2a3380b9116e29881079498d
+DIST firefox-139.0.4-zh-CN.xpi 464969 BLAKE2B 
09f3697729239c9913e9648d9caa8e09147787d03c35e83988fe457529937dd0d6fb22f4e67a6c8955f825a3f70b9bc7edb7dd9a55c290c6ffa856c36be171c0
 SHA512 
0f17aaa914c785df2f7c553c98586c5da02877a45dd8fcb8b1d6daa94bc14d871d89523cd9a1d1c96059632cb7a1a08f05e7375b38dea35952a87e681dc73b84
+DIST firefox-139.0.4-zh-TW.xpi 468021 BLAKE2B 
ef2c073b69572ee35aae9fee272fdd83ea0e3131da9ac78d0c37857fa36ffa5b18c83b6426e549ea82ce0cad0cc657de65fa8a52e0562353b3179b6eb56b2606
 SHA512 
b22bc6efaa430dd37431c97755d9eeb001fd7ed777e0d3df94d3f6a62e5d704137796cf54ab935d81630fc901d5db0319bdeb300fa7db7eb4158e41cc8c71ec3
+DIST firefox-139.0.4.source.tar.xz 644670560 BLAKE2B 
1fa263c2055905edc7ba132f2b148012d2d64e8c05608103a12a47be8108d39050dd8c0e26157e6e9331f28522da5eff33a299949e70724bc7b70414d01f939b
 SHA512 
fa5ae798b0cd485e0a56b0c57ed7f33e0d0ef921302dc0169eac91926194abe2070beb54239c81924f819a60b589f305f923970d753c07ba50acc36e1a492db4
 DIST firefox-139.0.source.tar.xz 634198424 BLAKE2B 
920df1c0b1389234d779861de71c971582cd0822054a23f1a159c4ffe7e98e09049fac1f202004e6e6f85ea0384c21f0807f3c843c5784de8b0474b6de843cab
 SHA512 
84a2b47f2ff71aac226a774ab0ac9ab8d9a16f5620a06f7abb6648732209d022aef35a9d4873e91ebd67a4fc494fc238524e25c38fad8046db26afda06e6f970
 DIST wasi-sdk-25.0-arm64-linux.tar.gz 115160800 BLAKE2B 
1ce22aaea87d0720d40d46ebdd96508c8fb0593b53c4489022fd5a1a9afb043a26a6e162a992d73454f612f2b6ab01e17a99c189c0c8b8c2d2d68fd96fabee1b
 SHA512 
ef4eff22c1efec4dc5ab199d09d93ee0004f9fa67b32cac0030f8b6a40def10f714391cec8e803c200995dd8bfad3ebad9ec79b4195aa6b2ea61ea47a8b9e61f
 DIST wasi-sdk-25.0-x86_64-linux.tar.gz 114450290 BLAKE2B 
07618828d4c25d67421aa72d38fc49bbff9052b8ecfe0fa9f4207e71880e9c650f458567cfa5bd389d5f830fcfee89142a77d33c29e7bccd1da7ddba2bc47b95
 SHA512 
716acc4b737ad6f51c6b32c3423612c03df9a3165bde3d6e24df5c86779b8be9463f5a79e620f2fc49707275563a6c9710242caca27e1ad9dd2c69e8fce8a766

diff --git a/www-client/firefox/firefox-139.0.4.ebuild 
b/www-client/firefox/firefox-139.0.4.ebuild
new file mode 100644
index 000000000000..c58019353233
--- /dev/null
+++ b/www-client/firefox/firefox-139.0.4.ebuild
@@ -0,0 +1,1399 @@
+# Copyright 1999-2025 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+FIREFOX_PATCHSET="firefox-139-patches-03.tar.xz"
+FIREFOX_LOONG_PATCHSET="firefox-139-loong-patches-01.tar.xz"
+
+LLVM_COMPAT=( 19 20 )
+
+# This will also filter rust versions that don't match LLVM_COMPAT in the 
non-clang path; this is fine.
+RUST_NEEDS_LLVM=1
+
+# If not building with clang we need at least rust 1.76
+RUST_MIN_VER=1.82.0
+
+PYTHON_COMPAT=( python3_{11..13} )
+PYTHON_REQ_USE="ncurses,sqlite,ssl"
+
+VIRTUALX_REQUIRED="manual"
+
+# Information about the bundled wasi toolchain from
+# https://github.com/WebAssembly/wasi-sdk/
+WASI_SDK_VER=25.0
+WASI_SDK_LLVM_VER=19
+
+MOZ_ESR=
+
+MOZ_PV=${PV}
+MOZ_PV_SUFFIX=
+if [[ ${PV} =~ (_(alpha|beta|rc).*)$ ]] ; then
+       MOZ_PV_SUFFIX=${BASH_REMATCH[1]}
+
+       # Convert the ebuild version to the upstream Mozilla version
+       MOZ_PV="${MOZ_PV/_alpha/a}" # Handle alpha for SRC_URI
+       MOZ_PV="${MOZ_PV/_beta/b}"  # Handle beta for SRC_URI
+       MOZ_PV="${MOZ_PV%%_rc*}"    # Handle rc for SRC_URI
+fi
+
+if [[ -n ${MOZ_ESR} ]] ; then
+       # ESR releases have slightly different version numbers
+       MOZ_PV="${MOZ_PV}esr"
+       HOMEPAGE="https://www.mozilla.org/firefox 
https://www.mozilla.org/firefox/enterprise/";
+       SLOT="esr"
+else
+       HOMEPAGE="https://www.mozilla.org/firefox";
+       SLOT="rapid"
+fi
+
+MOZ_PN="${PN%-bin}"
+MOZ_P="${MOZ_PN}-${MOZ_PV}"
+MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
+MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
+
+inherit check-reqs desktop flag-o-matic gnome2-utils linux-info llvm-r1 
multiprocessing \
+       optfeature pax-utils python-any-r1 readme.gentoo-r1 rust 
toolchain-funcs virtualx xdg
+
+MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}";
+
+if [[ ${PV} == *_rc* ]] ; then
+       
MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/candidates/${MOZ_PV}-candidates/build${PV##*_rc}";
+fi
+
+PATCH_URIS=(
+       https://dev.gentoo.org/~juippis/mozilla/patchsets/${FIREFOX_PATCHSET}
+)
+
+DESCRIPTION="Firefox Web Browser"
+SRC_URI="${MOZ_SRC_BASE_URI}/source/${MOZ_P}.source.tar.xz -> 
${MOZ_P_DISTFILES}.source.tar.xz
+       ${PATCH_URIS[@]}
+       loong? (
+               
https://dev.gentoo.org/~xen0n/distfiles/www-client/${MOZ_PN}/${FIREFOX_LOONG_PATCHSET}
+       )
+       wasm-sandbox? (
+               amd64? ( 
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VER/.*/}/wasi-sdk-${WASI_SDK_VER}-x86_64-linux.tar.gz
 )
+               arm64? ( 
https://github.com/WebAssembly/wasi-sdk/releases/download/wasi-sdk-${WASI_SDK_VER/.*/}/wasi-sdk-${WASI_SDK_VER}-arm64-linux.tar.gz
 )
+       )"
+
+S="${WORKDIR}/${PN}-${PV%_*}"
+LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
+KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86"
+
+IUSE="+clang dbus debug eme-free hardened hwaccel jack libproxy pgo pulseaudio 
sndio selinux"
+IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-jpeg 
+system-libevent"
+IUSE+=" +system-libvpx system-pipewire system-png +system-webp test valgrind 
wayland wifi +X"
+
+# Firefox-only IUSE
+IUSE+=" +gmp-autoupdate gnome-shell jpegxl +jumbo-build openh264 +telemetry 
wasm-sandbox"
+
+REQUIRED_USE="|| ( X wayland )
+       debug? ( !system-av1 )
+       pgo? ( jumbo-build )
+       wayland? ( dbus )
+       wifi? ( dbus )
+"
+
+RESTRICT="!test? ( test )"
+
+FF_ONLY_DEPEND="!www-client/firefox:0
+       selinux? ( sec-policy/selinux-mozilla )"
+BDEPEND="${PYTHON_DEPS}
+       $(llvm_gen_dep '
+               llvm-core/clang:${LLVM_SLOT}
+               llvm-core/llvm:${LLVM_SLOT}
+               clang? (
+                       llvm-core/lld:${LLVM_SLOT}
+                       pgo? ( 
llvm-runtimes/compiler-rt-sanitizers:${LLVM_SLOT}[profile] )
+               )
+               wasm-sandbox? ( llvm-core/lld:${LLVM_SLOT} )
+       ')
+       app-alternatives/awk
+       app-arch/unzip
+       app-arch/zip
+       >=dev-util/cbindgen-0.27.0
+       net-libs/nodejs
+       virtual/pkgconfig
+       amd64? ( >=dev-lang/nasm-2.14 )
+       x86? ( >=dev-lang/nasm-2.14 )
+       pgo? (
+               X? (
+                       sys-devel/gettext
+                       x11-base/xorg-server[xvfb]
+                       x11-apps/xhost
+               )
+               !X? (
+                       || (
+                               gui-wm/tinywl
+                               <gui-libs/wlroots-0.17.3[tinywl(-)]
+                       )
+                       x11-misc/xkeyboard-config
+               )
+       )"
+COMMON_DEPEND="${FF_ONLY_DEPEND}
+       >=app-accessibility/at-spi2-core-2.46.0:2
+       dev-libs/expat
+       dev-libs/glib:2
+       dev-libs/libffi:=
+       >=dev-libs/nss-3.110
+       >=dev-libs/nspr-4.35
+       media-libs/alsa-lib
+       media-libs/fontconfig
+       media-libs/freetype
+       media-libs/mesa
+       media-video/ffmpeg
+       sys-libs/zlib
+       virtual/freedesktop-icon-theme
+       x11-libs/cairo
+       x11-libs/gdk-pixbuf:2
+       x11-libs/libdrm
+       x11-libs/pango
+       x11-libs/pixman
+       dbus? (
+               sys-apps/dbus
+       )
+       jack? ( virtual/jack )
+       pulseaudio? (
+               || (
+                       media-libs/libpulse
+                       >=media-sound/apulse-0.1.12-r4[sdk]
+               )
+       )
+       libproxy? ( net-libs/libproxy )
+       selinux? ( sec-policy/selinux-mozilla )
+       sndio? ( >=media-sound/sndio-1.8.0-r1 )
+       system-av1? (
+               >=media-libs/dav1d-1.0.0:=
+               >=media-libs/libaom-1.0.0:=
+       )
+       system-harfbuzz? (
+               >=media-libs/harfbuzz-2.8.1:0=
+               !wasm-sandbox? ( >=media-gfx/graphite2-1.3.13 )
+       )
+       system-icu? ( >=dev-libs/icu-76.1:= )
+       system-jpeg? ( >=media-libs/libjpeg-turbo-1.2.1:= )
+       system-libevent? ( >=dev-libs/libevent-2.1.12:0=[threads(+)] )
+       system-libvpx? ( >=media-libs/libvpx-1.8.2:0=[postproc] )
+       system-pipewire? ( media-video/pipewire:= )
+       system-png? ( >=media-libs/libpng-1.6.45:0=[apng] )
+       system-webp? ( >=media-libs/libwebp-1.1.0:0= )
+       valgrind? ( dev-debug/valgrind )
+       wayland? (
+               >=media-libs/libepoxy-1.5.10-r1
+               x11-libs/gtk+:3[wayland]
+       )
+       wifi? (
+               kernel_linux? (
+                       || (
+                               net-misc/networkmanager
+                               net-misc/connman[networkmanager]
+                       )
+                       sys-apps/dbus
+               )
+       )
+       X? (
+               virtual/opengl
+               x11-libs/cairo[X]
+               x11-libs/gtk+:3[X]
+               x11-libs/libX11
+               x11-libs/libXcomposite
+               x11-libs/libXdamage
+               x11-libs/libXext
+               x11-libs/libXfixes
+               x11-libs/libXrandr
+               x11-libs/libxcb:=
+       )"
+RDEPEND="${COMMON_DEPEND}
+       hwaccel? (
+               media-video/libva-utils
+               sys-apps/pciutils
+       )
+       jack? ( virtual/jack )
+       openh264? ( media-libs/openh264:*[plugin] )"
+DEPEND="${COMMON_DEPEND}
+       X? (
+               x11-base/xorg-proto
+               x11-libs/libICE
+               x11-libs/libSM
+       )"
+
+# ESR and rapid dependencies.
+if [[ -n ${MOZ_ESR} ]] ; then
+       RDEPEND+=" !www-client/firefox:rapid"
+else
+       RDEPEND+=" !www-client/firefox:esr"
+fi
+
+# Allow MOZ_GMP_PLUGIN_LIST to be set in an eclass or
+# overridden in the enviromnent (advanced hackers only)
+if [[ -z "${MOZ_GMP_PLUGIN_LIST+set}" ]] ; then
+       MOZ_GMP_PLUGIN_LIST=( gmp-gmpopenh264 gmp-widevinecdm )
+fi
+
+llvm_check_deps() {
+       if ! has_version -b "llvm-core/clang:${LLVM_SLOT}" ; then
+               einfo "llvm-core/clang:${LLVM_SLOT} is missing! Cannot use LLVM 
slot ${LLVM_SLOT} ..." >&2
+               return 1
+       fi
+
+       if use clang && ! tc-ld-is-mold ; then
+               if ! has_version -b "llvm-core/lld:${LLVM_SLOT}" ; then
+                       einfo "llvm-core/lld:${LLVM_SLOT} is missing! Cannot 
use LLVM slot ${LLVM_SLOT} ..." >&2
+                       return 1
+               fi
+       fi
+
+       if use pgo ; then
+               if ! has_version -b 
"=llvm-runtimes/compiler-rt-sanitizers-${LLVM_SLOT}*[profile]" ; then
+                       einfo 
"=llvm-runtimes/compiler-rt-sanitizers-${LLVM_SLOT}*[profile] is missing!" >&2
+                       einfo "Cannot use LLVM slot ${LLVM_SLOT} ..." >&2
+                       return 1
+               fi
+       fi
+
+       einfo "Using LLVM slot ${LLVM_SLOT} to build" >&2
+}
+
+MOZ_LANGS=(
+       af ar ast be bg br ca cak cs cy da de dsb
+       el en-CA en-GB en-US es-AR es-ES et eu
+       fi fr fy-NL ga-IE gd gl he hr hsb hu
+       id is it ja ka kab kk ko lt lv ms nb-NO nl nn-NO
+       pa-IN pl pt-BR pt-PT rm ro ru
+       sk sl sq sr sv-SE th tr uk uz vi zh-CN zh-TW
+)
+
+# Firefox-only LANGS
+MOZ_LANGS+=( ach )
+MOZ_LANGS+=( an )
+MOZ_LANGS+=( az )
+MOZ_LANGS+=( bn )
+MOZ_LANGS+=( bs )
+MOZ_LANGS+=( ca-valencia )
+MOZ_LANGS+=( eo )
+MOZ_LANGS+=( es-CL )
+MOZ_LANGS+=( es-MX )
+MOZ_LANGS+=( fa )
+MOZ_LANGS+=( ff )
+MOZ_LANGS+=( fur )
+MOZ_LANGS+=( gn )
+MOZ_LANGS+=( gu-IN )
+MOZ_LANGS+=( hi-IN )
+MOZ_LANGS+=( hy-AM )
+MOZ_LANGS+=( ia )
+MOZ_LANGS+=( km )
+MOZ_LANGS+=( kn )
+MOZ_LANGS+=( lij )
+MOZ_LANGS+=( mk )
+MOZ_LANGS+=( mr )
+MOZ_LANGS+=( my )
+MOZ_LANGS+=( ne-NP )
+MOZ_LANGS+=( oc )
+MOZ_LANGS+=( sc )
+MOZ_LANGS+=( sco )
+MOZ_LANGS+=( si )
+MOZ_LANGS+=( skr )
+MOZ_LANGS+=( son )
+MOZ_LANGS+=( szl )
+MOZ_LANGS+=( ta )
+MOZ_LANGS+=( te )
+MOZ_LANGS+=( tl )
+MOZ_LANGS+=( trs )
+MOZ_LANGS+=( ur )
+MOZ_LANGS+=( xh )
+
+mozilla_set_globals() {
+       # https://bugs.gentoo.org/587334
+       local MOZ_TOO_REGIONALIZED_FOR_L10N=(
+               fy-NL ga-IE gu-IN hi-IN hy-AM nb-NO ne-NP nn-NO pa-IN sv-SE
+       )
+
+       local lang xflag
+       for lang in "${MOZ_LANGS[@]}" ; do
+               # en and en_US are handled internally
+               if [[ ${lang} == en ]] || [[ ${lang} == en-US ]] ; then
+                       continue
+               fi
+
+               # strip region subtag if $lang is in the list
+               if has ${lang} "${MOZ_TOO_REGIONALIZED_FOR_L10N[@]}" ; then
+                       xflag=${lang%%-*}
+               else
+                       xflag=${lang}
+               fi
+
+               SRC_URI+=" l10n_${xflag/[_@]/-}? ("
+               SRC_URI+=" ${MOZ_SRC_BASE_URI}/linux-x86_64/xpi/${lang}.xpi -> 
${MOZ_P_DISTFILES}-${lang}.xpi"
+               SRC_URI+=" )"
+               IUSE+=" l10n_${xflag/[_@]/-}"
+       done
+}
+mozilla_set_globals
+
+moz_clear_vendor_checksums() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -ne 1 ]] ; then
+               die "${FUNCNAME} requires exact one argument"
+       fi
+
+       einfo "Clearing cargo checksums for ${1} ..."
+
+       sed -i \
+               -e 's/\("files":{\)[^}]*/\1/' \
+               "${S}"/third_party/rust/${1}/.cargo-checksum.json || die
+}
+
+moz_install_xpi() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -lt 2 ]] ; then
+               die "${FUNCNAME} requires at least two arguments"
+       fi
+
+       local DESTDIR=${1}
+       shift
+
+       insinto "${DESTDIR}"
+
+       local emid xpi_file xpi_tmp_dir
+       for xpi_file in "${@}" ; do
+               emid=
+               xpi_tmp_dir=$(mktemp -d --tmpdir="${T}")
+
+               # Unpack XPI
+               unzip -qq "${xpi_file}" -d "${xpi_tmp_dir}" || die
+
+               # Determine extension ID
+               if [[ -f "${xpi_tmp_dir}/install.rdf" ]] ; then
+                       emid=$(sed -n -e '/install-manifest/,$ { /em:id/!d; 
s/.*[\">]\([^\"<>]*\)[\"<].*/\1/; p; q }' "${xpi_tmp_dir}/install.rdf")
+                       [[ -z "${emid}" ]] && die "failed to determine 
extension id from install.rdf"
+               elif [[ -f "${xpi_tmp_dir}/manifest.json" ]] ; then
+                       emid=$(sed -n -e 's/.*"id": "\([^"]*\)".*/\1/p' 
"${xpi_tmp_dir}/manifest.json")
+                       [[ -z "${emid}" ]] && die "failed to determine 
extension id from manifest.json"
+               else
+                       die "failed to determine extension id"
+               fi
+
+               einfo "Installing ${emid}.xpi into ${ED}${DESTDIR} ..."
+               newins "${xpi_file}" "${emid}.xpi"
+       done
+}
+
+mozconfig_add_options_ac() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -lt 2 ]] ; then
+               die "${FUNCNAME} requires at least two arguments"
+       fi
+
+       local reason=${1}
+       shift
+
+       local option
+       for option in ${@} ; do
+               echo "ac_add_options ${option} # ${reason}" >>${MOZCONFIG}
+       done
+}
+
+mozconfig_add_options_mk() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -lt 2 ]] ; then
+               die "${FUNCNAME} requires at least two arguments"
+       fi
+
+       local reason=${1}
+       shift
+
+       local option
+       for option in ${@} ; do
+               echo "mk_add_options ${option} # ${reason}" >>${MOZCONFIG}
+       done
+}
+
+mozconfig_use_enable() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -lt 1 ]] ; then
+               die "${FUNCNAME} requires at least one arguments"
+       fi
+
+       local flag=$(use_enable "${@}")
+       mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" 
"${flag}"
+}
+
+mozconfig_use_with() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       if [[ ${#} -lt 1 ]] ; then
+               die "${FUNCNAME} requires at least one arguments"
+       fi
+
+       local flag=$(use_with "${@}")
+       mozconfig_add_options_ac "$(use ${1} && echo +${1} || echo -${1})" 
"${flag}"
+}
+
+virtwl() {
+       debug-print-function ${FUNCNAME} "$@"
+
+       [[ $# -lt 1 ]] && die "${FUNCNAME} needs at least one argument"
+       [[ -n $XDG_RUNTIME_DIR ]] || die "${FUNCNAME} needs XDG_RUNTIME_DIR to 
be set; try xdg_environment_reset"
+       tinywl -h >/dev/null || die 'tinywl -h failed'
+
+       local VIRTWL VIRTWL_PID
+       coproc VIRTWL { WLR_BACKENDS=headless exec tinywl -s 'echo 
$WAYLAND_DISPLAY; read _; kill $PPID'; }
+       local -x WAYLAND_DISPLAY
+       read WAYLAND_DISPLAY <&${VIRTWL[0]}
+
+       debug-print "${FUNCNAME}: $@"
+       "$@"
+       local r=$?
+
+       [[ -n $VIRTWL_PID ]] || die "tinywl exited unexpectedly"
+       exec {VIRTWL[0]}<&- {VIRTWL[1]}>&-
+       return $r
+}
+
+pkg_pretend() {
+       if [[ ${MERGE_TYPE} != binary ]] ; then
+               # Ensure we have enough disk space to compile
+               if use pgo || use debug ; then
+                       CHECKREQS_DISK_BUILD="14300M"
+               elif tc-is-lto ; then
+                       CHECKREQS_DISK_BUILD="10600M"
+               else
+                       CHECKREQS_DISK_BUILD="7400M"
+               fi
+
+               check-reqs_pkg_pretend
+       fi
+}
+
+pkg_setup() {
+
+       # Get LTO from environment; export after this phase for use in 
src_configure (etc)
+       use_lto=no
+
+       if [[ ${MERGE_TYPE} != binary ]] ; then
+
+               if tc-is-lto; then
+                       use_lto=yes
+                       # LTO is handled via configure
+                       filter-lto
+               fi
+
+               if use pgo ; then
+                       if ! has userpriv ${FEATURES} ; then
+                               eerror "Building ${PN} with USE=pgo and 
FEATURES=-userpriv is not supported!"
+                       fi
+               fi
+
+               if [[ ${use_lto} = yes ]]; then
+                       # -Werror=lto-type-mismatch -Werror=odr are going to 
fail with GCC,
+                       # bmo#1516758, bgo#942288
+                       filter-flags -Werror=lto-type-mismatch -Werror=odr
+               fi
+
+               # Ensure we have enough disk space to compile
+               if use pgo || use debug ; then
+                       CHECKREQS_DISK_BUILD="14300M"
+               elif [[ ${use_lto} == "yes" ]] ; then
+                       CHECKREQS_DISK_BUILD="10600M"
+               else
+                       CHECKREQS_DISK_BUILD="7400M"
+               fi
+
+               check-reqs_pkg_setup
+               llvm-r1_pkg_setup
+               rust_pkg_setup
+               python-any-r1_pkg_setup
+
+               # Avoid PGO profiling problems due to enviroment leakage
+               # These should *always* be cleaned up anyway
+               unset \
+                       DBUS_SESSION_BUS_ADDRESS \
+                       DISPLAY \
+                       ORBIT_SOCKETDIR \
+                       SESSION_MANAGER \
+                       XAUTHORITY \
+                       XDG_CACHE_HOME \
+                       XDG_SESSION_COOKIE
+
+               # Build system is using /proc/self/oom_score_adj, bug #604394
+               addpredict /proc/self/oom_score_adj
+
+               if use pgo ; then
+                       # Update 105.0: "/proc/self/oom_score_adj" isn't enough 
anymore with pgo, but not sure
+                       # whether that's due to better OOM handling by Firefox 
(bmo#1771712), or portage
+                       # (PORTAGE_SCHEDULING_POLICY) update...
+                       addpredict /proc
+
+                       # Clear tons of conditions, since PGO is 
hardware-dependant.
+                       addpredict /dev
+               fi
+
+               if ! mountpoint -q /dev/shm ; then
+                       # If /dev/shm is not available, configure is known to 
fail with
+                       # a traceback report referencing 
/usr/lib/pythonN.N/multiprocessing/synchronize.py
+                       ewarn "/dev/shm is not mounted -- expect build 
failures!"
+               fi
+
+               # Google API keys (see 
http://www.chromium.org/developers/how-tos/api-keys)
+               # Note: These are for Gentoo Linux use ONLY. For your own 
distribution, please
+               # get your own set of keys.
+               if [[ -z "${MOZ_API_KEY_GOOGLE+set}" ]] ; then
+                       
MOZ_API_KEY_GOOGLE="AIzaSyDEAOvatFogGaPi0eTgsV_ZlEzx0ObmepsMzfAc"
+               fi
+
+               if [[ -z "${MOZ_API_KEY_LOCATION+set}" ]] ; then
+                       
MOZ_API_KEY_LOCATION="AIzaSyB2h2OuRgGaPicUgy5N-5hsZqiPW6sH3n_rptiQ"
+               fi
+
+               # Mozilla API keys (see 
https://location.services.mozilla.com/api)
+               # Note: These are for Gentoo Linux use ONLY. For your own 
distribution, please
+               # get your own set of keys.
+               if [[ -z "${MOZ_API_KEY_MOZILLA+set}" ]] ; then
+                       
MOZ_API_KEY_MOZILLA="edb3d487-3a84-46m0ap1e3-9dfd-92b5efaaa005"
+               fi
+
+               # Ensure we use C locale when building, bug #746215
+               export LC_ALL=C
+       fi
+
+       export use_lto
+
+       CONFIG_CHECK="~SECCOMP"
+       WARNING_SECCOMP="CONFIG_SECCOMP not set! This system will be unable to 
play DRM-protected content."
+       linux-info_pkg_setup
+}
+
+src_unpack() {
+       local _lp_dir="${WORKDIR}/language_packs"
+       local _src_file
+
+       if [[ ! -d "${_lp_dir}" ]] ; then
+               mkdir "${_lp_dir}" || die
+       fi
+
+       for _src_file in ${A} ; do
+               if [[ ${_src_file} == *.xpi ]]; then
+                       cp "${DISTDIR}/${_src_file}" "${_lp_dir}" || die 
"Failed to copy '${_src_file}' to '${_lp_dir}'!"
+               else
+                       unpack ${_src_file}
+               fi
+       done
+}
+
+src_prepare() {
+       if [[ ${use_lto} == "yes" ]]; then
+               rm -v 
"${WORKDIR}"/firefox-patches/*-LTO-Only-enable-LTO-*.patch || die
+       fi
+
+       # Workaround for bgo#915651 on musl
+       if use elibc_glibc ; then
+               rm -v 
"${WORKDIR}"/firefox-patches/*bgo-748849-RUST_TARGET_override.patch || die
+       fi
+
+       eapply "${WORKDIR}/firefox-patches"
+       use loong && eapply "${WORKDIR}/firefox-loong-patches"
+
+       # Allow user to apply any additional patches without modifing ebuild
+       eapply_user
+
+       # Make cargo respect MAKEOPTS
+       export CARGO_BUILD_JOBS="$(makeopts_jobs)"
+
+       # Workaround for bgo#915651
+       if ! use elibc_glibc ; then
+               if use amd64 ; then
+                       export RUST_TARGET="x86_64-unknown-linux-musl"
+               elif use x86 ; then
+                       export RUST_TARGET="i686-unknown-linux-musl"
+               elif use arm64 ; then
+                       export RUST_TARGET="aarch64-unknown-linux-musl"
+               elif use loong; then
+                       # Only the LP64D ABI of LoongArch64 is actively 
supported among
+                       # the wider Linux ecosystem, so the assumption is safe.
+                       export RUST_TARGET="loongarch64-unknown-linux-musl"
+               elif use ppc64 ; then
+                       export RUST_TARGET="powerpc64le-unknown-linux-musl"
+               elif use riscv ; then
+                       # We can pretty safely rule out any 32-bit riscvs, but 
64-bit riscvs also have tons of
+                       # different ABIs available. 
riscv64gc-unknown-linux-musl seems to be the best working
+                       # guess right now though.
+                       elog "riscv detected, forcing a riscv64 target for now."
+                       export RUST_TARGET="riscv64gc-unknown-linux-musl"
+               else
+                       die "Unknown musl chost, please post a new bug with 
your rustc -vV along with emerge --info"
+               fi
+       fi
+
+       # Pre-built wasm-sandbox path manipulation.
+       if use wasm-sandbox ; then
+               if use amd64 ; then
+                       export wasi_arch="x86_64"
+               elif use arm64 ; then
+                       export wasi_arch="arm64"
+               else
+                       die "wasm-sandbox enabled on unknown/unsupported arch!"
+               fi
+
+               sed -i \
+                       -e "s:%%PORTAGE_WORKDIR%%:${WORKDIR}:" \
+                       -e "s:%%WASI_ARCH%%:${wasi_arch}:" \
+                       -e "s:%%WASI_SDK_VER%%:${WASI_SDK_VER}:" \
+                       -e "s:%%WASI_SDK_LLVM_VER%%:${WASI_SDK_LLVM_VER}:" \
+                       toolkit/moz.configure || die "Failed to update 
wasi-related paths."
+       fi
+
+       # Make LTO respect MAKEOPTS
+       sed -i -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+               "${S}"/build/moz.configure/lto-pgo.configure || die "Failed 
sedding multiprocessing.cpu_count"
+
+       sed -i -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+               "${S}"/third_party/chromium/build/toolchain/get_cpu_count.py || 
die "Failed sedding multiprocessing.cpu_count"
+
+       sed -i -e "s/multiprocessing.cpu_count()/$(makeopts_jobs)/" \
+               "${S}"/third_party/python/gyp/pylib/gyp/input.py || die "Failed 
sedding multiprocessing.cpu_count"
+
+       # sed-in toolchain prefix
+       sed -i \
+               -e "s/objdump/${CHOST}-objdump/" \
+               "${S}"/python/mozbuild/mozbuild/configure/check_debug_ranges.py 
|| die "sed failed to set toolchain prefix"
+
+       sed -i \
+               -e 's/ccache_stats = None/return None/' \
+               "${S}"/python/mozbuild/mozbuild/controller/building.py || die 
"sed failed to disable ccache stats call"
+
+       einfo "Removing pre-built binaries ..."
+
+       find "${S}"/third_party -type f \( -name '*.so' -o -name '*.o' \) 
-print -delete || die
+
+       # Clear checksums from cargo crates we've manually patched.
+       # moz_clear_vendor_checksums xyz
+
+       # Respect choice for "jumbo-build"
+       # Changing the value for FILES_PER_UNIFIED_FILE may not work, see 
#905431
+       if [[ -n ${FILES_PER_UNIFIED_FILE} ]] && use jumbo-build; then
+               local my_files_per_unified_file=${FILES_PER_UNIFIED_FILE:=16}
+               elog ""
+               elog "jumbo-build defaults modified to 
${my_files_per_unified_file}."
+               elog "if you get a build failure, try undefining 
FILES_PER_UNIFIED_FILE,"
+               elog "if that fails try -jumbo-build before opening a bug 
report."
+               elog ""
+
+               sed -i -e "s/\"FILES_PER_UNIFIED_FILE\", 
16/\"FILES_PER_UNIFIED_FILE\", "${my_files_per_unified_file}"/" \
+                       python/mozbuild/mozbuild/frontend/data.py ||
+                               die "Failed to adjust FILES_PER_UNIFIED_FILE in 
python/mozbuild/mozbuild/frontend/data.py"
+               sed -i -e "s/FILES_PER_UNIFIED_FILE = 6/FILES_PER_UNIFIED_FILE 
= "${my_files_per_unified_file}"/" \
+                       js/src/moz.build ||
+                               die "Failed to adjust FILES_PER_UNIFIED_FILE in 
js/src/moz.build"
+       fi
+
+       # Create build dir
+       BUILD_DIR="${WORKDIR}/${PN}_build"
+       mkdir -p "${BUILD_DIR}" || die
+
+       # Write API keys to disk
+       echo -n "${MOZ_API_KEY_GOOGLE//gGaPi/}" > "${S}"/api-google.key || die
+       echo -n "${MOZ_API_KEY_LOCATION//gGaPi/}" > "${S}"/api-location.key || 
die
+       echo -n "${MOZ_API_KEY_MOZILLA//m0ap1/}" > "${S}"/api-mozilla.key || die
+
+       xdg_environment_reset
+}
+
+src_configure() {
+       # Show flags set at the beginning
+       einfo "Current BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+       einfo "Current CFLAGS:\t\t${CFLAGS:-no value set}"
+       einfo "Current CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+       einfo "Current LDFLAGS:\t\t${LDFLAGS:-no value set}"
+       einfo "Current RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+       local have_switched_compiler=
+       if use clang; then
+               # Force clang
+               einfo "Enforcing the use of clang due to USE=clang ..."
+
+               local version_clang=$(clang --version 2>/dev/null | grep -F -- 
'clang version' | awk '{ print $3 }')
+               [[ -n ${version_clang} ]] && version_clang=$(ver_cut 1 
"${version_clang}")
+               [[ -z ${version_clang} ]] && die "Failed to read clang version!"
+
+               if tc-is-gcc; then
+                       have_switched_compiler=yes
+               fi
+
+               AR=llvm-ar
+               CC=${CHOST}-clang-${version_clang}
+               CXX=${CHOST}-clang++-${version_clang}
+               NM=llvm-nm
+               RANLIB=llvm-ranlib
+       elif ! use clang && ! tc-is-gcc ; then
+               # Force gcc
+               have_switched_compiler=yes
+               einfo "Enforcing the use of gcc due to USE=-clang ..."
+               AR=gcc-ar
+               CC=${CHOST}-gcc
+               CXX=${CHOST}-g++
+               NM=gcc-nm
+               RANLIB=gcc-ranlib
+       fi
+
+       if [[ -n "${have_switched_compiler}" ]] ; then
+               # Because we switched active compiler we have to ensure
+               # that no unsupported flags are set
+               strip-unsupported-flags
+       fi
+
+       # Ensure we use correct toolchain,
+       # AS is used in a non-standard way by upstream, #bmo1654031
+       export HOST_CC="$(tc-getBUILD_CC)"
+       export HOST_CXX="$(tc-getBUILD_CXX)"
+       export AS="$(tc-getCC) -c"
+
+       # Configuration tests expect llvm-readelf output, bug 913130
+       READELF="llvm-readelf"
+
+       tc-export CC CXX LD AR AS NM OBJDUMP RANLIB READELF PKG_CONFIG
+
+       # Pass the correct toolchain paths through cbindgen
+       if tc-is-cross-compiler ; then
+               export BINDGEN_CFLAGS="${SYSROOT:+--sysroot=${ESYSROOT}} 
--target=${CHOST} ${BINDGEN_CFLAGS-}"
+       fi
+
+       # Set MOZILLA_FIVE_HOME
+       export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${PN}"
+
+       # python/mach/mach/mixin/process.py fails to detect SHELL
+       export SHELL="${EPREFIX}/bin/bash"
+
+       # Set state path
+       export MOZBUILD_STATE_PATH="${BUILD_DIR}"
+
+       # Set MOZCONFIG
+       export MOZCONFIG="${S}/.mozconfig"
+
+       # Initialize MOZCONFIG
+       mozconfig_add_options_ac '' --enable-application=browser
+       mozconfig_add_options_ac '' --enable-project=browser
+
+       # Set Gentoo defaults
+       if use telemetry; then
+               export MOZILLA_OFFICIAL=1
+       fi
+
+       mozconfig_add_options_ac 'Gentoo default' \
+               --allow-addon-sideload \
+               --disable-cargo-incremental \
+               --disable-crashreporter \
+               --disable-disk-remnant-avoidance \
+               --disable-geckodriver \
+               --disable-install-strip \
+               --disable-legacy-profile-creation \
+               --disable-parental-controls \
+               --disable-strip \
+               --disable-updater \
+               --disable-wmf \
+               --enable-negotiateauth \
+               --enable-new-pass-manager \
+               --enable-official-branding \
+               --enable-packed-relative-relocs \
+               --enable-release \
+               --enable-system-policies \
+               --host="${CBUILD:-${CHOST}}" \
+               --libdir="${EPREFIX}/usr/$(get_libdir)" \
+               --prefix="${EPREFIX}/usr" \
+               --target="${CHOST}" \
+               --without-ccache \
+               --with-intl-api \
+               --with-libclang-path="$(llvm-config --libdir)" \
+               --with-system-ffi \
+               --with-system-gbm \
+               --with-system-libdrm \
+               --with-system-nspr \
+               --with-system-nss \
+               --with-system-pixman \
+               --with-system-zlib \
+               --with-toolchain-prefix="${CHOST}-" \
+               --with-unsigned-addon-scopes=app,system
+
+       # Set update channel
+       local update_channel=release
+       [[ -n ${MOZ_ESR} ]] && update_channel=esr
+       mozconfig_add_options_ac '' --enable-update-channel=${update_channel}
+
+       # Whitelist to allow unkeyworded arches to build with 
"--disable-rust-simd" by default.
+       if use amd64 || use arm64 || use ppc64 || use loong || use riscv ; then
+               mozconfig_add_options_ac '' --enable-rust-simd
+       fi
+
+       # For future keywording: This is currently (97.0) only supported on:
+       # amd64, arm, arm64 & x86.
+       # Might want to flip the logic around if Firefox is to support more 
arches.
+       # bug 833001, bug 903411#c8
+       if use loong || use ppc64 || use riscv; then
+               mozconfig_add_options_ac '' --disable-sandbox
+       elif use valgrind; then
+               mozconfig_add_options_ac 'valgrind requirement' 
--disable-sandbox
+       else
+               mozconfig_add_options_ac '' --enable-sandbox
+       fi
+
+       # riscv-related options, bgo#947337, bgo#947338
+       if use riscv ; then
+               mozconfig_add_options_ac 'Disable JIT for RISC-V 64' 
--disable-jit
+               mozconfig_add_options_ac 'Disable webrtc for RISC-V' 
--disable-webrtc
+       fi
+
+       if [[ -s "${S}/api-google.key" ]] ; then
+               local key_origin="Gentoo default"
+               if [[ $(cat "${S}/api-google.key" | md5sum | awk '{ print $1 
}') != 709560c02f94b41f9ad2c49207be6c54 ]] ; then
+                       key_origin="User value"
+               fi
+
+               mozconfig_add_options_ac "${key_origin}" \
+                       
--with-google-safebrowsing-api-keyfile="${S}/api-google.key"
+       else
+               einfo "Building without Google API key ..."
+       fi
+
+       if [[ -s "${S}/api-location.key" ]] ; then
+               local key_origin="Gentoo default"
+               if [[ $(cat "${S}/api-location.key" | md5sum | awk '{ print $1 
}') != ffb7895e35dedf832eb1c5d420ac7420 ]] ; then
+                       key_origin="User value"
+               fi
+
+               mozconfig_add_options_ac "${key_origin}" \
+                       
--with-google-location-service-api-keyfile="${S}/api-location.key"
+       else
+               einfo "Building without Location API key ..."
+       fi
+
+       if [[ -s "${S}/api-mozilla.key" ]] ; then
+               local key_origin="Gentoo default"
+               if [[ $(cat "${S}/api-mozilla.key" | md5sum | awk '{ print $1 
}') != 3927726e9442a8e8fa0e46ccc39caa27 ]] ; then
+                       key_origin="User value"
+               fi
+
+               mozconfig_add_options_ac "${key_origin}" \
+                       --with-mozilla-api-keyfile="${S}/api-mozilla.key"
+       else
+               einfo "Building without Mozilla API key ..."
+       fi
+
+       mozconfig_use_with system-av1
+       mozconfig_use_with system-harfbuzz
+       mozconfig_use_with system-icu
+       mozconfig_use_with system-jpeg
+       mozconfig_use_with system-libevent
+       mozconfig_use_with system-libvpx
+       mozconfig_use_with system-pipewire
+       mozconfig_use_with system-png
+       mozconfig_use_with system-webp
+
+       mozconfig_use_enable dbus
+       mozconfig_use_enable libproxy
+       mozconfig_use_enable valgrind
+
+       use eme-free && mozconfig_add_options_ac '+eme-free' --disable-eme
+
+       if use hardened ; then
+               mozconfig_add_options_ac "+hardened" --enable-hardening
+               append-ldflags "-Wl,-z,relro -Wl,-z,now"
+
+               # Increase the FORTIFY_SOURCE value, #910071.
+               sed -i -e '/-D_FORTIFY_SOURCE=/s:2:3:' 
"${S}"/build/moz.configure/toolchain.configure || die
+       fi
+
+       local myaudiobackends=""
+       use jack && myaudiobackends+="jack,"
+       use sndio && myaudiobackends+="sndio,"
+       use pulseaudio && myaudiobackends+="pulseaudio,"
+       ! use pulseaudio && myaudiobackends+="alsa,"
+
+       mozconfig_add_options_ac '--enable-audio-backends' 
--enable-audio-backends="${myaudiobackends::-1}"
+
+       mozconfig_use_enable wifi necko-wifi
+
+       ! use jumbo-build && mozconfig_add_options_ac '--disable-unified-build' 
--disable-unified-build
+
+       if use X && use wayland ; then
+               mozconfig_add_options_ac '+x11+wayland' 
--enable-default-toolkit=cairo-gtk3-x11-wayland
+       elif ! use X && use wayland ; then
+               mozconfig_add_options_ac '+wayland' 
--enable-default-toolkit=cairo-gtk3-wayland-only
+       else
+               mozconfig_add_options_ac '+x11' 
--enable-default-toolkit=cairo-gtk3-x11-only
+       fi
+
+       # wasm-sandbox
+       # Since graphite2 is one of the sandboxed libraries, system-graphite2 
obviously can't work with +wasm-sandbox.
+       if use wasm-sandbox ; then
+               mozconfig_add_options_ac '+wasm-sandbox' 
--with-wasi-sysroot="${WORKDIR}/wasi-sdk-${WASI_SDK_VER}-${wasi_arch}-linux/share/wasi-sysroot/"
+       else
+               mozconfig_add_options_ac 'no wasm-sandbox' 
--without-wasm-sandboxed-libraries
+               mozconfig_use_with system-harfbuzz system-graphite2
+       fi
+
+       ! use jpegxl && mozconfig_add_options_ac '-jpegxl' --disable-jxl
+
+       if [[ ${use_lto} == "yes" ]] ; then
+               if use clang ; then
+                       # Upstream only supports lld or mold when using clang.
+                       if tc-ld-is-mold ; then
+                               # mold expects the -flto line from *FLAGS 
configuration, bgo#923119
+                               append-ldflags "-flto=thin"
+                               mozconfig_add_options_ac "using ld=mold due to 
system selection" --enable-linker=mold
+                       else
+                               mozconfig_add_options_ac "forcing ld=lld due to 
USE=clang and USE=lto" --enable-linker=lld
+                       fi
+
+                       mozconfig_add_options_ac '+lto' --enable-lto=cross
+
+               else
+                       # ThinLTO is currently broken, see bmo#1644409.
+                       # mold does not support gcc+lto combination.
+                       mozconfig_add_options_ac '+lto' --enable-lto=full
+                       mozconfig_add_options_ac "linker is set to bfd" 
--enable-linker=bfd
+               fi
+
+       else
+               # Avoid auto-magic on linker
+               if use clang ; then
+                       # lld is upstream's default
+                       if tc-ld-is-mold ; then
+                               mozconfig_add_options_ac "using ld=mold due to 
system selection" --enable-linker=mold
+                       else
+                               mozconfig_add_options_ac "forcing ld=lld due to 
USE=clang" --enable-linker=lld
+                       fi
+
+               else
+                       if tc-ld-is-mold ; then
+                               mozconfig_add_options_ac "using ld=mold due to 
system selection" --enable-linker=mold
+                       else
+                               mozconfig_add_options_ac "linker is set to bfd 
due to USE=-clang" --enable-linker=bfd
+                       fi
+               fi
+       fi
+
+       # PGO was moved outside lto block to allow building pgo without lto.
+       if use pgo ; then
+               mozconfig_add_options_ac '+pgo' MOZ_PGO=1
+
+               if use clang ; then
+                       # Used in build/pgo/profileserver.py
+                       export LLVM_PROFDATA="llvm-profdata"
+               fi
+       fi
+
+       mozconfig_use_enable debug
+       if use debug ; then
+               mozconfig_add_options_ac '+debug' --disable-optimize
+               mozconfig_add_options_ac '+debug' --enable-jemalloc
+               mozconfig_add_options_ac '+debug' --enable-real-time-tracing
+       else
+               mozconfig_add_options_ac 'Gentoo defaults' 
--disable-real-time-tracing
+
+               if is-flag '-g*' ; then
+                       if use clang ; then
+                               mozconfig_add_options_ac 'from CFLAGS' 
--enable-debug-symbols=$(get-flag '-g*')
+                       else
+                               mozconfig_add_options_ac 'from CFLAGS' 
--enable-debug-symbols
+                       fi
+               else
+                       mozconfig_add_options_ac 'Gentoo default' 
--disable-debug-symbols
+               fi
+
+               if is-flag '-O0' ; then
+                       mozconfig_add_options_ac "from CFLAGS" 
--enable-optimize=-O0
+               elif is-flag '-O4' ; then
+                       mozconfig_add_options_ac "from CFLAGS" 
--enable-optimize=-O4
+               elif is-flag '-O3' ; then
+                       mozconfig_add_options_ac "from CFLAGS" 
--enable-optimize=-O3
+               elif is-flag '-O1' ; then
+                       mozconfig_add_options_ac "from CFLAGS" 
--enable-optimize=-O1
+               elif is-flag '-Os' ; then
+                       mozconfig_add_options_ac "from CFLAGS" 
--enable-optimize=-Os
+               else
+                       mozconfig_add_options_ac "Gentoo default" 
--enable-optimize=-O2
+               fi
+       fi
+
+       # Debug flag was handled via configure
+       filter-flags '-g*'
+
+       # Optimization flag was handled via configure
+       filter-flags '-O*'
+
+       # elf-hack
+       # Filter "-z,pack-relative-relocs" and let the build system handle it 
instead.
+       if use amd64 || use x86 ; then
+               filter-flags "-z,pack-relative-relocs"
+
+               if tc-ld-is-mold ; then
+                       # relr-elf-hack is currently broken with mold, 
bgo#916259
+                       mozconfig_add_options_ac 'disable elf-hack with mold 
linker' --disable-elf-hack
+               else
+                       mozconfig_add_options_ac 'relr elf-hack' 
--enable-elf-hack=relr
+               fi
+       elif use loong || use ppc64 || use riscv ; then
+               # '--disable-elf-hack' is not recognized on loong/ppc64/riscv,
+               # see bgo #917049, #930046
+               :;
+       else
+               mozconfig_add_options_ac 'disable elf-hack on non-supported 
arches' --disable-elf-hack
+       fi
+
+       if ! use elibc_glibc; then
+               mozconfig_add_options_ac '!elibc_glibc' --disable-jemalloc
+       fi
+
+       if use valgrind; then
+               mozconfig_add_options_ac 'valgrind requirement' 
--disable-jemalloc
+       fi
+
+       # System-av1 fix
+       use system-av1 && append-ldflags "-Wl,--undefined-version"
+
+       # Make revdep-rebuild.sh happy; Also required for musl
+       append-ldflags -Wl,-rpath="${MOZILLA_FIVE_HOME}",--enable-new-dtags
+
+       # Pass $MAKEOPTS to build system
+       export MOZ_MAKE_FLAGS="${MAKEOPTS}"
+
+       # Use system's Python environment
+       export PIP_NETWORK_INSTALL_RESTRICTED_VIRTUALENVS=mach
+
+       export MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE="none"
+
+       if ! use telemetry; then
+               mozconfig_add_options_mk '-telemetry setting' 
"MOZ_CRASHREPORTER=0"
+               mozconfig_add_options_mk '-telemetry setting' 
"MOZ_DATA_REPORTING=0"
+               mozconfig_add_options_mk '-telemetry setting' 
"MOZ_SERVICES_HEALTHREPORT=0"
+               mozconfig_add_options_mk '-telemetry setting' 
"MOZ_TELEMETRY_REPORTING=0"
+       fi
+
+       mozconfig_use_enable test tests
+
+       # Disable notification when build system has finished
+       export MOZ_NOSPAM=1
+
+       # Portage sets XARGS environment variable to "xargs -r" by default which
+       # breaks build system's check_prog() function which doesn't support 
arguments
+       mozconfig_add_options_ac 'Gentoo default' 
"XARGS=${EPREFIX}/usr/bin/xargs"
+
+       # Set build dir
+       mozconfig_add_options_mk 'Gentoo default' "MOZ_OBJDIR=${BUILD_DIR}"
+
+       # Show flags we will use
+       einfo "Build BINDGEN_CFLAGS:\t${BINDGEN_CFLAGS:-no value set}"
+       einfo "Build CFLAGS:\t\t${CFLAGS:-no value set}"
+       einfo "Build CXXFLAGS:\t\t${CXXFLAGS:-no value set}"
+       einfo "Build LDFLAGS:\t\t${LDFLAGS:-no value set}"
+       einfo "Build RUSTFLAGS:\t\t${RUSTFLAGS:-no value set}"
+
+       # Handle EXTRA_CONF and show summary
+       local ac opt hash reason
+
+       # Apply EXTRA_ECONF entries to $MOZCONFIG
+       if [[ -n ${EXTRA_ECONF} ]] ; then
+               IFS=\! read -a ac <<<${EXTRA_ECONF// --/\!}
+               for opt in "${ac[@]}"; do
+                       mozconfig_add_options_ac "EXTRA_ECONF" --${opt#--}
+               done
+       fi
+
+       echo
+       echo "=========================================================="
+       echo "Building ${PF} with the following configuration"
+       grep ^ac_add_options "${MOZCONFIG}" | while read ac opt hash reason; do
+               [[ -z ${hash} || ${hash} == \# ]] \
+                       || die "error reading mozconfig: ${ac} ${opt} ${hash} 
${reason}"
+               printf "    %-30s  %s\n" "${opt}" "${reason:-mozilla.org 
default}"
+       done
+       echo "=========================================================="
+       echo
+
+       if use valgrind; then
+               sed -i -e 's/--enable-optimize=-O[0-9s]/--enable-optimize="-g 
-O2"/' .mozconfig || die
+       fi
+
+       ./mach configure || die
+}
+
+src_compile() {
+       local virtx_cmd=
+
+       if [[ ${use_lto} == "yes" ]] && tc-ld-is-mold; then
+               # increase ulimit with mold+lto, bugs #892641, #907485
+               if ! ulimit -n 16384 1>/dev/null 2>&1 ; then
+                       ewarn "Unable to modify ulimits - building with 
mold+lto might fail due to low ulimit -n resources."
+                       ewarn "Please see bugs #892641 & #907485."
+               else
+                       ulimit -n 16384
+               fi
+       fi
+
+       if use pgo; then
+               # Reset and cleanup environment variables used by GNOME/XDG
+               gnome2_environment_reset
+
+               addpredict /root
+
+               if ! use X; then
+                       virtx_cmd=virtwl
+               else
+                       virtx_cmd=virtx
+               fi
+       fi
+
+       if ! use X; then
+               local -x GDK_BACKEND=wayland
+       else
+               local -x GDK_BACKEND=x11
+       fi
+
+       ${virtx_cmd} ./mach build --verbose || die
+}
+
+src_test() {
+       # 
https://firefox-source-docs.mozilla.org/testing/automated-testing/index.html
+       local -a failures=()
+
+       # Some tests respect this
+       local -x MOZ_HEADLESS=1
+
+       # Check testing/mach_commands.py
+       einfo "Testing with cppunittest ..."
+       ./mach cppunittest
+       local ret=$?
+       if [[ ${ret} -ne 0 ]]; then
+               eerror "Test suite cppunittest failed with error code ${ret}"
+               failures+=( cppunittest )
+       fi
+
+       if [[ ${#failures} -eq 0 ]]; then
+               einfo "Test suites succeeded"
+       else
+               die "Test suites failed: ${failures[@]}"
+       fi
+}
+
+src_install() {
+       # xpcshell is getting called during install
+       pax-mark m \
+               "${BUILD_DIR}"/dist/bin/xpcshell \
+               "${BUILD_DIR}"/dist/bin/${PN} \
+               "${BUILD_DIR}"/dist/bin/plugin-container
+
+       DESTDIR="${D}" ./mach install || die
+
+       # Upstream cannot ship symlink but we can (bmo#658850)
+       rm "${ED}${MOZILLA_FIVE_HOME}/${PN}-bin" || die
+       dosym ${PN} ${MOZILLA_FIVE_HOME}/${PN}-bin
+
+       # Don't install llvm-symbolizer from llvm-core/llvm package
+       if [[ -f "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" ]] ; then
+               rm -v "${ED}${MOZILLA_FIVE_HOME}/llvm-symbolizer" || die
+       fi
+
+       # Install policy (currently only used to disable application updates)
+       insinto "${MOZILLA_FIVE_HOME}/distribution"
+       newins "${FILESDIR}"/distribution.ini distribution.ini
+       newins "${FILESDIR}"/disable-auto-update.policy.json policies.json
+
+       # Install system-wide preferences
+       local PREFS_DIR="${MOZILLA_FIVE_HOME}/browser/defaults/preferences"
+       insinto "${PREFS_DIR}"
+       newins "${FILESDIR}"/gentoo-default-prefs.js gentoo-prefs.js
+
+       local GENTOO_PREFS="${ED}${PREFS_DIR}/gentoo-prefs.js"
+
+       # Set dictionary path to use system hunspell
+       cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set 
spellchecker.dictionary_path pref"
+       pref("spellchecker.dictionary_path", "${EPREFIX}/usr/share/myspell");
+       EOF
+
+       # Force hwaccel prefs if USE=hwaccel is enabled
+       if use hwaccel ; then
+               cat "${FILESDIR}"/gentoo-hwaccel-prefs.js-r2 \
+               >>"${GENTOO_PREFS}" \
+               || die "failed to add prefs to force hardware-accelerated 
rendering to all-gentoo.js"
+
+               if use wayland; then
+                       cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set 
hwaccel wayland prefs"
+                       pref("gfx.x11-egl.force-enabled", false);
+                       EOF
+               else
+                       cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set 
hwaccel x11 prefs"
+                       pref("gfx.x11-egl.force-enabled", true);
+                       EOF
+               fi
+
+               # Install the vaapitest binary on supported arches (122.0 
supports all platforms, bmo#1865969)
+               exeinto "${MOZILLA_FIVE_HOME}"
+               doexe "${BUILD_DIR}"/dist/bin/vaapitest
+
+               # Install the v4l2test on supported arches (+ arm, + riscv64 
when keyworded)
+               if use arm64 ; then
+                       exeinto "${MOZILLA_FIVE_HOME}"
+                       doexe "${BUILD_DIR}"/dist/bin/v4l2test
+               fi
+       fi
+
+       if ! use gmp-autoupdate ; then
+               local plugin
+               for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+                       einfo "Disabling auto-update for ${plugin} plugin ..."
+                       cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to 
disable autoupdate for ${plugin} media plugin"
+                       pref("media.${plugin}.autoupdate", false);
+                       EOF
+               done
+       fi
+
+       # Force the graphite pref if USE=system-harfbuzz is enabled, since the 
pref cannot disable it
+       if use system-harfbuzz ; then
+               cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to set 
gfx.font_rendering.graphite.enabled pref"
+               sticky_pref("gfx.font_rendering.graphite.enabled", true);
+               EOF
+       fi
+
+       # Add telemetry config prefs, just in case something happens in future 
and telemetry build
+       # options stop working.
+       if ! use telemetry ; then
+               cat "${FILESDIR}"/gentoo-telemetry-prefs.js >>"${GENTOO_PREFS}" 
|| die "failed to set telemetry prefs"
+       fi
+
+       # Install language packs
+       local langpacks=( $(find "${WORKDIR}/language_packs" -type f -name 
'*.xpi') )
+       if [[ -n "${langpacks}" ]] ; then
+               moz_install_xpi "${MOZILLA_FIVE_HOME}/distribution/extensions" 
"${langpacks[@]}"
+       fi
+
+       # Install icons
+       local icon_srcdir="${S}/browser/branding/official"
+
+       # Prefer the upstream svg file they use when packaging flatpak so it's 
always up-to-date.
+       insinto /usr/share/icons/hicolor/symbolic/apps
+       newins 
"${S}"/browser/installer/linux/app/flatpak/files/share/icons/hicolor/symbolic/apps/org.mozilla.firefox-symbolic.svg
 firefox-symbolic.svg
+       dosym -r /usr/share/icons/hicolor/symbolic/apps/firefox-symbolic.svg 
/usr/share/icons/hicolor/symbolic/apps/org.mozilla.firefox-symbolic.svg
+
+       local icon size
+       for icon in "${icon_srcdir}"/default*.png ; do
+               size=${icon%.png}
+               size=${size##*/default}
+
+               if [[ ${size} -eq 48 ]] ; then
+                       newicon "${icon}" ${PN}.png
+               fi
+
+               newicon -s ${size} "${icon}" ${PN}.png
+       done
+
+       # Install menu
+       local app_name="Mozilla ${MOZ_PN^}"
+       local desktop_file="${FILESDIR}/icon/${PN}-r3.desktop"
+       local exec_command="${PN}"
+       local icon="${PN}"
+       local use_wayland="false"
+
+       if [[ -n ${MOZ_ESR} ]] ; then
+               local desktop_filename="${PN}-esr.desktop"
+       else
+               local desktop_filename="${PN}.desktop"
+       fi
+
+       if use wayland ; then
+               use_wayland="true"
+       fi
+
+       cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die
+
+       sed -i \
+               -e "s:@NAME@:${app_name}:" \
+               -e "s:@EXEC@:${exec_command}:" \
+               -e "s:@ICON@:${icon}:" \
+               "${WORKDIR}/${PN}.desktop-template" || die
+
+       newmenu "${WORKDIR}/${PN}.desktop-template" "${desktop_filename}"
+
+       rm "${WORKDIR}/${PN}.desktop-template" || die
+
+       if use gnome-shell ; then
+               # Install search provider for Gnome
+               insinto /usr/share/gnome-shell/search-providers/
+               doins 
browser/components/shell/search-provider-files/org.mozilla.firefox.search-provider.ini
+
+               insinto /usr/share/dbus-1/services/
+               doins 
browser/components/shell/search-provider-files/org.mozilla.firefox.SearchProvider.service
+
+               # Toggle between rapid and esr desktop file names
+               if [[ -n ${MOZ_ESR} ]] ; then
+                       sed -e "s/firefox.desktop/${desktop_filename}/g" \
+                               -i 
"${ED}/usr/share/gnome-shell/search-providers/org.mozilla.firefox.search-provider.ini"
 ||
+                                       die "Failed to sed 
org.mozilla.firefox.search-provider.ini file."
+               fi
+
+               # Make the dbus service aware of a previous session, bgo#939196
+               sed -e \
+                       
"s/Exec=\/usr\/bin\/firefox/Exec=\/usr\/$(get_libdir)\/firefox\/firefox 
--dbus-service \/usr\/bin\/firefox/g" \
+                       -i 
"${ED}/usr/share/dbus-1/services/org.mozilla.firefox.SearchProvider.service" ||
+                               die "Failed to sed 
org.mozilla.firefox.SearchProvider.service dbus file"
+
+               # Update prefs to enable Gnome search provider
+               cat >>"${GENTOO_PREFS}" <<-EOF || die "failed to enable 
gnome-search-provider via prefs"
+               pref("browser.gnome-search-provider.enabled", true);
+               EOF
+       fi
+
+       # Install wrapper script
+       [[ -f "${ED}/usr/bin/${PN}" ]] && rm "${ED}/usr/bin/${PN}"
+       newbin "${FILESDIR}/${PN}-r1.sh" ${PN}
+
+       # Update wrapper
+       sed -i \
+               -e "s:@PREFIX@:${EPREFIX}/usr:" \
+               -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+               "${ED}/usr/bin/${PN}" || die
+
+       readme.gentoo_create_doc
+}
+
+pkg_postinst() {
+       xdg_pkg_postinst
+
+       if ! use gmp-autoupdate ; then
+               elog "USE='-gmp-autoupdate' has disabled the following plugins 
from updating or"
+               elog "installing into new profiles:"
+               local plugin
+               for plugin in "${MOZ_GMP_PLUGIN_LIST[@]}" ; do
+                       elog "\t ${plugin}"
+               done
+               elog
+       fi
+
+       # bug 835078
+       if use hwaccel && has_version "x11-drivers/xf86-video-nouveau"; then
+               ewarn "You have nouveau drivers installed in your system and 
'hwaccel' "
+               ewarn "enabled for Firefox. Nouveau / your GPU might not 
support the "
+               ewarn "required EGL, so either disable 'hwaccel' or try the 
workaround "
+               ewarn "explained in https://bugs.gentoo.org/835078#c5 if 
Firefox crashes."
+       fi
+
+       readme.gentoo_print_elog
+
+       optfeature_header "Optional programs for extra features:"
+       optfeature "desktop notifications" x11-libs/libnotify
+       optfeature "fallback mouse cursor theme e.g. on WMs" 
gnome-base/gsettings-desktop-schemas
+       optfeature "screencasting with pipewire" sys-apps/xdg-desktop-portal
+       if use hwaccel && has_version "x11-drivers/nvidia-drivers"; then
+               optfeature "hardware acceleration with NVIDIA cards" 
media-libs/nvidia-vaapi-driver
+       fi
+
+       if ! has_version "sys-libs/glibc"; then
+               elog
+               elog "glibc not found! You won't be able to play DRM content."
+               elog "See Gentoo bug #910309 or upstream bug #1843683."
+               elog
+       fi
+}

Reply via email to