summaryrefslogtreecommitdiff
path: root/www-client
diff options
context:
space:
mode:
authorLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-04-08 19:15:18 +0000
committerLiguros - Gitlab CI/CD [develop] <gitlab@liguros.net>2026-04-08 19:15:18 +0000
commita49b06a8e3f4f5acd879c26026dde277285ed03d (patch)
tree42768c87f3b07287e79c37dbfc8d618992c78a23 /www-client
parenta6a2723d14d4f75c9ff0ca130d38adb96945ada5 (diff)
downloadbaldeagleos-repo-a49b06a8e3f4f5acd879c26026dde277285ed03d.tar.gz
baldeagleos-repo-a49b06a8e3f4f5acd879c26026dde277285ed03d.tar.xz
baldeagleos-repo-a49b06a8e3f4f5acd879c26026dde277285ed03d.zip
Adding metadata
Diffstat (limited to 'www-client')
-rw-r--r--www-client/firefox-bin/Manifest99
-rw-r--r--www-client/firefox-bin/firefox-bin-149.0.2.ebuild360
-rw-r--r--www-client/firefox-l10n/Manifest100
-rw-r--r--www-client/firefox-l10n/firefox-l10n-149.0.2.ebuild181
-rw-r--r--www-client/firefox/Manifest2
-rw-r--r--www-client/firefox/firefox-149.0.2.ebuild1388
-rw-r--r--www-client/ungoogled-chromium/Manifest3
-rw-r--r--www-client/ungoogled-chromium/ungoogled-chromium-147.0.7727.55_p1.ebuild2137
8 files changed, 4270 insertions, 0 deletions
diff --git a/www-client/firefox-bin/Manifest b/www-client/firefox-bin/Manifest
index c5457c0d5772..a25cc57616ad 100644
--- a/www-client/firefox-bin/Manifest
+++ b/www-client/firefox-bin/Manifest
@@ -386,13 +386,112 @@ DIST firefox-149.0-vi.xpi 500962 BLAKE2B f2706ddb591e017fcbe12e57ac052aeaa6a221b
DIST firefox-149.0-xh.xpi 271712 BLAKE2B 708e303c2b7cd1c8ef0575a4b1f40ce39ab41c688eff37170ac6309f63cd610f5b3e49c2f262b49843cfb8ae7a428db3a4ee7ddb4fb65343fb56a80103b6a2ed SHA512 81fb0f7e62b630e3980cbd8247bf00587d51a00941f378fe7d8e6bb50b9cf40817afb37f3e5e4fed19a3aae1fd197a2bb2bd13f03b5486aae5fa129000312eca
DIST firefox-149.0-zh-CN.xpi 489028 BLAKE2B 2503bb6cc6ac678de0b6415bdf1b11f82b586abab3e4cf8b9ca5d51a0d4d99e67c4659c13bfa5bdc29e7de1c4e61306b463954517c90890057ab340115b2c5ff SHA512 feee1661fd504641c57446c9621931e937c16a6f211b5657302d6269cdd2ab97b5b1241362eddb62879beb79667759a99f58c45bd5c13a4f5736abba730025cc
DIST firefox-149.0-zh-TW.xpi 495341 BLAKE2B 74d44ce8ef8881131d9679bc15c70a755d3c3e8204d921cca7e58e2c1c3d5df95b1ba4efb30278a5e919fb83cddd05370a72da2c4f376705173192f1d12c91a7 SHA512 05b795f218a7126e0c619954eb5fd00da6b69a8264a5193f8deb377c4b87c4e19e227a2d66c42411ef20ce823604e911e2d01a74e404c955a094d84711321dd7
+DIST firefox-149.0.2-ach.xpi 292197 BLAKE2B 261dc2882ef6da91632e815e2647e598215964ba324fcc383c2cffa6e02cb6398b86c3316607865ed01cb45642cb5041e955d05e485a46b3a7f66b67b3ae774a SHA512 593549703fd69bfa024b350503dd7a9be283d9ccf40fe2e44a02c2b5df153f4943de4825db264ee522ed2bb3b061e1ebb8c471ecfe9ae3b9467fad944ca994e8
+DIST firefox-149.0.2-af.xpi 265697 BLAKE2B d90cf8edec8a3fb60dffce6f92b80640b81e6f4cb852460c123637f8ae35b4effddf9df5d49ba4a0d4ea64684d9c4008068872711739350650420b07e0ca9173 SHA512 23c2d57a2b05dffbd5132792ee8550d6995977778c637bc26cbaaba824ef4ccb74182edc6e8d38c67aae3e552ba7236d17def329f08e7443c53e8ddc34f9cbfd
+DIST firefox-149.0.2-an.xpi 329421 BLAKE2B e7dee8eb9ae6ae81e83b737589afc7a5fa070bacddffa363fed8c68c20d0fe0f7f06318520d35abf2b19a8d8e14ac50f439af33fe141ca870304e5fce6df3a26 SHA512 f412086f0872815c594a9fad1ca56d4df1981bc0e8eb36d745328c977caa5fee89d6ea09143f7282d63b09e6f2ac0e07972fe698e0bbc8b30dba875fe2e92bae
+DIST firefox-149.0.2-ar.xpi 450206 BLAKE2B 65776ade5c73d7d161208cdeb2a88d34cb3ad81fa911650acb7921b50a53d4f0d5bfcdb3a73ab3c208ed0bd2b12207f8a02f3ea686f4c5a64395a6b359d83511 SHA512 a451d4772c021c7029943316caaff0e49a5d820b5a90e83c7b3210c9985a9a48f487ee43a4927f90f7d3166e4e449823aeeefd7e52222e0889c0e1c282481382
+DIST firefox-149.0.2-ast.xpi 310025 BLAKE2B 6d58ad85b00e4b76edabb0d2f2c1ea2348f11a4427228d75a6d335275c3b5a76d036bfe522d3da0d44e10d7b11b72ee0d92732fcc89296ee1f7240d6fc0b3ffa SHA512 51765ad400323228eb62bec6cd4102ee02a76bd7cc500091621d2183e112745d3532f76b4d7250290a58ec5888bb58a180a6554c0302f5e8067c8f008fbce230
+DIST firefox-149.0.2-az.xpi 316107 BLAKE2B 2e6a7da2383559118f29bab0b2477beea52a3a984591af85afda59ffaf61c1ad18c837bfb16cad8305499bcb96446a799716e63dd83b74a2d64d405dec35ac27 SHA512 0fb0b4471c8a2e67a54cb53723c291f9e68e878904befed1db1e512e1c7df56b375b6edf68fe680bfbabbca33f034eade24ea051fd699323f9708066fa18eade
+DIST firefox-149.0.2-be.xpi 559505 BLAKE2B f893a888c08bd4f739c4b04ab8266cc370f2ae6cd8c82bb73bdfddb6830f6a4dcb828cc28079dd9ca416273a3a9b37d3e5919d90548fcb18da46d19ee09ae1d8 SHA512 dd1d55d5cb36ccf33baa4b9ae7bf147412e8fd41beed73c8d9b2301e6ad679685a8a2fa0a6a5bd707c17cf8d30cb7824f9222c5b6a75a7680954df58091f20bd
+DIST firefox-149.0.2-bg.xpi 459956 BLAKE2B 83cae6f7dc0e7535262a4b1ac8543a5b7cb81e6f0cf9743d42f8b551ce8fdc0e256c0ec62b781237bca0549749e195cacd15d2772e90e6c1c04b32cfece14a8d SHA512 652b6dfb2240177c1900612d3979865c90b1011d0d8fd57d2b1aeb8a2307707670ff6c69e8225c72cf8834804adbfbe7de5d8a577e03dcc43fab3639d25d1ac3
+DIST firefox-149.0.2-bn.xpi 410070 BLAKE2B 802b06dd254d351b1c86e168d6f52d692778c2eef7df78b7df059c9e8c102eddb0eb548bfd9426874d9f6c2f0089accdf6b8ac87939ba3c7f3101412e4c68d57 SHA512 8084c1f748adea292e1ebf580b875446a8feb368bd7f6e5a6d00f1f91515bd8b3cbb18d0f1e1d222d56e0bf3d966a58b1f5db2a6838192a7444ef54e05911fcf
+DIST firefox-149.0.2-br.xpi 391505 BLAKE2B f4306217f603d8f7c158ad350a04499fb0d2f1a91be24e1975774424e6c4423cb06e58e47459e38769742522750a088d342169ad5349b90ccf90a29a486a9bc8 SHA512 f087693dfebbcbe5c5dd3f90dc8fb54b4c224d40db70ad7e528b5ea9e931747198959106e402443e3a672c53b706bc38f141306a968bc557980eb55d73911963
+DIST firefox-149.0.2-bs.xpi 447233 BLAKE2B af3e872044fadef1bcff688afb6367706ac9a6fe8320a8f827e228c7c004b6e11f5f576b115f0127c502bca39b6ae5bfd869979865912b9a4ab2a066d5276057 SHA512 c1c8e0f03a490e75fd61a683f94b4a1a3673cc7a6dcee1924750fc8f453088c47333d7b4d3b124d7ac9f008bd7ebc405d120333b0177d9fbd0f649c7be84d6da
+DIST firefox-149.0.2-ca-valencia.xpi 355196 BLAKE2B 7ff7c36861f7c46b8e6ad96dc5d707e31915654659aa563e4f0befeddc1716930dd75d7c4c5f783819309a5d266a83a9620bef80f8a747c1dcffea840d5d2bf7 SHA512 42c37f1ff2ad4fd280b46c69d56ae6575663c8de8ec5bc4aff5e0739522ce29881546519497f857213df9d18d3cbe0c38d7b5f860c7068b6eeb1ee8234f80b27
+DIST firefox-149.0.2-ca.xpi 421988 BLAKE2B 900f2226bc655adfffdcb9684fad1222c5cf7cc2ccce9eb85622c9deb1a497e9c5b5d04b34d889553135c336772dc8b3854014894e9fec8846ba78ff1392b8e0 SHA512 5bd47f0650289b3f5347c8afd5e6fa752778f9f036b423a6ae11e6fd688baa25d47a1d9d28bb8e80a73c7769e7b9580665f5a311e1cab45f359521836648f96b
+DIST firefox-149.0.2-cak.xpi 387024 BLAKE2B a5371d6508777fc4b1af6b2a4f355c9c58a05bf39548a7d1702ad2f22f751850f893924f6b6d437118c4d6f9e8e211952ecade30a31e563b84fffd7f3391376f SHA512 5a751f9bef71cb9ec2960e53a60e18b46ca7e5ffacf2caf932fffd591186fe4afc9a1ac9f869d2d25701a54e55fbb4655fac49054bad7a9e46a5ebec61f2234c
+DIST firefox-149.0.2-cs.xpi 511493 BLAKE2B 49e9fcbc092161632b4890f15fbe8c553e2c47010ff994895000e0797d12ee8020b4bc9890f9744cfeb484903dacbc64379498aa6dfcc9d66878e370a06992ff SHA512 548748d8fee158a073ee1a0c6c0f57b2e64a0af7132c7fc87e4caf91428877e93da57d544c2d645edfaa3c7a69e648496dee7172d0238d8d72acccc8d35666f1
+DIST firefox-149.0.2-cy.xpi 473334 BLAKE2B 6f7a2b96da41bce00cba1f9a9e8c1ede00f94a49d18f7be393a59810d69c8efd9c1263ce2c4fee2ff64a6d9cee445411b58d81c5eda679a0779536526c86399e SHA512 24f0bbb19dcc953554f114fd89a84ee36f775c9b1910eea0d73b03e7568eeab35703e44f20f32b4e4708f3f6c9ac8bf5feeba7f0f239e93b16f5310f9164e467
+DIST firefox-149.0.2-da.xpi 457730 BLAKE2B 38df8ae8684725a5cf4277f1eb99fd7772e539e12262bfeb0b5e61e11e4c5e9817884bc92813c5f5bb45575682813c4b247f7ab0c472e8b34aaa748bd329d589 SHA512 0ed8a6db6d9e5f7da0c756b0c4b861ac2dc07bf9eed14a59bb46ee95938a673896ff01b4b3862dafac0dfbe3657a38f9fa5eadf4f33eeb42a160c5f50b00b468
+DIST firefox-149.0.2-de.xpi 484790 BLAKE2B 12522e939a75a4da3835e1521b5677de86769b15eed4005f5c11099c3c65a3eae7c01a3879ac2e0d142d58284dcfa490e8965a6a435c791b09d8c2d16c3abec0 SHA512 6ed7333aff97adf1a335e359355b3ffc595d17e83e32728d582c97d1c9fd9d639ff26a6c998e3592f8211d921c48d717144db89e90d66fffbb803b40ced5459c
+DIST firefox-149.0.2-dsb.xpi 498654 BLAKE2B eac94aadde2232bab81381a65ba33ce90a2596c6017f8b51eb8d2a8bfa4ebaff56704457fac19c6df90e90b8d794e80cd05f574c5dedabef7565d50f52e46649 SHA512 44e7e020ce4d08502232f1ce96f81fd3e22445b3cb6fd4a067cbe5b672b880ee2456516acfbc72b387168ba75adbdee86f1517be3e6e632c6618aef51cd0fa53
+DIST firefox-149.0.2-el.xpi 575216 BLAKE2B c2afeb18924d67d996d807ef41a64f954f43fb027a685eac089438e5668bb5b97407882cbf99ffccbd230c0ab2fba98d8226f3e61b4342bd2d551fac02347d15 SHA512 46b9d2496f88ab3e5f88dc320e78369363a0460daa44da0b67ed664ed17269a743c21a28fbc99271df21ba62653b3204c0c5e83cf9690ec4e78cc86d4a542a63
+DIST firefox-149.0.2-en-CA.xpi 438355 BLAKE2B 90abb6e9c20e93f7f04005fc11cc1a2073ca214492312d8e128a4b32b93e0a702cd556ad33eae01eceb0fa37a93a00dbe7218dbba7aa093afbff9f74b6586874 SHA512 ca7e4ab18cbf1373d3702b0ad02fdc828c194905ec0f24f781d69b39ab545a1b606d88e7815e06ed5ac7736744c26fc2cc5bbdbf10cc6d6d26d3f21007c93a7b
+DIST firefox-149.0.2-en-GB.xpi 438741 BLAKE2B b19da934924c492434cd87f6cc321c2f6978fb83e821bcff3959b74cb0ececeab2c28b9328bcb6d56ee0ec1cb0ae13236f2b9fe9edf170ac701efe88d21ec8e7 SHA512 451eb1a3596cc6853bb7d3523c5ac30a3d57589668f765be92938f7b20771bcdc74dabc051ad66c17ef57d160513c19be9a1623aafd05e360c9a9f3b079ce5ff
+DIST firefox-149.0.2-eo.xpi 463535 BLAKE2B bbaaea16551af118261703a58d575ad0a6f558d44e5fe4cac4b8899f1b1dcf0e8b9d17fad6126d1c5201f9145bebed7bec58b7fdc38b47e185e30d5790fff3dc SHA512 1f3fae4acb4ff7b20d00cc5fe2c54dffab47bd76422aceb90ff7f7a150eafc8b687ba2bd811c9eb53d7f907de3c3b882a8f0d7637c2340897423d8850af5971b
+DIST firefox-149.0.2-es-AR.xpi 475891 BLAKE2B 06ffcd409db995c2566b1111c9ce2cf6656d47bed4f5e8290a8688c045f2651de382134e7b5591ec4bc52650a30fb19fd531158e87d244f3fc10334bf54e7e2f SHA512 5e23982959a72d45dacd8c65d3eb5e341cca796d4090f108718b8bef8c67b5356e1aa8b38cf4cde6baee451abf0452d8e56c3d875ae2758913d1dc67655992c6
+DIST firefox-149.0.2-es-CL.xpi 477251 BLAKE2B b69f186aaeb9c49f91a9f02e3e7a299c0fa8e42b7e4ae50ba6c0b8a970de8f3b4e3615790850ed1aba51ef501f42a61ce2ba7f89eea52dcf696c2abbd31fa397 SHA512 9f86be864d02ed9f1962a83d0c0da722503cb2586e346125a7b21aa858cd7626369d61479a03a117e112fe55815f91dc6fa77389233b0badab2f82a9f2e88e2e
+DIST firefox-149.0.2-es-ES.xpi 476754 BLAKE2B 3128b1e55daa94a7c10c37a6a52fdea70ed912643b7455be21c2185f9d96255ecc08ce4d34412c6693832c34c6658260ad7e3ea6f33b4352cf3070060ef2c388 SHA512 2e48bd6c6b2df7e5165da1f4577959abfdc8eab76063cde962eb3eee2f4a5584737b905b4b33e69e646aee91681b2663ed940661be49f4a5dd026be1ccdea721
+DIST firefox-149.0.2-es-MX.xpi 470947 BLAKE2B 9257ac74ede9b5f164c50f1f95815e071dfcbc97811efd72013d37cfd7743900c2ca616177b649064fe59cfb569d64166742d77ad1fb760828eef9bd2ef59910 SHA512 739299e5d03dff8e6f33dda5c8640266516f4a2ab844c9150918292b531f3a9551692ea639e9bfcccc69b5959501b03378ae7ab64ae4e40891f23413f3cce47b
+DIST firefox-149.0.2-et.xpi 356086 BLAKE2B 302ab8a28cf0c84d43da6f0b5d8d4ca00e232dc442d770ada25617ab2d331ea63e5f9db2a7e3bf5693b82cc2c23f8e3d244bfdeaddf4776eeb456c3b21d523f6 SHA512 7bd8ddc7abb923685d8cf22bb47091d44d1e5a6b385771497db84bc36269e8c3dd5fcfa449afb5e42fcdc419f0adc5d6533ef50e96d312b4f439f01a06609d0c
+DIST firefox-149.0.2-eu.xpi 460024 BLAKE2B 21ae66df3e9a309ff8bd7abe95e0b86e6045dfb5a62a71983d541d4f4c75713c50f66e1136da64e7d712652c6b11fd3a59af915f58a020d2e9c248a18802105a SHA512 9301141d34f90886a04783436585d31d739f78a492616c414b8787e33796ef76e0fc10054ec97498f7a202f3135cd0d7424b50d5bf0a07f644bf020af44d1b81
+DIST firefox-149.0.2-fa.xpi 417776 BLAKE2B 3b4fecea8906d1dedb85e8e9d2ff697217d845e04174f976f6fbe57ea7571cb47ab669027673e0d3cc2ab481fd29a809f395c0efebe95940fdbee53fa468d4be SHA512 6d7e17db2d59d6dc6cce6f9f2c481b5a3deaf1f80f9977fd61055b22fa1f51b48a9dae7f3e7bb15dd2be140eb6962089b720bae0d92177509ffa5816aae8c067
+DIST firefox-149.0.2-ff.xpi 307772 BLAKE2B 7a77802873c41c7132c72b3664d96f2bac3f6a85b79109b1e24d0a5d9996124212657c9884be40d9135a961bc06637fe2cb2644170aedf64114e47090364cb96 SHA512 922a922a80d2141928e92f009b3e9ad4e071f93d0752c0ce9156ddf16410874c4b4dee06ef9a6f1365f3b2d12abfe36d7326515bdb8b9df45dd3d285b6330af7
+DIST firefox-149.0.2-fi.xpi 460741 BLAKE2B 242d07b36d7451d867cf4d7e66628452e330df056af1f1327aec37770710b4e3519c25f912e8151ed2116368a50cc029b8b02fc80ec8b7ed7105c48b8820ff50 SHA512 13372cf0708406dd37041b8168ba71f82ba6ca2a3586061b9ec1b65ea02008ac687be7832d88e3cf04039030a999877fbe34c421c58637508a6ddc79f0209838
+DIST firefox-149.0.2-fr.xpi 490378 BLAKE2B 927a977878a6231e7e98bf7490ea84234a4070faf37ae83ab3ce0350bb2f6717bb76702e5ea14b24aca38738010bf26d8157061838817146ed99d077198a8c10 SHA512 da3c354eafdace6f2371fd53b3b4f4a2268b99c69e41f7b777743be8fc3993de6334551daec39d6312fabb53c7387e8c8087c9210ec55b1fa18bf1edbe47e363
+DIST firefox-149.0.2-fy-NL.xpi 472408 BLAKE2B c534bbe0a96d1e7f9bbfbb3cf1acf817d2f9dacd73ce990c757f7fdbd3f4a31b9c1599f88df07359a81ca30eed7995880f6bf349db45fc3b8083be1df85e2048 SHA512 71237981a6f187f23a7908204433ae69e2ac99c6af99349a3216ca58f8fdd7dd1f35a5ba276db8163690d9b99ffcaecaa4009b70d0c3a56c1fb5f7e1dd1060a6
+DIST firefox-149.0.2-ga-IE.xpi 313461 BLAKE2B f0b668a2ffb9da0d1d87bd306b9c895cfdf989a88bab3b0f784d1ebba645cb9b1b8968de95b3f7b13721cc9d7e00397808d10e7d5b1b5458313e54b428ffff01 SHA512 c67d5ba60586e3c8e5f3dff1427c4aae2e6191f0824180ad5eb8be85b9745cccb57f61054a9eaf550bd9b2874c71e5eef97fbb2b6b7861fd20530d834da93498
+DIST firefox-149.0.2-gd.xpi 406446 BLAKE2B 3a38d8d1a6e18f010482670e2a963af4dcc0c54c5dd146ababfcc8cc24e81c2c6de98b8fc354f9ce4b4284ce3e706a28662baf7df57dd9886331d40972c4504a SHA512 a055bdb0557a76ccb7f85642127260a9b685ddf06b24474eee89a5f36024e7f9149cdab4d2f3b952d77bdd8ae411045ae8758e808a55e3a79db0b8b47c692ba1
+DIST firefox-149.0.2-gl.xpi 443854 BLAKE2B b1e38daa65890833ce04354b0fb998cd8910375a77137cc774020335ad5f62d63b0633b066eda1d4591b591c87afaad1b23ba4eb4a8d76dc48af641aded31be4 SHA512 2f201e670e0b95a82578cadc36d849f01d1220fd02d0bc3784e1c37971000a47b691589405f6a4561f4ad08bf6d76637380678da575f17121be3540c8360d992
+DIST firefox-149.0.2-gn.xpi 479575 BLAKE2B abb62feba72d2e192478f86b3413b73643928d02553475e9aa9a4cd32c1d3a3bb53ee4feac820c40097be28145404f5861b71c9f6031869da655fd4cfbe8f3e7 SHA512 c183d446c9cde9bb91c43e0c7a8c4f4d38badd7cc24ff54942eb9cc553e7538cbd5681c2ec465dc5c03b9bf897b989aa59aca21ad74618f158bcd1b580e17790
+DIST firefox-149.0.2-gu-IN.xpi 355976 BLAKE2B 27904e95907bbd56f979c7fa23770cba7a785c0ffc4c6898b95809374067448fb178e9a270a854f2aa37f2c1b5d3e4aedc62bfa7ebe24a5a6cbf027ca4e3f2f5 SHA512 08022c4ff8df123c28f479f3ff1a73d021c6d35882bec805f5734deef660511d4a5c8b84c4221996312ea8c147f2b4a05d7d1609afd536d94ba1c71c44d18688
+DIST firefox-149.0.2-he.xpi 476352 BLAKE2B 5358b70112acc786689f0181f4ba880a7d0a14316723a8ed2a3ffb250802b044b75e552069ab1e42275650e55e367593325f7c44f4d935465eafdb4135147bdc SHA512 44b484bf4d460a56991bea73ed2ba55060cd1d3d44c4dc87df6c1bc7e6456183aab497857198e8a772597b193f9d40d252c539397e01a7eca6afa899a54b9ead
+DIST firefox-149.0.2-hi-IN.xpi 374685 BLAKE2B 618a2d28ef83d0c917a9af71baffc36c3c6bf281039139d1d24f41c459b4a5556264504979ffc77705bf143d1ca8040a057735821fddcfd334ac99c993382797 SHA512 35e218abf04b73309300e0ad549f3468fb8de1236c985a719f9a2a39a104f978831fbea159b806b31f0f7e869651f6a95c380090120b3c0abb4f3ce4ff915b73
+DIST firefox-149.0.2-hr.xpi 463597 BLAKE2B e60c977d72b5e7a635c4dfa2601bf3d85bc1aa3e62a1aafbe98b3ef4f4ad8619c20bc3701ff791855ac815b8e71e94c0bfd9308f14395bc0f4cbdcd0ab06417a SHA512 f5dd3f1fe864fe795fee04e5541d6ddda5da62582caa25fc40d2bc1f0cc636ff3c2bd43c4ab77e51d52f097cc991eff34f06e43255e764225d4d1ca7c7d5605b
+DIST firefox-149.0.2-hsb.xpi 495285 BLAKE2B 7c5ce73bb60ae3d3c68559a797834e9d120918d1dff928df58adb5f29a2bc5862ab42e8b59d56eb18aff812dbd1a08e250f675e71a03543cb664801b46f36750 SHA512 14d8c2619b8e1c4c154e1b845ca9086c0fd3b4e4cfa2114a0326504ae78c2985c6765f4a4b28f7bb958457b3aa6c1e41c24017d5ba3359e782b9b8cd9e9ab49c
+DIST firefox-149.0.2-hu.xpi 499396 BLAKE2B 1e57831173a8b73235fb4f980a38153477114267b248ba9df13cf490a2b83250bbc2c0c54ee17fdcf889163ce4e3e7bec037eab7efdcf7c8e750968a8a54022f SHA512 8b6ef03300d67d4411360cc600805bb2f36d751424684b5ca1504cc3f4a90f5001dec555b22d86951cb7ee16fe7243c4b75ce9fe7a80ae5d9bb6ea4c95c1f491
+DIST firefox-149.0.2-hy-AM.xpi 478638 BLAKE2B f80912f51b77d310acaf1d48bf60cb90a5a54074f1eb3cd9b84e87ed7166c9ab5cffd6f0126911beb3060bdaeb25dd594103782d3db517e4098f073b94082e09 SHA512 d0942838a17b49036925a8e6c41e166e5ada61cbafeb324059d7e78df3ed1c103002b83ef3854fbf1298503e6cc27d4755b07299d2362af41a649aaa0def08a7
+DIST firefox-149.0.2-ia.xpi 459715 BLAKE2B f79295745a00a47c1b5fc9990ed758f6d917f65623d4d6347f9eaee32ef7e63398b784a6c4b9b0d42d04c29c1336200fc83e3c90f7cc4ea587dc8f54edd6031b SHA512 82eac3d85d1567643339c34803d73de12511abdff078bc963cf1a8356374f27a71711826a3832be78d7aa63024006ba835d0717ed9ea2d77f368dffdecdc3920
+DIST firefox-149.0.2-id.xpi 430154 BLAKE2B 646db6d399ee8af7afc0f9c09f0c7bbd96420857ffe63a13a1cc21dff76f36f55190449c13c91857f2753fa141726f39151372370a9c963fa2994a03d488b93f SHA512 83ba3ce0db3ae539e4a48fb8f29d793ba2db857c3618c2788b1544ef4a5588206c9d2c468b792357c93bed1b20d9cedb3b03d93bdfb6fb380446d1f8833364ea
+DIST firefox-149.0.2-is.xpi 437318 BLAKE2B b8dc1dfb6f78f65a55b31d3bd06fe04123a3b8adee0a1e1e146416c0570794deef1382e4b27061dba4f2c1fe8b1d56df281e87c38d1a8b0a1b2bd3c845d33cc1 SHA512 870db42f7b6808eaf6fa7f772142285802f20b88ddccfb7290e4420d673d75b2d77ecc8afde49f777daf828c749e7ab7f966b501a4e1f06a6bfdac6384972245
+DIST firefox-149.0.2-it.xpi 471560 BLAKE2B 888dabe01de0b20671048c33a290c6c9ea1f9bc801e45a2630e50cea1593657cf20e2430a8146332d2d6f7c3e8bf3244c889c616ba0d100600e96c6bb352163e SHA512 6959904747294e418a7f61c35b7d92c74908a0515059e0076732e72ec00e6e5c00177bb5d902085c961ba25775b538b295a980d530f9b6dcfd23ec7124e659df
+DIST firefox-149.0.2-ja.xpi 513906 BLAKE2B eb2202400535d0329a0753128841f8b5a8f0fa1dc290e03a47772b913ade3225655885fd9d03f85c63828927192665c44ea8769c568a9f616bba7e010ccd55ec SHA512 b3da16b831a4ad69bca32957728deca77c5ca24d337b96053bacd12b7cc2f6ede8bf03c20908d2957d3c04724d2bbe55f895ca6bd8308c9d242ba48a8bd05eb8
+DIST firefox-149.0.2-ka.xpi 532274 BLAKE2B 154b0a36ce6879d7ae4226ff01c57d57045163ff67129a0f42fe418d56ef05046f46b08eec358615aa4168244c0cb27d4d0186926902752cd76ed604d84d9d44 SHA512 444b738370ed05d5309a04c9c52efcdf97a2772611ebd25286c2c0b570d05a3eb2bd40e544ae9a1df3577f0bf1a241d0e7c7ca638c94f551deb0d03de84cd89b
+DIST firefox-149.0.2-kab.xpi 423500 BLAKE2B f1ae512fb0fef54dc654728860269c0c492ebb28ede388d8c0164647a8917b8d1d4d06a9bd73891ddeedc6418ebd0e20051deafeb38295af8e41acceb41daf0e SHA512 6136d378525348dc96d9dcd8a285a13cc2662ae30b8d51c994454b8ff90d51e286aedb8610881fe988a37abc0d63acec516dee177420fbaa3947a174d2f574c9
+DIST firefox-149.0.2-kk.xpi 551222 BLAKE2B 78c2a110d8a23122129abd9d97351272cd39430b607ae7cec2f2743062ec2ce9a25a882de58b4eaa95eeb6cb98544a19953e64089beda55eea19ee2c41803509 SHA512 f7b730b7a7b18acc8ea8c8e0374575831cb62ab882668306892515ff58c95509e1be95cf9fa3f96c17c96d5195bf5647a5261a933b81a6e5b5ac6539fbeff350
+DIST firefox-149.0.2-km.xpi 372652 BLAKE2B 5e152d15bfbcc6ebe262d5f2c97b86ff9a669fa3e394aa6da0e41cb6edaa7b8438cbd6017b975ac9f8e3592dab48516b1dd96e8e3af1ce9fb36940880cb12a34 SHA512 7834f4c8ed411aff8c69e3a23bb000732352f8e01df6d241fdcc0cd22dd67c71327dd1d3adfc69839f31b536a6324cd8e4ff6c5f5de054ef41966a43e8420453
+DIST firefox-149.0.2-kn.xpi 330006 BLAKE2B 9f9d0c329dcbca1b63b688abb054ad9e95ed86110eaabc1a9d810f4987be8ec190bc62ed32f9dac9ca565ad8b9e463f4fa5e8c47900dc2122f3397cbbaa23c27 SHA512 bf458441fd60b1a69319a49dc44ed5951a5b59f6a130942d5c780533f0878038267df4ff5c01713147396452e4329d6a3fbbe286cb1cb5dd1ad8e159d1c4f729
+DIST firefox-149.0.2-ko.xpi 499047 BLAKE2B f958de7ac6a96f53d80e4522b023875149b48b165fdd84153289792a8b1d66d8a86cb5134f3351a59e909a1509e136f0293ce93dade582b830072fa4b4a4dc74 SHA512 3c5c0cf86c7cb09b47420449e186b2edf762fe725bec960440a6f8f63067e29f70cc448c6bb4740504fd77f1dd912b61d7b371fecf30c90a33f36230b50ac8a0
+DIST firefox-149.0.2-lij.xpi 317119 BLAKE2B e96eb2c79393fca7bfe90830e4d9055cca2e80045738d9d5eac1608be09f6f561ab797495737c42468010b21dc454d13a3e4339bb9e66ec729eb2a036b7d9ebe SHA512 74a00d25568e035b7747277adb5b1c5394fb179795616e9ec6c561a0dd45d889cd7d487627a63ffd0fb19df92b5bb7c35d86be2653ca5d8f6c79c2355824694b
+DIST firefox-149.0.2-lt.xpi 376874 BLAKE2B 8d23a69d9242c23cd765e0c30e755c259f11caffc7c279d8dd8bf026ee0f8c320ad8eabd26dbc8e732d3754284be503dbe4ae8fcfb355fb6550497d5b6ad0717 SHA512 0746cd7922166a1999b16f461ceb68c635ee36b7dd45d8cbde9396b3605403a2b4c698ad470c764bba225f1966866674f572de751fa87e198783015de523dd28
+DIST firefox-149.0.2-lv.xpi 388177 BLAKE2B 20c18f1b7a3f9e906d5fc95f71257b1959b3f883906783f894811ed5dff273f7f6d337520a0e25cdcfe912a9cd0e71cfe1b5f1e9be93e915db4647074244d32d SHA512 8c0569c0a7798c42970abf44a23df7d2a83e6b9d53f73a897cbc0c10b1898d5a3621317b693fef2a6cd66f115470b4011dede61eb44077ad85bdb7735f3fb1a6
+DIST firefox-149.0.2-mk.xpi 318505 BLAKE2B b19cdf4ecc09ee9c217bff079ca71d98367bad8d15a20a7858de9aa9c7dbd6cb34f14aee951d7e8fc23adbf8f907a542e151381564a19136d5ace7197b63badb SHA512 cb7539c1a99c37d2f404cfee2b0c31beb129b66a5ab740eb17231d50255c4a733d5f910cae0da37d97c2d10fb0efb47c3c40a6059659bbd156fe83dbd4ec5beb
+DIST firefox-149.0.2-mr.xpi 353842 BLAKE2B 301bd1e753969167e7961c3253fe260534563e03072cb25784ba057feeb9f3e229568dd426b941ae5bd1a8712a4f6442b74d87171c102b3be96c2fe9bbd4bc6e SHA512 6e720a172c4c9b03391b07d5b2bdd5b0aef119abbba16abe1d3db1e9a58f9578a2d22895ddadae3e39a30db4a463b243323e944656369de545d98a2da7d35acb
+DIST firefox-149.0.2-ms.xpi 293583 BLAKE2B 830d16e9b473cfeb1f1a6d90f6c9a143cc7856003bacf3b3769aa7924e6062c987e28eff730b967e17a6d570ff8adec1aa18cc570a4bf970114d18187be44d3d SHA512 78fb2b9a7de5d8c2864989334e8998b67b5a071291e7a1a434bb4ac899b97939d787a229c25470f898bdb1ad323dbbc9e134eac427cf2f9156fc455b35f0891c
+DIST firefox-149.0.2-my.xpi 340677 BLAKE2B 1d71ef93db8febfaa78429ab2bbfd4ecdfe826a2e197aac974ea3e38eccc896b0ac6ad4677850c21619a8d683a9ae632c74272696f6d5a8aacf370f55b36bf7b SHA512 db30d70b7139efeff4e43aec201479086a20b2d8df3040447aada59a2035f65a907a41d3883cce1804b09e6ac1b6f3dd7082d2bb72fee6fa9302c2b83cd012e5
+DIST firefox-149.0.2-nb-NO.xpi 458819 BLAKE2B 1e41c8cfc6daf9669a8e1d201a2e82effacf85d67ce044ad86d0c3ec2d346ff0ddb33efb1066c6bed251d04219e38cae703f989478a4664e4b55d9398685c275 SHA512 25df695013f965eded3e2df58145872c440f36e183d967c908eecec65cf95dc0c9c61f29ee8bd93971f950558f8f10060c732ae4218cae2c58e3b6cef7d01a4e
+DIST firefox-149.0.2-ne-NP.xpi 346174 BLAKE2B 2b6b1dc7382f9a155a1fe57d7ee2191568bdbc85b98aecc77f69c08182b51aefd1a1623c66b6080fc1acd9b1fb1f53572534aae298f29dfcbadd075e9ec7b278 SHA512 ce8c0d41889b5de77f834f79a3ddcfadb311702a6f9f87e4dcffa0761f2c8d593be7b96a12d1b907df4c255a0b2db31ecd78c900b6c61eaeaa798c3b9b03bafb
+DIST firefox-149.0.2-nl.xpi 466246 BLAKE2B 29b345e2f45a761a3fa7577c9a0ddccc3bb2cb19559e94b34d06901fdf1fe4964953268daad01a2b06ba9e5874e0b54e9321e4a861ffcf1cd03e65cf6ad562fc SHA512 42aab55a6b15ea70ec48820b445fa4f550e7d29c1c9841b92404f28426ac991f398ac9159df3b2d453eef309e19a3259c3b663526fce3e9ab252438044f62511
+DIST firefox-149.0.2-nn-NO.xpi 462072 BLAKE2B 037322f4610aa2b40871ac4201692cde4f4f2b5c4c500af4a5cce3580970e4cbbebffe5bdfefde1bc2615d0e351be4f3cc26823e5c8abcdc34915ccd6a03f408 SHA512 84663b631388a5092533c2ba0b30377161272126ac81717cef288dcb4e33a23355fd834e226888f2b439d24d57ffd553c07dda09817a49cf02ff32e097d8da37
+DIST firefox-149.0.2-oc.xpi 410837 BLAKE2B 56bca7e428a0c8c351e6f5357902097bde2ff679c5565f1407783df6f98955f2dd1d83fdfad640fbaa9c9afedb3087457f44d9bfa9eac456f951cc98bb36657c SHA512 1606bd23d1a439d2bef0f3cf61ebf6cd0dd94dbf8b4fa58ec2dfa2bc974a0be122e9f6713f2858833106a18987e8deaaa9068ac642202d3a52c045eb8b83e7ed
+DIST firefox-149.0.2-pa-IN.xpi 530538 BLAKE2B 8012abd3a9c982b349ec8029b784dfced616000f1e1ea2fd32dffaa0fd3b7b408a93e48d214a4d56e0e685255844b7ae8097a2d58212333b6e428650f23ec6c9 SHA512 38ffda784a7a8ba7b4f3a7966f86e973bcc8ebdc59457f672e348c49408fe38221123a414390bf96e13f723df22b8a0398ad58627647e68d7785cc57cc92cbfc
+DIST firefox-149.0.2-pl.xpi 496290 BLAKE2B 2a6081de947f7ef393b419917947ffe3f685de60881e0f42af3a17ef227bd4d3016ca27213bfbcfaf07941b39db732a5e65daf9faa69e8c2b626e4ebca711aa3 SHA512 0a53d4ff27df4787dbaa01b4d3a31263667b81426bb88adf16772cb0ac5805f51483834805bd81f9fb04ef0a0904d0ab5b38c4a757bd850e526bcf6f9c361a29
+DIST firefox-149.0.2-pt-BR.xpi 470906 BLAKE2B c9d21122f60e246954e845c1d0e8b94c139d428b8f67da31f91d8de153a7824ad4e072222170dfe928263e566216c7a233fff933d7a263889a45cae7e8a99cbe SHA512 ada8192faae4d644386030ca46ddf8f5e879bf7ef85b50411d490862a55e17ee622abdb4c9742077b0c0471050e3b7c664801186f795560bcc67a9ad987bc50d
+DIST firefox-149.0.2-pt-PT.xpi 461061 BLAKE2B 984e1d6a7ded550bd726005e0cfb4911905e1508e35f4d2a67e0c2af17029c8de0ab29944318691483e3d272545d55a297773c89f1854a4a5e32115ef9f91ab7 SHA512 5414ead837e4af114b0c36f4c25f5e69c2eb0d229979db77e059b27182251fe584a737bc68339d39cede1e391970d16d366d430e3ea55c607a0de2306abee6c0
+DIST firefox-149.0.2-rm.xpi 452403 BLAKE2B bd82a819f7855e08a72ad8d13f091eed99044ac4be94ea345dae6ff908ae2ca52c003647927c4ef351dded311b76abca7cc8c1cfcf8e12582a54ce0fd115fcae SHA512 76e353ae238e8027dd9c5dd792c9bbf0ce9e7a7873a9d86d876c237a489479a4fc62c70c883ebb7a688aee483149d3667455f20fda5f6abe6e3a9afccafacb77
+DIST firefox-149.0.2-ro.xpi 480617 BLAKE2B 7b9028527b7a1cba356beae4a0dee794e72061dbd46f9c2d82d3f8316336779fbdc93e8ac1033b7f44cc1ff3544368fdfb7fc554c12358fbf82d8dc55643807f SHA512 abeca7a2c2454a39dd95e12af6b8b98de8d51a0c49aa5f560a538493a2fe69f9a2a92edef0da22f7394df9713ae637b8984a4d3b1d47103c487a6cce99c97e26
+DIST firefox-149.0.2-ru.xpi 563428 BLAKE2B 9d111238098c1133ca33439b5076be34dd80321125540f57a3b0479eaffc50acd257b915692c4d6efe6adad9d8f7249cf41dcd393af406cabfabea1a927eeb26 SHA512 748b2038783d949177a178721657ac40ca8f4ce422221dcf88385f2383a391aa17738cc3e908b37dddc0ba225a1a64f9e736c501377c0cf503374432fc2cbc4e
+DIST firefox-149.0.2-sco.xpi 319912 BLAKE2B ba35a2930bebb29da9ae710385fb82f77dac8ff90ec282759eaf564ad24e757a0090411b9f95574e3f86e8cba5bb956f92c8e5b30944ccafd18040f50bd1e198 SHA512 469694f4ada53158e82e3bde0f551dd9f97baccd3ef4498633b7d56fa67308e48d46d99d741789a1ae098870b3a1d03c533169bfcac236648b0e7937b11ef616
+DIST firefox-149.0.2-si.xpi 406440 BLAKE2B 81f96fc8337f1a4a751b24cb417a5c5a48fe7a811df42581aea827594498c1bf795586eb7625e3f58d2857605ef118e8149752b0d48102f44a3c3132a5601ff0 SHA512 fa5fb4b659fddc69fb51723ca9a15a67f86e72e975c57191dafcf97f4fb6998620a66e66cd04039d97e1e73aab8cd1862cf27536e82783c6c5abd411490f9869
+DIST firefox-149.0.2-sk.xpi 502315 BLAKE2B d2722251491c9a1b88173f9cf620fa04ae4b2d7bdbba042441d1822001ab73c01da72b15d94524bc40a6476c881671babe9d501e9d6d1a7bffbe48b9801e3002 SHA512 b534778cafedbd5c5b741badf0116d2cd0cd28e9ec10c670d465d9123adcc7265c94c6b228c7a47884518f6d390314bcebb198945abd5e8a7592510b0363860d
+DIST firefox-149.0.2-skr.xpi 480797 BLAKE2B c06374db298d892fc6c607cecfb8a736e5bc4699a57d49efffcefc4055b9685962f3d144b603fba33bfb88acdc69db64c485b76b36fd38e297402f242b7f40c9 SHA512 bb12031a54149df36882157d6a5ae6dd090e65e088c9bafe69ef0b1aa3ff8cd5ae643edf49b68ecd0ab5a82adcdcbe037d2ea0e3642d9877828cda1bfff744fe
+DIST firefox-149.0.2-sl.xpi 467407 BLAKE2B 1e1a2c29bd378f8eb15d8ee62261d4e46f4dd98c1f20adbe029c9e2781c01dc3a8ad47a0a0a488588766f5ab4201856e238c099ce87f714631b57e040a76b9d2 SHA512 7b40bb23553546aa6bddf3e862f92aa28c1f775e6cff3b4ae968d188500a871cfa5f55919779797d5a1e99f41daae188bc91aa7879f26bae6847e967b391b023
+DIST firefox-149.0.2-son.xpi 272183 BLAKE2B 982dda763884f81aa1c802b2ff3de4fd28badac019827d53891d1863fb5c9218ec1e5ce069267c39c93067657ae1646ecf9ca9c0ab7931a74d89e52e072e48d8 SHA512 8fc9715ce0a878b42fe05a090c361d461d73d26a3d271c748bdfcb1a191ccebf7925b0a7709242f70fc22d694fb288055a17fcfd594bec08ed69cb37d46aa6ae
+DIST firefox-149.0.2-sq.xpi 487910 BLAKE2B 0eeeaf0ae021ff836758bebff0fcee4158b5c11433863f7c1ae39d219e3c138ea350d975df134b792b4985c56aefe3e877d843811bc83fc7f3de7e2a05caefc3 SHA512 abf2a670ff4d7266099152bc320131f4fdd63179fb5fc13d231978a12114fdc9d9b0d98d69ddb0f10c156aa855f32e092ba7ca7c32b53cccecbff5a95af19316
+DIST firefox-149.0.2-sr.xpi 534757 BLAKE2B a122c06e2f1b20ba44c507fbc1966d4f86d5b0120222b9701b2e96775477ee65f4a2256c01715b4a049bdbd0fef243b8658a7251a4826a3ca6dd086938affb57 SHA512 4d4c26cccefef89a0098aa39e33792adbc4e2ce57513116178415c4db79517ccda29f3d0a53801715b805624a3cc19c0a7521cded5074371bddda44c70c8c0ca
+DIST firefox-149.0.2-sv-SE.xpi 465945 BLAKE2B 9e0780d3b5e06c38b7f97b50c01e2688f642934b3126e578b79d8aed89007456a5b832481ffdf084e8bcad393b92d9d0fef7b56d994cebe30d789fd07e8294b6 SHA512 f5c73d8bf2c7916894189b7aa781f0329151eca261859716542ad2f3a2108051eac7fdc8464d93a460888e7817572065de3b66b37c62a69791c9a117ea6f2e86
+DIST firefox-149.0.2-ta.xpi 335786 BLAKE2B 7d8817dc9bd598fd9babc00c24fdf46bddabaef7c42e46337766aa242a59ee9d1db7d3ccd66c15f4668163136ad5690d3d27facf225c7ecd3456047f3efda5e1 SHA512 7a8ec0b87c63e033293afb062d734239fb6fd1d88c2e304755242f103fddc755f1a6e73ecd1bc47ae810d9b9d12e0114f8b519cb6a6e6e9f38bf61cd59891799
+DIST firefox-149.0.2-te.xpi 384664 BLAKE2B 2b7093b17b5dcd30858846e6c0225ef3d87935543acd90d2cdd401c147ece72c2046b59b0f64fed79ea3b3d57412b0bea47bcf3033b1f7b0832da47ccd2dd039 SHA512 36c95b4ff43a84f8721bf67258faf7327368f5a1c295d1036f08bbc8802dbfc7aa63eb054c629cb9b978d8438f2fb8666d99805008c5cf643d73eefb797068cf
+DIST firefox-149.0.2-th.xpi 541061 BLAKE2B 3ac5ac338c39285aaf86a560413515d6ee49c4f4c2c680f5a93810cd2a785d266e76f1f12f638111f63673f547b22cd7125651304f05c3d0630e6aaa8e9a3edc SHA512 725236273e482729adbea43d7c720f8e346aa4b3f62fbe270bdea882fdd3442178aaa8857b00e73ef18a0c9bca1b75373daf600aa070063f5411c28a0aca94a0
+DIST firefox-149.0.2-tl.xpi 353107 BLAKE2B bc20f7c3e7d3d9322c3fa232a697dc80ec1b6f1860cd55420ae9471f330b264127605a4a290fc414c9cc577a249ac34bc2718c78fe1d60ac2fc5464e34546611 SHA512 dc83f4af74d3cb4773539aeaf6f1da05a9d6f0c06749747c894a8425dfd49b90db3fa10427d6941d2dec570a723131478edd7d44f3e654b8d0cf9097ac54f42a
+DIST firefox-149.0.2-tr.xpi 479987 BLAKE2B 3b0a45a398413acfa46c57261ecd7f93ab2644dfa29698f267b132c62546fdfa69e687731075988292b68d1cf06a11fdd52550c04527dfd195953fe8dcda8fb0 SHA512 ee8483feb245e3e0d1959a3e9fb93a70440ac356b528d14a4e217d4090d7c9521b96d0864485f534a85c56854bd40e2ce6b59473ce23aef4479c816b51f67624
+DIST firefox-149.0.2-trs.xpi 322186 BLAKE2B 6a372b745e1577af52be706352de9cb00aba1cea144e863523a13c5ee178dec829897b0d2f05de3d611f1e4671afc721b38ed10b635ac82f94a371bd845f348d SHA512 6cd5dc8b4bea80a8fdb6045314b0148e6084b2cc5fb624019ec6ec2662a86cacd07bcd3a3b63c4cfa9bfcf5eb8312264a8e3099ab8abd4b59ddab3d3add9d73b
+DIST firefox-149.0.2-uk.xpi 545031 BLAKE2B bcb9dcc9b319c49d6e3026ae59b191bea00ec572b35215fd9287a62287ad9cde9953c8f3edd63d667c646f4e8cf93416755108ab5f828f0309321dfe5a41c17a SHA512 2b5ff802533cad2b337a4d7f32d38acd835e0d9e9798c31c16b01b93a6d4b26c498283dba736a9f88ec2b6049445a51e08276f35598dace864d776c7ae7622ee
+DIST firefox-149.0.2-ur.xpi 367815 BLAKE2B 9eb4a7bd3191eafb89bfbb7bfbacd0e737e892f4261b9d0bc37581404ddfb6a9838ee5a40db597b97c8dc833eb16a42ee8566f128fdeae46bcbf53bdc742f6a1 SHA512 86db95c776c521fddf7a3c2ee18545e5c091497a916bc582258b52bfe548255f0b65cebfaedcd4bbb3bbf85acb6909d3f27eded8efad87fced55fffce627fef5
+DIST firefox-149.0.2-uz.xpi 302228 BLAKE2B 249485a550ceefaebcf482d90b713ac5016903d92fd866665481fe3f206a97f88ec376e7db4d5aa6c6d887e11dc995089f2a88f4ed28fc8a0f62f316375b63c8 SHA512 7294c62de1b2d8b96155eeb0aa5c33e164943a92abf53118eaf43bc428cd095386f3f5ddc202c4838cb769c652dbc522d947eaac6012c981b66f6bff5c86cda2
+DIST firefox-149.0.2-vi.xpi 501069 BLAKE2B 59371eb1a7ad464ce407d37d434283e741001c0cff83eaf4dc0390ba1511ab9d7caeda948aeb4dea525f66ee03fd31bdef4f832ed3046d3df74f088c9bc5ce63 SHA512 603efb28988fd1fe8e1cd458a93b7c373210edb03638e0a14413deba00ac110ab76e79c9a178b0338e1a1c755e8f85c370e5617869273e82764cd565b1a6c324
+DIST firefox-149.0.2-xh.xpi 271704 BLAKE2B c3cc1b08e438dbe92eab670082d914bfc2c40e0752e7bdcc2dc0c77ec52957a860128c7e2d92dd63c4ec3bb314cd45509aca157fe556867435faa26e9274f629 SHA512 80bcd52f247a6ae9ca98f8596eb111fc3e00f645666eff45415920a5585041e19510c97c6007a528ad27fc2a99431c4af1e22bfa7a879fea6548dd381f372158
+DIST firefox-149.0.2-zh-CN.xpi 489105 BLAKE2B 7fd900cd1f47c1badff164f6bf2bcbc5a28ce61b6721a817c3b5f6c6a6afb0a58f012f8e99fba5a206f0bd213d901a05d155650fb72f48306147bf190486e423 SHA512 f7bc1a42702e554213e2c2b9f06edb3235101024181ea358751fc84caaffb2a28a3d7b66a9126f491241e3306590e70c66d939a99e1ecf319e96c1cb41857ba8
+DIST firefox-149.0.2-zh-TW.xpi 495369 BLAKE2B 74a7eb5751f58b81ae3370b2b2327ce3553b43b08493961538597808107ac873ae158d6ae0c8cbeb94641d20ea83e35cd239a8eabee6aee8718ac79677800402 SHA512 fef5de63b2357672e144e4e21fa4b22fff441041f4ac19866dffae218321324ab555d7c7639bccd13440888ea36de704b7df3dbd29c58bea28c7f0aa970e7d59
DIST firefox-bin_aarch64-140.8.0.tar.xz 66300412 BLAKE2B b87c6bb0fdb2f8db91e6124b86412d8e4ad6d41e5dfba67c645bdaecfae7960857c3f1b2194b7d5ff32ac446286526fb09c6973d9b499294001961b6d57f2ddc SHA512 9ca31cb9fffc967a208cc06380be1d3f5a679f2ca70231c6dab9b53cd6ffe66978cfe9f838d02d57446ffc0f9dff68d25c30d7b2a93c3bab0789786f278b16f3
DIST firefox-bin_aarch64-140.9.0.tar.xz 66315656 BLAKE2B 2fd90396e6b8bc820413ff49212c6c240a3a812705d3f5440146304d64757a9a004862839326821e27aa70974438049f8691cf76087a48bd8253f7da801c8f10 SHA512 83ddb8f78be95aa2267d2c5cc4f8995b479e9065d0b3c834e5f5c7ec8ff50badd33a8e6839d5b53cbd98e6950978b1a64c6eeeb795c1d93230e78dc90e2474c5
DIST firefox-bin_aarch64-148.0.2.tar.xz 70583064 BLAKE2B 171ee1109c3ca31aa219a9a6eb1d7ab7186eda5fb8a2c5cd677e78c4433e673aa14da6d25011ff372b5aab51a194171aa850c778e3fef638862f6e38cae08c77 SHA512 e580386173811b3f791a374962218a823bc55dc96227aa19576b1674a544335a507516b32ab24216f74d3dd628a4c4409d8c5ceb35a68af81f47ded4a0bdafc4
+DIST firefox-bin_aarch64-149.0.2.tar.xz 70872604 BLAKE2B 19883bbce765d9f0116b6f8700888ef742d188fd58ba445b2a36cc8ac39056f7f2c269efc1003ce9586e6f4d91fd64f5fac706bd5d4b70a55dcb13c1d337e71a SHA512 bd0372e3d8c9a02d403167f25d09b6160449496d04f6075ef527a8b6b3ac654458384b1bf9f4a754099ec734182db498465e581f2132b3f4bcf05a22e0692731
DIST firefox-bin_aarch64-149.0.tar.xz 70856448 BLAKE2B ceea8841268770084a649e6d33adce64e4f1208a8577701509716f76c5aded33d4220a7813d81b98eb52ba44a9d3f8a96df4f02848a63668986769530eb09e09 SHA512 ec8decd9b9ed0edc17d8355717fe7945ff29104b8418419a3ee09d1d1858729f6a217387ccd0565fb7dc8cda89ab7ef87f7a8d74b68baa9c0bd851ed2d751d08
DIST firefox-bin_i686-140.8.0.tar.xz 78483416 BLAKE2B 75543c9ba72da7ea6ede66e1244ce76309920517191548ffff75b809fafec02d96170b2a202d1b48573448614d4af0f7db5f1f62d65299463ac34a3edfadcc7f SHA512 30ad48304bb877787d93c86696f6f42b81a45bcd87fbb0e64b9216f4c951e2b65ce4395e29c4a7f9da6699905e0c36248665bbbbceac65e434e32f50fc1370ec
DIST firefox-bin_i686-140.9.0.tar.xz 78371512 BLAKE2B 837da4d97dca99274e5be0e10e7a1875523aac0e3e1ea4702a89867888648593cb54f10c0c50ed88d9a8c8c753ed87d46169f0b9fa2742138004ef0166272cfb SHA512 02f0fadf995181139351bd09476a44b2729c428eb04320165c27a50911c71cf2c819b385a5e23762362206d0eb76948c9f64fc0147fd74e90f97fbff0722e940
DIST firefox-bin_x86_64-140.8.0.tar.xz 75491388 BLAKE2B a6016b294abe37d2b0c1786fcfcf9d30f26b989acf5b7ae02c53b578f5503d74ce4fea26ab8c6ad9de265dc1c246ecdc71f00b1f4df34e906fa714b26a4d2422 SHA512 18ea98601bf17fe86588c99cbd9011a2260d1eddbb7c5e241d44aae44aaf765968a98488fdd040cd853ccfa10d38904d0cfbeeb94b8cb60e272db6f568b66e41
DIST firefox-bin_x86_64-140.9.0.tar.xz 75058372 BLAKE2B 7101ea98150a9f218730ad391aee4e7d29863ba791b070d39fd2fb56eebc10a9f78199ab9fe922af2269cf98b3af4a5d94256a970396ffa24964174370f01d1d SHA512 1af13a9d67d30bd6a59efb1b578da50a043ae985a31eefcaffa899fc03cda754d47d9e38f54974ca8f95086fd45684196847b6e5acd389e6ed31e7f1ff4bd32d
DIST firefox-bin_x86_64-148.0.2.tar.xz 82303208 BLAKE2B 2c06055e2019a4f694cc932b7ea578a10807678d55c86f38869e0a71cb9abc6685285cb5e5ba317b4a4ef7925d7809c69871a3946d8bd2e13a5df15ab4c3dd67 SHA512 eb7687e5c085123a15e1191ecaf90069393811d6aaa23ac81a115742f9bf5782c2d49f7ec9c70d5f788c0491d18f53ff07549d280ef51bf370ae941a75feea14
+DIST firefox-bin_x86_64-149.0.2.tar.xz 82369524 BLAKE2B 53a7e71da9923d0af2b5f42b9f3dc8e0145e69c5d332e42a5b02600bc43ece529d8473d9acc59ddfe97cce9129c910084a529ac0a346d9a6e3c3cb83ffe0ea2b SHA512 76a32f30cba68fab88aa0918035e61639c9b2595a9ae89aff6b986fa424f1a931cfa8f57b206d1114fb23f9b1c840c9f6a3b70edde4f94aaba9dbc73ae94d530
DIST firefox-bin_x86_64-149.0.tar.xz 82479232 BLAKE2B 250dc3b0239b29541c1a536e4db1443c209ff7f91f49057463e63f5c9fd545d655586c70aea22684c6b7772751ecd293db36e816d11e032e827e8c3224b68e77 SHA512 931408a10615f6701ab21ba634dd4edf27df8e492defd7c076a56a7dda51c197fe8e4b034b8347326c30fa7cf604c833eeffc7565d0a8867fa116586c4a953cf
diff --git a/www-client/firefox-bin/firefox-bin-149.0.2.ebuild b/www-client/firefox-bin/firefox-bin-149.0.2.ebuild
new file mode 100644
index 000000000000..1ff8b0e28522
--- /dev/null
+++ b/www-client/firefox-bin/firefox-bin-149.0.2.ebuild
@@ -0,0 +1,360 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+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.firefox.com https://www.firefox.com/enterprise/"
+ SLOT="esr"
+else
+ HOMEPAGE="https://www.firefox.com"
+ 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 desktop linux-info optfeature pax-utils xdg
+
+MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
+
+SRC_URI="amd64? ( ${MOZ_SRC_BASE_URI}/linux-x86_64/en-US/${MOZ_P}.tar.xz -> ${PN}_x86_64-${PV}.tar.xz )
+ arm64? ( ${MOZ_SRC_BASE_URI}/linux-aarch64/en-US/${MOZ_P}.tar.xz -> ${PN}_aarch64-${PV}.tar.xz )"
+
+DESCRIPTION="Firefox Web Browser"
+
+KEYWORDS="-* amd64 ~arm64"
+LICENSE="MPL-2.0 GPL-2 LGPL-2.1"
+IUSE="+gmp-autoupdate selinux wayland"
+
+RESTRICT="strip"
+
+BDEPEND="app-arch/unzip"
+RDEPEND="${DEPEND}
+ !www-client/firefox-bin:0
+ || (
+ media-libs/libpulse
+ media-sound/apulse
+ )
+ >=app-accessibility/at-spi2-core-2.46.0:2
+ >=dev-libs/glib-2.26:2
+ media-libs/alsa-lib
+ media-libs/fontconfig
+ >=media-libs/freetype-2.4.10
+ media-video/ffmpeg
+ sys-apps/dbus
+ virtual/freedesktop-icon-theme
+ >=x11-libs/cairo-1.10[X]
+ x11-libs/gdk-pixbuf:2
+ >=x11-libs/gtk+-3.11:3[X,wayland?]
+ x11-libs/libX11
+ x11-libs/libXcomposite
+ x11-libs/libXcursor
+ x11-libs/libXdamage
+ x11-libs/libXext
+ x11-libs/libXfixes
+ x11-libs/libXi
+ x11-libs/libXrandr
+ x11-libs/libXrender
+ x11-libs/libxcb
+ >=x11-libs/pango-1.22.0
+ selinux? ( sec-policy/selinux-mozilla )
+"
+
+# ESR and rapid dependencies.
+if [[ -n ${MOZ_ESR} ]] ; then
+ RDEPEND+=" !www-client/firefox-bin:rapid"
+else
+ RDEPEND+=" !www-client/firefox-bin:esr"
+fi
+
+QA_PREBUILT="opt/${MOZ_PN}/*"
+
+# 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
+
+MOZ_LANGS=(
+ ach af an ar ast az be bg bn br bs ca-valencia ca cak cs cy
+ da de dsb el en-CA en-GB en-US eo es-AR es-CL es-ES es-MX et eu
+ fa ff fi fr fy-NL ga-IE gd gl gn gu-IN he hi-IN hr hsb hu hy-AM
+ ia id is it ja ka kab kk km kn ko lij lt lv mk mr ms my
+ nb-NO ne-NP nl nn-NO oc pa-IN pl pt-BR pt-PT rm ro ru sco
+ si sk skr sl son sq sr sv-SE ta te th tl tr trs uk ur uz vi
+ xh zh-CN zh-TW
+)
+
+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_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
+}
+
+pkg_setup() {
+ 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
+
+ mkdir "${S}" || die
+
+ 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
+ MY_SRC_FILE=${_src_file}
+ fi
+ done
+}
+
+src_install() {
+ # Set MOZILLA_FIVE_HOME
+ local MOZILLA_FIVE_HOME="/opt/${MOZ_PN}"
+
+ dodir /opt
+ pushd "${ED}"/opt &>/dev/null || die
+ unpack "${MY_SRC_FILE}"
+ popd &>/dev/null || die
+
+ pax-mark m \
+ "${ED}${MOZILLA_FIVE_HOME}"/${MOZ_PN} \
+ "${ED}${MOZILLA_FIVE_HOME}"/${MOZ_PN}-bin \
+ "${ED}${MOZILLA_FIVE_HOME}"/plugin-container
+
+ # Install policy (currently only used to disable application updates)
+ insinto "${MOZILLA_FIVE_HOME}/distribution"
+ 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 all-gentoo.js
+
+ local GENTOO_PREFS="${ED}${PREFS_DIR}/all-gentoo.js"
+
+ 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
+
+ # 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="${ED}/${MOZILLA_FIVE_HOME}/browser/chrome/icons/default"
+ local icon_symbolic_file="${FILESDIR}/firefox-symbolic.svg"
+
+ insinto /usr/share/icons/hicolor/symbolic/apps
+ newins "${icon_symbolic_file}" ${PN}-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^} (bin)"
+ local desktop_file="${FILESDIR}/${PN}-r3.desktop"
+ local desktop_filename="${PN}.desktop"
+ local exec_command="${PN} --name=firefox-bin"
+ local icon="${PN}"
+ local use_wayland="false"
+
+ if use wayland ; then
+ use_wayland="true"
+ fi
+
+ cp "${desktop_file}" "${WORKDIR}/${PN}.desktop-template" || die
+
+ # Add apulse support through our wrapper shell launcher, patchelf-method broken since 119.0.
+ # See bgo#916230, bgo#941873
+ local apulselib=
+ if has_version -r media-sound/apulse[-sdk] ; then
+ apulselib="${EPREFIX}/usr/$(get_libdir)/apulse"
+ ewarn "media-sound/apulse with -sdk use flag detected!"
+ ewarn "Firefox-bin will be installed with a wrapper, that attempts to load"
+ ewarn "apulse instead of pipewire/pulseadio. This may lead to sound issues."
+ ewarn "Please either enable sdk use flag for apulse, or remove apulse"
+ ewarn "completely and re-install firefox-bin to utilize pipewire/pulseaudio instead."
+ fi
+
+ 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
+
+ # 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:@MOZ_FIVE_HOME@:${EPREFIX}${MOZILLA_FIVE_HOME}:" \
+ -e "s:@APULSELIB_DIR@:${apulselib}:" \
+ -e "s:@DEFAULT_WAYLAND@:${use_wayland}:" \
+ "${ED}/usr/bin/${PN}" \
+ || die
+}
+
+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
+
+ local show_doh_information show_normandy_information
+
+ if [[ -z "${REPLACING_VERSIONS}" ]] ; then
+ # New install; Tell user that DoH is disabled by default
+ show_doh_information=yes
+ show_normandy_information=yes
+ fi
+
+ if [[ -n "${show_doh_information}" ]] ; then
+ elog
+ elog "Note regarding Trusted Recursive Resolver aka DNS-over-HTTPS (DoH):"
+ elog "Due to privacy concerns (encrypting DNS might be a good thing, sending all"
+ elog "DNS traffic to Cloudflare by default is not a good idea and applications"
+ elog "should respect OS configured settings), \"network.trr.mode\" was set to 5"
+ elog "(\"Off by choice\") by default."
+ elog "You can enable DNS-over-HTTPS in ${PN^}'s preferences."
+ fi
+
+ # bug 713782
+ if [[ -n "${show_normandy_information}" ]] ; then
+ elog
+ elog "Upstream operates a service named Normandy which allows Mozilla to"
+ elog "push changes for default settings or even install new add-ons remotely."
+ elog "While this can be useful to address problems like 'Armagadd-on 2.0' or"
+ elog "revert previous decisions to disable TLS 1.0/1.1, privacy and security"
+ elog "concerns prevail, which is why we have switched off the use of this"
+ elog "service by default."
+ elog
+ elog "To re-enable this service set"
+ elog
+ elog " app.normandy.enabled=true"
+ elog
+ elog "in about:config."
+ fi
+
+ optfeature_header "Optional programs for extra features:"
+ optfeature "speech syntesis (text-to-speech) support" app-accessibility/speech-dispatcher
+ optfeature "fallback mouse cursor theme e.g. on WMs" gnome-base/gsettings-desktop-schemas
+ # optfeature "ffmpeg-based audio/video codec support, required for HTML5 video rendering" media-video/ffmpeg
+ optfeature "desktop notifications" x11-libs/libnotify
+}
diff --git a/www-client/firefox-l10n/Manifest b/www-client/firefox-l10n/Manifest
index 500f460798dd..66c06c1caf5f 100644
--- a/www-client/firefox-l10n/Manifest
+++ b/www-client/firefox-l10n/Manifest
@@ -98,3 +98,103 @@ DIST firefox-149.0-vi.xpi 500962 BLAKE2B f2706ddb591e017fcbe12e57ac052aeaa6a221b
DIST firefox-149.0-xh.xpi 271712 BLAKE2B 708e303c2b7cd1c8ef0575a4b1f40ce39ab41c688eff37170ac6309f63cd610f5b3e49c2f262b49843cfb8ae7a428db3a4ee7ddb4fb65343fb56a80103b6a2ed SHA512 81fb0f7e62b630e3980cbd8247bf00587d51a00941f378fe7d8e6bb50b9cf40817afb37f3e5e4fed19a3aae1fd197a2bb2bd13f03b5486aae5fa129000312eca
DIST firefox-149.0-zh-CN.xpi 489028 BLAKE2B 2503bb6cc6ac678de0b6415bdf1b11f82b586abab3e4cf8b9ca5d51a0d4d99e67c4659c13bfa5bdc29e7de1c4e61306b463954517c90890057ab340115b2c5ff SHA512 feee1661fd504641c57446c9621931e937c16a6f211b5657302d6269cdd2ab97b5b1241362eddb62879beb79667759a99f58c45bd5c13a4f5736abba730025cc
DIST firefox-149.0-zh-TW.xpi 495341 BLAKE2B 74d44ce8ef8881131d9679bc15c70a755d3c3e8204d921cca7e58e2c1c3d5df95b1ba4efb30278a5e919fb83cddd05370a72da2c4f376705173192f1d12c91a7 SHA512 05b795f218a7126e0c619954eb5fd00da6b69a8264a5193f8deb377c4b87c4e19e227a2d66c42411ef20ce823604e911e2d01a74e404c955a094d84711321dd7
+DIST firefox-149.0.2-ach.xpi 292197 BLAKE2B 261dc2882ef6da91632e815e2647e598215964ba324fcc383c2cffa6e02cb6398b86c3316607865ed01cb45642cb5041e955d05e485a46b3a7f66b67b3ae774a SHA512 593549703fd69bfa024b350503dd7a9be283d9ccf40fe2e44a02c2b5df153f4943de4825db264ee522ed2bb3b061e1ebb8c471ecfe9ae3b9467fad944ca994e8
+DIST firefox-149.0.2-af.xpi 265697 BLAKE2B d90cf8edec8a3fb60dffce6f92b80640b81e6f4cb852460c123637f8ae35b4effddf9df5d49ba4a0d4ea64684d9c4008068872711739350650420b07e0ca9173 SHA512 23c2d57a2b05dffbd5132792ee8550d6995977778c637bc26cbaaba824ef4ccb74182edc6e8d38c67aae3e552ba7236d17def329f08e7443c53e8ddc34f9cbfd
+DIST firefox-149.0.2-an.xpi 329421 BLAKE2B e7dee8eb9ae6ae81e83b737589afc7a5fa070bacddffa363fed8c68c20d0fe0f7f06318520d35abf2b19a8d8e14ac50f439af33fe141ca870304e5fce6df3a26 SHA512 f412086f0872815c594a9fad1ca56d4df1981bc0e8eb36d745328c977caa5fee89d6ea09143f7282d63b09e6f2ac0e07972fe698e0bbc8b30dba875fe2e92bae
+DIST firefox-149.0.2-ar.xpi 450206 BLAKE2B 65776ade5c73d7d161208cdeb2a88d34cb3ad81fa911650acb7921b50a53d4f0d5bfcdb3a73ab3c208ed0bd2b12207f8a02f3ea686f4c5a64395a6b359d83511 SHA512 a451d4772c021c7029943316caaff0e49a5d820b5a90e83c7b3210c9985a9a48f487ee43a4927f90f7d3166e4e449823aeeefd7e52222e0889c0e1c282481382
+DIST firefox-149.0.2-ast.xpi 310025 BLAKE2B 6d58ad85b00e4b76edabb0d2f2c1ea2348f11a4427228d75a6d335275c3b5a76d036bfe522d3da0d44e10d7b11b72ee0d92732fcc89296ee1f7240d6fc0b3ffa SHA512 51765ad400323228eb62bec6cd4102ee02a76bd7cc500091621d2183e112745d3532f76b4d7250290a58ec5888bb58a180a6554c0302f5e8067c8f008fbce230
+DIST firefox-149.0.2-az.xpi 316107 BLAKE2B 2e6a7da2383559118f29bab0b2477beea52a3a984591af85afda59ffaf61c1ad18c837bfb16cad8305499bcb96446a799716e63dd83b74a2d64d405dec35ac27 SHA512 0fb0b4471c8a2e67a54cb53723c291f9e68e878904befed1db1e512e1c7df56b375b6edf68fe680bfbabbca33f034eade24ea051fd699323f9708066fa18eade
+DIST firefox-149.0.2-be.xpi 559505 BLAKE2B f893a888c08bd4f739c4b04ab8266cc370f2ae6cd8c82bb73bdfddb6830f6a4dcb828cc28079dd9ca416273a3a9b37d3e5919d90548fcb18da46d19ee09ae1d8 SHA512 dd1d55d5cb36ccf33baa4b9ae7bf147412e8fd41beed73c8d9b2301e6ad679685a8a2fa0a6a5bd707c17cf8d30cb7824f9222c5b6a75a7680954df58091f20bd
+DIST firefox-149.0.2-bg.xpi 459956 BLAKE2B 83cae6f7dc0e7535262a4b1ac8543a5b7cb81e6f0cf9743d42f8b551ce8fdc0e256c0ec62b781237bca0549749e195cacd15d2772e90e6c1c04b32cfece14a8d SHA512 652b6dfb2240177c1900612d3979865c90b1011d0d8fd57d2b1aeb8a2307707670ff6c69e8225c72cf8834804adbfbe7de5d8a577e03dcc43fab3639d25d1ac3
+DIST firefox-149.0.2-bn.xpi 410070 BLAKE2B 802b06dd254d351b1c86e168d6f52d692778c2eef7df78b7df059c9e8c102eddb0eb548bfd9426874d9f6c2f0089accdf6b8ac87939ba3c7f3101412e4c68d57 SHA512 8084c1f748adea292e1ebf580b875446a8feb368bd7f6e5a6d00f1f91515bd8b3cbb18d0f1e1d222d56e0bf3d966a58b1f5db2a6838192a7444ef54e05911fcf
+DIST firefox-149.0.2-br.xpi 391505 BLAKE2B f4306217f603d8f7c158ad350a04499fb0d2f1a91be24e1975774424e6c4423cb06e58e47459e38769742522750a088d342169ad5349b90ccf90a29a486a9bc8 SHA512 f087693dfebbcbe5c5dd3f90dc8fb54b4c224d40db70ad7e528b5ea9e931747198959106e402443e3a672c53b706bc38f141306a968bc557980eb55d73911963
+DIST firefox-149.0.2-bs.xpi 447233 BLAKE2B af3e872044fadef1bcff688afb6367706ac9a6fe8320a8f827e228c7c004b6e11f5f576b115f0127c502bca39b6ae5bfd869979865912b9a4ab2a066d5276057 SHA512 c1c8e0f03a490e75fd61a683f94b4a1a3673cc7a6dcee1924750fc8f453088c47333d7b4d3b124d7ac9f008bd7ebc405d120333b0177d9fbd0f649c7be84d6da
+DIST firefox-149.0.2-ca-valencia.xpi 355196 BLAKE2B 7ff7c36861f7c46b8e6ad96dc5d707e31915654659aa563e4f0befeddc1716930dd75d7c4c5f783819309a5d266a83a9620bef80f8a747c1dcffea840d5d2bf7 SHA512 42c37f1ff2ad4fd280b46c69d56ae6575663c8de8ec5bc4aff5e0739522ce29881546519497f857213df9d18d3cbe0c38d7b5f860c7068b6eeb1ee8234f80b27
+DIST firefox-149.0.2-ca.xpi 421988 BLAKE2B 900f2226bc655adfffdcb9684fad1222c5cf7cc2ccce9eb85622c9deb1a497e9c5b5d04b34d889553135c336772dc8b3854014894e9fec8846ba78ff1392b8e0 SHA512 5bd47f0650289b3f5347c8afd5e6fa752778f9f036b423a6ae11e6fd688baa25d47a1d9d28bb8e80a73c7769e7b9580665f5a311e1cab45f359521836648f96b
+DIST firefox-149.0.2-cak.xpi 387024 BLAKE2B a5371d6508777fc4b1af6b2a4f355c9c58a05bf39548a7d1702ad2f22f751850f893924f6b6d437118c4d6f9e8e211952ecade30a31e563b84fffd7f3391376f SHA512 5a751f9bef71cb9ec2960e53a60e18b46ca7e5ffacf2caf932fffd591186fe4afc9a1ac9f869d2d25701a54e55fbb4655fac49054bad7a9e46a5ebec61f2234c
+DIST firefox-149.0.2-cs.xpi 511493 BLAKE2B 49e9fcbc092161632b4890f15fbe8c553e2c47010ff994895000e0797d12ee8020b4bc9890f9744cfeb484903dacbc64379498aa6dfcc9d66878e370a06992ff SHA512 548748d8fee158a073ee1a0c6c0f57b2e64a0af7132c7fc87e4caf91428877e93da57d544c2d645edfaa3c7a69e648496dee7172d0238d8d72acccc8d35666f1
+DIST firefox-149.0.2-cy.xpi 473334 BLAKE2B 6f7a2b96da41bce00cba1f9a9e8c1ede00f94a49d18f7be393a59810d69c8efd9c1263ce2c4fee2ff64a6d9cee445411b58d81c5eda679a0779536526c86399e SHA512 24f0bbb19dcc953554f114fd89a84ee36f775c9b1910eea0d73b03e7568eeab35703e44f20f32b4e4708f3f6c9ac8bf5feeba7f0f239e93b16f5310f9164e467
+DIST firefox-149.0.2-da.xpi 457730 BLAKE2B 38df8ae8684725a5cf4277f1eb99fd7772e539e12262bfeb0b5e61e11e4c5e9817884bc92813c5f5bb45575682813c4b247f7ab0c472e8b34aaa748bd329d589 SHA512 0ed8a6db6d9e5f7da0c756b0c4b861ac2dc07bf9eed14a59bb46ee95938a673896ff01b4b3862dafac0dfbe3657a38f9fa5eadf4f33eeb42a160c5f50b00b468
+DIST firefox-149.0.2-de.xpi 484790 BLAKE2B 12522e939a75a4da3835e1521b5677de86769b15eed4005f5c11099c3c65a3eae7c01a3879ac2e0d142d58284dcfa490e8965a6a435c791b09d8c2d16c3abec0 SHA512 6ed7333aff97adf1a335e359355b3ffc595d17e83e32728d582c97d1c9fd9d639ff26a6c998e3592f8211d921c48d717144db89e90d66fffbb803b40ced5459c
+DIST firefox-149.0.2-dsb.xpi 498654 BLAKE2B eac94aadde2232bab81381a65ba33ce90a2596c6017f8b51eb8d2a8bfa4ebaff56704457fac19c6df90e90b8d794e80cd05f574c5dedabef7565d50f52e46649 SHA512 44e7e020ce4d08502232f1ce96f81fd3e22445b3cb6fd4a067cbe5b672b880ee2456516acfbc72b387168ba75adbdee86f1517be3e6e632c6618aef51cd0fa53
+DIST firefox-149.0.2-el.xpi 575216 BLAKE2B c2afeb18924d67d996d807ef41a64f954f43fb027a685eac089438e5668bb5b97407882cbf99ffccbd230c0ab2fba98d8226f3e61b4342bd2d551fac02347d15 SHA512 46b9d2496f88ab3e5f88dc320e78369363a0460daa44da0b67ed664ed17269a743c21a28fbc99271df21ba62653b3204c0c5e83cf9690ec4e78cc86d4a542a63
+DIST firefox-149.0.2-en-CA.xpi 438355 BLAKE2B 90abb6e9c20e93f7f04005fc11cc1a2073ca214492312d8e128a4b32b93e0a702cd556ad33eae01eceb0fa37a93a00dbe7218dbba7aa093afbff9f74b6586874 SHA512 ca7e4ab18cbf1373d3702b0ad02fdc828c194905ec0f24f781d69b39ab545a1b606d88e7815e06ed5ac7736744c26fc2cc5bbdbf10cc6d6d26d3f21007c93a7b
+DIST firefox-149.0.2-en-GB.xpi 438741 BLAKE2B b19da934924c492434cd87f6cc321c2f6978fb83e821bcff3959b74cb0ececeab2c28b9328bcb6d56ee0ec1cb0ae13236f2b9fe9edf170ac701efe88d21ec8e7 SHA512 451eb1a3596cc6853bb7d3523c5ac30a3d57589668f765be92938f7b20771bcdc74dabc051ad66c17ef57d160513c19be9a1623aafd05e360c9a9f3b079ce5ff
+DIST firefox-149.0.2-eo.xpi 463535 BLAKE2B bbaaea16551af118261703a58d575ad0a6f558d44e5fe4cac4b8899f1b1dcf0e8b9d17fad6126d1c5201f9145bebed7bec58b7fdc38b47e185e30d5790fff3dc SHA512 1f3fae4acb4ff7b20d00cc5fe2c54dffab47bd76422aceb90ff7f7a150eafc8b687ba2bd811c9eb53d7f907de3c3b882a8f0d7637c2340897423d8850af5971b
+DIST firefox-149.0.2-es-AR.xpi 475891 BLAKE2B 06ffcd409db995c2566b1111c9ce2cf6656d47bed4f5e8290a8688c045f2651de382134e7b5591ec4bc52650a30fb19fd531158e87d244f3fc10334bf54e7e2f SHA512 5e23982959a72d45dacd8c65d3eb5e341cca796d4090f108718b8bef8c67b5356e1aa8b38cf4cde6baee451abf0452d8e56c3d875ae2758913d1dc67655992c6
+DIST firefox-149.0.2-es-CL.xpi 477251 BLAKE2B b69f186aaeb9c49f91a9f02e3e7a299c0fa8e42b7e4ae50ba6c0b8a970de8f3b4e3615790850ed1aba51ef501f42a61ce2ba7f89eea52dcf696c2abbd31fa397 SHA512 9f86be864d02ed9f1962a83d0c0da722503cb2586e346125a7b21aa858cd7626369d61479a03a117e112fe55815f91dc6fa77389233b0badab2f82a9f2e88e2e
+DIST firefox-149.0.2-es-ES.xpi 476754 BLAKE2B 3128b1e55daa94a7c10c37a6a52fdea70ed912643b7455be21c2185f9d96255ecc08ce4d34412c6693832c34c6658260ad7e3ea6f33b4352cf3070060ef2c388 SHA512 2e48bd6c6b2df7e5165da1f4577959abfdc8eab76063cde962eb3eee2f4a5584737b905b4b33e69e646aee91681b2663ed940661be49f4a5dd026be1ccdea721
+DIST firefox-149.0.2-es-MX.xpi 470947 BLAKE2B 9257ac74ede9b5f164c50f1f95815e071dfcbc97811efd72013d37cfd7743900c2ca616177b649064fe59cfb569d64166742d77ad1fb760828eef9bd2ef59910 SHA512 739299e5d03dff8e6f33dda5c8640266516f4a2ab844c9150918292b531f3a9551692ea639e9bfcccc69b5959501b03378ae7ab64ae4e40891f23413f3cce47b
+DIST firefox-149.0.2-et.xpi 356086 BLAKE2B 302ab8a28cf0c84d43da6f0b5d8d4ca00e232dc442d770ada25617ab2d331ea63e5f9db2a7e3bf5693b82cc2c23f8e3d244bfdeaddf4776eeb456c3b21d523f6 SHA512 7bd8ddc7abb923685d8cf22bb47091d44d1e5a6b385771497db84bc36269e8c3dd5fcfa449afb5e42fcdc419f0adc5d6533ef50e96d312b4f439f01a06609d0c
+DIST firefox-149.0.2-eu.xpi 460024 BLAKE2B 21ae66df3e9a309ff8bd7abe95e0b86e6045dfb5a62a71983d541d4f4c75713c50f66e1136da64e7d712652c6b11fd3a59af915f58a020d2e9c248a18802105a SHA512 9301141d34f90886a04783436585d31d739f78a492616c414b8787e33796ef76e0fc10054ec97498f7a202f3135cd0d7424b50d5bf0a07f644bf020af44d1b81
+DIST firefox-149.0.2-fa.xpi 417776 BLAKE2B 3b4fecea8906d1dedb85e8e9d2ff697217d845e04174f976f6fbe57ea7571cb47ab669027673e0d3cc2ab481fd29a809f395c0efebe95940fdbee53fa468d4be SHA512 6d7e17db2d59d6dc6cce6f9f2c481b5a3deaf1f80f9977fd61055b22fa1f51b48a9dae7f3e7bb15dd2be140eb6962089b720bae0d92177509ffa5816aae8c067
+DIST firefox-149.0.2-ff.xpi 307772 BLAKE2B 7a77802873c41c7132c72b3664d96f2bac3f6a85b79109b1e24d0a5d9996124212657c9884be40d9135a961bc06637fe2cb2644170aedf64114e47090364cb96 SHA512 922a922a80d2141928e92f009b3e9ad4e071f93d0752c0ce9156ddf16410874c4b4dee06ef9a6f1365f3b2d12abfe36d7326515bdb8b9df45dd3d285b6330af7
+DIST firefox-149.0.2-fi.xpi 460741 BLAKE2B 242d07b36d7451d867cf4d7e66628452e330df056af1f1327aec37770710b4e3519c25f912e8151ed2116368a50cc029b8b02fc80ec8b7ed7105c48b8820ff50 SHA512 13372cf0708406dd37041b8168ba71f82ba6ca2a3586061b9ec1b65ea02008ac687be7832d88e3cf04039030a999877fbe34c421c58637508a6ddc79f0209838
+DIST firefox-149.0.2-fr.xpi 490378 BLAKE2B 927a977878a6231e7e98bf7490ea84234a4070faf37ae83ab3ce0350bb2f6717bb76702e5ea14b24aca38738010bf26d8157061838817146ed99d077198a8c10 SHA512 da3c354eafdace6f2371fd53b3b4f4a2268b99c69e41f7b777743be8fc3993de6334551daec39d6312fabb53c7387e8c8087c9210ec55b1fa18bf1edbe47e363
+DIST firefox-149.0.2-fur.xpi 473931 BLAKE2B a938dfdf5f3f217e23e30a9ede250d07e191eea5c180975b8826c4718d198f0ae97218e35705854703c43abeb0900e8801efab52bf7d39d88bc1f1f762cb0470 SHA512 94c11244430759f1000eac6338b858ad9c02257ac4d2b986b099056ece6328c3e444035ec1fb1afec6301aef6f2c3512fb3f4b87654d5607016869fc2797df68
+DIST firefox-149.0.2-fy-NL.xpi 472408 BLAKE2B c534bbe0a96d1e7f9bbfbb3cf1acf817d2f9dacd73ce990c757f7fdbd3f4a31b9c1599f88df07359a81ca30eed7995880f6bf349db45fc3b8083be1df85e2048 SHA512 71237981a6f187f23a7908204433ae69e2ac99c6af99349a3216ca58f8fdd7dd1f35a5ba276db8163690d9b99ffcaecaa4009b70d0c3a56c1fb5f7e1dd1060a6
+DIST firefox-149.0.2-ga-IE.xpi 313461 BLAKE2B f0b668a2ffb9da0d1d87bd306b9c895cfdf989a88bab3b0f784d1ebba645cb9b1b8968de95b3f7b13721cc9d7e00397808d10e7d5b1b5458313e54b428ffff01 SHA512 c67d5ba60586e3c8e5f3dff1427c4aae2e6191f0824180ad5eb8be85b9745cccb57f61054a9eaf550bd9b2874c71e5eef97fbb2b6b7861fd20530d834da93498
+DIST firefox-149.0.2-gd.xpi 406446 BLAKE2B 3a38d8d1a6e18f010482670e2a963af4dcc0c54c5dd146ababfcc8cc24e81c2c6de98b8fc354f9ce4b4284ce3e706a28662baf7df57dd9886331d40972c4504a SHA512 a055bdb0557a76ccb7f85642127260a9b685ddf06b24474eee89a5f36024e7f9149cdab4d2f3b952d77bdd8ae411045ae8758e808a55e3a79db0b8b47c692ba1
+DIST firefox-149.0.2-gl.xpi 443854 BLAKE2B b1e38daa65890833ce04354b0fb998cd8910375a77137cc774020335ad5f62d63b0633b066eda1d4591b591c87afaad1b23ba4eb4a8d76dc48af641aded31be4 SHA512 2f201e670e0b95a82578cadc36d849f01d1220fd02d0bc3784e1c37971000a47b691589405f6a4561f4ad08bf6d76637380678da575f17121be3540c8360d992
+DIST firefox-149.0.2-gn.xpi 479575 BLAKE2B abb62feba72d2e192478f86b3413b73643928d02553475e9aa9a4cd32c1d3a3bb53ee4feac820c40097be28145404f5861b71c9f6031869da655fd4cfbe8f3e7 SHA512 c183d446c9cde9bb91c43e0c7a8c4f4d38badd7cc24ff54942eb9cc553e7538cbd5681c2ec465dc5c03b9bf897b989aa59aca21ad74618f158bcd1b580e17790
+DIST firefox-149.0.2-gu-IN.xpi 355976 BLAKE2B 27904e95907bbd56f979c7fa23770cba7a785c0ffc4c6898b95809374067448fb178e9a270a854f2aa37f2c1b5d3e4aedc62bfa7ebe24a5a6cbf027ca4e3f2f5 SHA512 08022c4ff8df123c28f479f3ff1a73d021c6d35882bec805f5734deef660511d4a5c8b84c4221996312ea8c147f2b4a05d7d1609afd536d94ba1c71c44d18688
+DIST firefox-149.0.2-he.xpi 476352 BLAKE2B 5358b70112acc786689f0181f4ba880a7d0a14316723a8ed2a3ffb250802b044b75e552069ab1e42275650e55e367593325f7c44f4d935465eafdb4135147bdc SHA512 44b484bf4d460a56991bea73ed2ba55060cd1d3d44c4dc87df6c1bc7e6456183aab497857198e8a772597b193f9d40d252c539397e01a7eca6afa899a54b9ead
+DIST firefox-149.0.2-hi-IN.xpi 374685 BLAKE2B 618a2d28ef83d0c917a9af71baffc36c3c6bf281039139d1d24f41c459b4a5556264504979ffc77705bf143d1ca8040a057735821fddcfd334ac99c993382797 SHA512 35e218abf04b73309300e0ad549f3468fb8de1236c985a719f9a2a39a104f978831fbea159b806b31f0f7e869651f6a95c380090120b3c0abb4f3ce4ff915b73
+DIST firefox-149.0.2-hr.xpi 463597 BLAKE2B e60c977d72b5e7a635c4dfa2601bf3d85bc1aa3e62a1aafbe98b3ef4f4ad8619c20bc3701ff791855ac815b8e71e94c0bfd9308f14395bc0f4cbdcd0ab06417a SHA512 f5dd3f1fe864fe795fee04e5541d6ddda5da62582caa25fc40d2bc1f0cc636ff3c2bd43c4ab77e51d52f097cc991eff34f06e43255e764225d4d1ca7c7d5605b
+DIST firefox-149.0.2-hsb.xpi 495285 BLAKE2B 7c5ce73bb60ae3d3c68559a797834e9d120918d1dff928df58adb5f29a2bc5862ab42e8b59d56eb18aff812dbd1a08e250f675e71a03543cb664801b46f36750 SHA512 14d8c2619b8e1c4c154e1b845ca9086c0fd3b4e4cfa2114a0326504ae78c2985c6765f4a4b28f7bb958457b3aa6c1e41c24017d5ba3359e782b9b8cd9e9ab49c
+DIST firefox-149.0.2-hu.xpi 499396 BLAKE2B 1e57831173a8b73235fb4f980a38153477114267b248ba9df13cf490a2b83250bbc2c0c54ee17fdcf889163ce4e3e7bec037eab7efdcf7c8e750968a8a54022f SHA512 8b6ef03300d67d4411360cc600805bb2f36d751424684b5ca1504cc3f4a90f5001dec555b22d86951cb7ee16fe7243c4b75ce9fe7a80ae5d9bb6ea4c95c1f491
+DIST firefox-149.0.2-hy-AM.xpi 478638 BLAKE2B f80912f51b77d310acaf1d48bf60cb90a5a54074f1eb3cd9b84e87ed7166c9ab5cffd6f0126911beb3060bdaeb25dd594103782d3db517e4098f073b94082e09 SHA512 d0942838a17b49036925a8e6c41e166e5ada61cbafeb324059d7e78df3ed1c103002b83ef3854fbf1298503e6cc27d4755b07299d2362af41a649aaa0def08a7
+DIST firefox-149.0.2-ia.xpi 459715 BLAKE2B f79295745a00a47c1b5fc9990ed758f6d917f65623d4d6347f9eaee32ef7e63398b784a6c4b9b0d42d04c29c1336200fc83e3c90f7cc4ea587dc8f54edd6031b SHA512 82eac3d85d1567643339c34803d73de12511abdff078bc963cf1a8356374f27a71711826a3832be78d7aa63024006ba835d0717ed9ea2d77f368dffdecdc3920
+DIST firefox-149.0.2-id.xpi 430154 BLAKE2B 646db6d399ee8af7afc0f9c09f0c7bbd96420857ffe63a13a1cc21dff76f36f55190449c13c91857f2753fa141726f39151372370a9c963fa2994a03d488b93f SHA512 83ba3ce0db3ae539e4a48fb8f29d793ba2db857c3618c2788b1544ef4a5588206c9d2c468b792357c93bed1b20d9cedb3b03d93bdfb6fb380446d1f8833364ea
+DIST firefox-149.0.2-is.xpi 437318 BLAKE2B b8dc1dfb6f78f65a55b31d3bd06fe04123a3b8adee0a1e1e146416c0570794deef1382e4b27061dba4f2c1fe8b1d56df281e87c38d1a8b0a1b2bd3c845d33cc1 SHA512 870db42f7b6808eaf6fa7f772142285802f20b88ddccfb7290e4420d673d75b2d77ecc8afde49f777daf828c749e7ab7f966b501a4e1f06a6bfdac6384972245
+DIST firefox-149.0.2-it.xpi 471560 BLAKE2B 888dabe01de0b20671048c33a290c6c9ea1f9bc801e45a2630e50cea1593657cf20e2430a8146332d2d6f7c3e8bf3244c889c616ba0d100600e96c6bb352163e SHA512 6959904747294e418a7f61c35b7d92c74908a0515059e0076732e72ec00e6e5c00177bb5d902085c961ba25775b538b295a980d530f9b6dcfd23ec7124e659df
+DIST firefox-149.0.2-ja.xpi 513906 BLAKE2B eb2202400535d0329a0753128841f8b5a8f0fa1dc290e03a47772b913ade3225655885fd9d03f85c63828927192665c44ea8769c568a9f616bba7e010ccd55ec SHA512 b3da16b831a4ad69bca32957728deca77c5ca24d337b96053bacd12b7cc2f6ede8bf03c20908d2957d3c04724d2bbe55f895ca6bd8308c9d242ba48a8bd05eb8
+DIST firefox-149.0.2-ka.xpi 532274 BLAKE2B 154b0a36ce6879d7ae4226ff01c57d57045163ff67129a0f42fe418d56ef05046f46b08eec358615aa4168244c0cb27d4d0186926902752cd76ed604d84d9d44 SHA512 444b738370ed05d5309a04c9c52efcdf97a2772611ebd25286c2c0b570d05a3eb2bd40e544ae9a1df3577f0bf1a241d0e7c7ca638c94f551deb0d03de84cd89b
+DIST firefox-149.0.2-kab.xpi 423500 BLAKE2B f1ae512fb0fef54dc654728860269c0c492ebb28ede388d8c0164647a8917b8d1d4d06a9bd73891ddeedc6418ebd0e20051deafeb38295af8e41acceb41daf0e SHA512 6136d378525348dc96d9dcd8a285a13cc2662ae30b8d51c994454b8ff90d51e286aedb8610881fe988a37abc0d63acec516dee177420fbaa3947a174d2f574c9
+DIST firefox-149.0.2-kk.xpi 551222 BLAKE2B 78c2a110d8a23122129abd9d97351272cd39430b607ae7cec2f2743062ec2ce9a25a882de58b4eaa95eeb6cb98544a19953e64089beda55eea19ee2c41803509 SHA512 f7b730b7a7b18acc8ea8c8e0374575831cb62ab882668306892515ff58c95509e1be95cf9fa3f96c17c96d5195bf5647a5261a933b81a6e5b5ac6539fbeff350
+DIST firefox-149.0.2-km.xpi 372652 BLAKE2B 5e152d15bfbcc6ebe262d5f2c97b86ff9a669fa3e394aa6da0e41cb6edaa7b8438cbd6017b975ac9f8e3592dab48516b1dd96e8e3af1ce9fb36940880cb12a34 SHA512 7834f4c8ed411aff8c69e3a23bb000732352f8e01df6d241fdcc0cd22dd67c71327dd1d3adfc69839f31b536a6324cd8e4ff6c5f5de054ef41966a43e8420453
+DIST firefox-149.0.2-kn.xpi 330006 BLAKE2B 9f9d0c329dcbca1b63b688abb054ad9e95ed86110eaabc1a9d810f4987be8ec190bc62ed32f9dac9ca565ad8b9e463f4fa5e8c47900dc2122f3397cbbaa23c27 SHA512 bf458441fd60b1a69319a49dc44ed5951a5b59f6a130942d5c780533f0878038267df4ff5c01713147396452e4329d6a3fbbe286cb1cb5dd1ad8e159d1c4f729
+DIST firefox-149.0.2-ko.xpi 499047 BLAKE2B f958de7ac6a96f53d80e4522b023875149b48b165fdd84153289792a8b1d66d8a86cb5134f3351a59e909a1509e136f0293ce93dade582b830072fa4b4a4dc74 SHA512 3c5c0cf86c7cb09b47420449e186b2edf762fe725bec960440a6f8f63067e29f70cc448c6bb4740504fd77f1dd912b61d7b371fecf30c90a33f36230b50ac8a0
+DIST firefox-149.0.2-lij.xpi 317119 BLAKE2B e96eb2c79393fca7bfe90830e4d9055cca2e80045738d9d5eac1608be09f6f561ab797495737c42468010b21dc454d13a3e4339bb9e66ec729eb2a036b7d9ebe SHA512 74a00d25568e035b7747277adb5b1c5394fb179795616e9ec6c561a0dd45d889cd7d487627a63ffd0fb19df92b5bb7c35d86be2653ca5d8f6c79c2355824694b
+DIST firefox-149.0.2-lt.xpi 376874 BLAKE2B 8d23a69d9242c23cd765e0c30e755c259f11caffc7c279d8dd8bf026ee0f8c320ad8eabd26dbc8e732d3754284be503dbe4ae8fcfb355fb6550497d5b6ad0717 SHA512 0746cd7922166a1999b16f461ceb68c635ee36b7dd45d8cbde9396b3605403a2b4c698ad470c764bba225f1966866674f572de751fa87e198783015de523dd28
+DIST firefox-149.0.2-lv.xpi 388177 BLAKE2B 20c18f1b7a3f9e906d5fc95f71257b1959b3f883906783f894811ed5dff273f7f6d337520a0e25cdcfe912a9cd0e71cfe1b5f1e9be93e915db4647074244d32d SHA512 8c0569c0a7798c42970abf44a23df7d2a83e6b9d53f73a897cbc0c10b1898d5a3621317b693fef2a6cd66f115470b4011dede61eb44077ad85bdb7735f3fb1a6
+DIST firefox-149.0.2-mk.xpi 318505 BLAKE2B b19cdf4ecc09ee9c217bff079ca71d98367bad8d15a20a7858de9aa9c7dbd6cb34f14aee951d7e8fc23adbf8f907a542e151381564a19136d5ace7197b63badb SHA512 cb7539c1a99c37d2f404cfee2b0c31beb129b66a5ab740eb17231d50255c4a733d5f910cae0da37d97c2d10fb0efb47c3c40a6059659bbd156fe83dbd4ec5beb
+DIST firefox-149.0.2-mr.xpi 353842 BLAKE2B 301bd1e753969167e7961c3253fe260534563e03072cb25784ba057feeb9f3e229568dd426b941ae5bd1a8712a4f6442b74d87171c102b3be96c2fe9bbd4bc6e SHA512 6e720a172c4c9b03391b07d5b2bdd5b0aef119abbba16abe1d3db1e9a58f9578a2d22895ddadae3e39a30db4a463b243323e944656369de545d98a2da7d35acb
+DIST firefox-149.0.2-ms.xpi 293583 BLAKE2B 830d16e9b473cfeb1f1a6d90f6c9a143cc7856003bacf3b3769aa7924e6062c987e28eff730b967e17a6d570ff8adec1aa18cc570a4bf970114d18187be44d3d SHA512 78fb2b9a7de5d8c2864989334e8998b67b5a071291e7a1a434bb4ac899b97939d787a229c25470f898bdb1ad323dbbc9e134eac427cf2f9156fc455b35f0891c
+DIST firefox-149.0.2-my.xpi 340677 BLAKE2B 1d71ef93db8febfaa78429ab2bbfd4ecdfe826a2e197aac974ea3e38eccc896b0ac6ad4677850c21619a8d683a9ae632c74272696f6d5a8aacf370f55b36bf7b SHA512 db30d70b7139efeff4e43aec201479086a20b2d8df3040447aada59a2035f65a907a41d3883cce1804b09e6ac1b6f3dd7082d2bb72fee6fa9302c2b83cd012e5
+DIST firefox-149.0.2-nb-NO.xpi 458819 BLAKE2B 1e41c8cfc6daf9669a8e1d201a2e82effacf85d67ce044ad86d0c3ec2d346ff0ddb33efb1066c6bed251d04219e38cae703f989478a4664e4b55d9398685c275 SHA512 25df695013f965eded3e2df58145872c440f36e183d967c908eecec65cf95dc0c9c61f29ee8bd93971f950558f8f10060c732ae4218cae2c58e3b6cef7d01a4e
+DIST firefox-149.0.2-ne-NP.xpi 346174 BLAKE2B 2b6b1dc7382f9a155a1fe57d7ee2191568bdbc85b98aecc77f69c08182b51aefd1a1623c66b6080fc1acd9b1fb1f53572534aae298f29dfcbadd075e9ec7b278 SHA512 ce8c0d41889b5de77f834f79a3ddcfadb311702a6f9f87e4dcffa0761f2c8d593be7b96a12d1b907df4c255a0b2db31ecd78c900b6c61eaeaa798c3b9b03bafb
+DIST firefox-149.0.2-nl.xpi 466246 BLAKE2B 29b345e2f45a761a3fa7577c9a0ddccc3bb2cb19559e94b34d06901fdf1fe4964953268daad01a2b06ba9e5874e0b54e9321e4a861ffcf1cd03e65cf6ad562fc SHA512 42aab55a6b15ea70ec48820b445fa4f550e7d29c1c9841b92404f28426ac991f398ac9159df3b2d453eef309e19a3259c3b663526fce3e9ab252438044f62511
+DIST firefox-149.0.2-nn-NO.xpi 462072 BLAKE2B 037322f4610aa2b40871ac4201692cde4f4f2b5c4c500af4a5cce3580970e4cbbebffe5bdfefde1bc2615d0e351be4f3cc26823e5c8abcdc34915ccd6a03f408 SHA512 84663b631388a5092533c2ba0b30377161272126ac81717cef288dcb4e33a23355fd834e226888f2b439d24d57ffd553c07dda09817a49cf02ff32e097d8da37
+DIST firefox-149.0.2-oc.xpi 410837 BLAKE2B 56bca7e428a0c8c351e6f5357902097bde2ff679c5565f1407783df6f98955f2dd1d83fdfad640fbaa9c9afedb3087457f44d9bfa9eac456f951cc98bb36657c SHA512 1606bd23d1a439d2bef0f3cf61ebf6cd0dd94dbf8b4fa58ec2dfa2bc974a0be122e9f6713f2858833106a18987e8deaaa9068ac642202d3a52c045eb8b83e7ed
+DIST firefox-149.0.2-pa-IN.xpi 530538 BLAKE2B 8012abd3a9c982b349ec8029b784dfced616000f1e1ea2fd32dffaa0fd3b7b408a93e48d214a4d56e0e685255844b7ae8097a2d58212333b6e428650f23ec6c9 SHA512 38ffda784a7a8ba7b4f3a7966f86e973bcc8ebdc59457f672e348c49408fe38221123a414390bf96e13f723df22b8a0398ad58627647e68d7785cc57cc92cbfc
+DIST firefox-149.0.2-pl.xpi 496290 BLAKE2B 2a6081de947f7ef393b419917947ffe3f685de60881e0f42af3a17ef227bd4d3016ca27213bfbcfaf07941b39db732a5e65daf9faa69e8c2b626e4ebca711aa3 SHA512 0a53d4ff27df4787dbaa01b4d3a31263667b81426bb88adf16772cb0ac5805f51483834805bd81f9fb04ef0a0904d0ab5b38c4a757bd850e526bcf6f9c361a29
+DIST firefox-149.0.2-pt-BR.xpi 470906 BLAKE2B c9d21122f60e246954e845c1d0e8b94c139d428b8f67da31f91d8de153a7824ad4e072222170dfe928263e566216c7a233fff933d7a263889a45cae7e8a99cbe SHA512 ada8192faae4d644386030ca46ddf8f5e879bf7ef85b50411d490862a55e17ee622abdb4c9742077b0c0471050e3b7c664801186f795560bcc67a9ad987bc50d
+DIST firefox-149.0.2-pt-PT.xpi 461061 BLAKE2B 984e1d6a7ded550bd726005e0cfb4911905e1508e35f4d2a67e0c2af17029c8de0ab29944318691483e3d272545d55a297773c89f1854a4a5e32115ef9f91ab7 SHA512 5414ead837e4af114b0c36f4c25f5e69c2eb0d229979db77e059b27182251fe584a737bc68339d39cede1e391970d16d366d430e3ea55c607a0de2306abee6c0
+DIST firefox-149.0.2-rm.xpi 452403 BLAKE2B bd82a819f7855e08a72ad8d13f091eed99044ac4be94ea345dae6ff908ae2ca52c003647927c4ef351dded311b76abca7cc8c1cfcf8e12582a54ce0fd115fcae SHA512 76e353ae238e8027dd9c5dd792c9bbf0ce9e7a7873a9d86d876c237a489479a4fc62c70c883ebb7a688aee483149d3667455f20fda5f6abe6e3a9afccafacb77
+DIST firefox-149.0.2-ro.xpi 480617 BLAKE2B 7b9028527b7a1cba356beae4a0dee794e72061dbd46f9c2d82d3f8316336779fbdc93e8ac1033b7f44cc1ff3544368fdfb7fc554c12358fbf82d8dc55643807f SHA512 abeca7a2c2454a39dd95e12af6b8b98de8d51a0c49aa5f560a538493a2fe69f9a2a92edef0da22f7394df9713ae637b8984a4d3b1d47103c487a6cce99c97e26
+DIST firefox-149.0.2-ru.xpi 563428 BLAKE2B 9d111238098c1133ca33439b5076be34dd80321125540f57a3b0479eaffc50acd257b915692c4d6efe6adad9d8f7249cf41dcd393af406cabfabea1a927eeb26 SHA512 748b2038783d949177a178721657ac40ca8f4ce422221dcf88385f2383a391aa17738cc3e908b37dddc0ba225a1a64f9e736c501377c0cf503374432fc2cbc4e
+DIST firefox-149.0.2-sc.xpi 425119 BLAKE2B c7db511d28ab33ecd8cf5f5423a443c929f0fcec74b3773401010b55bb49b0a0d8800a6599695bff3f241eb33d05b0c464b41a176c5c8b977bccd4cd93bf03bd SHA512 95187aea52a9c70ced28e869ed77ce09562d56f1efbf5d50277b5e3fb84ad3c8ecab80af27f718e09f9d93ee8fa2b2fd9b6d77486ed3d981152ee51eaabc8656
+DIST firefox-149.0.2-sco.xpi 319912 BLAKE2B ba35a2930bebb29da9ae710385fb82f77dac8ff90ec282759eaf564ad24e757a0090411b9f95574e3f86e8cba5bb956f92c8e5b30944ccafd18040f50bd1e198 SHA512 469694f4ada53158e82e3bde0f551dd9f97baccd3ef4498633b7d56fa67308e48d46d99d741789a1ae098870b3a1d03c533169bfcac236648b0e7937b11ef616
+DIST firefox-149.0.2-si.xpi 406440 BLAKE2B 81f96fc8337f1a4a751b24cb417a5c5a48fe7a811df42581aea827594498c1bf795586eb7625e3f58d2857605ef118e8149752b0d48102f44a3c3132a5601ff0 SHA512 fa5fb4b659fddc69fb51723ca9a15a67f86e72e975c57191dafcf97f4fb6998620a66e66cd04039d97e1e73aab8cd1862cf27536e82783c6c5abd411490f9869
+DIST firefox-149.0.2-sk.xpi 502315 BLAKE2B d2722251491c9a1b88173f9cf620fa04ae4b2d7bdbba042441d1822001ab73c01da72b15d94524bc40a6476c881671babe9d501e9d6d1a7bffbe48b9801e3002 SHA512 b534778cafedbd5c5b741badf0116d2cd0cd28e9ec10c670d465d9123adcc7265c94c6b228c7a47884518f6d390314bcebb198945abd5e8a7592510b0363860d
+DIST firefox-149.0.2-skr.xpi 480797 BLAKE2B c06374db298d892fc6c607cecfb8a736e5bc4699a57d49efffcefc4055b9685962f3d144b603fba33bfb88acdc69db64c485b76b36fd38e297402f242b7f40c9 SHA512 bb12031a54149df36882157d6a5ae6dd090e65e088c9bafe69ef0b1aa3ff8cd5ae643edf49b68ecd0ab5a82adcdcbe037d2ea0e3642d9877828cda1bfff744fe
+DIST firefox-149.0.2-sl.xpi 467407 BLAKE2B 1e1a2c29bd378f8eb15d8ee62261d4e46f4dd98c1f20adbe029c9e2781c01dc3a8ad47a0a0a488588766f5ab4201856e238c099ce87f714631b57e040a76b9d2 SHA512 7b40bb23553546aa6bddf3e862f92aa28c1f775e6cff3b4ae968d188500a871cfa5f55919779797d5a1e99f41daae188bc91aa7879f26bae6847e967b391b023
+DIST firefox-149.0.2-son.xpi 272183 BLAKE2B 982dda763884f81aa1c802b2ff3de4fd28badac019827d53891d1863fb5c9218ec1e5ce069267c39c93067657ae1646ecf9ca9c0ab7931a74d89e52e072e48d8 SHA512 8fc9715ce0a878b42fe05a090c361d461d73d26a3d271c748bdfcb1a191ccebf7925b0a7709242f70fc22d694fb288055a17fcfd594bec08ed69cb37d46aa6ae
+DIST firefox-149.0.2-sq.xpi 487910 BLAKE2B 0eeeaf0ae021ff836758bebff0fcee4158b5c11433863f7c1ae39d219e3c138ea350d975df134b792b4985c56aefe3e877d843811bc83fc7f3de7e2a05caefc3 SHA512 abf2a670ff4d7266099152bc320131f4fdd63179fb5fc13d231978a12114fdc9d9b0d98d69ddb0f10c156aa855f32e092ba7ca7c32b53cccecbff5a95af19316
+DIST firefox-149.0.2-sr.xpi 534757 BLAKE2B a122c06e2f1b20ba44c507fbc1966d4f86d5b0120222b9701b2e96775477ee65f4a2256c01715b4a049bdbd0fef243b8658a7251a4826a3ca6dd086938affb57 SHA512 4d4c26cccefef89a0098aa39e33792adbc4e2ce57513116178415c4db79517ccda29f3d0a53801715b805624a3cc19c0a7521cded5074371bddda44c70c8c0ca
+DIST firefox-149.0.2-sv-SE.xpi 465945 BLAKE2B 9e0780d3b5e06c38b7f97b50c01e2688f642934b3126e578b79d8aed89007456a5b832481ffdf084e8bcad393b92d9d0fef7b56d994cebe30d789fd07e8294b6 SHA512 f5c73d8bf2c7916894189b7aa781f0329151eca261859716542ad2f3a2108051eac7fdc8464d93a460888e7817572065de3b66b37c62a69791c9a117ea6f2e86
+DIST firefox-149.0.2-szl.xpi 338738 BLAKE2B c6f41224f841b86314d90af8a66ea2af79bb5fd1b399199934ab3bbed425c281b03eba577f0de16a2bc87870928a61f8c363af1e1efcf957594fb06548242ec4 SHA512 2c19641874984661c261f771885d7882c6c06360d2bca0ece27e91418cf28fe186917228cc8f3112e6245669c46f66eb711f51ea674d5ba9f6f7388afd2c19b6
+DIST firefox-149.0.2-ta.xpi 335786 BLAKE2B 7d8817dc9bd598fd9babc00c24fdf46bddabaef7c42e46337766aa242a59ee9d1db7d3ccd66c15f4668163136ad5690d3d27facf225c7ecd3456047f3efda5e1 SHA512 7a8ec0b87c63e033293afb062d734239fb6fd1d88c2e304755242f103fddc755f1a6e73ecd1bc47ae810d9b9d12e0114f8b519cb6a6e6e9f38bf61cd59891799
+DIST firefox-149.0.2-te.xpi 384664 BLAKE2B 2b7093b17b5dcd30858846e6c0225ef3d87935543acd90d2cdd401c147ece72c2046b59b0f64fed79ea3b3d57412b0bea47bcf3033b1f7b0832da47ccd2dd039 SHA512 36c95b4ff43a84f8721bf67258faf7327368f5a1c295d1036f08bbc8802dbfc7aa63eb054c629cb9b978d8438f2fb8666d99805008c5cf643d73eefb797068cf
+DIST firefox-149.0.2-th.xpi 541061 BLAKE2B 3ac5ac338c39285aaf86a560413515d6ee49c4f4c2c680f5a93810cd2a785d266e76f1f12f638111f63673f547b22cd7125651304f05c3d0630e6aaa8e9a3edc SHA512 725236273e482729adbea43d7c720f8e346aa4b3f62fbe270bdea882fdd3442178aaa8857b00e73ef18a0c9bca1b75373daf600aa070063f5411c28a0aca94a0
+DIST firefox-149.0.2-tl.xpi 353107 BLAKE2B bc20f7c3e7d3d9322c3fa232a697dc80ec1b6f1860cd55420ae9471f330b264127605a4a290fc414c9cc577a249ac34bc2718c78fe1d60ac2fc5464e34546611 SHA512 dc83f4af74d3cb4773539aeaf6f1da05a9d6f0c06749747c894a8425dfd49b90db3fa10427d6941d2dec570a723131478edd7d44f3e654b8d0cf9097ac54f42a
+DIST firefox-149.0.2-tr.xpi 479987 BLAKE2B 3b0a45a398413acfa46c57261ecd7f93ab2644dfa29698f267b132c62546fdfa69e687731075988292b68d1cf06a11fdd52550c04527dfd195953fe8dcda8fb0 SHA512 ee8483feb245e3e0d1959a3e9fb93a70440ac356b528d14a4e217d4090d7c9521b96d0864485f534a85c56854bd40e2ce6b59473ce23aef4479c816b51f67624
+DIST firefox-149.0.2-trs.xpi 322186 BLAKE2B 6a372b745e1577af52be706352de9cb00aba1cea144e863523a13c5ee178dec829897b0d2f05de3d611f1e4671afc721b38ed10b635ac82f94a371bd845f348d SHA512 6cd5dc8b4bea80a8fdb6045314b0148e6084b2cc5fb624019ec6ec2662a86cacd07bcd3a3b63c4cfa9bfcf5eb8312264a8e3099ab8abd4b59ddab3d3add9d73b
+DIST firefox-149.0.2-uk.xpi 545031 BLAKE2B bcb9dcc9b319c49d6e3026ae59b191bea00ec572b35215fd9287a62287ad9cde9953c8f3edd63d667c646f4e8cf93416755108ab5f828f0309321dfe5a41c17a SHA512 2b5ff802533cad2b337a4d7f32d38acd835e0d9e9798c31c16b01b93a6d4b26c498283dba736a9f88ec2b6049445a51e08276f35598dace864d776c7ae7622ee
+DIST firefox-149.0.2-ur.xpi 367815 BLAKE2B 9eb4a7bd3191eafb89bfbb7bfbacd0e737e892f4261b9d0bc37581404ddfb6a9838ee5a40db597b97c8dc833eb16a42ee8566f128fdeae46bcbf53bdc742f6a1 SHA512 86db95c776c521fddf7a3c2ee18545e5c091497a916bc582258b52bfe548255f0b65cebfaedcd4bbb3bbf85acb6909d3f27eded8efad87fced55fffce627fef5
+DIST firefox-149.0.2-uz.xpi 302228 BLAKE2B 249485a550ceefaebcf482d90b713ac5016903d92fd866665481fe3f206a97f88ec376e7db4d5aa6c6d887e11dc995089f2a88f4ed28fc8a0f62f316375b63c8 SHA512 7294c62de1b2d8b96155eeb0aa5c33e164943a92abf53118eaf43bc428cd095386f3f5ddc202c4838cb769c652dbc522d947eaac6012c981b66f6bff5c86cda2
+DIST firefox-149.0.2-vi.xpi 501069 BLAKE2B 59371eb1a7ad464ce407d37d434283e741001c0cff83eaf4dc0390ba1511ab9d7caeda948aeb4dea525f66ee03fd31bdef4f832ed3046d3df74f088c9bc5ce63 SHA512 603efb28988fd1fe8e1cd458a93b7c373210edb03638e0a14413deba00ac110ab76e79c9a178b0338e1a1c755e8f85c370e5617869273e82764cd565b1a6c324
+DIST firefox-149.0.2-xh.xpi 271704 BLAKE2B c3cc1b08e438dbe92eab670082d914bfc2c40e0752e7bdcc2dc0c77ec52957a860128c7e2d92dd63c4ec3bb314cd45509aca157fe556867435faa26e9274f629 SHA512 80bcd52f247a6ae9ca98f8596eb111fc3e00f645666eff45415920a5585041e19510c97c6007a528ad27fc2a99431c4af1e22bfa7a879fea6548dd381f372158
+DIST firefox-149.0.2-zh-CN.xpi 489105 BLAKE2B 7fd900cd1f47c1badff164f6bf2bcbc5a28ce61b6721a817c3b5f6c6a6afb0a58f012f8e99fba5a206f0bd213d901a05d155650fb72f48306147bf190486e423 SHA512 f7bc1a42702e554213e2c2b9f06edb3235101024181ea358751fc84caaffb2a28a3d7b66a9126f491241e3306590e70c66d939a99e1ecf319e96c1cb41857ba8
+DIST firefox-149.0.2-zh-TW.xpi 495369 BLAKE2B 74a7eb5751f58b81ae3370b2b2327ce3553b43b08493961538597808107ac873ae158d6ae0c8cbeb94641d20ea83e35cd239a8eabee6aee8718ac79677800402 SHA512 fef5de63b2357672e144e4e21fa4b22fff441041f4ac19866dffae218321324ab555d7c7639bccd13440888ea36de704b7df3dbd29c58bea28c7f0aa970e7d59
diff --git a/www-client/firefox-l10n/firefox-l10n-149.0.2.ebuild b/www-client/firefox-l10n/firefox-l10n-149.0.2.ebuild
new file mode 100644
index 000000000000..47f081fa54d4
--- /dev/null
+++ b/www-client/firefox-l10n/firefox-l10n-149.0.2.ebuild
@@ -0,0 +1,181 @@
+# Copyright 2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+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.firefox.com https://www.firefox.com/enterprise/"
+else
+ HOMEPAGE="https://www.firefox.com"
+fi
+
+MOZ_PN="${PN%-l10n}"
+MOZ_P="${MOZ_PN}-${MOZ_PV}"
+MOZ_PV_DISTFILES="${MOZ_PV}${MOZ_PV_SUFFIX}"
+MOZ_P_DISTFILES="${MOZ_PN}-${MOZ_PV_DISTFILES}"
+
+MOZ_SRC_BASE_URI="https://archive.mozilla.org/pub/${MOZ_PN}/releases/${MOZ_PV}"
+
+DESCRIPTION="Firefox Web Browser's translation files"
+
+LICENSE="MPL-2.0"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~loong ~ppc64 ~riscv ~x86"
+
+# 149.0 is when the firefox-l10n was introduced.
+RDEPEND="!<www-client/firefox-149.0"
+BDEPEND="app-arch/unzip"
+
+S="${WORKDIR}"
+
+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_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
+}
+
+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_install() {
+ export MOZILLA_FIVE_HOME="/usr/$(get_libdir)/${MOZ_PN}"
+
+ # 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
+}
diff --git a/www-client/firefox/Manifest b/www-client/firefox/Manifest
index 9282086a2fa2..917bce98a622 100644
--- a/www-client/firefox/Manifest
+++ b/www-client/firefox/Manifest
@@ -305,6 +305,8 @@ DIST firefox-148.0.2-zh-CN.xpi 487755 BLAKE2B 78e9fbf06372509fc404a70db7397173dd
DIST firefox-148.0.2-zh-TW.xpi 491355 BLAKE2B 3742fb4098c74461c94485970cfa7f8c9a8cfe61227332fa3e9a47bc00b92facc0f236da43fa593ab06284e14738c8dc30f07a86916b953c676d3d5fa74bdac1 SHA512 0837b801742d3b671ba91ff402b06e213224b6f829f1cb6ba5971aa7c2adaa5408a75346f452870cd28475d8a9466a7ca2525301691ed8a5b471d520821aa1d5
DIST firefox-148.0.2.source.tar.xz 664519028 BLAKE2B ba2036baf01584d37b25944a50b497d18e238334ec866846c676b518fbb66ede35404a7db73da7b54862c876fa262d679b4e1099368b7d905afbd1f499036084 SHA512 56a93ae5235f38704f2f56b6246daddadd3bcef1db797cca10202fb919ba2f0e1459defaaa41cf188f269108efaef1b76ccbfae33d50ecbd52765176b4320bef
DIST firefox-149-patches-01.tar.xz 13204 BLAKE2B b28fac32a38842fb5fb205f8dbf07f239f072c356c91aab9ea1eb32f1f5e6b855da8d837c7ed72cc1dd3990f80e6eefd2bdd663e87ed46934096633f69d2b476 SHA512 5c97a0621030a1d302895c40e1ed29ad93799fbb3098bf0756e9ec2d2157308472da917c4062ffa75d75789b63374c204572499a1e4afa8809d269274b319fd3
+DIST firefox-149-patches-02.tar.xz 11656 BLAKE2B 1d3b400bb0aa2b1b4c4c1f5c0540ecb25a130573a113bd27ec33ad4c114613e5cdd2a3a6375e816f97cbf4b78e52f0ccd7a1eaf255e3d18435d200c00f7b29a8 SHA512 3d8369961ae5d90cb85f982af056e2e0659f275976d77c328f291c78d656850d370021967b937fd26f975c7400afa904128281797c4b384c1bff817faf598e31
+DIST firefox-149.0.2.source.tar.xz 697497732 BLAKE2B c4091cb8f9cc6b074b300f04f783373e518cfce58d1082852f04d7baa6f3fbad150257c4c176cfe382d4d59c9fa8eaf83874748414feb1d8169989e42950627a SHA512 844a46ee068ecdc66b7227d089a057ad3f4945114fea2cb280d5e2a383d0a022fc6628ad57c068ea34cf159472f63c50ea7ed128bc11a0b27f16bb7b67d7f3cf
DIST firefox-149.0.source.tar.xz 702929664 BLAKE2B 8b1d084dc2b8a7de85cc54aef57adda94afa191d4adb7a6e6ef1339e8a3cc7a7d8a42df52f858bcff358f69382e163ba42b2142126dcdbd1ad1cdc4bad0c0114 SHA512 cdd871a7738fb70d85a703e89c4874d1bf44184b4c9b28901902adcbfa25c199675e746306bb59d66821e6ecd17e07c99b66a48d827f39acca6c3b012b95371a
DIST wasi-sdk-30.0-arm64-linux.tar.gz 119262670 BLAKE2B 59194c6459c98b0566522c97cceac61c68915629931546f8598856d726dff9f85742560afe9c86d6102a1faeb44c962b3935b8b6de326ea218158a32026319bc SHA512 ff794dd90c851b2c0b7ea2cb2ceddaf23cb4cb1c211e37ae3dcf12556e6a21e389c2b894ef52e68110ca085098ae3717b18a497a928b5d13b0a9dab61acb8b38
DIST wasi-sdk-30.0-x86_64-linux.tar.gz 119449290 BLAKE2B 7286b9079eeb160b0e033b7802f703b08e089e452c6558f1feb6d9cf8cd240fabea7f9a39d44b13b2793e69a02c569f64520d677d76a577bc2e35ce07c722212 SHA512 9b8dc1cec71aa9e870840b30f2b7307d6b48f965d50b724926745780e4e76411f5eb97e443970ecdead90a4932669cc18ae506439f22a24d06e2e8fe44d220b3
diff --git a/www-client/firefox/firefox-149.0.2.ebuild b/www-client/firefox/firefox-149.0.2.ebuild
new file mode 100644
index 000000000000..e426cf777530
--- /dev/null
+++ b/www-client/firefox/firefox-149.0.2.ebuild
@@ -0,0 +1,1388 @@
+# Copyright 1999-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+FIREFOX_PATCHSET="firefox-149-patches-02.tar.xz"
+
+LLVM_COMPAT=( 20 21 )
+
+# 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.90.0
+
+PYTHON_COMPAT=( python3_{10..14} )
+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=32.0
+WASI_SDK_LLVM_VER=22
+
+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.firefox.com https://www.firefox.com/enterprise/"
+ SLOT="esr"
+else
+ HOMEPAGE="https://www.firefox.com"
+ 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[@]}
+ 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 selinux sndio"
+IUSE+=" +system-av1 +system-harfbuzz +system-icu +system-jpeg +system-libevent +system-libvpx"
+IUSE+=" 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 )
+ wasm-sandbox? ( llvm_slot_21 )
+ 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.29.1
+ 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
+ x11-misc/xkeyboard-config
+ )
+ )"
+COMMON_DEPEND="${FF_ONLY_DEPEND}
+ >=app-accessibility/at-spi2-core-2.46.0:2
+ dev-libs/glib:2
+ dev-libs/libffi:=
+ >=dev-libs/nss-3.121
+ >=dev-libs/nspr-4.38
+ media-libs/alsa-lib
+ media-libs/fontconfig
+ media-libs/freetype
+ media-libs/mesa
+ media-video/ffmpeg
+ virtual/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-3.10.0:=
+ )
+ system-harfbuzz? (
+ >=media-libs/harfbuzz-2.8.1:0=
+ !wasm-sandbox? ( >=media-gfx/graphite2-1.3.13 )
+ )
+ system-icu? ( >=dev-libs/icu-78.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-1.4.7-r2:= )
+ 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
+
+# Firefox-only RDEPEND
+RDEPEND+=" ~www-client/firefox-l10n-${PV}"
+
+# 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_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"
+
+ if ! use clang ; then
+ if tc-is-gcc && ver_test "$(gcc-major-version)" -eq 15 && has_version -b "<sys-devel/gcc-15.2.1_p20251108-r1:15"; then
+ eerror "<gcc-15.2.1_p20251108-r1:15 and pgo detected. Firefox-145.0 can not be compiled"
+ eerror "with this GCC, when also enabling pgo."
+ eerror "See bug https://gcc.gnu.org/PR122620"
+ eerror ""
+ eerror "Your options are:"
+ eerror " 1) upgrade GCC to >=15.2.1_p20251108-r1 - note that even with the 16.0"
+ eerror " releases, make sure the patch set is equal or newer than 16.0.0_p20251109-r1,"
+ eerror " or use the \"trunk\" version,"
+ eerror " 2) compile Firefox with Clang by enabling the \"clang\" USE flag, or"
+ eerror " 3) disable pgo when compiling with GCC for now."
+ die "Firefox-${PV} with gcc+pgo cannot be compiled with the detected gcc version: $(gcc-fullversion)"
+ fi
+ fi
+ elif tc-is-lto ; then
+ CHECKREQS_DISK_BUILD="10600M"
+
+ if ! use clang ; then
+ if tc-is-gcc && ver_test "$(gcc-major-version)" -eq 15 && has_version -b "<sys-devel/gcc-15.2.1_p20251108-r1:15"; then
+ eerror "<gcc-15.2.1_p20251108-r1:15 and lto detected. Firefox-145.0 can not be compiled"
+ eerror "with this GCC, when also enabling lto."
+ eerror "See bug https://gcc.gnu.org/PR122620"
+ eerror ""
+ eerror "Your options are:"
+ eerror " 1) upgrade GCC to >=15.2.1_p20251108-r1 - note that even with the 16.0"
+ eerror " releases, make sure the patch set is equal or newer than 16.0.0_p20251109-r1,"
+ eerror " or use the \"trunk\" version,"
+ eerror " 2) compile Firefox with Clang by enabling the \"clang\" USE flag, or"
+ eerror " 3) disable lto when compiling with GCC for now."
+ die "Firefox-${PV} with gcc+lto cannot be compiled with the detected gcc version: $(gcc-fullversion)"
+ fi
+ fi
+ 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
+
+ if ! use clang ; then
+ if tc-is-gcc && ver_test "$(gcc-major-version)" -eq 15 && has_version -b "<sys-devel/gcc-15.2.1_p20251108-r1:15"; then
+ eerror "<gcc-15.2.1_p20251108-r1:15 and pgo detected. Firefox-145.0 can not be compiled"
+ eerror "with this GCC, when also enabling lto."
+ eerror "See bug https://gcc.gnu.org/PR122620"
+ eerror ""
+ eerror "Your options are:"
+ eerror " 1) upgrade GCC to >=15.2.1_p20251108-r1 - note that even with the 16.0"
+ eerror " releases, make sure the patch set is equal or newer than 16.0.0_p20251109-r1,"
+ eerror " or use the \"trunk\" version,"
+ eerror " 2) compile Firefox with Clang by enabling the \"clang\" USE flag, or"
+ eerror " 3) disable lto when compiling with GCC for now."
+ die "Firefox-${PV} with gcc+lto cannot be compiled with the detected gcc version: $(gcc-fullversion)"
+ fi
+ fi
+ fi
+
+ if use pgo ; then
+ if ! has userpriv ${FEATURES} ; then
+ eerror "Building ${PN} with USE=pgo and FEATURES=-userpriv is not supported!"
+ fi
+
+ if ! use clang ; then
+ if tc-is-gcc && ver_test "$(gcc-major-version)" -eq 15 && has_version -b "<sys-devel/gcc-15.2.1_p20251108-r1:15"; then
+ eerror "<gcc-15.2.1_p20251108-r1:15 and lto detected. Firefox-145.0 can not be compiled"
+ eerror "with this GCC, when also enabling pgo."
+ eerror "See bug https://gcc.gnu.org/PR122620"
+ eerror ""
+ eerror "Your options are:"
+ eerror " 1) upgrade GCC to >=15.2.1_p20251108-r1 - note that even with the 16.0"
+ eerror " releases, make sure the patch set is equal or newer than 16.0.0_p20251109-r1,"
+ eerror " or use the \"trunk\" version,"
+ eerror " 2) compile Firefox with Clang by enabling the \"clang\" USE flag, or"
+ eerror " 3) disable pgo when compiling with GCC for now."
+ die "Firefox-${PV} with gcc+pgo cannot be compiled with the detected gcc version: $(gcc-fullversion)"
+ fi
+ 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 and bmo#1988166 on musl
+ if use elibc_glibc ; then
+ rm -v "${WORKDIR}"/firefox-patches/*bgo-748849-RUST_TARGET_override.patch || die
+ rm -v "${WORKDIR}"/firefox-patches/*bmo-1988166-musl-remove-nonexisting-system-header-req.patch || die
+ rm -v "${WORKDIR}"/firefox-patches/*bgo-967694-musl-prctrl-exception-on-musl.patch || die
+ fi
+
+ eapply "${WORKDIR}/firefox-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
+ # glslopt: bgo#969412
+ moz_clear_vendor_checksums glslopt
+
+ # 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 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
+ mozconfig_add_options_ac "+hardened stl" --enable-stl-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
+
+ # Avoid compressing just-built instrumented Firefox with
+ # high levels of compression. Just use tar as a container
+ # to save >=10 minutes.
+ export MOZ_PKG_FORMAT=tar
+
+ if use clang ; then
+ # Used in build/pgo/profileserver.py
+ export LLVM_PROFDATA="llvm-profdata"
+ else
+ # Attempt to fix pgo hanging with gcc, bgo#966309.
+ export MOZ_REMOTE_SETTINGS_DEVTOOLS=1
+ 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 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
+}
diff --git a/www-client/ungoogled-chromium/Manifest b/www-client/ungoogled-chromium/Manifest
index f633a9ee40a6..d5b8c0986b19 100644
--- a/www-client/ungoogled-chromium/Manifest
+++ b/www-client/ungoogled-chromium/Manifest
@@ -7,12 +7,14 @@ DIST chromium-146.0.7680.71-lite.tar.xz 1476275936 BLAKE2B 61f0a78b198460646104a
DIST chromium-146.0.7680.80-lite.tar.xz 1476612920 BLAKE2B 7cc36addbc84ed2745aa224b7e710afa90bcca3195004cc7fc96aa9ac03a769f2cefcae7010876f1b56a9d41073a7456e30abf76d928062f8f274ddd5d4f0e64 SHA512 86bf36d7ed607ce314d084aebce7e4713e7b39a3edda3c33b613651799abfe40fda67b665d4ec1fc53bc26654a0b731b2d3d1f898ab51cc1c8f6682b155efd12
DIST chromium-147.0.7727.24-lite.tar.xz 1475616072 BLAKE2B 3c05242e4ef68e1ee04f56575ebf1a7203d8ea1b86226512d5b7ecfccc6af548b397832974a882072bf0d4a0f791ef01f8333cd9868ca74ffc67f471c241f038 SHA512 7bc872ce9b2718b12ae3586a985e069cfbbe66448eeb377e1235c0bf81ec7e5dc1f22d16364636c078b5eae85b3bb91d6e749db1e54d29366b6933d6ef2cc372
DIST chromium-147.0.7727.49-lite.tar.xz 1475133472 BLAKE2B 113d2f053f96373a0dc62cd07541cfd3d4b797cecc4dac1747b9cb0ea018d9e703ac600406628f2abcc1f6cbdd962219ee7ed4923a85f9c1982132029bc34179 SHA512 6392067b78b366bf0c1c003f9bd0730af087e9f44ffb42b796db7e0f8513dbec675ad4c0e2dc5a319384780e98b24dc8f3a91642783a9e14cb84c842226434b5
+DIST chromium-147.0.7727.55-lite.tar.xz 1475176500 BLAKE2B 023e78d819beb213e937d7349a9cd7a874868b4b0e227c9183ddf5d0fa8bdcf57f798751d0836ceb5942dfaa919ed8cc75654c07863d4a4c40dd75410270e44e SHA512 6518277ddc2ce30e10b7c256f996364383a0b3ac5d243c4e15f7e17e08815797e062a46a1208922eeb8bffc0a07dcf526a75c2f71bb748e642b8d4e251523ada
DIST chromium-37c28a19804e47a68eabf3cf882a310689fc325b.patch 1560 BLAKE2B 61f5c49a89dba8000e8ccffdfe4f5b87104f34639eb99d83edfe19462f9223a8d756167974da3527aa4199ec8e6f28ff9ddbd01b4a61bdfb6628623f492889ba SHA512 d2f4af9cc6ac41abc7caf4ed986cd9f9b1bca86d447306f89bf0192b4ee5b02c8bcea3d01051c0a810b3d24b5c304c42fddb17b1a24535a16072fc5aad995577
DIST chromium-3abf0048fc862a2db04031466be5f45a70c77a6d.patch 20070 BLAKE2B ac53796ea43ddf81058fe7206f8553ca2ef8ca9e1644ae2483907b49fbb3b624759df37993fcc1b91c2ba4e90d2d9eba0a0ec2d01f9b1d643bd986cbc09d48cd SHA512 c1716752c3ceac8510965d85b7b08800e76a8939fa19aaff1b31b98c54e3027783a075abe6f54e8733a46078552651b621c26870deeffa4f5ca1b187f6aa779a
DIST chromium-acb47d9a6b56c4889a2ed4216e9968cfc740086c.patch 4513 BLAKE2B b13d82248b935a9d99944de46772240ead38cb37532c1aa44eb4be11e45170e4785076caa9acbdd2658e01896127c3caa6e1862e116d4ff28ac2c9cdcf8f2757 SHA512 227861a7276804926c89a7b81200808c03ad6544e904062f40403f0521554d89f5fa9152305e1ebd4e0e6df3b1cdfb0001fccd73e49ff26f96d5d97f150d73f2
DIST chromium-fcfb1a42813f1e9d8babedc7bb2e0f06101a3151.patch 1044 BLAKE2B f927eb0a3e61b828bdb285cc18e0fdf1defe27d48684580ef375e9cbb8f7c80eca6053bfab5cfd8dea28ead06c1f54834240a0dfafe25401bbb6c8b392df8e77 SHA512 d989bc5084e47b412bf8c93bb4b102472154246e50cd93b6d3c7c02ea4a6449d52a9301f8cf6131d83a8249bf054cddd6ca23ebd83f469f16acd10e808817af6
DIST chromium-openpower-a85b64f07b.tar.bz2 387899 BLAKE2B b01fda2d64ce73068d1536a10cc0896f07a4b714cdb25698b1df8b3252baa0c21c4209b307cf1cb554854f6d0bfe3cd35e06aaa8d02ac5d409a119335084c324 SHA512 05eee81677e8766808441c939bee68e2e6c58ec91f471d88a40181d2eda78614a0a6d27d92ff8f9dda564d12f3451bace4ff2727594748c5c238a3533038019b
DIST cromite-130b90c92118298354e4f70423fa0c05e7bcafa5.tar.gz 175349334 BLAKE2B fb1ddf3b2cc7b62cddb4df8ecbf28db980472ec5513d705d3d147333fed9ec67df0f3cc1d1dd14dfcb5f9a9f6b5aed78cf61d802f3a6df872779446a182e08cd SHA512 bed586fcb6063a6bf7ab354cf1e325a23252e0226e535d0d28aaac8c01ba10987bc78856624e8da97b90f693d013eceafb2a39be8426308fea048e14467afbde
+DIST cromite-15d48b061426a1f4a8ae8596622f0599ca626056.tar.gz 175364722 BLAKE2B 6d5862760bf33c93bb1919b0dc55276a192ffe7953ba79130cbce15c7056ceeccbeb1f14aa0fe2276d455637310e261ea656777ab9219e216213d99d4790f601 SHA512 2535b35eef17433a739c637543c5bd94276b8ae5331c48435cdc17b77205bbb7446f03bb3e182710acfc543f022c910a8a0b3f640691482851cd35111f5ad560
DIST cromite-21fe58812eb5ef4e043d1e3b418b7760749fec24.tar.gz 175367478 BLAKE2B be8024718b48daebfc005eb6d4f4b822a0a9a2516eeb2be18f8776b63c24a0b38aa07fa9c30e92e61b14130f0aaba57811363fc7816c4700d2d2580c001dd440 SHA512 be9e6367aa94351b0f5864e8ba464c619bf6032dc9642fccb7a3230d89450ab745ca662e8b280e4e0f0e692034da3df095f4dea097a15293106235a17cb93fc6
DIST cromite-31d4039f3999b2c2eaed2c377fec3fb923ba62b0.tar.gz 175380118 BLAKE2B 40dd9bfdd2ffa86ec5d7466dc4b34c4ec28cdfc87a1eaf2cf1ecc3fd3a0efb831ff82668c6ccd639d0b48e871e74bd063bf45ee56b211f0ffa8013d07f5b7bd2 SHA512 83ebe2f08a55e5809761069c5e7eb6587bf98cfcd58d3924199379d1a51d6fa28b3acb002060fde1c4f07b7831e6a6886bfd2e18a4349d17771bc2aabe16a148
DIST cromite-9b33511160e6d30427778dd782e915577dc9568f.tar.gz 175396590 BLAKE2B 315bb8ab1a1b079a38faed835c7fcf3693e00899b28b1b8a03bd0f45bd54a2f39d93f7899f6a3ccf7222311e3edf4d7e81e51373a1aed81605c7df41a7b3d6be SHA512 46933f66b6fb6d2f58f0c6fe288b147f708225078cb9f731b641ca6286f6598cdf1c5685a5d28c39f844ae79f4c1028a6c63ad40f9527955f43a665f9fdcbe91
@@ -27,3 +29,4 @@ DIST ungoogled-chromium-362902fbd20c05d512a7b409086a2d6a9bb52a3b.tar.gz 662682 B
DIST ungoogled-chromium-4bf1d44499bee82e5ea803f69469810d42d760ae.tar.gz 666043 BLAKE2B 95eefc5b00c781ecea3cf9c75bbf1a0c4670874b11d2b10467b39f099104f9125086a4fb05446ed87557cb0e412ccc47c3932dd8243a4e027eb011947c4e53c5 SHA512 644ee76d4dbfb70a1d74df4eb01f57c6c12043a6a4e5e205ad9a41f2c5ed6a2d6fe7c32e5d1cd2f6b1b50fe60010591194201602b1f2eaef7b9daf836218a031
DIST ungoogled-chromium-60225cdd7520d09cdfbfa3d02e0b5d86b36e90c8.tar.gz 666046 BLAKE2B 406ca86cf85e1d21caf292a078747c129e052c0e998778087cb30af463098e153661d4034b4030949813f608ab1fa93f06e8fab0e2e1fef7ea3dad4acf9064d1 SHA512 6eb2715b324474d9c3adc657e9a424cf58d85a7ccd983c9dde66b5db832edd1fb855aab1867871a4b3cd3430c6108ea8887736917df5d0369f9bf91183f4355f
DIST ungoogled-chromium-e85d9f0bab0ff217eb6165d57031311b60846d82.tar.gz 662671 BLAKE2B 77f4a70277c2548636dfe586a1180865ef9974970e5841b10a3972451b4bbd565cb0bc5cea49e9be9c303f0dd432b6cc0c97cef46190b57e005e72d8932f172e SHA512 a4a9304f2c1a74c41696f1f9be1ae327966f1101f9291087aa3ad06cbbb753219d11c72a10ea0c6ab9b329f7d9db05a079683fc3e570ffc4058deb28b7b2aba1
+DIST ungoogled-chromium-f20303e7b1172c441a5b2371edee8fefb4dba2c7.tar.gz 662696 BLAKE2B af5f083feb30078a8bbf44e457f817f2a76506a06a904c23cda4b449e0da6ff5a831de90f542e12cf75bebbfe0ffad42671132eb3b074bc6ec4eef462b9088cc SHA512 63deb5599deedd2b2420ed3d4c81a4a8ca9bf353112fe125718dc655a231b294fc95320a5718586a7e9922b481e466d109b9e121fd02b6dcbf4b8d0e63779085
diff --git a/www-client/ungoogled-chromium/ungoogled-chromium-147.0.7727.55_p1.ebuild b/www-client/ungoogled-chromium/ungoogled-chromium-147.0.7727.55_p1.ebuild
new file mode 100644
index 000000000000..11ec4bcdd065
--- /dev/null
+++ b/www-client/ungoogled-chromium/ungoogled-chromium-147.0.7727.55_p1.ebuild
@@ -0,0 +1,2137 @@
+# Copyright 2009-2026 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+PYTHON_COMPAT=( python3_{10..14} )
+PYTHON_REQ_USE="xml(+)"
+
+CHROMIUM_LANGS="af am ar as az be bg bn bs ca cs cy da de el en-GB es es-419 et eu fa fi fil
+ fr fr-CA gl gu he hi hr hu hy id is it ja ka kk km kn ko ky lo lt lv mk ml mn mr ms my
+ nb ne nl or pa pl pt-BR pt-PT ro ru si sk sl sq sr sr-Latn sv sw ta te th tr uk ur uz
+ vi zh-CN zh-HK zh-TW zu"
+
+inherit check-reqs chromium-2 desktop flag-o-matic llvm ninja-utils pax-utils
+inherit python-any-r1 qmake-utils readme.gentoo-r1 toolchain-funcs xdg-utils
+
+# Use following environment variables to customise the build
+# EXTRA_GN — pass extra options to gn
+# NINJAOPTS="-k0 -j8" useful to populate ccache even if ebuild is still failing
+# UGC_SKIP_PATCHES — space-separated list of patches to skip
+# UGC_KEEP_BINARIES — space-separated list of binaries to keep
+# UGC_SKIP_SUBSTITUTION — space-separated list of files to skip domain substitution
+
+DESCRIPTION="Modifications to Chromium for removing Google integration and enhancing privacy"
+HOMEPAGE="https://github.com/ungoogled-software/ungoogled-chromium"
+LITE_TARBALL=1
+PPC64_HASH="a85b64f07b489b8c6fdb13ecf79c16c56c560fc6"
+PATCH_V="${PV%%\.*}"
+SRC_URI="https://commondatastorage.googleapis.com/chromium-browser-official/chromium-${PV/_*}${LITE_TARBALL:+-lite}.tar.xz
+ ppc64? (
+ https://gitlab.raptorengineering.com/raptor-engineering-public/chromium/openpower-patches/-/archive/${PPC64_HASH}/openpower-patches-${PPC64_HASH}.tar.bz2 -> chromium-openpower-${PPC64_HASH:0:10}.tar.bz2
+ )
+"
+# https://gitlab.com/Matt.Jolly/chromium-patches/-/archive/${PATCH_V}/chromium-patches-${PATCH_V}.tar.bz2
+# Gentoo tarball:
+# https://chromium-tarballs.distfiles.gentoo.org/chromium-${PV/_*}.tar.xz -> chromium-${PV/_*}-gentoo.tar.xz
+
+LICENSE="BSD cromite? ( GPL-3 )"
+SLOT="0"
+KEYWORDS="~amd64 ~arm64 ~ppc64 ~x86"
+IUSE_SYSTEM_LIBS="abseil-cpp av1 brotli crc32c double-conversion ffmpeg +harfbuzz +icu jsoncpp +libusb libvpx +openh264 openjpeg re2 snappy woff2 +zstd"
+IUSE="+X bluetooth cfi +clang convert-dict cups cpu_flags_arm_neon custom-cflags debug enable-driver gtk4 hangouts headless kerberos libcxx nvidia +official optimize-thinlto optimize-webui override-data-dir pax-kernel pgo +proprietary-codecs pulseaudio qt6 screencast selinux thinlto cromite vaapi wayland widevine cpu_flags_ppc_vsx3"
+RESTRICT="
+ !system-ffmpeg? ( proprietary-codecs? ( bindist ) )
+ !system-openh264? ( bindist )
+ cromite? ( bindist )
+"
+REQUIRED_USE="
+ thinlto? ( clang )
+ optimize-thinlto? ( thinlto )
+ cfi? ( thinlto )
+ pgo? ( clang )
+ x86? ( !thinlto !widevine )
+ debug? ( !official )
+ screencast? ( wayland )
+ !headless? ( || ( X wayland ) )
+ vaapi? ( !system-av1 !system-libvpx )
+"
+
+UGC_COMMIT_ID="f20303e7b1172c441a5b2371edee8fefb4dba2c7"
+# UGC_PR_COMMITS=(
+# c917e096342e5b90eeea91ab1f8516447c8756cf
+# 5794e9d12bf82620d5f24505798fecb45ca5a22d
+# )
+
+CROMITE_COMMIT_ID="15d48b061426a1f4a8ae8596622f0599ca626056"
+
+declare -A CHROMIUM_COMMITS=(
+ ["fcfb1a42813f1e9d8babedc7bb2e0f06101a3151"]="." #148+
+ ["-acb47d9a6b56c4889a2ed4216e9968cfc740086c"]="."
+ # ["-37c28a19804e47a68eabf3cf882a310689fc325b"]="." #disable style check for cromite
+ # ["cd5a0df905a28faa89ff2a4ab44f893f84dc4487"]="net/third_party/quiche/src"
+)
+
+UGC_PV="${PV/_p/-}"
+UGC_PF="${PN}-${UGC_PV}"
+UGC_URL="https://github.com/ungoogled-software/${PN}/archive/"
+
+if [ -z "$UGC_COMMIT_ID" ]; then
+ UGC_URL="${UGC_URL}${UGC_PV}.tar.gz -> ${UGC_PF}.tar.gz"
+ UGC_WD="${WORKDIR}/${UGC_PF}"
+else
+ UGC_URL="${UGC_URL}${UGC_COMMIT_ID}.tar.gz -> ${PN}-${UGC_COMMIT_ID}.tar.gz"
+ UGC_WD="${WORKDIR}/ungoogled-chromium-${UGC_COMMIT_ID}"
+fi
+
+SRC_URI+="${UGC_URL}
+"
+
+if [ ! -z "${UGC_PR_COMMITS[*]}" ]; then
+ for i in "${UGC_PR_COMMITS[@]}"; do
+ SRC_URI+="https://github.com/ungoogled-software/${PN}/commit/$i.patch?full_index=true -> ${PN}-$i.patch
+ "
+ done
+fi
+
+if [ ! -z "${CHROMIUM_COMMITS[*]}" ]; then
+ # for i in "${CHROMIUM_COMMITS[@]}"; do
+ for i in "${!CHROMIUM_COMMITS[@]}"; do
+ if [[ ${CHROMIUM_COMMITS[$i]} =~ webrtc ]]; then
+ #TODO: is it safe to use this mirror?
+ SRC_URI+="https://github.com/webrtc-mirror/webrtc/commit/${i/-}.patch?full_index=true -> webrtc-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ angle ]]; then
+ SRC_URI+="https://github.com/google/angle/commit/${i/-}.patch?full_index=true -> angle-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ quiche ]]; then
+ SRC_URI+="https://github.com/google/quiche/commit/${i/-}.patch?full_index=true -> quiche-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ dawn ]]; then
+ SRC_URI+="https://github.com/google/dawn/commit/${i/-}.patch?full_index=true -> dawn-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ perfetto ]]; then
+ SRC_URI+="https://github.com/google/perfetto/commit/${i/-}.patch?full_index=true -> perfetto-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ink ]]; then
+ SRC_URI+="https://github.com/google/ink/commit/${i/-}.patch?full_index=true -> ink-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ vulkan-utility-libraries ]]; then
+ SRC_URI+="https://github.com/KhronosGroup/Vulkan-Utility-Libraries/commit/${i/-}.patch?full_index=true -> vulkan-utility-libraries-${i/-}.patch
+ "
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ruy ]]; then
+ SRC_URI+="https://github.com/google/ruy/commit/${i/-}.patch?full_index=true -> ruy-${i/-}.patch
+ "
+ else
+ SRC_URI+="https://github.com/chromium/chromium/commit/${i/-}.patch?full_index=true -> chromium-${i/-}.patch
+ "
+ fi
+ done
+fi
+
+SRC_URI+="cromite? ( https://github.com/uazo/cromite/archive/${CROMITE_COMMIT_ID}.tar.gz -> cromite-${CROMITE_COMMIT_ID}.tar.gz )
+"
+
+for i in ${IUSE_SYSTEM_LIBS}; do
+ [[ $i =~ ^(\+)?(.*)$ ]]
+ IUSE+=" ${BASH_REMATCH[1]}system-${BASH_REMATCH[2]}"
+done
+
+COMMON_X_DEPEND="
+ x11-libs/libXcomposite:=
+ x11-libs/libXcursor:=
+ x11-libs/libXdamage:=
+ x11-libs/libXfixes:=
+ >=x11-libs/libXi-1.6.0:=
+ x11-libs/libXrandr:=
+ x11-libs/libXrender:=
+ x11-libs/libXtst:=
+ x11-libs/libxshmfence:=
+"
+
+COMMON_SNAPSHOT_DEPEND="
+ system-icu? ( >=dev-libs/icu-78:= )
+ system-abseil-cpp? ( >=dev-cpp/abseil-cpp-20260107.0 )
+ system-brotli? ( >=app-arch/brotli-9999 )
+ system-crc32c? ( dev-libs/crc32c )
+ system-double-conversion? ( dev-libs/double-conversion )
+ system-woff2? ( media-libs/woff2 )
+ system-snappy? ( app-arch/snappy )
+ system-jsoncpp? ( dev-libs/jsoncpp )
+ system-openjpeg? ( media-libs/openjpeg:2= )
+ system-re2? ( >=dev-libs/re2-0.2019.08.01:= )
+ system-libvpx? ( >=media-libs/libvpx-1.13.0:=[postproc] )
+ system-libusb? ( virtual/libusb:1 )
+ cromite? ( dev-util/patchutils )
+ >=dev-libs/libxml2-2.12.4:=[icu]
+ dev-libs/nspr:=
+ >=dev-libs/nss-3.26:=
+ dev-libs/libxslt:=
+ media-libs/fontconfig:=
+ >=media-libs/freetype-2.11.0-r1:=
+ system-harfbuzz? ( >=media-libs/harfbuzz-3:0=[icu(-)] )
+ media-libs/libjpeg-turbo:=
+ media-libs/libpng:=
+ system-zstd? ( >=app-arch/zstd-1.5.5:= )
+ >=media-libs/libwebp-0.4.0:=
+ media-libs/mesa:=[gbm(+)]
+ >=media-libs/openh264-1.6.0:=
+ system-av1? (
+ >=media-libs/dav1d-1.0.0:=
+ >=media-libs/libaom-3.7.0:=
+ )
+ sys-libs/zlib:=
+ >=media-libs/libavif-1.2.0:=
+ !headless? (
+ dev-libs/glib:2
+ >=media-libs/alsa-lib-1.0.19:=
+ pulseaudio? (
+ || (
+ media-libs/libpulse
+ >=media-sound/apulse-0.1.9
+ )
+ )
+ sys-apps/pciutils:=
+ kerberos? ( virtual/krb5 )
+ vaapi? ( >=media-libs/libva-2.7:=[X?,wayland?] )
+ X? (
+ x11-base/xorg-proto:=
+ x11-libs/libX11:=
+ x11-libs/libxcb:=
+ x11-libs/libXext:=
+ )
+ x11-libs/libxkbcommon:=
+ wayland? (
+ dev-libs/libffi:=
+ dev-libs/wayland:=
+ screencast? (
+ media-video/pipewire:=
+ || (
+ sys-apps/xdg-desktop-portal-gnome
+ sys-apps/xdg-desktop-portal-gtk
+ kde-plasma/xdg-desktop-portal-kde
+ gui-libs/xdg-desktop-portal-lxqt
+ gui-libs/xdg-desktop-portal-wlr
+ )
+ )
+ )
+ )
+"
+
+COMMON_DEPEND="
+ ${COMMON_SNAPSHOT_DEPEND}
+ app-arch/bzip2:=
+ dev-libs/expat:=
+ system-ffmpeg? (
+ >=media-video/ffmpeg-6.1:=
+ || (
+ media-video/ffmpeg[-samba]
+ >=net-fs/samba-4.5.10-r1[-debug(-)]
+ )
+ >=media-libs/opus-1.3.1:=
+ )
+ net-misc/curl[ssl]
+ sys-apps/dbus:=
+ media-libs/flac:=
+ sys-libs/zlib:=[minizip]
+ !headless? (
+ >=app-accessibility/at-spi2-core-2.46.0:2
+ media-libs/mesa:=[X?,wayland?]
+ virtual/udev
+ x11-libs/cairo:=
+ x11-libs/gdk-pixbuf:2
+ x11-libs/pango:=
+ cups? ( >=net-print/cups-1.3.11:= )
+ qt6? ( dev-qt/qtbase:6[gui,widgets] )
+ X? ( ${COMMON_X_DEPEND} )
+ )
+"
+
+RDEPEND="${COMMON_DEPEND}
+ !headless? (
+ || (
+ x11-libs/gtk+:3[X?,wayland?]
+ gui-libs/gtk:4[X?,wayland?]
+ )
+ qt6? ( dev-qt/qtbase:6[X?,wayland?] )
+ )
+ virtual/ttf-fonts
+ selinux? ( sec-policy/selinux-chromium )
+ !override-data-dir? (
+ !www-client/chromium
+ !www-client/chromium-bin
+ !www-client/cromite[-override-data-dir]
+ )
+"
+
+DEPEND="${COMMON_DEPEND}
+ !headless? (
+ gtk4? ( gui-libs/gtk:4[X?,wayland?] )
+ !gtk4? ( x11-libs/gtk+:3[X?,wayland?] )
+ )
+"
+
+BDEPEND="
+ ${COMMON_SNAPSHOT_DEPEND}
+ ${PYTHON_DEPS}
+ $(python_gen_any_dep '
+ dev-python/setuptools[${PYTHON_USEDEP}]
+ ')
+ >=app-arch/gzip-1.7
+ !headless? (
+ qt6? ( dev-qt/qtbase:6 )
+ )
+ >=dev-build/gn-0.2289
+ app-alternatives/ninja
+ dev-lang/perl
+ >=dev-util/gperf-3.2
+ dev-vcs/git
+ >=net-libs/nodejs-24[inspector]
+ sys-apps/hwdata
+ >=sys-devel/bison-2.4.3
+ sys-devel/flex
+ virtual/pkgconfig
+ clang? (
+ pgo? ( >=llvm-core/clang-22.0.0_pre20260106 >=llvm-core/lld-22.0.0_pre20260106 )
+ !pgo? ( llvm-core/clang llvm-core/lld )
+ )
+ cfi? ( llvm-runtimes/clang-runtime[sanitize] )
+"
+
+if ! has chromium_pkg_die ${EBUILD_DEATH_HOOKS}; then
+ EBUILD_DEATH_HOOKS+=" chromium_pkg_die";
+fi
+
+DISABLE_AUTOFORMATTING="yes"
+DOC_CONTENTS="
+Some web pages may require additional fonts to display properly.
+Try installing some of the following packages if some characters
+are not displayed properly:
+- media-fonts/arphicfonts
+- media-fonts/droid
+- media-fonts/ipamonafont
+- media-fonts/noto
+- media-fonts/ja-ipafonts
+- media-fonts/takao-fonts
+- media-fonts/wqy-microhei
+- media-fonts/wqy-zenhei
+
+To fix broken icons on the Downloads page, you should install an icon
+theme that covers the appropriate MIME types, and configure this as your
+GTK+ icon theme.
+
+For native file dialogs in KDE, install kde-apps/kdialog.
+
+To make password storage work with your desktop environment you may
+have install one of the supported credentials management applications:
+- app-crypt/libsecret (GNOME)
+- kde-frameworks/kwallet (KDE)
+If you have one of above packages installed, but don't want to use
+them in Chromium, then add --password-store=basic to CHROMIUM_FLAGS
+in /etc/chromium/default.
+"
+
+S="${WORKDIR}/chromium-${PV/_*}"
+
+python_check_deps() {
+ python_has_version "dev-python/setuptools[${PYTHON_USEDEP}]"
+}
+
+pre_build_checks() {
+ # Check build requirements: bugs #471810, #541816, #914220
+ # We're going to start doing maths here on the size of an unpacked source tarball,
+ # this should make updates easier as chromium continues to balloon in size.
+ local BASE_DISK=18
+ local EXTRA_DISK=1
+ local CHECKREQS_MEMORY="4G"
+ tc-is-cross-compiler && EXTRA_DISK=2
+ if use thinlto || use pgo; then
+ CHECKREQS_MEMORY="9G"
+ tc-is-cross-compiler && EXTRA_DISK=4
+ use pgo && EXTRA_DISK=8
+ fi
+ if is-flagq '-g?(gdb)?([1-9])'; then
+ if use custom-cflags; then
+ EXTRA_DISK=13
+ fi
+ CHECKREQS_MEMORY="16G"
+ fi
+ CHECKREQS_DISK_BUILD="$((BASE_DISK + EXTRA_DISK))G"
+ check-reqs_${EBUILD_PHASE_FUNC}
+}
+
+pkg_pretend() {
+ if use libcxx; then
+ ewarn
+ ewarn "Building with libcxx, please be aware that system-*"
+ ewarn "and some other c++ dependencies need to be compiled"
+ ewarn "with the same c++ library as ungoogled-chromium itself"
+ ewarn "dev-libs/jsoncpp is most problematic, see #58 #49 #119 for details"
+ ewarn "Simplest solution would be to disable corresponding system-* flags"
+ ewarn
+ fi
+ if use cfi; then
+ ewarn
+ ewarn "Building with cfi is only possible if building with -stdlib=libc++"
+ ewarn "Make sure all dependencies are also built this way, see #40"
+ ewarn
+ fi
+ if use cromite; then
+ ewarn
+ ewarn "Cromite patches are very experimental and unstable"
+ ewarn "Please consider testing them and giving feedback upstream:"
+ ewarn "https://github.com/uazo/cromite/issues"
+ ewarn "Not all patches are applied, let me know if others should be considered too"
+ ewarn
+ fi
+ pre_build_checks
+
+ if use headless; then
+ local headless_unused_flags=("cups" "kerberos" "pulseaudio" "qt6" "vaapi" "wayland")
+ for myiuse in ${headless_unused_flags[@]}; do
+ use ${myiuse} && ewarn "Ignoring USE=${myiuse}, USE=headless is set."
+ done
+ fi
+}
+
+pkg_setup() {
+ pre_build_checks
+
+ chromium_suid_sandbox_check_kernel_config
+}
+
+src_unpack() {
+ # Here be dragons!
+ local XCLD="--exclude=chromium-${PV/_*}/third_party/instrumented_libs \
+ --exclude=chromium-${PV/_*}/third_party/llvm \
+ --exclude=chromium-${PV/_*}/third_party/llvm-build \
+ --exclude=chromium-${PV/_*}/third_party/node/linux \
+ --exclude=chromium-${PV/_*}/third_party/rust-src \
+ --exclude=chromium-${PV/_*}/third_party/rust-toolchain \
+ --exclude=chromium-${PV/_*}/build/linux/debian_bullseye_i386-sysroot \
+ --exclude=chromium-${PV/_*}/build/linux/debian_bullseye_amd64-sysroot \
+ --exclude=chromium-${PV/_*}/third_party/angle/third_party/VK-GL-CTS \
+ "
+
+ if ! use libcxx ; then
+ XCLD+=" --exclude=chromium-${PV/_*}/third_party/libc++"
+ fi
+
+ if ! use pgo ; then
+ XCLD+=" --exclude=chromium-${PV/_*}/chrome/build/pgo_profiles"
+ fi
+
+ einfo "Unpacking chromium-${PV/_*}.tar.xz to ${WORKDIR}"
+ # Gentoo tarball:
+ # tar ${XCLD} -xf "${DISTDIR}/chromium-${PV/_*}-gentoo.tar.xz" -C "${WORKDIR}" || die
+ tar ${XCLD} -xf "${DISTDIR}/chromium-${PV/_*}${LITE_TARBALL:+-lite}.tar.xz" -C "${WORKDIR}" || die
+
+ unpack ${UGC_URL#*->}
+ # unpack chromium-patches-${PATCH_V}.tar.bz2
+ # Warned you!
+
+ if use cromite; then
+ unpack cromite-${CROMITE_COMMIT_ID}.tar.gz
+ fi
+
+ if use ppc64; then
+ unpack chromium-openpower-${PPC64_HASH:0:10}.tar.bz2
+ fi
+}
+
+remove_compiler_builtins() {
+ # We can't use the bundled compiler builtins with the system toolchain
+ # We used to `grep` then `sed`, but it was indirect. Combining the two into a single
+ # `awk` command is more efficient and lets us document the logic more clearly.
+
+ local pattern=' configs += [ "//build/config/clang:compiler_builtins" ]'
+ local target='build/config/compiler/BUILD.gn'
+
+ # Create a secure temporary file to store the output.
+ local tmpfile
+ tmpfile=$(mktemp) || die "Failed to create temporary file."
+
+ if awk -v pat="${pattern}" '
+ BEGIN {
+ match_found = 0
+ }
+
+ # If the delete countdown is active, decrement it and skip to the next line.
+ d > 0 { d--; next }
+
+ # If the current line matches the pattern...
+ $0 == pat {
+ match_found = 1 # ...set our flag to true.
+ d = 2 # Set delete counter for this line and the next two.
+ prev = "" # Clear the buffered previous line so it is not printed.
+ next
+ }
+
+ # For any other line, print the buffered previous line.
+ NR > 1 { print prev }
+
+ # Buffer the current line to be printed on the next cycle.
+ { prev = $0 }
+
+ END {
+ # Print the last line if it was not part of a deleted block.
+ if (d == 0) { print prev }
+
+ # If the pattern was never found, exit with a failure code.
+ if (match_found == 0) {
+ exit 1
+ }
+ }
+ ' "${target}" > "${tmpfile}"; then
+ # AWK SUCCEEDED (exit code 0): The pattern was found and edited.
+ # This is to avoid gawk's `-i inplace` option which users complain about.
+ mv "${tmpfile}" "${target}"
+ else
+ # AWK FAILED (exit code 1): The pattern was not found.
+ rm -f "${tmpfile}"
+ die "Awk patch failed: Pattern not found in ${target}."
+ fi
+}
+
+src_prepare() {
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ # cp -f ${WORKDIR}/chromium-patches-${PATCH_V}/*-compiler.patch "${T}/compiler.patch"
+ cp -f ${FILESDIR}/chromium-147-compiler.patch "${T}/compiler.patch"
+ if ! use custom-cflags; then #See #25 #92
+ sed -i '/default_stack_frames/Q' "${T}/compiler.patch" || die
+ fi
+
+ local PATCHES=(
+ "${T}/compiler.patch"
+ "${FILESDIR}/chromium-cross-compile.patch"
+ "${FILESDIR}/chromium-109-system-openh264.patch"
+ "${FILESDIR}/chromium-109-system-zlib.patch"
+ "${FILESDIR}/chromium-145-oauth2-client-switches.patch"
+ "${FILESDIR}/chromium-138-nodejs-version-check.patch"
+ "${FILESDIR}/chromium-144-revert-libpng-testiness.patch"
+ "${FILESDIR}/chromium-125-cloud_authenticator.patch"
+ "${FILESDIR}/chromium-144-qrcode.patch"
+ "${FILESDIR}/perfetto-system-zlib.patch"
+ "${FILESDIR}/chromium-127-cargo_crate.patch"
+ "${FILESDIR}/chromium-128-cfi-split-lto-unit.patch"
+ "${FILESDIR}/restore-x86-r3.patch"
+ "${FILESDIR}/chromium-133-webrtc-fixes.patch"
+ "${FILESDIR}/chromium-141-fix-for-kde.patch"
+ "${FILESDIR}/chromium-134-stdatomic.patch"
+ "${FILESDIR}/font-gc-asan.patch"
+ "${FILESDIR}/chromium-145-crabby.patch"
+ "${FILESDIR}/chromium-145-fontations.patch"
+ "${FILESDIR}/chromium-146-glibc-2.43.patch"
+ "${FILESDIR}/chromium-147-gcc.patch"
+ "${FILESDIR}/chromium-147-no-rust.patch"
+ )
+
+ # https://issues.chromium.org/issues/442698344
+ # Unreleased fontconfig changed magic numbers and google have rolled to this version
+ if has_version "<=media-libs/fontconfig-2.17.1"; then
+ PATCHES+=( "${FILESDIR}/chromium-142-work-with-old-fontconfig.patch" )
+ fi
+
+ #shopt -s globstar nullglob
+ ## 130: moved the PPC64 patches into the chromium-patches repo
+ #local patch
+ #for patch in "${WORKDIR}/chromium-patches-${PATCH_V}"/**/*.patch; do
+ # if [[ ${patch} == *"ppc64le"* ]]; then
+ # use ppc64 && PATCHES+=( "${patch}" )
+ # else
+ # PATCHES+=( "${patch}" )
+ # fi
+ #done
+ #shopt -u globstar nullglob
+
+ remove_compiler_builtins
+
+ # Strictly speaking this doesn't need to be gated (no bundled toolchain for ppc64); it keeps the logic together
+ if use ppc64; then
+ local patchset_dir="${WORKDIR}/openpower-patches-${PPC64_HASH}/patches"
+ # patch causes build errors on 4K page systems (https://bugs.gentoo.org/show_bug.cgi?id=940304)
+ local page_size_patch="ppc64le/third_party/use-sysconf-page-size-on-ppc64.patch"
+ local isa_3_patch="ppc64le/core/baseline-isa-3-0.patch"
+ # Apply the OpenPOWER patches (check for page size and isa 3.0)
+ openpower_patches=( $(grep -E "^ppc64le|^upstream" "${patchset_dir}/series" | grep -v "${page_size_patch}" |
+ grep -v "${isa_3_patch}" || die) )
+ for patch in "${openpower_patches[@]}"; do
+ PATCHES+=( "${patchset_dir}/${patch}" )
+ done
+ if [[ $(getconf PAGESIZE) == 65536 ]]; then
+ PATCHES+=( "${patchset_dir}/${page_size_patch}" )
+ fi
+ # We use vsx3 as a proxy for 'want isa3.0' (POWER9)
+ if use cpu_flags_ppc_vsx3 ; then
+ PATCHES+=( "${patchset_dir}/${isa_3_patch}" )
+ fi
+ fi
+
+ ewarn
+ ewarn "Fontations Rust font stack is disabled"
+ ewarn "Using media-libs/libavif instead of CrabbyAvif"
+ ewarn
+
+ if [ ! -z "${CHROMIUM_COMMITS[*]}" ]; then
+ # for i in "${CHROMIUM_COMMITS[@]}"; do
+ for i in "${!CHROMIUM_COMMITS[@]}"; do
+ if [[ ${CHROMIUM_COMMITS[$i]} =~ webrtc ]]; then
+ patch_prefix="webrtc"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ angle ]]; then
+ patch_prefix="angle"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ quiche ]]; then
+ patch_prefix="quiche"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ dawn ]]; then
+ patch_prefix="dawn"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ perfetto ]]; then
+ patch_prefix="perfetto"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ink ]]; then
+ patch_prefix="ink"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ vulkan-utility-libraries ]]; then
+ patch_prefix="vulkan-utility-libraries"
+ elif [[ ${CHROMIUM_COMMITS[$i]} =~ ruy ]]; then
+ patch_prefix="ruy"
+ else
+ patch_prefix="chromium"
+ fi
+ pushd "${CHROMIUM_COMMITS[$i]}" > /dev/null || die
+ if [[ $i = -* ]]; then
+ einfo "Reverting ${patch_prefix}-${i/-}.patch"
+ git_wrapper apply -R --exclude="*unittest.cc" --exclude="DEPS" \
+ -p1 < "${DISTDIR}/${patch_prefix}-${i/-}.patch"
+ else
+ einfo "Applying ${patch_prefix}-${i/-}.patch"
+ git_wrapper apply --exclude="*unittest.cc" --exclude="DEPS" \
+ -p1 < "${DISTDIR}/${patch_prefix}-${i/-}.patch"
+ fi
+ popd > /dev/null || die
+ done
+ fi
+
+ if ! use bluetooth ; then
+ PATCHES+=(
+ "${FILESDIR}/disable-bluez-r7.patch"
+ )
+ fi
+
+ if use convert-dict ; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-ucf-dict-utility-r3.patch"
+ )
+ fi
+
+ if ! use libcxx ; then
+ PATCHES+=(
+ "${FILESDIR}/fix-wayland-oncecallback-copy.patch"
+ )
+ fi
+
+ if use system-ffmpeg; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-141-opus-mp3.patch"
+ "${FILESDIR}/chromium-135-hevc.patch"
+ )
+ sed -i "\!AVFMT_FLAG_NOH264PARSE!d" media/filters/ffmpeg_glue.cc || die
+ ewarn "You need to expose \"av_stream_get_first_dts\" in ffmpeg via user patch"
+ fi
+
+ if use system-av1; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-av1.patch"
+ )
+ fi
+
+ if use system-libvpx; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-libvpx.patch"
+ )
+ fi
+
+ if use system-openjpeg ; then
+ PATCHES+=(
+ "${FILESDIR}/chromium-system-openjpeg-r4.patch"
+ )
+ fi
+
+ # Testing all patches when NODIE is defined
+ if [ ! -z "${NODIE}" ]; then
+ for i in "${PATCHES[@]}"; do
+ eapply_wrapper "$i"
+ done
+ nonfatal eapply_user
+ else
+ default
+ fi
+
+ if use cromite ; then
+ BR_PA_PATH="${WORKDIR}/cromite-${CROMITE_COMMIT_ID}/build/patches"
+
+ sed -i '/b\/components\/components_strings\.grd/,+10d' "${BR_PA_PATH}/Add-cromite-flags-support.patch" || die
+ sed -i '/b\/chrome\/android\/java\/res\/xml\/privacy_preferences\.xml/,+13d' "${BR_PA_PATH}/Add-cromite-flags-support.patch" || die
+ sed -i '/b\/android_webview\/support_library\/java\/src\/org\/chromium\/support_lib_glue/,+11d' "${BR_PA_PATH}/Client-hints-overrides.patch" || die
+ sed -i '/webapps_strings.grdp" \/>/{s++webapps_strings.grdp" /><part file="cromite_components_strings_grd/placeholder.txt"/>+;h};${x;/./{x;q0};x;q1}' \
+ components/components_strings.grd || die
+
+ sed -i 's/absl::/std::/' "${BR_PA_PATH}/Add-a-proxy-configuration-page.patch" || die
+
+ BROMITE_PATCHES=(
+ "${BR_PA_PATH}/bromite-build-utils.patch"
+ "${BR_PA_PATH}/Battery-API-return-nothing.patch"
+ "${BR_PA_PATH}/Multiple-fingerprinting-mitigations.patch"
+ "${BR_PA_PATH}/Add-flag-to-configure-maximum-connections-per-host.patch"
+ "${BR_PA_PATH}/Add-a-proxy-configuration-page.patch"
+ "${BR_PA_PATH}/Enable-StrictOriginIsolation-and-SitePerProcess.patch"
+ "${BR_PA_PATH}/Disable-requests-for-single-word-Omnibar-searches.patch"
+ "${BR_PA_PATH}/Reduce-HTTP-headers-in-DoH-requests-to-bare-minimum.patch"
+ "${BR_PA_PATH}/Client-hints-overrides.patch"
+ "${BR_PA_PATH}/Disable-idle-detection.patch"
+ "${BR_PA_PATH}/Disable-TLS-resumption.patch"
+ "${BR_PA_PATH}/Remove-navigator.connection-info.patch"
+
+ "${BR_PA_PATH}/AudioBuffer-AnalyserNode-fp-mitigations.patch"
+ "${BR_PA_PATH}/Fonts-fingerprinting-mitigation.patch"
+ "${BR_PA_PATH}/Content-settings-infrastructure.patch"
+ "${BR_PA_PATH}/Add-autoplay-site-setting.patch"
+ "${BR_PA_PATH}/Site-setting-for-images.patch"
+ "${BR_PA_PATH}/JIT-site-settings.patch"
+ "${BR_PA_PATH}/Add-webGL-site-setting.patch"
+ "${BR_PA_PATH}/Add-webRTC-site-settings.patch"
+ "${BR_PA_PATH}/Show-site-settings-for-cookies-javascript-and-ads.patch"
+ "${BR_PA_PATH}/Viewport-Protection-flag.patch"
+ "${BR_PA_PATH}/Revert-remove-allowscript-content-setting-secondary-url.patch"
+ "${BR_PA_PATH}/Timezone-customization.patch"
+ "${BR_PA_PATH}/Disable-speechSynthesis-getVoices-API.patch"
+ "${BR_PA_PATH}/Remove-support-for-device-memory-and-cpu-recovery.patch"
+ "${BR_PA_PATH}/Disable-Feeback-Collector.patch"
+ "${BR_PA_PATH}/Disable-remote-altsvc-for-h3-connections.patch"
+ "${BR_PA_PATH}/Add-cromite-flags-support.patch"
+ "${BR_PA_PATH}/Enables-deactivation-of-the-js-debugger-statement.patch"
+ )
+ for i in "${BROMITE_PATCHES[@]}"; do
+ if [[ "$i" =~ "Add-autoplay-site-setting.patch" ]] ||
+ [[ "$i" =~ "JIT-site-settings.patch" ]] ||
+ [[ "$i" =~ "Site-setting-for-images.patch" ]]; then
+ einfo "Git binary patch: ${i##*/}"
+ git_wrapper apply -p1 < "$i"
+ else
+ filter_wrapper "$i" --exclude="chrome/android/*"
+ fi
+ done
+
+ #! conflicting patches
+ sed -i '/browser_features.cc/,+17d' \
+ "${UGC_WD}/patches/extra/ungoogled-chromium/add-flag-to-clear-data-on-exit.patch" || die
+ sed -i 's$} // namespace features$BASE_FEATURE(kClearDataOnExit, "ClearDataOnExit", base::FEATURE_DISABLED_BY_DEFAULT);}$' \
+ chrome/browser/browser_features.cc || die
+ sed -i 's$} // namespace features$BASE_DECLARE_FEATURE(kClearDataOnExit);}$' \
+ chrome/browser/browser_features.h || die
+ sed -i 's$kChromeUIAboutHost,$kChromeUIAboutHost,"ungoogled-first-run",$' \
+ chrome/common/webui_url_constants.cc || die
+ sed -i '/chrome\/common\/webui_url_constants.cc/Q' \
+ "${UGC_WD}/patches/extra/ungoogled-chromium/first-run-page.patch" || die
+
+ #! normalise paths in py
+ sed -i 's$os.path.dirname(include_file)$os.path.abspath(os.path.dirname(include_file))$' \
+ build/bromite/gyp/cpp_bromite_include.py || die
+ fi
+
+ # if [[ ${LLVM_SLOT} == "19" ]]; then
+ # # Upstream now hard depend on a feature that was added in LLVM 20.1, but we don't want to stabilise that yet.
+ # # Do the temp file shuffle in case someone is using something other than `gawk`
+ # {
+ # awk '/config\("clang_warning_suppression"\) \{/ { print $0 " }"; sub(/clang/, "xclang"); print; next }
+ # { print }' build/config/compiler/BUILD.gn > "${T}/build.gn" && \
+ # mv "${T}/build.gn" build/config/compiler/BUILD.gn
+ # } || die "Unable to disable warning suppression"
+ # fi
+
+ # Not included in -lite tarballs, but we should check for it anyway.
+ if [[ -f third_party/node/linux/node-linux-x64/bin/node ]]; then
+ rm third_party/node/linux/node-linux-x64/bin/node || die
+ else
+ mkdir -p third_party/node/linux/node-linux-x64/bin || die
+ fi
+ ln -s "${EPREFIX}"/usr/bin/node third_party/node/linux/node-linux-x64/bin/node || die
+
+ # adjust python interpreter version
+ sed -i -e "s|\(^script_executable = \).*|\1\"${EPYTHON}\"|g" .gn || die
+
+ cp "${FILESDIR}/libusb.gn" build/linux/unbundle || die
+ sed -i '/^REPLACEMENTS.*$/{s++REPLACEMENTS = {"libusb":"third_party/libusb/BUILD.gn",+;h};${x;/./{x;q0};x;q1}' \
+ build/linux/unbundle/replace_gn_files.py || die
+ sed -i '/^.*deps.*third_party\/jsoncpp.*$/{s++public_deps \+= [ "//third_party/jsoncpp" ]+;h};${x;/./{x;q0};x;q1}' \
+ third_party/webrtc/rtc_base/BUILD.gn || die
+
+ cp -f "${FILESDIR}/rust_static_library.gni" build/rust || die
+ cp -f "${FILESDIR}/json_parser_r2.cc" base/json/json_parser.cc || die
+ cp -f "${FILESDIR}/json_parser.h" base/json || die
+ cp -f "${FILESDIR}/avif_image_decoder.cc" third_party/blink/renderer/platform/image-decoders/avif || die
+ cp -f "${FILESDIR}/avif_image_decoder.h" third_party/blink/renderer/platform/image-decoders/avif || die
+ cp -f "${FILESDIR}/png_image_decoder.cc" third_party/blink/renderer/platform/image-decoders/png || die
+ cp -f "${FILESDIR}/png_image_decoder.h" third_party/blink/renderer/platform/image-decoders/png || die
+ cp -f "${FILESDIR}/font_format_check.cc" third_party/blink/renderer/platform/fonts/opentype || die
+ cp -f "${FILESDIR}/font_format_check.h" third_party/blink/renderer/platform/fonts/opentype || die
+
+ if use override-data-dir; then
+ sed -i '/"chromium";/{s++"ungoogled-chromium";+;h};${x;/./{x;q0};x;q1}' \
+ chrome/common/chrome_paths_linux.cc || die
+ fi
+
+ if use system-abseil-cpp; then
+ eapply_wrapper "${FILESDIR}/chromium-147-system-abseil.patch"
+
+ #! SFINAE mangling incompatibility between clang and gcc:
+ #! https://github.com/llvm/llvm-project/issues/85656
+ #! gcc: _ZN4absl12lts_202601074CordC1INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEELi0EEEOT_
+ #! clang: _ZN4absl12lts_202601074CordC1INSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEETnNSt9enable_ifIXsr3std7is_sameIT_S8_EE5valueEiE4typeELi0EEEOSA_
+ #! So, either this:
+ eapply_wrapper "${FILESDIR}/chromium-141-system-abseil-cord.patch"
+ #! or build with -fclang-abi-compat=17
+
+ # cp -f /usr/include/absl/base/options.h third_party/abseil-cpp/absl/base/options.h
+ # sed -i '/^#define ABSL_OPTION_USE_STD_ORDERING.*$/{s++#define ABSL_OPTION_USE_STD_ORDERING 1+;h};${x;/./{x;q0};x;q1}' \
+ # third_party/abseil-cpp/absl/base/options.h || die
+ fi
+
+ #* Applying UGC PRs here
+ if [ ! -z "${UGC_PR_COMMITS[*]}" ]; then
+ pushd "${UGC_WD}" >/dev/null
+ for i in "${UGC_PR_COMMITS[@]}"; do
+ eapply_wrapper "${DISTDIR}/${PN}-$i.patch"
+ done
+ popd >/dev/null
+ fi
+
+ # From here we adapt ungoogled-chromium's patches to our needs
+ local ugc_pruning_list="${UGC_WD}/pruning.list"
+ local ugc_patch_series="${UGC_WD}/patches/series"
+ local ugc_substitution_list="${UGC_WD}/domain_substitution.list"
+
+ local ugc_unneeded=(
+ # GN bootstrap
+ extra/debian/gn/parallel
+ )
+
+ if use cromite ; then
+ einfo "Using fingerprinting patches from Cromite instead"
+ ugc_unneeded+=(
+ extra/bromite/fingerprinting-flags-client-rects-and-measuretext
+ extra/bromite/flag-max-connections-per-host
+ extra/bromite/flag-fingerprinting-canvas-image-data-noise
+ extra/ungoogled-chromium/add-components-ungoogled
+ extra/ungoogled-chromium/remove-pac-size-limit
+ )
+ fi
+
+ #* Temporary fix
+ sed -i "\!ios/!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/icu/!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/libjpeg_turbo/!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/snappy/!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/closure_compiler/!d" "${ugc_pruning_list}" || die
+
+ #* Didn't unpack them at the first place
+ sed -i "\!build/linux/debian_bullseye_i386-sysroot!d" "${ugc_pruning_list}" || die
+ sed -i "\!build/linux/debian_bullseye_amd64-sysroot!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/llvm-build!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/node/linux!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/rust-src!d" "${ugc_pruning_list}" || die
+ sed -i "\!third_party/rust-toolchain!d" "${ugc_pruning_list}" || die
+ if ! use libcxx ; then
+ sed -i "\!third_party/libc!d" "${ugc_pruning_list}" || die
+ fi
+ sed -i "s|debug('files|error('files|" \
+ "${UGC_WD}/utils/prune_binaries.py" || die
+ sed -i "\!third_party/node/linux!d" \
+ "${UGC_WD}/utils/prune_binaries.py" || die
+
+ local ugc_p ugc_dir
+ for p in "${ugc_unneeded[@]}"; do
+ einfo "Removing ${p}.patch"
+ sed -i "\!${p}.patch!d" "${ugc_patch_series}" || die
+ done
+
+ if [ ! -z "${UGC_SKIP_PATCHES}" ]; then
+ for p in ${UGC_SKIP_PATCHES}; do
+ ewarn "Removing ${p}"
+ sed -i "\!${p}!d" "${ugc_patch_series}" || die
+ done
+ fi
+
+ if [ ! -z "${UGC_KEEP_BINARIES}" ]; then
+ for p in ${UGC_KEEP_BINARIES}; do
+ ewarn "Keeping binary ${p}"
+ sed -i "\!${p}!d" "${ugc_pruning_list}" || die
+ done
+ fi
+
+ if [ ! -z "${UGC_SKIP_SUBSTITUTION}" ]; then
+ for p in ${UGC_SKIP_SUBSTITUTION}; do
+ ewarn "No substitutions in ${p}"
+ sed -i "\!${p}!d" "${ugc_substitution_list}" || die
+ done
+ fi
+
+ ebegin "Pruning binaries"
+ "${UGC_WD}/utils/prune_binaries.py" -q . "${UGC_WD}/pruning.list"
+ eend $? || die
+
+ ebegin "Applying ungoogled-chromium patches"
+ "${UGC_WD}/utils/patches.py" -q apply . "${UGC_WD}/patches"
+ eend $? || die
+
+ ebegin "Applying domain substitution"
+ "${UGC_WD}/utils/domain_substitution.py" -q apply -r "${UGC_WD}/domain_regex.list" -f "${UGC_WD}/domain_substitution.list" .
+ eend $? || die
+
+ # Use the system copy of hwdata's usb.ids; upstream is woefully out of date (2015!)
+ sed 's|//third_party/usb_ids/usb.ids|/usr/share/hwdata/usb.ids|g' \
+ -i services/device/public/cpp/usb/BUILD.gn || die "Failed to set system usb.ids path"
+
+ # remove_bundled_libraries.py walks the source tree and looks for paths containing the substring 'third_party'
+ # whitelist matches use the right-most matching path component, so we need to whitelist from that point down.
+ local keeplibs=(
+ base/third_party/cityhash
+ )
+ use system-double-conversion || keeplibs+=(
+ base/third_party/double_conversion
+ )
+ keeplibs+=(
+ base/third_party/icu
+ base/third_party/nspr
+ base/third_party/superfasthash
+ base/third_party/symbolize
+ base/third_party/xdg_user_dirs
+ buildtools/third_party/libc++
+ buildtools/third_party/libc++abi
+ )
+ use cromite && keeplibs+=(
+ cromite_flags/third_party
+ )
+ keeplibs+=(
+ net/third_party/mozilla_security_manager
+ net/third_party/quic
+ net/third_party/uri_template
+ )
+ use system-abseil-cpp || keeplibs+=(
+ third_party/abseil-cpp
+ )
+ keeplibs+=(
+ third_party/angle
+ third_party/angle/src/common/third_party/xxhash
+ third_party/angle/src/third_party/ceval
+ )
+ use nvidia || keeplibs+=(
+ third_party/angle/src/third_party/libXNVCtrl
+ )
+ keeplibs+=(
+ third_party/angle/src/third_party/volk
+ third_party/anonymous_tokens
+ third_party/apple_apsl
+ third_party/axe-core
+ third_party/bidimapper
+ third_party/blink
+ third_party/boringssl
+ third_party/boringssl/src/third_party/fiat
+ third_party/breakpad
+ third_party/breakpad/breakpad/src/third_party/curl
+ )
+ use system-brotli || keeplibs+=(
+ third_party/brotli
+ )
+ keeplibs+=(
+ third_party/catapult
+ third_party/catapult/common/py_vulcanize/third_party/rcssmin
+ third_party/catapult/common/py_vulcanize/third_party/rjsmin
+ third_party/catapult/third_party/beautifulsoup4-4.9.3
+ third_party/catapult/third_party/html5lib-1.1
+ third_party/catapult/third_party/polymer
+ third_party/catapult/third_party/six
+ third_party/catapult/third_party/typ
+ third_party/catapult/tracing/third_party/d3
+ third_party/catapult/tracing/third_party/gl-matrix
+ third_party/catapult/tracing/third_party/jpeg-js
+ third_party/catapult/tracing/third_party/jszip
+ third_party/catapult/tracing/third_party/mannwhitneyu
+ third_party/catapult/tracing/third_party/oboe
+ third_party/catapult/tracing/third_party/pako
+ third_party/ced
+ third_party/cld_3
+ third_party/closure_compiler
+ )
+ use libcxx && keeplibs+=(
+ third_party/compiler-rt
+ )
+ keeplibs+=(
+ third_party/content_analysis_sdk
+ third_party/cpuinfo
+ third_party/crabbyavif
+ third_party/crashpad
+ third_party/crashpad/crashpad/third_party/lss
+ third_party/crashpad/crashpad/third_party/zlib
+ )
+ use system-crc32c || keeplibs+=(
+ third_party/crc32c
+ )
+ keeplibs+=(
+ third_party/cros_system_api
+ third_party/d3
+ third_party/dawn
+ third_party/dawn/third_party/gn/webgpu-cts
+ third_party/dawn/third_party/khronos
+ third_party/dawn/third_party/renderdoc
+ third_party/dawn/third_party/webgpu-headers
+ third_party/depot_tools
+ third_party/devscripts
+ third_party/devtools-frontend
+ third_party/devtools-frontend/src/front_end/third_party/acorn
+ third_party/devtools-frontend/src/front_end/third_party/additional_readme_paths.json
+ third_party/devtools-frontend/src/front_end/third_party/axe-core
+ third_party/devtools-frontend/src/front_end/third_party/chromium
+ third_party/devtools-frontend/src/front_end/third_party/codemirror
+ third_party/devtools-frontend/src/front_end/third_party/csp_evaluator
+ third_party/devtools-frontend/src/front_end/third_party/diff
+ third_party/devtools-frontend/src/front_end/third_party/i18n
+ third_party/devtools-frontend/src/front_end/third_party/intl-messageformat
+ third_party/devtools-frontend/src/front_end/third_party/json5
+ third_party/devtools-frontend/src/front_end/third_party/legacy-javascript
+ third_party/devtools-frontend/src/front_end/third_party/lighthouse
+ third_party/devtools-frontend/src/front_end/third_party/lit
+ third_party/devtools-frontend/src/front_end/third_party/marked
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/mitt
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/parsel-js
+ third_party/devtools-frontend/src/front_end/third_party/puppeteer/package/lib/esm/third_party/rxjs
+ third_party/devtools-frontend/src/front_end/third_party/source-map-scopes-codec
+ third_party/devtools-frontend/src/front_end/third_party/third-party-web
+ third_party/devtools-frontend/src/front_end/third_party/vscode.web-custom-data
+ third_party/devtools-frontend/src/front_end/third_party/wasmparser
+ third_party/devtools-frontend/src/front_end/third_party/web-vitals
+ third_party/devtools-frontend/src/third_party
+ third_party/dom_distiller_js
+ third_party/dragonbox
+ third_party/eigen3
+ third_party/emoji-segmenter
+ third_party/farmhash
+ third_party/fast_float
+ third_party/fdlibm
+ third_party/federated_compute/chromium/fcp/confidentialcompute
+ third_party/federated_compute/src/fcp/base
+ third_party/federated_compute/src/fcp/confidentialcompute
+ third_party/federated_compute/src/fcp/protos/confidentialcompute
+ third_party/federated_compute/src/fcp/protos/federatedcompute
+ third_party/fft2d
+ third_party/flatbuffers
+ third_party/fp16
+ third_party/freetype
+ third_party/fusejs
+ third_party/fxdiv
+ third_party/gemmlowp
+ third_party/google_input_tools
+ third_party/google_input_tools/third_party/closure_library
+ third_party/google_input_tools/third_party/closure_library/third_party/closure
+ third_party/googletest
+ third_party/highway
+ third_party/hunspell
+ third_party/hyphenation-patterns
+ third_party/ink_stroke_modeler/src/ink_stroke_modeler
+ third_party/ink_stroke_modeler/src/ink_stroke_modeler/internal
+ third_party/ink/src/ink/brush
+ third_party/ink/src/ink/color
+ third_party/ink/src/ink/geometry
+ third_party/ink/src/ink/rendering
+ third_party/ink/src/ink/rendering/skia/common_internal
+ third_party/ink/src/ink/rendering/skia/native
+ third_party/ink/src/ink/rendering/skia/native/internal
+ third_party/ink/src/ink/strokes
+ third_party/ink/src/ink/types
+ third_party/inspector_protocol
+ third_party/ipcz
+ third_party/jinja2
+ )
+ use system-jsoncpp || keeplibs+=(
+ third_party/jsoncpp
+ )
+ keeplibs+=(
+ third_party/khronos
+ third_party/lens_server_proto
+ third_party/leveldatabase
+ third_party/libaddressinput
+ third_party/libdrm
+ third_party/libgav1
+ third_party/libjingle
+ third_party/libpfm4
+ third_party/libphonenumber
+ third_party/libsecret
+ third_party/libsrtp
+ third_party/libsync
+ third_party/libtess2/libtess2
+ third_party/libtess2/src/Include
+ third_party/libtess2/src/Source
+ third_party/liburlpattern
+ )
+ use system-libusb || keeplibs+=(
+ third_party/libusb
+ )
+ keeplibs+=(
+ third_party/libva_protected_content
+ )
+ use system-libvpx || keeplibs+=(
+ third_party/libvpx
+ third_party/libvpx/source/libvpx/third_party/x86inc
+ )
+ keeplibs+=(
+ third_party/libwebm
+ third_party/libx11
+ third_party/libxcb-keysyms
+ third_party/libxml/chromium
+ third_party/libyuv
+ third_party/libzip
+ third_party/lit
+ third_party/lottie
+ third_party/lss
+ third_party/lzma_sdk
+ third_party/mako
+ third_party/markupsafe
+ third_party/material_color_utilities
+ third_party/metrics_proto
+ third_party/minigbm
+ third_party/ml_dtypes
+ third_party/modp_b64
+ third_party/nasm
+ third_party/nearby
+ third_party/neon_2_sse
+ third_party/node
+ third_party/oak/chromium/proto
+ third_party/oak/chromium/proto/attestation
+ third_party/omnibox_proto
+ third_party/one_euro_filter
+ third_party/openscreen
+ third_party/openscreen/src/third_party/
+ third_party/openscreen/src/third_party/tinycbor/src/src
+ third_party/ots
+ third_party/pdfium
+ third_party/pdfium/third_party/agg23
+ third_party/pdfium/third_party/bigint
+ third_party/pdfium/third_party/freetype
+ third_party/pdfium/third_party/lcms
+ )
+ use system-openjpeg || keeplibs+=(
+ third_party/pdfium/third_party/libopenjpeg
+ )
+ keeplibs+=(
+ third_party/pdfium/third_party/libtiff
+ third_party/perfetto
+ third_party/perfetto/protos/third_party/chromium
+ third_party/perfetto/protos/third_party/pprof
+ third_party/perfetto/protos/third_party/primes
+ third_party/perfetto/protos/third_party/simpleperf
+ third_party/pffft
+ third_party/ply
+ third_party/polymer
+ third_party/private_membership
+ third_party/private-join-and-compute
+ third_party/protobuf
+ third_party/protobuf/third_party/utf8_range
+ third_party/pthreadpool
+ third_party/puffin
+ third_party/pyjson5
+ third_party/pyyaml
+ third_party/rapidhash
+ third_party/readability
+ third_party/rnnoise
+ third_party/ruy
+ third_party/s2cellid
+ third_party/search_engines_data
+ third_party/securemessage
+ third_party/selenium-atoms
+ third_party/sentencepiece
+ third_party/sentencepiece/src/third_party/darts_clone
+ third_party/shell-encryption
+ third_party/simdutf
+ third_party/simplejson
+ third_party/six
+ third_party/skia
+ third_party/skia/include/third_party/vulkan
+ third_party/smhasher
+ )
+ use system-snappy || keeplibs+=(
+ third_party/snappy
+ )
+ keeplibs+=(
+ third_party/spirv-headers
+ third_party/spirv-tools
+ third_party/sqlite
+ third_party/swiftshader
+ third_party/swiftshader/third_party/astc-encoder
+ third_party/swiftshader/third_party/llvm-subzero
+ third_party/swiftshader/third_party/marl
+ third_party/swiftshader/third_party/SPIRV-Headers/include/spirv
+ third_party/swiftshader/third_party/SPIRV-Tools
+ third_party/swiftshader/third_party/subzero
+ third_party/tensorflow_models
+ third_party/tensorflow-text
+ third_party/tflite
+ third_party/tflite/src/third_party/fft2d
+ third_party/tflite/src/third_party/xla/third_party/tsl
+ third_party/tflite/src/third_party/xla/xla/tsl/framework
+ third_party/tflite/src/third_party/xla/xla/tsl/lib/random
+ third_party/tflite/src/third_party/xla/xla/tsl/platform
+ third_party/tflite/src/third_party/xla/xla/tsl/protobuf
+ third_party/tflite/src/third_party/xla/xla/tsl/util
+ third_party/ukey2
+ third_party/utf
+ third_party/vulkan
+ third_party/wayland
+ third_party/webdriver
+ third_party/webgpu-cts
+ third_party/webrtc
+ third_party/webrtc/common_audio/third_party/ooura
+ third_party/webrtc/common_audio/third_party/spl_sqrt_floor
+ third_party/webrtc/modules/third_party/fft
+ third_party/webrtc/modules/third_party/g711
+ third_party/webrtc/modules/third_party/g722
+ third_party/widevine
+ )
+ use system-woff2 || keeplibs+=(
+ third_party/woff2
+ )
+ keeplibs+=(
+ third_party/wuffs
+ third_party/x11proto
+ third_party/xcbproto
+ third_party/xnnpack
+ third_party/zlib/google
+ third_party/zxcvbn-cpp
+ url/third_party/mozilla
+ v8/third_party/glibc
+ v8/third_party/inspector_protocol
+ v8/third_party/rapidhash-v8
+ v8/third_party/siphash
+ v8/third_party/utf8-decoder
+ v8/third_party/v8
+ v8/third_party/valgrind
+
+ # gyp -> gn leftovers
+ third_party/speech-dispatcher
+ third_party/usb_ids
+ third_party/xdg-utils
+ )
+ if ! use system-harfbuzz; then
+ keeplibs+=( third_party/harfbuzz-ng )
+ fi
+
+ if ! use system-ffmpeg; then
+ keeplibs+=( third_party/ffmpeg third_party/opus )
+ fi
+
+ if ! use system-icu; then
+ keeplibs+=( third_party/icu )
+ fi
+
+ if ! use system-zstd; then
+ keeplibs+=( third_party/zstd )
+ fi
+
+ if ! use system-av1; then
+ keeplibs+=(
+ third_party/dav1d
+ third_party/libaom
+ third_party/libaom/source/libaom/third_party/fastfeat
+ third_party/libaom/source/libaom/third_party/SVT-AV1
+ third_party/libaom/source/libaom/third_party/vector
+ third_party/libaom/source/libaom/third_party/x86inc
+ )
+ fi
+
+ if use libcxx; then
+ keeplibs+=(
+ third_party/libc++
+ third_party/llvm-libc
+ )
+ fi
+
+ if ! use system-openh264; then
+ keeplibs+=( third_party/openh264 )
+ fi
+
+ if ! use system-re2; then
+ keeplibs+=( third_party/re2 )
+ fi
+
+ # Arch-specific
+ if use arm64 || use ppc64 ; then
+ keeplibs+=( third_party/swiftshader/third_party/llvm-10.0 )
+ fi
+ # we need to generate ppc64 stuff because upstream does not ship it yet
+ # it has to be done before unbundling.
+ if use ppc64; then
+ pushd third_party/libvpx >/dev/null || die
+ mkdir -p source/config/linux/ppc64 || die
+ # requires git and clang, bug #832803
+ # Revert https://chromium.googlesource.com/chromium/src/+/b463d0f40b08b4e896e7f458d89ae58ce2a27165%5E%21/third_party/libvpx/generate_gni.sh
+ # and https://chromium.googlesource.com/chromium/src/+/71ebcbce867dd31da5f8b405a28fcb0de0657d91%5E%21/third_party/libvpx/generate_gni.sh
+ # since we're not in a git repo
+ sed -i -e "s|^update_readme||g; s|clang-format|${EPREFIX}/bin/true|g; /^git -C/d; /git cl/d; /cd \$BASE_DIR\/\$LIBVPX_SRC_DIR/ign format --in-place \$BASE_DIR\/BUILD.gn\ngn format --in-place \$BASE_DIR\/libvpx_srcs.gni" \
+ generate_gni.sh || die
+ ./generate_gni.sh || die
+ popd >/dev/null || die
+
+ pushd third_party/ffmpeg >/dev/null || die
+ cp libavcodec/ppc/h264dsp.c libavcodec/ppc/h264dsp_ppc.c || die
+ cp libavcodec/ppc/h264qpel.c libavcodec/ppc/h264qpel_ppc.c || die
+ popd >/dev/null || die
+ fi
+
+ # Sanity check keeplibs, on major version bumps it is often necessary to update this list
+ # and this enables us to hit them all at once.
+ # There are some entries that need to be whitelisted (TODO: Why? The file is understandable, the rest seem odd)
+ whitelist_libs=(
+ net/third_party/quic
+ third_party/devtools-frontend/src/front_end/third_party/additional_readme_paths.json
+ third_party/libjingle
+ third_party/mesa
+ third_party/skia/third_party/vulkan
+ third_party/vulkan
+ )
+ local not_found_libs=()
+ for lib in "${keeplibs[@]}"; do
+ if [[ ! -d "${lib}" ]] && ! has "${lib}" "${whitelist_libs[@]}"; then
+ not_found_libs+=( "${lib}" )
+ fi
+ done
+
+ if [[ ${#not_found_libs[@]} -gt 0 ]]; then
+ ewarn "The following \`keeplibs\` directories were not found in the source tree:"
+ for lib in "${not_found_libs[@]}"; do
+ ewarn " ${lib}"
+ done
+ fi
+
+ keeplibs+=( third_party/ungoogled )
+
+ # Remove most bundled libraries. Some are still needed.
+ einfo "Unbundling third-party libraries ..."
+ build/linux/unbundle/remove_bundled_libraries.py "${keeplibs[@]}" --do-remove || die
+
+ # bundled eu-strip is for amd64 only and we don't want to pre-stripped binaries
+ mkdir -p buildtools/third_party/eu-strip/bin || die
+ ln -s "${EPREFIX}"/bin/true buildtools/third_party/eu-strip/bin/eu-strip || die
+}
+
+src_configure() {
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ local myconf_gn=""
+
+ # Make sure the build system will use the right tools, bug #340795.
+ tc-export AR CC CXX NM
+
+ if use clang && ! tc-is-clang ; then
+ einfo "Enforcing the use of clang due to USE=clang ..."
+ if tc-is-cross-compiler; then
+ CC="${CBUILD}-clang -target ${CHOST} --sysroot ${ESYSROOT}"
+ CXX="${CBUILD}-clang++ -target ${CHOST} --sysroot ${ESYSROOT}"
+ BUILD_CC=${CBUILD}-clang
+ BUILD_CXX=${CBUILD}-clang++
+ else
+ CC=${CHOST}-clang
+ CXX=${CHOST}-clang++
+ fi
+ strip-unsupported-flags
+ elif ! use clang && ! tc-is-gcc ; then
+ einfo "Enforcing the use of gcc due to USE=-clang ..."
+ CC=${CHOST}-gcc
+ CXX=${CHOST}-g++
+ strip-unsupported-flags
+ fi
+
+ if tc-is-clang; then
+ myconf_gn+=" is_clang=true clang_use_chrome_plugins=false use_clang_modules=false"
+ else
+ myconf_gn+=" is_clang=false"
+ fi
+
+ # Force lld for lto or pgo builds only, otherwise disable, bug 641556
+ if use thinlto || use pgo || use clang || use nvidia; then
+ myconf_gn+=" use_lld=true"
+ else
+ myconf_gn+=" use_lld=false"
+ fi
+
+ if use thinlto || use pgo; then
+ AR=llvm-ar
+ NM=llvm-nm
+ if tc-is-cross-compiler; then
+ BUILD_AR=llvm-ar
+ BUILD_NM=llvm-nm
+ fi
+ fi
+
+ # Define a custom toolchain for GN
+ myconf_gn+=" custom_toolchain=\"//build/toolchain/linux/unbundle:default\""
+
+ if tc-is-cross-compiler; then
+ tc-export BUILD_{AR,CC,CXX,NM}
+ myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:host\""
+ myconf_gn+=" v8_snapshot_toolchain=\"//build/toolchain/linux/unbundle:host\""
+ myconf_gn+=" pkg_config=\"$(tc-getPKG_CONFIG)\""
+ myconf_gn+=" host_pkg_config=\"$(tc-getBUILD_PKG_CONFIG)\""
+
+ # setup cups-config, build system only uses --libs option
+ if use cups; then
+ mkdir "${T}/cups-config" || die
+ cp "${ESYSROOT}/usr/bin/${CHOST}-cups-config" "${T}/cups-config/cups-config" || die
+ export PATH="${PATH}:${T}/cups-config"
+ fi
+
+ # Don't inherit PKG_CONFIG_PATH from environment
+ local -x PKG_CONFIG_PATH=
+ else
+ myconf_gn+=" host_toolchain=\"//build/toolchain/linux/unbundle:default\""
+ fi
+
+ # Disable rust for now; it's only used for testing and we don't need the additional bdep
+ myconf_gn+=" enable_rust=false"
+
+ # GN needs explicit config for Debug/Release as opposed to inferring it from build directory.
+ myconf_gn+=" is_debug=$(usex debug true false)"
+
+ # enable DCHECK with USE=debug only, increases chrome binary size by 30%, bug #811138.
+ # DCHECK is fatal by default, make it configurable at runtime, #bug 807881.
+ myconf_gn+=" dcheck_always_on=$(usex debug true false)"
+ myconf_gn+=" dcheck_is_configurable=$(usex debug true false)"
+
+ myconf_gn+=" enable_iterator_debugging=$(usex debug true false)"
+
+ if use debug; then
+ myconf_gn+=" symbol_level=2"
+ myconf_gn+=" blink_symbol_level=2"
+ myconf_gn+=" v8_symbol_level=2"
+ else
+ myconf_gn+=" symbol_level=0"
+ myconf_gn+=" blink_symbol_level=0"
+ myconf_gn+=" v8_symbol_level=0"
+ fi
+
+ # Component build isn't generally intended for use by end users. It's mostly useful
+ # for development and debugging.
+ myconf_gn+=" is_component_build=false"
+
+ local gn_system_libraries=(
+ flac
+ fontconfig
+ freetype
+ libjpeg
+ libwebp
+ libxml
+ libxslt
+ zlib
+ )
+ if use system-abseil-cpp; then
+ gn_system_libraries+=(
+ absl_algorithm
+ absl_base
+ absl_cleanup
+ absl_container
+ absl_crc
+ absl_debugging
+ absl_flags
+ absl_functional
+ absl_hash
+ absl_log
+ absl_log_internal
+ absl_memory
+ absl_meta
+ absl_numeric
+ absl_random
+ absl_status
+ absl_strings
+ absl_synchronization
+ absl_time
+ absl_types
+ absl_utility
+ )
+ fi
+ if use system-brotli; then
+ gn_system_libraries+=( brotli )
+ fi
+ if use system-crc32c; then
+ gn_system_libraries+=( crc32c )
+ fi
+ if use system-double-conversion; then
+ gn_system_libraries+=( double-conversion )
+ fi
+ if use system-woff2; then
+ gn_system_libraries+=( woff2 )
+ fi
+ if use nvidia; then
+ gn_system_libraries+=( libXNVCtrl )
+ fi
+ if use system-ffmpeg; then
+ gn_system_libraries+=( ffmpeg opus )
+ fi
+ if use system-jsoncpp; then
+ gn_system_libraries+=( jsoncpp )
+ fi
+ if use system-icu; then
+ gn_system_libraries+=( icu )
+ fi
+
+ gn_system_libraries+=( libpng )
+ myconf_gn+=" use_system_libpng=true"
+
+ if use system-zstd; then
+ gn_system_libraries+=( zstd )
+ fi
+ if use system-av1; then
+ gn_system_libraries+=( dav1d libaom )
+ fi
+ if use system-libusb; then
+ gn_system_libraries+=( libusb )
+ fi
+ if use system-libvpx; then
+ gn_system_libraries+=( libvpx )
+ fi
+ use system-openh264 && gn_system_libraries+=(
+ openh264
+ )
+ use system-re2 && gn_system_libraries+=(
+ re2
+ )
+ use system-snappy && gn_system_libraries+=(
+ snappy
+ )
+
+ build/linux/unbundle/replace_gn_files.py --system-libraries "${gn_system_libraries[@]}" ||
+ die "Failed to replace GN files for system libraries"
+
+ # TODO 131: The above call clobbers `enable_freetype = true` in the freetype gni file
+ # drop the last line, then append the freetype line and a new curly brace to end the block
+ local freetype_gni="build/config/freetype/freetype.gni"
+ sed -i -e '$d' ${freetype_gni} || die
+ echo " enable_freetype = true" >> ${freetype_gni} || die
+ echo "}" >> ${freetype_gni} || die
+
+ # See dependency logic in third_party/BUILD.gn
+ myconf_gn+=" use_system_harfbuzz=$(usex system-harfbuzz true false)"
+
+ # Optional dependencies.
+ myconf_gn+=" enable_hangout_services_extension=$(usex hangouts true false)"
+ myconf_gn+=" enable_widevine=$(usex widevine true false)"
+
+ if use headless; then
+ myconf_gn+=" use_cups=false"
+ myconf_gn+=" use_kerberos=false"
+ myconf_gn+=" use_pulseaudio=false"
+ myconf_gn+=" use_vaapi=false"
+ myconf_gn+=" rtc_use_pipewire=false"
+ else
+ myconf_gn+=" use_cups=$(usex cups true false)"
+ myconf_gn+=" use_kerberos=$(usex kerberos true false)"
+ myconf_gn+=" use_pulseaudio=$(usex pulseaudio true false)"
+ myconf_gn+=" use_vaapi=$(usex vaapi true false)"
+ myconf_gn+=" rtc_use_pipewire=$(usex screencast true false)"
+ myconf_gn+=" gtk_version=$(usex gtk4 4 3)"
+ fi
+
+ # Allows distributions to link pulseaudio directly (DT_NEEDED) instead of
+ # using dlopen. This helps with automated detection of ABI mismatches and
+ # prevents silent errors.
+ if use pulseaudio; then
+ myconf_gn+=" link_pulseaudio=true"
+ fi
+
+ # Non-developer builds of Chromium (for example, non-Chrome browsers, or
+ # Chromium builds provided by Linux distros) should disable the testing config
+ myconf_gn+=" disable_fieldtrial_testing_config=true"
+
+ # The sysroot is the oldest debian image that chromium supports, we don't need it
+ myconf_gn+=" use_sysroot=false"
+
+ # This determines whether or not GN uses the bundled libcxx
+ if use libcxx; then
+ myconf_gn+=" use_custom_libcxx=true"
+ else
+ myconf_gn+=" use_custom_libcxx=false"
+ myconf_gn+=" use_llvm_libatomic=false"
+ append-cppflags -U_GLIBCXX_ASSERTIONS #See #318
+ fi
+
+ myconf_gn+=" use_bluez=$(usex bluetooth true false)"
+
+ myconf_gn+=" is_cfi=$(usex cfi true false)"
+
+ if use cfi; then
+ myconf_gn+=" use_cfi_icall=true"
+ myconf_gn+=" use_cfi_cast=true"
+ fi
+
+ if use pgo; then
+ myconf_gn+=" chrome_pgo_phase=2"
+ myconf_gn+=" v8_enable_builtins_optimization=true"
+ else
+ myconf_gn+=" chrome_pgo_phase=0"
+ fi
+
+ myconf_gn+=" optimize_webui=$(usex optimize-webui true false)"
+ myconf_gn+=" use_system_freetype=$(usex system-harfbuzz true false)"
+ myconf_gn+=" use_system_libopenjpeg2=$(usex system-openjpeg true false)"
+ myconf_gn+=" enable_pdf=true"
+ myconf_gn+=" use_system_lcms2=true"
+ myconf_gn+=" enable_print_preview=true"
+
+ # Ungoogled flags
+ myconf_gn+=" build_with_tflite_lib=false"
+ myconf_gn+=" enable_mdns=false"
+ myconf_gn+=" enable_mse_mpeg2ts_stream_parser=$(usex proprietary-codecs true false)"
+ myconf_gn+=" enable_remoting=false"
+ myconf_gn+=" enable_reporting=false"
+ myconf_gn+=" enable_service_discovery=false"
+ myconf_gn+=" exclude_unwind_tables=true"
+ myconf_gn+=" google_api_key=\"\""
+ myconf_gn+=" google_default_client_id=\"\""
+ myconf_gn+=" google_default_client_secret=\"\""
+ myconf_gn+=" safe_browsing_mode=0"
+ myconf_gn+=" use_official_google_api_keys=false"
+ myconf_gn+=" use_unofficial_version_number=false"
+
+ # myconf_gn+=" enable_swiftshader=false"
+
+ # Additional flags
+ myconf_gn+=" perfetto_use_system_zlib=true"
+ myconf_gn+=" use_system_zlib=true"
+ myconf_gn+=" use_system_libjpeg=true"
+ myconf_gn+=" rtc_build_examples=false"
+ myconf_gn+=" enable_chromium_prelude=false"
+ myconf_gn+=" enable_updater=false"
+ myconf_gn+=" enable_update_notifications=false"
+ myconf_gn+=" enable_constraints=false"
+ myconf_gn+=" rtc_rusty_base64=false"
+ myconf_gn+=" v8_enable_temporal_support=false"
+ myconf_gn+=" media_use_symphonia=false"
+ myconf_gn+=" pdf_enable_rust_png=false"
+ myconf_gn+=" skia_use_libpng_encode=true"
+ myconf_gn+=" skia_use_libpng_decode=true"
+ myconf_gn+=" skia_use_rust_png_decode=false"
+ myconf_gn+=" skia_use_rust_png_encode=false"
+ myconf_gn+=" enable_jxl_decoder=false"
+
+ # Disable pseudolocales, only used for testing
+ myconf_gn+=" enable_pseudolocales=false"
+
+ # Disable code formating of generated files
+ myconf_gn+=" blink_enable_generated_code_formatting=false"
+
+ ffmpeg_branding="$(usex proprietary-codecs Chrome Chromium)"
+ myconf_gn+=" proprietary_codecs=$(usex proprietary-codecs true false)"
+ myconf_gn+=" ffmpeg_branding=\"${ffmpeg_branding}\""
+
+ local myarch="$(tc-arch)"
+
+ # Avoid CFLAGS problems
+ if ! use custom-cflags; then
+ filter-flags "-O*" "-Wl,-O*" #See #25
+ strip-flags
+
+ # Prevent linker from running out of address space, bug #471810 .
+ if use x86; then
+ filter-flags "-g*"
+ fi
+
+ # Prevent libvpx/xnnpack build failures. Bug 530248, 544702, 546984, 853646.
+ if [[ ${myarch} == amd64 || ${myarch} == x86 ]]; then
+ filter-flags -mno-mmx -mno-sse2 -mno-ssse3 -mno-sse4.1 -mno-avx -mno-avx2 -mno-fma -mno-fma4 -mno-xop -mno-sse4a
+ fi
+
+ if tc-is-gcc; then
+ # https://bugs.gentoo.org/904455
+ local -x CPP="$(tc-getCXX) -E"
+ # https://bugs.gentoo.org/912381
+ filter-lto
+ fi
+ fi
+
+ local dest_cpu=""
+
+ if [[ $myarch = amd64 ]] ; then
+ dest_cpu=x64
+ myconf_gn+=" target_cpu=\"x64\""
+ ffmpeg_target_arch=x64
+ dest_cpu="x64"
+ elif [[ $myarch = x86 ]] ; then
+ myconf_gn+=" target_cpu=\"x86\""
+ ffmpeg_target_arch=ia32
+ dest_cpu="x86"
+
+ # This is normally defined by compiler_cpu_abi in
+ # build/config/compiler/BUILD.gn, but we patch that part out.
+ append-flags -msse2 -mfpmath=sse -mmmx
+ elif [[ $myarch = arm64 ]] ; then
+ myconf_gn+=" target_cpu=\"arm64\""
+ ffmpeg_target_arch=arm64
+ dest_cpu="arm64"
+ elif [[ $myarch = arm ]] ; then
+ myconf_gn+=" target_cpu=\"arm\""
+ ffmpeg_target_arch=$(usex cpu_flags_arm_neon arm-neon arm)
+ dest_cpu="arm"
+ elif [[ $myarch = ppc64 ]] ; then
+ myconf_gn+=" target_cpu=\"ppc64\""
+ ffmpeg_target_arch=ppc64
+ dest_cpu="ppc64"
+ else
+ die "Failed to determine target arch, got '$myarch'."
+ fi
+
+ if use thinlto; then
+ # We need to change the default value of import-instr-limit in
+ # LLVM to limit the text size increase. The default value is
+ # 100, and we change it to 30 to reduce the text size increase
+ # from 25% to 10%. The performance number of page_cycler is the
+ # same on two of the thinLTO configurations, we got 1% slowdown
+ # on speedometer when changing import-instr-limit from 100 to 30.
+ # append-ldflags "-Wl,-plugin-opt,-import-instr-limit=30"
+ sed -i '/import_instr_limit = 5/{s++import_instr_limit = 30+;h};${x;/./{x;q0};x;q1}' \
+ build/config/compiler/BUILD.gn || die
+
+ append-ldflags "-Wl,--thinlto-jobs=$(makeopts_jobs)"
+ fi
+
+ myconf_gn+=" treat_warnings_as_errors=false"
+ # Disable fatal linker warnings, bug 506268.
+ myconf_gn+=" fatal_linker_warnings=false"
+
+ # Disable external code space for V8 for ppc64. It is disabled for ppc64
+ # by default, but cross-compiling on amd64 enables it again.
+ if tc-is-cross-compiler; then
+ if ! use amd64 && ! use arm64; then
+ myconf_gn+=" v8_enable_external_code_space=false"
+ fi
+ fi
+
+ # Only enabled for clang, but gcc has endian macros too
+ myconf_gn+=" v8_use_libm_trig_functions=true"
+
+ # Bug 491582.
+ export TMPDIR="${WORKDIR}/temp"
+ mkdir -p -m 755 "${TMPDIR}" || die
+
+ # https://bugs.gentoo.org/654216
+ addpredict /dev/dri/ #nowarn
+
+ # Disable unknown warning message from clang.
+ if tc-is-clang; then
+ append-flags -Wno-unknown-warning-option
+ if tc-is-cross-compiler; then
+ export BUILD_CXXFLAGS+=" -Wno-unknown-warning-option"
+ export BUILD_CFLAGS+=" -Wno-unknown-warning-option"
+ fi
+ fi
+
+ # Explicitly disable ICU data file support for system-icu/headless builds.
+ if use system-icu || use headless; then
+ myconf_gn+=" icu_use_data_file=false"
+ fi
+
+ # Don't need nocompile checks and GN crashes with our config
+ myconf_gn+=" enable_nocompile_tests=false"
+
+ # 131 began laying the groundwork for replacing freetype with
+ # "Rust-based Fontations set of libraries plus Skia path rendering"
+ # We now need to opt-in
+ myconf_gn+=" enable_freetype=true"
+
+ # Enable ozone wayland and/or headless support
+ myconf_gn+=" use_ozone=true ozone_auto_platforms=false"
+ myconf_gn+=" ozone_platform_headless=true"
+ if use headless; then
+ myconf_gn+=" ozone_platform=\"headless\""
+ myconf_gn+=" use_xkbcommon=false use_gtk=false use_qt=false"
+ myconf_gn+=" use_glib=false use_gio=false"
+ myconf_gn+=" use_pangocairo=false use_alsa=false"
+ myconf_gn+=" use_libpci=false use_udev=false"
+ myconf_gn+=" enable_print_preview=false"
+ myconf_gn+=" enable_remoting=false"
+ else
+ myconf_gn+=" use_system_minigbm=true"
+ myconf_gn+=" use_xkbcommon=true"
+ if use qt6; then
+ local cbuild_libdir=$(get_libdir)
+ if tc-is-cross-compiler; then
+ # Hack to workaround get_libdir not being able to handle CBUILD, bug #794181
+ local cbuild_libdir=$($(tc-getBUILD_PKG_CONFIG) --keep-system-libs --libs-only-L libxslt)
+ cbuild_libdir=${cbuild_libdir:2}
+ cbuild_libdir=${cbuild_libdir/% }
+ fi
+ myconf_gn+=" use_qt6=true"
+ myconf_gn+=" moc_qt6_path=\"${EPREFIX}/usr/${cbuild_libdir}/qt6/libexec\""
+ else
+ myconf_gn+=" use_qt6=false"
+ fi
+ myconf_gn+=" ozone_platform_x11=$(usex X true false)"
+ myconf_gn+=" ozone_platform_wayland=$(usex wayland true false)"
+ myconf_gn+=" ozone_platform=$(usex wayland \"wayland\" \"x11\")"
+ use wayland && myconf_gn+=" use_system_libffi=true"
+ fi
+
+ # Results in undefined references in chrome linking, may require CFI to work
+ if use arm64; then
+ myconf_gn+=" arm_control_flow_integrity=\"none\""
+ fi
+
+ # Enable official builds
+ myconf_gn+=" is_official_build=$(usex official true false)"
+ myconf_gn+=" use_thin_lto=$(usex thinlto true false)"
+ myconf_gn+=" thin_lto_enable_optimizations=$(usex optimize-thinlto true false)"
+ if use official; then
+ # Allow building against system libraries in official builds
+ sed -i 's/OFFICIAL_BUILD/GOOGLE_CHROME_BUILD/' \
+ tools/generate_shim_headers/generate_shim_headers.py || die
+ else
+ myconf_gn+=" devtools_skip_typecheck=false"
+ fi
+
+ # user CXXFLAGS might overwrite -march=armv8-a+crc+crypto, bug #851639
+ if use arm64 && tc-is-gcc; then
+ sed -i '/^#if HAVE_ARM64_CRC32C/a #pragma GCC target ("+crc+crypto")' \
+ third_party/crc32c/src/src/crc32c_arm64.cc || die
+ fi
+
+ # skipping typecheck is only supported on amd64, bug #876157
+ if ! use amd64; then
+ myconf_gn+=" devtools_skip_typecheck=false"
+ fi
+
+ # Facilitate deterministic builds (taken from build/config/compiler/BUILD.gn)
+ append-cflags -Wno-builtin-macro-redefined
+ append-cxxflags -Wno-builtin-macro-redefined
+ append-cppflags "-D__DATE__= -D__TIME__= -D__TIMESTAMP__="
+
+ local flags
+ einfo "Building with the following compiler settings:"
+ for flags in C{C,XX} AR NM RANLIB {C,CXX,CPP,LD}FLAGS \
+ EXTRA_GN UGC_{SKIP_{PATCHES,SUBSTITUTION},KEEP_BINARIES} ; do
+ einfo " ${flags} = \"${!flags}\""
+ done
+
+ einfo "Configuring Chromium ..."
+ set -- gn gen --args="${myconf_gn} ${EXTRA_GN}" out/Release
+ echo "$@"
+ "$@" || die "Failed to configure Chromium"
+
+ # The "if" below should not be executed unless testing
+ if [ ! -z "${NODIE}" ]; then
+ # List all args
+ # gn args --list out/Release
+
+ # Quick compiler check
+ eninja -C out/Release protoc torque
+ fi
+}
+
+src_compile() {
+ # Final link uses lots of file descriptors.
+ ulimit -n 2048
+
+ # Calling this here supports resumption via FEATURES=keepwork
+ python_setup
+
+ # Don't inherit PYTHONPATH from environment, bug #789021, #812689
+ local -x PYTHONPATH=
+
+ # Build mksnapshot and pax-mark it.
+ if use pax-kernel; then
+ local x
+ for x in mksnapshot v8_context_snapshot_generator; do
+ if tc-is-cross-compiler; then
+ eninja -C out/Release "host/${x}"
+ pax-mark m "out/Release/host/${x}"
+ else
+ eninja -C out/Release "${x}"
+ pax-mark m "out/Release/${x}"
+ fi
+ done
+ fi
+
+ # Even though ninja autodetects number of CPUs, we respect
+ # user's options, for debugging with -j 1 or any other reason.
+ eninja -C out/Release chrome
+
+ use convert-dict && eninja -C out/Release convert_dict
+
+ use enable-driver && eninja -C out/Release chromedriver
+ #use suid && eninja -C out/Release chrome_sandbox
+
+ pax-mark m out/Release/chrome
+
+ use enable-driver && mv out/Release/chromedriver
+
+ rm -f out/Release/locales/*.pak.info || die
+
+ # Generate support files: #684550 #706786 #968958
+ # Use upstream's python installer script to generate support files
+ # This replaces fragile sed commands and handles @@include@@ directives.
+ # It'll also verify that all substitution markers have been resolved, meaning that
+ # future changes to templates that add new variables will be caught during the build.
+ cat > "${T}/generate_support_files.py" <<-EOF || die
+ import sys
+ from pathlib import Path
+
+ # Add upstream installer script to search path
+ sys.path.insert(0, str(Path.cwd() / "chrome/installer/linux/common"))
+ import installer
+
+ # Configure contexts strictly for file generation
+ # Common variables used across templates
+ context = {
+ "BUGTRACKERURL": "https://github.com/ungoogled-software/ungoogled-chromium/issues",
+ "DEVELOPER_NAME": "The ungoogled-chromium Authors",
+ "extra_desktop_entries": "",
+ "FULLDESC": "Google Chromium, sans integration with Google",
+ "HELPURL": "https://ungoogled-software.github.io/ungoogled-chromium-wiki/faq",
+ "INSTALLDIR": "/usr/$(get_libdir)/chromium-browser",
+ "MAINTMAIL": "@PF4Public",
+ "MENUNAME": "ungoogled-chromium",
+ "PACKAGE": "chromium-browser",
+ "PRODUCTURL": "https://github.com/ungoogled-software/ungoogled-chromium",
+ "PROGNAME": "chrome",
+ "PROJECT_LICENSE": "BSD, LGPL-2, LGPL-2.1, MPL-1.1, MPL-2.0, Apache-2.0, and others",
+ "SHORTDESC": "Open-source foundation of many web browsers including Google Chrome",
+ "uri_scheme": "x-scheme-handler/chromium",
+ "usr_bin_symlink_name": "chromium-browser",
+ }
+
+ # Generate Desktop file
+ installer.process_template(
+ Path("chrome/installer/linux/common/desktop.template"),
+ Path("out/Release/chromium-browser-chromium.desktop"),
+ context
+ )
+
+ # Generate Manpage
+ installer.process_template(
+ Path("chrome/app/resources/manpage.1.in"),
+ Path("out/Release/chromium-browser.1"),
+ context
+ )
+
+ # Generate AppData (AppStream)
+ installer.process_template(
+ Path("chrome/installer/linux/common/appdata.xml.template"),
+ Path("out/Release/chromium-browser.appdata.xml"),
+ context
+ )
+
+ # Generate GNOME Default Apps entry
+ installer.process_template(
+ Path("chrome/installer/linux/common/default-app.template"),
+ Path("out/Release/chromium-browser.xml"),
+ context
+ )
+ EOF
+
+ "${EPYTHON}" "${T}/generate_support_files.py" || die "Failed to generate support files"
+
+ # Build vk_swiftshader_icd.json; bug #827861
+ sed -e 's|${ICD_LIBRARY_PATH}|./libvk_swiftshader.so|g' \
+ third_party/swiftshader/src/Vulkan/vk_swiftshader_icd.json.tmpl > \
+ out/Release/vk_swiftshader_icd.json || die
+}
+
+src_install() {
+ local CHROMIUM_HOME="/usr/$(get_libdir)/chromium-browser"
+ exeinto "${CHROMIUM_HOME}"
+ doexe out/Release/chrome
+
+ if use convert-dict; then
+ newexe "${FILESDIR}/update-dicts.sh" update-dicts.sh
+ doexe out/Release/convert_dict
+ fi
+
+ #newexe out/Release/chrome_sandbox chrome-sandbox
+ #fperms 4755 "${CHROMIUM_HOME}/chrome-sandbox"
+
+ use enable-driver && doexe out/Release/chromedriver
+
+ #* https://github.com/ungoogled-software/ungoogled-chromium/pull/3563
+ doexe out/Release/chrome_crashpad_handler
+
+ ozone_auto_session () {
+ use X && use wayland && ! use headless && echo true || echo false
+ }
+ local sedargs=( -e
+ "s:/usr/lib/:/usr/$(get_libdir)/:g;
+ s:@@OZONE_AUTO_SESSION@@:$(ozone_auto_session):g"
+ )
+ sed "${sedargs[@]}" "${FILESDIR}/chromium-launcher-r7.sh" > chromium-launcher.sh || die
+ doexe chromium-launcher.sh
+
+ # It is important that we name the target "chromium-browser",
+ # xdg-utils expect it; bug #355517.
+ dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium-browser
+ # keep the old symlink around for consistency
+ dosym "${CHROMIUM_HOME}/chromium-launcher.sh" /usr/bin/chromium
+
+ use enable-driver && dosym "${CHROMIUM_HOME}/chromedriver" /usr/bin/chromedriver
+
+ # Allow users to override command-line options, bug #357629.
+ insinto /etc/chromium
+ newins "${FILESDIR}/chromium.default" "default"
+
+ pushd out/Release/locales > /dev/null || die
+ chromium_remove_language_paks
+ popd > /dev/null || die
+
+ insinto "${CHROMIUM_HOME}"
+ doins out/Release/*.bin
+ doins out/Release/*.pak
+ (
+ shopt -s nullglob
+ local files=(out/Release/*.so out/Release/*.so.[0-9])
+ [[ ${#files[@]} -gt 0 ]] && doins "${files[@]}"
+ )
+
+ # Install bundled xdg-utils, avoids installing X11 libraries with USE="-X wayland"
+ doins out/Release/xdg-{settings,mime}
+
+ if ! use system-icu && ! use headless; then
+ doins out/Release/icudtl.dat
+ fi
+
+ doins -r out/Release/locales
+ #doins -r out/Release/MEIPreload
+
+ # Install vk_swiftshader_icd.json; bug #827861
+ doins out/Release/vk_swiftshader_icd.json
+
+ if [[ -d out/Release/swiftshader ]]; then
+ insinto "${CHROMIUM_HOME}/swiftshader"
+ doins out/Release/swiftshader/*.so
+ fi
+
+ use widevine && dosym WidevineCdm/_platform_specific/linux_x64/libwidevinecdm.so /usr/$(get_libdir)/chromium-browser/libwidevinecdm.so
+
+ # Install icons
+ local branding size
+ for size in 16 24 32 48 64 128 256 ; do
+ case ${size} in
+ 16|32) branding="chrome/app/theme/default_100_percent/chromium" ;;
+ *) branding="chrome/app/theme/chromium" ;;
+ esac
+ newicon -s ${size} "${branding}/product_logo_${size}.png" \
+ chromium-browser.png
+ done
+
+ # Install desktop entry
+ domenu out/Release/chromium-browser-chromium.desktop
+
+ # Install GNOME default application entry (bug #303100).
+ insinto /usr/share/gnome-control-center/default-apps
+ doins out/Release/chromium-browser.xml
+
+ # Install AppStream metadata
+ insinto /usr/share/appdata
+ doins out/Release/chromium-browser.appdata.xml
+
+ # Install manpage; bug #684550
+ doman out/Release/chromium-browser.1
+ dosym chromium-browser.1 /usr/share/man/man1/chromium.1
+
+ readme.gentoo_create_doc
+}
+
+pkg_postrm() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+}
+
+pkg_postinst() {
+ xdg_icon_cache_update
+ xdg_desktop_database_update
+ readme.gentoo_print_elog
+
+ if ! use headless; then
+ if use vaapi; then
+ elog "Hardware-accelerated video decoding configuration:"
+ elog
+ elog "Chromium supports multiple backends for hardware acceleration. To enable one,"
+ elog " Add to CHROMIUM_FLAGS in /etc/chromium/default:"
+ elog
+ elog "1. VA-API with OpenGL (recommended for most users):"
+ elog " --enable-features=AcceleratedVideoDecodeLinuxGL"
+ elog " VaapiVideoDecoder may need to be added as well, but try without first."
+ elog
+ if use wayland; then
+ elog "2. Enhanced Wayland/EGL performance:"
+ elog " --enable-features=AcceleratedVideoDecodeLinuxGL,AcceleratedVideoDecodeLinuxZeroCopyGL"
+ elog
+ fi
+ if use X; then
+ elog "$(usex wayland "3" "2"). VA-API with Vulkan:"
+ elog " --enable-features=VaapiVideoDecoder,VaapiIgnoreDriverChecks,Vulkan,DefaultANGLEVulkan,VulkanFromANGLE"
+ elog
+ if use wayland; then
+ elog " NOTE: Vulkan acceleration requires X11 and will not work under Wayland sessions."
+ elog " Use OpenGL-based acceleration instead when running under Wayland."
+ elog
+ fi
+ fi
+ elog "Additional options:"
+ elog " To enable hardware-accelerated encoding (if supported)"
+ elog " add 'AcceleratedVideoEncoder' to your feature list"
+ elog " VaapiIgnoreDriverChecks bypasses driver compatibility checks"
+ elog " (may be needed for newer/unsupported hardware)"
+ elog
+ else
+ elog "This Chromium build was compiled without VA-API support, which provides"
+ elog "hardware-accelerated video decoding."
+ fi
+ if use screencast; then
+ elog "Screencast is disabled by default at runtime. Either enable it"
+ elog "by navigating to chrome://flags/#enable-webrtc-pipewire-capturer"
+ elog "inside Chromium or add --enable-features=WebRTCPipeWireCapturer"
+ elog "to CHROMIUM_FLAGS in /etc/chromium/default."
+ elog
+ elog "Additional setup may be required for screencasting to work."
+ elog "See issue: https://github.com/PF4Public/gentoo-overlay/issues/314"
+ fi
+ if use gtk4; then
+ elog "Chromium prefers GTK3 over GTK4 at runtime. To override this"
+ elog "behaviour you need to pass --gtk-version=4, e.g. by adding it"
+ elog "to CHROMIUM_FLAGS in /etc/chromium/default."
+ fi
+ if use widevine; then
+ elog "widevine requires binary plugins, which are distributed separately"
+ elog "Make sure you have www-plugins/chrome-binary-plugins installed"
+ fi
+ fi
+}
+
+eapply_wrapper () {
+ if [ ! -z "${NODIE}" ]; then
+ nonfatal eapply "$@"
+ else
+ eapply "$@"
+ fi
+}
+
+git_wrapper () {
+ if [ ! -z "${NODIE}" ]; then
+ git "$@"
+ else
+ git "$@" || die
+ fi
+}
+
+filter_wrapper () {
+ einfo "Applying ${i##*/}"
+ #? fuzz factor of 3 is OK?
+ if [ ! -z "${NODIE}" ]; then
+ filterdiff -p1 "${@:2}" < "$1" | patch -F 3 -p1
+ else
+ filterdiff -p1 "${@:2}" < "$1" | patch -F 3 -p1 || die
+ fi
+}