From 90de55541952d3b6b88999dd41d0953041ad8509 Mon Sep 17 00:00:00 2001 From: jbeich Date: Tue, 6 Mar 2018 00:56:50 +0000 Subject: [PATCH] www/firefox: update to 60.0 Changes: https://www.mozilla.org/firefox/60.0/releasenotes/ Security: 5aefc41e-d304-4ec8-8c82-824f84f08244 MFH: 2018Q1 --- Mk/Uses/gecko.mk | 4 +- www/firefox-i18n/Makefile | 9 +- www/firefox-i18n/Makefile.lang | 5 +- www/firefox-i18n/Makefile.option | 2 + www/firefox-i18n/distinfo | 392 +- www/firefox/Makefile | 17 +- www/firefox/distinfo | 6 +- www/firefox/files/patch-a-gyp-webrtc | 21490 +++++++++++++++++++++++++++++++++ www/firefox/files/patch-bug1021761 | 6 +- www/firefox/files/patch-bug1418162 | 58 + www/firefox/files/patch-bug1433747 | 24 - www/firefox/files/patch-bug1442746 | 40 + www/firefox/files/patch-bug1442791 | 33 + www/firefox/files/patch-z-bug517422 | 24 +- 14 files changed, 21856 insertions(+), 254 deletions(-) create mode 100644 www/firefox/files/patch-a-gyp-webrtc create mode 100644 www/firefox/files/patch-bug1418162 delete mode 100644 www/firefox/files/patch-bug1433747 create mode 100644 www/firefox/files/patch-bug1442746 create mode 100644 www/firefox/files/patch-bug1442791 diff --git a/Mk/Uses/gecko.mk b/Mk/Uses/gecko.mk index d07d0a07c4fe..9df59c251201 100644 --- a/Mk/Uses/gecko.mk +++ b/Mk/Uses/gecko.mk @@ -37,12 +37,12 @@ RUN_DEPENDS+= libxul>=45:www/libxul .elif ${gecko_ARGS:Mfirefox} _GECKO_DEFAULT_VERSION= 52 -_GECKO_VERSIONS= 52 59 +_GECKO_VERSIONS= 52 60 _GECKO_TYPE= firefox # Dependence lines for different Firefox versions 52_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox-esr -59_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox +60_DEPENDS= ${LOCALBASE}/lib/firefox/firefox:www/firefox .if exists(${LOCALBASE}/bin/firefox) _GECKO_INSTALLED_VER!= ${LOCALBASE}/bin/firefox --version 2>/dev/null diff --git a/www/firefox-i18n/Makefile b/www/firefox-i18n/Makefile index d4ef33747192..2d4ccf1060f5 100644 --- a/www/firefox-i18n/Makefile +++ b/www/firefox-i18n/Makefile @@ -2,11 +2,10 @@ # $FreeBSD$ PORTNAME= firefox-i18n -PORTVERSION= 59.0 -PORTREVISION= 1 +PORTVERSION= 60.0b2 CATEGORIES= www -MASTER_SITES= MOZILLA/${PORTNAME:S|-i18n||}/releases/${DISTVERSION}/linux-i686/xpi \ - MOZILLA/${PORTNAME:S|-i18n||}/candidates/${DISTVERSION}-candidates/build4/linux-i686/xpi +MASTER_SITES= MOZILLA/devedition/releases/${DISTVERSION}/linux-i686/xpi \ + MOZILLA/devedition/candidates/${DISTVERSION}-candidates/build1/linux-i686/xpi PKGNAMEPREFIX= DISTFILES= ${FIREFOX_I18N_:S/$/.xpi/} DIST_SUBDIR= xpi/${DISTNAME} @@ -16,7 +15,7 @@ COMMENT= Localized interface for Firefox EXTRACT_DEPENDS= zip:archivers/zip -USES= zip:infozip gecko:firefox,59,build +USES= zip:infozip gecko:firefox,60,build USE_XPI= firefox NO_ARCH= yes diff --git a/www/firefox-i18n/Makefile.lang b/www/firefox-i18n/Makefile.lang index a73f94452926..25b432860d28 100644 --- a/www/firefox-i18n/Makefile.lang +++ b/www/firefox-i18n/Makefile.lang @@ -6,7 +6,7 @@ FIREFOX_I18N_ALL_= ach af an ar as ast az be bg bn-BD bn-IN br bs ca cak \ 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 mai mk ml mr ms my nb-NO ne-NP nl \ - nn-NO or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ + nn-NO oc or pa-IN pl pt-BR pt-PT rm ro ru si sk sl son \ sq sr sv-SE ta te th tr uk ur uz vi xh zh-CN zh-TW .if defined(FIREFOX_I18N_ALL) || defined(PACKAGE_BUILDING) || target(package) @@ -225,6 +225,9 @@ FIREFOX_I18N+= nl .if ${PORT_OPTIONS:MLANG_NN} FIREFOX_I18N+= nn-NO .endif +.if ${PORT_OPTIONS:MLANG_OC} +FIREFOX_I18N+= oc +.endif .if ${PORT_OPTIONS:MLANG_OR} FIREFOX_I18N+= or .endif diff --git a/www/firefox-i18n/Makefile.option b/www/firefox-i18n/Makefile.option index 082aa76465ba..49e0d6f4adc6 100644 --- a/www/firefox-i18n/Makefile.option +++ b/www/firefox-i18n/Makefile.option @@ -73,6 +73,7 @@ OPTIONS_DEFINE= LANG_ACH \ LANG_NE \ LANG_NL \ LANG_NN \ + LANG_OC \ LANG_OR \ LANG_PA \ LANG_PL \ @@ -122,6 +123,7 @@ LANG_LIJ_DESC?= Ligurian (Genoa) language support LANG_MS_DESC?= Malay language support LANG_MY_DESC?= Burmese language support LANG_NE_DESC?= Nepali language support +LANG_OC_DESC?= Occitan (lengadocian) language support LANG_SW_DESC?= Swahili language support LANG_UR_DESC?= Urdu (Pakistan) language support LANG_UZ_DESC?= Uzbek language support diff --git a/www/firefox-i18n/distinfo b/www/firefox-i18n/distinfo index ee6da157d923..971671df3f49 100644 --- a/www/firefox-i18n/distinfo +++ b/www/firefox-i18n/distinfo @@ -1,195 +1,197 @@ -TIMESTAMP = 1520456550 -SHA256 (xpi/firefox-i18n-59.0/ach.xpi) = 1d3c6166b27b5e640733210faf4e7fa751d1acb8edd80448fd5cfb840c491987 -SIZE (xpi/firefox-i18n-59.0/ach.xpi) = 439224 -SHA256 (xpi/firefox-i18n-59.0/af.xpi) = 21ef31da94eb74b269e65c47961f93d17827a480756d282cf367f3ec4998866c -SIZE (xpi/firefox-i18n-59.0/af.xpi) = 436729 -SHA256 (xpi/firefox-i18n-59.0/an.xpi) = e544fcac272f5b3ee9365c53063164fb6f93e323c61fb0154e744fe046d0e348 -SIZE (xpi/firefox-i18n-59.0/an.xpi) = 463403 -SHA256 (xpi/firefox-i18n-59.0/ar.xpi) = 6443febaa553ae1f843a20ca5c78be7db122ffa98289f100cca883c86b17fb0a -SIZE (xpi/firefox-i18n-59.0/ar.xpi) = 486631 -SHA256 (xpi/firefox-i18n-59.0/as.xpi) = b8baf8448a59e13ae8ed5794f9a1b796f34029add488dc215023ff12c5549ccb -SIZE (xpi/firefox-i18n-59.0/as.xpi) = 483300 -SHA256 (xpi/firefox-i18n-59.0/ast.xpi) = 82876aa720ab6c98c5c1dd12fde7d62a47d1c42a87d70666b765144e620334e2 -SIZE (xpi/firefox-i18n-59.0/ast.xpi) = 454341 -SHA256 (xpi/firefox-i18n-59.0/az.xpi) = e799b35e4a8d2272378b6f0fadee5777660af8d96e6cfa9b23d5d4e3a7088693 -SIZE (xpi/firefox-i18n-59.0/az.xpi) = 464267 -SHA256 (xpi/firefox-i18n-59.0/be.xpi) = d4852d209ee8dfa9b88abc418f48cbb4df9599de9c4000455f50533ddc1dba08 -SIZE (xpi/firefox-i18n-59.0/be.xpi) = 517058 -SHA256 (xpi/firefox-i18n-59.0/bg.xpi) = ee011edf65e91faa21c8a75b8f9922484a899b4d6762f0a6a5f3b9f35521c2b3 -SIZE (xpi/firefox-i18n-59.0/bg.xpi) = 508611 -SHA256 (xpi/firefox-i18n-59.0/bn-BD.xpi) = 5c39189efa5daf9e8d6574b98bed66edad98bd0a4459955c666c5a9734c16d28 -SIZE (xpi/firefox-i18n-59.0/bn-BD.xpi) = 526351 -SHA256 (xpi/firefox-i18n-59.0/bn-IN.xpi) = cdacc3c3002f4bb335b13bea1ddf22d0725938156afe257d45ad1a2e1148aa68 -SIZE (xpi/firefox-i18n-59.0/bn-IN.xpi) = 510795 -SHA256 (xpi/firefox-i18n-59.0/br.xpi) = dfa4af49f1c379c1e299d252ba416310775c0f6a5802b1f26bb6610e20ab890d -SIZE (xpi/firefox-i18n-59.0/br.xpi) = 451718 -SHA256 (xpi/firefox-i18n-59.0/bs.xpi) = 75b095a9128248737edcb22a5c7926c51f1657762549453fe5dba045628baa97 -SIZE (xpi/firefox-i18n-59.0/bs.xpi) = 457857 -SHA256 (xpi/firefox-i18n-59.0/ca.xpi) = 5171bf8d0c0f40bea63e81ae282cd41e42484b2ec06b904460c8669ee6454a3b -SIZE (xpi/firefox-i18n-59.0/ca.xpi) = 464910 -SHA256 (xpi/firefox-i18n-59.0/cak.xpi) = eaae22a1be95e28d55aa849dc3699ebe5ee567574e38a306f26591da03a7e332 -SIZE (xpi/firefox-i18n-59.0/cak.xpi) = 475232 -SHA256 (xpi/firefox-i18n-59.0/cs.xpi) = 2843a427be283937c15f98e31cb23025960822a8faf0d71d7ef30e20007cecae -SIZE (xpi/firefox-i18n-59.0/cs.xpi) = 471573 -SHA256 (xpi/firefox-i18n-59.0/cy.xpi) = 9e83160f6142bc1189822957f7528f1a3ca4c221576cac1075dfed5731197516 -SIZE (xpi/firefox-i18n-59.0/cy.xpi) = 454431 -SHA256 (xpi/firefox-i18n-59.0/da.xpi) = 5803ba7d12156ef86fcc951ceac1b53f3fbce938826d51bc6f15780c1242d935 -SIZE (xpi/firefox-i18n-59.0/da.xpi) = 446947 -SHA256 (xpi/firefox-i18n-59.0/de.xpi) = 80cb4b481073f71acaa6e6d760ebf0b599a33895eab236cf2cc3a8c000be0697 -SIZE (xpi/firefox-i18n-59.0/de.xpi) = 466271 -SHA256 (xpi/firefox-i18n-59.0/dsb.xpi) = bcdb45e97f901fbff9b547a91a0b5c2a5bdadeea8ea5610ee5fceaf4484ef36f -SIZE (xpi/firefox-i18n-59.0/dsb.xpi) = 478973 -SHA256 (xpi/firefox-i18n-59.0/el.xpi) = 466c2fef631c844ab1280e3879add57aacb98e2f30a7d8223f865d196deeb487 -SIZE (xpi/firefox-i18n-59.0/el.xpi) = 531406 -SHA256 (xpi/firefox-i18n-59.0/en-GB.xpi) = cb42b3e458acc5ab249da6b55a9958585e4c064ddfb94b7bf49f9465626df0a4 -SIZE (xpi/firefox-i18n-59.0/en-GB.xpi) = 434298 -SHA256 (xpi/firefox-i18n-59.0/en-US.xpi) = 44e49f00faf5c818ca025e4845f667b33c9542f5cc876fb5779c1d0fb87cc8b9 -SIZE (xpi/firefox-i18n-59.0/en-US.xpi) = 432747 -SHA256 (xpi/firefox-i18n-59.0/en-ZA.xpi) = 4816897d2e2f2f5f3d3a35a0f335cd34673f4cc57fe82178af7522055b508e9b -SIZE (xpi/firefox-i18n-59.0/en-ZA.xpi) = 427364 -SHA256 (xpi/firefox-i18n-59.0/eo.xpi) = c17ce4751c46e83a293d7272ca8cfeff8602b223226d8fb60aab74e9dae5e7ad -SIZE (xpi/firefox-i18n-59.0/eo.xpi) = 453365 -SHA256 (xpi/firefox-i18n-59.0/es-AR.xpi) = 1a51d27cafa512ee25f9738f3b121f8d7e573ba277d1b834bae30a739c851e03 -SIZE (xpi/firefox-i18n-59.0/es-AR.xpi) = 461795 -SHA256 (xpi/firefox-i18n-59.0/es-CL.xpi) = f6c73332ed4ad8484aee9c87b70762ebf4795fbf340d87ee763879eb20788d14 -SIZE (xpi/firefox-i18n-59.0/es-CL.xpi) = 464652 -SHA256 (xpi/firefox-i18n-59.0/es-ES.xpi) = c1fc12302f57f526ef483ffb79a39c63b0f946b09fd1541989dd2b28ba7eb83c -SIZE (xpi/firefox-i18n-59.0/es-ES.xpi) = 348462 -SHA256 (xpi/firefox-i18n-59.0/es-MX.xpi) = 208182f94525a759cba128b892e80e99ee6dd1921906f8c054a8a515e283b35a -SIZE (xpi/firefox-i18n-59.0/es-MX.xpi) = 466310 -SHA256 (xpi/firefox-i18n-59.0/et.xpi) = 0414fc474c1457f8ec64a40d3f268aefe8ddc70cf85a07c5faba4b156f04353c -SIZE (xpi/firefox-i18n-59.0/et.xpi) = 445393 -SHA256 (xpi/firefox-i18n-59.0/eu.xpi) = 45a5df206d635e4b656c34e06e2c7df4b5614fd1584e7bd171432bff44cf155c -SIZE (xpi/firefox-i18n-59.0/eu.xpi) = 455235 -SHA256 (xpi/firefox-i18n-59.0/fa.xpi) = 375f9c9356891978d1b8558c63e34675ff3ed70dde54cbd70fbfee736a6dbe37 -SIZE (xpi/firefox-i18n-59.0/fa.xpi) = 508096 -SHA256 (xpi/firefox-i18n-59.0/ff.xpi) = ef8313cd46c2e68af5388d4c705958db8e2b75c4156b2b5ee76b2822c5bb921e -SIZE (xpi/firefox-i18n-59.0/ff.xpi) = 455025 -SHA256 (xpi/firefox-i18n-59.0/fi.xpi) = 2d568720cd7f1d3106c6e1c8d02e838786a7643cdc8a74362a449127636346b6 -SIZE (xpi/firefox-i18n-59.0/fi.xpi) = 445181 -SHA256 (xpi/firefox-i18n-59.0/fr.xpi) = 7dad72da0d5ea4d30b70f34319a9446044d952bcdcaef8e50e8735328f86e857 -SIZE (xpi/firefox-i18n-59.0/fr.xpi) = 473591 -SHA256 (xpi/firefox-i18n-59.0/fy-NL.xpi) = d1595e13a228471d0e675148d52855d0f18fb0352ac559323204dfa648233b44 -SIZE (xpi/firefox-i18n-59.0/fy-NL.xpi) = 462917 -SHA256 (xpi/firefox-i18n-59.0/ga-IE.xpi) = 21c43c03c285a53f47a56be397dafed998b60fdc763d370465f692d90ba967b1 -SIZE (xpi/firefox-i18n-59.0/ga-IE.xpi) = 471906 -SHA256 (xpi/firefox-i18n-59.0/gd.xpi) = 0ecf7b654d8ab199277c286849bc50e4289c30b7766e3a9de28a69cafa75aa6b -SIZE (xpi/firefox-i18n-59.0/gd.xpi) = 461296 -SHA256 (xpi/firefox-i18n-59.0/gl.xpi) = eddfdf159b7dc97c2ab00d5c13208fb161521cbeeaefbcabd3925f68fd28db0a -SIZE (xpi/firefox-i18n-59.0/gl.xpi) = 441613 -SHA256 (xpi/firefox-i18n-59.0/gn.xpi) = 14cb97943f1b501a77a843addd6b03c60518c8c30fb7337148f1803c492f91ad -SIZE (xpi/firefox-i18n-59.0/gn.xpi) = 469396 -SHA256 (xpi/firefox-i18n-59.0/gu-IN.xpi) = 3ffc20afbe2ad5a625079766ac286cb19f1052e874e3825169619364f8c843ba -SIZE (xpi/firefox-i18n-59.0/gu-IN.xpi) = 521802 -SHA256 (xpi/firefox-i18n-59.0/he.xpi) = 89ba85e80cf52e7743763804300a8b2e9c5e55b9d189954cf5d45c796ea77c04 -SIZE (xpi/firefox-i18n-59.0/he.xpi) = 472769 -SHA256 (xpi/firefox-i18n-59.0/hi-IN.xpi) = 16a5e4fbbf1ddd8827afb2382b82b59039fb040b16bd36f9c214ddaa4bd82db0 -SIZE (xpi/firefox-i18n-59.0/hi-IN.xpi) = 524277 -SHA256 (xpi/firefox-i18n-59.0/hr.xpi) = 2966dafaea8224e7e9e599f048fb9725f28704af53bb5f0a311dc9ef485f7325 -SIZE (xpi/firefox-i18n-59.0/hr.xpi) = 459976 -SHA256 (xpi/firefox-i18n-59.0/hsb.xpi) = 1311fdfe6784f73c1f7ead834a301e8818db253393510a0f6bc00e68ec5e4546 -SIZE (xpi/firefox-i18n-59.0/hsb.xpi) = 475939 -SHA256 (xpi/firefox-i18n-59.0/hu.xpi) = c362521efa6a58d80eff294bd1d85939c42c6a29cbba6903a3d00525fd4ca9e0 -SIZE (xpi/firefox-i18n-59.0/hu.xpi) = 476895 -SHA256 (xpi/firefox-i18n-59.0/hy-AM.xpi) = 4b28fd26b21abe6897399a72c4d99c765d3b08f55a1f36c184d33bf83d646668 -SIZE (xpi/firefox-i18n-59.0/hy-AM.xpi) = 508165 -SHA256 (xpi/firefox-i18n-59.0/ia.xpi) = 4c7f6069edb4cfab47bad733621b23d192f4ef666556877d441f224ed5f91dd9 -SIZE (xpi/firefox-i18n-59.0/ia.xpi) = 448827 -SHA256 (xpi/firefox-i18n-59.0/id.xpi) = e11d14366748f021c336254f1557ca62d0bbd13ca308be097b28e68db5a8e02f -SIZE (xpi/firefox-i18n-59.0/id.xpi) = 441951 -SHA256 (xpi/firefox-i18n-59.0/is.xpi) = 8bb7f3fb34c4fa15f297a99f5651f00a99844346a1d4469117c5dea0cd840843 -SIZE (xpi/firefox-i18n-59.0/is.xpi) = 451371 -SHA256 (xpi/firefox-i18n-59.0/it.xpi) = 619b955412cd52f1379a64f9bbc23f78d595dd0139c0097ea3e93c4267eef051 -SIZE (xpi/firefox-i18n-59.0/it.xpi) = 342522 -SHA256 (xpi/firefox-i18n-59.0/ja.xpi) = e32dc966b1164b0a8bc5e8efbf660d8c462c9e50c93a978de88eb3915ab41247 -SIZE (xpi/firefox-i18n-59.0/ja.xpi) = 508146 -SHA256 (xpi/firefox-i18n-59.0/ka.xpi) = d0cb6ec913abd01d5826032716cb12b780e591d273080972d3627ab5c51e2bbd -SIZE (xpi/firefox-i18n-59.0/ka.xpi) = 492567 -SHA256 (xpi/firefox-i18n-59.0/kab.xpi) = 3b56006aa799f9c6e402781843a4774a858532c1f53ba03f5918efa52a3dabac -SIZE (xpi/firefox-i18n-59.0/kab.xpi) = 461838 -SHA256 (xpi/firefox-i18n-59.0/kk.xpi) = c1bbedcb92a43c18c654b098705d513d7663876a30875c322a61657e6046b72c -SIZE (xpi/firefox-i18n-59.0/kk.xpi) = 517582 -SHA256 (xpi/firefox-i18n-59.0/km.xpi) = 9fa77a9347c77f23f52f0129a35fe290bb3d67e261817956ba265f3b68cacbe4 -SIZE (xpi/firefox-i18n-59.0/km.xpi) = 526357 -SHA256 (xpi/firefox-i18n-59.0/kn.xpi) = b62f5139ee71ed4107e878a5fab2e58e1dd910598b85199d1162c67ffc426c85 -SIZE (xpi/firefox-i18n-59.0/kn.xpi) = 527877 -SHA256 (xpi/firefox-i18n-59.0/ko.xpi) = 1c498889480fa8ea9a065ba12b185283edc518d738c6db8ff780098b38bf817a -SIZE (xpi/firefox-i18n-59.0/ko.xpi) = 487659 -SHA256 (xpi/firefox-i18n-59.0/lij.xpi) = 0312ca2b5aecd54f7456d8310542165f005f2e1bddc70bedb824541dcce4b65b -SIZE (xpi/firefox-i18n-59.0/lij.xpi) = 446604 -SHA256 (xpi/firefox-i18n-59.0/lt.xpi) = 7ba6037547b3e5f1d402ce698cd74dfbe6c2eca8013f9ebb9cda820233cca998 -SIZE (xpi/firefox-i18n-59.0/lt.xpi) = 475141 -SHA256 (xpi/firefox-i18n-59.0/lv.xpi) = 85f32e9a7fd03423ae0b7339990c076b84409f95d9dc010089389666f891c1da -SIZE (xpi/firefox-i18n-59.0/lv.xpi) = 463653 -SHA256 (xpi/firefox-i18n-59.0/mai.xpi) = 2cc0ec3dc2a0296d17c0fd71060291caac8981c496acc524b26da7ef4cb62ed3 -SIZE (xpi/firefox-i18n-59.0/mai.xpi) = 499908 -SHA256 (xpi/firefox-i18n-59.0/mk.xpi) = 0ffa52cdc876ceb990eb0b1d729ed5fa5fe92bfe2d65e9d4bfd759758ac216fa -SIZE (xpi/firefox-i18n-59.0/mk.xpi) = 484074 -SHA256 (xpi/firefox-i18n-59.0/ml.xpi) = ac845dba07dbbd76fe37c0bfc4dd5365e15254971f9588377a680e07745fed6f -SIZE (xpi/firefox-i18n-59.0/ml.xpi) = 539733 -SHA256 (xpi/firefox-i18n-59.0/mr.xpi) = 8bafe1760d2a1cf0093256cd019dac2c097e79f1484bfe66a1f3f73076d3b6b3 -SIZE (xpi/firefox-i18n-59.0/mr.xpi) = 517960 -SHA256 (xpi/firefox-i18n-59.0/ms.xpi) = 00c44f109551b23f0a904402573c06edf4d8bf087cc0e91b52b006621883c9b5 -SIZE (xpi/firefox-i18n-59.0/ms.xpi) = 450073 -SHA256 (xpi/firefox-i18n-59.0/my.xpi) = 37708298e5bcf83d9570a5144b633709666b69840315c680bae3f7dd2a186001 -SIZE (xpi/firefox-i18n-59.0/my.xpi) = 511892 -SHA256 (xpi/firefox-i18n-59.0/nb-NO.xpi) = 90c61e5724b618b5fdfc65fc37d60686cd374f94a6567d6aa290c8733eb45c86 -SIZE (xpi/firefox-i18n-59.0/nb-NO.xpi) = 450275 -SHA256 (xpi/firefox-i18n-59.0/ne-NP.xpi) = d6a3aebbb11faca5a07794648f13946a84807abb7325176b0da8b51e2c53f251 -SIZE (xpi/firefox-i18n-59.0/ne-NP.xpi) = 509175 -SHA256 (xpi/firefox-i18n-59.0/nl.xpi) = 95cdc03247c2e59313c59bf819401fcf140bcf556367755f79207ce38345c123 -SIZE (xpi/firefox-i18n-59.0/nl.xpi) = 458127 -SHA256 (xpi/firefox-i18n-59.0/nn-NO.xpi) = 87fa01ddab0d6545cced17229187b63bead047549ea7c73ba3947f9a555a8dd7 -SIZE (xpi/firefox-i18n-59.0/nn-NO.xpi) = 451469 -SHA256 (xpi/firefox-i18n-59.0/or.xpi) = a00da5f2a4b7c13947a27b526c0d35673eff42d9cab0979c6670ca54ee8f68c7 -SIZE (xpi/firefox-i18n-59.0/or.xpi) = 493180 -SHA256 (xpi/firefox-i18n-59.0/pa-IN.xpi) = e43dd78383255b594d8078c38d46e872565304427ab7bbeca47458477a34d4ef -SIZE (xpi/firefox-i18n-59.0/pa-IN.xpi) = 492418 -SHA256 (xpi/firefox-i18n-59.0/pl.xpi) = 323c5439304f6fbed7db49ae96ab513071551ef87e12bc11103b5b4be0d07289 -SIZE (xpi/firefox-i18n-59.0/pl.xpi) = 358509 -SHA256 (xpi/firefox-i18n-59.0/pt-BR.xpi) = 21bde4b1666858fb65682147fa235fe9688206a2e0d492affd019b3fd99e2c64 -SIZE (xpi/firefox-i18n-59.0/pt-BR.xpi) = 455913 -SHA256 (xpi/firefox-i18n-59.0/pt-PT.xpi) = d9008a9b59a265702ad5915149fa9960151bdd0699bafaf8c383ece97d182d9f -SIZE (xpi/firefox-i18n-59.0/pt-PT.xpi) = 459329 -SHA256 (xpi/firefox-i18n-59.0/rm.xpi) = 88192d2d2b3824d45ff862ba285ce36499ae15daaf89d21037a8ebfc0500fe61 -SIZE (xpi/firefox-i18n-59.0/rm.xpi) = 449756 -SHA256 (xpi/firefox-i18n-59.0/ro.xpi) = 6fe642ecbb2d3f2c181fc8f1194c1b08cf1d6d1f76b8f205ffdfbab650f8827a -SIZE (xpi/firefox-i18n-59.0/ro.xpi) = 453401 -SHA256 (xpi/firefox-i18n-59.0/ru.xpi) = 9905c2249e72bf8be629c59915298598ac6e63b90ba95ceee0795d077a4ad09b -SIZE (xpi/firefox-i18n-59.0/ru.xpi) = 526521 -SHA256 (xpi/firefox-i18n-59.0/si.xpi) = 9608ae50405741a544270d2256035a8ae6484767fe737db8b98ac296ccdcda67 -SIZE (xpi/firefox-i18n-59.0/si.xpi) = 492585 -SHA256 (xpi/firefox-i18n-59.0/sk.xpi) = ee8cc67c33edccc7b7291496fb20f2f850f6934f67a0694b1bb19774db254eb1 -SIZE (xpi/firefox-i18n-59.0/sk.xpi) = 480811 -SHA256 (xpi/firefox-i18n-59.0/sl.xpi) = 13a9308e3d93ecfb873f4fb9a4a6f14b77ac37a730c0700e7c0296ab81250de7 -SIZE (xpi/firefox-i18n-59.0/sl.xpi) = 458823 -SHA256 (xpi/firefox-i18n-59.0/son.xpi) = 557087d226148a636c89313de04b7dfad71bca392dde28236163ca556f9322be -SIZE (xpi/firefox-i18n-59.0/son.xpi) = 446398 -SHA256 (xpi/firefox-i18n-59.0/sq.xpi) = 492cbf457ad02ef8efdfc546207a2d6c9ea07df57741dcebf89bae235438ca55 -SIZE (xpi/firefox-i18n-59.0/sq.xpi) = 464461 -SHA256 (xpi/firefox-i18n-59.0/sr.xpi) = 30dc2cc54bd0bb4c88bd4ec016eba9285fc1d14d27417b402c2a44967baa4fd5 -SIZE (xpi/firefox-i18n-59.0/sr.xpi) = 486176 -SHA256 (xpi/firefox-i18n-59.0/sv-SE.xpi) = 69fc218bcf153772dbeb1000dc35849210d00ede91537b948b27876ec03ffddf -SIZE (xpi/firefox-i18n-59.0/sv-SE.xpi) = 458658 -SHA256 (xpi/firefox-i18n-59.0/ta.xpi) = d55bc8f1458d96d548d7ef3e01a1cec3dbd9c4b62f8dd539658d4ad90129fb58 -SIZE (xpi/firefox-i18n-59.0/ta.xpi) = 512841 -SHA256 (xpi/firefox-i18n-59.0/te.xpi) = 25368ecdd33ed9ec4ad5fd95f510afffc61740f2bbb33c814ec3a6863673dc39 -SIZE (xpi/firefox-i18n-59.0/te.xpi) = 527082 -SHA256 (xpi/firefox-i18n-59.0/th.xpi) = a7e8951f27666735eb6e2bb526c069ae26a7bf6ed2dde12c0b47a9adacc1c200 -SIZE (xpi/firefox-i18n-59.0/th.xpi) = 498542 -SHA256 (xpi/firefox-i18n-59.0/tr.xpi) = 50728d089f891362a4b1f0d036edbc556e8dbe922c2abdbb89ffe45d57d275f4 -SIZE (xpi/firefox-i18n-59.0/tr.xpi) = 463592 -SHA256 (xpi/firefox-i18n-59.0/uk.xpi) = 7b500089a303e93761054b3cda4e4a188ebe6ccc2a120e5c90fd5d4e7cf28cfe -SIZE (xpi/firefox-i18n-59.0/uk.xpi) = 516924 -SHA256 (xpi/firefox-i18n-59.0/ur.xpi) = 9cc9ece7f94e13894651b4c342d226552e8544e8488e447da6c9f1ddf8884d31 -SIZE (xpi/firefox-i18n-59.0/ur.xpi) = 507378 -SHA256 (xpi/firefox-i18n-59.0/uz.xpi) = 4ae7546f790afe6b931d137531a6ef6a7287f1959ed20758c62624e23d75fa53 -SIZE (xpi/firefox-i18n-59.0/uz.xpi) = 456922 -SHA256 (xpi/firefox-i18n-59.0/vi.xpi) = 778ee06852609372e0303a5354b6e8b1f2a22e999cbeedba6bf9d8d303c05bf9 -SIZE (xpi/firefox-i18n-59.0/vi.xpi) = 470067 -SHA256 (xpi/firefox-i18n-59.0/xh.xpi) = 41dfddbd064d2da408b93409bfacafd32226cd086a3da5e603a5a3fba4891656 -SIZE (xpi/firefox-i18n-59.0/xh.xpi) = 460770 -SHA256 (xpi/firefox-i18n-59.0/zh-CN.xpi) = 03679d815dee18016aae33fba44eafe8116d025c5f5d99b9efbba29d65886b8f -SIZE (xpi/firefox-i18n-59.0/zh-CN.xpi) = 483447 -SHA256 (xpi/firefox-i18n-59.0/zh-TW.xpi) = 40253d142f875a27e086c34737e0c437939cea29011160c7d7b252ad1f34f9d2 -SIZE (xpi/firefox-i18n-59.0/zh-TW.xpi) = 477087 +TIMESTAMP = 1520432739 +SHA256 (xpi/firefox-i18n-60.0b2/ach.xpi) = 549dddc28203d1d9305ce994fc381711ce4fbed591bf8e81f2e7d827113db4d5 +SIZE (xpi/firefox-i18n-60.0b2/ach.xpi) = 449090 +SHA256 (xpi/firefox-i18n-60.0b2/af.xpi) = f651b2abdb84a7d11cffab8dcf62f37491d3817f5726226f8c3736ff106c527f +SIZE (xpi/firefox-i18n-60.0b2/af.xpi) = 446394 +SHA256 (xpi/firefox-i18n-60.0b2/an.xpi) = 059f8796c4f6ab4a1b3bf05e207b8ef90f2cce1218ec2392c032e93cc73042cc +SIZE (xpi/firefox-i18n-60.0b2/an.xpi) = 473114 +SHA256 (xpi/firefox-i18n-60.0b2/ar.xpi) = 2a38a633aa50a6a6f2bb76060f6e479ad2a098a326aa74bed6f15fb95615b31c +SIZE (xpi/firefox-i18n-60.0b2/ar.xpi) = 497449 +SHA256 (xpi/firefox-i18n-60.0b2/as.xpi) = d52da64632f045a5544e21693e26498457ed064bc95479c705a6a86789521349 +SIZE (xpi/firefox-i18n-60.0b2/as.xpi) = 490528 +SHA256 (xpi/firefox-i18n-60.0b2/ast.xpi) = 17a0af0a95fa2040d3f26cd449c92bdac51ccd823deee13933be54031ae0b8b2 +SIZE (xpi/firefox-i18n-60.0b2/ast.xpi) = 464535 +SHA256 (xpi/firefox-i18n-60.0b2/az.xpi) = 737639e42ea7a4ee34de4fade44db8d14740f94ee3510529f1a99b77bd85f857 +SIZE (xpi/firefox-i18n-60.0b2/az.xpi) = 474699 +SHA256 (xpi/firefox-i18n-60.0b2/be.xpi) = cbbd91eb437763799a17859bf339e96af3bfdbc26f397212182e0910bb80f047 +SIZE (xpi/firefox-i18n-60.0b2/be.xpi) = 526494 +SHA256 (xpi/firefox-i18n-60.0b2/bg.xpi) = 183042ae5dde5703cefc04e436005e29e4379d6701d13e64f564ed2cab83fe09 +SIZE (xpi/firefox-i18n-60.0b2/bg.xpi) = 518924 +SHA256 (xpi/firefox-i18n-60.0b2/bn-BD.xpi) = 0e0b99ba805666a88f5352bd1003c21ae5e73b48e1c990b572bb57f531d7b286 +SIZE (xpi/firefox-i18n-60.0b2/bn-BD.xpi) = 536619 +SHA256 (xpi/firefox-i18n-60.0b2/bn-IN.xpi) = 3771ee7e2423b2915b1f116d9ceb02eb2124d0d7e57560cc79ef436c4d97f5f8 +SIZE (xpi/firefox-i18n-60.0b2/bn-IN.xpi) = 521938 +SHA256 (xpi/firefox-i18n-60.0b2/br.xpi) = 33b6d07d848d8a57006d36f1e211ba6479d27c3eadd0780b4a2c8f631e133915 +SIZE (xpi/firefox-i18n-60.0b2/br.xpi) = 461633 +SHA256 (xpi/firefox-i18n-60.0b2/bs.xpi) = 93f5937844ef793eefca086613a7c20f0d56e9053f931e3d62872afd968def47 +SIZE (xpi/firefox-i18n-60.0b2/bs.xpi) = 468560 +SHA256 (xpi/firefox-i18n-60.0b2/ca.xpi) = 4a83d7700e5919001766c0df8f04cac8ff307810370a7bddfb472d8f28cc62c9 +SIZE (xpi/firefox-i18n-60.0b2/ca.xpi) = 475509 +SHA256 (xpi/firefox-i18n-60.0b2/cak.xpi) = bafdb85ba5f777de7c6333523a9f259e50ded7e94e9a7208add22663e474c0fb +SIZE (xpi/firefox-i18n-60.0b2/cak.xpi) = 485064 +SHA256 (xpi/firefox-i18n-60.0b2/cs.xpi) = e4536757219e593c0684ee1a52276a50fec15282a518a3c583452231b1c7c9ad +SIZE (xpi/firefox-i18n-60.0b2/cs.xpi) = 480622 +SHA256 (xpi/firefox-i18n-60.0b2/cy.xpi) = 43b1a490160d42476d0b7081ad6222f843f25026336c707bfd890805d74c8192 +SIZE (xpi/firefox-i18n-60.0b2/cy.xpi) = 465635 +SHA256 (xpi/firefox-i18n-60.0b2/da.xpi) = d9526782aebc6a9046508922a9a6bf197b9ab2ec28d26874097aae7d047b4444 +SIZE (xpi/firefox-i18n-60.0b2/da.xpi) = 457683 +SHA256 (xpi/firefox-i18n-60.0b2/de.xpi) = 37b685289daf42a72aae47e3c2bf401236aec3e48a93d301feac659a18b5ebf5 +SIZE (xpi/firefox-i18n-60.0b2/de.xpi) = 478046 +SHA256 (xpi/firefox-i18n-60.0b2/dsb.xpi) = 01f70dac6ac7204b99dbc7ab8b715a87743865fc3ca6f199fb512bbaa2582e3f +SIZE (xpi/firefox-i18n-60.0b2/dsb.xpi) = 488763 +SHA256 (xpi/firefox-i18n-60.0b2/el.xpi) = e211e0e1d06c30b966f85c49c4bc5ad7e75f7375669ed0136efa1ac78e117890 +SIZE (xpi/firefox-i18n-60.0b2/el.xpi) = 543012 +SHA256 (xpi/firefox-i18n-60.0b2/en-GB.xpi) = 7e81107e8c2e74f2f8d6749a21f16878a3db6f4c1b86ceb34501433ec8f05014 +SIZE (xpi/firefox-i18n-60.0b2/en-GB.xpi) = 445086 +SHA256 (xpi/firefox-i18n-60.0b2/en-US.xpi) = 785f72065cab035368a0bd76f2a6df6808d55e0bd17f68e5a45325dfccdcb407 +SIZE (xpi/firefox-i18n-60.0b2/en-US.xpi) = 441494 +SHA256 (xpi/firefox-i18n-60.0b2/en-ZA.xpi) = c52aec301af2815de702d44a36c50a2be639bf68680ec140aab898305a320bff +SIZE (xpi/firefox-i18n-60.0b2/en-ZA.xpi) = 434598 +SHA256 (xpi/firefox-i18n-60.0b2/eo.xpi) = 3727f43f993c229eca69c115cb06dbe5d718c788c111c450cc7ad033d7114a31 +SIZE (xpi/firefox-i18n-60.0b2/eo.xpi) = 462981 +SHA256 (xpi/firefox-i18n-60.0b2/es-AR.xpi) = 7c08485084d4f0bbf1c24a13cfadbe803c7be5a3fbcff413a5d73864291c1083 +SIZE (xpi/firefox-i18n-60.0b2/es-AR.xpi) = 472501 +SHA256 (xpi/firefox-i18n-60.0b2/es-CL.xpi) = c05fd2fb4ac0b2b389221d2dbd2fa0cc178ee79d0cfcedd1f225085f15e959fe +SIZE (xpi/firefox-i18n-60.0b2/es-CL.xpi) = 475502 +SHA256 (xpi/firefox-i18n-60.0b2/es-ES.xpi) = 71e5b240cba1f4568f4ca20c72e20b286d63b0fe4ecff1ed653dc41bc35f16c4 +SIZE (xpi/firefox-i18n-60.0b2/es-ES.xpi) = 359479 +SHA256 (xpi/firefox-i18n-60.0b2/es-MX.xpi) = 685946d64122f9f035ec5e8f368ce3da49e0863c7e5e4679f37ff5df369f73ca +SIZE (xpi/firefox-i18n-60.0b2/es-MX.xpi) = 476958 +SHA256 (xpi/firefox-i18n-60.0b2/et.xpi) = 4290059a1dcf3ecc74c7761ce0143ce2f95d4023724609c74ab7c4ebd8dad6eb +SIZE (xpi/firefox-i18n-60.0b2/et.xpi) = 455969 +SHA256 (xpi/firefox-i18n-60.0b2/eu.xpi) = 9ba674684910eb87ee715aed2a0de7720ef906e0cede35fa176155faf24eca66 +SIZE (xpi/firefox-i18n-60.0b2/eu.xpi) = 464909 +SHA256 (xpi/firefox-i18n-60.0b2/fa.xpi) = 352ed4d806025413324975a83d7be487a4afa9bf05df3157ccc56b69c74d3ef5 +SIZE (xpi/firefox-i18n-60.0b2/fa.xpi) = 519569 +SHA256 (xpi/firefox-i18n-60.0b2/ff.xpi) = 538203e58720cd17db3be93298874f52463974b73a742f76479b701940f19d59 +SIZE (xpi/firefox-i18n-60.0b2/ff.xpi) = 465513 +SHA256 (xpi/firefox-i18n-60.0b2/fi.xpi) = 512fe170961119588d20fac84a68112ddabfc94607c8bfe562d94e83a4bc7efc +SIZE (xpi/firefox-i18n-60.0b2/fi.xpi) = 456106 +SHA256 (xpi/firefox-i18n-60.0b2/fr.xpi) = dddc8c936ec3cb895058ed0c96c75e838cf46fb017f22fbd4e432c1314a9b3bd +SIZE (xpi/firefox-i18n-60.0b2/fr.xpi) = 484398 +SHA256 (xpi/firefox-i18n-60.0b2/fy-NL.xpi) = 6547fbce778ea7a5035e6b0a0c86394af24627261cc0537d26358859eaf65341 +SIZE (xpi/firefox-i18n-60.0b2/fy-NL.xpi) = 473502 +SHA256 (xpi/firefox-i18n-60.0b2/ga-IE.xpi) = 3b5bf250053f987dfd2b31947304c00c2b616fc92d25eec7a4204db59a7edf7f +SIZE (xpi/firefox-i18n-60.0b2/ga-IE.xpi) = 483197 +SHA256 (xpi/firefox-i18n-60.0b2/gd.xpi) = 574edc4c8e0a95a673be40e15c450a5d3ff95ff38ab25b61cae8a1dc41be11c6 +SIZE (xpi/firefox-i18n-60.0b2/gd.xpi) = 472666 +SHA256 (xpi/firefox-i18n-60.0b2/gl.xpi) = 9947b0e5944747bbcffb27e22b78b41625ec43ae7dd848d13a035f9156610674 +SIZE (xpi/firefox-i18n-60.0b2/gl.xpi) = 449580 +SHA256 (xpi/firefox-i18n-60.0b2/gn.xpi) = 005de91c12db6c3ca749831386d3e6f19d434fd839e4698e39b0c8e55a7a2e19 +SIZE (xpi/firefox-i18n-60.0b2/gn.xpi) = 480555 +SHA256 (xpi/firefox-i18n-60.0b2/gu-IN.xpi) = ce9f1814d78b66304764ae5a1e5aef53096283f93d215e367d244a7001b40a97 +SIZE (xpi/firefox-i18n-60.0b2/gu-IN.xpi) = 532408 +SHA256 (xpi/firefox-i18n-60.0b2/he.xpi) = 4afbe27061e2d73688e9491826536a61af299f50102ca112dba19ec53e475c53 +SIZE (xpi/firefox-i18n-60.0b2/he.xpi) = 484073 +SHA256 (xpi/firefox-i18n-60.0b2/hi-IN.xpi) = 7377f4fba4db1280476ded1acabc9d90e077af5329846c5645d76b4dc6c91748 +SIZE (xpi/firefox-i18n-60.0b2/hi-IN.xpi) = 535739 +SHA256 (xpi/firefox-i18n-60.0b2/hr.xpi) = 65d7a46d5244335d5aa6f37565a6a1afef44cd10efe696ec4ffd3a4141205bd5 +SIZE (xpi/firefox-i18n-60.0b2/hr.xpi) = 471318 +SHA256 (xpi/firefox-i18n-60.0b2/hsb.xpi) = 2e468ed6915531d4491f27136974c6f6ff5ced0455d8254028d349763cb0267d +SIZE (xpi/firefox-i18n-60.0b2/hsb.xpi) = 485668 +SHA256 (xpi/firefox-i18n-60.0b2/hu.xpi) = f140fe6ae54a1afdd277a9c95d2f026d59ee8a122b103547ad6689c29b1fd940 +SIZE (xpi/firefox-i18n-60.0b2/hu.xpi) = 485990 +SHA256 (xpi/firefox-i18n-60.0b2/hy-AM.xpi) = 8d86769cff8371158f9d0f7effdf21d6f775ac073d8f5090944b724d38a422ff +SIZE (xpi/firefox-i18n-60.0b2/hy-AM.xpi) = 519760 +SHA256 (xpi/firefox-i18n-60.0b2/ia.xpi) = ee3e285752beb85777053d59fdb8a68197a48cba2d8639dc4c99a095eabcf4d6 +SIZE (xpi/firefox-i18n-60.0b2/ia.xpi) = 459870 +SHA256 (xpi/firefox-i18n-60.0b2/id.xpi) = d3a0e0acd8514c61669510023ffc7a5f3f4fa9fd77e8152ed6bbbda9b7372868 +SIZE (xpi/firefox-i18n-60.0b2/id.xpi) = 452366 +SHA256 (xpi/firefox-i18n-60.0b2/is.xpi) = 6f317b4e2aec0158ade5e5006b9dda9c475d2dbb8e907bfc9621286351964abb +SIZE (xpi/firefox-i18n-60.0b2/is.xpi) = 462502 +SHA256 (xpi/firefox-i18n-60.0b2/it.xpi) = 467b86575b862c8d32c4b94ec4da8b8e45aa0e39f68ca445d3ecd3a6f721d807 +SIZE (xpi/firefox-i18n-60.0b2/it.xpi) = 352060 +SHA256 (xpi/firefox-i18n-60.0b2/ja.xpi) = adbe3d9abdb0252a108d3520a39064b800d9575c0a784210270f1b9089fbabca +SIZE (xpi/firefox-i18n-60.0b2/ja.xpi) = 518877 +SHA256 (xpi/firefox-i18n-60.0b2/ka.xpi) = 054ff2854756f46568974a39231efe3c8b5b91b71c7ebb49583347dee634e83d +SIZE (xpi/firefox-i18n-60.0b2/ka.xpi) = 502601 +SHA256 (xpi/firefox-i18n-60.0b2/kab.xpi) = 6dd3d4c4e98f04180274e3255e8117c59254912ef7e9055e75e0d749efe7bf7c +SIZE (xpi/firefox-i18n-60.0b2/kab.xpi) = 471615 +SHA256 (xpi/firefox-i18n-60.0b2/kk.xpi) = 08db6f8add96f8bef331ec2a31e8c84f0c6f5289a282de3b6177e5a091bc7086 +SIZE (xpi/firefox-i18n-60.0b2/kk.xpi) = 528173 +SHA256 (xpi/firefox-i18n-60.0b2/km.xpi) = 86f456a26c4b018816f2703388c1d6535440f5e6d14e8ebcf08c944d3bb9d474 +SIZE (xpi/firefox-i18n-60.0b2/km.xpi) = 536932 +SHA256 (xpi/firefox-i18n-60.0b2/kn.xpi) = fe63f6cacab0c61a11d6267e89254b5557c15dc93fc9fe9bb4d2817c4c533d3d +SIZE (xpi/firefox-i18n-60.0b2/kn.xpi) = 537586 +SHA256 (xpi/firefox-i18n-60.0b2/ko.xpi) = 6fefe78419ac5b72b7aca598ed289f40ab7d1f6a52fb827a39a21db4cd5f4e8a +SIZE (xpi/firefox-i18n-60.0b2/ko.xpi) = 496535 +SHA256 (xpi/firefox-i18n-60.0b2/lij.xpi) = 5ac0991f943c2bc2127a49d22219a3b433826e9ea63dc9f1b4c15eb0a4c9bbf8 +SIZE (xpi/firefox-i18n-60.0b2/lij.xpi) = 457056 +SHA256 (xpi/firefox-i18n-60.0b2/lt.xpi) = 2f113a23f1744bf822fbe30817ecf9fcf0a6702034bc0eeb05c1271dbb338e34 +SIZE (xpi/firefox-i18n-60.0b2/lt.xpi) = 484070 +SHA256 (xpi/firefox-i18n-60.0b2/lv.xpi) = 0d7816b13aad0692deab0c00bf6b29fac49544021b746f6814acf147a978b29b +SIZE (xpi/firefox-i18n-60.0b2/lv.xpi) = 475034 +SHA256 (xpi/firefox-i18n-60.0b2/mai.xpi) = b7776297987d60df1cb4866b95f02ddb44c97c2b9a33665441517ccc98fc9e43 +SIZE (xpi/firefox-i18n-60.0b2/mai.xpi) = 507542 +SHA256 (xpi/firefox-i18n-60.0b2/mk.xpi) = df2f7c07c3869182d910ddb86af55151d536caf05d3482921ab272e5c0d4e7b0 +SIZE (xpi/firefox-i18n-60.0b2/mk.xpi) = 492047 +SHA256 (xpi/firefox-i18n-60.0b2/ml.xpi) = c8e6f4fb2e0e51d36b6a92de063c08d897628c0b20a60f02bff9798b2bc2ca60 +SIZE (xpi/firefox-i18n-60.0b2/ml.xpi) = 550569 +SHA256 (xpi/firefox-i18n-60.0b2/mr.xpi) = 6ecc647bc64388aeeb5f32ac6dd9c4fd65a94de96534187c123704248fc71dfd +SIZE (xpi/firefox-i18n-60.0b2/mr.xpi) = 529674 +SHA256 (xpi/firefox-i18n-60.0b2/ms.xpi) = 93417e8b0b409d7d82b9d0c790a8541cbec8758fe7882027fcdbcf04c2938c99 +SIZE (xpi/firefox-i18n-60.0b2/ms.xpi) = 459751 +SHA256 (xpi/firefox-i18n-60.0b2/my.xpi) = 2af1938050efed9f5022c1fc9bdc946921d2c6ed1ffbf0e7cd96ab0fff783b9f +SIZE (xpi/firefox-i18n-60.0b2/my.xpi) = 522045 +SHA256 (xpi/firefox-i18n-60.0b2/nb-NO.xpi) = 69b5e72319dae0ca4e78c2feec3db1d6249437497a172cf4330245b21a462803 +SIZE (xpi/firefox-i18n-60.0b2/nb-NO.xpi) = 459984 +SHA256 (xpi/firefox-i18n-60.0b2/ne-NP.xpi) = b48dc523ee4d20b63ca75b8f3fc96dcfd7278d91bcff30cb6f99aa3c2a0b1377 +SIZE (xpi/firefox-i18n-60.0b2/ne-NP.xpi) = 520386 +SHA256 (xpi/firefox-i18n-60.0b2/nl.xpi) = 09dafbc4784f5549b1ef13a592095e9ef10f0b38a579cffbe56c6d2e48d790aa +SIZE (xpi/firefox-i18n-60.0b2/nl.xpi) = 467152 +SHA256 (xpi/firefox-i18n-60.0b2/nn-NO.xpi) = d6bdaef137ca7ec4c2f5fd3a88faae0c4ea53c982ab74e4d4a202563df303943 +SIZE (xpi/firefox-i18n-60.0b2/nn-NO.xpi) = 460479 +SHA256 (xpi/firefox-i18n-60.0b2/oc.xpi) = dbc4bd23e387d0783de5a324df647bd4cd5a6a158e15dec08a0f7eaffc4ec256 +SIZE (xpi/firefox-i18n-60.0b2/oc.xpi) = 477201 +SHA256 (xpi/firefox-i18n-60.0b2/or.xpi) = 1359d8ed163f48984309754fb89e74c693a78852d66eff45e4bacc88e10576ad +SIZE (xpi/firefox-i18n-60.0b2/or.xpi) = 500626 +SHA256 (xpi/firefox-i18n-60.0b2/pa-IN.xpi) = ffaa2b343cb628507905b2741ca518c2cb222ea498831662a3c6e190be8c2d03 +SIZE (xpi/firefox-i18n-60.0b2/pa-IN.xpi) = 503120 +SHA256 (xpi/firefox-i18n-60.0b2/pl.xpi) = 001503aa9c381c6badb52f16e4dbc109e133aae4ec835dab077781f88e3f9a5f +SIZE (xpi/firefox-i18n-60.0b2/pl.xpi) = 369616 +SHA256 (xpi/firefox-i18n-60.0b2/pt-BR.xpi) = abf591823004510a6b4e9ab091972518581c3e755e94e538006bb43a271ddeff +SIZE (xpi/firefox-i18n-60.0b2/pt-BR.xpi) = 465263 +SHA256 (xpi/firefox-i18n-60.0b2/pt-PT.xpi) = 27ef71ed4121fd42931a85b2b86051c4db5b77ad7722164a5774258668eaea24 +SIZE (xpi/firefox-i18n-60.0b2/pt-PT.xpi) = 468269 +SHA256 (xpi/firefox-i18n-60.0b2/rm.xpi) = af51ff46f0c0b3912064a6490394eeef740c40e5bfb7c825f71da9663d78e2eb +SIZE (xpi/firefox-i18n-60.0b2/rm.xpi) = 461202 +SHA256 (xpi/firefox-i18n-60.0b2/ro.xpi) = a05bcd830bad022ca9cb4cd29bdc43072cc6ebc5aec089f74ba752aa3d0209a7 +SIZE (xpi/firefox-i18n-60.0b2/ro.xpi) = 464776 +SHA256 (xpi/firefox-i18n-60.0b2/ru.xpi) = 8a0e831019164074986d9d64fd93ef13269ba4284eab51b40d6abbff3880b429 +SIZE (xpi/firefox-i18n-60.0b2/ru.xpi) = 536435 +SHA256 (xpi/firefox-i18n-60.0b2/si.xpi) = 349712695adf495a12c97cc6162a364dac445bffdc6c8efd11b64141d39eb6cb +SIZE (xpi/firefox-i18n-60.0b2/si.xpi) = 502052 +SHA256 (xpi/firefox-i18n-60.0b2/sk.xpi) = 42a99e56e26dee8ed94bb473a0d429ea628996845cbb35edbc356919b59f91c6 +SIZE (xpi/firefox-i18n-60.0b2/sk.xpi) = 489920 +SHA256 (xpi/firefox-i18n-60.0b2/sl.xpi) = 2df3be84800ff89d753e2410bcc75e0ebe49e0b33c1518c51e96a1925143ffc8 +SIZE (xpi/firefox-i18n-60.0b2/sl.xpi) = 468784 +SHA256 (xpi/firefox-i18n-60.0b2/son.xpi) = 0806aea637720be9350557a563166d4c624ad9b887e196627654a2c0227ecfbb +SIZE (xpi/firefox-i18n-60.0b2/son.xpi) = 456084 +SHA256 (xpi/firefox-i18n-60.0b2/sq.xpi) = 630c01008c219b121508cf31a174eeef57ed81c5ff9bd429835dabc6e57a9c52 +SIZE (xpi/firefox-i18n-60.0b2/sq.xpi) = 476118 +SHA256 (xpi/firefox-i18n-60.0b2/sr.xpi) = 5a021aea26cd7619306ed80acfe4ec7850b99b41c4337cbb37dc023ff61f1909 +SIZE (xpi/firefox-i18n-60.0b2/sr.xpi) = 495336 +SHA256 (xpi/firefox-i18n-60.0b2/sv-SE.xpi) = 1137f06cd3456adee9e4a5231c4f514f6058487aae02c207bbebe553739e48c2 +SIZE (xpi/firefox-i18n-60.0b2/sv-SE.xpi) = 467993 +SHA256 (xpi/firefox-i18n-60.0b2/ta.xpi) = 2e21a5e68c1c5c6a48a8fe4557d95352d0e840dfe89a88fe0d40ad04f9fe3a83 +SIZE (xpi/firefox-i18n-60.0b2/ta.xpi) = 524089 +SHA256 (xpi/firefox-i18n-60.0b2/te.xpi) = aaa5184d4c123dbc014f744a9a7b35d44f73b58495133b93075a8bd3e8e1edcc +SIZE (xpi/firefox-i18n-60.0b2/te.xpi) = 537600 +SHA256 (xpi/firefox-i18n-60.0b2/th.xpi) = 827f491959a495ecfa11394dc7e007e85f4d05de2aa7eabf24d3598c82369810 +SIZE (xpi/firefox-i18n-60.0b2/th.xpi) = 509974 +SHA256 (xpi/firefox-i18n-60.0b2/tr.xpi) = 554e436af3db110d168b5825876cea060ae3b8ff5c18d257a333e7b82ca0c6f4 +SIZE (xpi/firefox-i18n-60.0b2/tr.xpi) = 473604 +SHA256 (xpi/firefox-i18n-60.0b2/uk.xpi) = ab52ce6f330ec911a2788bc97871f410bcf2552787112a61020d6ea8c6f2d244 +SIZE (xpi/firefox-i18n-60.0b2/uk.xpi) = 526375 +SHA256 (xpi/firefox-i18n-60.0b2/ur.xpi) = 851dadfe1565b5d1089f4bfe6285b431fe9fd2517b413a7658d367d23230fc24 +SIZE (xpi/firefox-i18n-60.0b2/ur.xpi) = 516748 +SHA256 (xpi/firefox-i18n-60.0b2/uz.xpi) = 0e3d0cd0e7b8b839bbb84b42ab25f71b2ee7309fff37ad7156c1b778cf141b76 +SIZE (xpi/firefox-i18n-60.0b2/uz.xpi) = 467092 +SHA256 (xpi/firefox-i18n-60.0b2/vi.xpi) = 34fb0fd53dcb986e0d1925ef1fd0b6ea1337b41312e5172cc3e25ec6cb2aa362 +SIZE (xpi/firefox-i18n-60.0b2/vi.xpi) = 480501 +SHA256 (xpi/firefox-i18n-60.0b2/xh.xpi) = dbb4a54b47fde3795083112451c49af0c2fb3c4a2ea919246a29ae521a023727 +SIZE (xpi/firefox-i18n-60.0b2/xh.xpi) = 470331 +SHA256 (xpi/firefox-i18n-60.0b2/zh-CN.xpi) = 878d908213acbbbc0e718842998d0d7beb479946ba157617802e53dd01123c9f +SIZE (xpi/firefox-i18n-60.0b2/zh-CN.xpi) = 492500 +SHA256 (xpi/firefox-i18n-60.0b2/zh-TW.xpi) = 49c06de4d7d2e925343a4409ef30977cf55d8844e358bce97df9b1f929602062 +SIZE (xpi/firefox-i18n-60.0b2/zh-TW.xpi) = 493124 diff --git a/www/firefox/Makefile b/www/firefox/Makefile index 3bb1ac468133..a3ffa9fbe4f2 100644 --- a/www/firefox/Makefile +++ b/www/firefox/Makefile @@ -2,28 +2,27 @@ # $FreeBSD$ PORTNAME= firefox -DISTVERSION= 59.0 -PORTREVISION= 3 +DISTVERSION= 60.0b2 PORTEPOCH= 1 CATEGORIES= www ipv6 -MASTER_SITES= https://hg.mozilla.org/releases/mozilla-release/archive/ -DISTNAME= ${MASTER_SITES:M*hg*:S,/archive/,,:T}-e9128973a480c8aedf3a2e1c67d3e168613fa17c +MASTER_SITES= https://hg.mozilla.org/releases/mozilla-beta/archive/ +DISTNAME= ${MASTER_SITES:M*hg*:S,/archive/,,:T}-0938d48917b73d31fa8bfa4a7c3ccd79a3f4b3f5 DISTFILES= ${DISTNAME:C/.*-//}${EXTRACT_SUFX} DIST_SUBDIR= firefox MAINTAINER= gecko@FreeBSD.org COMMENT= Web browser based on the browser portion of Mozilla -BUILD_DEPENDS= nspr>=4.18:devel/nspr \ - nss>=3.35:security/nss \ +BUILD_DEPENDS= nspr>=4.19:devel/nspr \ + nss>=3.36:security/nss \ icu>=59.1,1:devel/icu \ libevent>=2.1.8:devel/libevent \ - harfbuzz>=1.7.4:print/harfbuzz \ - graphite2>=1.3.10:graphics/graphite2 \ + harfbuzz>=1.7.6:print/harfbuzz \ + graphite2>=1.3.11:graphics/graphite2 \ png>=1.6.34:graphics/png \ libvorbis>=1.3.5,3:audio/libvorbis \ libvpx>=1.5.0:multimedia/libvpx \ - sqlite3>=3.21.0:databases/sqlite3 \ + sqlite3>=3.22.0:databases/sqlite3 \ ${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \ v4l_compat>0:multimedia/v4l_compat \ autoconf-2.13:devel/autoconf213 \ diff --git a/www/firefox/distinfo b/www/firefox/distinfo index 3d92bfdc8cfc..5cc5abd99f07 100644 --- a/www/firefox/distinfo +++ b/www/firefox/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1520456550 -SHA256 (firefox/e9128973a480c8aedf3a2e1c67d3e168613fa17c.tar.bz2) = bd6c5a7635009cb1a95824287b9751f1012f8e13bec057811d882e0db75e1258 -SIZE (firefox/e9128973a480c8aedf3a2e1c67d3e168613fa17c.tar.bz2) = 304977546 +TIMESTAMP = 1520432739 +SHA256 (firefox/0938d48917b73d31fa8bfa4a7c3ccd79a3f4b3f5.tar.bz2) = 56a55346d8abb911dab2d1d53651c60a415b99e4a54b356ac28f3420e7ca19e1 +SIZE (firefox/0938d48917b73d31fa8bfa4a7c3ccd79a3f4b3f5.tar.bz2) = 329655598 diff --git a/www/firefox/files/patch-a-gyp-webrtc b/www/firefox/files/patch-a-gyp-webrtc new file mode 100644 index 000000000000..3735d6c3755d --- /dev/null +++ b/www/firefox/files/patch-a-gyp-webrtc @@ -0,0 +1,21490 @@ +Revert bug 1393119, bug 1429819, bug 1436959 to unbreak WebRTC + +diff --git media/webrtc/moz.build media/webrtc/moz.build +index 3aeb939a4e4b..115831cc69d5 100644 +--- media/webrtc/moz.build ++++ media/webrtc/moz.build +@@ -11,7 +11,6 @@ with Files("signaling/**"): + BUG_COMPONENT = ("Core", "WebRTC: Signaling") + + include('/build/gyp.mozbuild') +-include('/build/gn.mozbuild') + + webrtc_non_unified_sources = [ + 'trunk/webrtc/common_audio/vad/vad_core.c', # Because of name clash in the kInitCheck variable +@@ -57,6 +56,8 @@ webrtc_non_unified_sources = [ + 'trunk/webrtc/video/overuse_frame_detector.cc', # Because of name clash with call_stats.cc on kWeightFactor + ] + ++GYP_DIRS += ['trunk'] ++ + # Set gyp vars that webrtc needs when building under various analysis tools. + # Primarily this prevents webrtc from setting NVALGRIND and breaking builds. + gyp_vars_copy = gyp_vars.copy() +@@ -67,21 +68,12 @@ elif CONFIG['MOZ_ASAN']: + elif CONFIG['MOZ_TSAN']: + gyp_vars_copy.update(build_for_tool="tsan") + +-GN_DIRS += ['trunk'] +- +-gn_vars_copy = gn_vars.copy() +- +-GN_DIRS['trunk'].variables = gn_vars_copy +-GN_DIRS['trunk'].mozilla_flags = [ +- '-fobjc-arc', +- '-mfpu=neon', +- '-msse2', +-] +- ++GYP_DIRS['trunk'].input = 'trunk/peerconnection.gyp' ++GYP_DIRS['trunk'].variables = gyp_vars_copy + # We allow warnings for third-party code that can be updated from upstream. +-GN_DIRS['trunk'].sandbox_vars['COMPILE_FLAGS'] = {'WARNINGS_AS_ERRORS': []} +-GN_DIRS['trunk'].sandbox_vars['FINAL_LIBRARY'] = 'webrtc' +-GN_DIRS['trunk'].non_unified_sources += webrtc_non_unified_sources ++GYP_DIRS['trunk'].sandbox_vars['COMPILE_FLAGS'] = {'WARNINGS_AS_ERRORS': []} ++GYP_DIRS['trunk'].sandbox_vars['FINAL_LIBRARY'] = 'webrtc' ++GYP_DIRS['trunk'].non_unified_sources += webrtc_non_unified_sources + + if CONFIG['MOZ_WEBRTC_SIGNALING']: + DIRS += [ +diff --git media/webrtc/trunk/build/OWNERS media/webrtc/trunk/build/OWNERS +index c644ca7d5fd5..72e8ffc0db8a 100644 +--- media/webrtc/trunk/build/OWNERS ++++ media/webrtc/trunk/build/OWNERS +@@ -1,22 +1 @@ +-agrieve@chromium.org +-dpranke@chromium.org +-jbudorick@chromium.org +-jochen@chromium.org +-scottmg@chromium.org +-thakis@chromium.org +-brucedawson@chromium.org +- +-per-file .gitignore=* +-per-file mac_toolchain.py=erikchen@chromium.org +-per-file mac_toolchain.py=justincohen@chromium.org +-per-file package_mac_toolchain.py=erikchen@chromium.org +-per-file package_mac_toolchain.py=justincohen@chromium.org +-per-file whitespace_file.txt=* +-per-file OWNERS.status=* +- +-# gn-dev is probably a better team here, but the tooling won't let us +-# have more than one team per component, and infra-dev is a catch-all +-# for other build-related lists. +-# +-# TEAM: infra-dev@chromium.org +-# COMPONENT: Build ++* +diff --git media/webrtc/trunk/build/common.croc media/webrtc/trunk/build/common.croc +index fde7a8b29821..7281bb4eb4d8 100644 +--- media/webrtc/trunk/build/common.croc ++++ media/webrtc/trunk/build/common.croc +@@ -57,7 +57,7 @@ + }, + # Don't include output dirs + { +- 'regexp' : '.*/(Debug|Release|out|xcodebuild)/', ++ 'regexp' : '.*/(Debug|Release|sconsbuild|out|xcodebuild)/', + 'include' : 0, + }, + # Don't include third-party source +@@ -89,7 +89,7 @@ + }, + { + 'stat' : '100.0 * files_instrumented / files_executable', +- 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g percent', ++ 'format' : '*RESULT FilesInstrumentedPercent: files_instrumented_percent= %g', + }, + { + 'stat' : 'lines_executable', +@@ -111,16 +111,16 @@ + }, + { + 'stat' : '100.0 * lines_covered / lines_executable', +- 'format' : '*RESULT PercentCovered: percent_covered= %g percent', ++ 'format' : '*RESULT PercentCovered: percent_covered= %g', + }, + { + 'stat' : '100.0 * lines_covered / lines_executable', +- 'format' : '*RESULT PercentCoveredSource: percent_covered_source= %g percent', ++ 'format' : '*RESULT PercentCoveredSource: percent_covered_source= %g', + 'group' : 'source', + }, + { + 'stat' : '100.0 * lines_covered / lines_executable', +- 'format' : '*RESULT PercentCoveredTest: percent_covered_test= %g percent', ++ 'format' : '*RESULT PercentCoveredTest: percent_covered_test= %g', + 'group' : 'test', + }, + ], +diff --git media/webrtc/trunk/build/compiler_version.py media/webrtc/trunk/build/compiler_version.py +index 8db010811096..eae7b176dd21 100755 +--- media/webrtc/trunk/build/compiler_version.py ++++ media/webrtc/trunk/build/compiler_version.py +@@ -14,115 +14,63 @@ import re + import subprocess + import sys + +- +-compiler_version_cache = {} # Map from (compiler, tool) -> version. +- +- +-def Usage(program_name): +- print '%s MODE TOOL' % os.path.basename(program_name) +- print 'MODE: host or target.' +- print 'TOOL: assembler or compiler or linker.' +- return 1 +- +- +-def ParseArgs(args): +- if len(args) != 2: +- raise Exception('Invalid number of arguments') +- mode = args[0] +- tool = args[1] +- if mode not in ('host', 'target'): +- raise Exception('Invalid mode: %s' % mode) +- if tool not in ('assembler',): +- raise Exception('Invalid tool: %s' % tool) +- return mode, tool +- +- +-def GetEnvironFallback(var_list, default): +- """Look up an environment variable from a possible list of variable names.""" +- for var in var_list: +- if var in os.environ: +- return os.environ[var] +- return default +- +- +-def GetVersion(compiler, tool): +- tool_output = tool_error = None +- cache_key = (compiler, tool) +- cached_version = compiler_version_cache.get(cache_key) +- if cached_version: +- return cached_version ++def GetVersion(compiler): + try: + # Note that compiler could be something tricky like "distcc g++". +- if tool == "assembler": +- compiler = compiler + " -Xassembler --version -x assembler -c /dev/null" +- # Unmodified: GNU assembler (GNU Binutils) 2.24 +- # Ubuntu: GNU assembler (GNU Binutils for Ubuntu) 2.22 +- # Fedora: GNU assembler version 2.23.2 +- version_re = re.compile(r"^GNU [^ ]+ .* (\d+).(\d+).*?$", re.M) +- else: +- raise Exception("Unknown tool %s" % tool) +- +- # Force the locale to C otherwise the version string could be localized +- # making regex matching fail. +- env = os.environ.copy() +- env["LC_ALL"] = "C" +- pipe = subprocess.Popen(compiler, shell=True, env=env, ++ compiler = compiler + " -dumpversion" ++ pipe = subprocess.Popen(compiler, shell=True, + stdout=subprocess.PIPE, stderr=subprocess.PIPE) +- tool_output, tool_error = pipe.communicate() ++ gcc_output, gcc_error = pipe.communicate() + if pipe.returncode: + raise subprocess.CalledProcessError(pipe.returncode, compiler) + +- parsed_output = version_re.match(tool_output) +- result = parsed_output.group(1) + parsed_output.group(2) +- compiler_version_cache[cache_key] = result +- return result ++ result = re.match(r"(\d+)\.(\d+)", gcc_output) ++ return result.group(1) + result.group(2) + except Exception, e: +- if tool_error: +- sys.stderr.write(tool_error) ++ if gcc_error: ++ sys.stderr.write(gcc_error) + print >> sys.stderr, "compiler_version.py failed to execute:", compiler + print >> sys.stderr, e + return "" + ++def GetVersionFromEnvironment(compiler_env): ++ """ Returns the version of compiler ++ ++ If the compiler was set by the given environment variable and exists, ++ return its version, otherwise None is returned. ++ """ ++ cxx = os.getenv(compiler_env, None) ++ if cxx: ++ cxx_version = GetVersion(cxx) ++ if cxx_version != "": ++ return cxx_version ++ return None ++ ++def main(): ++ # Check if CXX_target or CXX environment variable exists an if it does use ++ # that compiler. ++ # TODO: Fix ninja (see http://crbug.com/140900) instead and remove this code ++ # In ninja's cross compile mode, the CXX_target is target compiler, while ++ # the CXX is host. The CXX_target needs be checked first, though the target ++ # and host compiler have different version, there seems no issue to use the ++ # target compiler's version number as gcc_version in Android. ++ cxx_version = GetVersionFromEnvironment("CXX_target") ++ if cxx_version: ++ print cxx_version ++ return 0 ++ ++ cxx_version = GetVersionFromEnvironment("CXX") ++ if cxx_version: ++ print cxx_version ++ return 0 ++ ++ # Otherwise we check the g++ version. ++ gccversion = GetVersion("g++") ++ if gccversion != "": ++ print gccversion ++ return 0 + +-def main(args): +- try: +- (mode, tool) = ParseArgs(args[1:]) +- except Exception, e: +- sys.stderr.write(e.message + '\n\n') +- return Usage(args[0]) +- +- ret_code, result = ExtractVersion(mode, tool) +- if ret_code == 0: +- print result +- return ret_code +- +- +-def DoMain(args): +- """Hook to be called from gyp without starting a separate python +- interpreter.""" +- (mode, tool) = ParseArgs(args) +- ret_code, result = ExtractVersion(mode, tool) +- if ret_code == 0: +- return result +- raise Exception("Failed to extract compiler version for args: %s" % args) +- +- +-def ExtractVersion(mode, tool): +- # Check if various CXX environment variables exist and use them if they +- # exist. The preferences and fallback order is a close approximation of +- # GenerateOutputForConfig() in GYP's ninja generator. +- # The main difference being not supporting GYP's make_global_settings. +- environments = ['CXX_target', 'CXX'] +- if mode == 'host': +- environments = ['CXX_host'] + environments; +- compiler = GetEnvironFallback(environments, 'c++') +- +- if compiler: +- compiler_version = GetVersion(compiler, tool) +- if compiler_version != "": +- return (0, compiler_version) +- return (1, None) +- ++ return 1 + + if __name__ == "__main__": +- sys.exit(main(sys.argv)) ++ sys.exit(main()) +diff --git media/webrtc/trunk/build/copy_test_data_ios.py media/webrtc/trunk/build/copy_test_data_ios.py +index 6f0302f9506e..51307358355e 100755 +--- media/webrtc/trunk/build/copy_test_data_ios.py ++++ media/webrtc/trunk/build/copy_test_data_ios.py +@@ -13,16 +13,13 @@ import sys + class WrongNumberOfArgumentsException(Exception): + pass + +-def EscapePath(path): +- """Returns a path with spaces escaped.""" +- return path.replace(" ", "\\ ") +- + def ListFilesForPath(path): + """Returns a list of all the files under a given path.""" + output = [] +- # Ignore revision control metadata directories. +- if (os.path.basename(path).startswith('.git') or +- os.path.basename(path).startswith('.svn')): ++ # Ignore dotfiles and dot directories. ++ # TODO(rohitrao): This will fail to exclude cases where the initial argument ++ # is a relative path that starts with a dot. ++ if os.path.basename(path).startswith('.'): + return output + + # Files get returned without modification. +@@ -40,10 +37,13 @@ def ListFilesForPath(path): + def CalcInputs(inputs): + """Computes the full list of input files for a set of command-line arguments. + """ +- # |inputs| is a list of paths, which may be directories. ++ # |inputs| is a list of strings, each of which may contain muliple paths ++ # separated by spaces. + output = [] + for input in inputs: +- output.extend(ListFilesForPath(input)) ++ tokens = input.split() ++ for token in tokens: ++ output.extend(ListFilesForPath(token)) + return output + + def CopyFiles(relative_filenames, output_basedir): +@@ -77,15 +77,14 @@ def DoMain(argv): + raise WrongNumberOfArgumentsException(' required.') + + files_to_copy = CalcInputs(arglist) +- escaped_files = [EscapePath(x) for x in CalcInputs(arglist)] + if options.list_inputs: +- return '\n'.join(escaped_files) ++ return '\n'.join(files_to_copy) + + if not options.output_dir: + raise WrongNumberOfArgumentsException('-o required.') + + if options.list_outputs: +- outputs = [os.path.join(options.output_dir, x) for x in escaped_files] ++ outputs = [os.path.join(options.output_dir, x) for x in files_to_copy] + return '\n'.join(outputs) + + CopyFiles(files_to_copy, options.output_dir) +diff --git media/webrtc/trunk/build/cp.py media/webrtc/trunk/build/cp.py +index 0f32536b624b..dd98e1db15d2 100755 +--- media/webrtc/trunk/build/cp.py ++++ media/webrtc/trunk/build/cp.py +@@ -9,14 +9,13 @@ This module works much like the cp posix command - it takes 2 arguments: + (src, dst) and copies the file with path |src| to |dst|. + """ + +-import os + import shutil + import sys + + + def Main(src, dst): + # Use copy instead of copyfile to ensure the executable bit is copied. +- return shutil.copy(src, os.path.normpath(dst)) ++ return shutil.copy(src, dst) + + + if __name__ == '__main__': +diff --git media/webrtc/trunk/build/dir_exists.py media/webrtc/trunk/build/dir_exists.py +index 70d367ec2690..0a89bc87bbf6 100755 +--- media/webrtc/trunk/build/dir_exists.py ++++ media/webrtc/trunk/build/dir_exists.py +@@ -8,16 +8,8 @@ import os.path + import sys + + def main(): +- sys.stdout.write(_is_dir(sys.argv[1])) ++ sys.stdout.write(str(os.path.isdir(sys.argv[1]))) + return 0 + +-def _is_dir(dir_name): +- return str(os.path.isdir(dir_name)) +- +-def DoMain(args): +- """Hook to be called from gyp without starting a separate python +- interpreter.""" +- return _is_dir(args[0]) +- + if __name__ == '__main__': + sys.exit(main()) +diff --git media/webrtc/trunk/build/download_nacl_toolchains.py media/webrtc/trunk/build/download_nacl_toolchains.py +index cccecce9ef95..c2007d0f1038 100755 +--- media/webrtc/trunk/build/download_nacl_toolchains.py ++++ media/webrtc/trunk/build/download_nacl_toolchains.py +@@ -6,7 +6,6 @@ + """Shim to run nacl toolchain download script only if there is a nacl dir.""" + + import os +-import shutil + import sys + + +@@ -14,46 +13,50 @@ def Main(args): + # Exit early if disable_nacl=1. + if 'disable_nacl=1' in os.environ.get('GYP_DEFINES', ''): + return 0 +- if 'OS=android' in os.environ.get('GYP_DEFINES', ''): +- return 0 + script_dir = os.path.dirname(os.path.abspath(__file__)) + src_dir = os.path.dirname(script_dir) + nacl_dir = os.path.join(src_dir, 'native_client') + nacl_build_dir = os.path.join(nacl_dir, 'build') +- package_version_dir = os.path.join(nacl_build_dir, 'package_version') +- package_version = os.path.join(package_version_dir, 'package_version.py') +- if not os.path.exists(package_version): +- print "Can't find '%s'" % package_version ++ download_script = os.path.join(nacl_build_dir, 'download_toolchains.py') ++ if not os.path.exists(download_script): ++ print "Can't find '%s'" % download_script + print 'Presumably you are intentionally building without NativeClient.' + print 'Skipping NativeClient toolchain download.' + sys.exit(0) +- sys.path.insert(0, package_version_dir) +- import package_version ++ sys.path.insert(0, nacl_build_dir) ++ import download_toolchains + ++ # TODO (robertm): Finish getting PNaCl ready for prime time. + # BUG: + # We remove this --optional-pnacl argument, and instead replace it with +- # --no-pnacl for most cases. However, if the bot name is an sdk ++ # --no-pnacl for most cases. However, if the bot name is the pnacl_sdk + # bot then we will go ahead and download it. This prevents increasing the + # gclient sync time for developers, or standard Chrome bots. + if '--optional-pnacl' in args: + args.remove('--optional-pnacl') ++ # By default we don't use PNaCl toolchain yet, unless on ARM, where ++ # there is no other toolchain to build untrusted code at the moment. ++ # So analyze if we're building for ARM, or on SDK buildbot. ++ # TODO(olonho): we need to invent more reliable way to get build ++ # configuration info, to know if we're building for ARM. + use_pnacl = False ++ if 'target_arch=arm' in os.environ.get('GYP_DEFINES', ''): ++ use_pnacl = True + buildbot_name = os.environ.get('BUILDBOT_BUILDERNAME', '') +- if 'pnacl' in buildbot_name and 'sdk' in buildbot_name: ++ if buildbot_name.find('pnacl') >= 0 and buildbot_name.find('sdk') >= 0: + use_pnacl = True + if use_pnacl: + print '\n*** DOWNLOADING PNACL TOOLCHAIN ***\n' + else: +- args = ['--exclude', 'pnacl_newlib'] + args +- +- # Only download the ARM gcc toolchain if we are building for ARM +- # TODO(olonho): we need to invent more reliable way to get build +- # configuration info, to know if we're building for ARM. +- if 'target_arch=arm' not in os.environ.get('GYP_DEFINES', ''): +- args = ['--exclude', 'nacl_arm_newlib'] + args ++ args.append('--no-pnacl') + +- package_version.main(args) ++ # Append the name of the file to use as a version and hash source. ++ # NOTE: While not recommended, it is possible to redirect this file to ++ # a chrome location to avoid branching NaCl if just a toolchain needs ++ # to be bumped. ++ args.append(os.path.join(nacl_dir,'TOOL_REVISIONS')) + ++ download_toolchains.main(args) + return 0 + + +diff --git media/webrtc/trunk/build/extract_from_cab.py media/webrtc/trunk/build/extract_from_cab.py +index 080370ca9ade..1c928af36f93 100755 +--- media/webrtc/trunk/build/extract_from_cab.py ++++ media/webrtc/trunk/build/extract_from_cab.py +@@ -12,7 +12,7 @@ import sys + import tempfile + + def run_quiet(*args): +- """Run 'expand' suppressing noisy output. Returns returncode from process.""" ++ """Run 'expand' supressing noisy output. Returns returncode from process.""" + popen = subprocess.Popen(args, stdout=subprocess.PIPE) + out, _ = popen.communicate() + if popen.returncode: +diff --git media/webrtc/trunk/build/gdb-add-index media/webrtc/trunk/build/gdb-add-index +index 73367c835034..4975532213bc 100755 +--- media/webrtc/trunk/build/gdb-add-index ++++ media/webrtc/trunk/build/gdb-add-index +@@ -4,181 +4,44 @@ + # found in the LICENSE file. + # + # Saves the gdb index for a given binary and its shared library dependencies. +-# +-# This will run gdb index in parallel on a number of binaries using SIGUSR1 +-# as the communication mechanism to simulate a semaphore. Because of the +-# nature of this technique, using "set -e" is very difficult. The SIGUSR1 +-# terminates a "wait" with an error which we need to interpret. +-# +-# When modifying this code, most of the real logic is in the index_one_file +-# function. The rest is cleanup + sempahore plumbing. +- +-function usage_exit { +- echo "Usage: $0 [-f] [-r] [-n] ..." +- echo " -f forces replacement of an existing index." +- echo " -r removes the index section." +- echo " -n don't extract the dependencies of each binary with lld." +- echo " e.g., $0 -n out/Debug/lib.unstripped/lib*" +- echo +- echo " Set TOOLCHAIN_PREFIX to use a non-default set of binutils." +- exit 1 +-} +- +-# Cleanup temp directory and ensure all child jobs are dead-dead. +-function on_exit { +- trap "" EXIT USR1 # Avoid reentrancy. +- +- local jobs=$(jobs -p) +- if [ -n "$jobs" ]; then +- echo -n "Killing outstanding index jobs..." +- kill -KILL $(jobs -p) +- wait +- echo "done" +- fi +- +- if [ -d "$directory" ]; then +- echo -n "Removing temp directory $directory..." +- rm -rf "$directory" +- echo done +- fi +-} +- +-# Add index to one binary. +-function index_one_file { +- local file=$1 +- local basename=$(basename "$file") +- local should_index_this_file="${should_index}" +- +- local readelf_out=$(${TOOLCHAIN_PREFIX}readelf -S "$file") +- if [[ $readelf_out =~ "gdb_index" ]]; then +- if $remove_index; then +- ${TOOLCHAIN_PREFIX}objcopy --remove-section .gdb_index "$file" +- echo "Removed index from $basename." +- else +- echo "Skipped $basename -- already contains index." +- should_index_this_file=false +- fi +- fi +- +- if $should_index_this_file; then +- local start=$(date +"%s%N") +- echo "Adding index to $basename..." +- +- ${TOOLCHAIN_PREFIX}gdb -batch "$file" -ex "save gdb-index $directory" \ +- -ex "quit" +- local index_file="$directory/$basename.gdb-index" +- if [ -f "$index_file" ]; then +- ${TOOLCHAIN_PREFIX}objcopy --add-section .gdb_index="$index_file" \ +- --set-section-flags .gdb_index=readonly "$file" "$file" +- local finish=$(date +"%s%N") +- local elapsed=$(((finish - start) / 1000000)) +- echo " ...$basename indexed. [${elapsed}ms]" +- else +- echo " ...$basename unindexable." +- fi +- fi +-} + +-# Functions that when combined, concurrently index all files in FILES_TO_INDEX +-# array. The global FILES_TO_INDEX is declared in the main body of the script. +-function async_index { +- # Start a background subshell to run the index command. +- { +- index_one_file $1 +- kill -SIGUSR1 $$ # $$ resolves to the parent script. +- exit 129 # See comment above wait loop at bottom. +- } & +-} ++set -e + +-cur_file_num=0 +-function index_next { +- if ((cur_file_num >= ${#files_to_index[@]})); then +- return +- fi +- +- async_index "${files_to_index[cur_file_num]}" +- ((cur_file_num += 1)) || true +-} +- +-######## +-### Main body of the script. +- +-remove_index=false +-should_index=true +-should_index_deps=true +-files_to_index=() +-while (($# > 0)); do +- case "$1" in +- -h) +- usage_exit +- ;; +- -f) +- remove_index=true +- ;; +- -r) +- remove_index=true +- should_index=false +- ;; +- -n) +- should_index_deps=false +- ;; +- -*) +- echo "Invalid option: $1" >&2 +- usage_exit +- ;; +- *) +- if [[ ! -f "$1" ]]; then +- echo "Path $1 does not exist." +- exit 1 +- fi +- files_to_index+=("$1") +- ;; +- esac +- shift +-done +- +-if ((${#files_to_index[@]} == 0)); then +- usage_exit ++if [[ ! $# == 1 ]]; then ++ echo "Usage: $0 path-to-binary" ++ exit 1 + fi + +-dependencies=() +-if $should_index_deps; then +- for file in "${files_to_index[@]}"; do +- # Append the shared library dependencies of this file that +- # have the same dirname. The dirname is a signal that these +- # shared libraries were part of the same build as the binary. +- dependencies+=( \ +- $(ldd "$file" 2>/dev/null \ +- | grep $(dirname "$file") \ +- | sed "s/.*[ \t]\(.*\) (.*/\1/") \ +- ) +- done ++FILENAME="$1" ++if [[ ! -f "$FILENAME" ]]; then ++ echo "Path $FILENAME does not exist." ++ exit 1 + fi +-files_to_index+=("${dependencies[@]}") +- +-# Ensure we cleanup on on exit. +-trap on_exit EXIT INT + + # We're good to go! Create temp directory for index files. +-directory=$(mktemp -d) +-echo "Made temp directory $directory." +- +-# Start concurrent indexing. +-trap index_next USR1 +- +-# 4 is an arbitrary default. When changing, remember we are likely IO bound +-# so basing this off the number of cores is not sensible. +-index_tasks=${INDEX_TASKS:-4} +-for ((i = 0; i < index_tasks; i++)); do +- index_next +-done +- +-# Do a wait loop. Bash waits that terminate due a trap have an exit +-# code > 128. We also ensure that our subshell's "normal" exit occurs with +-# an exit code > 128. This allows us to do consider a > 128 exit code as +-# an indication that the loop should continue. Unfortunately, it also means +-# we cannot use set -e since technically the "wait" is failing. +-wait +-while (($? > 128)); do +- wait ++DIRECTORY=$(mktemp -d) ++echo "Made temp directory $DIRECTORY." ++ ++# Always remove directory on exit. ++trap "{ echo -n Removing temp directory $DIRECTORY...; ++ rm -rf $DIRECTORY; echo done; }" EXIT ++ ++# Grab all the chromium shared library files. ++so_files=$(ldd "$FILENAME" 2>/dev/null \ ++ | grep $(dirname "$FILENAME") \ ++ | sed "s/.*[ \t]\(.*\) (.*/\1/") ++ ++# Add index to binary and the shared library dependencies. ++for file in "$FILENAME" $so_files; do ++ basename=$(basename "$file") ++ echo -n "Adding index to $basename..." ++ readelf_out=$(readelf -S "$file") ++ if [[ $readelf_out =~ "gdb_index" ]]; then ++ echo "already contains index. Skipped." ++ else ++ gdb -batch "$file" -ex "save gdb-index $DIRECTORY" -ex "quit" ++ objcopy --add-section .gdb_index="$DIRECTORY"/$basename.gdb-index \ ++ --set-section-flags .gdb_index=readonly "$file" "$file" ++ echo "done." ++ fi + done +diff --git media/webrtc/trunk/build/gyp_chromium media/webrtc/trunk/build/gyp_chromium +index 4fc62bad9ba1..d13403403162 100755 +--- media/webrtc/trunk/build/gyp_chromium ++++ media/webrtc/trunk/build/gyp_chromium +@@ -1,12 +1,175 @@ + #!/usr/bin/env python ++ + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-# Simple launcher script for gyp_chromium.py. +-# TODO(sbc): This should probably be shell script but for historical +-# reasons (all the python code used to live in this script without a +-# .py extension, and was often run as 'python gyp_chromium') it is +-# currently still python. ++# This script is wrapper for Chromium that adds some support for how GYP ++# is invoked by Chromium beyond what can be done in the gclient hooks. ++ ++import glob ++import os ++import shlex ++import subprocess ++import sys ++ ++script_dir = os.path.dirname(os.path.realpath(__file__)) ++chrome_src = os.path.abspath(os.path.join(script_dir, os.pardir)) ++ ++sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib')) ++import gyp ++ ++# Add paths so that pymod_do_main(...) can import files. ++sys.path.insert(1, os.path.join(chrome_src, 'tools', 'grit')) ++sys.path.insert(1, os.path.join(chrome_src, 'chrome', 'tools', 'build')) ++sys.path.insert(1, os.path.join(chrome_src, 'native_client', 'build')) ++ ++ ++# On Windows, Psyco shortens warm runs of build/gyp_chromium by about ++# 20 seconds on a z600 machine with 12 GB of RAM, from 90 down to 70 ++# seconds. Conversely, memory usage of build/gyp_chromium with Psyco ++# maxes out at about 158 MB vs. 132 MB without it. ++# ++# Psyco uses native libraries, so we need to load a different ++# installation depending on which OS we are running under. It has not ++# been tested whether using Psyco on our Mac and Linux builds is worth ++# it (the GYP running time is a lot shorter, so the JIT startup cost ++# may not be worth it). ++if sys.platform == 'win32': ++ try: ++ sys.path.insert(0, os.path.join(chrome_src, 'third_party', 'psyco_win32')) ++ import psyco ++ except: ++ psyco = None ++else: ++ psyco = None ++ ++def apply_gyp_environment(file_path=None): ++ """ ++ Reads in a *.gyp_env file and applies the valid keys to os.environ. ++ """ ++ if not file_path or not os.path.exists(file_path): ++ return ++ file_contents = open(file_path).read() ++ try: ++ file_data = eval(file_contents, {'__builtins__': None}, None) ++ except SyntaxError, e: ++ e.filename = os.path.abspath(file_path) ++ raise ++ supported_vars = ( 'CC', ++ 'CHROMIUM_GYP_FILE', ++ 'CHROMIUM_GYP_SYNTAX_CHECK', ++ 'CXX', ++ 'GYP_DEFINES', ++ 'GYP_GENERATOR_FLAGS', ++ 'GYP_GENERATOR_OUTPUT', ++ 'GYP_GENERATORS', ) ++ for var in supported_vars: ++ val = file_data.get(var) ++ if val: ++ if var in os.environ: ++ print 'INFO: Environment value for "%s" overrides value in %s.' % ( ++ var, os.path.abspath(file_path) ++ ) ++ else: ++ os.environ[var] = val ++ ++def additional_include_files(args=[]): ++ """ ++ Returns a list of additional (.gypi) files to include, without ++ duplicating ones that are already specified on the command line. ++ """ ++ # Determine the include files specified on the command line. ++ # This doesn't cover all the different option formats you can use, ++ # but it's mainly intended to avoid duplicating flags on the automatic ++ # makefile regeneration which only uses this format. ++ specified_includes = set() ++ for arg in args: ++ if arg.startswith('-I') and len(arg) > 2: ++ specified_includes.add(os.path.realpath(arg[2:])) ++ ++ result = [] ++ def AddInclude(path): ++ if os.path.realpath(path) not in specified_includes: ++ result.append(path) ++ ++ # Always include common.gypi. ++ AddInclude(os.path.join(script_dir, 'common.gypi')) ++ ++ # Optionally add supplemental .gypi files if present. ++ supplements = glob.glob(os.path.join(chrome_src, '*', 'supplement.gypi')) ++ for supplement in supplements: ++ AddInclude(supplement) ++ ++ return result ++ ++if __name__ == '__main__': ++ args = sys.argv[1:] ++ ++ # Use the Psyco JIT if available. ++ if psyco: ++ psyco.profile() ++ print "Enabled Psyco JIT." ++ ++ # Fall back on hermetic python if we happen to get run under cygwin. ++ # TODO(bradnelson): take this out once this issue is fixed: ++ # http://code.google.com/p/gyp/issues/detail?id=177 ++ if sys.platform == 'cygwin': ++ python_dir = os.path.join(chrome_src, 'third_party', 'python_26') ++ env = os.environ.copy() ++ env['PATH'] = python_dir + os.pathsep + env.get('PATH', '') ++ p = subprocess.Popen( ++ [os.path.join(python_dir, 'python.exe')] + sys.argv, ++ env=env, shell=False) ++ p.communicate() ++ sys.exit(p.returncode) ++ ++ if 'SKIP_CHROMIUM_GYP_ENV' not in os.environ: ++ # Update the environment based on chromium.gyp_env ++ gyp_env_path = os.path.join(os.path.dirname(chrome_src), 'chromium.gyp_env') ++ apply_gyp_environment(gyp_env_path) ++ ++ # This could give false positives since it doesn't actually do real option ++ # parsing. Oh well. ++ gyp_file_specified = False ++ for arg in args: ++ if arg.endswith('.gyp'): ++ gyp_file_specified = True ++ break ++ ++ # If we didn't get a file, check an env var, and then fall back to ++ # assuming 'all.gyp' from the same directory as the script. ++ if not gyp_file_specified: ++ gyp_file = os.environ.get('CHROMIUM_GYP_FILE') ++ if gyp_file: ++ # Note that CHROMIUM_GYP_FILE values can't have backslashes as ++ # path separators even on Windows due to the use of shlex.split(). ++ args.extend(shlex.split(gyp_file)) ++ else: ++ args.append(os.path.join(script_dir, 'all.gyp')) ++ ++ args.extend(['-I' + i for i in additional_include_files(args)]) ++ ++ # There shouldn't be a circular dependency relationship between .gyp files, ++ # but in Chromium's .gyp files, on non-Mac platforms, circular relationships ++ # currently exist. The check for circular dependencies is currently ++ # bypassed on other platforms, but is left enabled on the Mac, where a ++ # violation of the rule causes Xcode to misbehave badly. ++ # TODO(mark): Find and kill remaining circular dependencies, and remove this ++ # option. http://crbug.com/35878. ++ # TODO(tc): Fix circular dependencies in ChromiumOS then add linux2 to the ++ # list. ++ if sys.platform not in ('darwin',): ++ args.append('--no-circular-check') ++ ++ # If CHROMIUM_GYP_SYNTAX_CHECK is set to 1, it will invoke gyp with --check ++ # to enfore syntax checking. ++ syntax_check = os.environ.get('CHROMIUM_GYP_SYNTAX_CHECK') ++ if syntax_check and int(syntax_check): ++ args.append('--check') ++ ++ print 'Updating projects from gyp files...' ++ sys.stdout.flush() + +-execfile(__file__ + '.py') ++ # Off we go... ++ sys.exit(gyp.main(args)) +diff --git media/webrtc/trunk/build/install-build-deps-android.sh media/webrtc/trunk/build/install-build-deps-android.sh +index 06f79aee9984..0a90d3b10c05 100755 +--- media/webrtc/trunk/build/install-build-deps-android.sh ++++ media/webrtc/trunk/build/install-build-deps-android.sh +@@ -1,78 +1,101 @@ +-#!/bin/bash ++#!/bin/bash -e + + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-# Script to install everything needed to build chromium on android, including +-# items requiring sudo privileges. +-# See https://www.chromium.org/developers/how-tos/android-build-instructions ++# Script to install everything needed to build chromium on android that ++# requires sudo privileges. ++# See http://code.google.com/p/chromium/wiki/AndroidBuildInstructions + +-args="$@" ++# This script installs the sun-java6 packages (bin, jre and jdk). Sun requires ++# a license agreement, so upon installation it will prompt the user. To get ++# past the curses-based dialog press TAB TAB to agree. + + if ! uname -m | egrep -q "i686|x86_64"; then + echo "Only x86 architectures are currently supported" >&2 + exit + fi + +-# Exit if any commands fail. +-set -e ++if [ "x$(id -u)" != x0 ]; then ++ echo "Running as non-root user." ++ echo "You might have to enter your password one or more times for 'sudo'." ++ echo ++fi + +-lsb_release=$(lsb_release --codename --short) ++# The temporary directory used to store output of update-java-alternatives ++TEMPDIR=$(mktemp -d) ++cleanup() { ++ local status=${?} ++ trap - EXIT ++ rm -rf "${TEMPDIR}" ++ exit ${status} ++} ++trap cleanup EXIT + +-# Install first the default Linux build deps. +-"$(dirname "${BASH_SOURCE[0]}")/install-build-deps.sh" \ +- --no-syms --lib32 --no-arm --no-chromeos-fonts --no-nacl --no-prompt "${args}" ++sudo apt-get update + + # Fix deps + sudo apt-get -f install + +-# common +-sudo apt-get -y install lib32z1 lighttpd python-pexpect xvfb x11-utils +- +-# Some binaries in the Android SDK require 32-bit libraries on the host. +-# See https://developer.android.com/sdk/installing/index.html?pkg=tools +-sudo apt-get -y install libncurses5:i386 libstdc++6:i386 zlib1g:i386 ++# Install deps ++# This step differs depending on what Ubuntu release we are running ++# on since the package names are different, and Sun's Java must ++# be installed manually on late-model versions. + +-# Required by //components/cronet/tools/generate_javadoc.py +-# TODO(375324): Stop requiring ANT. +-sudo apt-get -y install ant +- +-# Required for apk-patch-size-estimator +-sudo apt-get -y install bsdiff +- +-# Do our own error handling for java. +-set +e +- +-function IsJava8() { +- # Arg is either "java" or "javac" +- $1 -version 2>&1 | grep -q '1\.8' +-} +- +-if ! (IsJava8 java && IsJava8 javac); then +- sudo apt-get -y install openjdk-8-jre openjdk-8-jdk +-fi +- +-# There can be several reasons why java8 is not default despite being installed. +-# Just show an error and exit. +-if ! (IsJava8 java && IsJava8 javac); then +- echo +- echo "Automatic java installation failed." +- echo '`java -version` reports:' +- java -version +- echo +- echo '`javac -version` reports:' +- javac -version +- echo +- echo "Please ensure that JDK 8 is installed and resolves first in your PATH." +- echo -n '`which java` reports: ' +- which java +- echo -n '`which javac` reports: ' +- which javac +- echo +- echo "You might also try running:" +- echo " sudo update-java-alternatives -s java-1.8.0-openjdk-amd64" +- exit 1 ++# common ++sudo apt-get -y install python-pexpect xvfb x11-utils ++ ++if /usr/bin/lsb_release -r -s | grep -q "12."; then ++ # Ubuntu 12.x ++ sudo apt-get -y install ant ++ ++ # Java can not be installed via ppa on Ubuntu 12.04+ so we'll ++ # simply check to see if it has been setup properly -- if not ++ # let the user know. ++ ++ if ! java -version 2>&1 | grep -q "Java(TM)"; then ++ echo "****************************************************************" ++ echo "You need to install the Oracle Java SDK from http://goo.gl/uPRSq" ++ echo "and configure it as the default command-line Java environment." ++ echo "****************************************************************" ++ exit ++ fi ++ ++else ++ # Ubuntu 10.x ++ ++ sudo apt-get -y install ant1.8 ++ ++ # Install sun-java6 stuff ++ sudo apt-get -y install sun-java6-bin sun-java6-jre sun-java6-jdk ++ ++ # Switch version of Java to java-6-sun ++ # Sun's java is missing certain Java plugins (e.g. for firefox, mozilla). ++ # These are not required to build, and thus are treated only as warnings. ++ # Any errors in updating java alternatives which are not '*-javaplugin.so' ++ # will cause errors and stop the script from completing successfully. ++ if ! sudo update-java-alternatives -s java-6-sun \ ++ >& "${TEMPDIR}"/update-java-alternatives.out ++ then ++ # Check that there are the expected javaplugin.so errors for the update ++ if grep 'javaplugin.so' "${TEMPDIR}"/update-java-alternatives.out >& \ ++ /dev/null ++ then ++ # Print as warnings all the javaplugin.so errors ++ echo 'WARNING: java-6-sun has no alternatives for the following plugins:' ++ grep 'javaplugin.so' "${TEMPDIR}"/update-java-alternatives.out ++ fi ++ # Check if there are any errors that are not javaplugin.so ++ if grep -v 'javaplugin.so' "${TEMPDIR}"/update-java-alternatives.out \ ++ >& /dev/null ++ then ++ # If there are non-javaplugin.so errors, treat as errors and exit ++ echo 'ERRORS: Failed to update alternatives for java-6-sun:' ++ grep -v 'javaplugin.so' "${TEMPDIR}"/update-java-alternatives.out ++ exit 1 ++ fi ++ fi + fi + + echo "install-build-deps-android.sh complete." +diff --git media/webrtc/trunk/build/install-build-deps.sh media/webrtc/trunk/build/install-build-deps.sh +index c965a9b38e06..b77e23a6d9f6 100755 +--- media/webrtc/trunk/build/install-build-deps.sh ++++ media/webrtc/trunk/build/install-build-deps.sh +@@ -5,516 +5,166 @@ + # found in the LICENSE file. + + # Script to install everything needed to build chromium (well, ideally, anyway) +-# See https://chromium.googlesource.com/chromium/src/+/master/docs/linux_build_instructions.md ++# See http://code.google.com/p/chromium/wiki/LinuxBuildInstructions ++# and http://code.google.com/p/chromium/wiki/LinuxBuild64Bit + + usage() { + echo "Usage: $0 [--options]" + echo "Options:" + echo "--[no-]syms: enable or disable installation of debugging symbols" +- echo "--lib32: enable installation of 32-bit libraries, e.g. for V8 snapshot" +- echo "--[no-]arm: enable or disable installation of arm cross toolchain" +- echo "--[no-]chromeos-fonts: enable or disable installation of Chrome OS"\ +- "fonts" +- echo "--[no-]nacl: enable or disable installation of prerequisites for"\ +- "building standalone NaCl and all its toolchains" ++ echo "--[no-]lib32: enable or disable installation of 32 bit libraries" + echo "--no-prompt: silently select standard options/defaults" +- echo "--quick-check: quickly try to determine if dependencies are installed" +- echo " (this avoids interactive prompts and sudo commands," +- echo " so might not be 100% accurate)" +- echo "--unsupported: attempt installation even on unsupported systems" + echo "Script will prompt interactively if options not given." + exit 1 + } + +-# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is +-# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has +-# been provided to yes_no(), the function also accepts RETURN as a user input. +-# The parameter specifies the exit code that should be returned in that case. +-# The function will echo the user's selection followed by a newline character. +-# Users can abort the function by pressing CTRL-C. This will call "exit 1". +-yes_no() { +- if [ 0 -ne "${do_default-0}" ] ; then +- [ $1 -eq 0 ] && echo "Y" || echo "N" +- return $1 +- fi +- local c +- while :; do +- c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT +- stty -echo iuclc -icanon 2>/dev/null +- dd count=1 bs=1 2>/dev/null | od -An -tx1)" +- case "$c" in +- " 0a") if [ -n "$1" ]; then +- [ $1 -eq 0 ] && echo "Y" || echo "N" +- return $1 +- fi +- ;; +- " 79") echo "Y" +- return 0 +- ;; +- " 6e") echo "N" +- return 1 +- ;; +- "") echo "Aborted" >&2 +- exit 1 +- ;; +- *) # The user pressed an unrecognized key. As we are not echoing +- # any incorrect user input, alert the user by ringing the bell. +- (tput bel) 2>/dev/null +- ;; +- esac +- done +-} +- +-# Checks whether a particular package is available in the repos. +-# USAGE: $ package_exists +-package_exists() { +- [ ! -z "`apt-cache search --names-only "$1"`" ] +-} +- +-# These default to on because (some) bots need them and it keeps things +-# simple for the bot setup if all bots just run the script in its default +-# mode. Developers who don't want stuff they don't need installed on their +-# own workstations can pass --no-arm --no-nacl when running the script. +-do_inst_arm=1 +-do_inst_nacl=1 +- + while test "$1" != "" + do + case "$1" in + --syms) do_inst_syms=1;; + --no-syms) do_inst_syms=0;; + --lib32) do_inst_lib32=1;; +- --arm) do_inst_arm=1;; +- --no-arm) do_inst_arm=0;; +- --chromeos-fonts) do_inst_chromeos_fonts=1;; +- --no-chromeos-fonts) do_inst_chromeos_fonts=0;; +- --nacl) do_inst_nacl=1;; +- --no-nacl) do_inst_nacl=0;; ++ --no-lib32) do_inst_lib32=0;; + --no-prompt) do_default=1 + do_quietly="-qq --assume-yes" + ;; +- --quick-check) do_quick_check=1;; +- --unsupported) do_unsupported=1;; + *) usage;; + esac + shift + done + +-if test "$do_inst_arm" = "1"; then +- do_inst_lib32=1 +-fi +- +-# Check for lsb_release command in $PATH +-if ! which lsb_release > /dev/null; then +- echo "ERROR: lsb_release not found in \$PATH" >&2 +- exit 1; ++if ! egrep -q \ ++ 'Ubuntu (10\.04|10\.10|11\.04|11\.10|12\.04|lucid|maverick|natty|oneiric|precise)' \ ++ /etc/issue; then ++ echo "Only Ubuntu 10.04 (lucid) through 12.04 (precise) are currently" \ ++ "supported" >&2 ++ exit 1 + fi + +-distro_codename=$(lsb_release --codename --short) +-distro_id=$(lsb_release --id --short) +-supported_codenames="(trusty|xenial|yakkety)" +-supported_ids="(Debian)" +-if [ 0 -eq "${do_unsupported-0}" ] && [ 0 -eq "${do_quick_check-0}" ] ; then +- if [[ ! $distro_codename =~ $supported_codenames && +- ! $distro_id =~ $supported_ids ]]; then +- echo -e "ERROR: The only supported distros are\n" \ +- "\tUbuntu 14.04 (trusty)\n" \ +- "\tUbuntu 16.04 (xenial)\n" \ +- "\tUbuntu 16.10 (yakkety)\n" \ +- "\tDebian 8 (jessie) or later" >&2 +- exit 1 +- fi +- +- if ! uname -m | egrep -q "i686|x86_64"; then +- echo "Only x86 architectures are currently supported" >&2 +- exit +- fi ++if ! uname -m | egrep -q "i686|x86_64"; then ++ echo "Only x86 architectures are currently supported" >&2 ++ exit + fi + +-if [ "x$(id -u)" != x0 ] && [ 0 -eq "${do_quick_check-0}" ]; then ++if [ "x$(id -u)" != x0 ]; then + echo "Running as non-root user." + echo "You might have to enter your password one or more times for 'sudo'." + echo + fi + + # Packages needed for chromeos only +-chromeos_dev_list="libbluetooth-dev libxkbcommon-dev realpath" +- +-# Packages needed for development +-dev_list="\ +- bison +- cdbs +- curl +- dpkg-dev +- elfutils +- devscripts +- fakeroot +- flex +- fonts-ipafont +- fonts-thai-tlwg +- g++ +- git-core +- git-svn +- gperf +- libasound2-dev +- libbrlapi-dev +- libav-tools +- libbz2-dev +- libcairo2-dev +- libcap-dev +- libcups2-dev +- libcurl4-gnutls-dev +- libdrm-dev +- libelf-dev +- libffi-dev +- libgconf2-dev +- libglib2.0-dev +- libglu1-mesa-dev +- libgnome-keyring-dev +- libgtk2.0-dev +- libgtk-3-dev +- libkrb5-dev +- libnspr4-dev +- libnss3-dev +- libpam0g-dev +- libpci-dev +- libpulse-dev +- libsctp-dev +- libspeechd-dev +- libsqlite3-dev +- libssl-dev +- libudev-dev +- libwww-perl +- libxslt1-dev +- libxss-dev +- libxt-dev +- libxtst-dev +- openbox +- patch +- perl +- pkg-config +- python +- python-cherrypy3 +- python-crypto +- python-dev +- python-numpy +- python-opencv +- python-openssl +- python-psutil +- python-yaml +- rpm +- ruby +- subversion +- ttf-dejavu-core +- wdiff +- xcompmgr +- zip +- $chromeos_dev_list +-" ++chromeos_dev_list="libbluetooth-dev libpulse-dev" ++ ++# Packages need for development ++dev_list="apache2.2-bin bison curl elfutils fakeroot flex g++ gperf ++ language-pack-fr libapache2-mod-php5 libasound2-dev libbz2-dev ++ libcairo2-dev libcups2-dev libcurl4-gnutls-dev libdbus-glib-1-dev ++ libelf-dev libgconf2-dev libgl1-mesa-dev libglib2.0-dev ++ libglu1-mesa-dev libgnome-keyring-dev libgtk2.0-dev ++ libkrb5-dev libnspr4-dev libnss3-dev libpam0g-dev libsctp-dev ++ libsqlite3-dev libssl-dev libudev-dev libwww-perl libxslt1-dev ++ libxss-dev libxt-dev libxtst-dev mesa-common-dev patch ++ perl php5-cgi pkg-config python python-cherrypy3 python-dev ++ python-psutil rpm ruby subversion ttf-dejavu-core ttf-indic-fonts ++ ttf-kochi-gothic ttf-kochi-mincho ttf-thai-tlwg wdiff git-core ++ $chromeos_dev_list" + + # 64-bit systems need a minimum set of 32-bit compat packages for the pre-built +-# NaCl binaries. +-if file -L /sbin/init | grep -q 'ELF 64-bit'; then ++# NaCl binaries. These are always needed, regardless of whether or not we want ++# the full 32-bit "cross-compile" support (--lib32). ++if [ "$(uname -m)" = "x86_64" ]; then + dev_list="${dev_list} libc6-i386 lib32gcc1 lib32stdc++6" + fi + + # Run-time libraries required by chromeos only +-chromeos_lib_list="libpulse0 libbz2-1.0" ++chromeos_lib_list="libpulse0 libbz2-1.0 libcurl4-gnutls-dev" + + # Full list of required run-time libraries +-lib_list="\ +- libatk1.0-0 +- libc6 +- libasound2 +- libcairo2 +- libcap2 +- libcups2 +- libexpat1 +- libffi6 +- libfontconfig1 +- libfreetype6 +- libglib2.0-0 +- libgnome-keyring0 +- libgtk2.0-0 +- libgtk-3-0 +- libpam0g +- libpango1.0-0 +- libpci3 +- libpcre3 +- libpixman-1-0 +- libspeechd2 +- libstdc++6 +- libsqlite3-0 +- libx11-6 +- libx11-xcb1 +- libxau6 +- libxcb1 +- libxcomposite1 +- libxcursor1 +- libxdamage1 +- libxdmcp6 +- libxext6 +- libxfixes3 +- libxi6 +- libxinerama1 +- libxrandr2 +- libxrender1 +- libxtst6 +- zlib1g +- $chromeos_lib_list +-" ++lib_list="libatk1.0-0 libc6 libasound2 libcairo2 libcups2 libdbus-glib-1-2 ++ libexpat1 libfontconfig1 libfreetype6 libglib2.0-0 libgnome-keyring0 ++ libgtk2.0-0 libpam0g libpango1.0-0 libpcre3 libpixman-1-0 ++ libpng12-0 libstdc++6 libsqlite3-0 libudev0 libx11-6 libxau6 libxcb1 ++ libxcomposite1 libxcursor1 libxdamage1 libxdmcp6 libxext6 libxfixes3 ++ libxi6 libxinerama1 libxrandr2 libxrender1 libxtst6 zlib1g ++ $chromeos_lib_list" + + # Debugging symbols for all of the run-time libraries +-dbg_list="\ +- libatk1.0-dbg +- libc6-dbg +- libcairo2-dbg +- libffi6-dbg +- libfontconfig1-dbg +- libglib2.0-0-dbg +- libgtk2.0-0-dbg +- libgtk-3-0-dbg +- libpango1.0-0-dbg +- libpcre3-dbg +- libpixman-1-0-dbg +- libsqlite3-0-dbg +- libx11-6-dbg +- libx11-xcb1-dbg +- libxau6-dbg +- libxcb1-dbg +- libxcomposite1-dbg +- libxcursor1-dbg +- libxdamage1-dbg +- libxdmcp6-dbg +- libxext6-dbg +- libxi6-dbg +- libxinerama1-dbg +- libxrandr2-dbg +- libxrender1-dbg +- libxtst6-dbg +- zlib1g-dbg +-" +- +-if [[ ! $distro_codename =~ "yakkety" ]]; then +- dbg_list="${dbg_list} libxfixes3-dbg" +-fi +- +-# Find the proper version of libstdc++6-4.x-dbg. +-if [ "x$distro_codename" = "xtrusty" ]; then +- dbg_list="${dbg_list} libstdc++6-4.8-dbg" +-else +- dbg_list="${dbg_list} libstdc++6-4.9-dbg" +-fi +- +-# 32-bit libraries needed e.g. to compile V8 snapshot for Android or armhf +-lib32_list="linux-libc-dev:i386" +- +-# arm cross toolchain packages needed to build chrome on armhf +-EM_REPO="deb http://emdebian.org/tools/debian/ jessie main" +-EM_SOURCE=$(cat </dev/null); then +- arm_list+=" ${GPP_ARM_PACKAGE}" +- else +- echo "The Debian Cross-toolchains repository is necessary to" +- echo "cross-compile Chromium for arm." +- echo -n "Do you want me to add it for you (y/N) " +- if yes_no 1; then +- gpg --keyserver pgp.mit.edu --recv-keys ${EM_ARCHIVE_KEY_FINGER} +- gpg -a --export ${EM_ARCHIVE_KEY_FINGER} | sudo apt-key add - +- if ! grep "^${EM_REPO}" "${CROSSTOOLS_LIST}" &>/dev/null; then +- echo "${EM_SOURCE}" | sudo tee -a "${CROSSTOOLS_LIST}" >/dev/null +- fi +- arm_list+=" ${GPP_ARM_PACKAGE}" +- fi +- fi +- fi +- ;; +- # All necessary ARM packages are available on the default repos on +- # Debian 9 and later. +- *) +- arm_list="binutils-aarch64-linux-gnu +- libc6-dev-armhf-cross +- linux-libc-dev-armhf-cross +- ${GPP_ARM_PACKAGE}" +- ;; +-esac +- +-# Work around for dependency issue Ubuntu/Trusty: http://crbug.com/435056 +-case $distro_codename in +- trusty) +- arm_list+=" g++-4.8-multilib-arm-linux-gnueabihf +- gcc-4.8-multilib-arm-linux-gnueabihf" +- ;; +- xenial|yakkety) +- arm_list+=" g++-5-multilib-arm-linux-gnueabihf +- gcc-5-multilib-arm-linux-gnueabihf +- gcc-arm-linux-gnueabihf" +- ;; +-esac +- +-# Packages to build NaCl, its toolchains, and its ports. +-naclports_list="ant autoconf bison cmake gawk intltool xutils-dev xsltproc" +-nacl_list="\ +- g++-mingw-w64-i686 +- lib32z1-dev +- libasound2:i386 +- libcap2:i386 +- libelf-dev:i386 +- libfontconfig1:i386 +- libgconf-2-4:i386 +- libglib2.0-0:i386 +- libgpm2:i386 +- libgtk2.0-0:i386 +- libgtk-3-0:i386 +- libncurses5:i386 +- lib32ncurses5-dev +- libnss3:i386 +- libpango1.0-0:i386 +- libssl-dev:i386 +- libtinfo-dev +- libtinfo-dev:i386 +- libtool +- libxcomposite1:i386 +- libxcursor1:i386 +- libxdamage1:i386 +- libxi6:i386 +- libxrandr2:i386 +- libxss1:i386 +- libxtst6:i386 +- texinfo +- xvfb +- ${naclports_list} +-" +- +-if package_exists libssl1.0.0; then +- nacl_list="${nacl_list} libssl1.0.0:i386" +-else +- nacl_list="${nacl_list} libssl1.0.2:i386" +-fi +- +-# Find the proper version of packages that depend on mesa. Only one -lts variant +-# of mesa can be installed and everything that depends on it must match. +- +-# Query for the name and status of all mesa LTS variants, filter for only +-# installed packages, extract just the name, and eliminate duplicates (there can +-# be more than one with the same name in the case of multiarch). Expand into an +-# array. +-mesa_packages=($(dpkg-query -Wf'${package} ${status}\n' \ +- libgl1-mesa-glx-lts-\* 2>/dev/null | \ +- grep " ok installed" | cut -d " " -f 1 | sort -u)) +-if [ "${#mesa_packages[@]}" -eq 0 ]; then +- mesa_variant="" +-elif [ "${#mesa_packages[@]}" -eq 1 ]; then +- # Strip the base package name and leave just "-lts-whatever" +- mesa_variant="${mesa_packages[0]#libgl1-mesa-glx}" +-else +- echo "ERROR: unable to determine which libgl1-mesa-glx variant is installed." +- exit 1 +-fi +-dev_list="${dev_list} libgbm-dev${mesa_variant} +- libgles2-mesa-dev${mesa_variant} libgl1-mesa-dev${mesa_variant} +- mesa-common-dev${mesa_variant}" +-nacl_list="${nacl_list} libgl1-mesa-glx${mesa_variant}:i386" ++dbg_list="libatk1.0-dbg libc6-dbg libcairo2-dbg libdbus-glib-1-2-dbg ++ libfontconfig1-dbg libglib2.0-0-dbg libgtk2.0-0-dbg ++ libpango1.0-0-dbg libpcre3-dbg libpixman-1-0-dbg ++ libsqlite3-0-dbg ++ libx11-6-dbg libxau6-dbg libxcb1-dbg libxcomposite1-dbg ++ libxcursor1-dbg libxdamage1-dbg libxdmcp6-dbg libxext6-dbg ++ libxfixes3-dbg libxi6-dbg libxinerama1-dbg libxrandr2-dbg ++ libxrender1-dbg libxtst6-dbg zlib1g-dbg" ++ ++# Plugin lists needed for tests. ++plugin_list="flashplugin-installer" + + # Some package names have changed over time +-if package_exists libpng12-0; then +- lib_list="${lib_list} libpng12-0" ++if apt-cache show ttf-mscorefonts-installer >/dev/null 2>&1; then ++ dev_list="${dev_list} ttf-mscorefonts-installer" + else +- lib_list="${lib_list} libpng16-16" ++ dev_list="${dev_list} msttcorefonts" + fi +-if package_exists libnspr4-dbg; then ++if apt-cache show libnspr4-dbg >/dev/null 2>&1; then + dbg_list="${dbg_list} libnspr4-dbg libnss3-dbg" + lib_list="${lib_list} libnspr4 libnss3" + else + dbg_list="${dbg_list} libnspr4-0d-dbg libnss3-1d-dbg" + lib_list="${lib_list} libnspr4-0d libnss3-1d" + fi +-if package_exists libjpeg-dev; then +- dev_list="${dev_list} libjpeg-dev" ++if apt-cache show libjpeg-dev >/dev/null 2>&1; then ++ dev_list="${dev_list} libjpeg-dev" + else +- dev_list="${dev_list} libjpeg62-dev" +-fi +-if package_exists libudev1; then +- dev_list="${dev_list} libudev1" +- nacl_list="${nacl_list} libudev1:i386" +-else +- dev_list="${dev_list} libudev0" +- nacl_list="${nacl_list} libudev0:i386" +-fi +-if package_exists libbrlapi0.6; then +- dev_list="${dev_list} libbrlapi0.6" +-else +- dev_list="${dev_list} libbrlapi0.5" +-fi +-if package_exists apache2-bin; then +- dev_list="${dev_list} apache2-bin" +-else +- dev_list="${dev_list} apache2.2-bin" +-fi +-if package_exists xfonts-mathml; then +- dev_list="${dev_list} xfonts-mathml" +-fi +-if package_exists fonts-indic; then +- dev_list="${dev_list} fonts-indic" +-else +- dev_list="${dev_list} ttf-indic-fonts" +-fi +-if package_exists php7.0-cgi; then +- dev_list="${dev_list} php7.0-cgi libapache2-mod-php7.0" +-else +- dev_list="${dev_list} php5-cgi libapache2-mod-php5" +-fi +-# ttf-mscorefonts-installer is in the Debian contrib repo, which has +-# dependencies on non-free software. Install it only if the user has already +-# enabled contrib. +-if package_exists ttf-mscorefonts-installer; then +- dev_list="${dev_list} ttf-mscorefonts-installer" +-elif package_exists msttcorefonts; then +- dev_list="${dev_list} msttcorefonts" +-fi +-# Ubuntu 16.04 has this package deleted. +-if package_exists ttf-kochi-gothic; then +- dev_list="${dev_list} ttf-kochi-gothic" +-fi +-# Ubuntu 16.04 has this package deleted. +-if package_exists ttf-kochi-mincho; then +- dev_list="${dev_list} ttf-kochi-mincho" ++ dev_list="${dev_list} libjpeg62-dev" + fi + +-# Some packages are only needed if the distribution actually supports ++# Some packages are only needed, if the distribution actually supports + # installing them. +-if package_exists appmenu-gtk; then ++if apt-cache show appmenu-gtk >/dev/null 2>&1; then + lib_list="$lib_list appmenu-gtk" + fi + +-# When cross building for arm/Android on 64-bit systems the host binaries +-# that are part of v8 need to be compiled with -m32 which means +-# that basic multilib support is needed. +-if file -L /sbin/init | grep -q 'ELF 64-bit'; then +- # gcc-multilib conflicts with the arm cross compiler (at least in trusty) but +- # g++-X.Y-multilib gives us the 32-bit support that we need. Find out the +- # appropriate value of X and Y by seeing what version the current +- # distribution's g++-multilib package depends on. +- multilib_package=$(apt-cache depends g++-multilib --important | \ +- grep -E --color=never --only-matching '\bg\+\+-[0-9.]+-multilib\b') +- lib32_list="$lib32_list $multilib_package" +-fi ++# Waits for the user to press 'Y' or 'N'. Either uppercase of lowercase is ++# accepted. Returns 0 for 'Y' and 1 for 'N'. If an optional parameter has ++# been provided to yes_no(), the function also accepts RETURN as a user input. ++# The parameter specifies the exit code that should be returned in that case. ++# The function will echo the user's selection followed by a newline character. ++# Users can abort the function by pressing CTRL-C. This will call "exit 1". ++yes_no() { ++ if [ 0 -ne "${do_default-0}" ] ; then ++ return $1 ++ fi ++ local c ++ while :; do ++ c="$(trap 'stty echo -iuclc icanon 2>/dev/null' EXIT INT TERM QUIT ++ stty -echo iuclc -icanon 2>/dev/null ++ dd count=1 bs=1 2>/dev/null | od -An -tx1)" ++ case "$c" in ++ " 0a") if [ -n "$1" ]; then ++ [ $1 -eq 0 ] && echo "Y" || echo "N" ++ return $1 ++ fi ++ ;; ++ " 79") echo "Y" ++ return 0 ++ ;; ++ " 6e") echo "N" ++ return 1 ++ ;; ++ "") echo "Aborted" >&2 ++ exit 1 ++ ;; ++ *) # The user pressed an unrecognized key. As we are not echoing ++ # any incorrect user input, alert the user by ringing the bell. ++ (tput bel) 2>/dev/null ++ ;; ++ esac ++ done ++} + +-if test "$do_inst_syms" = "" && test 0 -eq ${do_quick_check-0} ++if test "$do_inst_syms" = "" + then + echo "This script installs all tools and libraries needed to build Chromium." + echo "" +@@ -527,81 +177,12 @@ then + fi + fi + if test "$do_inst_syms" = "1"; then +- echo "Including debugging symbols." +- # Many debug packages are not available in Debian stretch, +- # so exclude the ones that are missing. +- available_dbg_packages="" +- for package in ${dbg_list}; do +- if package_exists ${package}; then +- available_dbg_packages="${available_dbg_packages} ${package}" +- fi +- done +- dbg_list="${available_dbg_packages}" ++ echo "Installing debugging symbols." + else +- echo "Skipping debugging symbols." ++ echo "Skipping installation of debugging symbols." + dbg_list= + fi + +-if test "$do_inst_lib32" = "1" ; then +- echo "Including 32-bit libraries for ARM/Android." +-else +- echo "Skipping 32-bit libraries for ARM/Android." +- lib32_list= +-fi +- +-if test "$do_inst_arm" = "1" ; then +- echo "Including ARM cross toolchain." +-else +- echo "Skipping ARM cross toolchain." +- arm_list= +-fi +- +-if test "$do_inst_nacl" = "1"; then +- echo "Including NaCl, NaCl toolchain, NaCl ports dependencies." +-else +- echo "Skipping NaCl, NaCl toolchain, NaCl ports dependencies." +- nacl_list= +-fi +- +-# The `sort -r -s -t: -k2` sorts all the :i386 packages to the front, to avoid +-# confusing dpkg-query (crbug.com/446172). +-packages="$( +- echo "${dev_list} ${lib_list} ${dbg_list} ${lib32_list} ${arm_list}"\ +- "${nacl_list}" | tr " " "\n" | sort -u | sort -r -s -t: -k2 | tr "\n" " " +-)" +- +-if [ 1 -eq "${do_quick_check-0}" ] ; then +- if ! missing_packages="$(dpkg-query -W -f ' ' ${packages} 2>&1)"; then +- # Distinguish between packages that actually aren't available to the +- # system (i.e. not in any repo) and packages that just aren't known to +- # dpkg (i.e. managed by apt). +- missing_packages="$(echo "${missing_packages}" | awk '{print $NF}')" +- not_installed="" +- unknown="" +- for p in ${missing_packages}; do +- if apt-cache show ${p} > /dev/null 2>&1; then +- not_installed="${p}\n${not_installed}" +- else +- unknown="${p}\n${unknown}" +- fi +- done +- if [ -n "${not_installed}" ]; then +- echo "WARNING: The following packages are not installed:" +- echo -e "${not_installed}" | sed -e "s/^/ /" +- fi +- if [ -n "${unknown}" ]; then +- echo "WARNING: The following packages are unknown to your system" +- echo "(maybe missing a repo or need to 'sudo apt-get update'):" +- echo -e "${unknown}" | sed -e "s/^/ /" +- fi +- exit 1 +- fi +- exit 0 +-fi +- +-if test "$do_inst_lib32" = "1" || test "$do_inst_nacl" = "1"; then +- sudo dpkg --add-architecture i386 +-fi + sudo apt-get update + + # We initially run "apt-get" with the --reinstall option and parse its output. +@@ -609,13 +190,14 @@ sudo apt-get update + # without accidentally promoting any packages from "auto" to "manual". + # We then re-run "apt-get" with just the list of missing packages. + echo "Finding missing packages..." ++packages="${dev_list} ${lib_list} ${dbg_list} ${plugin_list}" + # Intentionally leaving $packages unquoted so it's more readable. + echo "Packages required: " $packages + echo + new_list_cmd="sudo apt-get install --reinstall $(echo $packages)" +-if new_list="$(yes n | LANGUAGE=en LANG=C $new_list_cmd)"; then ++if new_list="$(yes n | LANG=C $new_list_cmd)"; then + # We probably never hit this following line. +- echo "No missing packages, and the packages are up to date." ++ echo "No missing packages, and the packages are up-to-date." + elif [ $? -eq 1 ]; then + # We expect apt-get to have exit status of 1. + # This indicates that we cancelled the install with "yes n|". +@@ -623,7 +205,7 @@ elif [ $? -eq 1 ]; then + sed -e '1,/The following NEW packages will be installed:/d;s/^ //;t;d') + new_list=$(echo "$new_list" | sed 's/ *$//') + if [ -z "$new_list" ] ; then +- echo "No missing packages, and the packages are up to date." ++ echo "No missing packages, and the packages are up-to-date." + else + echo "Installing missing packages: $new_list." + sudo apt-get install ${do_quietly-} ${new_list} +@@ -644,44 +226,189 @@ else + exit 100 + fi + +-# Install the Chrome OS default fonts. This must go after running +-# apt-get, since install-chromeos-fonts depends on curl. +-if test "$do_inst_chromeos_fonts" != "0"; then +- echo +- echo "Installing Chrome OS fonts." +- dir=`echo $0 | sed -r -e 's/\/[^/]+$//'` +- if ! sudo $dir/linux/install-chromeos-fonts.py; then +- echo "ERROR: The installation of the Chrome OS default fonts failed." +- if [ `stat -f -c %T $dir` == "nfs" ]; then +- echo "The reason is that your repo is installed on a remote file system." +- else +- echo "This is expected if your repo is installed on a remote file system." +- fi +- echo "It is recommended to install your repo on a local file system." +- echo "You can skip the installation of the Chrome OS default founts with" +- echo "the command line option: --no-chromeos-fonts." +- exit 1 ++# Install 32bit backwards compatibility support for 64bit systems ++if [ "$(uname -m)" = "x86_64" ]; then ++ if test "$do_inst_lib32" = "" ++ then ++ echo "We no longer recommend that you use this script to install" ++ echo "32bit libraries on a 64bit system. Instead, consider using" ++ echo "the install-chroot.sh script to help you set up a 32bit" ++ echo "environment for building and testing 32bit versions of Chrome." ++ echo ++ echo "If you nonetheless want to try installing 32bit libraries" ++ echo "directly, you can do so by explicitly passing the --lib32" ++ echo "option to install-build-deps.sh." ++ fi ++ if test "$do_inst_lib32" != "1" ++ then ++ echo "Exiting without installing any 32bit libraries." ++ exit 0 + fi +-else +- echo "Skipping installation of Chrome OS fonts." +-fi + +-echo "Installing locales." +-CHROMIUM_LOCALES="da_DK.UTF-8 fr_FR.UTF-8 he_IL.UTF-8 zh_TW.UTF-8" +-LOCALE_GEN=/etc/locale.gen +-if [ -e ${LOCALE_GEN} ]; then +- OLD_LOCALE_GEN="$(cat /etc/locale.gen)" +- for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do +- sudo sed -i "s/^# ${CHROMIUM_LOCALE}/${CHROMIUM_LOCALE}/" ${LOCALE_GEN} +- done +- # Regenerating locales can take a while, so only do it if we need to. +- if (echo "${OLD_LOCALE_GEN}" | cmp -s ${LOCALE_GEN}); then +- echo "Locales already up-to-date." ++ echo "N.B. the code for installing 32bit libraries on a 64bit" ++ echo " system is no longer actively maintained and might" ++ echo " not work with modern versions of Ubuntu or Debian." ++ echo ++ ++ # Standard 32bit compatibility libraries ++ echo "First, installing the limited existing 32-bit support..." ++ cmp_list="ia32-libs lib32asound2-dev lib32stdc++6 lib32z1 ++ lib32z1-dev libc6-dev-i386 libc6-i386 g++-multilib" ++ if [ -n "`apt-cache search lib32readline-gplv2-dev 2>/dev/null`" ]; then ++ cmp_list="${cmp_list} lib32readline-gplv2-dev" + else +- sudo locale-gen ++ cmp_list="${cmp_list} lib32readline5-dev" + fi +-else +- for CHROMIUM_LOCALE in ${CHROMIUM_LOCALES}; do +- sudo locale-gen ${CHROMIUM_LOCALE} ++ sudo apt-get install ${do_quietly-} $cmp_list ++ ++ tmp=/tmp/install-32bit.$$ ++ trap 'rm -rf "${tmp}"' EXIT INT TERM QUIT ++ mkdir -p "${tmp}/apt/lists/partial" "${tmp}/cache" "${tmp}/partial" ++ touch "${tmp}/status" ++ ++ [ -r /etc/apt/apt.conf ] && cp /etc/apt/apt.conf "${tmp}/apt/" ++ cat >>"${tmp}/apt/apt.conf" <dpkg/DEBIAN/postinst ++ { echo "#!/bin/sh"; echo "[ \"x\$1\" = xremove ]&&ldconfig||:"; } \ ++ >dpkg/DEBIAN/postrm ++ chmod 755 dpkg/DEBIAN/postinst dpkg/DEBIAN/postrm ++ ++ # Remove any other control files ++ find dpkg/DEBIAN -mindepth 1 "(" -name control -o -name md5sums -o \ ++ -name postinst -o -name postrm ")" -o -print | ++ xargs -r rm -rf ++ ++ # Remove any files/dirs that live outside of "lib" directories, ++ # or are not in our list of changed includes. ++ find dpkg -mindepth 1 -regextype posix-extended \ ++ "(" -name DEBIAN -o -name lib -o -regex "dpkg/($includes)" ")" \ ++ -prune -o -print | tac | ++ xargs -r -n 1 sh -c "rm \$0 2>/dev/null || rmdir \$0 2>/dev/null || : " ++ find dpkg -name lib64 -o -name bin -o -name "?bin" | ++ tac | xargs -r rm -rf ++ ++ # Remove any symbolic links that were broken by the above steps. ++ find -L dpkg -type l -print | tac | xargs -r rm -rf ++ ++ # Rename lib to lib32, but keep debug symbols in /usr/lib/debug/usr/lib32 ++ # That is where gdb looks for them. ++ find dpkg -type d -o -path "*/lib/*" -print | ++ xargs -r -n 1 sh -c " ++ i=\$(echo \"\${0}\" | ++ sed -e s,/lib/,/lib32/,g \ ++ -e s,/usr/lib32/debug\\\\\(.*/lib32\\\\\),/usr/lib/debug\\\\1,); ++ mkdir -p \"\${i%/*}\"; ++ mv \"\${0}\" \"\${i}\"" ++ ++ # Rename include to include32. ++ [ -d "dpkg/usr/include" ] && mv "dpkg/usr/include" "dpkg/usr/include32" ++ ++ # Prune any empty directories ++ find dpkg -type d | tac | xargs -r -n 1 rmdir 2>/dev/null || : ++ ++ # Create our own Debian package ++ cd .. ++ dpkg --build staging/dpkg .' 2>&1)" ++ compat="$(eval echo $(echo "${compat}" | ++ sed -e 's,_[^_/]*_amd64.deb,_*_amd64.deb,'))" ++ [ -r "${compat}" ] || { ++ echo "${msg}" >&2 ++ echo "Failed to build new Debian archive!" >&2 ++ exit 1 ++ } ++ ++ msg="$(sudo dpkg -i "${compat}" 2>&1)" && { ++ echo "Installed ${compat##*/}" ++ } || { ++ # echo "${msg}" >&2 ++ echo "Skipped ${compat##*/}" ++ } ++ done ++ ++ # Add symbolic links for developing 32bit code ++ echo "Adding missing symbolic links, enabling 32bit code development..." ++ for i in $(find /lib32 /usr/lib32 -maxdepth 1 -name \*.so.\* | ++ sed -e 's/[.]so[.][0-9].*/.so/' | ++ sort -u); do ++ [ "x${i##*/}" = "xld-linux.so" ] && continue ++ [ -r "$i" ] && continue ++ j="$(ls "$i."* | sed -e 's/.*[.]so[.]\([^.]*\)$/\1/;t;d' | ++ sort -n | tail -n 1)" ++ [ -r "$i.$j" ] || continue ++ sudo ln -s "${i##*/}.$j" "$i" + done + fi +diff --git media/webrtc/trunk/build/install-chroot.sh media/webrtc/trunk/build/install-chroot.sh +index 99451ed7ea49..d2c06fc39adc 100755 +--- media/webrtc/trunk/build/install-chroot.sh ++++ media/webrtc/trunk/build/install-chroot.sh +@@ -12,7 +12,7 @@ + + # Older Debian based systems had both "admin" and "adm" groups, with "admin" + # apparently being used in more places. Newer distributions have standardized +-# on just the "adm" group. Check /etc/group for the preferred name of the ++# on just the "adm" group. Check /etc/group for the prefered name of the + # administrator group. + admin=$(grep '^admin:' /etc/group >&/dev/null && echo admin || echo adm) + +@@ -223,8 +223,7 @@ target="${distname}${arch}" + d|D) sudo rm -rf "/var/lib/chroot/${target}" \ + "/usr/local/bin/${target%bit}" \ + "/etc/schroot/mount-${target}" \ +- "/etc/schroot/script-${target}" \ +- "/etc/schroot/${target}" ++ "/etc/schroot/script-${target}" + sudo sed -ni '/^[[]'"${target%bit}"']$/,${ + :1;n;/^[[]/b2;b1;:2;p;n;b2};p' \ + "/etc/schroot/schroot.conf" +@@ -350,41 +349,13 @@ grep -qs ubuntu.com /usr/share/debootstrap/scripts/"${distname}" && + if [ -z "${chroot_groups}" ]; then + chroot_groups="${admin},$(id -gn)" + fi +- +-if [ -d '/etc/schroot/default' ]; then +- new_version=1 +- fstab="/etc/schroot/${target}/fstab" +-else +- new_version=0 +- fstab="/etc/schroot/mount-${target}" +-fi +- +-if [ "$new_version" = "1" ]; then +- sudo cp -ar /etc/schroot/default /etc/schroot/${target} +- +- sudo sh -c 'cat >>/etc/schroot/schroot.conf' <>${fstab}" +-else +- # Older versions of schroot wanted a "priority=" line, whereas recent +- # versions deprecate "priority=" and warn if they see it. We don't have +- # a good feature test, but scanning for the string "priority=" in the +- # existing "schroot.conf" file is a good indication of what to do. +- priority=$(grep -qs 'priority=' /etc/schroot/schroot.conf && ++# Older versions of schroot wanted a "priority=" line, whereas recent ++# versions deprecate "priority=" and warn if they see it. We don't have ++# a good feature test, but scanning for the string "priority=" in the ++# existing "schroot.conf" file is a good indication of what to do. ++priority=$(grep -qs 'priority=' /etc/schroot/schroot.conf && + echo 'priority=3' || :) +- sudo sh -c 'cat >>/etc/schroot/schroot.conf' <>/etc/schroot/schroot.conf' </etc/schroot/script-'"${target}" +- sed '\,^/home[/[:space:]],s/\([,[:space:]]\)bind[[:space:]]/\1rbind /' \ +- /etc/schroot/mount-defaults | +- sudo sh -c "cat > ${fstab}" +-fi ++# Set up a list of mount points that is specific to this ++# chroot environment. ++sed '/^FSTAB=/s,"[^"]*","/etc/schroot/mount-'"${target}"'",' \ ++ /etc/schroot/script-defaults | ++ sudo sh -c 'cat >/etc/schroot/script-'"${target}" ++sed '\,^/home[/[:space:]],s/\([,[:space:]]\)bind[[:space:]]/\1rbind /' \ ++ /etc/schroot/mount-defaults | ++ sudo sh -c 'cat > /etc/schroot/mount-'"${target}" + + # Add the extra mount points that the user told us about + [ -n "${bind_mounts}" -a "${bind_mounts}" != "NONE" ] && + printf "${bind_mounts}" | +- sudo sh -c 'cat >>'"${fstab}" ++ sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" + + # If this system has a "/media" mountpoint, import it into the chroot + # environment. Most modern distributions use this mount point to + # automatically mount devices such as CDROMs, USB sticks, etc... + if [ -d /media ] && +- ! grep -qs '^/media' "${fstab}"; then ++ ! grep -qs '^/media' /etc/schroot/mount-"${target}"; then + echo '/media /media none rw,rbind 0 0' | +- sudo sh -c 'cat >>'"${fstab}" ++ sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" + fi + +-# Share /dev/shm, /run and /run/shm. +-grep -qs '^/dev/shm' "${fstab}" || ++# Share /dev/shm and possibly /run/shm ++grep -qs '^/dev/shm' /etc/schroot/mount-"${target}" || + echo '/dev/shm /dev/shm none rw,bind 0 0' | +- sudo sh -c 'cat >>'"${fstab}" +-if [ ! -d "/var/lib/chroot/${target}/run" ] && +- ! grep -qs '^/run' "${fstab}"; then +- echo '/run /run none rw,bind 0 0' | +- sudo sh -c 'cat >>'"${fstab}" +-fi +-if ! grep -qs '^/run/shm' "${fstab}"; then ++ sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" ++if [ -d "/var/lib/chroot/${target}/run" ] && ++ ! grep -qs '^/run/shm' /etc/schroot/mount-"${target}"; then + { [ -d /run ] && echo '/run/shm /run/shm none rw,bind 0 0' || + echo '/dev/shm /run/shm none rw,bind 0 0'; } | +- sudo sh -c 'cat >>'"${fstab}" ++ sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" + fi + + # Set up a special directory that changes contents depending on the target +@@ -442,7 +408,7 @@ fi + d="$(readlink -f "${HOME}/chroot" 2>/dev/null || echo "${HOME}/chroot")" + s="${d}/.${target}" + echo "${s} ${d} none rw,bind 0 0" | +- sudo sh -c 'cat >>'"${target}" ++ sudo sh -c 'cat >>/etc/schroot/mount-'"${target}" + mkdir -p "${s}" + + # Install a helper script to launch commands in the chroot +@@ -527,69 +493,27 @@ while [ "$#" -ne 0 ]; do + esac + done + +-# Start a new chroot session and keep track of the session id. We inject this +-# id into all processes that run inside the chroot. Unless they go out of their +-# way to clear their environment, we can then later identify our child and +-# grand-child processes by scanning their environment. + session="$(schroot -c "${chroot}" -b)" +-export CHROOT_SESSION_ID="${session}" +- +-# Set GOMA_TMP_DIR for better handling of goma inside chroot. +-export GOMA_TMP_DIR="/tmp/goma_tmp_$CHROOT_SESSION_ID" +-mkdir -p "$GOMA_TMP_DIR" + + if [ $# -eq 0 ]; then +- # Run an interactive shell session + schroot -c "${session}" -r -p + else +- # Run a command inside of the chroot environment + p="$1"; shift + schroot -c "${session}" -r -p "$p" -- "$@" + fi + rc=$? + +-# Compute the inode of the root directory inside of the chroot environment. + i=$(schroot -c "${session}" -r -p ls -- -id /proc/self/root/. | + awk '{ print $1 }') 2>/dev/null +-other_pids= + while [ -n "$i" ]; do +- # Identify processes by the inode number of their root directory. Then +- # remove all processes that we know belong to other sessions. We use +- # "sort | uniq -u" to do what amounts to a "set substraction operation". +- pids=$({ ls -id1 /proc/*/root/. 2>/dev/null | ++ pids=$(ls -id1 /proc/*/root/. 2>/dev/null | + sed -e 's,^[^0-9]*'$i'.*/\([1-9][0-9]*\)/.*$,\1, + t +- d'; +- echo "${other_pids}"; +- echo "${other_pids}"; } | sort | uniq -u) >/dev/null 2>&1 +- # Kill all processes that are still left running in the session. This is +- # typically an assortment of daemon processes that were started +- # automatically. They result in us being unable to tear down the session +- # cleanly. +- [ -z "${pids}" ] && break +- for j in $pids; do +- # Unfortunately, the way that schroot sets up sessions has the +- # side-effect of being unable to tell one session apart from another. +- # This can result in us attempting to kill processes in other sessions. +- # We make a best-effort to avoid doing so. +- k="$( ( xargs -0 -n1 /dev/null | +- sed 's/^CHROOT_SESSION_ID=/x/;t1;d;:1;q')" +- if [ -n "${k}" -a "${k#x}" != "${session}" ]; then +- other_pids="${other_pids} +-${j}" +- continue +- fi +- kill -9 $pids +- done ++ d') >/dev/null 2>&1 ++ [ -z "$pids" ] && break ++ kill -9 $pids + done +-# End the chroot session. This should clean up all temporary files. But if we +-# earlier failed to terminate all (daemon) processes inside of the session, +-# deleting the session could fail. When that happens, the user has to manually +-# clean up the stale files by invoking us with "--clean" after having killed +-# all running processes. + schroot -c "${session}" -e +-# Since no goma processes are running, we can remove goma directory. +-rm -rf "$GOMA_TMP_DIR" + exit $rc + EOF + sudo chown root:root /usr/local/bin/"${target%bit}" +@@ -659,12 +583,9 @@ sudo "/usr/local/bin/${target%bit}" dpkg --assert-multi-arch >&/dev/null && + sudo sed -i 's/ / [arch=amd64,i386] /' \ + "/var/lib/chroot/${target}/etc/apt/sources.list" + [ -d /var/lib/chroot/${target}/etc/dpkg/dpkg.cfg.d/ ] && +- sudo "/usr/local/bin/${target%bit}" dpkg --add-architecture \ +- $([ "${arch}" = "32bit" ] && echo amd64 || echo i386) >&/dev/null || +- echo foreign-architecture \ +- $([ "${arch}" = "32bit" ] && echo amd64 || echo i386) | +- sudo sh -c \ +- "cat >'/var/lib/chroot/${target}/etc/dpkg/dpkg.cfg.d/multiarch'" ++ echo foreign-architecture \ ++ $([ "${arch}" = "32bit" ] && echo amd64 || echo i386) | ++ sudo sh -c "cat >'/var/lib/chroot/${target}/etc/dpkg/dpkg.cfg.d/multiarch'" + } + + # Configure "sudo" package +@@ -675,7 +596,7 @@ sudo "/usr/local/bin/${target%bit}" /bin/sh -c ' + # Install a few more commonly used packages + sudo "/usr/local/bin/${target%bit}" apt-get -y install \ + autoconf automake1.9 dpkg-dev g++-multilib gcc-multilib gdb less libtool \ +- lsof strace ++ strace + + # If running a 32bit environment on a 64bit machine, install a few binaries + # as 64bit. This is only done automatically if the chroot distro is the same as +@@ -689,7 +610,7 @@ if [ "${copy_64}" = "y" -o \ + readlinepkg=$(sudo "/usr/local/bin/${target%bit}" sh -c \ + 'apt-cache search "lib64readline.\$" | sort | tail -n 1 | cut -d " " -f 1') + sudo "/usr/local/bin/${target%bit}" apt-get -y install \ +- lib64expat1 lib64ncurses5 ${readlinepkg} lib64z1 lib64stdc++6 ++ lib64expat1 lib64ncurses5 ${readlinepkg} lib64z1 + dep= + for i in binutils gdb; do + [ -d /usr/share/doc/"$i" ] || dep="$dep $i" +@@ -747,7 +668,7 @@ if [ -x "${script}" ]; then + # installing the Chrome build depencies. This prevents the chroot + # session from being closed. So, we always try to shut down any running + # instance of dbus and rsyslog. +- sudo /usr/local/bin/"${target%bit}" sh -c "${script}; ++ sudo /usr/local/bin/"${target%bit}" sh -c "${script} --no-lib32; + rc=$?; + /etc/init.d/cron stop >/dev/null 2>&1 || :; + /etc/init.d/rsyslog stop >/dev/null 2>&1 || :; +@@ -848,7 +769,7 @@ if [ ! -h "${HOME}/chroot" ] && + fi + + # Clean up package files +-sudo schroot -c "${target%bit}" -p -- apt-get clean ++sudo schroot -c /usr/local/bin/"${target%bit}" -p -- apt-get clean + sudo apt-get clean + + trap '' INT TERM QUIT HUP +diff --git media/webrtc/trunk/build/linux/chrome_linux.croc media/webrtc/trunk/build/linux/chrome_linux.croc +new file mode 100644 +index 000000000000..f4003060f69c +--- /dev/null ++++ media/webrtc/trunk/build/linux/chrome_linux.croc +@@ -0,0 +1,29 @@ ++# -*- python -*- ++# Crocodile config file for Chromium linux ++ ++# TODO(jhawkins): We'll need to add a chromeos.croc once we get a coverage bot ++# for that platform. ++ ++{ ++ # List of rules, applied in order ++ 'rules' : [ ++ # Specify inclusions before exclusions, since rules are in order. ++ ++ # Don't include non-Linux platform dirs ++ { ++ 'regexp' : '.*/(chromeos|views)/', ++ 'include' : 0, ++ }, ++ # Don't include chromeos, windows, or mac specific files ++ { ++ 'regexp' : '.*(_|/)(chromeos|mac|win|views)(\\.|_)', ++ 'include' : 0, ++ }, ++ ++ # Groups ++ { ++ 'regexp' : '.*_test_linux\\.', ++ 'group' : 'test', ++ }, ++ ], ++} +diff --git media/webrtc/trunk/build/linux/dump_app_syms media/webrtc/trunk/build/linux/dump_app_syms +new file mode 100755 +index 000000000000..632bcc76a954 +--- /dev/null ++++ media/webrtc/trunk/build/linux/dump_app_syms +@@ -0,0 +1,36 @@ ++#!/bin/sh ++ ++# Copyright (c) 2010 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++# ++# Helper script to run dump_syms on Chrome Linux executables and strip ++# them if needed. ++ ++set -e ++ ++usage() { ++ echo -n "$0 " >&2 ++ echo " " >&2 ++} ++ ++ ++if [ $# -ne 4 ]; then ++ usage ++ exit 1 ++fi ++ ++SCRIPTDIR="$(readlink -f "$(dirname "$0")")" ++DUMPSYMS="$1" ++STRIP_BINARY="$2" ++INFILE="$3" ++OUTFILE="$4" ++ ++# Dump the symbols from the given binary. ++if [ ! -e "$OUTFILE" -o "$INFILE" -nt "$OUTFILE" ]; then ++ "$DUMPSYMS" "$INFILE" > "$OUTFILE" ++fi ++ ++if [ "$STRIP_BINARY" != "0" ]; then ++ strip "$INFILE" ++fi +diff --git media/webrtc/trunk/build/linux/pkg-config-wrapper media/webrtc/trunk/build/linux/pkg-config-wrapper +new file mode 100755 +index 000000000000..c39e5cd3f38c +--- /dev/null ++++ media/webrtc/trunk/build/linux/pkg-config-wrapper +@@ -0,0 +1,47 @@ ++#!/bin/bash ++# Copyright (c) 2012 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++# This program wraps around pkg-config to generate the correct include and ++# library paths when cross-compiling using a sysroot. ++# The assumption is that the sysroot contains the .pc files in usr/lib/pkgconfig ++# and usr/share/pkgconfig (relative to the sysroot) and that they output paths ++# relative to some parent path of the sysroot. ++# This assumption is valid for a range of sysroots, in particular: a ++# LSB-compliant root filesystem mounted at the sysroot, and a board build ++# directory of a Chromium OS chroot. ++ ++root="$1" ++shift ++target_arch="$1" ++shift ++ ++if [ -z "$root" -o -z "$target_arch" ] ++then ++ echo "usage: $0 /path/to/sysroot target_arch [pkg-config-arguments] package" >&2 ++ exit 1 ++fi ++ ++if [ "$target_arch" = "x64" ] ++then ++ libpath="lib64" ++else ++ libpath="lib" ++fi ++ ++rewrite=`dirname $0`/rewrite_dirs.py ++package=${!#} ++ ++config_path=$root/usr/$libpath/pkgconfig:$root/usr/share/pkgconfig ++set -e ++# Some sysroots, like the Chromium OS ones, may generate paths that are not ++# relative to the sysroot. For example, ++# /path/to/chroot/build/x86-generic/usr/lib/pkgconfig/pkg.pc may have all paths ++# relative to /path/to/chroot (i.e. prefix=/build/x86-generic/usr) instead of ++# relative to /path/to/chroot/build/x86-generic (i.e prefix=/usr). ++# To support this correctly, it's necessary to extract the prefix to strip from ++# pkg-config's |prefix| variable. ++prefix=`PKG_CONFIG_PATH=$config_path pkg-config --variable=prefix "$package" | sed -e 's|/usr$||'` ++result=`PKG_CONFIG_PATH=$config_path pkg-config "$@"` ++echo "$result"| $rewrite --sysroot "$root" --strip-prefix "$prefix" +diff --git media/webrtc/trunk/build/linux/python_arch.sh media/webrtc/trunk/build/linux/python_arch.sh +new file mode 100755 +index 000000000000..01e41d066e2a +--- /dev/null ++++ media/webrtc/trunk/build/linux/python_arch.sh +@@ -0,0 +1,42 @@ ++#!/bin/sh ++# Copyright (c) 2011 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++# This figures out the architecture of the version of Python we are building ++# pyautolib against. ++# ++# python_arch.sh /usr/lib/libpython2.5.so.1.0 ++# python_arch.sh /path/to/sysroot/usr/lib/libpython2.4.so.1.0 ++# ++ ++python=$(readlink -f "$1") ++if [ ! -r "$python" ]; then ++ echo unknown ++ exit 0 ++fi ++file_out=$(file "$python") ++if [ $? -ne 0 ]; then ++ echo unknown ++ exit 0 ++fi ++ ++echo $file_out | grep -qs "ARM" ++if [ $? -eq 0 ]; then ++ echo arm ++ exit 0 ++fi ++ ++echo $file_out | grep -qs "x86-64" ++if [ $? -eq 0 ]; then ++ echo x64 ++ exit 0 ++fi ++ ++echo $file_out | grep -qs "Intel 80386" ++if [ $? -eq 0 ]; then ++ echo ia32 ++ exit 0 ++fi ++ ++exit 1 +diff --git media/webrtc/trunk/build/linux/rewrite_dirs.py media/webrtc/trunk/build/linux/rewrite_dirs.py +new file mode 100755 +index 000000000000..30f22f0cd617 +--- /dev/null ++++ media/webrtc/trunk/build/linux/rewrite_dirs.py +@@ -0,0 +1,71 @@ ++#!/usr/bin/env python ++# Copyright (c) 2011 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++"""Rewrites paths in -I, -L and other option to be relative to a sysroot.""" ++ ++import sys ++import os ++import optparse ++ ++REWRITE_PREFIX = ['-I', ++ '-idirafter', ++ '-imacros', ++ '-imultilib', ++ '-include', ++ '-iprefix', ++ '-iquote', ++ '-isystem', ++ '-L'] ++ ++def RewritePath(path, opts): ++ """Rewrites a path by stripping the prefix and prepending the sysroot.""" ++ sysroot = opts.sysroot ++ prefix = opts.strip_prefix ++ if os.path.isabs(path) and not path.startswith(sysroot): ++ if path.startswith(prefix): ++ path = path[len(prefix):] ++ path = path.lstrip('/') ++ return os.path.join(sysroot, path) ++ else: ++ return path ++ ++ ++def RewriteLine(line, opts): ++ """Rewrites all the paths in recognized options.""" ++ args = line.split() ++ count = len(args) ++ i = 0 ++ while i < count: ++ for prefix in REWRITE_PREFIX: ++ # The option can be either in the form "-I /path/to/dir" or ++ # "-I/path/to/dir" so handle both. ++ if args[i] == prefix: ++ i += 1 ++ try: ++ args[i] = RewritePath(args[i], opts) ++ except IndexError: ++ sys.stderr.write('Missing argument following %s\n' % prefix) ++ break ++ elif args[i].startswith(prefix): ++ args[i] = prefix + RewritePath(args[i][len(prefix):], opts) ++ i += 1 ++ ++ return ' '.join(args) ++ ++ ++def main(argv): ++ parser = optparse.OptionParser() ++ parser.add_option('-s', '--sysroot', default='/', help='sysroot to prepend') ++ parser.add_option('-p', '--strip-prefix', default='', help='prefix to strip') ++ opts, args = parser.parse_args(argv[1:]) ++ ++ for line in sys.stdin.readlines(): ++ line = RewriteLine(line.strip(), opts) ++ print line ++ return 0 ++ ++ ++if __name__ == '__main__': ++ sys.exit(main(sys.argv)) +diff --git media/webrtc/trunk/build/linux/system.gyp media/webrtc/trunk/build/linux/system.gyp +new file mode 100644 +index 000000000000..e36e558a8bdd +--- /dev/null ++++ media/webrtc/trunk/build/linux/system.gyp +@@ -0,0 +1,637 @@ ++# Copyright (c) 2012 The Chromium Authors. All rights reserved. ++# Use of this source code is governed by a BSD-style license that can be ++# found in the LICENSE file. ++ ++{ ++ 'variables': { ++ 'conditions': [ ++ ['sysroot!=""', { ++ 'pkg-config': './pkg-config-wrapper "<(sysroot)" "<(target_arch)"', ++ }, { ++ 'pkg-config': 'pkg-config' ++ }] ++ ], ++ }, ++ 'conditions': [ ++ [ 'os_posix==1 and OS!="mac"', { ++ 'variables': { ++ # We use our own copy of libssl3, although we still need to link against ++ # the rest of NSS. ++ 'use_system_ssl%': 0, ++ }, ++ }, { ++ 'variables': { ++ 'use_system_ssl%': 1, ++ }, ++ }], ++ [ 'chromeos==0', { ++ # Hide GTK and related dependencies for Chrome OS, so they won't get ++ # added back to Chrome OS. Don't try to use GTK on Chrome OS. ++ 'targets': [ ++ { ++ 'target_name': 'gtk', ++ 'type': 'none', ++ 'toolsets': ['host', 'target'], ++ 'variables': { ++ # gtk requires gmodule, but it does not list it as a dependency ++ # in some misconfigured systems. ++ 'gtk_packages': 'gmodule-2.0 gtk+-2.0 gthread-2.0', ++ }, ++ 'conditions': [ ++ ['_toolset=="target"', { ++ 'direct_dependent_settings': { ++ 'cflags': [ ++ '= <(ibus_min_version)")', ++ ], ++ }, ++ 'link_settings': { ++ 'ldflags': [ ++ '= <(ibus_min_version)")', ++ ], ++ 'libraries': [ ++ '= <(ibus_min_version)")', ++ ], ++ }, ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'udev', ++ 'type': 'none', ++ 'conditions': [ ++ # libudev is not available on *BSD ++ ['_toolset=="target" and os_bsd!=1', { ++ 'direct_dependent_settings': { ++ 'cflags': [ ++ '> sys.stderr, out +- print >> sys.stderr, err +- raise Exception('Error %d running xcode-select' % job.returncode) +- sdk_dir = os.path.join( ++ if sys.platform == 'darwin': ++ job = subprocess.Popen(['xcode-select', '-print-path'], ++ stdout=subprocess.PIPE, ++ stderr=subprocess.STDOUT) ++ out, err = job.communicate() ++ if job.returncode != 0: ++ print >>sys.stderr, out ++ print >>sys.stderr, err ++ raise Exception(('Error %d running xcode-select, you might have to run ' ++ '|sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer| ' ++ 'if you are using Xcode 4.') % job.returncode) ++ # The Developer folder moved in Xcode 4.3. ++ xcode43_sdk_path = os.path.join( + out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs') +- sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)] +- sdks = [s[0] for s in sdks if s] # [['10.5'], ['10.6']] => ['10.5', '10.6'] +- sdks = [s for s in sdks # ['10.5', '10.6'] => ['10.6'] +- if parse_version(s) >= parse_version(min_sdk_version)] +- if not sdks: +- raise Exception('No %s+ SDK found' % min_sdk_version) +- best_sdk = sorted(sdks, key=parse_version)[0] ++ if os.path.isdir(xcode43_sdk_path): ++ sdk_dir = xcode43_sdk_path ++ else: ++ sdk_dir = os.path.join(out.rstrip(), 'SDKs') ++ sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)] ++ sdks = [s[0] for s in sdks if s] # [['10.5'], ['10.6']] => ['10.5', '10.6'] ++ sdks = [s for s in sdks # ['10.5', '10.6'] => ['10.6'] ++ if parse_version(s) >= parse_version(min_sdk_version)] ++ if not sdks: ++ raise Exception('No %s+ SDK found' % min_sdk_version) ++ best_sdk = sorted(sdks, key=parse_version)[0] ++ else: ++ best_sdk = "" + + if options.verify and best_sdk != min_sdk_version and not options.sdk_path: +- print >> sys.stderr, '' +- print >> sys.stderr, ' vvvvvvv' +- print >> sys.stderr, '' +- print >> sys.stderr, \ ++ print >>sys.stderr, '' ++ print >>sys.stderr, ' vvvvvvv' ++ print >>sys.stderr, '' ++ print >>sys.stderr, \ + 'This build requires the %s SDK, but it was not found on your system.' \ + % min_sdk_version +- print >> sys.stderr, \ ++ print >>sys.stderr, \ + 'Either install it, or explicitly set mac_sdk in your GYP_DEFINES.' +- print >> sys.stderr, '' +- print >> sys.stderr, ' ^^^^^^^' +- print >> sys.stderr, '' +- sys.exit(1) +- +- if options.print_sdk_path: +- print subprocess.check_output( +- ['xcrun', '-sdk', 'macosx' + best_sdk, '--show-sdk-path']).strip() ++ print >>sys.stderr, '' ++ print >>sys.stderr, ' ^^^^^^^' ++ print >>sys.stderr, '' ++ return min_sdk_version + + return best_sdk + + + if __name__ == '__main__': +- if sys.platform == 'darwin' and os.environ.get('MOZ_AUTOMATION') != '1': +- print main() +- else: +- # Mozilla builds cross-compile on Linux or install an SDK from tooltool, so +- # return some fake data to keep the build system happy. These values aren't +- # used anywhere. +- print "." +- print "." +- sys.exit(0) ++ print main() ++ +diff --git media/webrtc/trunk/build/mac/tweak_info_plist.py media/webrtc/trunk/build/mac/tweak_info_plist.py +index 920c62daf99f..9b57e7da01ba 100755 +--- media/webrtc/trunk/build/mac/tweak_info_plist.py ++++ media/webrtc/trunk/build/mac/tweak_info_plist.py +@@ -22,19 +22,17 @@ + + import optparse + import os ++from os import environ as env + import plistlib + import re + import subprocess + import sys + import tempfile + +-TOP = os.path.dirname(os.path.dirname(os.path.dirname(__file__))) ++TOP = os.path.join(env['SRCROOT'], '..') + +- +-def _ConvertPlist(source_plist, output_plist, fmt): +- """Convert |source_plist| to |fmt| and save as |output_plist|.""" +- return subprocess.call( +- ['plutil', '-convert', fmt, '-o', output_plist, source_plist]) ++sys.path.insert(0, os.path.join(TOP, "build/util")) ++import lastchange + + + def _GetOutput(args): +@@ -67,68 +65,37 @@ def _RemoveKeys(plist, *keys): + pass + + +-def _ApplyVersionOverrides(version, keys, overrides, separator='.'): +- """Applies version overrides. +- +- Given a |version| string as "a.b.c.d" (assuming a default separator) with +- version components named by |keys| then overrides any value that is present +- in |overrides|. +- +- >>> _ApplyVersionOverrides('a.b', ['major', 'minor'], {'minor': 'd'}) +- 'a.d' +- """ +- if not overrides: +- return version +- version_values = version.split(separator) +- for i, (key, value) in enumerate(zip(keys, version_values)): +- if key in overrides: +- version_values[i] = overrides[key] +- return separator.join(version_values) +- +- +-def _GetVersion(version_format, values, overrides=None): +- """Generates a version number according to |version_format| using the values +- from |values| or |overrides| if given.""" +- result = version_format +- for key in values: +- if overrides and key in overrides: +- value = overrides[key] +- else: +- value = values[key] +- result = result.replace('@%s@' % key, value) +- return result +- +- +-def _AddVersionKeys( +- plist, version_format_for_key, version=None, overrides=None): ++def _AddVersionKeys(plist): + """Adds the product version number into the plist. Returns True on success and + False on error. The error will be printed to stderr.""" +- if not version: +- # Pull in the Chrome version number. +- VERSION_TOOL = os.path.join(TOP, 'build/util/version.py') +- VERSION_FILE = os.path.join(TOP, 'chrome/VERSION') +- (stdout, retval) = _GetOutput([ +- VERSION_TOOL, '-f', VERSION_FILE, +- '-t', '@MAJOR@.@MINOR@.@BUILD@.@PATCH@']) +- +- # If the command finished with a non-zero return code, then report the +- # error up. +- if retval != 0: +- return False +- +- version = stdout.strip() +- +- # Parse the given version number, that should be in MAJOR.MINOR.BUILD.PATCH +- # format (where each value is a number). Note that str.isdigit() returns +- # True if the string is composed only of digits (and thus match \d+ regexp). +- groups = version.split('.') +- if len(groups) != 4 or not all(element.isdigit() for element in groups): +- print >>sys.stderr, 'Invalid version string specified: "%s"' % version ++ # Pull in the Chrome version number. ++ VERSION_TOOL = os.path.join(TOP, 'chrome/tools/build/version.py') ++ VERSION_FILE = os.path.join(TOP, 'chrome/VERSION') ++ ++ (stdout, retval1) = _GetOutput([VERSION_TOOL, '-f', VERSION_FILE, '-t', ++ '@MAJOR@.@MINOR@.@BUILD@.@PATCH@']) ++ full_version = stdout.rstrip() ++ ++ (stdout, retval2) = _GetOutput([VERSION_TOOL, '-f', VERSION_FILE, '-t', ++ '@BUILD@.@PATCH@']) ++ bundle_version = stdout.rstrip() ++ ++ # If either of the two version commands finished with non-zero returncode, ++ # report the error up. ++ if retval1 or retval2: + return False +- values = dict(zip(('MAJOR', 'MINOR', 'BUILD', 'PATCH'), groups)) + +- for key in version_format_for_key: +- plist[key] = _GetVersion(version_format_for_key[key], values, overrides) ++ # Add public version info so "Get Info" works. ++ plist['CFBundleShortVersionString'] = full_version ++ ++ # Honor the 429496.72.95 limit. The maximum comes from splitting 2^32 - 1 ++ # into 6, 2, 2 digits. The limitation was present in Tiger, but it could ++ # have been fixed in later OS release, but hasn't been tested (it's easy ++ # enough to find out with "lsregister -dump). ++ # http://lists.apple.com/archives/carbon-dev/2006/Jun/msg00139.html ++ # BUILD will always be an increasing value, so BUILD_PATH gives us something ++ # unique that meetings what LS wants. ++ plist['CFBundleVersion'] = bundle_version + + # Return with no error. + return True +@@ -137,16 +104,11 @@ def _AddVersionKeys( + def _DoSCMKeys(plist, add_keys): + """Adds the SCM information, visible in about:version, to property list. If + |add_keys| is True, it will insert the keys, otherwise it will remove them.""" +- scm_revision = None ++ scm_path, scm_revision = None, None + if add_keys: +- # Pull in the Chrome revision number. +- VERSION_TOOL = os.path.join(TOP, 'build/util/version.py') +- LASTCHANGE_FILE = os.path.join(TOP, 'build/util/LASTCHANGE') +- (stdout, retval) = _GetOutput([VERSION_TOOL, '-f', LASTCHANGE_FILE, '-t', +- '@LASTCHANGE@']) +- if retval: +- return False +- scm_revision = stdout.rstrip() ++ version_info = lastchange.FetchVersionInfo( ++ default_lastchange=None, directory=TOP) ++ scm_path, scm_revision = version_info.url, version_info.revision + + # See if the operation failed. + _RemoveKeys(plist, 'SCMRevision') +@@ -155,17 +117,67 @@ def _DoSCMKeys(plist, add_keys): + elif add_keys: + print >>sys.stderr, 'Could not determine SCM revision. This may be OK.' + +- return True ++ if scm_path != None: ++ plist['SCMPath'] = scm_path ++ else: ++ _RemoveKeys(plist, 'SCMPath') ++ ++ ++def _DoPDFKeys(plist, add_keys): ++ """Adds PDF support to the document types list. If add_keys is True, it will ++ add the type information dictionary. If it is False, it will remove it if ++ present.""" + ++ PDF_FILE_EXTENSION = 'pdf' + +-def _AddBreakpadKeys(plist, branding, platform): ++ def __AddPDFKeys(sub_plist): ++ """Writes the keys into a sub-dictionary of the plist.""" ++ sub_plist['CFBundleTypeExtensions'] = [PDF_FILE_EXTENSION] ++ sub_plist['CFBundleTypeIconFile'] = 'document.icns' ++ sub_plist['CFBundleTypeMIMETypes'] = 'application/pdf' ++ sub_plist['CFBundleTypeName'] = 'PDF Document' ++ sub_plist['CFBundleTypeRole'] = 'Viewer' ++ ++ DOCUMENT_TYPES_KEY = 'CFBundleDocumentTypes' ++ ++ # First get the list of document types, creating it if necessary. ++ try: ++ extensions = plist[DOCUMENT_TYPES_KEY] ++ except KeyError: ++ # If this plist doesn't have a type dictionary, create one if set to add the ++ # keys. If not, bail. ++ if not add_keys: ++ return ++ extensions = plist[DOCUMENT_TYPES_KEY] = [] ++ ++ # Loop over each entry in the list, looking for one that handles PDF types. ++ for i, ext in enumerate(extensions): ++ # If an entry for .pdf files is found... ++ if 'CFBundleTypeExtensions' not in ext: ++ continue ++ if PDF_FILE_EXTENSION in ext['CFBundleTypeExtensions']: ++ if add_keys: ++ # Overwrite the existing keys with new ones. ++ __AddPDFKeys(ext) ++ else: ++ # Otherwise, delete the entry entirely. ++ del extensions[i] ++ return ++ ++ # No PDF entry exists. If one needs to be added, do so now. ++ if add_keys: ++ pdf_entry = {} ++ __AddPDFKeys(pdf_entry) ++ extensions.append(pdf_entry) ++ ++ ++def _AddBreakpadKeys(plist, branding): + """Adds the Breakpad keys. This must be called AFTER _AddVersionKeys() and + also requires the |branding| argument.""" + plist['BreakpadReportInterval'] = '3600' # Deliberately a string. +- plist['BreakpadProduct'] = '%s_%s' % (branding, platform) ++ plist['BreakpadProduct'] = '%s_Mac' % branding + plist['BreakpadProductDisplay'] = branding +- plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' +- ++ plist['BreakpadVersion'] = plist['CFBundleShortVersionString'] + # These are both deliberately strings and not boolean. + plist['BreakpadSendAndExit'] = 'YES' + plist['BreakpadSkipConfirm'] = 'YES' +@@ -183,24 +195,6 @@ def _RemoveBreakpadKeys(plist): + 'BreakpadSkipConfirm') + + +-def _TagSuffixes(): +- # Keep this list sorted in the order that tag suffix components are to +- # appear in a tag value. That is to say, it should be sorted per ASCII. +- components = ('full',) +- assert tuple(sorted(components)) == components +- +- components_len = len(components) +- combinations = 1 << components_len +- tag_suffixes = [] +- for combination in xrange(0, combinations): +- tag_suffix = '' +- for component_index in xrange(0, components_len): +- if combination & (1 << component_index): +- tag_suffix += '-' + components[component_index] +- tag_suffixes.append(tag_suffix) +- return tag_suffixes +- +- + def _AddKeystoneKeys(plist, bundle_identifier): + """Adds the Keystone keys. This must be called AFTER _AddVersionKeys() and + also requires the |bundle_identifier| argument (com.example.product).""" +@@ -208,11 +202,6 @@ def _AddKeystoneKeys(plist, bundle_identifier): + plist['KSProductID'] = bundle_identifier + plist['KSUpdateURL'] = 'https://tools.google.com/service/update2' + +- _RemoveKeys(plist, 'KSChannelID') +- for tag_suffix in _TagSuffixes(): +- if tag_suffix: +- plist['KSChannelID' + tag_suffix] = tag_suffix +- + + def _RemoveKeystoneKeys(plist): + """Removes any set Keystone keys.""" +@@ -221,100 +210,37 @@ def _RemoveKeystoneKeys(plist): + 'KSProductID', + 'KSUpdateURL') + +- tag_keys = [] +- for tag_suffix in _TagSuffixes(): +- tag_keys.append('KSChannelID' + tag_suffix) +- _RemoveKeys(plist, *tag_keys) +- + + def Main(argv): + parser = optparse.OptionParser('%prog [options]') +- parser.add_option('--plist', dest='plist_path', action='store', +- type='string', default=None, help='The path of the plist to tweak.') +- parser.add_option('--output', dest='plist_output', action='store', +- type='string', default=None, help='If specified, the path to output ' + \ +- 'the tweaked plist, rather than overwriting the input.') + parser.add_option('--breakpad', dest='use_breakpad', action='store', + type='int', default=False, help='Enable Breakpad [1 or 0]') ++ parser.add_option('--breakpad_uploads', dest='breakpad_uploads', ++ action='store', type='int', default=False, ++ help='Enable Breakpad\'s uploading of crash dumps [1 or 0]') + parser.add_option('--keystone', dest='use_keystone', action='store', + type='int', default=False, help='Enable Keystone [1 or 0]') + parser.add_option('--scm', dest='add_scm_info', action='store', type='int', + default=True, help='Add SCM metadata [1 or 0]') ++ parser.add_option('--pdf', dest='add_pdf_support', action='store', type='int', ++ default=False, help='Add PDF file handler support [1 or 0]') + parser.add_option('--branding', dest='branding', action='store', + type='string', default=None, help='The branding of the binary') + parser.add_option('--bundle_id', dest='bundle_identifier', + action='store', type='string', default=None, + help='The bundle id of the binary') +- parser.add_option('--platform', choices=('ios', 'mac'), default='mac', +- help='The target platform of the bundle') +- parser.add_option('--version-overrides', action='append', +- help='Key-value pair to override specific component of version ' +- 'like key=value (can be passed multiple time to configure ' +- 'more than one override)') +- parser.add_option('--format', choices=('binary1', 'xml1', 'json'), +- default='xml1', help='Format to use when writing property list ' +- '(default: %(default)s)') +- parser.add_option('--version', dest='version', action='store', type='string', +- default=None, help='The version string [major.minor.build.patch]') + (options, args) = parser.parse_args(argv) + + if len(args) > 0: + print >>sys.stderr, parser.get_usage() + return 1 + +- if not options.plist_path: +- print >>sys.stderr, 'No --plist specified.' +- return 1 +- +- # Read the plist into its parsed format. Convert the file to 'xml1' as +- # plistlib only supports that format in Python 2.7. +- with tempfile.NamedTemporaryFile() as temp_info_plist: +- retcode = _ConvertPlist(options.plist_path, temp_info_plist.name, 'xml1') +- if retcode != 0: +- return retcode +- plist = plistlib.readPlist(temp_info_plist.name) +- +- # Convert overrides. +- overrides = {} +- if options.version_overrides: +- for pair in options.version_overrides: +- if not '=' in pair: +- print >>sys.stderr, 'Invalid value for --version-overrides:', pair +- return 1 +- key, value = pair.split('=', 1) +- overrides[key] = value +- if key not in ('MAJOR', 'MINOR', 'BUILD', 'PATCH'): +- print >>sys.stderr, 'Unsupported key for --version-overrides:', key +- return 1 +- +- if options.platform == 'mac': +- version_format_for_key = { +- # Add public version info so "Get Info" works. +- 'CFBundleShortVersionString': '@MAJOR@.@MINOR@.@BUILD@.@PATCH@', +- +- # Honor the 429496.72.95 limit. The maximum comes from splitting 2^32 - 1 +- # into 6, 2, 2 digits. The limitation was present in Tiger, but it could +- # have been fixed in later OS release, but hasn't been tested (it's easy +- # enough to find out with "lsregister -dump). +- # http://lists.apple.com/archives/carbon-dev/2006/Jun/msg00139.html +- # BUILD will always be an increasing value, so BUILD_PATH gives us +- # something unique that meetings what LS wants. +- 'CFBundleVersion': '@BUILD@.@PATCH@', +- } +- else: +- version_format_for_key = { +- 'CFBundleShortVersionString': '@MAJOR@.@BUILD@.@PATCH@', +- 'CFBundleVersion': '@MAJOR@.@MINOR@.@BUILD@.@PATCH@' +- } +- +- if options.use_breakpad: +- version_format_for_key['BreakpadVersion'] = \ +- '@MAJOR@.@MINOR@.@BUILD@.@PATCH@' ++ # Read the plist into its parsed format. ++ DEST_INFO_PLIST = os.path.join(env['TARGET_BUILD_DIR'], env['INFOPLIST_PATH']) ++ plist = plistlib.readPlist(DEST_INFO_PLIST) + + # Insert the product version. +- if not _AddVersionKeys( +- plist, version_format_for_key, version=options.version, +- overrides=overrides): ++ if not _AddVersionKeys(plist): + return 2 + + # Add Breakpad if configured to do so. +@@ -322,15 +248,22 @@ def Main(argv): + if options.branding is None: + print >>sys.stderr, 'Use of Breakpad requires branding.' + return 1 +- # Map gyp "OS" / gn "target_os" passed via the --platform parameter to +- # the platform as known by breakpad. +- platform = {'mac': 'Mac', 'ios': 'iOS'}[options.platform] +- _AddBreakpadKeys(plist, options.branding, platform) ++ _AddBreakpadKeys(plist, options.branding) ++ if options.breakpad_uploads: ++ plist['BreakpadURL'] = 'https://clients2.google.com/cr/report' ++ else: ++ # This allows crash dumping to a file without uploading the ++ # dump, for testing purposes. Breakpad does not recognise ++ # "none" as a special value, but this does stop crash dump ++ # uploading from happening. We need to specify something ++ # because if "BreakpadURL" is not present, Breakpad will not ++ # register its crash handler and no crash dumping will occur. ++ plist['BreakpadURL'] = 'none' + else: + _RemoveBreakpadKeys(plist) + +- # Add Keystone if configured to do so. +- if options.use_keystone: ++ # Only add Keystone in Release builds. ++ if options.use_keystone and env['CONFIGURATION'] == 'Release': + if options.bundle_identifier is None: + print >>sys.stderr, 'Use of Keystone requires the bundle id.' + return 1 +@@ -339,20 +272,21 @@ def Main(argv): + _RemoveKeystoneKeys(plist) + + # Adds or removes any SCM keys. +- if not _DoSCMKeys(plist, options.add_scm_info): +- return 3 ++ _DoSCMKeys(plist, options.add_scm_info) + +- output_path = options.plist_path +- if options.plist_output is not None: +- output_path = options.plist_output ++ # Adds or removes the PDF file handler entry. ++ _DoPDFKeys(plist, options.add_pdf_support) + + # Now that all keys have been mutated, rewrite the file. +- with tempfile.NamedTemporaryFile() as temp_info_plist: +- plistlib.writePlist(plist, temp_info_plist.name) +- +- # Convert Info.plist to the format requested by the --format flag. Any +- # format would work on Mac but iOS requires specific format. +- return _ConvertPlist(temp_info_plist.name, output_path, options.format) ++ temp_info_plist = tempfile.NamedTemporaryFile() ++ plistlib.writePlist(plist, temp_info_plist.name) ++ ++ # Info.plist will work perfectly well in any plist format, but traditionally ++ # applications use xml1 for this, so convert it to ensure that it's valid. ++ proc = subprocess.Popen(['plutil', '-convert', 'xml1', '-o', DEST_INFO_PLIST, ++ temp_info_plist.name]) ++ proc.wait() ++ return proc.returncode + + + if __name__ == '__main__': +diff --git media/webrtc/trunk/build/precompile.h media/webrtc/trunk/build/precompile.h +index 50a9b87e2fb2..a3c5193c611f 100644 +--- media/webrtc/trunk/build/precompile.h ++++ media/webrtc/trunk/build/precompile.h +@@ -2,8 +2,17 @@ + // Use of this source code is governed by a BSD-style license that can be + // found in the LICENSE file. + +-// This file is used as a precompiled header for both C and C++ files. So +-// any C++ headers must go in the __cplusplus block below. ++// Precompiled header for Chromium project on Windows, not used by ++// other build configurations. Using precompiled headers speeds the ++// build up significantly, around 1/4th on VS 2010 on an HP Z600 with 12 ++// GB of memory. ++// ++// Numeric comments beside includes are the number of times they were ++// included under src/chrome/browser on 2011/8/20, which was used as a ++// baseline for deciding what to include in the PCH. Includes without ++// a numeric comment are generally included at least 5 times. It may ++// be possible to tweak the speed of the build by commenting out or ++// removing some of the less frequently used headers. + + #if defined(BUILD_PRECOMPILE_H_) + #error You shouldn't include the precompiled header file more than once. +@@ -11,40 +20,84 @@ + + #define BUILD_PRECOMPILE_H_ + +-#define _USE_MATH_DEFINES ++// The Windows header needs to come before almost all the other ++// Windows-specific headers. ++#include ++#include ++#include ++#include // 4 ++#include // 2 ++ ++// Defines in atlbase.h cause conflicts; if we could figure out how ++// this family of headers can be included in the PCH, it might speed ++// up the build as several of them are used frequently. ++/* ++#include ++#include ++#include ++#include // 2 ++#include // 2 ++#include // 2 ++#include // 1 ++#include // 1 ++#include // 2 ++*/ ++ ++// Objbase.h and other files that rely on it bring in [ #define ++// interface struct ] which can cause problems in a multi-platform ++// build like Chrome's. #undef-ing it does not work as there are ++// currently 118 targets that break if we do this, so leaving out of ++// the precompiled header for now. ++//#include // 2 ++//#include // 3 ++//#include // 2 ++//#include // 2 ++//#include // 1 ++//#include // 1 ++//#include // 2 ++//#include // 1 ++//#include // 1 ++//#include // 2 ++//#include // 2 ++//#include // 2 ++//#include // 1 ++//#include // 1 ++//#include // 4 ++//#include // 2 ++ ++// Caused other conflicts in addition to the 'interface' issue above. ++// #include + + #include + #include +-#include ++#include // 4 + #include +-#include ++#include // 1 + #include +-#include ++#include // 1 + #include + #include + #include + #include +-#include +- +-#if defined(__cplusplus) ++#include // 4 + + #include +-#include ++#include // 3 + #include + #include +-#include +-#include ++#include // 3 ++#include // 2 + #include + #include +-#include ++#include // 3 + #include +-#include +-#include ++#include // 2 ++#include // 2 + #include + #include + #include + #include +-#include ++#include // 2 + #include + #include + #include +@@ -53,5 +106,3 @@ + #include + #include + #include +- +-#endif // __cplusplus +diff --git media/webrtc/trunk/build/sanitize-mac-build-log.sed media/webrtc/trunk/build/sanitize-mac-build-log.sed +index b4111c7b828a..3312eac5a86c 100755 +--- media/webrtc/trunk/build/sanitize-mac-build-log.sed ++++ media/webrtc/trunk/build/sanitize-mac-build-log.sed +@@ -1,3 +1,5 @@ ++#!/bin/echo Use sanitize-mac-build-log.sh or sed -f ++ + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -15,8 +17,8 @@ + # Xcode prints a short "compiling foobar.o" line followed by the lengthy + # full command line. These deletions drop the command line. + \|^ /Developer/usr/bin/|d +-\|^ /Developer/Library/PrivateFrameworks/DevToolsCore\.framework/|d +-\|^ /Developer/Library/Xcode/Plug-ins/CoreBuildTasks\.xcplugin/|d ++\|^ /Developer/Library/PrivateFrameworks/DevToolsCore.framework/|d ++\|^ /Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/|d + + # Drop any goma command lines as well. + \|^ .*/gomacc |d +@@ -26,8 +28,8 @@ + \|^ /Users/[^/]*/bin/|d + + # There's already a nice note for bindings, don't need the command line. +-\|^python scripts/rule_binding\.py|d ++\|^python scripts/rule_binding.py|d + + # Shorten the "compiling foobar.o" line. +-s|^Distributed-CompileC (.*) normal i386 c\+\+ com\.apple\.compilers\.gcc\.4_2| CC \1| +-s|^CompileC (.*) normal i386 c\+\+ com\.apple\.compilers\.gcc\.4_2| CC \1| ++s|^Distributed-CompileC \(.*\) normal i386 c++ com.apple.compilers.gcc.4_2| CC \1| ++s|^CompileC \(.*\) normal i386 c++ com.apple.compilers.gcc.4_2| CC \1| +diff --git media/webrtc/trunk/build/sanitize-mac-build-log.sh media/webrtc/trunk/build/sanitize-mac-build-log.sh +index df5a7af29eb6..dc743fabb51f 100755 +--- media/webrtc/trunk/build/sanitize-mac-build-log.sh ++++ media/webrtc/trunk/build/sanitize-mac-build-log.sh +@@ -2,4 +2,5 @@ + # Copyright (c) 2010 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +-sed -r -f `dirname "${0}"`/`basename "${0}" sh`sed ++sed -f `dirname "${0}"`/`basename "${0}" sh`sed ++ +diff --git media/webrtc/trunk/build/sanitize-win-build-log.sed media/webrtc/trunk/build/sanitize-win-build-log.sed +index c18e664c83a0..c8bffde87447 100755 +--- media/webrtc/trunk/build/sanitize-win-build-log.sed ++++ media/webrtc/trunk/build/sanitize-win-build-log.sed +@@ -1,3 +1,5 @@ ++#!/bin/echo Use sanitize-win-build-log.sh or sed -f ++ + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -6,10 +8,10 @@ + # machine-parsable. + + # Drop uninformative lines. +-/The operation completed successfully\./d ++/The operation completed successfully./d + + # Drop parallelization indicators on lines. +-s/^[0-9]+>// ++s/^[0-9]\+>// + + # Shorten bindings generation lines +-s/^.*"python".*idl_compiler\.py".*("[^"]+\.idl").*$/ idl_compiler \1/ ++s/^.*"perl".*generate-bindings.pl".*\("[^"]\+\.idl"\).*$/ generate-bindings \1/ +diff --git media/webrtc/trunk/build/sanitize-win-build-log.sh media/webrtc/trunk/build/sanitize-win-build-log.sh +index df5a7af29eb6..dc743fabb51f 100755 +--- media/webrtc/trunk/build/sanitize-win-build-log.sh ++++ media/webrtc/trunk/build/sanitize-win-build-log.sh +@@ -2,4 +2,5 @@ + # Copyright (c) 2010 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +-sed -r -f `dirname "${0}"`/`basename "${0}" sh`sed ++sed -f `dirname "${0}"`/`basename "${0}" sh`sed ++ +diff --git media/webrtc/trunk/build/update-linux-sandbox.sh media/webrtc/trunk/build/update-linux-sandbox.sh +index fa2d1077af61..ebf8c105a5c5 100755 +--- media/webrtc/trunk/build/update-linux-sandbox.sh ++++ media/webrtc/trunk/build/update-linux-sandbox.sh +@@ -6,7 +6,7 @@ + + BUILDTYPE="${BUILDTYPE:-Debug}" + CHROME_SRC_DIR="${CHROME_SRC_DIR:-$(dirname -- $(readlink -fn -- "$0"))/..}" +-CHROME_OUT_DIR="${CHROME_SRC_DIR}/${CHROMIUM_OUT_DIR:-out}/${BUILDTYPE}" ++CHROME_OUT_DIR="${CHROME_SRC_DIR}/out/${BUILDTYPE}" + CHROME_SANDBOX_BUILD_PATH="${CHROME_OUT_DIR}/chrome_sandbox" + CHROME_SANDBOX_INST_PATH="/usr/local/sbin/chrome-devel-sandbox" + CHROME_SANDBOX_INST_DIR=$(dirname -- "$CHROME_SANDBOX_INST_PATH") +@@ -39,9 +39,8 @@ if [ ! -d "${CHROME_OUT_DIR}" ]; then + fi + + if [ ! -f "${CHROME_SANDBOX_BUILD_PATH}" ]; then +- echo "Could not find ${CHROME_SANDBOX_BUILD_PATH}" +- echo -n "BUILDTYPE is $BUILDTYPE, use \"BUILDTYPE= ${0}\" to override " +- echo "after you build the chrome_sandbox target" ++ echo -n "Could not find ${CHROME_SANDBOX_BUILD_PATH}, " ++ echo "please make sure you build the chrome_sandbox target" + exit 1 + fi + +diff --git media/webrtc/trunk/build/util/lastchange.py media/webrtc/trunk/build/util/lastchange.py +index 0e3102f4b824..a101341ef7d3 100755 +--- media/webrtc/trunk/build/util/lastchange.py ++++ media/webrtc/trunk/build/util/lastchange.py +@@ -13,11 +13,56 @@ import os + import subprocess + import sys + ++_GIT_SVN_ID_REGEX = re.compile(r'.*git-svn-id:\s*([^@]*)@([0-9]+)', re.DOTALL) ++ + class VersionInfo(object): +- def __init__(self, revision): ++ def __init__(self, url, revision): ++ self.url = url + self.revision = revision + + ++def FetchSVNRevision(directory, svn_url_regex): ++ """ ++ Fetch the Subversion branch and revision for a given directory. ++ ++ Errors are swallowed. ++ ++ Returns: ++ A VersionInfo object or None on error. ++ """ ++ try: ++ proc = subprocess.Popen(['svn', 'info'], ++ stdout=subprocess.PIPE, ++ stderr=subprocess.PIPE, ++ cwd=directory, ++ shell=(sys.platform=='win32')) ++ except OSError: ++ # command is apparently either not installed or not executable. ++ return None ++ if not proc: ++ return None ++ ++ attrs = {} ++ for line in proc.stdout: ++ line = line.strip() ++ if not line: ++ continue ++ key, val = line.split(': ', 1) ++ attrs[key] = val ++ ++ try: ++ match = svn_url_regex.search(attrs['URL']) ++ if match: ++ url = match.group(2) ++ else: ++ url = '' ++ revision = attrs['Revision'] ++ except KeyError: ++ return None ++ ++ return VersionInfo(url, revision) ++ ++ + def RunGitCommand(directory, command): + """ + Launches git subcommand. +@@ -54,74 +99,74 @@ def FetchGitRevision(directory): + Returns: + A VersionInfo object or None on error. + """ +- hsh = '' +- git_args = ['log', '-1', '--format=%H'] +- proc = RunGitCommand(directory, git_args) ++ proc = RunGitCommand(directory, ['rev-parse', 'HEAD']) + if proc: + output = proc.communicate()[0].strip() + if proc.returncode == 0 and output: +- hsh = output +- if not hsh: +- return None +- pos = '' +- proc = RunGitCommand(directory, ['cat-file', 'commit', hsh]) +- if proc: +- output = proc.communicate()[0] +- if proc.returncode == 0 and output: +- for line in reversed(output.splitlines()): +- if line.startswith('Cr-Commit-Position:'): +- pos = line.rsplit()[-1].strip() +- break +- return VersionInfo('%s-%s' % (hsh, pos)) ++ return VersionInfo('git', output[:7]) ++ return None + + +-def FetchVersionInfo(directory=None): ++def FetchGitSVNURLAndRevision(directory, svn_url_regex): + """ +- Returns the last change (in the form of a branch, revision tuple), +- from some appropriate revision control system. +- """ +- version_info = FetchGitRevision(directory) +- if not version_info: +- version_info = VersionInfo(None) +- return version_info ++ Fetch the Subversion URL and revision through Git. + ++ Errors are swallowed. + +-def GetHeaderGuard(path): ++ Returns: ++ A tuple containing the Subversion URL and revision. + """ +- Returns the header #define guard for the given file path. +- This treats everything after the last instance of "src/" as being a +- relevant part of the guard. If there is no "src/", then the entire path +- is used. ++ proc = RunGitCommand(directory, ['log', '-1', ++ '--grep=git-svn-id', '--format=%b']) ++ if proc: ++ output = proc.communicate()[0].strip() ++ if proc.returncode == 0 and output: ++ # Extract the latest SVN revision and the SVN URL. ++ # The target line is the last "git-svn-id: ..." line like this: ++ # git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85528 0039d316.... ++ match = _GIT_SVN_ID_REGEX.search(output) ++ if match: ++ revision = match.group(2) ++ url_match = svn_url_regex.search(match.group(1)) ++ if url_match: ++ url = url_match.group(2) ++ else: ++ url = '' ++ return url, revision ++ return None, None ++ ++ ++def FetchGitSVNRevision(directory, svn_url_regex): + """ +- src_index = path.rfind('src/') +- if src_index != -1: +- guard = path[src_index + 4:] +- else: +- guard = path +- guard = guard.upper() +- return guard.replace('/', '_').replace('.', '_').replace('\\', '_') + '_' ++ Fetch the Git-SVN identifier for the local tree. + +- +-def GetHeaderContents(path, define, version): +- """ +- Returns what the contents of the header file should be that indicate the given +- revision. ++ Errors are swallowed. + """ +- header_guard = GetHeaderGuard(path) ++ url, revision = FetchGitSVNURLAndRevision(directory, svn_url_regex) ++ if url and revision: ++ return VersionInfo(url, revision) ++ return None + +- header_contents = """/* Generated by lastchange.py, do not edit.*/ + +-#ifndef %(header_guard)s +-#define %(header_guard)s +- +-#define %(define)s "%(version)s" ++def FetchVersionInfo(default_lastchange, directory=None, ++ directory_regex_prior_to_src_url='chrome|svn'): ++ """ ++ Returns the last change (in the form of a branch, revision tuple), ++ from some appropriate revision control system. ++ """ ++ svn_url_regex = re.compile( ++ r'.*/(' + directory_regex_prior_to_src_url + r')(/.*)') + +-#endif // %(header_guard)s +-""" +- header_contents = header_contents % { 'header_guard': header_guard, +- 'define': define, +- 'version': version } +- return header_contents ++ version_info = (FetchSVNRevision(directory, svn_url_regex) or ++ FetchGitSVNRevision(directory, svn_url_regex) or ++ FetchGitRevision(directory)) ++ if not version_info: ++ if default_lastchange and os.path.exists(default_lastchange): ++ revision = open(default_lastchange, 'r').read().strip() ++ version_info = VersionInfo(None, revision) ++ else: ++ version_info = VersionInfo(None, None) ++ return version_info + + + def WriteIfChanged(file_name, contents): +@@ -145,25 +190,15 @@ def main(argv=None): + argv = sys.argv + + parser = optparse.OptionParser(usage="lastchange.py [options]") +- parser.add_option("-m", "--version-macro", +- help="Name of C #define when using --header. Defaults to " + +- "LAST_CHANGE.", +- default="LAST_CHANGE") ++ parser.add_option("-d", "--default-lastchange", metavar="FILE", ++ help="default last change input FILE") + parser.add_option("-o", "--output", metavar="FILE", +- help="Write last change to FILE. " + +- "Can be combined with --header to write both files.") +- parser.add_option("", "--header", metavar="FILE", +- help="Write last change to FILE as a C/C++ header. " + +- "Can be combined with --output to write both files.") ++ help="write last change to FILE") + parser.add_option("--revision-only", action='store_true', +- help="Just print the GIT hash. Overrides any " + +- "file-output-related options.") +- parser.add_option("-s", "--source-dir", metavar="DIR", +- help="Use repository in the given directory.") ++ help="just print the SVN revision number") + opts, args = parser.parse_args(argv[1:]) + + out_file = opts.output +- header = opts.header + + while len(args) and out_file is None: + if out_file is None: +@@ -173,12 +208,8 @@ def main(argv=None): + parser.print_help() + sys.exit(2) + +- if opts.source_dir: +- src_dir = opts.source_dir +- else: +- src_dir = os.path.dirname(os.path.abspath(__file__)) +- +- version_info = FetchVersionInfo(directory=src_dir) ++ version_info = FetchVersionInfo(opts.default_lastchange, ++ os.path.dirname(sys.argv[0])) + + if version_info.revision == None: + version_info.revision = '0' +@@ -187,15 +218,10 @@ def main(argv=None): + print version_info.revision + else: + contents = "LASTCHANGE=%s\n" % version_info.revision +- if not out_file and not opts.header: +- sys.stdout.write(contents) ++ if out_file: ++ WriteIfChanged(out_file, contents) + else: +- if out_file: +- WriteIfChanged(out_file, contents) +- if header: +- WriteIfChanged(header, +- GetHeaderContents(header, opts.version_macro, +- version_info.revision)) ++ sys.stdout.write(contents) + + return 0 + +diff --git media/webrtc/trunk/build/whitespace_file.txt media/webrtc/trunk/build/whitespace_file.txt +index f2fa9b113c11..087f0ad752ee 100644 +--- media/webrtc/trunk/build/whitespace_file.txt ++++ media/webrtc/trunk/build/whitespace_file.txt +@@ -1,33 +1,30 @@ +-Copyright 2014 The Chromium Authors. All rights reserved. ++Copyright (c) 2012 The Chromium Authors. All rights reserved. + Use of this useless file is governed by a BSD-style license that can be + found in the LICENSE file. + +- + This file is used for making non-code changes to trigger buildbot cycles. Make + any modification below this line. + +-====================================================================== ++========================================================================= + +-Let's make a story. Add zero+ sentences for every commit: ++Let's make a story. Add one sentence for every commit: + +-CHÄPTER 1: +-It was a dark and blinky night; the rain fell in torrents -- except at ++CHAPTER 1.0: ++It was a dark and stormy night; the rain fell in torrents -- except at + occasional intervals, when it was checked by a violent gust of wind which + swept up the streets (for it is in London that our scene lies), rattling along + the housetops, and fiercely agitating the scanty flame of the lamps that +-struggled against the elements. A hooded figure emerged. +- +-It was a Domo-Kun. +- +-"What took you so long?", inquired his wife. ++struggled against the darkness. A hooded figure emerged. + ++It was a Domo-Kun. "What took you so long?", inquired his wife. + Silence. Oblivious to his silence, she continued, "Did Mr. Usagi enjoy the + waffles you brought him?" "You know him, he's not one to forego a waffle, +-no matter how burnt," he snickered. ++no matter how burnt", he snickered. + +-The pause was filled with the sound of compile errors. ++The pause was filled with the sound of thunder. + +-CHAPTER 2: ++ ++CHAPTER 2.0: + The jelly was as dark as night, and just as runny. + The Domo-Kun shuddered, remembering the way Mr. Usagi had speared his waffles + with his fork, watching the runny jelly spread and pool across his plate, +@@ -41,27 +38,24 @@ when the fan was last cleaned. + + There was a poignant pause. + +-CHAPTER 3: ++CHAPTER 3.0: + Mr. Usagi felt that something wasn't right. Shortly after the Domo-Kun left he + began feeling sick. He thought out loud to himself, "No, he wouldn't have done +-that to me." He considered that perhaps he shouldn't have pushed so hard. ++that to me." He considered that perhaps he shouldn't have pushed him so far. + Perhaps he shouldn't have been so cold and sarcastic, after the unimaginable +-horror that had occurred just the week before. ++horror that had occurred, just the week before. + +-Next time, there won't be any sushi. Why sushi with waffles anyway? It's like +-adorning breakfast cereal with halibut -- shameful. ++Next time, there won't be any sushi. Why sushis with waffles anyway? It's like ++salmon in a cereal bowl. + + CHAPTER 4: + The taste of stale sushi in his mouth the next morning was unbearable. He +-wondered where the sushi came from as he attempted to wash the taste away with +-a bottle of 3000¥ sake. He tries to recall the cook's face. Green? Probably. ++wondered where the sushi came from. He tries to recall the cook's face. Purple? + + CHAPTER 5: +-Many tears later, Mr. Usagi would laugh at the memory of the earnest, +-well-intentioned Domo-Kun. Another day in the life. That is when he realized that +-life goes on. +- +-$CHAPTER6 ++Many years later, Mr. Usagi would laugh at the memory of the earnest, ++well-intentioned Domo-Kun. ++Another day in the life... + + TRUISMS (1978-1983) + JENNY HOLZER +@@ -71,104 +65,5 @@ A MAN CAN'T KNOW WHAT IT IS TO BE A MOTHER + A NAME MEANS A LOT JUST BY ITSELF + A POSITIVE ATTITUDE MEANS ALL THE DIFFERENCE IN THE WORLD + A RELAXED MAN IS NOT NECESSARILY A BETTER MAN +-NO ONE SHOULD EVER USE SVN +-AN INFLEXIBLE POSITION SOMETIMES IS A SIGN OF PARALYSIS +-IT IS MANS FATE TO OUTSMART HIMSELF +-BEING SURE OF YOURSELF MEANS YOU'RE A FOOL +-AM NOT +-ARE TOO +-IF AT FIRST YOU DON'T SUCCEED: TRY, EXCEPT, FINALLY +-AND THEN, TIME LEAPT BACKWARDS +-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAaaaaaaaaaaaaaaaaaaaaaaaaaaaahhhh LOT +-I'm really tempted to change something above the line. +-Reeccciiiipppppeeeeeesssssss!!!!!!!!! +-PEOPLE SAY "FAILURE IS NOT AN OPTION", BUT FAILURE IS ALWAYS AN OPTION. +-WHAT GOES UP MUST HAVE A NON-ZERO VELOCITY +- +-I can feel the heat closing in, feel them out there making their moves... +-What could possibly go wrong? We've already ate our cake. +- +-Stand Still. Pause Clocks. We can make the World Stop. +-WUBWUBWUBWUBWUB +- +-I want a 1917 build and you will give me what I want. +- +-This sentence is false. +- +-Beauty is in the eyes of a Beholder. +- +-I'm the best at space. +- +-The first time Yossarian saw the chaplain, he fell madly in love with him. +-* +-* +-* +-Give not thyself up, then, to fire, lest it invert thee, deaden thee; as for +-the time it did me. There is a wisdom that is woe; but there is a woe that is +-madness. And there is a Catskill eagle in some souls that can alike dive down +-into the blackest gorges, and soar out of them again and become invisible in +-the sunny spaces. And even if he for ever flies within the gorge, that gorge +-is in the mountains; so that even in his lowest swoop the mountain eagle is +-still higher than other birds upon the plain, even though they soar. +-* +-* +-* +- +-I'm here to commit lines and drop rhymes +-* +-This is a line to test and try uploading a cl. +- +-And lo, in the year 2014, there was verily an attempt to upgrade to GCC 4.8 on +-the Android bots, and it was good. Except on one bot, where it was bad. And +-lo, the change was reverted, and GCC went back to 4.6, where code is slower +-and less optimized. And verily did it break the build, because artifacts had +-been created with 4.8, and alignment was no longer the same, and a great +-sadness descended upon the Android GN buildbot, and it did refuseth to build +-any more. But the sheriffs thought to themselves: Placebo! Let us clobber the +-bot, and perhaps it will rebuild with GCC 4.6, which hath worked for many many +-seasons. And so they modified the whitespace file with these immortal lines, +-and visited it upon the bots, that great destruction might be wrought upon +-their outdated binaries. In clobberus, veritas. +- +-As the git approaches, light begins to shine through the SCM thrice again... +-However, the git, is, after all, quite stupid. +- +-Suddenly Domo-Kun found itself in a room filled with dazzling mirrors. As +-Domo-Kun looked around, it realized that some of the mirrors were actually but +-pale reflections of true reality. +- +-A herd of wild gits appears! Time for CQ :D +-And one more for sizes.py... +- +-What's an overmarketed dietary supplement expressing sadness, relief, +-tiredness, or a similar feeling.? Ah-Sigh-ee. +- +-It was love at first sight. The moment Yossarian first laid eyes on the chaplain, he fell madly in love with him. +- +-Cool whitespace change for git-cl land +- +-Oh god the bots are red! I'm blind! Mmmm, cronuts. +- +-If you stand on your head, you will get footprints in your hair. +- +-sigh +-sigher +-pick up cls +- +-In the BUILD we trust. +-^_^ +- +-In the masters we don't. +-In the tryservers, we don't either. +-In the CQ sometimes. +-Auto-generated by git-eject-upstream (http://goo.gl/cIHsYR) +-My sandwiches are like my children: I love them all. +-No, really, I couldn't eat another bit. +-When I hunger I think of you, and a pastrami sandwich. +-Do make a terrible mistake every once in a while. +-I just made two. +-Mistakes are the best sometimes. +-\o/ +-This is groovy. +- +-SECRET ENDING: IT WAS _____ ALL ALONG! ++ ++This commit will change the world as we know it. +diff --git media/webrtc/trunk/gtest/moz.build media/webrtc/trunk/gtest/moz.build +index 1f9f5c4d802b..71f4441f5fb0 100644 +--- media/webrtc/trunk/gtest/moz.build ++++ media/webrtc/trunk/gtest/moz.build +@@ -32,14 +32,14 @@ USE_LIBS += [ + '/media/webrtc/trunk/third_party/gflags/gflags_gflags/gflags', + '/testing/gtest/gtest', + 'media_libopus', +- 'mozglue', + 'speex', + 'webrtc', +- 'webrtc_common_gn', +- 'webrtc_gn', +- 'webrtc_i420_gn', +- 'webrtc_vp8_gn', +- 'webrtc_vp9_gn', ++ 'webrtc_common', ++ 'webrtc_i420', ++ 'webrtc_lib', ++ 'webrtc_utility', ++ 'webrtc_vp8', ++ 'webrtc_vp9', + 'yuv', + ] + +diff --git media/webrtc/trunk/webrtc/BUILD.gn media/webrtc/trunk/webrtc/BUILD.gn +index c808a47ca300..805eaf0d847e 100644 +--- media/webrtc/trunk/webrtc/BUILD.gn ++++ media/webrtc/trunk/webrtc/BUILD.gn +@@ -11,9 +11,7 @@ + import("//build/config/linux/pkg_config.gni") + import("//build/config/sanitizers/sanitizers.gni") + import("build/webrtc.gni") +-if (!build_with_mozilla) { +- import("//third_party/protobuf/proto_library.gni") +-} ++import("//third_party/protobuf/proto_library.gni") + if (is_android) { + import("//build/config/android/config.gni") + import("//build/config/android/rules.gni") +@@ -76,12 +74,6 @@ config("common_inherited_config") { + "WEBRTC_LINUX", + "WEBRTC_ANDROID", + ] +- +- if (build_with_mozilla) { +- defines += [ +- "WEBRTC_ANDROID_OPENSLES", +- ] +- } + } + if (is_chromeos) { + defines += [ "CHROMEOS" ] +@@ -252,41 +244,26 @@ if (!build_with_chromium) { + + deps = [ + ":webrtc_common", ++ "api", + "api:transport_api", + "audio", + "base", + "call", + "common_audio", + "common_video", ++ "logging", + "media", + "modules", + "modules/video_capture:video_capture_internal_impl", ++ "p2p", ++ "pc", + "sdk", ++ "stats", + "system_wrappers", + "video", + "voice_engine", + ] + +- if (build_with_mozilla) { +- deps += [ +- "api:video_frame_api", +- "system_wrappers:field_trial_default", +- "system_wrappers:metrics_default", +- ] +- +- if (!is_android) { +- deps += [ "video_engine" ] +- } +- } else { +- deps += [ +- "api", +- "logging", +- "p2p", +- "pc", +- "stats", +- ] +- } +- + if (rtc_enable_protobuf) { + defines += [ "ENABLE_RTC_EVENT_LOG" ] + deps += [ "logging:rtc_event_log_proto" ] +diff --git media/webrtc/trunk/webrtc/api/api.gyp media/webrtc/trunk/webrtc/api/api.gyp +new file mode 100644 +index 000000000000..2ee17acfe779 +--- /dev/null ++++ media/webrtc/trunk/webrtc/api/api.gyp +@@ -0,0 +1,255 @@ ++# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'conditions': [ ++ ['os_posix == 1 and OS != "mac" and OS != "ios"', { ++ 'conditions': [ ++ ['sysroot!=""', { ++ 'variables': { ++ 'pkg-config': '../../../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"', ++ }, ++ }, { ++ 'variables': { ++ 'pkg-config': 'pkg-config' ++ }, ++ }], ++ ], ++ }], ++ # Excluded from the Chromium build since they cannot be built due to ++ # incompability with Chromium's logging implementation. ++ ['OS=="android" and build_with_chromium==0 and build_with_mozilla==0', { ++ 'targets': [ ++ { ++ 'target_name': 'libjingle_peerconnection_jni', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ 'libjingle_peerconnection', ++ ], ++ 'sources': [ ++ 'android/jni/androidmediacodeccommon.h', ++ 'android/jni/androidmediadecoder_jni.cc', ++ 'android/jni/androidmediadecoder_jni.h', ++ 'android/jni/androidmediaencoder_jni.cc', ++ 'android/jni/androidmediaencoder_jni.h', ++ 'android/jni/androidmetrics_jni.cc', ++ 'android/jni/androidnetworkmonitor_jni.cc', ++ 'android/jni/androidnetworkmonitor_jni.h', ++ 'android/jni/androidvideotracksource_jni.cc', ++ 'android/jni/classreferenceholder.cc', ++ 'android/jni/classreferenceholder.h', ++ 'android/jni/jni_helpers.cc', ++ 'android/jni/jni_helpers.h', ++ 'android/jni/native_handle_impl.cc', ++ 'android/jni/native_handle_impl.h', ++ 'android/jni/peerconnection_jni.cc', ++ 'android/jni/surfacetexturehelper_jni.cc', ++ 'android/jni/surfacetexturehelper_jni.h', ++ 'androidvideotracksource.cc', ++ 'androidvideotracksource.h', ++ ], ++ 'include_dirs': [ ++ '<(libyuv_dir)/include', ++ ], ++ # TODO(kjellander): Make the code compile without disabling these flags. ++ # See https://bugs.chromium.org/p/webrtc/issues/detail?id=3307 ++ 'cflags': [ ++ '-Wno-sign-compare', ++ '-Wno-unused-variable', ++ ], ++ 'cflags!': [ ++ '-Wextra', ++ ], ++ 'msvs_disabled_warnings': [ ++ 4245, # conversion from 'int' to 'size_t', signed/unsigned mismatch. ++ 4267, # conversion from 'size_t' to 'int', possible loss of data. ++ 4389, # signed/unsigned mismatch. ++ ], ++ }, ++ { ++ 'target_name': 'libjingle_peerconnection_so', ++ 'type': 'shared_library', ++ 'dependencies': [ ++ 'libjingle_peerconnection', ++ 'libjingle_peerconnection_jni', ++ ], ++ 'sources': [ ++ 'android/jni/jni_onload.cc', ++ ], ++ 'variables': { ++ # This library uses native JNI exports; tell GYP so that the ++ # required symbols will be kept. ++ 'use_native_jni_exports': 1, ++ }, ++ }, ++ ] ++ }], ++ ], # conditions ++ 'targets': [ ++ { ++ 'target_name': 'call_api', ++ 'type': 'static_library', ++ 'dependencies': [ ++ # TODO(kjellander): Add remaining dependencies when webrtc:4243 is done. ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/modules/modules.gyp:audio_encoder_interface', ++ ], ++ 'sources': [ ++ 'call/audio_receive_stream.h', ++ 'call/audio_send_stream.h', ++ 'call/audio_sink.h', ++ 'call/audio_state.h', ++ ], ++ }, ++ { ++ 'target_name': 'video_frame_api', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'call/transport.h', ++ 'video/i420_buffer.cc', ++ 'video/i420_buffer.h', ++ 'video/video_frame.cc', ++ 'video/video_frame.h', ++ 'video/video_frame_buffer.h', ++ 'video/video_rotation.h', ++ ], ++ 'include_dirs': [ ++ '<(libyuv_dir)/include', ++ ], ++ }, ++ { ++ 'target_name': 'libjingle_peerconnection', ++ 'type': 'static_library', ++ 'dependencies': [ ++ ':call_api', ++ ':rtc_stats_api', ++ '<(webrtc_root)/media/media.gyp:rtc_media', ++ '<(webrtc_root)/pc/pc.gyp:rtc_pc', ++ '<(webrtc_root)/stats/stats.gyp:rtc_stats', ++ ], ++ 'sources': [ ++ 'audiotrack.cc', ++ 'audiotrack.h', ++ 'datachannel.cc', ++ 'datachannel.h', ++ 'datachannelinterface.h', ++ 'dtmfsender.cc', ++ 'dtmfsender.h', ++ 'dtmfsenderinterface.h', ++ 'jsep.h', ++ 'jsepicecandidate.cc', ++ 'jsepicecandidate.h', ++ 'jsepsessiondescription.cc', ++ 'jsepsessiondescription.h', ++ 'localaudiosource.cc', ++ 'localaudiosource.h', ++ 'mediaconstraintsinterface.cc', ++ 'mediaconstraintsinterface.h', ++ 'mediacontroller.cc', ++ 'mediacontroller.h', ++ 'mediastream.cc', ++ 'mediastream.h', ++ 'mediastreaminterface.h', ++ 'mediastreamobserver.cc', ++ 'mediastreamobserver.h', ++ 'mediastreamproxy.h', ++ 'mediastreamtrack.h', ++ 'mediastreamtrackproxy.h', ++ 'notifier.h', ++ 'peerconnection.cc', ++ 'peerconnection.h', ++ 'peerconnectionfactory.cc', ++ 'peerconnectionfactory.h', ++ 'peerconnectionfactoryproxy.h', ++ 'peerconnectioninterface.h', ++ 'peerconnectionproxy.h', ++ 'proxy.h', ++ 'remoteaudiosource.cc', ++ 'remoteaudiosource.h', ++ 'rtcstatscollector.cc', ++ 'rtcstatscollector.h', ++ 'rtpparameters.h', ++ 'rtpreceiver.cc', ++ 'rtpreceiver.h', ++ 'rtpreceiverinterface.h', ++ 'rtpsender.cc', ++ 'rtpsender.h', ++ 'rtpsenderinterface.h', ++ 'sctputils.cc', ++ 'sctputils.h', ++ 'statscollector.cc', ++ 'statscollector.h', ++ 'statstypes.cc', ++ 'statstypes.h', ++ 'streamcollection.h', ++ 'videocapturertracksource.cc', ++ 'videocapturertracksource.h', ++ 'videosourceproxy.h', ++ 'videotrack.cc', ++ 'videotrack.h', ++ 'videotracksource.cc', ++ 'videotracksource.h', ++ 'webrtcsdp.cc', ++ 'webrtcsdp.h', ++ 'webrtcsession.cc', ++ 'webrtcsession.h', ++ 'webrtcsessiondescriptionfactory.cc', ++ 'webrtcsessiondescriptionfactory.h', ++ ], ++ 'conditions': [ ++ ['clang==1', { ++ 'cflags!': [ ++ '-Wextra', ++ ], ++ 'xcode_settings': { ++ 'WARNING_CFLAGS!': ['-Wextra'], ++ }, ++ }, { ++ 'cflags': [ ++ '-Wno-maybe-uninitialized', # Only exists for GCC. ++ ], ++ }], ++ ['use_quic==1', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/libquic/libquic.gyp:libquic', ++ ], ++ 'sources': [ ++ 'quicdatachannel.cc', ++ 'quicdatachannel.h', ++ 'quicdatatransport.cc', ++ 'quicdatatransport.h', ++ ], ++ 'export_dependent_settings': [ ++ '<(DEPTH)/third_party/libquic/libquic.gyp:libquic', ++ ], ++ }], ++ ], ++ }, # target libjingle_peerconnection ++ { ++ # GN version: webrtc/api:rtc_stats_api ++ 'target_name': 'rtc_stats_api', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ ], ++ 'sources': [ ++ 'stats/rtcstats.h', ++ 'stats/rtcstats_objects.h', ++ 'stats/rtcstatsreport.h', ++ ], ++ }, # target rtc_stats_api ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/api/api_java.gyp media/webrtc/trunk/webrtc/api/api_java.gyp +new file mode 100644 +index 000000000000..4e18035613e0 +--- /dev/null ++++ media/webrtc/trunk/webrtc/api/api_java.gyp +@@ -0,0 +1,50 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# This file exists only because there's no other way to avoid errors in the ++# Chromium build due to the inclusion of build/java.gypi. GYP unfortunately ++# processes all 'includes' for all .gyp files, ignoring conditions. This ++# processing takes place early in the cycle, before it's possible to use ++# variables. It will go away when WebRTC has fully migrated to GN. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'conditions': [ ++ ['OS=="android"', { ++ 'targets': [ ++ { ++ # |libjingle_peerconnection_java| builds a jar file with name ++ # libjingle_peerconnection_java.jar using Chrome's build system. ++ # It includes all Java files needed to setup a PeeerConnection call ++ # from Android. ++ 'target_name': 'libjingle_peerconnection_java', ++ 'type': 'none', ++ 'dependencies': [ ++ '<(webrtc_root)/api/api.gyp:libjingle_peerconnection_so', ++ ], ++ 'variables': { ++ # Designate as Chromium code and point to our lint settings to ++ # enable linting of the WebRTC code (this is the only way to make ++ # lint_action invoke the Android linter). ++ 'android_manifest_path': '<(webrtc_root)/build/android/AndroidManifest.xml', ++ 'suppressions_file': '<(webrtc_root)/build/android/suppressions.xml', ++ 'chromium_code': 1, ++ 'java_in_dir': 'android/java', ++ 'webrtc_base_dir': '<(webrtc_root)/base', ++ 'webrtc_modules_dir': '<(webrtc_root)/modules', ++ 'additional_src_dirs' : [ ++ '<(webrtc_base_dir)/java', ++ '<(webrtc_modules_dir)/audio_device/android/java/src', ++ ], ++ }, ++ 'includes': ['../../build/java.gypi'], ++ }, ++ ], # targets ++ }], # OS=="android" ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/audio/webrtc_audio.gypi media/webrtc/trunk/webrtc/audio/webrtc_audio.gypi +new file mode 100644 +index 000000000000..31a281c09a53 +--- /dev/null ++++ media/webrtc/trunk/webrtc/audio/webrtc_audio.gypi +@@ -0,0 +1,32 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++{ ++ 'variables': { ++ 'webrtc_audio_dependencies': [ ++ '<(webrtc_root)/api/api.gyp:call_api', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/voice_engine/voice_engine.gyp:voice_engine', ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_api', ++ ], ++ 'webrtc_audio_sources': [ ++ 'audio/audio_receive_stream.cc', ++ 'audio/audio_receive_stream.h', ++ 'audio/audio_send_stream.cc', ++ 'audio/audio_send_stream.h', ++ 'audio/audio_state.cc', ++ 'audio/audio_state.h', ++ 'audio/audio_transport_proxy.cc', ++ 'audio/audio_transport_proxy.h', ++ 'audio/conversion.h', ++ 'audio/scoped_voe_interface.h', ++ 'audio/utility/audio_frame_operations.cc', ++ 'audio/utility/audio_frame_operations.h', ++ ], ++ }, ++} +diff --git media/webrtc/trunk/webrtc/base/BUILD.gn media/webrtc/trunk/webrtc/base/BUILD.gn +index bdef9f5a2cbf..0902581f2eff 100644 +--- media/webrtc/trunk/webrtc/base/BUILD.gn ++++ media/webrtc/trunk/webrtc/base/BUILD.gn +@@ -20,22 +20,17 @@ if (is_win) { + + group("base") { + public_deps = [ ++ ":rtc_base", + ":rtc_base_approved", + ":rtc_task_queue", + ] +- if (!build_with_mozilla) { +- public_deps += [ +- ":rtc_base", +- ] +- } +- +- if (is_android && !build_with_mozilla) { ++ if (is_android) { + public_deps += [ ":base_java" ] + } + } + + config("rtc_base_approved_all_dependent_config") { +- if (is_mac && !(build_with_chromium || build_with_mozilla)) { ++ if (is_mac && !build_with_chromium) { + libs = [ "Foundation.framework" ] # needed for logging_mac.mm + } + } +@@ -77,7 +72,7 @@ config("rtc_base_all_dependent_config") { + } + } + +-if (is_linux && !build_with_chromium && !build_with_mozilla) { ++if (is_linux && !build_with_chromium) { + # Provides the same functionality as the //crypto:platform target, which + # WebRTC cannot use as we don't sync src/crypto from Chromium. + group("linux_system_ssl") { +@@ -89,11 +84,9 @@ if (is_linux && !build_with_chromium && !build_with_mozilla) { + + if (!rtc_build_ssl) { + config("external_ssl_library") { +- if (!build_with_mozilla) { +- assert(rtc_ssl_root != "", +- "You must specify rtc_ssl_root when rtc_build_ssl==0.") +- include_dirs = [ rtc_ssl_root ] +- } ++ assert(rtc_ssl_root != "", ++ "You must specify rtc_ssl_root when rtc_build_ssl==0.") ++ include_dirs = [ rtc_ssl_root ] + } + } + +@@ -201,19 +194,8 @@ rtc_static_library("rtc_base_approved") { + + if (is_win) { + sources += [ "file_win.cc" ] +- +- if (build_with_mozilla) { +- sources += [ "win32.cc" ] +- } + } + +- if (is_mac) { +- if (build_with_mozilla) { +- sources += [ "macutils.cc" ] +- } +- } +- +- + if (build_with_chromium) { + # Dependency on chromium's logging (in //base). + deps += [ "//base:base" ] +@@ -341,11 +323,6 @@ rtc_static_library("rtc_task_queue") { + "task_queue_posix.cc", + ] + all_dependent_configs = [ ":enable_libevent_config" ] +- +- if (build_with_mozilla) { +- include_dirs = [ "$rtc_libevent_dir/include" ] +- include_dirs += [ "$rtc_libevent_dir/linux" ] +- } + } else { + if (is_mac || is_ios) { + sources += [ +@@ -966,7 +943,7 @@ if (rtc_include_tests) { + } + } + +-if (is_android && !build_with_mozilla) { ++if (is_android) { + android_library("base_java") { + java_files = [ + "java/src/org/webrtc/Logging.java", +diff --git media/webrtc/trunk/webrtc/base/base.gyp media/webrtc/trunk/webrtc/base/base.gyp +new file mode 100644 +index 000000000000..4dd48f7d5f81 +--- /dev/null ++++ media/webrtc/trunk/webrtc/base/base.gyp +@@ -0,0 +1,682 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'conditions': [ ++ ['os_posix==1 and OS!="mac" and OS!="ios"', { ++ 'conditions': [ ++ ['sysroot!=""', { ++ 'variables': { ++ 'pkg-config': '../../../build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)"', ++ }, ++ }, { ++ 'variables': { ++ 'pkg-config': 'pkg-config' ++ }, ++ }], ++ ], ++ }], ++ ], ++ 'targets': [ ++ { ++ # The subset of rtc_base approved for use outside of libjingle. ++ 'target_name': 'rtc_base_approved', ++ 'type': 'static_library', ++ 'sources': [ ++ 'arraysize.h', ++ 'array_view.h', ++ 'atomicops.h', ++ 'basictypes.h', ++ 'base64.cc', ++ 'base64.h', ++ 'bind.h', ++ 'bitbuffer.cc', ++ 'bitbuffer.h', ++ 'buffer.h', ++ 'bufferqueue.cc', ++ 'bufferqueue.h', ++ 'bytebuffer.cc', ++ 'bytebuffer.h', ++ 'byteorder.h', ++ 'checks.cc', ++ 'checks.h', ++ 'common.cc', ++ 'common.h', ++ 'constructormagic.h', ++ 'copyonwritebuffer.cc', ++ 'copyonwritebuffer.h', ++ 'criticalsection.cc', ++ 'criticalsection.h', ++ 'deprecation.h', ++ 'event.cc', ++ 'event.h', ++ 'event_tracer.cc', ++ 'event_tracer.h', ++ 'numerics/exp_filter.cc', ++ 'numerics/exp_filter.h', ++ 'numerics/percentile_filter.h', ++ 'file.cc', ++ 'file.h', ++ 'flags.cc', ++ 'flags.h', ++ 'format_macros.h', ++ 'function_view.h', ++ 'ignore_wundef.h', ++ 'location.h', ++ 'location.cc', ++ 'md5.cc', ++ 'md5.h', ++ 'md5digest.cc', ++ 'md5digest.h', ++ 'mod_ops.h', ++ 'onetimeevent.h', ++ 'optional.cc', ++ 'optional.h', ++ 'pathutils.cc', ++ 'pathutils.h', ++ 'platform_file.cc', ++ 'platform_file.h', ++ 'platform_thread.cc', ++ 'platform_thread.h', ++ 'platform_thread_types.h', ++ 'race_checker.cc', ++ 'race_checker.h', ++ 'random.cc', ++ 'random.h', ++ 'rate_statistics.cc', ++ 'rate_statistics.h', ++ 'rate_limiter.cc', ++ 'rate_limiter.h', ++ 'ratetracker.cc', ++ 'ratetracker.h', ++ 'refcount.h', ++ 'refcountedobject.h', ++ 'safe_compare.h', ++ 'safe_conversions.h', ++ 'safe_conversions_impl.h', ++ 'sanitizer.h', ++ 'scoped_ref_ptr.h', ++ 'stringencode.cc', ++ 'stringencode.h', ++ 'stringutils.cc', ++ 'stringutils.h', ++ 'swap_queue.h', ++ 'template_util.h', ++ 'thread_annotations.h', ++ 'thread_checker.h', ++ 'thread_checker_impl.cc', ++ 'thread_checker_impl.h', ++ 'timestampaligner.cc', ++ 'timestampaligner.h', ++ 'timeutils.cc', ++ 'timeutils.h', ++ 'trace_event.h', ++ 'type_traits.h', ++ ], ++ 'conditions': [ ++ ['os_posix==1', { ++ 'sources': [ ++ 'file_posix.cc', ++ ], ++ }], ++ ['OS=="win"', { ++ 'sources': [ ++ 'file_win.cc', ++ 'win32.cc', ++ 'win32.h', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'sources': [ ++ 'macutils.cc', ++ 'macutils.h', ++ ], ++ }], ++ ['build_with_chromium==1', { ++ 'dependencies': [ ++ '<(DEPTH)/base/base.gyp:base', ++ ], ++ 'include_dirs': [ ++ '../../webrtc_overrides', ++ ], ++ 'sources': [ ++ '../../webrtc_overrides/webrtc/base/logging.cc', ++ '../../webrtc_overrides/webrtc/base/logging.h', ++ ], ++ }, { ++ 'sources': [ ++ 'logging.cc', ++ 'logging.h', ++ 'logging_mac.mm', ++ ], ++ }], ++ ['OS=="mac" and build_with_chromium==0', { ++ 'all_dependent_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ # needed for logging_mac.mm ++ '-framework Foundation', ++ ], ++ }, ++ }, ++ }], # OS=="mac" and build_with_chromium==0 ++ ['OS=="android"', { ++ 'link_settings': { ++ 'libraries': [ ++ '-llog', ++ ], ++ }, ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'rtc_task_queue', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'rtc_base_approved', ++ ], ++ 'sources': [ ++ 'sequenced_task_checker.h', ++ 'sequenced_task_checker_impl.cc', ++ 'sequenced_task_checker_impl.h', ++ 'weak_ptr.cc', ++ 'weak_ptr.h', ++ ], ++ 'conditions': [ ++ ['build_with_chromium==1', { ++ 'include_dirs': [ ++ '../../webrtc_overrides' ++ ], ++ 'sources' : [ ++ '../../webrtc_overrides/webrtc/base/task_queue.cc', ++ '../../webrtc_overrides/webrtc/base/task_queue.h', ++ ] ++ } , { ++ # If not build for chromium, use our own implementation. ++ 'sources' : [ ++ 'task_queue.h', ++ 'task_queue_posix.h', ++ ], ++ 'conditions': [ ++ #TODO: no libevent.gyp ++ ['build_libevent==1', { ++ 'dependencies': [ ++ '<(DEPTH)/base/third_party/libevent/libevent.gyp:libevent', ++ ], ++ } , { ++ 'include_dirs': [ ++ '$(MOZ_LIBEVENT_CFLAGS)', ++ '<(libevent_dir)/', ++ '<(libevent_dir)/../', ++ '<(libevent_dir)/include/', ++ ], ++ 'conditions': [ ++ ['OS=="mac" or OS=="ios"', { ++ 'include_dirs': [ ++ '<(libevent_dir)/mac/', ++ ], ++ }], ++ ['OS=="linux"', { ++ 'include_dirs': [ ++ '<(libevent_dir)/linux/', ++ ], ++ }], ++ ['os_bsd==1', { ++ 'include_dirs': [ ++ '<(libevent_dir)/bsd/', ++ ], ++ }], ++ ['OS=="win"', { ++ 'include_dirs': [ ++ '<(libevent_dir)/WIN32-Code/', ++ ], ++ }], ++ ['OS=="android"', { ++ 'include_dirs': [ ++ '<(libevent_dir)/android/', ++ ], ++ }], ++ ], ++ }], ++ ['enable_libevent==1', { ++ 'sources': [ ++ 'task_queue_libevent.cc', ++ 'task_queue_posix.cc', ++ ], ++ 'defines': [ 'WEBRTC_BUILD_LIBEVENT', ], ++ 'all_dependent_settings': { ++ 'defines': [ 'WEBRTC_BUILD_LIBEVENT' ], ++ }, ++ }, { ++ # If not libevent, fall back to the other task queues. ++ 'conditions': [ ++ ['OS=="mac" or OS=="ios"', { ++ 'sources': [ ++ 'task_queue_gcd.cc', ++ 'task_queue_posix.cc', ++ ], ++ }], ++ ['OS=="win"', { ++ 'sources': [ 'task_queue_win.cc' ], ++ }] ++ ], ++ }], ++ ] ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'rtc_base', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '../common.gyp:webrtc_common', ++ 'rtc_base_approved', ++ ], ++ 'export_dependent_settings': [ ++ 'rtc_base_approved', ++ ], ++ 'defines': [ ++ 'FEATURE_ENABLE_SSL', ++ 'SSL_USE_OPENSSL', ++ 'HAVE_OPENSSL_SSL_H', ++ 'LOGGING=1', ++ ], ++ 'sources': [ ++ 'applefilesystem.mm', ++ 'asyncinvoker.cc', ++ 'asyncinvoker.h', ++ 'asyncinvoker-inl.h', ++ 'asyncpacketsocket.cc', ++ 'asyncpacketsocket.h', ++ 'asyncresolverinterface.cc', ++ 'asyncresolverinterface.h', ++ 'asyncsocket.cc', ++ 'asyncsocket.h', ++ 'asynctcpsocket.cc', ++ 'asynctcpsocket.h', ++ 'asyncudpsocket.cc', ++ 'asyncudpsocket.h', ++ 'autodetectproxy.cc', ++ 'autodetectproxy.h', ++ 'crc32.cc', ++ 'crc32.h', ++ 'cryptstring.cc', ++ 'cryptstring.h', ++ 'diskcache.cc', ++ 'diskcache.h', ++ 'filerotatingstream.cc', ++ 'filerotatingstream.h', ++ 'fileutils.cc', ++ 'fileutils.h', ++ 'firewallsocketserver.cc', ++ 'firewallsocketserver.h', ++ 'gunit_prod.h', ++ 'helpers.cc', ++ 'helpers.h', ++ 'httpbase.cc', ++ 'httpbase.h', ++ 'httpclient.cc', ++ 'httpclient.h', ++ 'httpcommon-inl.h', ++ 'httpcommon.cc', ++ 'httpcommon.h', ++ 'ipaddress.cc', ++ 'ipaddress.h', ++ 'linked_ptr.h', ++ 'messagedigest.cc', ++ 'messagedigest.h', ++ 'messagehandler.cc', ++ 'messagehandler.h', ++ 'messagequeue.cc', ++ 'messagequeue.h', ++ 'nethelpers.cc', ++ 'nethelpers.h', ++ 'network.cc', ++ 'network.h', ++ 'networkmonitor.cc', ++ 'networkmonitor.h', ++ 'nullsocketserver.cc', ++ 'nullsocketserver.h', ++ 'openssl.h', ++ 'openssladapter.cc', ++ 'openssladapter.h', ++ 'openssldigest.cc', ++ 'openssldigest.h', ++ 'opensslidentity.cc', ++ 'opensslidentity.h', ++ 'opensslstreamadapter.cc', ++ 'opensslstreamadapter.h', ++ 'physicalsocketserver.cc', ++ 'physicalsocketserver.h', ++ 'proxydetect.cc', ++ 'proxydetect.h', ++ 'proxyinfo.cc', ++ 'proxyinfo.h', ++ 'ratelimiter.cc', ++ 'ratelimiter.h', ++ 'rtccertificate.cc', ++ 'rtccertificate.h', ++ 'rtccertificategenerator.cc', ++ 'rtccertificategenerator.h', ++ 'sha1.cc', ++ 'sha1.h', ++ 'sha1digest.cc', ++ 'sha1digest.h', ++ 'sharedexclusivelock.cc', ++ 'sharedexclusivelock.h', ++ 'signalthread.cc', ++ 'signalthread.h', ++ 'sigslot.cc', ++ 'sigslot.h', ++ 'sigslotrepeater.h', ++ 'socket.h', ++ 'socketadapters.cc', ++ 'socketadapters.h', ++ 'socketaddress.cc', ++ 'socketaddress.h', ++ 'socketaddresspair.cc', ++ 'socketaddresspair.h', ++ 'socketfactory.h', ++ 'socketpool.cc', ++ 'socketpool.h', ++ 'socketserver.h', ++ 'socketstream.cc', ++ 'socketstream.h', ++ 'ssladapter.cc', ++ 'ssladapter.h', ++ 'sslfingerprint.cc', ++ 'sslfingerprint.h', ++ 'sslidentity.cc', ++ 'sslidentity.h', ++ 'sslsocketfactory.cc', ++ 'sslsocketfactory.h', ++ 'sslstreamadapter.cc', ++ 'sslstreamadapter.h', ++ 'stream.cc', ++ 'stream.h', ++ 'task.cc', ++ 'task.h', ++ 'taskparent.cc', ++ 'taskparent.h', ++ 'taskrunner.cc', ++ 'taskrunner.h', ++ 'thread.cc', ++ 'thread.h', ++ ], ++ # TODO(henrike): issue 3307, make rtc_base build without disabling ++ # these flags. ++ 'cflags!': [ ++ '-Wextra', ++ '-Wall', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ 'FEATURE_ENABLE_SSL', ++ 'SSL_USE_OPENSSL', ++ 'HAVE_OPENSSL_SSL_H', ++ ], ++ }, ++ 'conditions': [ ++ ['build_with_chromium==1', { ++ 'include_dirs': [ ++ '../../webrtc_overrides', ++ '../../boringssl/src/include', ++ ], ++ 'conditions': [ ++ ['OS=="win"', { ++ 'sources': [ ++ '../../webrtc_overrides/webrtc/base/win32socketinit.cc', ++ ], ++ }], ++ ], ++ 'defines': [ ++ 'NO_MAIN_THREAD_WRAPPING', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ 'NO_MAIN_THREAD_WRAPPING', ++ ], ++ }, ++ }, { ++ 'sources': [ ++ 'callback.h', ++ 'fileutils_mock.h', ++ 'httpserver.cc', ++ 'httpserver.h', ++ 'json.cc', ++ 'json.h', ++ 'logsinks.cc', ++ 'logsinks.h', ++ 'mathutils.h', ++ 'natserver.cc', ++ 'natserver.h', ++ 'natsocketfactory.cc', ++ 'natsocketfactory.h', ++ 'nattypes.cc', ++ 'nattypes.h', ++ 'optionsfile.cc', ++ 'optionsfile.h', ++ 'proxyserver.cc', ++ 'proxyserver.h', ++ 'referencecountedsingletonfactory.h', ++ 'rollingaccumulator.h', ++ 'scopedptrcollection.h', ++ 'sslconfig.h', ++ 'sslroots.h', ++ 'testbase64.h', ++ 'testclient.cc', ++ 'testclient.h', ++ 'transformadapter.cc', ++ 'transformadapter.h', ++ 'virtualsocketserver.cc', ++ 'virtualsocketserver.h', ++ 'window.h', ++ 'windowpicker.h', ++ 'windowpickerfactory.h', ++ ], ++ 'conditions': [ ++ ['build_json==1', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/jsoncpp/jsoncpp.gyp:jsoncpp', ++ ], ++ }, { ++ 'include_dirs': [ ++ '<(json_root)', ++ ], ++ 'defines': [ ++ # When defined changes the include path for json.h to where it ++ # is expected to be when building json outside of the standalone ++ # build. ++ 'WEBRTC_EXTERNAL_JSON', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'sources': [ ++ 'macasyncsocket.cc', ++ 'macasyncsocket.h', ++ 'maccocoasocketserver.h', ++ 'maccocoasocketserver.mm', ++ 'macsocketserver.cc', ++ 'macsocketserver.h', ++ 'macwindowpicker.cc', ++ 'macwindowpicker.h', ++ ], ++ }], ++ ['OS=="win"', { ++ 'sources': [ ++ 'diskcache_win32.cc', ++ 'diskcache_win32.h', ++ 'win32regkey.cc', ++ 'win32regkey.h', ++ 'win32socketinit.cc', ++ 'win32socketinit.h', ++ 'win32socketserver.cc', ++ 'win32socketserver.h', ++ ], ++ }], ++ ['OS=="win" and clang==1', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Disable warnings failing when compiling with Clang on Windows. ++ # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 ++ '-Wno-sign-compare', ++ '-Wno-missing-braces', ++ ], ++ }, ++ }, ++ }], ++ ], # conditions ++ }], # build_with_chromium==0 ++ ['OS=="android"', { ++ 'sources': [ ++ 'ifaddrs-android.cc', ++ 'ifaddrs-android.h', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-llog', ++ '-lGLESv2', ++ ], ++ }, ++ }], ++ ['(OS=="mac" or OS=="ios") and nacl_untrusted_build==0', { ++ 'sources': [ ++ 'maccocoathreadhelper.h', ++ 'maccocoathreadhelper.mm', ++ 'macconversion.cc', ++ 'macconversion.h', ++ 'macifaddrs_converter.cc', ++ 'scoped_autorelease_pool.h', ++ 'scoped_autorelease_pool.mm', ++ ], ++ }], ++ ['OS=="ios"', { ++ 'all_dependent_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework CFNetwork', ++ '-framework Foundation', ++ '-framework Security', ++ '-framework SystemConfiguration', ++ '-framework UIKit', ++ ], ++ }, ++ }, ++ }], ++ ['use_x11==1', { ++ 'sources': [ ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-ldl', ++ '-lrt', ++ '-lXext', ++ '-lX11', ++ '-lXcomposite', ++ '-lXrender', ++ ], ++ }, ++ }], ++ ['OS=="linux"', { ++ 'link_settings': { ++ 'libraries': [ ++ '-ldl', ++ '-lrt', ++ ], ++ }, ++ }], ++ ['OS=="mac"', { ++# moved by mozilla ++# 'sources': [ ++# 'macutils.cc', ++# 'macutils.h', ++# ], ++ 'all_dependent_settings': { ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework Cocoa', ++ '-framework Foundation', ++ '-framework IOKit', ++ '-framework Security', ++ '-framework SystemConfiguration', ++ ], ++ }, ++ }, ++ }, ++ }], ++ ['OS=="win" and nacl_untrusted_build==0', { ++ 'sources': [ ++# moved by mozilla ++# 'win32.cc', ++# 'win32.h', ++ 'win32filesystem.cc', ++ 'win32filesystem.h', ++ 'win32securityerrors.cc', ++ 'win32window.cc', ++ 'win32window.h', ++ 'win32windowpicker.cc', ++ 'win32windowpicker.h', ++ 'winfirewall.cc', ++ 'winfirewall.h', ++ 'winping.cc', ++ 'winping.h', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lcrypt32.lib', ++ '-liphlpapi.lib', ++ '-lsecur32.lib', ++ ], ++ }, ++ # Suppress warnings about WIN32_LEAN_AND_MEAN. ++ 'msvs_disabled_warnings': [4005, 4703], ++ 'defines': [ ++ '_CRT_NONSTDC_NO_DEPRECATE', ++ ], ++ }], ++ ['os_posix==1', { ++ 'sources': [ ++ 'ifaddrs_converter.cc', ++ 'ifaddrs_converter.h', ++ 'unixfilesystem.cc', ++ 'unixfilesystem.h', ++ ], ++ 'configurations': { ++ 'Debug_Base': { ++ 'defines': [ ++ # Chromium's build/common.gypi defines this for all posix ++ # _except_ for ios & mac. We want it there as well, e.g. ++ # because ASSERT and friends trigger off of it. ++ '_DEBUG', ++ ], ++ }, ++ } ++ }], ++ ['build_ssl==1', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/boringssl/boringssl.gyp:boringssl', ++ ], ++ }, { ++ 'include_dirs': [ ++ '<(ssl_root)', ++ ], ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'gtest_prod', ++ 'type': 'static_library', ++ 'sources': [ ++ 'gtest_prod_util.h', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/base/base_tests.gyp media/webrtc/trunk/webrtc/base/base_tests.gyp +new file mode 100644 +index 000000000000..e1d5bc04963a +--- /dev/null ++++ media/webrtc/trunk/webrtc/base/base_tests.gyp +@@ -0,0 +1,48 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'targets': [ ++ { ++ 'target_name': 'rtc_base_tests_utils', ++ 'type': 'static_library', ++ 'sources': [ ++ 'unittest_main.cc', ++ # Also use this as a convenient dumping ground for misc files that are ++ # included by multiple targets below. ++ 'fakeclock.cc', ++ 'fakeclock.h', ++ 'fakenetwork.h', ++ 'fakesslidentity.h', ++ 'faketaskrunner.h', ++ 'gunit.h', ++ 'testbase64.h', ++ 'testechoserver.h', ++ 'testutils.h', ++ 'timedelta.h', ++ ], ++ 'defines': [ ++ 'GTEST_RELATIVE_PATH', ++ ], ++ 'dependencies': [ ++ 'base.gyp:rtc_base', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/test/test.gyp:field_trial', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ 'GTEST_RELATIVE_PATH', ++ ], ++ }, ++ 'export_dependent_settings': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/base/sigslot.h media/webrtc/trunk/webrtc/base/sigslot.h +index 42be10f3728d..079e3aeaa6cf 100644 +--- media/webrtc/trunk/webrtc/base/sigslot.h ++++ media/webrtc/trunk/webrtc/base/sigslot.h +@@ -2803,5 +2803,9 @@ namespace sigslot { + + }; // namespace sigslot + ++#endif // TALK_BASE_SIGSLOT_H__ ++#endif // TALK_BASE_SIGSLOT_H__ ++#endif // TALK_BASE_SIGSLOT_H__ ++#endif // TALK_BASE_SIGSLOT_H__ + #endif // TALK_BASE_SIGSLOT_H__ + #endif // WEBRTC_BASE_SIGSLOT_H__ +diff --git media/webrtc/trunk/webrtc/build/arm_neon.gypi media/webrtc/trunk/webrtc/build/arm_neon.gypi +new file mode 100644 +index 000000000000..41dd50f19ad0 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/arm_neon.gypi +@@ -0,0 +1,60 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# This file sets correct neon flags. Include it if you want to build ++# source with neon intrinsics. ++# To use this, create a gyp target with the following form: ++# { ++# 'target_name': 'my_lib', ++# 'type': 'static_library', ++# 'sources': [ ++# 'foo.c', ++# 'bar.cc', ++# ], ++# 'includes': ['path/to/this/gypi/file'], ++# } ++ ++{ ++ 'cflags!': [ ++ '-mfpu=vfpv3-d16', ++ ], ++ 'cflags_mozilla!': [ ++ '-mfpu=vfpv3-d16', ++ ], ++ 'asflags!': [ ++ '-mfpu=vfpv3-d16', ++ ], ++ 'asflags_mozilla!': [ ++ '-mfpu=vfpv3-d16', ++ ], ++ 'conditions': [ ++ # "-mfpu=neon" is not required for arm64 in GCC. ++ ['target_arch!="arm64"', { ++ 'cflags': [ ++ '-mfpu=neon', ++ ], ++ 'cflags_mozilla': [ ++ '-mfpu=neon', ++ ], ++ 'asflags': [ ++ '-mfpu=neon', ++ ], ++ 'asflags_mozilla': [ ++ '-mfpu=neon', ++ ], ++ }], ++ # Disable GCC LTO on NEON targets due to compiler bug. ++ # TODO(fdegans): Enable this. See crbug.com/408997. ++ ['clang==0 and use_lto==1', { ++ 'cflags!': [ ++ '-flto', ++ '-ffat-lto-objects', ++ ], ++ }], ++ ], ++} +diff --git media/webrtc/trunk/webrtc/build/chromium_common.gypi media/webrtc/trunk/webrtc/build/chromium_common.gypi +new file mode 100644 +index 000000000000..c8e613497f56 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/chromium_common.gypi +@@ -0,0 +1,5973 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# This ia copy of Chromium's common.gypi before it was deleted. ++# TODO(kjellander): Clean this up as soon we've stopped using GYP entirely. ++{ ++ # Variables expected to be overriden on the GYP command line (-D) or by ++ # ~/.gyp/include.gypi. ++ 'variables': { ++ # Putting a variables dict inside another variables dict looks kind of ++ # weird. This is done so that 'host_arch', 'chromeos', etc are defined as ++ # variables within the outer variables dict here. This is necessary ++ # to get these variables defined for the conditions within this variables ++ # dict that operate on these variables. ++ 'variables': { ++ 'variables': { ++ 'variables': { ++ 'variables': { ++ # Whether we're building a ChromeOS build. ++ 'chromeos%': 0, ++ # Whether we're building the cast (chromecast) shell ++ 'chromecast%': 0, ++ # Whether or not we are using the Aura windowing framework. ++ 'use_aura%': 0, ++ # Whether or not we are building the Ash shell. ++ 'use_ash%': 0, ++ # Whether or not we are using CRAS, the ChromeOS Audio Server. ++ 'use_cras%': 0, ++ # Use a raw surface abstraction. ++ 'use_ozone%': 0, ++ # Configure the build for small devices. See crbug.com/318413 ++ 'embedded%': 0, ++ 'conditions': [ ++ # Compute the architecture that we're building on. ++ ['OS=="win" or OS=="ios"', { ++ 'host_arch%': 'ia32', ++ }, { ++ 'host_arch%': '= 4.8 or clang. ++ # http://gcc.gnu.org/wiki/DebugFission ++ ['OS=="linux" and target_arch=="x64"', { ++ 'linux_use_debug_fission%': 1, ++ }, { ++ 'linux_use_debug_fission%': 0, ++ }], ++ ['OS=="android" or OS=="ios"', { ++ 'enable_captive_portal_detection%': 0, ++ }, { ++ 'enable_captive_portal_detection%': 1, ++ }], ++ # Enable Skia UI text drawing incrementally on different platforms. ++ # http://crbug.com/105550 ++ # ++ # On Aura, this allows per-tile painting to be used in the browser ++ # compositor. ++ ['OS!="android" and OS!="ios"', { ++ 'use_canvas_skia%': 1, ++ }], ++ ['chromeos==1', { ++ 'enable_basic_printing%': 1, ++ 'enable_print_preview%': 1, ++ }], ++ # Whether tests targets should be run, archived or just have the ++ # dependencies verified. All the tests targets have the '_run' suffix, ++ # e.g. base_unittests_run runs the target base_unittests. The test ++ # target always calls tools/swarming_client/isolate.py. See the script's ++ # --help for more information. Meant to be overriden with GYP_DEFINES. ++ # TODO(maruel): Remove the conditions as more configurations are ++ # supported. ++ ['OS!="ios" and OS!="android" and chromeos==0 and OS!="openbsd" and OS!="freebsd"', { ++ 'test_isolation_mode%': 'check', ++ }, { ++ 'test_isolation_mode%': 'noop', ++ }], ++ # Whether Android build uses OpenMAX DL FFT. ++ ['OS=="android" and ((target_arch=="arm" and arm_version >= 7) or target_arch=="ia32" or target_arch=="x64" or target_arch=="arm64" or target_arch=="mipsel")', { ++ # Currently only supported on Android ARMv7+, ARM64, ia32, x64 and mipsel. ++ # When enabled, this will also enable WebAudio support on ++ # Android for these architectures. Default is enabled. Whether ++ # WebAudio is actually available depends on runtime settings ++ # and flags. ++ 'use_openmax_dl_fft%': 1, ++ }, { ++ 'use_openmax_dl_fft%': 0, ++ }], ++ ['OS=="win" or OS=="linux" or OS=="openbsd" or OS=="freebsd"', { ++ 'enable_mdns%' : 1, ++ }], ++ # Disable various features by default on embedded. ++ ['embedded==1', { ++ 'remoting%': 0, ++ 'enable_basic_printing%': 0, ++ 'enable_print_preview%': 0, ++ }], ++ ['sysroot!=""', { ++ 'pkg-config': '<(chroot_cmd) <(DEPTH)/build/linux/pkg-config-wrapper "<(sysroot)" "<(target_arch)" "<(system_libdir)"', ++ }, { ++ 'pkg-config': 'pkg-config' ++ }], ++ # Enable WebVR support by default on Android ++ # Still requires command line flag to access API ++ ['OS=="android"', { ++ 'enable_webvr%': 1, ++ }, { ++ 'enable_webvr%': 0, ++ }], ++ ['order_profiling==0', { ++ # Set to 1 to enable fast builds. Set to 2 for even faster builds ++ # (it disables debug info for fastest compilation - only for use ++ # on compile-only bots). ++ 'fastbuild%': 0, ++ }, { ++ # With instrumentation enabled, debug info puts libchrome.so over 4gb, ++ # which causes the linker to produce an invalid ELF. ++ # http://crbug.com/574476 ++ 'fastbuild%': 2, ++ }], ++ ], ++ # Kasko reporting is disabled by default, but may get enabled below. ++ 'kasko%': 0, ++ # Setting this to '0' will cause V8's startup snapshot to be ++ # embedded in the binary instead of being a external files. ++ 'v8_use_external_startup_data%': 1, ++ # Set this to 1 to enable use of concatenated impulse responses ++ # for the HRTF panner in WebAudio. ++ 'use_concatenated_impulse_responses': 1, ++ # You can set the variable 'use_official_google_api_keys' to 1 ++ # to use the Google-internal file containing official API keys ++ # for Google Chrome even in a developer build. Setting this ++ # variable explicitly to 1 will cause your build to fail if the ++ # internal file is missing. ++ # ++ # The variable is documented here, but not handled in this file; ++ # see //google_apis/determine_use_official_keys.gypi for the ++ # implementation. ++ # ++ # Set the variable to 0 to not use the internal file, even when ++ # it exists in your checkout. ++ # ++ # Leave it unset in your include.gypi to have the variable ++ # implicitly set to 1 if you have ++ # src/google_apis/internal/google_chrome_api_keys.h in your ++ # checkout, and implicitly set to 0 if not. ++ # ++ # Note that official builds always behave as if the variable ++ # was explicitly set to 1, i.e. they always use official keys, ++ # and will fail to build if the internal file is missing. ++ # ++ # NOTE: You MUST NOT explicitly set the variable to 2 in your ++ # include.gypi or by other means. Due to subtleties of GYP, this ++ # is not the same as leaving the variable unset, even though its ++ # default value in ++ # //google_apis/determine_use_official_keys.gypi is 2. ++ # Set these to bake the specified API keys and OAuth client ++ # IDs/secrets into your build. ++ # ++ # If you create a build without values baked in, you can instead ++ # set environment variables to provide the keys at runtime (see ++ # src/google_apis/google_api_keys.h for details). Features that ++ # require server-side APIs may fail to work if no keys are ++ # provided. ++ # ++ # Note that if you are building an official build or if ++ # use_official_google_api_keys has been set to 1 (explicitly or ++ # implicitly), these values will be ignored and the official ++ # keys will be used instead. ++ 'google_api_key%': '', ++ 'google_default_client_id%': '', ++ 'google_default_client_secret%': '', ++ # Native Client is enabled by default. ++ 'disable_nacl%': '0', ++ # Native Client toolchains, enabled by default. ++ 'disable_pnacl%': 0, ++ 'disable_newlib%': 0, ++ # Sets the default version name and code for Android app, by default we ++ # do a developer build. ++ 'android_app_version_name%': 'Developer Build', ++ 'android_app_version_code%': 1, ++ # Use the internal version of the framework to build Android WebView. ++ 'use_webview_internal_framework%': 0, ++ }, ++ # Copy conditionally-set variables out one scope. ++ 'branding%': '<(branding)', ++ 'branding_path_component%': '<(branding_path_component)', ++ 'buildtype%': '<(buildtype)', ++ 'target_arch%': '<(target_arch)', ++ 'target_subarch%': '<(target_subarch)', ++ 'mips_arch_variant%': '<(mips_arch_variant)', ++ 'mips_dsp_rev%': '<(mips_dsp_rev)', ++ 'mips_msa%': '<(mips_msa)', ++ 'host_arch%': '<(host_arch)', ++ 'toolkit_views%': '<(toolkit_views)', ++ 'ui_compositor_image_transport%': '<(ui_compositor_image_transport)', ++ 'use_aura%': '<(use_aura)', ++ 'use_ash%': '<(use_ash)', ++ 'use_cras%': '<(use_cras)', ++ 'use_libpci%': '<(use_libpci)', ++ 'use_openssl_certs%': '<(use_openssl_certs)', ++ 'use_external_popup_menu%': '<(use_external_popup_menu)', ++ 'use_nss_certs%': '<(use_nss_certs)', ++ 'use_udev%': '<(use_udev)', ++ 'os_bsd%': '<(os_bsd)', ++ 'os_posix%': '<(os_posix)', ++ 'use_dbus%': '<(use_dbus)', ++ 'use_glib%': '<(use_glib)', ++ 'use_pango%': '<(use_pango)', ++ 'use_cairo%': '<(use_cairo)', ++ 'use_ozone%': '<(use_ozone)', ++ 'use_ozone_evdev%': '<(use_ozone_evdev)', ++ 'use_xkbcommon%': '<(use_xkbcommon)', ++ 'use_gtk3%': '<(use_gtk3)', ++ 'use_clipboard_aurax11%': '<(use_clipboard_aurax11)', ++ 'desktop_linux%': '<(desktop_linux)', ++ 'use_x11%': '<(use_x11)', ++ 'use_gnome_keyring%': '<(use_gnome_keyring)', ++ 'linux_fpic%': '<(linux_fpic)', ++ 'chromeos%': '<(chromeos)', ++ 'chromecast%': '<(chromecast)', ++ 'is_cast_desktop_build%': '<(is_cast_desktop_build)', ++ 'enable_viewport%': '<(enable_viewport)', ++ 'enable_hidpi%': '<(enable_hidpi)', ++ 'enable_wayland_server%': '<(enable_wayland_server)', ++ 'enable_wifi_display%': '<(enable_wifi_display)', ++ 'image_loader_extension%': '<(image_loader_extension)', ++ 'fastbuild%': '<(fastbuild)', ++ 'win_z7%': '<(win_z7)', ++ 'dcheck_always_on%': '<(dcheck_always_on)', ++ 'tracing_like_official_build%': '<(tracing_like_official_build)', ++ 'fieldtrial_testing_like_official_build%': '<(fieldtrial_testing_like_official_build)', ++ 'arm_version%': '<(arm_version)', ++ 'arm_neon%': '<(arm_neon)', ++ 'arm_neon_optional%': '<(arm_neon_optional)', ++ 'sysroot%': '<(sysroot)', ++ 'use_sysroot%': '<(use_sysroot)', ++ 'pkg-config%': '<(pkg-config)', ++ 'chroot_cmd%': '<(chroot_cmd)', ++ 'system_libdir%': '<(system_libdir)', ++ 'component%': '<(component)', ++ 'win_analyze%': '<(win_analyze)', ++ 'win_fastlink%': '<(win_fastlink)', ++ 'chrome_pgo_phase%': '<(chrome_pgo_phase)', ++ 'full_wpo_on_official%': '<(full_wpo_on_official)', ++ 'enable_resource_whitelist_generation%': '<(enable_resource_whitelist_generation)', ++ 'use_titlecase_in_grd%': '<(use_titlecase_in_grd)', ++ 'remoting%': '<(remoting)', ++ 'enable_one_click_signin%': '<(enable_one_click_signin)', ++ 'enable_media_router%': '<(enable_media_router)', ++ 'enable_webrtc%': '<(enable_webrtc)', ++ 'chromium_win_pch%': '<(chromium_win_pch)', ++ 'configuration_policy': '<(configuration_policy)', ++ 'safe_browsing%': '<(safe_browsing)', ++ 'enable_web_speech%': '<(enable_web_speech)', ++ 'enable_hotwording%': '<(enable_hotwording)', ++ 'notifications%': '<(notifications)', ++ 'clang_use_chrome_plugins%': '<(clang_use_chrome_plugins)', ++ 'mac_want_real_dsym%': '<(mac_want_real_dsym)', ++ 'asan%': '<(asan)', ++ 'asan_blacklist%': '<(asan_blacklist)', ++ 'sanitizer_coverage%': '<(sanitizer_coverage)', ++ 'asan_field_padding%': '<(asan_field_padding)', ++ 'use_sanitizer_options%': '<(use_sanitizer_options)', ++ 'syzyasan%': '<(syzyasan)', ++ 'kasko%': '<(kasko)', ++ 'syzygy_optimize%': '<(syzygy_optimize)', ++ 'lsan%': '<(lsan)', ++ 'msan%': '<(msan)', ++ 'msan_blacklist%': '<(msan_blacklist)', ++ 'msan_track_origins%': '<(msan_track_origins)', ++ 'tsan%': '<(tsan)', ++ 'tsan_blacklist%': '<(tsan_blacklist)', ++ 'ubsan%': '<(ubsan)', ++ 'ubsan_blacklist%': '<(ubsan_blacklist)', ++ 'ubsan_security%': '<(ubsan_security)', ++ 'ubsan_security_blacklist%': '<(ubsan_security_blacklist)', ++ 'ubsan_vptr%': '<(ubsan_vptr)', ++ 'ubsan_vptr_blacklist%': '<(ubsan_vptr_blacklist)', ++ 'use_instrumented_libraries%': '<(use_instrumented_libraries)', ++ 'use_prebuilt_instrumented_libraries%': '<(use_prebuilt_instrumented_libraries)', ++ 'use_custom_libcxx%': '<(use_custom_libcxx)', ++ 'order_profiling%': '<(order_profiling)', ++ 'order_text_section%': '<(order_text_section)', ++ 'enable_extensions%': '<(enable_extensions)', ++ 'enable_pdf%': '<(enable_pdf)', ++ 'pdf_enable_v8%': '<(pdf_enable_v8)', ++ 'pdf_enable_xfa%': '<(pdf_enable_xfa)', ++ 'enable_plugin_installation%': '<(enable_plugin_installation)', ++ 'enable_plugins%': '<(enable_plugins)', ++ 'enable_session_service%': '<(enable_session_service)', ++ 'enable_themes%': '<(enable_themes)', ++ 'linux_use_bundled_gold%': '<(linux_use_bundled_gold)', ++ 'linux_use_bundled_binutils%': '<(linux_use_bundled_binutils)', ++ 'linux_use_gold_flags%': '<(linux_use_gold_flags)', ++ 'linux_use_debug_fission%': '<(linux_use_debug_fission)', ++ 'use_canvas_skia%': '<(use_canvas_skia)', ++ 'test_isolation_mode%': '<(test_isolation_mode)', ++ 'enable_basic_printing%': '<(enable_basic_printing)', ++ 'enable_print_preview%': '<(enable_print_preview)', ++ 'enable_spellcheck%': '<(enable_spellcheck)', ++ 'use_browser_spellchecker%': '<(use_browser_spellchecker)', ++ 'use_minikin_hyphenation%': '<(use_minikin_hyphenation)', ++ 'cld2_table_size%': '<(cld2_table_size)', ++ 'enable_captive_portal_detection%': '<(enable_captive_portal_detection)', ++ 'disable_file_support%': '<(disable_file_support)', ++ 'disable_ftp_support%': '<(disable_ftp_support)', ++ 'use_platform_icu_alternatives%': '<(use_platform_icu_alternatives)', ++ 'disable_brotli_filter%': '<(disable_brotli_filter)', ++ 'enable_task_manager%': '<(enable_task_manager)', ++ 'wix_path%': '<(wix_path)', ++ 'use_libjpeg_turbo%': '<(use_libjpeg_turbo)', ++ 'use_system_libjpeg%': '<(use_system_libjpeg)', ++ 'android_channel%': '<(android_channel)', ++ 'icu_use_data_file_flag%': '<(icu_use_data_file_flag)', ++ 'gyp_managed_install%': 0, ++ 'create_standalone_apk%': 1, ++ 'enable_app_list%': '<(enable_app_list)', ++ 'use_default_render_theme%': '<(use_default_render_theme)', ++ 'google_api_key%': '<(google_api_key)', ++ 'google_default_client_id%': '<(google_default_client_id)', ++ 'google_default_client_secret%': '<(google_default_client_secret)', ++ 'enable_supervised_users%': '<(enable_supervised_users)', ++ 'enable_mdns%' : '<(enable_mdns)', ++ 'enable_service_discovery%' : '<(enable_service_discovery)', ++ 'enable_hangout_services_extension%' : '<(enable_hangout_services_extension)', ++ 'proprietary_codecs%': '<(proprietary_codecs)', ++ 'use_goma%': '<(use_goma)', ++ 'gomadir%': '<(gomadir)', ++ 'use_lto%': '<(use_lto)', ++ 'use_lto_o2%': '<(use_lto_o2)', ++ 'gold_icf_level%': '<(gold_icf_level)', ++ 'v8_use_external_startup_data%': '<(v8_use_external_startup_data)', ++ 'cfi_vptr%': '<(cfi_vptr)', ++ 'cfi_cast%': '<(cfi_cast)', ++ 'cfi_diag%': '<(cfi_diag)', ++ 'cfi_blacklist%': '<(cfi_blacklist)', ++ 'mac_views_browser%': '<(mac_views_browser)', ++ 'android_app_version_name%': '<(android_app_version_name)', ++ 'android_app_version_code%': '<(android_app_version_code)', ++ 'use_webview_internal_framework%': '<(use_webview_internal_framework)', ++ 'enable_webvr%': '<(enable_webvr)', ++ # Turns on compiler optimizations in V8 in Debug build. ++ 'v8_optimized_debug%': 1, ++ # Use system protobuf instead of bundled one. ++ 'use_system_protobuf%': 0, ++ # Use system yasm instead of bundled one. ++ 'use_system_yasm%': 0, ++ # Use system ICU instead of bundled one. ++ 'use_system_icu%' : 0, ++ # Default to enabled PIE; this is important for ASLR but we may need to be ++ # able to turn it off for various reasons. ++ 'linux_disable_pie%': 0, ++ # The release channel that this build targets. This is used to restrict ++ # channel-specific build options, like which installer packages to create. ++ # The default is 'all', which does no channel-specific filtering. ++ 'channel%': 'all', ++ # Override chromium_mac_pch and set it to 0 to suppress the use of ++ # precompiled headers on the Mac. Prefix header injection may still be ++ # used, but prefix headers will not be precompiled. This is useful when ++ # using distcc to distribute a build to compile slaves that don't ++ # share the same compiler executable as the system driving the compilation, ++ # because precompiled headers rely on pointers into a specific compiler ++ # executable's image. Setting this to 0 is needed to use an experimental ++ # Linux-Mac cross compiler distcc farm. ++ 'chromium_mac_pch%': 1, ++ # The default value for mac_strip in target_defaults. This cannot be ++ # set there, per the comment about variable% in a target_defaults. ++ 'mac_strip_release%': 0, ++ # Set to 1 to enable java code coverage. Instruments classes during build ++ # to produce .ec files during runtime. ++ 'emma_coverage%': 0, ++ # EMMA filter string consisting of a list of inclusion/exclusion patterns ++ # separated with whitespace and/or comma. Only has effect if ++ # 'emma_coverage=1'. ++ 'emma_filter%': '', ++ # Set to 1 to enable running Android lint on java/class files. ++ 'android_lint%': 1, ++ # Although base/allocator lets you select a heap library via an ++ # environment variable, the shim it uses sometimes gets in the way. ++ # To disable it entirely, and switch to normal msvcrt, do e.g. ++ # 'win_use_allocator_shim': 0, ++ # 'win_release_RuntimeLibrary': 2 ++ # to ~/.gyp/include.gypi, gclient runhooks --force, and do a release build. ++ 'win_use_allocator_shim%': 1, # 1 = shim allocator; 0 = msvcrt ++ # Enables the unified allocator shim (experimental) which routes all the ++ # alloc calls to base/. Right now is supported on Linux Desktop only. ++ # http://crbug.com/550886 . ++ 'use_experimental_allocator_shim%': 0, ++ # TODO(bradnelson): eliminate this when possible. ++ # To allow local gyp files to prevent release.vsprops from being included. ++ # Yes(1) means include release.vsprops. ++ # Once all vsprops settings are migrated into gyp, this can go away. ++ 'msvs_use_common_release%': 1, ++ # TODO(bradnelson): eliminate this when possible. ++ # To allow local gyp files to override additional linker options for msvs. ++ # Yes(1) means set use the common linker options. ++ 'msvs_use_common_linker_extras%': 1, ++ # TODO(sgk): eliminate this if possible. ++ # It would be nicer to support this via a setting in 'target_defaults' ++ # in chrome/app/locales/locales.gypi overriding the setting in the ++ # 'Debug' configuration in the 'target_defaults' dict below, ++ # but that doesn't work as we'd like. ++ 'msvs_debug_link_incremental%': '2', ++ # Needed for some of the largest modules. ++ 'msvs_debug_link_nonincremental%': '1', ++ # Turns on Use Library Dependency Inputs for linking chrome.dll on Windows ++ # to get incremental linking to be faster in debug builds. ++ 'incremental_chrome_dll%': '0', ++ # Experimental setting to break chrome.dll into multiple pieces based on ++ # process type. ++ 'chrome_multiple_dll%': '0', ++ # Whether the VS xtree header has been patched to disable warning 4702. If ++ # it has, then we don't need to disable 4702 (unreachable code warning). ++ # The patch is preapplied to the internal toolchain and hence all bots. ++ 'msvs_xtree_patched%': '. Additional ++ # documentation on these macros is available at ++ # http://developer.apple.com/mac/library/technotes/tn2002/tn2064.html#SECTION3 ++ # Chrome normally builds with the Mac OS X 10.10 SDK and sets the ++ # deployment target to 10.7. Other projects, such as O3D, may ++ # override these defaults. ++ # Normally, mac_sdk_min is used to find an SDK that Xcode knows ++ # about that is at least the specified version. In official builds, ++ # the SDK must match mac_sdk_min exactly. If the SDK is installed ++ # someplace that Xcode doesn't know about, set mac_sdk_path to the ++ # path to the SDK; when set to a non-empty string, SDK detection ++ # based on mac_sdk_min will be bypassed entirely. ++ 'mac_deployment_target%': '10.7', ++ 'mac_sdk_min%': '10.10', ++ 'mac_sdk_path%': '', ++ }, ++ 'mac_sdk_min': '<(mac_sdk_min)', ++ 'mac_sdk_path': '<(mac_sdk_path)', ++ 'mac_deployment_target': '<(mac_deployment_target)', ++ # Compile in Breakpad support by default so that it can be ++ # tested, even if it is not enabled by default at runtime. ++ 'mac_breakpad_compiled_in%': 1, ++ 'conditions': [ ++ # mac_product_name is set to the name of the .app bundle as it should ++ # appear on disk. This duplicates data from ++ # chrome/app/theme/chromium/BRANDING and ++ # chrome/app/theme/google_chrome/BRANDING, but is necessary to get ++ # these names into the build system. ++ ['branding=="Chrome"', { ++ 'mac_product_name%': 'Google Chrome', ++ }, { # else: branding!="Chrome" ++ 'mac_product_name%': 'Chromium', ++ }], ++ # Official mac builds require a specific OS X SDK, but iOS and ++ # non-official mac builds do not. ++ ['branding=="Chrome" and buildtype=="Official" and OS=="mac"', { ++ 'mac_sdk%': '(nacl_untrusted_build)==1', { ++ 'defines': [ ++ 'USE_OPENSSL_CERTS=1', ++ ], ++ }], ++ ['<(use_glib)==1 and >(nacl_untrusted_build)==0', { ++ 'defines': ['USE_GLIB=1'], ++ }], ++ ['<(use_nss_certs)==1 and >(nacl_untrusted_build)==0', { ++ 'defines': ['USE_NSS_CERTS=1'], ++ }], ++ ['<(chromeos)==1 and >(nacl_untrusted_build)==0', { ++ 'defines': ['OS_CHROMEOS=1'], ++ }], ++ ['<(asan)==1 and >(nacl_untrusted_build)==0', { ++ 'defines': [ ++ 'ADDRESS_SANITIZER', ++ 'MEMORY_TOOL_REPLACES_ALLOCATOR', ++ 'MEMORY_SANITIZER_INITIAL_SIZE', ++ ], ++ }], ++ ['enable_wexit_time_destructors==1 and OS!="win"', { ++ # TODO: Enable on Windows too, http://crbug.com/404525 ++ 'variables': { 'clang_warning_flags': ['-Wexit-time-destructors']}, ++ }], ++ ['chromium_code==0', { ++ 'variables': { ++ 'clang_warning_flags': [ ++ # Lots of third-party libraries have unused variables. Instead of ++ # suppressing them individually, we just blanket suppress them here. ++ '-Wno-unused-variable', ++ ], ++ }, ++ 'conditions': [ ++ [ 'os_posix==1 and OS!="mac" and OS!="ios"', { ++ # Remove -Wextra for third-party code. ++ 'cflags!': [ '-Wextra' ], ++ 'cflags_cc': [ ++ # Don't warn about hash_map in third-party code. ++ '-Wno-deprecated', ++ ], ++ }], ++ [ 'os_posix==1 and clang!=1 and OS!="mac" and OS!="ios"', { ++ # When we don't control the compiler, don't use -Wall for ++ # third-party code either. ++ 'cflags!': [ '-Wall' ], ++ }], ++ # TODO: Fix all warnings on chromeos too. ++ [ 'os_posix==1 and OS!="mac" and OS!="ios" and (clang!=1 or chromeos==1)', { ++ 'cflags!': [ ++ '-Werror', ++ ], ++ }], ++ [ 'OS=="win"', { ++ 'defines': [ ++ '_CRT_SECURE_NO_DEPRECATE', ++ '_CRT_NONSTDC_NO_WARNINGS', ++ '_CRT_NONSTDC_NO_DEPRECATE', ++ '_SCL_SECURE_NO_DEPRECATE', ++ ], ++ 'msvs_disabled_warnings': [ ++ # forcing value to bool 'true' or 'false' (performance warning) ++ 4800, ++ ], ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'WarningLevel': '3', ++ 'WarnAsError': 'true', ++ 'Detect64BitPortabilityProblems': 'false', ++ }, ++ }, ++ 'conditions': [ ++ ['buildtype=="Official"', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { 'WarnAsError': 'false' }, ++ } ++ }], ++ [ 'component=="shared_library"', { ++ # TODO(darin): Unfortunately, some third_party code depends on base. ++ 'msvs_disabled_warnings': [ ++ 4251, # class 'std::xx' needs to have dll-interface. ++ ], ++ }], ++ ], ++ }], ++ [ 'OS=="mac" or OS=="ios"', { ++ 'xcode_settings': { ++ 'WARNING_CFLAGS!': ['-Wextra'], ++ }, ++ 'conditions': [ ++ ['buildtype=="Official"', { ++ 'xcode_settings': { ++ 'GCC_TREAT_WARNINGS_AS_ERRORS': 'NO', # -Werror ++ }, ++ }], ++ ], ++ }], ++ [ 'OS=="ios"', { ++ 'xcode_settings': { ++ 'RUN_CLANG_STATIC_ANALYZER': 'NO', ++ # Several internal ios directories generate numerous warnings for ++ # -Wobjc-missing-property-synthesis. ++ 'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'NO', ++ }, ++ }], ++ ], ++ }, { ++ # In Chromium code, we define __STDC_foo_MACROS in order to get the ++ # C99 macros on Mac and Linux. ++ 'defines': [ ++ '__STDC_CONSTANT_MACROS', ++ '__STDC_FORMAT_MACROS', ++ ], ++ 'conditions': [ ++ ['OS=="win"', { ++ # turn on warnings for signed/unsigned mismatch on chromium code. ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': ['/we4389'], ++ }, ++ }, ++ }], ++ ['OS=="win" and component=="shared_library"', { ++ 'msvs_disabled_warnings': [ ++ 4251, # class 'std::xx' needs to have dll-interface. ++ ], ++ }], ++ ], ++ }], ++ ], # target_conditions for 'target_defaults' ++ 'default_configuration': 'Debug', ++ 'configurations': { ++ # VCLinkerTool LinkIncremental values below: ++ # 0 == default ++ # 1 == /INCREMENTAL:NO ++ # 2 == /INCREMENTAL ++ # Debug links incremental, Release does not. ++ # ++ # Abstract base configurations to cover common attributes. ++ # ++ 'Common_Base': { ++ 'abstract': 1, ++ 'msvs_configuration_attributes': { ++ 'OutputDirectory': '<(DEPTH)\\build\\<(build_dir_prefix)$(ConfigurationName)', ++ 'IntermediateDirectory': '$(OutDir)\\obj\\$(ProjectName)', ++ 'CharacterSet': '1', ++ }, ++ 'msvs_settings':{ ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ '/bigobj', ++ # Tell the compiler to crash on failures. This is undocumented ++ # and unsupported but very handy. ++ '/d2FastFail', ++ ], ++ }, ++ 'VCLinkerTool': { ++ # Add the default import libs. ++ 'AdditionalDependencies': [ ++ 'kernel32.lib', ++ 'gdi32.lib', ++ 'winspool.lib', ++ 'comdlg32.lib', ++ 'advapi32.lib', ++ 'shell32.lib', ++ 'ole32.lib', ++ 'oleaut32.lib', ++ 'user32.lib', ++ 'uuid.lib', ++ 'odbc32.lib', ++ 'odbccp32.lib', ++ 'delayimp.lib', ++ 'credui.lib', ++ ], ++ 'AdditionalOptions': [ ++ # Suggested by Microsoft Devrel to avoid ++ # LINK : fatal error LNK1248: image size (80000000) exceeds maximum allowable size (80000000) ++ # which started happening more regularly after VS2013 Update 4. ++ # Needs to be a bit lower for VS2015, or else errors out. ++ '/maxilksize:0x7ff00000', ++ # Tell the linker to crash on failures. ++ '/fastfail', ++ ], ++ }, ++ }, ++ 'conditions': [ ++ ['OS=="win" and win_fastlink==1 and MSVS_VERSION != "2013"', { ++ 'msvs_settings': { ++ 'VCLinkerTool': { ++ # /PROFILE is incompatible with /debug:fastlink ++ 'Profile': 'false', ++ 'AdditionalOptions': [ ++ # Tell VS 2015+ to create a PDB that references debug ++ # information in .obj and .lib files instead of copying ++ # it all. ++ '/DEBUG:FASTLINK', ++ ], ++ }, ++ }, ++ }], ++ ['OS=="win" and MSVS_VERSION == "2015"', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Work around crbug.com/526851, bug in VS 2015 RTM compiler. ++ '/Zc:sizedDealloc-', ++ # Disable thread-safe statics to avoid overhead and because ++ # they are disabled on other platforms. See crbug.com/587210 ++ # and -fno-threadsafe-statics. ++ '/Zc:threadSafeInit-', ++ ], ++ }, ++ }, ++ }], ++ ], ++ }, ++ 'x86_Base': { ++ 'abstract': 1, ++ 'msvs_settings': { ++ 'VCLinkerTool': { ++ 'MinimumRequiredVersion': '5.01', # XP. ++ 'TargetMachine': '1', ++ }, ++ 'VCLibrarianTool': { ++ 'TargetMachine': '1', ++ }, ++ }, ++ 'msvs_configuration_platform': 'Win32', ++ }, ++ 'x64_Base': { ++ 'abstract': 1, ++ 'msvs_configuration_platform': 'x64', ++ 'msvs_settings': { ++ 'VCLinkerTool': { ++ # Make sure to understand http://crbug.com/361720 if you want to ++ # increase this. ++ 'MinimumRequiredVersion': '5.02', # Server 2003. ++ 'TargetMachine': '17', # x86 - 64 ++ 'AdditionalLibraryDirectories!': ++ ['<(windows_sdk_path)/Lib/10.0.10586.0/um/x86'], ++ 'AdditionalLibraryDirectories': ++ ['<(windows_sdk_path)/Lib/10.0.10586.0/um/x64'], ++ # Doesn't exist x64 SDK. Should use oleaut32 in any case. ++ 'IgnoreDefaultLibraryNames': [ 'olepro32.lib' ], ++ }, ++ 'VCLibrarianTool': { ++ 'AdditionalLibraryDirectories!': ++ ['<(windows_sdk_path)/Lib/10.0.10586.0/um/x86'], ++ 'AdditionalLibraryDirectories': ++ ['<(windows_sdk_path)/Lib/10.0.10586.0/um/x64'], ++ 'TargetMachine': '17', # x64 ++ }, ++ }, ++ }, ++ 'Debug_Base': { ++ 'abstract': 1, ++ 'defines': [ ++ 'DYNAMIC_ANNOTATIONS_ENABLED=1', ++ 'WTF_USE_DYNAMIC_ANNOTATIONS=1', ++ ], ++ 'xcode_settings': { ++ 'GCC_OPTIMIZATION_LEVEL': '<(mac_debug_optimization)', ++ 'OTHER_CFLAGS': [ ++ '<@(debug_extra_cflags)', ++ ], ++ }, ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'Optimization': '<(win_debug_Optimization)', ++ 'PreprocessorDefinitions': ['_DEBUG'], ++ 'BasicRuntimeChecks': '<(win_debug_RuntimeChecks)', ++ 'RuntimeLibrary': '<(win_debug_RuntimeLibrary)', ++ 'conditions': [ ++ # According to MSVS, InlineFunctionExpansion=0 means ++ # "default inlining", not "/Ob0". ++ # Thus, we have to handle InlineFunctionExpansion==0 separately. ++ ['win_debug_InlineFunctionExpansion==0', { ++ 'AdditionalOptions': ['/Ob0'], ++ }], ++ ['win_debug_InlineFunctionExpansion!=""', { ++ 'InlineFunctionExpansion': ++ '<(win_debug_InlineFunctionExpansion)', ++ }], ++ ['win_debug_disable_iterator_debugging==1', { ++ 'PreprocessorDefinitions': ['_HAS_ITERATOR_DEBUGGING=0'], ++ }], ++ # if win_debug_OmitFramePointers is blank, leave as default ++ ['win_debug_OmitFramePointers==1', { ++ 'OmitFramePointers': 'true', ++ }], ++ ['win_debug_OmitFramePointers==0', { ++ 'OmitFramePointers': 'false', ++ # The above is not sufficient (http://crbug.com/106711): it ++ # simply eliminates an explicit "/Oy", but both /O2 and /Ox ++ # perform FPO regardless, so we must explicitly disable. ++ # We still want the false setting above to avoid having ++ # "/Oy /Oy-" and warnings about overriding. ++ 'AdditionalOptions': ['/Oy-'], ++ }], ++ ], ++ 'AdditionalOptions': [ '<@(win_debug_extra_cflags)', ], ++ }, ++ 'VCLinkerTool': { ++ 'LinkIncremental': '<(msvs_debug_link_incremental)', ++ # ASLR makes debugging with windbg difficult because Chrome.exe and ++ # Chrome.dll share the same base name. As result, windbg will ++ # name the Chrome.dll module like chrome_, where ++ # typically changes with each launch. This in turn ++ # means that breakpoints in Chrome.dll don't stick from one launch ++ # to the next. For this reason, we turn ASLR off in debug builds. ++ # Note that this is a three-way bool, where 0 means to pick up ++ # the default setting, 1 is off and 2 is on. ++ 'RandomizedBaseAddress': 1, ++ }, ++ 'VCResourceCompilerTool': { ++ 'PreprocessorDefinitions': ['_DEBUG'], ++ }, ++ }, ++ 'variables': { ++ 'clang_warning_flags': [ ++ # Allow comparing the address of references and 'this' against 0 ++ # in debug builds. Technically, these can never be null in ++ # well-defined C/C++ and Clang can optimize such checks away in ++ # release builds, but they may be used in asserts in debug builds. ++ '-Wno-undefined-bool-conversion', ++ '-Wno-tautological-undefined-compare', ++ ], ++ }, ++ 'conditions': [ ++ ['OS=="linux" or OS=="android"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'cflags': [ ++ '<@(debug_extra_cflags)', ++ ], ++ }], ++ ], ++ }], ++ ['OS=="linux" and target_arch!="ia32" and disable_glibcxx_debug==0', { ++ # Enable libstdc++ debugging facilities to help catch problems ++ # early, see http://crbug.com/65151 . ++ # TODO(phajdan.jr): Should we enable this for all of POSIX? ++ 'defines': ['_GLIBCXX_DEBUG=1',], ++ }], ++ ['release_valgrind_build==0', { ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ ++ '-fstack-protector-strong', # Implies -fstack-protector ++ ], ++ }, ++ }], ++ ], ++ }, ++ 'Release_Base': { ++ 'abstract': 1, ++ 'defines': [ ++ 'NDEBUG', ++ ], ++ 'xcode_settings': { ++ 'DEAD_CODE_STRIPPING': 'YES', # -Wl,-dead_strip ++ 'GCC_OPTIMIZATION_LEVEL': '<(mac_release_optimization)', ++ 'OTHER_CFLAGS': [ '<@(release_extra_cflags)', ], ++ }, ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'RuntimeLibrary': '<(win_release_RuntimeLibrary)', ++ 'conditions': [ ++ # In official builds, each target will self-select ++ # an optimization level. ++ ['buildtype!="Official"', { ++ 'Optimization': '<(win_release_Optimization)', ++ }, ++ ], ++ # According to MSVS, InlineFunctionExpansion=0 means ++ # "default inlining", not "/Ob0". ++ # Thus, we have to handle InlineFunctionExpansion==0 separately. ++ ['win_release_InlineFunctionExpansion==0', { ++ 'AdditionalOptions': ['/Ob0'], ++ }], ++ ['win_release_InlineFunctionExpansion!=""', { ++ 'InlineFunctionExpansion': ++ '<(win_release_InlineFunctionExpansion)', ++ }], ++ # if win_release_OmitFramePointers is blank, leave as default ++ ['win_release_OmitFramePointers==1', { ++ 'OmitFramePointers': 'true', ++ }], ++ ['win_release_OmitFramePointers==0', { ++ 'OmitFramePointers': 'false', ++ # The above is not sufficient (http://crbug.com/106711): it ++ # simply eliminates an explicit "/Oy", but both /O2 and /Ox ++ # perform FPO regardless, so we must explicitly disable. ++ # We still want the false setting above to avoid having ++ # "/Oy /Oy-" and warnings about overriding. ++ 'AdditionalOptions': ['/Oy-'], ++ }], ++ ['asan==0', { ++ # Put data in separate COMDATs. This allows the linker ++ # to put bit-identical constants at the same address even if ++ # they're unrelated constants, which saves binary size. ++ # This optimization can't be used when ASan is enabled because ++ # it is not compatible with the ASan ODR checker. ++ 'AdditionalOptions': ['/Gw'], ++ }], ++ ], ++ 'AdditionalOptions': [ ++ '/d2Zi+', # Improve debugging of Release builds. ++ '/Zc:inline', # Remove unreferenced COMDAT (faster links). ++ '<@(win_release_extra_cflags)', ++ ], ++ }, ++ 'VCLinkerTool': { ++ # LinkIncremental is a tri-state boolean, where 0 means default ++ # (i.e., inherit from parent solution), 1 means false, and ++ # 2 means true. ++ 'LinkIncremental': '1', ++ # This corresponds to the /PROFILE flag which ensures the PDB ++ # file contains FIXUP information (growing the PDB file by about ++ # 5%) but does not otherwise alter the output binary. This ++ # information is used by the Syzygy optimization tool when ++ # decomposing the release image. ++ 'Profile': 'true', ++ }, ++ }, ++ 'conditions': [ ++ ['release_valgrind_build==0 and tsan==0', { ++ 'defines': [ ++ 'NVALGRIND', ++ 'DYNAMIC_ANNOTATIONS_ENABLED=0', ++ ], ++ }, { ++ 'defines': [ ++ 'MEMORY_TOOL_REPLACES_ALLOCATOR', ++ 'MEMORY_SANITIZER_INITIAL_SIZE', ++ 'DYNAMIC_ANNOTATIONS_ENABLED=1', ++ 'WTF_USE_DYNAMIC_ANNOTATIONS=1', ++ ], ++ }], ++ ['OS=="win" and win_use_allocator_shim==1', { ++ 'defines': [ ++ 'ALLOCATOR_SHIM' ++ ], ++ }], ++ # _FORTIFY_SOURCE isn't really supported by Clang now, see ++ # http://llvm.org/bugs/show_bug.cgi?id=16821. ++ # It seems to work fine with Ubuntu 12 headers though, so use it ++ # in official builds. ++ ['os_posix==1 and (asan!=1 and msan!=1 and tsan!=1 and lsan!=1 and ubsan!=1) and (OS!="linux" or clang!=1 or buildtype=="Official")', { ++ 'target_conditions': [ ++ ['chromium_code==1', { ++ # Non-chromium code is not guaranteed to compile cleanly ++ # with _FORTIFY_SOURCE. Also, fortified build may fail ++ # when optimizations are disabled, so only do that for Release ++ # build. ++ 'defines': [ ++ '_FORTIFY_SOURCE=2', ++ ], ++ }], ++ ], ++ }], ++ ['OS=="linux" or OS=="android"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'cflags': [ ++ '<@(release_extra_cflags)', ++ ], ++ 'conditions': [ ++ ['enable_resource_whitelist_generation==1', { ++ 'cflags': [ ++ '-Wunknown-pragmas -Wno-error=unknown-pragmas', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ['OS=="ios"', { ++ 'defines': [ ++ 'NS_BLOCK_ASSERTIONS=1', ++ ], ++ }], ++ ], ++ }, ++ # ++ # Concrete configurations ++ # ++ 'Debug': { ++ 'inherit_from': ['Common_Base', 'x86_Base', 'Debug_Base'], ++ }, ++ 'Release': { ++ 'inherit_from': ['Common_Base', 'x86_Base', 'Release_Base'], ++ }, ++ 'conditions': [ ++ [ 'OS=="ios"', { ++ 'Profile': { ++ 'inherit_from': ['Common_Base', 'x86_Base', 'Release_Base'], ++ 'target_conditions': [ ++ [ '_type=="executable"', { ++ # To get a real .dSYM bundle produced by dsymutil, set the ++ # debug information format to dwarf-with-dsym. Since ++ # strip_from_xcode will not be used, set Xcode to do the ++ # stripping as well. ++ 'xcode_settings': { ++ 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym', ++ 'DEPLOYMENT_POSTPROCESSING': 'YES', ++ 'STRIP_INSTALLED_PRODUCT': 'YES', ++ }, ++ }], ++ ], ++ }, ++ }], ++ [ 'OS=="win"', { ++ # TODO(bradnelson): add a gyp mechanism to make this more graceful. ++ 'Debug_x64': { ++ 'inherit_from': ['Common_Base', 'x64_Base', 'Debug_Base'], ++ }, ++ 'Release_x64': { ++ 'inherit_from': ['Common_Base', 'x64_Base', 'Release_Base'], ++ }, ++ }], ++ ], ++ }, ++ }, ++ 'conditions': [ ++ ['os_posix==1', { ++ 'target_defaults': { ++ 'ldflags': [ ++ '-Wl,-z,now', ++ '-Wl,-z,relro', ++ ], ++ # TODO(glider): enable the default options on other systems. ++ 'conditions': [ ++ ['use_sanitizer_options==1 and ((OS=="linux" and (chromeos==0 or target_arch!="ia32")) or OS=="mac")', { ++ 'dependencies': [ ++ '<(DEPTH)/build/sanitizers/sanitizers.gyp:sanitizer_options', ++ ], ++ }], ++ ], ++ }, ++ }], ++ # TODO(jochen): Enable this on chromeos on arm. http://crbug.com/356580 ++ ['os_posix==1 and disable_fatal_linker_warnings==0 and use_evdev_gestures==0 and (chromeos==0 or target_arch!="arm")', { ++ 'target_defaults': { ++ 'ldflags': [ ++ '-Wl,--fatal-warnings', ++ ], ++ }, ++ }], ++ # -Wl,-z,-defs doesn't work with the sanitiziers, http://crbug.com/452065 ++ ['(OS=="linux" or OS=="android") and asan==0 and msan==0 and tsan==0 and ubsan==0 and ubsan_security==0 and ubsan_vptr==0 and cfi_diag==0', { ++ 'target_defaults': { ++ 'ldflags': [ ++ '-Wl,-z,defs', ++ ], ++ }, ++ }], ++ ['os_posix==1 and chromeos==0', { ++ # Chrome OS enables -fstack-protector-strong via its build wrapper, ++ # and we want to avoid overriding this, so stack-protector is only ++ # enabled when not building on Chrome OS. ++ # TODO(phajdan.jr): Use -fstack-protector-strong when our gcc ++ # supports it. See also https://crbug.com/533294 ++ 'target_defaults': { ++ 'cflags': [ ++ '-fstack-protector', ++ '--param=ssp-buffer-size=4', ++ ], ++ }, ++ }], ++ ['os_posix==1 and OS=="linux"', { ++ 'defines': [ ++ '_LARGEFILE_SOURCE', ++ '_LARGEFILE64_SOURCE', ++ '_FILE_OFFSET_BITS=64', ++ ], ++ }], ++ ['os_posix==1 and OS!="mac" and OS!="ios"', { ++ 'target_defaults': { ++ # Enable -Werror by default, but put it in a variable so it can ++ # be disabled in ~/.gyp/include.gypi on the valgrind builders. ++ 'variables': { ++ 'werror%': '-Werror', ++ 'libraries_for_target%': '', ++ 'conditions' : [ ++ # Enable -Wextra for chromium_code when we control the compiler. ++ ['clang==1', { 'wextra': '-Wextra' }, { 'wextra': '-Wno-extra' }], ++ ], ++ }, ++ 'defines': [ ++ '_FILE_OFFSET_BITS=64', ++ ], ++ 'cflags': [ ++ '<(werror)', # See note above about the werror variable. ++ '-pthread', ++ '-fno-strict-aliasing', # See http://crbug.com/32204 ++ '-Wall', ++ '<(wextra)', ++ # Don't warn about unused function params. We use those everywhere. ++ '-Wno-unused-parameter', ++ # Don't warn about the "struct foo f = {0};" initialization pattern. ++ '-Wno-missing-field-initializers', ++ # Don't export any symbols (for example, to plugins we dlopen()). ++ # Note: this is *required* to make some plugins work. ++ '-fvisibility=hidden', ++ '-pipe', ++ ], ++ 'cflags_cc': [ ++ '-fno-exceptions', ++ '-fno-rtti', ++ # If this is removed then remove the corresponding /Zc:threadSafeInit- ++ # for Windows. ++ '-fno-threadsafe-statics', ++ # Make inline functions have hidden visiblity by default. ++ # Surprisingly, not covered by -fvisibility=hidden. ++ '-fvisibility-inlines-hidden', ++ ], ++ 'ldflags': [ ++ '-pthread', '-Wl,-z,noexecstack', ++ ], ++ 'libraries' : [ ++ '<(libraries_for_target)', ++ ], ++ 'configurations': { ++ 'Debug_Base': { ++ 'variables': { ++ 'debug_optimize%': '0', ++ }, ++ 'defines': [ ++ '_DEBUG', ++ ], ++ 'cflags': [ ++ '-O>(debug_optimize)', ++ '-g', ++ ], ++ 'conditions' : [ ++ ['OS=="android" and target_arch!="mipsel" and target_arch!="mips64el"', { ++ # TODO(jdduke) Re-enable on mips after resolving linking ++ # issues with libc++ (crbug.com/456380). ++ 'ldflags': [ ++ # Warn in case of text relocations. ++ '-Wl,--warn-shared-textrel', ++ ], ++ }], ++ ['OS=="android" and android_full_debug==0', { ++ # Some configurations are copied from Release_Base to reduce ++ # the binary size. ++ 'variables': { ++ 'debug_optimize%': 's', ++ }, ++ 'cflags': [ ++ '-fdata-sections', ++ '-ffunction-sections', ++ ], ++ 'ldflags': [ ++ '-Wl,-O1', ++ '-Wl,--as-needed', ++ ], ++ }], ++ ['OS=="android" and android_full_debug==0 and target_arch!="arm64"', { ++ # We don't omit frame pointers on arm64 since they are required ++ # to correctly unwind stackframes which contain system library ++ # function frames (crbug.com/391706). ++ 'cflags': [ ++ '-fomit-frame-pointer', ++ ], ++ }], ++ ['OS=="linux" and target_arch=="ia32"', { ++ 'ldflags': [ ++ '-Wl,--no-as-needed', ++ ], ++ }], ++ ['debug_unwind_tables==1', { ++ 'cflags': ['-funwind-tables'], ++ }, { ++ 'cflags': ['-fno-unwind-tables', '-fno-asynchronous-unwind-tables'], ++ 'defines': ['NO_UNWIND_TABLES'], ++ }], ++ ['linux_use_debug_fission==1 and linux_use_gold_flags==1 and binutils_version>=223', { ++ 'cflags': ['-gsplit-dwarf'], ++ }], ++ ], ++ }, ++ 'Release_Base': { ++ 'variables': { ++ 'release_optimize%': '2', ++ # Binaries become big and gold is unable to perform GC ++ # and remove unused sections for some of test targets ++ # on 32 bit platform. ++ # (This is currently observed only in chromeos valgrind bots) ++ # The following flag is to disable --gc-sections linker ++ # option for these bots. ++ 'no_gc_sections%': 0, ++ # TODO(bradnelson): reexamine how this is done if we change the ++ # expansion of configurations ++ 'release_valgrind_build%': 0, ++ }, ++ 'cflags': [ ++ '-O<(release_optimize)', ++ # Don't emit the GCC version ident directives, they just end up ++ # in the .comment section taking up binary size. ++ '-fno-ident', ++ # Put data and code in their own sections, so that unused symbols ++ # can be removed at link time with --gc-sections. ++ '-fdata-sections', ++ '-ffunction-sections', ++ ], ++ 'ldflags': [ ++ # Specifically tell the linker to perform optimizations. ++ # See http://lwn.net/Articles/192624/ . ++ '-Wl,-O1', ++ '-Wl,--as-needed', ++ ], ++ 'conditions' : [ ++ ['no_gc_sections==0', { ++ 'ldflags': [ ++ '-Wl,--gc-sections', ++ ], ++ }], ++ ['OS=="android" and target_arch!="arm64"', { ++ # We don't omit frame pointers on arm64 since they are required ++ # to correctly unwind stackframes which contain system library ++ # function frames (crbug.com/391706). ++ 'cflags': [ ++ '-fomit-frame-pointer', ++ ] ++ }], ++ ['OS=="android" and target_arch!="mipsel" and target_arch!="mips64el"', { ++ # TODO(jdduke) Re-enable on mips after resolving linking ++ # issues with libc++ (crbug.com/456380). ++ 'ldflags': [ ++ # Warn in case of text relocations. ++ '-Wl,--warn-shared-textrel', ++ ], ++ }], ++ ['OS=="android"', { ++ 'variables': { ++ 'release_optimize%': 's', ++ }, ++ }, { ++ 'ldflags': [ ++ # TODO(pcc): Fix linker bug which requires us to link pthread ++ # unconditionally here (crbug.com/623236). ++ '-Wl,--no-as-needed', ++ '-lpthread', ++ '-Wl,--as-needed', ++ ], ++ }], ++ ['profiling==1', { ++ 'cflags': [ ++ '-fno-omit-frame-pointer', ++ '-g', ++ ], ++ 'conditions' : [ ++ ['profiling_full_stack_frames==1', { ++ 'cflags': [ ++ '-fno-inline', ++ '-fno-optimize-sibling-calls', ++ ], ++ }], ++ ], ++ }], ++ ['release_unwind_tables==1', { ++ 'cflags': ['-funwind-tables'], ++ }, { ++ 'cflags': ['-fno-unwind-tables', '-fno-asynchronous-unwind-tables'], ++ 'defines': ['NO_UNWIND_TABLES'], ++ }], ++ ], ++ }, ++ }, ++ 'conditions': [ ++ ['target_arch=="ia32"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'asflags': [ ++ # Needed so that libs with .s files (e.g. libicudata.a) ++ # are compatible with the general 32-bit-ness. ++ '-32', ++ ], ++ # All floating-point computations on x87 happens in 80-bit ++ # precision. Because the C and C++ language standards allow ++ # the compiler to keep the floating-point values in higher ++ # precision than what's specified in the source and doing so ++ # is more efficient than constantly rounding up to 64-bit or ++ # 32-bit precision as specified in the source, the compiler, ++ # especially in the optimized mode, tries very hard to keep ++ # values in x87 floating-point stack (in 80-bit precision) ++ # as long as possible. This has important side effects, that ++ # the real value used in computation may change depending on ++ # how the compiler did the optimization - that is, the value ++ # kept in 80-bit is different than the value rounded down to ++ # 64-bit or 32-bit. There are possible compiler options to ++ # make this behavior consistent (e.g. -ffloat-store would keep ++ # all floating-values in the memory, thus force them to be ++ # rounded to its original precision) but they have significant ++ # runtime performance penalty. ++ # ++ # -mfpmath=sse -msse2 makes the compiler use SSE instructions ++ # which keep floating-point values in SSE registers in its ++ # native precision (32-bit for single precision, and 64-bit ++ # for double precision values). This means the floating-point ++ # value used during computation does not change depending on ++ # how the compiler optimized the code, since the value is ++ # always kept in its specified precision. ++ # ++ # Refer to http://crbug.com/348761 for rationale behind SSE2 ++ # being a minimum requirement for 32-bit Linux builds and ++ # http://crbug.com/313032 for an example where this has "bit" ++ # us in the past. ++ 'cflags': [ ++ '-msse2', ++ '-mfpmath=sse', ++ '-mmmx', # Allows mmintrin.h for MMX intrinsics. ++ '-m32', ++ ], ++ 'ldflags': [ ++ '-m32', ++ ], ++ 'conditions': [ ++ # Use gold linker for Android ia32 target. ++ ['OS=="android"', { ++ # Use gold linker for Android ia32 target. ++ 'ldflags': [ ++ '-fuse-ld=gold', ++ ], ++ # Use -mstackrealign due to a bug on ia32 Jelly Bean. ++ # See crbug.com/521527 ++ 'cflags': [ ++ '-mstackrealign', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ['target_arch=="x64"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'conditions': [ ++ # Use gold linker for Android x64 target. ++ ['OS=="android"', { ++ 'ldflags': [ ++ '-fuse-ld=gold', ++ ], ++ }], ++ ], ++ 'cflags': [ ++ '-m64', ++ '-march=x86-64', ++ ], ++ 'ldflags': [ ++ '-m64', ++ ], ++ }], ++ ], ++ }], ++ ['target_arch=="arm"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'conditions': [ ++ ['clang==0', { ++ 'cflags': [ ++ # Don't warn about "maybe" uninitialized. Clang doesn't ++ # include this in -Wall but gcc does, and it gives false ++ # positives. ++ '-Wno-maybe-uninitialized', ++ ], ++ 'cflags_cc': [ ++ # The codesourcery arm-2009q3 toolchain warns at that the ABI ++ # has changed whenever it encounters a varargs function. This ++ # silences those warnings, as they are not helpful and ++ # clutter legitimate warnings. ++ '-Wno-abi', ++ ], ++ }], ++ ['clang==1 and arm_arch!="" and OS!="android"', { ++ 'cflags': [ ++ '-target arm-linux-gnueabihf', ++ ], ++ 'ldflags': [ ++ '-target arm-linux-gnueabihf', ++ ], ++ }], ++ ['arm_arch!=""', { ++ 'cflags': [ ++ '-march=<(arm_arch)', ++ ], ++ 'conditions': [ ++ ['use_lto==1 or use_lto_o2==1', { ++ 'ldflags': [ ++ '-march=<(arm_arch)', ++ ], ++ }], ++ ], ++ }], ++ ['arm_tune!=""', { ++ 'cflags': [ ++ '-mtune=<(arm_tune)', ++ ], ++ 'conditions': [ ++ ['use_lto==1 or use_lto_o2==1', { ++ 'ldflags': [ ++ '-mtune=<(arm_tune)', ++ ], ++ }], ++ ], ++ }], ++ ['arm_fpu!=""', { ++ 'cflags': [ ++ '-mfpu=<(arm_fpu)', ++ ], ++ 'conditions': [ ++ ['use_lto==1 or use_lto_o2==1', { ++ 'ldflags': [ ++ '-mfpu=<(arm_fpu)', ++ ], ++ }], ++ ], ++ }], ++ ['arm_float_abi!=""', { ++ 'cflags': [ ++ '-mfloat-abi=<(arm_float_abi)', ++ ], ++ 'conditions': [ ++ ['use_lto==1 or use_lto_o2==1', { ++ 'ldflags': [ ++ '-mfloat-abi=<(arm_float_abi)', ++ ], ++ }], ++ ], ++ }], ++ ['arm_thumb==1', { ++ 'cflags': [ ++ '-mthumb', ++ ], ++ 'conditions': [ ++ ['use_lto==1 or use_lto_o2==1', { ++ 'ldflags': [ ++ '-mthumb', ++ ], ++ }], ++ ], ++ }], ++ ['OS=="android"', { ++ # Most of the following flags are derived from what Android ++ # uses by default when building for arm, reference for which ++ # can be found in the following file in the Android NDK: ++ # toolchains/arm-linux-androideabi-4.9/setup.mk ++ 'cflags': [ ++ # The tree-sra optimization (scalar replacement for ++ # aggregates enabling subsequent optimizations) leads to ++ # invalid code generation when using the Android NDK's ++ # compiler (r5-r7). This can be verified using ++ # webkit_unit_tests' WTF.Checked_int8_t test. ++ '-fno-tree-sra', ++ # The following option is disabled to improve binary ++ # size and performance in gcc 4.9. ++ '-fno-caller-saves', ++ '-Wno-psabi', ++ ], ++ # Android now supports .relro sections properly. ++ # NOTE: While these flags enable the generation of .relro ++ # sections, the generated libraries can still be loaded on ++ # older Android platform versions. ++ 'ldflags': [ ++ '-Wl,-z,relro', ++ '-Wl,-z,now', ++ '-fuse-ld=gold', ++ ], ++ 'conditions': [ ++ ['arm_thumb==1', { ++ 'cflags': [ '-mthumb-interwork' ], ++ }], ++ ['profiling==1', { ++ 'cflags': [ ++ # Thumb code with frame pointer makes chrome crash ++ # early. ++ '-marm', ++ '-mapcs-frame', # Required by -fno-omit-frame-pointer. ++ # The perf report sometimes incorrectly attributes ++ # code from tail calls. ++ '-fno-optimize-sibling-calls', ++ ], ++ 'cflags!': [ ++ '-fomit-frame-pointer', ++ ], ++ }], ++ ['clang==1', { ++ 'cflags!': [ ++ # Clang does not support the following options. ++ '-mapcs-frame', ++ '-mthumb-interwork', ++ '-finline-limit=64', ++ '-fno-tree-sra', ++ '-fno-caller-saves', ++ '-Wno-psabi', ++ ], ++ }], ++ ['clang==1 and linux_use_bundled_gold==0', { ++ 'ldflags': [ ++ # Let clang find the ld.gold in the NDK. ++ '--gcc-toolchain=<(android_toolchain)/..', ++ ], ++ }], ++ ['asan==1', { ++ 'cflags': [ ++ '-marm', # Required for frame pointer based stack traces. ++ ], ++ }], ++ ], ++ }], ++ ['chromecast==1', { ++ 'cflags': [ ++ # We set arm_arch to "" so that -march compiler option ++ # is not set. Otherwise a gcc bug that would complain ++ # about it conflicting with '-mcpu=cortex-a9'. The flag ++ # '-march=armv7-a' is actually redundant anyway because ++ # it is enabled by default when we built the toolchain. ++ # And using '-mcpu=cortex-a9' should be sufficient. ++ '-mcpu=cortex-a9', ++ '-funwind-tables', ++ # Breakpad requires symbols with debugging information ++ '-g', ++ ], ++ 'ldflags': [ ++ # We want to statically link libstdc++/libgcc. ++ '-static-libstdc++', ++ '-static-libgcc', ++ # Don't allow visible symbols from libraries that contain ++ # assembly code with symbols that aren't hidden properly. ++ # http://b/26390825 ++ '-Wl,--exclude-libs=libffmpeg.a', ++ ], ++ 'cflags!': [ ++ # Some components in Chromium (e.g. v8, skia, ffmpeg) ++ # define their own cflags for arm builds that could ++ # conflict with the flags we set here (e.g. ++ # '-mcpu=cortex-a9'). Remove these flags explicitly. ++ '-march=armv7-a', ++ '-mtune=cortex-a8', ++ ], ++ 'target_conditions': [ ++ [ '_type=="executable" and OS!="android"', { ++ # Statically link whole libstdc++ and libgcc in ++ # executables to ensure only one copy at runtime. ++ 'ldflags': [ ++ # Note executables also get -static-stdlibc++/libgcc. ++ # Despite including libstdc++/libgcc archives, we ++ # still need to specify static linking for them in ++ # order to prevent the executable from having a ++ # dynamic dependency on them. ++ # Export stdlibc++ and libgcc symbols to force shlibs ++ # to refer to these symbols from the executable. ++ '-Wl,--export-dynamic', ++ '-lm', # stdlibc++ requires math.h ++ # In case we redefined stdlibc++ symbols ++ # (e.g. tc_malloc) ++ '-Wl,--allow-multiple-definition', ++ '-Wl,--whole-archive', ++ '-l:libstdc++.a', ++ '-l:libgcc.a', ++ '-Wl,--no-whole-archive', ++ ], ++ }] ++ ], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ['target_arch=="arm64"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags!': [ ++ '-fstack-protector', # stack protector is always enabled on arm64. ++ ], ++ }], ++ ['clang==1 and arm_arch!="" and OS!="android"', { ++ 'cflags': [ ++ '-target aarch64-linux-gnu', ++ ], ++ 'ldflags': [ ++ '-target aarch64-linux-gnu', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ['target_arch=="mipsel"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'conditions': [ ++ ['mips_arch_variant=="r6"', { ++ 'conditions': [ ++ ['clang==1', { ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ '-target mipsel-linux-android', '-march=mipsel', '-mcpu=mips32r6', ], ++ 'ldflags': [ '-target mipsel-linux-android', ], ++ }], ++ ], ++ }, { # clang==0 ++ 'cflags': ['-mips32r6', '-Wa,-mips32r6', ], ++ }], ++ ['clang==0 and OS=="android"', { ++ 'ldflags': ['-mips32r6', '-Wl,-melf32ltsmip',], ++ }], ++ ['mips_msa==1', { ++ 'cflags': ['-mmsa', '-mfp64', '-msched-weight', '-mload-store-pairs'], ++ }], ++ ], ++ 'cflags': [ '-mfp64', '-mno-odd-spreg' ], ++ 'ldflags': [ '-mfp64', '-mno-odd-spreg' ], ++ }], ++ ['mips_arch_variant=="r2"', { ++ 'conditions': [ ++ ['mips_float_abi=="hard" and mips_fpu_mode!=""', { ++ 'cflags': ['-m<(mips_fpu_mode)'], ++ }], ++ ['clang==1', { ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ '-target mipsel-linux-android', '-march=mipsel', '-mcpu=mips32r2'], ++ 'ldflags': [ '-target mipsel-linux-android', ], ++ }, { ++ 'cflags': [ '-target mipsel-linux-gnu', '-march=mipsel', '-mcpu=mips32r2'], ++ 'ldflags': [ '-target mipsel-linux-gnu', ], ++ }], ++ ], ++ }, { # clang==0 ++ 'cflags': ['-mips32r2', '-Wa,-mips32r2', ], ++ }], ++ ], ++ }], ++ ['mips_arch_variant=="r1"', { ++ 'conditions': [ ++ ['clang==1', { ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ '-target mipsel-linux-android', '-march=mipsel', '-mcpu=mips32'], ++ 'ldflags': [ '-target mipsel-linux-android', ], ++ }, { ++ 'cflags': [ '-target mipsel-linux-gnu', '-march=mipsel', '-mcpu=mips32'], ++ 'ldflags': [ '-target mipsel-linux-gnu', ], ++ }], ++ ], ++ }, { # clang==0 ++ 'cflags': ['-mips32', '-Wa,-mips32', ], ++ }], ++ ], ++ }], ++ ['clang==1', { ++ 'cflags!': [ ++ # Clang does not support the following options. ++ '-finline-limit=64', ++ ], ++ # TODO(gordanac) Enable integrated-as. ++ 'cflags': [ '-fno-integrated-as' ], ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ ++ # Else /usr/bin/as gets picked up. ++ '-B<(android_toolchain)', ++ ], ++ }], ++ ], ++ }], ++ ['clang==1 and OS=="android"', { ++ 'ldflags': [ ++ # Let clang find the ld in the NDK. ++ '--gcc-toolchain=<(android_toolchain)/..', ++ ], ++ }], ++ ['mips_dsp_rev==1', { ++ 'cflags': ['-mdsp'], ++ }], ++ ['mips_dsp_rev==2', { ++ 'cflags': ['-mdspr2'], ++ }], ++ ], ++ 'cflags': [ ++ '-m<(mips_float_abi)-float' ++ ], ++ 'ldflags': [ ++ '-Wl,--no-keep-memory' ++ ], ++ 'cflags_cc': [ ++ '-Wno-uninitialized', ++ ], ++ }], ++ ['_toolset=="target" and _type=="executable"', { ++ 'conditions': [ ++ ['OS=="linux"', { ++ 'ldflags': ['-pie'], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ['target_arch=="mips64el"', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'conditions': [ ++ ['mips_arch_variant=="r6"', { ++ 'conditions': [ ++ ['clang==1', { ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ '-target mips64el-linux-android', '-march=mips64el', '-mcpu=mips64r6', ], ++ 'ldflags': [ '-target mips64el-linux-android', ], ++ }], ++ ], ++ }, { # clang==0 ++ 'cflags': ['-mips64r6', '-Wa,-mips64r6'], ++ 'ldflags': ['-mips64r6'], ++ }], ++ ['mips_msa==1', { ++ 'cflags': ['-mmsa', '-mfp64', '-msched-weight', '-mload-store-pairs'], ++ }], ++ ], ++ }], ++ ['mips_arch_variant=="r2"', { ++ 'cflags': ['-mips64r2', '-Wa,-mips64r2'], ++ 'ldflags': ['-mips64r2'], ++ }], ++ ['clang==1', { ++ 'cflags!': [ ++ # Clang does not support the following options. ++ '-finline-limit=64', ++ ], ++ # TODO(gordanac) Enable integrated-as. ++ 'cflags': [ '-fno-integrated-as' ], ++ 'conditions': [ ++ ['OS=="android"', { ++ 'cflags': [ ++ # Else /usr/bin/as gets picked up. ++ '-B<(android_toolchain)', ++ ], ++ }], ++ ], ++ }], ++ ['clang==1 and OS=="android"', { ++ 'ldflags': [ ++ # Let clang find the ld in the NDK. ++ '--gcc-toolchain=<(android_toolchain)/..', ++ ], ++ }], ++ ], ++ 'cflags_cc': [ ++ '-Wno-uninitialized', ++ ], ++ }], ++ ], ++ }], ++ ['linux_fpic==1', { ++ 'cflags': [ ++ '-fPIC', ++ ], ++ 'ldflags': [ ++ '-fPIC', ++ ], ++ }], ++ ['sysroot!=""', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'cflags': [ ++ '--sysroot=<(sysroot)', ++ ], ++ 'ldflags': [ ++ '--sysroot=<(sysroot)', ++ '=223', { ++ # Newer binutils don't set DT_RPATH unless you disable "new" dtags ++ # and the new DT_RUNPATH doesn't work without --no-as-needed flag. ++ # FIXME(mithro): Figure out the --as-needed/--no-as-needed flags ++ # inside this file to allow usage of --no-as-needed and removal of ++ # this flag. ++ 'ldflags': [ ++ '-Wl,--disable-new-dtags', ++ ], ++ }], ++ ['clang==0', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'cflags_cc': [ ++ '-std=gnu++11', ++ # See comment for -Wno-c++11-narrowing. ++ '-Wno-narrowing', ++ ], ++ }], ++ ], ++ }], ++ ['clang==0 and host_clang==0', { ++ 'target_conditions': [ ++ ['_toolset=="host"', { ++ 'cflags_cc': [ ++ '-std=gnu++11', ++ # See comment for -Wno-c++11-narrowing. ++ '-Wno-narrowing', ++ ], ++ }], ++ ], ++ }], ++ ['clang==0 and chromeos==1', { ++ 'target_conditions': [ ++ ['_toolset=="target"', { ++ 'cflags_cc': [ ++ # TODO(thakis): Remove, http://crbug.com/263960 ++ '-Wno-literal-suffix', ++ ], ++ }], ++ ], ++ }], ++ ['clang==0 and host_clang==0 and chromeos==1', { ++ 'target_conditions': [ ++ ['_toolset=="host"', { ++ 'cflags_cc': [ ++ # TODO(thakis): Remove, http://crbug.com/263960 ++ '-Wno-literal-suffix', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }, ++ }], ++ # *BSD-specific options; note that most *BSD options are set above, ++ # with Linux. ++ ['OS=="openbsd" or OS=="freebsd"', { ++ 'target_defaults': { ++ 'ldflags': [ ++ '-Wl,--no-keep-memory', ++ ], ++ }, ++ }], ++ # Android-specific options; note that most are set above with Linux. ++ ['OS=="android"', { ++ 'variables': { ++ # Placing this variable here prevents from forking libvpx, used ++ # by remoting. Remoting is off, so it needn't built, ++ # so forking it's deps seems like overkill. ++ # But this variable need defined to properly run gyp. ++ # A proper solution is to have an OS==android conditional ++ # in third_party/libvpx/libvpx.gyp to define it. ++ 'libvpx_path': 'lib/linux/arm', ++ }, ++ 'target_defaults': { ++ 'variables': { ++ 'release_extra_cflags%': '', ++ 'conditions': [ ++ # If we're using the components build, append "cr" to all shared ++ # libraries to avoid naming collisions with android system library ++ # versions with the same name (e.g. skia, icu). ++ ['component=="shared_library"', { ++ 'android_product_extension': 'cr.so', ++ }, { ++ 'android_product_extension': 'so', ++ } ], ++ ], ++ }, ++ 'target_conditions': [ ++ ['_type=="shared_library"', { ++ 'product_extension': '<(android_product_extension)', ++ }], ++ # Settings for building device targets using Android's toolchain. ++ # These are based on the setup.mk file from the Android NDK. ++ # ++ # The NDK Android executable link step looks as follows: ++ # $LDFLAGS ++ # $(TARGET_CRTBEGIN_DYNAMIC_O) <-- crtbegin.o ++ # $(PRIVATE_OBJECTS) <-- The .o that we built ++ # $(PRIVATE_STATIC_LIBRARIES) <-- The .a that we built ++ # $(TARGET_LIBGCC) <-- libgcc.a ++ # $(PRIVATE_SHARED_LIBRARIES) <-- The .so that we built ++ # $(PRIVATE_LDLIBS) <-- System .so ++ # $(TARGET_CRTEND_O) <-- crtend.o ++ # ++ # For now the above are approximated for executables by adding ++ # crtbegin.o to the end of the ldflags and 'crtend.o' to the end ++ # of 'libraries'. ++ # ++ # The NDK Android shared library link step looks as follows: ++ # $LDFLAGS ++ # $(PRIVATE_OBJECTS) <-- The .o that we built ++ # -l,--whole-archive ++ # $(PRIVATE_WHOLE_STATIC_LIBRARIES) ++ # -l,--no-whole-archive ++ # $(PRIVATE_STATIC_LIBRARIES) <-- The .a that we built ++ # $(TARGET_LIBGCC) <-- libgcc.a ++ # $(PRIVATE_SHARED_LIBRARIES) <-- The .so that we built ++ # $(PRIVATE_LDLIBS) <-- System .so ++ # ++ # For now, assume that whole static libraries are not needed. ++ # ++ # For both executables and shared libraries, add the proper ++ # libgcc.a to the start of libraries which puts it in the ++ # proper spot after .o and .a files get linked in. ++ # ++ # TODO: The proper thing to do longer-tem would be proper gyp ++ # support for a custom link command line. ++ ['_toolset=="target"', { ++ 'cflags!': [ ++ '-pthread', # Not supported by Android toolchain. ++ ], ++ 'cflags': [ ++ '-ffunction-sections', ++ '-funwind-tables', ++ '-g', ++ '-fstack-protector', ++ '-fno-short-enums', ++ '-finline-limit=64', ++ '<@(release_extra_cflags)', ++ '--sysroot=<(android_ndk_sysroot)', ++ ], ++ 'cflags_cc': [ ++ # NOTE: The libc++ header include paths below are specified in ++ # cflags rather than include_dirs because they need to come ++ # after include_dirs. ++ # The include ordering here is important; change with caution. ++ '-isystem<(android_libcpp_include)', ++ '-isystem<(android_ndk_root)/sources/cxx-stl/llvm-libc++abi/libcxxabi/include', ++ '-isystem<(android_ndk_root)/sources/android/support/include', ++ ], ++ 'defines': [ ++ 'ANDROID', ++ '__GNU_SOURCE=1', # Necessary for clone() ++ # The NDK has these things, but doesn't define the constants ++ # to say that it does. Define them here instead. ++ 'HAVE_SYS_UIO_H', ++ 'ANDROID_NDK_VERSION=<(android_ndk_version)', ++ ], ++ 'ldflags!': [ ++ '-pthread', # Not supported by Android toolchain. ++ ], ++ 'ldflags': [ ++ '-Wl,--build-id=sha1', ++ '-Wl,--no-undefined', ++ '--sysroot=<(android_ndk_sysroot)', ++ '-nostdlib', ++ '-L<(android_libcpp_libs_dir)', ++ # Don't allow visible symbols from libgcc or libc++ to be ++ # re-exported. ++ '-Wl,--exclude-libs=libgcc.a', ++ '-Wl,--exclude-libs=libc++_static.a', ++ # Don't allow visible symbols from libraries that contain ++ # assembly code with symbols that aren't hidden properly. ++ # http://crbug.com/448386 ++ '-Wl,--exclude-libs=libcommon_audio.a', ++ '-Wl,--exclude-libs=libcommon_audio_neon.a', ++ '-Wl,--exclude-libs=libcommon_audio_sse2.a', ++ '-Wl,--exclude-libs=libiSACFix.a', ++ '-Wl,--exclude-libs=libisac_neon.a', ++ '-Wl,--exclude-libs=libopus.a', ++ '-Wl,--exclude-libs=libvpx.a', ++ ], ++ 'libraries': [ ++ '-l<(android_libcpp_library)', ++ '-latomic', ++ # Manually link the libgcc.a that the cross compiler uses. ++ '(_target_name).map', ++ ], ++ }, ++ }], ++ ], ++ }], ++ ['_mac_bundle', { ++ 'xcode_settings': {'OTHER_LDFLAGS': ['-Wl,-ObjC']}, ++ 'target_conditions': [ ++ ['_type=="executable"', { ++ 'conditions': [ ++ ['asan==1', { ++ 'postbuilds': [ ++ { ++ 'variables': { ++ # Define copy_asan_dylib_path in a variable ending in ++ # _path so that gyp understands it's a path and ++ # performs proper relativization during dict merging. ++ 'copy_asan_dylib_path': ++ 'mac/copy_asan_runtime_dylib.sh', ++ }, ++ 'postbuild_name': 'Copy ASan runtime dylib', ++ 'action': [ ++ '<(copy_asan_dylib_path)', ++ ], ++ }, ++ ], ++ }], ++ ], ++ }], ++ ], ++ }], ++ ], # target_conditions ++ }, # target_defaults ++ }], # OS=="mac" or OS=="ios" ++ ['OS=="mac"', { ++ 'target_defaults': { ++ 'defines': [ ++ # Prevent Mac OS X AssertMacros.h from defining macros that collide ++ # with common names, like 'check', 'require', and 'verify'. ++ # (Included by system header. Also exists on iOS but not included.) ++ # http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/AssertMacros.h ++ '__ASSERT_MACROS_DEFINE_VERSIONS_WITHOUT_UNDERSCORE=0', ++ ], ++ 'variables': { ++ # These should end with %, but there seems to be a bug with % in ++ # variables that are intended to be set to different values in ++ # different targets, like these. ++ # Strip debugging symbols from the target. ++ 'mac_strip': '<(mac_strip_release)', ++ 'conditions': [ ++ ['asan==1', { ++ 'conditions': [ ++ ['mac_want_real_dsym=="default"', { ++ 'mac_real_dsym': 1, ++ }, { ++ 'mac_real_dsym': '<(mac_want_real_dsym)' ++ }], ++ ], ++ }, { ++ 'conditions': [ ++ ['mac_want_real_dsym=="default"', { ++ 'mac_real_dsym': 0, # Fake .dSYMs are fine in most cases. ++ }, { ++ 'mac_real_dsym': '<(mac_want_real_dsym)' ++ }], ++ ], ++ }], ++ ], ++ }, ++ 'configurations': { ++ 'Release_Base': { ++ 'conditions': [ ++ ['branding=="Chrome" and buildtype=="Official"', { ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ ++ # The Google Chrome Framework dSYM generated by dsymutil has ++ # grown larger than 4GB, which dsymutil can't handle. Reduce ++ # the amount of debug symbols. ++ '-fno-standalone-debug', # See http://crbug.com/479841 ++ ] ++ }, ++ }], ++ ], ++ }, # configuration "Release" ++ }, # configurations ++ 'xcode_settings': { ++ # Tell the compiler to use libc++'s headers and the linker to link ++ # against libc++. The latter part normally requires OS X 10.7, ++ # but we still support running on 10.6. How does this work? Two ++ # parts: ++ # 1. Chromium's clang doesn't error on -mmacosx-version-min=10.6 ++ # combined with -stdlib=libc++ (it normally silently produced a ++ # binary that doesn't run on 10.6) ++ # 2. Further down, library_dirs is set to ++ # third_party/libc++-static, which contains a static ++ # libc++.a library. The linker then links against that instead ++ # of against /usr/lib/libc++.dylib when it sees the -lc++ flag ++ # added by the driver. ++ # ++ # In component builds, just link to the system libc++. This has ++ # the effect of making everything depend on libc++, which means ++ # component-build binaries won't run on 10.6 (no libc++ there), ++ # but for a developer-only configuration that's ok. (We don't ++ # want to raise the deployment target yet so that official and ++ # dev builds have the same deployment target. This affects ++ # things like which functions are considered deprecated.) ++ 'CLANG_CXX_LIBRARY': 'libc++', # -stdlib=libc++ ++ 'GCC_DYNAMIC_NO_PIC': 'NO', # No -mdynamic-no-pic ++ # (Equivalent to -fPIC) ++ # MACOSX_DEPLOYMENT_TARGET maps to -mmacosx-version-min ++ 'MACOSX_DEPLOYMENT_TARGET': '<(mac_deployment_target)', ++ # Keep pch files below xcodebuild/. ++ 'SHARED_PRECOMPS_DIR': '$(CONFIGURATION_BUILD_DIR)/SharedPrecompiledHeaders', ++ 'OTHER_CFLAGS': [ ++ # Someday this can be replaced by an 'GCC_STRICT_ALIASING': 'NO' ++ # xcode_setting, but not until all downstream projects' mac bots are ++ # using xcode >= 4.6, because that's when the default value of the ++ # flag in the compiler switched. Pre-4.6, the value 'NO' for that ++ # setting is a no-op as far as xcode is concerned, but the compiler ++ # behaves differently based on whether -fno-strict-aliasing is ++ # specified or not. ++ '-fno-strict-aliasing', # See http://crbug.com/32204. ++ ], ++ }, ++ 'target_conditions': [ ++ ['>(nacl_untrusted_build)==0 and component=="static_library"', { ++ # See the comment for CLANG_CXX_LIBRARY above for what this does. ++ # The NaCl toolchains have their own toolchain and don't need this. ++ # ASan requires 10.7+ and clang implicitly adds -lc++abi in ASan ++ # mode. Our libc++.a contains both libc++ and libc++abi in one ++ # library, so it doesn't work in that mode. ++ 'conditions': [ ++ ['asan==0', { ++ 'library_dirs': [ '<(DEPTH)/third_party/libc++-static' ], ++ }], ++ ], ++ }], ++ ['_type=="executable"', { ++ # Turn on position-independence (ASLR) for executables. When ++ # PIE is on for the Chrome executables, the framework will ++ # also be subject to ASLR. ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-Wl,-pie', # Position-independent executable (MH_PIE) ++ ], ++ }, ++ }], ++ ['(_type=="executable" or _type=="shared_library" or \ ++ _type=="loadable_module") and mac_strip!=0', { ++ 'target_conditions': [ ++ ['mac_real_dsym == 1', { ++ # To get a real .dSYM bundle produced by dsymutil, set the ++ # debug information format to dwarf-with-dsym. Since ++ # strip_from_xcode will not be used, set Xcode to do the ++ # stripping as well. ++ 'configurations': { ++ 'Release_Base': { ++ 'xcode_settings': { ++ 'DEBUG_INFORMATION_FORMAT': 'dwarf-with-dsym', ++ 'DEPLOYMENT_POSTPROCESSING': 'YES', ++ 'STRIP_INSTALLED_PRODUCT': 'YES', ++ 'conditions': [ ++ # Only strip non-ASan builds. ++ ['asan==0', { ++ 'target_conditions': [ ++ ['_type=="shared_library" or _type=="loadable_module"', { ++ # The Xcode default is to strip debugging symbols ++ # only (-S). Local symbols should be stripped as ++ # well, which will be handled by -x. Xcode will ++ # continue to insert -S when stripping even when ++ # additional flags are added with STRIPFLAGS. ++ 'STRIPFLAGS': '-x', ++ }], # _type=="shared_library" or _type=="loadable_module" ++ ], # target_conditions ++ }, { # asan != 0 ++ 'STRIPFLAGS': '-S', ++ }], ++ ], ++ }, # xcode_settings ++ }, # configuration "Release" ++ }, # configurations ++ }, { # mac_real_dsym != 1 ++ # To get a fast fake .dSYM bundle, use a post-build step to ++ # produce the .dSYM and strip the executable. strip_from_xcode ++ # only operates in the Release configuration. ++ 'postbuilds': [ ++ { ++ 'variables': { ++ # Define strip_from_xcode in a variable ending in _path ++ # so that gyp understands it's a path and performs proper ++ # relativization during dict merging. ++ 'strip_from_xcode_path': 'mac/strip_from_xcode', ++ }, ++ 'postbuild_name': 'Strip If Needed', ++ 'action': ['<(strip_from_xcode_path)'], ++ }, ++ ], # postbuilds ++ }], # mac_real_dsym ++ ], # target_conditions ++ }], # (_type=="executable" or _type=="shared_library" or ++ # _type=="loadable_module") and mac_strip!=0 ++ ], # target_conditions ++ }, # target_defaults ++ }], # OS=="mac" ++ ['OS=="ios"', { ++ 'target_defaults': { ++ 'xcode_settings' : { ++ 'ENABLE_BITCODE': 'NO', ++ 'CLANG_CXX_LIBRARY': 'libc++', # -stdlib=libc++ ++ 'conditions': [ ++ # Older Xcodes do not support -Wno-deprecated-register, so pass an ++ # additional flag to suppress the "unknown compiler option" error. ++ # Restrict this flag to builds that are either compiling with Xcode ++ # or compiling with Xcode's Clang. This will allow Ninja builds to ++ # continue failing on unknown compiler options. ++ # TODO(rohitrao): This flag is temporary and should be removed as ++ # soon as the iOS bots are updated to use Xcode 5.1. ++ ['clang_xcode==1', { ++ 'WARNING_CFLAGS': [ ++ '-Wno-unknown-warning-option', ++ # It's not possible to achieve nullability completeness before ++ # all builders are running Xcode 7. crbug.com/499809 ++ '-Wno-nullability-completeness', ++ ], ++ 'OTHER_CPLUSPLUSFLAGS': [ ++ '$(inherited)', ++ # TODO(ios): Remove once Xcode's libc++ has LLVM r256325 ++ '-isystem (win_exe_compatibility_manifest)"!=""', { ++ 'VCManifestTool': { ++ 'AdditionalManifestFiles': [ ++ '>(win_exe_compatibility_manifest)', ++ ], ++ }, ++ }], ++ ], ++ 'conditions': [ ++ # Building with Clang on Windows is a work in progress and very ++ # experimental. See crbug.com/82385. ++ # Keep this in sync with the similar blocks in build/config/compiler/BUILD.gn ++ ['clang==1', { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Don't warn about unused function parameters. ++ # (This is also used on other platforms.) ++ '-Wno-unused-parameter', ++ # Don't warn about the "struct foo f = {0};" initialization ++ # pattern. ++ '-Wno-missing-field-initializers', ++ # TODO(hans): Make this list shorter eventually, http://crbug.com/504657 ++ '-Wno-microsoft-enum-value', # http://crbug.com/505296 ++ '-Wno-unknown-pragmas', # http://crbug.com/505314 ++ '-Wno-microsoft-cast', # http://crbug.com/550065 ++ ], ++ }, ++ }], ++ ['clang==1 and clang_use_chrome_plugins==1', { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ '<@(clang_chrome_plugins_flags)', ++ ], ++ }, ++ }], ++ ['clang==1 and MSVS_VERSION == "2013"', { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ '-fmsc-version=1800', ++ ], ++ }, ++ }], ++ ['clang==1 and MSVS_VERSION == "2015"', { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ '-fmsc-version=1900', ++ ], ++ }, ++ }], ++ ['clang==1 and "=7) and target_arch!="mips64el" and build_with_mozilla==0', { ++ 'rtc_use_openmax_dl%': 1, ++ }, { ++ 'rtc_use_openmax_dl%': 0, ++ }], ++ ], # conditions ++ }, ++ 'target_defaults': { ++ 'conditions': [ ++ ['restrict_webrtc_logging==1', { ++ 'defines': ['WEBRTC_RESTRICT_LOGGING',], ++ }], ++ ['build_with_mozilla==1', { ++ 'defines': [ ++ # Changes settings for Mozilla build. ++ 'WEBRTC_MOZILLA_BUILD', ++ 'WEBRTC_VOE_EXTERNAL_REC_AND_PLAYOUT', ++ ], ++ }], ++ ['have_dbus_glib==1', { ++ 'defines': [ ++ 'HAVE_DBUS_GLIB', ++ ], ++ 'cflags': [ ++ '=7', { ++ 'defines': ['WEBRTC_ARCH_ARM_V7', ++ 'WEBRTC_BUILD_NEON_LIBS', ++ 'WEBRTC_HAS_NEON'], ++ 'cflags_mozilla': ['-mfloat-abi=softfp', ++ '-mfpu=neon'], ++ }], ++ ], ++ }], ++ ['os_bsd==1', { ++ 'defines': [ ++ 'WEBRTC_BSD', ++ ], ++ }], ++ ['OS=="openbsd"', { ++ 'defines' : [ ++ 'WEBRTC_AUDIO_SNDIO', ++ ], ++ }], ++ # Mozilla: if we support Mozilla on MIPS, we'll need to mod the cflags entries here ++ ['target_arch=="mipsel" and mips_arch_variant!="r6"', { ++ 'defines': [ ++ 'MIPS32_LE', ++ ], ++ 'conditions': [ ++ ['mips_float_abi=="hard"', { ++ 'defines': [ ++ 'MIPS_FPU_LE', ++ ], ++ }], ++ ['mips_arch_variant=="r2"', { ++ 'defines': [ ++ 'MIPS32_R2_LE', ++ ], ++ }], ++ ['mips_dsp_rev==1', { ++ 'defines': [ ++ 'MIPS_DSP_R1_LE', ++ ], ++ }], ++ ['mips_dsp_rev==2', { ++ 'defines': [ ++ 'MIPS_DSP_R1_LE', ++ 'MIPS_DSP_R2_LE', ++ ], ++ }], ++ ], ++ }], ++ ['coverage==1 and OS=="linux"', { ++ 'cflags': [ '-ftest-coverage', ++ '-fprofile-arcs' ], ++ 'ldflags': [ '--coverage' ], ++ 'link_settings': { 'libraries': [ '-lgcov' ] }, ++ }], ++ ['webrtc_sanitize_coverage!=""', { ++ 'cflags': [ '-fsanitize-coverage=<(webrtc_sanitize_coverage)' ], ++ 'ldflags': [ '-fsanitize-coverage=<(webrtc_sanitize_coverage)' ], ++ }], ++ ['webrtc_sanitize_coverage!="" and OS=="mac"', { ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ ++ '-fsanitize-coverage=func', ++ ], ++ }, ++ }], ++ ['os_posix==1', { ++ # For access to standard POSIXish features, use WEBRTC_POSIX instead of ++ # a more specific macro. ++ 'defines': [ ++ 'WEBRTC_POSIX', ++ ], ++ }], ++ ['OS=="ios"', { ++ 'defines': [ ++ 'WEBRTC_MAC', ++ 'WEBRTC_IOS', ++ ], ++ }], ++ ['OS=="ios" and ios_override_visibility==1', { ++ 'xcode_settings': { ++ 'GCC_INLINES_ARE_PRIVATE_EXTERN': 'NO', ++ 'GCC_SYMBOLS_PRIVATE_EXTERN': 'NO', ++ } ++ }], ++ ['OS=="linux"', { ++ 'defines': [ ++ 'WEBRTC_LINUX', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'defines': [ ++ 'WEBRTC_MAC', ++ ], ++ }], ++ ['OS=="win"', { ++ 'defines': [ ++ 'WEBRTC_WIN', ++ ], ++ # TODO(andrew): enable all warnings when possible. ++ # TODO(phoglund): get rid of 4373 supression when ++ # http://code.google.com/p/webrtc/issues/detail?id=261 is solved. ++ 'msvs_disabled_warnings': [ ++ 4373, # legacy warning for ignoring const / volatile in signatures. ++ 4389, # Signed/unsigned mismatch. ++ ], ++ # Re-enable some warnings that Chromium disables. ++ 'msvs_disabled_warnings!': [4189,], ++ }], ++ ['enable_android_opensl==1 and OS=="android"', { ++ 'defines': [ ++ 'WEBRTC_ANDROID_OPENSLES', ++ ], ++ }], ++ ['OS=="android"', { ++ 'defines': [ ++ 'WEBRTC_LINUX', ++ 'WEBRTC_ANDROID', ++ ], ++ 'conditions': [ ++ ['clang==0', { ++ # The Android NDK doesn't provide optimized versions of these ++ # functions. Ensure they are disabled for all compilers. ++ 'cflags': [ ++ '-fno-builtin-cos', ++ '-fno-builtin-sin', ++ '-fno-builtin-cosf', ++ '-fno-builtin-sinf', ++ ], ++ }], ++ ], ++ }], ++ ['chromeos==1', { ++ 'defines': [ ++ 'CHROMEOS', ++ ], ++ }], ++ ['os_bsd==1', { ++ 'defines': [ ++ 'WEBRTC_BSD', ++ ], ++ }], ++ ['include_internal_audio_device==1', { ++ 'defines': [ ++ 'WEBRTC_INCLUDE_INTERNAL_AUDIO_DEVICE', ++ ], ++ }], ++ ['libvpx_build_vp9==0', { ++ 'defines': [ ++ 'RTC_DISABLE_VP9', ++ ], ++ }], ++ ], # conditions ++ 'direct_dependent_settings': { ++ 'conditions': [ ++ ['build_with_mozilla==1', { ++ 'defines': [ ++ # Changes settings for Mozilla build. ++ 'WEBRTC_MOZILLA_BUILD', ++ ], ++ }], ++ ['build_with_chromium==1', { ++ 'defines': [ ++ # Changes settings for Chromium build. ++ # TODO(kjellander): Cleanup unused ones and move defines closer to ++ # the source when webrtc:4256 is completed. ++ 'FEATURE_ENABLE_SSL', ++ 'FEATURE_ENABLE_VOICEMAIL', ++ 'EXPAT_RELATIVE_PATH', ++ 'GTEST_RELATIVE_PATH', ++ 'NO_MAIN_THREAD_WRAPPING', ++ 'NO_SOUND_SYSTEM', ++ 'WEBRTC_CHROMIUM_BUILD', ++ ], ++ 'include_dirs': [ ++ # The overrides must be included first as that is the mechanism for ++ # selecting the override headers in Chromium. ++ '../../webrtc_overrides', ++ '../..', ++ ], ++ }, { ++ 'include_dirs': [ ++ '../..', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'defines': [ ++ 'WEBRTC_MAC', ++ ], ++ }], ++ ['OS=="ios"', { ++ 'defines': [ ++ 'WEBRTC_MAC', ++ 'WEBRTC_IOS', ++ ], ++ }], ++ ['OS=="win"', { ++ 'defines': [ ++ 'WEBRTC_WIN', ++ '_CRT_SECURE_NO_WARNINGS', # Suppress warnings about _vsnprinf ++ ], ++ }], ++ ['OS=="linux"', { ++ 'defines': [ ++ 'WEBRTC_LINUX', ++ ], ++ }], ++ ['OS=="android"', { ++ 'defines': [ ++ 'WEBRTC_LINUX', ++ 'WEBRTC_ANDROID', ++ ], ++ }], ++ ['os_posix==1', { ++ # For access to standard POSIXish features, use WEBRTC_POSIX instead ++ # of a more specific macro. ++ 'defines': [ ++ 'WEBRTC_POSIX', ++ ], ++ }], ++ ['chromeos==1', { ++ 'defines': [ ++ 'CHROMEOS', ++ ], ++ }], ++ ['os_bsd==1', { ++ 'defines': [ ++ 'WEBRTC_BSD', ++ ], ++ }], ++ ], ++ }, ++ }, # target_defaults ++} +diff --git media/webrtc/trunk/webrtc/build/filename_rules.gypi media/webrtc/trunk/webrtc/build/filename_rules.gypi +new file mode 100644 +index 000000000000..93c9028a4d61 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/filename_rules.gypi +@@ -0,0 +1,107 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# This is a copy of the deleted build/filename_includes.gypi that ++# has now been dropped from Chromium. ++{ ++ 'target_conditions': [ ++ ['OS!="win" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_win(_browsertest|_unittest|_test)?\\.(h|cc)$'], ++ ['exclude', '(^|/)win/'], ++ ['exclude', '(^|/)win_[^/]*\\.(h|cc)$'] ], ++ }], ++ ['OS!="mac" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_(cocoa|mac|mach)(_unittest|_test)?\\.(h|cc|c|mm?)$'], ++ ['exclude', '(^|/)(cocoa|mac|mach)/'] ], ++ }], ++ ['OS!="ios" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_ios(_unittest|_test)?\\.(h|cc|mm?)$'], ++ ['exclude', '(^|/)ios/'] ], ++ }], ++ ['(OS!="mac" and OS!="ios") or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '\\.mm?$' ] ], ++ }], ++ # Do not exclude the linux files on *BSD since most of them can be ++ # shared at this point. ++ # In case a file is not needed, it is going to be excluded later on. ++ # TODO(evan): the above is not correct; we shouldn't build _linux ++ # files on non-linux. ++ ['OS!="linux" and OS!="solaris" and <(os_bsd)!=1 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ++ ['exclude', '_linux(_unittest|_test)?\\.(h|cc)$'], ++ ['exclude', '(^|/)linux/'], ++ ], ++ }], ++ ['OS!="android" or _toolset=="host" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ++ ['exclude', '_android(_unittest|_test)?\\.(h|cc)$'], ++ ['exclude', '(^|/)android/'], ++ ], ++ }], ++ ['OS=="win" and >(nacl_untrusted_build)==0', { ++ 'sources/': [ ++ ['exclude', '_posix(_unittest|_test)?\\.(h|cc)$'], ++ ['exclude', '(^|/)posix/'], ++ ], ++ }], ++ ['<(chromeos)!=1 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ++ ['exclude', '_chromeos(_unittest|_test)?\\.(h|cc)$'], ++ ['exclude', '(^|/)chromeos/'], ++ ], ++ }], ++ ['>(nacl_untrusted_build)==0', { ++ 'sources/': [ ++ ['exclude', '_nacl(_unittest)?\\.(h|cc)$'], ++ ], ++ }], ++ ['OS!="linux" and OS!="solaris" and <(os_bsd)!=1 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ++ ['exclude', '_xdg(_unittest)?\\.(h|cc)$'], ++ ], ++ }], ++ ['<(use_x11)!=1 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ++ ['exclude', '_(x|x11)(_interactive_uitest|_unittest)?\\.(h|cc)$'], ++ ['exclude', '(^|/)x11_[^/]*\\.(h|cc)$'], ++ ['exclude', '(^|/)x11/'], ++ ['exclude', '(^|/)x/'], ++ ], ++ }], ++ ['<(toolkit_views)==0 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_views(_browsertest|_unittest)?\\.(h|cc)$'] ] ++ }], ++ ['<(use_aura)==0 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_aura(_browsertest|_unittest)?\\.(h|cc)$'], ++ ['exclude', '(^|/)aura/'], ++ ['exclude', '_ash(_browsertest|_unittest)?\\.(h|cc)$'], ++ ['exclude', '(^|/)ash/'], ++ ] ++ }], ++ ['<(use_aura)==0 or <(use_x11)==0 or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_aurax11(_browsertest|_unittest)?\\.(h|cc)$'] ] ++ }], ++ ['<(use_aura)==0 or OS!="win" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_aurawin\\.(h|cc)$'], ++ ['exclude', '_ashwin\\.(h|cc)$'] ++ ] ++ }], ++ ['<(use_aura)==0 or OS!="linux" or >(nacl_untrusted_build)==1', { ++ 'sources/': [ ['exclude', '_auralinux\\.(h|cc)$'] ] ++ }], ++ #TODO: use_ozone is undefined here ++ #['<(use_ozone)==0 or >(nacl_untrusted_build)==1', { ++ # 'sources/': [ ['exclude', '_ozone(_browsertest|_unittest)?\\.(h|cc)$'] ] ++ #}], ++ #TODO: use_pango is undefined here ++ #['<(use_pango)==0', { ++ # 'sources/': [ ['exclude', '(^|_)pango(_util|_browsertest|_unittest)?\\.(h|cc)$'], ], ++ #}], ++ ] ++} ++ +diff --git media/webrtc/trunk/webrtc/build/ios/merge_ios_libs.gyp media/webrtc/trunk/webrtc/build/ios/merge_ios_libs.gyp +new file mode 100644 +index 000000000000..d28b6221db44 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/ios/merge_ios_libs.gyp +@@ -0,0 +1,26 @@ ++# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': ['../common.gypi',], ++ 'conditions': [ ++ ['OS=="ios" or OS=="mac"', { ++ 'targets': [ ++ { ++ 'target_name': 'rtc_sdk_peerconnection_objc_no_op', ++ 'includes': [ 'objc_app.gypi' ], ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/sdk/sdk.gyp:rtc_sdk_peerconnection_objc', ++ ], ++ 'sources': ['no_op.cc',], ++ }, ++ ], ++ }] ++ ], ++} +diff --git media/webrtc/trunk/webrtc/build/ios/objc_app.gypi media/webrtc/trunk/webrtc/build/ios/objc_app.gypi +new file mode 100644 +index 000000000000..85a10dd91563 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/ios/objc_app.gypi +@@ -0,0 +1,33 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# Include this .gypi in an ObjC target's definition to allow it to be ++# used as an iOS or OS/X application. ++ ++{ ++ 'variables': { ++ 'infoplist_file': './objc_app.plist', ++ }, ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ ], ++ 'mac_bundle': 1, ++ 'mac_bundle_resources': [ ++ '<(infoplist_file)', ++ ], ++ # The plist is listed above so that it appears in XCode's file list, ++ # but we don't actually want to bundle it. ++ 'mac_bundle_resources!': [ ++ '<(infoplist_file)', ++ ], ++ 'xcode_settings': { ++ 'CLANG_ENABLE_OBJC_ARC': 'YES', ++ 'INFOPLIST_FILE': '<(infoplist_file)', ++ }, ++} +diff --git media/webrtc/trunk/webrtc/build/isolate.gypi media/webrtc/trunk/webrtc/build/isolate.gypi +new file mode 100644 +index 000000000000..2d4ea7786971 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/isolate.gypi +@@ -0,0 +1,142 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# Copied from Chromium's src/build/isolate.gypi ++# ++# It was necessary to copy this file because the path to build/common.gypi is ++# different for the standalone and Chromium builds. Gyp doesn't permit ++# conditional inclusion or variable expansion in include paths. ++# http://code.google.com/p/gyp/wiki/InputFormatReference#Including_Other_Files ++# ++# Local modifications: ++# * Removed include of '../chrome/version.gypi'. ++# * Removed passing of version_full variable created in version.gypi: ++# '--extra-variable', 'version_full=<(version_full)', ++ ++# This file is meant to be included into a target to provide a rule ++# to "build" .isolate files into a .isolated file. ++# ++# To use this, create a gyp target with the following form: ++# 'conditions': [ ++# ['test_isolation_mode != "noop"', { ++# 'targets': [ ++# { ++# 'target_name': 'foo_test_run', ++# 'type': 'none', ++# 'dependencies': [ ++# 'foo_test', ++# ], ++# 'includes': [ ++# '../build/isolate.gypi', ++# 'foo_test.isolate', ++# ], ++# 'sources': [ ++# 'foo_test.isolate', ++# ], ++# }, ++# ], ++# }], ++# ], ++# ++# Note: foo_test.isolate is included and a source file. It is an inherent ++# property of the .isolate format. This permits to define GYP variables but is ++# a stricter format than GYP so isolate.py can read it. ++# ++# The generated .isolated file will be: ++# <(PRODUCT_DIR)/foo_test.isolated ++# ++# See http://dev.chromium.org/developers/testing/isolated-testing/for-swes ++# for more information. ++ ++{ ++ 'rules': [ ++ { ++ 'rule_name': 'isolate', ++ 'extension': 'isolate', ++ 'inputs': [ ++ # Files that are known to be involved in this step. ++ '<(DEPTH)/tools/isolate_driver.py', ++ '<(DEPTH)/tools/swarming_client/isolate.py', ++ '<(DEPTH)/tools/swarming_client/run_isolated.py', ++ ], ++ 'outputs': [], ++ 'action': [ ++ 'python', ++ '<(DEPTH)/tools/isolate_driver.py', ++ '<(test_isolation_mode)', ++ '--isolated', '<(PRODUCT_DIR)/<(RULE_INPUT_ROOT).isolated', ++ '--isolate', '<(RULE_INPUT_PATH)', ++ ++ # Variables should use the -V FOO=<(FOO) form so frequent values, ++ # like '0' or '1', aren't stripped out by GYP. Run 'isolate.py help' for ++ # more details. ++ ++ # Path variables are used to replace file paths when loading a .isolate ++ # file ++ '--path-variable', 'DEPTH', '<(DEPTH)', ++ '--path-variable', 'PRODUCT_DIR', '<(PRODUCT_DIR) ', ++ ++ # Note: This list must match DefaultConfigVariables() ++ # in build/android/pylib/utils/isolator.py ++ '--config-variable', 'CONFIGURATION_NAME=<(CONFIGURATION_NAME)', ++ '--config-variable', 'OS=<(OS)', ++ '--config-variable', 'asan=<(asan)', ++ '--config-variable', 'branding=<(branding)', ++ '--config-variable', 'chromeos=<(chromeos)', ++ '--config-variable', 'component=<(component)', ++ '--config-variable', 'disable_nacl=<(disable_nacl)', ++ '--config-variable', 'enable_pepper_cdms=<(enable_pepper_cdms)', ++ '--config-variable', 'enable_plugins=<(enable_plugins)', ++ '--config-variable', 'fastbuild=<(fastbuild)', ++ '--config-variable', 'icu_use_data_file_flag=<(icu_use_data_file_flag)', ++ # TODO(kbr): move this to chrome_tests.gypi:gles2_conform_tests_run ++ # once support for user-defined config variables is added. ++ '--config-variable', ++ 'internal_gles2_conform_tests=<(internal_gles2_conform_tests)', ++ '--config-variable', 'kasko=<(kasko)', ++ '--config-variable', 'lsan=<(lsan)', ++ '--config-variable', 'msan=<(msan)', ++ '--config-variable', 'target_arch=<(target_arch)', ++ '--config-variable', 'tsan=<(tsan)', ++ '--config-variable', 'use_custom_libcxx=<(use_custom_libcxx)', ++ '--config-variable', 'use_instrumented_libraries=<(use_instrumented_libraries)', ++ '--config-variable', ++ 'use_prebuilt_instrumented_libraries=<(use_prebuilt_instrumented_libraries)', ++ '--config-variable', 'use_ozone=<(use_ozone)', ++ '--config-variable', 'use_x11=<(use_x11)', ++ '--config-variable', 'v8_use_external_startup_data=<(v8_use_external_startup_data)', ++ ], ++ 'conditions': [ ++ # Note: When gyp merges lists, it appends them to the old value. ++ ['OS=="mac"', { ++ 'action': [ ++ '--extra-variable', 'mac_product_name=<(mac_product_name)', ++ ], ++ }], ++ ["test_isolation_mode == 'prepare'", { ++ 'outputs': [ ++ '<(PRODUCT_DIR)/<(RULE_INPUT_ROOT).isolated.gen.json', ++ ], ++ }, { ++ 'outputs': [ ++ '<(PRODUCT_DIR)/<(RULE_INPUT_ROOT).isolated', ++ ], ++ }], ++ ['OS=="win"', { ++ 'action': [ ++ '--config-variable', 'msvs_version=<(MSVS_VERSION)', ++ ], ++ }, { ++ 'action': [ ++ '--config-variable', 'msvs_version=0', ++ ], ++ }], ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/build/merge_libs.gyp media/webrtc/trunk/webrtc/build/merge_libs.gyp +new file mode 100644 +index 000000000000..7e251748a09c +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/merge_libs.gyp +@@ -0,0 +1,53 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': ['common.gypi',], ++ 'variables': { ++ 'merge_libs_dependencies': [ ++ ], ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'no_op', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<@(merge_libs_dependencies)', ++ '../webrtc.gyp:webrtc', ++ '../p2p/p2p.gyp:rtc_p2p', ++ ], ++ 'sources': ['no_op.cc',], ++ }, ++ { ++ 'target_name': 'merged_lib', ++ 'type': 'none', ++ 'dependencies': [ ++ 'no_op', ++ ], ++ 'actions': [ ++ { ++ 'variables': { ++ 'output_lib_name': 'webrtc_merged', ++ 'output_lib': '<(PRODUCT_DIR)/<(STATIC_LIB_PREFIX)<(output_lib_name)<(STATIC_LIB_SUFFIX)', ++ }, ++ 'action_name': 'merge_libs', ++ 'inputs': ['<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)no_op<(EXECUTABLE_SUFFIX)'], ++ 'outputs': ['<(output_lib)'], ++ 'action': ['python', ++ 'merge_libs.py', ++ '<(PRODUCT_DIR)', ++ '<(output_lib)',], ++ }, ++ ], ++ }, ++ ], ++# }], ++# ], ++# }], ++# ], ++} +diff --git media/webrtc/trunk/webrtc/build/merge_libs_voice.gyp media/webrtc/trunk/webrtc/build/merge_libs_voice.gyp +new file mode 100644 +index 000000000000..10e305900ab2 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/merge_libs_voice.gyp +@@ -0,0 +1,48 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': ['common.gypi',], ++ 'variables': { ++ 'merge_libs_dependencies': [ ++ ], ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'no_op_voice', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<@(merge_libs_dependencies)', ++ '../voice_engine/voice_engine.gyp:voice_engine' ++ ], ++ 'sources': ['no_op.cc',], ++ }, ++ { ++ 'target_name': 'merged_lib_voice', ++ 'type': 'none', ++ 'dependencies': [ ++ 'no_op_voice', ++ ], ++ 'actions': [ ++ { ++ 'variables': { ++ 'output_lib_name': 'rtc_voice_merged', ++ 'output_lib': '<(PRODUCT_DIR)/<(STATIC_LIB_PREFIX)<(output_lib_name)<(STATIC_LIB_SUFFIX)', ++ }, ++ 'action_name': 'merge_libs_voice', ++ 'inputs': ['<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)no_op_voice<(EXECUTABLE_SUFFIX)'], ++ 'outputs': ['<(output_lib)'], ++ 'action': ['python', ++ 'merge_libs.py', ++ '<(PRODUCT_DIR)', ++ '<(output_lib)',], ++ }, ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/build/merge_voice_libs.gyp media/webrtc/trunk/webrtc/build/merge_voice_libs.gyp +new file mode 100644 +index 000000000000..5e72d43be070 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/merge_voice_libs.gyp +@@ -0,0 +1,43 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ 'common.gypi', ], ++ 'targets': [ ++ { ++ 'target_name': 'no_op', ++ 'type': 'executable', ++ 'dependencies': [ ++ '../voice_engine/voice_engine.gyp:voice_engine', ++ ], ++ 'sources': [ 'no_op.cc', ], ++ }, ++ { ++ 'target_name': 'merge_voice_libs', ++ 'type': 'none', ++ 'dependencies': [ ++ 'no_op', ++ ], ++ 'actions': [ ++ { ++ 'variables': { ++ 'output_lib_name': 'webrtc_voice', ++ 'output_lib': '<(PRODUCT_DIR)/<(STATIC_LIB_PREFIX)<(output_lib_name)<(STATIC_LIB_SUFFIX)', ++ }, ++ 'action_name': 'merge_libs', ++ 'inputs': ['<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)no_op<(EXECUTABLE_SUFFIX)'], ++ 'outputs': ['<(output_lib)'], ++ 'action': ['python', ++ 'merge_libs.py', ++ '<(PRODUCT_DIR)', ++ '<(output_lib)',], ++ }, ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/build/objc_common.gypi media/webrtc/trunk/webrtc/build/objc_common.gypi +new file mode 100644 +index 000000000000..ff908cfe6295 +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/objc_common.gypi +@@ -0,0 +1,21 @@ ++# Copyright 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# ObjC target common prefix header. ++ ++{ ++ 'variables': { ++ 'objc_prefix_file': '../sdk/objc/WebRTC-Prefix.pch', ++ }, ++ 'xcode_settings': { ++ 'CLANG_ENABLE_OBJC_ARC': 'YES', ++ 'CLANG_WARN_OBJC_MISSING_PROPERTY_SYNTHESIS': 'YES', ++ 'GCC_PREFIX_HEADER': '<(objc_prefix_file)', ++ 'GCC_PRECOMPILE_PREFIX_HEADER': 'YES' ++ }, ++} +diff --git media/webrtc/trunk/webrtc/build/protoc.gypi media/webrtc/trunk/webrtc/build/protoc.gypi +new file mode 100644 +index 000000000000..df209d47de8d +--- /dev/null ++++ media/webrtc/trunk/webrtc/build/protoc.gypi +@@ -0,0 +1,136 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# Copied from Chromium's src/build/protoc.gypi ++# ++# It was necessary to copy this file to WebRTC, because the path to ++# build/common.gypi is different for the standalone and Chromium builds. Gyp ++# doesn't permit conditional inclusion or variable expansion in include paths. ++# http://code.google.com/p/gyp/wiki/InputFormatReference#Including_Other_Files ++# ++# Local changes: ++# * Removed <(DEPTH) from include_dir due to difficulties with generated ++# downstream code. ++ ++ ++# This file is meant to be included into a target to provide a rule ++# to invoke protoc in a consistent manner. For Java-targets, see ++# protoc_java.gypi. ++# ++# To use this, create a gyp target with the following form: ++# { ++# 'target_name': 'my_proto_lib', ++# 'type': 'static_library', ++# 'sources': [ ++# 'foo.proto', ++# 'bar.proto', ++# ], ++# 'variables': { ++# # Optional, see below: 'proto_in_dir': '.' ++# 'proto_out_dir': 'dir/for/my_proto_lib' ++# }, ++# 'includes': ['path/to/this/gypi/file'], ++# } ++# If necessary, you may add normal .cc files to the sources list or other gyp ++# dependencies. The proto headers are guaranteed to be generated before any ++# source files, even within this target, are compiled. ++# ++# The 'proto_in_dir' variable must be the relative path to the ++# directory containing the .proto files. If left out, it defaults to '.'. ++# ++# The 'proto_out_dir' variable specifies the path suffix that output ++# files are generated under. Targets that gyp-depend on my_proto_lib ++# will be able to include the resulting proto headers with an include ++# like: ++# #include "dir/for/my_proto_lib/foo.pb.h" ++# ++# If you need to add an EXPORT macro to a protobuf's c++ header, set the ++# 'cc_generator_options' variable with the value: 'dllexport_decl=FOO_EXPORT:' ++# e.g. 'dllexport_decl=BASE_EXPORT:' ++# ++# It is likely you also need to #include a file for the above EXPORT macro to ++# work. You can do so with the 'cc_include' variable. ++# e.g. 'base/base_export.h' ++# ++# Implementation notes: ++# A proto_out_dir of foo/bar produces ++# <(SHARED_INTERMEDIATE_DIR)/protoc_out/foo/bar/{file1,file2}.pb.{cc,h} ++# <(SHARED_INTERMEDIATE_DIR)/pyproto/foo/bar/{file1,file2}_pb2.py ++ ++{ ++ 'variables': { ++ 'protoc_wrapper': '<(DEPTH)/tools/protoc_wrapper/protoc_wrapper.py', ++ 'cc_dir': '<(SHARED_INTERMEDIATE_DIR)/protoc_out/<(proto_out_dir)', ++ 'py_dir': '<(PRODUCT_DIR)/pyproto/<(proto_out_dir)', ++ 'cc_generator_options%': '', ++ 'cc_include%': '', ++ 'proto_in_dir%': '.', ++ 'conditions': [ ++ ['use_system_protobuf==0', { ++ 'protoc': '<(PRODUCT_DIR)/<(EXECUTABLE_PREFIX)protoc<(EXECUTABLE_SUFFIX)', ++ }, { # use_system_protobuf==1 ++ 'protoc': '=7', { ++ 'sources': [ ++ 'signal_processing/filter_ar_fast_q12_armv7.S', ++ ], ++ 'sources!': [ ++ 'signal_processing/filter_ar_fast_q12.c', ++ ], ++ }], ++ ], # conditions ++ }], ++ ['target_arch=="mipsel" and mips_arch_variant!="r6"', { ++ 'sources': [ ++ 'signal_processing/include/spl_inl_mips.h', ++ 'signal_processing/complex_bit_reverse_mips.c', ++ 'signal_processing/complex_fft_mips.c', ++ 'signal_processing/cross_correlation_mips.c', ++ 'signal_processing/downsample_fast_mips.c', ++ 'signal_processing/filter_ar_fast_q12_mips.c', ++ 'signal_processing/min_max_operations_mips.c', ++ 'signal_processing/resample_by_2_mips.c', ++ 'signal_processing/spl_sqrt_floor_mips.c', ++ ], ++ 'sources!': [ ++ 'signal_processing/complex_bit_reverse.c', ++ 'signal_processing/complex_fft.c', ++ 'signal_processing/filter_ar_fast_q12.c', ++ 'signal_processing/spl_sqrt_floor.c', ++ ], ++ 'conditions': [ ++ ['mips_dsp_rev>0', { ++ 'sources': [ ++ 'signal_processing/vector_scaling_operations_mips.c', ++ ], ++ }], ++ ], ++ }], ++ ], # conditions ++ # Ignore warning on shift operator promotion. ++ 'msvs_disabled_warnings': [ 4334, ], ++ }, ++ ], # targets ++ 'conditions': [ ++ ['target_arch=="ia32" or target_arch=="x64"', { ++ 'targets': [ ++ { ++ 'target_name': 'common_audio_sse2', ++ 'type': 'static_library', ++ 'sources': [ ++ 'fir_filter_sse.cc', ++ 'resampler/sinc_resampler_sse.cc', ++ ], ++ 'conditions': [ ++ ['os_posix==1', { ++ 'cflags': [ '-msse2', ], ++ 'cflags_mozilla': ['-msse2',], ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ '-msse2', ], ++ }, ++ }], ++ ], ++ }, ++ ], # targets ++ }], ++ ['build_with_neon==1', { ++ 'targets': [ ++ { ++ 'target_name': 'common_audio_neon', ++ 'type': 'static_library', ++ 'includes': ['../build/arm_neon.gypi',], ++ 'sources': [ ++ 'fir_filter_neon.cc', ++ 'resampler/sinc_resampler_neon.cc', ++ 'signal_processing/cross_correlation_neon.c', ++ 'signal_processing/downsample_fast_neon.c', ++ 'signal_processing/min_max_operations_neon.c', ++ ], ++ }, ++ ], # targets ++ }], ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/common_video/common_video.gyp media/webrtc/trunk/webrtc/common_video/common_video.gyp +new file mode 100644 +index 000000000000..8391b7ce173a +--- /dev/null ++++ media/webrtc/trunk/webrtc/common_video/common_video.gyp +@@ -0,0 +1,83 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': ['../build/common.gypi'], ++ 'targets': [ ++ { ++ 'target_name': 'common_video', ++ 'type': 'static_library', ++ 'include_dirs': [ ++ '<(webrtc_root)/modules/interface/', ++ 'include', ++ 'libyuv/include', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_task_queue', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'include', ++ 'libyuv/include', ++ ], ++ }, ++ 'conditions': [ ++ ['build_libyuv==1', { ++ 'dependencies': ['<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',], ++ 'export_dependent_settings': [ ++ '<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv', ++ ], ++ }, { ++ # Need to add a directory normally exported by libyuv.gyp. ++ 'include_dirs': ['<(libyuv_dir)/include',], ++ }], ++ ['OS=="ios" or OS=="mac"', { ++ 'sources': [ ++ 'corevideo_frame_buffer.cc', ++ 'include/corevideo_frame_buffer.h', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework CoreVideo', ++ ], ++ }, ++ }, ++ }], ++ ], ++ 'sources': [ ++ 'bitrate_adjuster.cc', ++ 'h264/sps_vui_rewriter.cc', ++ 'h264/sps_vui_rewriter.h', ++ 'h264/h264_common.cc', ++ 'h264/h264_common.h', ++ 'h264/profile_level_id.cc', ++ 'h264/pps_parser.cc', ++ 'h264/pps_parser.h', ++ 'h264/sps_parser.cc', ++ 'h264/sps_parser.h', ++ 'i420_buffer_pool.cc', ++ 'video_frame.cc', ++ 'incoming_video_stream.cc', ++ 'include/bitrate_adjuster.h', ++ 'include/frame_callback.h', ++ 'include/i420_buffer_pool.h', ++ 'include/incoming_video_stream.h', ++ 'include/video_bitrate_allocator.h', ++ 'include/video_frame_buffer.h', ++ 'libyuv/include/webrtc_libyuv.h', ++ 'libyuv/webrtc_libyuv.cc', ++ 'video_frame_buffer.cc', ++ 'video_render_frames.cc', ++ 'video_render_frames.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/logging/BUILD.gn media/webrtc/trunk/webrtc/logging/BUILD.gn +index a83238db6eb9..98776d3f90ee 100644 +--- media/webrtc/trunk/webrtc/logging/BUILD.gn ++++ media/webrtc/trunk/webrtc/logging/BUILD.gn +@@ -7,9 +7,7 @@ + # be found in the AUTHORS file in the root of the source tree. + + import("../build/webrtc.gni") +-if (!build_with_mozilla) { +- import("//third_party/protobuf/proto_library.gni") +-} ++import("//third_party/protobuf/proto_library.gni") + if (is_android) { + import("//build/config/android/config.gni") + import("//build/config/android/rules.gni") +diff --git media/webrtc/trunk/webrtc/media/BUILD.gn media/webrtc/trunk/webrtc/media/BUILD.gn +index e27e39892367..060b6afa9a3e 100644 +--- media/webrtc/trunk/webrtc/media/BUILD.gn ++++ media/webrtc/trunk/webrtc/media/BUILD.gn +@@ -10,17 +10,10 @@ import("//build/config/linux/pkg_config.gni") + import("../build/webrtc.gni") + + group("media") { +- public_deps = [] +- if (!build_with_mozilla) { +- public_deps += [ +- ":rtc_media", +- ":rtc_media_base", +- ] +- } else { +- public_deps += [ +- ":mozilla_rtc_media", +- ] +- } ++ public_deps = [ ++ ":rtc_media", ++ ":rtc_media_base", ++ ] + } + + config("rtc_media_defines_config") { +@@ -49,22 +42,6 @@ if (is_linux && rtc_use_gtk) { + } + } + +-if (build_with_mozilla) { +- rtc_static_library("mozilla_rtc_media") { +- defines = [] +- libs = [] +- deps = [] +- sources = [ +- "base/videoadapter.cc", +- "base/videoadapter.h", +- "base/videobroadcaster.cc", +- "base/videobroadcaster.h", +- "base/videosourcebase.cc", +- "base/videosourcebase.h", +- ] +- } +-} +- + rtc_static_library("rtc_media_base") { + defines = [] + libs = [] +@@ -125,13 +102,8 @@ rtc_static_library("rtc_media_base") { + deps += [ + "..:webrtc_common", + "../base:rtc_base_approved", ++ "../p2p", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../p2p", +- ] +- } + } + + rtc_static_library("rtc_media") { +diff --git media/webrtc/trunk/webrtc/media/media.gyp media/webrtc/trunk/webrtc/media/media.gyp +new file mode 100644 +index 000000000000..eda77532241a +--- /dev/null ++++ media/webrtc/trunk/webrtc/media/media.gyp +@@ -0,0 +1,219 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'targets': [ ++ { ++ 'target_name': 'mozilla_rtc_media', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ '<(libyuv_dir)/include', ++ ], ++ }, ++ 'sources': [ ++ 'base/videoadapter.cc', ++ 'base/videoadapter.h', ++ 'base/videobroadcaster.cc', ++ 'base/videobroadcaster.h', ++ 'base/videosourcebase.cc', ++ 'base/videosourcebase.h', ++ ], ++ # TODO(kjellander): Make the code compile without disabling these flags. ++ # See https://bugs.chromium.org/p/webrtc/issues/detail?id=3307 ++ 'cflags': [ ++ '-Wno-deprecated-declarations', ++ ], ++ 'cflags!': [ ++ '-Wextra', ++ ], ++ 'cflags_cc!': [ ++ '-Woverloaded-virtual', ++ ], ++ }, ++ { ++ 'target_name': 'rtc_media', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/webrtc.gyp:webrtc_lib', ++ '<(webrtc_root)/voice_engine/voice_engine.gyp:voice_engine', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/p2p/p2p.gyp:rtc_p2p', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ '<(libyuv_dir)/include', ++ ], ++ }, ++ 'sources': [ ++ 'base/adaptedvideotracksource.cc', ++ 'base/adaptedvideotracksource.h', ++ 'base/audiosource.h', ++ 'base/codec.cc', ++ 'base/codec.h', ++ 'base/cpuid.cc', ++ 'base/cpuid.h', ++ 'base/cryptoparams.h', ++ 'base/device.h', ++ 'base/hybriddataengine.h', ++ 'base/mediachannel.h', ++ 'base/mediacommon.h', ++ 'base/mediaconstants.cc', ++ 'base/mediaconstants.h', ++ 'base/mediaengine.cc', ++ 'base/mediaengine.h', ++ 'base/rtpdataengine.cc', ++ 'base/rtpdataengine.h', ++ 'base/rtpdump.cc', ++ 'base/rtpdump.h', ++ 'base/rtputils.cc', ++ 'base/rtputils.h', ++ 'base/screencastid.h', ++ 'base/streamparams.cc', ++ 'base/streamparams.h', ++ 'base/turnutils.cc', ++ 'base/turnutils.h', ++ 'base/videoadapter.cc', ++ 'base/videoadapter.h', ++ 'base/videobroadcaster.cc', ++ 'base/videobroadcaster.h', ++ 'base/videocapturer.cc', ++ 'base/videocapturer.h', ++ 'base/videocapturerfactory.h', ++ 'base/videocommon.cc', ++ 'base/videocommon.h', ++ 'base/videoframe.cc', ++ 'base/videoframe.h', ++ 'base/videosourcebase.cc', ++ 'base/videosourcebase.h', ++ 'devices/videorendererfactory.h', ++ 'engine/internaldecoderfactory.cc', ++ 'engine/internaldecoderfactory.h', ++ 'engine/internalencoderfactory.cc', ++ 'engine/internalencoderfactory.h', ++ 'engine/nullwebrtcvideoengine.h', ++ 'engine/payload_type_mapper.cc', ++ 'engine/payload_type_mapper.h', ++ 'engine/simulcast.cc', ++ 'engine/simulcast.h', ++ 'engine/videodecodersoftwarefallbackwrapper.cc', ++ 'engine/videodecodersoftwarefallbackwrapper.h', ++ 'engine/videoencodersoftwarefallbackwrapper.cc', ++ 'engine/videoencodersoftwarefallbackwrapper.h', ++ 'engine/webrtccommon.h', ++ 'engine/webrtcmediaengine.cc', ++ 'engine/webrtcmediaengine.h', ++ 'engine/webrtcmediaengine.cc', ++ 'engine/webrtcvideocapturer.cc', ++ 'engine/webrtcvideocapturer.h', ++ 'engine/webrtcvideocapturerfactory.h', ++ 'engine/webrtcvideocapturerfactory.cc', ++ 'engine/webrtcvideodecoderfactory.h', ++ 'engine/webrtcvideoencoderfactory.h', ++ 'engine/webrtcvideoengine2.cc', ++ 'engine/webrtcvideoengine2.h', ++ 'engine/webrtcvideoframe.cc', ++ 'engine/webrtcvideoframe.h', ++ 'engine/webrtcvoe.h', ++ 'engine/webrtcvoiceengine.cc', ++ 'engine/webrtcvoiceengine.h', ++ 'sctp/sctptransportinternal.h', ++# 'sctp/sctpdataengine.cc', ++# 'sctp/sctpdataengine.h', ++ ], ++ # TODO(kjellander): Make the code compile without disabling these flags. ++ # See https://bugs.chromium.org/p/webrtc/issues/detail?id=3307 ++ 'cflags': [ ++ '-Wno-deprecated-declarations', ++ ], ++ 'cflags!': [ ++ '-Wextra', ++ ], ++ 'cflags_cc!': [ ++ '-Woverloaded-virtual', ++ ], ++ 'msvs_disabled_warnings': [ ++ 4245, # conversion from 'int' to 'size_t', signed/unsigned mismatch. ++ 4267, # conversion from 'size_t' to 'int', possible loss of data. ++ 4389, # signed/unsigned mismatch. ++ ], ++ 'conditions': [ ++ ['build_libyuv==1', { ++ 'dependencies': ['<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv',], ++ }], ++ #TODO: build_usrsctp not defined ++ #['build_usrsctp==1', { ++ # 'include_dirs': [ ++ # # TODO(jiayl): move this into the direct_dependent_settings of ++ # # usrsctp.gyp. ++ # '<(DEPTH)/third_party/usrsctp/usrsctplib', ++ # ], ++ # 'dependencies': [ ++ # '<(DEPTH)/third_party/usrsctp/usrsctp.gyp:usrsctplib', ++ # ], ++ #}], ++ ['enable_intelligibility_enhancer==1', { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=1',], ++ }, { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=0',], ++ }], ++ ['build_with_chromium==1', { ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:video_capture', ++ ], ++ }, { ++ 'defines': [ ++ 'HAVE_WEBRTC_VIDEO', ++ 'HAVE_WEBRTC_VOICE', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ 'HAVE_WEBRTC_VIDEO', ++ 'HAVE_WEBRTC_VOICE', ++ ], ++ }, ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:video_capture_module_internal_impl', ++ ], ++ }], ++ ['OS=="linux" and use_gtk==1', { ++ 'sources': [ ++ 'devices/gtkvideorenderer.cc', ++ 'devices/gtkvideorenderer.h', ++ ], ++ 'cflags': [ ++ '=7', { ++ 'sources': [ ++ 'fix/source/lattice_armv7.S', ++ 'fix/source/pitch_filter_armv6.S', ++ ], ++ 'sources!': [ ++ 'fix/source/lattice_c.c', ++ 'fix/source/pitch_filter_c.c', ++ ], ++ }], ++ ['build_with_neon==1', { ++ 'dependencies': ['isac_neon', ], ++ }], ++ ['target_arch=="mipsel" and mips_arch_variant!="r6"', { ++ 'sources': [ ++ 'fix/source/entropy_coding_mips.c', ++ 'fix/source/filters_mips.c', ++ 'fix/source/lattice_mips.c', ++ 'fix/source/pitch_estimator_mips.c', ++ 'fix/source/transform_mips.c', ++ ], ++ 'sources!': [ ++ 'fix/source/lattice_c.c', ++ 'fix/source/pitch_estimator_c.c', ++ ], ++ 'conditions': [ ++ ['mips_dsp_rev>0', { ++ 'sources': [ ++ 'fix/source/filterbanks_mips.c', ++ ], ++ }], ++ ['mips_dsp_rev>1', { ++ 'sources': [ ++ 'fix/source/lpc_masking_model_mips.c', ++ 'fix/source/pitch_filter_mips.c', ++ ], ++ 'sources!': [ ++ 'fix/source/pitch_filter_c.c', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }, ++ ], ++ 'conditions': [ ++ ['build_with_neon==1', { ++ 'targets': [ ++ { ++ 'target_name': 'isac_neon', ++ 'type': 'static_library', ++ 'includes': ['../../../../build/arm_neon.gypi',], ++ 'dependencies': [ ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ ], ++ 'sources': [ ++ 'fix/source/entropy_coding_neon.c', ++ 'fix/source/filterbanks_neon.c', ++ 'fix/source/filters_neon.c', ++ 'fix/source/lattice_neon.c', ++ 'fix/source/transform_neon.c', ++ ], ++ }, ++ ], ++ }], ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/isac/isacfix_test.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/isac/isacfix_test.gypi +new file mode 100644 +index 000000000000..7d9bc995199d +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/isac/isacfix_test.gypi +@@ -0,0 +1,35 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ # kenny ++ { ++ 'target_name': 'isac_fix_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'isac_fix', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ ], ++ 'include_dirs': [ ++ './fix/test', ++ './fix/include', ++ '<(webrtc_root)', ++ ], ++ 'sources': [ ++ './fix/test/kenny.cc', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, ++ ], ++} ++ ++# TODO(kma): Add bit-exact test for iSAC-fix. +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi +new file mode 100644 +index 000000000000..b2bffc1d1e9d +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/opus/opus.gypi +@@ -0,0 +1,68 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'variables': { ++ 'opus_complexity%': 0, ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_opus', ++ 'type': 'static_library', ++ 'conditions': [ ++ ['build_opus==1', { ++ 'dependencies': [ ++ '<(opus_dir)/opus.gyp:opus' ++ ], ++ 'export_dependent_settings': [ ++ '<(opus_dir)/opus.gyp:opus', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ # need by Neteq audio classifier. ++ '<(opus_dir)/src/src', ++ '<(opus_dir)/src/celt', ++ ], ++ }, ++ }, { ++ 'conditions': [ ++ ['build_with_mozilla==1', { ++ # Mozilla provides its own build of the opus library. ++ 'include_dirs': [ ++ '/media/libopus/include', ++ '/media/libopus/src', ++ '/media/libopus/celt', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ '/media/libopus/include', ++ '/media/libopus/src', ++ '/media/libopus/celt', ++ ], ++ }, ++ }], ++ ], ++ }], ++ ], ++ 'dependencies': [ ++ 'audio_encoder_interface', ++ ], ++ 'defines': [ ++ 'OPUS_COMPLEXITY=<(opus_complexity)' ++ ], ++ 'sources': [ ++ 'audio_decoder_opus.cc', ++ 'audio_decoder_opus.h', ++ 'audio_encoder_opus.cc', ++ 'audio_encoder_opus.h', ++ 'opus_inst.h', ++ 'opus_interface.c', ++ 'opus_interface.h', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi +new file mode 100644 +index 000000000000..e6ffb16640fe +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/pcm16b/pcm16b.gypi +@@ -0,0 +1,29 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'pcm16b', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audio_encoder_interface', ++ 'audio_decoder_interface', ++ 'g711', ++ ], ++ 'sources': [ ++ 'audio_decoder_pcm16b.cc', ++ 'audio_decoder_pcm16b.h', ++ 'audio_encoder_pcm16b.cc', ++ 'audio_encoder_pcm16b.h', ++ 'pcm16b.c', ++ 'pcm16b.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/codecs/red/red.gypi media/webrtc/trunk/webrtc/modules/audio_coding/codecs/red/red.gypi +new file mode 100644 +index 000000000000..667ac866c9c3 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/codecs/red/red.gypi +@@ -0,0 +1,33 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'red', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audio_encoder_interface', ++ ], ++ 'include_dirs': [ ++ 'include', ++ '<(webrtc_root)', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'include', ++ '<(webrtc_root)', ++ ], ++ }, ++ 'sources': [ ++ 'audio_encoder_copy_red.h', ++ 'audio_encoder_copy_red.cc', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +new file mode 100644 +index 000000000000..c77ef5087d12 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq.gypi +@@ -0,0 +1,130 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'variables': { ++ 'codecs': [ ++ 'cng', ++ 'g711', ++ 'pcm16b', ++ ], ++ 'neteq_defines': [], ++ 'conditions': [ ++ ['include_ilbc==1', { ++ 'codecs': ['ilbc',], ++ 'neteq_defines': ['WEBRTC_CODEC_ILBC',], ++ }], ++ ['include_opus==1', { ++ 'codecs': ['webrtc_opus',], ++ 'neteq_defines': ['WEBRTC_CODEC_OPUS',], ++ }], ++ ['include_g722==1', { ++ 'codecs': ['g722',], ++ 'neteq_defines': ['WEBRTC_CODEC_G722',], ++ }], ++ ['include_isac==1', { ++ 'codecs': ['isac', 'isac_fix',], ++ 'neteq_defines': ['WEBRTC_CODEC_ISAC', 'WEBRTC_CODEC_ISACFIX',], ++ }], ++ ], ++ 'neteq_dependencies': [ ++ '<@(codecs)', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ 'audio_decoder_interface', ++ ], ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'neteq', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<@(neteq_dependencies)', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ 'builtin_audio_decoder_factory', ++ 'rent_a_codec', ++ ], ++ 'defines': [ ++ '<@(neteq_defines)', ++ ], ++ 'sources': [ ++ 'include/neteq.h', ++ 'accelerate.cc', ++ 'accelerate.h', ++ 'audio_decoder_impl.cc', ++ 'audio_decoder_impl.h', ++ 'audio_multi_vector.cc', ++ 'audio_multi_vector.h', ++ 'audio_vector.cc', ++ 'audio_vector.h', ++ 'background_noise.cc', ++ 'background_noise.h', ++ 'buffer_level_filter.cc', ++ 'buffer_level_filter.h', ++ 'comfort_noise.cc', ++ 'comfort_noise.h', ++ 'cross_correlation.cc', ++ 'cross_correlation.h', ++ 'decision_logic.cc', ++ 'decision_logic.h', ++ 'decision_logic_fax.cc', ++ 'decision_logic_fax.h', ++ 'decision_logic_normal.cc', ++ 'decision_logic_normal.h', ++ 'decoder_database.cc', ++ 'decoder_database.h', ++ 'defines.h', ++ 'delay_manager.cc', ++ 'delay_manager.h', ++ 'delay_peak_detector.cc', ++ 'delay_peak_detector.h', ++ 'dsp_helper.cc', ++ 'dsp_helper.h', ++ 'dtmf_buffer.cc', ++ 'dtmf_buffer.h', ++ 'dtmf_tone_generator.cc', ++ 'dtmf_tone_generator.h', ++ 'expand.cc', ++ 'expand.h', ++ 'merge.cc', ++ 'merge.h', ++ 'nack_tracker.h', ++ 'nack_tracker.cc', ++ 'neteq_impl.cc', ++ 'neteq_impl.h', ++ 'neteq.cc', ++ 'statistics_calculator.cc', ++ 'statistics_calculator.h', ++ 'normal.cc', ++ 'normal.h', ++ 'packet.cc', ++ 'packet.h', ++ 'packet_buffer.cc', ++ 'packet_buffer.h', ++ 'red_payload_splitter.cc', ++ 'red_payload_splitter.h', ++ 'post_decode_vad.cc', ++ 'post_decode_vad.h', ++ 'preemptive_expand.cc', ++ 'preemptive_expand.h', ++ 'random_vector.cc', ++ 'random_vector.h', ++ 'rtcp.cc', ++ 'rtcp.h', ++ 'sync_buffer.cc', ++ 'sync_buffer.h', ++ 'tick_timer.cc', ++ 'tick_timer.h', ++ 'timestamp_scaler.cc', ++ 'timestamp_scaler.h', ++ 'time_stretch.cc', ++ 'time_stretch.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_tests.gypi media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_tests.gypi +new file mode 100644 +index 000000000000..b37eb5193022 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_coding/neteq/neteq_tests.gypi +@@ -0,0 +1,312 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'conditions': [ ++ ['enable_protobuf==1', { ++ 'targets': [ ++ { ++ 'target_name': 'neteq_rtpplay', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ 'neteq', ++ 'neteq_unittest_tools', ++ ], ++ 'sources': [ ++ 'tools/neteq_rtpplay.cc', ++ ], ++ 'defines': [ ++ ], ++ }, # neteq_rtpplay ++ ], ++ }], ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'RTPencode', ++ 'type': 'executable', ++ 'dependencies': [ ++ # TODO(hlundin): Make RTPencode use ACM to encode files. ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ 'cng', ++ 'g711', ++ 'g722', ++ 'ilbc', ++ 'isac', ++ 'neteq_test_tools', # Test helpers ++ 'pcm16b', ++ 'webrtc_opus', ++ ], ++ 'defines': [ ++ 'CODEC_ILBC', ++ 'CODEC_PCM16B', ++ 'CODEC_G711', ++ 'CODEC_G722', ++ 'CODEC_ISAC', ++ 'CODEC_PCM16B_WB', ++ 'CODEC_ISAC_SWB', ++ 'CODEC_PCM16B_32KHZ', ++ 'CODEC_PCM16B_48KHZ', ++ 'CODEC_CNGCODEC8', ++ 'CODEC_CNGCODEC16', ++ 'CODEC_CNGCODEC32', ++ 'CODEC_ATEVENT_DECODE', ++ 'CODEC_RED', ++ 'CODEC_OPUS', ++ ], ++ 'include_dirs': [ ++ 'include', ++ 'test', ++ '<(webrtc_root)', ++ ], ++ 'sources': [ ++ 'test/RTPencode.cc', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, ++ ++ { ++ 'target_name': 'RTPjitter', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ ], ++ 'sources': [ ++ 'test/RTPjitter.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'rtp_analyze', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ 'neteq_unittest_tools', ++ ], ++ 'sources': [ ++ 'tools/rtp_analyze.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'RTPchange', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ 'neteq_test_tools', ++ ], ++ 'sources': [ ++ 'test/RTPchange.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'RTPtimeshift', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ 'neteq_test_tools', ++ ], ++ 'sources': [ ++ 'test/RTPtimeshift.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'rtpcat', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/test/test.gyp:rtp_test_utils', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ ], ++ 'sources': [ ++ 'tools/rtpcat.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'audio_classifier_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'neteq', ++ 'webrtc_opus', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ ], ++ 'sources': [ ++ 'test/audio_classifier_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_test_support', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ 'neteq', ++ 'neteq_unittest_tools', ++ 'pcm16b', ++ ], ++ 'sources': [ ++ 'tools/neteq_external_decoder_test.cc', ++ 'tools/neteq_external_decoder_test.h', ++ 'tools/neteq_performance_test.cc', ++ 'tools/neteq_performance_test.h', ++ ], ++ }, # neteq_test_support ++ ++ { ++ 'target_name': 'neteq_quality_test_support', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ 'neteq', ++ 'neteq_unittest_tools', ++ ], ++ 'sources': [ ++ 'tools/neteq_quality_test.cc', ++ 'tools/neteq_quality_test.h', ++ ], ++ }, # neteq_test_support ++ ++ { ++ 'target_name': 'neteq_speed_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ 'neteq', ++ 'neteq_test_support', ++ ], ++ 'sources': [ ++ 'test/neteq_speed_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_opus_quality_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ 'neteq', ++ 'neteq_quality_test_support', ++ 'webrtc_opus', ++ ], ++ 'sources': [ ++ 'test/neteq_opus_quality_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_isac_quality_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ 'isac_fix', ++ 'neteq', ++ 'neteq_quality_test_support', ++ ], ++ 'sources': [ ++ 'test/neteq_isac_quality_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_pcmu_quality_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ 'g711', ++ 'neteq', ++ 'neteq_quality_test_support', ++ ], ++ 'sources': [ ++ 'test/neteq_pcmu_quality_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_ilbc_quality_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ 'neteq', ++ 'neteq_quality_test_support', ++ 'ilbc', ++ ], ++ 'sources': [ ++ 'test/neteq_ilbc_quality_test.cc', ++ ], ++ }, ++ ++ { ++ 'target_name': 'neteq_test_tools', ++ # Collection of useful functions used in other tests. ++ 'type': 'static_library', ++ 'variables': { ++ # Expects RTP packets without payloads when enabled. ++ 'neteq_dummy_rtp%': 0, ++ }, ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ 'cng', ++ 'g711', ++ 'g722', ++ 'ilbc', ++ 'isac', ++ 'pcm16b', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'include', ++ 'test', ++ '<(webrtc_root)', ++ ], ++ }, ++ 'defines': [ ++ ], ++ 'include_dirs': [ ++ 'include', ++ 'test', ++ '<(webrtc_root)', ++ ], ++ 'sources': [ ++ 'test/NETEQTEST_DummyRTPpacket.cc', ++ 'test/NETEQTEST_DummyRTPpacket.h', ++ 'test/NETEQTEST_RTPpacket.cc', ++ 'test/NETEQTEST_RTPpacket.h', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_conference_mixer/audio_conference_mixer.gypi media/webrtc/trunk/webrtc/modules/audio_conference_mixer/audio_conference_mixer.gypi +new file mode 100644 +index 000000000000..9d7179504c4d +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_conference_mixer/audio_conference_mixer.gypi +@@ -0,0 +1,34 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'audio_conference_mixer', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audio_processing', ++ 'webrtc_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/audio_conference_mixer.h', ++ 'include/audio_conference_mixer_defines.h', ++ 'source/audio_frame_manipulator.cc', ++ 'source/audio_frame_manipulator.h', ++ 'source/memory_pool.h', ++ 'source/memory_pool_posix.h', ++ 'source/memory_pool_win.h', ++ 'source/audio_conference_mixer_impl.cc', ++ 'source/audio_conference_mixer_impl.h', ++ 'source/time_scheduler.cc', ++ 'source/time_scheduler.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_device/BUILD.gn media/webrtc/trunk/webrtc/modules/audio_device/BUILD.gn +index 49430c62ed39..ab9406e13fb0 100644 +--- media/webrtc/trunk/webrtc/modules/audio_device/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/audio_device/BUILD.gn +@@ -81,13 +81,6 @@ rtc_static_library("audio_device") { + "include/audio_device_defines.h", + ] + +- if (build_with_mozilla) { +- sources += [ +- "opensl/single_rw_fifo.cc", +- "opensl/single_rw_fifo.h", +- ] +- } +- + include_dirs = [] + if (is_linux) { + include_dirs += [ "linux" ] +@@ -133,36 +126,26 @@ rtc_static_library("audio_device") { + "log", + "OpenSLES", + ] +- +- if (build_with_mozilla) { +- include_dirs += [ +- "/config/external/nspr", +- "/nsprpub/lib/ds", +- "/nsprpub/pr/include", +- ] +- } + } + if (rtc_use_dummy_audio_file_devices) { + defines += [ "WEBRTC_DUMMY_FILE_DEVICES" ] + } else { + if (is_linux) { + sources += [ ++ "linux/alsasymboltable_linux.cc", ++ "linux/alsasymboltable_linux.h", ++ "linux/audio_device_alsa_linux.cc", ++ "linux/audio_device_alsa_linux.h", ++ "linux/audio_mixer_manager_alsa_linux.cc", ++ "linux/audio_mixer_manager_alsa_linux.h", + "linux/latebindingsymboltable_linux.cc", + "linux/latebindingsymboltable_linux.h", + ] +- libs = [ "dl" ] +- if (!build_with_mozilla) { +- sources += [ +- "linux/alsasymboltable_linux.cc", +- "linux/alsasymboltable_linux.h", +- "linux/audio_device_alsa_linux.cc", +- "linux/audio_device_alsa_linux.h", +- "linux/audio_mixer_manager_alsa_linux.cc", +- "linux/audio_mixer_manager_alsa_linux.h", +- ] +- defines += [ "LINUX_ALSA" ] +- libs += [ "X11" ] +- } ++ defines += [ "LINUX_ALSA" ] ++ libs = [ ++ "dl", ++ "X11", ++ ] + if (rtc_include_pulse_audio) { + sources += [ + "linux/audio_device_pulse_linux.cc", +diff --git media/webrtc/trunk/webrtc/modules/audio_device/audio_device.gypi media/webrtc/trunk/webrtc/modules/audio_device/audio_device.gypi +new file mode 100644 +index 000000000000..a0c4de18cdcf +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_device/audio_device.gypi +@@ -0,0 +1,316 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'audio_device', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'webrtc_utility', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'include_dirs': [ ++ '.', ++ '../include', ++ 'include', ++ 'dummy', # Contains dummy audio device implementations. ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ '../include', ++ 'include', ++ ], ++ }, ++ # TODO(xians): Rename files to e.g. *_linux.{ext}, remove sources in conditions section ++ 'sources': [ ++ 'include/audio_device.h', ++ 'include/audio_device_defines.h', ++ 'audio_device_buffer.cc', ++ 'audio_device_buffer.h', ++ 'audio_device_generic.cc', ++ 'audio_device_generic.h', ++ 'audio_device_config.h', ++ 'dummy/audio_device_dummy.cc', ++ 'dummy/audio_device_dummy.h', ++ 'dummy/file_audio_device.cc', ++ 'dummy/file_audio_device.h', ++ 'fine_audio_buffer.cc', ++ 'fine_audio_buffer.h', ++ ], ++ 'conditions': [ ++ ['build_with_mozilla==1', { ++ 'cflags_mozilla': [ ++ '$(NSPR_CFLAGS)', ++ ], ++ }], ++ ['hardware_aec_ns==1', { ++ 'defines': [ ++ 'WEBRTC_HARDWARE_AEC_NS', ++ ], ++ }], ++ ['include_sndio_audio==1', { ++ 'include_dirs': [ ++ 'sndio', ++ ], ++ }], # include_sndio_audio==1 ++ ['OS=="linux" or include_alsa_audio==1 or include_pulse_audio==1', { ++ 'include_dirs': [ ++ 'linux', ++ ], ++ }], # OS=="linux" or include_alsa_audio==1 or include_pulse_audio==1 ++ ['OS=="ios"', { ++ 'include_dirs': [ ++ 'ios', ++ ], ++ }], # OS==ios ++ ['OS=="mac"', { ++ 'include_dirs': [ ++ 'mac', ++ ], ++ }], # OS==mac ++ ['OS=="win"', { ++ 'include_dirs': [ ++ 'win', ++ ], ++ }], ++ ['OS=="android"', { ++ 'include_dirs': [ ++ '/widget/android', ++ 'android', ++ ], ++ }], # OS==android ++ ['enable_android_opensl==1', { ++ 'include_dirs': [ ++ 'dom/media/systemservices', ++ 'opensl', ++ ], ++ }], # enable_android_opensl ++ ['include_internal_audio_device==0', { ++ 'defines': [ ++ 'WEBRTC_DUMMY_AUDIO_BUILD', ++ ], ++ }], ++ ['build_with_chromium==0', { ++ 'sources': [ ++ # Don't link these into Chrome since they contain static data. ++ 'dummy/file_audio_device_factory.cc', ++ 'dummy/file_audio_device_factory.h', ++ ], ++ }], ++ ['include_internal_audio_device==1', { ++ 'sources': [ ++ 'audio_device_impl.cc', ++ 'audio_device_impl.h', ++ # used externally for getUserMedia ++ 'opensl/single_rw_fifo.cc', ++ 'opensl/single_rw_fifo.h', ++ ], ++ 'conditions': [ ++ ['use_dummy_audio_file_devices==1', { ++ 'defines': [ ++ 'WEBRTC_DUMMY_FILE_DEVICES', ++ ], ++ }, { # use_dummy_audio_file_devices==0, so use a platform device. ++ 'conditions': [ ++ ['OS=="android"', { ++ 'sources': [ ++ 'android/audio_device_template.h', ++ 'android/audio_manager.cc', ++ 'android/audio_manager.h', ++ 'android/audio_record_jni.cc', ++ 'android/audio_record_jni.h', ++ 'android/audio_track_jni.cc', ++ 'android/audio_track_jni.h', ++ 'android/build_info.cc', ++ 'android/build_info.h', ++ 'android/opensles_common.cc', ++ 'android/opensles_common.h', ++ 'android/opensles_player.cc', ++ 'android/opensles_player.h', ++ 'android/opensles_recorder.cc', ++ 'android/opensles_recorder.h', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-llog', ++ '-lOpenSLES', ++ ], ++ }, ++ }], ++ ['OS=="linux"', { ++ 'link_settings': { ++ 'libraries': [ ++ '-ldl', ++ ], ++ }, ++ }], ++ ['include_sndio_audio==1', { ++ 'link_settings': { ++ 'libraries': [ ++ '-lsndio', ++ ], ++ }, ++ 'sources': [ ++ 'sndio/audio_device_sndio.cc', ++ 'sndio/audio_device_sndio.h', ++ ], ++ }], ++ ['include_alsa_audio==1', { ++ 'cflags_mozilla': [ ++ '$(MOZ_ALSA_CFLAGS)', ++ ], ++ 'defines': [ ++ 'LINUX_ALSA', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lX11', ++ ], ++ }, ++ 'sources': [ ++ 'linux/alsasymboltable_linux.cc', ++ 'linux/alsasymboltable_linux.h', ++ 'linux/audio_device_alsa_linux.cc', ++ 'linux/audio_device_alsa_linux.h', ++ 'linux/audio_mixer_manager_alsa_linux.cc', ++ 'linux/audio_mixer_manager_alsa_linux.h', ++ 'linux/latebindingsymboltable_linux.cc', ++ 'linux/latebindingsymboltable_linux.h', ++ ], ++ }], ++ ['include_pulse_audio==1', { ++ 'cflags_mozilla': [ ++ '$(MOZ_PULSEAUDIO_CFLAGS)', ++ ], ++ 'defines': [ ++ 'LINUX_PULSE', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lX11', ++ ], ++ }, ++ 'sources': [ ++ 'linux/audio_device_pulse_linux.cc', ++ 'linux/audio_device_pulse_linux.h', ++ 'linux/audio_mixer_manager_pulse_linux.cc', ++ 'linux/audio_mixer_manager_pulse_linux.h', ++ 'linux/latebindingsymboltable_linux.cc', ++ 'linux/latebindingsymboltable_linux.h', ++ 'linux/pulseaudiosymboltable_linux.cc', ++ 'linux/pulseaudiosymboltable_linux.h', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'sources': [ ++ 'mac/audio_device_mac.cc', ++ 'mac/audio_device_mac.h', ++ 'mac/audio_mixer_manager_mac.cc', ++ 'mac/audio_mixer_manager_mac.h', ++ 'mac/portaudio/pa_memorybarrier.h', ++ 'mac/portaudio/pa_ringbuffer.c', ++ 'mac/portaudio/pa_ringbuffer.h', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '$(SDKROOT)/System/Library/Frameworks/AudioToolbox.framework', ++ '$(SDKROOT)/System/Library/Frameworks/CoreAudio.framework', ++ ], ++ }, ++ }], ++ ['OS=="ios"', { ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base', ++ '<(webrtc_root)/sdk/sdk.gyp:rtc_sdk_common_objc', ++ ], ++ 'export_dependent_settings': [ ++ '<(webrtc_root)/sdk/sdk.gyp:rtc_sdk_common_objc', ++ ], ++ 'sources': [ ++ 'ios/audio_device_ios.h', ++ 'ios/audio_device_ios.mm', ++ 'ios/audio_device_not_implemented_ios.mm', ++ 'ios/audio_session_observer.h', ++ 'ios/objc/RTCAudioSession+Configuration.mm', ++ 'ios/objc/RTCAudioSession+Private.h', ++ 'ios/objc/RTCAudioSession.h', ++ 'ios/objc/RTCAudioSession.mm', ++ 'ios/objc/RTCAudioSessionConfiguration.h', ++ 'ios/objc/RTCAudioSessionConfiguration.m', ++ 'ios/objc/RTCAudioSessionDelegateAdapter.h', ++ 'ios/objc/RTCAudioSessionDelegateAdapter.mm', ++ 'ios/voice_processing_audio_unit.h', ++ 'ios/voice_processing_audio_unit.mm', ++ ], ++ 'xcode_settings': { ++ 'CLANG_ENABLE_OBJC_ARC': 'YES', ++ }, ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework AudioToolbox', ++ '-framework AVFoundation', ++ '-framework Foundation', ++ '-framework UIKit', ++ ], ++ }, ++ }, ++ }], ++ ['OS=="win"', { ++ 'sources': [ ++ 'win/audio_device_core_win.cc', ++ 'win/audio_device_core_win.h', ++ 'win/audio_device_wave_win.cc', ++ 'win/audio_device_wave_win.h', ++ 'win/audio_mixer_manager_win.cc', ++ 'win/audio_mixer_manager_win.h', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ # Required for the built-in WASAPI AEC. ++ '-ldmoguids.lib', ++ '-lwmcodecdspuuid.lib', ++ '-lamstrmid.lib', ++ '-lmsdmo.lib', ++ ], ++ }, ++ }], ++ ['OS=="win" and clang==1', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Disable warnings failing when compiling with Clang on Windows. ++ # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 ++ '-Wno-bool-conversion', ++ '-Wno-delete-non-virtual-dtor', ++ '-Wno-logical-op-parentheses', ++ '-Wno-microsoft-extra-qualification', ++ '-Wno-microsoft-goto', ++ '-Wno-missing-braces', ++ '-Wno-parentheses-equality', ++ '-Wno-reorder', ++ '-Wno-shift-overflow', ++ '-Wno-tautological-compare', ++ '-Wno-unused-private-field', ++ ], ++ }, ++ }, ++ }], ++ ], # conditions (for non-dummy devices) ++ }], # use_dummy_audio_file_devices check ++ ], # conditions ++ }], # include_internal_audio_device==1 ++ ], # conditions ++ }, ++ ], ++} ++ +diff --git media/webrtc/trunk/webrtc/modules/audio_mixer/audio_mixer.gypi media/webrtc/trunk/webrtc/modules/audio_mixer/audio_mixer.gypi +new file mode 100644 +index 000000000000..570129019115 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_mixer/audio_mixer.gypi +@@ -0,0 +1,33 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'audio_mixer', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audio_processing', ++ 'webrtc_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/voice_engine/voice_engine.gyp:level_indicator', ++ ], ++ 'sources': [ ++ 'audio_frame_manipulator.cc', ++ 'audio_frame_manipulator.h', ++ 'audio_mixer.h', ++ 'audio_mixer_impl.cc', ++ 'audio_mixer_impl.h', ++ 'default_output_rate_calculator.cc', ++ 'default_output_rate_calculator.h', ++ 'output_rate_calculator.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_processing/BUILD.gn media/webrtc/trunk/webrtc/modules/audio_processing/BUILD.gn +index 2dcf155935bc..4178a08a761a 100644 +--- media/webrtc/trunk/webrtc/modules/audio_processing/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/audio_processing/BUILD.gn +@@ -7,9 +7,7 @@ + # be found in the AUTHORS file in the root of the source tree. + + import("//build/config/arm.gni") +-if (!build_with_mozilla) { +- import("//third_party/protobuf/proto_library.gni") +-} ++import("//third_party/protobuf/proto_library.gni") + import("../../build/webrtc.gni") + + declare_args() { +diff --git media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing.gypi media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing.gypi +new file mode 100644 +index 000000000000..17bf5622b806 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing.gypi +@@ -0,0 +1,351 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../build/common.gypi', ++ ], ++ 'variables': { ++ 'shared_generated_dir': '<(SHARED_INTERMEDIATE_DIR)/audio_processing/asm_offsets', ++ 'apm_debug_dump%': 1, ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'audio_processing', ++ 'type': 'static_library', ++ 'variables': { ++ # Outputs some low-level debug files. ++ 'agc_debug_dump%': 0, ++ ++ # Disables the usual mode where we trust the reported system delay ++ # values the AEC receives. The corresponding define is set appropriately ++ # in the code, but it can be force-enabled here for testing. ++ 'aec_untrusted_delay_for_testing%': 0, ++ }, ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++# '<(webrtc_root)/modules/modules.gyp:isac', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'aec/aec_core.cc', ++ 'aec/aec_core.h', ++ 'aec/aec_core_optimized_methods.h', ++ 'aec/aec_resampler.cc', ++ 'aec/aec_resampler.h', ++ 'aec/echo_cancellation.cc', ++ 'aec/echo_cancellation.h', ++ 'aec3/aec3_constants.h', ++ 'aec3/block_framer.cc', ++ 'aec3/block_framer.h', ++ 'aec3/block_processor.cc', ++ 'aec3/block_processor.h', ++ 'aec3/cascaded_biquad_filter.cc', ++ 'aec3/cascaded_biquad_filter.h', ++ 'aec3/echo_canceller3.cc', ++ 'aec3/echo_canceller3.h', ++ 'aec3/frame_blocker.cc', ++ 'aec3/frame_blocker.h', ++ 'aecm/aecm_core.cc', ++ 'aecm/aecm_core.h', ++ 'aecm/echo_control_mobile.cc', ++ 'aecm/echo_control_mobile.h', ++ 'agc/agc.cc', ++ 'agc/agc.h', ++ 'agc/agc_manager_direct.cc', ++ 'agc/agc_manager_direct.h', ++ 'agc/gain_map_internal.h', ++ 'agc/legacy/analog_agc.c', ++ 'agc/legacy/analog_agc.h', ++ 'agc/legacy/digital_agc.c', ++ 'agc/legacy/digital_agc.h', ++ 'agc/legacy/gain_control.h', ++ 'agc/loudness_histogram.cc', ++ 'agc/loudness_histogram.h', ++ 'agc/legacy/gain_control.h', ++ 'agc/utility.cc', ++ 'agc/utility.h', ++ 'audio_buffer.cc', ++ 'audio_buffer.h', ++ 'audio_processing_impl.cc', ++ 'audio_processing_impl.h', ++ 'beamformer/array_util.cc', ++ 'beamformer/array_util.h', ++ 'beamformer/complex_matrix.h', ++ 'beamformer/covariance_matrix_generator.cc', ++ 'beamformer/covariance_matrix_generator.h', ++ 'beamformer/matrix.h', ++ 'beamformer/nonlinear_beamformer.cc', ++ 'beamformer/nonlinear_beamformer.h', ++ 'common.h', ++ 'echo_cancellation_impl.cc', ++ 'echo_cancellation_impl.h', ++ 'echo_control_mobile_impl.cc', ++ 'echo_control_mobile_impl.h', ++ 'echo_detector/circular_buffer.cc', ++ 'echo_detector/circular_buffer.h', ++ 'echo_detector/mean_variance_estimator.cc', ++ 'echo_detector/mean_variance_estimator.h', ++ 'echo_detector/moving_max.cc', ++ 'echo_detector/moving_max.h', ++ 'echo_detector/normalized_covariance_estimator.cc', ++ 'echo_detector/normalized_covariance_estimator.h', ++ 'gain_control_for_experimental_agc.cc', ++ 'gain_control_for_experimental_agc.h', ++ 'gain_control_impl.cc', ++ 'gain_control_impl.h', ++ 'include/audio_processing.cc', ++ 'include/audio_processing.h', ++ 'include/config.cc', ++ 'include/config.h', ++ 'level_controller/biquad_filter.cc', ++ 'level_controller/biquad_filter.h', ++ 'level_controller/down_sampler.cc', ++ 'level_controller/down_sampler.h', ++ 'level_controller/gain_applier.cc', ++ 'level_controller/gain_applier.h', ++ 'level_controller/gain_selector.cc', ++ 'level_controller/gain_selector.h', ++ 'level_controller/lc_constants.h', ++ 'level_controller/level_controller.cc', ++ 'level_controller/level_controller.h', ++ 'level_controller/noise_spectrum_estimator.cc', ++ 'level_controller/noise_spectrum_estimator.h', ++ 'level_controller/noise_level_estimator.cc', ++ 'level_controller/noise_level_estimator.h', ++ 'level_controller/peak_level_estimator.cc', ++ 'level_controller/peak_level_estimator.h', ++ 'level_controller/saturating_gain_estimator.cc', ++ 'level_controller/saturating_gain_estimator.h', ++ 'level_controller/signal_classifier.cc', ++ 'level_controller/signal_classifier.h', ++ 'level_estimator_impl.cc', ++ 'level_estimator_impl.h', ++ 'logging/apm_data_dumper.cc', ++ 'logging/apm_data_dumper.h', ++ 'low_cut_filter.cc', ++ 'low_cut_filter.h', ++ 'noise_suppression_impl.cc', ++ 'noise_suppression_impl.h', ++ 'render_queue_item_verifier.h', ++ 'residual_echo_detector.cc', ++ 'residual_echo_detector.h', ++ 'rms_level.cc', ++ 'rms_level.h', ++ 'splitting_filter.cc', ++ 'splitting_filter.h', ++ 'three_band_filter_bank.cc', ++ 'three_band_filter_bank.h', ++ 'transient/common.h', ++ 'transient/daubechies_8_wavelet_coeffs.h', ++ 'transient/dyadic_decimator.h', ++ 'transient/moving_moments.cc', ++ 'transient/moving_moments.h', ++ 'transient/transient_detector.cc', ++ 'transient/transient_detector.h', ++ 'transient/transient_suppressor.cc', ++ 'transient/transient_suppressor.h', ++ 'transient/wpd_node.cc', ++ 'transient/wpd_node.h', ++ 'transient/wpd_tree.cc', ++ 'transient/wpd_tree.h', ++ 'typing_detection.cc', ++ 'typing_detection.h', ++ 'utility/block_mean_calculator.cc', ++ 'utility/block_mean_calculator.h', ++ 'utility/delay_estimator.cc', ++ 'utility/delay_estimator.h', ++ 'utility/delay_estimator_internal.h', ++ 'utility/delay_estimator_wrapper.cc', ++ 'utility/delay_estimator_wrapper.h', ++ 'utility/ooura_fft.cc', ++ 'utility/ooura_fft.h', ++ 'utility/ooura_fft_tables_common.h', ++ 'vad/common.h', ++ 'vad/gmm.cc', ++ 'vad/gmm.h', ++ 'vad/noise_gmm_tables.h', ++ 'vad/pitch_based_vad.cc', ++ 'vad/pitch_based_vad.h', ++ 'vad/pitch_internal.cc', ++ 'vad/pitch_internal.h', ++ 'vad/pole_zero_filter.cc', ++ 'vad/pole_zero_filter.h', ++ 'vad/standalone_vad.cc', ++ 'vad/standalone_vad.h', ++ 'vad/vad_audio_proc.cc', ++ 'vad/vad_audio_proc.h', ++ 'vad/vad_audio_proc_internal.h', ++ 'vad/vad_circular_buffer.cc', ++ 'vad/vad_circular_buffer.h', ++ 'vad/voice_activity_detector.cc', ++ 'vad/voice_activity_detector.h', ++ 'vad/voice_gmm_tables.h', ++ 'voice_detection_impl.cc', ++ 'voice_detection_impl.h', ++ ], ++ 'conditions': [ ++ ['apm_debug_dump==1', { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=1',], ++ }, { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=0',], ++ }], ++ ['aec_untrusted_delay_for_testing==1', { ++ 'defines': ['WEBRTC_UNTRUSTED_DELAY',], ++ }], ++ ['agc_debug_dump==1', { ++ 'defines': ['WEBRTC_AGC_DEBUG_DUMP',], ++ }], ++ ['enable_protobuf==1', { ++ 'dependencies': ['audioproc_debug_proto'], ++ 'defines': ['WEBRTC_AUDIOPROC_DEBUG_DUMP'], ++ }], ++ ['enable_intelligibility_enhancer==1', { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=1',], ++ 'sources': [ ++ 'intelligibility/intelligibility_enhancer.cc', ++ 'intelligibility/intelligibility_enhancer.h', ++ 'intelligibility/intelligibility_utils.cc', ++ 'intelligibility/intelligibility_utils.h', ++ ], ++ }, { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=0',], ++ }], ++ ['prefer_fixed_point==1', { ++ 'defines': ['WEBRTC_NS_FIXED'], ++ 'sources': [ ++ 'ns/noise_suppression_x.h', ++ 'ns/noise_suppression_x.c', ++ 'ns/nsx_core.c', ++ 'ns/nsx_core.h', ++ 'ns/nsx_defines.h', ++ ], ++ 'conditions': [ ++ ['target_arch=="mipsel" and mips_arch_variant!="r6"', { ++ 'sources': [ ++ 'ns/nsx_core_mips.c', ++ ], ++ }, { ++ 'sources': [ ++ 'ns/nsx_core_c.c', ++ ], ++ }], ++ ], ++ }, { ++ 'defines': ['WEBRTC_NS_FLOAT'], ++ 'sources': [ ++ 'ns/defines.h', ++ 'ns/noise_suppression.h', ++ 'ns/noise_suppression.c', ++ 'ns/ns_core.c', ++ 'ns/ns_core.h', ++ 'ns/windows_private.h', ++ ], ++ }], ++ ['target_arch=="ia32" or target_arch=="x64"', { ++ 'dependencies': ['audio_processing_sse2',], ++ }], ++ ['build_with_neon==1', { ++ 'dependencies': ['audio_processing_neon',], ++ }], ++ ['target_arch=="mipsel" and mips_arch_variant!="r6"', { ++ 'sources': [ ++ 'aecm/aecm_core_mips.cc', ++ ], ++ 'conditions': [ ++ ['mips_float_abi=="hard"', { ++ 'sources': [ ++ 'aec/aec_core_mips.cc', ++ 'aec/aec_rdft_mips.cc', ++ 'utility/ooura_fft_mips.cc', ++ ], ++ }], ++ ], ++ }, { ++ 'sources': [ ++ 'aecm/aecm_core_c.cc', ++ ], ++ }], ++ ], ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], ++ 'conditions': [ ++ ['enable_protobuf==1', { ++ 'targets': [ ++ { ++ 'target_name': 'audioproc_debug_proto', ++ 'type': 'static_library', ++ 'sources': ['debug.proto',], ++ 'variables': { ++ 'proto_in_dir': '.', ++ # Workaround to protect against gyp's pathname relativization when ++ # this file is included by modules.gyp. ++ 'proto_out_protected': 'webrtc/modules/audio_processing', ++ 'proto_out_dir': '<(proto_out_protected)', ++ }, ++ 'includes': ['../../build/protoc.gypi',], ++ }, ++ ], ++ }], ++ ['target_arch=="ia32" or target_arch=="x64"', { ++ 'targets': [ ++ { ++ 'target_name': 'audio_processing_sse2', ++ 'type': 'static_library', ++ 'sources': [ ++ 'aec/aec_core_sse2.cc', ++ 'utility/ooura_fft_sse2.cc', ++ 'utility/ooura_fft_tables_neon_sse2.h', ++ ], ++ 'conditions': [ ++ ['apm_debug_dump==1', { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=1',], ++ }, { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=0',], ++ }], ++ ['os_posix==1', { ++ 'cflags': [ '-msse2', ], ++ 'cflags_mozilla': [ '-msse2', ], ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ '-msse2', ], ++ }, ++ }], ++ ], ++ }, ++ ], ++ }], ++ ['build_with_neon==1', { ++ 'targets': [{ ++ 'target_name': 'audio_processing_neon', ++ 'type': 'static_library', ++ 'includes': ['../../build/arm_neon.gypi',], ++ 'dependencies': [ ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ ], ++ 'sources': [ ++ 'aec/aec_core_neon.cc', ++ 'aecm/aecm_core_neon.cc', ++ 'ns/nsx_core_neon.c', ++ 'utility/ooura_fft_neon.cc', ++ ], ++ 'conditions': [ ++ ['apm_debug_dump==1', { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=1',], ++ }], ++ ['apm_debug_dump==0', { ++ 'defines': ['WEBRTC_APM_DEBUG_DUMP=0',], ++ }], ++ ], ++ }], ++ }], ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing_tests.gypi media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing_tests.gypi +new file mode 100644 +index 000000000000..d68fed3ff194 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/audio_processing/audio_processing_tests.gypi +@@ -0,0 +1,166 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'audioproc_test_utils', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ ], ++ 'sources': [ ++ 'test/audio_buffer_tools.cc', ++ 'test/audio_buffer_tools.h', ++ 'test/test_utils.cc', ++ 'test/test_utils.h', ++ ], ++ }, ++ { ++ 'target_name': 'transient_suppression_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ '<(webrtc_root)/modules/modules.gyp:audio_processing', ++ ], ++ 'sources': [ ++ 'transient/transient_suppression_test.cc', ++ 'transient/file_utils.cc', ++ 'transient/file_utils.h', ++ ], ++ }, # transient_suppression_test ++ { ++ 'target_name': 'click_annotate', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:audio_processing', ++ ], ++ 'sources': [ ++ 'transient/click_annotate.cc', ++ 'transient/file_utils.cc', ++ 'transient/file_utils.h', ++ ], ++ }, # click_annotate ++ { ++ 'target_name': 'nonlinear_beamformer_test', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'audioproc_test_utils', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/modules/modules.gyp:audio_processing', ++ ], ++ 'sources': [ ++ 'beamformer/nonlinear_beamformer_test.cc', ++ ], ++ }, # nonlinear_beamformer_test ++ ], ++ 'conditions': [ ++ ['enable_intelligibility_enhancer==1', { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=1',], ++ 'targets': [ ++ { ++ 'target_name': 'intelligibility_proc', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'audioproc_test_utils', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/modules/modules.gyp:audio_processing', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ ], ++ 'sources': [ ++ 'intelligibility/test/intelligibility_proc.cc', ++ ], ++ }, ++ ], ++ }, { ++ 'defines': ['WEBRTC_INTELLIGIBILITY_ENHANCER=0',], ++ }], ++ ['enable_protobuf==1', { ++ 'targets': [ ++ { ++ 'target_name': 'audioproc_unittest_proto', ++ 'type': 'static_library', ++ 'sources': [ 'test/unittest.proto', ], ++ 'variables': { ++ 'proto_in_dir': 'test', ++ # Workaround to protect against gyp's pathname relativization when ++ # this file is included by modules.gyp. ++ 'proto_out_protected': 'webrtc/modules/audio_processing', ++ 'proto_out_dir': '<(proto_out_protected)', ++ }, ++ 'includes': [ '../../build/protoc.gypi', ], ++ }, ++ { ++ 'target_name': 'audioproc_protobuf_utils', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audioproc_debug_proto', ++ ], ++ 'sources': [ ++ 'test/protobuf_utils.cc', ++ 'test/protobuf_utils.h', ++ ], ++ }, ++ { ++ 'target_name': 'audioproc', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'audio_processing', ++ 'audioproc_debug_proto', ++ 'audioproc_test_utils', ++ 'audioproc_protobuf_utils', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ ], ++ 'sources': [ 'test/process_test.cc', ], ++ }, ++ { ++ 'target_name': 'audioproc_f', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'audio_processing', ++ 'audioproc_debug_proto', ++ 'audioproc_test_utils', ++ 'audioproc_protobuf_utils', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ ], ++ 'sources': [ ++ 'test/audio_processing_simulator.cc', ++ 'test/audio_processing_simulator.h', ++ 'test/aec_dump_based_simulator.cc', ++ 'test/aec_dump_based_simulator.h', ++ 'test/wav_based_simulator.cc', ++ 'test/wav_based_simulator.h', ++ 'test/audioproc_float.cc', ++ ], ++ }, ++ { ++ 'target_name': 'unpack_aecdump', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'audioproc_debug_proto', ++ 'audioproc_test_utils', ++ 'audioproc_protobuf_utils', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ ], ++ 'sources': [ 'test/unpack.cc', ], ++ }, ++ ], ++ }], ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/bitrate_controller/bitrate_controller.gypi media/webrtc/trunk/webrtc/modules/bitrate_controller/bitrate_controller.gypi +new file mode 100644 +index 000000000000..82121cdddf88 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/bitrate_controller/bitrate_controller.gypi +@@ -0,0 +1,35 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'bitrate_controller', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'bitrate_controller_impl.cc', ++ 'bitrate_controller_impl.h', ++ 'include/bitrate_controller.h', ++ 'send_side_bandwidth_estimation.cc', ++ 'send_side_bandwidth_estimation.h', ++ ], ++ 'conditions': [ ++ ['enable_bwe_test_logging==1', { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1' ], ++ }, { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0' ], ++ }], ++ ], ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/congestion_controller/BUILD.gn media/webrtc/trunk/webrtc/modules/congestion_controller/BUILD.gn +index 34843a313177..16794a16fe93 100644 +--- media/webrtc/trunk/webrtc/modules/congestion_controller/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/congestion_controller/BUILD.gn +@@ -44,6 +44,7 @@ rtc_static_library("congestion_controller") { + + deps = [ + "../..:webrtc_common", ++ "../../base:rtc_base", + "../../base:rtc_base_approved", + "../../base:rtc_numerics", + "../../system_wrappers", +@@ -53,10 +54,4 @@ rtc_static_library("congestion_controller") { + "../rtp_rtcp", + "../utility", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", +- ] +- } + } +diff --git media/webrtc/trunk/webrtc/modules/congestion_controller/congestion_controller.gypi media/webrtc/trunk/webrtc/modules/congestion_controller/congestion_controller.gypi +new file mode 100644 +index 000000000000..83064eb7dc97 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/congestion_controller/congestion_controller.gypi +@@ -0,0 +1,40 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'congestion_controller', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:bitrate_controller', ++ '<(webrtc_root)/modules/modules.gyp:paced_sender', ++ ], ++ 'sources': [ ++ 'congestion_controller.cc', ++ 'delay_based_bwe.cc', ++ 'delay_based_bwe.h', ++ 'include/congestion_controller.h', ++ 'median_slope_estimator.cc', ++ 'median_slope_estimator.h', ++ 'probe_bitrate_estimator.cc', ++ 'probe_bitrate_estimator.h', ++ 'probe_controller.cc', ++ 'probe_controller.h', ++ 'probing_interval_estimator.cc', ++ 'probing_interval_estimator.h', ++ 'transport_feedback_adapter.cc', ++ 'transport_feedback_adapter.h', ++ 'trendline_estimator.cc', ++ 'trendline_estimator.h', ++ ], ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn +index ed12a1521eb0..4920611bec6d 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/BUILD.gn +@@ -28,13 +28,8 @@ rtc_static_library("primitives") { + + deps = [ + "../..:webrtc_common", ++ "../../base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806. + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806. +- ] +- } + } + + if (rtc_include_tests) { +@@ -180,23 +175,6 @@ rtc_static_library("desktop_capture") { + "window_capturer_win.cc", + ] + +- if (build_with_mozilla) { +- defines = [ "MULTI_MONITOR_SCREENSHARE" ] +- sources += [ +- "desktop_device_info.cc", +- "desktop_device_info.h", +- "app_capturer_win.cc", +- "win/desktop_device_info_win.cc", +- "win/win_shared.cc", +- ] +- +- if (is_mac) { +- sources += [ +- "app_capturer_mac.mm", +- ] +- } +- } +- + if (use_x11) { + sources += [ + "mouse_cursor_monitor_x11.cc", +@@ -209,18 +187,6 @@ rtc_static_library("desktop_capture") { + "x11/x_server_pixel_buffer.cc", + "x11/x_server_pixel_buffer.h", + ] +- +- if (build_with_mozilla) { +- sources += [ +- "app_capturer_x11.cc", +- "app_capturer_x11.h", +- "x11/desktop_device_info_x11.cc", +- "x11/desktop_device_info_x11.h", +- "x11/shared_x_util.cc", +- "x11/shared_x_util.h", +- ] +- } +- + configs += [ "//build/config/linux:x11" ] + } + +@@ -238,12 +204,6 @@ rtc_static_library("desktop_capture") { + "IOKit.framework", + "OpenGL.framework", + ] +- +- if (build_with_mozilla) { +- sources += [ +- "mac/desktop_device_info_mac.mm", +- ] +- } + } + + if (is_win) { +@@ -256,28 +216,14 @@ rtc_static_library("desktop_capture") { + deps = [ + ":primitives", + "../..:webrtc_common", ++ "../../base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806. + "../../system_wrappers", ++ "//third_party/libyuv", + ] + +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", # TODO(kjellander): Cleanup in bugs.webrtc.org/3806. +- ] +- } +- +- if (rtc_build_libyuv) { +- deps += [ "$rtc_libyuv_dir" ] +- } else { +- include_dirs = [ "$rtc_libyuv_dir/include" ] +- } +- + if (use_desktop_capture_differ_sse2) { + deps += [ ":desktop_capture_differ_sse2" ] + } +- +- if (build_with_mozilla) { +- deps += ["../../base:rtc_base_approved"] +- } + } + + if (use_desktop_capture_differ_sse2) { +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture.gypi media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture.gypi +new file mode 100644 +index 000000000000..c7d6212ba3a9 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/desktop_capture.gypi +@@ -0,0 +1,300 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'variables': { ++ 'multi_monitor_screenshare%' : 1, ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'primitives', ++ 'type': 'static_library', ++ 'sources': [ ++ 'desktop_capture_types.h', ++ 'desktop_frame.cc', ++ 'desktop_frame.h', ++ 'desktop_geometry.cc', ++ 'desktop_geometry.h', ++ 'desktop_region.cc', ++ 'desktop_region.h', ++ ], ++ }, ++ { ++ 'target_name': 'desktop_capture', ++ 'type': 'static_library', ++ 'dependencies': [ ++ ':primitives', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ ], ++ 'include_dirs': [ ++ '../../../../../libyuv/libyuv/include/', ++ ], ++ 'sources': [ ++ 'cropped_desktop_frame.cc', ++ 'cropped_desktop_frame.h', ++ 'cropping_window_capturer.cc', ++ 'cropping_window_capturer.h', ++ 'cropping_window_capturer_win.cc', ++ 'desktop_and_cursor_composer.cc', ++ 'desktop_and_cursor_composer.h', ++ 'desktop_capture_options.h', ++ 'desktop_capture_options.cc', ++ 'desktop_capturer.h', ++ 'desktop_capturer_differ_wrapper.cc', ++ 'desktop_capturer_differ_wrapper.h', ++ 'desktop_frame_rotation.cc', ++ 'desktop_frame_rotation.h', ++# 'desktop_frame_win.cc', ++# 'desktop_frame_win.h', ++ 'differ_block.cc', ++ 'differ_block.h', ++# 'mac/desktop_configuration.h', ++# 'mac/desktop_configuration.mm', ++# 'mac/desktop_configuration_monitor.h', ++# 'mac/desktop_configuration_monitor.cc', ++# 'mac/full_screen_chrome_window_detector.cc', ++# 'mac/full_screen_chrome_window_detector.h', ++# 'mac/scoped_pixel_buffer_object.cc', ++# 'mac/scoped_pixel_buffer_object.h', ++# 'mac/window_list_utils.cc', ++# 'mac/window_list_utils.h', ++ 'mouse_cursor.cc', ++ 'mouse_cursor.h', ++ 'mouse_cursor_monitor.h', ++# 'mouse_cursor_monitor_mac.mm', ++# 'mouse_cursor_monitor_win.cc', ++ 'screen_capture_frame_queue.h', ++ 'screen_capturer.h', ++ 'screen_capturer_helper.cc', ++ 'screen_capturer_helper.h', ++# 'screen_capturer_mac.mm', ++# 'screen_capturer_win.cc', ++ 'shared_desktop_frame.cc', ++ 'shared_desktop_frame.h', ++ 'shared_memory.cc', ++ 'shared_memory.h', ++# 'win/cursor.cc', ++# 'win/cursor.h', ++# 'win/d3d_device.cc', ++# 'win/d3d_device.h', ++# 'win/desktop.cc', ++# 'win/desktop.h', ++# 'win/dxgi_adapter_duplicator.cc', ++# 'win/dxgi_adapter_duplicator.h', ++# 'win/dxgi_duplicator_controller.cc', ++# 'win/dxgi_duplicator_controller.h', ++# 'win/dxgi_output_duplicator.cc', ++# 'win/dxgi_output_duplicator.h', ++# 'win/dxgi_texture.cc', ++# 'win/dxgi_texture.h', ++# 'win/dxgi_texture_mapping.cc', ++# 'win/dxgi_texture_mapping.h', ++# 'win/dxgi_texture_staging.cc', ++# 'win/dxgi_texture_staging.h', ++# 'win/scoped_gdi_object.h', ++# 'win/scoped_thread_desktop.cc', ++# 'win/scoped_thread_desktop.h', ++# 'win/screen_capture_utils.cc', ++# 'win/screen_capture_utils.h', ++# 'win/screen_capturer_win_directx.cc', ++# 'win/screen_capturer_win_directx.h', ++# 'win/screen_capturer_win_gdi.cc', ++# 'win/screen_capturer_win_gdi.h', ++# 'win/screen_capturer_win_magnifier.cc', ++# 'win/screen_capturer_win_magnifier.h', ++# 'win/window_capture_utils.cc', ++# 'win/window_capture_utils.h', ++ 'window_capturer.h', ++# 'window_capturer_mac.mm', ++# 'window_capturer_win.cc', ++ "desktop_capturer.h", ++ "desktop_capturer.cc", ++ "desktop_device_info.h", ++ "desktop_device_info.cc", ++# "app_capturer.h", ++# "app_capturer.cc", ++ ], ++ 'conditions': [ ++ ['OS!="android"', { ++ 'sources': [ ++ '../../video_engine/desktop_capture_impl.cc', ++ '../../video_engine/desktop_capture_impl.h', ++ ], ++ }], ++ ['multi_monitor_screenshare != 0', { ++ 'defines': [ ++ 'MULTI_MONITOR_SCREENSHARE' ++ ], ++ }], ++ ['OS!="ios" and (target_arch=="ia32" or target_arch=="x64")', { ++ 'dependencies': [ ++ 'desktop_capture_differ_sse2', ++ ], ++ }], ++ ['use_x11==1', { ++ 'defines':[ ++ 'USE_X11', ++ ], ++ 'sources': [ ++ 'mouse_cursor_monitor_x11.cc', ++ 'screen_capturer_x11.cc', ++ 'window_capturer_x11.cc', ++ "x11/shared_x_util.h", ++ "x11/shared_x_util.cc", ++ 'x11/shared_x_display.h', ++ 'x11/shared_x_display.cc', ++ 'x11/x_error_trap.cc', ++ 'x11/x_error_trap.h', ++ 'x11/x_server_pixel_buffer.cc', ++ 'x11/x_server_pixel_buffer.h', ++ 'x11/desktop_device_info_x11.h', ++ 'x11/desktop_device_info_x11.cc', ++ 'app_capturer_x11.cc', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lX11', ++ '-lXcomposite', ++ '-lXdamage', ++ '-lXext', ++ '-lXfixes', ++ '-lXrender', ++ ], ++ }, ++ }], ++ ['OS!="win" and OS!="mac" and use_x11==0', { ++ 'sources': [ ++ "app_capturer_null.cc", ++ "desktop_device_info_null.cc", ++ 'mouse_cursor_monitor_null.cc', ++ 'screen_capturer_null.cc', ++ 'window_capturer_null.cc', ++ ], ++ }], ++ ['OS!="ios" ', { ++ 'sources': [ ++ 'differ_block.cc', ++ 'differ_block.h', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'sources': [ ++ "mac/desktop_configuration.h", ++ "mac/desktop_configuration.mm", ++ "mac/desktop_configuration_monitor.h", ++ "mac/desktop_configuration_monitor.cc", ++ "mac/full_screen_chrome_window_detector.cc", ++ "mac/full_screen_chrome_window_detector.h", ++ "mac/window_list_utils.cc", ++ "mac/window_list_utils.h", ++ "mac/scoped_pixel_buffer_object.cc", ++ "mac/scoped_pixel_buffer_object.h", ++ "mac/desktop_device_info_mac.h", ++ "mac/desktop_device_info_mac.mm", ++ "mouse_cursor_monitor_mac.mm", ++ "screen_capturer_mac.mm", ++ "window_capturer_mac.mm", ++ "app_capturer_mac.mm", ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '$(SDKROOT)/System/Library/Frameworks/AppKit.framework', ++ '$(SDKROOT)/System/Library/Frameworks/IOKit.framework', ++ '$(SDKROOT)/System/Library/Frameworks/OpenGL.framework', ++ ], ++ }, ++ }], ++ ['OS=="win"', { ++ 'sources': [ ++ "desktop_frame_win.cc", ++ "desktop_frame_win.h", ++ "mouse_cursor_monitor_win.cc", ++ "screen_capturer_win.cc", ++ "win/cursor.cc", ++ "win/cursor.h", ++# 'win/d3d_device.cc', ++# 'win/d3d_device.h', ++ "win/desktop.cc", ++ "win/desktop.h", ++# 'win/dxgi_adapter_duplicator.cc', ++# 'win/dxgi_adapter_duplicator.h', ++# 'win/dxgi_duplicator_controller.cc', ++# 'win/dxgi_duplicator_controller.h', ++# 'win/dxgi_output_duplicator.cc', ++# 'win/dxgi_output_duplicator.h', ++# 'win/dxgi_texture.cc', ++# 'win/dxgi_texture.h', ++# 'win/dxgi_texture_mapping.cc', ++# 'win/dxgi_texture_mapping.h', ++# 'win/dxgi_texture_staging.cc', ++# 'win/dxgi_texture_staging.h', ++ "win/scoped_gdi_object.h", ++ "win/scoped_thread_desktop.cc", ++ "win/scoped_thread_desktop.h", ++ "win/win_shared.h", ++ "win/win_shared.cc", ++ "win/desktop_device_info_win.h", ++ "win/desktop_device_info_win.cc", ++# "win/screen_capturer_win_directx.cc", ++# "win/screen_capturer_win_directx.h", ++ "win/screen_capturer_win_gdi.cc", ++ "win/screen_capturer_win_gdi.h", ++ "win/screen_capturer_win_magnifier.cc", ++ "win/screen_capturer_win_magnifier.h", ++ "win/screen_capture_utils.cc", ++ "win/screen_capture_utils.h", ++ "win/window_capture_utils.cc", ++ "win/window_capture_utils.h", ++ "window_capturer_win.cc", ++ "app_capturer_win.cc", ++ ], ++ }], ++ ], ++ 'all_dependent_settings': { ++ 'conditions': [ ++ ['OS=="win"', { ++ 'msvs_settings': { ++ 'VCLinkerTool': { ++ 'AdditionalDependencies': [ ++ 'd3d11.lib', ++ 'dxgi.lib', ++ ], ++ }, ++ }, ++ }], ++ ], ++ }, ++ }, ++ ], # targets ++ 'conditions': [ ++ ['OS!="ios" and (target_arch=="ia32" or target_arch=="x64")', { ++ 'targets': [ ++ { ++ # Have to be compiled as a separate target because it needs to be ++ # compiled with SSE2 enabled. ++ 'target_name': 'desktop_capture_differ_sse2', ++ 'type': 'static_library', ++ 'sources': [ ++ 'differ_vector_sse2.cc', ++ 'differ_vector_sse2.h', ++ ], ++ 'conditions': [ ++ ['os_posix==1', { ++ 'cflags': [ '-msse2', ], ++ 'cflags_mozilla': [ '-msse2', ], ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ '-msse2', ], ++ }, ++ }], ++ ], ++ }, ++ ], # targets ++ }], ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/desktop_capture/win/cursor.cc media/webrtc/trunk/webrtc/modules/desktop_capture/win/cursor.cc +index f27bbaf3eb77..304d5960d5ed 100644 +--- media/webrtc/trunk/webrtc/modules/desktop_capture/win/cursor.cc ++++ media/webrtc/trunk/webrtc/modules/desktop_capture/win/cursor.cc +@@ -42,6 +42,8 @@ namespace { + + #endif // !defined(WEBRTC_ARCH_LITTLE_ENDIAN) + ++const int kBytesPerPixel = DesktopFrame::kBytesPerPixel; ++ + // Pixel colors used when generating cursor outlines. + const uint32_t kPixelRgbaBlack = RGBA(0, 0, 0, 0xff); + const uint32_t kPixelRgbaWhite = RGBA(0xff, 0xff, 0xff, 0xff); +@@ -74,7 +76,7 @@ void AddCursorOutline(int width, int height, uint32_t* data) { + // Premultiplies RGB components of the pixel data in the given image by + // the corresponding alpha components. + void AlphaMul(uint32_t* data, int width, int height) { +- static_assert(sizeof(uint32_t) == DesktopFrame::kBytesPerPixel, ++ static_assert(sizeof(uint32_t) == kBytesPerPixel, + "size of uint32 should be the number of bytes per pixel"); + + for (uint32_t* data_end = data + width * height; data != data_end; ++data) { +@@ -142,7 +144,7 @@ MouseCursor* CreateMouseCursorFromHCursor(HDC dc, HCURSOR cursor) { + bmi.bV5Width = width; + bmi.bV5Height = -height; // request a top-down bitmap. + bmi.bV5Planes = 1; +- bmi.bV5BitCount = DesktopFrame::kBytesPerPixel * 8; ++ bmi.bV5BitCount = kBytesPerPixel * 8; + bmi.bV5Compression = BI_RGB; + bmi.bV5AlphaMask = 0xff000000; + bmi.bV5CSType = LCS_WINDOWS_COLOR_SPACE; +diff --git media/webrtc/trunk/webrtc/modules/media_file/media_file.gypi media/webrtc/trunk/webrtc/modules/media_file/media_file.gypi +new file mode 100644 +index 000000000000..94a99a22f1e2 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/media_file/media_file.gypi +@@ -0,0 +1,31 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'media_file', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ ], ++ 'sources': [ ++ 'media_file.h', ++ 'media_file_defines.h', ++ 'media_file_impl.cc', ++ 'media_file_impl.h', ++ 'media_file_utility.cc', ++ 'media_file_utility.h', ++ ], # source ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/modules.gyp media/webrtc/trunk/webrtc/modules/modules.gyp +new file mode 100644 +index 000000000000..3037b5604edc +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/modules.gyp +@@ -0,0 +1,31 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ 'audio_coding/audio_coding.gypi', ++ 'audio_conference_mixer/audio_conference_mixer.gypi', ++ 'audio_device/audio_device.gypi', ++ 'audio_mixer/audio_mixer.gypi', ++ 'audio_processing/audio_processing.gypi', ++ 'bitrate_controller/bitrate_controller.gypi', ++ 'congestion_controller/congestion_controller.gypi', ++ 'desktop_capture/desktop_capture.gypi', ++ 'media_file/media_file.gypi', ++ 'pacing/pacing.gypi', ++ 'remote_bitrate_estimator/remote_bitrate_estimator.gypi', ++ 'rtp_rtcp/rtp_rtcp.gypi', ++ 'utility/utility.gypi', ++ 'video_coding/codecs/h264/h264.gypi', ++ 'video_coding/codecs/i420/i420.gypi', ++ 'video_coding/video_coding.gypi', ++ 'video_capture/video_capture.gypi', ++ 'video_processing/video_processing.gypi', ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/pacing/pacing.gypi media/webrtc/trunk/webrtc/modules/pacing/pacing.gypi +new file mode 100644 +index 000000000000..d74f9cae0a7e +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/pacing/pacing.gypi +@@ -0,0 +1,30 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'paced_sender', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/modules/modules.gyp:bitrate_controller', ++ '<(webrtc_root)/modules/modules.gyp:rtp_rtcp', ++ ], ++ 'sources': [ ++ 'alr_detector.cc', ++ 'bitrate_prober.cc', ++ 'bitrate_prober.h', ++ 'paced_sender.cc', ++ 'paced_sender.h', ++ 'packet_router.cc', ++ 'packet_router.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/BUILD.gn media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/BUILD.gn +index cdd8db2bf608..7ddb0bb1e89f 100644 +--- media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/BUILD.gn +@@ -51,15 +51,10 @@ rtc_static_library("remote_bitrate_estimator") { + + deps = [ + "../..:webrtc_common", ++ "../../base:rtc_base", + "../../base:rtc_base_approved", + "../../system_wrappers", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", +- ] +- } + } + + if (rtc_include_tests) { +@@ -116,6 +111,7 @@ if (rtc_include_tests) { + ":remote_bitrate_estimator", + "../..:webrtc_common", + "../../base:gtest_prod", ++ "../../base:rtc_base", + "../../base:rtc_base_approved", + "../../system_wrappers", + "../../test:test_support", +@@ -127,12 +123,6 @@ if (rtc_include_tests) { + "//testing/gmock", + "//testing/gtest", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", +- ] +- } + } + + rtc_source_set("remote_bitrate_estimator_perf_tests") { +diff --git media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator.gypi media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator.gypi +new file mode 100644 +index 000000000000..a5b0ab86bf30 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/remote_bitrate_estimator/remote_bitrate_estimator.gypi +@@ -0,0 +1,118 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'remote_bitrate_estimator', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/bwe_defines.h', ++ 'include/remote_bitrate_estimator.h', ++ 'include/send_time_history.h', ++ 'aimd_rate_control.cc', ++ 'aimd_rate_control.h', ++ 'bwe_defines.cc', ++ 'inter_arrival.cc', ++ 'inter_arrival.h', ++ 'overuse_detector.cc', ++ 'overuse_detector.h', ++ 'overuse_estimator.cc', ++ 'overuse_estimator.h', ++ 'remote_bitrate_estimator_abs_send_time.cc', ++ 'remote_bitrate_estimator_abs_send_time.h', ++ 'remote_bitrate_estimator_single_stream.cc', ++ 'remote_bitrate_estimator_single_stream.h', ++ 'remote_estimator_proxy.cc', ++ 'remote_estimator_proxy.h', ++ 'send_time_history.cc', ++ 'test/bwe_test_logging.h', ++ ], # source ++ 'conditions': [ ++ ['enable_bwe_test_logging==1', { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1' ], ++ 'sources': [ ++ 'test/bwe_test_logging.cc' ++ ], ++ }, { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0' ], ++ }], ++ ], ++ }, ++ ], # targets ++ 'conditions': [ ++ ['include_tests==1', { ++ 'targets': [ ++ { ++ 'target_name': 'bwe_tools_util', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ 'rtp_rtcp', ++ ], ++ 'sources': [ ++ 'tools/bwe_rtp.cc', ++ 'tools/bwe_rtp.h', ++ ], ++ }, ++ { ++ 'target_name': 'bwe_rtp_to_text', ++ 'type': 'executable', ++ 'includes': [ ++ '../rtp_rtcp/rtp_rtcp.gypi', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:rtp_test_utils', ++ 'bwe_tools_util', ++ 'rtp_rtcp', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'include', ++ ], ++ }, ++ 'sources': [ ++ 'tools/rtp_to_text.cc', ++ ], # source ++ }, ++ { ++ 'target_name': 'bwe_rtp_play', ++ 'type': 'executable', ++ 'includes': [ ++ '../rtp_rtcp/rtp_rtcp.gypi', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:rtp_test_utils', ++ 'bwe_tools_util', ++ 'rtp_rtcp', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'include', ++ ], ++ }, ++ 'sources': [ ++ 'tools/bwe_rtp_play.cc', ++ ], # source ++ }, ++ ], ++ }], # include_tests==1 ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi media/webrtc/trunk/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi +new file mode 100644 +index 000000000000..6e3ebca9bc8f +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/rtp_rtcp/rtp_rtcp.gypi +@@ -0,0 +1,192 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'rtp_rtcp', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/modules/modules.gyp:remote_bitrate_estimator', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ # Common ++ 'include/fec_receiver.h', ++ 'include/flexfec_receiver.h', ++ 'include/flexfec_sender.h', ++ 'include/receive_statistics.h', ++ 'include/remote_ntp_time_estimator.h', ++ 'include/rtp_audio_level_observer.h', ++ 'include/rtp_header_parser.h', ++ 'include/rtp_payload_registry.h', ++ 'include/rtp_receiver.h', ++ 'include/rtp_rtcp.h', ++ 'include/rtp_rtcp_defines.h', ++ 'source/byte_io.h', ++ 'source/fec_private_tables_bursty.h', ++ 'source/fec_private_tables_random.h', ++ 'source/flexfec_header_reader_writer.cc', ++ 'source/flexfec_header_reader_writer.h', ++ 'source/flexfec_receiver.cc', ++ 'source/flexfec_sender.cc', ++ 'source/packet_loss_stats.cc', ++ 'source/packet_loss_stats.h', ++ 'source/playout_delay_oracle.cc', ++ 'source/playout_delay_oracle.h', ++ 'source/receive_statistics_impl.cc', ++ 'source/receive_statistics_impl.h', ++ 'source/remote_ntp_time_estimator.cc', ++ 'source/rtcp_packet.cc', ++ 'source/rtcp_packet.h', ++ 'source/rtcp_packet/app.cc', ++ 'source/rtcp_packet/app.h', ++ 'source/rtcp_packet/bye.cc', ++ 'source/rtcp_packet/bye.h', ++ 'source/rtcp_packet/common_header.cc', ++ 'source/rtcp_packet/common_header.h', ++ 'source/rtcp_packet/compound_packet.cc', ++ 'source/rtcp_packet/compound_packet.h', ++ 'source/rtcp_packet/dlrr.cc', ++ 'source/rtcp_packet/dlrr.h', ++ 'source/rtcp_packet/extended_jitter_report.cc', ++ 'source/rtcp_packet/extended_jitter_report.h', ++ 'source/rtcp_packet/extended_reports.cc', ++ 'source/rtcp_packet/extended_reports.h', ++ 'source/rtcp_packet/fir.cc', ++ 'source/rtcp_packet/fir.h', ++ 'source/rtcp_packet/nack.cc', ++ 'source/rtcp_packet/nack.h', ++ 'source/rtcp_packet/pli.cc', ++ 'source/rtcp_packet/pli.h', ++ 'source/rtcp_packet/psfb.cc', ++ 'source/rtcp_packet/psfb.h', ++ 'source/rtcp_packet/rapid_resync_request.cc', ++ 'source/rtcp_packet/rapid_resync_request.h', ++ 'source/rtcp_packet/receiver_report.cc', ++ 'source/rtcp_packet/receiver_report.h', ++ 'source/rtcp_packet/remb.cc', ++ 'source/rtcp_packet/remb.h', ++ 'source/rtcp_packet/report_block.cc', ++ 'source/rtcp_packet/report_block.h', ++ 'source/rtcp_packet/rpsi.cc', ++ 'source/rtcp_packet/rpsi.h', ++ 'source/rtcp_packet/rrtr.cc', ++ 'source/rtcp_packet/rrtr.h', ++ 'source/rtcp_packet/rtpfb.cc', ++ 'source/rtcp_packet/rtpfb.h', ++ 'source/rtcp_packet/sdes.cc', ++ 'source/rtcp_packet/sdes.h', ++ 'source/rtcp_packet/sender_report.cc', ++ 'source/rtcp_packet/sender_report.h', ++ 'source/rtcp_packet/sli.cc', ++ 'source/rtcp_packet/sli.h', ++ 'source/rtcp_packet/target_bitrate.cc', ++ 'source/rtcp_packet/target_bitrate.h', ++ 'source/rtcp_packet/tmmb_item.cc', ++ 'source/rtcp_packet/tmmb_item.h', ++ 'source/rtcp_packet/tmmbn.cc', ++ 'source/rtcp_packet/tmmbn.h', ++ 'source/rtcp_packet/tmmbr.cc', ++ 'source/rtcp_packet/tmmbr.h', ++ 'source/rtcp_packet/transport_feedback.cc', ++ 'source/rtcp_packet/transport_feedback.h', ++ 'source/rtcp_packet/voip_metric.cc', ++ 'source/rtcp_packet/voip_metric.h', ++ 'source/rtcp_receiver.cc', ++ 'source/rtcp_receiver.h', ++ 'source/rtcp_sender.cc', ++ 'source/rtcp_sender.h', ++ 'source/rtcp_utility.cc', ++ 'source/rtcp_utility.h', ++ 'source/rtp_header_extension.cc', ++ 'source/rtp_header_extension.h', ++ 'source/rtp_header_extensions.cc', ++ 'source/rtp_header_extensions.h', ++ 'source/rtp_header_parser.cc', ++ 'source/rtp_packet.cc', ++ 'source/rtp_packet.h', ++ 'source/rtp_packet_received.h', ++ 'source/rtp_packet_to_send.h', ++ 'source/rtp_receiver_impl.cc', ++ 'source/rtp_receiver_impl.h', ++ 'source/rtp_rtcp_config.h', ++ 'source/rtp_rtcp_impl.cc', ++ 'source/rtp_rtcp_impl.h', ++ 'source/rtp_sender.cc', ++ 'source/rtp_sender.h', ++ 'source/rtp_utility.cc', ++ 'source/rtp_utility.h', ++ 'source/ssrc_database.cc', ++ 'source/ssrc_database.h', ++ 'source/time_util.cc', ++ 'source/time_util.h', ++ 'source/tmmbr_help.cc', ++ 'source/tmmbr_help.h', ++ # Audio Files ++ 'source/dtmf_queue.cc', ++ 'source/dtmf_queue.h', ++ 'source/rtp_receiver_audio.cc', ++ 'source/rtp_receiver_audio.h', ++ 'source/rtp_sender_audio.cc', ++ 'source/rtp_sender_audio.h', ++ # Video Files ++ 'source/fec_private_tables_random.h', ++ 'source/fec_private_tables_bursty.h', ++ 'source/flexfec_header_reader_writer.cc', ++ 'source/flexfec_header_reader_writer.h', ++ 'source/forward_error_correction.cc', ++ 'source/forward_error_correction.h', ++ 'source/forward_error_correction_internal.cc', ++ 'source/forward_error_correction_internal.h', ++ 'source/rtp_packet_history.cc', ++ 'source/rtp_packet_history.h', ++ 'source/rtp_payload_registry.cc', ++ 'source/rtp_receiver_strategy.cc', ++ 'source/rtp_receiver_strategy.h', ++ 'source/rtp_receiver_video.cc', ++ 'source/rtp_receiver_video.h', ++ 'source/rtp_sender_video.cc', ++ 'source/rtp_sender_video.h', ++ 'source/video_codec_information.h', ++ 'source/rtp_format.cc', ++ 'source/rtp_format.h', ++ 'source/rtp_format_h264.cc', ++ 'source/rtp_format_h264.h', ++ 'source/rtp_format_vp8.cc', ++ 'source/rtp_format_vp8.h', ++ 'source/rtp_format_vp9.cc', ++ 'source/rtp_format_vp9.h', ++ 'source/rtp_format_video_generic.cc', ++ 'source/rtp_format_video_generic.h', ++ 'source/ulpfec_generator.cc', ++ 'source/ulpfec_generator.h', ++ 'source/ulpfec_header_reader_writer.cc', ++ 'source/ulpfec_header_reader_writer.h', ++ 'source/ulpfec_receiver_impl.cc', ++ 'source/ulpfec_receiver_impl.h', ++ 'source/video_codec_information.h', ++ 'source/vp8_partition_aggregator.cc', ++ 'source/vp8_partition_aggregator.h', ++ # Mocks ++ 'mocks/mock_rtp_rtcp.h', ++ 'source/mock/mock_rtp_payload_strategy.h', ++ ], # source ++ 'conditions': [ ++ ['enable_bwe_test_logging==1', { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=1' ], ++ }, { ++ 'defines': [ 'BWE_TEST_LOGGING_COMPILE_TIME_ENABLE=0' ], ++ }], ++ ], ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/rtp_rtcp/test/testFec/test_fec.gypi media/webrtc/trunk/webrtc/modules/rtp_rtcp/test/testFec/test_fec.gypi +new file mode 100644 +index 000000000000..2843894a5e48 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/rtp_rtcp/test/testFec/test_fec.gypi +@@ -0,0 +1,26 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ # The test below takes long to run, no need to add it to any bot. ++ 'target_name': 'test_packet_masks_metrics', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'rtp_rtcp', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ ], ++ 'sources': [ ++ 'test_packet_masks_metrics.cc', ++ 'average_residual_loss_xor_codes.h', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/utility/utility.gypi media/webrtc/trunk/webrtc/modules/utility/utility.gypi +new file mode 100644 +index 000000000000..3b8f8c22fa28 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/utility/utility.gypi +@@ -0,0 +1,37 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_utility', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'audio_coding_module', ++ 'media_file', ++ '<(webrtc_root)/base/base.gyp:rtc_task_queue', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/audio_frame_operations.h', ++ 'include/file_player.h', ++ 'include/file_recorder.h', ++ 'include/helpers_android.h', ++ 'include/helpers_ios.h', ++ 'include/jvm_android.h', ++ 'include/process_thread.h', ++ 'source/helpers_android.cc', ++ 'source/helpers_ios.mm', ++ 'source/jvm_android.cc', ++ 'source/process_thread_impl.cc', ++ 'source/process_thread_impl.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/video_capture/BUILD.gn media/webrtc/trunk/webrtc/modules/video_capture/BUILD.gn +index 0658ab74b3ff..6887552b583a 100644 +--- media/webrtc/trunk/webrtc/modules/video_capture/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/video_capture/BUILD.gn +@@ -124,18 +124,9 @@ if (!build_with_chromium) { + + libs = [ "Strmiids.lib" ] + +- if (!build_with_mozilla) { +- deps += [ "//third_party/winsdk_samples" ] +- } else { +- sources += [ +- "windows/BasePin.cpp", +- "windows/BaseFilter.cpp", +- "windows/BaseInputPin.cpp", +- "windows/MediaType.cpp", +- ] +- } ++ deps += [ "//third_party/winsdk_samples" ] + } +- if (!build_with_mozilla && (is_ios || is_mac)) { ++ if (is_ios || is_mac) { + sources = [ + "objc/device_info.h", + "objc/device_info.mm", +@@ -157,34 +148,6 @@ if (!build_with_chromium) { + ] + } + +- if (build_with_mozilla && is_android) { +- include_dirs = [ +- "/config/external/nspr", +- "/nsprpub/lib/ds", +- "/nsprpub/pr/include", +- ] +- +- sources = [ +- "android/device_info_android.cc", +- "android/video_capture_android.cc", +- ] +- } +- +- if (build_with_mozilla && is_mac) { +- sources = [ +- "mac/avfoundation/video_capture_avfoundation.h", +- "mac/avfoundation/video_capture_avfoundation.mm", +- "mac/avfoundation/video_capture_avfoundation_info.h", +- "mac/avfoundation/video_capture_avfoundation_info.mm", +- "mac/avfoundation/video_capture_avfoundation_info_objc.h", +- "mac/avfoundation/video_capture_avfoundation_info_objc.mm", +- "mac/avfoundation/video_capture_avfoundation_objc.h", +- "mac/avfoundation/video_capture_avfoundation_objc.mm", +- "mac/avfoundation/video_capture_avfoundation_utility.h", +- "mac/video_capture_mac.mm", +- ] +- } +- + all_dependent_configs = [ ":video_capture_internal_impl_config" ] + + if (!build_with_chromium && is_clang) { +diff --git media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +new file mode 100644 +index 000000000000..ebda305e08ca +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi +@@ -0,0 +1,200 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ # Note this library is missing an implementation for the video capture. ++ # Targets must link with either 'video_capture' or ++ # 'video_capture_module_internal_impl' depending on whether they want to ++ # use the internal capturer. ++ 'target_name': 'video_capture_module', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'webrtc_utility', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'cflags_mozilla': [ ++ '$(NSPR_CFLAGS)', ++ ], ++ 'sources': [ ++ 'device_info_impl.cc', ++ 'device_info_impl.h', ++ 'video_capture.h', ++ 'video_capture_config.h', ++ 'video_capture_defines.h', ++ 'video_capture_delay.h', ++ 'video_capture_factory.h', ++ 'video_capture_factory.cc', ++ 'video_capture_impl.cc', ++ 'video_capture_impl.h', ++ ], ++ }, ++ { ++ # Default video capture module implementation that only supports external ++ # capture. ++ 'target_name': 'video_capture', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'video_capture_module', ++ ], ++ 'cflags_mozilla': [ ++ '$(NSPR_CFLAGS)', ++ ], ++ 'sources': [ ++ 'external/device_info_external.cc', ++ 'external/video_capture_external.cc', ++ ], ++ }, ++ ], # targets ++ 'conditions': [ ++ ['build_with_chromium==0', { ++ 'targets': [ ++ { ++ 'target_name': 'video_capture_module_internal_impl', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'video_capture_module', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'cflags_mozilla': [ ++ '$(NSPR_CFLAGS)', ++ ], ++ 'conditions': [ ++ ['include_v4l2_video_capture==1', { ++ 'sources': [ ++ 'linux/device_info_linux.cc', ++ 'linux/device_info_linux.h', ++ 'linux/video_capture_linux.cc', ++ 'linux/video_capture_linux.h', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'sources': [ ++ 'mac/avfoundation/video_capture_avfoundation.h', ++ 'mac/avfoundation/video_capture_avfoundation.mm', ++ 'mac/avfoundation/video_capture_avfoundation_info.h', ++ 'mac/avfoundation/video_capture_avfoundation_info.mm', ++ 'mac/avfoundation/video_capture_avfoundation_info_objc.h', ++ 'mac/avfoundation/video_capture_avfoundation_info_objc.mm', ++ 'mac/avfoundation/video_capture_avfoundation_objc.h', ++ 'mac/avfoundation/video_capture_avfoundation_objc.mm', ++ 'mac/avfoundation/video_capture_avfoundation_utility.h', ++ 'mac/video_capture_mac.mm', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework Cocoa', ++ '-framework CoreVideo', ++ ], ++ }, ++ }, ++ }], # mac ++ ['OS=="win"', { ++ 'conditions': [ ++ ['build_with_mozilla==0', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/winsdk_samples/winsdk_samples.gyp:directshow_baseclasses', ++ ], ++ }], ++ ], ++ 'sources': [ ++ 'windows/device_info_ds.cc', ++ 'windows/device_info_ds.h', ++ 'windows/device_info_mf.cc', ++ 'windows/device_info_mf.h', ++ 'windows/help_functions_ds.cc', ++ 'windows/help_functions_ds.h', ++ 'windows/sink_filter_ds.cc', ++ 'windows/sink_filter_ds.h', ++ 'windows/video_capture_ds.cc', ++ 'windows/video_capture_ds.h', ++ 'windows/video_capture_factory_windows.cc', ++ 'windows/video_capture_mf.cc', ++ 'windows/video_capture_mf.h', ++ 'windows/BasePin.cpp', ++ 'windows/BaseFilter.cpp', ++ 'windows/BaseInputPin.cpp', ++ 'windows/MediaType.cpp', ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-lStrmiids.lib', ++ ], ++ }, ++ }], # win ++ ['OS=="win" and clang==1', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Disable warnings failing when compiling with Clang on Windows. ++ # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 ++ '-Wno-comment', ++ '-Wno-ignored-attributes', ++ '-Wno-microsoft-extra-qualification', ++ '-Wno-missing-braces', ++ '-Wno-overloaded-virtual', ++ '-Wno-reorder', ++ '-Wno-writable-strings', ++ ], ++ }, ++ }, ++ }], ++ ['OS=="android"', { ++ 'sources': [ ++ 'android/device_info_android.cc', ++ 'android/device_info_android.h', ++ 'android/video_capture_android.cc', ++ 'android/video_capture_android.h', ++ ], ++ }], # android ++ ['OS=="ios"', { ++ 'sources': [ ++ 'objc/device_info.h', ++ 'objc/device_info.mm', ++ 'objc/device_info_objc.h', ++ 'objc/device_info_objc.mm', ++ 'objc/rtc_video_capture_objc.h', ++ 'objc/rtc_video_capture_objc.mm', ++ 'objc/video_capture.h', ++ 'objc/video_capture.mm', ++ ], ++ 'xcode_settings': { ++ 'CLANG_ENABLE_OBJC_ARC': 'YES', ++ }, ++ 'cflags_mozilla': [ ++ '-fobjc-arc', ++ ], ++ 'all_dependent_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework AVFoundation', ++ '-framework CoreMedia', ++ '-framework CoreVideo', ++ ], ++ }, ++ }, ++ }], # ios ++ ['OS=="ios"', { ++ 'all_dependent_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework UIKit', ++ ], ++ }, ++ }, ++ }], # ios ++ ], # conditions ++ }, ++ ], ++ }], # build_with_chromium==0 ++ ], ++} ++ +diff --git media/webrtc/trunk/webrtc/modules/video_coding/BUILD.gn media/webrtc/trunk/webrtc/modules/video_coding/BUILD.gn +index b932dc825579..f70a314f9232 100644 +--- media/webrtc/trunk/webrtc/modules/video_coding/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/video_coding/BUILD.gn +@@ -93,6 +93,7 @@ rtc_static_library("video_coding") { + ":webrtc_vp8", + ":webrtc_vp9", + "../..:webrtc_common", ++ "../../base:rtc_base", + "../../base:rtc_base_approved", + "../../base:rtc_numerics", + "../../base:rtc_task_queue", +@@ -101,12 +102,6 @@ rtc_static_library("video_coding") { + "../rtp_rtcp:rtp_rtcp", + "../utility:utility", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../base:rtc_base", +- ] +- } + } + + rtc_static_library("video_coding_utility") { +@@ -188,15 +183,10 @@ rtc_static_library("webrtc_h264") { + ] + deps += [ + "../../common_video", ++ "../../media:rtc_media_base", + "//third_party/ffmpeg:ffmpeg", + "//third_party/openh264:encoder", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../../media:rtc_media_base", +- ] +- } + } + } + +@@ -255,10 +245,6 @@ rtc_static_library("webrtc_vp8") { + if (rtc_build_libvpx) { + deps += [ rtc_libvpx_dir ] + } +- +- if (build_with_mozilla) { +- include_dirs = [ "$rtc_libyuv_dir/include" ] +- } + } + + rtc_static_library("webrtc_vp9") { +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/h264/h264.gypi media/webrtc/trunk/webrtc/modules/video_coding/codecs/h264/h264.gypi +new file mode 100644 +index 000000000000..08f418dd70f6 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/h264/h264.gypi +@@ -0,0 +1,97 @@ ++# Copyright (c) 2015 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../../../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_h264', ++ 'type': 'static_library', ++ 'conditions': [ ++ ['OS=="ios"', { ++ 'dependencies': [ ++ 'webrtc_h264_video_toolbox', ++ ], ++ 'sources': [ ++ 'h264_objc.mm', ++ ], ++ }], ++ #TODO: rtc_use_h264 not defined here ++ # TODO(hbos): Consider renaming this flag and the below macro to ++ # something which helps distinguish OpenH264/FFmpeg from other H264 ++ # implementations. ++ #['rtc_use_h264==1', { ++ # 'defines': [ ++ # 'WEBRTC_USE_H264', ++ # ], ++ # 'conditions': [ ++ # ['rtc_initialize_ffmpeg==1', { ++ # 'defines': [ ++ # 'WEBRTC_INITIALIZE_FFMPEG', ++ # ], ++ # }], ++ # ], ++ # 'dependencies': [ ++ # '<(DEPTH)/third_party/ffmpeg/ffmpeg.gyp:ffmpeg', ++ # '<(DEPTH)/third_party/openh264/openh264.gyp:openh264_encoder', ++ # '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ # ], ++ # 'sources': [ ++ # 'h264_decoder_impl.cc', ++ # 'h264_decoder_impl.h', ++ # 'h264_encoder_impl.cc', ++ # 'h264_encoder_impl.h', ++ # ], ++ #}], ++ ], ++ 'sources': [ ++ 'h264.cc', ++ 'include/h264.h', ++ ], ++ }, # webrtc_h264 ++ ], ++ 'conditions': [ ++ ['OS=="ios"', { ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_h264_video_toolbox', ++ 'type': 'static_library', ++ 'includes': [ '../../../../build/objc_common.gypi' ], ++ 'dependencies': [ ++ '<(webrtc_root)/sdk/sdk.gyp:rtc_sdk_common_objc', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework CoreFoundation', ++ '-framework CoreMedia', ++ '-framework CoreVideo', ++ '-framework VideoToolbox', ++ ], ++ }, ++ }, ++ 'sources': [ ++ 'h264_video_toolbox_decoder.cc', ++ 'h264_video_toolbox_decoder.h', ++ 'h264_video_toolbox_encoder.h', ++ 'h264_video_toolbox_encoder.mm', ++ 'h264_video_toolbox_nalu.cc', ++ 'h264_video_toolbox_nalu.h', ++ ], ++ 'conditions': [ ++ ['build_libyuv==1', { ++ 'dependencies': ['<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv'], ++ }], ++ ], ++ }, # webrtc_h264_video_toolbox ++ ], # targets ++ }], # OS=="ios" ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/i420/i420.gypi media/webrtc/trunk/webrtc/modules/video_coding/codecs/i420/i420.gypi +new file mode 100644 +index 000000000000..4fd8e318bd66 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/i420/i420.gypi +@@ -0,0 +1,23 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_i420', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/i420.h', ++ 'i420.cc', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/test/video_codecs_test_framework.gypi media/webrtc/trunk/webrtc/modules/video_coding/codecs/test/video_codecs_test_framework.gypi +new file mode 100644 +index 000000000000..700616aa6624 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/test/video_codecs_test_framework.gypi +@@ -0,0 +1,34 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'conditions': [ ++ ['include_tests==1', { ++ 'targets': [ ++ { ++ 'target_name': 'video_codecs_test_framework', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/test/test.gyp:test_support', ++ ], ++ 'sources': [ ++ 'mock/mock_packet_manipulator.h', ++ 'packet_manipulator.h', ++ 'packet_manipulator.cc', ++ 'predictive_packet_manipulator.h', ++ 'predictive_packet_manipulator.cc', ++ 'stats.h', ++ 'stats.cc', ++ 'videoprocessor.h', ++ 'videoprocessor.cc', ++ ], ++ }, ++ ], # targets ++ }], # include_tests ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/tools/video_codecs_tools.gypi media/webrtc/trunk/webrtc/modules/video_coding/codecs/tools/video_codecs_tools.gypi +new file mode 100644 +index 000000000000..813d3b83b430 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/tools/video_codecs_tools.gypi +@@ -0,0 +1,36 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'conditions': [ ++ ['include_tests==1', { ++ 'targets': [ ++ { ++ 'target_name': 'video_quality_measurement', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'video_codecs_test_framework', ++ 'webrtc_video_coding', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_support', ++ '<(webrtc_vp8_dir)/vp8.gyp:webrtc_vp8', ++ ], ++ 'sources': [ ++ 'video_quality_measurement.cc', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, ++ ], # targets ++ }], # include_tests ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8.gyp media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8.gyp +new file mode 100644 +index 000000000000..6918986f6fab +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp8/vp8.gyp +@@ -0,0 +1,82 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../../../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_vp8', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/modules/video_coding/utility/video_coding_utility.gyp:video_coding_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'include_dirs': [ ++ '../../../../../../../libyuv/libyuv/include', ++ ], ++ 'conditions': [ ++ ['build_libvpx==1', { ++ 'dependencies': [ ++ '<(libvpx_dir)/libvpx.gyp:libvpx', ++ ], ++ },{ ++ 'link_settings': { ++ 'libraries': [ ++ '$(LIBVPX_OBJ)/libvpx.a', ++ ], ++ }, ++ }], ++ ], ++ 'sources': [ ++ 'default_temporal_layers.cc', ++ 'default_temporal_layers.h', ++ 'include/vp8.h', ++ 'include/vp8_common_types.h', ++ 'realtime_temporal_layers.cc', ++ 'reference_picture_selection.cc', ++ 'reference_picture_selection.h', ++ 'screenshare_layers.cc', ++ 'screenshare_layers.h', ++ 'simulcast_encoder_adapter.cc', ++ 'simulcast_encoder_adapter.h', ++ 'temporal_layers.h', ++ 'vp8_impl.cc', ++ 'vp8_impl.h', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, ++ ], # targets ++ 'conditions': [ ++ ['include_tests==1', { ++ 'targets': [ ++ { ++ 'target_name': 'vp8_coder', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'webrtc_vp8', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/test/test.gyp:test_support_main', ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ ], ++ 'sources': [ ++ 'vp8_sequence_coder.cc', ++ ], ++ }, ++ ], # targets ++ }], # include_tests ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp9/vp9.gyp media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp9/vp9.gyp +new file mode 100644 +index 000000000000..9f3193201f0b +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/codecs/vp9/vp9.gyp +@@ -0,0 +1,54 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../../../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_vp9', ++ 'type': 'static_library', ++ 'conditions': [ ++ ['build_libvpx==1', { ++ 'dependencies': [ ++ '<(libvpx_dir)/libvpx.gyp:libvpx', ++ ], ++ }, { ++ 'include_dirs': [ ++ '$(MOZ_LIBVPX_CFLAGS)', ++ '<(libvpx_dir)', ++ ], ++ }], ++ ['libvpx_build_vp9==1', { ++ 'sources': [ ++ 'screenshare_layers.cc', ++ 'screenshare_layers.h', ++ 'vp9_frame_buffer_pool.cc', ++ 'vp9_frame_buffer_pool.h', ++ 'vp9_impl.cc', ++ 'vp9_impl.h', ++ ], ++ }, { ++ 'sources': [ ++ 'vp9_noop.cc', ++ ], ++ } ++ ], ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/modules/video_coding/utility/video_coding_utility.gyp:video_coding_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/vp9.h', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/utility/video_coding_utility.gyp media/webrtc/trunk/webrtc/modules/video_coding/utility/video_coding_utility.gyp +new file mode 100644 +index 000000000000..a1e9a4258b8b +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/utility/video_coding_utility.gyp +@@ -0,0 +1,40 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../../../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'video_coding_utility', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'default_video_bitrate_allocator.cc', ++ 'frame_dropper.cc', ++ 'frame_dropper.h', ++ 'ivf_file_writer.cc', ++ 'ivf_file_writer.h', ++ 'moving_average.cc', ++ 'moving_average.h', ++ 'qp_parser.cc', ++ 'qp_parser.h', ++ 'quality_scaler.cc', ++ 'quality_scaler.h', ++ 'simulcast_rate_allocator.cc', ++ 'simulcast_rate_allocator.h', ++ 'vp8_header_parser.cc', ++ 'vp8_header_parser.h', ++ ], ++ }, ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/video_coding.gypi media/webrtc/trunk/webrtc/modules/video_coding/video_coding.gypi +new file mode 100644 +index 000000000000..5027cda6a47f +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/video_coding.gypi +@@ -0,0 +1,98 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_video_coding', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'webrtc_h264', ++ 'webrtc_i420', ++ '../base/base.gyp:rtc_task_queue', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/modules/video_coding/utility/video_coding_utility.gyp:video_coding_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_vp8_dir)/vp8.gyp:webrtc_vp8', ++ '<(webrtc_vp9_dir)/vp9.gyp:webrtc_vp9', ++ ], ++ 'sources': [ ++ # interfaces ++ 'include/video_coding.h', ++ 'include/video_coding_defines.h', ++ ++ # headers ++ 'codec_database.h', ++ 'codec_timer.h', ++ 'decoding_state.h', ++ 'encoded_frame.h', ++ 'fec_rate_table.h', ++ 'frame_buffer.h', ++ 'frame_buffer2.h', ++ 'frame_object.h', ++ 'rtp_frame_reference_finder.h', ++ 'generic_decoder.h', ++ 'generic_encoder.h', ++ 'histogram.h', ++ 'inter_frame_delay.h', ++ 'internal_defines.h', ++ 'jitter_buffer.h', ++ 'jitter_buffer_common.h', ++ 'jitter_estimator.h', ++ 'media_opt_util.h', ++ 'media_optimization.h', ++ 'nack_fec_tables.h', ++ 'nack_module.h', ++ 'packet.h', ++ 'packet_buffer.h', ++ 'protection_bitrate_calculator.h', ++ 'receiver.h', ++ 'rtt_filter.h', ++ 'session_info.h', ++ 'timestamp_map.h', ++ 'timing.h', ++ 'video_coding_impl.h', ++ ++ # sources ++ 'codec_database.cc', ++ 'codec_timer.cc', ++ 'decoding_state.cc', ++ 'encoded_frame.cc', ++ 'frame_buffer.cc', ++ 'frame_buffer2.cc', ++ 'frame_object.cc', ++ 'rtp_frame_reference_finder.cc', ++ 'generic_decoder.cc', ++ 'generic_encoder.cc', ++ 'h264_sprop_parameter_sets.cc', ++ 'h264_sps_pps_tracker.cc', ++ 'inter_frame_delay.cc', ++ 'histogram.cc', ++ 'jitter_buffer.cc', ++ 'jitter_estimator.cc', ++ 'media_opt_util.cc', ++ 'media_optimization.cc', ++ 'protection_bitrate_calculator.cc', ++ 'nack_module.cc', ++ 'packet.cc', ++ 'packet_buffer.cc', ++ 'receiver.cc', ++ 'rtt_filter.cc', ++ 'session_info.cc', ++ 'timestamp_map.cc', ++ 'timing.cc', ++ 'video_codec_initializer.cc', ++ 'video_coding_impl.cc', ++ 'video_sender.cc', ++ 'video_receiver.cc', ++ ], # source ++ # TODO(jschuh): Bug 1348: fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4267, ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/video_coding/video_coding_test.gypi media/webrtc/trunk/webrtc/modules/video_coding/video_coding_test.gypi +new file mode 100644 +index 000000000000..8f7bc03ef971 +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_coding/video_coding_test.gypi +@@ -0,0 +1,35 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'rtp_player', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'rtp_rtcp', ++ 'webrtc_video_coding', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ '<(webrtc_root)/test/test.gyp:test_common', ++ ], ++ 'sources': [ ++ # headers ++ 'test/receiver_tests.h', ++ 'test/rtp_player.h', ++ 'test/vcm_payload_sink_factory.h', ++ ++ # sources ++ 'test/rtp_player.cc', ++ 'test/test_util.cc', ++ 'test/tester_main.cc', ++ 'test/vcm_payload_sink_factory.cc', ++ 'test/video_rtp_play.cc', ++ ], # sources ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/modules/video_processing/BUILD.gn media/webrtc/trunk/webrtc/modules/video_processing/BUILD.gn +index f585b64b1b1a..5ab3f457ecdc 100644 +--- media/webrtc/trunk/webrtc/modules/video_processing/BUILD.gn ++++ media/webrtc/trunk/webrtc/modules/video_processing/BUILD.gn +@@ -43,10 +43,6 @@ rtc_static_library("video_processing") { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] + } +- +- if (build_with_mozilla) { +- include_dirs = [ "$rtc_libyuv_dir/include" ] +- } + } + + if (build_video_processing_sse2) { +diff --git media/webrtc/trunk/webrtc/modules/video_processing/video_processing.gypi media/webrtc/trunk/webrtc/modules/video_processing/video_processing.gypi +new file mode 100644 +index 000000000000..c34f8749326a +--- /dev/null ++++ media/webrtc/trunk/webrtc/modules/video_processing/video_processing.gypi +@@ -0,0 +1,86 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'targets': [ ++ { ++ 'target_name': 'video_processing', ++ 'type': 'static_library', ++ 'include_dirs': [ ++ '<(libyuv_dir)/include', ++ ], ++ 'dependencies': [ ++ 'webrtc_utility', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ 'sources': [ ++ 'include/video_processing.h', ++ 'include/video_processing_defines.h', ++ 'video_denoiser.cc', ++ 'video_denoiser.h', ++ 'util/denoiser_filter.cc', ++ 'util/denoiser_filter.h', ++ 'util/denoiser_filter_c.cc', ++ 'util/denoiser_filter_c.h', ++ 'util/noise_estimation.cc', ++ 'util/noise_estimation.h', ++ 'util/skin_detection.cc', ++ 'util/skin_detection.h', ++ ], ++ 'conditions': [ ++ ['target_arch=="ia32" or target_arch=="x64"', { ++ 'dependencies': [ 'video_processing_sse2', ], ++ }], ++ ['target_arch=="arm" or target_arch == "arm64"', { ++ 'dependencies': [ 'video_processing_neon', ], ++ }], ++ ], ++ }, ++ ], ++ 'conditions': [ ++ ['target_arch=="ia32" or target_arch=="x64"', { ++ 'targets': [ ++ { ++ 'target_name': 'video_processing_sse2', ++ 'type': 'static_library', ++ 'sources': [ ++ 'util/denoiser_filter_sse2.cc', ++ 'util/denoiser_filter_sse2.h', ++ ], ++ 'conditions': [ ++ ['os_posix==1 and OS!="mac"', { ++ 'cflags': [ '-msse2', ], ++ 'cflags_mozilla': [ '-msse2', ], ++ }], ++ ['OS=="mac"', { ++ 'xcode_settings': { ++ 'OTHER_CFLAGS': [ '-msse2', ], ++ }, ++ }], ++ ], ++ }, ++ ], ++ }], ++ ['target_arch=="arm" or target_arch == "arm64"', { ++ 'targets': [ ++ { ++ 'target_name': 'video_processing_neon', ++ 'type': 'static_library', ++ 'includes': [ '../../build/arm_neon.gypi', ], ++ 'sources': [ ++ 'util/denoiser_filter_neon.cc', ++ 'util/denoiser_filter_neon.h', ++ ], ++ }, ++ ], ++ }], ++ ], ++} ++ +diff --git media/webrtc/trunk/webrtc/p2p/p2p.gyp media/webrtc/trunk/webrtc/p2p/p2p.gyp +new file mode 100644 +index 000000000000..9511d1c974e2 +--- /dev/null ++++ media/webrtc/trunk/webrtc/p2p/p2p.gyp +@@ -0,0 +1,145 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'targets': [ ++ { ++ 'target_name': 'rtc_p2p', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'base/asyncstuntcpsocket.cc', ++ 'base/asyncstuntcpsocket.h', ++ 'base/basicpacketsocketfactory.cc', ++ 'base/basicpacketsocketfactory.h', ++ 'base/candidate.h', ++ 'base/common.h', ++ 'base/dtlstransport.h', ++ 'base/dtlstransportchannel.cc', ++ 'base/dtlstransportchannel.h', ++ 'base/p2pconstants.cc', ++ 'base/p2pconstants.h', ++ 'base/p2ptransport.cc', ++ 'base/p2ptransport.h', ++ 'base/p2ptransportchannel.cc', ++ 'base/p2ptransportchannel.h', ++ 'base/packetsocketfactory.h', ++ 'base/port.cc', ++ 'base/port.h', ++ 'base/portallocator.cc', ++ 'base/portallocator.h', ++ 'base/portinterface.h', ++ 'base/pseudotcp.cc', ++ 'base/pseudotcp.h', ++ 'base/relayport.cc', ++ 'base/relayport.h', ++ 'base/session.cc', ++ 'base/session.h', ++ 'base/sessiondescription.cc', ++ 'base/sessiondescription.h', ++ 'base/stun.cc', ++ 'base/stun.h', ++ 'base/stunport.cc', ++ 'base/stunport.h', ++ 'base/stunrequest.cc', ++ 'base/stunrequest.h', ++ 'base/tcpport.cc', ++ 'base/tcpport.h', ++ 'base/transport.cc', ++ 'base/transport.h', ++ 'base/transportchannel.cc', ++ 'base/transportchannel.h', ++ 'base/transportchannelimpl.h', ++ 'base/transportcontroller.cc', ++ 'base/transportcontroller.h', ++ 'base/transportdescription.cc', ++ 'base/transportdescription.h', ++ 'base/transportdescriptionfactory.cc', ++ 'base/transportdescriptionfactory.h', ++ 'base/transportinfo.h', ++ 'base/turnport.cc', ++ 'base/turnport.h', ++ 'base/udpport.h', ++ 'client/basicportallocator.cc', ++ 'client/basicportallocator.h', ++ 'client/httpportallocator.cc', ++ 'client/httpportallocator.h', ++ 'client/socketmonitor.cc', ++ 'client/socketmonitor.h', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ 'FEATURE_ENABLE_VOICEMAIL', ++ ], ++ }, ++ 'conditions': [ ++ ['build_with_chromium==0', { ++ 'sources': [ ++ 'base/relayserver.cc', ++ 'base/relayserver.h', ++ 'base/stunserver.cc', ++ 'base/stunserver.h', ++ 'base/turnserver.cc', ++ 'base/turnserver.h', ++ ], ++ 'defines': [ ++ 'FEATURE_ENABLE_VOICEMAIL', ++ 'FEATURE_ENABLE_PSTN', ++ ], ++ }], ++ ['use_quic==1', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/libquic/libquic.gyp:libquic', ++ ], ++ 'sources': [ ++ 'quic/quicconnectionhelper.cc', ++ 'quic/quicconnectionhelper.h', ++ 'quic/quicsession.cc', ++ 'quic/quicsession.h', ++ 'quic/quictransport.cc', ++ 'quic/quictransport.h', ++ 'quic/quictransportchannel.cc', ++ 'quic/quictransportchannel.h', ++ 'quic/reliablequicstream.cc', ++ 'quic/reliablequicstream.h', ++ ], ++ 'export_dependent_settings': [ ++ '<(DEPTH)/third_party/libquic/libquic.gyp:libquic', ++ ], ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'libstunprober', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'stunprober/stunprober.cc', ++ ], ++ }, ++ { ++ 'target_name': 'stun_prober', ++ 'type': 'executable', ++ 'dependencies': [ ++ 'libstunprober', ++ 'rtc_p2p' ++ ], ++ 'sources': [ ++ 'stunprober/main.cc', ++ ], ++ }, ++ ], # targets ++} ++ +diff --git media/webrtc/trunk/webrtc/pc/pc.gyp media/webrtc/trunk/webrtc/pc/pc.gyp +new file mode 100755 +index 000000000000..e42e240a4cf1 +--- /dev/null ++++ media/webrtc/trunk/webrtc/pc/pc.gyp +@@ -0,0 +1,77 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': ['../build/common.gypi'], ++ 'variables': { ++ 'rtc_pc_defines': [ ++ 'SRTP_RELATIVE_PATH', ++ 'HAVE_SCTP', ++ 'HAVE_SRTP', ++ ], ++ }, ++ 'targets': [ ++ { ++ 'target_name': 'rtc_pc', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/media/media.gyp:rtc_media', ++ ], ++ 'conditions': [ ++ ['build_with_chromium==1', { ++ 'sources': [ ++ 'externalhmac.h', ++ 'externalhmac.cc', ++ ], ++ }], ++ # TODO: lisrtp.gyp not found ++ #['build_libsrtp==1', { ++ # 'dependencies': [ ++ # '<(DEPTH)/third_party/libsrtp/libsrtp.gyp:libsrtp', ++ # ], ++ #}], ++ ], ++ 'defines': [ ++ '<@(rtc_pc_defines)', ++ ], ++ 'include_dirs': [ ++ '<(DEPTH)/testing/gtest/include', ++ ], ++ 'direct_dependent_settings': { ++ 'defines': [ ++ '<@(rtc_pc_defines)' ++ ], ++ 'include_dirs': [ ++ '<(DEPTH)/testing/gtest/include', ++ ], ++ }, ++ 'sources': [ ++ 'audiomonitor.cc', ++ 'audiomonitor.h', ++ 'bundlefilter.cc', ++ 'bundlefilter.h', ++ 'channel.cc', ++ 'channel.h', ++ 'channelmanager.cc', ++ 'channelmanager.h', ++ 'currentspeakermonitor.cc', ++ 'currentspeakermonitor.h', ++ 'mediamonitor.cc', ++ 'mediamonitor.h', ++ 'mediasession.cc', ++ 'mediasession.h', ++ 'rtcpmuxfilter.cc', ++ 'rtcpmuxfilter.h', ++ 'srtpfilter.cc', ++ 'srtpfilter.h', ++ 'voicechannel.h', ++ ], ++ }, # target rtc_pc ++ ], # targets ++} +diff --git media/webrtc/trunk/webrtc/sdk/sdk.gyp media/webrtc/trunk/webrtc/sdk/sdk.gyp +new file mode 100644 +index 000000000000..908d544abba5 +--- /dev/null ++++ media/webrtc/trunk/webrtc/sdk/sdk.gyp +@@ -0,0 +1,342 @@ ++# Copyright 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ 'sdk.gypi', ++ ], ++ 'conditions': [ ++ ['OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7")', { ++ 'targets': [ ++ { ++ 'target_name': 'rtc_sdk_common_objc', ++ 'type': 'static_library', ++ 'includes': [ '../build/objc_common.gypi' ], ++ 'dependencies': [ ++ '../base/base.gyp:rtc_base', ++ ], ++ 'include_dirs': [ ++ 'objc/Framework/Classes', ++ 'objc/Framework/Headers', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'objc/Framework/Classes', ++ 'objc/Framework/Headers', ++ ], ++ }, ++ 'sources': [ ++ 'objc/Framework/Classes/NSString+StdString.h', ++ 'objc/Framework/Classes/NSString+StdString.mm', ++ 'objc/Framework/Classes/RTCDispatcher.m', ++ 'objc/Framework/Classes/RTCFieldTrials.mm', ++ 'objc/Framework/Classes/RTCLogging.mm', ++ 'objc/Framework/Classes/RTCMetrics.mm', ++ 'objc/Framework/Classes/RTCMetricsSampleInfo+Private.h', ++ 'objc/Framework/Classes/RTCMetricsSampleInfo.mm', ++ 'objc/Framework/Classes/RTCSSLAdapter.mm', ++ 'objc/Framework/Classes/RTCTracing.mm', ++ 'objc/Framework/Headers/WebRTC/RTCDispatcher.h', ++ 'objc/Framework/Headers/WebRTC/RTCFieldTrials.h', ++ 'objc/Framework/Headers/WebRTC/RTCLogging.h', ++ 'objc/Framework/Headers/WebRTC/RTCMacros.h', ++ 'objc/Framework/Headers/WebRTC/RTCMetrics.h', ++ 'objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h', ++ 'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h', ++ 'objc/Framework/Headers/WebRTC/RTCTracing.h', ++ ], ++ 'conditions': [ ++ ['OS=="ios"', { ++ 'sources': [ ++ 'objc/Framework/Classes/RTCCameraPreviewView.m', ++ 'objc/Framework/Classes/RTCUIApplication.h', ++ 'objc/Framework/Classes/RTCUIApplication.mm', ++ 'objc/Framework/Classes/UIDevice+RTCDevice.mm', ++ 'objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h', ++ 'objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework AVFoundation', ++ ], ++ }, ++ }, ++ }], # OS=="ios" ++ ['build_with_chromium==0', { ++ 'sources': [ ++ 'objc/Framework/Classes/RTCFileLogger.mm', ++ 'objc/Framework/Headers/WebRTC/RTCFileLogger.h', ++ ], ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'rtc_sdk_peerconnection_objc', ++ 'type': 'static_library', ++ 'includes': [ '../build/objc_common.gypi' ], ++ 'dependencies': [ ++ '<(webrtc_root)/api/api.gyp:libjingle_peerconnection', ++ 'rtc_sdk_common_objc', ++ ], ++ 'include_dirs': [ ++ 'objc/Framework/Classes', ++ 'objc/Framework/Headers', ++ ], ++ 'direct_dependent_settings': { ++ 'include_dirs': [ ++ 'objc/Framework/Classes', ++ 'objc/Framework/Headers', ++ ], ++ }, ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework AVFoundation', ++ ], ++ }, ++ 'libraries': [ ++ '-lstdc++', ++ ], ++ }, # link_settings ++ 'sources': [ ++ 'objc/Framework/Classes/RTCAVFoundationVideoSource+Private.h', ++ 'objc/Framework/Classes/RTCAVFoundationVideoSource.mm', ++ 'objc/Framework/Classes/RTCAudioSource+Private.h', ++ 'objc/Framework/Classes/RTCAudioSource.mm', ++ 'objc/Framework/Classes/RTCAudioTrack+Private.h', ++ 'objc/Framework/Classes/RTCAudioTrack.mm', ++ 'objc/Framework/Classes/RTCConfiguration+Private.h', ++ 'objc/Framework/Classes/RTCConfiguration.mm', ++ 'objc/Framework/Classes/RTCDataChannel+Private.h', ++ 'objc/Framework/Classes/RTCDataChannel.mm', ++ 'objc/Framework/Classes/RTCDataChannelConfiguration+Private.h', ++ 'objc/Framework/Classes/RTCDataChannelConfiguration.mm', ++ 'objc/Framework/Classes/RTCI420Shader.mm', ++ 'objc/Framework/Classes/RTCIceCandidate+Private.h', ++ 'objc/Framework/Classes/RTCIceCandidate.mm', ++ 'objc/Framework/Classes/RTCIceServer+Private.h', ++ 'objc/Framework/Classes/RTCIceServer.mm', ++ 'objc/Framework/Classes/RTCLegacyStatsReport+Private.h', ++ 'objc/Framework/Classes/RTCLegacyStatsReport.mm', ++ 'objc/Framework/Classes/RTCMediaConstraints+Private.h', ++ 'objc/Framework/Classes/RTCMediaConstraints.mm', ++ 'objc/Framework/Classes/RTCMediaSource+Private.h', ++ 'objc/Framework/Classes/RTCMediaSource.mm', ++ 'objc/Framework/Classes/RTCMediaStream+Private.h', ++ 'objc/Framework/Classes/RTCMediaStream.mm', ++ 'objc/Framework/Classes/RTCMediaStreamTrack+Private.h', ++ 'objc/Framework/Classes/RTCMediaStreamTrack.mm', ++ 'objc/Framework/Classes/RTCOpenGLDefines.h', ++ 'objc/Framework/Classes/RTCOpenGLVideoRenderer.h', ++ 'objc/Framework/Classes/RTCOpenGLVideoRenderer.mm', ++ 'objc/Framework/Classes/RTCPeerConnection+DataChannel.mm', ++ 'objc/Framework/Classes/RTCPeerConnection+Private.h', ++ 'objc/Framework/Classes/RTCPeerConnection+Stats.mm', ++ 'objc/Framework/Classes/RTCPeerConnection.mm', ++ 'objc/Framework/Classes/RTCPeerConnectionFactory+Private.h', ++ 'objc/Framework/Classes/RTCPeerConnectionFactory.mm', ++ 'objc/Framework/Classes/RTCRtpCodecParameters+Private.h', ++ 'objc/Framework/Classes/RTCRtpCodecParameters.mm', ++ 'objc/Framework/Classes/RTCRtpEncodingParameters+Private.h', ++ 'objc/Framework/Classes/RTCRtpEncodingParameters.mm', ++ 'objc/Framework/Classes/RTCRtpParameters+Private.h', ++ 'objc/Framework/Classes/RTCRtpParameters.mm', ++ 'objc/Framework/Classes/RTCRtpReceiver+Private.h', ++ 'objc/Framework/Classes/RTCRtpReceiver.mm', ++ 'objc/Framework/Classes/RTCRtpSender+Private.h', ++ 'objc/Framework/Classes/RTCRtpSender.mm', ++ 'objc/Framework/Classes/RTCSessionDescription+Private.h', ++ 'objc/Framework/Classes/RTCSessionDescription.mm', ++ 'objc/Framework/Classes/RTCShader+Private.h', ++ 'objc/Framework/Classes/RTCShader.h', ++ 'objc/Framework/Classes/RTCShader.mm', ++ 'objc/Framework/Classes/RTCVideoFrame+Private.h', ++ 'objc/Framework/Classes/RTCVideoFrame.mm', ++ 'objc/Framework/Classes/RTCVideoRendererAdapter+Private.h', ++ 'objc/Framework/Classes/RTCVideoRendererAdapter.h', ++ 'objc/Framework/Classes/RTCVideoRendererAdapter.mm', ++ 'objc/Framework/Classes/RTCVideoSource+Private.h', ++ 'objc/Framework/Classes/RTCVideoSource.mm', ++ 'objc/Framework/Classes/RTCVideoTrack+Private.h', ++ 'objc/Framework/Classes/RTCVideoTrack.mm', ++ 'objc/Framework/Classes/avfoundationvideocapturer.h', ++ 'objc/Framework/Classes/avfoundationvideocapturer.mm', ++ 'objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCAudioSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCAudioTrack.h', ++ 'objc/Framework/Headers/WebRTC/RTCConfiguration.h', ++ 'objc/Framework/Headers/WebRTC/RTCDataChannel.h', ++ 'objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h', ++ 'objc/Framework/Headers/WebRTC/RTCIceCandidate.h', ++ 'objc/Framework/Headers/WebRTC/RTCIceServer.h', ++ 'objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaConstraints.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaStream.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h', ++ 'objc/Framework/Headers/WebRTC/RTCPeerConnection.h', ++ 'objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpReceiver.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpSender.h', ++ 'objc/Framework/Headers/WebRTC/RTCSessionDescription.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoFrame.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoRenderer.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoTrack.h', ++ ], # sources ++ 'conditions': [ ++ ['build_libyuv==1', { ++ 'dependencies': ['<(DEPTH)/third_party/libyuv/libyuv.gyp:libyuv'], ++ }], ++ ['OS=="ios"', { ++ 'sources': [ ++ 'objc/Framework/Classes/RTCEAGLVideoView.m', ++ 'objc/Framework/Classes/RTCNativeNV12Shader.mm', ++ 'objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework CoreGraphics', ++ '-framework GLKit', ++ '-framework OpenGLES', ++ '-framework QuartzCore', ++ ], ++ }, ++ }, # link_settings ++ }], # OS=="ios" ++ ['OS=="mac"', { ++ 'sources': [ ++ 'objc/Framework/Classes/RTCNSGLVideoView.m', ++ 'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h', ++ ], ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework CoreMedia', ++ '-framework OpenGL', ++ ], ++ }, ++ }, ++ }], ++ ], # conditions ++ }, # rtc_sdk_peerconnection_objc ++ { ++ 'target_name': 'rtc_sdk_framework_objc', ++ 'type': 'shared_library', ++ 'product_name': 'WebRTC', ++ 'mac_bundle': 1, ++ 'includes': [ '../build/objc_common.gypi' ], ++ # Slightly hacky, but we need to re-declare files here that are C ++ # interfaces because otherwise they will be dead-stripped during ++ # linking (ObjC classes cannot be dead-stripped). We might consider ++ # just only using ObjC interfaces. ++ 'sources': [ ++ 'objc/Framework/Classes/RTCFieldTrials.mm', ++ 'objc/Framework/Classes/RTCLogging.mm', ++ 'objc/Framework/Classes/RTCMetrics.mm', ++ 'objc/Framework/Classes/RTCSSLAdapter.mm', ++ 'objc/Framework/Classes/RTCTracing.mm', ++ 'objc/Framework/Headers/WebRTC/RTCFieldTrials.h', ++ 'objc/Framework/Headers/WebRTC/RTCLogging.h', ++ 'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h', ++ 'objc/Framework/Headers/WebRTC/RTCTracing.h', ++ 'objc/Framework/Headers/WebRTC/WebRTC.h', ++ 'objc/Framework/Modules/module.modulemap', ++ ], ++ 'mac_framework_headers': [ ++ 'objc/Framework/Headers/WebRTC/RTCAudioSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCAudioTrack.h', ++ 'objc/Framework/Headers/WebRTC/RTCAVFoundationVideoSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCCameraPreviewView.h', ++ 'objc/Framework/Headers/WebRTC/RTCConfiguration.h', ++ 'objc/Framework/Headers/WebRTC/RTCDataChannel.h', ++ 'objc/Framework/Headers/WebRTC/RTCDataChannelConfiguration.h', ++ 'objc/Framework/Headers/WebRTC/RTCDispatcher.h', ++ 'objc/Framework/Headers/WebRTC/RTCEAGLVideoView.h', ++ 'objc/Framework/Headers/WebRTC/RTCFieldTrials.h', ++ 'objc/Framework/Headers/WebRTC/RTCFileLogger.h', ++ 'objc/Framework/Headers/WebRTC/RTCIceCandidate.h', ++ 'objc/Framework/Headers/WebRTC/RTCIceServer.h', ++ 'objc/Framework/Headers/WebRTC/RTCLegacyStatsReport.h', ++ 'objc/Framework/Headers/WebRTC/RTCLogging.h', ++ 'objc/Framework/Headers/WebRTC/RTCMacros.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaConstraints.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaStream.h', ++ 'objc/Framework/Headers/WebRTC/RTCMediaStreamTrack.h', ++ 'objc/Framework/Headers/WebRTC/RTCMetrics.h', ++ 'objc/Framework/Headers/WebRTC/RTCMetricsSampleInfo.h', ++ 'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h', ++ 'objc/Framework/Headers/WebRTC/RTCPeerConnection.h', ++ 'objc/Framework/Headers/WebRTC/RTCPeerConnectionFactory.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpCodecParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpEncodingParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpParameters.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpReceiver.h', ++ 'objc/Framework/Headers/WebRTC/RTCRtpSender.h', ++ 'objc/Framework/Headers/WebRTC/RTCSessionDescription.h', ++ 'objc/Framework/Headers/WebRTC/RTCSSLAdapter.h', ++ 'objc/Framework/Headers/WebRTC/RTCTracing.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoFrame.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoRenderer.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoSource.h', ++ 'objc/Framework/Headers/WebRTC/RTCVideoTrack.h', ++ 'objc/Framework/Headers/WebRTC/UIDevice+RTCDevice.h', ++ 'objc/Framework/Headers/WebRTC/WebRTC.h', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ 'rtc_sdk_peerconnection_objc', ++ ], ++ 'xcode_settings': { ++ 'CODE_SIGNING_REQUIRED': 'NO', ++ 'CODE_SIGN_IDENTITY': '', ++ 'DEFINES_MODULE': 'YES', ++ 'INFOPLIST_FILE': 'objc/Framework/Info.plist', ++ 'LD_DYLIB_INSTALL_NAME': '@rpath/WebRTC.framework/WebRTC', ++ 'MODULEMAP_FILE': '<(webrtc_root)/sdk/Framework/Modules/module.modulemap', ++ }, ++ 'link_settings': { ++ 'xcode_settings': { ++ 'OTHER_LDFLAGS': [ ++ '-framework AVFoundation', ++ '-framework AudioToolbox', ++ '-framework CoreGraphics', ++ '-framework CoreMedia', ++ '-framework GLKit', ++ '-framework VideoToolbox', ++ ], ++ }, ++ }, # link_settings ++ 'conditions': [ ++ # TODO(tkchin): Generate WebRTC.h based off of ++ # mac_framework_headers instead of hard-coding. Ok for now since we ++ # only really care about dynamic lib on iOS outside of chromium. ++ ['OS!="mac"', { ++ 'mac_framework_headers!': [ ++ 'objc/Framework/Headers/WebRTC/RTCNSGLVideoView.h', ++ ], ++ }], ++ ['build_with_chromium==1', { ++ 'mac_framework_headers!': [ ++ 'objc/Framework/Headers/WebRTC/RTCFileLogger.h', ++ ], ++ }], ++ ], # conditions ++ }, # rtc_sdk_framework_objc ++ ], # targets ++ }], # OS=="ios" or (OS=="mac" and mac_deployment_target=="10.7") ++ ], ++} +diff --git media/webrtc/trunk/webrtc/sdk/sdk.gypi media/webrtc/trunk/webrtc/sdk/sdk.gypi +new file mode 100644 +index 000000000000..8f8ee97a9d20 +--- /dev/null ++++ media/webrtc/trunk/webrtc/sdk/sdk.gypi +@@ -0,0 +1,26 @@ ++# Copyright 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'target_defaults': { ++ 'configurations': { ++ 'Profile': { ++ 'xcode_settings': { ++ 'DEBUG_INFORMARTION_FORMAT': 'dwarf-with-dsym', ++ # We manually strip using strip -S and strip -x. We need to run ++ # dsymutil ourselves so we need symbols around before that. ++ 'DEPLOYMENT_POSTPROCESSING': 'NO', ++ 'GCC_OPTIMIZATION_LEVEL': 's', ++ 'GCC_SYMBOLS_PRIVATE_EXTERN': 'YES', ++ 'STRIP_INSTALLED_PRODUCT': 'NO', ++ 'USE_HEADERMAP': 'YES', ++ }, ++ }, ++ }, ++ }, ++} +diff --git media/webrtc/trunk/webrtc/stats/stats.gyp media/webrtc/trunk/webrtc/stats/stats.gyp +new file mode 100644 +index 000000000000..bbeb0213d0ba +--- /dev/null ++++ media/webrtc/trunk/webrtc/stats/stats.gyp +@@ -0,0 +1,27 @@ ++# Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'targets': [ ++ { ++ # GN version: webrtc/stats:rtc_stats ++ 'target_name': 'rtc_stats', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/api/api.gyp:rtc_stats_api', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ ], ++ 'sources': [ ++ 'rtcstats.cc', ++ 'rtcstats_objects.cc', ++ 'rtcstatsreport.cc', ++ ], ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/supplement.gypi media/webrtc/trunk/webrtc/supplement.gypi +new file mode 100644 +index 000000000000..05f1deffec15 +--- /dev/null ++++ media/webrtc/trunk/webrtc/supplement.gypi +@@ -0,0 +1,64 @@ ++{ ++ 'variables': { ++ 'variables': { ++ 'webrtc_root%': '<(DEPTH)', # '<(DEPTH)/webrtc', ++ # Override the defaults in Chromium's build/common.gypi. ++ # Needed for ARC and libc++. ++ 'mac_sdk_min%': '10.11', ++ 'mac_deployment_target%': '10.7', ++ # Disable use of sysroot for Linux. It's enabled by default in Chromium, ++ # but it currently lacks the libudev-dev package. ++ # TODO(kjellander): Remove when crbug.com/561584 is fixed. ++ 'use_sysroot': 0, ++ }, ++ 'webrtc_root%': '<(webrtc_root)', ++ 'mac_deployment_target%': '<(mac_deployment_target)', ++ 'use_sysroot%': '<(use_sysroot)', ++ 'build_with_chromium': 0, ++ 'conditions': [ ++ ['OS=="ios"', { ++ # Set target_subarch for if not already set. This is needed because the ++ # Chromium iOS toolchain relies on target_subarch being set. ++ 'conditions': [ ++ ['target_arch=="arm" or target_arch=="ia32"', { ++ 'target_subarch%': 'arm32', ++ }], ++ ['target_arch=="arm64" or target_arch=="x64"', { ++ 'target_subarch%': 'arm64', ++ }], ++ ], ++ }], ++ ['OS=="android"', { ++ # MJPEG capture is not used on Android. Disable to reduce ++ # libjingle_peerconnection_so file size. ++ 'libyuv_disable_jpeg%': 1, ++ }], ++ ], ++ }, ++ 'target_defaults': { ++ 'target_conditions': [ ++ ['_target_name=="sanitizer_options"', { ++ 'conditions': [ ++ ['lsan==1', { ++ # Replace Chromium's LSan suppressions with our own for WebRTC. ++ 'sources/': [ ++ ['exclude', 'lsan_suppressions.cc'], ++ ], ++ 'sources': [ ++ '<(webrtc_root)/build/sanitizers/lsan_suppressions_webrtc.cc', ++ ], ++ }], ++ ['tsan==1', { ++ # Replace Chromium's TSan v2 suppressions with our own for WebRTC. ++ 'sources/': [ ++ ['exclude', 'tsan_suppressions.cc'], ++ ], ++ 'sources': [ ++ '<(webrtc_root)/build/sanitizers/tsan_suppressions_webrtc.cc', ++ ], ++ }], ++ ], ++ }], ++ ], ++ }, ++} +diff --git media/webrtc/trunk/webrtc/system_wrappers/BUILD.gn media/webrtc/trunk/webrtc/system_wrappers/BUILD.gn +index f963f9427d7e..745867bf912b 100644 +--- media/webrtc/trunk/webrtc/system_wrappers/BUILD.gn ++++ media/webrtc/trunk/webrtc/system_wrappers/BUILD.gn +@@ -82,15 +82,7 @@ rtc_static_library("system_wrappers") { + + defines += [ "WEBRTC_THREAD_RR" ] + +- if (!build_with_mozilla) { +- deps += [ ":cpu_features_android" ] +- } else { +- include_dirs = [ +- "/config/external/nspr", +- "/nsprpub/lib/ds", +- "/nsprpub/pr/include", +- ] +- } ++ deps += [ ":cpu_features_android" ] + + libs += [ "log" ] + } +@@ -153,7 +145,7 @@ group("system_wrappers_default") { + ] + } + +-if (is_android && !build_with_mozilla) { ++if (is_android) { + rtc_static_library("cpu_features_android") { + sources = [ + "source/cpu_features_android.c", +diff --git media/webrtc/trunk/webrtc/system_wrappers/cpu_features_chromium.gyp media/webrtc/trunk/webrtc/system_wrappers/cpu_features_chromium.gyp +new file mode 100644 +index 000000000000..519fe4411958 +--- /dev/null ++++ media/webrtc/trunk/webrtc/system_wrappers/cpu_features_chromium.gyp +@@ -0,0 +1,26 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'conditions': [ ++ ['OS=="android"', { ++ 'targets': [ ++ { ++ 'target_name': 'cpu_features_android', ++ 'type': 'static_library', ++ 'sources': [ ++ 'source/cpu_features_android.c', ++ ], ++ 'dependencies': [ ++ '../../../build/android/ndk.gyp:cpu_features', ++ ], ++ }, ++ ], ++ }], ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/system_wrappers/cpu_features_webrtc.gyp media/webrtc/trunk/webrtc/system_wrappers/cpu_features_webrtc.gyp +new file mode 100644 +index 000000000000..228e8730725e +--- /dev/null ++++ media/webrtc/trunk/webrtc/system_wrappers/cpu_features_webrtc.gyp +@@ -0,0 +1,56 @@ ++# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'variables': { ++ 'include_ndk_cpu_features%': 0, ++ }, ++ 'includes': [ '../build/common.gypi', ], ++ 'conditions': [ ++ ['OS=="android"', { ++ 'targets': [ ++ { ++ 'target_name': 'cpu_features_android', ++ 'type': 'static_library', ++ 'sources': [ ++ 'source/cpu_features_android.c', ++ ], ++ 'conditions': [ ++ ['include_ndk_cpu_features==1', { ++ 'includes': [ ++ '../../build/android/cpufeatures.gypi', ++ ], ++ }, { ++ 'sources': [ ++ 'source/droid-cpu-features.c', ++ 'source/droid-cpu-features.h', ++ ], ++ }], ++ 'dependencies': [ ++ # Not supported, please refer to the GN build. ++ #'../../build/android/ndk.gyp:cpu_features', ++ ], ++ }, ++ ], ++ }], ++ ['OS=="linux"', { ++ 'targets': [ ++ { ++ 'target_name': 'cpu_features_linux', ++ 'type': 'static_library', ++ 'sources': [ ++ 'source/cpu_features_linux.c', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ }, ++ ], ++ }], ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/system_wrappers/system_wrappers.gyp media/webrtc/trunk/webrtc/system_wrappers/system_wrappers.gyp +new file mode 100644 +index 000000000000..d16263366d1c +--- /dev/null ++++ media/webrtc/trunk/webrtc/system_wrappers/system_wrappers.gyp +@@ -0,0 +1,194 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ '../build/common.gypi', ], ++ 'targets': [ ++ { ++ 'target_name': 'system_wrappers', ++ 'type': 'static_library', ++ 'dependencies': [ ++# '<(webrtc_root)/common.gyp:webrtc_common', ++# '../base/base.gyp:rtc_base_approved', ++ 'field_trial_default', ++ ], ++ 'sources': [ ++ 'include/aligned_array.h', ++ 'include/aligned_malloc.h', ++ 'include/atomic32.h', ++ 'include/clock.h', ++ 'include/cpu_features_wrapper.h', ++ 'include/cpu_info.h', ++ 'include/critical_section_wrapper.h', ++ 'include/data_log.h', ++ 'include/data_log_c.h', ++ 'include/data_log_impl.h', ++ 'include/event_wrapper.h', ++ 'include/field_trial.h', ++ 'include/file_wrapper.h', ++ 'include/fix_interlocked_exchange_pointer_win.h', ++ 'include/logging.h', ++ 'include/metrics.h', ++ 'include/ntp_time.h', ++ 'include/rtp_to_ntp.h', ++ 'include/rw_lock_wrapper.h', ++ 'include/sleep.h', ++ 'include/sort.h', ++ 'include/static_instance.h', ++ 'include/stl_util.h', ++ 'include/stringize_macros.h', ++ 'include/timestamp_extrapolator.h', ++ 'include/trace.h', ++ 'include/utf_util_win.h', ++ 'source/aligned_malloc.cc', ++ 'source/atomic32_win.cc', ++ 'source/clock.cc', ++ 'source/condition_variable_event_win.cc', ++ 'source/condition_variable_event_win.h', ++ 'source/cpu_features.cc', ++ 'source/cpu_info.cc', ++# TODO: removed ++# 'source/data_log_c.cc', ++ 'source/event.cc', ++ 'source/event_timer_posix.cc', ++ 'source/event_timer_posix.h', ++ 'source/event_timer_win.cc', ++ 'source/event_timer_win.h', ++ 'source/file_impl.cc', ++ 'source/logging.cc', ++ 'source/rtp_to_ntp_estimator.cc', ++ 'source/rw_lock.cc', ++ 'source/rw_lock_posix.cc', ++ 'source/rw_lock_posix.h', ++ 'source/rw_lock_win.cc', ++ 'source/rw_lock_win.h', ++ 'source/rw_lock_winxp_win.cc', ++ 'source/rw_lock_winxp_win.h', ++ 'source/sleep.cc', ++# TODO: removed ++# 'source/sort.cc', ++ 'source/timestamp_extrapolator.cc', ++ 'source/trace_impl.cc', ++ 'source/trace_impl.h', ++ 'source/trace_posix.cc', ++ 'source/trace_posix.h', ++ 'source/trace_win.cc', ++ 'source/trace_win.h', ++ ], ++ 'conditions': [ ++ #TODO: missing ++ #['enable_data_logging==1', { ++ # 'sources': [ 'source/data_log.cc', ], ++ #}, { ++ # 'sources': [ 'source/data_log_no_op.cc', ], ++ #},], ++ ['build_with_mozilla', { ++ 'sources': [ ++ 'source/metrics_default.cc', ++ ], ++ }], ++ ['OS=="android"', { ++ 'defines': [ ++ 'WEBRTC_THREAD_RR', ++ ], ++ 'conditions': [ ++ ['build_with_chromium==1', { ++ 'dependencies': [ ++# 'cpu_features_chromium.gyp:cpu_features_android', ++ ], ++ }, { ++ 'dependencies': [ ++# 'cpu_features_webrtc.gyp:cpu_features_android', ++ ], ++ }], ++ ], ++ 'link_settings': { ++ 'libraries': [ ++ '-llog', ++ ], ++ }, ++ 'sources': [ ++ 'include/logcat_trace_context.h', ++ 'source/logcat_trace_context.cc', ++ ], ++ }], ++ ['OS=="linux"', { ++ 'defines': [ ++ 'WEBRTC_THREAD_RR', ++ ], ++ 'conditions': [ ++ ['build_with_chromium==0', { ++ 'dependencies': [ ++# 'cpu_features_webrtc.gyp:cpu_features_linux', ++ ], ++ }], ++ ], ++ 'link_settings': { ++ 'libraries': [ '-lrt', ], ++ }, ++ }], ++ ['OS=="mac"', { ++ 'link_settings': { ++ 'libraries': [ '$(SDKROOT)/System/Library/Frameworks/ApplicationServices.framework', ], ++ }, ++ }], ++ ['os_bsd==1', { ++ 'defines': [ ++ 'WEBRTC_THREAD_RR', ++ ], ++ }], ++ ['OS=="linux" or OS=="android" or os_bsd==1', { ++ 'sources': [ ++ 'source/atomic32_non_darwin_unix.cc', ++ ], ++ }], ++ ['OS=="ios" or OS=="mac"', { ++ 'defines': [ ++ 'WEBRTC_THREAD_RR', ++ ], ++ 'sources': [ ++ 'source/atomic32_darwin.cc', ++ ], ++ }], ++ ['OS=="win"', { ++ 'link_settings': { ++ 'libraries': [ '-lwinmm.lib', ], ++ }, ++ }], ++ ], # conditions ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ 4334, # Ignore warning on shift operator promotion. ++ ], ++ }, { ++ 'target_name': 'field_trial_default', ++ 'type': 'static_library', ++ 'sources': [ ++ 'include/field_trial_default.h', ++ 'source/field_trial_default.cc', ++ ] ++ }, { ++ 'target_name': 'metrics_default', ++ 'type': 'static_library', ++ 'sources': [ ++ 'include/metrics_default.h', ++ 'source/metrics_default.cc', ++ ], ++ }, { ++ 'target_name': 'system_wrappers_default', ++ 'type': 'static_library', ++ 'dependencies': [ ++# 'system_wrappers', ++# 'field_trial_default', ++# 'metrics_default', ++ ] ++ }, ++ ], # targets ++} ++ +diff --git media/webrtc/trunk/webrtc/test/test.gyp media/webrtc/trunk/webrtc/test/test.gyp +new file mode 100644 +index 000000000000..c80714a4a9d3 +--- /dev/null ++++ media/webrtc/trunk/webrtc/test/test.gyp +@@ -0,0 +1,296 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# TODO(andrew): consider moving test_support to src/base/test. ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'video_test_common', ++ 'type': 'static_library', ++ 'sources': [ ++ 'fake_texture_frame.cc', ++ 'fake_texture_frame.h', ++ 'frame_generator.cc', ++ 'frame_generator.h', ++ 'frame_utils.cc', ++ 'frame_utils.h', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ ], ++ }, ++ { ++ 'target_name': 'rtp_test_utils', ++ 'type': 'static_library', ++ 'sources': [ ++ 'rtcp_packet_parser.cc', ++ 'rtcp_packet_parser.h', ++ 'rtp_file_reader.cc', ++ 'rtp_file_reader.h', ++ 'rtp_file_writer.cc', ++ 'rtp_file_writer.h', ++ ], ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/modules/modules.gyp:rtp_rtcp', ++ ], ++ }, ++ { ++ 'target_name': 'field_trial', ++ 'type': 'static_library', ++ 'sources': [ ++ 'field_trial.cc', ++ 'field_trial.h', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ ], ++ }, ++ { ++ 'target_name': 'test_main', ++ 'type': 'static_library', ++ 'sources': [ ++ 'test_main.cc', ++ ], ++ 'dependencies': [ ++ 'field_trial', ++ 'test_support', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ ], ++ }, ++ { ++ 'target_name': 'test_support', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/testing/gmock.gyp:gmock', ++ '<(webrtc_root)/base/base.gyp:gtest_prod', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ 'video_test_common', ++ ], ++ 'sources': [ ++ 'gmock.h', ++ 'gtest.h', ++ 'testsupport/fileutils.cc', ++ 'testsupport/fileutils.h', ++ 'testsupport/frame_reader.cc', ++ 'testsupport/frame_reader.h', ++ 'testsupport/frame_writer.cc', ++ 'testsupport/frame_writer.h', ++ 'testsupport/iosfileutils.mm', ++ 'testsupport/metrics/video_metrics.h', ++ 'testsupport/metrics/video_metrics.cc', ++ 'testsupport/mock/mock_frame_reader.h', ++ 'testsupport/mock/mock_frame_writer.h', ++ 'testsupport/packet_reader.cc', ++ 'testsupport/packet_reader.h', ++ 'testsupport/perf_test.cc', ++ 'testsupport/perf_test.h', ++ 'testsupport/trace_to_stderr.cc', ++ 'testsupport/trace_to_stderr.h', ++ ], ++ 'conditions': [ ++ ['OS=="ios"', { ++ 'xcode_settings': { ++ 'CLANG_ENABLE_OBJC_ARC': 'YES', ++ }, ++ }], ++ ['use_x11==1', { ++ 'dependencies': [ ++ '<(DEPTH)/tools/xdisplaycheck/xdisplaycheck.gyp:xdisplaycheck', ++ ], ++ }], ++ ], ++ }, ++ { ++ # Depend on this target when you want to have test_support but also the ++ # main method needed for gtest to execute! ++ 'target_name': 'test_support_main', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'field_trial', ++ 'test_support', ++ '<(DEPTH)/testing/gmock.gyp:gmock', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ ], ++ 'sources': [ ++ 'run_all_unittests.cc', ++ 'test_suite.cc', ++ 'test_suite.h', ++ ], ++ }, ++ { ++ # Depend on this target when you want to have test_support and a special ++ # main for mac which will run your test on a worker thread and consume ++ # events on the main thread. Useful if you want to access a webcam. ++ # This main will provide all the scaffolding and objective-c black magic ++ # for you. All you need to do is to implement a function in the ++ # run_threaded_main_mac.h file (ImplementThisToRunYourTest). ++ 'target_name': 'test_support_main_threaded_mac', ++ 'type': 'static_library', ++ 'dependencies': [ ++ 'test_support', ++ ], ++ 'sources': [ ++ 'testsupport/mac/run_threaded_main_mac.h', ++ 'testsupport/mac/run_threaded_main_mac.mm', ++ ], ++ }, ++ { ++ 'target_name': 'test_common', ++ 'type': 'static_library', ++ 'sources': [ ++ 'call_test.cc', ++ 'call_test.h', ++ 'configurable_frame_size_encoder.cc', ++ 'configurable_frame_size_encoder.h', ++ 'constants.cc', ++ 'constants.h', ++ 'direct_transport.cc', ++ 'direct_transport.h', ++ 'drifting_clock.cc', ++ 'drifting_clock.h', ++ 'encoder_settings.cc', ++ 'encoder_settings.h', ++ 'fake_audio_device.cc', ++ 'fake_audio_device.h', ++ 'fake_decoder.cc', ++ 'fake_decoder.h', ++ 'fake_encoder.cc', ++ 'fake_encoder.h', ++ 'fake_network_pipe.cc', ++ 'fake_network_pipe.h', ++ 'fake_videorenderer.h', ++ 'frame_generator_capturer.cc', ++ 'frame_generator_capturer.h', ++ 'layer_filtering_transport.cc', ++ 'layer_filtering_transport.h', ++ 'mock_transport.h', ++ 'mock_voe_channel_proxy.h', ++ 'mock_voice_engine.h', ++ 'null_transport.cc', ++ 'null_transport.h', ++ 'rtp_rtcp_observer.h', ++ 'statistics.cc', ++ 'statistics.h', ++ 'vcm_capturer.cc', ++ 'vcm_capturer.h', ++ 'video_capturer.h', ++ 'win/run_loop_win.cc', ++ ], ++ 'conditions': [ ++ ['OS!="win"', { ++ 'sources': [ ++ 'run_loop.h', ++ 'run_loop.cc', ++ ], ++ }], ++ ], ++ 'dependencies': [ ++ '<(DEPTH)/testing/gmock.gyp:gmock', ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/modules/modules.gyp:media_file', ++ '<(webrtc_root)/webrtc.gyp:webrtc', ++ 'rtp_test_utils', ++ 'test_support', ++ ], ++ }, ++ { ++ 'target_name': 'test_renderer', ++ 'type': 'static_library', ++ 'sources': [ ++ 'linux/glx_renderer.cc', ++ 'linux/glx_renderer.h', ++ 'linux/video_renderer_linux.cc', ++ 'mac/video_renderer_mac.h', ++ 'mac/video_renderer_mac.mm', ++ 'video_renderer.cc', ++ 'video_renderer.h', ++ 'win/d3d_renderer.cc', ++ 'win/d3d_renderer.h', ++ ], ++ 'conditions': [ ++ ['OS!="linux" and OS!="mac" and OS!="win"', { ++ 'sources': [ ++ 'null_platform_renderer.cc', ++ ], ++ }], ++ ['OS=="linux" or OS=="mac"', { ++ 'sources' : [ ++ 'gl/gl_renderer.cc', ++ 'gl/gl_renderer.h', ++ ], ++ }], ++ ['OS=="win"', { ++ 'include_dirs': [ ++ '<(directx_sdk_path)/Include', ++ ], ++ }], ++ ['OS=="win" and clang==1', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Disable warnings failing when compiling with Clang on Windows. ++ # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 ++ '-Wno-bool-conversion', ++ '-Wno-comment', ++ '-Wno-delete-non-virtual-dtor', ++ ], ++ }, ++ }, ++ }], ++ ], ++ 'dependencies': [ ++ '<(DEPTH)/testing/gtest.gyp:gtest', ++ '<(webrtc_root)/modules/modules.gyp:media_file', ++ 'test_support', ++ 'video_test_common', ++ ], ++ 'direct_dependent_settings': { ++ 'conditions': [ ++ ['OS=="linux"', { ++ 'libraries': [ ++ '-lXext', ++ '-lX11', ++ '-lGL', ++ ], ++ }], ++ ['OS=="android"', { ++ 'libraries' : [ ++ '-lGLESv2', '-llog', ++ ], ++ }], ++ ['OS=="mac"', { ++ 'xcode_settings' : { ++ 'OTHER_LDFLAGS' : [ ++ '-framework Cocoa', ++ '-framework OpenGL', ++ '-framework CoreVideo', ++ ], ++ }, ++ }], ++ ], ++ }, ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/tools/internal_tools.gyp media/webrtc/trunk/webrtc/tools/internal_tools.gyp +new file mode 100644 +index 000000000000..bee8a8bf0e21 +--- /dev/null ++++ media/webrtc/trunk/webrtc/tools/internal_tools.gyp +@@ -0,0 +1,28 @@ ++ # Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++# This file is used for internal tools used by the WebRTC code only. ++ ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'command_line_parser', ++ 'type': 'static_library', ++ 'sources': [ ++ 'simple_command_line_parser.h', ++ 'simple_command_line_parser.cc', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:gtest_prod', ++ ], ++ }, # command_line_parser ++ ], ++} +diff --git media/webrtc/trunk/webrtc/tools/tools.gyp media/webrtc/trunk/webrtc/tools/tools.gyp +new file mode 100644 +index 000000000000..3b3a84292d5f +--- /dev/null ++++ media/webrtc/trunk/webrtc/tools/tools.gyp +@@ -0,0 +1,146 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'video_quality_analysis', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ ], ++ 'export_dependent_settings': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ ], ++ 'sources': [ ++ 'frame_analyzer/video_quality_analysis.h', ++ 'frame_analyzer/video_quality_analysis.cc', ++ ], ++ }, # video_quality_analysis ++ { ++ 'target_name': 'frame_analyzer', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ 'video_quality_analysis', ++ ], ++ 'sources': [ ++ 'frame_analyzer/frame_analyzer.cc', ++ ], ++ }, # frame_analyzer ++ { ++ 'target_name': 'psnr_ssim_analyzer', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ 'video_quality_analysis', ++ ], ++ 'sources': [ ++ 'psnr_ssim_analyzer/psnr_ssim_analyzer.cc', ++ ], ++ }, # psnr_ssim_analyzer ++ { ++ 'target_name': 'rgba_to_i420_converter', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ ], ++ 'sources': [ ++ 'converter/converter.h', ++ 'converter/converter.cc', ++ 'converter/rgba_to_i420_converter.cc', ++ ], ++ }, # rgba_to_i420_converter ++ { ++ 'target_name': 'frame_editing_lib', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ ], ++ 'sources': [ ++ 'frame_editing/frame_editing_lib.cc', ++ 'frame_editing/frame_editing_lib.h', ++ ], ++ # Disable warnings to enable Win64 build, issue 1323. ++ 'msvs_disabled_warnings': [ ++ 4267, # size_t to int truncation. ++ ], ++ }, # frame_editing_lib ++ { ++ 'target_name': 'frame_editor', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ 'frame_editing_lib', ++ ], ++ 'sources': [ ++ 'frame_editing/frame_editing.cc', ++ ], ++ }, # frame_editing ++ { ++ 'target_name': 'force_mic_volume_max', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:audio_device', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers_default', ++ ], ++ 'sources': [ ++ 'force_mic_volume_max/force_mic_volume_max.cc', ++ ], ++ }, # force_mic_volume_max ++ ], ++ 'conditions': [ ++ ['enable_protobuf==1', { ++ 'targets': [ ++ { ++ 'target_name': 'chart_proto', ++ 'type': 'static_library', ++ 'sources': [ ++ 'event_log_visualizer/chart.proto', ++ ], ++ 'variables': { ++ 'proto_in_dir': 'event_log_visualizer', ++ 'proto_out_dir': 'webrtc/tools/event_log_visualizer', ++ }, ++ 'includes': ['../build/protoc.gypi'], ++ }, ++ { ++ # RTC event log visualization library ++ 'target_name': 'event_log_visualizer_utils', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_impl', ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_parser', ++ '<(webrtc_root)/modules/modules.gyp:congestion_controller', ++ '<(webrtc_root)/modules/modules.gyp:rtp_rtcp', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ ':chart_proto', ++ ], ++ 'sources': [ ++ 'event_log_visualizer/analyzer.cc', ++ 'event_log_visualizer/analyzer.h', ++ 'event_log_visualizer/plot_base.cc', ++ 'event_log_visualizer/plot_base.h', ++ 'event_log_visualizer/plot_protobuf.cc', ++ 'event_log_visualizer/plot_protobuf.h', ++ 'event_log_visualizer/plot_python.cc', ++ 'event_log_visualizer/plot_python.h', ++ ], ++ 'export_dependent_settings': [ ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_parser', ++ ':chart_proto', ++ ], ++ }, ++ ], ++ }], ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/video/BUILD.gn media/webrtc/trunk/webrtc/video/BUILD.gn +index 53422e2e56a1..3b33be38a353 100644 +--- media/webrtc/trunk/webrtc/video/BUILD.gn ++++ media/webrtc/trunk/webrtc/video/BUILD.gn +@@ -63,6 +63,7 @@ rtc_static_library("video") { + "../base:rtc_task_queue", + "../common_video", + "../logging:rtc_event_log_api", ++ "../media:rtc_media_base", + "../modules/bitrate_controller", + "../modules/congestion_controller", + "../modules/pacing", +@@ -74,12 +75,6 @@ rtc_static_library("video") { + "../system_wrappers", + "../voice_engine", + ] +- +- if (!build_with_mozilla) { +- deps += [ +- "../media:rtc_media_base", +- ] +- } + } + + if (rtc_include_tests) { +@@ -91,6 +86,7 @@ if (rtc_include_tests) { + ] + deps = [ + "../base:rtc_task_queue", ++ "../media:rtc_media_base", + "../system_wrappers", + "//testing/gtest", + "//webrtc/test:test_renderer", +@@ -102,11 +98,6 @@ if (rtc_include_tests) { + # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163). + suppressed_configs += [ "//build/config/clang:find_bad_constructs" ] + } +- if (!build_with_mozilla) { +- deps += [ +- "../media:rtc_media_base", +- ] +- } + } + + rtc_source_set("video_full_stack_tests") { +@@ -217,6 +208,7 @@ if (rtc_include_tests) { + ] + deps = [ + ":video", ++ "../media:rtc_media_base", + "//testing/gmock", + "//testing/gtest", + ] +@@ -227,10 +219,5 @@ if (rtc_include_tests) { + if (rtc_use_h264) { + defines += [ "WEBRTC_USE_H264" ] + } +- if (!build_with_mozilla) { +- deps += [ +- "../media:rtc_media_base", +- ] +- } + } + } +diff --git media/webrtc/trunk/webrtc/video/webrtc_video.gypi media/webrtc/trunk/webrtc/video/webrtc_video.gypi +new file mode 100644 +index 000000000000..8d5280282fb3 +--- /dev/null ++++ media/webrtc/trunk/webrtc/video/webrtc_video.gypi +@@ -0,0 +1,69 @@ ++# Copyright (c) 2013 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++{ ++ 'variables': { ++ 'webrtc_video_dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_video/common_video.gyp:common_video', ++ '<(webrtc_root)/modules/modules.gyp:bitrate_controller', ++ '<(webrtc_root)/modules/modules.gyp:congestion_controller', ++ '<(webrtc_root)/modules/modules.gyp:paced_sender', ++ '<(webrtc_root)/modules/modules.gyp:rtp_rtcp', ++ '<(webrtc_root)/modules/modules.gyp:video_capture_module', ++ '<(webrtc_root)/modules/modules.gyp:video_processing', ++ '<(webrtc_root)/modules/modules.gyp:webrtc_utility', ++ '<(webrtc_root)/modules/modules.gyp:webrtc_video_coding', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/voice_engine/voice_engine.gyp:voice_engine', ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_api', ++ '<(webrtc_root)/api/api.gyp:video_frame_api', ++ '<(webrtc_root)/media/media.gyp:mozilla_rtc_media' ++ ], ++ 'webrtc_video_sources': [ ++ 'video/call_stats.cc', ++ 'video/call_stats.h', ++ 'video/encoder_rtcp_feedback.cc', ++ 'video/encoder_rtcp_feedback.h', ++ 'video/overuse_frame_detector.cc', ++ 'video/overuse_frame_detector.h', ++ 'video/payload_router.cc', ++ 'video/payload_router.h', ++ 'video/quality_threshold.cc', ++ 'video/quality_threshold.h', ++ 'video/receive_statistics_proxy.cc', ++ 'video/receive_statistics_proxy.h', ++ 'video/report_block_stats.cc', ++ 'video/report_block_stats.h', ++ 'video/rtp_stream_receiver.cc', ++ 'video/rtp_stream_receiver.h', ++ 'video/rtp_streams_synchronizer.cc', ++ 'video/rtp_streams_synchronizer.h', ++ 'video/send_delay_stats.cc', ++ 'video/send_delay_stats.h', ++ 'video/send_statistics_proxy.cc', ++ 'video/send_statistics_proxy.h', ++ 'video/stats_counter.cc', ++ 'video/stats_counter.h', ++ 'video/stream_synchronization.cc', ++ 'video/stream_synchronization.h', ++ 'video/transport_adapter.cc', ++ 'video/transport_adapter.h', ++ 'video/video_receive_stream.cc', ++ 'video/video_receive_stream.h', ++ 'video/video_send_stream.cc', ++ 'video/video_send_stream.h', ++ 'video/video_stream_decoder.cc', ++ 'video/video_stream_decoder.h', ++ 'video/vie_encoder.cc', ++ 'video/vie_encoder.h', ++ 'video/vie_remb.cc', ++ 'video/vie_remb.h', ++ ], ++ }, ++} +diff --git media/webrtc/trunk/webrtc/voice_engine/voice_engine.gyp media/webrtc/trunk/webrtc/voice_engine/voice_engine.gyp +new file mode 100644 +index 000000000000..63d1991dc3e3 +--- /dev/null ++++ media/webrtc/trunk/webrtc/voice_engine/voice_engine.gyp +@@ -0,0 +1,146 @@ ++# Copyright (c) 2011 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++ ++{ ++ 'includes': [ ++ '../build/common.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'audio_coder', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'coder.cc', ++ 'coder.h', ++ ] ++ }, ++ { ++ 'target_name': 'file_player', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'file_player.cc', ++ 'file_player.h', ++ ] ++ }, ++ { ++ 'target_name': 'file_recorder', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ ], ++ 'sources': [ ++ 'file_recorder.cc', ++ 'file_recorder.h', ++ ] ++ }, ++ { ++ 'target_name': 'voice_engine', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/api/api.gyp:call_api', ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ '<(webrtc_root)/modules/modules.gyp:audio_coding_module', ++ '<(webrtc_root)/modules/modules.gyp:audio_conference_mixer', ++ '<(webrtc_root)/modules/modules.gyp:audio_device', ++ '<(webrtc_root)/modules/modules.gyp:audio_processing', ++ '<(webrtc_root)/modules/modules.gyp:bitrate_controller', ++ '<(webrtc_root)/modules/modules.gyp:media_file', ++ '<(webrtc_root)/modules/modules.gyp:paced_sender', ++ '<(webrtc_root)/modules/modules.gyp:rtp_rtcp', ++ '<(webrtc_root)/modules/modules.gyp:webrtc_utility', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:system_wrappers', ++ '<(webrtc_root)/webrtc.gyp:rtc_event_log_api', ++ 'audio_coder', ++ 'file_player', ++ 'file_recorder', ++ 'level_indicator', ++ ], ++ 'export_dependent_settings': [ ++ '<(webrtc_root)/modules/modules.gyp:audio_coding_module', ++ ], ++ 'sources': [ ++ 'include/voe_audio_processing.h', ++ 'include/voe_base.h', ++ 'include/voe_codec.h', ++ 'include/voe_errors.h', ++ 'include/voe_external_media.h', ++ 'include/voe_file.h', ++ 'include/voe_hardware.h', ++ 'include/voe_neteq_stats.h', ++ 'include/voe_network.h', ++ 'include/voe_rtp_rtcp.h', ++ 'include/voe_video_sync.h', ++ 'include/voe_volume_control.h', ++ 'channel.cc', ++ 'channel.h', ++ 'channel_manager.cc', ++ 'channel_manager.h', ++ 'channel_proxy.cc', ++ 'channel_proxy.h', ++ 'monitor_module.cc', ++ 'monitor_module.h', ++ 'output_mixer.cc', ++ 'output_mixer.h', ++ 'shared_data.cc', ++ 'shared_data.h', ++ 'statistics.cc', ++ 'statistics.h', ++ 'transmit_mixer.cc', ++ 'transmit_mixer.h', ++ 'utility.cc', ++ 'utility.h', ++ 'voe_audio_processing_impl.cc', ++ 'voe_audio_processing_impl.h', ++ 'voe_base_impl.cc', ++ 'voe_base_impl.h', ++ 'voe_codec_impl.cc', ++ 'voe_codec_impl.h', ++ 'voe_external_media_impl.cc', ++ 'voe_external_media_impl.h', ++ 'voe_file_impl.cc', ++ 'voe_file_impl.h', ++ 'voe_hardware_impl.cc', ++ 'voe_hardware_impl.h', ++ 'voe_neteq_stats_impl.cc', ++ 'voe_neteq_stats_impl.h', ++ 'voe_network_impl.cc', ++ 'voe_network_impl.h', ++ 'voe_rtp_rtcp_impl.cc', ++ 'voe_rtp_rtcp_impl.h', ++ 'voe_video_sync_impl.cc', ++ 'voe_video_sync_impl.h', ++ 'voe_volume_control_impl.cc', ++ 'voe_volume_control_impl.h', ++ 'voice_engine_defines.h', ++ 'voice_engine_impl.cc', ++ 'voice_engine_impl.h', ++ ], ++ }, ++ { ++ 'target_name': 'level_indicator', ++ 'type': 'static_library', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/common_audio/common_audio.gyp:common_audio', ++ ], ++ 'sources': [ ++ 'level_indicator.cc', ++ 'level_indicator.h', ++ ] ++ }, ++ ], ++} +diff --git media/webrtc/trunk/webrtc/webrtc.gyp media/webrtc/trunk/webrtc/webrtc.gyp +new file mode 100644 +index 000000000000..cefd8e5a5333 +--- /dev/null ++++ media/webrtc/trunk/webrtc/webrtc.gyp +@@ -0,0 +1,129 @@ ++# Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++{ ++ 'includes': [ ++ 'build/common.gypi', ++ 'audio/webrtc_audio.gypi', ++ 'call/webrtc_call.gypi', ++ 'video/webrtc_video.gypi', ++ ], ++ 'targets': [ ++ { ++ 'target_name': 'webrtc_lib', ++ 'type': 'static_library', ++ 'sources': [ ++ 'call.h', ++ 'config.h', ++ 'video_receive_stream.h', ++ 'video_send_stream.h', ++ ++ '<@(webrtc_audio_sources)', ++ '<@(webrtc_call_sources)', ++ '<@(webrtc_video_sources)', ++ ], ++ 'dependencies': [ ++ 'common.gyp:*', ++ '<@(webrtc_audio_dependencies)', ++ '<@(webrtc_call_dependencies)', ++ '<@(webrtc_video_dependencies)', ++ 'rtc_event_log_impl', ++ '<(webrtc_root)/modules/modules.gyp:audio_mixer', ++ ], ++ 'conditions': [ ++ # TODO(andresp): Chromium should link directly with this and no if ++ # conditions should be needed on webrtc build files. ++ ['build_with_chromium==1', { ++ 'dependencies': [ ++ '<(webrtc_root)/modules/modules.gyp:video_capture', ++ ], ++ }], ++ ], ++ }, ++ { ++ 'target_name': 'rtc_event_log_api', ++ 'type': 'static_library', ++ 'sources': [ ++ 'logging/rtc_event_log/rtc_event_log.h', ++ ], ++ }, ++ { ++ 'target_name': 'rtc_event_log_impl', ++ 'type': 'static_library', ++ 'sources': [ ++ 'logging/rtc_event_log/ringbuffer.h', ++ 'logging/rtc_event_log/rtc_event_log.cc', ++ 'logging/rtc_event_log/rtc_event_log_helper_thread.cc', ++ 'logging/rtc_event_log/rtc_event_log_helper_thread.h', ++ ], ++ 'conditions': [ ++ # If enable_protobuf is defined, we want to compile the protobuf ++ # and add rtc_event_log.pb.h and rtc_event_log.pb.cc to the sources. ++ ['enable_protobuf==1', { ++ 'dependencies': [ ++ 'rtc_event_log_api', ++ 'rtc_event_log_proto', ++ ], ++ 'defines': [ ++ 'ENABLE_RTC_EVENT_LOG', ++ ], ++ }], ++ ], ++ }, ++ ], # targets ++ 'conditions': [ ++ ['include_tests==1', { ++ 'includes': [ ++ 'webrtc_tests.gypi', ++ ], ++ }], ++ ['enable_protobuf==1', { ++ 'targets': [ ++ { ++ # This target should only be built if enable_protobuf is defined ++ 'target_name': 'rtc_event_log_proto', ++ 'type': 'static_library', ++ 'sources': ['logging/rtc_event_log/rtc_event_log.proto',], ++ 'variables': { ++ 'proto_in_dir': 'logging/rtc_event_log', ++ 'proto_out_dir': 'webrtc/logging/rtc_event_log', ++ }, ++ 'includes': ['build/protoc.gypi'], ++ }, ++ { ++ 'target_name': 'rtc_event_log_parser', ++ 'type': 'static_library', ++ 'sources': [ ++ 'logging/rtc_event_log/rtc_event_log_parser.cc', ++ 'logging/rtc_event_log/rtc_event_log_parser.h', ++ ], ++ 'dependencies': [ ++ 'rtc_event_log_proto', ++ ], ++ 'export_dependent_settings': [ ++ 'rtc_event_log_proto', ++ ], ++ }, ++ ], ++ }], ++ ['include_tests==1 and enable_protobuf==1', { ++ 'targets': [ ++ { ++ 'target_name': 'rtc_event_log2rtp_dump', ++ 'type': 'executable', ++ 'sources': ['logging/rtc_event_log2rtp_dump.cc',], ++ 'dependencies': [ ++ '<(DEPTH)/third_party/gflags/gflags.gyp:gflags', ++ 'rtc_event_log_parser', ++ 'rtc_event_log_proto', ++ 'test/test.gyp:rtp_test_utils' ++ ], ++ }, ++ ], ++ }], ++ ], # conditions ++} +diff --git media/webrtc/trunk/webrtc/webrtc_examples.gyp media/webrtc/trunk/webrtc/webrtc_examples.gyp +new file mode 100755 +index 000000000000..6627c3134338 +--- /dev/null ++++ media/webrtc/trunk/webrtc/webrtc_examples.gyp +@@ -0,0 +1,471 @@ ++# Copyright (c) 2012 The WebRTC Project Authors. All rights reserved. ++# ++# Use of this source code is governed by a BSD-style license ++# that can be found in the LICENSE file in the root of the source ++# tree. An additional intellectual property rights grant can be found ++# in the file PATENTS. All contributing project authors may ++# be found in the AUTHORS file in the root of the source tree. ++{ ++ 'conditions': [ ++ ['OS=="linux" or OS=="win"', { ++ 'targets': [ ++ { ++ 'target_name': 'relayserver', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/pc/pc.gyp:rtc_pc', ++ ], ++ 'sources': [ ++ 'examples/relayserver/relayserver_main.cc', ++ ], ++ }, # target relayserver ++ { ++ 'target_name': 'stunserver', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/pc/pc.gyp:rtc_pc', ++ ], ++ 'sources': [ ++ 'examples/stunserver/stunserver_main.cc', ++ ], ++ }, # target stunserver ++ { ++ 'target_name': 'turnserver', ++ 'type': 'executable', ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/pc/pc.gyp:rtc_pc', ++ ], ++ 'sources': [ ++ 'examples/turnserver/turnserver_main.cc', ++ ], ++ }, # target turnserver ++ { ++ 'target_name': 'peerconnection_server', ++ 'type': 'executable', ++ 'sources': [ ++ 'examples/peerconnection/server/data_socket.cc', ++ 'examples/peerconnection/server/data_socket.h', ++ 'examples/peerconnection/server/main.cc', ++ 'examples/peerconnection/server/peer_channel.cc', ++ 'examples/peerconnection/server/peer_channel.h', ++ 'examples/peerconnection/server/utils.cc', ++ 'examples/peerconnection/server/utils.h', ++ ], ++ 'dependencies': [ ++ '<(webrtc_root)/base/base.gyp:rtc_base_approved', ++ '<(webrtc_root)/common.gyp:webrtc_common', ++ '<(webrtc_root)/tools/internal_tools.gyp:command_line_parser', ++ ], ++ # TODO(ronghuawu): crbug.com/167187 fix size_t to int truncations. ++ 'msvs_disabled_warnings': [ 4309, ], ++ }, # target peerconnection_server ++ { ++ 'target_name': 'peerconnection_client', ++ 'type': 'executable', ++ 'sources': [ ++ 'examples/peerconnection/client/conductor.cc', ++ 'examples/peerconnection/client/conductor.h', ++ 'examples/peerconnection/client/defaults.cc', ++ 'examples/peerconnection/client/defaults.h', ++ 'examples/peerconnection/client/peer_connection_client.cc', ++ 'examples/peerconnection/client/peer_connection_client.h', ++ ], ++ 'dependencies': [ ++ 'api/api.gyp:libjingle_peerconnection', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:field_trial_default', ++ '<(webrtc_root)/system_wrappers/system_wrappers.gyp:metrics_default', ++ ], ++ 'conditions': [ ++ ['build_json==1', { ++ 'dependencies': [ ++ '<(DEPTH)/third_party/jsoncpp/jsoncpp.gyp:jsoncpp', ++ ], ++ }], ++ # TODO(ronghuawu): Move these files to a win/ directory then they ++ # can be excluded automatically. ++ ['OS=="win"', { ++ 'sources': [ ++ 'examples/peerconnection/client/flagdefs.h', ++ 'examples/peerconnection/client/main.cc', ++ 'examples/peerconnection/client/main_wnd.cc', ++ 'examples/peerconnection/client/main_wnd.h', ++ ], ++ 'msvs_settings': { ++ 'VCLinkerTool': { ++ 'SubSystem': '2', # Windows ++ }, ++ }, ++ }], # OS=="win" ++ ['OS=="win" and clang==1', { ++ 'msvs_settings': { ++ 'VCCLCompilerTool': { ++ 'AdditionalOptions': [ ++ # Disable warnings failing when compiling with Clang on Windows. ++ # https://bugs.chromium.org/p/webrtc/issues/detail?id=5366 ++ '-Wno-reorder', ++ '-Wno-unused-function', ++ ], ++ }, ++ }, ++ }], # OS=="win" and clang==1 ++ ['OS=="linux"', { ++ 'sources': [ ++ 'examples/peerconnection/client/linux/main.cc', ++ 'examples/peerconnection/client/linux/main_wnd.cc', ++ 'examples/peerconnection/client/linux/main_wnd.h', ++ ], ++ 'cflags': [ ++ ' +Date: Mon Feb 19 09:43:27 2018 -0600 + + Bug 1418162 Use a build constant to determine update channel, and update ESR equation for 60 r?gijs,Build + + Previously we used Services.appinfo.defaultUpdateChannel to determine if we were on ESR + and if so, we would assert to make sure the ESR equation hadn't changed. But that method + is a footgun. We could use UpdateUtils.getUpdateChannel, but for our purposes here, the + compile-time constant will work just as well. + + If it's set correctly, for Mozilla, we will perform our assert check. If it's not set to + esr (e.g. for Tor), they'll skip the assert. They probably want to control their user agent + themselves anyway. + + MozReview-Commit-ID: DLnWSEpCVJ6 +--- + .../resistfingerprinting/nsRFPService.cpp | 21 +++++++-------------- + 1 file changed, 7 insertions(+), 14 deletions(-) + +diff --git toolkit/components/resistfingerprinting/nsRFPService.cpp toolkit/components/resistfingerprinting/nsRFPService.cpp +index aeb3cb6b3539..1fd6a6e8fe8d 100644 +--- toolkit/components/resistfingerprinting/nsRFPService.cpp ++++ toolkit/components/resistfingerprinting/nsRFPService.cpp +@@ -606,26 +606,19 @@ nsRFPService::GetSpoofedUserAgent(nsACString &userAgent) + uint32_t firefoxVersion = appVersion.ToInteger(&rv); + NS_ENSURE_SUCCESS(rv, rv); + +- // Starting from Firefox 10, Firefox ESR was released once every seven +- // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. +- // We infer the last and closest ESR version based on this rule. +- nsCOMPtr runtime = +- do_GetService("@mozilla.org/xre/runtime;1", &rv); +- NS_ENSURE_SUCCESS(rv, rv); +- +- nsAutoCString updateChannel; +- rv = runtime->GetDefaultUpdateChannel(updateChannel); +- NS_ENSURE_SUCCESS(rv, rv); +- + // If we are running in Firefox ESR, determine whether the formula of ESR + // version has changed. Once changed, we must update the formula in this + // function. +- if (updateChannel.EqualsLiteral("esr")) { +- MOZ_ASSERT(((firefoxVersion % 7) == 3), ++ if (!strcmp(NS_STRINGIFY(MOZ_UPDATE_CHANNEL), "esr")) { ++ MOZ_ASSERT(((firefoxVersion % 7) == 4), + "Please udpate ESR version formula in nsRFPService.cpp"); + } + +- uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 3) % 7); ++ // Starting from Firefox 10, Firefox ESR was released once every seven ++ // Firefox releases, e.g. Firefox 10, 17, 24, 31, and so on. ++ // Except we used 60 as an ESR instead of 59. ++ // We infer the last and closest ESR version based on this rule. ++ uint32_t spoofedVersion = firefoxVersion - ((firefoxVersion - 4) % 7); + userAgent.Assign(nsPrintfCString( + "Mozilla/5.0 (%s; rv:%d.0) Gecko/%s Firefox/%d.0", + SPOOFED_UA_OS, spoofedVersion, LEGACY_BUILD_ID, spoofedVersion)); diff --git a/www/firefox/files/patch-bug1433747 b/www/firefox/files/patch-bug1433747 deleted file mode 100644 index 1a3b8737e8c3..000000000000 --- a/www/firefox/files/patch-bug1433747 +++ /dev/null @@ -1,24 +0,0 @@ -Apply simd@cf87865a998a to unbreak -C target-cpu with Rust >= 1.24 - -diff --git third_party/rust/simd/.cargo-checksum.json third_party/rust/simd/.cargo-checksum.json -index 65f31b0560e6..f16d0dd4fd61 100644 ---- third_party/rust/simd/.cargo-checksum.json -+++ third_party/rust/simd/.cargo-checksum.json -@@ -1 +1 @@ --{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"efe3006b13a13261a3dec3d37dc1d8cb53950f3803c420069231803374949937","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} -\ No newline at end of file -+{"files":{".travis.yml":"e2c720c3633b7671efce49147c62b12bcbf630d7c5d6fc65cd97620bfa4ddcea","Cargo.toml":"608aad04f17a524ee21048fa2ce9f656ae344e0473dd0e331dc954f0f9677c63","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"6d3a9431e65e69c73a8923e6517b889d17549b23db406b9ec027710d16af701f","README.md":"249294a9a5f63c64c0f7fe4a607060f43f3507dce2378067aa59d25fb3ae681d","benches/mandelbrot.rs":"051b5199e66bca6cf7774e9024915fd4e1349ab39726a10a14e06b60d65d87a4","benches/matrix.rs":"048a21dacdb62365e0105d00d2c8cd6bd2396ac81134f2bff7eb4f7d095fb735","examples/axpy.rs":"4307626045d64ec08361c97c9c72c5dc8d361bdc88f64453b97ac0212041a1b2","examples/convert.rs":"8e658fde050f8a0d8b84ad7570446b10fcf544afbd551b940ca340474f324840","examples/dot-product.rs":"6fe2e007c147af5353804173a593c5b9d57dbccec156e1da37e9e32537363f91","examples/fannkuch-redux-nosimd.rs":"7b2fbde35e8666929d14d67328471cb0483d038a5325232f8db148b30865312b","examples/fannkuch-redux.rs":"ea21fdbd2274488a62cc984acad6e0b65d52f24fb4ff63b7057a3a667e9c8aae","examples/mandelbrot.rs":"8b8fdca1edac50e5a33e0e0592bd41eb75114f31839ccd40d485c61a9a664380","examples/matrix-inverse.rs":"a378d20ef20c2119bb10a86de27c92fec2c2f77f374e6bfd36707c9825a5fe92","examples/nbody-nosimd.rs":"2c8e0a7feacd202fdd65eeceb6420d6e9f43340b81f20a8e532704a587a2796b","examples/nbody.rs":"a864311affab262024479d6348ff51af43d809e9ad332ec30ea4aacceaa2eae1","examples/ops.rs":"1316f915d0afcfa98fdc4077e965ccccf6b4b21c433cbe487ff0cdc60df3cd39","examples/spectral-norm-nosimd.rs":"ffc8512ecde779078ea467f38f423a0ea623c63da7078193f9dd370200773f79","examples/spectral-norm.rs":"edb09c9d477f83939098cfb77a27cc298bc7a0c8a8e29cece0cccae0d70d890e","src/aarch64/mod.rs":"83f52775364c98de0cecb7e1509530c18972e932469f5f1522aa24a735d0fa37","src/aarch64/neon.rs":"1fe769979e07d8e2bc3c78ce116e05d735860744efe097a894cc9421153257fb","src/arm/mod.rs":"dcdd90bc0b39abaf86a0c8946d442b16313563fbae1ff03248628275c74d8617","src/arm/neon.rs":"51cc509856200e80f8e4cc2c982586e6d1cef593ec4537e153dce0cfe31d3428","src/common.rs":"62f4e7e0fefb52ad190d0f2191bc435ac4deab3f2bc70dc427f2a7f9ccb7856e","src/lib.rs":"25f0b39c038fa85af858318135dfd87865be26c33bb4bd1438aec96a1e68d8b5","src/sixty_four.rs":"510a9e00189a61e4f0a5beb7052d5dee37fc8261f94a2af45ef10327e0f3b7df","src/v256.rs":"2e328e49034876d535e0627c7a62191da2b4fb156a657614bf531a5fc75b1385","src/x86/avx.rs":"c66140abefca634b48eae307c3ec8cf5a40f2279b10e246a7e2ac602a2a2bb28","src/x86/avx2.rs":"3bcb3f391ad5f16f0a6da0bc1301329beb478ad6265bd3b2c9c124fc2e6198e5","src/x86/mod.rs":"0acc5a5e2672e2a0fddc11065663be8b8fa2da87320ea291fa86ff8c2f33edf5","src/x86/sse2.rs":"5ceda75a401958a135fc9d851b22075314cdeed69fd483b6a7be4f11373f40da","src/x86/sse3.rs":"9bd01a4f08069ca4f445952e744d651efe887e3835b18872e757375f0d053bd2","src/x86/sse4_1.rs":"9ceb80dd70a7e7dfeef508cb935e1a2637175bc87a3b090f5dea691ff6aa0516","src/x86/sse4_2.rs":"c59321aed8decdce4d0d8570cff46aed02e1a8265647ef7702e9b180fc581254","src/x86/ssse3.rs":"2290f0269bae316b8e0491495645ee38a9bd73525c8572759c1328341c3bdb4c"},"package":"7a94d14a2ae1f1f110937de5fb69e494372560181c7e1739a097fcc2cee37ba0"} -\ No newline at end of file -diff --git third_party/rust/simd/src/x86/avx2.rs third_party/rust/simd/src/x86/avx2.rs -index fa92e3b60786..e86a33d3b5bb 100644 ---- third_party/rust/simd/src/x86/avx2.rs -+++ third_party/rust/simd/src/x86/avx2.rs -@@ -42,7 +42,7 @@ extern "platform-intrinsic" { - fn x86_mm256_packus_epi32(x: i32x8, y: i32x8) -> u16x16; - fn x86_mm256_permutevar8x32_epi32(x: i32x8, y: i32x8) -> i32x8; - fn x86_mm256_permutevar8x32_ps(x: f32x8, y: i32x8) -> f32x8; -- fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u8x32; -+ fn x86_mm256_sad_epu8(x: u8x32, y: u8x32) -> u64x4; - fn x86_mm256_shuffle_epi8(x: i8x32, y: i8x32) -> i8x32; - fn x86_mm256_sign_epi8(x: i8x32, y: i8x32) -> i8x32; - fn x86_mm256_sign_epi16(x: i16x16, y: i16x16) -> i16x16; diff --git a/www/firefox/files/patch-bug1442746 b/www/firefox/files/patch-bug1442746 new file mode 100644 index 000000000000..3c5fc4daeb89 --- /dev/null +++ b/www/firefox/files/patch-bug1442746 @@ -0,0 +1,40 @@ +commit 9761b190924d +Author: Landry Breuil +Date: Fri Mar 9 13:39:58 2018 +0000 + + Bug 1442746 - use clock_gettime on all unices but osx, not only linux - fixes build on BSD. r=chutten +--- + toolkit/components/telemetry/Telemetry.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git toolkit/components/telemetry/Telemetry.cpp toolkit/components/telemetry/Telemetry.cpp +index 98eba99fe53d..00a0334ea200 100644 +--- toolkit/components/telemetry/Telemetry.cpp ++++ toolkit/components/telemetry/Telemetry.cpp +@@ -8,7 +8,7 @@ + + #include + #include +-#ifdef XP_LINUX ++#if defined(XP_UNIX) && !defined(XP_DARWIN) + #include + #else + #include +@@ -1674,7 +1674,7 @@ TelemetryImpl::MsSinceProcessStart(double* aResult) + NS_IMETHODIMP + TelemetryImpl::MsSystemNow(double* aResult) + { +-#ifdef XP_LINUX ++#if defined(XP_UNIX) && !defined(XP_DARWIN) + timespec ts; + clock_gettime(CLOCK_REALTIME, &ts); + *aResult = ts.tv_sec * 1000 + ts.tv_nsec / 1000000; +@@ -1682,7 +1682,7 @@ TelemetryImpl::MsSystemNow(double* aResult) + using namespace std::chrono; + milliseconds ms = duration_cast(system_clock::now().time_since_epoch()); + *aResult = static_cast(ms.count()); +-#endif // XP_LINUX ++#endif // XP_UNIX && !XP_DARWIN + + return NS_OK; + } diff --git a/www/firefox/files/patch-bug1442791 b/www/firefox/files/patch-bug1442791 new file mode 100644 index 000000000000..fe097d8375d2 --- /dev/null +++ b/www/firefox/files/patch-bug1442791 @@ -0,0 +1,33 @@ +Build Linux version of GetExecutablePathImpl() on other Unix systems + +ANGLE system_utils* are unused in Gecko. +https://searchfox.org/mozilla-central/search?regexp=true&q=\bGetExecutable%28Path%7CDirectory%29\B + +diff --git gfx/angle/targets/angle_common/moz.build gfx/angle/targets/angle_common/moz.build +index bd4b743ec0dd..3c0dbfae491a 100644 +--- gfx/angle/targets/angle_common/moz.build ++++ gfx/angle/targets/angle_common/moz.build +@@ -118,17 +118,17 @@ SOURCES += [ + '../../checkout/src/common/uniform_type_info_autogen.cpp', + '../../checkout/src/common/utilities.cpp', + ] +-if CONFIG['OS_ARCH'] == 'Darwin': ++if CONFIG['OS_ARCH'] == 'WINNT': + SOURCES += [ +- '../../checkout/src/common/system_utils_mac.cpp', ++ '../../checkout/src/common/system_utils_win.cpp', + ] +-if CONFIG['OS_ARCH'] == 'Linux': ++elif CONFIG['OS_ARCH'] == 'Darwin': + SOURCES += [ +- '../../checkout/src/common/system_utils_linux.cpp', ++ '../../checkout/src/common/system_utils_mac.cpp', + ] +-if CONFIG['OS_ARCH'] == 'WINNT': ++else: # Android, Linux, BSDs, etc. + SOURCES += [ +- '../../checkout/src/common/system_utils_win.cpp', ++ '../../checkout/src/common/system_utils_linux.cpp', + ] + # + #LDFLAGS += [ diff --git a/www/firefox/files/patch-z-bug517422 b/www/firefox/files/patch-z-bug517422 index a3ce1fe5b450..db617d716b25 100644 --- a/www/firefox/files/patch-z-bug517422 +++ b/www/firefox/files/patch-z-bug517422 @@ -160,7 +160,7 @@ diff --git dom/media/moz.build dom/media/moz.build index 86b051c58d33..fb6186dce78b 100644 --- dom/media/moz.build +++ dom/media/moz.build -@@ -318,6 +318,21 @@ if CONFIG['MOZ_WEBRTC']: +@@ -326,6 +326,21 @@ if CONFIG['MOZ_WEBRTC']: DEFINES['MOZILLA_INTERNAL_API'] = True @@ -179,16 +179,16 @@ index 86b051c58d33..fb6186dce78b 100644 +if CONFIG['MOZ_SYSTEM_SOUNDTOUCH']: + CXXFLAGS += CONFIG['MOZ_SOUNDTOUCH_CFLAGS'] + - if CONFIG['MOZ_ANDROID_HLS_SUPPORT'] and CONFIG['MOZ_BUILD_MOBILE_ANDROID_WITH_GRADLE']: + if CONFIG['MOZ_ANDROID_HLS_SUPPORT']: DEFINES['MOZ_ANDROID_HLS_SUPPORT'] = True diff --git dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp index 078f6ea5ef60..c600db067539 100644 --- dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp +++ dom/media/platforms/ffmpeg/ffvpx/FFVPXRuntimeLinker.cpp -@@ -11,9 +11,13 @@ - #include "prmem.h" - #include "prlink.h" +@@ -15,9 +15,13 @@ + #include + #endif +#ifdef MOZ_SYSTEM_SOUNDTOUCH +#include "nsXPCOMPrivate.h" // for XUL_DLL @@ -200,7 +200,7 @@ index 078f6ea5ef60..c600db067539 100644 namespace mozilla { -@@ -54,6 +58,12 @@ FFVPXRuntimeLinker::Init() +@@ -64,6 +68,12 @@ FFVPXRuntimeLinker::Init() sLinkStatus = LinkStatus_FAILED; @@ -212,13 +212,13 @@ index 078f6ea5ef60..c600db067539 100644 +#else // We retrieve the path of the lgpllibs library as this is where mozavcodec // and mozavutil libs are located. - char* lgpllibsname = PR_GetLibraryName(nullptr, "lgpllibs"); -@@ -64,6 +74,7 @@ FFVPXRuntimeLinker::Init() - PR_GetLibraryFilePathname(lgpllibsname, - (PRFuncPtr)&soundtouch::SoundTouch::getVersionId); - PR_FreeLibraryName(lgpllibsname); + PathString lgpllibsname = GetLibraryName(nullptr, "lgpllibs"); +@@ -73,6 +83,7 @@ FFVPXRuntimeLinker::Init() + PathString path = + GetLibraryFilePathname(lgpllibsname.get(), + (PRFuncPtr)&soundtouch::SoundTouch::getVersionId); +#endif - if (!path) { + if (path.IsEmpty()) { return false; } diff --git media/libogg/README_MOZILLA media/libogg/README_MOZILLA