Browse Source

Remove unneeded comm-esr52 and mozilla-esr52 directories

Ian Neal 5 years ago
parent
commit
f3d03ee681
100 changed files with 3 additions and 40897 deletions
  1. 3 2
      README.md
  2. 0 88
      comm-esr52/patches/1503654-cookies.patch
  3. 0 53
      comm-esr52/patches/1503837.patch
  4. 0 126
      comm-esr52/patches/521861-Account_Creation-249.patch
  5. 0 2799
      comm-esr52/patches/frg-249-5.patch
  6. 0 4
      comm-esr52/patches/series
  7. 0 629
      mozilla-esr52/patches/1295937-1.patch
  8. 0 857
      mozilla-esr52/patches/1295937-2.patch
  9. 0 40
      mozilla-esr52/patches/1310067.patch
  10. 0 157
      mozilla-esr52/patches/1316844-1.patch
  11. 0 185
      mozilla-esr52/patches/1316844-2.patch
  12. 0 263
      mozilla-esr52/patches/1316844-3.patch
  13. 0 81
      mozilla-esr52/patches/1316956.patch
  14. 0 262
      mozilla-esr52/patches/1316957.patch
  15. 0 110
      mozilla-esr52/patches/1317504-1.patch
  16. 0 104
      mozilla-esr52/patches/1317504-2.patch
  17. 0 88
      mozilla-esr52/patches/1317504-3.patch
  18. 0 289
      mozilla-esr52/patches/1317504-4.patch
  19. 0 122
      mozilla-esr52/patches/1317504-5.patch
  20. 0 4144
      mozilla-esr52/patches/1318143-1.patch
  21. 0 70
      mozilla-esr52/patches/1318143-2.patch
  22. 0 49
      mozilla-esr52/patches/1318189.patch
  23. 0 36
      mozilla-esr52/patches/1318798.patch
  24. 0 105
      mozilla-esr52/patches/1319959.patch
  25. 0 53
      mozilla-esr52/patches/1319971.patch
  26. 0 174
      mozilla-esr52/patches/1322025-1.patch
  27. 0 79
      mozilla-esr52/patches/1322025-2.patch
  28. 0 209
      mozilla-esr52/patches/1322025-3.patch
  29. 0 126
      mozilla-esr52/patches/1322025-4.patch
  30. 0 54
      mozilla-esr52/patches/1322025-5.patch
  31. 0 157
      mozilla-esr52/patches/1322025-6.patch
  32. 0 133
      mozilla-esr52/patches/1322025-7.patch
  33. 0 84
      mozilla-esr52/patches/1323901-1.patch
  34. 0 32
      mozilla-esr52/patches/1323901-2.patch
  35. 0 196
      mozilla-esr52/patches/1335666.patch
  36. 0 120
      mozilla-esr52/patches/1343781.patch
  37. 0 122
      mozilla-esr52/patches/1354510.patch
  38. 0 58
      mozilla-esr52/patches/1356493.patch
  39. 0 53
      mozilla-esr52/patches/1358215.patch
  40. 0 33
      mozilla-esr52/patches/1360631.patch
  41. 0 57
      mozilla-esr52/patches/1362303.patch
  42. 0 42
      mozilla-esr52/patches/1362872.patch
  43. 0 162
      mozilla-esr52/patches/1363585.patch
  44. 0 82
      mozilla-esr52/patches/1363811-1.patch
  45. 0 43
      mozilla-esr52/patches/1363811-2.patch
  46. 0 149
      mozilla-esr52/patches/1363811-3.patch
  47. 0 192
      mozilla-esr52/patches/1363811-4.patch
  48. 0 265
      mozilla-esr52/patches/1363811-5.patch
  49. 0 57
      mozilla-esr52/patches/1363811-6.patch
  50. 0 186
      mozilla-esr52/patches/1364137.patch
  51. 0 36
      mozilla-esr52/patches/1370865.patch
  52. 0 204
      mozilla-esr52/patches/1376057.patch
  53. 0 26
      mozilla-esr52/patches/1391547-DIASDK.patch
  54. 0 135
      mozilla-esr52/patches/1403945.patch
  55. 0 94
      mozilla-esr52/patches/1406380-385080.patch
  56. 0 36
      mozilla-esr52/patches/1407017-244f2649c736.patch
  57. 0 284
      mozilla-esr52/patches/1407678-vs2017toolchain-249.patch
  58. 0 31
      mozilla-esr52/patches/1408695-VS2017constexpr.patch
  59. 0 23
      mozilla-esr52/patches/1415470-part1-VS2017-a11y.patch
  60. 0 150
      mozilla-esr52/patches/1415470-part2-VS2017-version.patch
  61. 0 193
      mozilla-esr52/patches/1415470-part3-VS2017-C5038.patch
  62. 0 36
      mozilla-esr52/patches/1423694-VS2017-155.patch
  63. 0 13672
      mozilla-esr52/patches/1435212.patch
  64. 0 87
      mozilla-esr52/patches/1484184.patch
  65. 0 49
      mozilla-esr52/patches/1484190.patch
  66. 0 87
      mozilla-esr52/patches/1485224-1.patch
  67. 0 48
      mozilla-esr52/patches/1485224-2.patch
  68. 0 90
      mozilla-esr52/patches/1489785-macOS1014.patch
  69. 0 34
      mozilla-esr52/patches/1496588.patch
  70. 0 68
      mozilla-esr52/patches/1500759.patch
  71. 0 125
      mozilla-esr52/patches/1512882-clang-osx.patch
  72. 0 47
      mozilla-esr52/patches/1512882-search.patch
  73. 0 43
      mozilla-esr52/patches/1512882-vs2017-x86.patch
  74. 0 39
      mozilla-esr52/patches/PPPPPPP-psutil.patch
  75. 0 130
      mozilla-esr52/patches/PPPPPPP-xpsp3.patch
  76. 0 7542
      mozilla-esr52/patches/mozilla-esr52-push_355262.patch
  77. 0 33
      mozilla-esr52/patches/mozilla-esr52-push_355263.patch
  78. 0 93
      mozilla-esr52/patches/mozilla-esr52-push_355264.patch
  79. 0 32
      mozilla-esr52/patches/mozilla-esr52-push_355265.patch
  80. 0 104
      mozilla-esr52/patches/mozilla-esr52-push_355266.patch
  81. 0 132
      mozilla-esr52/patches/mozilla-esr52-push_355267.patch
  82. 0 617
      mozilla-esr52/patches/mozilla-esr52-push_355268.patch
  83. 0 849
      mozilla-esr52/patches/mozilla-esr52-push_355269.patch
  84. 0 248
      mozilla-esr52/patches/mozilla-esr52-push_355270.patch
  85. 0 213
      mozilla-esr52/patches/mozilla-esr52-push_355271.patch
  86. 0 691
      mozilla-esr52/patches/mozilla-esr52-push_355272.patch
  87. 0 169
      mozilla-esr52/patches/mozilla-esr52-push_355273.patch
  88. 0 35
      mozilla-esr52/patches/mozilla-esr52-push_356225.patch
  89. 0 84
      mozilla-esr52/patches/mozilla-esr52-push_356226.patch
  90. 0 33
      mozilla-esr52/patches/mozilla-esr52-push_356227.patch
  91. 0 94
      mozilla-esr52/patches/mozilla-esr52-push_356228.patch
  92. 0 126
      mozilla-esr52/patches/mozilla-esr52-push_356229.patch
  93. 0 70
      mozilla-esr52/patches/mozilla-esr52-push_356230.patch
  94. 0 32
      mozilla-esr52/patches/mozilla-esr52-push_356259.patch
  95. 0 105
      mozilla-esr52/patches/mozilla-esr52-push_356384.patch
  96. 0 32
      mozilla-esr52/patches/mozilla-esr52-push_356385.patch
  97. 0 52
      mozilla-esr52/patches/mozilla-esr52-push_356391.patch
  98. 0 36
      mozilla-esr52/patches/mozilla-esr52-push_356425.patch
  99. 0 33
      mozilla-esr52/patches/mozilla-esr52-push_356660.patch
  100. 0 94
      mozilla-esr52/patches/mozilla-esr52-push_356661.patch

+ 3 - 2
README.md

@@ -1,3 +1,4 @@
-# seamonkey-249-patches
+# seamonkey-wip
 
-SeaMonkey 2.49.x patches for comm-esr52 and mozilla-esr52
+SeaMonkey WIP patches for various repos including:
+rel-esr52

+ 0 - 88
comm-esr52/patches/1503654-cookies.patch

@@ -1,88 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  b54f45abd666a442bf2220b000ef88aea049facd
-Bug 1503654 - Correct comparision and parameter order for cookie removal. r=jorgk a=jorgk
-Port Bug 1259169 and fix port of Bug 1245184.
-
-diff --git a/mail/base/content/sanitize.js b/mail/base/content/sanitize.js
---- a/mail/base/content/sanitize.js
-+++ b/mail/base/content/sanitize.js
-@@ -101,17 +101,17 @@ Sanitizer.prototype = {
-           // Iterate through the cookies and delete any created after our cutoff.
-           var cookiesEnum = Services.cookies.enumerator;
-           while (cookiesEnum.hasMoreElements()) {
-             var cookie = cookiesEnum.getNext().QueryInterface(Ci.nsICookie2);
- 
-             if (cookie.creationTime > this.range[0])
-               // This cookie was created after our cutoff, clear it
-               Services.cookies.remove(cookie.host, cookie.name, cookie.path,
--                                      cookie.originAttributes, false);
-+                                      false, cookie.originAttributes);
-           }
-         }
-         else {
-           // Remove everything
-           Services.cookies.removeAll();
-         }
- 
-         // Clear plugin data.
-diff --git a/mail/components/preferences/cookies.js b/mail/components/preferences/cookies.js
---- a/mail/components/preferences/cookies.js
-+++ b/mail/components/preferences/cookies.js
-@@ -61,17 +61,17 @@ var gCookiesWindow = {
-     this._saveState();
-   },
- 
-   _cookieEquals: function (aCookieA, aCookieB, aStrippedHost)
-   {
-     return aCookieA.rawHost == aStrippedHost &&
-            aCookieA.name == aCookieB.name &&
-            aCookieA.path == aCookieB.path &&
--           !ChromeUtils.compareOriginAttributes(aCookieA.originAttributes,
-+           !ChromeUtils.isOriginAttributesEqual(aCookieA.originAttributes,
-                                                 aCookieB.originAttributes);
-   },
- 
-   observe: function (aCookie, aTopic, aData)
-   {
-     if (aTopic != "cookie-changed")
-       return;
- 
-@@ -281,17 +281,17 @@ var gCookiesWindow = {
-         gCookiesWindow._hosts[item.rawHost] = null;
-       } else {
-         var parent = this._getItemAtIndex(item.parentIndex);
-         for (var i = 0; i < parent.cookies.length; ++i) {
-           var cookie = parent.cookies[i];
-           if (item.rawHost == cookie.rawHost &&
-               item.name == cookie.name &&
-               item.path == cookie.path &&
--              !ChromeUtils.compareOriginAttributes(item.originAttributes,
-+              !ChromeUtils.isOriginAttributesEqual(item.originAttributes,
-                                                    cookie.originAttributes)) {
-             parent.cookies.splice(i, removeCount);
-           }
-         }
-       }
-     },
- 
-     _invalidateCache: function (aIndex)
-@@ -713,17 +713,17 @@ var gCookiesWindow = {
- 
-     var blockFutureCookies = false;
-     if (Services.prefs.prefHasUserValue("network.cookie.blockFutureCookies"))
-       blockFutureCookies = Services.prefs
-         .getBoolPref("network.cookie.blockFutureCookies");
-     for (i = 0; i < deleteItems.length; ++i) {
-       var item = deleteItems[i];
-       Services.cookies.remove(item.host, item.name, item.path,
--                              item.originAttributes, blockFutureCookies);
-+                              blockFutureCookies, item.originAttributes);
-     }
- 
-     if (nextSelected < 0)
-       seln.clearSelection();
-     else {
-       seln.select(nextSelected);
-       this._tree.focus();
-     }

+ 0 - 53
comm-esr52/patches/1503837.patch

@@ -1,53 +0,0 @@
-
-# HG changeset patch
-# User aceman <acelists@atlas.sk>
-# Date 1541675520 -3600
-# Node ID 5ca1b2b18ca0fad0ca0e64665b88d651b5fa5c24
-# Parent  d198e27e20dbf0f45b3ee5a54064c056313b18ab
-Bug 1503837 - Bug 1503654 follow-up: Adapt to inverted logic of ChromeUtils.isOriginAttributesEqual in cookies dialog. r+a=jorgk
-
-diff --git a/mail/components/preferences/cookies.js b/mail/components/preferences/cookies.js
---- a/mail/components/preferences/cookies.js
-+++ b/mail/components/preferences/cookies.js
-@@ -63,18 +63,18 @@ var gCookiesWindow = {
-     this._saveState();
-   },
- 
-   _cookieEquals: function (aCookieA, aCookieB, aStrippedHost)
-   {
-     return aCookieA.rawHost == aStrippedHost &&
-            aCookieA.name == aCookieB.name &&
-            aCookieA.path == aCookieB.path &&
--           !ChromeUtils.isOriginAttributesEqual(aCookieA.originAttributes,
--                                                aCookieB.originAttributes);
-+           ChromeUtils.isOriginAttributesEqual(aCookieA.originAttributes,
-+                                               aCookieB.originAttributes);
-   },
- 
-   observe: function (aCookie, aTopic, aData)
-   {
-     if (aTopic != "cookie-changed")
-       return;
- 
-     if (aCookie instanceof Components.interfaces.nsICookie) {
-@@ -283,18 +283,18 @@ var gCookiesWindow = {
-         gCookiesWindow._hosts[item.rawHost] = null;
-       } else {
-         var parent = this._getItemAtIndex(item.parentIndex);
-         for (var i = 0; i < parent.cookies.length; ++i) {
-           var cookie = parent.cookies[i];
-           if (item.rawHost == cookie.rawHost &&
-               item.name == cookie.name &&
-               item.path == cookie.path &&
--              !ChromeUtils.isOriginAttributesEqual(item.originAttributes,
--                                                   cookie.originAttributes)) {
-+              ChromeUtils.isOriginAttributesEqual(item.originAttributes,
-+                                                  cookie.originAttributes)) {
-             parent.cookies.splice(i, removeCount);
-           }
-         }
-       }
-     },
- 
-     _invalidateCache: function (aIndex)
-     {

+ 0 - 126
comm-esr52/patches/521861-Account_Creation-249.patch

@@ -1,126 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  f6aef73aa4b6bde1406b7d1d49f520fc1bfc7cba
-Bug 521861 - Remove mail.server.serverx.valid prefs during startup.
-
-diff --git a/mailnews/base/src/nsMsgAccountManager.cpp b/mailnews/base/src/nsMsgAccountManager.cpp
---- a/mailnews/base/src/nsMsgAccountManager.cpp
-+++ b/mailnews/base/src/nsMsgAccountManager.cpp
-@@ -66,16 +66,17 @@
- #include "nsILineInputStream.h"
- #include "nsThreadUtils.h"
- #include "nsNetUtil.h"
- #include "nsIStringBundle.h"
- #include "nsMsgMessageFlags.h"
- #include "nsIMsgFilterList.h"
- #include "nsDirectoryServiceUtils.h"
- #include "mozilla/Services.h"
-+#include <string>
- #include <algorithm>
- #include "nsIFileStreams.h"
- #include "nsIOutputStream.h"
- #include "nsISafeOutputStream.h"
- 
- #define PREF_MAIL_ACCOUNTMANAGER_ACCOUNTS "mail.accountmanager.accounts"
- #define PREF_MAIL_ACCOUNTMANAGER_DEFAULTACCOUNT "mail.accountmanager.defaultaccount"
- #define PREF_MAIL_ACCOUNTMANAGER_LOCALFOLDERSSERVER "mail.accountmanager.localfoldersserver"
-@@ -369,16 +370,56 @@ nsMsgAccountManager::GetUniqueServerKey(
-       aResult.AssignLiteral(SERVER_PREFIX);
-       aResult.AppendInt(i++);
-       m_incomingServers.Get(aResult, getter_AddRefs(server));
-     } while (server);
-     return;
-   }
- }
- 
-+template<size_t N>
-+static bool
-+StartsWith(const std::string& haystack, const char (&needle)[N])
-+{
-+    return haystack.compare(0, N - 1, needle) == 0;
-+}
-+
-+nsresult
-+nsMsgAccountManager::CleanServerValidState()
-+{
-+  nsresult rv;
-+  nsCOMPtr<nsIPrefService> prefService =
-+    do_GetService(NS_PREFSERVICE_CONTRACTID, &rv);
-+  NS_ENSURE_SUCCESS(rv, rv);
-+
-+  nsCOMPtr<nsIPrefBranch> prefBranch;
-+
-+  rv = prefService->GetBranch(PREF_MAIL_SERVER_PREFIX,
-+                              getter_AddRefs(prefBranch));
-+  NS_ENSURE_SUCCESS(rv, rv);
-+
-+  uint32_t count;
-+  char **prefList;
-+
-+  rv = prefBranch->GetChildList("", &count, &prefList);
-+  NS_ENSURE_SUCCESS(rv, rv);
-+
-+  // Traverse the list, and look for .valid prefs.
-+  for (uint32_t i = count; i--;) {
-+    // Check if it is a server*.valid key and if yes delete it.
-+    nsDependentCString prefName(prefList[i]);
-+    if (StringEndsWith(prefName, NS_LITERAL_CSTRING(".valid")) &&
-+        StartsWith(prefName.get(), "server")) {
-+      prefBranch->ClearUserPref(prefName.get());
-+    }
-+  }
-+
-+  return NS_OK;
-+}
-+
- nsresult
- nsMsgAccountManager::CreateIdentity(nsIMsgIdentity **_retval)
- {
-   NS_ENSURE_ARG_POINTER(_retval);
-   nsresult rv;
-   nsAutoCString key;
-   nsCOMPtr<nsIMsgIdentity> identity;
-   int32_t i = 1;
-@@ -1154,16 +1195,19 @@ nsMsgAccountManager::LoadAccounts()
-       rv = prefBranch->SetIntPref(APPEND_ACCOUNTS_VERSION_PREF_NAME, appendAccountsCurrentVersion + 1);
-     }
-   }
- 
-   // It is ok to return null accounts like when we create new profile.
-   m_accountsLoaded = true;
-   m_haveShutdown = false;
- 
-+  // Clean up servers. Necessary for later account creation see bug 511861.
-+  rv = CleanServerValidState();
-+
-   if (accountList.IsEmpty())
-       return NS_OK;
- 
-   /* parse accountList and run loadAccount on each string, comma-separated */
-   nsCOMPtr<nsIMsgAccount> account;
-   // Tokenize the data and add each account
-   // in the user's current mailnews account list
-   nsTArray<nsCString> accountsArray;
-diff --git a/mailnews/base/src/nsMsgAccountManager.h b/mailnews/base/src/nsMsgAccountManager.h
---- a/mailnews/base/src/nsMsgAccountManager.h
-+++ b/mailnews/base/src/nsMsgAccountManager.h
-@@ -188,16 +188,19 @@ private:
-   nsresult RemoveVFListenerForVF(nsIMsgFolder *virtualFolder,
-                                  nsIMsgFolder *folder);
- 
-   void getUniqueAccountKey(nsCString& aResult);
- 
-   // Scan the preferences to find a unique server key
-   void GetUniqueServerKey(nsACString& aResult);
- 
-+  // Delete Server valid preference.
-+  nsresult CleanServerValidState();
-+
-   nsresult RemoveFolderFromSmartFolder(nsIMsgFolder *aFolder,
-                                        uint32_t flagsChanged);
- 
-   nsresult SetSendLaterUriPref(nsIMsgIncomingServer *server);
- 
-   nsCOMPtr<nsIPrefBranch> m_prefs;
- 
-   //

+ 0 - 2799
comm-esr52/patches/frg-249-5.patch

@@ -1,2799 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  63ea5db1258777a127afe6af1fa3a7995ea5216d
-frg 2.49.5 private changes
-
-diff --git a/client.py b/client.py
---- a/client.py
-+++ b/client.py
-@@ -13,22 +13,22 @@
- #  "COMM", "MOZILLA", "CHATZILLA", "INSPECTOR"
- DEFAULTS = {
-     # Global Default Revision
-     'REV': "default",
- 
-     # URL of the default hg repository to clone for ChatZilla.
-     'CHATZILLA_REPO': 'https://hg.mozilla.org/chatzilla/',
-     # The stable revision to use
--      'CHATZILLA_REV':  'SEA2_48_RELBRANCH',
-+      'CHATZILLA_REV':  'default',
- 
-     # URL of the default hg repository to clone for DOM Inspector.
-     'INSPECTOR_REPO': 'https://hg.mozilla.org/dom-inspector/',
-     # The stable revision to use
--      'INSPECTOR_REV':  'DOMI_2_0_17',
-+      'INSPECTOR_REV':  'default',
- 
-     # URL of the default hg repository to clone for Mozilla.
-     'MOZILLA_REPO': 'https://hg.mozilla.org/releases/mozilla-esr52/',
- }
- 
- REPO_SHORT_NAMES = {
-     'mozilla-central':  'moz',
-     'dom-inspector':    'dom',
-diff --git a/ldap/c-sdk/include/portable.h b/ldap/c-sdk/include/portable.h
---- a/ldap/c-sdk/include/portable.h
-+++ b/ldap/c-sdk/include/portable.h
-@@ -418,20 +418,16 @@ int select(int, fd_set *, fd_set *, fd_s
- 
- #define strcasecmp strcmpi
- #define strncasecmp _strnicmp
- #define bzero(a, b) memset( a, 0, b )
- #define getpid _getpid
- #define ioctl ioctlsocket
- #define sleep(a) Sleep( a*1000 )
- 
--#define EMSGSIZE WSAEMSGSIZE
--#define EWOULDBLOCK WSAEWOULDBLOCK
--#define EHOSTUNREACH WSAEHOSTUNREACH
--
- #ifndef MAXPATHLEN
- #define MAXPATHLEN _MAX_PATH
- #endif
- 
- /* We'd like this number to be prime for the hash
-  * into the Connection table */
- #define DS_MAX_NT_SOCKET_CONNECTIONS 2003
- 
-diff --git a/suite/browser/browser-prefs.js b/suite/browser/browser-prefs.js
---- a/suite/browser/browser-prefs.js
-+++ b/suite/browser/browser-prefs.js
-@@ -947,16 +947,22 @@ pref("services.sync.prefs.sync.security.
- pref("services.sync.prefs.sync.security.warn_viewing_mixed", true);
- pref("services.sync.prefs.sync.signon.rememberSignons", true);
- pref("services.sync.prefs.sync.spellchecker.dictionary", true);
- pref("services.sync.prefs.sync.xpinstall.whitelist.required", true);
- 
- // Enable the DOM fullscreen API.
- pref("full-screen-api.enabled", true);
- 
-+// frg private
-+pref("data_manager.debug",true);
-+pref("browser.safebrowsing.debug",true);
-+pref("network.IDN_show_punycode",true);
-+pref("browser.toolbars.grippyhidden",true);
-+
- // Most DevTools prefs are set from the shared file
- // devtools/client/preferences/devtools.js, but this one is currently set
- // per-app or per-channel.
- // Number of usages of the web console or scratchpad. If this is less than 5,
- // then pasting code into the web console or scratchpad is disabled
- pref("devtools.selfxss.count", 5);
- 
- // Enable general plugin loading.
-diff --git a/suite/browser/tabbrowser.xml b/suite/browser/tabbrowser.xml
---- a/suite/browser/tabbrowser.xml
-+++ b/suite/browser/tabbrowser.xml
-@@ -294,24 +294,24 @@
-         ]]>
-         </body>
-       </method>
- 
-       <!-- XXXcst This should not be needed, but it seems that the tooltip
-            sizing is happening too early when we want to stop showing the
-            preview.  This clears the label's width early (i.e. when the
-            previous preview disappears) so that when the next tooltip appears,
--           it doesn't start with a bad size.  For now, I blame Gecko. -->
-+           it doesn't start with a bad size. For now, I blame Gecko. -->
-       <method name="resetPreview">
-         <parameter name="aPopup"/>
-         <body>
-         <![CDATA[
-           var label = aPopup.firstChild;
--          // if this function is removed, these two lines need to be restored
--          // to the non-preview codepath above
-+          // If this function is removed, these two lines need to be restored
-+          // to the non-preview codepath above.
-           label.removeAttribute("width");
-           aPopup.removeAttribute("tabpreview");
-         ]]>
-         </body>
-       </method>
- 
-       <method name="previewTab">
-         <parameter name="aTab"/>
-@@ -443,18 +443,16 @@
-             mTab: aTab,
-             mBrowser: aBrowser,
-             mBlank: aStartsBlank,
-             mFeeds: [],
-             mRequest: null,
-             mStateFlags: 0,
-             mStatus: 0,
-             mMessage: "",
--            mCurProgress: 0,
--            mMaxProgress: 0,
- 
-             // cache flags for correct status UI update after tab switching
-             mTotalProgress: 0,
- 
-             // count of open requests (should always be 0 or 1)
-             mRequestCount: 0,
- 
-             _callProgressListeners: function () {
-@@ -474,29 +472,28 @@
-                 return false;
- 
-               return true;
-             },
- 
-             onProgressChange: function (aWebProgress, aRequest,
-                                         aCurSelfProgress, aMaxSelfProgress,
-                                         aCurTotalProgress, aMaxTotalProgress) {
--              if (aMaxTotalProgress > 0)
--                this.mTab.setAttribute("progress", Math.floor(aCurTotalProgress * 9.9 / aMaxTotalProgress));
--
--              if (this.mBlank)
-+              this.mTotalProgress = aMaxTotalProgress ? aCurTotalProgress / aMaxTotalProgress : 0;
-+
-+              if (!this._shouldShowProgress(aRequest))
-                 return;
- 
--              this.mCurProgress = aCurTotalProgress;
--              this.mMaxProgress = aMaxTotalProgress;
--
--              this.mTabBrowser._callProgressListeners(this.mBrowser, "onProgressChange",
--                                                      [aWebProgress, aRequest,
--                                                      aCurSelfProgress, aMaxSelfProgress,
--                                                      aCurTotalProgress, aMaxTotalProgress]);
-+              if (this.mTotalProgress)
-+                this.mTab.setAttribute("progress", "true");
-+
-+              this._callProgressListeners("onProgressChange",
-+                                          [aWebProgress, aRequest,
-+                                           aCurSelfProgress, aMaxSelfProgress,
-+                                           aCurTotalProgress, aMaxTotalProgress]);
-             },
- 
-             onProgressChange64: function (aWebProgress, aRequest,
-                                           aCurSelfProgress, aMaxSelfProgress,
-                                           aCurTotalProgress, aMaxTotalProgress) {
-               return this.onProgressChange(aWebProgress, aRequest,
-                 aCurSelfProgress, aMaxSelfProgress, aCurTotalProgress,
-                 aMaxTotalProgress);
-@@ -1178,33 +1175,22 @@
- 
-             this._callProgressListeners(null, "onStatusChange",
-                                         [this.mCurrentBrowser.webProgress,
-                                          tabListener.mRequest,
-                                          tabListener.mStatus,
-                                          tabListener.mMessage],
-                                         true, false);
- 
--            this._callProgressListeners(null, "onProgressChange",
--                                        [this.mCurrentBrowser.webProgress,
--                                         tabListener.mRequest,
--                                         tabListener.mCurProgress,
--                                         tabListener.mMaxProgress,
--                                         tabListener.mCurProgress,
--                                         tabListener.mMaxProgress],
--                                        true, false);
--
-             // Also send the onUpdateCurrentBrowser event for compatibility
--            var progress = tabListener.mMaxProgress > 0 ?
--                tabListener.mCurProgress / tabListener.mMaxProgress : 0;
-             this._callProgressListeners(null, "onUpdateCurrentBrowser",
-                                         [tabListener.mStateFlags,
-                                          tabListener.mStatus,
-                                          tabListener.mMessage,
--                                         progress],
-+                                         tabListener.mTotalProgress],
-                                         true, false);
- 
-             if (this.mAeroPeek)
-               return;
- 
-             // we only want to return to the parent tab if no other
-             // tabs have been opened and the user hasn't switched tabs
-             this.mPreviousTab = null;
-@@ -2198,16 +2184,25 @@
-               if (browser.outerWindowID == aID)
-                 return browser;
- 
-             return null;
-           ]]>
-         </body>
-       </method>
- 
-+      <method name="getBrowserContainer">
-+        <parameter name="aBrowser"/>
-+        <body>
-+          <![CDATA[
-+            return (aBrowser || this.mCurrentBrowser).parentNode.parentNode;
-+          ]]>
-+        </body>
-+      </method>
-+
-       <method name="getTabIndex">
-         <parameter name="aTab"/>
-         <body>
-           <![CDATA[
-             for (var i = 0; i < this.tabs.length; ++i)
-               if (this.tabs[i] == aTab)
-                 return i;
- 
-diff --git a/suite/common/permissions/permissionsManager.js b/suite/common/permissions/permissionsManager.js
---- a/suite/common/permissions/permissionsManager.js
-+++ b/suite/common/permissions/permissionsManager.js
-@@ -48,29 +48,36 @@ function Startup() {
-                                 .getService(nsIPermissionManager);
- 
-   permissionsTree = document.getElementById("permissionsTree");
- 
-   permissionsBundle = document.getElementById("permissionsBundle");
- 
-   sortAscending = (permissionsTree.getAttribute("sortAscending") == "true");
-   sortColumn = permissionsTree.getAttribute("sortColumn");
-+  
-+  var params = { blockVisible   : true,
-+                 sessionVisible : true,
-+                 allowVisible   : true,
-+                 manageCapability : true
-+               };
- 
-   if (window.arguments && window.arguments[0]) {
--    var params = window.arguments[0];
--    document.getElementById("btnBlock").hidden = !params.blockVisible;
--    document.getElementById("btnSession").hidden = !params.sessionVisible;
--    document.getElementById("btnAllow").hidden = !params.allowVisible;
-+    params = window.arguments[0];
-     setHost(params.prefilledHost);
-     permissionType = params.permissionType;
-     gManageCapability = params.manageCapability;
-     introText = params.introText;
-     windowTitle = params.windowTitle;
-   }
- 
-+  document.getElementById("btnBlock").hidden = !params.blockVisible;
-+  document.getElementById("btnSession").hidden = !params.sessionVisible;
-+  document.getElementById("btnAllow").hidden = !params.allowVisible;
-+
-   document.getElementById("permissionsText").textContent = introText ||
-       permissionsBundle.getString(permissionType + "permissionstext");
- 
-   document.title = windowTitle ||
-       permissionsBundle.getString(permissionType + "permissionstitle");
- 
-   var dialogElement = document.getElementById("permissionsManager");
-   dialogElement.setAttribute("windowtype", "permissions-" + permissionType);
-@@ -94,18 +101,19 @@ function onAccept() {
- 
-   return true;
- }
- 
- function setHost(aHost) {
-   document.getElementById("url").value = aHost;
- }
- 
--function Permission(id, host, rawHost, type, capability, perm) {
-+function Permission(id, principal, host, rawHost, type, capability, perm) {
-   this.id = id;
-+  this.principal = principal;
-   this.host = host;
-   this.rawHost = rawHost;
-   this.type = type;
-   this.capability = capability;
-   this.perm = perm;
- }
- 
- function handleHostInput(aSiteField) {
-@@ -131,17 +139,17 @@ function loadPermissions() {
-   var count = 0;
-   var permission;
- 
-   try {
-     while (enumerator.hasMoreElements()) {
-       permission = enumerator.getNext().QueryInterface(Components.interfaces.nsIPermission);
-       if (permission.type == permissionType &&
-           (!gManageCapability || permission.capability == gManageCapability))
--        permissionPush(count++, permission.host, permission.type,
-+        permissionPush(count++, permission.principal, permission.principal.URI.host, permission.type,
-                        capabilityString(permission.capability), permission.capability);
-     }
-   } catch(ex) {
-   }
- 
-   permissionsTreeView.rowCount = additions.length;
- 
-   // sort and display the table
-@@ -166,19 +174,19 @@ function capabilityString(aCapability) {
-       capability = "canSession";
-       break;
-     default:
-       break;
-   }
-   return permissionsBundle.getString(capability);
- }
- 
--function permissionPush(aId, aHost, aType, aString, aCapability) {
--  var rawHost = (aHost.charAt(0) == ".") ? aHost.substring(1, aHost.length) : aHost;
--  var p = new Permission(aId, aHost, rawHost, aType, aString, aCapability);
-+function permissionPush(aId, aPrincipal, aHost, aType, aString, aCapability) {
-+  var rawHost = aHost.replace(/^\./, "");
-+  var p = new Permission(aId, aPrincipal, aHost, rawHost, aType, aString, aCapability);
-   additions.push(p);
- }
- 
- function permissionColumnSort(aColumn, aUpdateSelection) {
-   sortAscending =
-     SortTree(permissionsTree, permissionsTreeView, additions,
-              aColumn, sortColumn, sortAscending, aUpdateSelection);
-   sortColumn = aColumn;
-@@ -202,19 +210,21 @@ function deleteAllPermissions() {
- }
- 
- function finalizeChanges() {
-   var ioService = Components.classes["@mozilla.org/network/io-service;1"]
-                             .getService(Components.interfaces.nsIIOService);
-   var i, p;
- 
-   for (i in removals) {
--    p = removals[i];
-     try {
--      permissionManager.remove(p.host, p.type);
-+      // principal is not null so not a permission we just added in this session
-+      if (removals[i].principal) {
-+        permissionManager.removeFromPrincipal(removals[i].principal, removals[i].type);
-+      }
-     } catch(ex) {
-     }
-   }
- 
-   for (i in additions) {
-     p = additions[i];
-     try {
-       var uri = ioService.newURI("http://" + p.host, null, null);
-@@ -262,17 +272,17 @@ function addPermission(aPermission) {
-       // the same. Otherwise allow the call to the permissions manager to
-       // update the listbox for us.
-       exists = additions[i].perm == aPermission;
-       break;
-     }
-   }
- 
-   if (!exists) {
--    permissionPush(additions.length, host, permissionType, stringCapability, aPermission);
-+    permissionPush(additions.length, null, host, permissionType, stringCapability, aPermission);
- 
-     permissionsTreeView.rowCount = additions.length;
-     permissionsTree.treeBoxObject.rowCountChanged(additions.length - 1, 1);
-     permissionsTree.treeBoxObject.ensureRowIsVisible(additions.length - 1);
-   }
-   textbox.value = "";
-   textbox.focus();
- 
-diff --git a/suite/common/places/tests/chrome/test_bug549192.xul b/suite/common/places/tests/chrome/test_bug549192.xul
---- a/suite/common/places/tests/chrome/test_bug549192.xul
-+++ b/suite/common/places/tests/chrome/test_bug549192.xul
-@@ -13,18 +13,16 @@
- <?xml-stylesheet href="chrome://communicator/skin/places/places.css"?>
- <?xul-overlay href="chrome://communicator/content/bookmarks/placesOverlay.xul"?>
- 
- <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         title="549192:  History view not updated after deleting entry"
-         onload="runTest();">
- 
-   <script type="application/javascript"
--          src="chrome://mochikit/content/MochiKit/packed.js" />
--  <script type="application/javascript"
-           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
-   <script type="application/javascript" src="head.js" />
- 
-   <body xmlns="http://www.w3.org/1999/xhtml" />
- 
-   <tree id="tree"
-         type="places"
-         flatList="true"
-@@ -32,91 +30,84 @@
-     <treecols>
-       <treecol label="Title" id="title" anonid="title" primary="true" ordinal="1" flex="1"/>
-     </treecols>
-     <treechildren flex="1"/>
-   </tree>
- 
-   <script type="application/javascript"><![CDATA[
-     /**
-+     * Bug 874407
-+     * Ensures that history views are updated properly after visits.
-      * Bug 549192
--     * https://bugzilla.mozilla.org/show_bug.cgi?id=549192
--     *
-      * Ensures that history views are updated after deleting entries.
-      */
--      Components.utils.import("resource://gre/modules/Services.jsm");
--      const Cc = Components.classes;
--      const Ci = Components.interfaces;
--
--    SimpleTest.waitForExplicitFinish();
- 
-     function runTest() {
--      // The mochitest page is added to history.
--      waitForClearHistory(continue_test);
--    }
-+      SimpleTest.waitForExplicitFinish();
-+
-+      Task.spawn(function* () {
-+        yield PlacesTestUtils.clearHistory();
- 
--    function continue_test() {
--
--      // Add some visits.
--      let vtime = Date.now() * 1000;
--      const ttype = PlacesUtils.history.TRANSITION_TYPED;
-+        // Add some visits.
-+        let vtime = Date.now() * 1000;
-+        const ttype = PlacesUtils.history.TRANSITION_TYPED;
-+        let places =
-+          [{ uri: Services.io.newURI("http://example.tld/", null, null),
-+             visitDate: ++vtime, transition: ttype },
-+           { uri: Services.io.newURI("http://example2.tld/", null, null),
-+             visitDate: ++vtime, transition: ttype },
-+           { uri: Services.io.newURI("http://example3.tld/", null, null),
-+             visitDate: ++vtime, transition: ttype }];
- 
--      addVisits(
--        [{ uri: Services.io.newURI("http://example.tld/", null, null),
--           visitDate: vtime, transition: ttype },
--         { uri: Services.io.newURI("http://example2.tld/", null, null),
--           visitDate: vtime++, transition: ttype },
--         { uri: Services.io.newURI("http://example3.tld/", null, null),
--           visitDate: vtime++, transition: ttype }],
--         function() {
--           // Make a history query.
--           let query = PlacesUtils.history.getNewQuery();
--           let opts = PlacesUtils.history.getNewQueryOptions();
--           let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts);
-+        yield PlacesTestUtils.addVisits(places);
-+
-+        // Make a history query.
-+        let query = PlacesUtils.history.getNewQuery();
-+        let opts = PlacesUtils.history.getNewQueryOptions();
-+        opts.sortingMode = opts.SORT_BY_DATE_DESCENDING;
-+        let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts);
- 
--           // Setup the places tree contents.
--           var tree = document.getElementById("tree");
--           tree.place = queryURI;
-+        // Setup the places tree contents.
-+        var tree = document.getElementById("tree");
-+        tree.place = queryURI;
-+
-+        // loop through the rows and check them.
-+        let treeView = tree.view;
-+        let selection = treeView.selection;
-+        let rc = treeView.rowCount;
- 
--          // loop through the rows and check formatting
--          let treeView = tree.view;
--          for (let i = 0; i < rc; i++) {
--            selection.select(rc);
--            let node = tree.selectedNode;
--            ok(true, "found " + node.title);
--          }
--          let rc = treeView.rowCount;
--          is(rc, 3, "Rows found.");
--          let selection = treeView.selection;
--          for (let i = 0; i < rc; i++) {
--            selection.select(0);
--            let node = tree.selectedNode;
--            tree.controller.remove("Removing page");
--            ok(treeView.treeIndexForNode(node) == Ci.nsINavHistoryResultTreeViewer.INDEX_INVISIBLE,
--              node.uri + " removed.");
--            ok(treeView.rowCount == rc - i - 1, "Rows count decreased");
--          }
-+        for (let i = 0; i < rc; i++) {
-+          selection.select(i);
-+          let node = tree.selectedNode;
-+          is(node.uri, places[rc - i - 1].uri.spec,
-+             "Found expected node at position " + i + ".");
-+        }
-+
-+        is(rc, 3, "Found expected number of rows.");
-+
-+        // First check live-update of the view when adding visits.
-+        places.forEach(place => place.visitDate = ++vtime);
-+        yield PlacesTestUtils.addVisits(places);
- 
--          // Cleanup.
--          waitForClearHistory(SimpleTest.finish);
-+        for (let i = 0; i < rc; i++) {
-+          selection.select(i);
-+          let node = tree.selectedNode;
-+          is(node.uri, places[rc - i - 1].uri.spec,
-+             "Found expected node at position " + i + ".");
-         }
--      );
--    }
- 
--    /**
--     * Clears history invoking callback when done.
--     */
--    function waitForClearHistory(aCallback) {
--      const TOPIC_EXPIRATION_FINISHED = "places-expiration-finished";
--      let observer = {
--        observe: function(aSubject, aTopic, aData) {
--          Services.obs.removeObserver(this, TOPIC_EXPIRATION_FINISHED);
--          aCallback();
-+        // Now remove the pages and verify live-update again.
-+        for (let i = 0; i < rc; i++) {
-+          selection.select(0);
-+          let node = tree.selectedNode;
-+          tree.controller.remove("Removing page");
-+          ok(treeView.treeIndexForNode(node) == Ci.nsINavHistoryResultTreeViewer.INDEX_INVISIBLE,
-+            node.uri + " removed.");
-+          ok(treeView.rowCount == rc - i - 1, "Rows count decreased");
-         }
--      };
--      Services.obs.addObserver(observer, TOPIC_EXPIRATION_FINISHED, false);
--      let hs = Cc["@mozilla.org/browser/nav-history-service;1"].
--               getService(Ci.nsINavHistoryService);
--      hs.QueryInterface(Ci.nsIBrowserHistory).removeAllPages();
--   }
- 
-+        // Cleanup.
-+        yield PlacesTestUtils.clearHistory();
-+      }).then(() => SimpleTest.finish());
-+    }
-   ]]></script>
- </window>
-diff --git a/suite/common/places/tests/chrome/test_bug549491.xul b/suite/common/places/tests/chrome/test_bug549491.xul
---- a/suite/common/places/tests/chrome/test_bug549491.xul
-+++ b/suite/common/places/tests/chrome/test_bug549491.xul
-@@ -13,18 +13,16 @@
- <?xml-stylesheet href="chrome://communicator/skin/places/places.css"?>
- <?xul-overlay href="chrome://communicator/content/bookmarks/placesOverlay.xul"?>
- 
- <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         title="549491: 'The root node is never visible' exception when details of the root node are modified "
-         onload="runTest();">
- 
-   <script type="application/javascript"
--          src="chrome://mochikit/content/MochiKit/packed.js" />
--  <script type="application/javascript"
-           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
-   <script type="application/javascript" src="head.js" />
- 
-   <body xmlns="http://www.w3.org/1999/xhtml" />
- 
-   <tree id="tree"
-         type="places"
-         flatList="true"
-@@ -40,64 +38,41 @@
-   <script type="application/javascript"><![CDATA[
-     /**
-      * Bug 549491
-      * https://bugzilla.mozilla.org/show_bug.cgi?id=549491
-      *
-      * Ensures that changing the details of places tree's root-node doesn't
-      * throw.
-      */
--      Components.utils.import("resource://gre/modules/Services.jsm");
--      const Cc = Components.classes;
--      const Ci = Components.interfaces;
--
--    SimpleTest.waitForExplicitFinish();
- 
-     function runTest() {
--      // The mochitest page is added to history.
--      waitForClearHistory(continue_test);
--    }
-+      SimpleTest.waitForExplicitFinish();
-+
-+      Task.spawn(function* () {
-+        yield PlacesTestUtils.clearHistory();
- 
--    function continue_test() {
--      addVisits(
--        {uri: Services.io.newURI("http://example.tld/", null, null),
--         visitDate: Date.now() * 1000,
--         transition: PlacesUtils.history.TRANSITION_TYPED},
--        function() {
--          // Make a history query.
--          let query = PlacesUtils.history.getNewQuery();
--          let opts = PlacesUtils.history.getNewQueryOptions();
--          let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts);
-+        yield PlacesTestUtils.addVisits({
-+          uri: Services.io.newURI("http://example.tld/", null, null),
-+          transition: PlacesUtils.history.TRANSITION_TYPED
-+        });
- 
--          // Setup the places tree contents.
--          let tree = document.getElementById("tree");
--          tree.place = queryURI;
-+        // Make a history query.
-+        let query = PlacesUtils.history.getNewQuery();
-+        let opts = PlacesUtils.history.getNewQueryOptions();
-+        let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts);
- 
--          let rootNode = tree.result.root;
--          let obs = tree.view.QueryInterface(Ci.nsINavHistoryResultObserver);
--          obs.nodeHistoryDetailsChanged(rootNode, rootNode.time, rootNode.accessCount);
--          obs.nodeTitleChanged(rootNode, rootNode.title);
--          ok(true, "No exceptions thrown");
--
--          // Cleanup.
--          waitForClearHistory(SimpleTest.finish);
--        });
--    }
-+        // Setup the places tree contents.
-+        let tree = document.getElementById("tree");
-+        tree.place = queryURI;
- 
--    /**
--     * Clears history invoking callback when done.
--     */
--    function waitForClearHistory(aCallback) {
--      const TOPIC_EXPIRATION_FINISHED = "places-expiration-finished";
--      let observer = {
--        observe: function(aSubject, aTopic, aData) {
--          Services.obs.removeObserver(this, TOPIC_EXPIRATION_FINISHED);
--          aCallback();
--        }
--      };
--      Services.obs.addObserver(observer, TOPIC_EXPIRATION_FINISHED, false);
--      let hs = Cc["@mozilla.org/browser/nav-history-service;1"].
--               getService(Ci.nsINavHistoryService);
--      hs.QueryInterface(Ci.nsIBrowserHistory).removeAllPages();
--   }
-+        let rootNode = tree.result.root;
-+        let obs = tree.view.QueryInterface(Ci.nsINavHistoryResultObserver);
-+        obs.nodeHistoryDetailsChanged(rootNode, rootNode.time, rootNode.accessCount);
-+        obs.nodeTitleChanged(rootNode, rootNode.title);
-+        ok(true, "No exceptions thrown");
- 
-+        // Cleanup.
-+        yield PlacesTestUtils.clearHistory();
-+      }).then(SimpleTest.finish);
-+    }
-   ]]></script>
- </window>
-diff --git a/suite/common/places/tests/chrome/test_treeview_date.xul b/suite/common/places/tests/chrome/test_treeview_date.xul
---- a/suite/common/places/tests/chrome/test_treeview_date.xul
-+++ b/suite/common/places/tests/chrome/test_treeview_date.xul
-@@ -12,18 +12,16 @@
- <?xml-stylesheet href="chrome://communicator/skin/places/places.css"?>
- <?xul-overlay href="chrome://communicator/content/bookmarks/placesOverlay.xul"?>
- 
- <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
-         title="435322: Places tree view's formatting"
-         onload="runTest();">
- 
-   <script type="application/javascript"
--          src="chrome://mochikit/content/MochiKit/packed.js" />
--  <script type="application/javascript"
-           src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js" />
-   <script type="application/javascript" src="head.js" />
- 
-   <body xmlns="http://www.w3.org/1999/xhtml" />
- 
-   <tree id="tree"
-         type="places"
-         flatList="true"
-@@ -46,149 +44,121 @@
-   <![CDATA[
- 
-     /**
-      * Bug 435322
-      * https://bugzilla.mozilla.org/show_bug.cgi?id=435322
-      *
-      * Ensures that date in places treeviews is correctly formatted.
-      */
--      Components.utils.import("resource://gre/modules/Services.jsm");
--      const Cc = Components.classes;
--      const Ci = Components.interfaces;
--
--    SimpleTest.waitForExplicitFinish();
- 
-     function runTest() {
--      // The mochitest page is added to history.
--      waitForClearHistory(continue_test);
--    }
--
--    function continue_test() {
-+      SimpleTest.waitForExplicitFinish();
- 
--      var hs = Cc["@mozilla.org/browser/nav-history-service;1"].
--               getService(Ci.nsINavHistoryService);
--      var bh = hs.QueryInterface(Ci.nsIBrowserHistory);
--      var bs = Cc["@mozilla.org/browser/nav-bookmarks-service;1"].
--               getService(Ci.nsINavBookmarksService);
--      var ds = Cc["@mozilla.org/intl/scriptabledateformat;1"].
-+      let ds = Cc["@mozilla.org/intl/scriptabledateformat;1"].
-                getService(Ci.nsIScriptableDateFormat);
- 
--      var iosvc = Cc["@mozilla.org/network/io-service;1"].
--                  getService(Ci.nsIIOService);
-       function uri(spec) {
--        return iosvc.newURI(spec, null, null);
-+        return Services.io.newURI(spec, null, null);
-       }
- 
--      var midnight = new Date();
--      midnight.setHours(0);
--      midnight.setMinutes(0);
--      midnight.setSeconds(0);
--      midnight.setMilliseconds(0);
-+      Task.spawn(function* () {
-+        yield PlacesTestUtils.clearHistory();
-+
-+        let midnight = new Date();
-+        midnight.setHours(0);
-+        midnight.setMinutes(0);
-+        midnight.setSeconds(0);
-+        midnight.setMilliseconds(0);
- 
--      function addVisitsCallback() {
-+        // Add a visit 1ms before midnight, a visit at midnight, and
-+        // a visit 1ms after midnight.
-+        yield PlacesTestUtils.addVisits([
-+          {uri: uri("http://before.midnight.com/"),
-+           visitDate: (midnight.getTime() - 1) * 1000,
-+           transition: PlacesUtils.history.TRANSITION_TYPED},
-+          {uri: uri("http://at.midnight.com/"),
-+           visitDate: (midnight.getTime()) * 1000,
-+           transition: PlacesUtils.history.TRANSITION_TYPED},
-+          {uri: uri("http://after.midnight.com/"),
-+           visitDate: (midnight.getTime() + 1) * 1000,
-+           transition: PlacesUtils.history.TRANSITION_TYPED}
-+        ]);
-+
-         // add a bookmark to the midnight visit
--        var itemId = bs.insertBookmark(bs.toolbarFolder,
--                                       uri("http://at.midnight.com/"),
--                                       bs.DEFAULT_INDEX,
--                                       "A bookmark at midnight");
-+        let bm = yield PlacesUtils.bookmarks.insert({
-+          parentGuid: PlacesUtils.bookmarks.toolbarGuid,
-+          index: PlacesUtils.bookmarks.DEFAULT_INDEX,
-+          url: "http://at.midnight.com/",
-+          title: "A bookmark at midnight",
-+          type: PlacesUtils.bookmarks.TYPE_BOOKMARK
-+        });
-+
-         // Make a history query.
--        var query = hs.getNewQuery();
--        var opts = hs.getNewQueryOptions();
--        var queryURI = hs.queriesToQueryString([query], 1, opts);
-+        let query = PlacesUtils.history.getNewQuery();
-+        let opts = PlacesUtils.history.getNewQueryOptions();
-+        let queryURI = PlacesUtils.history.queriesToQueryString([query], 1, opts);
- 
-         // Setup the places tree contents.
--        var tree = document.getElementById("tree");
-+        let tree = document.getElementById("tree");
-         tree.place = queryURI;
- 
-         // loop through the rows and check formatting
--        var treeView = tree.view;
--        var rc = treeView.rowCount;
-+        let treeView = tree.view;
-+        let rc = treeView.rowCount;
-         ok(rc >= 3, "Rows found");
--        var columns = tree.columns;
-+        let columns = tree.columns;
-         ok(columns.count > 0, "Columns found");
--        for (var r = 0; r < rc; r++) {
--          var node = treeView.nodeForTreeIndex(r);
-+        for (let r = 0; r < rc; r++) {
-+          let node = treeView.nodeForTreeIndex(r);
-           ok(node, "Places node found");
--          for (var ci = 0; ci < columns.count; ci++) {
--            var c = columns.getColumnAt(ci);
--            var text = treeView.getCellText(r, c);
-+          for (let ci = 0; ci < columns.count; ci++) {
-+            let c = columns.getColumnAt(ci);
-+            let text = treeView.getCellText(r, c);
-             switch (c.element.getAttribute("anonid")) {
-               case "title":
-                 // The title can differ, we did not set any title so we would
-                 // expect null, but in such a case the view will generate a title
-                 // through PlacesUIUtils.getBestTitle.
-                 if (node.title)
-                   is(text, node.title, "Title is correct");
-                 break;
-               case "url":
-                 is(text, node.uri, "Uri is correct");
-                 break;
-               case "date":
--                var timeObj = new Date(node.time / 1000);
-+                let timeObj = new Date(node.time / 1000);
-                 // Default is short date format.
--                var dateFormat = Ci.nsIScriptableDateFormat.dateFormatShort;
-+                let dateFormat = Ci.nsIScriptableDateFormat.dateFormatShort;
-                 // For today's visits we don't show date portion.
-                 if (node.uri == "http://at.midnight.com/" ||
-                     node.uri == "http://after.midnight.com/")
-                   dateFormat = Ci.nsIScriptableDateFormat.dateFormatNone;
-                 else if (node.uri == "http://before.midnight.com/")
-                   dateFormat = Ci.nsIScriptableDateFormat.dateFormatShort;
-                 else {
-                   // Avoid to test spurious uris, due to how the test works
-                   // a redirecting uri could be put in the tree while we test.
-                   break;
-                 }
--                var timeStr = ds.FormatDateTime("", dateFormat,
-+                let timeStr = ds.FormatDateTime("", dateFormat,
-                       Ci.nsIScriptableDateFormat.timeFormatNoSeconds,
-                       timeObj.getFullYear(), timeObj.getMonth() + 1,
-                       timeObj.getDate(), timeObj.getHours(),
-                       timeObj.getMinutes(), timeObj.getSeconds())
- 
-                 is(text, timeStr, "Date format is correct");
-                 break;
-               case "visitCount":
-                 is(text, 1, "Visit count is correct");
-                 break;
-             }
-           }
-         }
-+
-         // Cleanup.
--        bs.removeItem(itemId);
--        waitForClearHistory(SimpleTest.finish);
--      }
--
--      // Add a visit 1ms before midnight, a visit at midnight, and a visit 1ms
--      // after midnight.
--      addVisits(
--        [{uri: uri("http://before.midnight.com/"),
--          visitDate: (midnight.getTime() - 1) * 1000,
--          transition: hs.TRANSITION_TYPED},
--         {uri: uri("http://at.midnight.com/"),
--          visitDate: (midnight.getTime()) * 1000,
--          transition: hs.TRANSITION_TYPED},
--         {uri: uri("http://after.midnight.com/"),
--          visitDate: (midnight.getTime() + 1) * 1000,
--          transition: hs.TRANSITION_TYPED}],
--       addVisitsCallback);
--
-+        yield PlacesUtils.bookmarks.remove(bm.guid);
-+        yield PlacesTestUtils.clearHistory();
-+      }).then(SimpleTest.finish);
-     }
--
--    /**
--     * Clears history invoking callback when done.
--     */
--    function waitForClearHistory(aCallback) {
--      const TOPIC_EXPIRATION_FINISHED = "places-expiration-finished";
--      let observer = {
--        observe: function(aSubject, aTopic, aData) {
--          Services.obs.removeObserver(this, TOPIC_EXPIRATION_FINISHED);
--          aCallback();
--        }
--      };
--      Services.obs.addObserver(observer, TOPIC_EXPIRATION_FINISHED, false);
--      let hs = Cc["@mozilla.org/browser/nav-history-service;1"].
--               getService(Ci.nsINavHistoryService);
--      hs.QueryInterface(Ci.nsIBrowserHistory).removeAllPages();
--   }
--
-   ]]>
-   </script>
- </window>
-diff --git a/suite/common/src/nsSuiteGlue.js b/suite/common/src/nsSuiteGlue.js
---- a/suite/common/src/nsSuiteGlue.js
-+++ b/suite/common/src/nsSuiteGlue.js
-@@ -33,16 +33,19 @@ XPCOMUtils.defineLazyModuleGetter(this, 
-                                   "resource://gre/modules/BookmarkHTMLUtils.jsm");
- 
- XPCOMUtils.defineLazyModuleGetter(this, "BookmarkJSONUtils",
-                                   "resource://gre/modules/BookmarkJSONUtils.jsm");
- 
- XPCOMUtils.defineLazyModuleGetter(this, "Task",
-                                   "resource://gre/modules/Task.jsm");
- 
-+XPCOMUtils.defineLazyModuleGetter(this, "RecentWindow",
-+                                  "resource:///modules/RecentWindow.jsm");
-+
- XPCOMUtils.defineLazyGetter(this, "DebuggerServer", () => {
-   var tmp = {};
-   Components.utils.import("resource://devtools/shared/Loader.jsm", tmp);
-   return tmp.require("devtools/server/main").DebuggerServer;
- });
- 
- // We try to backup bookmarks at idle times, to avoid doing that at shutdown.
- // Number of idle seconds before trying to backup bookmarks.  15 minutes.
-diff --git a/suite/confvars.sh b/suite/confvars.sh
---- a/suite/confvars.sh
-+++ b/suite/confvars.sh
-@@ -43,8 +43,10 @@ MOZ_SEPARATE_MANIFEST_FOR_THEME_OVERRIDE
- 
- if test "$OS_ARCH" = "WINNT" -o \
-         "$OS_ARCH" = "Linux"; then
-   MOZ_BUNDLED_FONTS=1
- fi
- 
- # Include the DevTools client, not just the server (which is the default)
- MOZ_DEVTOOLS=all
-+# Include Lightning
-+MOZ_CALENDAR=1
-diff --git a/suite/installer/package-manifest.in b/suite/installer/package-manifest.in
---- a/suite/installer/package-manifest.in
-+++ b/suite/installer/package-manifest.in
-@@ -896,17 +896,17 @@ bin/libfreebl_32int64_3.so
- ; Address Sanitizer
- #if defined(CLANG_CXX)
- #if defined(MOZ_ASAN) || defined(MOZ_TSAN)
- @BINPATH@/llvm-symbolizer
- #endif
- #endif
- 
- #if defined(MOZ_ASAN) && defined(CLANG_CL)
--@BINPATH@/clang_rt.asan_dynamic-i386.dll
-+@BINPATH@/clang_rt.asan_dynamic-*.dll
- #endif
- 
- [chatzilla]
- #ifdef MOZ_OMNIJAR
- @RESPATH@/distribution/extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}.xpi
- #else
- @RESPATH@/extensions/{59c81df5-4b7a-477b-912d-4e0fdf64e5f2}/chrome/chatzilla@JAREXT@
- #ifdef MOZ_GTK
-diff --git a/suite/modules/RecentWindow.jsm b/suite/modules/RecentWindow.jsm
-new file mode 100644
---- /dev/null
-+++ b/suite/modules/RecentWindow.jsm
-@@ -0,0 +1,66 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-+ * You can obtain one at http://mozilla.org/MPL/2.0/. */
-+
-+"use strict";
-+
-+this.EXPORTED_SYMBOLS = ["RecentWindow"];
-+
-+Components.utils.import("resource://gre/modules/AppConstants.jsm");
-+Components.utils.import("resource://gre/modules/Services.jsm");
-+Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
-+
-+this.RecentWindow = {
-+  /*
-+   * Get the most recent browser window.
-+   *
-+   * @param aOptions an object accepting the arguments for the search.
-+   *        * private: true to restrict the search to private windows
-+   *            only, false to restrict the search to non-private only.
-+   *            Omit the property to search in both groups.
-+   *        * allowPopups: true if popup windows are permissable.
-+   */
-+  getMostRecentBrowserWindow: function RW_getMostRecentBrowserWindow(aOptions) {
-+    let checkPrivacy = typeof aOptions == "object" &&
-+                       "private" in aOptions;
-+
-+    let allowPopups = typeof aOptions == "object" && !!aOptions.allowPopups;
-+
-+    function isSuitableBrowserWindow(win) {
-+      return (!win.closed &&
-+              (allowPopups || win.toolbar.visible) &&
-+              (!checkPrivacy ||
-+               PrivateBrowsingUtils.permanentPrivateBrowsing ||
-+               PrivateBrowsingUtils.isWindowPrivate(win) == aOptions.private));
-+    }
-+
-+    let broken_wm_z_order =
-+      AppConstants.platform != "macosx" && AppConstants.platform != "win";
-+
-+    if (broken_wm_z_order) {
-+      let win = Services.wm.getMostRecentWindow("navigator:browser");
-+
-+      // if we're lucky, this isn't a popup, and we can just return this
-+      if (win && !isSuitableBrowserWindow(win)) {
-+        win = null;
-+        let windowList = Services.wm.getEnumerator("navigator:browser");
-+        // this is oldest to newest, so this gets a bit ugly
-+        while (windowList.hasMoreElements()) {
-+          let nextWin = windowList.getNext();
-+          if (isSuitableBrowserWindow(nextWin))
-+            win = nextWin;
-+        }
-+      }
-+      return win;
-+    } else {
-+      let windowList = Services.wm.getZOrderDOMWindowEnumerator("navigator:browser", true);
-+      while (windowList.hasMoreElements()) {
-+        let win = windowList.getNext();
-+        if (isSuitableBrowserWindow(win))
-+          return win;
-+      }
-+      return null;
-+    }
-+  }
-+};
-+
-diff --git a/suite/modules/moz.build b/suite/modules/moz.build
---- a/suite/modules/moz.build
-+++ b/suite/modules/moz.build
-@@ -2,15 +2,16 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
- XPCSHELL_TESTS_MANIFESTS += ['test/unit/xpcshell.ini']
- 
- EXTRA_JS_MODULES += [
-     'PlacesUIUtils.jsm',
-+    'RecentWindow.jsm',
-     'Sanitizer.jsm',
-     'WindowsPreviewPerTab.jsm',
- ]
- 
- if CONFIG['OS_ARCH'] == 'WINNT':
-     EXTRA_JS_MODULES += ['WindowsJumpLists.jsm']
- 
-diff --git a/suite/themes/classic/communicator/icons/connecting.png b/suite/themes/classic/communicator/icons/connecting.png
-new file mode 100644
-index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3614dd529915f5524a540a008dc6c15025736f94
-GIT binary patch
-literal 15439
-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
-AZ~y=R
-
-diff --git a/suite/themes/classic/communicator/icons/connecting@2x.png b/suite/themes/classic/communicator/icons/connecting@2x.png
-new file mode 100644
-index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f998f4661eb5548023cd0a545de1f9a6b116f4a8
-GIT binary patch
-literal 27884
-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
-
-diff --git a/suite/themes/classic/jar.mn b/suite/themes/classic/jar.mn
---- a/suite/themes/classic/jar.mn
-+++ b/suite/themes/classic/jar.mn
-@@ -145,16 +145,17 @@ classic.jar:
-   skin/classic/communicator/sidebar/sbtab-twisty.gif                    (communicator/sidebar/sbtab-twisty.gif)
-   skin/classic/communicator/sidebar/sbtab-twisty-open.gif               (communicator/sidebar/sbtab-twisty-open.gif)
-   skin/classic/communicator/sidebar/customize.css                       (communicator/sidebar/customize.css)
-   skin/classic/communicator/sidebar/preview.css                         (communicator/sidebar/preview.css)
-   skin/classic/communicator/sidebar/sidebarBindings.xml                 (communicator/sidebar/sidebarBindings.xml)
-   skin/classic/communicator/sidebar/sidebarListView.css                 (communicator/sidebar/sidebarListView.css)
-   skin/classic/communicator/xpinstall/xpinstall.css                     (communicator/xpinstall/xpinstall.css)
-   skin/classic/communicator/icons/audioFeedIcon.png                     (communicator/icons/feedIcon.png)
-+  skin/classic/communicator/icons/connecting.png                        (communicator/icons/connecting.png)
-   skin/classic/communicator/icons/closeFullScreenVideo.png              (communicator/icons/closeFullScreenVideo.png)
-   skin/classic/communicator/icons/close-button.gif                      (communicator/icons/close-button.gif)
-   skin/classic/communicator/icons/offline.png                           (communicator/icons/offline.png)
-   skin/classic/communicator/icons/online.png                            (communicator/icons/online.png)
-   skin/classic/communicator/icons/search.png                            (communicator/icons/search.png)
-   skin/classic/communicator/icons/identity.png                          (communicator/icons/identity.png)
-   skin/classic/communicator/icons/lock-broken.png                       (communicator/icons/lock-broken.png)
-   skin/classic/communicator/icons/lock-broken-16.png                    (communicator/icons/lock-broken-16.png)
-diff --git a/suite/themes/classic/navigator/tabbrowser.css b/suite/themes/classic/navigator/tabbrowser.css
---- a/suite/themes/classic/navigator/tabbrowser.css
-+++ b/suite/themes/classic/navigator/tabbrowser.css
-@@ -38,17 +38,21 @@ tabpanels {
- .tabbrowser-tab {
-   list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-item.png");
-   padding: 0px 2px 2px;
-   margin-bottom: 1px;
-   border-bottom: none;
- }
- 
- .tabbrowser-tab[busy] {
--  list-style-image: url("chrome://communicator/skin/icons/loading.gif");
-+  list-style-image: url("chrome://communicator/skin/icons/connecting.png");
-+}
-+
-+.tabbrowser-tab[progress] {
-+  list-style-image: url("chrome://global/skin/icons/loading.png");
- }
- 
- .tabbrowser-tab[selected="true"] {
-   margin-bottom: 0px;
-   padding-top: 2px; /* compensates the top margin of background tabs */
-   padding-bottom: 3px; /* compensates the bottom margin of background tabs */
-   background-color: -moz-dialog;
-   -moz-border-top-colors: unset;
-diff --git a/suite/themes/modern/communicator/icons/connecting.png b/suite/themes/modern/communicator/icons/connecting.png
-new file mode 100644
-index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..3614dd529915f5524a540a008dc6c15025736f94
-GIT binary patch
-literal 15439
-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
-AZ~y=R
-
-diff --git a/suite/themes/modern/communicator/icons/connecting@2x.png b/suite/themes/modern/communicator/icons/connecting@2x.png
-new file mode 100644
-index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..f998f4661eb5548023cd0a545de1f9a6b116f4a8
-GIT binary patch
-literal 27884
-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
-
-diff --git a/suite/themes/modern/jar.mn b/suite/themes/modern/jar.mn
---- a/suite/themes/modern/jar.mn
-+++ b/suite/themes/modern/jar.mn
-@@ -74,23 +74,25 @@ modern.jar:
-   skin/modern/communicator/history/calendar.png                    (communicator/history/calendar.png)
-   skin/modern/communicator/icons/alwaysAsk.png                     (communicator/icons/alwaysAsk.png)
-   skin/modern/communicator/icons/application.png                   (communicator/icons/application.png)
-   skin/modern/communicator/icons/audioFeedIcon.png                 (communicator/icons/feedIcon.png)
-   skin/modern/communicator/icons/closeFullScreenVideo.png          (communicator/icons/closeFullScreenVideo.png)
-   skin/modern/communicator/icons/btn1.gif                          (communicator/icons/btn1.gif)
-   skin/modern/communicator/icons/common.png                        (communicator/icons/common.png)
-   skin/modern/communicator/icons/common-small.png                  (communicator/icons/common-small.png)
-+  skin/modern/communicator/icons/connecting.png                    (communicator/icons/connecting.png)
-   skin/modern/communicator/icons/feedIcon.png                      (communicator/icons/feedIcon.png)
-   skin/modern/communicator/icons/feedIcon16.png                    (communicator/icons/feedIcon16.png)
-   skin/modern/communicator/icons/geo.png                           (communicator/icons/geo.png)
-   skin/modern/communicator/icons/geolocation-16.png                (communicator/icons/geolocation-16.png)
-   skin/modern/communicator/icons/geolocation-64.png                (communicator/icons/geolocation-64.png)
-   skin/modern/communicator/icons/identity.png                      (communicator/icons/identity.png)
-   skin/modern/communicator/icons/loading.gif                       (communicator/icons/loading.gif)
-+  skin/modern/communicator/icons/loading.png                       (/mozilla/toolkit/themes/shared/icons/loading.png)
-   skin/modern/communicator/icons/lock-broken.png                   (communicator/icons/lock-broken.png)
-   skin/modern/communicator/icons/lock-broken-16.png                (communicator/icons/lock-broken-16.png)
-   skin/modern/communicator/icons/lock-insecure.png                 (communicator/icons/lock-insecure.png)
-   skin/modern/communicator/icons/lock-insecure-16.png              (communicator/icons/lock-insecure-16.png)
-   skin/modern/communicator/icons/lock-secure.png                   (communicator/icons/lock-secure.png)
-   skin/modern/communicator/icons/lock-secure-16.png                (communicator/icons/lock-secure-16.png)
-   skin/modern/communicator/icons/notification-16.png               (communicator/icons/notification-16.png)
-   skin/modern/communicator/icons/notification-64.png               (communicator/icons/notification-64.png)
-diff --git a/suite/themes/modern/navigator/tabbrowser.css b/suite/themes/modern/navigator/tabbrowser.css
---- a/suite/themes/modern/navigator/tabbrowser.css
-+++ b/suite/themes/modern/navigator/tabbrowser.css
-@@ -21,17 +21,21 @@
- }
- 
- tab {
-   padding: 0px 3px;
-   list-style-image: url("chrome://communicator/skin/bookmarks/bookmark-item.gif");
- }
- 
- tab[busy] {
--  list-style-image: url("chrome://communicator/skin/icons/loading.gif");
-+  list-style-image: url("chrome://communicator/skin/icons/connecting.png");
-+}
-+
-+tab[progress] {
-+  list-style-image: url("chrome://communicator/skin/icons/loading.png");
- }
- 
- .tab-icon {
-   margin-inline-end: 3px;
-   width: 16px;
-   height: 16px;
- }
- 

+ 0 - 4
comm-esr52/patches/series

@@ -1,4 +0,0 @@
-frg-249-5.patch
-521861-Account_Creation-249.patch
-1503654-cookies.patch
-1503837.patch

+ 0 - 629
mozilla-esr52/patches/1295937-1.patch

@@ -1,629 +0,0 @@
-
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1479231429 18000
-# Node ID 165a160a0f689ab1e0143376d7ee8ce07c300fb6
-# Parent  95e32667262020fd3da24ad0450e7cda74cc6559
-bug 1295937 - Improvements to gyp_reader to handle NSS gyp files. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-This patch contains a number of changes to the gyp_reader code:
-* Add three new flags to GYP_DIRS:
-** no_chromium, to skip forcing the includes/etc needed for chromium gyp files
-** no_unified, to force building all sources without unification
-** action_overrides, to pass scripts used when mapping gyp actions to moz.build GENERATED_FILES
-* Handle the flags mentioned above in read_from_gyp
-* Handle actions in gyp targets by mapping them to GENERATED_FILES, using scripts specified in the action_overrides flag. We don't try to handle the generic action case, we require special-casing for each action.
-* Handle a subset of copies in gyp targets by mapping them to EXPORTS, just enough to handle the use of them for NSS exports.
-* Handle shared_library and executable gyp targets
-* Handle gyp target dependencies/libraries as USE_LIBS/OS_LIBS
-* Handle generated source files
-* Handle .def files in sources by mapping them to SYMBOLS_FILE
-* Special-case some include_dirs:
-** Map `<(PRODUCT_DIR)/dist/` to $DIST/include (to handle include paths for NSS exports)
-** Map include_dirs starting with topobjdir to objdir-relative paths, to handle passing the NSPR include path to NSS
-* split /build/gyp.mozbuild into two parts, with gyp_base.mozbuild containing generic bits, and gyp.mozbuild containing chromium-specific bits
-
-diff --git a/build/gyp.mozbuild b/build/gyp.mozbuild
---- a/build/gyp.mozbuild
-+++ b/build/gyp.mozbuild
-@@ -1,15 +1,17 @@
- # -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
- # vim: set filetype=python:
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
--gyp_vars = {
-+include('gyp_base.mozbuild')
-+
-+gyp_vars.update({
-     'lsan': 0,
-     'asan': 0,
-     'build_with_mozilla': 1,
-     'build_with_chromium': 0,
-     'use_official_google_api_keys': 0,
-     'have_clock_monotonic': 1 if CONFIG['HAVE_CLOCK_MONOTONIC'] else 0,
-     'have_ethtool_cmd_speed_hi': 1 if CONFIG['MOZ_WEBRTC_HAVE_ETHTOOL_SPEED_HI'] else 0,
-     'include_alsa_audio': 1 if CONFIG['MOZ_ALSA'] else 0,
-@@ -64,61 +66,32 @@ gyp_vars = {
-     'include_g711': 1,
-     'include_opus': 1,
-     'include_g722': 1,
-     'include_ilbc': 0,
-     # We turn on ISAC because the AGC uses parts of it, and depend on the
-     # linker to throw away uneeded bits.
-     'include_isac': 1,
-     'include_pcm16b': 1,
--}
--
--os = CONFIG['OS_TARGET']
-+})
- 
--if os == 'WINNT':
--    gyp_vars.update(
--        MSVS_VERSION=CONFIG['_MSVS_VERSION'],
--        MSVS_OS_BITS=64 if CONFIG['HAVE_64BIT_BUILD'] else 32,
--    )
--elif os == 'Android':
-+if os == 'Android':
-     if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk':
-         gyp_vars['build_with_gonk'] = 1
-         gyp_vars['moz_widget_toolkit_gonk'] = 1
-         gyp_vars['opus_complexity'] = 1
-         if int(CONFIG['ANDROID_VERSION']) >= 18:
-           gyp_vars['moz_webrtc_omx'] = 1
-     else:
-         gyp_vars.update(
-             gtest_target_type='executable',
-             moz_webrtc_mediacodec=1,
-             android_toolchain=CONFIG.get('ANDROID_TOOLCHAIN', ''),
-         )
- 
--flavors = {
--    'WINNT': 'win',
--    'Android': 'linux' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' else 'android',
--    'Linux': 'linux',
--    'Darwin': 'mac' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' else 'ios',
--    'SunOS': 'solaris',
--    'GNU/kFreeBSD': 'freebsd',
--    'DragonFly': 'dragonfly',
--    'FreeBSD': 'freebsd',
--    'NetBSD': 'netbsd',
--    'OpenBSD': 'openbsd',
--}
--gyp_vars['OS'] = flavors.get(os)
--
--arches = {
--    'x86_64': 'x64',
--    'x86': 'ia32',
--    'aarch64': 'arm64',
--}
--
--gyp_vars['target_arch'] = arches.get(CONFIG['CPU_ARCH'], CONFIG['CPU_ARCH'])
--
- if CONFIG['ARM_ARCH']:
-     if int(CONFIG['ARM_ARCH']) < 7:
-         gyp_vars['armv7'] = 0
-         gyp_vars['arm_neon_optional'] = 0
-     elif os == 'Android':
-         gyp_vars['armv7'] = 1
-     else:
-         # CPU detection for ARM works on Android only.  armv7 always uses CPU
-diff --git a/build/gyp_base.mozbuild b/build/gyp_base.mozbuild
-new file mode 100644
---- /dev/null
-+++ b/build/gyp_base.mozbuild
-@@ -0,0 +1,38 @@
-+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-+# vim: set filetype=python:
-+# This Source Code Form is subject to the terms of the Mozilla Public
-+# License, v. 2.0. If a copy of the MPL was not distributed with this
-+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+
-+gyp_vars = {}
-+
-+os = CONFIG['OS_TARGET']
-+
-+if os == 'WINNT':
-+    gyp_vars.update(
-+        MSVS_VERSION=CONFIG['_MSVS_VERSION'],
-+        MSVS_OS_BITS=64 if CONFIG['HAVE_64BIT_BUILD'] else 32,
-+    )
-+
-+flavors = {
-+    'WINNT': 'win',
-+    'Android': 'linux' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' else 'android',
-+    'Linux': 'linux',
-+    'Darwin': 'mac' if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'cocoa' else 'ios',
-+    'SunOS': 'solaris',
-+    'GNU/kFreeBSD': 'freebsd',
-+    'DragonFly': 'dragonfly',
-+    'FreeBSD': 'freebsd',
-+    'NetBSD': 'netbsd',
-+    'OpenBSD': 'openbsd',
-+}
-+gyp_vars['OS'] = flavors.get(os)
-+
-+arches = {
-+    'x86_64': 'x64',
-+    'x86': 'ia32',
-+    'aarch64': 'arm64',
-+}
-+
-+gyp_vars['host_arch'] = arches.get(CONFIG['HOST_CPU_ARCH'], CONFIG['HOST_CPU_ARCH'])
-+gyp_vars['target_arch'] = arches.get(CONFIG['CPU_ARCH'], CONFIG['CPU_ARCH'])
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -515,16 +515,17 @@ def host_variables(host):
-     if host.kernel == 'kFreeBSD':
-         os_arch = 'GNU_kFreeBSD'
-     else:
-         os_arch = host.kernel
-     return namespace(
-         HOST_OS_ARCH=os_arch,
-     )
- 
-+set_config('HOST_CPU_ARCH', delayed_getattr(host, 'cpu'))
- set_config('HOST_OS_ARCH', delayed_getattr(host_variables, 'HOST_OS_ARCH'))
- add_old_configure_assignment('HOST_OS_ARCH',
-                              delayed_getattr(host_variables, 'HOST_OS_ARCH'))
- 
- @depends(target)
- def target_is_windows(target):
-     if target.kernel == 'WINNT':
-         return True
-diff --git a/python/mozbuild/mozbuild/frontend/context.py b/python/mozbuild/mozbuild/frontend/context.py
---- a/python/mozbuild/mozbuild/frontend/context.py
-+++ b/python/mozbuild/mozbuild/frontend/context.py
-@@ -1619,34 +1619,43 @@ VARIABLES = {
-         files are elsehwere (jar.mn, for instance) and this state of affairs
-         is OK.
-         """),
- 
-     'GYP_DIRS': (StrictOrderingOnAppendListWithFlagsFactory({
-             'variables': dict,
-             'input': unicode,
-             'sandbox_vars': dict,
-+            'no_chromium': bool,
-+            'no_unified': bool,
-             'non_unified_sources': StrictOrderingOnAppendList,
-+            'action_overrides': dict,
-         }), list,
-         """Defines a list of object directories handled by gyp configurations.
- 
-         Elements of this list give the relative object directory. For each
-         element of the list, GYP_DIRS may be accessed as a dictionary
-         (GYP_DIRS[foo]). The object this returns has attributes that need to be
-         set to further specify gyp processing:
-             - input, gives the path to the root gyp configuration file for that
-               object directory.
-             - variables, a dictionary containing variables and values to pass
-               to the gyp processor.
-             - sandbox_vars, a dictionary containing variables and values to
-               pass to the mozbuild processor on top of those derived from gyp
-               configuration.
-+            - no_chromium, a boolean which if set to True disables some
-+              special handling that emulates gyp_chromium.
-+            - no_unified, a boolean which if set to True disables source
-+              file unification entirely.
-             - non_unified_sources, a list containing sources files, relative to
-               the current moz.build, that should be excluded from source file
-               unification.
-+            - action_overrides, a dict of action_name to values of the `script`
-+              attribute to use for GENERATED_FILES for the specified action.
- 
-         Typical use looks like:
-             GYP_DIRS += ['foo', 'bar']
-             GYP_DIRS['foo'].input = 'foo/foo.gyp'
-             GYP_DIRS['foo'].variables = {
-                 'foo': 'bar',
-                 (...)
-             }
-diff --git a/python/mozbuild/mozbuild/frontend/gyp_reader.py b/python/mozbuild/mozbuild/frontend/gyp_reader.py
---- a/python/mozbuild/mozbuild/frontend/gyp_reader.py
-+++ b/python/mozbuild/mozbuild/frontend/gyp_reader.py
-@@ -1,22 +1,24 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
- from __future__ import absolute_import, unicode_literals
- 
- import gyp
-+import gyp.msvs_emulation
- import sys
- import os
- import types
- import mozpack.path as mozpath
- from mozpack.files import FileFinder
- from .sandbox import alphabetical_sorted
- from .context import (
-+    ObjDirPath,
-     SourcePath,
-     TemplateContext,
-     VARIABLES,
- )
- from mozbuild.util import (
-     expand_variables,
-     List,
-     memoize,
-@@ -33,23 +35,30 @@ sys.modules['gyp.generator.mozbuild'] = 
- #   sys.path.insert(0, os.path.join(chrome_src, 'tools', 'gyp', 'pylib'))
- # We're not importing gyp_chromium, but we want both script_dir and
- # chrome_src for the default includes, so go backwards from the pylib
- # directory, which is the parent directory of gyp module.
- chrome_src = mozpath.abspath(mozpath.join(mozpath.dirname(gyp.__file__),
-     '../../../..'))
- script_dir = mozpath.join(chrome_src, 'build')
- 
-+
-+def encode(value):
-+    if isinstance(value, unicode):
-+        return value.encode('utf-8')
-+    return value
-+
-+
- # Default variables gyp uses when evaluating gyp files.
- generator_default_variables = {
- }
--for dirname in ['INTERMEDIATE_DIR', 'SHARED_INTERMEDIATE_DIR', 'PRODUCT_DIR',
--                'LIB_DIR', 'SHARED_LIB_DIR']:
-+for dirname in [b'INTERMEDIATE_DIR', b'SHARED_INTERMEDIATE_DIR', b'PRODUCT_DIR',
-+                b'LIB_DIR', b'SHARED_LIB_DIR']:
-   # Some gyp steps fail if these are empty(!).
--  generator_default_variables[dirname] = b'dir'
-+  generator_default_variables[dirname] = b'$' + dirname
- 
- for unused in ['RULE_INPUT_PATH', 'RULE_INPUT_ROOT', 'RULE_INPUT_NAME',
-                'RULE_INPUT_DIRNAME', 'RULE_INPUT_EXT',
-                'EXECUTABLE_PREFIX', 'EXECUTABLE_SUFFIX',
-                'STATIC_LIB_PREFIX', 'STATIC_LIB_SUFFIX',
-                'SHARED_LIB_PREFIX', 'SHARED_LIB_SUFFIX',
-                'LINKER_SUPPORTS_ICF']:
-   generator_default_variables[unused] = b''
-@@ -63,56 +72,92 @@ class GypContext(TemplateContext):
-     relative to the topobjdir defined in the ConfigEnvironment.
-     """
-     def __init__(self, config, relobjdir):
-         self._relobjdir = relobjdir
-         TemplateContext.__init__(self, template='Gyp',
-             allowed_variables=VARIABLES, config=config)
- 
- 
--def encode(value):
--    if isinstance(value, unicode):
--        return value.encode('utf-8')
--    return value
-+def handle_actions(actions, context, action_overrides):
-+  idir = '$INTERMEDIATE_DIR/'
-+  for action in actions:
-+    name = action['action_name']
-+    if name not in action_overrides:
-+      raise RuntimeError('GYP action %s not listed in action_overrides' % name)
-+    outputs = action['outputs']
-+    if len(outputs) > 1:
-+      raise NotImplementedError('GYP actions with more than one output not supported: %s' % name)
-+    output = outputs[0]
-+    if not output.startswith(idir):
-+      raise NotImplementedError('GYP actions outputting to somewhere other than <(INTERMEDIATE_DIR) not supported: %s' % output)
-+    output = output[len(idir):]
-+    context['GENERATED_FILES'] += [output]
-+    g = context['GENERATED_FILES'][output]
-+    g.script = action_overrides[name]
-+    g.inputs = action['inputs']
- 
-+def handle_copies(copies, context):
-+  dist = '$PRODUCT_DIR/dist/'
-+  for copy in copies:
-+    dest = copy['destination']
-+    if not dest.startswith(dist):
-+      raise NotImplementedError('GYP copies to somewhere other than <(PRODUCT_DIR)/dist not supported: %s' % dest)
-+    dest_paths = dest[len(dist):].split('/')
-+    exports = context['EXPORTS']
-+    while dest_paths:
-+      exports = getattr(exports, dest_paths.pop(0))
-+    exports += sorted(copy['files'], key=lambda x: x.lower())
- 
--def read_from_gyp(config, path, output, vars, non_unified_sources = set()):
-+def read_from_gyp(config, path, output, vars, no_chromium, no_unified, action_overrides, non_unified_sources = set()):
-     """Read a gyp configuration and emits GypContexts for the backend to
-     process.
- 
-     config is a ConfigEnvironment, path is the path to a root gyp configuration
-     file, output is the base path under which the objdir for the various gyp
-     dependencies will be, and vars a dict of variables to pass to the gyp
-     processor.
-     """
- 
-+    is_win = config.substs['OS_TARGET'] == 'WINNT'
-+    is_msvc = bool(config.substs['_MSC_VER'])
-     # gyp expects plain str instead of unicode. The frontend code gives us
-     # unicode strings, so convert them.
-     path = encode(path)
-     str_vars = dict((name, encode(value)) for name, value in vars.items())
-+    if is_msvc:
-+        # This isn't actually used anywhere in this generator, but it's needed
-+        # to override the registry detection of VC++ in gyp.
-+        os.environ['GYP_MSVS_OVERRIDE_PATH'] = 'fake_path'
-+        os.environ['GYP_MSVS_VERSION'] = config.substs['MSVS_VERSION']
- 
-     params = {
-         b'parallel': False,
-         b'generator_flags': {},
-         b'build_files': [path],
-         b'root_targets': None,
-     }
- 
--    # Files that gyp_chromium always includes
--    includes = [encode(mozpath.join(script_dir, 'common.gypi'))]
--    finder = FileFinder(chrome_src, find_executables=False)
--    includes.extend(encode(mozpath.join(chrome_src, name))
--        for name, _ in finder.find('*/supplement.gypi'))
-+    if no_chromium:
-+      includes = []
-+      depth = mozpath.dirname(path)
-+    else:
-+      depth = chrome_src
-+      # Files that gyp_chromium always includes
-+      includes = [encode(mozpath.join(script_dir, 'common.gypi'))]
-+      finder = FileFinder(chrome_src, find_executables=False)
-+      includes.extend(encode(mozpath.join(chrome_src, name))
-+          for name, _ in finder.find('*/supplement.gypi'))
- 
-     # Read the given gyp file and its dependencies.
-     generator, flat_list, targets, data = \
-         gyp.Load([path], format=b'mozbuild',
-             default_variables=str_vars,
-             includes=includes,
--            depth=encode(chrome_src),
-+            depth=encode(depth),
-             params=params)
- 
-     # Process all targets from the given gyp files and its dependencies.
-     # The path given to AllTargets needs to use os.sep, while the frontend code
-     # gives us paths normalized with forward slash separator.
-     for target in gyp.common.AllTargets(flat_list, targets, path.replace(b'/', os.sep)):
-         build_file, target_name, toolset = gyp.common.ParseQualifiedTarget(target)
- 
-@@ -141,70 +186,144 @@ def read_from_gyp(config, path, output, 
- 
-         # Derive which gyp configuration to use based on MOZ_DEBUG.
-         c = 'Debug' if config.substs['MOZ_DEBUG'] else 'Release'
-         if c not in spec['configurations']:
-             raise RuntimeError('Missing %s gyp configuration for target %s '
-                                'in %s' % (c, target_name, build_file))
-         target_conf = spec['configurations'][c]
- 
-+        if 'actions' in spec:
-+          handle_actions(spec['actions'], context, action_overrides)
-+        if 'copies' in spec:
-+          handle_copies(spec['copies'], context)
-+
-+        use_libs = []
-+        libs = []
-+        def add_deps(s):
-+            for t in s.get('dependencies', []) + s.get('dependencies_original', []):
-+                ty = targets[t]['type']
-+                if ty in ('static_library', 'shared_library'):
-+                    use_libs.append(targets[t]['target_name'])
-+                # Manually expand out transitive dependencies--
-+                # gyp won't do this for static libs or none targets.
-+                if ty in ('static_library', 'none'):
-+                    add_deps(targets[t])
-+            libs.extend(spec.get('libraries', []))
-+        #XXX: this sucks, but webrtc breaks with this right now because
-+        # it builds a library called 'gtest' and we just get lucky
-+        # that it isn't in USE_LIBS by that name anywhere.
-+        if no_chromium:
-+            add_deps(spec)
-+
-+        os_libs = []
-+        for l in libs:
-+          if l.startswith('-'):
-+              os_libs.append(l)
-+          elif l.endswith('.lib'):
-+              os_libs.append(l[:-4])
-+          elif l:
-+            # For library names passed in from moz.build.
-+            use_libs.append(os.path.basename(l))
-+
-         if spec['type'] == 'none':
-+          if not ('actions' in spec or 'copies' in spec):
-             continue
--        elif spec['type'] == 'static_library':
-+        elif spec['type'] in ('static_library', 'shared_library', 'executable'):
-             # Remove leading 'lib' from the target_name if any, and use as
-             # library name.
-             name = spec['target_name']
--            if name.startswith('lib'):
--                name = name[3:]
--            # The context expects an unicode string.
--            context['LIBRARY_NAME'] = name.decode('utf-8')
-+            if spec['type'] in ('static_library', 'shared_library'):
-+                if name.startswith('lib'):
-+                    name = name[3:]
-+                # The context expects an unicode string.
-+                context['LIBRARY_NAME'] = name.decode('utf-8')
-+            else:
-+                context['PROGRAM'] = name.decode('utf-8')
-+            if spec['type'] == 'shared_library':
-+                context['FORCE_SHARED_LIB'] = True
-+            elif spec['type'] == 'static_library' and spec.get('variables', {}).get('no_expand_libs', '0') == '1':
-+                # PSM links a NSS static library, but our folded libnss
-+                # doesn't actually export everything that all of the
-+                # objects within would need, so that one library
-+                # should be built as a real static library.
-+                context['NO_EXPAND_LIBS'] = True
-+            if use_libs:
-+                context['USE_LIBS'] = sorted(use_libs, key=lambda s: s.lower())
-+            if os_libs:
-+                context['OS_LIBS'] = os_libs
-             # gyp files contain headers and asm sources in sources lists.
-             sources = []
-             unified_sources = []
-             extensions = set()
-+            use_defines_in_asflags = False
-             for f in spec.get('sources', []):
-                 ext = mozpath.splitext(f)[-1]
-                 extensions.add(ext)
--                s = SourcePath(context, f)
-+                if f.startswith('$INTERMEDIATE_DIR/'):
-+                  s = ObjDirPath(context, f.replace('$INTERMEDIATE_DIR/', '!'))
-+                else:
-+                  s = SourcePath(context, f)
-                 if ext == '.h':
-                     continue
--                if ext != '.S' and s not in non_unified_sources:
-+                if ext == '.def':
-+                    context['SYMBOLS_FILE'] = s
-+                elif ext != '.S' and not no_unified and s not in non_unified_sources:
-                     unified_sources.append(s)
-                 else:
-                     sources.append(s)
-+                # The Mozilla build system doesn't use DEFINES for building
-+                # ASFILES.
-+                if ext == '.s':
-+                    use_defines_in_asflags = True
- 
-             # The context expects alphabetical order when adding sources
-             context['SOURCES'] = alphabetical_sorted(sources)
-             context['UNIFIED_SOURCES'] = alphabetical_sorted(unified_sources)
- 
--            for define in target_conf.get('defines', []):
-+            defines = target_conf.get('defines', [])
-+            if is_msvc and no_chromium:
-+                msvs_settings = gyp.msvs_emulation.MsvsSettings(spec, {})
-+                defines.extend(msvs_settings.GetComputedDefines(c))
-+            for define in defines:
-                 if '=' in define:
-                     name, value = define.split('=', 1)
-                     context['DEFINES'][name] = value
-                 else:
-                     context['DEFINES'][define] = True
- 
-+            product_dir_dist = '$PRODUCT_DIR/dist/'
-             for include in target_conf.get('include_dirs', []):
--                # moz.build expects all LOCAL_INCLUDES to exist, so ensure they do.
--                #
--                # NB: gyp files sometimes have actual absolute paths (e.g.
--                # /usr/include32) and sometimes paths that moz.build considers
--                # absolute, i.e. starting from topsrcdir. There's no good way
--                # to tell them apart here, and the actual absolute paths are
--                # likely bogus. In any event, actual absolute paths will be
--                # filtered out by trying to find them in topsrcdir.
--                if include.startswith('/'):
--                    resolved = mozpath.abspath(mozpath.join(config.topsrcdir, include[1:]))
-+                if include.startswith(product_dir_dist):
-+                    # special-case includes of <(PRODUCT_DIR)/dist/ to match
-+                    # handle_copies above. This is used for NSS' exports.
-+                    include = '!/dist/include/' + include[len(product_dir_dist):]
-+                elif include.startswith(config.topobjdir):
-+                    # NSPR_INCLUDE_DIR gets passed into the NSS build this way.
-+                    include = '!/' + mozpath.relpath(include, config.topobjdir)
-                 else:
--                    resolved = mozpath.abspath(mozpath.join(mozpath.dirname(build_file), include))
--                if not os.path.exists(resolved):
--                    continue
-+                  # moz.build expects all LOCAL_INCLUDES to exist, so ensure they do.
-+                  #
-+                  # NB: gyp files sometimes have actual absolute paths (e.g.
-+                  # /usr/include32) and sometimes paths that moz.build considers
-+                  # absolute, i.e. starting from topsrcdir. There's no good way
-+                  # to tell them apart here, and the actual absolute paths are
-+                  # likely bogus. In any event, actual absolute paths will be
-+                  # filtered out by trying to find them in topsrcdir.
-+                  if include.startswith('/'):
-+                      resolved = mozpath.abspath(mozpath.join(config.topsrcdir, include[1:]))
-+                  else:
-+                      resolved = mozpath.abspath(mozpath.join(mozpath.dirname(build_file), include))
-+                  if not os.path.exists(resolved):
-+                      continue
-                 context['LOCAL_INCLUDES'] += [include]
- 
-             context['ASFLAGS'] = target_conf.get('asflags_mozilla', [])
-+            if use_defines_in_asflags and defines:
-+                context['ASFLAGS'] += ['-D' + d for d in defines]
-             flags = target_conf.get('cflags_mozilla', [])
-             if flags:
-                 suffix_map = {
-                     '.c': 'CFLAGS',
-                     '.cpp': 'CXXFLAGS',
-                     '.cc': 'CXXFLAGS',
-                     '.m': 'CMFLAGS',
-                     '.mm': 'CMMFLAGS',
-@@ -222,27 +341,28 @@ def read_from_gyp(config, path, output, 
-                         if not f:
-                             continue
-                         # the result may be a string or a list.
-                         if isinstance(f, types.StringTypes):
-                             context[var].append(f)
-                         else:
-                             context[var].extend(f)
-         else:
--            # Ignore other types than static_library because we don't have
-+            # Ignore other types because we don't have
-             # anything using them, and we're not testing them. They can be
-             # added when that becomes necessary.
-             raise NotImplementedError('Unsupported gyp target type: %s' % spec['type'])
- 
--        # Add some features to all contexts. Put here in case LOCAL_INCLUDES
--        # order matters.
--        context['LOCAL_INCLUDES'] += [
--            '!/ipc/ipdl/_ipdlheaders',
--            '/ipc/chromium/src',
--            '/ipc/glue',
--        ]
--        # These get set via VC project file settings for normal GYP builds.
--        if config.substs['OS_TARGET'] == 'WINNT':
--            context['DEFINES']['UNICODE'] = True
--            context['DEFINES']['_UNICODE'] = True
-+        if not no_chromium:
-+          # Add some features to all contexts. Put here in case LOCAL_INCLUDES
-+          # order matters.
-+          context['LOCAL_INCLUDES'] += [
-+              '!/ipc/ipdl/_ipdlheaders',
-+              '/ipc/chromium/src',
-+              '/ipc/glue',
-+          ]
-+          # These get set via VC project file settings for normal GYP builds.
-+          if is_win:
-+              context['DEFINES']['UNICODE'] = True
-+              context['DEFINES']['_UNICODE'] = True
-         context['DISABLE_STL_WRAPPING'] = True
- 
-         yield context
-diff --git a/python/mozbuild/mozbuild/frontend/reader.py b/python/mozbuild/mozbuild/frontend/reader.py
---- a/python/mozbuild/mozbuild/frontend/reader.py
-+++ b/python/mozbuild/mozbuild/frontend/reader.py
-@@ -1152,22 +1152,28 @@ class BuildReader(object):
-             from .gyp_reader import read_from_gyp
-             non_unified_sources = set()
-             for s in gyp_dir.non_unified_sources:
-                 source = SourcePath(context, s)
-                 if not self._finder.get(source.full_path):
-                     raise SandboxValidationError('Cannot find %s.' % source,
-                         context)
-                 non_unified_sources.add(source)
-+            action_overrides = {}
-+            for action, script in gyp_dir.action_overrides.iteritems():
-+                action_overrides[action] = SourcePath(context, script)
-             time_start = time.time()
-             for gyp_context in read_from_gyp(context.config,
-                                              mozpath.join(curdir, gyp_dir.input),
-                                              mozpath.join(context.objdir,
-                                                           target_dir),
-                                              gyp_dir.variables,
-+                                             gyp_dir.no_chromium,
-+                                             gyp_dir.no_unified,
-+                                             action_overrides,
-                                              non_unified_sources = non_unified_sources):
-                 gyp_context.update(gyp_dir.sandbox_vars)
-                 gyp_contexts.append(gyp_context)
-                 self._file_count += len(gyp_context.all_paths)
-             self._execution_time += time.time() - time_start
- 
-         for gyp_context in gyp_contexts:
-             context['DIRS'].append(mozpath.relpath(gyp_context.objdir, context.objdir))
-

+ 0 - 857
mozilla-esr52/patches/1295937-2.patch

@@ -1,857 +0,0 @@
-
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1478713029 18000
-# Node ID ee70776759bf296c951a9805d5b79169291be4d3
-# Parent  9297cbb433eb868d9672acce62026fb727e64565
-bug 1295937 - build NSS using gyp files. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/autoconf/nspr-build.m4 b/build/autoconf/nspr-build.m4
---- a/build/autoconf/nspr-build.m4
-+++ b/build/autoconf/nspr-build.m4
-@@ -156,6 +156,8 @@
-                 ,
-                 AC_MSG_ERROR([system NSPR does not support PR_UINT64 or including prtypes.h does not provide it]))
-     CFLAGS=$_SAVE_CFLAGS
-+    NSPR_INCLUDE_DIR=`echo ${NSPR_CFLAGS} | sed -e 's/.*-I\([^ ]*\).*/\1/'`
-+    NSPR_LIB_DIR=`echo ${NSPR_LIBS} | sed -e 's/.*-L\([^ ]*\).*/\1/'`
- elif test -z "$JS_POSIX_NSPR"; then
-     NSPR_INCLUDE_DIR="${DIST}/include/nspr"
-     NSPR_CFLAGS="-I${NSPR_INCLUDE_DIR}"
-diff --git a/config/external/nss/Makefile.in b/config/external/nss/Makefile.in
-deleted file mode 100644
---- a/config/external/nss/Makefile.in
-+++ /dev/null
-@@ -1,488 +0,0 @@
--#
--# This Source Code Form is subject to the terms of the Mozilla Public
--# License, v. 2.0. If a copy of the MPL was not distributed with this
--# file, You can obtain one at http://mozilla.org/MPL/2.0/.
--
--ifndef MOZ_SYSTEM_NSS
--
--CC_WRAPPER =
--CXX_WRAPPER =
--
--default::
--
--include $(topsrcdir)/config/makefiles/functions.mk
--
--NSS_LIBS = \
--  nss3 \
--  nssutil3 \
--  smime3 \
--  ssl3 \
--  $(NULL)
--
--ifdef MOZ_FOLD_LIBS
--NSS_DLLS = $(LIBRARY_NAME)
--else
--NSS_DLLS = $(NSS_LIBS)
--endif
--
--NSS_EXTRA_DLLS = \
--  nssckbi \
--  softokn3 \
--  $(NULL)
--
--ifndef NSS_DISABLE_DBM
--NSS_EXTRA_DLLS += nssdbm3
--endif
--
--SDK_LIBS = crmf
--
--ifneq (,$(filter WINNT,$(OS_ARCH)))
--SDK_LIBS += $(NSS_DLLS)
--endif
--
--# Default
--HAVE_FREEBL_LIBS = 1
--
--# 32-bit HP-UX PA-RISC
--ifeq ($(OS_ARCH), HP-UX)
--ifneq ($(OS_TEST), ia64)
--ifndef HAVE_64BIT_BUILD
--HAVE_FREEBL_LIBS =
--HAVE_FREEBL_LIBS_32INT32 = 1
--HAVE_FREEBL_LIBS_32FPU = 1
--endif
--endif
--endif
--
--# SunOS SPARC
--ifeq ($(OS_ARCH), SunOS)
--ifneq (86,$(findstring 86,$(OS_TEST)))
--ifdef HAVE_64BIT_BUILD
--HAVE_FREEBL_LIBS =
--HAVE_FREEBL_LIBS_64 = 1
--else
--HAVE_FREEBL_LIBS =
--HAVE_FREEBL_LIBS_32FPU = 1
--HAVE_FREEBL_LIBS_32INT64 = 1
--endif
--endif
--endif
--
--ifeq ($(OS_TARGET),Linux)
--HAVE_FREEBL_LIBS = 
--HAVE_FREEBL_LIBS_PRIV = 1
--FREEBL_LOWHASH_FLAG = FREEBL_LOWHASH=1
--endif
--
--ifdef HAVE_FREEBL_LIBS
--NSS_EXTRA_DLLS += freebl3
--endif
--ifdef HAVE_FREEBL_LIBS_PRIV
--NSS_EXTRA_DLLS += freeblpriv3
--endif
--ifdef HAVE_FREEBL_LIBS_32INT32
--NSS_EXTRA_DLLS += freebl_32int_3
--endif
--ifdef HAVE_FREEBL_LIBS_32FPU
--NSS_EXTRA_DLLS += freebl_32fpu_3
--endif
--ifdef HAVE_FREEBL_LIBS_32INT64
--NSS_EXTRA_DLLS += freebl_32int64_3
--endif
--ifdef HAVE_FREEBL_LIBS_64
--NSS_EXTRA_DLLS += freebl_64int_3
--NSS_EXTRA_DLLS += freebl_64fpu_3
--endif
--
--# For all variables such as DLLFLAGS, that may contain $(DIST)
--DIST := $(ABS_DIST)
--# TODO: move this all to configure, but in Python
--ifndef MOZ_BUILD_NSPR
--NSPR_INCLUDE_DIR = $(firstword $(filter -I%,$(NSPR_CFLAGS)))
--ifneq (,$(strip $(NSPR_INCLUDE_DIR)))
--NSPR_INCLUDE_DIR := $(subst -I,,$(subst -I$(DIST),-I$(ABS_DIST),$(NSPR_INCLUDE_DIR)))
--else
--$(error Your NSPR CFLAGS are broken!)
--endif
--NSPR_LIB_DIR = $(firstword $(filter -L%,$(NSPR_LIBS)))
--ifneq (,$(strip $(NSPR_LIB_DIR)))
--NSPR_LIB_DIR := $(subst -L,,$(subst -L$(DIST),-L$(ABS_DIST),$(NSPR_LIB_DIR)))
--else
--$(error Your NSPR LDFLAGS are broken!)
--endif
--endif
--
--# To get debug symbols from NSS
--export MOZ_DEBUG_SYMBOLS
--
--DEFAULT_GMAKE_FLAGS =
--DEFAULT_GMAKE_FLAGS += CC='$(CC)'
--DEFAULT_GMAKE_FLAGS += MT='$(MT)'
--DEFAULT_GMAKE_FLAGS += LD='$(LD)'
--DEFAULT_GMAKE_FLAGS += SOURCE_MD_DIR=$(ABS_DIST)
--DEFAULT_GMAKE_FLAGS += SOURCE_MDHEADERS_DIR=$(NSPR_INCLUDE_DIR)
--DEFAULT_GMAKE_FLAGS += DIST=$(ABS_DIST)
--DEFAULT_GMAKE_FLAGS += NSPR_INCLUDE_DIR=$(NSPR_INCLUDE_DIR)
--DEFAULT_GMAKE_FLAGS += NSPR_LIB_DIR=$(NSPR_LIB_DIR)
--DEFAULT_GMAKE_FLAGS += MOZILLA_CLIENT=1
--DEFAULT_GMAKE_FLAGS += NO_MDUPDATE=1
--DEFAULT_GMAKE_FLAGS += NSS_ENABLE_ECC=1
--DEFAULT_GMAKE_FLAGS += NSS_ENABLE_TLS_1_3=1
--ifeq ($(OS_ARCH)_$(GNU_CC),WINNT_1)
--DEFAULT_GMAKE_FLAGS += OS_DLLFLAGS='-static-libgcc' NSPR31_LIB_PREFIX=lib
--endif
--ifndef MOZ_SYSTEM_SQLITE
--ifdef MOZ_FOLD_LIBS
--DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=nss3
--else
--DEFAULT_GMAKE_FLAGS += SQLITE_LIB_NAME=mozsqlite3
--DEFAULT_GMAKE_FLAGS += SQLITE_LIB_DIR=$(ABS_DIST)/../config/external/sqlite
--endif # MOZ_FOLD_LIBS
--DEFAULT_GMAKE_FLAGS += SQLITE_INCLUDE_DIR=$(ABS_DIST)/include
--endif
--ifdef NSS_DISABLE_DBM 
--DEFAULT_GMAKE_FLAGS += NSS_DISABLE_DBM=1
--endif
--# Hack to force NSS build system to use "normal" object directories
--DEFAULT_GMAKE_FLAGS += topsrcdir='$(topsrcdir)'
--# topsrcdir can't be expanded here because msys path mangling likes to break
--# paths in that case.
--DEFAULT_GMAKE_FLAGS += BUILD='$(MOZ_BUILD_ROOT)/security/$$(subst $$(topsrcdir)/security/,,$$(CURDIR))'
--DEFAULT_GMAKE_FLAGS += BUILD_TREE='$$(BUILD)' OBJDIR='$$(BUILD)' DEPENDENCIES='$$(BUILD)/.deps' SINGLE_SHLIB_DIR='$$(BUILD)'
--DEFAULT_GMAKE_FLAGS += SOURCE_XP_DIR=$(ABS_DIST)
--ifndef MOZ_DEBUG
--DEFAULT_GMAKE_FLAGS += BUILD_OPT=1 OPT_CODE_SIZE=1
--endif
--ifdef GNU_CC
--DEFAULT_GMAKE_FLAGS += NS_USE_GCC=1
--else
--DEFAULT_GMAKE_FLAGS += NS_USE_GCC=
--endif
--ifdef USE_N32
--# It is not really necessary to specify USE_PTHREADS=1.  USE_PTHREADS
--# merely adds _PTH to coreconf's OBJDIR name.
--DEFAULT_GMAKE_FLAGS += USE_N32=1 USE_PTHREADS=1
--endif
--ifdef HAVE_64BIT_BUILD
--DEFAULT_GMAKE_FLAGS += USE_64=1
--endif
--ifeq ($(OS_ARCH),WINNT)
--DEFAULT_GMAKE_FLAGS += OS_TARGET=WIN95
--ifdef MOZ_DEBUG
--ifndef MOZ_NO_DEBUG_RTL
--DEFAULT_GMAKE_FLAGS += USE_DEBUG_RTL=1
--endif
--endif
--endif # WINNT
--ifeq ($(OS_ARCH),Darwin)
--# Make nsinstall use absolute symlinks by default when building NSS
--# for Mozilla on Mac OS X. (Bugzilla bug 193164)
--ifndef NSDISTMODE
--DEFAULT_GMAKE_FLAGS += NSDISTMODE=absolute_symlink
--endif
--ifdef MACOS_SDK_DIR
--DEFAULT_GMAKE_FLAGS += MACOS_SDK_DIR=$(MACOS_SDK_DIR)
--endif
--endif
--
--# Turn off TLS compression support because it requires system zlib.
--# See bug 580679 comment 18.
--DEFAULT_GMAKE_FLAGS += NSS_SSL_ENABLE_ZLIB=
--
--# Disable building of the test programs in security/nss/lib/zlib
--DEFAULT_GMAKE_FLAGS += PROGRAMS=
--
--# Disable creating .chk files. They will be generated from packager.mk
--# When bug 681624 lands, we can replace CHECKLOC= with SKIP_SHLIBSIGN=1
--DEFAULT_GMAKE_FLAGS += CHECKLOC=
--
--ifdef CROSS_COMPILE
--
--DEFAULT_GMAKE_FLAGS += \
--	NATIVE_CC='$(HOST_CC)' \
--	CC='$(CC)' \
--	CCC='$(CXX)' \
--	AS='$(AS)' \
--	AR='$(AR) $(AR_FLAGS:$@=$$@)' \
--	RANLIB='$(RANLIB)' \
--	RC='$(RC) $(RCFLAGS)' \
--	OS_ARCH='$(OS_ARCH)' \
--	OS_TEST='$(OS_TEST)' \
--	CPU_ARCH='$(TARGET_CPU)' \
--	$(NULL)
--
--# Android has pthreads integrated into -lc, so OS_PTHREAD is set to nothing
--ifeq ($(OS_TARGET), Android)
--DEFAULT_GMAKE_FLAGS += \
--	OS_RELEASE='2.6' \
--	OS_PTHREAD= \
--	$(NULL)
--
--DEFAULT_GMAKE_FLAGS += ARCHFLAG='$(filter-out -W%,$(CFLAGS)) -DCHECK_FORK_GETPID $(addprefix -DANDROID_VERSION=,$(ANDROID_VERSION)) -include $(topsrcdir)/security/manager/android_stub.h'
--endif
--endif
--
--ifdef WRAP_LDFLAGS
--NSS_EXTRA_LDFLAGS += $(WRAP_LDFLAGS)
--endif
--
--# The SHARED_LIBS part is needed unconditionally on Android.  It's not
--# clear why this is the case, but see bug 1133073 (starting around
--# comment #8) for context.
--ifneq (,$(or $(MOZ_GLUE_WRAP_LDFLAGS), $(filter Android, $(OS_TARGET))))
--NSS_EXTRA_LDFLAGS += $(SHARED_LIBS:$(DEPTH)%=$(MOZ_BUILD_ROOT)%) $(MOZ_GLUE_WRAP_LDFLAGS)
--endif
--
--ifneq (,$(NSS_EXTRA_LDFLAGS))
--DEFAULT_GMAKE_FLAGS += \
--	LDFLAGS='$(LDFLAGS) $(NSS_EXTRA_LDFLAGS)' \
--	DSO_LDOPTS='$(DSO_LDOPTS) $(LDFLAGS) $(NSS_EXTRA_LDFLAGS)' \
--	$(NULL)
--endif
--
--DEFAULT_GMAKE_FLAGS += FREEBL_NO_DEPEND=0 $(FREEBL_LOWHASH_FLAG)
--DEFAULT_GMAKE_FLAGS += NSS_ALLOW_SSLKEYLOGFILE=1
--
--ifdef MOZ_NO_WLZDEFS
--DEFAULT_GMAKE_FLAGS += ZDEFS_FLAG=
--endif
--ifdef MOZ_CFLAGS_NSS
--NSS_XCFLAGS += $(filter-out -W%,$(CFLAGS))
--DEFAULT_GMAKE_FLAGS += DARWIN_DYLIB_VERSIONS='-compatibility_version 1 -current_version 1 $(LDFLAGS)'
--endif
--ifeq (1_1,$(CLANG_CL)_$(MOZ_ASAN))
--XLDFLAGS := $(OS_LDFLAGS)
--DEFAULT_GMAKE_FLAGS += XLDFLAGS='$(XLDFLAGS)'
--endif
--
--DEFAULT_GMAKE_FLAGS += NSS_NO_PKCS11_BYPASS=1
--
--# Put NSS headers directly under $(DIST)/include
--DEFAULT_GMAKE_FLAGS += PUBLIC_EXPORT_DIR='$(ABS_DIST)/include/$$(MODULE)'
--DEFAULT_GMAKE_FLAGS += SOURCE_XPHEADERS_DIR='$$(SOURCE_XP_DIR)/include/$$(MODULE)'
--DEFAULT_GMAKE_FLAGS += MODULE_INCLUDES='$$(addprefix -I$$(SOURCE_XP_DIR)/include/,$$(REQUIRES))'
--
--# Work around NSS's MAKE_OBJDIR being racy. See bug #836220
--DEFAULT_GMAKE_FLAGS += MAKE_OBJDIR='$$(INSTALL) -D $$(OBJDIR)'
--
--# Work around NSS adding IMPORT_LIBRARY to TARGETS with no rule for
--# it, creating race conditions. See bug #836220
--DEFAULT_GMAKE_FLAGS += TARGETS='$$(LIBRARY) $$(SHARED_LIBRARY) $$(PROGRAM)'
--
--ifdef MOZ_FOLD_LIBS_FLAGS
--NSS_XCFLAGS += $(MOZ_FOLD_LIBS_FLAGS)
--endif
--
--# Pass on the MSVC target arch from the main build system.
--# Note this is case- and switch-character sensitive, while
--# the MSVC option is not.
--ifeq (WINNT,$(OS_TARGET))
--NSS_XCFLAGS += $(filter -arch:%,$(CFLAGS))
--endif
--
--# Enable short header experiment. Firefox only.
--NSS_XCFLAGS += -DNSS_ENABLE_TLS13_SHORT_HEADERS
--
--# Export accumulated XCFLAGS to modify nss defaults.
--DEFAULT_GMAKE_FLAGS += XCFLAGS='$(NSS_XCFLAGS)'
--
--NSS_SRCDIR = $(topsrcdir)
--
--NSS_DIRS =
--ifndef MOZ_FOLD_LIBS
--NSS_DIRS += nss/lib
--else
--ifndef NSS_DISABLE_DBM
--NSS_DIRS += nss/lib/dbm
--endif
--endif
--NSS_DIRS += \
--  nss/cmd/lib \
--  nss/cmd/shlibsign \
--  $(NULL)
--
--ifdef ENABLE_TESTS
--NSS_DIRS += \
--  nss/cmd/certutil \
--  nss/cmd/pk12util \
--  nss/cmd/modutil \
--  $(NULL)
--endif
--
--ifneq (,$(filter %--build-id,$(LDFLAGS)))
--DEFAULT_GMAKE_ENV = LDFLAGS=-Wl,--build-id
--endif
--
--ifdef MOZ_FOLD_LIBS
--# TODO: The following can be replaced by something simpler when bug 844880
--# is fixed.
--# All static libraries required for nss, smime, ssl and nssutil.
--# The strip is needed to remove potential linefeed characters, since they hang
--# around in some cases on Windows.
--NSS_STATIC_LIBS := $(strip $(shell $(MAKE) --no-print-directory -f $(srcdir)/nss.mk DEPTH='$(DEPTH)' topsrcdir='$(topsrcdir)' srcdir='$(srcdir)' echo-variable-libs))
--# Corresponding build directories
--NSS_STATIC_DIRS := $(foreach lib,$(NSS_STATIC_LIBS),$(patsubst %/,%,$(dir $(lib))))
--NSS_DIRS += $(NSS_STATIC_DIRS)
--
--# TODO: The following can be replaced by something simpler when bug 844884
--# is fixed.
--# Remaining nss/lib directories
--NSS_DIRS += nss/lib/freebl nss/lib/softoken nss/lib/jar nss/lib/crmf nss/lib/ckfw
--
--DEFAULT_GMAKE_FLAGS += NSS_DISABLE_LIBPKIX=1
--
--ifeq (WINNT,$(OS_TARGET))
--NSS_DIRS += nss/lib/zlib
--endif
--endif # MOZ_FOLD_LIBS
--
--# Filter-out $(LIBRARY_NAME) because it's already handled in config/rules.mk.
--NSS_DIST_DLL_FILES := $(addprefix $(DIST)/lib/$(DLL_PREFIX),$(addsuffix $(DLL_SUFFIX),$(filter-out $(LIBRARY_NAME),$(NSS_DLLS)) $(NSS_EXTRA_DLLS)))
--NSS_DIST_DLL_DEST := $(DIST)/bin
--NSS_DIST_DLL_TARGET := target
--INSTALL_TARGETS += NSS_DIST_DLL
--
--ifeq ($(OS_ARCH)_$(1), SunOS_softokn3)
--# has to use copy mode on Solaris, see #665509
--$(DIST)/bin/$(DLL_PREFIX)softokn3$(DLL_SUFFIX): INSTALL := $(INSTALL) -t
--endif
--
--NSS_SDK_LIB_FILES := \
--  $(addprefix $(DIST)/lib/$(LIB_PREFIX),$(addsuffix .$(LIB_SUFFIX),$(SDK_LIBS))) \
--  $(addprefix $(DIST)/bin/$(DLL_PREFIX),$(addsuffix $(DLL_SUFFIX),$(NSS_DLLS))) \
--  $(NULL)
--NSS_SDK_LIB_DEST := $(DIST)/sdk/lib
--NSS_SDK_LIB_TARGET := target
--INSTALL_TARGETS += NSS_SDK_LIB
--
--ifdef MOZ_FOLD_LIBS
--# Add all static libraries for nss, smime, ssl and nssutil
--STATIC_LIBS += $(addprefix $(DEPTH)/security/,$(NSS_STATIC_LIBS))
--
--IMPORT_LIB_FILES = $(IMPORT_LIBRARY)
--IMPORT_LIB_DEST ?= $(DIST)/lib
--IMPORT_LIB_TARGET = target
--INSTALL_TARGETS += IMPORT_LIB
--
--endif # MOZ_FOLD_LIBS
--
--include $(topsrcdir)/config/rules.mk
--
--ifeq (1,$(ALLOW_COMPILER_WARNINGS))
--DEFAULT_GMAKE_FLAGS += NSS_ENABLE_WERROR=0
--endif
--
--# Can't pass this in DEFAULT_GMAKE_FLAGS because that overrides
--# definitions in NSS, so just export it into the sub-make's environment.
--ifeq (WINNT_1,$(OS_TARGET)_$(MOZ_MEMORY))
--DLLFLAGS := -LIBPATH:$(ABS_DIST)/../mozglue/build -DEFAULTLIB:mozglue
--export DLLFLAGS
--endif
--
--ifdef MOZ_FOLD_LIBS
--# Force the linker to include everything from the static libraries.
--EXPAND_LIBS_EXEC += --extract
--
--$(SHARED_LIBRARY): $(addprefix $(DEPTH)/security/,$(NSS_STATIC_LIBS))
--
--ifdef IMPORT_LIB_SUFFIX
--IMPORT_PREFIX = $(LIB_PREFIX)
--IMPORT_SUFFIX = .$(IMPORT_LIB_SUFFIX)
--else
--IMPORT_PREFIX = $(DLL_PREFIX)
--IMPORT_SUFFIX = $(DLL_SUFFIX)
--endif
--
--NSPR_IMPORT_LIBS = $(addprefix $(DIST)/lib/$(IMPORT_PREFIX),$(addsuffix $(IMPORT_SUFFIX),nspr4 plc4 plds4))
--SQLITE_IMPORT_LIB = $(DIST)/lib/$(IMPORT_PREFIX)mozsqlite3$(IMPORT_SUFFIX)
--
--# TODO: The following can be replaced by something simpler when bug 844884
--# is fixed.
--# Associate target files with the rules that build them.
--$(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX): libs-nss/lib/crmf
--$(DIST)/lib/$(DLL_PREFIX)freebl3$(DLL_SUFFIX): libs-nss/lib/freebl
--$(DIST)/lib/$(DLL_PREFIX)nssckbi$(DLL_SUFFIX): libs-nss/lib/ckfw
--$(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX): libs-nss/lib/softoken
--$(DIST)/lib/$(DLL_PREFIX)nssdbm3$(DLL_SUFFIX): libs-nss/lib/softoken
--$(foreach lib,$(NSS_STATIC_LIBS),$(eval $(DEPTH)/security/$(lib): libs-$(patsubst %/,%,$(dir $(lib)))))
--
--# Create fake import libraries for the folded libraries, so that linking
--# against them works both for the NSS build system (see dependencies below)
--# and for the rest of the mozilla build system.
--$(NSPR_IMPORT_LIBS) \
--$(SQLITE_IMPORT_LIB) \
--$(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX) \
--$(DIST)/lib/$(IMPORT_PREFIX)ssl3$(IMPORT_SUFFIX) \
--$(DIST)/lib/$(IMPORT_PREFIX)smime3$(IMPORT_SUFFIX): $(DIST)/lib/$(IMPORT_PREFIX)nss3$(IMPORT_SUFFIX)
--ifeq (WINNT,$(OS_TARGET))
--	cp $< $@
--else
--	ln -sf $< $@
--endif
--
--# Interdependencies between nss sub-directories, and dependencies on NSPR/SQLite
--libs-nss/lib/ckfw: libs-nss/lib/nss/../base $(NSPR_IMPORT_LIBS)
--libs-nss/lib/softoken: $(NSPR_IMPORT_LIBS) $(SQLITE_IMPORT_LIB)
--libs-nss/lib/softoken: libs-nss/lib/freebl
--ifndef NSS_DISABLE_DBM
--libs-nss/lib/softoken: libs-nss/lib/dbm
--endif
--libs-nss/lib/softoken: $(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX)
--libs-nss/lib/freebl: $(DIST)/lib/$(IMPORT_PREFIX)nssutil3$(IMPORT_SUFFIX) $(NSPR_IMPORT_LIBS)
--
--# For each directory where we build static libraries, force the NSS build system
--# to only build static libraries.
--$(addprefix libs-,$(NSS_STATIC_DIRS)): DEFAULT_GMAKE_FLAGS += SHARED_LIBRARY= IMPORT_LIBRARY=
--else
--$(STATIC_LIBS) $(NSS_DIST_DLL_FILES) $(NSS_SDK_LIB_FILES): libs-nss/lib
--endif # MOZ_FOLD_LIBS
--
--ifeq ($(NSINSTALL_PY),$(NSINSTALL))
--DEFAULT_GMAKE_FLAGS += PYTHON='$(PYTHON)'
--DEFAULT_GMAKE_FLAGS += NSINSTALL_PY='$(abspath $(topsrcdir)/config/nsinstall.py)'
--DEFAULT_GMAKE_FLAGS += NSINSTALL='$$(PYTHON) $$(NSINSTALL_PY)'
--else
--DEFAULT_GMAKE_FLAGS += NSINSTALL='$(abspath $(NSINSTALL))'
--endif
--ifeq ($(OS_ARCH),WINNT)
--DEFAULT_GMAKE_FLAGS += INSTALL='$$(NSINSTALL) -t'
--endif
--DEFAULT_GMAKE_FLAGS += $(EXTRA_GMAKE_FLAGS)
--
--$(addprefix libs-,$(NSS_DIRS)): libs-%:
--# Work around NSS's export rule being racy when recursing for private_export
--# See bug #836220.
--$(addprefix export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS = PRIVATE_EXPORTS=
--$(addprefix export-,$(NSS_DIRS)): export-%: private_export-%
--$(addprefix private_export-,$(NSS_DIRS)): EXTRA_GMAKE_FLAGS =
--$(addprefix private_export-,$(NSS_DIRS)): private_export-%:
--
--$(foreach p,libs export private_export,$(addprefix $(p)-,$(NSS_DIRS))):
--	$(DEFAULT_GMAKE_ENV) $(MAKE) -C $(NSS_SRCDIR)/security/$* $(@:-$*=) $(DEFAULT_GMAKE_FLAGS)
--
--export:: $(addprefix export-,$(NSS_DIRS))
--
--$(addprefix clean-,$(NSS_DIRS)): clean-%:
--	$(MAKE) -C $(NSS_SRCDIR)/security/$* $(DEFAULT_GMAKE_FLAGS) clean
--
--clean clobber clobber_all realclean distclean depend:: $(addprefix clean-,$(NSS_DIRS))
--
--NSS_CMD_TARGETS := $(addprefix libs-,$(filter-out nss/cmd/lib,$(filter nss/cmd/%,$(NSS_DIRS))))
--target:: $(NSS_CMD_TARGETS)
--
--ifdef MOZ_FOLD_LIBS
--$(NSS_CMD_TARGETS): $(addprefix $(DIST)/lib/$(IMPORT_PREFIX),$(addsuffix $(IMPORT_SUFFIX),$(NSS_LIBS)))
--libs-nss/cmd/modutil: libs-nss/lib/jar
--ifeq (WINNT,$(OS_TARGET))
--libs-nss/cmd/modutil: libs-nss/lib/zlib
--endif
--$(NSS_CMD_TARGETS): libs-nss/cmd/lib
--else
--$(NSS_CMD_TARGETS): libs-nss/lib libs-nss/cmd/lib
--endif # MOZ_FOLD_LIBS
--
--# Work around NSS build system race condition creating certdata.c in
--# security/nss/lib/ckfw/builtins. See bug #836220.
--libs-nss/lib$(if $(MOZ_FOLD_LIBS),/ckfw): $(call mkdir_deps,$(DEPTH)/security/nss/lib/ckfw/builtins)
--
--endif
-diff --git a/config/external/nss/crmf/moz.build b/config/external/nss/crmf/moz.build
-deleted file mode 100644
---- a/config/external/nss/crmf/moz.build
-+++ /dev/null
-@@ -1,20 +0,0 @@
--# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
--# vim: set filetype=python:
--# This Source Code Form is subject to the terms of the Mozilla Public
--# License, v. 2.0. If a copy of the MPL was not distributed with this
--# file, You can obtain one at http://mozilla.org/MPL/2.0/.
--
--Library('crmf')
--
--if CONFIG['MOZ_SYSTEM_NSS']:
--    OS_LIBS += [l for l in CONFIG['NSS_LIBS'] if l.startswith('-L')]
--    OS_LIBS += ['-lcrmf']
--else:
--    USE_LIBS += [
--        # The dependency on nss is not real, but is required to force the
--        # parent directory being built before this one. This has no
--        # practical effect on linkage, since the only thing linking crmf
--        # will need nss anyways.
--        'nss',
--        'static:/security/nss/lib/crmf/crmf',
--    ]
-diff --git a/config/external/nss/nss.mk b/config/external/nss/nss.mk
-deleted file mode 100644
---- a/config/external/nss/nss.mk
-+++ /dev/null
-@@ -1,27 +0,0 @@
--# This Source Code Form is subject to the terms of the Mozilla Public
--# License, v. 2.0. If a copy of the MPL was not distributed with this
--# file, You can obtain one at http://mozilla.org/MPL/2.0/.
--
--include $(DEPTH)/config/autoconf.mk
--
--include $(topsrcdir)/config/config.mk
--
--dirs :=
--
--define add_dirs
--SHARED_LIBRARY_DIRS :=
--include $(topsrcdir)/security/$(1)/config.mk
--dirs += $$(addprefix $(1)/,$$(SHARED_LIBRARY_DIRS)) $(1)
--endef
--$(foreach dir,util nss ssl smime,$(eval $(call add_dirs,nss/lib/$(dir))))
--
--libs :=
--define add_lib
--LIBRARY_NAME :=
--include $(topsrcdir)/security/$(1)/manifest.mn
--libs += $$(addprefix $(1)/,$(LIB_PREFIX)$$(LIBRARY_NAME).$(LIB_SUFFIX))
--endef
--$(foreach dir,$(dirs),$(eval $(call add_lib,$(dir))))
--
--echo-variable-%:
--	@echo $($*)
-diff --git a/moz.build b/moz.build
---- a/moz.build
-+++ b/moz.build
-@@ -70,7 +70,7 @@
-     if not CONFIG['JS_STANDALONE']:
-         DIRS += [
-             'config/external',
--            'config/external/nss',
-+            'security',
-         ]
- 
-     if CONFIG['BUILD_CTYPES']:
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -2130,6 +2130,15 @@
-    NSS_LIBS="$NSS_LIBS -lcrmf"
- else
-    NSS_CFLAGS="-I${DIST}/include/nss"
-+   case "${OS_ARCH}" in
-+        # This is to match the conditions in security/generate_mapfile.py,
-+        # plus Windows which doesn't run that script.
-+        WINNT|Darwin|Linux)
-+            ;;
-+        *)
-+            AC_MSG_ERROR([building in-tree NSS is not supported on this platform. Use --with-system-nss])
-+            ;;
-+   esac
- fi
- 
- if test -z "$SKIP_LIBRARY_CHECKS"; then
-diff --git a/python/mozbuild/mozbuild/frontend/emitter.py b/python/mozbuild/mozbuild/frontend/emitter.py
---- a/python/mozbuild/mozbuild/frontend/emitter.py
-+++ b/python/mozbuild/mozbuild/frontend/emitter.py
-@@ -140,8 +140,6 @@
-         if os.path.exists(subconfigures):
-             paths = open(subconfigures).read().splitlines()
-         self._external_paths = set(mozpath.normsep(d) for d in paths)
--        # Add security/nss manually, since it doesn't have a subconfigure.
--        self._external_paths.add('security/nss')
- 
-         self._emitter_time = 0.0
-         self._object_count = 0
-diff --git a/security/generate_certdata.py b/security/generate_certdata.py
-new file mode 100644
---- /dev/null
-+++ b/security/generate_certdata.py
-@@ -0,0 +1,11 @@
-+#!/usr/bin/env python
-+#
-+# This exists to paper over differences between gyp's `action` definitions
-+# and moz.build `GENERATED_FILES` semantics.
-+
-+import buildconfig
-+import subprocess
-+
-+def main(output, *inputs):
-+    output.write(subprocess.check_output([buildconfig.substs['PERL']] + list(inputs)))
-+    return None
-diff --git a/security/generate_mapfile.py b/security/generate_mapfile.py
-new file mode 100644
---- /dev/null
-+++ b/security/generate_mapfile.py
-@@ -0,0 +1,54 @@
-+#!/usr/bin/env python
-+
-+# This Source Code Form is subject to the terms of the Mozilla Public
-+# License, v. 2.0. If a copy of the MPL was not distributed with this
-+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+
-+# This script processes NSS .def files according to the rules defined in
-+# a comment at the top of each one. The files are used to define the
-+# exports from NSS shared libraries, with -DEFFILE on Windows, a linker
-+# script on Linux, or with -exported_symbols_list on OS X.
-+#
-+# The NSS build system processes them using a series of sed replacements,
-+# but the Mozilla build system is already running a Python script to generate
-+# the file so it's simpler to just do the replacement in Python.
-+
-+import buildconfig
-+
-+
-+def main(output, input):
-+    # There's a check in old-configure.in under the system-nss handling
-+    # that should match this.
-+    if buildconfig.substs['OS_ARCH'] not in ('Linux', 'Darwin'):
-+        print "Error: unhandled OS_ARCH %s" % buildconfig.substs['OS_ARCH']
-+        return 1
-+    is_linux = buildconfig.substs['OS_ARCH'] == 'Linux'
-+
-+    with open(input, 'rb') as f:
-+        for line in f:
-+            line = line.rstrip()
-+            # Remove all lines containing ';-'
-+            if ';-' in line:
-+                continue
-+            # On non-Linux, remove all lines containing ';+'
-+            if not is_linux and ';+' in line:
-+                continue
-+            # Remove the string ' DATA '.
-+            line = line.replace(' DATA ', '')
-+            # Remove the string ';+'
-+            line = line.replace(';+', '')
-+            # Remove the string ';;'
-+            line = line.replace(';;', '')
-+            # If a ';' is present, remove everything after it,
-+            # and on non-Linux, remove it as well.
-+            i = line.find(';')
-+            if i != -1:
-+                if is_linux:
-+                    line = line[:i+1]
-+                else:
-+                    line = line[:i]
-+            # On non-Linux, symbols get an underscore in front.
-+            if line and not is_linux:
-+                output.write('_')
-+            output.write(line)
-+            output.write('\n')
-diff --git a/config/external/nss/moz.build b/security/moz.build
-rename from config/external/nss/moz.build
-rename to security/moz.build
---- a/config/external/nss/moz.build
-+++ b/security/moz.build
-@@ -4,39 +4,122 @@
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
--DIRS += ['crmf']
--
- if CONFIG['MOZ_SYSTEM_NSS']:
-     Library('nss')
-     OS_LIBS += CONFIG['NSS_LIBS']
--elif CONFIG['MOZ_FOLD_LIBS']:
--    GeckoSharedLibrary('nss', linkage=None)
--    # TODO: The library name can be changed when bug 845217 is fixed.
--    SHARED_LIBRARY_NAME = 'nss3'
-+else:
-+    include('/build/gyp_base.mozbuild')
-+    if CONFIG['MOZ_FOLD_LIBS']:
-+        GeckoSharedLibrary('nss', linkage=None)
-+        # TODO: The library name can be changed when bug 845217 is fixed.
-+        SHARED_LIBRARY_NAME = 'nss3'
-+
-+        SDK_LIBRARY = True
-+
-+        USE_LIBS += [
-+            'nspr4',
-+            'nss3_static',
-+            'nssutil',
-+            'plc4',
-+            'plds4',
-+            'smime3_static',
-+            'ssl',
-+        ]
-+
-+        OS_LIBS += CONFIG['REALTIME_LIBS']
- 
--    SDK_LIBRARY = True
--
--    USE_LIBS += [
--        'nspr4',
--        'plc4',
--        'plds4',
--    ]
-+        SYMBOLS_FILE = 'nss.symbols'
-+        # This changes the default targets in the NSS build, among
-+        # other things.
-+        gyp_vars['moz_fold_libs'] = 1
-+        # Some things in NSS need to link against nssutil, which
-+        # gets folded, so this tells them what to link against.
-+        gyp_vars['moz_folded_library_name'] = 'nss'
-+        # Force things in NSS that want to link against NSPR to link
-+        # against the folded library.
-+        gyp_vars['nspr_libs'] = 'nss'
-+    else:
-+        Library('nss')
-+        USE_LIBS += [
-+            'nss3',
-+            'nssutil3',
-+            'smime3',
-+            'sqlite',
-+            'ssl3',
-+        ]
-+        gyp_vars['nspr_libs'] = 'nspr4 plc4 plds4'
- 
--    OS_LIBS += CONFIG['REALTIME_LIBS']
-+    # This disables building some NSS tools.
-+    gyp_vars['mozilla_client'] = 1
-+    # We run shlibsign as part of packaging, not build.
-+    gyp_vars['sign_libs'] = 0
-+    gyp_vars['python'] = CONFIG['PYTHON']
-+    # The NSS gyp files do not have a default for this.
-+    gyp_vars['nss_dist_dir'] = '$PRODUCT_DIR/dist'
-+    # NSS wants to put public headers in $nss_dist_dir/public/nss by default,
-+    # which would wind up being mapped to dist/include/public/nss (by
-+    # gyp_reader's `handle_copies`).
-+    # This forces it to put them in dist/include/nss.
-+    gyp_vars['nss_public_dist_dir'] = '$PRODUCT_DIR/dist'
-+    gyp_vars['nss_dist_obj_dir'] = '$PRODUCT_DIR/dist/bin'
-+    # We don't currently build NSS tests.
-+    gyp_vars['disable_tests'] = 1
-+    if CONFIG['NSS_DISABLE_DBM']:
-+        gyp_vars['disable_dbm'] = 1
-+    gyp_vars['disable_libpkix'] = 1
-+    # pkg-config won't reliably find zlib on our builders, so just force it.
-+    # System zlib is only used for modutil and signtool unless
-+    # SSL zlib is enabled, which we are disabling immediately below this.
-+    gyp_vars['zlib_libs'] = '-lz'
-+    gyp_vars['ssl_enable_zlib'] = 0
-+    # System sqlite here is the in-tree mozsqlite.
-+    gyp_vars['use_system_sqlite'] = 1
-+    gyp_vars['sqlite_libs'] = 'sqlite'
-+    gyp_vars['nspr_include_dir'] = CONFIG['NSPR_INCLUDE_DIR']
-+    gyp_vars['nspr_lib_dir'] = CONFIG['NSPR_LIB_DIR']
-+    # The Python scripts that detect clang need it to be set as CC
-+    # in the environment, which isn't true here. I don't know that
-+    # setting that would be harmful, but we already have this information
-+    # anyway.
-+    if CONFIG['CLANG_CXX']:
-+        gyp_vars['cc_is_clang'] = 1
- 
--    SYMBOLS_FILE = 'nss.symbols'
--else:
--    Library('nss')
--    USE_LIBS += [
--        '/security/nss/lib/nss/nss3',
--        '/security/nss/lib/smime/smime3',
--        '/security/nss/lib/ssl/ssl3',
--        '/security/nss/lib/util/nssutil3',
--        'sqlite',
--    ]
-+    GYP_DIRS += ['nss']
-+    GYP_DIRS['nss'].input = 'nss/nss.gyp'
-+    GYP_DIRS['nss'].variables = gyp_vars
- 
--# XXX: We should fix these warnings.
--ALLOW_COMPILER_WARNINGS = True
-+    sandbox_vars = {
-+        # NSS explicitly exports its public symbols
-+        # with linker scripts.
-+        'NO_VISIBILITY_FLAGS': True,
-+        # XXX: We should fix these warnings.
-+        'ALLOW_COMPILER_WARNINGS': True,
-+        # NSS' build system doesn't currently build NSS with PGO.
-+        # We could probably do so, but not without a lot of
-+        # careful consideration.
-+        'NO_PGO': True,
-+    }
-+    if CONFIG['OS_TARGET'] == 'WINNT':
-+        if CONFIG['CPU_ARCH'] == 'x86':
-+            # This should really be the default.
-+            sandbox_vars['ASFLAGS'] = ['-safeseh']
-+    if CONFIG['OS_TARGET'] == 'Android':
-+        sandbox_vars['CFLAGS'] = [
-+            '-include', TOPSRCDIR + '/security/manager/android_stub.h',
-+            # Setting sandbox_vars['DEFINES'] is broken currently.
-+            '-DCHECK_FORK_GETPID',
-+        ]
-+        if CONFIG['ANDROID_VERSION']:
-+            sandbox_vars['CFLAGS'] += ['-DANDROID_VERSION=' + CONFIG['ANDROID_VERSION']]
-+    GYP_DIRS['nss'].sandbox_vars = sandbox_vars
-+    GYP_DIRS['nss'].no_chromium = True
-+    GYP_DIRS['nss'].no_unified = True
-+    # This maps action names from gyp files to
-+    # Python scripts that can be used in moz.build GENERATED_FILES.
-+    GYP_DIRS['nss'].action_overrides = {
-+        'generate_certdata_c': 'generate_certdata.py',
-+        'generate_mapfile': 'generate_mapfile.py',
-+    }
- 
- if CONFIG['NSS_EXTRA_SYMBOLS_FILE']:
-     DEFINES['NSS_EXTRA_SYMBOLS_FILE'] = CONFIG['NSS_EXTRA_SYMBOLS_FILE']
-diff --git a/config/external/nss/nss.symbols b/security/nss.symbols
-rename from config/external/nss/nss.symbols
-rename to security/nss.symbols
---- a/config/external/nss/nss.symbols
-+++ b/security/nss.symbols
-@@ -13,7 +13,7 @@
- PR_*
- PL_*
- #endif
--#include ../../../db/sqlite3/src/sqlite.symbols
-+#include ../db/sqlite3/src/sqlite.symbols
- ATOB_AsciiToData
- ATOB_AsciiToData_Util
- ATOB_ConvertAsciiToItem

+ 0 - 40
mozilla-esr52/patches/1310067.patch

@@ -1,40 +0,0 @@
-
-# HG changeset patch
-# User Makoto Kato <m_kato@ga2.so-net.ne.jp>
-# Date 1479694484 -32400
-# Node ID 59375acb5ae8b4fdaba7fe649c25826e48536792
-# Parent  665038e5ef2b980dc38bd44c107803ab0d2de9b4
-Bug 1310067 - VS2017 doesn't require JS_DEPENDENT_TEMPLATE_HINT workaround. r=jonco, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/js/public/TraceKind.h b/js/public/TraceKind.h
---- a/js/public/TraceKind.h
-+++ b/js/public/TraceKind.h
-@@ -159,22 +159,22 @@ template <> struct MapTypeToRootKind<JSF
- //
- //    DispatchTraceKindTyped(f, thing, traceKind, ... args)
- //
- // Downcast the |void *thing| to the specific type designated by |traceKind|,
- // and pass it to the functor |f| along with |... args|, forwarded. Pass the
- // type designated by |traceKind| as the functor's template argument. The
- // |thing| parameter is optional; without it, we simply pass through |... args|.
- 
--// GCC and Clang require an explicit template declaration in front of the
--// specialization of operator() because it is a dependent template. MSVC, on
--// the other hand, gets very confused if we have a |template| token there.
-+// VS2017+, GCC and Clang require an explicit template declaration in front of
-+// the specialization of operator() because it is a dependent template. VS2015,
-+// on the other hand, gets very confused if we have a |template| token there.
- // The clang-cl front end defines _MSC_VER, but still requires the explicit
- // template declaration, so we must test for __clang__ here as well.
--#if defined(_MSC_VER) && !defined(__clang__)
-+#if (defined(_MSC_VER) && _MSC_VER < 1910) && !defined(__clang__)
- # define JS_DEPENDENT_TEMPLATE_HINT
- #else
- # define JS_DEPENDENT_TEMPLATE_HINT template
- #endif
- template <typename F, typename... Args>
- auto
- DispatchTraceKindTyped(F f, JS::TraceKind traceKind, Args&&... args)
-   -> decltype(f. JS_DEPENDENT_TEMPLATE_HINT operator()<JSObject>(mozilla::Forward<Args>(args)...))
-

+ 0 - 157
mozilla-esr52/patches/1316844-1.patch

@@ -1,157 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1478831563 -32400
-# Node ID f45564cb091fb98a058f470de5e1f5857683870f
-# Parent  7ea8e42c983584ed6638f2a10aca9b0019f20025
-Bug 1316844 - Improve function unwrapping to properly cover templates. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -655,39 +655,42 @@ class ConfigureSandbox(dict):
-                     return func
-                 return obj
- 
-             # The following function may end up being prepared to be sandboxed,
-             # so it mustn't depend on anything from the global scope in this
-             # file. It can however depend on variables from the closure, thus
-             # maybe_prepare_function and isfunction are declared above to be
-             # available there.
--            @wraps(template)
-+            @self.wraps(template)
-             def wrapper(*args, **kwargs):
-                 args = [maybe_prepare_function(arg) for arg in args]
-                 kwargs = {k: maybe_prepare_function(v)
-                           for k, v in kwargs.iteritems()}
-                 ret = template(*args, **kwargs)
-                 if isfunction(ret):
-                     # We can't expect the sandboxed code to think about all the
-                     # details of implementing decorators, so do some of the
-                     # work for them. If the function takes exactly one function
-                     # as argument and returns a function, it must be a
-                     # decorator, so mark the returned function as wrapping the
-                     # function passed in.
-                     if len(args) == 1 and not kwargs and isfunction(args[0]):
--                        ret = wraps(args[0])(ret)
-+                        ret = self.wraps(args[0])(ret)
-                     return wrap_template(ret)
-                 return ret
-             return wrapper
- 
-         wrapper = wrap_template(template)
-         self._templates.add(wrapper)
-         return wrapper
- 
-+    def wraps(self, func):
-+        return wraps(func)
-+
-     RE_MODULE = re.compile('^[a-zA-Z0-9_\.]+$')
- 
-     def imports_impl(self, _import, _from=None, _as=None):
-         '''Implementation of @imports.
-         This decorator imports the given _import from the given _from module
-         optionally under a different _as name.
-         The options correspond to the various forms for the import builtin.
-             @imports('sys')
-@@ -912,24 +915,24 @@ class ConfigureSandbox(dict):
-             def makecell(content):
-                 def f():
-                     content
-                 return f.func_closure[0]
- 
-             closure = tuple(makecell(cell.cell_contents)
-                             for cell in func.func_closure)
- 
--        new_func = wraps(func)(types.FunctionType(
-+        new_func = self.wraps(func)(types.FunctionType(
-             func.func_code,
-             glob,
-             func.__name__,
-             func.func_defaults,
-             closure
-         ))
--        @wraps(new_func)
-+        @self.wraps(new_func)
-         def wrapped(*args, **kwargs):
-             if func in self._imports:
-                 self._apply_imports(func, glob)
-                 del self._imports[func]
-             return new_func(*args, **kwargs)
- 
-         self._prepared_functions.add(wrapped)
-         return wrapped, glob
-diff --git a/python/mozbuild/mozbuild/configure/lint.py b/python/mozbuild/mozbuild/configure/lint.py
---- a/python/mozbuild/mozbuild/configure/lint.py
-+++ b/python/mozbuild/mozbuild/configure/lint.py
-@@ -1,20 +1,22 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
- from __future__ import absolute_import, print_function, unicode_literals
- 
-+from functools import wraps
- from StringIO import StringIO
- from . import (
-     CombinedDependsFunction,
-     ConfigureError,
-     ConfigureSandbox,
-     DependsFunction,
-+    SandboxedGlobal,
- )
- from .lint_util import disassemble_as_iter
- from mozbuild.util import memoize
- 
- 
- class LintSandbox(ConfigureSandbox):
-     def __init__(self, environ=None, argv=None, stdout=None, stderr=None):
-         out = StringIO()
-@@ -32,17 +34,17 @@ class LintSandbox(ConfigureSandbox):
- 
-     def _missing_help_dependency(self, obj):
-         if isinstance(obj, CombinedDependsFunction):
-             return False
-         if isinstance(obj, DependsFunction):
-             if (self._help_option in obj.dependencies or
-                 obj in (self._always, self._never)):
-                 return False
--            func, glob = self._wrapped[obj.func]
-+            func, glob = self.unwrap(obj.func)
-             # We allow missing --help dependencies for functions that:
-             # - don't use @imports
-             # - don't have a closure
-             # - don't use global variables
-             if func in self._imports or func.func_closure:
-                 return True
-             for op, arg in disassemble_as_iter(func):
-                 if op in ('LOAD_GLOBAL', 'STORE_GLOBAL'):
-@@ -66,13 +68,21 @@ class LintSandbox(ConfigureSandbox):
-                         % (obj.name, arg.name, arg.name))
-         elif ((self._help or need_help_dependency) and
-               self._missing_help_dependency(obj)):
-             raise ConfigureError("Missing @depends for `%s`: '--help'" %
-                                  obj.name)
-         return super(LintSandbox, self)._value_for_depends(
-             obj, need_help_dependency)
- 
--    def _prepare_function(self, func):
--        wrapped, glob = super(LintSandbox, self)._prepare_function(func)
--        if wrapped not in self._wrapped:
--            self._wrapped[wrapped] = func, glob
--        return wrapped, glob
-+    def unwrap(self, func):
-+        glob = func.func_globals
-+        while func in self._wrapped:
-+            if isinstance(func.func_globals, SandboxedGlobal):
-+                glob = func.func_globals
-+            func = self._wrapped[func]
-+        return func, glob
-+
-+    def wraps(self, func):
-+        def do_wraps(wrapper):
-+            self._wrapped[wrapper] = func
-+            return wraps(func)(wrapper)
-+        return do_wraps
-

+ 0 - 185
mozilla-esr52/patches/1316844-2.patch

@@ -1,185 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1478836357 -32400
-# Node ID e9f19254a85d07fd2b4e3fda76210b355ac52b48
-# Parent  f45564cb091fb98a058f470de5e1f5857683870f
-Bug 1316844 - Remove unused dependencies. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/compile-checks.configure b/build/moz.configure/compile-checks.configure
---- a/build/moz.configure/compile-checks.configure
-+++ b/build/moz.configure/compile-checks.configure
-@@ -70,22 +70,22 @@ def check_header(header, language='C++',
- @template
- def check_headers(*headers, **kwargs):
-     checks = []
-     for header in headers:
-         checks.append(check_header(header, **kwargs))
-     return checks
- 
- 
--@depends(c_compiler)
--def warnings_cflags(c_compiler):
-+@dependable
-+def warnings_cflags():
-     return []
- 
--@depends(cxx_compiler)
--def warnings_cxxflags(cxx_compiler):
-+@dependable
-+def warnings_cxxflags():
-     return []
- 
- 
- # Tests whether GCC or clang support the given warning flag, and if it is,
- # add it to the list of warning flags for the build.
- # - `warning` is the warning flag (e.g. -Wfoo)
- # - `compiler` (optional) is the compiler to test against (c_compiler or
- #   cxx_compiler, from toolchain.configure). When omitted, both compilers
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -487,18 +487,18 @@ add_old_configure_assignment('HAVE_64BIT
- 
- # Autoconf needs these set
- @depends(host)
- def host_for_old_configure(host):
-     return '--host=%s' % host.alias
- 
- add_old_configure_arg(host_for_old_configure)
- 
--@depends(host, target)
--def target_for_old_configure(host, target):
-+@depends(target)
-+def target_for_old_configure(target):
-     target_alias = target.alias
-     # old-configure does plenty of tests against $target and $target_os
-     # and expects darwin for iOS, so make it happy.
-     if target.os == 'iOS':
-         target_alias = target_alias.replace('-ios', '-darwin')
-     return '--target=%s' % target_alias
- 
- add_old_configure_arg(target_for_old_configure)
-@@ -754,20 +754,20 @@ def project_flag(env=None, set_for_old_c
- 
- # milestone.is_nightly corresponds to cases NIGHTLY_BUILD is set.
- @depends(milestone, '--help')
- def enabled_in_nightly(milestone, _):
-     return milestone.is_nightly
- 
- # Set the MOZ_CONFIGURE_OPTIONS variable with all the options that
- # were passed somehow (environment, command line, mozconfig)
--@depends(mozconfig_options)
-+@dependable
- @imports(_from='mozbuild.shellutil', _import='quote')
- @imports('__sandbox__')
--def all_configure_options(_):
-+def all_configure_options():
-     result = []
-     previous = None
-     for option in __sandbox__._options.itervalues():
-         # __sandbox__._options contains items for both option.name and
-         # option.env. But it's also an OrderedDict, meaning both are
-         # consecutive.
-         # Also ignore OLD_CONFIGURE and MOZCONFIG because they're not
-         # interesting.
-diff --git a/build/moz.configure/rust.configure b/build/moz.configure/rust.configure
---- a/build/moz.configure/rust.configure
-+++ b/build/moz.configure/rust.configure
-@@ -66,23 +66,23 @@ def rust_compiler(value, rustc, rustc_in
-             version {} of the 'rustc' toolchain and make sure it is
-             first in your path.
-             You can verify this by typing 'rustc --version'.
-             '''.format(version, min_version)))
-         return True
- 
- set_config('MOZ_RUST', rust_compiler)
- 
--@depends(rust_compiler, rustc, target, cross_compiling)
-+@depends(rust_compiler, rustc, target)
- @imports('os')
- @imports('subprocess')
- @imports(_from='mozbuild.configure.util', _import='LineIO')
- @imports(_from='mozbuild.shellutil', _import='quote')
- @imports(_from='tempfile', _import='mkstemp')
--def rust_target(rust_compiler, rustc, target, cross_compiling):
-+def rust_target(rust_compiler, rustc, target):
-     if rust_compiler:
-         # Rust's --target options are similar to, but not exactly the same
-         # as, the autoconf-derived targets we use.  An example would be that
-         # Rust uses distinct target triples for targetting the GNU C++ ABI
-         # and the MSVC C++ ABI on Win32, whereas autoconf has a single
-         # triple and relies on the user to ensure that everything is
-         # compiled for the appropriate ABI.  We need to perform appropriate
-         # munging to get the correct option to rustc.
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -151,18 +151,18 @@ def using_compiler_wrapper(compiler_wrap
- set_config('MOZ_USING_COMPILER_WRAPPER', using_compiler_wrapper)
- 
- 
- # Cross-compilation related things.
- # ==============================================================
- js_option('--with-toolchain-prefix', env='TOOLCHAIN_PREFIX', nargs=1,
-           help='Prefix for the target toolchain')
- 
--@depends('--with-toolchain-prefix', target, host, cross_compiling)
--def toolchain_prefix(value, target, host, cross_compiling):
-+@depends('--with-toolchain-prefix', target, cross_compiling)
-+def toolchain_prefix(value, target, cross_compiling):
-     if value:
-         return tuple(value)
-     if cross_compiling:
-         return ('%s-' % target.toolchain, '%s-' % target.alias)
- 
- @depends(toolchain_prefix, target)
- def first_toolchain_prefix(toolchain_prefix, target):
-     # Pass TOOLCHAIN_PREFIX down to the build system if it was given from the
-@@ -878,18 +878,18 @@ add_old_configure_assignment('MOZ_DEBUG_
- @depends(c_compiler, target)
- def libcxx_inline_visibility(c_compiler, target):
-     if c_compiler.type == 'clang' and target.os == 'Android':
-         return ''
- 
- set_define('_LIBCPP_INLINE_VISIBILITY', libcxx_inline_visibility)
- set_define('_LIBCPP_INLINE_VISIBILITY_EXCEPT_GCC49', libcxx_inline_visibility)
- 
--@depends(c_compiler, target, check_build_environment)
--def visibility_flags(c_compiler, target, env):
-+@depends(target, check_build_environment)
-+def visibility_flags(target, env):
-     if target.os != 'WINNT':
-         if target.kernel == 'Darwin':
-             return ('-fvisibility=hidden', '-fvisibility-inlines-hidden')
-         return ('-I%s/system_wrappers' % os.path.join(env.dist),
-                 '-include',
-                 '%s/config/gcc_hidden.h' % env.topsrcdir)
- 
- @depends(target, visibility_flags)
-diff --git a/toolkit/moz.configure b/toolkit/moz.configure
---- a/toolkit/moz.configure
-+++ b/toolkit/moz.configure
-@@ -788,18 +788,18 @@ def skia_gpu(value, skia, target):
-     if skia and value:
-         return True
- 
- set_config('MOZ_ENABLE_SKIA_GPU', skia_gpu)
- set_define('USE_SKIA_GPU', skia_gpu)
- 
- option('--enable-skia-pdf', help='Enable Skia PDF')
- 
--@depends('--enable-skia-pdf', skia, target)
--def skia_pdf(value, skia, target):
-+@depends('--enable-skia-pdf', skia)
-+def skia_pdf(value, skia):
-     if value.origin == 'default':
-         if not skia:
-             return None
-     elif value and not skia:
-         die('Cannot enable Skia PDF without enabling Skia')
-     if skia and value:
-         return True
- 
-

+ 0 - 263
mozilla-esr52/patches/1316844-3.patch

@@ -1,263 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1478836378 -32400
-# Node ID f44dbf7e6f4c96d960a58ed77274eec619a87c8a
-# Parent  e9f19254a85d07fd2b4e3fda76210b355ac52b48
-Bug 1316844 - Make the linter detect unused dependencies. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -205,17 +205,17 @@ class ConfigureSandbox(dict):
-     def __init__(self, config, environ=os.environ, argv=sys.argv,
-                  stdout=sys.stdout, stderr=sys.stderr, logger=None):
-         dict.__setitem__(self, '__builtins__', self.BUILTINS)
- 
-         self._paths = []
-         self._all_paths = set()
-         self._templates = set()
-         # Associate SandboxDependsFunctions to DependsFunctions.
--        self._depends = {}
-+        self._depends = OrderedDict()
-         self._seen = set()
-         # Store the @imports added to a given function.
-         self._imports = {}
- 
-         self._options = OrderedDict()
-         # Store raw option (as per command line or environment) for each Option
-         self._raw_options = OrderedDict()
- 
-@@ -383,16 +383,19 @@ class ConfigureSandbox(dict):
-             value, _ = self._prepare_function(value)
- 
-         elif (not isinstance(value, SandboxDependsFunction) and
-                 value not in self._templates and
-                 not (inspect.isclass(value) and issubclass(value, Exception))):
-             raise KeyError('Cannot assign `%s` because it is neither a '
-                            '@depends nor a @template' % key)
- 
-+        if isinstance(value, SandboxDependsFunction):
-+            self._depends[value].func.__name__ = key
-+
-         return super(ConfigureSandbox, self).__setitem__(key, value)
- 
-     def _resolve(self, arg, need_help_dependency=True):
-         if isinstance(arg, SandboxDependsFunction):
-             return self._value_for_depends(self._depends[arg],
-                                            need_help_dependency)
-         return arg
- 
-diff --git a/python/mozbuild/mozbuild/configure/lint.py b/python/mozbuild/mozbuild/configure/lint.py
---- a/python/mozbuild/mozbuild/configure/lint.py
-+++ b/python/mozbuild/mozbuild/configure/lint.py
-@@ -1,14 +1,15 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
- from __future__ import absolute_import, print_function, unicode_literals
- 
-+import inspect
- from functools import wraps
- from StringIO import StringIO
- from . import (
-     CombinedDependsFunction,
-     ConfigureError,
-     ConfigureSandbox,
-     DependsFunction,
-     SandboxedGlobal,
-@@ -27,16 +28,56 @@ class LintSandbox(ConfigureSandbox):
-         self._wrapped = {}
-         super(LintSandbox, self).__init__({}, environ=environ, argv=argv,
-                                           stdout=stdout, stderr=stderr)
- 
-     def run(self, path=None):
-         if path:
-             self.include_file(path)
- 
-+        for dep in self._depends.itervalues():
-+            self._check_dependencies(dep)
-+
-+    def _check_dependencies(self, obj):
-+        if isinstance(obj, CombinedDependsFunction) or obj in (self._always,
-+                                                               self._never):
-+            return
-+        func, glob = self.unwrap(obj.func)
-+        loc = '%s:%d' % (func.func_code.co_filename,
-+                         func.func_code.co_firstlineno)
-+        func_args = inspect.getargspec(func)
-+        if func_args.keywords:
-+            raise ConfigureError(
-+                '%s: Keyword arguments are not allowed in @depends functions'
-+                % loc
-+            )
-+
-+        all_args = list(func_args.args)
-+        if func_args.varargs:
-+            all_args.append(func_args.varargs)
-+        used_args = set()
-+
-+        for op, arg in disassemble_as_iter(func):
-+            if op in ('LOAD_FAST', 'LOAD_CLOSURE'):
-+                if arg in all_args:
-+                    used_args.add(arg)
-+
-+        for num, arg in enumerate(all_args):
-+            if arg not in used_args:
-+                dep = obj.dependencies[num]
-+                if dep != self._help_option:
-+                    if isinstance(dep, DependsFunction):
-+                        dep = dep.name
-+                    else:
-+                        dep = dep.option
-+                    raise ConfigureError(
-+                        '%s: The dependency on `%s` is unused.'
-+                        % (loc, dep)
-+                    )
-+
-     def _missing_help_dependency(self, obj):
-         if isinstance(obj, CombinedDependsFunction):
-             return False
-         if isinstance(obj, DependsFunction):
-             if (self._help_option in obj.dependencies or
-                 obj in (self._always, self._never)):
-                 return False
-             func, glob = self.unwrap(obj.func)
-diff --git a/python/mozbuild/mozbuild/test/configure/test_lint.py b/python/mozbuild/mozbuild/test/configure/test_lint.py
---- a/python/mozbuild/mozbuild/test/configure/test_lint.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_lint.py
-@@ -39,31 +39,31 @@ class TestLint(unittest.TestCase):
-         with self.moz_configure('''
-             option('--foo', help='foo')
-             @depends('--foo')
-             def foo(value):
-                 return value
- 
-             @depends('--help', foo)
-             def bar(help, foo):
--                return
-+                return foo
-         '''):
-             self.lint_test()
- 
-         with self.assertRaises(ConfigureError) as e:
-             with self.moz_configure('''
-                 option('--foo', help='foo')
-                 @depends('--foo')
-                 @imports('os')
-                 def foo(value):
-                     return value
- 
-                 @depends('--help', foo)
-                 def bar(help, foo):
--                    return
-+                    return foo
-             '''):
-                 self.lint_test()
- 
-         self.assertEquals(e.exception.message,
-                           "`bar` depends on '--help' and `foo`. "
-                           "`foo` must depend on '--help'")
- 
-         with self.assertRaises(ConfigureError) as e:
-@@ -75,17 +75,17 @@ class TestLint(unittest.TestCase):
-                     option('--foo', help='foo')
-                     @depends('--foo')
-                     def foo(value):
-                         qux
-                         return value
- 
-                     @depends('--help', foo)
-                     def bar(help, foo):
--                        return
-+                        return foo
-                 tmpl()
-             '''):
-                 self.lint_test()
- 
-         self.assertEquals(e.exception.message,
-                           "`bar` depends on '--help' and `foo`. "
-                           "`foo` must depend on '--help'")
- 
-@@ -122,11 +122,78 @@ class TestLint(unittest.TestCase):
-             def foo(value):
-                 os
-                 return value
- 
-             include(foo)
-         '''):
-             self.lint_test()
- 
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                option('--foo', help='foo')
-+                @depends('--foo')
-+                def foo(value):
-+                    return
-+
-+                include(foo)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "%s:3: The dependency on `--foo` is unused."
-+                          % mozpath.join(test_data_path, 'moz.configure'))
-+
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                @depends(when=True)
-+                def bar():
-+                    return
-+                @depends(bar)
-+                def foo(value):
-+                    return
-+
-+                include(foo)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "%s:5: The dependency on `bar` is unused."
-+                          % mozpath.join(test_data_path, 'moz.configure'))
-+
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                @depends(depends(when=True)(lambda: None))
-+                def foo(value):
-+                    return
-+
-+                include(foo)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "%s:2: The dependency on `<lambda>` is unused."
-+                          % mozpath.join(test_data_path, 'moz.configure'))
-+
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                @template
-+                def tmpl():
-+                    @depends(when=True)
-+                    def bar():
-+                        return
-+                    return bar
-+                qux = tmpl()
-+                @depends(qux)
-+                def foo(value):
-+                    return
-+
-+                include(foo)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "%s:9: The dependency on `qux` is unused."
-+                          % mozpath.join(test_data_path, 'moz.configure'))
-+
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 81
mozilla-esr52/patches/1316956.patch

@@ -1,81 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1494627176 -32400
-# Node ID 563f87448eff9e4db7c11f9bfbfddc4c746ca514
-# Parent  d1ed0a4e7d97f808c1caa1ebc5116b51d1986621
-Bug 1316956 - Add a when argument to check_prog. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/checks.configure b/build/moz.configure/checks.configure
---- a/build/moz.configure/checks.configure
-+++ b/build/moz.configure/checks.configure
-@@ -89,17 +89,17 @@ def checking(what, callback=None):
- # The simplest form is:
- #   check_prog('PROG', ('a', 'b'))
- # This will look for 'a' or 'b' in $PATH, and set_config PROG to the one
- # it can find. If PROG is already set from the environment or command line,
- # use that value instead.
- @template
- @imports(_from='mozbuild.shellutil', _import='quote')
- def check_prog(var, progs, what=None, input=None, allow_missing=False,
--               paths=None):
-+               paths=None, when=None):
-     if input is not None:
-         # Wrap input with type checking and normalization.
-         @depends(input)
-         def input(value):
-             if not value:
-                 return
-             if isinstance(value, str):
-                 return (value,)
-@@ -112,17 +112,17 @@ def check_prog(var, progs, what=None, in
-                help='Path to %s' % (what or 'the %s program' % var.lower()))
-         input = var
-     what = what or var.lower()
- 
-     # Trick to make a @depends function out of an immediate value.
-     progs = dependable(progs)
-     paths = dependable(paths)
- 
--    @depends_if(input, progs, paths)
-+    @depends_if(input, progs, paths, when=when)
-     @checking('for %s' % what, lambda x: quote(x) if x else 'not found')
-     def check(value, progs, paths):
-         if progs is None:
-             progs = ()
- 
-         if not isinstance(progs, (tuple, list)):
-             configure_error('progs must resolve to a list or tuple!')
- 
-diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
---- a/build/moz.configure/util.configure
-+++ b/build/moz.configure/util.configure
-@@ -385,19 +385,24 @@ def delayed_getattr(func, key):
-         return getattr(value, key, None)
- 
-     return result
- 
- 
- # Like @depends, but the decorated function is only called if one of the
- # arguments it would be called with has a positive value (bool(value) is True)
- @template
--def depends_if(*args):
-+def depends_if(*args, **kwargs):
-+    if kwargs:
-+        assert len(kwargs) == 1
-+        when = kwargs['when']
-+    else:
-+        when = None
-     def decorator(func):
--        @depends(*args)
-+        @depends(*args, when=when)
-         def wrapper(*args):
-             if any(arg for arg in args):
-                 return func(*args)
-         return wrapper
-     return decorator
- 
- # Hacks related to old-configure
- # ==============================
-

+ 0 - 262
mozilla-esr52/patches/1316957.patch

@@ -1,262 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1478898307 -32400
-# Node ID d63d083ab7672423620d6d83366d3e1cbae86bad
-# Parent  8c1409a443ee41860f8caaf59a149ab83c467736
-Bug 1316957 - Include windows.configure conditionally instead of using @depends_win. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -962,10 +962,14 @@ def wrap_system_includes(target, visibil
- 
- set_define('HAVE_VISIBILITY_HIDDEN_ATTRIBUTE',
-            depends(visibility_flags)(lambda v: bool(v) or None))
- set_define('HAVE_VISIBILITY_ATTRIBUTE',
-            depends(visibility_flags)(lambda v: bool(v) or None))
- set_config('WRAP_SYSTEM_INCLUDES', wrap_system_includes)
- set_config('VISIBILITY_FLAGS', visibility_flags)
- 
--include('windows.configure')
-+@depends(target)
-+def is_windows(target):
-+    return target.kernel == 'WINNT'
-+
-+include('windows.configure', when=is_windows)
- include('rust.configure')
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -3,27 +3,17 @@
- # This Source Code Form is subject to the terms of the Mozilla Public
- # License, v. 2.0. If a copy of the MPL was not distributed with this
- # file, You can obtain one at http://mozilla.org/MPL/2.0/.
- 
- option('--with-windows-version', nargs=1, default='603',
-        help='Windows SDK version to target. Win 8.1 (603) is currently'
-             'the minimum supported version.')
- 
--@depends(target)
--def is_windows(target):
--    return target.kernel == 'WINNT'
--
--
--@template
--def depends_win(*args):
--    return depends_when(*args, when=is_windows)
--
--
--@depends_win('--with-windows-version')
-+@depends('--with-windows-version')
- @imports(_from='__builtin__', _import='ValueError')
- def valid_windows_version(value):
-     if not value:
-         die('Cannot build with --without-windows-version')
-     try:
-         version = int(value[0], 16)
-         if version in (0x603,):
-             return version
-@@ -31,17 +21,17 @@ def valid_windows_version(value):
-         pass
- 
-     die('Invalid value for --with-windows-version (%s)', value[0])
- 
- 
- option(env='WINDOWSSDKDIR', nargs=1,
-        help='Directory containing the Windows SDK')
- 
--@depends_win('WINDOWSSDKDIR', host)
-+@depends('WINDOWSSDKDIR', host)
- def windows_sdk_dir(value, host):
-     if value:
-         return value
-     if host.kernel != 'WINNT':
-         return ()
- 
-     return tuple(x[1] for x in get_registry_values(
-         r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots'
-@@ -94,18 +84,17 @@ def get_sdk_dirs(sdk, subdir):
-         )
- 
- 
- @imports(_from='mozbuild.shellutil', _import='quote')
- def valid_windows_sdk_dir_result(value):
-     if value:
-         return '0x%04x in %s' % (value.version, quote(value.path))
- 
--@depends_win(c_compiler, windows_sdk_dir, valid_windows_version,
--             'WINDOWSSDKDIR')
-+@depends(c_compiler, windows_sdk_dir, valid_windows_version, 'WINDOWSSDKDIR')
- @checking('for Windows SDK', valid_windows_sdk_dir_result)
- @imports(_from='__builtin__', _import='sorted')
- @imports(_from='textwrap', _import='dedent')
- def valid_windows_sdk_dir(compiler, windows_sdk_dir, target_version,
-                           windows_sdk_dir_env):
-     if windows_sdk_dir_env:
-         windows_sdk_dir_env = windows_sdk_dir_env[0]
-     sdks = {}
-@@ -171,17 +160,17 @@ add_old_configure_assignment(
-         lambda x: '0x%04X0000' % x.version if x else None))
- 
- 
- @imports(_from='mozbuild.shellutil', _import='quote')
- def valid_ucrt_sdk_dir_result(value):
-     if value:
-         return '%s in %s' % (value.version, quote(value.path))
- 
--@depends_win(windows_sdk_dir, 'WINDOWSSDKDIR')
-+@depends(windows_sdk_dir, 'WINDOWSSDKDIR')
- @checking('for Universal CRT SDK', valid_ucrt_sdk_dir_result)
- @imports('os')
- @imports(_from='__builtin__', _import='sorted')
- @imports(_import='mozpack.path', _as='mozpath')
- def valid_ucrt_sdk_dir(windows_sdk_dir, windows_sdk_dir_env):
-     if windows_sdk_dir_env:
-         windows_sdk_dir_env = windows_sdk_dir_env[0]
-     sdks = {}
-@@ -237,17 +226,17 @@ def valid_ucrt_sdk_dir(windows_sdk_dir, 
-     return namespace(
-         path=sdk.path,
-         include=sdk.include,
-         lib=sdk.lib,
-         version=version,
-     )
- 
- 
--@depends_win(c_compiler)
-+@depends(c_compiler)
- @imports('os')
- def vc_path(c_compiler):
-     if c_compiler.type != 'msvc':
-         return
-     # Normally, we'd start from c_compiler.compiler, but for now, it's not the
-     # ideal full path to the compiler. At least, we're guaranteed find_program
-     # will get us the one we found in toolchain.configure.
-     cl = find_program(c_compiler.compiler)
-@@ -258,27 +247,27 @@ def vc_path(c_compiler):
-             die('Cannot determine the Visual C++ directory the compiler (%s) '
-                 'is in' % cl)
-         result = next
-         if p.lower() == 'bin':
-             break
-     return result
- 
- 
--@depends_win(vc_path)
-+@depends(vc_path)
- @checking('for the Debug Interface Access SDK', lambda x: x or 'not found')
- @imports(_from='os.path', _import='isdir')
- def dia_sdk_dir(vc_path):
-     if vc_path:
-         path = os.path.join(os.path.dirname(vc_path), 'DIA SDK')
-         if isdir(path):
-             return path
- 
- 
--@depends_win(vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
-+@depends(vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
- @imports('os')
- def include_path(vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir):
-     if not vc_path:
-         return
-     atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'include')
-     if not os.path.isdir(atlmfc_dir):
-         die('Cannot find the ATL/MFC headers in the Visual C++ directory (%s). '
-             'Please install them.' % vc_path)
-@@ -305,17 +294,17 @@ def include_path(vc_path, windows_sdk_di
-     # Set in the environment for old-configure
-     includes = os.pathsep.join(includes)
-     os.environ['INCLUDE'] = includes
-     return includes
- 
- set_config('INCLUDE', include_path)
- 
- 
--@depends_win(target, vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
-+@depends(target, vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
- @imports('os')
- def lib_path(target, vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir):
-     if not vc_path:
-         return
-     vc_target = {
-         'x86': '',
-         'x86_64': 'amd64',
-         'arm': 'arm',
-@@ -359,17 +348,17 @@ def lib_path(target, vc_path, windows_sd
-     os.environ['LIB'] = libs
-     return libs
- 
- set_config('LIB', lib_path)
- 
- 
- option(env='MT', nargs=1, help='Path to the Microsoft Manifest Tool')
- 
--@depends_win(valid_windows_sdk_dir)
-+@depends(valid_windows_sdk_dir)
- @imports(_from='os', _import='environ')
- @imports('platform')
- def sdk_bin_path(valid_windows_sdk_dir):
-     if not valid_windows_sdk_dir:
-         return
- 
-     vc_host = {
-         'x86': 'x86',
-@@ -381,23 +370,23 @@ def sdk_bin_path(valid_windows_sdk_dir):
-         os.path.join(valid_windows_sdk_dir.path, 'bin', vc_host)
-     ]
-     if vc_host == 'x64':
-         result.append(
-             os.path.join(valid_windows_sdk_dir.path, 'bin', 'x86'))
-     return result
- 
- 
--mt = check_prog('MT', depends_win()(lambda: ('mt.exe',)), input='MT',
-+mt = check_prog('MT', ('mt.exe',), input='MT',
-                 paths=sdk_bin_path)
- 
- 
- # Check that MT is not something unexpected like "magnetic tape manipulation
- # utility".
--@depends_win(mt)
-+@depends(mt)
- @checking('whether MT is really Microsoft Manifest Tool', lambda x: bool(x))
- @imports('subprocess')
- def valid_mt(path):
-     try:
-         out = subprocess.check_output([path]).splitlines()
-         out = '\n'.join(l for l in out
-                         if 'Microsoft (R) Manifest Tool' in l)
-         if out:
-@@ -405,26 +394,25 @@ def valid_mt(path):
-     except subprocess.CalledProcessError:
-         pass
-     raise FatalCheckError('%s is not Microsoft Manifest Tool')
- 
- 
- set_config('MSMANIFEST_TOOL', depends(valid_mt)(lambda x: bool(x)))
- 
- 
--link = check_prog('LINK', depends_win()(lambda: ('link.exe',)),
--                  paths=vc_compiler_path)
-+link = check_prog('LINK', ('link.exe',), paths=vc_compiler_path)
- 
--add_old_configure_assignment('LINK', depends_win(link)(lambda x: x))
-+add_old_configure_assignment('LINK', link)
- 
- 
- # Normally, we'd just have CC, etc. set to absolute paths, but the build system
- # doesn't currently handle properly the case where the paths contain spaces.
- # Additionally, there's the issue described in toolchain.configure, in
- # valid_compiler().
--@depends_win(sdk_bin_path)
-+@depends(sdk_bin_path)
- @imports('os')
- def alter_path(sdk_bin_path):
-     path = os.pathsep.join(sdk_bin_path)
-     os.environ['PATH'] = path
-     return path
- 
- set_config('PATH', alter_path)
-

+ 0 - 110
mozilla-esr52/patches/1317504-1.patch

@@ -1,110 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479967621 -32400
-# Node ID cffe1cd111f65c9045cc8e1fe34d845a9a6b5c28
-# Parent  5c3271cb35c218a5976aa87873099b45719178ea
-Bug 1317504 - Warn that LD is not used by the build system. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-It turns out that, in practice, the LD variable is not used by the build
-system, except on Windows, where it's used to feed the default for LINK,
-which is then re-injected as LD.
-
-The upcoming changes are going to normalize the use of LD/LINK.
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -791,16 +791,40 @@ def compiler(language, host_or_target, c
-         }[language]
- 
-         preprocessor = depends_if(valid_compiler)(
-                 lambda x: list(x.wrapper) + [x.compiler, '-E'] + list(x.flags))
- 
-         set_config(pp_var, preprocessor)
-         add_old_configure_assignment(pp_var, preprocessor)
- 
-+    if language == 'C':
-+        linker_var = {
-+            target: 'LD',
-+            host: 'HOST_LD',
-+        }[host_or_target]
-+
-+        @deprecated_option(env=linker_var, nargs=1)
-+        def linker(value):
-+            if value:
-+                return value[0]
-+
-+        @depends(valid_compiler, linker)
-+        def unused_linker(compiler, linker):
-+            if linker and compiler.type != 'msvc':
-+                log.warning('The value of %s is not used by this build system.'
-+                            % linker_var)
-+
-+        if host_or_target == target:
-+            @depends(valid_compiler)
-+            def is_msvc(compiler):
-+                return compiler.type == 'msvc'
-+
-+            imply_option('LINK', linker, reason='LD', when=is_msvc)
-+
-     return valid_compiler
- 
- 
- c_compiler = compiler('C', target)
- cxx_compiler = compiler('C++', target, c_compiler=c_compiler)
- host_c_compiler = compiler('C', host, other_compiler=c_compiler)
- host_cxx_compiler = compiler('C++', host, c_compiler=host_c_compiler,
-                              other_compiler=cxx_compiler,
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -405,21 +405,17 @@ def valid_mt(path):
-     except subprocess.CalledProcessError:
-         pass
-     raise FatalCheckError('%s is not Microsoft Manifest Tool')
- 
- 
- set_config('MSMANIFEST_TOOL', depends(valid_mt)(lambda x: bool(x)))
- 
- 
--# Ultimately, this will move to toolchain.configure and be turned into a
--# cross-platform check.
--option(env='LD', nargs=1, help='Path to the linker')
--
--link = check_prog('LINK', depends_win()(lambda: ('link.exe',)), input='LD',
-+link = check_prog('LINK', depends_win()(lambda: ('link.exe',)),
-                   paths=vc_compiler_path)
- 
- add_old_configure_assignment('LD', depends_win(link)(lambda x: x))
- 
- 
- # Normally, we'd just have CC, etc. set to absolute paths, but the build system
- # doesn't currently handle properly the case where the paths contain spaces.
- # Additionally, there's the issue described in toolchain.configure, in
-diff --git a/python/mozbuild/mozbuild/test/configure/test_moz_configure.py b/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_moz_configure.py
-@@ -14,16 +14,20 @@ class TestMozConfigure(BaseConfigureTest
-     def test_moz_configure_options(self):
-         def get_value_for(args=[], environ={}, mozconfig=''):
-             sandbox = self.get_sandbox({}, {}, args, environ, mozconfig)
- 
-             # Add a fake old-configure option
-             sandbox.option_impl('--with-foo', nargs='*',
-                                 help='Help missing for old configure options')
- 
-+            # Remove all implied options, otherwise, getting
-+            # all_configure_options below triggers them, and that triggers
-+            # configure parts that aren't expected to run during this test.
-+            del sandbox._implied_options[:]
-             result = sandbox._value_for(sandbox['all_configure_options'])
-             shell = mozpath.abspath('/bin/sh')
-             return result.replace('CONFIG_SHELL=%s ' % shell, '')
- 
-         self.assertEquals('--enable-application=browser',
-                           get_value_for(['--enable-application=browser']))
- 
-         self.assertEquals('--enable-application=browser '
-

+ 0 - 104
mozilla-esr52/patches/1317504-2.patch

@@ -1,104 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479968279 -32400
-# Node ID 677f47fec9e7f21f1188c1a1d437d33f749cafc6
-# Parent  cffe1cd111f65c9045cc8e1fe34d845a9a6b5c28
-Bug 1317504 - Remove unused non-GCC/clang flags settings. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Compilers other than GCC, clang and MSVC have not been supported for a
-while, and have been explicitly rejected since bug 1259382.
-
-There are a few branches in old-configure that are taken for
-non-GCC/clang compilers, but all of them are later overwritten by the
-MSVC setup. So we just remove those.
-
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -505,38 +505,21 @@ if test "$GNU_CC"; then
-     LDFLAGS="$LDFLAGS -Wl,--build-id"
-     AC_TRY_LINK(,,AC_MSG_RESULT([yes])
-                   [NSPR_LDFLAGS="$NSPR_LDFLAGS -Wl,--build-id"],
-                   AC_MSG_RESULT([no])
-                   LDFLAGS=$_SAVE_LDFLAGS)
- 
-     _DEFINES_CFLAGS='-include $(topobjdir)/js/src/js-confdefs.h -DMOZILLA_CLIENT'
-     _USE_CPP_INCLUDE_FLAG=1
--
--else
--    MKSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
--    MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
--
--    DSO_LDOPTS='-shared'
--    if test "$GNU_LD"; then
--        # Don't allow undefined symbols in libraries
--        DSO_LDOPTS="$DSO_LDOPTS -z defs"
--    fi
--
--    DSO_CFLAGS=''
--    DSO_PIC_CFLAGS='-KPIC'
--    _DEFINES_CFLAGS='$(ACDEFINES) -D_JS_CONFDEFS_H_ -DMOZILLA_CLIENT'
- fi
- 
- if test "$GNU_CXX"; then
-     _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(topobjdir)/js/src/js-confdefs.h'
-     _USE_CPP_INCLUDE_FLAG=1
--
--else
--    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_JS_CONFDEFS_H_ $(ACDEFINES)'
- fi
- 
- dnl ========================================================
- dnl System overrides of the defaults for host
- dnl ========================================================
- case "$host" in
- *mingw*)
-     if test -n "$_WIN32_MSVC"; then
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -706,41 +706,24 @@ if test "$GNU_CC"; then
-             esac
-         fi
-     fi
- 
-     _DEFINES_CFLAGS='-include $(topobjdir)/mozilla-config.h -DMOZILLA_CLIENT'
-     _USE_CPP_INCLUDE_FLAG=1
- 
-     ASFLAGS="$ASFLAGS $_DEFINES_CFLAGS"
--
--else
--    MKSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
--    MKCSHLIB='$(LD) $(DSO_LDOPTS) -h $(DSO_SONAME) -o $@'
--
--    DSO_LDOPTS='-shared'
--    if test "$GNU_LD"; then
--        # Don't allow undefined symbols in libraries
--        DSO_LDOPTS="$DSO_LDOPTS -z defs"
--    fi
--
--    DSO_CFLAGS=''
--    DSO_PIC_CFLAGS='-KPIC'
--    _DEFINES_CFLAGS='$(ACDEFINES) -D_MOZILLA_CONFIG_H_ -DMOZILLA_CLIENT'
- fi
- 
- if test "$GNU_CXX"; then
-     # FIXME: Let us build with strict aliasing. bug 414641.
-     CXXFLAGS="$CXXFLAGS -fno-exceptions -fno-strict-aliasing"
- 
-     _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -include $(topobjdir)/mozilla-config.h'
-     _USE_CPP_INCLUDE_FLAG=1
--
--else
--    _DEFINES_CXXFLAGS='-DMOZILLA_CLIENT -D_MOZILLA_CONFIG_H_ $(ACDEFINES)'
- fi
- 
- dnl ========================================================
- dnl = Use Valgrind
- dnl ========================================================
- MOZ_ARG_ENABLE_BOOL(valgrind,
- [  --enable-valgrind       Enable Valgrind integration hooks (default=no)],
-     MOZ_VALGRIND=1,
-

+ 0 - 88
mozilla-esr52/patches/1317504-3.patch

@@ -1,88 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479968742 -32400
-# Node ID fd007caf51dfebb5224316c5d0978d15a2cfcc4b
-# Parent  677f47fec9e7f21f1188c1a1d437d33f749cafc6
-Bug 1317504 - Remove the GNU_LD variable, nothing uses it. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/autoconf/toolchain.m4 b/build/autoconf/toolchain.m4
---- a/build/autoconf/toolchain.m4
-+++ b/build/autoconf/toolchain.m4
-@@ -10,32 +10,28 @@ dnl the corresponding variables already,
- dnl entirely.
- define([AC_PROG_CPP],[])
- define([AC_PROG_CXXCPP],[])
- define([AC_HEADER_STDC], [])
- 
- AC_DEFUN([MOZ_TOOL_VARIABLES],
- [
- GNU_AS=
--GNU_LD=
- 
- GNU_CC=
- GNU_CXX=
- if test "$CC_TYPE" = "gcc"; then
-     GNU_CC=1
-     GNU_CXX=1
- fi
- 
- if test "`echo | $AS -o conftest.out -v 2>&1 | grep -c GNU`" != "0"; then
-     GNU_AS=1
- fi
- rm -f conftest.out
--if test "`echo | $LD -v 2>&1 | grep -c GNU`" != "0"; then
--    GNU_LD=1
--fi
- 
- CLANG_CC=
- CLANG_CXX=
- CLANG_CL=
- if test "$CC_TYPE" = "clang"; then
-     GNU_CC=1
-     GNU_CXX=1
-     CLANG_CC=1
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -294,17 +294,16 @@ if test -n "$SBCONF"; then
-         QEMU_CANT_RUN_JS_SHELL=1
-     fi
- fi
- AC_SUBST(QEMU_CANT_RUN_JS_SHELL)
- 
- AC_SUBST(_MSC_VER)
- 
- AC_SUBST(GNU_AS)
--AC_SUBST(GNU_LD)
- AC_SUBST(GNU_CC)
- AC_SUBST(GNU_CXX)
- 
- dnl ========================================================
- dnl Checks for programs.
- dnl ========================================================
- if test "$COMPILE_ENVIRONMENT"; then
- 
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -421,17 +421,16 @@ if test -n "$_WIN32_MSVC"; then
- fi
- 
- fi # COMPILE_ENVIRONMENT
- 
- AC_SUBST(MIDL_FLAGS)
- AC_SUBST(_MSC_VER)
- 
- AC_SUBST(GNU_AS)
--AC_SUBST(GNU_LD)
- AC_SUBST(GNU_CC)
- AC_SUBST(GNU_CXX)
- 
- AC_SUBST(STL_FLAGS)
- AC_SUBST(WRAP_STL_INCLUDES)
- AC_SUBST(MOZ_MSVC_STL_WRAP_RAISE)
- 
- dnl ========================================================
-

+ 0 - 289
mozilla-esr52/patches/1317504-4.patch

@@ -1,289 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479969916 -32400
-# Node ID 6353e704bf2c4d47610f0e3555d2fd47c002ebda
-# Parent  fd007caf51dfebb5224316c5d0978d15a2cfcc4b
-Bug 1317504 - Make MSVC builds use the LINK variable instead of LD. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-At the same time, remove HOST_LD. It was only used for MSVC builds,
-which don't support cross-compile anyways, so we can, at least for now,
-use LINK for both host and target.
-
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -408,17 +408,17 @@ def valid_mt(path):
- 
- 
- set_config('MSMANIFEST_TOOL', depends(valid_mt)(lambda x: bool(x)))
- 
- 
- link = check_prog('LINK', depends_win()(lambda: ('link.exe',)),
-                   paths=vc_compiler_path)
- 
--add_old_configure_assignment('LD', depends_win(link)(lambda x: x))
-+add_old_configure_assignment('LINK', depends_win(link)(lambda x: x))
- 
- 
- # Normally, we'd just have CC, etc. set to absolute paths, but the build system
- # doesn't currently handle properly the case where the paths contain spaces.
- # Additionally, there's the issue described in toolchain.configure, in
- # valid_compiler().
- @depends_win(sdk_bin_path)
- @imports('os')
-diff --git a/config/config.mk b/config/config.mk
---- a/config/config.mk
-+++ b/config/config.mk
-@@ -543,17 +543,17 @@ CREATE_PRECOMPLETE_CMD = $(PYTHON) $(abs
- # MDDEPDIR is the subdirectory where dependency files are stored
- MDDEPDIR := .deps
- 
- EXPAND_LIBS_EXEC = $(PYTHON) $(MOZILLA_DIR)/config/expandlibs_exec.py
- EXPAND_LIBS_GEN = $(PYTHON) $(MOZILLA_DIR)/config/expandlibs_gen.py
- EXPAND_AR = $(EXPAND_LIBS_EXEC) --extract -- $(AR)
- EXPAND_CC = $(EXPAND_LIBS_EXEC) --uselist -- $(CC)
- EXPAND_CCC = $(EXPAND_LIBS_EXEC) --uselist -- $(CCC)
--EXPAND_LD = $(EXPAND_LIBS_EXEC) --uselist -- $(LD)
-+EXPAND_LINK = $(EXPAND_LIBS_EXEC) --uselist -- $(LINK)
- EXPAND_MKSHLIB_ARGS = --uselist
- ifdef SYMBOL_ORDER
- EXPAND_MKSHLIB_ARGS += --symbol-order $(SYMBOL_ORDER)
- endif
- EXPAND_MKSHLIB = $(EXPAND_LIBS_EXEC) $(EXPAND_MKSHLIB_ARGS) -- $(MKSHLIB)
- 
- # $(call CHECK_SYMBOLS,lib,PREFIX,dep_name,test)
- # Checks that the given `lib` doesn't contain dependency on symbols with a
-diff --git a/config/rules.mk b/config/rules.mk
---- a/config/rules.mk
-+++ b/config/rules.mk
-@@ -635,17 +635,17 @@ alltags:
- #
- # PROGRAM = Foo
- # creates OBJS, links with LIBS to create Foo
- #
- $(PROGRAM): $(PROGOBJS) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
- 	$(REPORT_BUILD)
- 	@$(RM) $@.manifest
- ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
--	$(EXPAND_LD) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-+	$(EXPAND_LINK) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
- ifdef MSMANIFEST_TOOL
- 	@if test -f $@.manifest; then \
- 		if test -f '$(srcdir)/$@.manifest'; then \
- 			echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \
- 		else \
- 			echo 'Embedding manifest from $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
-@@ -670,17 +670,17 @@ ifdef ENABLE_STRIP
- endif
- ifdef MOZ_POST_PROGRAM_COMMAND
- 	$(MOZ_POST_PROGRAM_COMMAND) $@
- endif
- 
- $(HOST_PROGRAM): $(HOST_PROGOBJS) $(HOST_LIBS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS)
- 	$(REPORT_BUILD)
- ifeq (_WINNT,$(GNU_CC)_$(HOST_OS_ARCH))
--	$(EXPAND_LIBS_EXEC) -- $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-+	$(EXPAND_LIBS_EXEC) -- $(LINK) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $(HOST_OBJS) $(WIN32_EXE_LDFLAGS) $(HOST_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
- ifdef MSMANIFEST_TOOL
- 	@if test -f $@.manifest; then \
- 		if test -f '$(srcdir)/$@.manifest'; then \
- 			echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \
- 		else \
- 			echo 'Embedding manifest from $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
-@@ -707,17 +707,17 @@ endif
- # Foo.o (from either Foo.c or Foo.cpp).
- #
- # SIMPLE_PROGRAMS = Foo Bar
- # creates Foo.o Bar.o, links with LIBS to create Foo, Bar.
- #
- $(SIMPLE_PROGRAMS): %$(BIN_SUFFIX): %.$(OBJ_SUFFIX) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
- 	$(REPORT_BUILD)
- ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
--	$(EXPAND_LD) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-+	$(EXPAND_LINK) -nologo -out:$@ -pdb:$(LINK_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
- ifdef MSMANIFEST_TOOL
- 	@if test -f $@.manifest; then \
- 		$(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \
- 		rm -f $@.manifest; \
- 	fi
- endif	# MSVC with manifest tool
- else
- 	$(EXPAND_CCC) $(CXXFLAGS) -o $@ $< $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(WRAP_LDFLAGS) $(STATIC_LIBS) $(MOZ_PROGRAM_LDFLAGS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS) $(BIN_FLAGS)
-@@ -729,17 +729,17 @@ ifdef ENABLE_STRIP
- endif
- ifdef MOZ_POST_PROGRAM_COMMAND
- 	$(MOZ_POST_PROGRAM_COMMAND) $@
- endif
- 
- $(HOST_SIMPLE_PROGRAMS): host_%$(HOST_BIN_SUFFIX): host_%.$(OBJ_SUFFIX) $(HOST_LIBS) $(HOST_EXTRA_DEPS) $(GLOBAL_DEPS)
- 	$(REPORT_BUILD)
- ifeq (WINNT_,$(HOST_OS_ARCH)_$(GNU_CC))
--	$(EXPAND_LIBS_EXEC) -- $(HOST_LD) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
-+	$(EXPAND_LIBS_EXEC) -- $(LINK) -NOLOGO -OUT:$@ -PDB:$(HOST_PDBFILE) $< $(WIN32_EXE_LDFLAGS) $(HOST_LIBS) $(HOST_EXTRA_LIBS)
- else
- ifneq (,$(HOST_CPPSRCS)$(USE_HOST_CXX))
- 	$(EXPAND_LIBS_EXEC) -- $(HOST_CXX) $(HOST_OUTOPTION)$@ $(HOST_CXXFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
- else
- 	$(EXPAND_LIBS_EXEC) -- $(HOST_CC) $(HOST_OUTOPTION)$@ $(HOST_CFLAGS) $(INCLUDES) $< $(HOST_LIBS) $(HOST_EXTRA_LIBS)
- endif
- endif
- ifndef CROSS_COMPILE
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -203,17 +203,17 @@ case "$target" in
-             CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-"
-             ;;
-         esac
-         AC_SUBST(MSVS_VERSION)
-         AC_SUBST(MSVC_C_RUNTIME_DLL)
-         AC_SUBST(MSVC_CXX_RUNTIME_DLL)
- 
-         # Check linker version
--        _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
-+        _LD_FULL_VERSION=`"${LINK}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
-         _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
-         if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then
-             AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE.])
-         fi
- 
-         INCREMENTAL_LINKER=1
- 
-         unset _MSVC_VER_FILTER
-@@ -672,33 +672,32 @@ case "$target" in
-         IMPORT_LIB_SUFFIX=a
- 
-         WIN32_CONSOLE_EXE_LDFLAGS=-mconsole
-         WIN32_GUI_EXE_LDFLAGS=-mwindows
-     else
-         TARGET_COMPILER_ABI=msvc
-         HOST_CC='$(CC)'
-         HOST_CXX='$(CXX)'
--        HOST_LD='$(LD)'
-         if test "$AS_BIN"; then
-             AS="$(basename "$AS_BIN")"
-         fi
-         AR='lib'
-         AR_FLAGS='-NOLOGO -OUT:$@'
-         AR_EXTRACT=
-         RANLIB='echo not_ranlib'
-         STRIP='echo not_strip'
-         PKG_SKIP_STRIP=1
-         OBJ_SUFFIX=obj
-         LIB_SUFFIX=lib
-         DLL_PREFIX=
-         LIB_PREFIX=
-         IMPORT_LIB_SUFFIX=lib
--        MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
--        MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-+        MKSHLIB='$(LINK) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-+        MKCSHLIB='$(LINK) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-         dnl Set subsystem version 5 for Windows XP.
-         if test "$CPU_ARCH" = "x86"; then
-             WIN32_SUBSYSTEM_VERSION=5.01
-         else
-             WIN32_SUBSYSTEM_VERSION=6.01
-         fi
-         WIN32_CONSOLE_EXE_LDFLAGS=-SUBSYSTEM:CONSOLE,$WIN32_SUBSYSTEM_VERSION
-         WIN32_GUI_EXE_LDFLAGS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION
-@@ -2160,17 +2159,16 @@ AC_SUBST(HOST_CC)
- AC_SUBST(HOST_CXX)
- AC_SUBST(HOST_CFLAGS)
- AC_SUBST(HOST_CPPFLAGS)
- AC_SUBST(HOST_CXXFLAGS)
- AC_SUBST(HOST_LDFLAGS)
- AC_SUBST(HOST_OPTIMIZE_FLAGS)
- AC_SUBST(HOST_AR)
- AC_SUBST(HOST_AR_FLAGS)
--AC_SUBST(HOST_LD)
- AC_SUBST(HOST_RANLIB)
- AC_SUBST(HOST_BIN_SUFFIX)
- 
- AC_SUBST(TARGET_XPCOM_ABI)
- 
- AC_SUBST(WRAP_LDFLAGS)
- AC_SUBST(MKSHLIB)
- AC_SUBST(MKCSHLIB)
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -292,17 +292,17 @@ case "$target" in
-         if test -n "$WIN32_REDIST_DIR"; then
-           if test ! -d "$WIN32_REDIST_DIR"; then
-             AC_MSG_ERROR([Invalid Win32 Redist directory: ${WIN32_REDIST_DIR}])
-           fi
-           WIN32_REDIST_DIR=`cd "$WIN32_REDIST_DIR" && pwd -W`
-         fi
- 
-         # Check linker version
--        _LD_FULL_VERSION=`"${LD}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
-+        _LD_FULL_VERSION=`"${LINK}" -v 2>&1 | sed -nre "$_MSVC_VER_FILTER"`
-         _LD_MAJOR_VERSION=`echo ${_LD_FULL_VERSION} | $AWK -F\. '{ print $1 }'`
-         if test "$_LD_MAJOR_VERSION" != "$_CC_SUITE"; then
-             AC_MSG_ERROR([The linker major version, $_LD_FULL_VERSION,  does not match the compiler suite version, $_CC_SUITE.])
-         fi
- 
-         INCREMENTAL_LINKER=1
- 
-         # Set midl environment
-@@ -959,33 +959,32 @@ case "$target" in
- 
-         # GCC/binutils can't link to a function if we try to include dllexport function
-         # in the same library as dllimport caller. To work around it, we build NSPR
-         # and NSS with -mnop-fun-dllimport flag. The drawback of this solution is that
-         # function thunks need to be generated for cross-DLL calls.
-         MOZ_FOLD_LIBS_FLAGS=-mnop-fun-dllimport
-     else
-         TARGET_COMPILER_ABI=msvc
--        HOST_LD='$(LD)'
-         if test "$AS_BIN"; then
-             AS="$(basename "$AS_BIN")"
-         fi
-         AR='lib'
-         AR_FLAGS='-NOLOGO -OUT:$@'
-         AR_EXTRACT=
-         RANLIB='echo not_ranlib'
-         STRIP='echo not_strip'
-         PKG_SKIP_STRIP=1
-         OBJ_SUFFIX=obj
-         LIB_SUFFIX=lib
-         DLL_PREFIX=
-         LIB_PREFIX=
-         IMPORT_LIB_SUFFIX=lib
--        MKSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
--        MKCSHLIB='$(LD) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-+        MKSHLIB='$(LINK) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-+        MKCSHLIB='$(LINK) -NOLOGO -DLL -OUT:$@ -PDB:$(LINK_PDBFILE) $(DSO_LDOPTS)'
-         dnl Set subsystem version 5 for Windows XP.
-         if test "$CPU_ARCH" = "x86"; then
-             WIN32_SUBSYSTEM_VERSION=5.01
-         else
-             WIN32_SUBSYSTEM_VERSION=6.01
-         fi
-         WIN32_CONSOLE_EXE_LDFLAGS=-SUBSYSTEM:CONSOLE,$WIN32_SUBSYSTEM_VERSION
-         WIN32_GUI_EXE_LDFLAGS=-SUBSYSTEM:WINDOWS,$WIN32_SUBSYSTEM_VERSION
-@@ -5621,17 +5620,16 @@ AC_SUBST(HOST_CC)
- AC_SUBST(HOST_CXX)
- AC_SUBST(HOST_CFLAGS)
- AC_SUBST(HOST_CPPFLAGS)
- AC_SUBST(HOST_CXXFLAGS)
- AC_SUBST(HOST_LDFLAGS)
- AC_SUBST(HOST_OPTIMIZE_FLAGS)
- AC_SUBST(HOST_AR)
- AC_SUBST(HOST_AR_FLAGS)
--AC_SUBST(HOST_LD)
- AC_SUBST(HOST_RANLIB)
- AC_SUBST(HOST_BIN_SUFFIX)
- 
- AC_SUBST(TARGET_XPCOM_ABI)
- AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSSE3)
- AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSE4_1)
- AC_SUBST(HAVE_X86_AVX2)
- AC_SUBST(HAVE_ALTIVEC)
-

+ 0 - 122
mozilla-esr52/patches/1317504-5.patch

@@ -1,122 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479970030 -32400
-# Node ID 8c1409a443ee41860f8caaf59a149ab83c467736
-# Parent  02b47786b36c47858b5c4ac40b5332f021aaec82
-Bug 1317504 - Don't try to set LD from old-configure. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Now, it's completely unused.
-
-diff -r 02b47786b36c build/autoconf/ios.m4
---- a/build/autoconf/ios.m4	Thu Nov 24 15:45:16 2016 +0900
-+++ b/build/autoconf/ios.m4	Mon Aug 13 18:33:39 2018 +0200
-@@ -96,7 +96,6 @@
-    MOZ_IOS_PATH_PROG(CC, clang, $ARGS)
-    MOZ_IOS_PATH_PROG(CXX, clang++, $ARGS)
-    export CPP="$CC -E"
--   export LD="$CXX"
-    MOZ_IOS_PATH_PROG(AR)
-    MOZ_IOS_PATH_PROG(AS, as, $ARGS)
-    MOZ_IOS_PATH_PROG(OTOOL)
-diff -r 02b47786b36c build/autoconf/jemalloc.m4
---- a/build/autoconf/jemalloc.m4	Thu Nov 24 15:45:16 2016 +0900
-+++ b/build/autoconf/jemalloc.m4	Mon Aug 13 18:33:39 2018 +0200
-@@ -73,7 +73,7 @@
-       ac_configure_args="$ac_configure_args --disable-tls"
-     fi
-     EXTRA_CFLAGS="$CFLAGS"
--    for var in AS CC CXX CPP LD AR RANLIB STRIP CPPFLAGS EXTRA_CFLAGS LDFLAGS; do
-+    for var in AS CC CXX CPP AR RANLIB STRIP CPPFLAGS EXTRA_CFLAGS LDFLAGS; do
-       ac_configure_args="$ac_configure_args $var='`eval echo \\${${var}}`'"
-     done
- 
-diff -r 02b47786b36c build/autoconf/toolchain.m4
---- a/build/autoconf/toolchain.m4	Thu Nov 24 15:45:16 2016 +0900
-+++ b/build/autoconf/toolchain.m4	Mon Aug 13 18:33:39 2018 +0200
-@@ -78,7 +78,6 @@
- AC_CHECK_PROGS(RANLIB, "${TOOLCHAIN_PREFIX}ranlib", :)
- AC_CHECK_PROGS(AR, "${TOOLCHAIN_PREFIX}ar", :)
- AC_CHECK_PROGS(AS, "${TOOLCHAIN_PREFIX}as", :)
--AC_CHECK_PROGS(LD, "${TOOLCHAIN_PREFIX}ld", :)
- AC_CHECK_PROGS(LIPO, "${TOOLCHAIN_PREFIX}lipo", :)
- AC_CHECK_PROGS(STRIP, "${TOOLCHAIN_PREFIX}strip", :)
- AC_CHECK_PROGS(WINDRES, "${TOOLCHAIN_PREFIX}windres", :)
-diff -r 02b47786b36c build/macosx/universal/mozconfig.common
---- a/build/macosx/universal/mozconfig.common	Thu Nov 24 15:45:16 2016 +0900
-+++ b/build/macosx/universal/mozconfig.common	Mon Aug 13 18:33:39 2018 +0200
-@@ -41,7 +41,6 @@
-   RANLIB="${TOOLCHAIN_PREFIX}ranlib"
-   AR="${TOOLCHAIN_PREFIX}ar"
-   AS=$CC
--  LD=ld
-   STRIP="${TOOLCHAIN_PREFIX}strip"
-   OTOOL="${TOOLCHAIN_PREFIX}otool"
- 
-@@ -50,6 +49,6 @@
-   # needs to know to look for universal bits when building the .dmg.
-   UNIVERSAL_BINARY=1
- 
--  export CC CXX HOST_CC HOST_CXX RANLIB AR AS LD STRIP OTOOL
-+  export CC CXX HOST_CC HOST_CXX RANLIB AR AS STRIP OTOOL
- fi
- fi
-diff -r 02b47786b36c js/src/old-configure.in
---- a/js/src/old-configure.in	Thu Nov 24 15:45:16 2016 +0900
-+++ b/js/src/old-configure.in	Mon Aug 13 18:33:39 2018 +0200
-@@ -118,7 +118,6 @@
-     AC_PROG_RANLIB
-     MOZ_PATH_PROGS(AS, $AS as, $CC)
-     AC_CHECK_PROGS(AR, ar, :)
--    AC_CHECK_PROGS(LD, ld, :)
-     AC_CHECK_PROGS(STRIP, strip, :)
-     AC_CHECK_PROGS(WINDRES, windres, :)
-     if test -z "$HOST_CC"; then
-@@ -2077,7 +2076,6 @@
- AC_SUBST(AS)
- AC_SUBST(ASFLAGS)
- AC_SUBST(AS_DASH_C_FLAG)
--AC_SUBST(LD)
- AC_SUBST(RC)
- AC_SUBST(RCFLAGS)
- AC_SUBST(WINDRES)
-diff -r 02b47786b36c old-configure.in
---- a/old-configure.in	Thu Nov 24 15:45:16 2016 +0900
-+++ b/old-configure.in	Mon Aug 13 18:33:39 2018 +0200
-@@ -187,7 +187,6 @@
-     AC_PROG_RANLIB
-     MOZ_PATH_PROGS(AS, $AS as, $CC)
-     AC_CHECK_PROGS(AR, ar, :)
--    AC_CHECK_PROGS(LD, ld, :)
-     AC_CHECK_PROGS(STRIP, strip, :)
-     AC_CHECK_PROGS(WINDRES, windres, :)
-     AC_CHECK_PROGS(OTOOL, otool, :)
-@@ -5245,7 +5244,6 @@
- AC_SUBST(AS)
- AC_SUBST(ASFLAGS)
- AC_SUBST(AS_DASH_C_FLAG)
--AC_SUBST(LD)
- AC_SUBST(RC)
- AC_SUBST(RCFLAGS)
- AC_SUBST(WINDRES)
-@@ -5930,7 +5928,6 @@
- export CPP
- export CC
- export CXX
--export LD
- export ARFLAGS
- export CPPFLAGS
- export CFLAGS
-diff -r 02b47786b36c toolkit/mozapps/installer/informulate.py
---- a/toolkit/mozapps/installer/informulate.py	Thu Nov 24 15:45:16 2016 +0900
-+++ b/toolkit/mozapps/installer/informulate.py	Mon Aug 13 18:33:39 2018 +0200
-@@ -32,7 +32,7 @@
-         'host_alias', 'host_cpu', 'host_os', 'host_vendor',
-         'MOZ_UPDATE_CHANNEL', 'MOZ_APP_VENDOR', 'MOZ_APP_NAME',
-         'MOZ_APP_VERSION', 'MOZ_APP_MAXVERSION', 'MOZ_APP_ID',
--        'CC', 'CXX', 'LD', 'AS']
-+        'CC', 'CXX', 'AS']
- 
-     all_key_value_pairs = dict([(x.lower(), buildconfig.substs[x]) for x in important_substitutions])
-     all_key_value_pairs.update(parse_cmdline(sys.argv[2:]))

+ 0 - 4144
mozilla-esr52/patches/1318143-1.patch

@@ -1,4144 +0,0 @@
-
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1493234328 14400
-# Node ID 311336b5377de438e6e71e4ad4eca6b18da2b37c
-# Parent  43ccab8eba5e5142878c9927d6647bf461dd7bd1
-bug 1318143 - add support for detecting Visual Studio 2017 to configure. r=gps, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-This patch adds a copy of vswhere.exe to build/win32, downloaded from the
-current latest release (1.0.62):
-https://github.com/Microsoft/vswhere/releases/download/1.0.62/vswhere.exe
-
-It changes toolchain.configure to invoke vswhere.exe instead of reading
-the registry, since that no longer works for VS2017 (but vswhere can locate
-VS2015). It also removes a layer of complexity in that code by dropping
-support for non-64-bit host systems, since we don't really support building
-on 32-bit Windows anymore anyway.
-
-There's a little bit of fixup in windows.configure where some LIB paths
-have changed in 2017.
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -405,67 +405,72 @@ def check_compiler(compiler, language, t
-         version=info.version,
-         target_cpu=info.cpu,
-         target_kernel=info.kernel,
-         target_endianness=info.endianness,
-         flags=flags,
-     )
- 
- 
--@imports(_from='collections', _import='defaultdict')
--@imports(_from='__builtin__', _import='sorted')
--def get_vc_paths(base):
--    vc = defaultdict(lambda: defaultdict(dict))
--    subkey = r'Microsoft\VisualStudio\VC\*\*\*\Compiler'
--    for v, h, t, p in get_registry_values(base + '\\' + subkey):
--        vc[v][h][t] = p
--    if not vc:
--        return
--    version, data = sorted(vc.iteritems(), key=lambda x: Version(x[0]))[-1]
--    return data
-+@imports(_from='__builtin__', _import='open')
-+@imports('json')
-+@imports('subprocess')
-+def get_vc_paths(topsrcdir):
-+    def vswhere(args):
-+        return json.loads(subprocess.check_output([os.path.join(topsrcdir, 'build/win32/vswhere.exe'), '-format', 'json'] + args))
-+
-+    # Can't pass -requires with -legacy, so query each separately.
-+    # Legacy versions first (VS2015)
-+    for install in vswhere(['-legacy', '-version', '[14.0,15.0)']):
-+        version = Version(install['installationVersion'])
-+        # Skip anything older than VS2015.
-+        if version < '14':
-+            continue
-+        path = install['installationPath']
-+
-+        yield (Version(install['installationVersion']), {
-+            'x64': [os.path.join(path, r'VC\bin\amd64')],
-+            'x86': [os.path.join(path, r'VC\bin\amd64_x86')],
-+        })
-+    # Then VS2017 and newer.
-+    for install in vswhere(['-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64']):
-+        path = install['installationPath']
-+        tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'rb').read().strip()
-+        tools_path = os.path.join(path, r'VC\Tools\MSVC', tools_version, r'bin\HostX64')
-+        yield (Version(install['installationVersion']), {
-+            'x64': [os.path.join(tools_path, 'x64')],
-+            # The x64->x86 cross toolchain requires DLLs from the native x64 toolchain.
-+            'x86': [os.path.join(tools_path, 'x86'), os.path.join(tools_path, 'x64')],
-+        })
- 
- 
--@depends(host)
-+@depends(host, target, check_build_environment)
-+@imports(_from='__builtin__', _import='sorted')
-+@imports(_from='operator', _import='itemgetter')
- @imports('platform')
--def vc_compiler_path(host):
-+def vc_compiler_path(host, target, env):
-     if host.kernel != 'WINNT':
-         return
--    vc_host = {
--        'x86': 'x86',
--        'AMD64': 'x64',
--    }.get(platform.machine())
--    if vc_host is None:
--        return
-     vc_target = {
-         'x86': 'x86',
-         'x86_64': 'x64',
-         'arm': 'arm',
--    }.get(host.cpu)
-+    }.get(target.cpu)
-     if vc_target is None:
-         return
- 
--    base_key = r'HKEY_LOCAL_MACHINE\SOFTWARE'
--    data = get_vc_paths(base_key)
--    if not data:
--        data = get_vc_paths(base_key + r'\Wow6432Node')
--    if not data:
-+    all_versions = sorted(get_vc_paths(env.topsrcdir), key=itemgetter(0))
-+    if not all_versions:
-         return
--
--    path = data.get(vc_host, {}).get(vc_target)
--    if not path and vc_host == 'x64':
--        vc_host = 'x86'
--        path = data.get(vc_host, {}).get(vc_target)
--    if not path:
-+    # Choose the newest version.
-+    data = all_versions[-1][1]
-+    paths = data.get(vc_target)
-+    if not paths:
-         return
--    path = os.path.dirname(path)
--    if vc_host != vc_target:
--        other_path = data.get(vc_host, {}).get(vc_host)
--        if other_path:
--            return (path, os.path.dirname(other_path))
--    return (path,)
-+    return paths
- 
- 
- @depends(vc_compiler_path)
- @imports('os')
- def toolchain_search_path(vc_compiler_path):
-     if vc_compiler_path:
-         result = [os.environ.get('PATH')]
-         result.extend(vc_compiler_path)
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -247,22 +247,27 @@ def vc_path(c_compiler):
-             die('Cannot determine the Visual C++ directory the compiler (%s) '
-                 'is in' % cl)
-         result = next
-         if p.lower() == 'bin':
-             break
-     return result
- 
- 
--@depends(vc_path)
-+@depends(vc_path, c_compiler)
- @checking('for the Debug Interface Access SDK', lambda x: x or 'not found')
- @imports(_from='os.path', _import='isdir')
--def dia_sdk_dir(vc_path):
-+def dia_sdk_dir(vc_path, c_compiler):
-     if vc_path:
--        path = os.path.join(os.path.dirname(vc_path), 'DIA SDK')
-+        if c_compiler.version < '19.10':
-+            path = os.path.join(os.path.dirname(vc_path), 'DIA SDK')
-+        else:
-+            # This would be easier if we had the installationPath that
-+            # get_vc_paths works with, since 'DIA SDK' is relative to that.
-+             path = os.path.normpath(os.path.join(vc_path, r'..\..\..\..\..\..\..\DIA SDK'))
-         if isdir(path):
-             return path
- 
- 
- @depends(vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
- @imports('os')
- def include_path(vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir):
-     if not vc_path:
-@@ -294,60 +299,65 @@ def include_path(vc_path, windows_sdk_di
-     # Set in the environment for old-configure
-     includes = os.pathsep.join(includes)
-     os.environ['INCLUDE'] = includes
-     return includes
- 
- set_config('INCLUDE', include_path)
- 
- 
--@depends(target, vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
-+@depends(target, c_compiler, vc_path, valid_windows_sdk_dir, valid_ucrt_sdk_dir, dia_sdk_dir)
- @imports('os')
--def lib_path(target, vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir):
-+def lib_path(target, c_compiler, vc_path, windows_sdk_dir, ucrt_sdk_dir, dia_sdk_dir):
-     if not vc_path:
-         return
--    vc_target = {
--        'x86': '',
--        'x86_64': 'amd64',
--        'arm': 'arm',
--    }.get(target.cpu)
--    if vc_target is None:
--        return
--    # As vc_target can be '', and os.path.join will happily use the empty
--    # string, leading to a string ending with a backslash, that Make will
--    # interpret as a "string continues on next line" indicator, use variable
--    # args.
--    vc_target = (vc_target,) if vc_target else ()
-     sdk_target = {
-         'x86': 'x86',
-         'x86_64': 'x64',
-         'arm': 'arm',
-     }.get(target.cpu)
- 
-+    old_target = {
-+        'x86': '',
-+        'x86_64': 'amd64',
-+        'arm': 'arm',
-+    }.get(target.cpu)
-+    if old_target is None:
-+        return
-+    # As old_target can be '', and os.path.join will happily use the empty
-+    # string, leading to a string ending with a backslash, that Make will
-+    # interpret as a "string continues on next line" indicator, use variable
-+    # args.
-+    old_target = (old_target,) if old_target else ()
-+    if c_compiler.version < '19.10':
-+        # MSVC2015
-+        vc_target = old_target
-+    else:
-+        # MSVC2017 switched to use the same target naming as the sdk.
-+        vc_target = (sdk_target,)
-+
-     atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'lib', *vc_target)
-     if not os.path.isdir(atlmfc_dir):
--        # For Visual Studio 2017
--        atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'lib', sdk_target)
--        if not os.path.isdir(atlmfc_dir):
--            die('Cannot find the ATL/MFC libraries in the Visual C++ directory '
--                '(%s). Please install them.' % vc_path)
--
-+        die('Cannot find the ATL/MFC libraries in the Visual C++ directory '
-+            '(%s). Please install them.' % vc_path)
- 
-     libs = []
-     lib_env = os.environ.get('LIB')
-     if lib_env:
-         libs.append(lib_env)
-     libs.extend((
-         os.path.join(vc_path, 'lib', *vc_target),
-         atlmfc_dir,
-         os.path.join(windows_sdk_dir.lib, 'um', sdk_target),
-         os.path.join(ucrt_sdk_dir.lib, 'ucrt', sdk_target),
-     ))
-     if dia_sdk_dir:
--        libs.append(os.path.join(dia_sdk_dir, 'lib', *vc_target))
-+        # For some reason the DIA SDK still uses the old-style targets
-+        # even in a newer MSVC.
-+        libs.append(os.path.join(dia_sdk_dir, 'lib', *old_target))
-     # Set in the environment for old-configure
-     libs = os.pathsep.join(libs)
-     os.environ['LIB'] = libs
-     return libs
- 
- set_config('LIB', lib_path)
- 
- 
-diff --git a/build/win32/vswhere.exe b/build/win32/vswhere.exe
-new file mode 100644
-index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..80706d852e5777c4ec05a6f349c7cd55cd490a5b
-GIT binary patch
-literal 401016
-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
-zwA8^+s*$u6IuBeO38C0Ht-?(eAPi2%0DqfL=43B6q_cZdMg!fpDS_<LZ>B*b#DcjH
-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
-z%0D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
-F`ailwShWBE
-
-diff --git a/python/mozbuild/mozbuild/test/configure/common.py b/python/mozbuild/mozbuild/test/configure/common.py
---- a/python/mozbuild/mozbuild/test/configure/common.py
-+++ b/python/mozbuild/mozbuild/test/configure/common.py
-@@ -84,16 +84,17 @@ class ConfigureTestSandbox(ConfigureSand
-         paths = paths.keys()
- 
-         environ = dict(environ)
-         if 'CONFIG_SHELL' not in environ:
-             environ['CONFIG_SHELL'] = mozpath.abspath('/bin/sh')
-             self._subprocess_paths[environ['CONFIG_SHELL']] = self.shell
-             paths.append(environ['CONFIG_SHELL'])
-         self._environ = copy.copy(environ)
-+        self._subprocess_paths[mozpath.join(topsrcdir, 'build/win32/vswhere.exe')] = self.vswhere
- 
-         vfs = ConfigureTestVFS(paths)
- 
-         os_path = {
-             k: getattr(vfs, k) for k in dir(vfs) if not k.startswith('_')
-         }
- 
-         os_path.update(self.OS.path.__dict__)
-@@ -210,16 +211,19 @@ class ConfigureTestSandbox(ConfigureSand
-         return stdout
- 
-     def shell(self, stdin, args):
-         script = mozpath.abspath(args[0])
-         if script in self._subprocess_paths:
-             return self._subprocess_paths[script](stdin, args[1:])
-         return 127, '', 'File not found'
- 
-+    def vswhere(self, stdin, args):
-+        return 0, '[]', ''
-+
- 
- class BaseConfigureTest(unittest.TestCase):
-     HOST = 'x86_64-pc-linux-gnu'
- 
-     def setUp(self):
-         self._cwd = os.getcwd()
-         os.chdir(topobjdir)
- 
-

+ 0 - 70
mozilla-esr52/patches/1318143-2.patch

@@ -1,70 +0,0 @@
-
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1492706624 14400
-# Node ID 93d41c6f2a14d0c557828fcdd505c47e71fa9fbb
-# Parent  311336b5377de438e6e71e4ad4eca6b18da2b37c
-bug 1318143 - add a --with-visual-studio-version to choose which VS version configure chooses when multiple versions are installed. r=gps, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -436,37 +436,52 @@ def get_vc_paths(topsrcdir):
-         tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'rb').read().strip()
-         tools_path = os.path.join(path, r'VC\Tools\MSVC', tools_version, r'bin\HostX64')
-         yield (Version(install['installationVersion']), {
-             'x64': [os.path.join(tools_path, 'x64')],
-             # The x64->x86 cross toolchain requires DLLs from the native x64 toolchain.
-             'x86': [os.path.join(tools_path, 'x86'), os.path.join(tools_path, 'x64')],
-         })
- 
-+option('--with-visual-studio-version', nargs=1,
-+       choices=('2015', '2017'),
-+       help='Select a specific Visual Studio version to use')
- 
--@depends(host, target, check_build_environment)
-+@depends('--with-visual-studio-version')
-+def vs_major_version(value):
-+    if value:
-+        return {'2015': 14,
-+                '2017': 15}[value[0]]
-+
-+@depends(host, target, vs_major_version, check_build_environment, '--with-visual-studio-version')
- @imports(_from='__builtin__', _import='sorted')
- @imports(_from='operator', _import='itemgetter')
- @imports('platform')
--def vc_compiler_path(host, target, env):
-+def vc_compiler_path(host, target, vs_major_version, env, vs_release_name):
-     if host.kernel != 'WINNT':
-         return
-     vc_target = {
-         'x86': 'x86',
-         'x86_64': 'x64',
-         'arm': 'arm',
-     }.get(target.cpu)
-     if vc_target is None:
-         return
- 
-     all_versions = sorted(get_vc_paths(env.topsrcdir), key=itemgetter(0))
-     if not all_versions:
-         return
--    # Choose the newest version.
--    data = all_versions[-1][1]
-+    if vs_major_version:
-+        versions = [d for (v, d) in all_versions if v.major == vs_major_version]
-+        if not versions:
-+            die('Visual Studio %s could not be found!' % vs_release_name)
-+        data = versions[0]
-+    else:
-+        # Choose the newest version.
-+        data = all_versions[-1][1]
-     paths = data.get(vc_target)
-     if not paths:
-         return
-     return paths
- 
- 
- @depends(vc_compiler_path)
- @imports('os')
-

+ 0 - 49
mozilla-esr52/patches/1318189.patch

@@ -1,49 +0,0 @@
-
-# HG changeset patch
-# User Makoto Kato <m_kato@ga2.so-net.ne.jp>
-# Date 1479693350 -32400
-# Node ID 53a9ff4a083a2c790d25939a598ec8378e77abf4
-# Parent  5e87f33d7a227bbc74f04ed82c36e67ef734aa03
-Bug 1318189 - mach configure cannot detect MFC library path on VS2017. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-VS2017's directory structure for mfc is the following.
-
- Directory of C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\vc\Tools\msvc\14.10.24629\atlmfc\lib
-
-2016/11/21  13:57    <DIR>          .
-2016/11/21  13:57    <DIR>          ..
-2016/11/21  13:57    <DIR>          arm
-2016/11/21  14:00    <DIR>          x64
-2016/11/21  13:59    <DIR>          x86
-
-So this structure is changed, we cannot detect mfc when using VS2017.
-
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -330,18 +330,21 @@ def lib_path(target, vc_path, windows_sd
-     sdk_target = {
-         'x86': 'x86',
-         'x86_64': 'x64',
-         'arm': 'arm',
-     }.get(target.cpu)
- 
-     atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'lib', *vc_target)
-     if not os.path.isdir(atlmfc_dir):
--        die('Cannot find the ATL/MFC libraries in the Visual C++ directory (%s). '
--            'Please install them.' % vc_path)
-+        # For Visual Studio 2017
-+        atlmfc_dir = os.path.join(vc_path, 'atlmfc', 'lib', sdk_target)
-+        if not os.path.isdir(atlmfc_dir):
-+            die('Cannot find the ATL/MFC libraries in the Visual C++ directory '
-+                '(%s). Please install them.' % vc_path)
- 
- 
-     libs = []
-     lib_env = os.environ.get('LIB')
-     if lib_env:
-         libs.append(lib_env)
-     libs.extend((
-         os.path.join(vc_path, 'lib', *vc_target),
-

+ 0 - 36
mozilla-esr52/patches/1318798.patch

@@ -1,36 +0,0 @@
-
-# HG changeset patch
-# User Richard Marti <richard.marti@gmail.com>
-# Date 1479568535 -3600
-# Node ID 9f8700acec463beb0f1d37bcd3946a69a152f7a3
-# Parent  f0f88a94e698007fa2cecf579e2077447aae0e0d
-Bug 1318798 - Remove config/external/nss/target in recurse.mk. r=ted, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/config/recurse.mk b/config/recurse.mk
---- a/config/recurse.mk
-+++ b/config/recurse.mk
-@@ -160,21 +160,18 @@ build/clang-plugin/tests/target: build/c
- endif
- 
- # Interdependencies that moz.build world don't know about yet for compilation.
- # Note some others are hardcoded or "guessed" in recursivemake.py and emitter.py
- ifeq ($(MOZ_WIDGET_TOOLKIT),gtk3)
- toolkit/library/target: widget/gtk/mozgtk/gtk3/target
- endif
- ifdef MOZ_LDAP_XPCOM
--ldap/target: config/external/nss/target mozglue/build/target
-+ldap/target: security/target mozglue/build/target
- toolkit/library/target: ldap/target
- endif
- ifeq ($(MOZ_REPLACE_MALLOC_LINKAGE),dummy library)
- mozglue/build/target memory/replace/logalloc/replay/target: memory/replace/dummy/target
- endif
- endif
--ifeq (,$(MOZ_SYSTEM_NSPR)$(MOZ_SYSTEM_NSS)$(MOZ_FOLD_LIBS))
--config/external/nss/target: config/external/nspr/pr/target config/external/nspr/ds/target config/external/nspr/libc/target
--endif
- # Most things are built during compile (target/host), but some things happen during export
- # Those need to depend on config/export for system wrappers.
- $(addprefix build/unix/stdc++compat/,target host) build/clang-plugin/target: config/export
-

+ 0 - 105
mozilla-esr52/patches/1319959.patch

@@ -1,105 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1479948435 -32400
-# Node ID 91160a3cae84a495cf083383110e10ce8640191a
-# Parent  a7389b4dca6380b2eac4020079a36a7dae317222
-Bug 1319959 - Set _topsrcdir, _objdir, MOZ_BUILD_ROOT and DIST from python configure. r=gps, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-In some cases, on OSX, python's `os.path.realpath` and shell's `pwd -P`
-don't agree on the case of paths on case-insensitive filesystems.
-
-So make everyone agree by using the value from python configure.
-
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -66,16 +66,24 @@ def check_build_environment(help, dist):
-     return result
- 
- set_config('TOPSRCDIR', delayed_getattr(check_build_environment, 'topsrcdir'))
- set_config('TOPOBJDIR', delayed_getattr(check_build_environment, 'topobjdir'))
- set_config('MOZ_BUILD_ROOT', delayed_getattr(check_build_environment,
-                                              'topobjdir'))
- set_config('DIST', delayed_getattr(check_build_environment, 'dist'))
- 
-+add_old_configure_assignment(
-+    '_topsrcdir', delayed_getattr(check_build_environment, 'topsrcdir'))
-+add_old_configure_assignment(
-+    '_objdir', delayed_getattr(check_build_environment, 'topobjdir'))
-+add_old_configure_assignment(
-+    'MOZ_BUILD_ROOT', delayed_getattr(check_build_environment, 'topobjdir'))
-+add_old_configure_assignment(
-+    'DIST', delayed_getattr(check_build_environment, 'dist'))
- 
- option(env='MOZ_AUTOMATION', help='Enable options for automated builds')
- set_config('MOZ_AUTOMATION', depends_if('MOZ_AUTOMATION')(lambda x: True))
- 
- 
- option(env='OLD_CONFIGURE', nargs=1, help='Path to the old configure script')
- 
- option(env='MOZ_CURRENT_PROJECT', nargs=1, help='Current build project')
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -58,30 +58,20 @@ dnl ====================================
- MISSING_X=
- 
- dnl Initialize the Pthread test variables early so they can be
- dnl  overridden by each platform.
- dnl ========================================================
- USE_PTHREADS=
- _PTHREAD_LDFLAGS=""
- 
--dnl Do not allow objdir == srcdir builds
--dnl ==============================================================
--_topsrcdir=`cd $srcdir; pwd -W 2>/dev/null || pwd -P`
--_objdir=`pwd -P`
--
--MOZ_BUILD_ROOT=`pwd -W 2>/dev/null || pwd -P`
--
- MOZ_DEFAULT_COMPILER
- 
- if test -z "$JS_STANDALONE"; then
-   autoconfmk=autoconf-js.mk
--  #DIST is exported from top-level configure
--else
--  DIST="$MOZ_BUILD_ROOT/dist"
- fi
- AC_SUBST(autoconfmk)
- 
- MOZ_ANDROID_NDK
- 
- if test -n "$gonkdir" ; then
-     LDFLAGS="-L$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib -Wl,-rpath-link=$gonkdir/out/target/product/$GONK_PRODUCT/obj/lib --sysroot=$gonkdir/out/target/product/$GONK_PRODUCT/obj/ -llog $LDFLAGS"
- fi
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -75,24 +75,16 @@ dnl ====================================
- MISSING_X=
- 
- dnl Initialize the Pthread test variables early so they can be
- dnl  overridden by each platform.
- dnl ========================================================
- MOZ_USE_PTHREADS=
- _PTHREAD_LDFLAGS=""
- 
--dnl Do not allow objdir == srcdir builds.
--dnl ==============================================================
--_topsrcdir=`cd \`dirname $0\`; pwd -W 2>/dev/null || pwd -P`
--_objdir=`pwd -P`
--
--MOZ_BUILD_ROOT=`pwd -W 2>/dev/null || pwd -P`
--DIST="$MOZ_BUILD_ROOT/dist"
--
- MOZ_DEFAULT_COMPILER
- 
- if test "$COMPILE_ENVIRONMENT"; then
-     MOZ_ANDROID_NDK
- fi # COMPILE_ENVIRONMENT
- 
- if test -n "$gonkdir"; then
-     dnl export for js/src/configure. We can't pass the option down normally,
-

+ 0 - 53
mozilla-esr52/patches/1319971.patch

@@ -1,53 +0,0 @@
-
-# HG changeset patch
-# User David Major <dmajor@mozilla.com>
-# Date 1489025588 -46800
-# Node ID 261a33fad371b26e5343d0b31da2d18df0eff4a0
-# Parent  17cb305b2788e4c312562662b4f73e1b9199bfb5
-Bug 1319971: Re-work some static_asserts to get VS2017 compiling. r=luke, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-VS2017 doesn't consider functions like Foo::offsetOfBar() to be constexpr, so it refuses to allow them in static_asserts.
-
-diff -r 17cb305b2788 js/src/ds/OrderedHashTable.h
---- a/js/src/ds/OrderedHashTable.h	Mon Nov 21 11:14:44 2016 +0900
-+++ b/js/src/ds/OrderedHashTable.h	Tue Aug 14 19:44:30 2018 +0200
-@@ -533,6 +533,8 @@
-         return offsetof(OrderedHashTable, data);
-     }
-     static constexpr size_t offsetOfDataElement() {
-+        static_assert(offsetof(Data, element) == 0,
-+                      "RangeFront and RangePopFront depend on offsetof(Data, element) being 0");
-         return offsetof(Data, element);
-     }
-     static constexpr size_t sizeofData() {
-diff -r 17cb305b2788 js/src/jit/CodeGenerator.cpp
---- a/js/src/jit/CodeGenerator.cpp	Mon Nov 21 11:14:44 2016 +0900
-+++ b/js/src/jit/CodeGenerator.cpp	Tue Aug 14 19:44:30 2018 +0200
-@@ -6238,7 +6238,7 @@
-     masm.loadPtr(Address(range, ValueMap::Range::offsetOfHashTable()), front);
-     masm.loadPtr(Address(front, ValueMap::offsetOfImplData()), front);
- 
--    static_assert(ValueMap::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-+    MOZ_ASSERT(ValueMap::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-     static_assert(ValueMap::sizeofImplData() == 24, "sizeof(Data) is 24");
-     masm.mulBy3(i, i);
-     masm.lshiftPtr(Imm32(3), i);
-@@ -6252,7 +6252,7 @@
-     masm.loadPtr(Address(range, ValueSet::Range::offsetOfHashTable()), front);
-     masm.loadPtr(Address(front, ValueSet::offsetOfImplData()), front);
- 
--    static_assert(ValueSet::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-+    MOZ_ASSERT(ValueSet::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-     static_assert(ValueSet::sizeofImplData() == 16, "sizeof(Data) is 16");
-     masm.lshiftPtr(Imm32(4), i);
-     masm.addPtr(i, front);
-@@ -6276,7 +6276,7 @@
- 
-     // We can add sizeof(Data) to |front| to select the next element, because
-     // |front| and |range.ht.data[i]| point to the same location.
--    static_assert(OrderedHashTable::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-+    MOZ_ASSERT(OrderedHashTable::offsetOfImplDataElement() == 0, "offsetof(Data, element) is 0");
-     masm.addPtr(Imm32(OrderedHashTable::sizeofImplData()), front);
- 
-     masm.branchTestMagic(Assembler::NotEqual, Address(front, OrderedHashTable::offsetOfEntryKey()),

+ 0 - 174
mozilla-esr52/patches/1322025-1.patch

@@ -1,174 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485321958 -32400
-# Node ID 97c019e39b8f873f3884630f481251d20474360d
-# Parent  1ddaf704683d67a06d112251b586387bc26bf22c
-Bug 1322025 - Enforce --help requirement on indirect dependencies. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Bug 1313306 relaxed the --help dependency requirement in some cases, but
-while doing so, the requirement was also removed in other, unexpected
-cases. Specifically, the --help dependency ended up not being required
-on indirect dependencies that should have had it, had the --help
-dependency been explicit on the direct dependency.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -26,17 +26,16 @@ from mozbuild.configure.help import Help
- from mozbuild.configure.util import (
-     ConfigureOutputHandler,
-     getpreferredencoding,
-     LineIO,
- )
- from mozbuild.util import (
-     exec_,
-     memoize,
--    memoized_property,
-     ReadOnlyDict,
-     ReadOnlyNamespace,
- )
- 
- import mozpack.path as mozpath
- 
- 
- class ConfigureError(Exception):
-@@ -76,22 +75,24 @@ class DependsFunction(object):
- 
-     @property
-     def sandboxed_dependencies(self):
-         return [
-             d.sandboxed if isinstance(d, DependsFunction) else d
-             for d in self.dependencies
-         ]
- 
--    @memoized_property
--    def result(self):
--        if self.when and not self.sandbox._value_for(self.when):
-+    @memoize
-+    def result(self, need_help_dependency=False):
-+        if self.when and not self.sandbox._value_for(self.when,
-+                                                     need_help_dependency):
-             return None
- 
--        resolved_args = [self.sandbox._value_for(d) for d in self.dependencies]
-+        resolved_args = [self.sandbox._value_for(d, need_help_dependency)
-+                         for d in self.dependencies]
-         return self.func(*resolved_args)
- 
-     def __repr__(self):
-         return '<%s.%s %s(%s)>' % (
-             self.__class__.__module__,
-             self.__class__.__name__,
-             self.name,
-             ', '.join(repr(d) for d in self.dependencies),
-@@ -120,23 +121,24 @@ class CombinedDependsFunction(DependsFun
-             if (isinstance(d, DependsFunction) and
-                 sandbox._help_option in d.dependencies):
-                 flatten_deps.insert(0, sandbox._help_option)
-                 break
- 
-         super(CombinedDependsFunction, self).__init__(
-             sandbox, wrapper, flatten_deps)
- 
--    @memoized_property
--    def result(self):
-+    @memoize
-+    def result(self, need_help_dependency=False):
-         # Ignore --help for the combined result
-         deps = self.dependencies
-         if deps[0] == self.sandbox._help_option:
-             deps = deps[1:]
--        resolved_args = [self.sandbox._value_for(d) for d in deps]
-+        resolved_args = [self.sandbox._value_for(d, need_help_dependency)
-+                         for d in deps]
-         return self.func(*resolved_args)
- 
-     def __eq__(self, other):
-         return (isinstance(other, self.__class__) and
-                 self.func == other.func and
-                 set(self.dependencies) == set(other.dependencies))
- 
-     def __ne__(self, other):
-@@ -411,17 +413,17 @@ class ConfigureSandbox(dict):
-         elif isinstance(obj, Option):
-             return self._value_for_option(obj)
- 
-         assert False
- 
-     @memoize
-     def _value_for_depends(self, obj, need_help_dependency=False):
-         assert not inspect.isgeneratorfunction(obj.func)
--        return obj.result
-+        return obj.result(need_help_dependency)
- 
-     @memoize
-     def _value_for_option(self, option):
-         implied = {}
-         for implied_option in self._implied_options[:]:
-             if implied_option.name not in (option.name, option.env):
-                 continue
-             self._implied_options.remove(implied_option)
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -347,17 +347,17 @@ class TestConfigure(unittest.TestCase):
-                 def bar():
-                     return sys
-                 return bar
-             bar = foo()'''),
-             sandbox
-         )
- 
-         with self.assertRaises(NameError) as e:
--            sandbox._depends[sandbox['bar']].result
-+            sandbox._depends[sandbox['bar']].result()
- 
-         self.assertEquals(e.exception.message,
-                           "global name 'sys' is not defined")
- 
-     def test_apply_imports(self):
-         imports = []
- 
-         class CountApplyImportsSandbox(ConfigureSandbox):
-diff --git a/python/mozbuild/mozbuild/test/configure/test_lint.py b/python/mozbuild/mozbuild/test/configure/test_lint.py
---- a/python/mozbuild/mozbuild/test/configure/test_lint.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_lint.py
-@@ -109,16 +109,35 @@ class TestLint(unittest.TestCase):
- 
-                 include(foo)
-             '''):
-                 self.lint_test()
- 
-         self.assertEquals(e.exception.message,
-                           "Missing @depends for `foo`: '--help'")
- 
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                option('--foo', help='foo')
-+                @depends('--foo')
-+                @imports('os')
-+                def foo(value):
-+                    return value
-+
-+                @depends(foo)
-+                def bar(value):
-+                    return value
-+
-+                include(bar)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "Missing @depends for `foo`: '--help'")
-+
-         # There is a default restricted `os` module when there is no explicit
-         # @imports, and it's fine to use it without a dependency on --help.
-         with self.moz_configure('''
-             option('--foo', help='foo')
-             @depends('--foo')
-             def foo(value):
-                 os
-                 return value
-

+ 0 - 79
mozilla-esr52/patches/1322025-2.patch

@@ -1,79 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485322654 -32400
-# Node ID 42f5b6502a6414392cce5098bfe3c6b6b7fc8032
-# Parent  97c019e39b8f873f3884630f481251d20474360d
-Bug 1322025 - Enforce --help requirement on option's when argument. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Options with a `when` argument (either directly, or inherited through
-only_when() or an include) require --help per _value_for_option, but
-that code path is not exercised during a lint pass.
-
-With this change, along the previous one, we now correctly detect that
-bug 1316957 was not supposed to work as is.
-
-diff --git a/python/mozbuild/mozbuild/configure/lint.py b/python/mozbuild/mozbuild/configure/lint.py
---- a/python/mozbuild/mozbuild/configure/lint.py
-+++ b/python/mozbuild/mozbuild/configure/lint.py
-@@ -109,16 +109,23 @@ class LintSandbox(ConfigureSandbox):
-                         % (obj.name, arg.name, arg.name))
-         elif ((self._help or need_help_dependency) and
-               self._missing_help_dependency(obj)):
-             raise ConfigureError("Missing @depends for `%s`: '--help'" %
-                                  obj.name)
-         return super(LintSandbox, self)._value_for_depends(
-             obj, need_help_dependency)
- 
-+    def option_impl(self, *args, **kwargs):
-+        result = super(LintSandbox, self).option_impl(*args, **kwargs)
-+        when = self._conditions.get(result)
-+        if when:
-+            self._value_for(when, need_help_dependency=True)
-+        return result
-+
-     def unwrap(self, func):
-         glob = func.func_globals
-         while func in self._wrapped:
-             if isinstance(func.func_globals, SandboxedGlobal):
-                 glob = func.func_globals
-             func = self._wrapped[func]
-         return func, glob
- 
-diff --git a/python/mozbuild/mozbuild/test/configure/test_lint.py b/python/mozbuild/mozbuild/test/configure/test_lint.py
---- a/python/mozbuild/mozbuild/test/configure/test_lint.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_lint.py
-@@ -128,16 +128,31 @@ class TestLint(unittest.TestCase):
- 
-                 include(bar)
-             '''):
-                 self.lint_test()
- 
-         self.assertEquals(e.exception.message,
-                           "Missing @depends for `foo`: '--help'")
- 
-+        with self.assertRaises(ConfigureError) as e:
-+            with self.moz_configure('''
-+                option('--foo', help='foo')
-+                @depends('--foo')
-+                @imports('os')
-+                def foo(value):
-+                    return value
-+
-+                option('--bar', help='bar', when=foo)
-+            '''):
-+                self.lint_test()
-+
-+        self.assertEquals(e.exception.message,
-+                          "Missing @depends for `foo`: '--help'")
-+
-         # There is a default restricted `os` module when there is no explicit
-         # @imports, and it's fine to use it without a dependency on --help.
-         with self.moz_configure('''
-             option('--foo', help='foo')
-             @depends('--foo')
-             def foo(value):
-                 os
-                 return value
-

+ 0 - 209
mozilla-esr52/patches/1322025-3.patch

@@ -1,209 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485329523 -32400
-# Node ID 175dabab373b0f584beedfa768612743e264aa9a
-# Parent  42f5b6502a6414392cce5098bfe3c6b6b7fc8032
-Bug 1322025 - Make DependsFunction.func less public. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-We're going to change the function signature for CombinedDependsFunction,
-so make it visible in the API that the function member is not meant to
-be used directly. The linter still does, though, because it needs to
-look in their guts.
-
-At the same time, avoid setting DependsFunction names via the function
-name itself, because in upcoming changes, it will not be modifiable in
-some cases.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -46,54 +46,61 @@ class SandboxDependsFunction(object):
-     '''Sandbox-visible representation of @depends functions.'''
-     def __call__(self, *arg, **kwargs):
-         raise ConfigureError('The `%s` function may not be called'
-                              % self.__name__)
- 
- 
- class DependsFunction(object):
-     __slots__ = (
--        'func', 'dependencies', 'when', 'sandboxed', 'sandbox', '_result')
-+        '_func', '_name', 'dependencies', 'when', 'sandboxed', 'sandbox',
-+        '_result')
- 
-     def __init__(self, sandbox, func, dependencies, when=None):
-         assert isinstance(sandbox, ConfigureSandbox)
--        self.func = func
-+        assert not inspect.isgeneratorfunction(func)
-+        self._func = func
-+        self._name = func.__name__
-         self.dependencies = dependencies
-         self.sandboxed = wraps(func)(SandboxDependsFunction())
-         self.sandbox = sandbox
-         self.when = when
-         sandbox._depends[self.sandboxed] = self
- 
-         # Only @depends functions with a dependency on '--help' are executed
-         # immediately. Everything else is queued for later execution.
-         if sandbox._help_option in dependencies:
-             sandbox._value_for(self)
-         elif not sandbox._help:
-             sandbox._execution_queue.append((sandbox._value_for, (self,)))
- 
-     @property
-     def name(self):
--        return self.func.__name__
-+        return self._name
-+
-+    @name.setter
-+    def name(self, value):
-+        self._name = value
- 
-     @property
-     def sandboxed_dependencies(self):
-         return [
-             d.sandboxed if isinstance(d, DependsFunction) else d
-             for d in self.dependencies
-         ]
- 
-     @memoize
-     def result(self, need_help_dependency=False):
-         if self.when and not self.sandbox._value_for(self.when,
-                                                      need_help_dependency):
-             return None
- 
-         resolved_args = [self.sandbox._value_for(d, need_help_dependency)
-                          for d in self.dependencies]
--        return self.func(*resolved_args)
-+        return self._func(*resolved_args)
- 
-     def __repr__(self):
-         return '<%s.%s %s(%s)>' % (
-             self.__class__.__module__,
-             self.__class__.__name__,
-             self.name,
-             ', '.join(repr(d) for d in self.dependencies),
-         )
-@@ -103,17 +110,17 @@ class CombinedDependsFunction(DependsFun
-     def __init__(self, sandbox, func, dependencies):
-         @memoize
-         @wraps(func)
-         def wrapper(*args):
-             return func(args)
- 
-         flatten_deps = []
-         for d in dependencies:
--            if isinstance(d, CombinedDependsFunction) and d.func == wrapper:
-+            if isinstance(d, CombinedDependsFunction) and d._func == wrapper:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-                         flatten_deps.append(d2)
-             elif d not in flatten_deps:
-                 flatten_deps.append(d)
- 
-         # Automatically add a --help dependency if one of the dependencies
-         # depends on it.
-@@ -129,21 +136,21 @@ class CombinedDependsFunction(DependsFun
-     @memoize
-     def result(self, need_help_dependency=False):
-         # Ignore --help for the combined result
-         deps = self.dependencies
-         if deps[0] == self.sandbox._help_option:
-             deps = deps[1:]
-         resolved_args = [self.sandbox._value_for(d, need_help_dependency)
-                          for d in deps]
--        return self.func(*resolved_args)
-+        return self._func(*resolved_args)
- 
-     def __eq__(self, other):
-         return (isinstance(other, self.__class__) and
--                self.func == other.func and
-+                self._func == other._func and
-                 set(self.dependencies) == set(other.dependencies))
- 
-     def __ne__(self, other):
-         return not self == other
- 
- class SandboxedGlobal(dict):
-     '''Identifiable dict type for use as function global'''
- 
-@@ -386,17 +393,17 @@ class ConfigureSandbox(dict):
- 
-         elif (not isinstance(value, SandboxDependsFunction) and
-                 value not in self._templates and
-                 not (inspect.isclass(value) and issubclass(value, Exception))):
-             raise KeyError('Cannot assign `%s` because it is neither a '
-                            '@depends nor a @template' % key)
- 
-         if isinstance(value, SandboxDependsFunction):
--            self._depends[value].func.__name__ = key
-+            self._depends[value].name = key
- 
-         return super(ConfigureSandbox, self).__setitem__(key, value)
- 
-     def _resolve(self, arg, need_help_dependency=True):
-         if isinstance(arg, SandboxDependsFunction):
-             return self._value_for_depends(self._depends[arg],
-                                            need_help_dependency)
-         return arg
-@@ -412,17 +419,16 @@ class ConfigureSandbox(dict):
- 
-         elif isinstance(obj, Option):
-             return self._value_for_option(obj)
- 
-         assert False
- 
-     @memoize
-     def _value_for_depends(self, obj, need_help_dependency=False):
--        assert not inspect.isgeneratorfunction(obj.func)
-         return obj.result(need_help_dependency)
- 
-     @memoize
-     def _value_for_option(self, option):
-         implied = {}
-         for implied_option in self._implied_options[:]:
-             if implied_option.name not in (option.name, option.env):
-                 continue
-diff --git a/python/mozbuild/mozbuild/configure/lint.py b/python/mozbuild/mozbuild/configure/lint.py
---- a/python/mozbuild/mozbuild/configure/lint.py
-+++ b/python/mozbuild/mozbuild/configure/lint.py
-@@ -35,17 +35,17 @@ class LintSandbox(ConfigureSandbox):
- 
-         for dep in self._depends.itervalues():
-             self._check_dependencies(dep)
- 
-     def _check_dependencies(self, obj):
-         if isinstance(obj, CombinedDependsFunction) or obj in (self._always,
-                                                                self._never):
-             return
--        func, glob = self.unwrap(obj.func)
-+        func, glob = self.unwrap(obj._func)
-         loc = '%s:%d' % (func.func_code.co_filename,
-                          func.func_code.co_firstlineno)
-         func_args = inspect.getargspec(func)
-         if func_args.keywords:
-             raise ConfigureError(
-                 '%s: Keyword arguments are not allowed in @depends functions'
-                 % loc
-             )
-@@ -75,17 +75,17 @@ class LintSandbox(ConfigureSandbox):
- 
-     def _missing_help_dependency(self, obj):
-         if isinstance(obj, CombinedDependsFunction):
-             return False
-         if isinstance(obj, DependsFunction):
-             if (self._help_option in obj.dependencies or
-                 obj in (self._always, self._never)):
-                 return False
--            func, glob = self.unwrap(obj.func)
-+            func, glob = self.unwrap(obj._func)
-             # We allow missing --help dependencies for functions that:
-             # - don't use @imports
-             # - don't have a closure
-             # - don't use global variables
-             if func in self._imports or func.func_closure:
-                 return True
-             for op, arg in disassemble_as_iter(func):
-                 if op in ('LOAD_GLOBAL', 'STORE_GLOBAL'):
-

+ 0 - 126
mozilla-esr52/patches/1322025-4.patch

@@ -1,126 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485330629 -32400
-# Node ID 0b17ca34cb2e7988105ec52d90ea0f92ab996448
-# Parent  175dabab373b0f584beedfa768612743e264aa9a
-Bug 1322025 - Don't wrap the combination function in CombinedDependsFunction. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Several things were wrong with the wrapping:
-- the equality test on functions was actually comparing the memoized
-  functions, which have a type memoize, which inherits from dict. So
-  they weren't comparing actual functions, but the dict used to store
-  the cache of their invocation.
-- each CombinedDependsFunction created for the same combination function
-  used a different wrapped function, so even if the dict problem wasn't
-  there, the equality test still wouldn't work, except if the function
-  wrapping itself was memoized.
-- the memoization was not particularly useful.
-
-Also, for upcoming changes, we'd actually like the combination function to
-take an iterable instead of a variable argument list, so that items of
-the iterable can be skipped.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -103,54 +103,49 @@ class DependsFunction(object):
-             self.__class__.__name__,
-             self.name,
-             ', '.join(repr(d) for d in self.dependencies),
-         )
- 
- 
- class CombinedDependsFunction(DependsFunction):
-     def __init__(self, sandbox, func, dependencies):
--        @memoize
--        @wraps(func)
--        def wrapper(*args):
--            return func(args)
--
-         flatten_deps = []
-         for d in dependencies:
--            if isinstance(d, CombinedDependsFunction) and d._func == wrapper:
-+            if isinstance(d, CombinedDependsFunction) and d._func is func:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-                         flatten_deps.append(d2)
-             elif d not in flatten_deps:
-                 flatten_deps.append(d)
- 
-         # Automatically add a --help dependency if one of the dependencies
-         # depends on it.
-         for d in flatten_deps:
-             if (isinstance(d, DependsFunction) and
-                 sandbox._help_option in d.dependencies):
-                 flatten_deps.insert(0, sandbox._help_option)
-                 break
- 
-         super(CombinedDependsFunction, self).__init__(
--            sandbox, wrapper, flatten_deps)
-+            sandbox, func, flatten_deps)
- 
-     @memoize
-     def result(self, need_help_dependency=False):
-         # Ignore --help for the combined result
-         deps = self.dependencies
-         if deps[0] == self.sandbox._help_option:
-             deps = deps[1:]
-         resolved_args = [self.sandbox._value_for(d, need_help_dependency)
-                          for d in deps]
--        return self._func(*resolved_args)
-+        return self._func(resolved_args)
- 
-     def __eq__(self, other):
-         return (isinstance(other, self.__class__) and
--                self._func == other._func and
-+                self._func is other._func and
-                 set(self.dependencies) == set(other.dependencies))
- 
-     def __ne__(self, other):
-         return not self == other
- 
- class SandboxedGlobal(dict):
-     '''Identifiable dict type for use as function global'''
- 
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -867,16 +867,35 @@ class TestConfigure(unittest.TestCase):
-         '''):
-             with self.assertRaises(ConfigureError) as e:
-                 self.get_config()
- 
-             self.assertEquals(e.exception.message,
-                               '@depends function needs the same `when` as '
-                               'options it depends on')
- 
-+        with self.moz_configure('''
-+            @depends(when=True)
-+            def always():
-+                return True
-+            @depends(when=True)
-+            def always2():
-+                return True
-+            with only_when(always2):
-+                option('--with-foo', help='foo', when=always)
-+                # include() triggers resolution of its dependencies, and their
-+                # side effects.
-+                include(depends('--with-foo', when=always)(lambda x: x))
-+                # The sandbox should figure that the `when` here is
-+                # appropriate. Bad behavior in CombinedDependsFunction.__eq__
-+                # made this fail in the past.
-+                set_config('FOO', depends('--with-foo', when=always)(lambda x: x))
-+        '''):
-+            self.get_config()
-+
-     def test_include_failures(self):
-         with self.assertRaises(ConfigureError) as e:
-             with self.moz_configure('include("../foo.configure")'):
-                 self.get_config()
- 
-         self.assertEquals(
-             e.exception.message,
-             'Cannot include `%s` because it is not in a subdirectory of `%s`'
-

+ 0 - 54
mozilla-esr52/patches/1322025-5.patch

@@ -1,54 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485331803 -32400
-# Node ID 5e9a5b5829d161f9b50ed3b9165772425f3d5511
-# Parent  0b17ca34cb2e7988105ec52d90ea0f92ab996448
-Bug 1322025 - Don't automatically add --help dependencies to CombinedDependsFunctions. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Adding those dependencies, retrospectively, only worked around the poor
-handling of --help requirements by the linter, that we fixed a few
-commits ago. This is now not necessary anymore.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -112,35 +112,23 @@ class CombinedDependsFunction(DependsFun
-         for d in dependencies:
-             if isinstance(d, CombinedDependsFunction) and d._func is func:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-                         flatten_deps.append(d2)
-             elif d not in flatten_deps:
-                 flatten_deps.append(d)
- 
--        # Automatically add a --help dependency if one of the dependencies
--        # depends on it.
--        for d in flatten_deps:
--            if (isinstance(d, DependsFunction) and
--                sandbox._help_option in d.dependencies):
--                flatten_deps.insert(0, sandbox._help_option)
--                break
--
-         super(CombinedDependsFunction, self).__init__(
-             sandbox, func, flatten_deps)
- 
-     @memoize
-     def result(self, need_help_dependency=False):
--        # Ignore --help for the combined result
--        deps = self.dependencies
--        if deps[0] == self.sandbox._help_option:
--            deps = deps[1:]
-         resolved_args = [self.sandbox._value_for(d, need_help_dependency)
--                         for d in deps]
-+                         for d in self.dependencies]
-         return self._func(resolved_args)
- 
-     def __eq__(self, other):
-         return (isinstance(other, self.__class__) and
-                 self._func is other._func and
-                 set(self.dependencies) == set(other.dependencies))
- 
-     def __ne__(self, other):
-

+ 0 - 157
mozilla-esr52/patches/1322025-6.patch

@@ -1,157 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485333753 -32400
-# Node ID 9c02acca893d374375778cd49f9ff542c16b91c4
-# Parent  5e9a5b5829d161f9b50ed3b9165772425f3d5511
-Bug 1322025 - Allow to combine two DependsFunctions with "|". r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Ideally, it would have been better if it were "or", but it's not
-possible to override "or" in python ; __or__ is for "|".
-
-This does feel magic, but it's also shorter than adding something like
-@depends_any(), and while we're only adding "|" as of this change, we
-can add other operations such as "&" in the future, or __getattr__ for
-things like milestone.is_nightly.
-
-An alternative form in moz.configure could require the @depends function
-to be called, e.g. "a() | b()" instead of "a | b", but I'm not
-particularly convinced that one is less magic than the other.
-
-This feature is hooked up such that b is not resolved if a is true,
-although in practice, it will still be resolved in Sandbox.run... but
-not when --help is passed. In the long run, the forced resolution of
-@depends functions will be removed from Sandbox.run.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -39,33 +39,42 @@ import mozpack.path as mozpath
- 
- 
- class ConfigureError(Exception):
-     pass
- 
- 
- class SandboxDependsFunction(object):
-     '''Sandbox-visible representation of @depends functions.'''
-+    def __init__(self, unsandboxed):
-+        self._or = unsandboxed.__or__
-+
-     def __call__(self, *arg, **kwargs):
-         raise ConfigureError('The `%s` function may not be called'
-                              % self.__name__)
- 
-+    def __or__(self, other):
-+        if not isinstance(other, SandboxDependsFunction):
-+            raise ConfigureError('Can only do binary arithmetic operations '
-+                                 'with another @depends function.')
-+        return self._or(other).sandboxed
-+
- 
- class DependsFunction(object):
-     __slots__ = (
-         '_func', '_name', 'dependencies', 'when', 'sandboxed', 'sandbox',
-         '_result')
- 
-     def __init__(self, sandbox, func, dependencies, when=None):
-         assert isinstance(sandbox, ConfigureSandbox)
-         assert not inspect.isgeneratorfunction(func)
-         self._func = func
-         self._name = func.__name__
-         self.dependencies = dependencies
--        self.sandboxed = wraps(func)(SandboxDependsFunction())
-+        self.sandboxed = wraps(func)(SandboxDependsFunction(self))
-         self.sandbox = sandbox
-         self.when = when
-         sandbox._depends[self.sandboxed] = self
- 
-         # Only @depends functions with a dependency on '--help' are executed
-         # immediately. Everything else is queued for later execution.
-         if sandbox._help_option in dependencies:
-             sandbox._value_for(self)
-@@ -100,16 +109,33 @@ class DependsFunction(object):
-     def __repr__(self):
-         return '<%s.%s %s(%s)>' % (
-             self.__class__.__module__,
-             self.__class__.__name__,
-             self.name,
-             ', '.join(repr(d) for d in self.dependencies),
-         )
- 
-+    def __or__(self, other):
-+        if isinstance(other, SandboxDependsFunction):
-+            other = self.sandbox._depends.get(other)
-+        assert isinstance(other, DependsFunction)
-+        assert self.sandbox is other.sandbox
-+        return CombinedDependsFunction(self.sandbox, self.first_true,
-+                                       (self, other))
-+
-+    @staticmethod
-+    def first_true(iterable):
-+        # Like the builtin any(), but returns the first element that is true,
-+        # instead of True. If none are true, returns the last element.
-+        for i in iterable:
-+            if i:
-+                return i
-+        return i
-+
- 
- class CombinedDependsFunction(DependsFunction):
-     def __init__(self, sandbox, func, dependencies):
-         flatten_deps = []
-         for d in dependencies:
-             if isinstance(d, CombinedDependsFunction) and d._func is func:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -1282,11 +1282,45 @@ class TestConfigure(unittest.TestCase):
-                               '--foo is not available in this configuration')
- 
-         # And similarly doesn't fail when the condition is true.
-         with self.moz_configure('''
-             imply_option('--foo', True)
-         ''' + moz_configure):
-             self.get_config(['--enable-when'])
- 
-+    def test_depends_or(self):
-+        with self.moz_configure('''
-+            option('--foo', nargs=1, help='foo')
-+            @depends('--foo')
-+            def foo(value):
-+                return value or None
-+
-+            option('--bar', nargs=1, help='bar')
-+            @depends('--bar')
-+            def bar(value):
-+                return value
-+
-+            set_config('FOOBAR', foo | bar)
-+        '''):
-+            config = self.get_config()
-+            self.assertEqual(config, {
-+                'FOOBAR': NegativeOptionValue(),
-+            })
-+
-+            config = self.get_config(['--foo=foo'])
-+            self.assertEqual(config, {
-+                'FOOBAR': PositiveOptionValue(('foo',)),
-+            })
-+
-+            config = self.get_config(['--bar=bar'])
-+            self.assertEqual(config, {
-+                'FOOBAR': PositiveOptionValue(('bar',)),
-+            })
-+
-+            config = self.get_config(['--foo=foo', '--bar=bar'])
-+            self.assertEqual(config, {
-+                'FOOBAR': PositiveOptionValue(('foo',)),
-+            })
-+
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 133
mozilla-esr52/patches/1322025-7.patch

@@ -1,133 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485334456 -32400
-# Node ID c78a57144263224e409204ee3ab43fdc305a6b9f
-# Parent  9c02acca893d374375778cd49f9ff542c16b91c4
-Bug 1322025 - Provide variants of host and target that depend on --help. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-We want to avoid giving --help dependencies to host and target, so that
-they we don't spawn config.guess and config.sub when running configure
---help, and don't need to reach out to the which module to find a
-suitable shell to execute them.
-
-So, when --help is given, we return a fake host/target namespace, and
-avoid the config.guess/config.sub-invoking code being executed.
-
-Then, by giving the --help option to the linter, it can properly find
-that the config.guess/config.sub-invoking code doesn't need the
-dependency on --help.
-
-This effectively unbreaks configure --help after bug 1313306.
-
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -412,16 +412,33 @@ def split_triplet(triplet):
-         raw_cpu=cpu,
-         raw_os=os,
-         # Toolchains, most notably for cross compilation may use cpu-os
-         # prefixes.
-         toolchain='%s-%s' % (cpu, os),
-     )
- 
- 
-+# This defines a fake target/host namespace for when running with --help
-+@depends('--help')
-+def help_host_target(help):
-+    if help:
-+        return namespace(
-+            alias='unknown-unknown-unknown',
-+            cpu='unknown',
-+            bitness='unknown',
-+            kernel='unknown',
-+            os='unknown',
-+            endianness='unknown',
-+            raw_cpu='unknown',
-+            raw_os='unknown',
-+            toolchain='unknown-unknown',
-+        )
-+
-+
- @imports('subprocess')
- def config_sub(shell, triplet):
-     config_sub = os.path.join(os.path.dirname(__file__), '..',
-                               'autoconf', 'config.sub')
-     return subprocess.check_output([shell, config_sub, triplet]).strip()
- 
- 
- @depends('--host', shell)
-@@ -432,24 +449,28 @@ def host(value, shell):
-         config_guess = os.path.join(os.path.dirname(__file__), '..',
-                                     'autoconf', 'config.guess')
-         host = subprocess.check_output([shell, config_guess]).strip()
-     else:
-         host = value[0]
- 
-     return split_triplet(config_sub(shell, host))
- 
-+host = help_host_target | host
-+
- 
- @depends('--target', host, shell)
- @checking('for target system type', lambda t: t.alias)
- def target(value, host, shell):
-     if not value:
-         return host
-     return split_triplet(config_sub(shell, value[0]))
- 
-+target = help_host_target | target
-+
- 
- @depends(host, target)
- @checking('whether cross compiling')
- def cross_compiling(host, target):
-     return host != target
- 
- set_config('CROSS_COMPILE', cross_compiling)
- set_define('CROSS_COMPILE', cross_compiling)
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -143,18 +143,18 @@ class CombinedDependsFunction(DependsFun
-             elif d not in flatten_deps:
-                 flatten_deps.append(d)
- 
-         super(CombinedDependsFunction, self).__init__(
-             sandbox, func, flatten_deps)
- 
-     @memoize
-     def result(self, need_help_dependency=False):
--        resolved_args = [self.sandbox._value_for(d, need_help_dependency)
--                         for d in self.dependencies]
-+        resolved_args = (self.sandbox._value_for(d, need_help_dependency)
-+                         for d in self.dependencies)
-         return self._func(resolved_args)
- 
-     def __eq__(self, other):
-         return (isinstance(other, self.__class__) and
-                 self._func is other._func and
-                 set(self.dependencies) == set(other.dependencies))
- 
-     def __ne__(self, other):
-diff --git a/python/mozbuild/mozbuild/test/configure/lint.py b/python/mozbuild/mozbuild/test/configure/lint.py
---- a/python/mozbuild/mozbuild/test/configure/lint.py
-+++ b/python/mozbuild/mozbuild/test/configure/lint.py
-@@ -52,14 +52,14 @@ class Lint(unittest.TestCase):
-     def tearDown(self):
-         os.chdir(self._curdir)
- 
-     def lint(self, project):
-         sandbox = LintSandbox({
-             'OLD_CONFIGURE': os.path.join(topsrcdir, 'old-configure'),
-             'MOZCONFIG': os.path.join(os.path.dirname(test_path), 'data',
-                                       'empty_mozconfig'),
--        }, ['--enable-project=%s' % project])
-+        }, ['--enable-project=%s' % project, '--help'])
-         sandbox.run(os.path.join(topsrcdir, 'moz.configure'))
- 
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 84
mozilla-esr52/patches/1323901-1.patch

@@ -1,84 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1482442083 -32400
-# Node ID 21e27f6e2770e71e8d3ccae37d334f1e8c5c7af0
-# Parent  d23e21a03ce2cb665afd5a63da6180dda0fd6a4b
-Bug 1323901 - Force `which` to use lowercase extensions on Windows. r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
---- a/build/moz.configure/util.configure
-+++ b/build/moz.configure/util.configure
-@@ -135,29 +135,46 @@ normalize_path = normalize_path()
- 
- # Locates the given program using which, or returns the given path if it
- # exists.
- # The `paths` parameter may be passed to search the given paths instead of
- # $PATH.
- @imports(_from='which', _import='which')
- @imports(_from='which', _import='WhichError')
- @imports('itertools')
-+@imports('sys')
- @imports(_from='os', _import='pathsep')
-+@imports(_from='os', _import='environ')
- def find_program(file, paths=None):
-+    # The following snippet comes from `which` itself, with a slight
-+    # modification to use lowercase extensions, because it's confusing rustup
-+    # (on top of making results not really appealing to the eye).
-+
-+    # Windows has the concept of a list of extensions (PATHEXT env var).
-+    if sys.platform.startswith("win"):
-+        exts = [e.lower()
-+                for e in environ.get("PATHEXT", "").split(pathsep)]
-+        # If '.exe' is not in exts then obviously this is Win9x and
-+        # or a bogus PATHEXT, then use a reasonable default.
-+	if '.exe' not in exts:
-+            exts = ['.com', '.exe', '.bat']
-+    else:
-+        exts = None
-+
-     try:
-         if is_absolute_or_relative(file):
-             return normalize_path(which(os.path.basename(file),
--                                        [os.path.dirname(file)]))
-+                                        [os.path.dirname(file)], exts=exts))
-         if paths:
-             if not isinstance(paths, (list, tuple)):
-                 die("Paths provided to find_program must be a list of strings, "
-                     "not %r", paths)
-             paths = list(itertools.chain(
-                 *(p.split(pathsep) for p in paths if p)))
--        return normalize_path(which(file, path=paths))
-+        return normalize_path(which(file, path=paths, exts=exts))
-     except WhichError:
-         return None
- 
- 
- @imports('os')
- @imports('subprocess')
- @imports(_from='mozbuild.configure.util', _import='LineIO')
- @imports(_from='tempfile', _import='mkstemp')
-diff --git a/python/mozbuild/mozbuild/test/configure/common.py b/python/mozbuild/mozbuild/test/configure/common.py
---- a/python/mozbuild/mozbuild/test/configure/common.py
-+++ b/python/mozbuild/mozbuild/test/configure/common.py
-@@ -170,17 +170,17 @@ class ConfigureTestSandbox(ConfigureSand
-                 self.value = ''
- 
-         return Buffer()
- 
-     def GetShortPathNameW(self, path_in, path_out, length):
-         path_out.value = fake_short_path(path_in)
-         return length
- 
--    def which(self, command, path=None):
-+    def which(self, command, path=None, exts=None):
-         for parent in (path or self._search_path):
-             c = mozpath.abspath(mozpath.join(parent, command))
-             for candidate in (c, ensure_exe_extension(c)):
-                 if self.imported_os.path.exists(candidate):
-                     return candidate
-         raise WhichError()
- 
-     def Popen(self, args, stdin=None, stdout=None, stderr=None, **kargs):
-

+ 0 - 32
mozilla-esr52/patches/1323901-2.patch

@@ -1,32 +0,0 @@
-
-# HG changeset patch
-# User Carsten "Tomcat" Book <cbook@mozilla.com>
-# Date 1482913771 -3600
-# Node ID 536b05a23fa07042378f5459ab638870ebb0889c
-# Parent  21e27f6e2770e71e8d3ccae37d334f1e8c5c7af0
-Bug 1323901 - Bustage fix from glandium rs=bustage fix, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
---- a/build/moz.configure/util.configure
-+++ b/build/moz.configure/util.configure
-@@ -149,17 +149,17 @@ def find_program(file, paths=None):
-     # (on top of making results not really appealing to the eye).
- 
-     # Windows has the concept of a list of extensions (PATHEXT env var).
-     if sys.platform.startswith("win"):
-         exts = [e.lower()
-                 for e in environ.get("PATHEXT", "").split(pathsep)]
-         # If '.exe' is not in exts then obviously this is Win9x and
-         # or a bogus PATHEXT, then use a reasonable default.
--	if '.exe' not in exts:
-+        if '.exe' not in exts:
-             exts = ['.com', '.exe', '.bat']
-     else:
-         exts = None
- 
-     try:
-         if is_absolute_or_relative(file):
-             return normalize_path(which(os.path.basename(file),
-                                         [os.path.dirname(file)], exts=exts))
-

+ 0 - 196
mozilla-esr52/patches/1335666.patch

@@ -1,196 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1485933929 -32400
-# Node ID 35967a21613ea7f0a6aca96a4042d7a2d8fdcccf
-# Parent  1b1fc1efce0ec95e111ac3b2183abf0ba14db83a
-Bug 1335666 - Remove @depends_when. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-In bug 1296530, we made @depends take a when argument, it can now replace
-all uses of @depends_when.
-
-diff --git a/build/moz.configure/compilers-util.configure b/build/moz.configure/compilers-util.configure
---- a/build/moz.configure/compilers-util.configure
-+++ b/build/moz.configure/compilers-util.configure
-@@ -38,17 +38,17 @@ def compiler_class(compiler):
- 
-             if check_msg:
-                 def checking_fn(fn):
-                     return checking(check_msg)(fn)
-             else:
-                 def checking_fn(fn):
-                     return fn
- 
--            @depends_when(self, dependable(flags), extra_toolchain_flags, when=when)
-+            @depends(self, dependable(flags), extra_toolchain_flags, when=when)
-             @checking_fn
-             def func(compiler, flags, extra_flags):
-                 flags = flags or []
-                 flags += extra_flags or []
-                 flags.append('-c')
- 
-                 if try_invoke_compiler(
-                     compiler.wrapper + [compiler.compiler] + compiler.flags,
-diff --git a/build/moz.configure/headers.configure b/build/moz.configure/headers.configure
---- a/build/moz.configure/headers.configure
-+++ b/build/moz.configure/headers.configure
-@@ -69,21 +69,21 @@ have_perf_event_h = check_header('linux/
-                                  when=building_linux)
- 
- js_option('--with-linux-headers',
-           help='location where the Linux kernel headers can be found',
-           nargs=1)
- 
- passed_linux_header_flags = depends_if('--with-linux-headers')(lambda v: ['-I%s' % v[0]])
- 
--@depends_when(try_compile(includes=['asm/unistd.h'],
--                          body='return sizeof(__NR_perf_event_open);',
--                          flags=passed_linux_header_flags,
--                          check_msg='for perf_event_open system call'),
--              when=have_perf_event_h)
-+@depends(try_compile(includes=['asm/unistd.h'],
-+                     body='return sizeof(__NR_perf_event_open);',
-+                     flags=passed_linux_header_flags,
-+                     check_msg='for perf_event_open system call'),
-+         when=have_perf_event_h)
- def have_perf_event_open(have_perf_event_open):
-     if have_perf_event_open:
-         return True
- 
- set_config('HAVE_LINUX_PERF_EVENT_H', have_perf_event_open)
- 
- @depends(passed_linux_header_flags, have_perf_event_open)
- def linux_headers_includes(passed_linux_header_flags, have_perf_event_open):
-diff --git a/build/moz.configure/pkg.configure b/build/moz.configure/pkg.configure
---- a/build/moz.configure/pkg.configure
-+++ b/build/moz.configure/pkg.configure
-@@ -35,29 +35,29 @@ def pkg_check_modules(var, package_desc,
-     if isinstance(package_desc, (tuple, list)):
-         package_desc = ' '.join(package_desc)
-     package_desc = dependable(package_desc)
- 
-     @depends(when, '--enable-compile-environment')
-     def when_and_compile_environment(when, compile_environment):
-         return when and compile_environment
- 
--    @depends_when(pkg_config, pkg_config_version,
--                  when=when_and_compile_environment)
-+    @depends(pkg_config, pkg_config_version,
-+             when=when_and_compile_environment)
-     def check_pkg_config(pkg_config, version):
-         min_version = '0.9.0'
-         if pkg_config is None:
-             die("*** The pkg-config script could not be found. Make sure it is\n"
-                 "*** in your path, or set the PKG_CONFIG environment variable\n"
-                 "*** to the full path to pkg-config.")
-         if version < min_version:
-             die("*** Your version of pkg-config is too old. You need version %s or newer.",
-                 min_version)
- 
--    @depends_when(pkg_config, package_desc, when=when_and_compile_environment)
-+    @depends(pkg_config, package_desc, when=when_and_compile_environment)
-     @imports('subprocess')
-     @imports('sys')
-     @imports(_from='mozbuild.configure.util', _import='LineIO')
-     def package(pkg_config, package_desc):
-         # package_desc may start as a depends function, so we can't use
-         # @checking here.
-         log.info("checking for %s... " % package_desc)
-         with log.queue_debug():
-@@ -69,29 +69,29 @@ def pkg_check_modules(var, package_desc,
-             except subprocess.CalledProcessError as e:
-                 log.info("no")
-                 log_writer = log.warning if allow_missing else log.error
-                 with LineIO(lambda l: log_writer(l)) as o:
-                     o.write(e.output)
-                 if not allow_missing:
-                     sys.exit(1)
- 
--    @depends_when(pkg_config, package_desc, when=package)
-+    @depends(pkg_config, package_desc, when=package)
-     @checking('%s_CFLAGS' % var, callback=lambda t: ' '.join(t))
-     def pkg_cflags(pkg_config, package_desc):
-         flags = check_cmd_output(pkg_config, '--cflags', package_desc)
-         return tuple(flags.split())
- 
--    @depends_when(pkg_config, package_desc, when=package)
-+    @depends(pkg_config, package_desc, when=package)
-     @checking('%s_LIBS' % var, callback=lambda t: ' '.join(t))
-     def pkg_libs(pkg_config, package_desc):
-         libs = check_cmd_output(pkg_config, '--libs', package_desc)
-         # Remove evil flags like -Wl,--export-dynamic
-         return tuple(libs.replace('-Wl,--export-dynamic', '').split())
- 
--    @depends_when(pkg_cflags, pkg_libs, when=package)
-+    @depends(pkg_cflags, pkg_libs, when=package)
-     def pkg_info(cflags, libs):
-         return namespace(cflags=cflags, libs=libs)
- 
-     set_config('%s_CFLAGS' % var, pkg_cflags)
-     set_config('%s_LIBS' % var, pkg_libs)
- 
-     return pkg_info
-diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
---- a/build/moz.configure/util.configure
-+++ b/build/moz.configure/util.configure
-@@ -394,36 +394,16 @@ def depends_if(*args):
-     def decorator(func):
-         @depends(*args)
-         def wrapper(*args):
-             if any(arg for arg in args):
-                 return func(*args)
-         return wrapper
-     return decorator
- 
--# Like @depends_if, but a distinguished value passed as a keyword argument
--# "when" is truth tested instead of every argument. This value is not passed
--# to the function if it is called.
--@template
--def depends_when(*args, **kwargs):
--    if not len(kwargs) == 1 and kwargs.get('when'):
--        die('depends_when requires a single keyword argument, "when"')
--    when = kwargs['when']
--    if not when:
--        return depends(*args)
--
--    def decorator(fn):
--        @depends(when, *args)
--        def wrapper(val, *args):
--            if val:
--                return fn(*args)
--        return wrapper
--    return decorator
--
--
- # Hacks related to old-configure
- # ==============================
- 
- @dependable
- def old_configure_assignments():
-     return []
- 
- @dependable
-diff --git a/js/ffi.configure b/js/ffi.configure
---- a/js/ffi.configure
-+++ b/js/ffi.configure
-@@ -21,17 +21,17 @@ system_ffi = pkg_check_modules('MOZ_FFI'
-                                when=use_system_ffi)
- 
- building_ffi = depends(system_ffi)(lambda v: v is None)
- 
- set_config('MOZ_SYSTEM_FFI', depends_if(system_ffi)(lambda _: True))
- add_old_configure_assignment('MOZ_SYSTEM_FFI', depends_if(system_ffi)(lambda _: True))
- 
- # Target selection, based on ffi/configure.ac.
--@depends_when(target, when=building_ffi)
-+@depends(target, when=building_ffi)
- def ffi_target(target):
-     if target.cpu not in ('x86', 'x86_64', 'arm', 'aarch64'):
-         die('Building libffi from the tree is not supported on this platform. '
-             'Use --with-system-ffi instead.')
- 
-     if target.os == 'WINNT':
-         target_dir = 'x86'
-         if target.cpu == 'x86_64':
-

+ 0 - 120
mozilla-esr52/patches/1343781.patch

@@ -1,120 +0,0 @@
-
-# HG changeset patch
-# User Edmund Wong <ewong@pw-wspx.org>
-# Date 1489027835 -28800
-# Node ID ef165ee587eff6802a2be666d4926a3585093dc5
-# Parent  e58b83fd06a9b138bdfaadbbc117edefcc687293
-Bug 1343781 - Ensure MozconfigLoader uses the right topsrcdir. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
---- a/build/moz.configure/init.configure
-+++ b/build/moz.configure/init.configure
-@@ -84,25 +84,38 @@ option(env='MOZ_AUTOMATION', help='Enabl
- set_config('MOZ_AUTOMATION', depends_if('MOZ_AUTOMATION')(lambda x: True))
- 
- 
- option(env='OLD_CONFIGURE', nargs=1, help='Path to the old configure script')
- 
- option(env='MOZ_CURRENT_PROJECT', nargs=1, help='Current build project')
- option(env='MOZCONFIG', nargs=1, help='Mozconfig location')
- 
-+option('--with-external-source-dir', env='EXTERNAL_SOURCE_DIR', nargs=1,
-+       help='External directory containing additional build files')
-+
-+@depends('--with-external-source-dir')
-+def external_source_dir(value):
-+    if value:
-+        return value[0]
-+
-+set_config('EXTERNAL_SOURCE_DIR', external_source_dir)
-+add_old_configure_assignment('EXTERNAL_SOURCE_DIR', external_source_dir)
-+
- # Read user mozconfig
- # ==============================================================
- # Note: the dependency on --help is only there to always read the mozconfig,
- # even when --help is passed. Without this dependency, the function wouldn't
- # be called when --help is passed, and the mozconfig wouldn't be read.
- @depends('MOZ_CURRENT_PROJECT', 'MOZCONFIG', 'OLD_CONFIGURE',
--         check_build_environment, '--help')
-+         check_build_environment, '--with-external-source-dir',
-+         '--help')
- @imports(_from='mozbuild.mozconfig', _import='MozconfigLoader')
--def mozconfig(current_project, mozconfig, old_configure, build_env, help):
-+def mozconfig(current_project, mozconfig, old_configure, build_env,
-+              external_source_dir, help):
-     if not old_configure:
-         die('The OLD_CONFIGURE environment variable must be set')
- 
-     # Don't read the mozconfig for the js configure (yay backwards
-     # compatibility)
-     # While the long term goal is that js and top-level use the same configure
-     # and the same overall setup, including the possibility to use mozconfigs,
-     # figuring out what we want to do wrt mozconfig vs. command line and
-@@ -115,17 +128,20 @@ def mozconfig(current_project, mozconfig
-     # Unfortunately, there is no direct way to tell whether the running
-     # configure is the js configure. The indirect way is to look at the
-     # OLD_CONFIGURE path, which points to js/src/old-configure.
-     # I expect we'll have figured things out for mozconfigs well before
-     # old-configure dies.
-     if os.path.dirname(os.path.abspath(old_configure[0])).endswith('/js/src'):
-         return {'path': None}
- 
--    loader = MozconfigLoader(build_env.topsrcdir)
-+    topsrcdir = build_env.topsrcdir
-+    if external_source_dir:
-+        topsrcdir = external_source_dir[0]
-+    loader = MozconfigLoader(topsrcdir)
-     current_project = current_project[0] if current_project else None
-     mozconfig = mozconfig[0] if mozconfig else None
-     mozconfig = loader.find_mozconfig(env={'MOZCONFIG': mozconfig})
-     mozconfig = loader.read_mozconfig(mozconfig, moz_build_app=current_project)
- 
-     return mozconfig
- 
- set_config('MOZCONFIG', depends(mozconfig)(lambda m: m['path']))
-@@ -627,43 +643,32 @@ imply_option('--enable-project', applica
- def default_project(build_env, help):
-     if build_env.topobjdir.endswith('/js/src'):
-         return 'js'
-     return 'browser'
- 
- option('--enable-project', nargs=1, default=default_project,
-        help='Project to build')
- 
--option('--with-external-source-dir', env='EXTERNAL_SOURCE_DIR', nargs=1,
--       help='External directory containing additional build files')
--
- @depends('--enable-project', '--with-external-source-dir',
-          check_build_environment, '--help')
- @imports(_from='os.path', _import='exists')
- def include_project_configure(project, external_source_dir, build_env, help):
-     if not project:
-         die('--enable-project is required.')
- 
-     base_dir = build_env.topsrcdir
-     if external_source_dir:
-         base_dir = os.path.join(base_dir, external_source_dir[0])
- 
-     path = os.path.join(base_dir, project[0], 'moz.configure')
-     if not exists(path):
-         die('Cannot find project %s', project[0])
-     return path
- 
--@depends('--with-external-source-dir')
--def external_source_dir(value):
--    if value:
--        return value[0]
--
--set_config('EXTERNAL_SOURCE_DIR', external_source_dir)
--add_old_configure_assignment('EXTERNAL_SOURCE_DIR', external_source_dir)
--
- 
- @depends(include_project_configure, check_build_environment, '--help')
- def build_project(include_project_configure, build_env, help):
-     ret = os.path.dirname(os.path.relpath(include_project_configure,
-                                           build_env.topsrcdir))
-     return ret
- 
- set_config('MOZ_BUILD_APP', build_project)
-

+ 0 - 122
mozilla-esr52/patches/1354510.patch

@@ -1,122 +0,0 @@
-
-# HG changeset patch
-# User Petr Sumbera <petr.sumbera@oracle.com>
-# Date 1491894092 25200
-# Node ID d99f00376b25222c2b811fac11e5a1ce02b9a7b2
-# Parent  8d1fa7f8f12b83c2bb09907be8a0cb1a08738fd1
-Bug 1354510 - Firefox build should recognize Solaris. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r 8d1fa7f8f12b build/moz.configure/init.configure
---- a/build/moz.configure/init.configure	Thu Mar 09 10:50:35 2017 +0800
-+++ b/build/moz.configure/init.configure	Mon Aug 13 20:55:18 2018 +0200
-@@ -360,6 +360,8 @@
-         canonical_os = canonical_kernel = 'NetBSD'
-     elif os.startswith('openbsd'):
-         canonical_os = canonical_kernel = 'OpenBSD'
-+    elif os.startswith('solaris'):
-+        canonical_os = canonical_kernel = 'SunOS'
-     else:
-         die('Unknown OS: %s' % os)
- 
-@@ -615,6 +617,13 @@
- 
- set_define('XP_LINUX', target_is_linux)
- 
-+@depends(target)
-+def target_is_solaris(target):
-+    if target.kernel == 'SunOS':
-+        return True
-+
-+set_define('XP_SOLARIS', target_is_solaris)
-+
- # The application/project to build
- # ==============================================================
- option('--enable-application', nargs=1, env='MOZ_BUILD_APP',
-diff -r 8d1fa7f8f12b ipc/chromium/chromium-config.mozbuild
---- a/ipc/chromium/chromium-config.mozbuild	Thu Mar 09 10:50:35 2017 +0800
-+++ b/ipc/chromium/chromium-config.mozbuild	Mon Aug 13 20:55:18 2018 +0200
-@@ -41,6 +41,9 @@
-     if CONFIG['OS_ARCH'] == 'Darwin':
-         DEFINES['OS_MACOSX'] = 1
- 
-+    elif CONFIG['OS_ARCH'] == 'SunOS':
-+        DEFINES['OS_SOLARIS'] = 1
-+
-     elif CONFIG['OS_ARCH'] == 'DragonFly':
-         DEFINES.update({
-             'OS_DRAGONFLY': 1,
-diff -r 8d1fa7f8f12b ipc/chromium/src/build/build_config.h
---- a/ipc/chromium/src/build/build_config.h	Thu Mar 09 10:50:35 2017 +0800
-+++ b/ipc/chromium/src/build/build_config.h	Mon Aug 13 20:55:18 2018 +0200
-@@ -32,6 +32,8 @@
- #define OS_NETBSD 1
- #elif defined(__OpenBSD__)
- #define OS_OPENBSD 1
-+#elif defined(__sun__)
-+#define OS_SOLARIS 1
- #elif defined(_WIN32)
- #define OS_WIN 1
- #else
-@@ -47,7 +49,7 @@
- 
- // For access to standard POSIX features, use OS_POSIX instead of a more
- // specific macro.
--#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD)
-+#if defined(OS_MACOSX) || defined(OS_LINUX) || defined(OS_BSD) || defined(OS_SOLARIS)
- #define OS_POSIX 1
- #endif
- 
-diff -r 8d1fa7f8f12b python/mozbuild/mozbuild/configure/constants.py
---- a/python/mozbuild/mozbuild/configure/constants.py	Thu Mar 09 10:50:35 2017 +0800
-+++ b/python/mozbuild/mozbuild/configure/constants.py	Mon Aug 13 20:55:18 2018 +0200
-@@ -24,6 +24,7 @@
-     'NetBSD',
-     'OpenBSD',
-     'OSX',
-+    'SunOS',
-     'WINNT',
- )
- 
-@@ -35,6 +36,7 @@
-     'Linux',
-     'NetBSD',
-     'OpenBSD',
-+    'SunOS',
-     'WINNT',
- )
- 
-@@ -97,6 +99,7 @@
-     'Linux': '__linux__',
-     'NetBSD': '__NetBSD__',
-     'OpenBSD': '__OpenBSD__',
-+    'SunOS': '__sun__',
-     'WINNT': '_WIN32 || __CYGWIN__',
- }
- 
-diff -r 8d1fa7f8f12b toolkit/crashreporter/moz.build
---- a/toolkit/crashreporter/moz.build	Thu Mar 09 10:50:35 2017 +0800
-+++ b/toolkit/crashreporter/moz.build	Mon Aug 13 20:55:18 2018 +0200
-@@ -96,10 +96,6 @@
-         '/toolkit/crashreporter/google-breakpad/src/common/android/include',
-     ]
- 
--if CONFIG['OS_ARCH'] == 'SunOS':
--    # there's no define for this normally
--    DEFINES['XP_SOLARIS'] = True
--
- DEFINES['UNICODE'] = True
- DEFINES['_UNICODE'] = True
- 
-diff -r 8d1fa7f8f12b xpcom/ds/nsMathUtils.h
---- a/xpcom/ds/nsMathUtils.h	Thu Mar 09 10:50:35 2017 +0800
-+++ b/xpcom/ds/nsMathUtils.h	Mon Aug 13 20:55:18 2018 +0200
-@@ -11,7 +11,7 @@
- #include <cmath>
- #include <float.h>
- 
--#ifdef SOLARIS
-+#if defined(XP_SOLARIS)
- #include <ieeefp.h>
- #endif
- 

+ 0 - 58
mozilla-esr52/patches/1356493.patch

@@ -1,58 +0,0 @@
-
-# HG changeset patch
-# User Bob Owen <bobowencode@gmail.com>
-# Date 1500384092 -3600
-# Node ID 2099738eda6f4f5c8f9c84d6c9f1ba02bdb5cf4a
-# Parent  73a5be6013ce71f8ef17792215e4060b4069874a
-Bug 1356493 - Add the SDK version number to the bin path for Windows 10 SDK v10.0.15063.0 and above. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-This patch also works for the current preview SDK v10.0.16232.0.
-
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -358,35 +358,38 @@ def lib_path(target, c_compiler, vc_path
-     os.environ['LIB'] = libs
-     return libs
- 
- set_config('LIB', lib_path)
- 
- 
- option(env='MT', nargs=1, help='Path to the Microsoft Manifest Tool')
- 
--@depends(valid_windows_sdk_dir)
-+@depends(valid_windows_sdk_dir, valid_ucrt_sdk_dir)
- @imports(_from='os', _import='environ')
- @imports('platform')
--def sdk_bin_path(valid_windows_sdk_dir):
-+def sdk_bin_path(valid_windows_sdk_dir, valid_ucrt_sdk_dir):
-     if not valid_windows_sdk_dir:
-         return
- 
-     vc_host = {
-         'x86': 'x86',
-         'AMD64': 'x64',
-     }.get(platform.machine())
- 
-+    # From version 10.0.15063.0 onwards the bin path contains the version number.
-+    versioned_bin = ('bin' if valid_ucrt_sdk_dir.version < '10.0.15063.0'
-+                     else os.path.join('bin', str(valid_ucrt_sdk_dir.version)))
-     result = [
-         environ['PATH'],
--        os.path.join(valid_windows_sdk_dir.path, 'bin', vc_host)
-+        os.path.join(valid_windows_sdk_dir.path, versioned_bin, vc_host)
-     ]
-     if vc_host == 'x64':
-         result.append(
--            os.path.join(valid_windows_sdk_dir.path, 'bin', 'x86'))
-+            os.path.join(valid_windows_sdk_dir.path, versioned_bin, 'x86'))
-     return result
- 
- 
- mt = check_prog('MT', ('mt.exe',), input='MT',
-                 paths=sdk_bin_path)
- 
- 
- # Check that MT is not something unexpected like "magnetic tape manipulation
-

+ 0 - 53
mozilla-esr52/patches/1358215.patch

@@ -1,53 +0,0 @@
-
-# HG changeset patch
-# User Ted Mielczarek <ted@mielczarek.org>
-# Date 1494273704 14400
-# Node ID 17670f6aeeae11dde7258edecf1373829fca9979
-# Parent  b4ee518bc8793bd0dc789b2413ace547244894e4
-bug 1358215 - add MOZ_PHOTON_ANIMATIONS config var/define, default enabled on nightly. r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r b4ee518bc879 build/moz.configure/init.configure
---- a/build/moz.configure/init.configure	Tue Apr 11 00:01:32 2017 -0700
-+++ b/build/moz.configure/init.configure	Mon Aug 13 21:18:41 2018 +0200
-@@ -699,11 +699,15 @@
-                      is_nightly=is_nightly,
-                      is_release_or_beta=is_release_or_beta)
- 
-+@depends(milestone)
-+def is_nightly(milestone):
-+    return milestone.is_nightly
-+
- set_config('GRE_MILESTONE', delayed_getattr(milestone, 'version'))
--set_config('NIGHTLY_BUILD', delayed_getattr(milestone, 'is_nightly'))
--set_define('NIGHTLY_BUILD', delayed_getattr(milestone, 'is_nightly'))
-+set_config('NIGHTLY_BUILD', is_nightly)
-+set_define('NIGHTLY_BUILD', is_nightly)
- add_old_configure_assignment('NIGHTLY_BUILD',
--                             delayed_getattr(milestone, 'is_nightly'))
-+                             is_nightly)
- set_config('RELEASE_OR_BETA', delayed_getattr(milestone, 'is_release_or_beta'))
- set_define('RELEASE_OR_BETA', delayed_getattr(milestone, 'is_release_or_beta'))
- add_old_configure_assignment('RELEASE_OR_BETA',
-diff -r b4ee518bc879 toolkit/moz.configure
---- a/toolkit/moz.configure	Tue Apr 11 00:01:32 2017 -0700
-+++ b/toolkit/moz.configure	Mon Aug 13 21:18:41 2018 +0200
-@@ -509,6 +509,18 @@
-              help='Enable Android History instead of Places',
-              set_as_define=True)
- 
-+option(env='MOZ_PHOTON_ANIMATIONS',
-+       help='Enable Photon UI animations',
-+       default=is_nightly)
-+
-+@depends('MOZ_PHOTON_ANIMATIONS')
-+def photon_animations(value):
-+    if value:
-+        return bool(value)
-+
-+set_config('MOZ_PHOTON_ANIMATIONS', photon_animations)
-+set_define('MOZ_PHOTON_ANIMATIONS', photon_animations)
-+
- @depends('MOZ_PLACES', 'MOZ_ANDROID_HISTORY')
- def check_places_and_android_history(places, android_history):
-     if places and android_history:

+ 0 - 33
mozilla-esr52/patches/1360631.patch

@@ -1,33 +0,0 @@
-
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Date 1493538000 14400
-# Node ID d338de5e37ecb849f80a27b101a53cce917e6bd6
-# Parent  8528bf8f2ecfa90a451ba3e74c7426a3f3596212
-Bug 1360631 - Fix VS2015 x86 cross compiling using start-shell.bat. r=ted, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -423,17 +423,18 @@ def get_vc_paths(topsrcdir):
-         version = Version(install['installationVersion'])
-         # Skip anything older than VS2015.
-         if version < '14':
-             continue
-         path = install['installationPath']
- 
-         yield (Version(install['installationVersion']), {
-             'x64': [os.path.join(path, r'VC\bin\amd64')],
--            'x86': [os.path.join(path, r'VC\bin\amd64_x86')],
-+            # The x64->x86 cross toolchain requires DLLs from the native x64 toolchain.
-+            'x86': [os.path.join(path, r'VC\bin\amd64_x86'), os.path.join(path, r'VC\bin\amd64')],
-         })
-     # Then VS2017 and newer.
-     for install in vswhere(['-requires', 'Microsoft.VisualStudio.Component.VC.Tools.x86.x64']):
-         path = install['installationPath']
-         tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'rb').read().strip()
-         tools_path = os.path.join(path, r'VC\Tools\MSVC', tools_version, r'bin\HostX64')
-         yield (Version(install['installationVersion']), {
-             'x64': [os.path.join(tools_path, 'x64')],
-

+ 0 - 57
mozilla-esr52/patches/1362303.patch

@@ -1,57 +0,0 @@
-
-# HG changeset patch
-# User Stephen A Pohl <spohl.mozilla.bugs@gmail.com>
-# Date 1520360514 18000
-# Node ID 7a6bc227dc03ad3cfa268cb4b6349d191b46baf5
-# Parent  07fad8b0b417d9ae8580f23d697172a3735b546b
-Bug 1362303: Avoid crashes when dragging on macOS due to failed allocations of large shmem segments. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp
---- a/dom/base/nsContentUtils.cpp
-+++ b/dom/base/nsContentUtils.cpp
-@@ -8493,16 +8493,17 @@ GetSurfaceDataImpl(mozilla::gfx::DataSou
-   if (!aSurface->Map(mozilla::gfx::DataSourceSurface::MapType::READ, &map)) {
-     return GetSurfaceDataContext::NullValue();
-   }
- 
-   mozilla::gfx::IntSize size = aSurface->GetSize();
-   mozilla::CheckedInt32 requiredBytes =
-     mozilla::CheckedInt32(map.mStride) * mozilla::CheckedInt32(size.height);
-   if (!requiredBytes.isValid()) {
-+    aSurface->Unmap();
-     return GetSurfaceDataContext::NullValue();
-   }
- 
-   size_t maxBufLen = requiredBytes.value();
-   mozilla::gfx::SurfaceFormat format = aSurface->GetFormat();
- 
-   // Surface data handling is totally nuts. This is the magic one needs to
-   // know to access the data.
-diff --git a/ipc/glue/SharedMemoryBasic_mach.mm b/ipc/glue/SharedMemoryBasic_mach.mm
---- a/ipc/glue/SharedMemoryBasic_mach.mm
-+++ b/ipc/glue/SharedMemoryBasic_mach.mm
-@@ -547,19 +547,21 @@ SharedMemoryBasic::Create(size_t size)
-   memory_object_size_t memoryObjectSize = round_page(size);
- 
-   kr = mach_make_memory_entry_64(mach_task_self(),
-                                  &memoryObjectSize,
-                                  address,
-                                  VM_PROT_DEFAULT,
-                                  &mPort,
-                                  MACH_PORT_NULL);
--  if (kr != KERN_SUCCESS) {
-+  if (kr != KERN_SUCCESS || memoryObjectSize < round_page(size)) {
-     LOG_ERROR("Failed to make memory entry (%zu bytes). %s (%x)\n",
-               size, mach_error_string(kr), kr);
-+    CloseHandle();
-+    mach_vm_deallocate(mach_task_self(), address, round_page(size));
-     return false;
-   }
- 
-   mMemory = toPointer(address);
-   Mapped(size);
-   return true;
- }
- 
-

+ 0 - 42
mozilla-esr52/patches/1362872.patch

@@ -1,42 +0,0 @@
-
-# HG changeset patch
-# User Makoto Kato <m_kato@ga2.so-net.ne.jp>
-# Date 1494225104 -32400
-# Node ID baad8a03819fa6e8f89503826016bb6907dd4740
-# Parent  d20789b15aa721de6ba901db9d37e21274777263
-Bug 1362872 - Use mbcs encoding for vswhere output. r=gps, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-We add vswhere.exe to support VS2017.  But the description output of this command is localized, so it causes UnicodeDecodeError.
-
-So we should use 'mbcs' encoding for this output on Windows platform. And for minor languages, we should also use replace to avoid decode error.
-
-test_toolchain_configure.py calls vc_compiler_path without correct host.kernel, so we should check current python platform.
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -408,19 +408,21 @@ def check_compiler(compiler, language, t
-         target_endianness=info.endianness,
-         flags=flags,
-     )
- 
- 
- @imports(_from='__builtin__', _import='open')
- @imports('json')
- @imports('subprocess')
-+@imports('sys')
- def get_vc_paths(topsrcdir):
-     def vswhere(args):
--        return json.loads(subprocess.check_output([os.path.join(topsrcdir, 'build/win32/vswhere.exe'), '-format', 'json'] + args))
-+        encoding = 'mbcs' if sys.platform == 'win32' else 'utf-8'
-+        return json.loads(subprocess.check_output([os.path.join(topsrcdir, 'build/win32/vswhere.exe'), '-format', 'json'] + args).decode(encoding, 'replace'))
- 
-     # Can't pass -requires with -legacy, so query each separately.
-     # Legacy versions first (VS2015)
-     for install in vswhere(['-legacy', '-version', '[14.0,15.0)']):
-         version = Version(install['installationVersion'])
-         # Skip anything older than VS2015.
-         if version < '14':
-             continue
-

+ 0 - 162
mozilla-esr52/patches/1363585.patch

@@ -1,162 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1494383722 -32400
-# Node ID 044e5f0f2a748b99352374cc29748bda2fa0a33f
-# Parent  05142d06f6e9c84f9a8df2cebcb3cbc9a3bbc7b6
-Bug 1363585 - Forbid boolean operations on @depends functions.  r=chmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Doing something like "not foo" when foo is a @depends function is never
-going to do what the user expects, while not necessarily leading to an
-error (like, when used in set_config).
-
-It is better to have an error in those cases where it's expected not to
-work, at the expense of making templates a little more verbose, rather
-than silently do something the user is not expecting.
-
-diff --git a/build/moz.configure/checks.configure b/build/moz.configure/checks.configure
---- a/build/moz.configure/checks.configure
-+++ b/build/moz.configure/checks.configure
-@@ -90,17 +90,17 @@ def checking(what, callback=None):
- #   check_prog('PROG', ('a', 'b'))
- # This will look for 'a' or 'b' in $PATH, and set_config PROG to the one
- # it can find. If PROG is already set from the environment or command line,
- # use that value instead.
- @template
- @imports(_from='mozbuild.shellutil', _import='quote')
- def check_prog(var, progs, what=None, input=None, allow_missing=False,
-                paths=None):
--    if input:
-+    if input is not None:
-         # Wrap input with type checking and normalization.
-         @depends(input)
-         def input(value):
-             if not value:
-                 return
-             if isinstance(value, str):
-                 return (value,)
-             if isinstance(value, (tuple, list)) and len(value) == 1:
-diff --git a/build/moz.configure/compile-checks.configure b/build/moz.configure/compile-checks.configure
---- a/build/moz.configure/compile-checks.configure
-+++ b/build/moz.configure/compile-checks.configure
-@@ -40,17 +40,18 @@ def try_compile(includes=None, body='', 
- #   used.
- # - `flags` are the flags to be passed to the compiler, in addition to `-c`.
- # - `includes` are additional includes, as file names, to appear before the
- #   header checked for.
- # - `when` is a depends function that if present will make performing the check
- #   conditional on the value of that function.
- @template
- def check_header(header, language='C++', flags=None, includes=None, when=None):
--    when = when or always
-+    if when is None:
-+        when = always
- 
-     if includes:
-         includes = includes[:]
-     else:
-         includes = []
-     includes.append(header)
- 
-     have_header = try_compile(includes=includes, language=language, flags=flags,
-@@ -92,22 +93,23 @@ def warnings_cxxflags():
- #   are tested.
- # - `when` (optional) is a @depends function or option name conditioning
- #   when the warning flag is wanted.
- # - `check`, when not set, skips checking whether the flag is supported and
- #   adds it to the list of warning flags unconditionally. This is only meant
- #   for add_gcc_warning().
- @template
- def check_and_add_gcc_warning(warning, compiler=None, when=None, check=True):
--    if compiler:
-+    if compiler is not None:
-         compilers = (compiler,)
-     else:
-         compilers = (c_compiler, cxx_compiler)
- 
--    when = when or always
-+    if when is None:
-+        when = always
- 
-     for c in compilers:
-         assert c in (c_compiler, cxx_compiler)
-         lang, warnings_flags = {
-             c_compiler: ('C', warnings_cflags),
-             cxx_compiler: ('C++', warnings_cxxflags),
-         }[c]
- 
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -560,19 +560,20 @@ def compiler(language, host_or_target, c
-     When `host_or_target` is `host`, `other_compiler` is the result of the
-     `compiler` template for the same `language` for `target`.
-     When `host_or_target` is `host` and the language is 'C++',
-     `other_c_compiler` is the result of the `compiler` template for the
-     language 'C' for `target`.
-     '''
-     assert host_or_target in (host, target)
-     assert language in ('C', 'C++')
--    assert language == 'C' or c_compiler
--    assert host_or_target == target or other_compiler
--    assert language == 'C' or host_or_target == target or other_c_compiler
-+    assert language == 'C' or c_compiler is not None
-+    assert host_or_target == target or other_compiler is not None
-+    assert language == 'C' or host_or_target == target or \
-+        other_c_compiler is not None
- 
-     host_or_target_str = {
-         host: 'host',
-         target: 'target',
-     }[host_or_target]
- 
-     var = {
-         ('C', target): 'CC',
-@@ -614,17 +615,20 @@ def compiler(language, host_or_target, c
-     # Derive the host compiler from the corresponding target compiler when no
-     # explicit compiler was given and we're not cross compiling. For the C++
-     # compiler, though, prefer to derive from the host C compiler when it
-     # doesn't match the target C compiler.
-     # As a special case, since clang supports all kinds of targets in the same
-     # executable, when cross compiling with clang, default to the same compiler
-     # as the target compiler, resetting flags.
-     if host_or_target == host:
--        args = (c_compiler, other_c_compiler) if other_c_compiler else ()
-+        if other_c_compiler is not None:
-+            args = (c_compiler, other_c_compiler)
-+        else:
-+            args = ()
- 
-         @depends(provided_compiler, other_compiler, cross_compiling, *args)
-         def provided_compiler(value, other_compiler, cross_compiling, *args):
-             if value:
-                 return value
-             c_compiler, other_c_compiler = args if args else (None, None)
-             if not cross_compiling and c_compiler == other_c_compiler:
-                 return other_compiler
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -52,16 +52,20 @@ class SandboxDependsFunction(object):
-                              % self.__name__)
- 
-     def __or__(self, other):
-         if not isinstance(other, SandboxDependsFunction):
-             raise ConfigureError('Can only do binary arithmetic operations '
-                                  'with another @depends function.')
-         return self._or(other).sandboxed
- 
-+    def __nonzero__(self):
-+        raise ConfigureError(
-+            'Cannot do boolean operations on @depends functions.')
-+
- 
- class DependsFunction(object):
-     __slots__ = (
-         '_func', '_name', 'dependencies', 'when', 'sandboxed', 'sandbox',
-         '_result')
- 
-     def __init__(self, sandbox, func, dependencies, when=None):
-         assert isinstance(sandbox, ConfigureSandbox)
-

+ 0 - 82
mozilla-esr52/patches/1363811-1.patch

@@ -1,82 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495001382 -32400
-# Node ID fb362996cf3f35784ae240639d15823b931ee39f
-# Parent  8b602649e6737c56519eb2753122696020b8096b
-Bug 1363811 - Change TestConfigure.test_depends_or to test more cases. r=cmanchester a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Also, test the results match what a normal "or" of the returned values
-would be. This makes it clearer how the feature is meant to work.
-
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -1287,40 +1287,45 @@ class TestConfigure(unittest.TestCase):
-         ''' + moz_configure):
-             self.get_config(['--enable-when'])
- 
-     def test_depends_or(self):
-         with self.moz_configure('''
-             option('--foo', nargs=1, help='foo')
-             @depends('--foo')
-             def foo(value):
--                return value or None
-+                return value or 0
- 
-             option('--bar', nargs=1, help='bar')
-             @depends('--bar')
-             def bar(value):
-+                return value or ''
-+
-+            option('--baz', nargs=1, help='baz')
-+            @depends('--baz')
-+            def baz(value):
-                 return value
- 
-             set_config('FOOBAR', foo | bar)
-+            set_config('FOOBARBAZ', foo | bar | baz)
-         '''):
--            config = self.get_config()
--            self.assertEqual(config, {
--                'FOOBAR': NegativeOptionValue(),
--            })
--
--            config = self.get_config(['--foo=foo'])
--            self.assertEqual(config, {
--                'FOOBAR': PositiveOptionValue(('foo',)),
--            })
--
--            config = self.get_config(['--bar=bar'])
--            self.assertEqual(config, {
--                'FOOBAR': PositiveOptionValue(('bar',)),
--            })
--
--            config = self.get_config(['--foo=foo', '--bar=bar'])
--            self.assertEqual(config, {
--                'FOOBAR': PositiveOptionValue(('foo',)),
--            })
-+            for foo_opt, foo_value in (
-+                ('',  0),
-+                ('--foo=foo', PositiveOptionValue(('foo',)))
-+            ):
-+                for bar_opt, bar_value in (
-+                    ('', ''),
-+                    ('--bar=bar', PositiveOptionValue(('bar',)))
-+                ):
-+                    for baz_opt, baz_value in (
-+                        ('', NegativeOptionValue()),
-+                        ('--baz=baz', PositiveOptionValue(('baz',)))
-+                    ):
-+                        config = self.get_config(
-+                            [x for x in (foo_opt, bar_opt, baz_opt) if x])
-+                        self.assertEqual(config, {
-+                            'FOOBAR': foo_value or bar_value,
-+                            'FOOBARBAZ': foo_value or bar_value or baz_value,
-+                        })
- 
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 43
mozilla-esr52/patches/1363811-2.patch

@@ -1,43 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495001808 -32400
-# Node ID aaad9077771908cdebf92459f016407ea846da84
-# Parent  fb362996cf3f35784ae240639d15823b931ee39f
-Bug 1363811 - Modify the name of the DependsFunction.__or__ implementation method. r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Like the test change, it makes the intent clearer.
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -118,23 +118,23 @@ class DependsFunction(object):
-             ', '.join(repr(d) for d in self.dependencies),
-         )
- 
-     def __or__(self, other):
-         if isinstance(other, SandboxDependsFunction):
-             other = self.sandbox._depends.get(other)
-         assert isinstance(other, DependsFunction)
-         assert self.sandbox is other.sandbox
--        return CombinedDependsFunction(self.sandbox, self.first_true,
-+        return CombinedDependsFunction(self.sandbox, self.or_impl,
-                                        (self, other))
- 
-     @staticmethod
--    def first_true(iterable):
--        # Like the builtin any(), but returns the first element that is true,
--        # instead of True. If none are true, returns the last element.
-+    def or_impl(iterable):
-+        # Applies "or" to all the items of iterable.
-+        # e.g. if iterable contains a, b and c, returns `a or b or c`.
-         for i in iterable:
-             if i:
-                 return i
-         return i
- 
- 
- class CombinedDependsFunction(DependsFunction):
-     def __init__(self, sandbox, func, dependencies):
-

+ 0 - 149
mozilla-esr52/patches/1363811-3.patch

@@ -1,149 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495002446 -32400
-# Node ID d517e034c9535cf3444a5ccd19bcf640f2db3b3c
-# Parent  aaad9077771908cdebf92459f016407ea846da84
-Bug 1363811 - Allow to combine two DependsFunctions with "&". r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Similar to how they can be combined with "|", we now allow using "&".
-As for "|", it would have been better if it were "and", but it's not
-possible to override "and" in python ; __and__ is for "&".
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -41,27 +41,34 @@ import mozpack.path as mozpath
- class ConfigureError(Exception):
-     pass
- 
- 
- class SandboxDependsFunction(object):
-     '''Sandbox-visible representation of @depends functions.'''
-     def __init__(self, unsandboxed):
-         self._or = unsandboxed.__or__
-+        self._and = unsandboxed.__and__
- 
-     def __call__(self, *arg, **kwargs):
-         raise ConfigureError('The `%s` function may not be called'
-                              % self.__name__)
- 
-     def __or__(self, other):
-         if not isinstance(other, SandboxDependsFunction):
-             raise ConfigureError('Can only do binary arithmetic operations '
-                                  'with another @depends function.')
-         return self._or(other).sandboxed
- 
-+    def __and__(self, other):
-+        if not isinstance(other, SandboxDependsFunction):
-+            raise ConfigureError('Can only do binary arithmetic operations '
-+                                 'with another @depends function.')
-+        return self._and(other).sandboxed
-+
-     def __nonzero__(self):
-         raise ConfigureError(
-             'Cannot do boolean operations on @depends functions.')
- 
- 
- class DependsFunction(object):
-     __slots__ = (
-         '_func', '_name', 'dependencies', 'when', 'sandboxed', 'sandbox',
-@@ -130,16 +137,33 @@ class DependsFunction(object):
-     def or_impl(iterable):
-         # Applies "or" to all the items of iterable.
-         # e.g. if iterable contains a, b and c, returns `a or b or c`.
-         for i in iterable:
-             if i:
-                 return i
-         return i
- 
-+    def __and__(self, other):
-+        if isinstance(other, SandboxDependsFunction):
-+            other = self.sandbox._depends.get(other)
-+        assert isinstance(other, DependsFunction)
-+        assert self.sandbox is other.sandbox
-+        return CombinedDependsFunction(self.sandbox, self.and_impl,
-+                                       (self, other))
-+
-+    @staticmethod
-+    def and_impl(iterable):
-+        # Applies "and" to all the items of iterable.
-+        # e.g. if iterable contains a, b and c, returns `a and b and c`.
-+        for i in iterable:
-+            if not i:
-+                return i
-+        return i
-+
- 
- class CombinedDependsFunction(DependsFunction):
-     def __init__(self, sandbox, func, dependencies):
-         flatten_deps = []
-         for d in dependencies:
-             if isinstance(d, CombinedDependsFunction) and d._func is func:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -1282,50 +1282,54 @@ class TestConfigure(unittest.TestCase):
-                               '--foo is not available in this configuration')
- 
-         # And similarly doesn't fail when the condition is true.
-         with self.moz_configure('''
-             imply_option('--foo', True)
-         ''' + moz_configure):
-             self.get_config(['--enable-when'])
- 
--    def test_depends_or(self):
-+    def test_depends_binary_ops(self):
-         with self.moz_configure('''
-             option('--foo', nargs=1, help='foo')
-             @depends('--foo')
-             def foo(value):
-                 return value or 0
- 
-             option('--bar', nargs=1, help='bar')
-             @depends('--bar')
-             def bar(value):
-                 return value or ''
- 
-             option('--baz', nargs=1, help='baz')
-             @depends('--baz')
-             def baz(value):
-                 return value
- 
--            set_config('FOOBAR', foo | bar)
--            set_config('FOOBARBAZ', foo | bar | baz)
-+            set_config('FOOorBAR', foo | bar)
-+            set_config('FOOorBARorBAZ', foo | bar | baz)
-+            set_config('FOOandBAR', foo & bar)
-+            set_config('FOOandBARandBAZ', foo & bar & baz)
-         '''):
-             for foo_opt, foo_value in (
-                 ('',  0),
-                 ('--foo=foo', PositiveOptionValue(('foo',)))
-             ):
-                 for bar_opt, bar_value in (
-                     ('', ''),
-                     ('--bar=bar', PositiveOptionValue(('bar',)))
-                 ):
-                     for baz_opt, baz_value in (
-                         ('', NegativeOptionValue()),
-                         ('--baz=baz', PositiveOptionValue(('baz',)))
-                     ):
-                         config = self.get_config(
-                             [x for x in (foo_opt, bar_opt, baz_opt) if x])
-                         self.assertEqual(config, {
--                            'FOOBAR': foo_value or bar_value,
--                            'FOOBARBAZ': foo_value or bar_value or baz_value,
-+                            'FOOorBAR': foo_value or bar_value,
-+                            'FOOorBARorBAZ': foo_value or bar_value or baz_value,
-+                            'FOOandBAR': foo_value and bar_value,
-+                            'FOOandBARandBAZ': foo_value and bar_value and baz_value,
-                         })
- 
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 192
mozilla-esr52/patches/1363811-4.patch

@@ -1,192 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495004941 -32400
-# Node ID 01aa12b787b2b5851462f0e37cc9866cffe7f180
-# Parent  d517e034c9535cf3444a5ccd19bcf640f2db3b3c
-Bug 1363811 - Allow "direct" access to namespace attributes from DependsFunctions. r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-To make things simpler in configure code, as well as to allow the linter
-to skip bugging about some --help dependencies, we make the following
-work:
-
-    something.some_attr
-
-where the result is equivalent to, currently:
-
-    delayed_getattr(something, 'some_attr')
-
-diff --git a/python/mozbuild/mozbuild/configure/__init__.py b/python/mozbuild/mozbuild/configure/__init__.py
---- a/python/mozbuild/mozbuild/configure/__init__.py
-+++ b/python/mozbuild/mozbuild/configure/__init__.py
-@@ -42,16 +42,17 @@ class ConfigureError(Exception):
-     pass
- 
- 
- class SandboxDependsFunction(object):
-     '''Sandbox-visible representation of @depends functions.'''
-     def __init__(self, unsandboxed):
-         self._or = unsandboxed.__or__
-         self._and = unsandboxed.__and__
-+        self._getattr = unsandboxed.__getattr__
- 
-     def __call__(self, *arg, **kwargs):
-         raise ConfigureError('The `%s` function may not be called'
-                              % self.__name__)
- 
-     def __or__(self, other):
-         if not isinstance(other, SandboxDependsFunction):
-             raise ConfigureError('Can only do binary arithmetic operations '
-@@ -59,16 +60,19 @@ class SandboxDependsFunction(object):
-         return self._or(other).sandboxed
- 
-     def __and__(self, other):
-         if not isinstance(other, SandboxDependsFunction):
-             raise ConfigureError('Can only do binary arithmetic operations '
-                                  'with another @depends function.')
-         return self._and(other).sandboxed
- 
-+    def __getattr__(self, key):
-+        return self._getattr(key).sandboxed
-+
-     def __nonzero__(self):
-         raise ConfigureError(
-             'Cannot do boolean operations on @depends functions.')
- 
- 
- class DependsFunction(object):
-     __slots__ = (
-         '_func', '_name', 'dependencies', 'when', 'sandboxed', 'sandbox',
-@@ -154,16 +158,29 @@ class DependsFunction(object):
-     def and_impl(iterable):
-         # Applies "and" to all the items of iterable.
-         # e.g. if iterable contains a, b and c, returns `a and b and c`.
-         for i in iterable:
-             if not i:
-                 return i
-         return i
- 
-+    def __getattr__(self, key):
-+        if key.startswith('_'):
-+            return super(DependsFunction, self).__getattr__(key)
-+        # Our function may return None or an object that simply doesn't have
-+        # the wanted key. In that case, just return None.
-+        return TrivialDependsFunction(
-+            self.sandbox, lambda x: getattr(x, key, None), [self], self.when)
-+
-+
-+class TrivialDependsFunction(DependsFunction):
-+    '''Like a DependsFunction, but the linter won't expect it to have a
-+    dependency on --help ever.'''
-+
- 
- class CombinedDependsFunction(DependsFunction):
-     def __init__(self, sandbox, func, dependencies):
-         flatten_deps = []
-         for d in dependencies:
-             if isinstance(d, CombinedDependsFunction) and d._func is func:
-                 for d2 in d.dependencies:
-                     if d2 not in flatten_deps:
-diff --git a/python/mozbuild/mozbuild/configure/lint.py b/python/mozbuild/mozbuild/configure/lint.py
---- a/python/mozbuild/mozbuild/configure/lint.py
-+++ b/python/mozbuild/mozbuild/configure/lint.py
-@@ -8,16 +8,17 @@ import inspect
- from functools import wraps
- from StringIO import StringIO
- from . import (
-     CombinedDependsFunction,
-     ConfigureError,
-     ConfigureSandbox,
-     DependsFunction,
-     SandboxedGlobal,
-+    TrivialDependsFunction,
- )
- from .lint_util import disassemble_as_iter
- from mozbuild.util import memoize
- 
- 
- class LintSandbox(ConfigureSandbox):
-     def __init__(self, environ=None, argv=None, stdout=None, stderr=None):
-         out = StringIO()
-@@ -69,17 +70,17 @@ class LintSandbox(ConfigureSandbox):
-                     else:
-                         dep = dep.option
-                     raise ConfigureError(
-                         '%s: The dependency on `%s` is unused.'
-                         % (loc, dep)
-                     )
- 
-     def _missing_help_dependency(self, obj):
--        if isinstance(obj, CombinedDependsFunction):
-+        if isinstance(obj, (CombinedDependsFunction, TrivialDependsFunction)):
-             return False
-         if isinstance(obj, DependsFunction):
-             if (self._help_option in obj.dependencies or
-                 obj in (self._always, self._never)):
-                 return False
-             func, glob = self.unwrap(obj._func)
-             # We allow missing --help dependencies for functions that:
-             # - don't use @imports
-diff --git a/python/mozbuild/mozbuild/test/configure/test_configure.py b/python/mozbuild/mozbuild/test/configure/test_configure.py
---- a/python/mozbuild/mozbuild/test/configure/test_configure.py
-+++ b/python/mozbuild/mozbuild/test/configure/test_configure.py
-@@ -1325,11 +1325,57 @@ class TestConfigure(unittest.TestCase):
-                             [x for x in (foo_opt, bar_opt, baz_opt) if x])
-                         self.assertEqual(config, {
-                             'FOOorBAR': foo_value or bar_value,
-                             'FOOorBARorBAZ': foo_value or bar_value or baz_value,
-                             'FOOandBAR': foo_value and bar_value,
-                             'FOOandBARandBAZ': foo_value and bar_value and baz_value,
-                         })
- 
-+    def test_depends_getattr(self):
-+        with self.moz_configure('''
-+            @imports(_from='mozbuild.util', _import='ReadOnlyNamespace')
-+            def namespace(**kwargs):
-+                return ReadOnlyNamespace(**kwargs)
-+
-+            option('--foo', nargs=1, help='foo')
-+            @depends('--foo')
-+            def foo(value):
-+                return value
-+
-+            option('--bar', nargs=1, help='bar')
-+            @depends('--bar')
-+            def bar(value):
-+                return value or None
-+
-+            @depends(foo, bar)
-+            def foobar(foo, bar):
-+                return namespace(foo=foo, bar=bar)
-+
-+            set_config('FOO', foobar.foo)
-+            set_config('BAR', foobar.bar)
-+            set_config('BAZ', foobar.baz)
-+        '''):
-+            config = self.get_config()
-+            self.assertEqual(config, {
-+                'FOO': NegativeOptionValue(),
-+            })
-+
-+            config = self.get_config(['--foo=foo'])
-+            self.assertEqual(config, {
-+                'FOO': PositiveOptionValue(('foo',)),
-+            })
-+
-+            config = self.get_config(['--bar=bar'])
-+            self.assertEqual(config, {
-+                'FOO': NegativeOptionValue(),
-+                'BAR': PositiveOptionValue(('bar',)),
-+            })
-+
-+            config = self.get_config(['--foo=foo', '--bar=bar'])
-+            self.assertEqual(config, {
-+                'FOO': PositiveOptionValue(('foo',)),
-+                'BAR': PositiveOptionValue(('bar',)),
-+            })
-+
- 
- if __name__ == '__main__':
-     main()
-

+ 0 - 265
mozilla-esr52/patches/1363811-5.patch

@@ -1,265 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495005214 -32400
-# Node ID 6d99c685aea3eb5433729a7ac9b5d2c63b6a1d5b
-# Parent  34fba311fd700b2b1598f6ccb3295aaa57721a17
-Bug 1363811 - Replace all uses of delayed_getattr(a, 'b') with a.b. r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-And remove delayed_getattr.
-
-diff -r 34fba311fd70 build/moz.configure/init.configure
---- a/build/moz.configure/init.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/build/moz.configure/init.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -65,20 +65,19 @@
- 
-     return result
- 
--set_config('TOPSRCDIR', delayed_getattr(check_build_environment, 'topsrcdir'))
--set_config('TOPOBJDIR', delayed_getattr(check_build_environment, 'topobjdir'))
--set_config('MOZ_BUILD_ROOT', delayed_getattr(check_build_environment,
--                                             'topobjdir'))
--set_config('DIST', delayed_getattr(check_build_environment, 'dist'))
-+set_config('TOPSRCDIR', check_build_environment.topsrcdir)
-+set_config('TOPOBJDIR', check_build_environment.topobjdir)
-+set_config('MOZ_BUILD_ROOT', check_build_environment.topobjdir)
-+set_config('DIST', check_build_environment.dist)
- 
- add_old_configure_assignment(
--    '_topsrcdir', delayed_getattr(check_build_environment, 'topsrcdir'))
-+    '_topsrcdir', check_build_environment.topsrcdir)
- add_old_configure_assignment(
--    '_objdir', delayed_getattr(check_build_environment, 'topobjdir'))
-+    '_objdir', check_build_environment.topobjdir)
- add_old_configure_assignment(
--    'MOZ_BUILD_ROOT', delayed_getattr(check_build_environment, 'topobjdir'))
-+    'MOZ_BUILD_ROOT', check_build_environment.topobjdir)
- add_old_configure_assignment(
--    'DIST', delayed_getattr(check_build_environment, 'dist'))
-+    'DIST', check_build_environment.dist)
- 
- option(env='MOZ_AUTOMATION', help='Enable options for automated builds')
- set_config('MOZ_AUTOMATION', depends_if('MOZ_AUTOMATION')(lambda x: True))
-@@ -540,21 +539,20 @@
-         INTEL_ARCHITECTURE=target.cpu in ('x86', 'x86_64') or None,
-     )
- 
--set_config('OS_TARGET', delayed_getattr(target_variables, 'OS_TARGET'))
-+set_config('OS_TARGET', target_variables.OS_TARGET)
- add_old_configure_assignment('OS_TARGET',
--                             delayed_getattr(target_variables, 'OS_TARGET'))
--set_config('OS_ARCH', delayed_getattr(target_variables, 'OS_ARCH'))
-+                             target_variables.OS_TARGET)
-+set_config('OS_ARCH', target_variables.OS_ARCH)
- add_old_configure_assignment('OS_ARCH',
--                             delayed_getattr(target_variables, 'OS_ARCH'))
--set_config('OS_TEST', delayed_getattr(target_variables, 'OS_TEST'))
-+                             target_variables.OS_ARCH)
-+set_config('OS_TEST', target_variables.OS_TEST)
- add_old_configure_assignment('OS_TEST',
--                             delayed_getattr(target_variables, 'OS_TEST'))
--set_config('CPU_ARCH', delayed_getattr(target, 'cpu'))
--add_old_configure_assignment('CPU_ARCH', delayed_getattr(target, 'cpu'))
--set_config('INTEL_ARCHITECTURE', delayed_getattr(target_variables,
--                                                 'INTEL_ARCHITECTURE'))
--set_config('TARGET_CPU', delayed_getattr(target, 'raw_cpu'))
--set_config('TARGET_OS', delayed_getattr(target, 'raw_os'))
-+                             target_variables.OS_TEST)
-+set_config('CPU_ARCH', target.cpu)
-+add_old_configure_assignment('CPU_ARCH', target.cpu)
-+set_config('INTEL_ARCHITECTURE', target_variables.INTEL_ARCHITECTURE)
-+set_config('TARGET_CPU', target.raw_cpu)
-+set_config('TARGET_OS', target.raw_os)
- 
- 
- @depends(host)
-@@ -567,10 +565,10 @@
-         HOST_OS_ARCH=os_arch,
-     )
- 
--set_config('HOST_CPU_ARCH', delayed_getattr(host, 'cpu'))
--set_config('HOST_OS_ARCH', delayed_getattr(host_variables, 'HOST_OS_ARCH'))
-+set_config('HOST_CPU_ARCH', host.cpu)
-+set_config('HOST_OS_ARCH', host_variables.HOST_OS_ARCH)
- add_old_configure_assignment('HOST_OS_ARCH',
--                             delayed_getattr(host_variables, 'HOST_OS_ARCH'))
-+                             host_variables.HOST_OS_ARCH)
- 
- @depends(target)
- def target_is_windows(target):
-@@ -703,15 +701,15 @@
- def is_nightly(milestone):
-     return milestone.is_nightly
- 
--set_config('GRE_MILESTONE', delayed_getattr(milestone, 'version'))
-+set_config('GRE_MILESTONE', milestone.version)
- set_config('NIGHTLY_BUILD', is_nightly)
- set_define('NIGHTLY_BUILD', is_nightly)
- add_old_configure_assignment('NIGHTLY_BUILD',
-                              is_nightly)
--set_config('RELEASE_OR_BETA', delayed_getattr(milestone, 'is_release_or_beta'))
--set_define('RELEASE_OR_BETA', delayed_getattr(milestone, 'is_release_or_beta'))
-+set_config('RELEASE_OR_BETA', milestone.is_release_or_beta)
-+set_define('RELEASE_OR_BETA', milestone.is_release_or_beta)
- add_old_configure_assignment('RELEASE_OR_BETA',
--                             delayed_getattr(milestone, 'is_release_or_beta'))
-+                             milestone.is_release_or_beta)
- 
- # The app update channel is 'default' when not supplied. The value is used in
- # the application's confvars.sh (and is made available to a project specific
-diff -r 34fba311fd70 build/moz.configure/keyfiles.configure
---- a/build/moz.configure/keyfiles.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/build/moz.configure/keyfiles.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -64,5 +64,5 @@
- 
- 
-     name = desc.upper().replace(' ', '_')
--    set_config('MOZ_%s_CLIENTID' % name, delayed_getattr(content, 'id'))
--    set_config('MOZ_%s_KEY' % name, delayed_getattr(content, 'secret'))
-+    set_config('MOZ_%s_CLIENTID' % name, content.id)
-+    set_config('MOZ_%s_KEY' % name, content.secret)
-diff -r 34fba311fd70 build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/build/moz.configure/toolchain.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -27,9 +27,9 @@
- # Until we move all the yasm consumers out of old-configure.
- # bug 1257904
- add_old_configure_assignment('_YASM_MAJOR_VERSION',
--                             delayed_getattr(yasm_version, 'major'))
-+                             yasm_version.major)
- add_old_configure_assignment('_YASM_MINOR_VERSION',
--                             delayed_getattr(yasm_version, 'minor'))
-+                             yasm_version.minor)
- 
- @depends(yasm, target)
- def yasm_asflags(yasm, target):
-@@ -606,7 +606,7 @@
-     # result from check_prog as CC/CXX/HOST_CC/HOST_CXX and b) have to let
-     # old-configure AC_SUBST it (because it's autoconf doing it, not us)
-     compiler = check_prog('_%s' % var, what=what, progs=default_compilers,
--                          input=delayed_getattr(provided_compiler, 'compiler'),
-+                          input=provided_compiler.compiler,
-                           paths=toolchain_search_path)
- 
-     @depends(compiler, provided_compiler, compiler_wrapper, host_or_target)
-@@ -752,11 +752,11 @@
-     # old-configure to do some of its still existing checks.
-     if language == 'C':
-         set_config(
--            '%s_TYPE' % var, delayed_getattr(valid_compiler, 'type'))
-+            '%s_TYPE' % var, valid_compiler.type)
-         add_old_configure_assignment(
--            '%s_TYPE' % var, delayed_getattr(valid_compiler, 'type'))
-+            '%s_TYPE' % var, valid_compiler.type)
-         add_old_configure_assignment(
--            '%s_VERSION' % var, delayed_getattr(valid_compiler, 'version'))
-+            '%s_VERSION' % var, valid_compiler.version)
- 
-     valid_compiler = compiler_class(valid_compiler)
- 
-diff -r 34fba311fd70 build/moz.configure/util.configure
---- a/build/moz.configure/util.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/build/moz.configure/util.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -366,27 +366,6 @@
- never = dependable(False)
- 
- 
--# Some @depends function return namespaces, and one could want to use one
--# specific attribute from such a namespace as a "value" given to functions
--# such as `set_config`. But those functions do not take immediate values.
--# The `delayed_getattr` function allows access to attributes from the result
--# of a @depends function in a non-immediate manner.
--#   @depends('--option')
--#   def option(value)
--#       return namespace(foo=value)
--#   set_config('FOO', delayed_getattr(option, 'foo')
--@template
--def delayed_getattr(func, key):
--    @depends(func)
--    def result(value):
--        # The @depends function we're being passed may have returned
--        # None, or an object that simply doesn't have the wanted key.
--        # In that case, just return None.
--        return getattr(value, key, None)
--
--    return result
--
--
- # Like @depends, but the decorated function is only called if one of the
- # arguments it would be called with has a positive value (bool(value) is True)
- @template
-diff -r 34fba311fd70 build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/build/moz.configure/windows.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -153,7 +153,7 @@
- 
- add_old_configure_assignment(
-     'WINDOWSSDKDIR',
--    delayed_getattr(valid_windows_sdk_dir, 'path'))
-+    valid_windows_sdk_dir.path)
- add_old_configure_assignment(
-     'MOZ_WINSDK_MAXVER',
-     depends(valid_windows_sdk_dir)(
-diff -r 34fba311fd70 js/ffi.configure
---- a/js/ffi.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/js/ffi.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -56,5 +56,5 @@
-         dir=target_dir
-     )
- 
--set_config('FFI_TARGET', delayed_getattr(ffi_target, 'name'))
--set_config('FFI_TARGET_DIR', delayed_getattr(ffi_target, 'dir'))
-+set_config('FFI_TARGET', ffi_target.name)
-+set_config('FFI_TARGET_DIR', ffi_target.dir)
-diff -r 34fba311fd70 moz.configure
---- a/moz.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/moz.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -89,11 +89,11 @@
-                          has_clone='0')
- 
- set_define('GTEST_OS_LINUX_ANDROID',
--           delayed_getattr(linux_gtest_defines, 'os_linux_android'))
-+           linux_gtest_defines.os_linux_android)
- set_define('GTEST_USE_OWN_TR1_TUPLE',
--           delayed_getattr(linux_gtest_defines, 'use_own_tr1_tuple'))
-+           linux_gtest_defines.use_own_tr1_tuple)
- set_define('GTEST_HAS_CLONE',
--           delayed_getattr(linux_gtest_defines, 'has_clone'))
-+           linux_gtest_defines.has_clone)
- 
- js_option('--enable-debug',
-           nargs='?',
-@@ -258,11 +258,11 @@
-     if target.os == 'GNU' and target.kernel == 'Linux':
-         return namespace(RPMBUILD=('rpmbuild',))
- 
--check_prog('DSYMUTIL', delayed_getattr(extra_programs, 'DSYMUTIL'),
-+check_prog('DSYMUTIL', extra_programs.DSYMUTIL,
-            allow_missing=True)
--check_prog('GENISOIMAGE', delayed_getattr(extra_programs, 'GENISOIMAGE'),
-+check_prog('GENISOIMAGE', extra_programs.GENISOIMAGE,
-            allow_missing=True)
--check_prog('RPMBUILD', delayed_getattr(extra_programs, 'RPMBUILD'),
-+check_prog('RPMBUILD', extra_programs.RPMBUILD,
-            allow_missing=True)
- 
- option('--enable-system-hunspell',
-diff -r 34fba311fd70 toolkit/moz.configure
---- a/toolkit/moz.configure	Wed May 17 16:09:01 2017 +0900
-+++ b/toolkit/moz.configure	Mon Aug 13 21:22:00 2018 +0200
-@@ -332,11 +332,11 @@
-     if freetype2_combined_info:
-         return freetype2_combined_info
- 
--set_config('FT2_LIBS', delayed_getattr(ft2_info, 'libs'))
-+set_config('FT2_LIBS', ft2_info.libs)
- add_old_configure_assignment('FT2_LIBS',
--                             delayed_getattr(ft2_info, 'libs'))
-+                             ft2_info.libs)
- add_old_configure_assignment('FT2_CFLAGS',
--                             delayed_getattr(ft2_info, 'cflags'))
-+                             ft2_info.cflags)
- 
- # Apple platform decoder support
- # ==============================================================

+ 0 - 57
mozilla-esr52/patches/1363811-6.patch

@@ -1,57 +0,0 @@
-
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1495010005 -32400
-# Node ID d4687badde12c0a092199c1f016906aebea1e5df
-# Parent  80840e846c7ddcc384f709910e1e28ab9e48a447
-Bug 1363811 - Replace is_nightly with milestone.is_nightly. r=cmanchester, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-And remove is_nightly.
-
-diff -r 80840e846c7d build/moz.configure/init.configure
---- a/build/moz.configure/init.configure	Wed May 17 16:13:34 2017 +0900
-+++ b/build/moz.configure/init.configure	Mon Aug 13 21:27:20 2018 +0200
-@@ -697,15 +697,10 @@
-                      is_nightly=is_nightly,
-                      is_release_or_beta=is_release_or_beta)
- 
--@depends(milestone)
--def is_nightly(milestone):
--    return milestone.is_nightly
--
- set_config('GRE_MILESTONE', milestone.version)
--set_config('NIGHTLY_BUILD', is_nightly)
--set_define('NIGHTLY_BUILD', is_nightly)
--add_old_configure_assignment('NIGHTLY_BUILD',
--                             is_nightly)
-+set_config('NIGHTLY_BUILD', milestone.is_nightly)
-+set_define('NIGHTLY_BUILD', milestone.is_nightly)
-+add_old_configure_assignment('NIGHTLY_BUILD', milestone.is_nightly)
- set_config('RELEASE_OR_BETA', milestone.is_release_or_beta)
- set_define('RELEASE_OR_BETA', milestone.is_release_or_beta)
- add_old_configure_assignment('RELEASE_OR_BETA',
-diff -r 80840e846c7d mobile/android/moz.configure
---- a/mobile/android/moz.configure	Wed May 17 16:13:34 2017 +0900
-+++ b/mobile/android/moz.configure	Mon Aug 13 21:27:20 2018 +0200
-@@ -39,7 +39,7 @@
- 
- project_flag('MOZ_ANDROID_CUSTOM_TABS',
-              help='Enable support for Android custom tabs',
--             default=delayed_getattr(milestone, 'is_nightly'))
-+             default=milestone.is_nightly)
- 
- # Enable the Switchboard A/B framework code.
- # Note: The framework is always included in the app. This flag controls
-diff -r 80840e846c7d toolkit/moz.configure
---- a/toolkit/moz.configure	Wed May 17 16:13:34 2017 +0900
-+++ b/toolkit/moz.configure	Mon Aug 13 21:27:20 2018 +0200
-@@ -511,7 +511,7 @@
- 
- option(env='MOZ_PHOTON_ANIMATIONS',
-        help='Enable Photon UI animations',
--       default=is_nightly)
-+       default=milestone.is_nightly)
- 
- @depends('MOZ_PHOTON_ANIMATIONS')
- def photon_animations(value):

+ 0 - 186
mozilla-esr52/patches/1364137.patch

@@ -1,186 +0,0 @@
-
-# HG changeset patch
-# User Bob Owen <bobowencode@gmail.com>
-# Date 1500719544 -3600
-# Node ID c2635cb28a2fb7de2bb03e85a3706cbe78f196b5
-# Parent  436dee8a429bc210409a2af030d24c186a8d6eac
-Bug 1364137 - Get both 32-bit and 64-bit registry values when searching for the Windows SDK. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-The values that we need to find in the registry can be inconsistent across
-different installations, so we retrieve values from both views in our search
-for a valid SDK. This also ensures this works for 32-bit and 64-bit python.
-
-diff --git a/build/moz.configure/util.configure b/build/moz.configure/util.configure
---- a/build/moz.configure/util.configure
-+++ b/build/moz.configure/util.configure
-@@ -219,103 +219,124 @@ def unique_list(l):
- # Windows.
- # The `pattern` argument is a string starting with HKEY_ and giving the full
- # "path" of the registry key to get the value for, with backslash separators.
- # The string can contains wildcards ('*').
- # The result of this functions is an enumerator yielding tuples for each
- # match. Each of these tuples contains the key name matching wildcards
- # followed by the value.
- #
-+# The `get_32_and_64_bit` argument is a boolean, if True then it will return the
-+# values from the 32-bit and 64-bit registry views. This defaults to False,
-+# which will return the view depending on the bitness of python.
-+#
- # Examples:
- #   get_registry_values(r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\'
- #                       r'Windows Kits\Installed Roots\KitsRoot*')
- #   yields e.g.:
- #     ('KitsRoot81', r'C:\Program Files (x86)\Windows Kits\8.1\')
- #     ('KitsRoot10', r'C:\Program Files (x86)\Windows Kits\10\')
- #
- #   get_registry_values(r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\'
- #                       r'Windows Kits\Installed Roots\KitsRoot8.1')
- #   yields e.g.:
- #     (r'C:\Program Files (x86)\Windows Kits\8.1\',)
- #
- #   get_registry_values(r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\'
-+#                       r'Windows Kits\Installed Roots\KitsRoot8.1',
-+#                       get_32_and_64_bit=True)
-+#   yields e.g.:
-+#     (r'C:\Program Files (x86)\Windows Kits\8.1\',)
-+#     (r'C:\Program Files\Windows Kits\8.1\',)
-+#
-+#   get_registry_values(r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\'
- #                       r'Windows Kits\*\KitsRoot*')
- #   yields e.g.:
- #     ('Installed Roots', 'KitsRoot81',
- #      r'C:\Program Files (x86)\Windows Kits\8.1\')
- #     ('Installed Roots', 'KitsRoot10',
- #      r'C:\Program Files (x86)\Windows Kits\10\')
- #
- #   get_registry_values(r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\'
- #                       r'VisualStudio\VC\*\x86\*\Compiler')
- #   yields e.g.:
- #     ('19.0', 'arm', r'C:\...\amd64_arm\cl.exe')
- #     ('19.0', 'x64', r'C:\...\amd64\cl.exe')
- #     ('19.0', 'x86', r'C:\...\amd64_x86\cl.exe')
- @imports(_import='_winreg', _as='winreg')
- @imports(_from='__builtin__', _import='WindowsError')
- @imports(_from='fnmatch', _import='fnmatch')
--def get_registry_values(pattern):
-+def get_registry_values(pattern, get_32_and_64_bit=False):
-     def enum_helper(func, key):
-         i = 0
-         while True:
-             try:
-                 yield func(key, i)
-             except WindowsError:
-                 break
-             i += 1
- 
--    def get_keys(key, pattern):
-+    def get_keys(key, pattern, access_mask):
-         try:
--            s = winreg.OpenKey(key, '\\'.join(pattern[:-1]))
-+            s = winreg.OpenKey(key, '\\'.join(pattern[:-1]), 0, access_mask)
-         except WindowsError:
-             return
-         for k in enum_helper(winreg.EnumKey, s):
-             if fnmatch(k, pattern[-1]):
-                 try:
--                    yield k, winreg.OpenKey(s, k)
-+                    yield k, winreg.OpenKey(s, k, 0, access_mask)
-                 except WindowsError:
-                     pass
- 
--    def get_values(key, pattern):
-+    def get_values(key, pattern, access_mask):
-         try:
--            s = winreg.OpenKey(key, '\\'.join(pattern[:-1]))
-+            s = winreg.OpenKey(key, '\\'.join(pattern[:-1]), 0, access_mask)
-         except WindowsError:
-             return
-         for k, v, t in enum_helper(winreg.EnumValue, s):
-             if fnmatch(k, pattern[-1]):
-                 yield k, v
- 
-     def split_pattern(pattern):
-         subpattern = []
-         for p in pattern:
-             subpattern.append(p)
-             if '*' in p:
-                 yield subpattern
-                 subpattern = []
-         if subpattern:
-             yield subpattern
- 
-+    def get_all_values(keys, pattern, access_mask):
-+        for i, p in enumerate(pattern):
-+            next_keys = []
-+            for base_key in keys:
-+                matches = base_key[:-1]
-+                base_key = base_key[-1]
-+                if i == len(pattern) - 1:
-+                    want_name = '*' in p[-1]
-+                    for name, value in get_values(base_key, p, access_mask):
-+                        yield matches + ((name, value) if want_name else (value,))
-+                else:
-+                    for name, k in get_keys(base_key, p, access_mask):
-+                        next_keys.append(matches + (name, k))
-+            keys = next_keys
-+
-     pattern = pattern.split('\\')
-     assert pattern[0].startswith('HKEY_')
-     keys = [(getattr(winreg, pattern[0]),)]
-     pattern = list(split_pattern(pattern[1:]))
--    for i, p in enumerate(pattern):
--        next_keys = []
--        for base_key in keys:
--            matches = base_key[:-1]
--            base_key = base_key[-1]
--            if i == len(pattern) - 1:
--                want_name = '*' in p[-1]
--                for name, value in get_values(base_key, p):
--                    yield matches + ((name, value) if want_name else (value,))
--            else:
--                for name, k in get_keys(base_key, p):
--                    next_keys.append(matches + (name, k))
--        keys = next_keys
-+    if get_32_and_64_bit:
-+        for match in get_all_values(keys, pattern, winreg.KEY_READ | winreg.KEY_WOW64_32KEY):
-+            yield match
-+        for match in get_all_values(keys, pattern, winreg.KEY_READ | winreg.KEY_WOW64_64KEY):
-+            yield match
-+    else:
-+        for match in get_all_values(keys, pattern, winreg.KEY_READ):
-+            yield match
- 
- 
- @imports(_from='mozbuild.configure.util', _import='Version', _as='_Version')
- def Version(v):
-     'A version number that can be compared usefully.'
-     return _Version(v)
- 
- # Denotes a deprecated option. Combines option() and @depends:
-diff --git a/build/moz.configure/windows.configure b/build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure
-+++ b/build/moz.configure/windows.configure
-@@ -28,19 +28,19 @@ option(env='WINDOWSSDKDIR', nargs=1,
- 
- @depends('WINDOWSSDKDIR', host)
- def windows_sdk_dir(value, host):
-     if value:
-         return value
-     if host.kernel != 'WINNT':
-         return ()
- 
--    return tuple(x[1] for x in get_registry_values(
-+    return set(x[1] for x in get_registry_values(
-         r'HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Kits\Installed Roots'
--        r'\KitsRoot*'))
-+        r'\KitsRoot*', get_32_and_64_bit=True))
- 
- # The Windows SDK 8.1 and 10 have different layouts. The former has
- # $SDK/include/$subdir, while the latter has $SDK/include/$version/$subdir.
- # The vcvars* scripts don't actually care about the version, they just take
- # the last alphanumerically.
- # The $SDK/lib directories always have version subdirectories, but while the
- # versions match the one in $SDK/include for SDK 10, it's "winv6.3" for SDK
- # 8.1.
-

+ 0 - 36
mozilla-esr52/patches/1370865.patch

@@ -1,36 +0,0 @@
-
-# HG changeset patch
-# User Masatoshi Kimura <VYV03354@nifty.ne.jp>
-# Date 1496667654 -32400
-# Node ID 9493b84ba6a07e575ab0be68f21e9586908021ae
-# Parent  b977e23d261c81568a53fabfaa8885566f76fe47
-Bug 1370865 - Suppress more MSVC warnings in gfx/angle. r=jgilbert, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/gfx/angle/src/libANGLE/moz.build b/gfx/angle/src/libANGLE/moz.build
---- a/gfx/angle/src/libANGLE/moz.build
-+++ b/gfx/angle/src/libANGLE/moz.build
-@@ -347,16 +347,22 @@ if CONFIG['GNU_CXX']:
-             '-Wno-unused-private-field',
-         ]
-     else:
-         CXXFLAGS += [
-             '-Wno-shadow-compatible-local',
-             '-Wno-shadow-local',
-         ]
- 
-+if CONFIG['_MSC_VER'] and not CONFIG['CLANG_CL']:
-+    CXXFLAGS += [
-+        '-wd4018', # '>' : signed/unsigned mismatch
-+        '-wd4530', # C++ exception handler used, without /EHsc
-+    ]
-+
- if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
-     LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
- 
- DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
- DEFINES['_HAS_EXCEPTIONS'] = 0
- 
- if not CONFIG['MOZ_DEBUG']:
-     DEFINES['_SECURE_SCL'] = 0
-

+ 0 - 204
mozilla-esr52/patches/1376057.patch

@@ -1,204 +0,0 @@
-
-# HG changeset patch
-# User Jeff Gilbert <jgilbert@mozilla.com>
-# Date 1490226191 25200
-# Node ID 37e047b6187f8a2cc9ce30268d42977e679db84e
-# Parent  7da6c99070996a8d0baa4013d4c0b515f8045fa2
-Bug 1376057 - Replace MSVC wrappers with std::exception::_Set_raise_handler. - r=froydnj, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/config/msvc-stl-wrapper.template.h b/config/msvc-stl-wrapper.template.h
---- a/config/msvc-stl-wrapper.template.h
-+++ b/config/msvc-stl-wrapper.template.h
-@@ -14,22 +14,16 @@
- 
- // Include mozalloc after the STL header and all other headers it includes
- // have been preprocessed.
- #if !defined(MOZ_INCLUDE_MOZALLOC_H)
- #  define MOZ_INCLUDE_MOZALLOC_H
- #  define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
- #endif
- 
--// Code built with !_HAS_EXCEPTIONS calls std::_Throw(), but the win2k
--// CRT doesn't export std::_Throw().  So we define it.
--#ifndef mozilla_Throw_h
--#  include "mozilla/throw_msvc.h"
--#endif
--
- #ifdef _DEBUG
- // From
- //   http://msdn.microsoft.com/en-us/library/aa985982%28VS.80%29.aspx
- // and
- //   http://msdn.microsoft.com/en-us/library/aa985965%28VS.80%29.aspx
- // there appear to be two types of STL container checking.  The
- // former is enabled by -D_DEBUG (which is implied by -MDd or -MTd), and
- // looks to be full generation/mutation checked iterators as done by
-diff --git a/memory/mozalloc/moz.build b/memory/mozalloc/moz.build
---- a/memory/mozalloc/moz.build
-+++ b/memory/mozalloc/moz.build
-@@ -12,20 +12,16 @@ EXPORTS.mozilla += [
- ]
- 
- if CONFIG['WRAP_STL_INCLUDES']:
-     if CONFIG['GNU_CXX']:
-         EXPORTS.mozilla += ['throw_gcc.h']
-     elif CONFIG['_MSC_VER']:
-         DEFINES['_HAS_EXCEPTIONS'] = 0
-         if CONFIG['MOZ_MSVC_STL_WRAP_RAISE']:
--            EXPORTS.mozilla += [
--                'msvc_raise_wrappers.h',
--                'throw_msvc.h',
--            ]
-             SOURCES += [
-                 'msvc_raise_wrappers.cpp',
-             ]
- 
- if CONFIG['OS_TARGET'] == 'WINNT':
-     # Keep this file separate to avoid #include'ing windows.h everywhere.
-     SOURCES += [
-         'winheap.cpp',
-diff --git a/memory/mozalloc/msvc_raise_wrappers.cpp b/memory/mozalloc/msvc_raise_wrappers.cpp
---- a/memory/mozalloc/msvc_raise_wrappers.cpp
-+++ b/memory/mozalloc/msvc_raise_wrappers.cpp
-@@ -1,63 +1,21 @@
- /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-  * vim: sw=4 ts=4 et :
-  */
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this
-  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
--#include <stdio.h>
--
-+#include <exception>
- #include "mozalloc_abort.h"
- 
--__declspec(noreturn) static void abort_from_exception(const char* const which,
--                                                      const char* const what);
--static void
--abort_from_exception(const char* const which,  const char* const what)
-+static void __cdecl
-+RaiseHandler(const std::exception& e)
- {
--    fprintf(stderr, "fatal: STL threw %s: ", which);
--    mozalloc_abort(what);
--}
--
--namespace std {
--
--// NB: user code is not supposed to touch the std:: namespace.  We're
--// doing this after careful review because we want to define our own
--// exception throwing semantics.  Don't try this at home!
--
--MFBT_API __declspec(noreturn) void
--moz_Xinvalid_argument(const char* what)
--{
--    abort_from_exception("invalid_argument", what);
-+    mozalloc_abort(e.what());
- }
- 
--MFBT_API __declspec(noreturn) void
--moz_Xlength_error(const char* what)
--{
--    abort_from_exception("length_error", what);
--}
--
--MFBT_API __declspec(noreturn) void
--moz_Xout_of_range(const char* what)
--{
--    abort_from_exception("out_of_range", what);
--}
--
--MFBT_API __declspec(noreturn) void
--moz_Xoverflow_error(const char* what)
--{
--    abort_from_exception("overflow_error", what);
--}
--
--MFBT_API __declspec(noreturn) void
--moz_Xruntime_error(const char* what)
--{
--    abort_from_exception("runtime_error", what);
--}
--
--MFBT_API __declspec(noreturn) void
--moz_Xbad_function_call()
--{
--    abort_from_exception("bad_function_call", "bad function call");
--}
--
--} // namespace std
-+static struct StaticScopeStruct final {
-+    StaticScopeStruct() {
-+        std::exception::_Set_raise_handler(RaiseHandler);
-+    }
-+} StaticScopeInvoke;
-diff --git a/memory/mozalloc/msvc_raise_wrappers.h b/memory/mozalloc/msvc_raise_wrappers.h
-deleted file mode 100644
---- a/memory/mozalloc/msvc_raise_wrappers.h
-+++ /dev/null
-@@ -1,41 +0,0 @@
--/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-- * vim: sw=4 ts=4 et :
-- */
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--#ifndef mozilla_msvc_raise_wrappers_h
--#define mozilla_msvc_raise_wrappers_h
--
--#ifdef _XSTDDEF_
--#  error "Unable to wrap _RAISE(); CRT _RAISE() already defined"
--#endif
--#ifdef _XUTILITY_
--#  error "Unable to wrap _X[exception](); CRT versions already declared"
--#endif
--#ifdef _FUNCTIONAL_
--#  error "Unable to wrap _Xbad_function_call(); CRT version already declared"
--#endif
--
--#include "mozilla/mozalloc_abort.h"
--
--// xutility will declare the following functions in the std namespace.
--// We #define them to be named differently so we can ensure the exception
--// throwing semantics of these functions work exactly the way we want, by
--// defining our own versions in msvc_raise_wrappers.cpp.
--#  define _Xinvalid_argument  moz_Xinvalid_argument
--#  define _Xlength_error      moz_Xlength_error
--#  define _Xout_of_range      moz_Xout_of_range
--#  define _Xoverflow_error    moz_Xoverflow_error
--#  define _Xruntime_error     moz_Xruntime_error
--// used by <functional>
--#  define _Xbad_function_call moz_Xbad_function_call
--
--#  include <xstddef>
--#  include <xutility>
--
--#  undef _RAISE
--#  define _RAISE(x) mozalloc_abort((x).what())
--
--#endif  // ifndef mozilla_msvc_raise_wrappers_h
-diff --git a/memory/mozalloc/throw_msvc.h b/memory/mozalloc/throw_msvc.h
-deleted file mode 100644
---- a/memory/mozalloc/throw_msvc.h
-+++ /dev/null
-@@ -1,17 +0,0 @@
--/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*-
-- * vim: sw=4 ts=4 et :
-- */
--/* This Source Code Form is subject to the terms of the Mozilla Public
-- * License, v. 2.0. If a copy of the MPL was not distributed with this
-- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
--
--#ifndef mozilla_throw_msvc_h
--#define mozilla_throw_msvc_h
--
--#if defined(MOZ_MSVC_STL_WRAP_RAISE)
--#  include "msvc_raise_wrappers.h"
--#else
--#  error "Unknown STL wrapper tactic"
--#endif
--
--#endif  // mozilla_throw_msvc_h
-

+ 0 - 26
mozilla-esr52/patches/1391547-DIASDK.patch

@@ -1,26 +0,0 @@
-
-# HG changeset patch
-# User Makoto Kato <m_kato@ga2.so-net.ne.jp>
-# Date 1503382567 -32400
-# Node ID 2a1d927227787a4aa6abf3401286d564a2dd4b7f
-# Parent  21ee1d9cf4d206bec71c165adb6ab6acf56ba254
-Bug 1391547 - DIA SDK is missing when using MSVS2017. r=ted.mielczarek, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-MSVC path: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Tools\MSVC\14.11.25503
-DIA SDK path: C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\DIA SDK
-
-dia_sdk_dir of windows.configure tries finding invalid path.
-
-diff -r 21ee1d9cf4d2 build/moz.configure/windows.configure
---- a/build/moz.configure/windows.configure	Thu Nov 02 11:10:39 2017 -0400
-+++ b/build/moz.configure/windows.configure	Mon Aug 13 17:49:55 2018 +0200
-@@ -273,7 +273,7 @@
-         else:
-             # This would be easier if we had the installationPath that
-             # get_vc_paths works with, since 'DIA SDK' is relative to that.
--             path = os.path.normpath(os.path.join(vc_path, r'..\..\..\..\..\..\..\DIA SDK'))
-+            path = os.path.normpath(os.path.join(vc_path, r'..\..\..\..\DIA SDK'))
-         if isdir(path):
-             return path
- 

+ 0 - 135
mozilla-esr52/patches/1403945.patch

@@ -1,135 +0,0 @@
-
-# HG changeset patch
-# User Milan Sreckovic <milan@mozilla.com>
-# Date 1506608470 14400
-# Node ID 9bd05768af69c88d44b84ffcaa9a2644d9a0a6ec
-# Parent  16b2013a1ff8344fad506199fde28118257a7a29
-Bug 1403945 - Add utility functions to recognize OS X 10.13. r=mstange, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/widget/GfxDriverInfo.h b/widget/GfxDriverInfo.h
---- a/widget/GfxDriverInfo.h
-+++ b/widget/GfxDriverInfo.h
-@@ -53,16 +53,17 @@ enum class OperatingSystem {
-   OSX10_5,
-   OSX10_6,
-   OSX10_7,
-   OSX10_8,
-   OSX10_9,
-   OSX10_10,
-   OSX10_11,
-   OSX10_12,
-+  OSX10_13,
-   Android,
-   Ios
- };
- 
- enum VersionComparisonOp {
-   DRIVER_LESS_THAN,             // driver <  version
-   DRIVER_BUILD_ID_LESS_THAN,    // driver build id <  version
-   DRIVER_LESS_THAN_OR_EQUAL,    // driver <= version
-diff --git a/widget/GfxInfoBase.cpp b/widget/GfxInfoBase.cpp
---- a/widget/GfxInfoBase.cpp
-+++ b/widget/GfxInfoBase.cpp
-@@ -279,16 +279,18 @@ BlacklistOSToOperatingSystem(const nsASt
-   else if (os.EqualsLiteral("Darwin 13"))
-     return OperatingSystem::OSX10_9;
-   else if (os.EqualsLiteral("Darwin 14"))
-     return OperatingSystem::OSX10_10;
-   else if (os.EqualsLiteral("Darwin 15"))
-     return OperatingSystem::OSX10_11;
-   else if (os.EqualsLiteral("Darwin 16"))
-     return OperatingSystem::OSX10_12;
-+  else if (os.EqualsLiteral("Darwin 17"))
-+    return OperatingSystem::OSX10_13;
-   else if (os.EqualsLiteral("Android"))
-     return OperatingSystem::Android;
-   // For historical reasons, "All" in blocklist means "All Windows"
-   else if (os.EqualsLiteral("All"))
-     return OperatingSystem::Windows;
- 
-   return OperatingSystem::Unknown;
- }
-diff --git a/widget/cocoa/GfxInfo.mm b/widget/cocoa/GfxInfo.mm
---- a/widget/cocoa/GfxInfo.mm
-+++ b/widget/cocoa/GfxInfo.mm
-@@ -49,16 +49,18 @@ OSXVersionToOperatingSystem(uint32_t aOS
-       case 9:
-         return OperatingSystem::OSX10_9;
-       case 10:
-         return OperatingSystem::OSX10_10;
-       case 11:
-         return OperatingSystem::OSX10_11;
-       case 12:
-         return OperatingSystem::OSX10_12;
-+      case 13:
-+        return OperatingSystem::OSX10_13;
-     }
-   }
- 
-   return OperatingSystem::Unknown;
- }
- // The following three functions are derived from Chromium code
- static CFTypeRef SearchPortForProperty(io_registry_entry_t dspPort,
-                                        CFStringRef propertyName)
-diff --git a/widget/cocoa/nsCocoaFeatures.h b/widget/cocoa/nsCocoaFeatures.h
---- a/widget/cocoa/nsCocoaFeatures.h
-+++ b/widget/cocoa/nsCocoaFeatures.h
-@@ -16,16 +16,17 @@ class nsCocoaFeatures {
- public:
-   static int32_t OSXVersion();
-   static int32_t OSXVersionMajor();
-   static int32_t OSXVersionMinor();
-   static int32_t OSXVersionBugFix();
-   static bool OnYosemiteOrLater();
-   static bool OnElCapitanOrLater();
-   static bool OnSierraOrLater();
-+  static bool OnHighSierraOrLater();
- 
-   static bool IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix=0);
- 
-   // These are utilities that do not change or depend on the value of mOSXVersion
-   // and instead just encapsulate the encoding algorithm.  Note that GetVersion
-   // actually adjusts to the lowest supported OS, so it will always return
-   // a "supported" version.  GetSystemVersion does not make any modifications.
-   static void GetSystemVersion(int &aMajor, int &aMinor, int &aBugFix);
-diff --git a/widget/cocoa/nsCocoaFeatures.mm b/widget/cocoa/nsCocoaFeatures.mm
---- a/widget/cocoa/nsCocoaFeatures.mm
-+++ b/widget/cocoa/nsCocoaFeatures.mm
-@@ -14,16 +14,17 @@
- #define MAC_OS_X_VERSION_MASK      0x0000FFFF
- #define MAC_OS_X_VERSION_10_0_HEX  0x00001000
- #define MAC_OS_X_VERSION_10_7_HEX  0x00001070
- #define MAC_OS_X_VERSION_10_8_HEX  0x00001080
- #define MAC_OS_X_VERSION_10_9_HEX  0x00001090
- #define MAC_OS_X_VERSION_10_10_HEX 0x000010A0
- #define MAC_OS_X_VERSION_10_11_HEX 0x000010B0
- #define MAC_OS_X_VERSION_10_12_HEX 0x000010C0
-+#define MAC_OS_X_VERSION_10_13_HEX 0x000010D0
- 
- #include "nsCocoaFeatures.h"
- #include "nsCocoaUtils.h"
- #include "nsDebug.h"
- #include "nsObjCExceptions.h"
- 
- #import <Cocoa/Cocoa.h>
- 
-@@ -163,12 +164,18 @@ nsCocoaFeatures::OnElCapitanOrLater()
- 
- /* static */ bool
- nsCocoaFeatures::OnSierraOrLater()
- {
-     return (OSXVersion() >= MAC_OS_X_VERSION_10_12_HEX);
- }
- 
- /* static */ bool
-+nsCocoaFeatures::OnHighSierraOrLater()
-+{
-+    return (OSXVersion() >= MAC_OS_X_VERSION_10_13_HEX);
-+}
-+
-+/* static */ bool
- nsCocoaFeatures::IsAtLeastVersion(int32_t aMajor, int32_t aMinor, int32_t aBugFix)
- {
-     return OSXVersion() >= GetVersion(aMajor, aMinor, aBugFix);
- }

+ 0 - 94
mozilla-esr52/patches/1406380-385080.patch

@@ -1,94 +0,0 @@
-# HG changeset patch
-# User Tom Ritter <tom@mozilla.com>
-# Date 1507530996 18000
-#      Mon Oct 09 01:36:36 2017 -0500
-# Node ID 224eccf80d4732b148d9a3dbf83725dc2f347c24
-# Parent  0f1fe50759a02a9cdc3d9dcfe99cb5ac8db1ec63
-Bug 1406380 Fix -Wreorder warnings r=njn, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r 0f1fe50759a0 dom/gamepad/windows/WindowsGamepad.cpp
---- a/dom/gamepad/windows/WindowsGamepad.cpp	Sun Apr 30 03:40:00 2017 -0400
-+++ b/dom/gamepad/windows/WindowsGamepad.cpp	Tue Aug 14 11:37:06 2018 +0200
-@@ -139,10 +139,10 @@
-           uint32_t aNumButtons,
-           bool aHasDpad,
-           GamepadType aType) :
-+    type(aType),
-     numAxes(aNumAxes),
-     numButtons(aNumButtons),
-     hasDpad(aHasDpad),
--    type(aType),
-     present(true)
-   {
-     buttons.SetLength(numButtons);
-@@ -159,8 +159,8 @@
- class XInputLoader {
- public:
-   XInputLoader() : module(nullptr),
--                   mXInputEnable(nullptr),
--                   mXInputGetState(nullptr) {
-+                   mXInputGetState(nullptr),
-+                   mXInputEnable(nullptr) {
-     // xinput1_4.dll exists on Windows 8
-     // xinput9_1_0.dll exists on Windows 7 and Vista
-     // xinput1_3.dll shipped with the DirectX SDK
-@@ -280,14 +280,14 @@
- 
- class HIDLoader {
- public:
--  HIDLoader() : mModule(LoadLibraryW(L"hid.dll")),
--                mHidD_GetProductString(nullptr),
-+  HIDLoader() : mHidD_GetProductString(nullptr),
-                 mHidP_GetCaps(nullptr),
-                 mHidP_GetButtonCaps(nullptr),
-                 mHidP_GetValueCaps(nullptr),
-                 mHidP_GetUsages(nullptr),
-                 mHidP_GetUsageValue(nullptr),
--                mHidP_GetScaledUsageValue(nullptr)
-+                mHidP_GetScaledUsageValue(nullptr),
-+                mModule(LoadLibraryW(L"hid.dll"))
-   {
-     if (mModule) {
-       mHidD_GetProductString = reinterpret_cast<decltype(HidD_GetProductString)*>(GetProcAddress(mModule, "HidD_GetProductString"));
-diff -r 0f1fe50759a0 dom/media/platforms/wmf/WMFVideoMFTManager.cpp
---- a/dom/media/platforms/wmf/WMFVideoMFTManager.cpp	Sun Apr 30 03:40:00 2017 -0400
-+++ b/dom/media/platforms/wmf/WMFVideoMFTManager.cpp	Tue Aug 14 11:37:06 2018 +0200
-@@ -87,8 +87,8 @@
-   , mVideoStride(0)
-   , mImageSize(aConfig.mImage)
-   , mImageContainer(aImageContainer)
-+  , mKnowsCompositor(aKnowsCompositor)
-   , mDXVAEnabled(aDXVAEnabled)
--  , mKnowsCompositor(aKnowsCompositor)
-   , mNullOutputCount(0)
-   , mGotValidOutputAfterNullOutput(false)
-   , mGotExcessiveNullOutput(false)
-diff -r 0f1fe50759a0 dom/plugins/ipc/PluginModuleChild.cpp
---- a/dom/plugins/ipc/PluginModuleChild.cpp	Sun Apr 30 03:40:00 2017 -0400
-+++ b/dom/plugins/ipc/PluginModuleChild.cpp	Tue Aug 14 11:37:06 2018 +0200
-@@ -2085,7 +2085,9 @@
- 
- public:
-     explicit GetKeyStateTask(int aVirtKey, HANDLE aSemaphore, SHORT* aKeyState) :
--        mVirtKey(aVirtKey), mSemaphore(aSemaphore), mKeyState(aKeyState)
-+        mKeyState(aKeyState),
-+        mVirtKey(aVirtKey),
-+        mSemaphore(aSemaphore)
-     {}
- 
-     NS_IMETHOD Run() override
-diff -r 0f1fe50759a0 dom/plugins/ipc/PluginUtilsWin.cpp
---- a/dom/plugins/ipc/PluginUtilsWin.cpp	Sun Apr 30 03:40:00 2017 -0400
-+++ b/dom/plugins/ipc/PluginUtilsWin.cpp	Tue Aug 14 11:37:06 2018 +0200
-@@ -48,8 +48,8 @@
- {
- public:
-   AudioNotification() :
--      mRefCt(1)
--    , mIsRegistered(false)
-+      mIsRegistered(false)
-+    , mRefCt(1)
-   {
-     HRESULT hr = CoCreateInstance(__uuidof(MMDeviceEnumerator),
-                                   NULL, CLSCTX_INPROC_SERVER,

+ 0 - 36
mozilla-esr52/patches/1407017-244f2649c736.patch

@@ -1,36 +0,0 @@
-
-# HG changeset patch
-# User David Major <dmajor@mozilla.com>
-# Date 1507565760 14400
-# Node ID 244f2649c736dc5dc9652f9ab839cd3dc25cd820
-# Parent  5e0a1d82ef670c537b7b5c60ba0f2606a9f04ef7
-Bug 1407017 - Make --with-visual-studio-version a js_option. r=ted, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -504,19 +504,19 @@ def get_vc_paths(topsrcdir):
-         tools_version = open(os.path.join(path, r'VC\Auxiliary\Build\Microsoft.VCToolsVersion.default.txt'), 'rb').read().strip()
-         tools_path = os.path.join(path, r'VC\Tools\MSVC', tools_version, r'bin\HostX64')
-         yield (Version(install['installationVersion']), {
-             'x64': [os.path.join(tools_path, 'x64')],
-             # The x64->x86 cross toolchain requires DLLs from the native x64 toolchain.
-             'x86': [os.path.join(tools_path, 'x86'), os.path.join(tools_path, 'x64')],
-         })
- 
--option('--with-visual-studio-version', nargs=1,
--       choices=('2015', '2017'),
--       help='Select a specific Visual Studio version to use')
-+js_option('--with-visual-studio-version', nargs=1,
-+          choices=('2015', '2017'),
-+          help='Select a specific Visual Studio version to use')
- 
- @depends('--with-visual-studio-version')
- def vs_major_version(value):
-     if value:
-         return {'2015': 14,
-                 '2017': 15}[value[0]]
- 
- @depends(host, target, vs_major_version, check_build_environment, '--with-visual-studio-version')
-

+ 0 - 284
mozilla-esr52/patches/1407678-vs2017toolchain-249.patch

@@ -1,284 +0,0 @@
-
-# HG changeset patch
-# User David Major <dmajor@mozilla.com>
-# Date 1509635439 14400
-# Node ID 3f56c67e2a2ab7404641d19dec37254c2523d475
-# Parent  5917b44a260da266922d1c5a011a38a9a0fa7711
-Bug 1407678 - Make windows_toolchain.py support VS2017. r=mshal, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r 5917b44a260d build/docs/toolchains.rst
---- a/build/docs/toolchains.rst	Thu Nov 24 15:47:10 2016 +0900
-+++ b/build/docs/toolchains.rst	Mon Aug 13 18:37:11 2018 +0200
-@@ -51,7 +51,7 @@
- of mozilla-central, run something like the following to produce a ZIP
- archive::
- 
--   $ ./mach python build/windows_toolchain.py create-zip vs2015u3
-+   $ ./mach python build/windows_toolchain.py create-zip vs2017_15.4.2
- 
- The produced archive will be the argument to ``create-zip`` + ``.zip``.
- 
-diff -r 5917b44a260d build/windows_toolchain.py
---- a/build/windows_toolchain.py	Thu Nov 24 15:47:10 2016 +0900
-+++ b/build/windows_toolchain.py	Mon Aug 13 18:37:11 2018 +0200
-@@ -24,96 +24,111 @@
- )
- import mozpack.path as mozpath
- 
-+SDK_RELEASE = '10.0.15063.0'
- 
--# mozpack.match patterns for files under "Microsoft Visual Studio 14.0".
--VS_PATTERNS = [
--    {
--        'pattern': 'DIA SDK/bin/**',
--        'ignore': (
--            'DIA SDK/bin/arm/**',
--        ),
--    },
--    {
--        'pattern': 'DIA SDK/idl/**',
--    },
--    {
--        'pattern': 'DIA SDK/include/**',
--    },
-+PATTERNS = [
-     {
--        'pattern': 'DIA SDK/lib/**',
--        'ignore': (
--            'DIA SDK/lib/arm/**',
--        ),
--    },
--    # ATL is needed by Breakpad.
--    {
--        'pattern': 'VC/atlmfc/include/**',
--    },
--    {
--        'pattern': 'VC/atlmfc/lib/atls.*',
--    },
--    {
--        'pattern': 'VC/atlmfc/lib/amd64/atls.*',
--    },
--    {
--        'pattern': 'VC/bin/**',
--        # We only care about compiling on amd64 for amd64 or x86 targets.
--        'ignore': (
--            'VC/bin/amd64_arm/**',
--            'VC/bin/arm/**',
--            'VC/bin/x86_arm/**',
--            'VC/bin/x86_amd64/**',
--        ),
--    },
--    {
--        'pattern': 'VC/include/**',
-+        'srcdir': '%(vs_path)s/DIA SDK',
-+        'dstdir': 'DIA SDK',
-+        'files': [
-+            {
-+                'pattern': 'bin/**',
-+                'ignore': (
-+                    'bin/arm/**',
-+                ),
-+            },
-+            {
-+                'pattern': 'idl/**',
-+            },
-+            {
-+                'pattern': 'include/**',
-+            },
-+            {
-+                'pattern': 'lib/**',
-+                'ignore': (
-+                    'lib/arm/**',
-+                ),
-+            },
-+        ],
-     },
-     {
--        'pattern': 'VC/lib/**',
--        'ignore': (
--            'VC/lib/arm/**',
--            'VC/lib/onecore/**',
--            'VC/lib/store/**',
--        ),
--    },
--    {
--        'pattern': 'VC/redist/x64/Microsoft.VC140.CRT/**',
--    },
--    {
--        'pattern': 'VC/redist/x86/Microsoft.VC140.CRT/**',
--    },
--]
--
--SDK_RELEASE = '10.0.14393.0'
--
--# Files from the Windows 10 SDK to install.
--SDK_PATTERNS = [
--    {
--        'pattern': 'bin/x64/**',
-+        'srcdir': '%(vs_path)s/VC/Tools/MSVC/14.11.25503',
-+        'dstdir': 'VC',
-+        'files': [
-+            # ATL is needed by Breakpad.
-+            {
-+                'pattern': 'atlmfc/include/**',
-+            },
-+            {
-+                'pattern': 'atlmfc/lib/x86/atls.*',
-+            },
-+            {
-+                'pattern': 'atlmfc/lib/x64/atls.*',
-+            },
-+            {
-+                'pattern': 'bin/Hostx64/**',
-+            },
-+            # 32-bit PGO-instrumented builds require 32-bit pgort140.dll.
-+            {
-+                'pattern': 'bin/Hostx86/x86/pgort140.dll',
-+            },
-+            {
-+                'pattern': 'include/**',
-+            },
-+            {
-+                'pattern': 'lib/**',
-+                'ignore': (
-+                    'lib/onecore/**',
-+                    'lib/x64/store/**',
-+                    'lib/x86/store/**',
-+                ),
-+            },
-+        ],
-     },
-     {
--        'pattern': 'Include/%s/**' % SDK_RELEASE,
--    },
--    {
--        'pattern': 'Lib/%s/ucrt/x64/**' % SDK_RELEASE,
--    },
--    {
--        'pattern': 'Lib/%s/ucrt/x86/**' % SDK_RELEASE,
-+        'srcdir': '%(vs_path)s/VC/Redist/MSVC/14.11.25325',
-+        'dstdir': 'VC/redist',
-+        'files': [
-+            {
-+                'pattern': 'x64/Microsoft.VC141.CRT/**',
-+            },
-+            {
-+                'pattern': 'x86/Microsoft.VC141.CRT/**',
-+            },
-+        ],
-     },
-     {
--        'pattern': 'Lib/%s/um/x64/**' % SDK_RELEASE,
--    },
--    {
--        'pattern': 'Lib/%s/um/x86/**' % SDK_RELEASE,
--    },
--    {
--        'pattern': 'Redist/D3D/**',
--    },
--    {
--        'pattern': 'Redist/ucrt/DLLs/x64/**',
--    },
--    {
--        'pattern': 'Redist/ucrt/DLLs/x86/**',
-+        'srcdir': '%(sdk_path)s',
-+        'dstdir': 'SDK',
-+        'files': [
-+            {
-+                'pattern': 'bin/%s/x64/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Include/%s/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Lib/%s/ucrt/x64/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Lib/%s/ucrt/x86/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Lib/%s/um/x64/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Lib/%s/um/x86/**' % SDK_RELEASE,
-+            },
-+            {
-+                'pattern': 'Redist/D3D/**',
-+            },
-+            {
-+                'pattern': 'Redist/ucrt/DLLs/x64/**',
-+            },
-+            {
-+                'pattern': 'Redist/ucrt/DLLs/x86/**',
-+            },
-+        ],
-     },
- ]
- 
-@@ -128,9 +143,9 @@
-         raise Exception('No "ProgramFiles(x86)" environment variable. '
-                         'Not running on 64-bit Windows?')
- 
--    vs_path = os.path.join(pf, 'Microsoft Visual Studio 14.0')
-+    vs_path = os.path.join(pf, 'Microsoft Visual Studio', '2017', 'Community')
-     if not os.path.exists(vs_path):
--        raise Exception('%s does not exist; Visual Studio 2015 not installed?' %
-+        raise Exception('%s does not exist; Visual Studio 2017 not installed?' %
-                         vs_path)
- 
-     sdk_path = os.path.join(pf, 'Windows Kits', '10')
-@@ -138,6 +153,11 @@
-         raise Exception('%s does not exist; Windows 10 SDK not installed?' %
-                         sdk_path)
- 
-+    sdk_fullver_path = os.path.join(sdk_path, 'Include', SDK_RELEASE)
-+    if not os.path.exists(sdk_fullver_path):
-+        raise Exception('%s does not exist; Wrong SDK version installed?' %
-+                        sdk_fullver_path)
-+
-     return vs_path, sdk_path
- 
- 
-@@ -149,22 +169,16 @@
-     """
-     vs_path, sdk_path = find_vs_paths()
- 
--    for entry in VS_PATTERNS:
--        finder = FileFinder(vs_path, find_executables=False,
--                            ignore=entry.get('ignore', []))
--        for p, f in finder.find(entry['pattern']):
--            assert p.startswith(('VC/', 'DIA SDK/'))
--
--            yield p.encode('utf-8'), f
--
--    for entry in SDK_PATTERNS:
--        finder = FileFinder(sdk_path, find_executables=False,
--                            ignore=entry.get('ignore', []))
--        for p, f in finder.find(entry['pattern']):
--            relpath = 'SDK/%s' % p
--
--            yield relpath.encode('utf-8'), f
--
-+    for entry in PATTERNS:
-+        fullpath = entry['srcdir'] % {
-+            'vs_path': vs_path,
-+            'sdk_path': sdk_path,
-+        }
-+        for pattern in entry['files']:
-+            finder = FileFinder(fullpath, ignore=pattern.get('ignore', []))
-+            for p, f in finder.find(pattern['pattern']):
-+                dstpath = '%s/%s' % (entry['dstdir'], p)
-+                yield dstpath.encode('utf-8'), f
- 
- def resolve_files_and_hash(manifest):
-     """Resolve files and hash their data.
-@@ -203,7 +217,7 @@
-     if isinstance(prefix, unicode):
-         prefix = prefix.encode('utf-8')
- 
--    with JarWriter(file=zip_path, optimize=False, compress=5) as zip:
-+    with JarWriter(file=zip_path, optimize=False, compress_level=5) as zip:
-         manifest = {}
-         for p, data, mode in resolve_files_and_hash(manifest):
-             print(p)

+ 0 - 31
mozilla-esr52/patches/1408695-VS2017constexpr.patch

@@ -1,31 +0,0 @@
-# HG changeset patch
-# User David Major <dmajor@mozilla.com>
-# Date 1508029745 14400
-#      Sat Oct 14 21:09:05 2017 -0400
-# Node ID 60d3df91ae2f1e724072d234e83b8b82edfc91cb
-# Parent  65ddb6ae0db065d392023efadde2655c396c79d9
-Bug 1408695 - Work around a VS2017 constexpr pointer math bug in HTMLTrackElement.cpp. r=gerald, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/dom/html/HTMLTrackElement.cpp b/dom/html/HTMLTrackElement.cpp
---- a/dom/html/HTMLTrackElement.cpp
-+++ b/dom/html/HTMLTrackElement.cpp
-@@ -63,17 +63,17 @@ static constexpr nsAttrValue::EnumTable 
-   { "descriptions", static_cast<int16_t>(TextTrackKind::Descriptions) },
-   { "chapters", static_cast<int16_t>(TextTrackKind::Chapters) },
-   { "metadata", static_cast<int16_t>(TextTrackKind::Metadata) },
-   { nullptr, 0 }
- };
- 
- // Invalid values are treated as "metadata" in ParseAttribute, but if no value
- // at all is specified, it's treated as "subtitles" in GetKind
--static constexpr const nsAttrValue::EnumTable* kKindTableInvalidValueDefault = &kKindTable[4];
-+static const nsAttrValue::EnumTable* const kKindTableInvalidValueDefault = &kKindTable[4];
- 
- class WindowDestroyObserver final : public nsIObserver
- {
-   NS_DECL_ISUPPORTS
- 
- public:
-   explicit WindowDestroyObserver(HTMLTrackElement* aElement, uint64_t aWinID)
-     : mTrackElement(aElement)

+ 0 - 23
mozilla-esr52/patches/1415470-part1-VS2017-a11y.patch

@@ -1,23 +0,0 @@
-
-# HG changeset patch
-# User Chris Peterson <cpeterson@mozilla.com>
-# Date 1510041293 28800
-# Node ID cec4f6e0be0020eac30ee723eb1ddf3641e54c06
-# Parent  43ee3613ca01d5d0d688bab3803a957fe18ace9d
-Bug 1415470 - a11y: Fix VS2017 initializer list order warnings. r=yzen, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Reorder DocAccessibleParent's and DocAccessibleChild's constructor initializer lists to fix these VS2017 warnings:
-
-a11y/DocAccessibleParent.h(32): warning C5038: data member 'mozilla::a11y::DocAccessibleParent::mShutdown' will be initialized after data member 'mozilla::a11y::DocAccessibleParent::mEmulatedWindowHandle'
-
-accessible/ipc/win/DocAccessibleChild.cpp(22): warning C5038: data member 'mozilla::a11y::DocAccessibleChild::mEmulatedWindowHandle' will be initialized after data member 'mozilla::a11y::DocAccessibleChild::mIsRemoteConstructed'
-
-diff -r 43ee3613ca01 accessible/ipc/win/DocAccessibleChild.cpp
---- a/accessible/ipc/win/DocAccessibleChild.cpp	Mon Aug 13 17:51:06 2018 +0200
-+++ b/accessible/ipc/win/DocAccessibleChild.cpp	Mon Aug 13 17:58:06 2018 +0200
-@@ -234,4 +234,3 @@
- 
- } // namespace a11y
- } // namespace mozilla
--

+ 0 - 150
mozilla-esr52/patches/1415470-part2-VS2017-version.patch

@@ -1,150 +0,0 @@
-
-# HG changeset patch
-# User Chris Peterson <cpeterson@mozilla.com>
-# Date 1510367093 28800
-# Node ID 819ad76c63771b74401946c31b136a37cffbf611
-# Parent  3f70b1d6de57a4bce95befff481fe75c0781878b
-Bug 1415470 - build: Remove always-true version check for VS >= 2015. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r 3f70b1d6de57 js/src/old-configure.in
---- a/js/src/old-configure.in	Mon Nov 06 23:54:53 2017 -0800
-+++ b/js/src/old-configure.in	Mon Aug 13 23:58:15 2018 +0200
-@@ -181,27 +181,24 @@
-         AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
-         AC_DEFINE(_USE_MATH_DEFINES) # Otherwise MSVC's math.h doesn't #define M_PI.
- 
--        case "$CC_VERSION" in
--        19*)
--            _CC_SUITE=14
--            MSVS_VERSION=2015
--            MSVC_C_RUNTIME_DLL=vcruntime140.dll
--            MSVC_CXX_RUNTIME_DLL=msvcp140.dll
-+        _CC_SUITE=14
-+        MSVS_VERSION=2015
-+        MSVC_C_RUNTIME_DLL=vcruntime140.dll
-+        MSVC_CXX_RUNTIME_DLL=msvcp140.dll
- 
--            # C5026: move constructor was implicitly defined as deleted
--            CXXFLAGS="$CXXFLAGS -wd5026"
-+        # C5026: move constructor was implicitly defined as deleted
-+        CXXFLAGS="$CXXFLAGS -wd5026"
- 
--            # C5027: move assignment operator was implicitly defined as deleted
--            CXXFLAGS="$CXXFLAGS -wd5027"
--
--            # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
--            CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
-+        # C5027: move assignment operator was implicitly defined as deleted
-+        CXXFLAGS="$CXXFLAGS -wd5027"
- 
--            # Disable C++11 thread-safe statics due to crashes on XP (bug 1204752)
--            # See https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics
--            CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-"
--            ;;
--        esac
-+        # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
-+        CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
-+
-+        # Disable C++11 thread-safe statics due to crashes on XP (bug 1204752)
-+        # See https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics
-+        CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-"
-+
-         AC_SUBST(MSVS_VERSION)
-         AC_SUBST(MSVC_C_RUNTIME_DLL)
-         AC_SUBST(MSVC_CXX_RUNTIME_DLL)
-diff -r 3f70b1d6de57 old-configure.in
---- a/old-configure.in	Mon Nov 06 23:54:53 2017 -0800
-+++ b/old-configure.in	Mon Aug 13 23:58:15 2018 +0200
-@@ -237,50 +237,47 @@
-         AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
-         AC_DEFINE(_USE_MATH_DEFINES) # Otherwise MSVC's math.h doesn't #define M_PI.
- 
--        case "$CC_VERSION" in
--        19*)
--            _CC_SUITE=14
--            MSVS_VERSION=2015
--            MSVC_C_RUNTIME_DLL=vcruntime140.dll
--            MSVC_CXX_RUNTIME_DLL=msvcp140.dll
--
--            MOZ_CHECK_HEADER(dia2.h, MSVC_HAS_DIA_SDK=1)
--            if test -n "$MSVC_HAS_DIA_SDK"; then
--                AC_DEFINE(MSVC_HAS_DIA_SDK)
--            fi
--
--            # C5026: move constructor was implicitly defined as deleted
--            CXXFLAGS="$CXXFLAGS -wd5026"
--
--            # C5027: move assignment operator was implicitly defined as deleted
--            CXXFLAGS="$CXXFLAGS -wd5027"
--
--            # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
--            CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
--
--            # Disable C++11 thread-safe statics due to crashes on XP (bug 1204752)
--            # See https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics
--            CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-"
--
--            # https://connect.microsoft.com/VisualStudio/feedback/details/888527/warnings-on-dbghelp-h
--            # for dbghelp.h, imagehlp.h, and shobj.h
--            # C4091: 'typedef ': ignored on left of '' when no variable is declared
--            CFLAGS="$CFLAGS -wd4091"
--            CXXFLAGS="$CXXFLAGS -wd4091"
--
--            # This is intended as a temporary hack to support building with VS2015.
--            # 'noexcept' used with no exception handling mode specified;
--            # termination on exception is not guaranteed. Specify /EHsc
--            CXXFLAGS="$CXXFLAGS -wd4577"
--
--            if test -n "$WIN_UCRT_REDIST_DIR"; then
--              if test ! -d "$WIN_UCRT_REDIST_DIR"; then
--                AC_MSG_ERROR([Invalid Windows UCRT Redist directory: ${WIN_UCRT_REDIST_DIR}])
--              fi
--              WIN_UCRT_REDIST_DIR=`cd "$WIN_UCRT_REDIST_DIR" && pwd -W`
--            fi
--            ;;
--        esac
-+        _CC_SUITE=14
-+        MSVS_VERSION=2015
-+        MSVC_C_RUNTIME_DLL=vcruntime140.dll
-+        MSVC_CXX_RUNTIME_DLL=msvcp140.dll
-+
-+        MOZ_CHECK_HEADER(dia2.h, MSVC_HAS_DIA_SDK=1)
-+        if test -n "$MSVC_HAS_DIA_SDK"; then
-+            AC_DEFINE(MSVC_HAS_DIA_SDK)
-+        fi
-+
-+        # C5026: move constructor was implicitly defined as deleted
-+        CXXFLAGS="$CXXFLAGS -wd5026"
-+
-+        # C5027: move assignment operator was implicitly defined as deleted
-+        CXXFLAGS="$CXXFLAGS -wd5027"
-+
-+        # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
-+        CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
-+
-+        # Disable C++11 thread-safe statics due to crashes on XP (bug 1204752)
-+        # See https://connect.microsoft.com/VisualStudio/feedback/details/1789709/visual-c-2015-runtime-broken-on-windows-server-2003-c-11-magic-statics
-+        CXXFLAGS="$CXXFLAGS -Zc:threadSafeInit-"
-+
-+        # https://connect.microsoft.com/VisualStudio/feedback/details/888527/warnings-on-dbghelp-h
-+        # for dbghelp.h, imagehlp.h, and shobj.h
-+        # C4091: 'typedef ': ignored on left of '' when no variable is declared
-+        CFLAGS="$CFLAGS -wd4091"
-+        CXXFLAGS="$CXXFLAGS -wd4091"
-+
-+        # This is intended as a temporary hack to support building with VS2015.
-+        # 'noexcept' used with no exception handling mode specified;
-+        # termination on exception is not guaranteed. Specify /EHsc
-+        CXXFLAGS="$CXXFLAGS -wd4577"
-+
-+        if test -n "$WIN_UCRT_REDIST_DIR"; then
-+          if test ! -d "$WIN_UCRT_REDIST_DIR"; then
-+            AC_MSG_ERROR([Invalid Windows UCRT Redist directory: ${WIN_UCRT_REDIST_DIR}])
-+          fi
-+          WIN_UCRT_REDIST_DIR=`cd "$WIN_UCRT_REDIST_DIR" && pwd -W`
-+        fi
-+
-         AC_SUBST(MSVS_VERSION)
-         AC_SUBST(MSVC_HAS_DIA_SDK)
-         AC_SUBST(MSVC_C_RUNTIME_DLL)

+ 0 - 193
mozilla-esr52/patches/1415470-part3-VS2017-C5038.patch

@@ -1,193 +0,0 @@
-
-# HG changeset patch
-# User Chris Peterson <cpeterson@mozilla.com>
-# Date 1510113130 28800
-# Node ID 7e35281e0eafbc99ee94d182dfb11d4492f89120
-# Parent  80321751676ec9535c9ffa3f3b5abad08ecb64de
-Bug 1415470 - build: Enable VS2017 C5038 initializer list order warnings (like gcc -Wreorder). r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-C5038 is a new warning in VS2017, similar to gcc and clang's -Wreorder, which is enabled by -Wall. We should enable C5038 so Windows developers can see these warnings locally instead of when gcc and clang fail with warnings-as-errors on Try.
-
-https://blogs.msdn.microsoft.com/vcblog/2017/07/21/diagnostic-improvements-in-vs2017-15-3-0/
-
-We need to suppress C5038 warnings from Windows Runtime Library header files (wrl.h) included in ANGLE and widget/windows:
-
-z:\build\build\src\vs2017_15.4.2\SDK\Include\10.0.15063.0\winrt\wrl\wrappers\corewrappers.h(515): error C5038: data member 'Microsoft::WRL::Wrappers::Details::SyncLockWithStatusT<Microsoft::WRL::Wrappers::HandleTraits::SemaphoreTraits>::sync_' will be initialized after data member 'Microsoft::WRL::Wrappers::Details::SyncLockWithStatusT<Microsoft::WRL::Wrappers::HandleTraits::SemaphoreTraits>::status_'
-...
-
-And suppress C5038 warnings in upstream webrtc code:
-
-media/webrtc/trunk/webrtc/modules/video_capture/windows/BaseFilter.cpp(176): error C5038: data member 'mozilla::media::BaseFilter::mClsId' will be initialized after data member 'mozilla::media::BaseFilter::mState'
-media/webrtc/trunk/webrtc/modules/video_capture/windows/BasePin.cpp(169): error C5038: data member 'mozilla::media::BasePin::mFilter' will be initialized after data member 'mozilla::media::BasePin::mLock'
-media/webrtc/trunk/webrtc/modules/video_capture/windows/BasePin.cpp(170): error C5038: data member 'mozilla::media::BasePin::mLock' will be initialized after data member 'mozilla::media::BasePin::mName'
-media/webrtc/trunk/webrtc/modules/video_capture/windows/BasePin.cpp(172): error C5038: data member 'mozilla::media::BasePin::mDirection' will be initialized after data member 'mozilla::media::BasePin::mQualitySink'
-
-diff --git a/gfx/angle/moz.build b/gfx/angle/moz.build
---- a/gfx/angle/moz.build
-+++ b/gfx/angle/moz.build
-@@ -134,16 +134,19 @@ if CONFIG['GNU_CXX']:
-             '-Wno-unused-private-field',
-         ]
-     else:
-         CXXFLAGS += [
-             '-Wno-shadow-compatible-local',
-             '-Wno-shadow-local',
-         ]
- 
-+if CONFIG['_MSC_VER']:
-+    CXXFLAGS += ['-wd5038'] # C5038: initializer list order warnings
-+
- if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
-     LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
- 
- DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
- DEFINES['_HAS_EXCEPTIONS'] = 0
- 
- if not CONFIG['MOZ_DEBUG']:
-     DEFINES['_SECURE_SCL'] = 0
-diff --git a/gfx/angle/src/libANGLE/moz.build b/gfx/angle/src/libANGLE/moz.build
---- a/gfx/angle/src/libANGLE/moz.build
-+++ b/gfx/angle/src/libANGLE/moz.build
-@@ -352,16 +352,17 @@ if CONFIG['GNU_CXX']:
-             '-Wno-shadow-compatible-local',
-             '-Wno-shadow-local',
-         ]
- 
- if CONFIG['_MSC_VER'] and not CONFIG['CLANG_CL']:
-     CXXFLAGS += [
-         '-wd4018', # '>' : signed/unsigned mismatch
-         '-wd4530', # C++ exception handler used, without /EHsc
-+        '-wd5038', # C5038: initializer list order warnings
-     ]
- 
- if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
-     LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
- 
- DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
- DEFINES['_HAS_EXCEPTIONS'] = 0
- 
-diff --git a/gfx/angle/src/libGLESv2/moz.build b/gfx/angle/src/libGLESv2/moz.build
---- a/gfx/angle/src/libGLESv2/moz.build
-+++ b/gfx/angle/src/libGLESv2/moz.build
-@@ -34,16 +34,19 @@ if CONFIG['GNU_CXX']:
-             '-Wno-unused-private-field',
-         ]
-     else:
-         CXXFLAGS += [
-             '-Wno-shadow-compatible-local',
-             '-Wno-shadow-local',
-         ]
- 
-+if CONFIG['_MSC_VER']:
-+    CXXFLAGS += ['-wd5038'] # C5038: initializer list order warnings
-+
- if CONFIG['MOZ_DIRECTX_SDK_PATH'] and not CONFIG['MOZ_HAS_WINSDK_WITH_D3D']:
-     LOCAL_INCLUDES += ['%' + '%s/include/' % CONFIG['MOZ_DIRECTX_SDK_PATH']]
- 
- DEFINES['_CRT_SECURE_NO_DEPRECATE'] = True
- DEFINES['_HAS_EXCEPTIONS'] = 0
- 
- if not CONFIG['MOZ_DEBUG']:
-     DEFINES['_SECURE_SCL'] = 0
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -176,16 +176,26 @@ case "$target" in
-         changequote([,])
- 
-         _MSC_VER=`echo ${CC_VERSION} | cut -c 1-2,4-5`
- 
-         AC_DEFINE(_CRT_SECURE_NO_WARNINGS)
-         AC_DEFINE(_CRT_NONSTDC_NO_WARNINGS)
-         AC_DEFINE(_USE_MATH_DEFINES) # Otherwise MSVC's math.h doesn't #define M_PI.
- 
-+        if test "$_MSC_VER" -ge "1910"; then # VS2017+
-+            # C5038: Enable initializer list order warnings
-+            # The -w1#### flag treats warning C#### as if it was a warning level
-+            # 1 warning, and thus enables it because we enable /W3 warnings. We
-+            # don't use -we#### because it would enable warning C#### but treat
-+            # it as an error, even in third-party code.
-+            # https://docs.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level
-+            CXXFLAGS="$CXXFLAGS -w15038"
-+        fi
-+
-         _CC_SUITE=14
-         MSVS_VERSION=2015
-         MSVC_C_RUNTIME_DLL=vcruntime140.dll
-         MSVC_CXX_RUNTIME_DLL=msvcp140.dll
- 
-         # C5026: move constructor was implicitly defined as deleted
-         CXXFLAGS="$CXXFLAGS -wd5026"
- 
-diff --git a/media/webrtc/moz.build b/media/webrtc/moz.build
---- a/media/webrtc/moz.build
-+++ b/media/webrtc/moz.build
-@@ -94,17 +94,20 @@ if CONFIG['MOZ_WEBRTC_SIGNALING']:
-     GYP_DIRS['signaling'].sandbox_vars['ALLOW_COMPILER_WARNINGS'] = True
-     GYP_DIRS['signaling'].non_unified_sources += signaling_non_unified_sources
- 
-     if CONFIG['_MSC_VER']:
-         # Avoid warnings from third-party code that we can not modify.
-         if CONFIG['CLANG_CL']:
-             CXXFLAGS += ['-Wno-invalid-source-encoding']
-         else:
--            CXXFLAGS += ['-validate-charset-']
-+            CXXFLAGS += [
-+                '-validate-charset-',
-+                '-wd5038', # C5038 initializer list order warnings
-+            ]
- 
- if CONFIG['MOZ_WIDGET_TOOLKIT'] != 'gonk':
-     GYP_DIRS += ['trunk/testing']
-     GYP_DIRS['trunk/testing'].input = 'trunk/testing/gtest.gyp'
-     GYP_DIRS['trunk/testing'].variables = gyp_vars
-     # We allow warnings for third-party code that can be updated from upstream.
-     GYP_DIRS['trunk/testing'].sandbox_vars['ALLOW_COMPILER_WARNINGS'] = True
-     GYP_DIRS['trunk/testing'].non_unified_sources += webrtc_non_unified_sources
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -242,16 +242,26 @@ case "$target" in
-         MSVC_C_RUNTIME_DLL=vcruntime140.dll
-         MSVC_CXX_RUNTIME_DLL=msvcp140.dll
- 
-         MOZ_CHECK_HEADER(dia2.h, MSVC_HAS_DIA_SDK=1)
-         if test -n "$MSVC_HAS_DIA_SDK"; then
-             AC_DEFINE(MSVC_HAS_DIA_SDK)
-         fi
- 
-+        if test "$_MSC_VER" -ge "1910"; then # VS2017+
-+            # C5038: Enable initializer list order warnings
-+            # The -w1#### flag treats warning C#### as if it was a warning level
-+            # 1 warning, and thus enables it because we enable /W3 warnings. We
-+            # don't use -we#### because it would enable warning C#### but treat
-+            # it as an error, even in third-party code.
-+            # https://docs.microsoft.com/en-us/cpp/build/reference/compiler-option-warning-level
-+            CXXFLAGS="$CXXFLAGS -w15038"
-+        fi
-+
-         # C5026: move constructor was implicitly defined as deleted
-         CXXFLAGS="$CXXFLAGS -wd5026"
- 
-         # C5027: move assignment operator was implicitly defined as deleted
-         CXXFLAGS="$CXXFLAGS -wd5027"
- 
-         # -Zc:sizedDealloc- disables C++14 global sized deallocation (see bug 1160146)
-         CXXFLAGS="$CXXFLAGS -Zc:sizedDealloc-"
-diff --git a/widget/windows/moz.build b/widget/windows/moz.build
---- a/widget/windows/moz.build
-+++ b/widget/windows/moz.build
-@@ -116,8 +116,12 @@ for var in ('MOZ_ENABLE_D3D10_LAYER'):
- 
- RESFILE = 'widget.res'
- 
- CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
- 
- OS_LIBS += [
-     'rpcrt4',
- ]
-+
-+if CONFIG['_MSC_VER']:
-+    # C5038: Suppress initializer list order warnings from wrl.h
-+    SOURCES['WindowsUIUtils.cpp'].flags += ['-wd5038']

+ 0 - 36
mozilla-esr52/patches/1423694-VS2017-155.patch

@@ -1,36 +0,0 @@
-
-# HG changeset patch
-# User Ryan VanderMeulen <ryanvm@gmail.com>
-# Date 1512697654 18000
-# Node ID cab8279fe830c871b8fd7f465d66d584e834b96c
-# Parent  7e9987e8d4ab5019aba8ba7bd648f352f087cdfc
-Bug 1423649 - Fix compiler errors that happen when building with VS2017 15.5. r=rillian, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r 7e9987e8d4ab memory/mozalloc/mozalloc.h
---- a/memory/mozalloc/mozalloc.h	Sat Oct 14 21:09:05 2017 -0400
-+++ b/memory/mozalloc/mozalloc.h	Mon Aug 13 22:07:41 2018 +0200
-@@ -173,7 +173,11 @@
- /*
-  * Suppress build warning spam (bug 578546).
-  */
-+#if _MSC_VER < 1912
- #define MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-+#else
-+#define MOZALLOC_THROW_IF_HAS_EXCEPTIONS throw()
-+#endif
- #define MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS
- #else
- #define MOZALLOC_THROW_IF_HAS_EXCEPTIONS throw()
-diff -r 7e9987e8d4ab old-configure.in
---- a/old-configure.in	Sat Oct 14 21:09:05 2017 -0400
-+++ b/old-configure.in	Mon Aug 13 22:07:41 2018 +0200
-@@ -1137,6 +1137,8 @@
-         # make 'foo == bar;' error out
-         CFLAGS="$CFLAGS -we4553"
-         CXXFLAGS="$CXXFLAGS -we4553"
-+        # Silence VS2017 15.5+ TR1 deprecation warnings hit by older gtest versions
-+        CXXFLAGS="$CXXFLAGS -D_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNING"
-         LIBS="$LIBS kernel32.lib user32.lib gdi32.lib winmm.lib wsock32.lib advapi32.lib secur32.lib"
-         MOZ_DEBUG_LDFLAGS='-DEBUG -DEBUGTYPE:CV'
-         WARNINGS_AS_ERRORS='-WX'

+ 0 - 13672
mozilla-esr52/patches/1435212.patch

@@ -1,13672 +0,0 @@
-# HG changeset patch
-# User Jean-Yves Avenard <jyavenard@mozilla.com>
-# Date 1524125955 -7200
-#      Thu Apr 19 10:19:15 2018 +0200
-# Node ID 2f39b32593bd0d1d5ebd7623bdf324610027074f
-# Parent  3afdf33e21f0c591789dc52f5961bae9f2ee1b77
-Bug 1435212 - Add support for FFmpeg 4.0. r=bryce, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
---- a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
-+++ b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp
-@@ -64,25 +64,31 @@ FFmpegDataDecoder<LIBAV_VER>::InitDecode
-   mCodecContext->opaque = this;
- 
-   InitCodecContext();
- 
-   if (mExtraData) {
-     mCodecContext->extradata_size = mExtraData->Length();
-     // FFmpeg may use SIMD instructions to access the data which reads the
-     // data in 32 bytes block. Must ensure we have enough data to read.
-+#if LIBAVCODEC_VERSION_MAJOR >= 58
-+    mExtraData->AppendElements(AV_INPUT_BUFFER_PADDING_SIZE);
-+#else
-     mExtraData->AppendElements(FF_INPUT_BUFFER_PADDING_SIZE);
-+#endif
-     mCodecContext->extradata = mExtraData->Elements();
-   } else {
-     mCodecContext->extradata_size = 0;
-   }
- 
-+#if LIBAVCODEC_VERSION_MAJOR < 57
-   if (codec->capabilities & CODEC_CAP_DR1) {
-     mCodecContext->flags |= CODEC_FLAG_EMU_EDGE;
-   }
-+#endif
- 
-   if (mLib->avcodec_open2(mCodecContext, codec, nullptr) < 0) {
-     NS_WARNING("Couldn't initialise ffmpeg decoder");
-     mLib->avcodec_close(mCodecContext);
-     mLib->av_freep(&mCodecContext);
-     return NS_ERROR_FAILURE;
-   }
- 
-diff --git a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
---- a/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
-+++ b/dom/media/platforms/ffmpeg/FFmpegLibWrapper.cpp
-@@ -64,22 +64,24 @@ FFmpegLibWrapper::Link()
- 
-   enum {
-     AV_FUNC_AVUTIL_MASK = 1 << 8,
-     AV_FUNC_53 = 1 << 0,
-     AV_FUNC_54 = 1 << 1,
-     AV_FUNC_55 = 1 << 2,
-     AV_FUNC_56 = 1 << 3,
-     AV_FUNC_57 = 1 << 4,
-+    AV_FUNC_58 = 1 << 5,
-     AV_FUNC_AVUTIL_53 = AV_FUNC_53 | AV_FUNC_AVUTIL_MASK,
-     AV_FUNC_AVUTIL_54 = AV_FUNC_54 | AV_FUNC_AVUTIL_MASK,
-     AV_FUNC_AVUTIL_55 = AV_FUNC_55 | AV_FUNC_AVUTIL_MASK,
-     AV_FUNC_AVUTIL_56 = AV_FUNC_56 | AV_FUNC_AVUTIL_MASK,
-     AV_FUNC_AVUTIL_57 = AV_FUNC_57 | AV_FUNC_AVUTIL_MASK,
--    AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57,
-+    AV_FUNC_AVUTIL_58 = AV_FUNC_58 | AV_FUNC_AVUTIL_MASK,
-+    AV_FUNC_AVCODEC_ALL = AV_FUNC_53 | AV_FUNC_54 | AV_FUNC_55 | AV_FUNC_56 | AV_FUNC_57 | AV_FUNC_58,
-     AV_FUNC_AVUTIL_ALL = AV_FUNC_AVCODEC_ALL | AV_FUNC_AVUTIL_MASK
-   };
- 
-   switch (macro) {
-     case 53:
-       version = AV_FUNC_53;
-       break;
-     case 54:
-@@ -89,16 +91,19 @@ FFmpegLibWrapper::Link()
-       version = AV_FUNC_55;
-       break;
-     case 56:
-       version = AV_FUNC_56;
-       break;
-     case 57:
-       version = AV_FUNC_57;
-       break;
-+    case 58:
-+      version = AV_FUNC_58;
-+      break;
-     default:
-       FFMPEG_LOG("Unknown avcodec version");
-       Unlink();
-       return isFFMpeg
-              ? ((macro > 57)
-                 ? LinkResult::UnknownFutureFFMpegVersion
-                 : LinkResult::UnknownOlderFFMpegVersion)
-              // All LibAV versions<54.35.1 are blocked, therefore we must be
-@@ -137,19 +142,19 @@ FFmpegLibWrapper::Link()
-   AV_FUNC(av_parser_close, AV_FUNC_AVCODEC_ALL)
-   AV_FUNC(av_parser_parse2, AV_FUNC_AVCODEC_ALL)
-   AV_FUNC(avcodec_alloc_frame, (AV_FUNC_53 | AV_FUNC_54))
-   AV_FUNC(avcodec_get_frame_defaults, (AV_FUNC_53 | AV_FUNC_54))
-   AV_FUNC(avcodec_free_frame, AV_FUNC_54)
-   AV_FUNC(av_log_set_level, AV_FUNC_AVUTIL_ALL)
-   AV_FUNC(av_malloc, AV_FUNC_AVUTIL_ALL)
-   AV_FUNC(av_freep, AV_FUNC_AVUTIL_ALL)
--  AV_FUNC(av_frame_alloc, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57))
--  AV_FUNC(av_frame_free, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57))
--  AV_FUNC(av_frame_unref, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57))
-+  AV_FUNC(av_frame_alloc, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
-+  AV_FUNC(av_frame_free, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
-+  AV_FUNC(av_frame_unref, (AV_FUNC_AVUTIL_55 | AV_FUNC_AVUTIL_56 | AV_FUNC_AVUTIL_57 | AV_FUNC_AVUTIL_58))
-   AV_FUNC_OPTION(av_frame_get_colorspace, AV_FUNC_AVUTIL_ALL)
- #undef AV_FUNC
- #undef AV_FUNC_OPTION
- 
-   avcodec_register_all();
- #ifdef DEBUG
-   av_log_set_level(AV_LOG_DEBUG);
- #endif
-diff --git a/dom/media/platforms/ffmpeg/FFmpegLibs.h b/dom/media/platforms/ffmpeg/FFmpegLibs.h
---- a/dom/media/platforms/ffmpeg/FFmpegLibs.h
-+++ b/dom/media/platforms/ffmpeg/FFmpegLibs.h
-@@ -24,16 +24,19 @@ extern "C" {
- #define AV_CODEC_ID_H264 CODEC_ID_H264
- #define AV_CODEC_ID_AAC CODEC_ID_AAC
- #define AV_CODEC_ID_MP3 CODEC_ID_MP3
- #define AV_CODEC_ID_VP8 CODEC_ID_VP8
- #define AV_CODEC_ID_NONE CODEC_ID_NONE
- #define AV_CODEC_ID_FLAC CODEC_ID_FLAC
- typedef CodecID AVCodecID;
- #endif
-+#if LIBAVCODEC_VERSION_MAJOR <= 55
-+#define AV_CODEC_FLAG_LOW_DELAY CODEC_FLAG_LOW_DELAY
-+#endif
- 
- #ifdef FFVPX_VERSION
- enum { LIBAV_VER = FFVPX_VERSION };
- #else
- enum { LIBAV_VER = LIBAVCODEC_VERSION_MAJOR };
- #endif
- 
- #endif // __FFmpegLibs_h__
-diff --git a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
---- a/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
-+++ b/dom/media/platforms/ffmpeg/FFmpegRuntimeLinker.cpp
-@@ -22,22 +22,25 @@ template <int V> class FFmpegDecoderModu
- public:
-   static already_AddRefed<PlatformDecoderModule> Create(FFmpegLibWrapper*);
- };
- 
- static FFmpegLibWrapper sLibAV;
- 
- static const char* sLibs[] = {
- #if defined(XP_DARWIN)
-+  "libavcodec.58.dylib",
-   "libavcodec.57.dylib",
-   "libavcodec.56.dylib",
-   "libavcodec.55.dylib",
-   "libavcodec.54.dylib",
-   "libavcodec.53.dylib",
- #else
-+  "libavcodec.so.58",
-+  "libavcodec-ffmpeg.so.58",
-   "libavcodec-ffmpeg.so.57",
-   "libavcodec-ffmpeg.so.56",
-   "libavcodec.so.57",
-   "libavcodec.so.56",
-   "libavcodec.so.55",
-   "libavcodec.so.54",
-   "libavcodec.so.53",
- #endif
-@@ -129,16 +132,17 @@ FFmpegRuntimeLinker::CreateDecoderModule
-   }
-   RefPtr<PlatformDecoderModule> module;
-   switch (sLibAV.mVersion) {
-     case 53: module = FFmpegDecoderModule<53>::Create(&sLibAV); break;
-     case 54: module = FFmpegDecoderModule<54>::Create(&sLibAV); break;
-     case 55:
-     case 56: module = FFmpegDecoderModule<55>::Create(&sLibAV); break;
-     case 57: module = FFmpegDecoderModule<57>::Create(&sLibAV); break;
-+    case 58: module = FFmpegDecoderModule<58>::Create(&sLibAV); break;
-     default: module = nullptr;
-   }
-   return module.forget();
- }
- 
- /* static */ const char*
- FFmpegRuntimeLinker::LinkStatusString()
- {
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/COPYING.LGPLv2.1 b/dom/media/platforms/ffmpeg/ffmpeg58/include/COPYING.LGPLv2.1
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/COPYING.LGPLv2.1
-@@ -0,0 +1,504 @@
-+                  GNU LESSER GENERAL PUBLIC LICENSE
-+                       Version 2.1, February 1999
-+
-+ Copyright (C) 1991, 1999 Free Software Foundation, Inc.
-+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ Everyone is permitted to copy and distribute verbatim copies
-+ of this license document, but changing it is not allowed.
-+
-+[This is the first released version of the Lesser GPL.  It also counts
-+ as the successor of the GNU Library Public License, version 2, hence
-+ the version number 2.1.]
-+
-+                            Preamble
-+
-+  The licenses for most software are designed to take away your
-+freedom to share and change it.  By contrast, the GNU General Public
-+Licenses are intended to guarantee your freedom to share and change
-+free software--to make sure the software is free for all its users.
-+
-+  This license, the Lesser General Public License, applies to some
-+specially designated software packages--typically libraries--of the
-+Free Software Foundation and other authors who decide to use it.  You
-+can use it too, but we suggest you first think carefully about whether
-+this license or the ordinary General Public License is the better
-+strategy to use in any particular case, based on the explanations below.
-+
-+  When we speak of free software, we are referring to freedom of use,
-+not price.  Our General Public Licenses are designed to make sure that
-+you have the freedom to distribute copies of free software (and charge
-+for this service if you wish); that you receive source code or can get
-+it if you want it; that you can change the software and use pieces of
-+it in new free programs; and that you are informed that you can do
-+these things.
-+
-+  To protect your rights, we need to make restrictions that forbid
-+distributors to deny you these rights or to ask you to surrender these
-+rights.  These restrictions translate to certain responsibilities for
-+you if you distribute copies of the library or if you modify it.
-+
-+  For example, if you distribute copies of the library, whether gratis
-+or for a fee, you must give the recipients all the rights that we gave
-+you.  You must make sure that they, too, receive or can get the source
-+code.  If you link other code with the library, you must provide
-+complete object files to the recipients, so that they can relink them
-+with the library after making changes to the library and recompiling
-+it.  And you must show them these terms so they know their rights.
-+
-+  We protect your rights with a two-step method: (1) we copyright the
-+library, and (2) we offer you this license, which gives you legal
-+permission to copy, distribute and/or modify the library.
-+
-+  To protect each distributor, we want to make it very clear that
-+there is no warranty for the free library.  Also, if the library is
-+modified by someone else and passed on, the recipients should know
-+that what they have is not the original version, so that the original
-+author's reputation will not be affected by problems that might be
-+introduced by others.
-+
-+  Finally, software patents pose a constant threat to the existence of
-+any free program.  We wish to make sure that a company cannot
-+effectively restrict the users of a free program by obtaining a
-+restrictive license from a patent holder.  Therefore, we insist that
-+any patent license obtained for a version of the library must be
-+consistent with the full freedom of use specified in this license.
-+
-+  Most GNU software, including some libraries, is covered by the
-+ordinary GNU General Public License.  This license, the GNU Lesser
-+General Public License, applies to certain designated libraries, and
-+is quite different from the ordinary General Public License.  We use
-+this license for certain libraries in order to permit linking those
-+libraries into non-free programs.
-+
-+  When a program is linked with a library, whether statically or using
-+a shared library, the combination of the two is legally speaking a
-+combined work, a derivative of the original library.  The ordinary
-+General Public License therefore permits such linking only if the
-+entire combination fits its criteria of freedom.  The Lesser General
-+Public License permits more lax criteria for linking other code with
-+the library.
-+
-+  We call this license the "Lesser" General Public License because it
-+does Less to protect the user's freedom than the ordinary General
-+Public License.  It also provides other free software developers Less
-+of an advantage over competing non-free programs.  These disadvantages
-+are the reason we use the ordinary General Public License for many
-+libraries.  However, the Lesser license provides advantages in certain
-+special circumstances.
-+
-+  For example, on rare occasions, there may be a special need to
-+encourage the widest possible use of a certain library, so that it becomes
-+a de-facto standard.  To achieve this, non-free programs must be
-+allowed to use the library.  A more frequent case is that a free
-+library does the same job as widely used non-free libraries.  In this
-+case, there is little to gain by limiting the free library to free
-+software only, so we use the Lesser General Public License.
-+
-+  In other cases, permission to use a particular library in non-free
-+programs enables a greater number of people to use a large body of
-+free software.  For example, permission to use the GNU C Library in
-+non-free programs enables many more people to use the whole GNU
-+operating system, as well as its variant, the GNU/Linux operating
-+system.
-+
-+  Although the Lesser General Public License is Less protective of the
-+users' freedom, it does ensure that the user of a program that is
-+linked with the Library has the freedom and the wherewithal to run
-+that program using a modified version of the Library.
-+
-+  The precise terms and conditions for copying, distribution and
-+modification follow.  Pay close attention to the difference between a
-+"work based on the library" and a "work that uses the library".  The
-+former contains code derived from the library, whereas the latter must
-+be combined with the library in order to run.
-+
-+                  GNU LESSER GENERAL PUBLIC LICENSE
-+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-+
-+  0. This License Agreement applies to any software library or other
-+program which contains a notice placed by the copyright holder or
-+other authorized party saying it may be distributed under the terms of
-+this Lesser General Public License (also called "this License").
-+Each licensee is addressed as "you".
-+
-+  A "library" means a collection of software functions and/or data
-+prepared so as to be conveniently linked with application programs
-+(which use some of those functions and data) to form executables.
-+
-+  The "Library", below, refers to any such software library or work
-+which has been distributed under these terms.  A "work based on the
-+Library" means either the Library or any derivative work under
-+copyright law: that is to say, a work containing the Library or a
-+portion of it, either verbatim or with modifications and/or translated
-+straightforwardly into another language.  (Hereinafter, translation is
-+included without limitation in the term "modification".)
-+
-+  "Source code" for a work means the preferred form of the work for
-+making modifications to it.  For a library, complete source code means
-+all the source code for all modules it contains, plus any associated
-+interface definition files, plus the scripts used to control compilation
-+and installation of the library.
-+
-+  Activities other than copying, distribution and modification are not
-+covered by this License; they are outside its scope.  The act of
-+running a program using the Library is not restricted, and output from
-+such a program is covered only if its contents constitute a work based
-+on the Library (independent of the use of the Library in a tool for
-+writing it).  Whether that is true depends on what the Library does
-+and what the program that uses the Library does.
-+
-+  1. You may copy and distribute verbatim copies of the Library's
-+complete source code as you receive it, in any medium, provided that
-+you conspicuously and appropriately publish on each copy an
-+appropriate copyright notice and disclaimer of warranty; keep intact
-+all the notices that refer to this License and to the absence of any
-+warranty; and distribute a copy of this License along with the
-+Library.
-+
-+  You may charge a fee for the physical act of transferring a copy,
-+and you may at your option offer warranty protection in exchange for a
-+fee.
-+
-+  2. You may modify your copy or copies of the Library or any portion
-+of it, thus forming a work based on the Library, and copy and
-+distribute such modifications or work under the terms of Section 1
-+above, provided that you also meet all of these conditions:
-+
-+    a) The modified work must itself be a software library.
-+
-+    b) You must cause the files modified to carry prominent notices
-+    stating that you changed the files and the date of any change.
-+
-+    c) You must cause the whole of the work to be licensed at no
-+    charge to all third parties under the terms of this License.
-+
-+    d) If a facility in the modified Library refers to a function or a
-+    table of data to be supplied by an application program that uses
-+    the facility, other than as an argument passed when the facility
-+    is invoked, then you must make a good faith effort to ensure that,
-+    in the event an application does not supply such function or
-+    table, the facility still operates, and performs whatever part of
-+    its purpose remains meaningful.
-+
-+    (For example, a function in a library to compute square roots has
-+    a purpose that is entirely well-defined independent of the
-+    application.  Therefore, Subsection 2d requires that any
-+    application-supplied function or table used by this function must
-+    be optional: if the application does not supply it, the square
-+    root function must still compute square roots.)
-+
-+These requirements apply to the modified work as a whole.  If
-+identifiable sections of that work are not derived from the Library,
-+and can be reasonably considered independent and separate works in
-+themselves, then this License, and its terms, do not apply to those
-+sections when you distribute them as separate works.  But when you
-+distribute the same sections as part of a whole which is a work based
-+on the Library, the distribution of the whole must be on the terms of
-+this License, whose permissions for other licensees extend to the
-+entire whole, and thus to each and every part regardless of who wrote
-+it.
-+
-+Thus, it is not the intent of this section to claim rights or contest
-+your rights to work written entirely by you; rather, the intent is to
-+exercise the right to control the distribution of derivative or
-+collective works based on the Library.
-+
-+In addition, mere aggregation of another work not based on the Library
-+with the Library (or with a work based on the Library) on a volume of
-+a storage or distribution medium does not bring the other work under
-+the scope of this License.
-+
-+  3. You may opt to apply the terms of the ordinary GNU General Public
-+License instead of this License to a given copy of the Library.  To do
-+this, you must alter all the notices that refer to this License, so
-+that they refer to the ordinary GNU General Public License, version 2,
-+instead of to this License.  (If a newer version than version 2 of the
-+ordinary GNU General Public License has appeared, then you can specify
-+that version instead if you wish.)  Do not make any other change in
-+these notices.
-+
-+  Once this change is made in a given copy, it is irreversible for
-+that copy, so the ordinary GNU General Public License applies to all
-+subsequent copies and derivative works made from that copy.
-+
-+  This option is useful when you wish to copy part of the code of
-+the Library into a program that is not a library.
-+
-+  4. You may copy and distribute the Library (or a portion or
-+derivative of it, under Section 2) in object code or executable form
-+under the terms of Sections 1 and 2 above provided that you accompany
-+it with the complete corresponding machine-readable source code, which
-+must be distributed under the terms of Sections 1 and 2 above on a
-+medium customarily used for software interchange.
-+
-+  If distribution of object code is made by offering access to copy
-+from a designated place, then offering equivalent access to copy the
-+source code from the same place satisfies the requirement to
-+distribute the source code, even though third parties are not
-+compelled to copy the source along with the object code.
-+
-+  5. A program that contains no derivative of any portion of the
-+Library, but is designed to work with the Library by being compiled or
-+linked with it, is called a "work that uses the Library".  Such a
-+work, in isolation, is not a derivative work of the Library, and
-+therefore falls outside the scope of this License.
-+
-+  However, linking a "work that uses the Library" with the Library
-+creates an executable that is a derivative of the Library (because it
-+contains portions of the Library), rather than a "work that uses the
-+library".  The executable is therefore covered by this License.
-+Section 6 states terms for distribution of such executables.
-+
-+  When a "work that uses the Library" uses material from a header file
-+that is part of the Library, the object code for the work may be a
-+derivative work of the Library even though the source code is not.
-+Whether this is true is especially significant if the work can be
-+linked without the Library, or if the work is itself a library.  The
-+threshold for this to be true is not precisely defined by law.
-+
-+  If such an object file uses only numerical parameters, data
-+structure layouts and accessors, and small macros and small inline
-+functions (ten lines or less in length), then the use of the object
-+file is unrestricted, regardless of whether it is legally a derivative
-+work.  (Executables containing this object code plus portions of the
-+Library will still fall under Section 6.)
-+
-+  Otherwise, if the work is a derivative of the Library, you may
-+distribute the object code for the work under the terms of Section 6.
-+Any executables containing that work also fall under Section 6,
-+whether or not they are linked directly with the Library itself.
-+
-+  6. As an exception to the Sections above, you may also combine or
-+link a "work that uses the Library" with the Library to produce a
-+work containing portions of the Library, and distribute that work
-+under terms of your choice, provided that the terms permit
-+modification of the work for the customer's own use and reverse
-+engineering for debugging such modifications.
-+
-+  You must give prominent notice with each copy of the work that the
-+Library is used in it and that the Library and its use are covered by
-+this License.  You must supply a copy of this License.  If the work
-+during execution displays copyright notices, you must include the
-+copyright notice for the Library among them, as well as a reference
-+directing the user to the copy of this License.  Also, you must do one
-+of these things:
-+
-+    a) Accompany the work with the complete corresponding
-+    machine-readable source code for the Library including whatever
-+    changes were used in the work (which must be distributed under
-+    Sections 1 and 2 above); and, if the work is an executable linked
-+    with the Library, with the complete machine-readable "work that
-+    uses the Library", as object code and/or source code, so that the
-+    user can modify the Library and then relink to produce a modified
-+    executable containing the modified Library.  (It is understood
-+    that the user who changes the contents of definitions files in the
-+    Library will not necessarily be able to recompile the application
-+    to use the modified definitions.)
-+
-+    b) Use a suitable shared library mechanism for linking with the
-+    Library.  A suitable mechanism is one that (1) uses at run time a
-+    copy of the library already present on the user's computer system,
-+    rather than copying library functions into the executable, and (2)
-+    will operate properly with a modified version of the library, if
-+    the user installs one, as long as the modified version is
-+    interface-compatible with the version that the work was made with.
-+
-+    c) Accompany the work with a written offer, valid for at
-+    least three years, to give the same user the materials
-+    specified in Subsection 6a, above, for a charge no more
-+    than the cost of performing this distribution.
-+
-+    d) If distribution of the work is made by offering access to copy
-+    from a designated place, offer equivalent access to copy the above
-+    specified materials from the same place.
-+
-+    e) Verify that the user has already received a copy of these
-+    materials or that you have already sent this user a copy.
-+
-+  For an executable, the required form of the "work that uses the
-+Library" must include any data and utility programs needed for
-+reproducing the executable from it.  However, as a special exception,
-+the materials to be distributed need not include anything that is
-+normally distributed (in either source or binary form) with the major
-+components (compiler, kernel, and so on) of the operating system on
-+which the executable runs, unless that component itself accompanies
-+the executable.
-+
-+  It may happen that this requirement contradicts the license
-+restrictions of other proprietary libraries that do not normally
-+accompany the operating system.  Such a contradiction means you cannot
-+use both them and the Library together in an executable that you
-+distribute.
-+
-+  7. You may place library facilities that are a work based on the
-+Library side-by-side in a single library together with other library
-+facilities not covered by this License, and distribute such a combined
-+library, provided that the separate distribution of the work based on
-+the Library and of the other library facilities is otherwise
-+permitted, and provided that you do these two things:
-+
-+    a) Accompany the combined library with a copy of the same work
-+    based on the Library, uncombined with any other library
-+    facilities.  This must be distributed under the terms of the
-+    Sections above.
-+
-+    b) Give prominent notice with the combined library of the fact
-+    that part of it is a work based on the Library, and explaining
-+    where to find the accompanying uncombined form of the same work.
-+
-+  8. You may not copy, modify, sublicense, link with, or distribute
-+the Library except as expressly provided under this License.  Any
-+attempt otherwise to copy, modify, sublicense, link with, or
-+distribute the Library is void, and will automatically terminate your
-+rights under this License.  However, parties who have received copies,
-+or rights, from you under this License will not have their licenses
-+terminated so long as such parties remain in full compliance.
-+
-+  9. You are not required to accept this License, since you have not
-+signed it.  However, nothing else grants you permission to modify or
-+distribute the Library or its derivative works.  These actions are
-+prohibited by law if you do not accept this License.  Therefore, by
-+modifying or distributing the Library (or any work based on the
-+Library), you indicate your acceptance of this License to do so, and
-+all its terms and conditions for copying, distributing or modifying
-+the Library or works based on it.
-+
-+  10. Each time you redistribute the Library (or any work based on the
-+Library), the recipient automatically receives a license from the
-+original licensor to copy, distribute, link with or modify the Library
-+subject to these terms and conditions.  You may not impose any further
-+restrictions on the recipients' exercise of the rights granted herein.
-+You are not responsible for enforcing compliance by third parties with
-+this License.
-+
-+  11. If, as a consequence of a court judgment or allegation of patent
-+infringement or for any other reason (not limited to patent issues),
-+conditions are imposed on you (whether by court order, agreement or
-+otherwise) that contradict the conditions of this License, they do not
-+excuse you from the conditions of this License.  If you cannot
-+distribute so as to satisfy simultaneously your obligations under this
-+License and any other pertinent obligations, then as a consequence you
-+may not distribute the Library at all.  For example, if a patent
-+license would not permit royalty-free redistribution of the Library by
-+all those who receive copies directly or indirectly through you, then
-+the only way you could satisfy both it and this License would be to
-+refrain entirely from distribution of the Library.
-+
-+If any portion of this section is held invalid or unenforceable under any
-+particular circumstance, the balance of the section is intended to apply,
-+and the section as a whole is intended to apply in other circumstances.
-+
-+It is not the purpose of this section to induce you to infringe any
-+patents or other property right claims or to contest validity of any
-+such claims; this section has the sole purpose of protecting the
-+integrity of the free software distribution system which is
-+implemented by public license practices.  Many people have made
-+generous contributions to the wide range of software distributed
-+through that system in reliance on consistent application of that
-+system; it is up to the author/donor to decide if he or she is willing
-+to distribute software through any other system and a licensee cannot
-+impose that choice.
-+
-+This section is intended to make thoroughly clear what is believed to
-+be a consequence of the rest of this License.
-+
-+  12. If the distribution and/or use of the Library is restricted in
-+certain countries either by patents or by copyrighted interfaces, the
-+original copyright holder who places the Library under this License may add
-+an explicit geographical distribution limitation excluding those countries,
-+so that distribution is permitted only in or among countries not thus
-+excluded.  In such case, this License incorporates the limitation as if
-+written in the body of this License.
-+
-+  13. The Free Software Foundation may publish revised and/or new
-+versions of the Lesser General Public License from time to time.
-+Such new versions will be similar in spirit to the present version,
-+but may differ in detail to address new problems or concerns.
-+
-+Each version is given a distinguishing version number.  If the Library
-+specifies a version number of this License which applies to it and
-+"any later version", you have the option of following the terms and
-+conditions either of that version or of any later version published by
-+the Free Software Foundation.  If the Library does not specify a
-+license version number, you may choose any version ever published by
-+the Free Software Foundation.
-+
-+  14. If you wish to incorporate parts of the Library into other free
-+programs whose distribution conditions are incompatible with these,
-+write to the author to ask for permission.  For software which is
-+copyrighted by the Free Software Foundation, write to the Free
-+Software Foundation; we sometimes make exceptions for this.  Our
-+decision will be guided by the two goals of preserving the free status
-+of all derivatives of our free software and of promoting the sharing
-+and reuse of software generally.
-+
-+                            NO WARRANTY
-+
-+  15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-+PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-+LIBRARY IS WITH YOU.  SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-+
-+  16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-+DAMAGES.
-+
-+                     END OF TERMS AND CONDITIONS
-+
-+           How to Apply These Terms to Your New Libraries
-+
-+  If you develop a new library, and you want it to be of the greatest
-+possible use to the public, we recommend making it free software that
-+everyone can redistribute and change.  You can do so by permitting
-+redistribution under these terms (or, alternatively, under the terms of the
-+ordinary General Public License).
-+
-+  To apply these terms, attach the following notices to the library.  It is
-+safest to attach them to the start of each source file to most effectively
-+convey the exclusion of warranty; and each file should have at least the
-+"copyright" line and a pointer to where the full notice is found.
-+
-+    <one line to give the library's name and a brief idea of what it does.>
-+    Copyright (C) <year>  <name of author>
-+
-+    This library is free software; you can redistribute it and/or
-+    modify it under the terms of the GNU Lesser General Public
-+    License as published by the Free Software Foundation; either
-+    version 2.1 of the License, or (at your option) any later version.
-+
-+    This library is distributed in the hope that it will be useful,
-+    but WITHOUT ANY WARRANTY; without even the implied warranty of
-+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+    Lesser General Public License for more details.
-+
-+    You should have received a copy of the GNU Lesser General Public
-+    License along with this library; if not, write to the Free Software
-+    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+
-+Also add information on how to contact you by electronic and paper mail.
-+
-+You should also get your employer (if you work as a programmer) or your
-+school, if any, to sign a "copyright disclaimer" for the library, if
-+necessary.  Here is a sample; alter the names:
-+
-+  Yoyodyne, Inc., hereby disclaims all copyright interest in the
-+  library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-+
-+  <signature of Ty Coon>, 1 April 1990
-+  Ty Coon, President of Vice
-+
-+That's all there is to it!
-+
-+
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avcodec.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avcodec.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avcodec.h
-@@ -0,0 +1,6146 @@
-+/*
-+ * copyright (c) 2001 Fabrice Bellard
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVCODEC_AVCODEC_H
-+#define AVCODEC_AVCODEC_H
-+
-+/**
-+ * @file
-+ * @ingroup libavc
-+ * Libavcodec external API header
-+ */
-+
-+#include <errno.h>
-+#include "libavutil/samplefmt.h"
-+#include "libavutil/attributes.h"
-+#include "libavutil/avutil.h"
-+#include "libavutil/buffer.h"
-+#include "libavutil/cpu.h"
-+#include "libavutil/channel_layout.h"
-+#include "libavutil/dict.h"
-+#include "libavutil/frame.h"
-+#include "libavutil/hwcontext.h"
-+#include "libavutil/log.h"
-+#include "libavutil/pixfmt.h"
-+#include "libavutil/rational.h"
-+
-+#include "version.h"
-+
-+/**
-+ * @defgroup libavc libavcodec
-+ * Encoding/Decoding Library
-+ *
-+ * @{
-+ *
-+ * @defgroup lavc_decoding Decoding
-+ * @{
-+ * @}
-+ *
-+ * @defgroup lavc_encoding Encoding
-+ * @{
-+ * @}
-+ *
-+ * @defgroup lavc_codec Codecs
-+ * @{
-+ * @defgroup lavc_codec_native Native Codecs
-+ * @{
-+ * @}
-+ * @defgroup lavc_codec_wrappers External library wrappers
-+ * @{
-+ * @}
-+ * @defgroup lavc_codec_hwaccel Hardware Accelerators bridge
-+ * @{
-+ * @}
-+ * @}
-+ * @defgroup lavc_internal Internal
-+ * @{
-+ * @}
-+ * @}
-+ */
-+
-+/**
-+ * @ingroup libavc
-+ * @defgroup lavc_encdec send/receive encoding and decoding API overview
-+ * @{
-+ *
-+ * The avcodec_send_packet()/avcodec_receive_frame()/avcodec_send_frame()/
-+ * avcodec_receive_packet() functions provide an encode/decode API, which
-+ * decouples input and output.
-+ *
-+ * The API is very similar for encoding/decoding and audio/video, and works as
-+ * follows:
-+ * - Set up and open the AVCodecContext as usual.
-+ * - Send valid input:
-+ *   - For decoding, call avcodec_send_packet() to give the decoder raw
-+ *     compressed data in an AVPacket.
-+ *   - For encoding, call avcodec_send_frame() to give the encoder an AVFrame
-+ *     containing uncompressed audio or video.
-+ *   In both cases, it is recommended that AVPackets and AVFrames are
-+ *   refcounted, or libavcodec might have to copy the input data. (libavformat
-+ *   always returns refcounted AVPackets, and av_frame_get_buffer() allocates
-+ *   refcounted AVFrames.)
-+ * - Receive output in a loop. Periodically call one of the avcodec_receive_*()
-+ *   functions and process their output:
-+ *   - For decoding, call avcodec_receive_frame(). On success, it will return
-+ *     an AVFrame containing uncompressed audio or video data.
-+ *   - For encoding, call avcodec_receive_packet(). On success, it will return
-+ *     an AVPacket with a compressed frame.
-+ *   Repeat this call until it returns AVERROR(EAGAIN) or an error. The
-+ *   AVERROR(EAGAIN) return value means that new input data is required to
-+ *   return new output. In this case, continue with sending input. For each
-+ *   input frame/packet, the codec will typically return 1 output frame/packet,
-+ *   but it can also be 0 or more than 1.
-+ *
-+ * At the beginning of decoding or encoding, the codec might accept multiple
-+ * input frames/packets without returning a frame, until its internal buffers
-+ * are filled. This situation is handled transparently if you follow the steps
-+ * outlined above.
-+ *
-+ * In theory, sending input can result in EAGAIN - this should happen only if
-+ * not all output was received. You can use this to structure alternative decode
-+ * or encode loops other than the one suggested above. For example, you could
-+ * try sending new input on each iteration, and try to receive output if that
-+ * returns EAGAIN.
-+ *
-+ * End of stream situations. These require "flushing" (aka draining) the codec,
-+ * as the codec might buffer multiple frames or packets internally for
-+ * performance or out of necessity (consider B-frames).
-+ * This is handled as follows:
-+ * - Instead of valid input, send NULL to the avcodec_send_packet() (decoding)
-+ *   or avcodec_send_frame() (encoding) functions. This will enter draining
-+ *   mode.
-+ * - Call avcodec_receive_frame() (decoding) or avcodec_receive_packet()
-+ *   (encoding) in a loop until AVERROR_EOF is returned. The functions will
-+ *   not return AVERROR(EAGAIN), unless you forgot to enter draining mode.
-+ * - Before decoding can be resumed again, the codec has to be reset with
-+ *   avcodec_flush_buffers().
-+ *
-+ * Using the API as outlined above is highly recommended. But it is also
-+ * possible to call functions outside of this rigid schema. For example, you can
-+ * call avcodec_send_packet() repeatedly without calling
-+ * avcodec_receive_frame(). In this case, avcodec_send_packet() will succeed
-+ * until the codec's internal buffer has been filled up (which is typically of
-+ * size 1 per output frame, after initial input), and then reject input with
-+ * AVERROR(EAGAIN). Once it starts rejecting input, you have no choice but to
-+ * read at least some output.
-+ *
-+ * Not all codecs will follow a rigid and predictable dataflow; the only
-+ * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on
-+ * one end implies that a receive/send call on the other end will succeed, or
-+ * at least will not fail with AVERROR(EAGAIN). In general, no codec will
-+ * permit unlimited buffering of input or output.
-+ *
-+ * This API replaces the following legacy functions:
-+ * - avcodec_decode_video2() and avcodec_decode_audio4():
-+ *   Use avcodec_send_packet() to feed input to the decoder, then use
-+ *   avcodec_receive_frame() to receive decoded frames after each packet.
-+ *   Unlike with the old video decoding API, multiple frames might result from
-+ *   a packet. For audio, splitting the input packet into frames by partially
-+ *   decoding packets becomes transparent to the API user. You never need to
-+ *   feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then
-+ *   no data was read from the packet).
-+ *   Additionally, sending a flush/draining packet is required only once.
-+ * - avcodec_encode_video2()/avcodec_encode_audio2():
-+ *   Use avcodec_send_frame() to feed input to the encoder, then use
-+ *   avcodec_receive_packet() to receive encoded packets.
-+ *   Providing user-allocated buffers for avcodec_receive_packet() is not
-+ *   possible.
-+ * - The new API does not handle subtitles yet.
-+ *
-+ * Mixing new and old function calls on the same AVCodecContext is not allowed,
-+ * and will result in undefined behavior.
-+ *
-+ * Some codecs might require using the new API; using the old API will return
-+ * an error when calling it. All codecs support the new API.
-+ *
-+ * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This
-+ * would be an invalid state, which could put the codec user into an endless
-+ * loop. The API has no concept of time either: it cannot happen that trying to
-+ * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second
-+ * later accepts the packet (with no other receive/flush API calls involved).
-+ * The API is a strict state machine, and the passage of time is not supposed
-+ * to influence it. Some timing-dependent behavior might still be deemed
-+ * acceptable in certain cases. But it must never result in both send/receive
-+ * returning EAGAIN at the same time at any point. It must also absolutely be
-+ * avoided that the current state is "unstable" and can "flip-flop" between
-+ * the send/receive APIs allowing progress. For example, it's not allowed that
-+ * the codec randomly decides that it actually wants to consume a packet now
-+ * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an
-+ * avcodec_send_packet() call.
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavc_core Core functions/structures.
-+ * @ingroup libavc
-+ *
-+ * Basic definitions, functions for querying libavcodec capabilities,
-+ * allocating core structures, etc.
-+ * @{
-+ */
-+
-+
-+/**
-+ * Identify the syntax and semantics of the bitstream.
-+ * The principle is roughly:
-+ * Two decoders with the same ID can decode the same streams.
-+ * Two encoders with the same ID can encode compatible streams.
-+ * There may be slight deviations from the principle due to implementation
-+ * details.
-+ *
-+ * If you add a codec ID to this list, add it so that
-+ * 1. no value of an existing codec ID changes (that would break ABI),
-+ * 2. it is as close as possible to similar codecs
-+ *
-+ * After adding new codec IDs, do not forget to add an entry to the codec
-+ * descriptor list and bump libavcodec minor version.
-+ */
-+enum AVCodecID {
-+    AV_CODEC_ID_NONE,
-+
-+    /* video codecs */
-+    AV_CODEC_ID_MPEG1VIDEO,
-+    AV_CODEC_ID_MPEG2VIDEO, ///< preferred ID for MPEG-1/2 video decoding
-+    AV_CODEC_ID_H261,
-+    AV_CODEC_ID_H263,
-+    AV_CODEC_ID_RV10,
-+    AV_CODEC_ID_RV20,
-+    AV_CODEC_ID_MJPEG,
-+    AV_CODEC_ID_MJPEGB,
-+    AV_CODEC_ID_LJPEG,
-+    AV_CODEC_ID_SP5X,
-+    AV_CODEC_ID_JPEGLS,
-+    AV_CODEC_ID_MPEG4,
-+    AV_CODEC_ID_RAWVIDEO,
-+    AV_CODEC_ID_MSMPEG4V1,
-+    AV_CODEC_ID_MSMPEG4V2,
-+    AV_CODEC_ID_MSMPEG4V3,
-+    AV_CODEC_ID_WMV1,
-+    AV_CODEC_ID_WMV2,
-+    AV_CODEC_ID_H263P,
-+    AV_CODEC_ID_H263I,
-+    AV_CODEC_ID_FLV1,
-+    AV_CODEC_ID_SVQ1,
-+    AV_CODEC_ID_SVQ3,
-+    AV_CODEC_ID_DVVIDEO,
-+    AV_CODEC_ID_HUFFYUV,
-+    AV_CODEC_ID_CYUV,
-+    AV_CODEC_ID_H264,
-+    AV_CODEC_ID_INDEO3,
-+    AV_CODEC_ID_VP3,
-+    AV_CODEC_ID_THEORA,
-+    AV_CODEC_ID_ASV1,
-+    AV_CODEC_ID_ASV2,
-+    AV_CODEC_ID_FFV1,
-+    AV_CODEC_ID_4XM,
-+    AV_CODEC_ID_VCR1,
-+    AV_CODEC_ID_CLJR,
-+    AV_CODEC_ID_MDEC,
-+    AV_CODEC_ID_ROQ,
-+    AV_CODEC_ID_INTERPLAY_VIDEO,
-+    AV_CODEC_ID_XAN_WC3,
-+    AV_CODEC_ID_XAN_WC4,
-+    AV_CODEC_ID_RPZA,
-+    AV_CODEC_ID_CINEPAK,
-+    AV_CODEC_ID_WS_VQA,
-+    AV_CODEC_ID_MSRLE,
-+    AV_CODEC_ID_MSVIDEO1,
-+    AV_CODEC_ID_IDCIN,
-+    AV_CODEC_ID_8BPS,
-+    AV_CODEC_ID_SMC,
-+    AV_CODEC_ID_FLIC,
-+    AV_CODEC_ID_TRUEMOTION1,
-+    AV_CODEC_ID_VMDVIDEO,
-+    AV_CODEC_ID_MSZH,
-+    AV_CODEC_ID_ZLIB,
-+    AV_CODEC_ID_QTRLE,
-+    AV_CODEC_ID_TSCC,
-+    AV_CODEC_ID_ULTI,
-+    AV_CODEC_ID_QDRAW,
-+    AV_CODEC_ID_VIXL,
-+    AV_CODEC_ID_QPEG,
-+    AV_CODEC_ID_PNG,
-+    AV_CODEC_ID_PPM,
-+    AV_CODEC_ID_PBM,
-+    AV_CODEC_ID_PGM,
-+    AV_CODEC_ID_PGMYUV,
-+    AV_CODEC_ID_PAM,
-+    AV_CODEC_ID_FFVHUFF,
-+    AV_CODEC_ID_RV30,
-+    AV_CODEC_ID_RV40,
-+    AV_CODEC_ID_VC1,
-+    AV_CODEC_ID_WMV3,
-+    AV_CODEC_ID_LOCO,
-+    AV_CODEC_ID_WNV1,
-+    AV_CODEC_ID_AASC,
-+    AV_CODEC_ID_INDEO2,
-+    AV_CODEC_ID_FRAPS,
-+    AV_CODEC_ID_TRUEMOTION2,
-+    AV_CODEC_ID_BMP,
-+    AV_CODEC_ID_CSCD,
-+    AV_CODEC_ID_MMVIDEO,
-+    AV_CODEC_ID_ZMBV,
-+    AV_CODEC_ID_AVS,
-+    AV_CODEC_ID_SMACKVIDEO,
-+    AV_CODEC_ID_NUV,
-+    AV_CODEC_ID_KMVC,
-+    AV_CODEC_ID_FLASHSV,
-+    AV_CODEC_ID_CAVS,
-+    AV_CODEC_ID_JPEG2000,
-+    AV_CODEC_ID_VMNC,
-+    AV_CODEC_ID_VP5,
-+    AV_CODEC_ID_VP6,
-+    AV_CODEC_ID_VP6F,
-+    AV_CODEC_ID_TARGA,
-+    AV_CODEC_ID_DSICINVIDEO,
-+    AV_CODEC_ID_TIERTEXSEQVIDEO,
-+    AV_CODEC_ID_TIFF,
-+    AV_CODEC_ID_GIF,
-+    AV_CODEC_ID_DXA,
-+    AV_CODEC_ID_DNXHD,
-+    AV_CODEC_ID_THP,
-+    AV_CODEC_ID_SGI,
-+    AV_CODEC_ID_C93,
-+    AV_CODEC_ID_BETHSOFTVID,
-+    AV_CODEC_ID_PTX,
-+    AV_CODEC_ID_TXD,
-+    AV_CODEC_ID_VP6A,
-+    AV_CODEC_ID_AMV,
-+    AV_CODEC_ID_VB,
-+    AV_CODEC_ID_PCX,
-+    AV_CODEC_ID_SUNRAST,
-+    AV_CODEC_ID_INDEO4,
-+    AV_CODEC_ID_INDEO5,
-+    AV_CODEC_ID_MIMIC,
-+    AV_CODEC_ID_RL2,
-+    AV_CODEC_ID_ESCAPE124,
-+    AV_CODEC_ID_DIRAC,
-+    AV_CODEC_ID_BFI,
-+    AV_CODEC_ID_CMV,
-+    AV_CODEC_ID_MOTIONPIXELS,
-+    AV_CODEC_ID_TGV,
-+    AV_CODEC_ID_TGQ,
-+    AV_CODEC_ID_TQI,
-+    AV_CODEC_ID_AURA,
-+    AV_CODEC_ID_AURA2,
-+    AV_CODEC_ID_V210X,
-+    AV_CODEC_ID_TMV,
-+    AV_CODEC_ID_V210,
-+    AV_CODEC_ID_DPX,
-+    AV_CODEC_ID_MAD,
-+    AV_CODEC_ID_FRWU,
-+    AV_CODEC_ID_FLASHSV2,
-+    AV_CODEC_ID_CDGRAPHICS,
-+    AV_CODEC_ID_R210,
-+    AV_CODEC_ID_ANM,
-+    AV_CODEC_ID_BINKVIDEO,
-+    AV_CODEC_ID_IFF_ILBM,
-+#define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
-+    AV_CODEC_ID_KGV1,
-+    AV_CODEC_ID_YOP,
-+    AV_CODEC_ID_VP8,
-+    AV_CODEC_ID_PICTOR,
-+    AV_CODEC_ID_ANSI,
-+    AV_CODEC_ID_A64_MULTI,
-+    AV_CODEC_ID_A64_MULTI5,
-+    AV_CODEC_ID_R10K,
-+    AV_CODEC_ID_MXPEG,
-+    AV_CODEC_ID_LAGARITH,
-+    AV_CODEC_ID_PRORES,
-+    AV_CODEC_ID_JV,
-+    AV_CODEC_ID_DFA,
-+    AV_CODEC_ID_WMV3IMAGE,
-+    AV_CODEC_ID_VC1IMAGE,
-+    AV_CODEC_ID_UTVIDEO,
-+    AV_CODEC_ID_BMV_VIDEO,
-+    AV_CODEC_ID_VBLE,
-+    AV_CODEC_ID_DXTORY,
-+    AV_CODEC_ID_V410,
-+    AV_CODEC_ID_XWD,
-+    AV_CODEC_ID_CDXL,
-+    AV_CODEC_ID_XBM,
-+    AV_CODEC_ID_ZEROCODEC,
-+    AV_CODEC_ID_MSS1,
-+    AV_CODEC_ID_MSA1,
-+    AV_CODEC_ID_TSCC2,
-+    AV_CODEC_ID_MTS2,
-+    AV_CODEC_ID_CLLC,
-+    AV_CODEC_ID_MSS2,
-+    AV_CODEC_ID_VP9,
-+    AV_CODEC_ID_AIC,
-+    AV_CODEC_ID_ESCAPE130,
-+    AV_CODEC_ID_G2M,
-+    AV_CODEC_ID_WEBP,
-+    AV_CODEC_ID_HNM4_VIDEO,
-+    AV_CODEC_ID_HEVC,
-+#define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
-+    AV_CODEC_ID_FIC,
-+    AV_CODEC_ID_ALIAS_PIX,
-+    AV_CODEC_ID_BRENDER_PIX,
-+    AV_CODEC_ID_PAF_VIDEO,
-+    AV_CODEC_ID_EXR,
-+    AV_CODEC_ID_VP7,
-+    AV_CODEC_ID_SANM,
-+    AV_CODEC_ID_SGIRLE,
-+    AV_CODEC_ID_MVC1,
-+    AV_CODEC_ID_MVC2,
-+    AV_CODEC_ID_HQX,
-+    AV_CODEC_ID_TDSC,
-+    AV_CODEC_ID_HQ_HQA,
-+    AV_CODEC_ID_HAP,
-+    AV_CODEC_ID_DDS,
-+    AV_CODEC_ID_DXV,
-+    AV_CODEC_ID_SCREENPRESSO,
-+    AV_CODEC_ID_RSCC,
-+
-+    AV_CODEC_ID_Y41P = 0x8000,
-+    AV_CODEC_ID_AVRP,
-+    AV_CODEC_ID_012V,
-+    AV_CODEC_ID_AVUI,
-+    AV_CODEC_ID_AYUV,
-+    AV_CODEC_ID_TARGA_Y216,
-+    AV_CODEC_ID_V308,
-+    AV_CODEC_ID_V408,
-+    AV_CODEC_ID_YUV4,
-+    AV_CODEC_ID_AVRN,
-+    AV_CODEC_ID_CPIA,
-+    AV_CODEC_ID_XFACE,
-+    AV_CODEC_ID_SNOW,
-+    AV_CODEC_ID_SMVJPEG,
-+    AV_CODEC_ID_APNG,
-+    AV_CODEC_ID_DAALA,
-+    AV_CODEC_ID_CFHD,
-+    AV_CODEC_ID_TRUEMOTION2RT,
-+    AV_CODEC_ID_M101,
-+    AV_CODEC_ID_MAGICYUV,
-+    AV_CODEC_ID_SHEERVIDEO,
-+    AV_CODEC_ID_YLC,
-+    AV_CODEC_ID_PSD,
-+    AV_CODEC_ID_PIXLET,
-+    AV_CODEC_ID_SPEEDHQ,
-+    AV_CODEC_ID_FMVC,
-+    AV_CODEC_ID_SCPR,
-+    AV_CODEC_ID_CLEARVIDEO,
-+    AV_CODEC_ID_XPM,
-+    AV_CODEC_ID_AV1,
-+    AV_CODEC_ID_BITPACKED,
-+    AV_CODEC_ID_MSCC,
-+    AV_CODEC_ID_SRGC,
-+    AV_CODEC_ID_SVG,
-+    AV_CODEC_ID_GDV,
-+    AV_CODEC_ID_FITS,
-+
-+    /* various PCM "codecs" */
-+    AV_CODEC_ID_FIRST_AUDIO = 0x10000,     ///< A dummy id pointing at the start of audio codecs
-+    AV_CODEC_ID_PCM_S16LE = 0x10000,
-+    AV_CODEC_ID_PCM_S16BE,
-+    AV_CODEC_ID_PCM_U16LE,
-+    AV_CODEC_ID_PCM_U16BE,
-+    AV_CODEC_ID_PCM_S8,
-+    AV_CODEC_ID_PCM_U8,
-+    AV_CODEC_ID_PCM_MULAW,
-+    AV_CODEC_ID_PCM_ALAW,
-+    AV_CODEC_ID_PCM_S32LE,
-+    AV_CODEC_ID_PCM_S32BE,
-+    AV_CODEC_ID_PCM_U32LE,
-+    AV_CODEC_ID_PCM_U32BE,
-+    AV_CODEC_ID_PCM_S24LE,
-+    AV_CODEC_ID_PCM_S24BE,
-+    AV_CODEC_ID_PCM_U24LE,
-+    AV_CODEC_ID_PCM_U24BE,
-+    AV_CODEC_ID_PCM_S24DAUD,
-+    AV_CODEC_ID_PCM_ZORK,
-+    AV_CODEC_ID_PCM_S16LE_PLANAR,
-+    AV_CODEC_ID_PCM_DVD,
-+    AV_CODEC_ID_PCM_F32BE,
-+    AV_CODEC_ID_PCM_F32LE,
-+    AV_CODEC_ID_PCM_F64BE,
-+    AV_CODEC_ID_PCM_F64LE,
-+    AV_CODEC_ID_PCM_BLURAY,
-+    AV_CODEC_ID_PCM_LXF,
-+    AV_CODEC_ID_S302M,
-+    AV_CODEC_ID_PCM_S8_PLANAR,
-+    AV_CODEC_ID_PCM_S24LE_PLANAR,
-+    AV_CODEC_ID_PCM_S32LE_PLANAR,
-+    AV_CODEC_ID_PCM_S16BE_PLANAR,
-+
-+    AV_CODEC_ID_PCM_S64LE = 0x10800,
-+    AV_CODEC_ID_PCM_S64BE,
-+    AV_CODEC_ID_PCM_F16LE,
-+    AV_CODEC_ID_PCM_F24LE,
-+
-+    /* various ADPCM codecs */
-+    AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
-+    AV_CODEC_ID_ADPCM_IMA_WAV,
-+    AV_CODEC_ID_ADPCM_IMA_DK3,
-+    AV_CODEC_ID_ADPCM_IMA_DK4,
-+    AV_CODEC_ID_ADPCM_IMA_WS,
-+    AV_CODEC_ID_ADPCM_IMA_SMJPEG,
-+    AV_CODEC_ID_ADPCM_MS,
-+    AV_CODEC_ID_ADPCM_4XM,
-+    AV_CODEC_ID_ADPCM_XA,
-+    AV_CODEC_ID_ADPCM_ADX,
-+    AV_CODEC_ID_ADPCM_EA,
-+    AV_CODEC_ID_ADPCM_G726,
-+    AV_CODEC_ID_ADPCM_CT,
-+    AV_CODEC_ID_ADPCM_SWF,
-+    AV_CODEC_ID_ADPCM_YAMAHA,
-+    AV_CODEC_ID_ADPCM_SBPRO_4,
-+    AV_CODEC_ID_ADPCM_SBPRO_3,
-+    AV_CODEC_ID_ADPCM_SBPRO_2,
-+    AV_CODEC_ID_ADPCM_THP,
-+    AV_CODEC_ID_ADPCM_IMA_AMV,
-+    AV_CODEC_ID_ADPCM_EA_R1,
-+    AV_CODEC_ID_ADPCM_EA_R3,
-+    AV_CODEC_ID_ADPCM_EA_R2,
-+    AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
-+    AV_CODEC_ID_ADPCM_IMA_EA_EACS,
-+    AV_CODEC_ID_ADPCM_EA_XAS,
-+    AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
-+    AV_CODEC_ID_ADPCM_IMA_ISS,
-+    AV_CODEC_ID_ADPCM_G722,
-+    AV_CODEC_ID_ADPCM_IMA_APC,
-+    AV_CODEC_ID_ADPCM_VIMA,
-+
-+    AV_CODEC_ID_ADPCM_AFC = 0x11800,
-+    AV_CODEC_ID_ADPCM_IMA_OKI,
-+    AV_CODEC_ID_ADPCM_DTK,
-+    AV_CODEC_ID_ADPCM_IMA_RAD,
-+    AV_CODEC_ID_ADPCM_G726LE,
-+    AV_CODEC_ID_ADPCM_THP_LE,
-+    AV_CODEC_ID_ADPCM_PSX,
-+    AV_CODEC_ID_ADPCM_AICA,
-+    AV_CODEC_ID_ADPCM_IMA_DAT4,
-+    AV_CODEC_ID_ADPCM_MTAF,
-+
-+    /* AMR */
-+    AV_CODEC_ID_AMR_NB = 0x12000,
-+    AV_CODEC_ID_AMR_WB,
-+
-+    /* RealAudio codecs*/
-+    AV_CODEC_ID_RA_144 = 0x13000,
-+    AV_CODEC_ID_RA_288,
-+
-+    /* various DPCM codecs */
-+    AV_CODEC_ID_ROQ_DPCM = 0x14000,
-+    AV_CODEC_ID_INTERPLAY_DPCM,
-+    AV_CODEC_ID_XAN_DPCM,
-+    AV_CODEC_ID_SOL_DPCM,
-+
-+    AV_CODEC_ID_SDX2_DPCM = 0x14800,
-+    AV_CODEC_ID_GREMLIN_DPCM,
-+
-+    /* audio codecs */
-+    AV_CODEC_ID_MP2 = 0x15000,
-+    AV_CODEC_ID_MP3, ///< preferred ID for decoding MPEG audio layer 1, 2 or 3
-+    AV_CODEC_ID_AAC,
-+    AV_CODEC_ID_AC3,
-+    AV_CODEC_ID_DTS,
-+    AV_CODEC_ID_VORBIS,
-+    AV_CODEC_ID_DVAUDIO,
-+    AV_CODEC_ID_WMAV1,
-+    AV_CODEC_ID_WMAV2,
-+    AV_CODEC_ID_MACE3,
-+    AV_CODEC_ID_MACE6,
-+    AV_CODEC_ID_VMDAUDIO,
-+    AV_CODEC_ID_FLAC,
-+    AV_CODEC_ID_MP3ADU,
-+    AV_CODEC_ID_MP3ON4,
-+    AV_CODEC_ID_SHORTEN,
-+    AV_CODEC_ID_ALAC,
-+    AV_CODEC_ID_WESTWOOD_SND1,
-+    AV_CODEC_ID_GSM, ///< as in Berlin toast format
-+    AV_CODEC_ID_QDM2,
-+    AV_CODEC_ID_COOK,
-+    AV_CODEC_ID_TRUESPEECH,
-+    AV_CODEC_ID_TTA,
-+    AV_CODEC_ID_SMACKAUDIO,
-+    AV_CODEC_ID_QCELP,
-+    AV_CODEC_ID_WAVPACK,
-+    AV_CODEC_ID_DSICINAUDIO,
-+    AV_CODEC_ID_IMC,
-+    AV_CODEC_ID_MUSEPACK7,
-+    AV_CODEC_ID_MLP,
-+    AV_CODEC_ID_GSM_MS, /* as found in WAV */
-+    AV_CODEC_ID_ATRAC3,
-+    AV_CODEC_ID_APE,
-+    AV_CODEC_ID_NELLYMOSER,
-+    AV_CODEC_ID_MUSEPACK8,
-+    AV_CODEC_ID_SPEEX,
-+    AV_CODEC_ID_WMAVOICE,
-+    AV_CODEC_ID_WMAPRO,
-+    AV_CODEC_ID_WMALOSSLESS,
-+    AV_CODEC_ID_ATRAC3P,
-+    AV_CODEC_ID_EAC3,
-+    AV_CODEC_ID_SIPR,
-+    AV_CODEC_ID_MP1,
-+    AV_CODEC_ID_TWINVQ,
-+    AV_CODEC_ID_TRUEHD,
-+    AV_CODEC_ID_MP4ALS,
-+    AV_CODEC_ID_ATRAC1,
-+    AV_CODEC_ID_BINKAUDIO_RDFT,
-+    AV_CODEC_ID_BINKAUDIO_DCT,
-+    AV_CODEC_ID_AAC_LATM,
-+    AV_CODEC_ID_QDMC,
-+    AV_CODEC_ID_CELT,
-+    AV_CODEC_ID_G723_1,
-+    AV_CODEC_ID_G729,
-+    AV_CODEC_ID_8SVX_EXP,
-+    AV_CODEC_ID_8SVX_FIB,
-+    AV_CODEC_ID_BMV_AUDIO,
-+    AV_CODEC_ID_RALF,
-+    AV_CODEC_ID_IAC,
-+    AV_CODEC_ID_ILBC,
-+    AV_CODEC_ID_OPUS,
-+    AV_CODEC_ID_COMFORT_NOISE,
-+    AV_CODEC_ID_TAK,
-+    AV_CODEC_ID_METASOUND,
-+    AV_CODEC_ID_PAF_AUDIO,
-+    AV_CODEC_ID_ON2AVC,
-+    AV_CODEC_ID_DSS_SP,
-+    AV_CODEC_ID_CODEC2,
-+
-+    AV_CODEC_ID_FFWAVESYNTH = 0x15800,
-+    AV_CODEC_ID_SONIC,
-+    AV_CODEC_ID_SONIC_LS,
-+    AV_CODEC_ID_EVRC,
-+    AV_CODEC_ID_SMV,
-+    AV_CODEC_ID_DSD_LSBF,
-+    AV_CODEC_ID_DSD_MSBF,
-+    AV_CODEC_ID_DSD_LSBF_PLANAR,
-+    AV_CODEC_ID_DSD_MSBF_PLANAR,
-+    AV_CODEC_ID_4GV,
-+    AV_CODEC_ID_INTERPLAY_ACM,
-+    AV_CODEC_ID_XMA1,
-+    AV_CODEC_ID_XMA2,
-+    AV_CODEC_ID_DST,
-+    AV_CODEC_ID_ATRAC3AL,
-+    AV_CODEC_ID_ATRAC3PAL,
-+    AV_CODEC_ID_DOLBY_E,
-+    AV_CODEC_ID_APTX,
-+    AV_CODEC_ID_APTX_HD,
-+    AV_CODEC_ID_SBC,
-+
-+    /* subtitle codecs */
-+    AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,          ///< A dummy ID pointing at the start of subtitle codecs.
-+    AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
-+    AV_CODEC_ID_DVB_SUBTITLE,
-+    AV_CODEC_ID_TEXT,  ///< raw UTF-8 text
-+    AV_CODEC_ID_XSUB,
-+    AV_CODEC_ID_SSA,
-+    AV_CODEC_ID_MOV_TEXT,
-+    AV_CODEC_ID_HDMV_PGS_SUBTITLE,
-+    AV_CODEC_ID_DVB_TELETEXT,
-+    AV_CODEC_ID_SRT,
-+
-+    AV_CODEC_ID_MICRODVD   = 0x17800,
-+    AV_CODEC_ID_EIA_608,
-+    AV_CODEC_ID_JACOSUB,
-+    AV_CODEC_ID_SAMI,
-+    AV_CODEC_ID_REALTEXT,
-+    AV_CODEC_ID_STL,
-+    AV_CODEC_ID_SUBVIEWER1,
-+    AV_CODEC_ID_SUBVIEWER,
-+    AV_CODEC_ID_SUBRIP,
-+    AV_CODEC_ID_WEBVTT,
-+    AV_CODEC_ID_MPL2,
-+    AV_CODEC_ID_VPLAYER,
-+    AV_CODEC_ID_PJS,
-+    AV_CODEC_ID_ASS,
-+    AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
-+
-+    /* other specific kind of codecs (generally used for attachments) */
-+    AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,           ///< A dummy ID pointing at the start of various fake codecs.
-+    AV_CODEC_ID_TTF = 0x18000,
-+
-+    AV_CODEC_ID_SCTE_35, ///< Contain timestamp estimated through PCR of program stream.
-+    AV_CODEC_ID_BINTEXT    = 0x18800,
-+    AV_CODEC_ID_XBIN,
-+    AV_CODEC_ID_IDF,
-+    AV_CODEC_ID_OTF,
-+    AV_CODEC_ID_SMPTE_KLV,
-+    AV_CODEC_ID_DVD_NAV,
-+    AV_CODEC_ID_TIMED_ID3,
-+    AV_CODEC_ID_BIN_DATA,
-+
-+
-+    AV_CODEC_ID_PROBE = 0x19000, ///< codec_id is not known (like AV_CODEC_ID_NONE) but lavf should attempt to identify it
-+
-+    AV_CODEC_ID_MPEG2TS = 0x20000, /**< _FAKE_ codec to indicate a raw MPEG-2 TS
-+                                * stream (only used by libavformat) */
-+    AV_CODEC_ID_MPEG4SYSTEMS = 0x20001, /**< _FAKE_ codec to indicate a MPEG-4 Systems
-+                                * stream (only used by libavformat) */
-+    AV_CODEC_ID_FFMETADATA = 0x21000,   ///< Dummy codec for streams containing only metadata information.
-+    AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001, ///< Passthrough codec, AVFrames wrapped in AVPacket
-+};
-+
-+/**
-+ * This struct describes the properties of a single codec described by an
-+ * AVCodecID.
-+ * @see avcodec_descriptor_get()
-+ */
-+typedef struct AVCodecDescriptor {
-+    enum AVCodecID     id;
-+    enum AVMediaType type;
-+    /**
-+     * Name of the codec described by this descriptor. It is non-empty and
-+     * unique for each codec descriptor. It should contain alphanumeric
-+     * characters and '_' only.
-+     */
-+    const char      *name;
-+    /**
-+     * A more descriptive name for this codec. May be NULL.
-+     */
-+    const char *long_name;
-+    /**
-+     * Codec properties, a combination of AV_CODEC_PROP_* flags.
-+     */
-+    int             props;
-+    /**
-+     * MIME type(s) associated with the codec.
-+     * May be NULL; if not, a NULL-terminated array of MIME types.
-+     * The first item is always non-NULL and is the preferred MIME type.
-+     */
-+    const char *const *mime_types;
-+    /**
-+     * If non-NULL, an array of profiles recognized for this codec.
-+     * Terminated with FF_PROFILE_UNKNOWN.
-+     */
-+    const struct AVProfile *profiles;
-+} AVCodecDescriptor;
-+
-+/**
-+ * Codec uses only intra compression.
-+ * Video and audio codecs only.
-+ */
-+#define AV_CODEC_PROP_INTRA_ONLY    (1 << 0)
-+/**
-+ * Codec supports lossy compression. Audio and video codecs only.
-+ * @note a codec may support both lossy and lossless
-+ * compression modes
-+ */
-+#define AV_CODEC_PROP_LOSSY         (1 << 1)
-+/**
-+ * Codec supports lossless compression. Audio and video codecs only.
-+ */
-+#define AV_CODEC_PROP_LOSSLESS      (1 << 2)
-+/**
-+ * Codec supports frame reordering. That is, the coded order (the order in which
-+ * the encoded packets are output by the encoders / stored / input to the
-+ * decoders) may be different from the presentation order of the corresponding
-+ * frames.
-+ *
-+ * For codecs that do not have this property set, PTS and DTS should always be
-+ * equal.
-+ */
-+#define AV_CODEC_PROP_REORDER       (1 << 3)
-+/**
-+ * Subtitle codec is bitmap based
-+ * Decoded AVSubtitle data can be read from the AVSubtitleRect->pict field.
-+ */
-+#define AV_CODEC_PROP_BITMAP_SUB    (1 << 16)
-+/**
-+ * Subtitle codec is text based.
-+ * Decoded AVSubtitle data can be read from the AVSubtitleRect->ass field.
-+ */
-+#define AV_CODEC_PROP_TEXT_SUB      (1 << 17)
-+
-+/**
-+ * @ingroup lavc_decoding
-+ * Required number of additionally allocated bytes at the end of the input bitstream for decoding.
-+ * This is mainly needed because some optimized bitstream readers read
-+ * 32 or 64 bit at once and could read over the end.<br>
-+ * Note: If the first 23 bits of the additional bytes are not 0, then damaged
-+ * MPEG bitstreams could cause overread and segfault.
-+ */
-+#define AV_INPUT_BUFFER_PADDING_SIZE 64
-+
-+/**
-+ * @ingroup lavc_encoding
-+ * minimum encoding buffer size
-+ * Used to avoid some checks during header writing.
-+ */
-+#define AV_INPUT_BUFFER_MIN_SIZE 16384
-+
-+/**
-+ * @ingroup lavc_decoding
-+ */
-+enum AVDiscard{
-+    /* We leave some space between them for extensions (drop some
-+     * keyframes for intra-only or drop just some bidir frames). */
-+    AVDISCARD_NONE    =-16, ///< discard nothing
-+    AVDISCARD_DEFAULT =  0, ///< discard useless packets like 0 size packets in avi
-+    AVDISCARD_NONREF  =  8, ///< discard all non reference
-+    AVDISCARD_BIDIR   = 16, ///< discard all bidirectional frames
-+    AVDISCARD_NONINTRA= 24, ///< discard all non intra frames
-+    AVDISCARD_NONKEY  = 32, ///< discard all frames except keyframes
-+    AVDISCARD_ALL     = 48, ///< discard all
-+};
-+
-+enum AVAudioServiceType {
-+    AV_AUDIO_SERVICE_TYPE_MAIN              = 0,
-+    AV_AUDIO_SERVICE_TYPE_EFFECTS           = 1,
-+    AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED = 2,
-+    AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED  = 3,
-+    AV_AUDIO_SERVICE_TYPE_DIALOGUE          = 4,
-+    AV_AUDIO_SERVICE_TYPE_COMMENTARY        = 5,
-+    AV_AUDIO_SERVICE_TYPE_EMERGENCY         = 6,
-+    AV_AUDIO_SERVICE_TYPE_VOICE_OVER        = 7,
-+    AV_AUDIO_SERVICE_TYPE_KARAOKE           = 8,
-+    AV_AUDIO_SERVICE_TYPE_NB                   , ///< Not part of ABI
-+};
-+
-+/**
-+ * @ingroup lavc_encoding
-+ */
-+typedef struct RcOverride{
-+    int start_frame;
-+    int end_frame;
-+    int qscale; // If this is 0 then quality_factor will be used instead.
-+    float quality_factor;
-+} RcOverride;
-+
-+/* encoding support
-+   These flags can be passed in AVCodecContext.flags before initialization.
-+   Note: Not everything is supported yet.
-+*/
-+
-+/**
-+ * Allow decoders to produce frames with data planes that are not aligned
-+ * to CPU requirements (e.g. due to cropping).
-+ */
-+#define AV_CODEC_FLAG_UNALIGNED       (1 <<  0)
-+/**
-+ * Use fixed qscale.
-+ */
-+#define AV_CODEC_FLAG_QSCALE          (1 <<  1)
-+/**
-+ * 4 MV per MB allowed / advanced prediction for H.263.
-+ */
-+#define AV_CODEC_FLAG_4MV             (1 <<  2)
-+/**
-+ * Output even those frames that might be corrupted.
-+ */
-+#define AV_CODEC_FLAG_OUTPUT_CORRUPT  (1 <<  3)
-+/**
-+ * Use qpel MC.
-+ */
-+#define AV_CODEC_FLAG_QPEL            (1 <<  4)
-+/**
-+ * Use internal 2pass ratecontrol in first pass mode.
-+ */
-+#define AV_CODEC_FLAG_PASS1           (1 <<  9)
-+/**
-+ * Use internal 2pass ratecontrol in second pass mode.
-+ */
-+#define AV_CODEC_FLAG_PASS2           (1 << 10)
-+/**
-+ * loop filter.
-+ */
-+#define AV_CODEC_FLAG_LOOP_FILTER     (1 << 11)
-+/**
-+ * Only decode/encode grayscale.
-+ */
-+#define AV_CODEC_FLAG_GRAY            (1 << 13)
-+/**
-+ * error[?] variables will be set during encoding.
-+ */
-+#define AV_CODEC_FLAG_PSNR            (1 << 15)
-+/**
-+ * Input bitstream might be truncated at a random location
-+ * instead of only at frame boundaries.
-+ */
-+#define AV_CODEC_FLAG_TRUNCATED       (1 << 16)
-+/**
-+ * Use interlaced DCT.
-+ */
-+#define AV_CODEC_FLAG_INTERLACED_DCT  (1 << 18)
-+/**
-+ * Force low delay.
-+ */
-+#define AV_CODEC_FLAG_LOW_DELAY       (1 << 19)
-+/**
-+ * Place global headers in extradata instead of every keyframe.
-+ */
-+#define AV_CODEC_FLAG_GLOBAL_HEADER   (1 << 22)
-+/**
-+ * Use only bitexact stuff (except (I)DCT).
-+ */
-+#define AV_CODEC_FLAG_BITEXACT        (1 << 23)
-+/* Fx : Flag for H.263+ extra options */
-+/**
-+ * H.263 advanced intra coding / MPEG-4 AC prediction
-+ */
-+#define AV_CODEC_FLAG_AC_PRED         (1 << 24)
-+/**
-+ * interlaced motion estimation
-+ */
-+#define AV_CODEC_FLAG_INTERLACED_ME   (1 << 29)
-+#define AV_CODEC_FLAG_CLOSED_GOP      (1U << 31)
-+
-+/**
-+ * Allow non spec compliant speedup tricks.
-+ */
-+#define AV_CODEC_FLAG2_FAST           (1 <<  0)
-+/**
-+ * Skip bitstream encoding.
-+ */
-+#define AV_CODEC_FLAG2_NO_OUTPUT      (1 <<  2)
-+/**
-+ * Place global headers at every keyframe instead of in extradata.
-+ */
-+#define AV_CODEC_FLAG2_LOCAL_HEADER   (1 <<  3)
-+
-+/**
-+ * timecode is in drop frame format. DEPRECATED!!!!
-+ */
-+#define AV_CODEC_FLAG2_DROP_FRAME_TIMECODE (1 << 13)
-+
-+/**
-+ * Input bitstream might be truncated at a packet boundaries
-+ * instead of only at frame boundaries.
-+ */
-+#define AV_CODEC_FLAG2_CHUNKS         (1 << 15)
-+/**
-+ * Discard cropping information from SPS.
-+ */
-+#define AV_CODEC_FLAG2_IGNORE_CROP    (1 << 16)
-+
-+/**
-+ * Show all frames before the first keyframe
-+ */
-+#define AV_CODEC_FLAG2_SHOW_ALL       (1 << 22)
-+/**
-+ * Export motion vectors through frame side data
-+ */
-+#define AV_CODEC_FLAG2_EXPORT_MVS     (1 << 28)
-+/**
-+ * Do not skip samples and export skip information as frame side data
-+ */
-+#define AV_CODEC_FLAG2_SKIP_MANUAL    (1 << 29)
-+/**
-+ * Do not reset ASS ReadOrder field on flush (subtitles decoding)
-+ */
-+#define AV_CODEC_FLAG2_RO_FLUSH_NOOP  (1 << 30)
-+
-+/* Unsupported options :
-+ *              Syntax Arithmetic coding (SAC)
-+ *              Reference Picture Selection
-+ *              Independent Segment Decoding */
-+/* /Fx */
-+/* codec capabilities */
-+
-+/**
-+ * Decoder can use draw_horiz_band callback.
-+ */
-+#define AV_CODEC_CAP_DRAW_HORIZ_BAND     (1 <<  0)
-+/**
-+ * Codec uses get_buffer() for allocating buffers and supports custom allocators.
-+ * If not set, it might not use get_buffer() at all or use operations that
-+ * assume the buffer was allocated by avcodec_default_get_buffer.
-+ */
-+#define AV_CODEC_CAP_DR1                 (1 <<  1)
-+#define AV_CODEC_CAP_TRUNCATED           (1 <<  3)
-+/**
-+ * Encoder or decoder requires flushing with NULL input at the end in order to
-+ * give the complete and correct output.
-+ *
-+ * NOTE: If this flag is not set, the codec is guaranteed to never be fed with
-+ *       with NULL data. The user can still send NULL data to the public encode
-+ *       or decode function, but libavcodec will not pass it along to the codec
-+ *       unless this flag is set.
-+ *
-+ * Decoders:
-+ * The decoder has a non-zero delay and needs to be fed with avpkt->data=NULL,
-+ * avpkt->size=0 at the end to get the delayed data until the decoder no longer
-+ * returns frames.
-+ *
-+ * Encoders:
-+ * The encoder needs to be fed with NULL data at the end of encoding until the
-+ * encoder no longer returns data.
-+ *
-+ * NOTE: For encoders implementing the AVCodec.encode2() function, setting this
-+ *       flag also means that the encoder must set the pts and duration for
-+ *       each output packet. If this flag is not set, the pts and duration will
-+ *       be determined by libavcodec from the input frame.
-+ */
-+#define AV_CODEC_CAP_DELAY               (1 <<  5)
-+/**
-+ * Codec can be fed a final frame with a smaller size.
-+ * This can be used to prevent truncation of the last audio samples.
-+ */
-+#define AV_CODEC_CAP_SMALL_LAST_FRAME    (1 <<  6)
-+
-+/**
-+ * Codec can output multiple frames per AVPacket
-+ * Normally demuxers return one frame at a time, demuxers which do not do
-+ * are connected to a parser to split what they return into proper frames.
-+ * This flag is reserved to the very rare category of codecs which have a
-+ * bitstream that cannot be split into frames without timeconsuming
-+ * operations like full decoding. Demuxers carrying such bitstreams thus
-+ * may return multiple frames in a packet. This has many disadvantages like
-+ * prohibiting stream copy in many cases thus it should only be considered
-+ * as a last resort.
-+ */
-+#define AV_CODEC_CAP_SUBFRAMES           (1 <<  8)
-+/**
-+ * Codec is experimental and is thus avoided in favor of non experimental
-+ * encoders
-+ */
-+#define AV_CODEC_CAP_EXPERIMENTAL        (1 <<  9)
-+/**
-+ * Codec should fill in channel configuration and samplerate instead of container
-+ */
-+#define AV_CODEC_CAP_CHANNEL_CONF        (1 << 10)
-+/**
-+ * Codec supports frame-level multithreading.
-+ */
-+#define AV_CODEC_CAP_FRAME_THREADS       (1 << 12)
-+/**
-+ * Codec supports slice-based (or partition-based) multithreading.
-+ */
-+#define AV_CODEC_CAP_SLICE_THREADS       (1 << 13)
-+/**
-+ * Codec supports changed parameters at any point.
-+ */
-+#define AV_CODEC_CAP_PARAM_CHANGE        (1 << 14)
-+/**
-+ * Codec supports avctx->thread_count == 0 (auto).
-+ */
-+#define AV_CODEC_CAP_AUTO_THREADS        (1 << 15)
-+/**
-+ * Audio encoder supports receiving a different number of samples in each call.
-+ */
-+#define AV_CODEC_CAP_VARIABLE_FRAME_SIZE (1 << 16)
-+/**
-+ * Decoder is not a preferred choice for probing.
-+ * This indicates that the decoder is not a good choice for probing.
-+ * It could for example be an expensive to spin up hardware decoder,
-+ * or it could simply not provide a lot of useful information about
-+ * the stream.
-+ * A decoder marked with this flag should only be used as last resort
-+ * choice for probing.
-+ */
-+#define AV_CODEC_CAP_AVOID_PROBING       (1 << 17)
-+/**
-+ * Codec is intra only.
-+ */
-+#define AV_CODEC_CAP_INTRA_ONLY       0x40000000
-+/**
-+ * Codec is lossless.
-+ */
-+#define AV_CODEC_CAP_LOSSLESS         0x80000000
-+
-+/**
-+ * Codec is backed by a hardware implementation. Typically used to
-+ * identify a non-hwaccel hardware decoder. For information about hwaccels, use
-+ * avcodec_get_hw_config() instead.
-+ */
-+#define AV_CODEC_CAP_HARDWARE            (1 << 18)
-+
-+/**
-+ * Codec is potentially backed by a hardware implementation, but not
-+ * necessarily. This is used instead of AV_CODEC_CAP_HARDWARE, if the
-+ * implementation provides some sort of internal fallback.
-+ */
-+#define AV_CODEC_CAP_HYBRID              (1 << 19)
-+
-+/**
-+ * Pan Scan area.
-+ * This specifies the area which should be displayed.
-+ * Note there may be multiple such areas for one frame.
-+ */
-+typedef struct AVPanScan {
-+    /**
-+     * id
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int id;
-+
-+    /**
-+     * width and height in 1/16 pel
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int width;
-+    int height;
-+
-+    /**
-+     * position of the top left corner in 1/16 pel for up to 3 fields/frames
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int16_t position[3][2];
-+} AVPanScan;
-+
-+/**
-+ * This structure describes the bitrate properties of an encoded bitstream. It
-+ * roughly corresponds to a subset the VBV parameters for MPEG-2 or HRD
-+ * parameters for H.264/HEVC.
-+ */
-+typedef struct AVCPBProperties {
-+    /**
-+     * Maximum bitrate of the stream, in bits per second.
-+     * Zero if unknown or unspecified.
-+     */
-+    int max_bitrate;
-+    /**
-+     * Minimum bitrate of the stream, in bits per second.
-+     * Zero if unknown or unspecified.
-+     */
-+    int min_bitrate;
-+    /**
-+     * Average bitrate of the stream, in bits per second.
-+     * Zero if unknown or unspecified.
-+     */
-+    int avg_bitrate;
-+
-+    /**
-+     * The size of the buffer to which the ratecontrol is applied, in bits.
-+     * Zero if unknown or unspecified.
-+     */
-+    int buffer_size;
-+
-+    /**
-+     * The delay between the time the packet this structure is associated with
-+     * is received and the time when it should be decoded, in periods of a 27MHz
-+     * clock.
-+     *
-+     * UINT64_MAX when unknown or unspecified.
-+     */
-+    uint64_t vbv_delay;
-+} AVCPBProperties;
-+
-+/**
-+ * The decoder will keep a reference to the frame and may reuse it later.
-+ */
-+#define AV_GET_BUFFER_FLAG_REF (1 << 0)
-+
-+/**
-+ * @defgroup lavc_packet AVPacket
-+ *
-+ * Types and functions for working with AVPacket.
-+ * @{
-+ */
-+enum AVPacketSideDataType {
-+    /**
-+     * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE
-+     * bytes worth of palette. This side data signals that a new palette is
-+     * present.
-+     */
-+    AV_PKT_DATA_PALETTE,
-+
-+    /**
-+     * The AV_PKT_DATA_NEW_EXTRADATA is used to notify the codec or the format
-+     * that the extradata buffer was changed and the receiving side should
-+     * act upon it appropriately. The new extradata is embedded in the side
-+     * data buffer and should be immediately used for processing the current
-+     * frame or packet.
-+     */
-+    AV_PKT_DATA_NEW_EXTRADATA,
-+
-+    /**
-+     * An AV_PKT_DATA_PARAM_CHANGE side data packet is laid out as follows:
-+     * @code
-+     * u32le param_flags
-+     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT)
-+     *     s32le channel_count
-+     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)
-+     *     u64le channel_layout
-+     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE)
-+     *     s32le sample_rate
-+     * if (param_flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS)
-+     *     s32le width
-+     *     s32le height
-+     * @endcode
-+     */
-+    AV_PKT_DATA_PARAM_CHANGE,
-+
-+    /**
-+     * An AV_PKT_DATA_H263_MB_INFO side data packet contains a number of
-+     * structures with info about macroblocks relevant to splitting the
-+     * packet into smaller packets on macroblock edges (e.g. as for RFC 2190).
-+     * That is, it does not necessarily contain info about all macroblocks,
-+     * as long as the distance between macroblocks in the info is smaller
-+     * than the target payload size.
-+     * Each MB info structure is 12 bytes, and is laid out as follows:
-+     * @code
-+     * u32le bit offset from the start of the packet
-+     * u8    current quantizer at the start of the macroblock
-+     * u8    GOB number
-+     * u16le macroblock address within the GOB
-+     * u8    horizontal MV predictor
-+     * u8    vertical MV predictor
-+     * u8    horizontal MV predictor for block number 3
-+     * u8    vertical MV predictor for block number 3
-+     * @endcode
-+     */
-+    AV_PKT_DATA_H263_MB_INFO,
-+
-+    /**
-+     * This side data should be associated with an audio stream and contains
-+     * ReplayGain information in form of the AVReplayGain struct.
-+     */
-+    AV_PKT_DATA_REPLAYGAIN,
-+
-+    /**
-+     * This side data contains a 3x3 transformation matrix describing an affine
-+     * transformation that needs to be applied to the decoded video frames for
-+     * correct presentation.
-+     *
-+     * See libavutil/display.h for a detailed description of the data.
-+     */
-+    AV_PKT_DATA_DISPLAYMATRIX,
-+
-+    /**
-+     * This side data should be associated with a video stream and contains
-+     * Stereoscopic 3D information in form of the AVStereo3D struct.
-+     */
-+    AV_PKT_DATA_STEREO3D,
-+
-+    /**
-+     * This side data should be associated with an audio stream and corresponds
-+     * to enum AVAudioServiceType.
-+     */
-+    AV_PKT_DATA_AUDIO_SERVICE_TYPE,
-+
-+    /**
-+     * This side data contains quality related information from the encoder.
-+     * @code
-+     * u32le quality factor of the compressed frame. Allowed range is between 1 (good) and FF_LAMBDA_MAX (bad).
-+     * u8    picture type
-+     * u8    error count
-+     * u16   reserved
-+     * u64le[error count] sum of squared differences between encoder in and output
-+     * @endcode
-+     */
-+    AV_PKT_DATA_QUALITY_STATS,
-+
-+    /**
-+     * This side data contains an integer value representing the stream index
-+     * of a "fallback" track.  A fallback track indicates an alternate
-+     * track to use when the current track can not be decoded for some reason.
-+     * e.g. no decoder available for codec.
-+     */
-+    AV_PKT_DATA_FALLBACK_TRACK,
-+
-+    /**
-+     * This side data corresponds to the AVCPBProperties struct.
-+     */
-+    AV_PKT_DATA_CPB_PROPERTIES,
-+
-+    /**
-+     * Recommmends skipping the specified number of samples
-+     * @code
-+     * u32le number of samples to skip from start of this packet
-+     * u32le number of samples to skip from end of this packet
-+     * u8    reason for start skip
-+     * u8    reason for end   skip (0=padding silence, 1=convergence)
-+     * @endcode
-+     */
-+    AV_PKT_DATA_SKIP_SAMPLES,
-+
-+    /**
-+     * An AV_PKT_DATA_JP_DUALMONO side data packet indicates that
-+     * the packet may contain "dual mono" audio specific to Japanese DTV
-+     * and if it is true, recommends only the selected channel to be used.
-+     * @code
-+     * u8    selected channels (0=mail/left, 1=sub/right, 2=both)
-+     * @endcode
-+     */
-+    AV_PKT_DATA_JP_DUALMONO,
-+
-+    /**
-+     * A list of zero terminated key/value strings. There is no end marker for
-+     * the list, so it is required to rely on the side data size to stop.
-+     */
-+    AV_PKT_DATA_STRINGS_METADATA,
-+
-+    /**
-+     * Subtitle event position
-+     * @code
-+     * u32le x1
-+     * u32le y1
-+     * u32le x2
-+     * u32le y2
-+     * @endcode
-+     */
-+    AV_PKT_DATA_SUBTITLE_POSITION,
-+
-+    /**
-+     * Data found in BlockAdditional element of matroska container. There is
-+     * no end marker for the data, so it is required to rely on the side data
-+     * size to recognize the end. 8 byte id (as found in BlockAddId) followed
-+     * by data.
-+     */
-+    AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,
-+
-+    /**
-+     * The optional first identifier line of a WebVTT cue.
-+     */
-+    AV_PKT_DATA_WEBVTT_IDENTIFIER,
-+
-+    /**
-+     * The optional settings (rendering instructions) that immediately
-+     * follow the timestamp specifier of a WebVTT cue.
-+     */
-+    AV_PKT_DATA_WEBVTT_SETTINGS,
-+
-+    /**
-+     * A list of zero terminated key/value strings. There is no end marker for
-+     * the list, so it is required to rely on the side data size to stop. This
-+     * side data includes updated metadata which appeared in the stream.
-+     */
-+    AV_PKT_DATA_METADATA_UPDATE,
-+
-+    /**
-+     * MPEGTS stream ID, this is required to pass the stream ID
-+     * information from the demuxer to the corresponding muxer.
-+     */
-+    AV_PKT_DATA_MPEGTS_STREAM_ID,
-+
-+    /**
-+     * Mastering display metadata (based on SMPTE-2086:2014). This metadata
-+     * should be associated with a video stream and contains data in the form
-+     * of the AVMasteringDisplayMetadata struct.
-+     */
-+    AV_PKT_DATA_MASTERING_DISPLAY_METADATA,
-+
-+    /**
-+     * This side data should be associated with a video stream and corresponds
-+     * to the AVSphericalMapping structure.
-+     */
-+    AV_PKT_DATA_SPHERICAL,
-+
-+    /**
-+     * Content light level (based on CTA-861.3). This metadata should be
-+     * associated with a video stream and contains data in the form of the
-+     * AVContentLightMetadata struct.
-+     */
-+    AV_PKT_DATA_CONTENT_LIGHT_LEVEL,
-+
-+    /**
-+     * ATSC A53 Part 4 Closed Captions. This metadata should be associated with
-+     * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data.
-+     * The number of bytes of CC data is AVPacketSideData.size.
-+     */
-+    AV_PKT_DATA_A53_CC,
-+
-+    /**
-+     * This side data is encryption initialization data.
-+     * The format is not part of ABI, use av_encryption_init_info_* methods to
-+     * access.
-+     */
-+    AV_PKT_DATA_ENCRYPTION_INIT_INFO,
-+
-+    /**
-+     * This side data contains encryption info for how to decrypt the packet.
-+     * The format is not part of ABI, use av_encryption_info_* methods to access.
-+     */
-+    AV_PKT_DATA_ENCRYPTION_INFO,
-+
-+    /**
-+     * The number of side data types.
-+     * This is not part of the public API/ABI in the sense that it may
-+     * change when new side data types are added.
-+     * This must stay the last enum value.
-+     * If its value becomes huge, some code using it
-+     * needs to be updated as it assumes it to be smaller than other limits.
-+     */
-+    AV_PKT_DATA_NB
-+};
-+
-+#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
-+
-+typedef struct AVPacketSideData {
-+    uint8_t *data;
-+    int      size;
-+    enum AVPacketSideDataType type;
-+} AVPacketSideData;
-+
-+/**
-+ * This structure stores compressed data. It is typically exported by demuxers
-+ * and then passed as input to decoders, or received as output from encoders and
-+ * then passed to muxers.
-+ *
-+ * For video, it should typically contain one compressed frame. For audio it may
-+ * contain several compressed frames. Encoders are allowed to output empty
-+ * packets, with no compressed data, containing only side data
-+ * (e.g. to update some stream parameters at the end of encoding).
-+ *
-+ * AVPacket is one of the few structs in FFmpeg, whose size is a part of public
-+ * ABI. Thus it may be allocated on stack and no new fields can be added to it
-+ * without libavcodec and libavformat major bump.
-+ *
-+ * The semantics of data ownership depends on the buf field.
-+ * If it is set, the packet data is dynamically allocated and is
-+ * valid indefinitely until a call to av_packet_unref() reduces the
-+ * reference count to 0.
-+ *
-+ * If the buf field is not set av_packet_ref() would make a copy instead
-+ * of increasing the reference count.
-+ *
-+ * The side data is always allocated with av_malloc(), copied by
-+ * av_packet_ref() and freed by av_packet_unref().
-+ *
-+ * @see av_packet_ref
-+ * @see av_packet_unref
-+ */
-+typedef struct AVPacket {
-+    /**
-+     * A reference to the reference-counted buffer where the packet data is
-+     * stored.
-+     * May be NULL, then the packet data is not reference-counted.
-+     */
-+    AVBufferRef *buf;
-+    /**
-+     * Presentation timestamp in AVStream->time_base units; the time at which
-+     * the decompressed packet will be presented to the user.
-+     * Can be AV_NOPTS_VALUE if it is not stored in the file.
-+     * pts MUST be larger or equal to dts as presentation cannot happen before
-+     * decompression, unless one wants to view hex dumps. Some formats misuse
-+     * the terms dts and pts/cts to mean something different. Such timestamps
-+     * must be converted to true pts/dts before they are stored in AVPacket.
-+     */
-+    int64_t pts;
-+    /**
-+     * Decompression timestamp in AVStream->time_base units; the time at which
-+     * the packet is decompressed.
-+     * Can be AV_NOPTS_VALUE if it is not stored in the file.
-+     */
-+    int64_t dts;
-+    uint8_t *data;
-+    int   size;
-+    int   stream_index;
-+    /**
-+     * A combination of AV_PKT_FLAG values
-+     */
-+    int   flags;
-+    /**
-+     * Additional packet data that can be provided by the container.
-+     * Packet can contain several types of side information.
-+     */
-+    AVPacketSideData *side_data;
-+    int side_data_elems;
-+
-+    /**
-+     * Duration of this packet in AVStream->time_base units, 0 if unknown.
-+     * Equals next_pts - this_pts in presentation order.
-+     */
-+    int64_t duration;
-+
-+    int64_t pos;                            ///< byte position in stream, -1 if unknown
-+
-+#if FF_API_CONVERGENCE_DURATION
-+    /**
-+     * @deprecated Same as the duration field, but as int64_t. This was required
-+     * for Matroska subtitles, whose duration values could overflow when the
-+     * duration field was still an int.
-+     */
-+    attribute_deprecated
-+    int64_t convergence_duration;
-+#endif
-+} AVPacket;
-+#define AV_PKT_FLAG_KEY     0x0001 ///< The packet contains a keyframe
-+#define AV_PKT_FLAG_CORRUPT 0x0002 ///< The packet content is corrupted
-+/**
-+ * Flag is used to discard packets which are required to maintain valid
-+ * decoder state but are not required for output and should be dropped
-+ * after decoding.
-+ **/
-+#define AV_PKT_FLAG_DISCARD   0x0004
-+/**
-+ * The packet comes from a trusted source.
-+ *
-+ * Otherwise-unsafe constructs such as arbitrary pointers to data
-+ * outside the packet may be followed.
-+ */
-+#define AV_PKT_FLAG_TRUSTED   0x0008
-+/**
-+ * Flag is used to indicate packets that contain frames that can
-+ * be discarded by the decoder.  I.e. Non-reference frames.
-+ */
-+#define AV_PKT_FLAG_DISPOSABLE 0x0010
-+
-+
-+enum AVSideDataParamChangeFlags {
-+    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT  = 0x0001,
-+    AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
-+    AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE    = 0x0004,
-+    AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS     = 0x0008,
-+};
-+/**
-+ * @}
-+ */
-+
-+struct AVCodecInternal;
-+
-+enum AVFieldOrder {
-+    AV_FIELD_UNKNOWN,
-+    AV_FIELD_PROGRESSIVE,
-+    AV_FIELD_TT,          //< Top coded_first, top displayed first
-+    AV_FIELD_BB,          //< Bottom coded first, bottom displayed first
-+    AV_FIELD_TB,          //< Top coded first, bottom displayed first
-+    AV_FIELD_BT,          //< Bottom coded first, top displayed first
-+};
-+
-+/**
-+ * main external API structure.
-+ * New fields can be added to the end with minor version bumps.
-+ * Removal, reordering and changes to existing fields require a major
-+ * version bump.
-+ * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user
-+ * applications.
-+ * The name string for AVOptions options matches the associated command line
-+ * parameter name and can be found in libavcodec/options_table.h
-+ * The AVOption/command line parameter names differ in some cases from the C
-+ * structure field names for historic reasons or brevity.
-+ * sizeof(AVCodecContext) must not be used outside libav*.
-+ */
-+typedef struct AVCodecContext {
-+    /**
-+     * information on struct for av_log
-+     * - set by avcodec_alloc_context3
-+     */
-+    const AVClass *av_class;
-+    int log_level_offset;
-+
-+    enum AVMediaType codec_type; /* see AVMEDIA_TYPE_xxx */
-+    const struct AVCodec  *codec;
-+    enum AVCodecID     codec_id; /* see AV_CODEC_ID_xxx */
-+
-+    /**
-+     * fourcc (LSB first, so "ABCD" -> ('D'<<24) + ('C'<<16) + ('B'<<8) + 'A').
-+     * This is used to work around some encoder bugs.
-+     * A demuxer should set this to what is stored in the field used to identify the codec.
-+     * If there are multiple such fields in a container then the demuxer should choose the one
-+     * which maximizes the information about the used codec.
-+     * If the codec tag field in a container is larger than 32 bits then the demuxer should
-+     * remap the longer ID to 32 bits with a table or other structure. Alternatively a new
-+     * extra_codec_tag + size could be added but for this a clear advantage must be demonstrated
-+     * first.
-+     * - encoding: Set by user, if not then the default based on codec_id will be used.
-+     * - decoding: Set by user, will be converted to uppercase by libavcodec during init.
-+     */
-+    unsigned int codec_tag;
-+
-+    void *priv_data;
-+
-+    /**
-+     * Private context used for internal data.
-+     *
-+     * Unlike priv_data, this is not codec-specific. It is used in general
-+     * libavcodec functions.
-+     */
-+    struct AVCodecInternal *internal;
-+
-+    /**
-+     * Private data of the user, can be used to carry app specific stuff.
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    void *opaque;
-+
-+    /**
-+     * the average bitrate
-+     * - encoding: Set by user; unused for constant quantizer encoding.
-+     * - decoding: Set by user, may be overwritten by libavcodec
-+     *             if this info is available in the stream
-+     */
-+    int64_t bit_rate;
-+
-+    /**
-+     * number of bits the bitstream is allowed to diverge from the reference.
-+     *           the reference can be CBR (for CBR pass1) or VBR (for pass2)
-+     * - encoding: Set by user; unused for constant quantizer encoding.
-+     * - decoding: unused
-+     */
-+    int bit_rate_tolerance;
-+
-+    /**
-+     * Global quality for codecs which cannot change it per frame.
-+     * This should be proportional to MPEG-1/2/4 qscale.
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int global_quality;
-+
-+    /**
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int compression_level;
-+#define FF_COMPRESSION_DEFAULT -1
-+
-+    /**
-+     * AV_CODEC_FLAG_*.
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int flags;
-+
-+    /**
-+     * AV_CODEC_FLAG2_*
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int flags2;
-+
-+    /**
-+     * some codecs need / can use extradata like Huffman tables.
-+     * MJPEG: Huffman tables
-+     * rv10: additional flags
-+     * MPEG-4: global headers (they can be in the bitstream or here)
-+     * The allocated memory should be AV_INPUT_BUFFER_PADDING_SIZE bytes larger
-+     * than extradata_size to avoid problems if it is read with the bitstream reader.
-+     * The bytewise contents of extradata must not depend on the architecture or CPU endianness.
-+     * - encoding: Set/allocated/freed by libavcodec.
-+     * - decoding: Set/allocated/freed by user.
-+     */
-+    uint8_t *extradata;
-+    int extradata_size;
-+
-+    /**
-+     * This is the fundamental unit of time (in seconds) in terms
-+     * of which frame timestamps are represented. For fixed-fps content,
-+     * timebase should be 1/framerate and timestamp increments should be
-+     * identically 1.
-+     * This often, but not always is the inverse of the frame rate or field rate
-+     * for video. 1/time_base is not the average frame rate if the frame rate is not
-+     * constant.
-+     *
-+     * Like containers, elementary streams also can store timestamps, 1/time_base
-+     * is the unit in which these timestamps are specified.
-+     * As example of such codec time base see ISO/IEC 14496-2:2001(E)
-+     * vop_time_increment_resolution and fixed_vop_rate
-+     * (fixed_vop_rate == 0 implies that it is different from the framerate)
-+     *
-+     * - encoding: MUST be set by user.
-+     * - decoding: the use of this field for decoding is deprecated.
-+     *             Use framerate instead.
-+     */
-+    AVRational time_base;
-+
-+    /**
-+     * For some codecs, the time base is closer to the field rate than the frame rate.
-+     * Most notably, H.264 and MPEG-2 specify time_base as half of frame duration
-+     * if no telecine is used ...
-+     *
-+     * Set to time_base ticks per frame. Default 1, e.g., H.264/MPEG-2 set it to 2.
-+     */
-+    int ticks_per_frame;
-+
-+    /**
-+     * Codec delay.
-+     *
-+     * Encoding: Number of frames delay there will be from the encoder input to
-+     *           the decoder output. (we assume the decoder matches the spec)
-+     * Decoding: Number of frames delay in addition to what a standard decoder
-+     *           as specified in the spec would produce.
-+     *
-+     * Video:
-+     *   Number of frames the decoded output will be delayed relative to the
-+     *   encoded input.
-+     *
-+     * Audio:
-+     *   For encoding, this field is unused (see initial_padding).
-+     *
-+     *   For decoding, this is the number of samples the decoder needs to
-+     *   output before the decoder's output is valid. When seeking, you should
-+     *   start decoding this many samples prior to your desired seek point.
-+     *
-+     * - encoding: Set by libavcodec.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int delay;
-+
-+
-+    /* video only */
-+    /**
-+     * picture width / height.
-+     *
-+     * @note Those fields may not match the values of the last
-+     * AVFrame output by avcodec_decode_video2 due frame
-+     * reordering.
-+     *
-+     * - encoding: MUST be set by user.
-+     * - decoding: May be set by the user before opening the decoder if known e.g.
-+     *             from the container. Some decoders will require the dimensions
-+     *             to be set by the caller. During decoding, the decoder may
-+     *             overwrite those values as required while parsing the data.
-+     */
-+    int width, height;
-+
-+    /**
-+     * Bitstream width / height, may be different from width/height e.g. when
-+     * the decoded frame is cropped before being output or lowres is enabled.
-+     *
-+     * @note Those field may not match the value of the last
-+     * AVFrame output by avcodec_receive_frame() due frame
-+     * reordering.
-+     *
-+     * - encoding: unused
-+     * - decoding: May be set by the user before opening the decoder if known
-+     *             e.g. from the container. During decoding, the decoder may
-+     *             overwrite those values as required while parsing the data.
-+     */
-+    int coded_width, coded_height;
-+
-+    /**
-+     * the number of pictures in a group of pictures, or 0 for intra_only
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int gop_size;
-+
-+    /**
-+     * Pixel format, see AV_PIX_FMT_xxx.
-+     * May be set by the demuxer if known from headers.
-+     * May be overridden by the decoder if it knows better.
-+     *
-+     * @note This field may not match the value of the last
-+     * AVFrame output by avcodec_receive_frame() due frame
-+     * reordering.
-+     *
-+     * - encoding: Set by user.
-+     * - decoding: Set by user if known, overridden by libavcodec while
-+     *             parsing the data.
-+     */
-+    enum AVPixelFormat pix_fmt;
-+
-+    /**
-+     * If non NULL, 'draw_horiz_band' is called by the libavcodec
-+     * decoder to draw a horizontal band. It improves cache usage. Not
-+     * all codecs can do that. You must check the codec capabilities
-+     * beforehand.
-+     * When multithreading is used, it may be called from multiple threads
-+     * at the same time; threads might draw different parts of the same AVFrame,
-+     * or multiple AVFrames, and there is no guarantee that slices will be drawn
-+     * in order.
-+     * The function is also used by hardware acceleration APIs.
-+     * It is called at least once during frame decoding to pass
-+     * the data needed for hardware render.
-+     * In that mode instead of pixel data, AVFrame points to
-+     * a structure specific to the acceleration API. The application
-+     * reads the structure and can change some fields to indicate progress
-+     * or mark state.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     * @param height the height of the slice
-+     * @param y the y position of the slice
-+     * @param type 1->top field, 2->bottom field, 3->frame
-+     * @param offset offset into the AVFrame.data from which the slice should be read
-+     */
-+    void (*draw_horiz_band)(struct AVCodecContext *s,
-+                            const AVFrame *src, int offset[AV_NUM_DATA_POINTERS],
-+                            int y, int type, int height);
-+
-+    /**
-+     * callback to negotiate the pixelFormat
-+     * @param fmt is the list of formats which are supported by the codec,
-+     * it is terminated by -1 as 0 is a valid format, the formats are ordered by quality.
-+     * The first is always the native one.
-+     * @note The callback may be called again immediately if initialization for
-+     * the selected (hardware-accelerated) pixel format failed.
-+     * @warning Behavior is undefined if the callback returns a value not
-+     * in the fmt list of formats.
-+     * @return the chosen format
-+     * - encoding: unused
-+     * - decoding: Set by user, if not set the native format will be chosen.
-+     */
-+    enum AVPixelFormat (*get_format)(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
-+
-+    /**
-+     * maximum number of B-frames between non-B-frames
-+     * Note: The output will be delayed by max_b_frames+1 relative to the input.
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int max_b_frames;
-+
-+    /**
-+     * qscale factor between IP and B-frames
-+     * If > 0 then the last P-frame quantizer will be used (q= lastp_q*factor+offset).
-+     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float b_quant_factor;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int b_frame_strategy;
-+#endif
-+
-+    /**
-+     * qscale offset between IP and B-frames
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float b_quant_offset;
-+
-+    /**
-+     * Size of the frame reordering buffer in the decoder.
-+     * For MPEG-2 it is 1 IPB or 0 low delay IP.
-+     * - encoding: Set by libavcodec.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int has_b_frames;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int mpeg_quant;
-+#endif
-+
-+    /**
-+     * qscale factor between P- and I-frames
-+     * If > 0 then the last P-frame quantizer will be used (q = lastp_q * factor + offset).
-+     * If < 0 then normal ratecontrol will be done (q= -normal_q*factor+offset).
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float i_quant_factor;
-+
-+    /**
-+     * qscale offset between P and I-frames
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float i_quant_offset;
-+
-+    /**
-+     * luminance masking (0-> disabled)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float lumi_masking;
-+
-+    /**
-+     * temporary complexity masking (0-> disabled)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float temporal_cplx_masking;
-+
-+    /**
-+     * spatial complexity masking (0-> disabled)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float spatial_cplx_masking;
-+
-+    /**
-+     * p block masking (0-> disabled)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float p_masking;
-+
-+    /**
-+     * darkness masking (0-> disabled)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    float dark_masking;
-+
-+    /**
-+     * slice count
-+     * - encoding: Set by libavcodec.
-+     * - decoding: Set by user (or 0).
-+     */
-+    int slice_count;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+     int prediction_method;
-+#define FF_PRED_LEFT   0
-+#define FF_PRED_PLANE  1
-+#define FF_PRED_MEDIAN 2
-+#endif
-+
-+    /**
-+     * slice offsets in the frame in bytes
-+     * - encoding: Set/allocated by libavcodec.
-+     * - decoding: Set/allocated by user (or NULL).
-+     */
-+    int *slice_offset;
-+
-+    /**
-+     * sample aspect ratio (0 if unknown)
-+     * That is the width of a pixel divided by the height of the pixel.
-+     * Numerator and denominator must be relatively prime and smaller than 256 for some video standards.
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    AVRational sample_aspect_ratio;
-+
-+    /**
-+     * motion estimation comparison function
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int me_cmp;
-+    /**
-+     * subpixel motion estimation comparison function
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int me_sub_cmp;
-+    /**
-+     * macroblock comparison function (not supported yet)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int mb_cmp;
-+    /**
-+     * interlaced DCT comparison function
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int ildct_cmp;
-+#define FF_CMP_SAD          0
-+#define FF_CMP_SSE          1
-+#define FF_CMP_SATD         2
-+#define FF_CMP_DCT          3
-+#define FF_CMP_PSNR         4
-+#define FF_CMP_BIT          5
-+#define FF_CMP_RD           6
-+#define FF_CMP_ZERO         7
-+#define FF_CMP_VSAD         8
-+#define FF_CMP_VSSE         9
-+#define FF_CMP_NSSE         10
-+#define FF_CMP_W53          11
-+#define FF_CMP_W97          12
-+#define FF_CMP_DCTMAX       13
-+#define FF_CMP_DCT264       14
-+#define FF_CMP_MEDIAN_SAD   15
-+#define FF_CMP_CHROMA       256
-+
-+    /**
-+     * ME diamond size & shape
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int dia_size;
-+
-+    /**
-+     * amount of previous MV predictors (2a+1 x 2a+1 square)
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int last_predictor_count;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int pre_me;
-+#endif
-+
-+    /**
-+     * motion estimation prepass comparison function
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int me_pre_cmp;
-+
-+    /**
-+     * ME prepass diamond size & shape
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int pre_dia_size;
-+
-+    /**
-+     * subpel ME quality
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int me_subpel_quality;
-+
-+    /**
-+     * maximum motion estimation search range in subpel units
-+     * If 0 then no limit.
-+     *
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int me_range;
-+
-+    /**
-+     * slice flags
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int slice_flags;
-+#define SLICE_FLAG_CODED_ORDER    0x0001 ///< draw_horiz_band() is called in coded order instead of display
-+#define SLICE_FLAG_ALLOW_FIELD    0x0002 ///< allow draw_horiz_band() with field slices (MPEG-2 field pics)
-+#define SLICE_FLAG_ALLOW_PLANE    0x0004 ///< allow draw_horiz_band() with 1 component at a time (SVQ1)
-+
-+    /**
-+     * macroblock decision mode
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int mb_decision;
-+#define FF_MB_DECISION_SIMPLE 0        ///< uses mb_cmp
-+#define FF_MB_DECISION_BITS   1        ///< chooses the one which needs the fewest bits
-+#define FF_MB_DECISION_RD     2        ///< rate distortion
-+
-+    /**
-+     * custom intra quantization matrix
-+     * - encoding: Set by user, can be NULL.
-+     * - decoding: Set by libavcodec.
-+     */
-+    uint16_t *intra_matrix;
-+
-+    /**
-+     * custom inter quantization matrix
-+     * - encoding: Set by user, can be NULL.
-+     * - decoding: Set by libavcodec.
-+     */
-+    uint16_t *inter_matrix;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int scenechange_threshold;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int noise_reduction;
-+#endif
-+
-+    /**
-+     * precision of the intra DC coefficient - 8
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec
-+     */
-+    int intra_dc_precision;
-+
-+    /**
-+     * Number of macroblock rows at the top which are skipped.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int skip_top;
-+
-+    /**
-+     * Number of macroblock rows at the bottom which are skipped.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int skip_bottom;
-+
-+    /**
-+     * minimum MB Lagrange multiplier
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int mb_lmin;
-+
-+    /**
-+     * maximum MB Lagrange multiplier
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int mb_lmax;
-+
-+#if FF_API_PRIVATE_OPT
-+    /**
-+     * @deprecated use encoder private options instead
-+     */
-+    attribute_deprecated
-+    int me_penalty_compensation;
-+#endif
-+
-+    /**
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int bidir_refine;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int brd_scale;
-+#endif
-+
-+    /**
-+     * minimum GOP size
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int keyint_min;
-+
-+    /**
-+     * number of reference frames
-+     * - encoding: Set by user.
-+     * - decoding: Set by lavc.
-+     */
-+    int refs;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int chromaoffset;
-+#endif
-+
-+    /**
-+     * Note: Value depends upon the compare function used for fullpel ME.
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int mv0_threshold;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int b_sensitivity;
-+#endif
-+
-+    /**
-+     * Chromaticity coordinates of the source primaries.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorPrimaries color_primaries;
-+
-+    /**
-+     * Color Transfer Characteristic.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorTransferCharacteristic color_trc;
-+
-+    /**
-+     * YUV colorspace type.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorSpace colorspace;
-+
-+    /**
-+     * MPEG vs JPEG YUV range.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorRange color_range;
-+
-+    /**
-+     * This defines the location of chroma samples.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVChromaLocation chroma_sample_location;
-+
-+    /**
-+     * Number of slices.
-+     * Indicates number of picture subdivisions. Used for parallelized
-+     * decoding.
-+     * - encoding: Set by user
-+     * - decoding: unused
-+     */
-+    int slices;
-+
-+    /** Field order
-+     * - encoding: set by libavcodec
-+     * - decoding: Set by user.
-+     */
-+    enum AVFieldOrder field_order;
-+
-+    /* audio only */
-+    int sample_rate; ///< samples per second
-+    int channels;    ///< number of audio channels
-+
-+    /**
-+     * audio sample format
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    enum AVSampleFormat sample_fmt;  ///< sample format
-+
-+    /* The following data should not be initialized. */
-+    /**
-+     * Number of samples per channel in an audio frame.
-+     *
-+     * - encoding: set by libavcodec in avcodec_open2(). Each submitted frame
-+     *   except the last must contain exactly frame_size samples per channel.
-+     *   May be 0 when the codec has AV_CODEC_CAP_VARIABLE_FRAME_SIZE set, then the
-+     *   frame size is not restricted.
-+     * - decoding: may be set by some decoders to indicate constant frame size
-+     */
-+    int frame_size;
-+
-+    /**
-+     * Frame counter, set by libavcodec.
-+     *
-+     * - decoding: total number of frames returned from the decoder so far.
-+     * - encoding: total number of frames passed to the encoder so far.
-+     *
-+     *   @note the counter is not incremented if encoding/decoding resulted in
-+     *   an error.
-+     */
-+    int frame_number;
-+
-+    /**
-+     * number of bytes per packet if constant and known or 0
-+     * Used by some WAV based audio codecs.
-+     */
-+    int block_align;
-+
-+    /**
-+     * Audio cutoff bandwidth (0 means "automatic")
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int cutoff;
-+
-+    /**
-+     * Audio channel layout.
-+     * - encoding: set by user.
-+     * - decoding: set by user, may be overwritten by libavcodec.
-+     */
-+    uint64_t channel_layout;
-+
-+    /**
-+     * Request decoder to use this channel layout if it can (0 for default)
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    uint64_t request_channel_layout;
-+
-+    /**
-+     * Type of service that the audio stream conveys.
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    enum AVAudioServiceType audio_service_type;
-+
-+    /**
-+     * desired sample format
-+     * - encoding: Not used.
-+     * - decoding: Set by user.
-+     * Decoder will decode to this format if it can.
-+     */
-+    enum AVSampleFormat request_sample_fmt;
-+
-+    /**
-+     * This callback is called at the beginning of each frame to get data
-+     * buffer(s) for it. There may be one contiguous buffer for all the data or
-+     * there may be a buffer per each data plane or anything in between. What
-+     * this means is, you may set however many entries in buf[] you feel necessary.
-+     * Each buffer must be reference-counted using the AVBuffer API (see description
-+     * of buf[] below).
-+     *
-+     * The following fields will be set in the frame before this callback is
-+     * called:
-+     * - format
-+     * - width, height (video only)
-+     * - sample_rate, channel_layout, nb_samples (audio only)
-+     * Their values may differ from the corresponding values in
-+     * AVCodecContext. This callback must use the frame values, not the codec
-+     * context values, to calculate the required buffer size.
-+     *
-+     * This callback must fill the following fields in the frame:
-+     * - data[]
-+     * - linesize[]
-+     * - extended_data:
-+     *   * if the data is planar audio with more than 8 channels, then this
-+     *     callback must allocate and fill extended_data to contain all pointers
-+     *     to all data planes. data[] must hold as many pointers as it can.
-+     *     extended_data must be allocated with av_malloc() and will be freed in
-+     *     av_frame_unref().
-+     *   * otherwise extended_data must point to data
-+     * - buf[] must contain one or more pointers to AVBufferRef structures. Each of
-+     *   the frame's data and extended_data pointers must be contained in these. That
-+     *   is, one AVBufferRef for each allocated chunk of memory, not necessarily one
-+     *   AVBufferRef per data[] entry. See: av_buffer_create(), av_buffer_alloc(),
-+     *   and av_buffer_ref().
-+     * - extended_buf and nb_extended_buf must be allocated with av_malloc() by
-+     *   this callback and filled with the extra buffers if there are more
-+     *   buffers than buf[] can hold. extended_buf will be freed in
-+     *   av_frame_unref().
-+     *
-+     * If AV_CODEC_CAP_DR1 is not set then get_buffer2() must call
-+     * avcodec_default_get_buffer2() instead of providing buffers allocated by
-+     * some other means.
-+     *
-+     * Each data plane must be aligned to the maximum required by the target
-+     * CPU.
-+     *
-+     * @see avcodec_default_get_buffer2()
-+     *
-+     * Video:
-+     *
-+     * If AV_GET_BUFFER_FLAG_REF is set in flags then the frame may be reused
-+     * (read and/or written to if it is writable) later by libavcodec.
-+     *
-+     * avcodec_align_dimensions2() should be used to find the required width and
-+     * height, as they normally need to be rounded up to the next multiple of 16.
-+     *
-+     * Some decoders do not support linesizes changing between frames.
-+     *
-+     * If frame multithreading is used and thread_safe_callbacks is set,
-+     * this callback may be called from a different thread, but not from more
-+     * than one at once. Does not need to be reentrant.
-+     *
-+     * @see avcodec_align_dimensions2()
-+     *
-+     * Audio:
-+     *
-+     * Decoders request a buffer of a particular size by setting
-+     * AVFrame.nb_samples prior to calling get_buffer2(). The decoder may,
-+     * however, utilize only part of the buffer by setting AVFrame.nb_samples
-+     * to a smaller value in the output frame.
-+     *
-+     * As a convenience, av_samples_get_buffer_size() and
-+     * av_samples_fill_arrays() in libavutil may be used by custom get_buffer2()
-+     * functions to find the required data size and to fill data pointers and
-+     * linesize. In AVFrame.linesize, only linesize[0] may be set for audio
-+     * since all planes must be the same size.
-+     *
-+     * @see av_samples_get_buffer_size(), av_samples_fill_arrays()
-+     *
-+     * - encoding: unused
-+     * - decoding: Set by libavcodec, user can override.
-+     */
-+    int (*get_buffer2)(struct AVCodecContext *s, AVFrame *frame, int flags);
-+
-+    /**
-+     * If non-zero, the decoded audio and video frames returned from
-+     * avcodec_decode_video2() and avcodec_decode_audio4() are reference-counted
-+     * and are valid indefinitely. The caller must free them with
-+     * av_frame_unref() when they are not needed anymore.
-+     * Otherwise, the decoded frames must not be freed by the caller and are
-+     * only valid until the next decode call.
-+     *
-+     * This is always automatically enabled if avcodec_receive_frame() is used.
-+     *
-+     * - encoding: unused
-+     * - decoding: set by the caller before avcodec_open2().
-+     */
-+    attribute_deprecated
-+    int refcounted_frames;
-+
-+    /* - encoding parameters */
-+    float qcompress;  ///< amount of qscale change between easy & hard scenes (0.0-1.0)
-+    float qblur;      ///< amount of qscale smoothing over time (0.0-1.0)
-+
-+    /**
-+     * minimum quantizer
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int qmin;
-+
-+    /**
-+     * maximum quantizer
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int qmax;
-+
-+    /**
-+     * maximum quantizer difference between frames
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int max_qdiff;
-+
-+    /**
-+     * decoder bitstream buffer size
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int rc_buffer_size;
-+
-+    /**
-+     * ratecontrol override, see RcOverride
-+     * - encoding: Allocated/set/freed by user.
-+     * - decoding: unused
-+     */
-+    int rc_override_count;
-+    RcOverride *rc_override;
-+
-+    /**
-+     * maximum bitrate
-+     * - encoding: Set by user.
-+     * - decoding: Set by user, may be overwritten by libavcodec.
-+     */
-+    int64_t rc_max_rate;
-+
-+    /**
-+     * minimum bitrate
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int64_t rc_min_rate;
-+
-+    /**
-+     * Ratecontrol attempt to use, at maximum, <value> of what can be used without an underflow.
-+     * - encoding: Set by user.
-+     * - decoding: unused.
-+     */
-+    float rc_max_available_vbv_use;
-+
-+    /**
-+     * Ratecontrol attempt to use, at least, <value> times the amount needed to prevent a vbv overflow.
-+     * - encoding: Set by user.
-+     * - decoding: unused.
-+     */
-+    float rc_min_vbv_overflow_use;
-+
-+    /**
-+     * Number of bits which should be loaded into the rc buffer before decoding starts.
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int rc_initial_buffer_occupancy;
-+
-+#if FF_API_CODER_TYPE
-+#define FF_CODER_TYPE_VLC       0
-+#define FF_CODER_TYPE_AC        1
-+#define FF_CODER_TYPE_RAW       2
-+#define FF_CODER_TYPE_RLE       3
-+    /**
-+     * @deprecated use encoder private options instead
-+     */
-+    attribute_deprecated
-+    int coder_type;
-+#endif /* FF_API_CODER_TYPE */
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int context_model;
-+#endif
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int frame_skip_threshold;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int frame_skip_factor;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int frame_skip_exp;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int frame_skip_cmp;
-+#endif /* FF_API_PRIVATE_OPT */
-+
-+    /**
-+     * trellis RD quantization
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int trellis;
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int min_prediction_order;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int max_prediction_order;
-+
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int64_t timecode_frame_start;
-+#endif
-+
-+#if FF_API_RTP_CALLBACK
-+    /**
-+     * @deprecated unused
-+     */
-+    /* The RTP callback: This function is called    */
-+    /* every time the encoder has a packet to send. */
-+    /* It depends on the encoder if the data starts */
-+    /* with a Start Code (it should). H.263 does.   */
-+    /* mb_nb contains the number of macroblocks     */
-+    /* encoded in the RTP payload.                  */
-+    attribute_deprecated
-+    void (*rtp_callback)(struct AVCodecContext *avctx, void *data, int size, int mb_nb);
-+#endif
-+
-+#if FF_API_PRIVATE_OPT
-+    /** @deprecated use encoder private options instead */
-+    attribute_deprecated
-+    int rtp_payload_size;   /* The size of the RTP payload: the coder will  */
-+                            /* do its best to deliver a chunk with size     */
-+                            /* below rtp_payload_size, the chunk will start */
-+                            /* with a start code on some codecs like H.263. */
-+                            /* This doesn't take account of any particular  */
-+                            /* headers inside the transmitted RTP payload.  */
-+#endif
-+
-+#if FF_API_STAT_BITS
-+    /* statistics, used for 2-pass encoding */
-+    attribute_deprecated
-+    int mv_bits;
-+    attribute_deprecated
-+    int header_bits;
-+    attribute_deprecated
-+    int i_tex_bits;
-+    attribute_deprecated
-+    int p_tex_bits;
-+    attribute_deprecated
-+    int i_count;
-+    attribute_deprecated
-+    int p_count;
-+    attribute_deprecated
-+    int skip_count;
-+    attribute_deprecated
-+    int misc_bits;
-+
-+    /** @deprecated this field is unused */
-+    attribute_deprecated
-+    int frame_bits;
-+#endif
-+
-+    /**
-+     * pass1 encoding statistics output buffer
-+     * - encoding: Set by libavcodec.
-+     * - decoding: unused
-+     */
-+    char *stats_out;
-+
-+    /**
-+     * pass2 encoding statistics input buffer
-+     * Concatenated stuff from stats_out of pass1 should be placed here.
-+     * - encoding: Allocated/set/freed by user.
-+     * - decoding: unused
-+     */
-+    char *stats_in;
-+
-+    /**
-+     * Work around bugs in encoders which sometimes cannot be detected automatically.
-+     * - encoding: Set by user
-+     * - decoding: Set by user
-+     */
-+    int workaround_bugs;
-+#define FF_BUG_AUTODETECT       1  ///< autodetection
-+#define FF_BUG_XVID_ILACE       4
-+#define FF_BUG_UMP4             8
-+#define FF_BUG_NO_PADDING       16
-+#define FF_BUG_AMV              32
-+#define FF_BUG_QPEL_CHROMA      64
-+#define FF_BUG_STD_QPEL         128
-+#define FF_BUG_QPEL_CHROMA2     256
-+#define FF_BUG_DIRECT_BLOCKSIZE 512
-+#define FF_BUG_EDGE             1024
-+#define FF_BUG_HPEL_CHROMA      2048
-+#define FF_BUG_DC_CLIP          4096
-+#define FF_BUG_MS               8192 ///< Work around various bugs in Microsoft's broken decoders.
-+#define FF_BUG_TRUNCATED       16384
-+#define FF_BUG_IEDGE           32768
-+
-+    /**
-+     * strictly follow the standard (MPEG-4, ...).
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     * Setting this to STRICT or higher means the encoder and decoder will
-+     * generally do stupid things, whereas setting it to unofficial or lower
-+     * will mean the encoder might produce output that is not supported by all
-+     * spec-compliant decoders. Decoders don't differentiate between normal,
-+     * unofficial and experimental (that is, they always try to decode things
-+     * when they can) unless they are explicitly asked to behave stupidly
-+     * (=strictly conform to the specs)
-+     */
-+    int strict_std_compliance;
-+#define FF_COMPLIANCE_VERY_STRICT   2 ///< Strictly conform to an older more strict version of the spec or reference software.
-+#define FF_COMPLIANCE_STRICT        1 ///< Strictly conform to all the things in the spec no matter what consequences.
-+#define FF_COMPLIANCE_NORMAL        0
-+#define FF_COMPLIANCE_UNOFFICIAL   -1 ///< Allow unofficial extensions
-+#define FF_COMPLIANCE_EXPERIMENTAL -2 ///< Allow nonstandardized experimental things.
-+
-+    /**
-+     * error concealment flags
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int error_concealment;
-+#define FF_EC_GUESS_MVS   1
-+#define FF_EC_DEBLOCK     2
-+#define FF_EC_FAVOR_INTER 256
-+
-+    /**
-+     * debug
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int debug;
-+#define FF_DEBUG_PICT_INFO   1
-+#define FF_DEBUG_RC          2
-+#define FF_DEBUG_BITSTREAM   4
-+#define FF_DEBUG_MB_TYPE     8
-+#define FF_DEBUG_QP          16
-+#if FF_API_DEBUG_MV
-+/**
-+ * @deprecated this option does nothing
-+ */
-+#define FF_DEBUG_MV          32
-+#endif
-+#define FF_DEBUG_DCT_COEFF   0x00000040
-+#define FF_DEBUG_SKIP        0x00000080
-+#define FF_DEBUG_STARTCODE   0x00000100
-+#define FF_DEBUG_ER          0x00000400
-+#define FF_DEBUG_MMCO        0x00000800
-+#define FF_DEBUG_BUGS        0x00001000
-+#if FF_API_DEBUG_MV
-+#define FF_DEBUG_VIS_QP      0x00002000
-+#define FF_DEBUG_VIS_MB_TYPE 0x00004000
-+#endif
-+#define FF_DEBUG_BUFFERS     0x00008000
-+#define FF_DEBUG_THREADS     0x00010000
-+#define FF_DEBUG_GREEN_MD    0x00800000
-+#define FF_DEBUG_NOMC        0x01000000
-+
-+#if FF_API_DEBUG_MV
-+    /**
-+     * debug
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int debug_mv;
-+#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 // visualize forward predicted MVs of P-frames
-+#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 // visualize forward predicted MVs of B-frames
-+#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 // visualize backward predicted MVs of B-frames
-+#endif
-+
-+    /**
-+     * Error recognition; may misdetect some more or less valid parts as errors.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int err_recognition;
-+
-+/**
-+ * Verify checksums embedded in the bitstream (could be of either encoded or
-+ * decoded data, depending on the codec) and print an error message on mismatch.
-+ * If AV_EF_EXPLODE is also set, a mismatching checksum will result in the
-+ * decoder returning an error.
-+ */
-+#define AV_EF_CRCCHECK  (1<<0)
-+#define AV_EF_BITSTREAM (1<<1)          ///< detect bitstream specification deviations
-+#define AV_EF_BUFFER    (1<<2)          ///< detect improper bitstream length
-+#define AV_EF_EXPLODE   (1<<3)          ///< abort decoding on minor error detection
-+
-+#define AV_EF_IGNORE_ERR (1<<15)        ///< ignore errors and continue
-+#define AV_EF_CAREFUL    (1<<16)        ///< consider things that violate the spec, are fast to calculate and have not been seen in the wild as errors
-+#define AV_EF_COMPLIANT  (1<<17)        ///< consider all spec non compliances as errors
-+#define AV_EF_AGGRESSIVE (1<<18)        ///< consider things that a sane encoder should not do as an error
-+
-+
-+    /**
-+     * opaque 64-bit number (generally a PTS) that will be reordered and
-+     * output in AVFrame.reordered_opaque
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    int64_t reordered_opaque;
-+
-+    /**
-+     * Hardware accelerator in use
-+     * - encoding: unused.
-+     * - decoding: Set by libavcodec
-+     */
-+    const struct AVHWAccel *hwaccel;
-+
-+    /**
-+     * Hardware accelerator context.
-+     * For some hardware accelerators, a global context needs to be
-+     * provided by the user. In that case, this holds display-dependent
-+     * data FFmpeg cannot instantiate itself. Please refer to the
-+     * FFmpeg HW accelerator documentation to know how to fill this
-+     * is. e.g. for VA API, this is a struct vaapi_context.
-+     * - encoding: unused
-+     * - decoding: Set by user
-+     */
-+    void *hwaccel_context;
-+
-+    /**
-+     * error
-+     * - encoding: Set by libavcodec if flags & AV_CODEC_FLAG_PSNR.
-+     * - decoding: unused
-+     */
-+    uint64_t error[AV_NUM_DATA_POINTERS];
-+
-+    /**
-+     * DCT algorithm, see FF_DCT_* below
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+    int dct_algo;
-+#define FF_DCT_AUTO    0
-+#define FF_DCT_FASTINT 1
-+#define FF_DCT_INT     2
-+#define FF_DCT_MMX     3
-+#define FF_DCT_ALTIVEC 5
-+#define FF_DCT_FAAN    6
-+
-+    /**
-+     * IDCT algorithm, see FF_IDCT_* below.
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int idct_algo;
-+#define FF_IDCT_AUTO          0
-+#define FF_IDCT_INT           1
-+#define FF_IDCT_SIMPLE        2
-+#define FF_IDCT_SIMPLEMMX     3
-+#define FF_IDCT_ARM           7
-+#define FF_IDCT_ALTIVEC       8
-+#define FF_IDCT_SIMPLEARM     10
-+#define FF_IDCT_XVID          14
-+#define FF_IDCT_SIMPLEARMV5TE 16
-+#define FF_IDCT_SIMPLEARMV6   17
-+#define FF_IDCT_FAAN          20
-+#define FF_IDCT_SIMPLENEON    22
-+#define FF_IDCT_NONE          24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */
-+#define FF_IDCT_SIMPLEAUTO    128
-+
-+    /**
-+     * bits per sample/pixel from the demuxer (needed for huffyuv).
-+     * - encoding: Set by libavcodec.
-+     * - decoding: Set by user.
-+     */
-+     int bits_per_coded_sample;
-+
-+    /**
-+     * Bits per sample/pixel of internal libavcodec pixel/sample format.
-+     * - encoding: set by user.
-+     * - decoding: set by libavcodec.
-+     */
-+    int bits_per_raw_sample;
-+
-+#if FF_API_LOWRES
-+    /**
-+     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+     int lowres;
-+#endif
-+
-+#if FF_API_CODED_FRAME
-+    /**
-+     * the picture in the bitstream
-+     * - encoding: Set by libavcodec.
-+     * - decoding: unused
-+     *
-+     * @deprecated use the quality factor packet side data instead
-+     */
-+    attribute_deprecated AVFrame *coded_frame;
-+#endif
-+
-+    /**
-+     * thread count
-+     * is used to decide how many independent tasks should be passed to execute()
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int thread_count;
-+
-+    /**
-+     * Which multithreading methods to use.
-+     * Use of FF_THREAD_FRAME will increase decoding delay by one frame per thread,
-+     * so clients which cannot provide future frames should not use it.
-+     *
-+     * - encoding: Set by user, otherwise the default is used.
-+     * - decoding: Set by user, otherwise the default is used.
-+     */
-+    int thread_type;
-+#define FF_THREAD_FRAME   1 ///< Decode more than one frame at once
-+#define FF_THREAD_SLICE   2 ///< Decode more than one part of a single frame at once
-+
-+    /**
-+     * Which multithreading methods are in use by the codec.
-+     * - encoding: Set by libavcodec.
-+     * - decoding: Set by libavcodec.
-+     */
-+    int active_thread_type;
-+
-+    /**
-+     * Set by the client if its custom get_buffer() callback can be called
-+     * synchronously from another thread, which allows faster multithreaded decoding.
-+     * draw_horiz_band() will be called from other threads regardless of this setting.
-+     * Ignored if the default get_buffer() is used.
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int thread_safe_callbacks;
-+
-+    /**
-+     * The codec may call this to execute several independent things.
-+     * It will return only after finishing all tasks.
-+     * The user may replace this with some multithreaded implementation,
-+     * the default implementation will execute the parts serially.
-+     * @param count the number of things to execute
-+     * - encoding: Set by libavcodec, user can override.
-+     * - decoding: Set by libavcodec, user can override.
-+     */
-+    int (*execute)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg), void *arg2, int *ret, int count, int size);
-+
-+    /**
-+     * The codec may call this to execute several independent things.
-+     * It will return only after finishing all tasks.
-+     * The user may replace this with some multithreaded implementation,
-+     * the default implementation will execute the parts serially.
-+     * Also see avcodec_thread_init and e.g. the --enable-pthread configure option.
-+     * @param c context passed also to func
-+     * @param count the number of things to execute
-+     * @param arg2 argument passed unchanged to func
-+     * @param ret return values of executed functions, must have space for "count" values. May be NULL.
-+     * @param func function that will be called count times, with jobnr from 0 to count-1.
-+     *             threadnr will be in the range 0 to c->thread_count-1 < MAX_THREADS and so that no
-+     *             two instances of func executing at the same time will have the same threadnr.
-+     * @return always 0 currently, but code should handle a future improvement where when any call to func
-+     *         returns < 0 no further calls to func may be done and < 0 is returned.
-+     * - encoding: Set by libavcodec, user can override.
-+     * - decoding: Set by libavcodec, user can override.
-+     */
-+    int (*execute2)(struct AVCodecContext *c, int (*func)(struct AVCodecContext *c2, void *arg, int jobnr, int threadnr), void *arg2, int *ret, int count);
-+
-+    /**
-+     * noise vs. sse weight for the nsse comparison function
-+     * - encoding: Set by user.
-+     * - decoding: unused
-+     */
-+     int nsse_weight;
-+
-+    /**
-+     * profile
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+     int profile;
-+#define FF_PROFILE_UNKNOWN -99
-+#define FF_PROFILE_RESERVED -100
-+
-+#define FF_PROFILE_AAC_MAIN 0
-+#define FF_PROFILE_AAC_LOW  1
-+#define FF_PROFILE_AAC_SSR  2
-+#define FF_PROFILE_AAC_LTP  3
-+#define FF_PROFILE_AAC_HE   4
-+#define FF_PROFILE_AAC_HE_V2 28
-+#define FF_PROFILE_AAC_LD   22
-+#define FF_PROFILE_AAC_ELD  38
-+#define FF_PROFILE_MPEG2_AAC_LOW 128
-+#define FF_PROFILE_MPEG2_AAC_HE  131
-+
-+#define FF_PROFILE_DNXHD         0
-+#define FF_PROFILE_DNXHR_LB      1
-+#define FF_PROFILE_DNXHR_SQ      2
-+#define FF_PROFILE_DNXHR_HQ      3
-+#define FF_PROFILE_DNXHR_HQX     4
-+#define FF_PROFILE_DNXHR_444     5
-+
-+#define FF_PROFILE_DTS         20
-+#define FF_PROFILE_DTS_ES      30
-+#define FF_PROFILE_DTS_96_24   40
-+#define FF_PROFILE_DTS_HD_HRA  50
-+#define FF_PROFILE_DTS_HD_MA   60
-+#define FF_PROFILE_DTS_EXPRESS 70
-+
-+#define FF_PROFILE_MPEG2_422    0
-+#define FF_PROFILE_MPEG2_HIGH   1
-+#define FF_PROFILE_MPEG2_SS     2
-+#define FF_PROFILE_MPEG2_SNR_SCALABLE  3
-+#define FF_PROFILE_MPEG2_MAIN   4
-+#define FF_PROFILE_MPEG2_SIMPLE 5
-+
-+#define FF_PROFILE_H264_CONSTRAINED  (1<<9)  // 8+1; constraint_set1_flag
-+#define FF_PROFILE_H264_INTRA        (1<<11) // 8+3; constraint_set3_flag
-+
-+#define FF_PROFILE_H264_BASELINE             66
-+#define FF_PROFILE_H264_CONSTRAINED_BASELINE (66|FF_PROFILE_H264_CONSTRAINED)
-+#define FF_PROFILE_H264_MAIN                 77
-+#define FF_PROFILE_H264_EXTENDED             88
-+#define FF_PROFILE_H264_HIGH                 100
-+#define FF_PROFILE_H264_HIGH_10              110
-+#define FF_PROFILE_H264_HIGH_10_INTRA        (110|FF_PROFILE_H264_INTRA)
-+#define FF_PROFILE_H264_MULTIVIEW_HIGH       118
-+#define FF_PROFILE_H264_HIGH_422             122
-+#define FF_PROFILE_H264_HIGH_422_INTRA       (122|FF_PROFILE_H264_INTRA)
-+#define FF_PROFILE_H264_STEREO_HIGH          128
-+#define FF_PROFILE_H264_HIGH_444             144
-+#define FF_PROFILE_H264_HIGH_444_PREDICTIVE  244
-+#define FF_PROFILE_H264_HIGH_444_INTRA       (244|FF_PROFILE_H264_INTRA)
-+#define FF_PROFILE_H264_CAVLC_444            44
-+
-+#define FF_PROFILE_VC1_SIMPLE   0
-+#define FF_PROFILE_VC1_MAIN     1
-+#define FF_PROFILE_VC1_COMPLEX  2
-+#define FF_PROFILE_VC1_ADVANCED 3
-+
-+#define FF_PROFILE_MPEG4_SIMPLE                     0
-+#define FF_PROFILE_MPEG4_SIMPLE_SCALABLE            1
-+#define FF_PROFILE_MPEG4_CORE                       2
-+#define FF_PROFILE_MPEG4_MAIN                       3
-+#define FF_PROFILE_MPEG4_N_BIT                      4
-+#define FF_PROFILE_MPEG4_SCALABLE_TEXTURE           5
-+#define FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION      6
-+#define FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE     7
-+#define FF_PROFILE_MPEG4_HYBRID                     8
-+#define FF_PROFILE_MPEG4_ADVANCED_REAL_TIME         9
-+#define FF_PROFILE_MPEG4_CORE_SCALABLE             10
-+#define FF_PROFILE_MPEG4_ADVANCED_CODING           11
-+#define FF_PROFILE_MPEG4_ADVANCED_CORE             12
-+#define FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE 13
-+#define FF_PROFILE_MPEG4_SIMPLE_STUDIO             14
-+#define FF_PROFILE_MPEG4_ADVANCED_SIMPLE           15
-+
-+#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0   1
-+#define FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1   2
-+#define FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION  32768
-+#define FF_PROFILE_JPEG2000_DCINEMA_2K              3
-+#define FF_PROFILE_JPEG2000_DCINEMA_4K              4
-+
-+#define FF_PROFILE_VP9_0                            0
-+#define FF_PROFILE_VP9_1                            1
-+#define FF_PROFILE_VP9_2                            2
-+#define FF_PROFILE_VP9_3                            3
-+
-+#define FF_PROFILE_HEVC_MAIN                        1
-+#define FF_PROFILE_HEVC_MAIN_10                     2
-+#define FF_PROFILE_HEVC_MAIN_STILL_PICTURE          3
-+#define FF_PROFILE_HEVC_REXT                        4
-+
-+#define FF_PROFILE_AV1_MAIN                         0
-+#define FF_PROFILE_AV1_HIGH                         1
-+#define FF_PROFILE_AV1_PROFESSIONAL                 2
-+
-+#define FF_PROFILE_MJPEG_HUFFMAN_BASELINE_DCT            0xc0
-+#define FF_PROFILE_MJPEG_HUFFMAN_EXTENDED_SEQUENTIAL_DCT 0xc1
-+#define FF_PROFILE_MJPEG_HUFFMAN_PROGRESSIVE_DCT         0xc2
-+#define FF_PROFILE_MJPEG_HUFFMAN_LOSSLESS                0xc3
-+#define FF_PROFILE_MJPEG_JPEG_LS                         0xf7
-+
-+#define FF_PROFILE_SBC_MSBC                         1
-+
-+    /**
-+     * level
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+     int level;
-+#define FF_LEVEL_UNKNOWN -99
-+
-+    /**
-+     * Skip loop filtering for selected frames.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    enum AVDiscard skip_loop_filter;
-+
-+    /**
-+     * Skip IDCT/dequantization for selected frames.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    enum AVDiscard skip_idct;
-+
-+    /**
-+     * Skip decoding for selected frames.
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+    enum AVDiscard skip_frame;
-+
-+    /**
-+     * Header containing style information for text subtitles.
-+     * For SUBTITLE_ASS subtitle type, it should contain the whole ASS
-+     * [Script Info] and [V4+ Styles] section, plus the [Events] line and
-+     * the Format line following. It shouldn't include any Dialogue line.
-+     * - encoding: Set/allocated/freed by user (before avcodec_open2())
-+     * - decoding: Set/allocated/freed by libavcodec (by avcodec_open2())
-+     */
-+    uint8_t *subtitle_header;
-+    int subtitle_header_size;
-+
-+#if FF_API_VBV_DELAY
-+    /**
-+     * VBV delay coded in the last frame (in periods of a 27 MHz clock).
-+     * Used for compliant TS muxing.
-+     * - encoding: Set by libavcodec.
-+     * - decoding: unused.
-+     * @deprecated this value is now exported as a part of
-+     * AV_PKT_DATA_CPB_PROPERTIES packet side data
-+     */
-+    attribute_deprecated
-+    uint64_t vbv_delay;
-+#endif
-+
-+#if FF_API_SIDEDATA_ONLY_PKT
-+    /**
-+     * Encoding only and set by default. Allow encoders to output packets
-+     * that do not contain any encoded data, only side data.
-+     *
-+     * Some encoders need to output such packets, e.g. to update some stream
-+     * parameters at the end of encoding.
-+     *
-+     * @deprecated this field disables the default behaviour and
-+     *             it is kept only for compatibility.
-+     */
-+    attribute_deprecated
-+    int side_data_only_packets;
-+#endif
-+
-+    /**
-+     * Audio only. The number of "priming" samples (padding) inserted by the
-+     * encoder at the beginning of the audio. I.e. this number of leading
-+     * decoded samples must be discarded by the caller to get the original audio
-+     * without leading padding.
-+     *
-+     * - decoding: unused
-+     * - encoding: Set by libavcodec. The timestamps on the output packets are
-+     *             adjusted by the encoder so that they always refer to the
-+     *             first sample of the data actually contained in the packet,
-+     *             including any added padding.  E.g. if the timebase is
-+     *             1/samplerate and the timestamp of the first input sample is
-+     *             0, the timestamp of the first output packet will be
-+     *             -initial_padding.
-+     */
-+    int initial_padding;
-+
-+    /**
-+     * - decoding: For codecs that store a framerate value in the compressed
-+     *             bitstream, the decoder may export it here. { 0, 1} when
-+     *             unknown.
-+     * - encoding: May be used to signal the framerate of CFR content to an
-+     *             encoder.
-+     */
-+    AVRational framerate;
-+
-+    /**
-+     * Nominal unaccelerated pixel format, see AV_PIX_FMT_xxx.
-+     * - encoding: unused.
-+     * - decoding: Set by libavcodec before calling get_format()
-+     */
-+    enum AVPixelFormat sw_pix_fmt;
-+
-+    /**
-+     * Timebase in which pkt_dts/pts and AVPacket.dts/pts are.
-+     * - encoding unused.
-+     * - decoding set by user.
-+     */
-+    AVRational pkt_timebase;
-+
-+    /**
-+     * AVCodecDescriptor
-+     * - encoding: unused.
-+     * - decoding: set by libavcodec.
-+     */
-+    const AVCodecDescriptor *codec_descriptor;
-+
-+#if !FF_API_LOWRES
-+    /**
-+     * low resolution decoding, 1-> 1/2 size, 2->1/4 size
-+     * - encoding: unused
-+     * - decoding: Set by user.
-+     */
-+     int lowres;
-+#endif
-+
-+    /**
-+     * Current statistics for PTS correction.
-+     * - decoding: maintained and used by libavcodec, not intended to be used by user apps
-+     * - encoding: unused
-+     */
-+    int64_t pts_correction_num_faulty_pts; /// Number of incorrect PTS values so far
-+    int64_t pts_correction_num_faulty_dts; /// Number of incorrect DTS values so far
-+    int64_t pts_correction_last_pts;       /// PTS of the last frame
-+    int64_t pts_correction_last_dts;       /// DTS of the last frame
-+
-+    /**
-+     * Character encoding of the input subtitles file.
-+     * - decoding: set by user
-+     * - encoding: unused
-+     */
-+    char *sub_charenc;
-+
-+    /**
-+     * Subtitles character encoding mode. Formats or codecs might be adjusting
-+     * this setting (if they are doing the conversion themselves for instance).
-+     * - decoding: set by libavcodec
-+     * - encoding: unused
-+     */
-+    int sub_charenc_mode;
-+#define FF_SUB_CHARENC_MODE_DO_NOTHING  -1  ///< do nothing (demuxer outputs a stream supposed to be already in UTF-8, or the codec is bitmap for instance)
-+#define FF_SUB_CHARENC_MODE_AUTOMATIC    0  ///< libavcodec will select the mode itself
-+#define FF_SUB_CHARENC_MODE_PRE_DECODER  1  ///< the AVPacket data needs to be recoded to UTF-8 before being fed to the decoder, requires iconv
-+#define FF_SUB_CHARENC_MODE_IGNORE       2  ///< neither convert the subtitles, nor check them for valid UTF-8
-+
-+    /**
-+     * Skip processing alpha if supported by codec.
-+     * Note that if the format uses pre-multiplied alpha (common with VP6,
-+     * and recommended due to better video quality/compression)
-+     * the image will look as if alpha-blended onto a black background.
-+     * However for formats that do not use pre-multiplied alpha
-+     * there might be serious artefacts (though e.g. libswscale currently
-+     * assumes pre-multiplied alpha anyway).
-+     *
-+     * - decoding: set by user
-+     * - encoding: unused
-+     */
-+    int skip_alpha;
-+
-+    /**
-+     * Number of samples to skip after a discontinuity
-+     * - decoding: unused
-+     * - encoding: set by libavcodec
-+     */
-+    int seek_preroll;
-+
-+#if !FF_API_DEBUG_MV
-+    /**
-+     * debug motion vectors
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    int debug_mv;
-+#define FF_DEBUG_VIS_MV_P_FOR  0x00000001 //visualize forward predicted MVs of P frames
-+#define FF_DEBUG_VIS_MV_B_FOR  0x00000002 //visualize forward predicted MVs of B frames
-+#define FF_DEBUG_VIS_MV_B_BACK 0x00000004 //visualize backward predicted MVs of B frames
-+#endif
-+
-+    /**
-+     * custom intra quantization matrix
-+     * - encoding: Set by user, can be NULL.
-+     * - decoding: unused.
-+     */
-+    uint16_t *chroma_intra_matrix;
-+
-+    /**
-+     * dump format separator.
-+     * can be ", " or "\n      " or anything else
-+     * - encoding: Set by user.
-+     * - decoding: Set by user.
-+     */
-+    uint8_t *dump_separator;
-+
-+    /**
-+     * ',' separated list of allowed decoders.
-+     * If NULL then all are allowed
-+     * - encoding: unused
-+     * - decoding: set by user
-+     */
-+    char *codec_whitelist;
-+
-+    /**
-+     * Properties of the stream that gets decoded
-+     * - encoding: unused
-+     * - decoding: set by libavcodec
-+     */
-+    unsigned properties;
-+#define FF_CODEC_PROPERTY_LOSSLESS        0x00000001
-+#define FF_CODEC_PROPERTY_CLOSED_CAPTIONS 0x00000002
-+
-+    /**
-+     * Additional data associated with the entire coded stream.
-+     *
-+     * - decoding: unused
-+     * - encoding: may be set by libavcodec after avcodec_open2().
-+     */
-+    AVPacketSideData *coded_side_data;
-+    int            nb_coded_side_data;
-+
-+    /**
-+     * A reference to the AVHWFramesContext describing the input (for encoding)
-+     * or output (decoding) frames. The reference is set by the caller and
-+     * afterwards owned (and freed) by libavcodec - it should never be read by
-+     * the caller after being set.
-+     *
-+     * - decoding: This field should be set by the caller from the get_format()
-+     *             callback. The previous reference (if any) will always be
-+     *             unreffed by libavcodec before the get_format() call.
-+     *
-+     *             If the default get_buffer2() is used with a hwaccel pixel
-+     *             format, then this AVHWFramesContext will be used for
-+     *             allocating the frame buffers.
-+     *
-+     * - encoding: For hardware encoders configured to use a hwaccel pixel
-+     *             format, this field should be set by the caller to a reference
-+     *             to the AVHWFramesContext describing input frames.
-+     *             AVHWFramesContext.format must be equal to
-+     *             AVCodecContext.pix_fmt.
-+     *
-+     *             This field should be set before avcodec_open2() is called.
-+     */
-+    AVBufferRef *hw_frames_ctx;
-+
-+    /**
-+     * Control the form of AVSubtitle.rects[N]->ass
-+     * - decoding: set by user
-+     * - encoding: unused
-+     */
-+    int sub_text_format;
-+#define FF_SUB_TEXT_FMT_ASS              0
-+#if FF_API_ASS_TIMING
-+#define FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS 1
-+#endif
-+
-+    /**
-+     * Audio only. The amount of padding (in samples) appended by the encoder to
-+     * the end of the audio. I.e. this number of decoded samples must be
-+     * discarded by the caller from the end of the stream to get the original
-+     * audio without any trailing padding.
-+     *
-+     * - decoding: unused
-+     * - encoding: unused
-+     */
-+    int trailing_padding;
-+
-+    /**
-+     * The number of pixels per image to maximally accept.
-+     *
-+     * - decoding: set by user
-+     * - encoding: set by user
-+     */
-+    int64_t max_pixels;
-+
-+    /**
-+     * A reference to the AVHWDeviceContext describing the device which will
-+     * be used by a hardware encoder/decoder.  The reference is set by the
-+     * caller and afterwards owned (and freed) by libavcodec.
-+     *
-+     * This should be used if either the codec device does not require
-+     * hardware frames or any that are used are to be allocated internally by
-+     * libavcodec.  If the user wishes to supply any of the frames used as
-+     * encoder input or decoder output then hw_frames_ctx should be used
-+     * instead.  When hw_frames_ctx is set in get_format() for a decoder, this
-+     * field will be ignored while decoding the associated stream segment, but
-+     * may again be used on a following one after another get_format() call.
-+     *
-+     * For both encoders and decoders this field should be set before
-+     * avcodec_open2() is called and must not be written to thereafter.
-+     *
-+     * Note that some decoders may require this field to be set initially in
-+     * order to support hw_frames_ctx at all - in that case, all frames
-+     * contexts used must be created on the same device.
-+     */
-+    AVBufferRef *hw_device_ctx;
-+
-+    /**
-+     * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated
-+     * decoding (if active).
-+     * - encoding: unused
-+     * - decoding: Set by user (either before avcodec_open2(), or in the
-+     *             AVCodecContext.get_format callback)
-+     */
-+    int hwaccel_flags;
-+
-+    /**
-+     * Video decoding only. Certain video codecs support cropping, meaning that
-+     * only a sub-rectangle of the decoded frame is intended for display.  This
-+     * option controls how cropping is handled by libavcodec.
-+     *
-+     * When set to 1 (the default), libavcodec will apply cropping internally.
-+     * I.e. it will modify the output frame width/height fields and offset the
-+     * data pointers (only by as much as possible while preserving alignment, or
-+     * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that
-+     * the frames output by the decoder refer only to the cropped area. The
-+     * crop_* fields of the output frames will be zero.
-+     *
-+     * When set to 0, the width/height fields of the output frames will be set
-+     * to the coded dimensions and the crop_* fields will describe the cropping
-+     * rectangle. Applying the cropping is left to the caller.
-+     *
-+     * @warning When hardware acceleration with opaque output frames is used,
-+     * libavcodec is unable to apply cropping from the top/left border.
-+     *
-+     * @note when this option is set to zero, the width/height fields of the
-+     * AVCodecContext and output AVFrames have different meanings. The codec
-+     * context fields store display dimensions (with the coded dimensions in
-+     * coded_width/height), while the frame fields store the coded dimensions
-+     * (with the display dimensions being determined by the crop_* fields).
-+     */
-+    int apply_cropping;
-+
-+    /*
-+     * Video decoding only.  Sets the number of extra hardware frames which
-+     * the decoder will allocate for use by the caller.  This must be set
-+     * before avcodec_open2() is called.
-+     *
-+     * Some hardware decoders require all frames that they will use for
-+     * output to be defined in advance before decoding starts.  For such
-+     * decoders, the hardware frame pool must therefore be of a fixed size.
-+     * The extra frames set here are on top of any number that the decoder
-+     * needs internally in order to operate normally (for example, frames
-+     * used as reference pictures).
-+     */
-+    int extra_hw_frames;
-+} AVCodecContext;
-+
-+#if FF_API_CODEC_GET_SET
-+/**
-+ * Accessors for some AVCodecContext fields. These used to be provided for ABI
-+ * compatibility, and do not need to be used anymore.
-+ */
-+attribute_deprecated
-+AVRational av_codec_get_pkt_timebase         (const AVCodecContext *avctx);
-+attribute_deprecated
-+void       av_codec_set_pkt_timebase         (AVCodecContext *avctx, AVRational val);
-+
-+attribute_deprecated
-+const AVCodecDescriptor *av_codec_get_codec_descriptor(const AVCodecContext *avctx);
-+attribute_deprecated
-+void                     av_codec_set_codec_descriptor(AVCodecContext *avctx, const AVCodecDescriptor *desc);
-+
-+attribute_deprecated
-+unsigned av_codec_get_codec_properties(const AVCodecContext *avctx);
-+
-+#if FF_API_LOWRES
-+attribute_deprecated
-+int  av_codec_get_lowres(const AVCodecContext *avctx);
-+attribute_deprecated
-+void av_codec_set_lowres(AVCodecContext *avctx, int val);
-+#endif
-+
-+attribute_deprecated
-+int  av_codec_get_seek_preroll(const AVCodecContext *avctx);
-+attribute_deprecated
-+void av_codec_set_seek_preroll(AVCodecContext *avctx, int val);
-+
-+attribute_deprecated
-+uint16_t *av_codec_get_chroma_intra_matrix(const AVCodecContext *avctx);
-+attribute_deprecated
-+void av_codec_set_chroma_intra_matrix(AVCodecContext *avctx, uint16_t *val);
-+#endif
-+
-+/**
-+ * AVProfile.
-+ */
-+typedef struct AVProfile {
-+    int profile;
-+    const char *name; ///< short name for the profile
-+} AVProfile;
-+
-+enum {
-+    /**
-+     * The codec supports this format via the hw_device_ctx interface.
-+     *
-+     * When selecting this format, AVCodecContext.hw_device_ctx should
-+     * have been set to a device of the specified type before calling
-+     * avcodec_open2().
-+     */
-+    AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX = 0x01,
-+    /**
-+     * The codec supports this format via the hw_frames_ctx interface.
-+     *
-+     * When selecting this format for a decoder,
-+     * AVCodecContext.hw_frames_ctx should be set to a suitable frames
-+     * context inside the get_format() callback.  The frames context
-+     * must have been created on a device of the specified type.
-+     */
-+    AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX = 0x02,
-+    /**
-+     * The codec supports this format by some internal method.
-+     *
-+     * This format can be selected without any additional configuration -
-+     * no device or frames context is required.
-+     */
-+    AV_CODEC_HW_CONFIG_METHOD_INTERNAL      = 0x04,
-+    /**
-+     * The codec supports this format by some ad-hoc method.
-+     *
-+     * Additional settings and/or function calls are required.  See the
-+     * codec-specific documentation for details.  (Methods requiring
-+     * this sort of configuration are deprecated and others should be
-+     * used in preference.)
-+     */
-+    AV_CODEC_HW_CONFIG_METHOD_AD_HOC        = 0x08,
-+};
-+
-+typedef struct AVCodecHWConfig {
-+    /**
-+     * A hardware pixel format which the codec can use.
-+     */
-+    enum AVPixelFormat pix_fmt;
-+    /**
-+     * Bit set of AV_CODEC_HW_CONFIG_METHOD_* flags, describing the possible
-+     * setup methods which can be used with this configuration.
-+     */
-+    int methods;
-+    /**
-+     * The device type associated with the configuration.
-+     *
-+     * Must be set for AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX and
-+     * AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX, otherwise unused.
-+     */
-+    enum AVHWDeviceType device_type;
-+} AVCodecHWConfig;
-+
-+typedef struct AVCodecDefault AVCodecDefault;
-+
-+struct AVSubtitle;
-+
-+/**
-+ * AVCodec.
-+ */
-+typedef struct AVCodec {
-+    /**
-+     * Name of the codec implementation.
-+     * The name is globally unique among encoders and among decoders (but an
-+     * encoder and a decoder can share the same name).
-+     * This is the primary way to find a codec from the user perspective.
-+     */
-+    const char *name;
-+    /**
-+     * Descriptive name for the codec, meant to be more human readable than name.
-+     * You should use the NULL_IF_CONFIG_SMALL() macro to define it.
-+     */
-+    const char *long_name;
-+    enum AVMediaType type;
-+    enum AVCodecID id;
-+    /**
-+     * Codec capabilities.
-+     * see AV_CODEC_CAP_*
-+     */
-+    int capabilities;
-+    const AVRational *supported_framerates; ///< array of supported framerates, or NULL if any, array is terminated by {0,0}
-+    const enum AVPixelFormat *pix_fmts;     ///< array of supported pixel formats, or NULL if unknown, array is terminated by -1
-+    const int *supported_samplerates;       ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0
-+    const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1
-+    const uint64_t *channel_layouts;         ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
-+    uint8_t max_lowres;                     ///< maximum value for lowres supported by the decoder
-+    const AVClass *priv_class;              ///< AVClass for the private context
-+    const AVProfile *profiles;              ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN}
-+
-+    /**
-+     * Group name of the codec implementation.
-+     * This is a short symbolic name of the wrapper backing this codec. A
-+     * wrapper uses some kind of external implementation for the codec, such
-+     * as an external library, or a codec implementation provided by the OS or
-+     * the hardware.
-+     * If this field is NULL, this is a builtin, libavcodec native codec.
-+     * If non-NULL, this will be the suffix in AVCodec.name in most cases
-+     * (usually AVCodec.name will be of the form "<codec_name>_<wrapper_name>").
-+     */
-+    const char *wrapper_name;
-+
-+    /*****************************************************************
-+     * No fields below this line are part of the public API. They
-+     * may not be used outside of libavcodec and can be changed and
-+     * removed at will.
-+     * New public fields should be added right above.
-+     *****************************************************************
-+     */
-+    int priv_data_size;
-+    struct AVCodec *next;
-+    /**
-+     * @name Frame-level threading support functions
-+     * @{
-+     */
-+    /**
-+     * If defined, called on thread contexts when they are created.
-+     * If the codec allocates writable tables in init(), re-allocate them here.
-+     * priv_data will be set to a copy of the original.
-+     */
-+    int (*init_thread_copy)(AVCodecContext *);
-+    /**
-+     * Copy necessary context variables from a previous thread context to the current one.
-+     * If not defined, the next thread will start automatically; otherwise, the codec
-+     * must call ff_thread_finish_setup().
-+     *
-+     * dst and src will (rarely) point to the same context, in which case memcpy should be skipped.
-+     */
-+    int (*update_thread_context)(AVCodecContext *dst, const AVCodecContext *src);
-+    /** @} */
-+
-+    /**
-+     * Private codec-specific defaults.
-+     */
-+    const AVCodecDefault *defaults;
-+
-+    /**
-+     * Initialize codec static data, called from avcodec_register().
-+     *
-+     * This is not intended for time consuming operations as it is
-+     * run for every codec regardless of that codec being used.
-+     */
-+    void (*init_static_data)(struct AVCodec *codec);
-+
-+    int (*init)(AVCodecContext *);
-+    int (*encode_sub)(AVCodecContext *, uint8_t *buf, int buf_size,
-+                      const struct AVSubtitle *sub);
-+    /**
-+     * Encode data to an AVPacket.
-+     *
-+     * @param      avctx          codec context
-+     * @param      avpkt          output AVPacket (may contain a user-provided buffer)
-+     * @param[in]  frame          AVFrame containing the raw data to be encoded
-+     * @param[out] got_packet_ptr encoder sets to 0 or 1 to indicate that a
-+     *                            non-empty packet was returned in avpkt.
-+     * @return 0 on success, negative error code on failure
-+     */
-+    int (*encode2)(AVCodecContext *avctx, AVPacket *avpkt, const AVFrame *frame,
-+                   int *got_packet_ptr);
-+    int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
-+    int (*close)(AVCodecContext *);
-+    /**
-+     * Encode API with decoupled packet/frame dataflow. The API is the
-+     * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except
-+     * that:
-+     * - never called if the codec is closed or the wrong type,
-+     * - if AV_CODEC_CAP_DELAY is not set, drain frames are never sent,
-+     * - only one drain frame is ever passed down,
-+     */
-+    int (*send_frame)(AVCodecContext *avctx, const AVFrame *frame);
-+    int (*receive_packet)(AVCodecContext *avctx, AVPacket *avpkt);
-+
-+    /**
-+     * Decode API with decoupled packet/frame dataflow. This function is called
-+     * to get one output frame. It should call ff_decode_get_packet() to obtain
-+     * input data.
-+     */
-+    int (*receive_frame)(AVCodecContext *avctx, AVFrame *frame);
-+    /**
-+     * Flush buffers.
-+     * Will be called when seeking
-+     */
-+    void (*flush)(AVCodecContext *);
-+    /**
-+     * Internal codec capabilities.
-+     * See FF_CODEC_CAP_* in internal.h
-+     */
-+    int caps_internal;
-+
-+    /**
-+     * Decoding only, a comma-separated list of bitstream filters to apply to
-+     * packets before decoding.
-+     */
-+    const char *bsfs;
-+
-+    /**
-+     * Array of pointers to hardware configurations supported by the codec,
-+     * or NULL if no hardware supported.  The array is terminated by a NULL
-+     * pointer.
-+     *
-+     * The user can only access this field via avcodec_get_hw_config().
-+     */
-+    const struct AVCodecHWConfigInternal **hw_configs;
-+} AVCodec;
-+
-+#if FF_API_CODEC_GET_SET
-+attribute_deprecated
-+int av_codec_get_max_lowres(const AVCodec *codec);
-+#endif
-+
-+struct MpegEncContext;
-+
-+/**
-+ * Retrieve supported hardware configurations for a codec.
-+ *
-+ * Values of index from zero to some maximum return the indexed configuration
-+ * descriptor; all other values return NULL.  If the codec does not support
-+ * any hardware configurations then it will always return NULL.
-+ */
-+const AVCodecHWConfig *avcodec_get_hw_config(const AVCodec *codec, int index);
-+
-+/**
-+ * @defgroup lavc_hwaccel AVHWAccel
-+ *
-+ * @note  Nothing in this structure should be accessed by the user.  At some
-+ *        point in future it will not be externally visible at all.
-+ *
-+ * @{
-+ */
-+typedef struct AVHWAccel {
-+    /**
-+     * Name of the hardware accelerated codec.
-+     * The name is globally unique among encoders and among decoders (but an
-+     * encoder and a decoder can share the same name).
-+     */
-+    const char *name;
-+
-+    /**
-+     * Type of codec implemented by the hardware accelerator.
-+     *
-+     * See AVMEDIA_TYPE_xxx
-+     */
-+    enum AVMediaType type;
-+
-+    /**
-+     * Codec implemented by the hardware accelerator.
-+     *
-+     * See AV_CODEC_ID_xxx
-+     */
-+    enum AVCodecID id;
-+
-+    /**
-+     * Supported pixel format.
-+     *
-+     * Only hardware accelerated formats are supported here.
-+     */
-+    enum AVPixelFormat pix_fmt;
-+
-+    /**
-+     * Hardware accelerated codec capabilities.
-+     * see AV_HWACCEL_CODEC_CAP_*
-+     */
-+    int capabilities;
-+
-+    /*****************************************************************
-+     * No fields below this line are part of the public API. They
-+     * may not be used outside of libavcodec and can be changed and
-+     * removed at will.
-+     * New public fields should be added right above.
-+     *****************************************************************
-+     */
-+
-+    /**
-+     * Allocate a custom buffer
-+     */
-+    int (*alloc_frame)(AVCodecContext *avctx, AVFrame *frame);
-+
-+    /**
-+     * Called at the beginning of each frame or field picture.
-+     *
-+     * Meaningful frame information (codec specific) is guaranteed to
-+     * be parsed at this point. This function is mandatory.
-+     *
-+     * Note that buf can be NULL along with buf_size set to 0.
-+     * Otherwise, this means the whole frame is available at this point.
-+     *
-+     * @param avctx the codec context
-+     * @param buf the frame data buffer base
-+     * @param buf_size the size of the frame in bytes
-+     * @return zero if successful, a negative value otherwise
-+     */
-+    int (*start_frame)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
-+
-+    /**
-+     * Callback for parameter data (SPS/PPS/VPS etc).
-+     *
-+     * Useful for hardware decoders which keep persistent state about the
-+     * video parameters, and need to receive any changes to update that state.
-+     *
-+     * @param avctx the codec context
-+     * @param type the nal unit type
-+     * @param buf the nal unit data buffer
-+     * @param buf_size the size of the nal unit in bytes
-+     * @return zero if successful, a negative value otherwise
-+     */
-+    int (*decode_params)(AVCodecContext *avctx, int type, const uint8_t *buf, uint32_t buf_size);
-+
-+    /**
-+     * Callback for each slice.
-+     *
-+     * Meaningful slice information (codec specific) is guaranteed to
-+     * be parsed at this point. This function is mandatory.
-+     * The only exception is XvMC, that works on MB level.
-+     *
-+     * @param avctx the codec context
-+     * @param buf the slice data buffer base
-+     * @param buf_size the size of the slice in bytes
-+     * @return zero if successful, a negative value otherwise
-+     */
-+    int (*decode_slice)(AVCodecContext *avctx, const uint8_t *buf, uint32_t buf_size);
-+
-+    /**
-+     * Called at the end of each frame or field picture.
-+     *
-+     * The whole picture is parsed at this point and can now be sent
-+     * to the hardware accelerator. This function is mandatory.
-+     *
-+     * @param avctx the codec context
-+     * @return zero if successful, a negative value otherwise
-+     */
-+    int (*end_frame)(AVCodecContext *avctx);
-+
-+    /**
-+     * Size of per-frame hardware accelerator private data.
-+     *
-+     * Private data is allocated with av_mallocz() before
-+     * AVCodecContext.get_buffer() and deallocated after
-+     * AVCodecContext.release_buffer().
-+     */
-+    int frame_priv_data_size;
-+
-+    /**
-+     * Called for every Macroblock in a slice.
-+     *
-+     * XvMC uses it to replace the ff_mpv_reconstruct_mb().
-+     * Instead of decoding to raw picture, MB parameters are
-+     * stored in an array provided by the video driver.
-+     *
-+     * @param s the mpeg context
-+     */
-+    void (*decode_mb)(struct MpegEncContext *s);
-+
-+    /**
-+     * Initialize the hwaccel private data.
-+     *
-+     * This will be called from ff_get_format(), after hwaccel and
-+     * hwaccel_context are set and the hwaccel private data in AVCodecInternal
-+     * is allocated.
-+     */
-+    int (*init)(AVCodecContext *avctx);
-+
-+    /**
-+     * Uninitialize the hwaccel private data.
-+     *
-+     * This will be called from get_format() or avcodec_close(), after hwaccel
-+     * and hwaccel_context are already uninitialized.
-+     */
-+    int (*uninit)(AVCodecContext *avctx);
-+
-+    /**
-+     * Size of the private data to allocate in
-+     * AVCodecInternal.hwaccel_priv_data.
-+     */
-+    int priv_data_size;
-+
-+    /**
-+     * Internal hwaccel capabilities.
-+     */
-+    int caps_internal;
-+
-+    /**
-+     * Fill the given hw_frames context with current codec parameters. Called
-+     * from get_format. Refer to avcodec_get_hw_frames_parameters() for
-+     * details.
-+     *
-+     * This CAN be called before AVHWAccel.init is called, and you must assume
-+     * that avctx->hwaccel_priv_data is invalid.
-+     */
-+    int (*frame_params)(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx);
-+} AVHWAccel;
-+
-+/**
-+ * HWAccel is experimental and is thus avoided in favor of non experimental
-+ * codecs
-+ */
-+#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200
-+
-+/**
-+ * Hardware acceleration should be used for decoding even if the codec level
-+ * used is unknown or higher than the maximum supported level reported by the
-+ * hardware driver.
-+ *
-+ * It's generally a good idea to pass this flag unless you have a specific
-+ * reason not to, as hardware tends to under-report supported levels.
-+ */
-+#define AV_HWACCEL_FLAG_IGNORE_LEVEL (1 << 0)
-+
-+/**
-+ * Hardware acceleration can output YUV pixel formats with a different chroma
-+ * sampling than 4:2:0 and/or other than 8 bits per component.
-+ */
-+#define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1)
-+
-+/**
-+ * Hardware acceleration should still be attempted for decoding when the
-+ * codec profile does not match the reported capabilities of the hardware.
-+ *
-+ * For example, this can be used to try to decode baseline profile H.264
-+ * streams in hardware - it will often succeed, because many streams marked
-+ * as baseline profile actually conform to constrained baseline profile.
-+ *
-+ * @warning If the stream is actually not supported then the behaviour is
-+ *          undefined, and may include returning entirely incorrect output
-+ *          while indicating success.
-+ */
-+#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2)
-+
-+/**
-+ * @}
-+ */
-+
-+#if FF_API_AVPICTURE
-+/**
-+ * @defgroup lavc_picture AVPicture
-+ *
-+ * Functions for working with AVPicture
-+ * @{
-+ */
-+
-+/**
-+ * Picture data structure.
-+ *
-+ * Up to four components can be stored into it, the last component is
-+ * alpha.
-+ * @deprecated use AVFrame or imgutils functions instead
-+ */
-+typedef struct AVPicture {
-+    attribute_deprecated
-+    uint8_t *data[AV_NUM_DATA_POINTERS];    ///< pointers to the image data planes
-+    attribute_deprecated
-+    int linesize[AV_NUM_DATA_POINTERS];     ///< number of bytes per line
-+} AVPicture;
-+
-+/**
-+ * @}
-+ */
-+#endif
-+
-+enum AVSubtitleType {
-+    SUBTITLE_NONE,
-+
-+    SUBTITLE_BITMAP,                ///< A bitmap, pict will be set
-+
-+    /**
-+     * Plain text, the text field must be set by the decoder and is
-+     * authoritative. ass and pict fields may contain approximations.
-+     */
-+    SUBTITLE_TEXT,
-+
-+    /**
-+     * Formatted text, the ass field must be set by the decoder and is
-+     * authoritative. pict and text fields may contain approximations.
-+     */
-+    SUBTITLE_ASS,
-+};
-+
-+#define AV_SUBTITLE_FLAG_FORCED 0x00000001
-+
-+typedef struct AVSubtitleRect {
-+    int x;         ///< top left corner  of pict, undefined when pict is not set
-+    int y;         ///< top left corner  of pict, undefined when pict is not set
-+    int w;         ///< width            of pict, undefined when pict is not set
-+    int h;         ///< height           of pict, undefined when pict is not set
-+    int nb_colors; ///< number of colors in pict, undefined when pict is not set
-+
-+#if FF_API_AVPICTURE
-+    /**
-+     * @deprecated unused
-+     */
-+    attribute_deprecated
-+    AVPicture pict;
-+#endif
-+    /**
-+     * data+linesize for the bitmap of this subtitle.
-+     * Can be set for text/ass as well once they are rendered.
-+     */
-+    uint8_t *data[4];
-+    int linesize[4];
-+
-+    enum AVSubtitleType type;
-+
-+    char *text;                     ///< 0 terminated plain UTF-8 text
-+
-+    /**
-+     * 0 terminated ASS/SSA compatible event line.
-+     * The presentation of this is unaffected by the other values in this
-+     * struct.
-+     */
-+    char *ass;
-+
-+    int flags;
-+} AVSubtitleRect;
-+
-+typedef struct AVSubtitle {
-+    uint16_t format; /* 0 = graphics */
-+    uint32_t start_display_time; /* relative to packet pts, in ms */
-+    uint32_t end_display_time; /* relative to packet pts, in ms */
-+    unsigned num_rects;
-+    AVSubtitleRect **rects;
-+    int64_t pts;    ///< Same as packet pts, in AV_TIME_BASE
-+} AVSubtitle;
-+
-+/**
-+ * This struct describes the properties of an encoded stream.
-+ *
-+ * sizeof(AVCodecParameters) is not a part of the public ABI, this struct must
-+ * be allocated with avcodec_parameters_alloc() and freed with
-+ * avcodec_parameters_free().
-+ */
-+typedef struct AVCodecParameters {
-+    /**
-+     * General type of the encoded data.
-+     */
-+    enum AVMediaType codec_type;
-+    /**
-+     * Specific type of the encoded data (the codec used).
-+     */
-+    enum AVCodecID   codec_id;
-+    /**
-+     * Additional information about the codec (corresponds to the AVI FOURCC).
-+     */
-+    uint32_t         codec_tag;
-+
-+    /**
-+     * Extra binary data needed for initializing the decoder, codec-dependent.
-+     *
-+     * Must be allocated with av_malloc() and will be freed by
-+     * avcodec_parameters_free(). The allocated size of extradata must be at
-+     * least extradata_size + AV_INPUT_BUFFER_PADDING_SIZE, with the padding
-+     * bytes zeroed.
-+     */
-+    uint8_t *extradata;
-+    /**
-+     * Size of the extradata content in bytes.
-+     */
-+    int      extradata_size;
-+
-+    /**
-+     * - video: the pixel format, the value corresponds to enum AVPixelFormat.
-+     * - audio: the sample format, the value corresponds to enum AVSampleFormat.
-+     */
-+    int format;
-+
-+    /**
-+     * The average bitrate of the encoded data (in bits per second).
-+     */
-+    int64_t bit_rate;
-+
-+    /**
-+     * The number of bits per sample in the codedwords.
-+     *
-+     * This is basically the bitrate per sample. It is mandatory for a bunch of
-+     * formats to actually decode them. It's the number of bits for one sample in
-+     * the actual coded bitstream.
-+     *
-+     * This could be for example 4 for ADPCM
-+     * For PCM formats this matches bits_per_raw_sample
-+     * Can be 0
-+     */
-+    int bits_per_coded_sample;
-+
-+    /**
-+     * This is the number of valid bits in each output sample. If the
-+     * sample format has more bits, the least significant bits are additional
-+     * padding bits, which are always 0. Use right shifts to reduce the sample
-+     * to its actual size. For example, audio formats with 24 bit samples will
-+     * have bits_per_raw_sample set to 24, and format set to AV_SAMPLE_FMT_S32.
-+     * To get the original sample use "(int32_t)sample >> 8"."
-+     *
-+     * For ADPCM this might be 12 or 16 or similar
-+     * Can be 0
-+     */
-+    int bits_per_raw_sample;
-+
-+    /**
-+     * Codec-specific bitstream restrictions that the stream conforms to.
-+     */
-+    int profile;
-+    int level;
-+
-+    /**
-+     * Video only. The dimensions of the video frame in pixels.
-+     */
-+    int width;
-+    int height;
-+
-+    /**
-+     * Video only. The aspect ratio (width / height) which a single pixel
-+     * should have when displayed.
-+     *
-+     * When the aspect ratio is unknown / undefined, the numerator should be
-+     * set to 0 (the denominator may have any value).
-+     */
-+    AVRational sample_aspect_ratio;
-+
-+    /**
-+     * Video only. The order of the fields in interlaced video.
-+     */
-+    enum AVFieldOrder                  field_order;
-+
-+    /**
-+     * Video only. Additional colorspace characteristics.
-+     */
-+    enum AVColorRange                  color_range;
-+    enum AVColorPrimaries              color_primaries;
-+    enum AVColorTransferCharacteristic color_trc;
-+    enum AVColorSpace                  color_space;
-+    enum AVChromaLocation              chroma_location;
-+
-+    /**
-+     * Video only. Number of delayed frames.
-+     */
-+    int video_delay;
-+
-+    /**
-+     * Audio only. The channel layout bitmask. May be 0 if the channel layout is
-+     * unknown or unspecified, otherwise the number of bits set must be equal to
-+     * the channels field.
-+     */
-+    uint64_t channel_layout;
-+    /**
-+     * Audio only. The number of audio channels.
-+     */
-+    int      channels;
-+    /**
-+     * Audio only. The number of audio samples per second.
-+     */
-+    int      sample_rate;
-+    /**
-+     * Audio only. The number of bytes per coded audio frame, required by some
-+     * formats.
-+     *
-+     * Corresponds to nBlockAlign in WAVEFORMATEX.
-+     */
-+    int      block_align;
-+    /**
-+     * Audio only. Audio frame size, if known. Required by some formats to be static.
-+     */
-+    int      frame_size;
-+
-+    /**
-+     * Audio only. The amount of padding (in samples) inserted by the encoder at
-+     * the beginning of the audio. I.e. this number of leading decoded samples
-+     * must be discarded by the caller to get the original audio without leading
-+     * padding.
-+     */
-+    int initial_padding;
-+    /**
-+     * Audio only. The amount of padding (in samples) appended by the encoder to
-+     * the end of the audio. I.e. this number of decoded samples must be
-+     * discarded by the caller from the end of the stream to get the original
-+     * audio without any trailing padding.
-+     */
-+    int trailing_padding;
-+    /**
-+     * Audio only. Number of samples to skip after a discontinuity.
-+     */
-+    int seek_preroll;
-+} AVCodecParameters;
-+
-+/**
-+ * Iterate over all registered codecs.
-+ *
-+ * @param opaque a pointer where libavcodec will store the iteration state. Must
-+ *               point to NULL to start the iteration.
-+ *
-+ * @return the next registered codec or NULL when the iteration is
-+ *         finished
-+ */
-+const AVCodec *av_codec_iterate(void **opaque);
-+
-+#if FF_API_NEXT
-+/**
-+ * If c is NULL, returns the first registered codec,
-+ * if c is non-NULL, returns the next registered codec after c,
-+ * or NULL if c is the last one.
-+ */
-+attribute_deprecated
-+AVCodec *av_codec_next(const AVCodec *c);
-+#endif
-+
-+/**
-+ * Return the LIBAVCODEC_VERSION_INT constant.
-+ */
-+unsigned avcodec_version(void);
-+
-+/**
-+ * Return the libavcodec build-time configuration.
-+ */
-+const char *avcodec_configuration(void);
-+
-+/**
-+ * Return the libavcodec license.
-+ */
-+const char *avcodec_license(void);
-+
-+#if FF_API_NEXT
-+/**
-+ * Register the codec codec and initialize libavcodec.
-+ *
-+ * @warning either this function or avcodec_register_all() must be called
-+ * before any other libavcodec functions.
-+ *
-+ * @see avcodec_register_all()
-+ */
-+attribute_deprecated
-+void avcodec_register(AVCodec *codec);
-+
-+/**
-+ * Register all the codecs, parsers and bitstream filters which were enabled at
-+ * configuration time. If you do not call this function you can select exactly
-+ * which formats you want to support, by using the individual registration
-+ * functions.
-+ *
-+ * @see avcodec_register
-+ * @see av_register_codec_parser
-+ * @see av_register_bitstream_filter
-+ */
-+attribute_deprecated
-+void avcodec_register_all(void);
-+#endif
-+
-+/**
-+ * Allocate an AVCodecContext and set its fields to default values. The
-+ * resulting struct should be freed with avcodec_free_context().
-+ *
-+ * @param codec if non-NULL, allocate private data and initialize defaults
-+ *              for the given codec. It is illegal to then call avcodec_open2()
-+ *              with a different codec.
-+ *              If NULL, then the codec-specific defaults won't be initialized,
-+ *              which may result in suboptimal default settings (this is
-+ *              important mainly for encoders, e.g. libx264).
-+ *
-+ * @return An AVCodecContext filled with default values or NULL on failure.
-+ */
-+AVCodecContext *avcodec_alloc_context3(const AVCodec *codec);
-+
-+/**
-+ * Free the codec context and everything associated with it and write NULL to
-+ * the provided pointer.
-+ */
-+void avcodec_free_context(AVCodecContext **avctx);
-+
-+#if FF_API_GET_CONTEXT_DEFAULTS
-+/**
-+ * @deprecated This function should not be used, as closing and opening a codec
-+ * context multiple time is not supported. A new codec context should be
-+ * allocated for each new use.
-+ */
-+int avcodec_get_context_defaults3(AVCodecContext *s, const AVCodec *codec);
-+#endif
-+
-+/**
-+ * Get the AVClass for AVCodecContext. It can be used in combination with
-+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
-+ *
-+ * @see av_opt_find().
-+ */
-+const AVClass *avcodec_get_class(void);
-+
-+#if FF_API_COPY_CONTEXT
-+/**
-+ * Get the AVClass for AVFrame. It can be used in combination with
-+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
-+ *
-+ * @see av_opt_find().
-+ */
-+const AVClass *avcodec_get_frame_class(void);
-+
-+/**
-+ * Get the AVClass for AVSubtitleRect. It can be used in combination with
-+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
-+ *
-+ * @see av_opt_find().
-+ */
-+const AVClass *avcodec_get_subtitle_rect_class(void);
-+
-+/**
-+ * Copy the settings of the source AVCodecContext into the destination
-+ * AVCodecContext. The resulting destination codec context will be
-+ * unopened, i.e. you are required to call avcodec_open2() before you
-+ * can use this AVCodecContext to decode/encode video/audio data.
-+ *
-+ * @param dest target codec context, should be initialized with
-+ *             avcodec_alloc_context3(NULL), but otherwise uninitialized
-+ * @param src source codec context
-+ * @return AVERROR() on error (e.g. memory allocation error), 0 on success
-+ *
-+ * @deprecated The semantics of this function are ill-defined and it should not
-+ * be used. If you need to transfer the stream parameters from one codec context
-+ * to another, use an intermediate AVCodecParameters instance and the
-+ * avcodec_parameters_from_context() / avcodec_parameters_to_context()
-+ * functions.
-+ */
-+attribute_deprecated
-+int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src);
-+#endif
-+
-+/**
-+ * Allocate a new AVCodecParameters and set its fields to default values
-+ * (unknown/invalid/0). The returned struct must be freed with
-+ * avcodec_parameters_free().
-+ */
-+AVCodecParameters *avcodec_parameters_alloc(void);
-+
-+/**
-+ * Free an AVCodecParameters instance and everything associated with it and
-+ * write NULL to the supplied pointer.
-+ */
-+void avcodec_parameters_free(AVCodecParameters **par);
-+
-+/**
-+ * Copy the contents of src to dst. Any allocated fields in dst are freed and
-+ * replaced with newly allocated duplicates of the corresponding fields in src.
-+ *
-+ * @return >= 0 on success, a negative AVERROR code on failure.
-+ */
-+int avcodec_parameters_copy(AVCodecParameters *dst, const AVCodecParameters *src);
-+
-+/**
-+ * Fill the parameters struct based on the values from the supplied codec
-+ * context. Any allocated fields in par are freed and replaced with duplicates
-+ * of the corresponding fields in codec.
-+ *
-+ * @return >= 0 on success, a negative AVERROR code on failure
-+ */
-+int avcodec_parameters_from_context(AVCodecParameters *par,
-+                                    const AVCodecContext *codec);
-+
-+/**
-+ * Fill the codec context based on the values from the supplied codec
-+ * parameters. Any allocated fields in codec that have a corresponding field in
-+ * par are freed and replaced with duplicates of the corresponding field in par.
-+ * Fields in codec that do not have a counterpart in par are not touched.
-+ *
-+ * @return >= 0 on success, a negative AVERROR code on failure.
-+ */
-+int avcodec_parameters_to_context(AVCodecContext *codec,
-+                                  const AVCodecParameters *par);
-+
-+/**
-+ * Initialize the AVCodecContext to use the given AVCodec. Prior to using this
-+ * function the context has to be allocated with avcodec_alloc_context3().
-+ *
-+ * The functions avcodec_find_decoder_by_name(), avcodec_find_encoder_by_name(),
-+ * avcodec_find_decoder() and avcodec_find_encoder() provide an easy way for
-+ * retrieving a codec.
-+ *
-+ * @warning This function is not thread safe!
-+ *
-+ * @note Always call this function before using decoding routines (such as
-+ * @ref avcodec_receive_frame()).
-+ *
-+ * @code
-+ * avcodec_register_all();
-+ * av_dict_set(&opts, "b", "2.5M", 0);
-+ * codec = avcodec_find_decoder(AV_CODEC_ID_H264);
-+ * if (!codec)
-+ *     exit(1);
-+ *
-+ * context = avcodec_alloc_context3(codec);
-+ *
-+ * if (avcodec_open2(context, codec, opts) < 0)
-+ *     exit(1);
-+ * @endcode
-+ *
-+ * @param avctx The context to initialize.
-+ * @param codec The codec to open this context for. If a non-NULL codec has been
-+ *              previously passed to avcodec_alloc_context3() or
-+ *              for this context, then this parameter MUST be either NULL or
-+ *              equal to the previously passed codec.
-+ * @param options A dictionary filled with AVCodecContext and codec-private options.
-+ *                On return this object will be filled with options that were not found.
-+ *
-+ * @return zero on success, a negative value on error
-+ * @see avcodec_alloc_context3(), avcodec_find_decoder(), avcodec_find_encoder(),
-+ *      av_dict_set(), av_opt_find().
-+ */
-+int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options);
-+
-+/**
-+ * Close a given AVCodecContext and free all the data associated with it
-+ * (but not the AVCodecContext itself).
-+ *
-+ * Calling this function on an AVCodecContext that hasn't been opened will free
-+ * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL
-+ * codec. Subsequent calls will do nothing.
-+ *
-+ * @note Do not use this function. Use avcodec_free_context() to destroy a
-+ * codec context (either open or closed). Opening and closing a codec context
-+ * multiple times is not supported anymore -- use multiple codec contexts
-+ * instead.
-+ */
-+int avcodec_close(AVCodecContext *avctx);
-+
-+/**
-+ * Free all allocated data in the given subtitle struct.
-+ *
-+ * @param sub AVSubtitle to free.
-+ */
-+void avsubtitle_free(AVSubtitle *sub);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @addtogroup lavc_packet
-+ * @{
-+ */
-+
-+/**
-+ * Allocate an AVPacket and set its fields to default values.  The resulting
-+ * struct must be freed using av_packet_free().
-+ *
-+ * @return An AVPacket filled with default values or NULL on failure.
-+ *
-+ * @note this only allocates the AVPacket itself, not the data buffers. Those
-+ * must be allocated through other means such as av_new_packet.
-+ *
-+ * @see av_new_packet
-+ */
-+AVPacket *av_packet_alloc(void);
-+
-+/**
-+ * Create a new packet that references the same data as src.
-+ *
-+ * This is a shortcut for av_packet_alloc()+av_packet_ref().
-+ *
-+ * @return newly created AVPacket on success, NULL on error.
-+ *
-+ * @see av_packet_alloc
-+ * @see av_packet_ref
-+ */
-+AVPacket *av_packet_clone(const AVPacket *src);
-+
-+/**
-+ * Free the packet, if the packet is reference counted, it will be
-+ * unreferenced first.
-+ *
-+ * @param pkt packet to be freed. The pointer will be set to NULL.
-+ * @note passing NULL is a no-op.
-+ */
-+void av_packet_free(AVPacket **pkt);
-+
-+/**
-+ * Initialize optional fields of a packet with default values.
-+ *
-+ * Note, this does not touch the data and size members, which have to be
-+ * initialized separately.
-+ *
-+ * @param pkt packet
-+ */
-+void av_init_packet(AVPacket *pkt);
-+
-+/**
-+ * Allocate the payload of a packet and initialize its fields with
-+ * default values.
-+ *
-+ * @param pkt packet
-+ * @param size wanted payload size
-+ * @return 0 if OK, AVERROR_xxx otherwise
-+ */
-+int av_new_packet(AVPacket *pkt, int size);
-+
-+/**
-+ * Reduce packet size, correctly zeroing padding
-+ *
-+ * @param pkt packet
-+ * @param size new size
-+ */
-+void av_shrink_packet(AVPacket *pkt, int size);
-+
-+/**
-+ * Increase packet size, correctly zeroing padding
-+ *
-+ * @param pkt packet
-+ * @param grow_by number of bytes by which to increase the size of the packet
-+ */
-+int av_grow_packet(AVPacket *pkt, int grow_by);
-+
-+/**
-+ * Initialize a reference-counted packet from av_malloc()ed data.
-+ *
-+ * @param pkt packet to be initialized. This function will set the data, size,
-+ *        buf and destruct fields, all others are left untouched.
-+ * @param data Data allocated by av_malloc() to be used as packet data. If this
-+ *        function returns successfully, the data is owned by the underlying AVBuffer.
-+ *        The caller may not access the data through other means.
-+ * @param size size of data in bytes, without the padding. I.e. the full buffer
-+ *        size is assumed to be size + AV_INPUT_BUFFER_PADDING_SIZE.
-+ *
-+ * @return 0 on success, a negative AVERROR on error
-+ */
-+int av_packet_from_data(AVPacket *pkt, uint8_t *data, int size);
-+
-+#if FF_API_AVPACKET_OLD_API
-+/**
-+ * @warning This is a hack - the packet memory allocation stuff is broken. The
-+ * packet is allocated if it was not really allocated.
-+ *
-+ * @deprecated Use av_packet_ref or av_packet_make_refcounted
-+ */
-+attribute_deprecated
-+int av_dup_packet(AVPacket *pkt);
-+/**
-+ * Copy packet, including contents
-+ *
-+ * @return 0 on success, negative AVERROR on fail
-+ *
-+ * @deprecated Use av_packet_ref
-+ */
-+attribute_deprecated
-+int av_copy_packet(AVPacket *dst, const AVPacket *src);
-+
-+/**
-+ * Copy packet side data
-+ *
-+ * @return 0 on success, negative AVERROR on fail
-+ *
-+ * @deprecated Use av_packet_copy_props
-+ */
-+attribute_deprecated
-+int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src);
-+
-+/**
-+ * Free a packet.
-+ *
-+ * @deprecated Use av_packet_unref
-+ *
-+ * @param pkt packet to free
-+ */
-+attribute_deprecated
-+void av_free_packet(AVPacket *pkt);
-+#endif
-+/**
-+ * Allocate new information of a packet.
-+ *
-+ * @param pkt packet
-+ * @param type side information type
-+ * @param size side information size
-+ * @return pointer to fresh allocated data or NULL otherwise
-+ */
-+uint8_t* av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
-+                                 int size);
-+
-+/**
-+ * Wrap an existing array as a packet side data.
-+ *
-+ * @param pkt packet
-+ * @param type side information type
-+ * @param data the side data array. It must be allocated with the av_malloc()
-+ *             family of functions. The ownership of the data is transferred to
-+ *             pkt.
-+ * @param size side information size
-+ * @return a non-negative number on success, a negative AVERROR code on
-+ *         failure. On failure, the packet is unchanged and the data remains
-+ *         owned by the caller.
-+ */
-+int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
-+                            uint8_t *data, size_t size);
-+
-+/**
-+ * Shrink the already allocated side data buffer
-+ *
-+ * @param pkt packet
-+ * @param type side information type
-+ * @param size new side information size
-+ * @return 0 on success, < 0 on failure
-+ */
-+int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type,
-+                               int size);
-+
-+/**
-+ * Get side information from packet.
-+ *
-+ * @param pkt packet
-+ * @param type desired side information type
-+ * @param size pointer for side information size to store (optional)
-+ * @return pointer to data if present or NULL otherwise
-+ */
-+uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type,
-+                                 int *size);
-+
-+#if FF_API_MERGE_SD_API
-+attribute_deprecated
-+int av_packet_merge_side_data(AVPacket *pkt);
-+
-+attribute_deprecated
-+int av_packet_split_side_data(AVPacket *pkt);
-+#endif
-+
-+const char *av_packet_side_data_name(enum AVPacketSideDataType type);
-+
-+/**
-+ * Pack a dictionary for use in side_data.
-+ *
-+ * @param dict The dictionary to pack.
-+ * @param size pointer to store the size of the returned data
-+ * @return pointer to data if successful, NULL otherwise
-+ */
-+uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size);
-+/**
-+ * Unpack a dictionary from side_data.
-+ *
-+ * @param data data from side_data
-+ * @param size size of the data
-+ * @param dict the metadata storage dictionary
-+ * @return 0 on success, < 0 on failure
-+ */
-+int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **dict);
-+
-+
-+/**
-+ * Convenience function to free all the side data stored.
-+ * All the other fields stay untouched.
-+ *
-+ * @param pkt packet
-+ */
-+void av_packet_free_side_data(AVPacket *pkt);
-+
-+/**
-+ * Setup a new reference to the data described by a given packet
-+ *
-+ * If src is reference-counted, setup dst as a new reference to the
-+ * buffer in src. Otherwise allocate a new buffer in dst and copy the
-+ * data from src into it.
-+ *
-+ * All the other fields are copied from src.
-+ *
-+ * @see av_packet_unref
-+ *
-+ * @param dst Destination packet
-+ * @param src Source packet
-+ *
-+ * @return 0 on success, a negative AVERROR on error.
-+ */
-+int av_packet_ref(AVPacket *dst, const AVPacket *src);
-+
-+/**
-+ * Wipe the packet.
-+ *
-+ * Unreference the buffer referenced by the packet and reset the
-+ * remaining packet fields to their default values.
-+ *
-+ * @param pkt The packet to be unreferenced.
-+ */
-+void av_packet_unref(AVPacket *pkt);
-+
-+/**
-+ * Move every field in src to dst and reset src.
-+ *
-+ * @see av_packet_unref
-+ *
-+ * @param src Source packet, will be reset
-+ * @param dst Destination packet
-+ */
-+void av_packet_move_ref(AVPacket *dst, AVPacket *src);
-+
-+/**
-+ * Copy only "properties" fields from src to dst.
-+ *
-+ * Properties for the purpose of this function are all the fields
-+ * beside those related to the packet data (buf, data, size)
-+ *
-+ * @param dst Destination packet
-+ * @param src Source packet
-+ *
-+ * @return 0 on success AVERROR on failure.
-+ */
-+int av_packet_copy_props(AVPacket *dst, const AVPacket *src);
-+
-+/**
-+ * Ensure the data described by a given packet is reference counted.
-+ *
-+ * @note This function does not ensure that the reference will be writable.
-+ *       Use av_packet_make_writable instead for that purpose.
-+ *
-+ * @see av_packet_ref
-+ * @see av_packet_make_writable
-+ *
-+ * @param pkt packet whose data should be made reference counted.
-+ *
-+ * @return 0 on success, a negative AVERROR on error. On failure, the
-+ *         packet is unchanged.
-+ */
-+int av_packet_make_refcounted(AVPacket *pkt);
-+
-+/**
-+ * Create a writable reference for the data described by a given packet,
-+ * avoiding data copy if possible.
-+ *
-+ * @param pkt Packet whose data should be made writable.
-+ *
-+ * @return 0 on success, a negative AVERROR on failure. On failure, the
-+ *         packet is unchanged.
-+ */
-+int av_packet_make_writable(AVPacket *pkt);
-+
-+/**
-+ * Convert valid timing fields (timestamps / durations) in a packet from one
-+ * timebase to another. Timestamps with unknown values (AV_NOPTS_VALUE) will be
-+ * ignored.
-+ *
-+ * @param pkt packet on which the conversion will be performed
-+ * @param tb_src source timebase, in which the timing fields in pkt are
-+ *               expressed
-+ * @param tb_dst destination timebase, to which the timing fields will be
-+ *               converted
-+ */
-+void av_packet_rescale_ts(AVPacket *pkt, AVRational tb_src, AVRational tb_dst);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @addtogroup lavc_decoding
-+ * @{
-+ */
-+
-+/**
-+ * Find a registered decoder with a matching codec ID.
-+ *
-+ * @param id AVCodecID of the requested decoder
-+ * @return A decoder if one was found, NULL otherwise.
-+ */
-+AVCodec *avcodec_find_decoder(enum AVCodecID id);
-+
-+/**
-+ * Find a registered decoder with the specified name.
-+ *
-+ * @param name name of the requested decoder
-+ * @return A decoder if one was found, NULL otherwise.
-+ */
-+AVCodec *avcodec_find_decoder_by_name(const char *name);
-+
-+/**
-+ * The default callback for AVCodecContext.get_buffer2(). It is made public so
-+ * it can be called by custom get_buffer2() implementations for decoders without
-+ * AV_CODEC_CAP_DR1 set.
-+ */
-+int avcodec_default_get_buffer2(AVCodecContext *s, AVFrame *frame, int flags);
-+
-+/**
-+ * Modify width and height values so that they will result in a memory
-+ * buffer that is acceptable for the codec if you do not use any horizontal
-+ * padding.
-+ *
-+ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
-+ */
-+void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height);
-+
-+/**
-+ * Modify width and height values so that they will result in a memory
-+ * buffer that is acceptable for the codec if you also ensure that all
-+ * line sizes are a multiple of the respective linesize_align[i].
-+ *
-+ * May only be used if a codec with AV_CODEC_CAP_DR1 has been opened.
-+ */
-+void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
-+                               int linesize_align[AV_NUM_DATA_POINTERS]);
-+
-+/**
-+ * Converts AVChromaLocation to swscale x/y chroma position.
-+ *
-+ * The positions represent the chroma (0,0) position in a coordinates system
-+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256
-+ *
-+ * @param xpos  horizontal chroma sample position
-+ * @param ypos  vertical   chroma sample position
-+ */
-+int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos);
-+
-+/**
-+ * Converts swscale x/y chroma position to AVChromaLocation.
-+ *
-+ * The positions represent the chroma (0,0) position in a coordinates system
-+ * with luma (0,0) representing the origin and luma(1,1) representing 256,256
-+ *
-+ * @param xpos  horizontal chroma sample position
-+ * @param ypos  vertical   chroma sample position
-+ */
-+enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos);
-+
-+/**
-+ * Decode the audio frame of size avpkt->size from avpkt->data into frame.
-+ *
-+ * Some decoders may support multiple frames in a single AVPacket. Such
-+ * decoders would then just decode the first frame and the return value would be
-+ * less than the packet size. In this case, avcodec_decode_audio4 has to be
-+ * called again with an AVPacket containing the remaining data in order to
-+ * decode the second frame, etc...  Even if no frames are returned, the packet
-+ * needs to be fed to the decoder with remaining data until it is completely
-+ * consumed or an error occurs.
-+ *
-+ * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input
-+ * and output. This means that for some packets they will not immediately
-+ * produce decoded output and need to be flushed at the end of decoding to get
-+ * all the decoded data. Flushing is done by calling this function with packets
-+ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
-+ * returning samples. It is safe to flush even those decoders that are not
-+ * marked with AV_CODEC_CAP_DELAY, then no samples will be returned.
-+ *
-+ * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
-+ *          larger than the actual read bytes because some optimized bitstream
-+ *          readers read 32 or 64 bits at once and could read over the end.
-+ *
-+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
-+ * before packets may be fed to the decoder.
-+ *
-+ * @param      avctx the codec context
-+ * @param[out] frame The AVFrame in which to store decoded audio samples.
-+ *                   The decoder will allocate a buffer for the decoded frame by
-+ *                   calling the AVCodecContext.get_buffer2() callback.
-+ *                   When AVCodecContext.refcounted_frames is set to 1, the frame is
-+ *                   reference counted and the returned reference belongs to the
-+ *                   caller. The caller must release the frame using av_frame_unref()
-+ *                   when the frame is no longer needed. The caller may safely write
-+ *                   to the frame if av_frame_is_writable() returns 1.
-+ *                   When AVCodecContext.refcounted_frames is set to 0, the returned
-+ *                   reference belongs to the decoder and is valid only until the
-+ *                   next call to this function or until closing or flushing the
-+ *                   decoder. The caller may not write to it.
-+ * @param[out] got_frame_ptr Zero if no frame could be decoded, otherwise it is
-+ *                           non-zero. Note that this field being set to zero
-+ *                           does not mean that an error has occurred. For
-+ *                           decoders with AV_CODEC_CAP_DELAY set, no given decode
-+ *                           call is guaranteed to produce a frame.
-+ * @param[in]  avpkt The input AVPacket containing the input buffer.
-+ *                   At least avpkt->data and avpkt->size should be set. Some
-+ *                   decoders might also require additional fields to be set.
-+ * @return A negative error code is returned if an error occurred during
-+ *         decoding, otherwise the number of bytes consumed from the input
-+ *         AVPacket is returned.
-+ *
-+* @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
-+ */
-+attribute_deprecated
-+int avcodec_decode_audio4(AVCodecContext *avctx, AVFrame *frame,
-+                          int *got_frame_ptr, const AVPacket *avpkt);
-+
-+/**
-+ * Decode the video frame of size avpkt->size from avpkt->data into picture.
-+ * Some decoders may support multiple frames in a single AVPacket, such
-+ * decoders would then just decode the first frame.
-+ *
-+ * @warning The input buffer must be AV_INPUT_BUFFER_PADDING_SIZE larger than
-+ * the actual read bytes because some optimized bitstream readers read 32 or 64
-+ * bits at once and could read over the end.
-+ *
-+ * @warning The end of the input buffer buf should be set to 0 to ensure that
-+ * no overreading happens for damaged MPEG streams.
-+ *
-+ * @note Codecs which have the AV_CODEC_CAP_DELAY capability set have a delay
-+ * between input and output, these need to be fed with avpkt->data=NULL,
-+ * avpkt->size=0 at the end to return the remaining frames.
-+ *
-+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
-+ * before packets may be fed to the decoder.
-+ *
-+ * @param avctx the codec context
-+ * @param[out] picture The AVFrame in which the decoded video frame will be stored.
-+ *             Use av_frame_alloc() to get an AVFrame. The codec will
-+ *             allocate memory for the actual bitmap by calling the
-+ *             AVCodecContext.get_buffer2() callback.
-+ *             When AVCodecContext.refcounted_frames is set to 1, the frame is
-+ *             reference counted and the returned reference belongs to the
-+ *             caller. The caller must release the frame using av_frame_unref()
-+ *             when the frame is no longer needed. The caller may safely write
-+ *             to the frame if av_frame_is_writable() returns 1.
-+ *             When AVCodecContext.refcounted_frames is set to 0, the returned
-+ *             reference belongs to the decoder and is valid only until the
-+ *             next call to this function or until closing or flushing the
-+ *             decoder. The caller may not write to it.
-+ *
-+ * @param[in] avpkt The input AVPacket containing the input buffer.
-+ *            You can create such packet with av_init_packet() and by then setting
-+ *            data and size, some decoders might in addition need other fields like
-+ *            flags&AV_PKT_FLAG_KEY. All decoders are designed to use the least
-+ *            fields possible.
-+ * @param[in,out] got_picture_ptr Zero if no frame could be decompressed, otherwise, it is nonzero.
-+ * @return On error a negative value is returned, otherwise the number of bytes
-+ * used or zero if no frame could be decompressed.
-+ *
-+ * @deprecated Use avcodec_send_packet() and avcodec_receive_frame().
-+ */
-+attribute_deprecated
-+int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture,
-+                         int *got_picture_ptr,
-+                         const AVPacket *avpkt);
-+
-+/**
-+ * Decode a subtitle message.
-+ * Return a negative value on error, otherwise return the number of bytes used.
-+ * If no subtitle could be decompressed, got_sub_ptr is zero.
-+ * Otherwise, the subtitle is stored in *sub.
-+ * Note that AV_CODEC_CAP_DR1 is not available for subtitle codecs. This is for
-+ * simplicity, because the performance difference is expect to be negligible
-+ * and reusing a get_buffer written for video codecs would probably perform badly
-+ * due to a potentially very different allocation pattern.
-+ *
-+ * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input
-+ * and output. This means that for some packets they will not immediately
-+ * produce decoded output and need to be flushed at the end of decoding to get
-+ * all the decoded data. Flushing is done by calling this function with packets
-+ * with avpkt->data set to NULL and avpkt->size set to 0 until it stops
-+ * returning subtitles. It is safe to flush even those decoders that are not
-+ * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned.
-+ *
-+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
-+ * before packets may be fed to the decoder.
-+ *
-+ * @param avctx the codec context
-+ * @param[out] sub The Preallocated AVSubtitle in which the decoded subtitle will be stored,
-+ *                 must be freed with avsubtitle_free if *got_sub_ptr is set.
-+ * @param[in,out] got_sub_ptr Zero if no subtitle could be decompressed, otherwise, it is nonzero.
-+ * @param[in] avpkt The input AVPacket containing the input buffer.
-+ */
-+int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
-+                            int *got_sub_ptr,
-+                            AVPacket *avpkt);
-+
-+/**
-+ * Supply raw packet data as input to a decoder.
-+ *
-+ * Internally, this call will copy relevant AVCodecContext fields, which can
-+ * influence decoding per-packet, and apply them when the packet is actually
-+ * decoded. (For example AVCodecContext.skip_frame, which might direct the
-+ * decoder to drop the frame contained by the packet sent with this function.)
-+ *
-+ * @warning The input buffer, avpkt->data must be AV_INPUT_BUFFER_PADDING_SIZE
-+ *          larger than the actual read bytes because some optimized bitstream
-+ *          readers read 32 or 64 bits at once and could read over the end.
-+ *
-+ * @warning Do not mix this API with the legacy API (like avcodec_decode_video2())
-+ *          on the same AVCodecContext. It will return unexpected results now
-+ *          or in future libavcodec versions.
-+ *
-+ * @note The AVCodecContext MUST have been opened with @ref avcodec_open2()
-+ *       before packets may be fed to the decoder.
-+ *
-+ * @param avctx codec context
-+ * @param[in] avpkt The input AVPacket. Usually, this will be a single video
-+ *                  frame, or several complete audio frames.
-+ *                  Ownership of the packet remains with the caller, and the
-+ *                  decoder will not write to the packet. The decoder may create
-+ *                  a reference to the packet data (or copy it if the packet is
-+ *                  not reference-counted).
-+ *                  Unlike with older APIs, the packet is always fully consumed,
-+ *                  and if it contains multiple frames (e.g. some audio codecs),
-+ *                  will require you to call avcodec_receive_frame() multiple
-+ *                  times afterwards before you can send a new packet.
-+ *                  It can be NULL (or an AVPacket with data set to NULL and
-+ *                  size set to 0); in this case, it is considered a flush
-+ *                  packet, which signals the end of the stream. Sending the
-+ *                  first flush packet will return success. Subsequent ones are
-+ *                  unnecessary and will return AVERROR_EOF. If the decoder
-+ *                  still has frames buffered, it will return them after sending
-+ *                  a flush packet.
-+ *
-+ * @return 0 on success, otherwise negative error code:
-+ *      AVERROR(EAGAIN):   input is not accepted in the current state - user
-+ *                         must read output with avcodec_receive_frame() (once
-+ *                         all output is read, the packet should be resent, and
-+ *                         the call will not fail with EAGAIN).
-+ *      AVERROR_EOF:       the decoder has been flushed, and no new packets can
-+ *                         be sent to it (also returned if more than 1 flush
-+ *                         packet is sent)
-+ *      AVERROR(EINVAL):   codec not opened, it is an encoder, or requires flush
-+ *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
-+ *      other errors: legitimate decoding errors
-+ */
-+int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt);
-+
-+/**
-+ * Return decoded output data from a decoder.
-+ *
-+ * @param avctx codec context
-+ * @param frame This will be set to a reference-counted video or audio
-+ *              frame (depending on the decoder type) allocated by the
-+ *              decoder. Note that the function will always call
-+ *              av_frame_unref(frame) before doing anything else.
-+ *
-+ * @return
-+ *      0:                 success, a frame was returned
-+ *      AVERROR(EAGAIN):   output is not available in this state - user must try
-+ *                         to send new input
-+ *      AVERROR_EOF:       the decoder has been fully flushed, and there will be
-+ *                         no more output frames
-+ *      AVERROR(EINVAL):   codec not opened, or it is an encoder
-+ *      other negative values: legitimate decoding errors
-+ */
-+int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame);
-+
-+/**
-+ * Supply a raw video or audio frame to the encoder. Use avcodec_receive_packet()
-+ * to retrieve buffered output packets.
-+ *
-+ * @param avctx     codec context
-+ * @param[in] frame AVFrame containing the raw audio or video frame to be encoded.
-+ *                  Ownership of the frame remains with the caller, and the
-+ *                  encoder will not write to the frame. The encoder may create
-+ *                  a reference to the frame data (or copy it if the frame is
-+ *                  not reference-counted).
-+ *                  It can be NULL, in which case it is considered a flush
-+ *                  packet.  This signals the end of the stream. If the encoder
-+ *                  still has packets buffered, it will return them after this
-+ *                  call. Once flushing mode has been entered, additional flush
-+ *                  packets are ignored, and sending frames will return
-+ *                  AVERROR_EOF.
-+ *
-+ *                  For audio:
-+ *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
-+ *                  can have any number of samples.
-+ *                  If it is not set, frame->nb_samples must be equal to
-+ *                  avctx->frame_size for all frames except the last.
-+ *                  The final frame may be smaller than avctx->frame_size.
-+ * @return 0 on success, otherwise negative error code:
-+ *      AVERROR(EAGAIN):   input is not accepted in the current state - user
-+ *                         must read output with avcodec_receive_packet() (once
-+ *                         all output is read, the packet should be resent, and
-+ *                         the call will not fail with EAGAIN).
-+ *      AVERROR_EOF:       the encoder has been flushed, and no new frames can
-+ *                         be sent to it
-+ *      AVERROR(EINVAL):   codec not opened, refcounted_frames not set, it is a
-+ *                         decoder, or requires flush
-+ *      AVERROR(ENOMEM):   failed to add packet to internal queue, or similar
-+ *      other errors: legitimate decoding errors
-+ */
-+int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame);
-+
-+/**
-+ * Read encoded data from the encoder.
-+ *
-+ * @param avctx codec context
-+ * @param avpkt This will be set to a reference-counted packet allocated by the
-+ *              encoder. Note that the function will always call
-+ *              av_frame_unref(frame) before doing anything else.
-+ * @return 0 on success, otherwise negative error code:
-+ *      AVERROR(EAGAIN):   output is not available in the current state - user
-+ *                         must try to send input
-+ *      AVERROR_EOF:       the encoder has been fully flushed, and there will be
-+ *                         no more output packets
-+ *      AVERROR(EINVAL):   codec not opened, or it is an encoder
-+ *      other errors: legitimate decoding errors
-+ */
-+int avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt);
-+
-+/**
-+ * Create and return a AVHWFramesContext with values adequate for hardware
-+ * decoding. This is meant to get called from the get_format callback, and is
-+ * a helper for preparing a AVHWFramesContext for AVCodecContext.hw_frames_ctx.
-+ * This API is for decoding with certain hardware acceleration modes/APIs only.
-+ *
-+ * The returned AVHWFramesContext is not initialized. The caller must do this
-+ * with av_hwframe_ctx_init().
-+ *
-+ * Calling this function is not a requirement, but makes it simpler to avoid
-+ * codec or hardware API specific details when manually allocating frames.
-+ *
-+ * Alternatively to this, an API user can set AVCodecContext.hw_device_ctx,
-+ * which sets up AVCodecContext.hw_frames_ctx fully automatically, and makes
-+ * it unnecessary to call this function or having to care about
-+ * AVHWFramesContext initialization at all.
-+ *
-+ * There are a number of requirements for calling this function:
-+ *
-+ * - It must be called from get_format with the same avctx parameter that was
-+ *   passed to get_format. Calling it outside of get_format is not allowed, and
-+ *   can trigger undefined behavior.
-+ * - The function is not always supported (see description of return values).
-+ *   Even if this function returns successfully, hwaccel initialization could
-+ *   fail later. (The degree to which implementations check whether the stream
-+ *   is actually supported varies. Some do this check only after the user's
-+ *   get_format callback returns.)
-+ * - The hw_pix_fmt must be one of the choices suggested by get_format. If the
-+ *   user decides to use a AVHWFramesContext prepared with this API function,
-+ *   the user must return the same hw_pix_fmt from get_format.
-+ * - The device_ref passed to this function must support the given hw_pix_fmt.
-+ * - After calling this API function, it is the user's responsibility to
-+ *   initialize the AVHWFramesContext (returned by the out_frames_ref parameter),
-+ *   and to set AVCodecContext.hw_frames_ctx to it. If done, this must be done
-+ *   before returning from get_format (this is implied by the normal
-+ *   AVCodecContext.hw_frames_ctx API rules).
-+ * - The AVHWFramesContext parameters may change every time time get_format is
-+ *   called. Also, AVCodecContext.hw_frames_ctx is reset before get_format. So
-+ *   you are inherently required to go through this process again on every
-+ *   get_format call.
-+ * - It is perfectly possible to call this function without actually using
-+ *   the resulting AVHWFramesContext. One use-case might be trying to reuse a
-+ *   previously initialized AVHWFramesContext, and calling this API function
-+ *   only to test whether the required frame parameters have changed.
-+ * - Fields that use dynamically allocated values of any kind must not be set
-+ *   by the user unless setting them is explicitly allowed by the documentation.
-+ *   If the user sets AVHWFramesContext.free and AVHWFramesContext.user_opaque,
-+ *   the new free callback must call the potentially set previous free callback.
-+ *   This API call may set any dynamically allocated fields, including the free
-+ *   callback.
-+ *
-+ * The function will set at least the following fields on AVHWFramesContext
-+ * (potentially more, depending on hwaccel API):
-+ *
-+ * - All fields set by av_hwframe_ctx_alloc().
-+ * - Set the format field to hw_pix_fmt.
-+ * - Set the sw_format field to the most suited and most versatile format. (An
-+ *   implication is that this will prefer generic formats over opaque formats
-+ *   with arbitrary restrictions, if possible.)
-+ * - Set the width/height fields to the coded frame size, rounded up to the
-+ *   API-specific minimum alignment.
-+ * - Only _if_ the hwaccel requires a pre-allocated pool: set the initial_pool_size
-+ *   field to the number of maximum reference surfaces possible with the codec,
-+ *   plus 1 surface for the user to work (meaning the user can safely reference
-+ *   at most 1 decoded surface at a time), plus additional buffering introduced
-+ *   by frame threading. If the hwaccel does not require pre-allocation, the
-+ *   field is left to 0, and the decoder will allocate new surfaces on demand
-+ *   during decoding.
-+ * - Possibly AVHWFramesContext.hwctx fields, depending on the underlying
-+ *   hardware API.
-+ *
-+ * Essentially, out_frames_ref returns the same as av_hwframe_ctx_alloc(), but
-+ * with basic frame parameters set.
-+ *
-+ * The function is stateless, and does not change the AVCodecContext or the
-+ * device_ref AVHWDeviceContext.
-+ *
-+ * @param avctx The context which is currently calling get_format, and which
-+ *              implicitly contains all state needed for filling the returned
-+ *              AVHWFramesContext properly.
-+ * @param device_ref A reference to the AVHWDeviceContext describing the device
-+ *                   which will be used by the hardware decoder.
-+ * @param hw_pix_fmt The hwaccel format you are going to return from get_format.
-+ * @param out_frames_ref On success, set to a reference to an _uninitialized_
-+ *                       AVHWFramesContext, created from the given device_ref.
-+ *                       Fields will be set to values required for decoding.
-+ *                       Not changed if an error is returned.
-+ * @return zero on success, a negative value on error. The following error codes
-+ *         have special semantics:
-+ *      AVERROR(ENOENT): the decoder does not support this functionality. Setup
-+ *                       is always manual, or it is a decoder which does not
-+ *                       support setting AVCodecContext.hw_frames_ctx at all,
-+ *                       or it is a software format.
-+ *      AVERROR(EINVAL): it is known that hardware decoding is not supported for
-+ *                       this configuration, or the device_ref is not supported
-+ *                       for the hwaccel referenced by hw_pix_fmt.
-+ */
-+int avcodec_get_hw_frames_parameters(AVCodecContext *avctx,
-+                                     AVBufferRef *device_ref,
-+                                     enum AVPixelFormat hw_pix_fmt,
-+                                     AVBufferRef **out_frames_ref);
-+
-+
-+
-+/**
-+ * @defgroup lavc_parsing Frame parsing
-+ * @{
-+ */
-+
-+enum AVPictureStructure {
-+    AV_PICTURE_STRUCTURE_UNKNOWN,      //< unknown
-+    AV_PICTURE_STRUCTURE_TOP_FIELD,    //< coded as top field
-+    AV_PICTURE_STRUCTURE_BOTTOM_FIELD, //< coded as bottom field
-+    AV_PICTURE_STRUCTURE_FRAME,        //< coded as frame
-+};
-+
-+typedef struct AVCodecParserContext {
-+    void *priv_data;
-+    struct AVCodecParser *parser;
-+    int64_t frame_offset; /* offset of the current frame */
-+    int64_t cur_offset; /* current offset
-+                           (incremented by each av_parser_parse()) */
-+    int64_t next_frame_offset; /* offset of the next frame */
-+    /* video info */
-+    int pict_type; /* XXX: Put it back in AVCodecContext. */
-+    /**
-+     * This field is used for proper frame duration computation in lavf.
-+     * It signals, how much longer the frame duration of the current frame
-+     * is compared to normal frame duration.
-+     *
-+     * frame_duration = (1 + repeat_pict) * time_base
-+     *
-+     * It is used by codecs like H.264 to display telecined material.
-+     */
-+    int repeat_pict; /* XXX: Put it back in AVCodecContext. */
-+    int64_t pts;     /* pts of the current frame */
-+    int64_t dts;     /* dts of the current frame */
-+
-+    /* private data */
-+    int64_t last_pts;
-+    int64_t last_dts;
-+    int fetch_timestamp;
-+
-+#define AV_PARSER_PTS_NB 4
-+    int cur_frame_start_index;
-+    int64_t cur_frame_offset[AV_PARSER_PTS_NB];
-+    int64_t cur_frame_pts[AV_PARSER_PTS_NB];
-+    int64_t cur_frame_dts[AV_PARSER_PTS_NB];
-+
-+    int flags;
-+#define PARSER_FLAG_COMPLETE_FRAMES           0x0001
-+#define PARSER_FLAG_ONCE                      0x0002
-+/// Set if the parser has a valid file offset
-+#define PARSER_FLAG_FETCHED_OFFSET            0x0004
-+#define PARSER_FLAG_USE_CODEC_TS              0x1000
-+
-+    int64_t offset;      ///< byte offset from starting packet start
-+    int64_t cur_frame_end[AV_PARSER_PTS_NB];
-+
-+    /**
-+     * Set by parser to 1 for key frames and 0 for non-key frames.
-+     * It is initialized to -1, so if the parser doesn't set this flag,
-+     * old-style fallback using AV_PICTURE_TYPE_I picture type as key frames
-+     * will be used.
-+     */
-+    int key_frame;
-+
-+#if FF_API_CONVERGENCE_DURATION
-+    /**
-+     * @deprecated unused
-+     */
-+    attribute_deprecated
-+    int64_t convergence_duration;
-+#endif
-+
-+    // Timestamp generation support:
-+    /**
-+     * Synchronization point for start of timestamp generation.
-+     *
-+     * Set to >0 for sync point, 0 for no sync point and <0 for undefined
-+     * (default).
-+     *
-+     * For example, this corresponds to presence of H.264 buffering period
-+     * SEI message.
-+     */
-+    int dts_sync_point;
-+
-+    /**
-+     * Offset of the current timestamp against last timestamp sync point in
-+     * units of AVCodecContext.time_base.
-+     *
-+     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
-+     * contain a valid timestamp offset.
-+     *
-+     * Note that the timestamp of sync point has usually a nonzero
-+     * dts_ref_dts_delta, which refers to the previous sync point. Offset of
-+     * the next frame after timestamp sync point will be usually 1.
-+     *
-+     * For example, this corresponds to H.264 cpb_removal_delay.
-+     */
-+    int dts_ref_dts_delta;
-+
-+    /**
-+     * Presentation delay of current frame in units of AVCodecContext.time_base.
-+     *
-+     * Set to INT_MIN when dts_sync_point unused. Otherwise, it must
-+     * contain valid non-negative timestamp delta (presentation time of a frame
-+     * must not lie in the past).
-+     *
-+     * This delay represents the difference between decoding and presentation
-+     * time of the frame.
-+     *
-+     * For example, this corresponds to H.264 dpb_output_delay.
-+     */
-+    int pts_dts_delta;
-+
-+    /**
-+     * Position of the packet in file.
-+     *
-+     * Analogous to cur_frame_pts/dts
-+     */
-+    int64_t cur_frame_pos[AV_PARSER_PTS_NB];
-+
-+    /**
-+     * Byte position of currently parsed frame in stream.
-+     */
-+    int64_t pos;
-+
-+    /**
-+     * Previous frame byte position.
-+     */
-+    int64_t last_pos;
-+
-+    /**
-+     * Duration of the current frame.
-+     * For audio, this is in units of 1 / AVCodecContext.sample_rate.
-+     * For all other types, this is in units of AVCodecContext.time_base.
-+     */
-+    int duration;
-+
-+    enum AVFieldOrder field_order;
-+
-+    /**
-+     * Indicate whether a picture is coded as a frame, top field or bottom field.
-+     *
-+     * For example, H.264 field_pic_flag equal to 0 corresponds to
-+     * AV_PICTURE_STRUCTURE_FRAME. An H.264 picture with field_pic_flag
-+     * equal to 1 and bottom_field_flag equal to 0 corresponds to
-+     * AV_PICTURE_STRUCTURE_TOP_FIELD.
-+     */
-+    enum AVPictureStructure picture_structure;
-+
-+    /**
-+     * Picture number incremented in presentation or output order.
-+     * This field may be reinitialized at the first picture of a new sequence.
-+     *
-+     * For example, this corresponds to H.264 PicOrderCnt.
-+     */
-+    int output_picture_number;
-+
-+    /**
-+     * Dimensions of the decoded video intended for presentation.
-+     */
-+    int width;
-+    int height;
-+
-+    /**
-+     * Dimensions of the coded video.
-+     */
-+    int coded_width;
-+    int coded_height;
-+
-+    /**
-+     * The format of the coded data, corresponds to enum AVPixelFormat for video
-+     * and for enum AVSampleFormat for audio.
-+     *
-+     * Note that a decoder can have considerable freedom in how exactly it
-+     * decodes the data, so the format reported here might be different from the
-+     * one returned by a decoder.
-+     */
-+    int format;
-+} AVCodecParserContext;
-+
-+typedef struct AVCodecParser {
-+    int codec_ids[5]; /* several codec IDs are permitted */
-+    int priv_data_size;
-+    int (*parser_init)(AVCodecParserContext *s);
-+    /* This callback never returns an error, a negative value means that
-+     * the frame start was in a previous packet. */
-+    int (*parser_parse)(AVCodecParserContext *s,
-+                        AVCodecContext *avctx,
-+                        const uint8_t **poutbuf, int *poutbuf_size,
-+                        const uint8_t *buf, int buf_size);
-+    void (*parser_close)(AVCodecParserContext *s);
-+    int (*split)(AVCodecContext *avctx, const uint8_t *buf, int buf_size);
-+    struct AVCodecParser *next;
-+} AVCodecParser;
-+
-+/**
-+ * Iterate over all registered codec parsers.
-+ *
-+ * @param opaque a pointer where libavcodec will store the iteration state. Must
-+ *               point to NULL to start the iteration.
-+ *
-+ * @return the next registered codec parser or NULL when the iteration is
-+ *         finished
-+ */
-+const AVCodecParser *av_parser_iterate(void **opaque);
-+
-+attribute_deprecated
-+AVCodecParser *av_parser_next(const AVCodecParser *c);
-+
-+attribute_deprecated
-+void av_register_codec_parser(AVCodecParser *parser);
-+AVCodecParserContext *av_parser_init(int codec_id);
-+
-+/**
-+ * Parse a packet.
-+ *
-+ * @param s             parser context.
-+ * @param avctx         codec context.
-+ * @param poutbuf       set to pointer to parsed buffer or NULL if not yet finished.
-+ * @param poutbuf_size  set to size of parsed buffer or zero if not yet finished.
-+ * @param buf           input buffer.
-+ * @param buf_size      buffer size in bytes without the padding. I.e. the full buffer
-+                        size is assumed to be buf_size + AV_INPUT_BUFFER_PADDING_SIZE.
-+                        To signal EOF, this should be 0 (so that the last frame
-+                        can be output).
-+ * @param pts           input presentation timestamp.
-+ * @param dts           input decoding timestamp.
-+ * @param pos           input byte position in stream.
-+ * @return the number of bytes of the input bitstream used.
-+ *
-+ * Example:
-+ * @code
-+ *   while(in_len){
-+ *       len = av_parser_parse2(myparser, AVCodecContext, &data, &size,
-+ *                                        in_data, in_len,
-+ *                                        pts, dts, pos);
-+ *       in_data += len;
-+ *       in_len  -= len;
-+ *
-+ *       if(size)
-+ *          decode_frame(data, size);
-+ *   }
-+ * @endcode
-+ */
-+int av_parser_parse2(AVCodecParserContext *s,
-+                     AVCodecContext *avctx,
-+                     uint8_t **poutbuf, int *poutbuf_size,
-+                     const uint8_t *buf, int buf_size,
-+                     int64_t pts, int64_t dts,
-+                     int64_t pos);
-+
-+/**
-+ * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
-+ * @deprecated use AVBitStreamFilter
-+ */
-+int av_parser_change(AVCodecParserContext *s,
-+                     AVCodecContext *avctx,
-+                     uint8_t **poutbuf, int *poutbuf_size,
-+                     const uint8_t *buf, int buf_size, int keyframe);
-+void av_parser_close(AVCodecParserContext *s);
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+
-+/**
-+ * @addtogroup lavc_encoding
-+ * @{
-+ */
-+
-+/**
-+ * Find a registered encoder with a matching codec ID.
-+ *
-+ * @param id AVCodecID of the requested encoder
-+ * @return An encoder if one was found, NULL otherwise.
-+ */
-+AVCodec *avcodec_find_encoder(enum AVCodecID id);
-+
-+/**
-+ * Find a registered encoder with the specified name.
-+ *
-+ * @param name name of the requested encoder
-+ * @return An encoder if one was found, NULL otherwise.
-+ */
-+AVCodec *avcodec_find_encoder_by_name(const char *name);
-+
-+/**
-+ * Encode a frame of audio.
-+ *
-+ * Takes input samples from frame and writes the next output packet, if
-+ * available, to avpkt. The output packet does not necessarily contain data for
-+ * the most recent frame, as encoders can delay, split, and combine input frames
-+ * internally as needed.
-+ *
-+ * @param avctx     codec context
-+ * @param avpkt     output AVPacket.
-+ *                  The user can supply an output buffer by setting
-+ *                  avpkt->data and avpkt->size prior to calling the
-+ *                  function, but if the size of the user-provided data is not
-+ *                  large enough, encoding will fail. If avpkt->data and
-+ *                  avpkt->size are set, avpkt->destruct must also be set. All
-+ *                  other AVPacket fields will be reset by the encoder using
-+ *                  av_init_packet(). If avpkt->data is NULL, the encoder will
-+ *                  allocate it. The encoder will set avpkt->size to the size
-+ *                  of the output packet.
-+ *
-+ *                  If this function fails or produces no output, avpkt will be
-+ *                  freed using av_packet_unref().
-+ * @param[in] frame AVFrame containing the raw audio data to be encoded.
-+ *                  May be NULL when flushing an encoder that has the
-+ *                  AV_CODEC_CAP_DELAY capability set.
-+ *                  If AV_CODEC_CAP_VARIABLE_FRAME_SIZE is set, then each frame
-+ *                  can have any number of samples.
-+ *                  If it is not set, frame->nb_samples must be equal to
-+ *                  avctx->frame_size for all frames except the last.
-+ *                  The final frame may be smaller than avctx->frame_size.
-+ * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
-+ *                            output packet is non-empty, and to 0 if it is
-+ *                            empty. If the function returns an error, the
-+ *                            packet can be assumed to be invalid, and the
-+ *                            value of got_packet_ptr is undefined and should
-+ *                            not be used.
-+ * @return          0 on success, negative error code on failure
-+ *
-+ * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
-+ */
-+attribute_deprecated
-+int avcodec_encode_audio2(AVCodecContext *avctx, AVPacket *avpkt,
-+                          const AVFrame *frame, int *got_packet_ptr);
-+
-+/**
-+ * Encode a frame of video.
-+ *
-+ * Takes input raw video data from frame and writes the next output packet, if
-+ * available, to avpkt. The output packet does not necessarily contain data for
-+ * the most recent frame, as encoders can delay and reorder input frames
-+ * internally as needed.
-+ *
-+ * @param avctx     codec context
-+ * @param avpkt     output AVPacket.
-+ *                  The user can supply an output buffer by setting
-+ *                  avpkt->data and avpkt->size prior to calling the
-+ *                  function, but if the size of the user-provided data is not
-+ *                  large enough, encoding will fail. All other AVPacket fields
-+ *                  will be reset by the encoder using av_init_packet(). If
-+ *                  avpkt->data is NULL, the encoder will allocate it.
-+ *                  The encoder will set avpkt->size to the size of the
-+ *                  output packet. The returned data (if any) belongs to the
-+ *                  caller, he is responsible for freeing it.
-+ *
-+ *                  If this function fails or produces no output, avpkt will be
-+ *                  freed using av_packet_unref().
-+ * @param[in] frame AVFrame containing the raw video data to be encoded.
-+ *                  May be NULL when flushing an encoder that has the
-+ *                  AV_CODEC_CAP_DELAY capability set.
-+ * @param[out] got_packet_ptr This field is set to 1 by libavcodec if the
-+ *                            output packet is non-empty, and to 0 if it is
-+ *                            empty. If the function returns an error, the
-+ *                            packet can be assumed to be invalid, and the
-+ *                            value of got_packet_ptr is undefined and should
-+ *                            not be used.
-+ * @return          0 on success, negative error code on failure
-+ *
-+ * @deprecated use avcodec_send_frame()/avcodec_receive_packet() instead
-+ */
-+attribute_deprecated
-+int avcodec_encode_video2(AVCodecContext *avctx, AVPacket *avpkt,
-+                          const AVFrame *frame, int *got_packet_ptr);
-+
-+int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
-+                            const AVSubtitle *sub);
-+
-+
-+/**
-+ * @}
-+ */
-+
-+#if FF_API_AVPICTURE
-+/**
-+ * @addtogroup lavc_picture
-+ * @{
-+ */
-+
-+/**
-+ * @deprecated unused
-+ */
-+attribute_deprecated
-+int avpicture_alloc(AVPicture *picture, enum AVPixelFormat pix_fmt, int width, int height);
-+
-+/**
-+ * @deprecated unused
-+ */
-+attribute_deprecated
-+void avpicture_free(AVPicture *picture);
-+
-+/**
-+ * @deprecated use av_image_fill_arrays() instead.
-+ */
-+attribute_deprecated
-+int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
-+                   enum AVPixelFormat pix_fmt, int width, int height);
-+
-+/**
-+ * @deprecated use av_image_copy_to_buffer() instead.
-+ */
-+attribute_deprecated
-+int avpicture_layout(const AVPicture *src, enum AVPixelFormat pix_fmt,
-+                     int width, int height,
-+                     unsigned char *dest, int dest_size);
-+
-+/**
-+ * @deprecated use av_image_get_buffer_size() instead.
-+ */
-+attribute_deprecated
-+int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height);
-+
-+/**
-+ * @deprecated av_image_copy() instead.
-+ */
-+attribute_deprecated
-+void av_picture_copy(AVPicture *dst, const AVPicture *src,
-+                     enum AVPixelFormat pix_fmt, int width, int height);
-+
-+/**
-+ * @deprecated unused
-+ */
-+attribute_deprecated
-+int av_picture_crop(AVPicture *dst, const AVPicture *src,
-+                    enum AVPixelFormat pix_fmt, int top_band, int left_band);
-+
-+/**
-+ * @deprecated unused
-+ */
-+attribute_deprecated
-+int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, enum AVPixelFormat pix_fmt,
-+            int padtop, int padbottom, int padleft, int padright, int *color);
-+
-+/**
-+ * @}
-+ */
-+#endif
-+
-+/**
-+ * @defgroup lavc_misc Utility functions
-+ * @ingroup libavc
-+ *
-+ * Miscellaneous utility functions related to both encoding and decoding
-+ * (or neither).
-+ * @{
-+ */
-+
-+/**
-+ * @defgroup lavc_misc_pixfmt Pixel formats
-+ *
-+ * Functions for working with pixel formats.
-+ * @{
-+ */
-+
-+#if FF_API_GETCHROMA
-+/**
-+ * @deprecated Use av_pix_fmt_get_chroma_sub_sample
-+ */
-+
-+attribute_deprecated
-+void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift);
-+#endif
-+
-+/**
-+ * Return a value representing the fourCC code associated to the
-+ * pixel format pix_fmt, or 0 if no associated fourCC code can be
-+ * found.
-+ */
-+unsigned int avcodec_pix_fmt_to_codec_tag(enum AVPixelFormat pix_fmt);
-+
-+/**
-+ * @deprecated see av_get_pix_fmt_loss()
-+ */
-+int avcodec_get_pix_fmt_loss(enum AVPixelFormat dst_pix_fmt, enum AVPixelFormat src_pix_fmt,
-+                             int has_alpha);
-+
-+/**
-+ * Find the best pixel format to convert to given a certain source pixel
-+ * format.  When converting from one pixel format to another, information loss
-+ * may occur.  For example, when converting from RGB24 to GRAY, the color
-+ * information will be lost. Similarly, other losses occur when converting from
-+ * some formats to other formats. avcodec_find_best_pix_fmt_of_2() searches which of
-+ * the given pixel formats should be used to suffer the least amount of loss.
-+ * The pixel formats from which it chooses one, are determined by the
-+ * pix_fmt_list parameter.
-+ *
-+ *
-+ * @param[in] pix_fmt_list AV_PIX_FMT_NONE terminated array of pixel formats to choose from
-+ * @param[in] src_pix_fmt source pixel format
-+ * @param[in] has_alpha Whether the source pixel format alpha channel is used.
-+ * @param[out] loss_ptr Combination of flags informing you what kind of losses will occur.
-+ * @return The best pixel format to convert to or -1 if none was found.
-+ */
-+enum AVPixelFormat avcodec_find_best_pix_fmt_of_list(const enum AVPixelFormat *pix_fmt_list,
-+                                            enum AVPixelFormat src_pix_fmt,
-+                                            int has_alpha, int *loss_ptr);
-+
-+/**
-+ * @deprecated see av_find_best_pix_fmt_of_2()
-+ */
-+enum AVPixelFormat avcodec_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
-+                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
-+
-+attribute_deprecated
-+enum AVPixelFormat avcodec_find_best_pix_fmt2(enum AVPixelFormat dst_pix_fmt1, enum AVPixelFormat dst_pix_fmt2,
-+                                            enum AVPixelFormat src_pix_fmt, int has_alpha, int *loss_ptr);
-+
-+enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat * fmt);
-+
-+/**
-+ * @}
-+ */
-+
-+#if FF_API_TAG_STRING
-+/**
-+ * Put a string representing the codec tag codec_tag in buf.
-+ *
-+ * @param buf       buffer to place codec tag in
-+ * @param buf_size size in bytes of buf
-+ * @param codec_tag codec tag to assign
-+ * @return the length of the string that would have been generated if
-+ * enough space had been available, excluding the trailing null
-+ *
-+ * @deprecated see av_fourcc_make_string() and av_fourcc2str().
-+ */
-+attribute_deprecated
-+size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag);
-+#endif
-+
-+void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode);
-+
-+/**
-+ * Return a name for the specified profile, if available.
-+ *
-+ * @param codec the codec that is searched for the given profile
-+ * @param profile the profile value for which a name is requested
-+ * @return A name for the profile if found, NULL otherwise.
-+ */
-+const char *av_get_profile_name(const AVCodec *codec, int profile);
-+
-+/**
-+ * Return a name for the specified profile, if available.
-+ *
-+ * @param codec_id the ID of the codec to which the requested profile belongs
-+ * @param profile the profile value for which a name is requested
-+ * @return A name for the profile if found, NULL otherwise.
-+ *
-+ * @note unlike av_get_profile_name(), which searches a list of profiles
-+ *       supported by a specific decoder or encoder implementation, this
-+ *       function searches the list of profiles from the AVCodecDescriptor
-+ */
-+const char *avcodec_profile_name(enum AVCodecID codec_id, int profile);
-+
-+int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
-+int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
-+//FIXME func typedef
-+
-+/**
-+ * Fill AVFrame audio data and linesize pointers.
-+ *
-+ * The buffer buf must be a preallocated buffer with a size big enough
-+ * to contain the specified samples amount. The filled AVFrame data
-+ * pointers will point to this buffer.
-+ *
-+ * AVFrame extended_data channel pointers are allocated if necessary for
-+ * planar audio.
-+ *
-+ * @param frame       the AVFrame
-+ *                    frame->nb_samples must be set prior to calling the
-+ *                    function. This function fills in frame->data,
-+ *                    frame->extended_data, frame->linesize[0].
-+ * @param nb_channels channel count
-+ * @param sample_fmt  sample format
-+ * @param buf         buffer to use for frame data
-+ * @param buf_size    size of buffer
-+ * @param align       plane size sample alignment (0 = default)
-+ * @return            >=0 on success, negative error code on failure
-+ * @todo return the size in bytes required to store the samples in
-+ * case of success, at the next libavutil bump
-+ */
-+int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
-+                             enum AVSampleFormat sample_fmt, const uint8_t *buf,
-+                             int buf_size, int align);
-+
-+/**
-+ * Reset the internal decoder state / flush internal buffers. Should be called
-+ * e.g. when seeking or when switching to a different stream.
-+ *
-+ * @note when refcounted frames are not used (i.e. avctx->refcounted_frames is 0),
-+ * this invalidates the frames previously returned from the decoder. When
-+ * refcounted frames are used, the decoder just releases any references it might
-+ * keep internally, but the caller's reference remains valid.
-+ */
-+void avcodec_flush_buffers(AVCodecContext *avctx);
-+
-+/**
-+ * Return codec bits per sample.
-+ *
-+ * @param[in] codec_id the codec
-+ * @return Number of bits per sample or zero if unknown for the given codec.
-+ */
-+int av_get_bits_per_sample(enum AVCodecID codec_id);
-+
-+/**
-+ * Return the PCM codec associated with a sample format.
-+ * @param be  endianness, 0 for little, 1 for big,
-+ *            -1 (or anything else) for native
-+ * @return  AV_CODEC_ID_PCM_* or AV_CODEC_ID_NONE
-+ */
-+enum AVCodecID av_get_pcm_codec(enum AVSampleFormat fmt, int be);
-+
-+/**
-+ * Return codec bits per sample.
-+ * Only return non-zero if the bits per sample is exactly correct, not an
-+ * approximation.
-+ *
-+ * @param[in] codec_id the codec
-+ * @return Number of bits per sample or zero if unknown for the given codec.
-+ */
-+int av_get_exact_bits_per_sample(enum AVCodecID codec_id);
-+
-+/**
-+ * Return audio frame duration.
-+ *
-+ * @param avctx        codec context
-+ * @param frame_bytes  size of the frame, or 0 if unknown
-+ * @return             frame duration, in samples, if known. 0 if not able to
-+ *                     determine.
-+ */
-+int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes);
-+
-+/**
-+ * This function is the same as av_get_audio_frame_duration(), except it works
-+ * with AVCodecParameters instead of an AVCodecContext.
-+ */
-+int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes);
-+
-+#if FF_API_OLD_BSF
-+typedef struct AVBitStreamFilterContext {
-+    void *priv_data;
-+    const struct AVBitStreamFilter *filter;
-+    AVCodecParserContext *parser;
-+    struct AVBitStreamFilterContext *next;
-+    /**
-+     * Internal default arguments, used if NULL is passed to av_bitstream_filter_filter().
-+     * Not for access by library users.
-+     */
-+    char *args;
-+} AVBitStreamFilterContext;
-+#endif
-+
-+typedef struct AVBSFInternal AVBSFInternal;
-+
-+/**
-+ * The bitstream filter state.
-+ *
-+ * This struct must be allocated with av_bsf_alloc() and freed with
-+ * av_bsf_free().
-+ *
-+ * The fields in the struct will only be changed (by the caller or by the
-+ * filter) as described in their documentation, and are to be considered
-+ * immutable otherwise.
-+ */
-+typedef struct AVBSFContext {
-+    /**
-+     * A class for logging and AVOptions
-+     */
-+    const AVClass *av_class;
-+
-+    /**
-+     * The bitstream filter this context is an instance of.
-+     */
-+    const struct AVBitStreamFilter *filter;
-+
-+    /**
-+     * Opaque libavcodec internal data. Must not be touched by the caller in any
-+     * way.
-+     */
-+    AVBSFInternal *internal;
-+
-+    /**
-+     * Opaque filter-specific private data. If filter->priv_class is non-NULL,
-+     * this is an AVOptions-enabled struct.
-+     */
-+    void *priv_data;
-+
-+    /**
-+     * Parameters of the input stream. This field is allocated in
-+     * av_bsf_alloc(), it needs to be filled by the caller before
-+     * av_bsf_init().
-+     */
-+    AVCodecParameters *par_in;
-+
-+    /**
-+     * Parameters of the output stream. This field is allocated in
-+     * av_bsf_alloc(), it is set by the filter in av_bsf_init().
-+     */
-+    AVCodecParameters *par_out;
-+
-+    /**
-+     * The timebase used for the timestamps of the input packets. Set by the
-+     * caller before av_bsf_init().
-+     */
-+    AVRational time_base_in;
-+
-+    /**
-+     * The timebase used for the timestamps of the output packets. Set by the
-+     * filter in av_bsf_init().
-+     */
-+    AVRational time_base_out;
-+} AVBSFContext;
-+
-+typedef struct AVBitStreamFilter {
-+    const char *name;
-+
-+    /**
-+     * A list of codec ids supported by the filter, terminated by
-+     * AV_CODEC_ID_NONE.
-+     * May be NULL, in that case the bitstream filter works with any codec id.
-+     */
-+    const enum AVCodecID *codec_ids;
-+
-+    /**
-+     * A class for the private data, used to declare bitstream filter private
-+     * AVOptions. This field is NULL for bitstream filters that do not declare
-+     * any options.
-+     *
-+     * If this field is non-NULL, the first member of the filter private data
-+     * must be a pointer to AVClass, which will be set by libavcodec generic
-+     * code to this class.
-+     */
-+    const AVClass *priv_class;
-+
-+    /*****************************************************************
-+     * No fields below this line are part of the public API. They
-+     * may not be used outside of libavcodec and can be changed and
-+     * removed at will.
-+     * New public fields should be added right above.
-+     *****************************************************************
-+     */
-+
-+    int priv_data_size;
-+    int (*init)(AVBSFContext *ctx);
-+    int (*filter)(AVBSFContext *ctx, AVPacket *pkt);
-+    void (*close)(AVBSFContext *ctx);
-+} AVBitStreamFilter;
-+
-+#if FF_API_OLD_BSF
-+/**
-+ * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
-+ * is deprecated. Use the new bitstream filtering API (using AVBSFContext).
-+ */
-+attribute_deprecated
-+void av_register_bitstream_filter(AVBitStreamFilter *bsf);
-+/**
-+ * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
-+ * is deprecated. Use av_bsf_get_by_name(), av_bsf_alloc(), and av_bsf_init()
-+ * from the new bitstream filtering API (using AVBSFContext).
-+ */
-+attribute_deprecated
-+AVBitStreamFilterContext *av_bitstream_filter_init(const char *name);
-+/**
-+ * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
-+ * is deprecated. Use av_bsf_send_packet() and av_bsf_receive_packet() from the
-+ * new bitstream filtering API (using AVBSFContext).
-+ */
-+attribute_deprecated
-+int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc,
-+                               AVCodecContext *avctx, const char *args,
-+                               uint8_t **poutbuf, int *poutbuf_size,
-+                               const uint8_t *buf, int buf_size, int keyframe);
-+/**
-+ * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
-+ * is deprecated. Use av_bsf_free() from the new bitstream filtering API (using
-+ * AVBSFContext).
-+ */
-+attribute_deprecated
-+void av_bitstream_filter_close(AVBitStreamFilterContext *bsf);
-+/**
-+ * @deprecated the old bitstream filtering API (using AVBitStreamFilterContext)
-+ * is deprecated. Use av_bsf_iterate() from the new bitstream filtering API (using
-+ * AVBSFContext).
-+ */
-+attribute_deprecated
-+const AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f);
-+#endif
-+
-+/**
-+ * @return a bitstream filter with the specified name or NULL if no such
-+ *         bitstream filter exists.
-+ */
-+const AVBitStreamFilter *av_bsf_get_by_name(const char *name);
-+
-+/**
-+ * Iterate over all registered bitstream filters.
-+ *
-+ * @param opaque a pointer where libavcodec will store the iteration state. Must
-+ *               point to NULL to start the iteration.
-+ *
-+ * @return the next registered bitstream filter or NULL when the iteration is
-+ *         finished
-+ */
-+const AVBitStreamFilter *av_bsf_iterate(void **opaque);
-+#if FF_API_NEXT
-+attribute_deprecated
-+const AVBitStreamFilter *av_bsf_next(void **opaque);
-+#endif
-+
-+/**
-+ * Allocate a context for a given bitstream filter. The caller must fill in the
-+ * context parameters as described in the documentation and then call
-+ * av_bsf_init() before sending any data to the filter.
-+ *
-+ * @param filter the filter for which to allocate an instance.
-+ * @param ctx a pointer into which the pointer to the newly-allocated context
-+ *            will be written. It must be freed with av_bsf_free() after the
-+ *            filtering is done.
-+ *
-+ * @return 0 on success, a negative AVERROR code on failure
-+ */
-+int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **ctx);
-+
-+/**
-+ * Prepare the filter for use, after all the parameters and options have been
-+ * set.
-+ */
-+int av_bsf_init(AVBSFContext *ctx);
-+
-+/**
-+ * Submit a packet for filtering.
-+ *
-+ * After sending each packet, the filter must be completely drained by calling
-+ * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or
-+ * AVERROR_EOF.
-+ *
-+ * @param pkt the packet to filter. The bitstream filter will take ownership of
-+ * the packet and reset the contents of pkt. pkt is not touched if an error occurs.
-+ * This parameter may be NULL, which signals the end of the stream (i.e. no more
-+ * packets will be sent). That will cause the filter to output any packets it
-+ * may have buffered internally.
-+ *
-+ * @return 0 on success, a negative AVERROR on error.
-+ */
-+int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt);
-+
-+/**
-+ * Retrieve a filtered packet.
-+ *
-+ * @param[out] pkt this struct will be filled with the contents of the filtered
-+ *                 packet. It is owned by the caller and must be freed using
-+ *                 av_packet_unref() when it is no longer needed.
-+ *                 This parameter should be "clean" (i.e. freshly allocated
-+ *                 with av_packet_alloc() or unreffed with av_packet_unref())
-+ *                 when this function is called. If this function returns
-+ *                 successfully, the contents of pkt will be completely
-+ *                 overwritten by the returned data. On failure, pkt is not
-+ *                 touched.
-+ *
-+ * @return 0 on success. AVERROR(EAGAIN) if more packets need to be sent to the
-+ * filter (using av_bsf_send_packet()) to get more output. AVERROR_EOF if there
-+ * will be no further output from the filter. Another negative AVERROR value if
-+ * an error occurs.
-+ *
-+ * @note one input packet may result in several output packets, so after sending
-+ * a packet with av_bsf_send_packet(), this function needs to be called
-+ * repeatedly until it stops returning 0. It is also possible for a filter to
-+ * output fewer packets than were sent to it, so this function may return
-+ * AVERROR(EAGAIN) immediately after a successful av_bsf_send_packet() call.
-+ */
-+int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt);
-+
-+/**
-+ * Free a bitstream filter context and everything associated with it; write NULL
-+ * into the supplied pointer.
-+ */
-+void av_bsf_free(AVBSFContext **ctx);
-+
-+/**
-+ * Get the AVClass for AVBSFContext. It can be used in combination with
-+ * AV_OPT_SEARCH_FAKE_OBJ for examining options.
-+ *
-+ * @see av_opt_find().
-+ */
-+const AVClass *av_bsf_get_class(void);
-+
-+/**
-+ * Structure for chain/list of bitstream filters.
-+ * Empty list can be allocated by av_bsf_list_alloc().
-+ */
-+typedef struct AVBSFList AVBSFList;
-+
-+/**
-+ * Allocate empty list of bitstream filters.
-+ * The list must be later freed by av_bsf_list_free()
-+ * or finalized by av_bsf_list_finalize().
-+ *
-+ * @return Pointer to @ref AVBSFList on success, NULL in case of failure
-+ */
-+AVBSFList *av_bsf_list_alloc(void);
-+
-+/**
-+ * Free list of bitstream filters.
-+ *
-+ * @param lst Pointer to pointer returned by av_bsf_list_alloc()
-+ */
-+void av_bsf_list_free(AVBSFList **lst);
-+
-+/**
-+ * Append bitstream filter to the list of bitstream filters.
-+ *
-+ * @param lst List to append to
-+ * @param bsf Filter context to be appended
-+ *
-+ * @return >=0 on success, negative AVERROR in case of failure
-+ */
-+int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf);
-+
-+/**
-+ * Construct new bitstream filter context given it's name and options
-+ * and append it to the list of bitstream filters.
-+ *
-+ * @param lst      List to append to
-+ * @param bsf_name Name of the bitstream filter
-+ * @param options  Options for the bitstream filter, can be set to NULL
-+ *
-+ * @return >=0 on success, negative AVERROR in case of failure
-+ */
-+int av_bsf_list_append2(AVBSFList *lst, const char * bsf_name, AVDictionary **options);
-+/**
-+ * Finalize list of bitstream filters.
-+ *
-+ * This function will transform @ref AVBSFList to single @ref AVBSFContext,
-+ * so the whole chain of bitstream filters can be treated as single filter
-+ * freshly allocated by av_bsf_alloc().
-+ * If the call is successful, @ref AVBSFList structure is freed and lst
-+ * will be set to NULL. In case of failure, caller is responsible for
-+ * freeing the structure by av_bsf_list_free()
-+ *
-+ * @param      lst Filter list structure to be transformed
-+ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
-+ *                 representing the chain of bitstream filters
-+ *
-+ * @return >=0 on success, negative AVERROR in case of failure
-+ */
-+int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf);
-+
-+/**
-+ * Parse string describing list of bitstream filters and create single
-+ * @ref AVBSFContext describing the whole chain of bitstream filters.
-+ * Resulting @ref AVBSFContext can be treated as any other @ref AVBSFContext freshly
-+ * allocated by av_bsf_alloc().
-+ *
-+ * @param      str String describing chain of bitstream filters in format
-+ *                 `bsf1[=opt1=val1:opt2=val2][,bsf2]`
-+ * @param[out] bsf Pointer to be set to newly created @ref AVBSFContext structure
-+ *                 representing the chain of bitstream filters
-+ *
-+ * @return >=0 on success, negative AVERROR in case of failure
-+ */
-+int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf);
-+
-+/**
-+ * Get null/pass-through bitstream filter.
-+ *
-+ * @param[out] bsf Pointer to be set to new instance of pass-through bitstream filter
-+ *
-+ * @return
-+ */
-+int av_bsf_get_null_filter(AVBSFContext **bsf);
-+
-+/* memory */
-+
-+/**
-+ * Same behaviour av_fast_malloc but the buffer has additional
-+ * AV_INPUT_BUFFER_PADDING_SIZE at the end which will always be 0.
-+ *
-+ * In addition the whole buffer will initially and after resizes
-+ * be 0-initialized so that no uninitialized data will ever appear.
-+ */
-+void av_fast_padded_malloc(void *ptr, unsigned int *size, size_t min_size);
-+
-+/**
-+ * Same behaviour av_fast_padded_malloc except that buffer will always
-+ * be 0-initialized after call.
-+ */
-+void av_fast_padded_mallocz(void *ptr, unsigned int *size, size_t min_size);
-+
-+/**
-+ * Encode extradata length to a buffer. Used by xiph codecs.
-+ *
-+ * @param s buffer to write to; must be at least (v/255+1) bytes long
-+ * @param v size of extradata in bytes
-+ * @return number of bytes written to the buffer.
-+ */
-+unsigned int av_xiphlacing(unsigned char *s, unsigned int v);
-+
-+#if FF_API_USER_VISIBLE_AVHWACCEL
-+/**
-+ * Register the hardware accelerator hwaccel.
-+ *
-+ * @deprecated  This function doesn't do anything.
-+ */
-+attribute_deprecated
-+void av_register_hwaccel(AVHWAccel *hwaccel);
-+
-+/**
-+ * If hwaccel is NULL, returns the first registered hardware accelerator,
-+ * if hwaccel is non-NULL, returns the next registered hardware accelerator
-+ * after hwaccel, or NULL if hwaccel is the last one.
-+ *
-+ * @deprecated  AVHWaccel structures contain no user-serviceable parts, so
-+ *              this function should not be used.
-+ */
-+attribute_deprecated
-+AVHWAccel *av_hwaccel_next(const AVHWAccel *hwaccel);
-+#endif
-+
-+#if FF_API_LOCKMGR
-+/**
-+ * Lock operation used by lockmgr
-+ *
-+ * @deprecated Deprecated together with av_lockmgr_register().
-+ */
-+enum AVLockOp {
-+  AV_LOCK_CREATE,  ///< Create a mutex
-+  AV_LOCK_OBTAIN,  ///< Lock the mutex
-+  AV_LOCK_RELEASE, ///< Unlock the mutex
-+  AV_LOCK_DESTROY, ///< Free mutex resources
-+};
-+
-+/**
-+ * Register a user provided lock manager supporting the operations
-+ * specified by AVLockOp. The "mutex" argument to the function points
-+ * to a (void *) where the lockmgr should store/get a pointer to a user
-+ * allocated mutex. It is NULL upon AV_LOCK_CREATE and equal to the
-+ * value left by the last call for all other ops. If the lock manager is
-+ * unable to perform the op then it should leave the mutex in the same
-+ * state as when it was called and return a non-zero value. However,
-+ * when called with AV_LOCK_DESTROY the mutex will always be assumed to
-+ * have been successfully destroyed. If av_lockmgr_register succeeds
-+ * it will return a non-negative value, if it fails it will return a
-+ * negative value and destroy all mutex and unregister all callbacks.
-+ * av_lockmgr_register is not thread-safe, it must be called from a
-+ * single thread before any calls which make use of locking are used.
-+ *
-+ * @param cb User defined callback. av_lockmgr_register invokes calls
-+ *           to this callback and the previously registered callback.
-+ *           The callback will be used to create more than one mutex
-+ *           each of which must be backed by its own underlying locking
-+ *           mechanism (i.e. do not use a single static object to
-+ *           implement your lock manager). If cb is set to NULL the
-+ *           lockmgr will be unregistered.
-+ *
-+ * @deprecated This function does nothing, and always returns 0. Be sure to
-+ *             build with thread support to get basic thread safety.
-+ */
-+attribute_deprecated
-+int av_lockmgr_register(int (*cb)(void **mutex, enum AVLockOp op));
-+#endif
-+
-+/**
-+ * Get the type of the given codec.
-+ */
-+enum AVMediaType avcodec_get_type(enum AVCodecID codec_id);
-+
-+/**
-+ * Get the name of a codec.
-+ * @return  a static string identifying the codec; never NULL
-+ */
-+const char *avcodec_get_name(enum AVCodecID id);
-+
-+/**
-+ * @return a positive value if s is open (i.e. avcodec_open2() was called on it
-+ * with no corresponding avcodec_close()), 0 otherwise.
-+ */
-+int avcodec_is_open(AVCodecContext *s);
-+
-+/**
-+ * @return a non-zero number if codec is an encoder, zero otherwise
-+ */
-+int av_codec_is_encoder(const AVCodec *codec);
-+
-+/**
-+ * @return a non-zero number if codec is a decoder, zero otherwise
-+ */
-+int av_codec_is_decoder(const AVCodec *codec);
-+
-+/**
-+ * @return descriptor for given codec ID or NULL if no descriptor exists.
-+ */
-+const AVCodecDescriptor *avcodec_descriptor_get(enum AVCodecID id);
-+
-+/**
-+ * Iterate over all codec descriptors known to libavcodec.
-+ *
-+ * @param prev previous descriptor. NULL to get the first descriptor.
-+ *
-+ * @return next descriptor or NULL after the last descriptor
-+ */
-+const AVCodecDescriptor *avcodec_descriptor_next(const AVCodecDescriptor *prev);
-+
-+/**
-+ * @return codec descriptor with the given name or NULL if no such descriptor
-+ *         exists.
-+ */
-+const AVCodecDescriptor *avcodec_descriptor_get_by_name(const char *name);
-+
-+/**
-+ * Allocate a CPB properties structure and initialize its fields to default
-+ * values.
-+ *
-+ * @param size if non-NULL, the size of the allocated struct will be written
-+ *             here. This is useful for embedding it in side data.
-+ *
-+ * @return the newly allocated struct or NULL on failure
-+ */
-+AVCPBProperties *av_cpb_properties_alloc(size_t *size);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVCODEC_AVCODEC_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avfft.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avfft.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/avfft.h
-@@ -0,0 +1,118 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVCODEC_AVFFT_H
-+#define AVCODEC_AVFFT_H
-+
-+/**
-+ * @file
-+ * @ingroup lavc_fft
-+ * FFT functions
-+ */
-+
-+/**
-+ * @defgroup lavc_fft FFT functions
-+ * @ingroup lavc_misc
-+ *
-+ * @{
-+ */
-+
-+typedef float FFTSample;
-+
-+typedef struct FFTComplex {
-+    FFTSample re, im;
-+} FFTComplex;
-+
-+typedef struct FFTContext FFTContext;
-+
-+/**
-+ * Set up a complex FFT.
-+ * @param nbits           log2 of the length of the input array
-+ * @param inverse         if 0 perform the forward transform, if 1 perform the inverse
-+ */
-+FFTContext *av_fft_init(int nbits, int inverse);
-+
-+/**
-+ * Do the permutation needed BEFORE calling ff_fft_calc().
-+ */
-+void av_fft_permute(FFTContext *s, FFTComplex *z);
-+
-+/**
-+ * Do a complex FFT with the parameters defined in av_fft_init(). The
-+ * input data must be permuted before. No 1.0/sqrt(n) normalization is done.
-+ */
-+void av_fft_calc(FFTContext *s, FFTComplex *z);
-+
-+void av_fft_end(FFTContext *s);
-+
-+FFTContext *av_mdct_init(int nbits, int inverse, double scale);
-+void av_imdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
-+void av_imdct_half(FFTContext *s, FFTSample *output, const FFTSample *input);
-+void av_mdct_calc(FFTContext *s, FFTSample *output, const FFTSample *input);
-+void av_mdct_end(FFTContext *s);
-+
-+/* Real Discrete Fourier Transform */
-+
-+enum RDFTransformType {
-+    DFT_R2C,
-+    IDFT_C2R,
-+    IDFT_R2C,
-+    DFT_C2R,
-+};
-+
-+typedef struct RDFTContext RDFTContext;
-+
-+/**
-+ * Set up a real FFT.
-+ * @param nbits           log2 of the length of the input array
-+ * @param trans           the type of transform
-+ */
-+RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans);
-+void av_rdft_calc(RDFTContext *s, FFTSample *data);
-+void av_rdft_end(RDFTContext *s);
-+
-+/* Discrete Cosine Transform */
-+
-+typedef struct DCTContext DCTContext;
-+
-+enum DCTTransformType {
-+    DCT_II = 0,
-+    DCT_III,
-+    DCT_I,
-+    DST_I,
-+};
-+
-+/**
-+ * Set up DCT.
-+ *
-+ * @param nbits           size of the input array:
-+ *                        (1 << nbits)     for DCT-II, DCT-III and DST-I
-+ *                        (1 << nbits) + 1 for DCT-I
-+ * @param type            the type of transform
-+ *
-+ * @note the first element of the input of DST-I is ignored
-+ */
-+DCTContext *av_dct_init(int nbits, enum DCTTransformType type);
-+void av_dct_calc(DCTContext *s, FFTSample *data);
-+void av_dct_end (DCTContext *s);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVCODEC_AVFFT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vaapi.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vaapi.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vaapi.h
-@@ -0,0 +1,86 @@
-+/*
-+ * Video Acceleration API (shared data between FFmpeg and the video player)
-+ * HW decode acceleration for MPEG-2, MPEG-4, H.264 and VC-1
-+ *
-+ * Copyright (C) 2008-2009 Splitted-Desktop Systems
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVCODEC_VAAPI_H
-+#define AVCODEC_VAAPI_H
-+
-+/**
-+ * @file
-+ * @ingroup lavc_codec_hwaccel_vaapi
-+ * Public libavcodec VA API header.
-+ */
-+
-+#include <stdint.h>
-+#include "libavutil/attributes.h"
-+#include "version.h"
-+
-+#if FF_API_STRUCT_VAAPI_CONTEXT
-+
-+/**
-+ * @defgroup lavc_codec_hwaccel_vaapi VA API Decoding
-+ * @ingroup lavc_codec_hwaccel
-+ * @{
-+ */
-+
-+/**
-+ * This structure is used to share data between the FFmpeg library and
-+ * the client video application.
-+ * This shall be zero-allocated and available as
-+ * AVCodecContext.hwaccel_context. All user members can be set once
-+ * during initialization or through each AVCodecContext.get_buffer()
-+ * function call. In any case, they must be valid prior to calling
-+ * decoding functions.
-+ *
-+ * Deprecated: use AVCodecContext.hw_frames_ctx instead.
-+ */
-+struct attribute_deprecated vaapi_context {
-+    /**
-+     * Window system dependent data
-+     *
-+     * - encoding: unused
-+     * - decoding: Set by user
-+     */
-+    void *display;
-+
-+    /**
-+     * Configuration ID
-+     *
-+     * - encoding: unused
-+     * - decoding: Set by user
-+     */
-+    uint32_t config_id;
-+
-+    /**
-+     * Context ID (video decode pipeline)
-+     *
-+     * - encoding: unused
-+     * - decoding: Set by user
-+     */
-+    uint32_t context_id;
-+};
-+
-+/* @} */
-+
-+#endif /* FF_API_STRUCT_VAAPI_CONTEXT */
-+
-+#endif /* AVCODEC_VAAPI_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vdpau.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vdpau.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/vdpau.h
-@@ -0,0 +1,176 @@
-+/*
-+ * The Video Decode and Presentation API for UNIX (VDPAU) is used for
-+ * hardware-accelerated decoding of MPEG-1/2, H.264 and VC-1.
-+ *
-+ * Copyright (C) 2008 NVIDIA
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVCODEC_VDPAU_H
-+#define AVCODEC_VDPAU_H
-+
-+/**
-+ * @file
-+ * @ingroup lavc_codec_hwaccel_vdpau
-+ * Public libavcodec VDPAU header.
-+ */
-+
-+
-+/**
-+ * @defgroup lavc_codec_hwaccel_vdpau VDPAU Decoder and Renderer
-+ * @ingroup lavc_codec_hwaccel
-+ *
-+ * VDPAU hardware acceleration has two modules
-+ * - VDPAU decoding
-+ * - VDPAU presentation
-+ *
-+ * The VDPAU decoding module parses all headers using FFmpeg
-+ * parsing mechanisms and uses VDPAU for the actual decoding.
-+ *
-+ * As per the current implementation, the actual decoding
-+ * and rendering (API calls) are done as part of the VDPAU
-+ * presentation (vo_vdpau.c) module.
-+ *
-+ * @{
-+ */
-+
-+#include <vdpau/vdpau.h>
-+
-+#include "libavutil/avconfig.h"
-+#include "libavutil/attributes.h"
-+
-+#include "avcodec.h"
-+#include "version.h"
-+
-+struct AVCodecContext;
-+struct AVFrame;
-+
-+typedef int (*AVVDPAU_Render2)(struct AVCodecContext *, struct AVFrame *,
-+                               const VdpPictureInfo *, uint32_t,
-+                               const VdpBitstreamBuffer *);
-+
-+/**
-+ * This structure is used to share data between the libavcodec library and
-+ * the client video application.
-+ * The user shall allocate the structure via the av_alloc_vdpau_hwaccel
-+ * function and make it available as
-+ * AVCodecContext.hwaccel_context. Members can be set by the user once
-+ * during initialization or through each AVCodecContext.get_buffer()
-+ * function call. In any case, they must be valid prior to calling
-+ * decoding functions.
-+ *
-+ * The size of this structure is not a part of the public ABI and must not
-+ * be used outside of libavcodec. Use av_vdpau_alloc_context() to allocate an
-+ * AVVDPAUContext.
-+ */
-+typedef struct AVVDPAUContext {
-+    /**
-+     * VDPAU decoder handle
-+     *
-+     * Set by user.
-+     */
-+    VdpDecoder decoder;
-+
-+    /**
-+     * VDPAU decoder render callback
-+     *
-+     * Set by the user.
-+     */
-+    VdpDecoderRender *render;
-+
-+    AVVDPAU_Render2 render2;
-+} AVVDPAUContext;
-+
-+/**
-+ * @brief allocation function for AVVDPAUContext
-+ *
-+ * Allows extending the struct without breaking API/ABI
-+ */
-+AVVDPAUContext *av_alloc_vdpaucontext(void);
-+
-+AVVDPAU_Render2 av_vdpau_hwaccel_get_render2(const AVVDPAUContext *);
-+void av_vdpau_hwaccel_set_render2(AVVDPAUContext *, AVVDPAU_Render2);
-+
-+/**
-+ * Associate a VDPAU device with a codec context for hardware acceleration.
-+ * This function is meant to be called from the get_format() codec callback,
-+ * or earlier. It can also be called after avcodec_flush_buffers() to change
-+ * the underlying VDPAU device mid-stream (e.g. to recover from non-transparent
-+ * display preemption).
-+ *
-+ * @note get_format() must return AV_PIX_FMT_VDPAU if this function completes
-+ * successfully.
-+ *
-+ * @param avctx decoding context whose get_format() callback is invoked
-+ * @param device VDPAU device handle to use for hardware acceleration
-+ * @param get_proc_address VDPAU device driver
-+ * @param flags zero of more OR'd AV_HWACCEL_FLAG_* flags
-+ *
-+ * @return 0 on success, an AVERROR code on failure.
-+ */
-+int av_vdpau_bind_context(AVCodecContext *avctx, VdpDevice device,
-+                          VdpGetProcAddress *get_proc_address, unsigned flags);
-+
-+/**
-+ * Gets the parameters to create an adequate VDPAU video surface for the codec
-+ * context using VDPAU hardware decoding acceleration.
-+ *
-+ * @note Behavior is undefined if the context was not successfully bound to a
-+ * VDPAU device using av_vdpau_bind_context().
-+ *
-+ * @param avctx the codec context being used for decoding the stream
-+ * @param type storage space for the VDPAU video surface chroma type
-+ *              (or NULL to ignore)
-+ * @param width storage space for the VDPAU video surface pixel width
-+ *              (or NULL to ignore)
-+ * @param height storage space for the VDPAU video surface pixel height
-+ *              (or NULL to ignore)
-+ *
-+ * @return 0 on success, a negative AVERROR code on failure.
-+ */
-+int av_vdpau_get_surface_parameters(AVCodecContext *avctx, VdpChromaType *type,
-+                                    uint32_t *width, uint32_t *height);
-+
-+/**
-+ * Allocate an AVVDPAUContext.
-+ *
-+ * @return Newly-allocated AVVDPAUContext or NULL on failure.
-+ */
-+AVVDPAUContext *av_vdpau_alloc_context(void);
-+
-+#if FF_API_VDPAU_PROFILE
-+/**
-+ * Get a decoder profile that should be used for initializing a VDPAU decoder.
-+ * Should be called from the AVCodecContext.get_format() callback.
-+ *
-+ * @deprecated Use av_vdpau_bind_context() instead.
-+ *
-+ * @param avctx the codec context being used for decoding the stream
-+ * @param profile a pointer into which the result will be written on success.
-+ *                The contents of profile are undefined if this function returns
-+ *                an error.
-+ *
-+ * @return 0 on success (non-negative), a negative AVERROR on failure.
-+ */
-+attribute_deprecated
-+int av_vdpau_get_profile(AVCodecContext *avctx, VdpDecoderProfile *profile);
-+#endif
-+
-+/* @}*/
-+
-+#endif /* AVCODEC_VDPAU_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/version.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/version.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavcodec/version.h
-@@ -0,0 +1,137 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVCODEC_VERSION_H
-+#define AVCODEC_VERSION_H
-+
-+/**
-+ * @file
-+ * @ingroup libavc
-+ * Libavcodec version macros.
-+ */
-+
-+#include "libavutil/version.h"
-+
-+#define LIBAVCODEC_VERSION_MAJOR  58
-+#define LIBAVCODEC_VERSION_MINOR  18
-+#define LIBAVCODEC_VERSION_MICRO 100
-+
-+#define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
-+                                               LIBAVCODEC_VERSION_MINOR, \
-+                                               LIBAVCODEC_VERSION_MICRO)
-+#define LIBAVCODEC_VERSION      AV_VERSION(LIBAVCODEC_VERSION_MAJOR,    \
-+                                           LIBAVCODEC_VERSION_MINOR,    \
-+                                           LIBAVCODEC_VERSION_MICRO)
-+#define LIBAVCODEC_BUILD        LIBAVCODEC_VERSION_INT
-+
-+#define LIBAVCODEC_IDENT        "Lavc" AV_STRINGIFY(LIBAVCODEC_VERSION)
-+
-+/**
-+ * FF_API_* defines may be placed below to indicate public API that will be
-+ * dropped at a future version bump. The defines themselves are not part of
-+ * the public API and may change, break or disappear at any time.
-+ *
-+ * @note, when bumping the major version it is recommended to manually
-+ * disable each FF_API_* in its own commit instead of disabling them all
-+ * at once through the bump. This improves the git bisect-ability of the change.
-+ */
-+
-+#ifndef FF_API_LOWRES
-+#define FF_API_LOWRES            (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_DEBUG_MV
-+#define FF_API_DEBUG_MV          (LIBAVCODEC_VERSION_MAJOR < 58)
-+#endif
-+#ifndef FF_API_AVCTX_TIMEBASE
-+#define FF_API_AVCTX_TIMEBASE    (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_CODED_FRAME
-+#define FF_API_CODED_FRAME       (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_SIDEDATA_ONLY_PKT
-+#define FF_API_SIDEDATA_ONLY_PKT (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_VDPAU_PROFILE
-+#define FF_API_VDPAU_PROFILE     (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_CONVERGENCE_DURATION
-+#define FF_API_CONVERGENCE_DURATION (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_AVPICTURE
-+#define FF_API_AVPICTURE         (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_AVPACKET_OLD_API
-+#define FF_API_AVPACKET_OLD_API (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_RTP_CALLBACK
-+#define FF_API_RTP_CALLBACK      (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_VBV_DELAY
-+#define FF_API_VBV_DELAY         (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_CODER_TYPE
-+#define FF_API_CODER_TYPE        (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_STAT_BITS
-+#define FF_API_STAT_BITS         (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_PRIVATE_OPT
-+#define FF_API_PRIVATE_OPT      (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_ASS_TIMING
-+#define FF_API_ASS_TIMING       (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_OLD_BSF
-+#define FF_API_OLD_BSF          (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_COPY_CONTEXT
-+#define FF_API_COPY_CONTEXT     (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_GET_CONTEXT_DEFAULTS
-+#define FF_API_GET_CONTEXT_DEFAULTS (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_NVENC_OLD_NAME
-+#define FF_API_NVENC_OLD_NAME    (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_STRUCT_VAAPI_CONTEXT
-+#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_MERGE_SD_API
-+#define FF_API_MERGE_SD_API      (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_TAG_STRING
-+#define FF_API_TAG_STRING        (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_GETCHROMA
-+#define FF_API_GETCHROMA         (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_CODEC_GET_SET
-+#define FF_API_CODEC_GET_SET     (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_USER_VISIBLE_AVHWACCEL
-+#define FF_API_USER_VISIBLE_AVHWACCEL (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_LOCKMGR
-+#define FF_API_LOCKMGR (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+#ifndef FF_API_NEXT
-+#define FF_API_NEXT              (LIBAVCODEC_VERSION_MAJOR < 59)
-+#endif
-+
-+
-+#endif /* AVCODEC_VERSION_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/attributes.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/attributes.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/attributes.h
-@@ -0,0 +1,167 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * Macro definitions for various function/variable attributes
-+ */
-+
-+#ifndef AVUTIL_ATTRIBUTES_H
-+#define AVUTIL_ATTRIBUTES_H
-+
-+#ifdef __GNUC__
-+#    define AV_GCC_VERSION_AT_LEAST(x,y) (__GNUC__ > (x) || __GNUC__ == (x) && __GNUC_MINOR__ >= (y))
-+#    define AV_GCC_VERSION_AT_MOST(x,y)  (__GNUC__ < (x) || __GNUC__ == (x) && __GNUC_MINOR__ <= (y))
-+#else
-+#    define AV_GCC_VERSION_AT_LEAST(x,y) 0
-+#    define AV_GCC_VERSION_AT_MOST(x,y)  0
-+#endif
-+
-+#ifndef av_always_inline
-+#if AV_GCC_VERSION_AT_LEAST(3,1)
-+#    define av_always_inline __attribute__((always_inline)) inline
-+#elif defined(_MSC_VER)
-+#    define av_always_inline __forceinline
-+#else
-+#    define av_always_inline inline
-+#endif
-+#endif
-+
-+#ifndef av_extern_inline
-+#if defined(__ICL) && __ICL >= 1210 || defined(__GNUC_STDC_INLINE__)
-+#    define av_extern_inline extern inline
-+#else
-+#    define av_extern_inline inline
-+#endif
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,4)
-+#    define av_warn_unused_result __attribute__((warn_unused_result))
-+#else
-+#    define av_warn_unused_result
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,1)
-+#    define av_noinline __attribute__((noinline))
-+#elif defined(_MSC_VER)
-+#    define av_noinline __declspec(noinline)
-+#else
-+#    define av_noinline
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
-+#    define av_pure __attribute__((pure))
-+#else
-+#    define av_pure
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(2,6) || defined(__clang__)
-+#    define av_const __attribute__((const))
-+#else
-+#    define av_const
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(4,3) || defined(__clang__)
-+#    define av_cold __attribute__((cold))
-+#else
-+#    define av_cold
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(4,1) && !defined(__llvm__)
-+#    define av_flatten __attribute__((flatten))
-+#else
-+#    define av_flatten
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,1)
-+#    define attribute_deprecated __attribute__((deprecated))
-+#elif defined(_MSC_VER)
-+#    define attribute_deprecated __declspec(deprecated)
-+#else
-+#    define attribute_deprecated
-+#endif
-+
-+/**
-+ * Disable warnings about deprecated features
-+ * This is useful for sections of code kept for backward compatibility and
-+ * scheduled for removal.
-+ */
-+#ifndef AV_NOWARN_DEPRECATED
-+#if AV_GCC_VERSION_AT_LEAST(4,6)
-+#    define AV_NOWARN_DEPRECATED(code) \
-+        _Pragma("GCC diagnostic push") \
-+        _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") \
-+        code \
-+        _Pragma("GCC diagnostic pop")
-+#elif defined(_MSC_VER)
-+#    define AV_NOWARN_DEPRECATED(code) \
-+        __pragma(warning(push)) \
-+        __pragma(warning(disable : 4996)) \
-+        code; \
-+        __pragma(warning(pop))
-+#else
-+#    define AV_NOWARN_DEPRECATED(code) code
-+#endif
-+#endif
-+
-+#if defined(__GNUC__) || defined(__clang__)
-+#    define av_unused __attribute__((unused))
-+#else
-+#    define av_unused
-+#endif
-+
-+/**
-+ * Mark a variable as used and prevent the compiler from optimizing it
-+ * away.  This is useful for variables accessed only from inline
-+ * assembler without the compiler being aware.
-+ */
-+#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__)
-+#    define av_used __attribute__((used))
-+#else
-+#    define av_used
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,3) || defined(__clang__)
-+#   define av_alias __attribute__((may_alias))
-+#else
-+#   define av_alias
-+#endif
-+
-+#if (defined(__GNUC__) || defined(__clang__)) && !defined(__INTEL_COMPILER)
-+#    define av_uninit(x) x=x
-+#else
-+#    define av_uninit(x) x
-+#endif
-+
-+#if defined(__GNUC__) || defined(__clang__)
-+#    define av_builtin_constant_p __builtin_constant_p
-+#    define av_printf_format(fmtpos, attrpos) __attribute__((__format__(__printf__, fmtpos, attrpos)))
-+#else
-+#    define av_builtin_constant_p(x) 0
-+#    define av_printf_format(fmtpos, attrpos)
-+#endif
-+
-+#if AV_GCC_VERSION_AT_LEAST(2,5) || defined(__clang__)
-+#    define av_noreturn __attribute__((noreturn))
-+#else
-+#    define av_noreturn
-+#endif
-+
-+#endif /* AVUTIL_ATTRIBUTES_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avconfig.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avconfig.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avconfig.h
-@@ -0,0 +1,6 @@
-+/* Generated by ffmpeg configure */
-+#ifndef AVUTIL_AVCONFIG_H
-+#define AVUTIL_AVCONFIG_H
-+#define AV_HAVE_BIGENDIAN 0
-+#define AV_HAVE_FAST_UNALIGNED 1
-+#endif /* AVUTIL_AVCONFIG_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avutil.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avutil.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/avutil.h
-@@ -0,0 +1,365 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_AVUTIL_H
-+#define AVUTIL_AVUTIL_H
-+
-+/**
-+ * @file
-+ * @ingroup lavu
-+ * Convenience header that includes @ref lavu "libavutil"'s core.
-+ */
-+
-+/**
-+ * @mainpage
-+ *
-+ * @section ffmpeg_intro Introduction
-+ *
-+ * This document describes the usage of the different libraries
-+ * provided by FFmpeg.
-+ *
-+ * @li @ref libavc "libavcodec" encoding/decoding library
-+ * @li @ref lavfi "libavfilter" graph-based frame editing library
-+ * @li @ref libavf "libavformat" I/O and muxing/demuxing library
-+ * @li @ref lavd "libavdevice" special devices muxing/demuxing library
-+ * @li @ref lavu "libavutil" common utility library
-+ * @li @ref lswr "libswresample" audio resampling, format conversion and mixing
-+ * @li @ref lpp  "libpostproc" post processing library
-+ * @li @ref libsws "libswscale" color conversion and scaling library
-+ *
-+ * @section ffmpeg_versioning Versioning and compatibility
-+ *
-+ * Each of the FFmpeg libraries contains a version.h header, which defines a
-+ * major, minor and micro version number with the
-+ * <em>LIBRARYNAME_VERSION_{MAJOR,MINOR,MICRO}</em> macros. The major version
-+ * number is incremented with backward incompatible changes - e.g. removing
-+ * parts of the public API, reordering public struct members, etc. The minor
-+ * version number is incremented for backward compatible API changes or major
-+ * new features - e.g. adding a new public function or a new decoder. The micro
-+ * version number is incremented for smaller changes that a calling program
-+ * might still want to check for - e.g. changing behavior in a previously
-+ * unspecified situation.
-+ *
-+ * FFmpeg guarantees backward API and ABI compatibility for each library as long
-+ * as its major version number is unchanged. This means that no public symbols
-+ * will be removed or renamed. Types and names of the public struct members and
-+ * values of public macros and enums will remain the same (unless they were
-+ * explicitly declared as not part of the public API). Documented behavior will
-+ * not change.
-+ *
-+ * In other words, any correct program that works with a given FFmpeg snapshot
-+ * should work just as well without any changes with any later snapshot with the
-+ * same major versions. This applies to both rebuilding the program against new
-+ * FFmpeg versions or to replacing the dynamic FFmpeg libraries that a program
-+ * links against.
-+ *
-+ * However, new public symbols may be added and new members may be appended to
-+ * public structs whose size is not part of public ABI (most public structs in
-+ * FFmpeg). New macros and enum values may be added. Behavior in undocumented
-+ * situations may change slightly (and be documented). All those are accompanied
-+ * by an entry in doc/APIchanges and incrementing either the minor or micro
-+ * version number.
-+ */
-+
-+/**
-+ * @defgroup lavu libavutil
-+ * Common code shared across all FFmpeg libraries.
-+ *
-+ * @note
-+ * libavutil is designed to be modular. In most cases, in order to use the
-+ * functions provided by one component of libavutil you must explicitly include
-+ * the specific header containing that feature. If you are only using
-+ * media-related components, you could simply include libavutil/avutil.h, which
-+ * brings in most of the "core" components.
-+ *
-+ * @{
-+ *
-+ * @defgroup lavu_crypto Crypto and Hashing
-+ *
-+ * @{
-+ * @}
-+ *
-+ * @defgroup lavu_math Mathematics
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_string String Manipulation
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_mem Memory Management
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_data Data Structures
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_video Video related
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_audio Audio related
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_error Error Codes
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_log Logging Facility
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup lavu_misc Other
-+ *
-+ * @{
-+ *
-+ * @defgroup preproc_misc Preprocessor String Macros
-+ *
-+ * @{
-+ *
-+ * @}
-+ *
-+ * @defgroup version_utils Library Version Macros
-+ *
-+ * @{
-+ *
-+ * @}
-+ */
-+
-+
-+/**
-+ * @addtogroup lavu_ver
-+ * @{
-+ */
-+
-+/**
-+ * Return the LIBAVUTIL_VERSION_INT constant.
-+ */
-+unsigned avutil_version(void);
-+
-+/**
-+ * Return an informative version string. This usually is the actual release
-+ * version number or a git commit description. This string has no fixed format
-+ * and can change any time. It should never be parsed by code.
-+ */
-+const char *av_version_info(void);
-+
-+/**
-+ * Return the libavutil build-time configuration.
-+ */
-+const char *avutil_configuration(void);
-+
-+/**
-+ * Return the libavutil license.
-+ */
-+const char *avutil_license(void);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @addtogroup lavu_media Media Type
-+ * @brief Media Type
-+ */
-+
-+enum AVMediaType {
-+    AVMEDIA_TYPE_UNKNOWN = -1,  ///< Usually treated as AVMEDIA_TYPE_DATA
-+    AVMEDIA_TYPE_VIDEO,
-+    AVMEDIA_TYPE_AUDIO,
-+    AVMEDIA_TYPE_DATA,          ///< Opaque data information usually continuous
-+    AVMEDIA_TYPE_SUBTITLE,
-+    AVMEDIA_TYPE_ATTACHMENT,    ///< Opaque data information usually sparse
-+    AVMEDIA_TYPE_NB
-+};
-+
-+/**
-+ * Return a string describing the media_type enum, NULL if media_type
-+ * is unknown.
-+ */
-+const char *av_get_media_type_string(enum AVMediaType media_type);
-+
-+/**
-+ * @defgroup lavu_const Constants
-+ * @{
-+ *
-+ * @defgroup lavu_enc Encoding specific
-+ *
-+ * @note those definition should move to avcodec
-+ * @{
-+ */
-+
-+#define FF_LAMBDA_SHIFT 7
-+#define FF_LAMBDA_SCALE (1<<FF_LAMBDA_SHIFT)
-+#define FF_QP2LAMBDA 118 ///< factor to convert from H.263 QP to lambda
-+#define FF_LAMBDA_MAX (256*128-1)
-+
-+#define FF_QUALITY_SCALE FF_LAMBDA_SCALE //FIXME maybe remove
-+
-+/**
-+ * @}
-+ * @defgroup lavu_time Timestamp specific
-+ *
-+ * FFmpeg internal timebase and timestamp definitions
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * @brief Undefined timestamp value
-+ *
-+ * Usually reported by demuxer that work on containers that do not provide
-+ * either pts or dts.
-+ */
-+
-+#define AV_NOPTS_VALUE          ((int64_t)UINT64_C(0x8000000000000000))
-+
-+/**
-+ * Internal time base represented as integer
-+ */
-+
-+#define AV_TIME_BASE            1000000
-+
-+/**
-+ * Internal time base represented as fractional value
-+ */
-+
-+#define AV_TIME_BASE_Q          (AVRational){1, AV_TIME_BASE}
-+
-+/**
-+ * @}
-+ * @}
-+ * @defgroup lavu_picture Image related
-+ *
-+ * AVPicture types, pixel formats and basic image planes manipulation.
-+ *
-+ * @{
-+ */
-+
-+enum AVPictureType {
-+    AV_PICTURE_TYPE_NONE = 0, ///< Undefined
-+    AV_PICTURE_TYPE_I,     ///< Intra
-+    AV_PICTURE_TYPE_P,     ///< Predicted
-+    AV_PICTURE_TYPE_B,     ///< Bi-dir predicted
-+    AV_PICTURE_TYPE_S,     ///< S(GMC)-VOP MPEG-4
-+    AV_PICTURE_TYPE_SI,    ///< Switching Intra
-+    AV_PICTURE_TYPE_SP,    ///< Switching Predicted
-+    AV_PICTURE_TYPE_BI,    ///< BI type
-+};
-+
-+/**
-+ * Return a single letter to describe the given picture type
-+ * pict_type.
-+ *
-+ * @param[in] pict_type the picture type @return a single character
-+ * representing the picture type, '?' if pict_type is unknown
-+ */
-+char av_get_picture_type_char(enum AVPictureType pict_type);
-+
-+/**
-+ * @}
-+ */
-+
-+#include "common.h"
-+#include "error.h"
-+#include "rational.h"
-+#include "version.h"
-+#include "macros.h"
-+#include "mathematics.h"
-+#include "log.h"
-+#include "pixfmt.h"
-+
-+/**
-+ * Return x default pointer in case p is NULL.
-+ */
-+static inline void *av_x_if_null(const void *p, const void *x)
-+{
-+    return (void *)(intptr_t)(p ? p : x);
-+}
-+
-+/**
-+ * Compute the length of an integer list.
-+ *
-+ * @param elsize  size in bytes of each list element (only 1, 2, 4 or 8)
-+ * @param term    list terminator (usually 0 or -1)
-+ * @param list    pointer to the list
-+ * @return  length of the list, in elements, not counting the terminator
-+ */
-+unsigned av_int_list_length_for_size(unsigned elsize,
-+                                     const void *list, uint64_t term) av_pure;
-+
-+/**
-+ * Compute the length of an integer list.
-+ *
-+ * @param term  list terminator (usually 0 or -1)
-+ * @param list  pointer to the list
-+ * @return  length of the list, in elements, not counting the terminator
-+ */
-+#define av_int_list_length(list, term) \
-+    av_int_list_length_for_size(sizeof(*(list)), list, term)
-+
-+/**
-+ * Open a file using a UTF-8 filename.
-+ * The API of this function matches POSIX fopen(), errors are returned through
-+ * errno.
-+ */
-+FILE *av_fopen_utf8(const char *path, const char *mode);
-+
-+/**
-+ * Return the fractional representation of the internal time base.
-+ */
-+AVRational av_get_time_base_q(void);
-+
-+#define AV_FOURCC_MAX_STRING_SIZE 32
-+
-+#define av_fourcc2str(fourcc) av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc)
-+
-+/**
-+ * Fill the provided buffer with a string containing a FourCC (four-character
-+ * code) representation.
-+ *
-+ * @param buf    a buffer with size in bytes of at least AV_FOURCC_MAX_STRING_SIZE
-+ * @param fourcc the fourcc to represent
-+ * @return the buffer in input
-+ */
-+char *av_fourcc_make_string(char *buf, uint32_t fourcc);
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_AVUTIL_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/buffer.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/buffer.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/buffer.h
-@@ -0,0 +1,291 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu_buffer
-+ * refcounted data buffer API
-+ */
-+
-+#ifndef AVUTIL_BUFFER_H
-+#define AVUTIL_BUFFER_H
-+
-+#include <stdint.h>
-+
-+/**
-+ * @defgroup lavu_buffer AVBuffer
-+ * @ingroup lavu_data
-+ *
-+ * @{
-+ * AVBuffer is an API for reference-counted data buffers.
-+ *
-+ * There are two core objects in this API -- AVBuffer and AVBufferRef. AVBuffer
-+ * represents the data buffer itself; it is opaque and not meant to be accessed
-+ * by the caller directly, but only through AVBufferRef. However, the caller may
-+ * e.g. compare two AVBuffer pointers to check whether two different references
-+ * are describing the same data buffer. AVBufferRef represents a single
-+ * reference to an AVBuffer and it is the object that may be manipulated by the
-+ * caller directly.
-+ *
-+ * There are two functions provided for creating a new AVBuffer with a single
-+ * reference -- av_buffer_alloc() to just allocate a new buffer, and
-+ * av_buffer_create() to wrap an existing array in an AVBuffer. From an existing
-+ * reference, additional references may be created with av_buffer_ref().
-+ * Use av_buffer_unref() to free a reference (this will automatically free the
-+ * data once all the references are freed).
-+ *
-+ * The convention throughout this API and the rest of FFmpeg is such that the
-+ * buffer is considered writable if there exists only one reference to it (and
-+ * it has not been marked as read-only). The av_buffer_is_writable() function is
-+ * provided to check whether this is true and av_buffer_make_writable() will
-+ * automatically create a new writable buffer when necessary.
-+ * Of course nothing prevents the calling code from violating this convention,
-+ * however that is safe only when all the existing references are under its
-+ * control.
-+ *
-+ * @note Referencing and unreferencing the buffers is thread-safe and thus
-+ * may be done from multiple threads simultaneously without any need for
-+ * additional locking.
-+ *
-+ * @note Two different references to the same buffer can point to different
-+ * parts of the buffer (i.e. their AVBufferRef.data will not be equal).
-+ */
-+
-+/**
-+ * A reference counted buffer type. It is opaque and is meant to be used through
-+ * references (AVBufferRef).
-+ */
-+typedef struct AVBuffer AVBuffer;
-+
-+/**
-+ * A reference to a data buffer.
-+ *
-+ * The size of this struct is not a part of the public ABI and it is not meant
-+ * to be allocated directly.
-+ */
-+typedef struct AVBufferRef {
-+    AVBuffer *buffer;
-+
-+    /**
-+     * The data buffer. It is considered writable if and only if
-+     * this is the only reference to the buffer, in which case
-+     * av_buffer_is_writable() returns 1.
-+     */
-+    uint8_t *data;
-+    /**
-+     * Size of data in bytes.
-+     */
-+    int      size;
-+} AVBufferRef;
-+
-+/**
-+ * Allocate an AVBuffer of the given size using av_malloc().
-+ *
-+ * @return an AVBufferRef of given size or NULL when out of memory
-+ */
-+AVBufferRef *av_buffer_alloc(int size);
-+
-+/**
-+ * Same as av_buffer_alloc(), except the returned buffer will be initialized
-+ * to zero.
-+ */
-+AVBufferRef *av_buffer_allocz(int size);
-+
-+/**
-+ * Always treat the buffer as read-only, even when it has only one
-+ * reference.
-+ */
-+#define AV_BUFFER_FLAG_READONLY (1 << 0)
-+
-+/**
-+ * Create an AVBuffer from an existing array.
-+ *
-+ * If this function is successful, data is owned by the AVBuffer. The caller may
-+ * only access data through the returned AVBufferRef and references derived from
-+ * it.
-+ * If this function fails, data is left untouched.
-+ * @param data   data array
-+ * @param size   size of data in bytes
-+ * @param free   a callback for freeing this buffer's data
-+ * @param opaque parameter to be got for processing or passed to free
-+ * @param flags  a combination of AV_BUFFER_FLAG_*
-+ *
-+ * @return an AVBufferRef referring to data on success, NULL on failure.
-+ */
-+AVBufferRef *av_buffer_create(uint8_t *data, int size,
-+                              void (*free)(void *opaque, uint8_t *data),
-+                              void *opaque, int flags);
-+
-+/**
-+ * Default free callback, which calls av_free() on the buffer data.
-+ * This function is meant to be passed to av_buffer_create(), not called
-+ * directly.
-+ */
-+void av_buffer_default_free(void *opaque, uint8_t *data);
-+
-+/**
-+ * Create a new reference to an AVBuffer.
-+ *
-+ * @return a new AVBufferRef referring to the same AVBuffer as buf or NULL on
-+ * failure.
-+ */
-+AVBufferRef *av_buffer_ref(AVBufferRef *buf);
-+
-+/**
-+ * Free a given reference and automatically free the buffer if there are no more
-+ * references to it.
-+ *
-+ * @param buf the reference to be freed. The pointer is set to NULL on return.
-+ */
-+void av_buffer_unref(AVBufferRef **buf);
-+
-+/**
-+ * @return 1 if the caller may write to the data referred to by buf (which is
-+ * true if and only if buf is the only reference to the underlying AVBuffer).
-+ * Return 0 otherwise.
-+ * A positive answer is valid until av_buffer_ref() is called on buf.
-+ */
-+int av_buffer_is_writable(const AVBufferRef *buf);
-+
-+/**
-+ * @return the opaque parameter set by av_buffer_create.
-+ */
-+void *av_buffer_get_opaque(const AVBufferRef *buf);
-+
-+int av_buffer_get_ref_count(const AVBufferRef *buf);
-+
-+/**
-+ * Create a writable reference from a given buffer reference, avoiding data copy
-+ * if possible.
-+ *
-+ * @param buf buffer reference to make writable. On success, buf is either left
-+ *            untouched, or it is unreferenced and a new writable AVBufferRef is
-+ *            written in its place. On failure, buf is left untouched.
-+ * @return 0 on success, a negative AVERROR on failure.
-+ */
-+int av_buffer_make_writable(AVBufferRef **buf);
-+
-+/**
-+ * Reallocate a given buffer.
-+ *
-+ * @param buf  a buffer reference to reallocate. On success, buf will be
-+ *             unreferenced and a new reference with the required size will be
-+ *             written in its place. On failure buf will be left untouched. *buf
-+ *             may be NULL, then a new buffer is allocated.
-+ * @param size required new buffer size.
-+ * @return 0 on success, a negative AVERROR on failure.
-+ *
-+ * @note the buffer is actually reallocated with av_realloc() only if it was
-+ * initially allocated through av_buffer_realloc(NULL) and there is only one
-+ * reference to it (i.e. the one passed to this function). In all other cases
-+ * a new buffer is allocated and the data is copied.
-+ */
-+int av_buffer_realloc(AVBufferRef **buf, int size);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_bufferpool AVBufferPool
-+ * @ingroup lavu_data
-+ *
-+ * @{
-+ * AVBufferPool is an API for a lock-free thread-safe pool of AVBuffers.
-+ *
-+ * Frequently allocating and freeing large buffers may be slow. AVBufferPool is
-+ * meant to solve this in cases when the caller needs a set of buffers of the
-+ * same size (the most obvious use case being buffers for raw video or audio
-+ * frames).
-+ *
-+ * At the beginning, the user must call av_buffer_pool_init() to create the
-+ * buffer pool. Then whenever a buffer is needed, call av_buffer_pool_get() to
-+ * get a reference to a new buffer, similar to av_buffer_alloc(). This new
-+ * reference works in all aspects the same way as the one created by
-+ * av_buffer_alloc(). However, when the last reference to this buffer is
-+ * unreferenced, it is returned to the pool instead of being freed and will be
-+ * reused for subsequent av_buffer_pool_get() calls.
-+ *
-+ * When the caller is done with the pool and no longer needs to allocate any new
-+ * buffers, av_buffer_pool_uninit() must be called to mark the pool as freeable.
-+ * Once all the buffers are released, it will automatically be freed.
-+ *
-+ * Allocating and releasing buffers with this API is thread-safe as long as
-+ * either the default alloc callback is used, or the user-supplied one is
-+ * thread-safe.
-+ */
-+
-+/**
-+ * The buffer pool. This structure is opaque and not meant to be accessed
-+ * directly. It is allocated with av_buffer_pool_init() and freed with
-+ * av_buffer_pool_uninit().
-+ */
-+typedef struct AVBufferPool AVBufferPool;
-+
-+/**
-+ * Allocate and initialize a buffer pool.
-+ *
-+ * @param size size of each buffer in this pool
-+ * @param alloc a function that will be used to allocate new buffers when the
-+ * pool is empty. May be NULL, then the default allocator will be used
-+ * (av_buffer_alloc()).
-+ * @return newly created buffer pool on success, NULL on error.
-+ */
-+AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size));
-+
-+/**
-+ * Allocate and initialize a buffer pool with a more complex allocator.
-+ *
-+ * @param size size of each buffer in this pool
-+ * @param opaque arbitrary user data used by the allocator
-+ * @param alloc a function that will be used to allocate new buffers when the
-+ *              pool is empty.
-+ * @param pool_free a function that will be called immediately before the pool
-+ *                  is freed. I.e. after av_buffer_pool_uninit() is called
-+ *                  by the caller and all the frames are returned to the pool
-+ *                  and freed. It is intended to uninitialize the user opaque
-+ *                  data.
-+ * @return newly created buffer pool on success, NULL on error.
-+ */
-+AVBufferPool *av_buffer_pool_init2(int size, void *opaque,
-+                                   AVBufferRef* (*alloc)(void *opaque, int size),
-+                                   void (*pool_free)(void *opaque));
-+
-+/**
-+ * Mark the pool as being available for freeing. It will actually be freed only
-+ * once all the allocated buffers associated with the pool are released. Thus it
-+ * is safe to call this function while some of the allocated buffers are still
-+ * in use.
-+ *
-+ * @param pool pointer to the pool to be freed. It will be set to NULL.
-+ */
-+void av_buffer_pool_uninit(AVBufferPool **pool);
-+
-+/**
-+ * Allocate a new AVBuffer, reusing an old buffer from the pool when available.
-+ * This function may be called simultaneously from multiple threads.
-+ *
-+ * @return a reference to the new buffer on success, NULL on error.
-+ */
-+AVBufferRef *av_buffer_pool_get(AVBufferPool *pool);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_BUFFER_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/channel_layout.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/channel_layout.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/channel_layout.h
-@@ -0,0 +1,232 @@
-+/*
-+ * Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ * Copyright (c) 2008 Peter Ross
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_CHANNEL_LAYOUT_H
-+#define AVUTIL_CHANNEL_LAYOUT_H
-+
-+#include <stdint.h>
-+
-+/**
-+ * @file
-+ * audio channel layout utility functions
-+ */
-+
-+/**
-+ * @addtogroup lavu_audio
-+ * @{
-+ */
-+
-+/**
-+ * @defgroup channel_masks Audio channel masks
-+ *
-+ * A channel layout is a 64-bits integer with a bit set for every channel.
-+ * The number of bits set must be equal to the number of channels.
-+ * The value 0 means that the channel layout is not known.
-+ * @note this data structure is not powerful enough to handle channels
-+ * combinations that have the same channel multiple times, such as
-+ * dual-mono.
-+ *
-+ * @{
-+ */
-+#define AV_CH_FRONT_LEFT             0x00000001
-+#define AV_CH_FRONT_RIGHT            0x00000002
-+#define AV_CH_FRONT_CENTER           0x00000004
-+#define AV_CH_LOW_FREQUENCY          0x00000008
-+#define AV_CH_BACK_LEFT              0x00000010
-+#define AV_CH_BACK_RIGHT             0x00000020
-+#define AV_CH_FRONT_LEFT_OF_CENTER   0x00000040
-+#define AV_CH_FRONT_RIGHT_OF_CENTER  0x00000080
-+#define AV_CH_BACK_CENTER            0x00000100
-+#define AV_CH_SIDE_LEFT              0x00000200
-+#define AV_CH_SIDE_RIGHT             0x00000400
-+#define AV_CH_TOP_CENTER             0x00000800
-+#define AV_CH_TOP_FRONT_LEFT         0x00001000
-+#define AV_CH_TOP_FRONT_CENTER       0x00002000
-+#define AV_CH_TOP_FRONT_RIGHT        0x00004000
-+#define AV_CH_TOP_BACK_LEFT          0x00008000
-+#define AV_CH_TOP_BACK_CENTER        0x00010000
-+#define AV_CH_TOP_BACK_RIGHT         0x00020000
-+#define AV_CH_STEREO_LEFT            0x20000000  ///< Stereo downmix.
-+#define AV_CH_STEREO_RIGHT           0x40000000  ///< See AV_CH_STEREO_LEFT.
-+#define AV_CH_WIDE_LEFT              0x0000000080000000ULL
-+#define AV_CH_WIDE_RIGHT             0x0000000100000000ULL
-+#define AV_CH_SURROUND_DIRECT_LEFT   0x0000000200000000ULL
-+#define AV_CH_SURROUND_DIRECT_RIGHT  0x0000000400000000ULL
-+#define AV_CH_LOW_FREQUENCY_2        0x0000000800000000ULL
-+
-+/** Channel mask value used for AVCodecContext.request_channel_layout
-+    to indicate that the user requests the channel order of the decoder output
-+    to be the native codec channel order. */
-+#define AV_CH_LAYOUT_NATIVE          0x8000000000000000ULL
-+
-+/**
-+ * @}
-+ * @defgroup channel_mask_c Audio channel layouts
-+ * @{
-+ * */
-+#define AV_CH_LAYOUT_MONO              (AV_CH_FRONT_CENTER)
-+#define AV_CH_LAYOUT_STEREO            (AV_CH_FRONT_LEFT|AV_CH_FRONT_RIGHT)
-+#define AV_CH_LAYOUT_2POINT1           (AV_CH_LAYOUT_STEREO|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_2_1               (AV_CH_LAYOUT_STEREO|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_SURROUND          (AV_CH_LAYOUT_STEREO|AV_CH_FRONT_CENTER)
-+#define AV_CH_LAYOUT_3POINT1           (AV_CH_LAYOUT_SURROUND|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_4POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_4POINT1           (AV_CH_LAYOUT_4POINT0|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_2_2               (AV_CH_LAYOUT_STEREO|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
-+#define AV_CH_LAYOUT_QUAD              (AV_CH_LAYOUT_STEREO|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-+#define AV_CH_LAYOUT_5POINT0           (AV_CH_LAYOUT_SURROUND|AV_CH_SIDE_LEFT|AV_CH_SIDE_RIGHT)
-+#define AV_CH_LAYOUT_5POINT1           (AV_CH_LAYOUT_5POINT0|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_5POINT0_BACK      (AV_CH_LAYOUT_SURROUND|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-+#define AV_CH_LAYOUT_5POINT1_BACK      (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_6POINT0           (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_6POINT0_FRONT     (AV_CH_LAYOUT_2_2|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-+#define AV_CH_LAYOUT_HEXAGONAL         (AV_CH_LAYOUT_5POINT0_BACK|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_6POINT1           (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_6POINT1_BACK      (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_BACK_CENTER)
-+#define AV_CH_LAYOUT_6POINT1_FRONT     (AV_CH_LAYOUT_6POINT0_FRONT|AV_CH_LOW_FREQUENCY)
-+#define AV_CH_LAYOUT_7POINT0           (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-+#define AV_CH_LAYOUT_7POINT0_FRONT     (AV_CH_LAYOUT_5POINT0|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-+#define AV_CH_LAYOUT_7POINT1           (AV_CH_LAYOUT_5POINT1|AV_CH_BACK_LEFT|AV_CH_BACK_RIGHT)
-+#define AV_CH_LAYOUT_7POINT1_WIDE      (AV_CH_LAYOUT_5POINT1|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-+#define AV_CH_LAYOUT_7POINT1_WIDE_BACK (AV_CH_LAYOUT_5POINT1_BACK|AV_CH_FRONT_LEFT_OF_CENTER|AV_CH_FRONT_RIGHT_OF_CENTER)
-+#define AV_CH_LAYOUT_OCTAGONAL         (AV_CH_LAYOUT_5POINT0|AV_CH_BACK_LEFT|AV_CH_BACK_CENTER|AV_CH_BACK_RIGHT)
-+#define AV_CH_LAYOUT_HEXADECAGONAL     (AV_CH_LAYOUT_OCTAGONAL|AV_CH_WIDE_LEFT|AV_CH_WIDE_RIGHT|AV_CH_TOP_BACK_LEFT|AV_CH_TOP_BACK_RIGHT|AV_CH_TOP_BACK_CENTER|AV_CH_TOP_FRONT_CENTER|AV_CH_TOP_FRONT_LEFT|AV_CH_TOP_FRONT_RIGHT)
-+#define AV_CH_LAYOUT_STEREO_DOWNMIX    (AV_CH_STEREO_LEFT|AV_CH_STEREO_RIGHT)
-+
-+enum AVMatrixEncoding {
-+    AV_MATRIX_ENCODING_NONE,
-+    AV_MATRIX_ENCODING_DOLBY,
-+    AV_MATRIX_ENCODING_DPLII,
-+    AV_MATRIX_ENCODING_DPLIIX,
-+    AV_MATRIX_ENCODING_DPLIIZ,
-+    AV_MATRIX_ENCODING_DOLBYEX,
-+    AV_MATRIX_ENCODING_DOLBYHEADPHONE,
-+    AV_MATRIX_ENCODING_NB
-+};
-+
-+/**
-+ * Return a channel layout id that matches name, or 0 if no match is found.
-+ *
-+ * name can be one or several of the following notations,
-+ * separated by '+' or '|':
-+ * - the name of an usual channel layout (mono, stereo, 4.0, quad, 5.0,
-+ *   5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix);
-+ * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC,
-+ *   SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR);
-+ * - a number of channels, in decimal, followed by 'c', yielding
-+ *   the default channel layout for that number of channels (@see
-+ *   av_get_default_channel_layout);
-+ * - a channel layout mask, in hexadecimal starting with "0x" (see the
-+ *   AV_CH_* macros).
-+ *
-+ * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7"
-+ */
-+uint64_t av_get_channel_layout(const char *name);
-+
-+/**
-+ * Return a channel layout and the number of channels based on the specified name.
-+ *
-+ * This function is similar to (@see av_get_channel_layout), but can also parse
-+ * unknown channel layout specifications.
-+ *
-+ * @param[in]  name             channel layout specification string
-+ * @param[out] channel_layout   parsed channel layout (0 if unknown)
-+ * @param[out] nb_channels      number of channels
-+ *
-+ * @return 0 on success, AVERROR(EINVAL) if the parsing fails.
-+ */
-+int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels);
-+
-+/**
-+ * Return a description of a channel layout.
-+ * If nb_channels is <= 0, it is guessed from the channel_layout.
-+ *
-+ * @param buf put here the string containing the channel layout
-+ * @param buf_size size in bytes of the buffer
-+ */
-+void av_get_channel_layout_string(char *buf, int buf_size, int nb_channels, uint64_t channel_layout);
-+
-+struct AVBPrint;
-+/**
-+ * Append a description of a channel layout to a bprint buffer.
-+ */
-+void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout);
-+
-+/**
-+ * Return the number of channels in the channel layout.
-+ */
-+int av_get_channel_layout_nb_channels(uint64_t channel_layout);
-+
-+/**
-+ * Return default channel layout for a given number of channels.
-+ */
-+int64_t av_get_default_channel_layout(int nb_channels);
-+
-+/**
-+ * Get the index of a channel in channel_layout.
-+ *
-+ * @param channel a channel layout describing exactly one channel which must be
-+ *                present in channel_layout.
-+ *
-+ * @return index of channel in channel_layout on success, a negative AVERROR
-+ *         on error.
-+ */
-+int av_get_channel_layout_channel_index(uint64_t channel_layout,
-+                                        uint64_t channel);
-+
-+/**
-+ * Get the channel with the given index in channel_layout.
-+ */
-+uint64_t av_channel_layout_extract_channel(uint64_t channel_layout, int index);
-+
-+/**
-+ * Get the name of a given channel.
-+ *
-+ * @return channel name on success, NULL on error.
-+ */
-+const char *av_get_channel_name(uint64_t channel);
-+
-+/**
-+ * Get the description of a given channel.
-+ *
-+ * @param channel  a channel layout with a single channel
-+ * @return  channel description on success, NULL on error
-+ */
-+const char *av_get_channel_description(uint64_t channel);
-+
-+/**
-+ * Get the value and name of a standard channel layout.
-+ *
-+ * @param[in]  index   index in an internal list, starting at 0
-+ * @param[out] layout  channel layout mask
-+ * @param[out] name    name of the layout
-+ * @return  0  if the layout exists,
-+ *          <0 if index is beyond the limits
-+ */
-+int av_get_standard_channel_layout(unsigned index, uint64_t *layout,
-+                                   const char **name);
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_CHANNEL_LAYOUT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/common.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/common.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/common.h
-@@ -0,0 +1,560 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * common internal and external API header
-+ */
-+
-+#ifndef AVUTIL_COMMON_H
-+#define AVUTIL_COMMON_H
-+
-+#if defined(__cplusplus) && !defined(__STDC_CONSTANT_MACROS) && !defined(UINT64_C)
-+#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS
-+#endif
-+
-+#include <errno.h>
-+#include <inttypes.h>
-+#include <limits.h>
-+#include <math.h>
-+#include <stdint.h>
-+#include <stdio.h>
-+#include <stdlib.h>
-+#include <string.h>
-+
-+#include "attributes.h"
-+#include "macros.h"
-+#include "version.h"
-+#include "libavutil/avconfig.h"
-+
-+#if AV_HAVE_BIGENDIAN
-+#   define AV_NE(be, le) (be)
-+#else
-+#   define AV_NE(be, le) (le)
-+#endif
-+
-+//rounded division & shift
-+#define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b))
-+/* assume b>0 */
-+#define ROUNDED_DIV(a,b) (((a)>0 ? (a) + ((b)>>1) : (a) - ((b)>>1))/(b))
-+/* Fast a/(1<<b) rounded toward +inf. Assume a>=0 and b>=0 */
-+#define AV_CEIL_RSHIFT(a,b) (!av_builtin_constant_p(b) ? -((-(a)) >> (b)) \
-+                                                       : ((a) + (1<<(b)) - 1) >> (b))
-+/* Backwards compat. */
-+#define FF_CEIL_RSHIFT AV_CEIL_RSHIFT
-+
-+#define FFUDIV(a,b) (((a)>0 ?(a):(a)-(b)+1) / (b))
-+#define FFUMOD(a,b) ((a)-(b)*FFUDIV(a,b))
-+
-+/**
-+ * Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they
-+ * are not representable as absolute values of their type. This is the same
-+ * as with *abs()
-+ * @see FFNABS()
-+ */
-+#define FFABS(a) ((a) >= 0 ? (a) : (-(a)))
-+#define FFSIGN(a) ((a) > 0 ? 1 : -1)
-+
-+/**
-+ * Negative Absolute value.
-+ * this works for all integers of all types.
-+ * As with many macros, this evaluates its argument twice, it thus must not have
-+ * a sideeffect, that is FFNABS(x++) has undefined behavior.
-+ */
-+#define FFNABS(a) ((a) <= 0 ? (a) : (-(a)))
-+
-+/**
-+ * Comparator.
-+ * For two numerical expressions x and y, gives 1 if x > y, -1 if x < y, and 0
-+ * if x == y. This is useful for instance in a qsort comparator callback.
-+ * Furthermore, compilers are able to optimize this to branchless code, and
-+ * there is no risk of overflow with signed types.
-+ * As with many macros, this evaluates its argument multiple times, it thus
-+ * must not have a side-effect.
-+ */
-+#define FFDIFFSIGN(x,y) (((x)>(y)) - ((x)<(y)))
-+
-+#define FFMAX(a,b) ((a) > (b) ? (a) : (b))
-+#define FFMAX3(a,b,c) FFMAX(FFMAX(a,b),c)
-+#define FFMIN(a,b) ((a) > (b) ? (b) : (a))
-+#define FFMIN3(a,b,c) FFMIN(FFMIN(a,b),c)
-+
-+#define FFSWAP(type,a,b) do{type SWAP_tmp= b; b= a; a= SWAP_tmp;}while(0)
-+#define FF_ARRAY_ELEMS(a) (sizeof(a) / sizeof((a)[0]))
-+
-+/* misc math functions */
-+
-+#ifdef HAVE_AV_CONFIG_H
-+#   include "config.h"
-+#   include "intmath.h"
-+#endif
-+
-+/* Pull in unguarded fallback defines at the end of this file. */
-+#include "common.h"
-+
-+#ifndef av_log2
-+av_const int av_log2(unsigned v);
-+#endif
-+
-+#ifndef av_log2_16bit
-+av_const int av_log2_16bit(unsigned v);
-+#endif
-+
-+/**
-+ * Clip a signed integer value into the amin-amax range.
-+ * @param a value to clip
-+ * @param amin minimum value of the clip range
-+ * @param amax maximum value of the clip range
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
-+{
-+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
-+    if (amin > amax) abort();
-+#endif
-+    if      (a < amin) return amin;
-+    else if (a > amax) return amax;
-+    else               return a;
-+}
-+
-+/**
-+ * Clip a signed 64bit integer value into the amin-amax range.
-+ * @param a value to clip
-+ * @param amin minimum value of the clip range
-+ * @param amax maximum value of the clip range
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
-+{
-+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
-+    if (amin > amax) abort();
-+#endif
-+    if      (a < amin) return amin;
-+    else if (a > amax) return amax;
-+    else               return a;
-+}
-+
-+/**
-+ * Clip a signed integer value into the 0-255 range.
-+ * @param a value to clip
-+ * @return clipped value
-+ */
-+static av_always_inline av_const uint8_t av_clip_uint8_c(int a)
-+{
-+    if (a&(~0xFF)) return (~a)>>31;
-+    else           return a;
-+}
-+
-+/**
-+ * Clip a signed integer value into the -128,127 range.
-+ * @param a value to clip
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int8_t av_clip_int8_c(int a)
-+{
-+    if ((a+0x80U) & ~0xFF) return (a>>31) ^ 0x7F;
-+    else                  return a;
-+}
-+
-+/**
-+ * Clip a signed integer value into the 0-65535 range.
-+ * @param a value to clip
-+ * @return clipped value
-+ */
-+static av_always_inline av_const uint16_t av_clip_uint16_c(int a)
-+{
-+    if (a&(~0xFFFF)) return (~a)>>31;
-+    else             return a;
-+}
-+
-+/**
-+ * Clip a signed integer value into the -32768,32767 range.
-+ * @param a value to clip
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int16_t av_clip_int16_c(int a)
-+{
-+    if ((a+0x8000U) & ~0xFFFF) return (a>>31) ^ 0x7FFF;
-+    else                      return a;
-+}
-+
-+/**
-+ * Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
-+ * @param a value to clip
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
-+{
-+    if ((a+0x80000000u) & ~UINT64_C(0xFFFFFFFF)) return (int32_t)((a>>63) ^ 0x7FFFFFFF);
-+    else                                         return (int32_t)a;
-+}
-+
-+/**
-+ * Clip a signed integer into the -(2^p),(2^p-1) range.
-+ * @param  a value to clip
-+ * @param  p bit position to clip at
-+ * @return clipped value
-+ */
-+static av_always_inline av_const int av_clip_intp2_c(int a, int p)
-+{
-+    if (((unsigned)a + (1 << p)) & ~((2 << p) - 1))
-+        return (a >> 31) ^ ((1 << p) - 1);
-+    else
-+        return a;
-+}
-+
-+/**
-+ * Clip a signed integer to an unsigned power of two range.
-+ * @param  a value to clip
-+ * @param  p bit position to clip at
-+ * @return clipped value
-+ */
-+static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
-+{
-+    if (a & ~((1<<p) - 1)) return -a >> 31 & ((1<<p) - 1);
-+    else                   return  a;
-+}
-+
-+/**
-+ * Clear high bits from an unsigned integer starting with specific bit position
-+ * @param  a value to clip
-+ * @param  p bit position to clip at
-+ * @return clipped value
-+ */
-+static av_always_inline av_const unsigned av_mod_uintp2_c(unsigned a, unsigned p)
-+{
-+    return a & ((1 << p) - 1);
-+}
-+
-+/**
-+ * Add two signed 32-bit values with saturation.
-+ *
-+ * @param  a one value
-+ * @param  b another value
-+ * @return sum with signed saturation
-+ */
-+static av_always_inline int av_sat_add32_c(int a, int b)
-+{
-+    return av_clipl_int32((int64_t)a + b);
-+}
-+
-+/**
-+ * Add a doubled value to another value with saturation at both stages.
-+ *
-+ * @param  a first value
-+ * @param  b value doubled and added to a
-+ * @return sum sat(a + sat(2*b)) with signed saturation
-+ */
-+static av_always_inline int av_sat_dadd32_c(int a, int b)
-+{
-+    return av_sat_add32(a, av_sat_add32(b, b));
-+}
-+
-+/**
-+ * Subtract two signed 32-bit values with saturation.
-+ *
-+ * @param  a one value
-+ * @param  b another value
-+ * @return difference with signed saturation
-+ */
-+static av_always_inline int av_sat_sub32_c(int a, int b)
-+{
-+    return av_clipl_int32((int64_t)a - b);
-+}
-+
-+/**
-+ * Subtract a doubled value from another value with saturation at both stages.
-+ *
-+ * @param  a first value
-+ * @param  b value doubled and subtracted from a
-+ * @return difference sat(a - sat(2*b)) with signed saturation
-+ */
-+static av_always_inline int av_sat_dsub32_c(int a, int b)
-+{
-+    return av_sat_sub32(a, av_sat_add32(b, b));
-+}
-+
-+/**
-+ * Clip a float value into the amin-amax range.
-+ * @param a value to clip
-+ * @param amin minimum value of the clip range
-+ * @param amax maximum value of the clip range
-+ * @return clipped value
-+ */
-+static av_always_inline av_const float av_clipf_c(float a, float amin, float amax)
-+{
-+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
-+    if (amin > amax) abort();
-+#endif
-+    if      (a < amin) return amin;
-+    else if (a > amax) return amax;
-+    else               return a;
-+}
-+
-+/**
-+ * Clip a double value into the amin-amax range.
-+ * @param a value to clip
-+ * @param amin minimum value of the clip range
-+ * @param amax maximum value of the clip range
-+ * @return clipped value
-+ */
-+static av_always_inline av_const double av_clipd_c(double a, double amin, double amax)
-+{
-+#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
-+    if (amin > amax) abort();
-+#endif
-+    if      (a < amin) return amin;
-+    else if (a > amax) return amax;
-+    else               return a;
-+}
-+
-+/** Compute ceil(log2(x)).
-+ * @param x value used to compute ceil(log2(x))
-+ * @return computed ceiling of log2(x)
-+ */
-+static av_always_inline av_const int av_ceil_log2_c(int x)
-+{
-+    return av_log2((x - 1) << 1);
-+}
-+
-+/**
-+ * Count number of bits set to one in x
-+ * @param x value to count bits of
-+ * @return the number of bits set to one in x
-+ */
-+static av_always_inline av_const int av_popcount_c(uint32_t x)
-+{
-+    x -= (x >> 1) & 0x55555555;
-+    x = (x & 0x33333333) + ((x >> 2) & 0x33333333);
-+    x = (x + (x >> 4)) & 0x0F0F0F0F;
-+    x += x >> 8;
-+    return (x + (x >> 16)) & 0x3F;
-+}
-+
-+/**
-+ * Count number of bits set to one in x
-+ * @param x value to count bits of
-+ * @return the number of bits set to one in x
-+ */
-+static av_always_inline av_const int av_popcount64_c(uint64_t x)
-+{
-+    return av_popcount((uint32_t)x) + av_popcount((uint32_t)(x >> 32));
-+}
-+
-+static av_always_inline av_const int av_parity_c(uint32_t v)
-+{
-+    return av_popcount(v) & 1;
-+}
-+
-+#define MKTAG(a,b,c,d) ((a) | ((b) << 8) | ((c) << 16) | ((unsigned)(d) << 24))
-+#define MKBETAG(a,b,c,d) ((d) | ((c) << 8) | ((b) << 16) | ((unsigned)(a) << 24))
-+
-+/**
-+ * Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
-+ *
-+ * @param val      Output value, must be an lvalue of type uint32_t.
-+ * @param GET_BYTE Expression reading one byte from the input.
-+ *                 Evaluated up to 7 times (4 for the currently
-+ *                 assigned Unicode range).  With a memory buffer
-+ *                 input, this could be *ptr++.
-+ * @param ERROR    Expression to be evaluated on invalid input,
-+ *                 typically a goto statement.
-+ *
-+ * @warning ERROR should not contain a loop control statement which
-+ * could interact with the internal while loop, and should force an
-+ * exit from the macro code (e.g. through a goto or a return) in order
-+ * to prevent undefined results.
-+ */
-+#define GET_UTF8(val, GET_BYTE, ERROR)\
-+    val= (GET_BYTE);\
-+    {\
-+        uint32_t top = (val & 128) >> 1;\
-+        if ((val & 0xc0) == 0x80 || val >= 0xFE)\
-+            ERROR\
-+        while (val & top) {\
-+            int tmp= (GET_BYTE) - 128;\
-+            if(tmp>>6)\
-+                ERROR\
-+            val= (val<<6) + tmp;\
-+            top <<= 5;\
-+        }\
-+        val &= (top << 1) - 1;\
-+    }
-+
-+/**
-+ * Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
-+ *
-+ * @param val       Output value, must be an lvalue of type uint32_t.
-+ * @param GET_16BIT Expression returning two bytes of UTF-16 data converted
-+ *                  to native byte order.  Evaluated one or two times.
-+ * @param ERROR     Expression to be evaluated on invalid input,
-+ *                  typically a goto statement.
-+ */
-+#define GET_UTF16(val, GET_16BIT, ERROR)\
-+    val = GET_16BIT;\
-+    {\
-+        unsigned int hi = val - 0xD800;\
-+        if (hi < 0x800) {\
-+            val = GET_16BIT - 0xDC00;\
-+            if (val > 0x3FFU || hi > 0x3FFU)\
-+                ERROR\
-+            val += (hi<<10) + 0x10000;\
-+        }\
-+    }\
-+
-+/**
-+ * @def PUT_UTF8(val, tmp, PUT_BYTE)
-+ * Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
-+ * @param val is an input-only argument and should be of type uint32_t. It holds
-+ * a UCS-4 encoded Unicode character that is to be converted to UTF-8. If
-+ * val is given as a function it is executed only once.
-+ * @param tmp is a temporary variable and should be of type uint8_t. It
-+ * represents an intermediate value during conversion that is to be
-+ * output by PUT_BYTE.
-+ * @param PUT_BYTE writes the converted UTF-8 bytes to any proper destination.
-+ * It could be a function or a statement, and uses tmp as the input byte.
-+ * For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be
-+ * executed up to 4 times for values in the valid UTF-8 range and up to
-+ * 7 times in the general case, depending on the length of the converted
-+ * Unicode character.
-+ */
-+#define PUT_UTF8(val, tmp, PUT_BYTE)\
-+    {\
-+        int bytes, shift;\
-+        uint32_t in = val;\
-+        if (in < 0x80) {\
-+            tmp = in;\
-+            PUT_BYTE\
-+        } else {\
-+            bytes = (av_log2(in) + 4) / 5;\
-+            shift = (bytes - 1) * 6;\
-+            tmp = (256 - (256 >> bytes)) | (in >> shift);\
-+            PUT_BYTE\
-+            while (shift >= 6) {\
-+                shift -= 6;\
-+                tmp = 0x80 | ((in >> shift) & 0x3f);\
-+                PUT_BYTE\
-+            }\
-+        }\
-+    }
-+
-+/**
-+ * @def PUT_UTF16(val, tmp, PUT_16BIT)
-+ * Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
-+ * @param val is an input-only argument and should be of type uint32_t. It holds
-+ * a UCS-4 encoded Unicode character that is to be converted to UTF-16. If
-+ * val is given as a function it is executed only once.
-+ * @param tmp is a temporary variable and should be of type uint16_t. It
-+ * represents an intermediate value during conversion that is to be
-+ * output by PUT_16BIT.
-+ * @param PUT_16BIT writes the converted UTF-16 data to any proper destination
-+ * in desired endianness. It could be a function or a statement, and uses tmp
-+ * as the input byte.  For example, PUT_BYTE could be "*output++ = tmp;"
-+ * PUT_BYTE will be executed 1 or 2 times depending on input character.
-+ */
-+#define PUT_UTF16(val, tmp, PUT_16BIT)\
-+    {\
-+        uint32_t in = val;\
-+        if (in < 0x10000) {\
-+            tmp = in;\
-+            PUT_16BIT\
-+        } else {\
-+            tmp = 0xD800 | ((in - 0x10000) >> 10);\
-+            PUT_16BIT\
-+            tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
-+            PUT_16BIT\
-+        }\
-+    }\
-+
-+
-+
-+#include "mem.h"
-+
-+#ifdef HAVE_AV_CONFIG_H
-+#    include "internal.h"
-+#endif /* HAVE_AV_CONFIG_H */
-+
-+#endif /* AVUTIL_COMMON_H */
-+
-+/*
-+ * The following definitions are outside the multiple inclusion guard
-+ * to ensure they are immediately available in intmath.h.
-+ */
-+
-+#ifndef av_ceil_log2
-+#   define av_ceil_log2     av_ceil_log2_c
-+#endif
-+#ifndef av_clip
-+#   define av_clip          av_clip_c
-+#endif
-+#ifndef av_clip64
-+#   define av_clip64        av_clip64_c
-+#endif
-+#ifndef av_clip_uint8
-+#   define av_clip_uint8    av_clip_uint8_c
-+#endif
-+#ifndef av_clip_int8
-+#   define av_clip_int8     av_clip_int8_c
-+#endif
-+#ifndef av_clip_uint16
-+#   define av_clip_uint16   av_clip_uint16_c
-+#endif
-+#ifndef av_clip_int16
-+#   define av_clip_int16    av_clip_int16_c
-+#endif
-+#ifndef av_clipl_int32
-+#   define av_clipl_int32   av_clipl_int32_c
-+#endif
-+#ifndef av_clip_intp2
-+#   define av_clip_intp2    av_clip_intp2_c
-+#endif
-+#ifndef av_clip_uintp2
-+#   define av_clip_uintp2   av_clip_uintp2_c
-+#endif
-+#ifndef av_mod_uintp2
-+#   define av_mod_uintp2    av_mod_uintp2_c
-+#endif
-+#ifndef av_sat_add32
-+#   define av_sat_add32     av_sat_add32_c
-+#endif
-+#ifndef av_sat_dadd32
-+#   define av_sat_dadd32    av_sat_dadd32_c
-+#endif
-+#ifndef av_sat_sub32
-+#   define av_sat_sub32     av_sat_sub32_c
-+#endif
-+#ifndef av_sat_dsub32
-+#   define av_sat_dsub32    av_sat_dsub32_c
-+#endif
-+#ifndef av_clipf
-+#   define av_clipf         av_clipf_c
-+#endif
-+#ifndef av_clipd
-+#   define av_clipd         av_clipd_c
-+#endif
-+#ifndef av_popcount
-+#   define av_popcount      av_popcount_c
-+#endif
-+#ifndef av_popcount64
-+#   define av_popcount64    av_popcount64_c
-+#endif
-+#ifndef av_parity
-+#   define av_parity        av_parity_c
-+#endif
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/cpu.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/cpu.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/cpu.h
-@@ -0,0 +1,130 @@
-+/*
-+ * Copyright (c) 2000, 2001, 2002 Fabrice Bellard
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_CPU_H
-+#define AVUTIL_CPU_H
-+
-+#include <stddef.h>
-+
-+#include "attributes.h"
-+
-+#define AV_CPU_FLAG_FORCE    0x80000000 /* force usage of selected flags (OR) */
-+
-+    /* lower 16 bits - CPU features */
-+#define AV_CPU_FLAG_MMX          0x0001 ///< standard MMX
-+#define AV_CPU_FLAG_MMXEXT       0x0002 ///< SSE integer functions or AMD MMX ext
-+#define AV_CPU_FLAG_MMX2         0x0002 ///< SSE integer functions or AMD MMX ext
-+#define AV_CPU_FLAG_3DNOW        0x0004 ///< AMD 3DNOW
-+#define AV_CPU_FLAG_SSE          0x0008 ///< SSE functions
-+#define AV_CPU_FLAG_SSE2         0x0010 ///< PIV SSE2 functions
-+#define AV_CPU_FLAG_SSE2SLOW 0x40000000 ///< SSE2 supported, but usually not faster
-+                                        ///< than regular MMX/SSE (e.g. Core1)
-+#define AV_CPU_FLAG_3DNOWEXT     0x0020 ///< AMD 3DNowExt
-+#define AV_CPU_FLAG_SSE3         0x0040 ///< Prescott SSE3 functions
-+#define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster
-+                                        ///< than regular MMX/SSE (e.g. Core1)
-+#define AV_CPU_FLAG_SSSE3        0x0080 ///< Conroe SSSE3 functions
-+#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster
-+#define AV_CPU_FLAG_ATOM     0x10000000 ///< Atom processor, some SSSE3 instructions are slower
-+#define AV_CPU_FLAG_SSE4         0x0100 ///< Penryn SSE4.1 functions
-+#define AV_CPU_FLAG_SSE42        0x0200 ///< Nehalem SSE4.2 functions
-+#define AV_CPU_FLAG_AESNI       0x80000 ///< Advanced Encryption Standard functions
-+#define AV_CPU_FLAG_AVX          0x4000 ///< AVX functions: requires OS support even if YMM registers aren't used
-+#define AV_CPU_FLAG_AVXSLOW   0x8000000 ///< AVX supported, but slow when using YMM registers (e.g. Bulldozer)
-+#define AV_CPU_FLAG_XOP          0x0400 ///< Bulldozer XOP functions
-+#define AV_CPU_FLAG_FMA4         0x0800 ///< Bulldozer FMA4 functions
-+#define AV_CPU_FLAG_CMOV         0x1000 ///< supports cmov instruction
-+#define AV_CPU_FLAG_AVX2         0x8000 ///< AVX2 functions: requires OS support even if YMM registers aren't used
-+#define AV_CPU_FLAG_FMA3        0x10000 ///< Haswell FMA3 functions
-+#define AV_CPU_FLAG_BMI1        0x20000 ///< Bit Manipulation Instruction Set 1
-+#define AV_CPU_FLAG_BMI2        0x40000 ///< Bit Manipulation Instruction Set 2
-+#define AV_CPU_FLAG_AVX512     0x100000 ///< AVX-512 functions: requires OS support even if YMM/ZMM registers aren't used
-+
-+#define AV_CPU_FLAG_ALTIVEC      0x0001 ///< standard
-+#define AV_CPU_FLAG_VSX          0x0002 ///< ISA 2.06
-+#define AV_CPU_FLAG_POWER8       0x0004 ///< ISA 2.07
-+
-+#define AV_CPU_FLAG_ARMV5TE      (1 << 0)
-+#define AV_CPU_FLAG_ARMV6        (1 << 1)
-+#define AV_CPU_FLAG_ARMV6T2      (1 << 2)
-+#define AV_CPU_FLAG_VFP          (1 << 3)
-+#define AV_CPU_FLAG_VFPV3        (1 << 4)
-+#define AV_CPU_FLAG_NEON         (1 << 5)
-+#define AV_CPU_FLAG_ARMV8        (1 << 6)
-+#define AV_CPU_FLAG_VFP_VM       (1 << 7) ///< VFPv2 vector mode, deprecated in ARMv7-A and unavailable in various CPUs implementations
-+#define AV_CPU_FLAG_SETEND       (1 <<16)
-+
-+/**
-+ * Return the flags which specify extensions supported by the CPU.
-+ * The returned value is affected by av_force_cpu_flags() if that was used
-+ * before. So av_get_cpu_flags() can easily be used in an application to
-+ * detect the enabled cpu flags.
-+ */
-+int av_get_cpu_flags(void);
-+
-+/**
-+ * Disables cpu detection and forces the specified flags.
-+ * -1 is a special case that disables forcing of specific flags.
-+ */
-+void av_force_cpu_flags(int flags);
-+
-+/**
-+ * Set a mask on flags returned by av_get_cpu_flags().
-+ * This function is mainly useful for testing.
-+ * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible
-+ */
-+attribute_deprecated void av_set_cpu_flags_mask(int mask);
-+
-+/**
-+ * Parse CPU flags from a string.
-+ *
-+ * The returned flags contain the specified flags as well as related unspecified flags.
-+ *
-+ * This function exists only for compatibility with libav.
-+ * Please use av_parse_cpu_caps() when possible.
-+ * @return a combination of AV_CPU_* flags, negative on error.
-+ */
-+attribute_deprecated
-+int av_parse_cpu_flags(const char *s);
-+
-+/**
-+ * Parse CPU caps from a string and update the given AV_CPU_* flags based on that.
-+ *
-+ * @return negative on error.
-+ */
-+int av_parse_cpu_caps(unsigned *flags, const char *s);
-+
-+/**
-+ * @return the number of logical CPU cores present.
-+ */
-+int av_cpu_count(void);
-+
-+/**
-+ * Get the maximum data alignment that may be required by FFmpeg.
-+ *
-+ * Note that this is affected by the build configuration and the CPU flags mask,
-+ * so e.g. if the CPU supports AVX, but libavutil has been built with
-+ * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through
-+ *  av_set_cpu_flags_mask(), then this function will behave as if AVX is not
-+ *  present.
-+ */
-+size_t av_cpu_max_align(void);
-+
-+#endif /* AVUTIL_CPU_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/dict.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/dict.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/dict.h
-@@ -0,0 +1,200 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * Public dictionary API.
-+ * @deprecated
-+ *  AVDictionary is provided for compatibility with libav. It is both in
-+ *  implementation as well as API inefficient. It does not scale and is
-+ *  extremely slow with large dictionaries.
-+ *  It is recommended that new code uses our tree container from tree.c/h
-+ *  where applicable, which uses AVL trees to achieve O(log n) performance.
-+ */
-+
-+#ifndef AVUTIL_DICT_H
-+#define AVUTIL_DICT_H
-+
-+#include <stdint.h>
-+
-+#include "version.h"
-+
-+/**
-+ * @addtogroup lavu_dict AVDictionary
-+ * @ingroup lavu_data
-+ *
-+ * @brief Simple key:value store
-+ *
-+ * @{
-+ * Dictionaries are used for storing key:value pairs. To create
-+ * an AVDictionary, simply pass an address of a NULL pointer to
-+ * av_dict_set(). NULL can be used as an empty dictionary wherever
-+ * a pointer to an AVDictionary is required.
-+ * Use av_dict_get() to retrieve an entry or iterate over all
-+ * entries and finally av_dict_free() to free the dictionary
-+ * and all its contents.
-+ *
-+ @code
-+   AVDictionary *d = NULL;           // "create" an empty dictionary
-+   AVDictionaryEntry *t = NULL;
-+
-+   av_dict_set(&d, "foo", "bar", 0); // add an entry
-+
-+   char *k = av_strdup("key");       // if your strings are already allocated,
-+   char *v = av_strdup("value");     // you can avoid copying them like this
-+   av_dict_set(&d, k, v, AV_DICT_DONT_STRDUP_KEY | AV_DICT_DONT_STRDUP_VAL);
-+
-+   while (t = av_dict_get(d, "", t, AV_DICT_IGNORE_SUFFIX)) {
-+       <....>                             // iterate over all entries in d
-+   }
-+   av_dict_free(&d);
-+ @endcode
-+ */
-+
-+#define AV_DICT_MATCH_CASE      1   /**< Only get an entry with exact-case key match. Only relevant in av_dict_get(). */
-+#define AV_DICT_IGNORE_SUFFIX   2   /**< Return first entry in a dictionary whose first part corresponds to the search key,
-+                                         ignoring the suffix of the found key string. Only relevant in av_dict_get(). */
-+#define AV_DICT_DONT_STRDUP_KEY 4   /**< Take ownership of a key that's been
-+                                         allocated with av_malloc() or another memory allocation function. */
-+#define AV_DICT_DONT_STRDUP_VAL 8   /**< Take ownership of a value that's been
-+                                         allocated with av_malloc() or another memory allocation function. */
-+#define AV_DICT_DONT_OVERWRITE 16   ///< Don't overwrite existing entries.
-+#define AV_DICT_APPEND         32   /**< If the entry already exists, append to it.  Note that no
-+                                      delimiter is added, the strings are simply concatenated. */
-+#define AV_DICT_MULTIKEY       64   /**< Allow to store several equal keys in the dictionary */
-+
-+typedef struct AVDictionaryEntry {
-+    char *key;
-+    char *value;
-+} AVDictionaryEntry;
-+
-+typedef struct AVDictionary AVDictionary;
-+
-+/**
-+ * Get a dictionary entry with matching key.
-+ *
-+ * The returned entry key or value must not be changed, or it will
-+ * cause undefined behavior.
-+ *
-+ * To iterate through all the dictionary entries, you can set the matching key
-+ * to the null string "" and set the AV_DICT_IGNORE_SUFFIX flag.
-+ *
-+ * @param prev Set to the previous matching element to find the next.
-+ *             If set to NULL the first matching element is returned.
-+ * @param key matching key
-+ * @param flags a collection of AV_DICT_* flags controlling how the entry is retrieved
-+ * @return found entry or NULL in case no matching entry was found in the dictionary
-+ */
-+AVDictionaryEntry *av_dict_get(const AVDictionary *m, const char *key,
-+                               const AVDictionaryEntry *prev, int flags);
-+
-+/**
-+ * Get number of entries in dictionary.
-+ *
-+ * @param m dictionary
-+ * @return  number of entries in dictionary
-+ */
-+int av_dict_count(const AVDictionary *m);
-+
-+/**
-+ * Set the given entry in *pm, overwriting an existing entry.
-+ *
-+ * Note: If AV_DICT_DONT_STRDUP_KEY or AV_DICT_DONT_STRDUP_VAL is set,
-+ * these arguments will be freed on error.
-+ *
-+ * Warning: Adding a new entry to a dictionary invalidates all existing entries
-+ * previously returned with av_dict_get.
-+ *
-+ * @param pm pointer to a pointer to a dictionary struct. If *pm is NULL
-+ * a dictionary struct is allocated and put in *pm.
-+ * @param key entry key to add to *pm (will either be av_strduped or added as a new key depending on flags)
-+ * @param value entry value to add to *pm (will be av_strduped or added as a new key depending on flags).
-+ *        Passing a NULL value will cause an existing entry to be deleted.
-+ * @return >= 0 on success otherwise an error code <0
-+ */
-+int av_dict_set(AVDictionary **pm, const char *key, const char *value, int flags);
-+
-+/**
-+ * Convenience wrapper for av_dict_set that converts the value to a string
-+ * and stores it.
-+ *
-+ * Note: If AV_DICT_DONT_STRDUP_KEY is set, key will be freed on error.
-+ */
-+int av_dict_set_int(AVDictionary **pm, const char *key, int64_t value, int flags);
-+
-+/**
-+ * Parse the key/value pairs list and add the parsed entries to a dictionary.
-+ *
-+ * In case of failure, all the successfully set entries are stored in
-+ * *pm. You may need to manually free the created dictionary.
-+ *
-+ * @param key_val_sep  a 0-terminated list of characters used to separate
-+ *                     key from value
-+ * @param pairs_sep    a 0-terminated list of characters used to separate
-+ *                     two pairs from each other
-+ * @param flags        flags to use when adding to dictionary.
-+ *                     AV_DICT_DONT_STRDUP_KEY and AV_DICT_DONT_STRDUP_VAL
-+ *                     are ignored since the key/value tokens will always
-+ *                     be duplicated.
-+ * @return             0 on success, negative AVERROR code on failure
-+ */
-+int av_dict_parse_string(AVDictionary **pm, const char *str,
-+                         const char *key_val_sep, const char *pairs_sep,
-+                         int flags);
-+
-+/**
-+ * Copy entries from one AVDictionary struct into another.
-+ * @param dst pointer to a pointer to a AVDictionary struct. If *dst is NULL,
-+ *            this function will allocate a struct for you and put it in *dst
-+ * @param src pointer to source AVDictionary struct
-+ * @param flags flags to use when setting entries in *dst
-+ * @note metadata is read using the AV_DICT_IGNORE_SUFFIX flag
-+ * @return 0 on success, negative AVERROR code on failure. If dst was allocated
-+ *           by this function, callers should free the associated memory.
-+ */
-+int av_dict_copy(AVDictionary **dst, const AVDictionary *src, int flags);
-+
-+/**
-+ * Free all the memory allocated for an AVDictionary struct
-+ * and all keys and values.
-+ */
-+void av_dict_free(AVDictionary **m);
-+
-+/**
-+ * Get dictionary entries as a string.
-+ *
-+ * Create a string containing dictionary's entries.
-+ * Such string may be passed back to av_dict_parse_string().
-+ * @note String is escaped with backslashes ('\').
-+ *
-+ * @param[in]  m             dictionary
-+ * @param[out] buffer        Pointer to buffer that will be allocated with string containg entries.
-+ *                           Buffer must be freed by the caller when is no longer needed.
-+ * @param[in]  key_val_sep   character used to separate key from value
-+ * @param[in]  pairs_sep     character used to separate two pairs from each other
-+ * @return                   >= 0 on success, negative on error
-+ * @warning Separators cannot be neither '\\' nor '\0'. They also cannot be the same.
-+ */
-+int av_dict_get_string(const AVDictionary *m, char **buffer,
-+                       const char key_val_sep, const char pairs_sep);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_DICT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/error.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/error.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/error.h
-@@ -0,0 +1,126 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * error code definitions
-+ */
-+
-+#ifndef AVUTIL_ERROR_H
-+#define AVUTIL_ERROR_H
-+
-+#include <errno.h>
-+#include <stddef.h>
-+
-+/**
-+ * @addtogroup lavu_error
-+ *
-+ * @{
-+ */
-+
-+
-+/* error handling */
-+#if EDOM > 0
-+#define AVERROR(e) (-(e))   ///< Returns a negative error code from a POSIX error code, to return from library functions.
-+#define AVUNERROR(e) (-(e)) ///< Returns a POSIX error code from a library function error return value.
-+#else
-+/* Some platforms have E* and errno already negated. */
-+#define AVERROR(e) (e)
-+#define AVUNERROR(e) (e)
-+#endif
-+
-+#define FFERRTAG(a, b, c, d) (-(int)MKTAG(a, b, c, d))
-+
-+#define AVERROR_BSF_NOT_FOUND      FFERRTAG(0xF8,'B','S','F') ///< Bitstream filter not found
-+#define AVERROR_BUG                FFERRTAG( 'B','U','G','!') ///< Internal bug, also see AVERROR_BUG2
-+#define AVERROR_BUFFER_TOO_SMALL   FFERRTAG( 'B','U','F','S') ///< Buffer too small
-+#define AVERROR_DECODER_NOT_FOUND  FFERRTAG(0xF8,'D','E','C') ///< Decoder not found
-+#define AVERROR_DEMUXER_NOT_FOUND  FFERRTAG(0xF8,'D','E','M') ///< Demuxer not found
-+#define AVERROR_ENCODER_NOT_FOUND  FFERRTAG(0xF8,'E','N','C') ///< Encoder not found
-+#define AVERROR_EOF                FFERRTAG( 'E','O','F',' ') ///< End of file
-+#define AVERROR_EXIT               FFERRTAG( 'E','X','I','T') ///< Immediate exit was requested; the called function should not be restarted
-+#define AVERROR_EXTERNAL           FFERRTAG( 'E','X','T',' ') ///< Generic error in an external library
-+#define AVERROR_FILTER_NOT_FOUND   FFERRTAG(0xF8,'F','I','L') ///< Filter not found
-+#define AVERROR_INVALIDDATA        FFERRTAG( 'I','N','D','A') ///< Invalid data found when processing input
-+#define AVERROR_MUXER_NOT_FOUND    FFERRTAG(0xF8,'M','U','X') ///< Muxer not found
-+#define AVERROR_OPTION_NOT_FOUND   FFERRTAG(0xF8,'O','P','T') ///< Option not found
-+#define AVERROR_PATCHWELCOME       FFERRTAG( 'P','A','W','E') ///< Not yet implemented in FFmpeg, patches welcome
-+#define AVERROR_PROTOCOL_NOT_FOUND FFERRTAG(0xF8,'P','R','O') ///< Protocol not found
-+
-+#define AVERROR_STREAM_NOT_FOUND   FFERRTAG(0xF8,'S','T','R') ///< Stream not found
-+/**
-+ * This is semantically identical to AVERROR_BUG
-+ * it has been introduced in Libav after our AVERROR_BUG and with a modified value.
-+ */
-+#define AVERROR_BUG2               FFERRTAG( 'B','U','G',' ')
-+#define AVERROR_UNKNOWN            FFERRTAG( 'U','N','K','N') ///< Unknown error, typically from an external library
-+#define AVERROR_EXPERIMENTAL       (-0x2bb2afa8) ///< Requested feature is flagged experimental. Set strict_std_compliance if you really want to use it.
-+#define AVERROR_INPUT_CHANGED      (-0x636e6701) ///< Input changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_OUTPUT_CHANGED)
-+#define AVERROR_OUTPUT_CHANGED     (-0x636e6702) ///< Output changed between calls. Reconfiguration is required. (can be OR-ed with AVERROR_INPUT_CHANGED)
-+/* HTTP & RTSP errors */
-+#define AVERROR_HTTP_BAD_REQUEST   FFERRTAG(0xF8,'4','0','0')
-+#define AVERROR_HTTP_UNAUTHORIZED  FFERRTAG(0xF8,'4','0','1')
-+#define AVERROR_HTTP_FORBIDDEN     FFERRTAG(0xF8,'4','0','3')
-+#define AVERROR_HTTP_NOT_FOUND     FFERRTAG(0xF8,'4','0','4')
-+#define AVERROR_HTTP_OTHER_4XX     FFERRTAG(0xF8,'4','X','X')
-+#define AVERROR_HTTP_SERVER_ERROR  FFERRTAG(0xF8,'5','X','X')
-+
-+#define AV_ERROR_MAX_STRING_SIZE 64
-+
-+/**
-+ * Put a description of the AVERROR code errnum in errbuf.
-+ * In case of failure the global variable errno is set to indicate the
-+ * error. Even in case of failure av_strerror() will print a generic
-+ * error message indicating the errnum provided to errbuf.
-+ *
-+ * @param errnum      error code to describe
-+ * @param errbuf      buffer to which description is written
-+ * @param errbuf_size the size in bytes of errbuf
-+ * @return 0 on success, a negative value if a description for errnum
-+ * cannot be found
-+ */
-+int av_strerror(int errnum, char *errbuf, size_t errbuf_size);
-+
-+/**
-+ * Fill the provided buffer with a string containing an error string
-+ * corresponding to the AVERROR code errnum.
-+ *
-+ * @param errbuf         a buffer
-+ * @param errbuf_size    size in bytes of errbuf
-+ * @param errnum         error code to describe
-+ * @return the buffer in input, filled with the error description
-+ * @see av_strerror()
-+ */
-+static inline char *av_make_error_string(char *errbuf, size_t errbuf_size, int errnum)
-+{
-+    av_strerror(errnum, errbuf, errbuf_size);
-+    return errbuf;
-+}
-+
-+/**
-+ * Convenience macro, the return value should be used only directly in
-+ * function arguments but never stand-alone.
-+ */
-+#define av_err2str(errnum) \
-+    av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_MAX_STRING_SIZE, errnum)
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_ERROR_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/frame.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/frame.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/frame.h
-@@ -0,0 +1,893 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu_frame
-+ * reference-counted frame API
-+ */
-+
-+#ifndef AVUTIL_FRAME_H
-+#define AVUTIL_FRAME_H
-+
-+#include <stddef.h>
-+#include <stdint.h>
-+
-+#include "avutil.h"
-+#include "buffer.h"
-+#include "dict.h"
-+#include "rational.h"
-+#include "samplefmt.h"
-+#include "pixfmt.h"
-+#include "version.h"
-+
-+
-+/**
-+ * @defgroup lavu_frame AVFrame
-+ * @ingroup lavu_data
-+ *
-+ * @{
-+ * AVFrame is an abstraction for reference-counted raw multimedia data.
-+ */
-+
-+enum AVFrameSideDataType {
-+    /**
-+     * The data is the AVPanScan struct defined in libavcodec.
-+     */
-+    AV_FRAME_DATA_PANSCAN,
-+    /**
-+     * ATSC A53 Part 4 Closed Captions.
-+     * A53 CC bitstream is stored as uint8_t in AVFrameSideData.data.
-+     * The number of bytes of CC data is AVFrameSideData.size.
-+     */
-+    AV_FRAME_DATA_A53_CC,
-+    /**
-+     * Stereoscopic 3d metadata.
-+     * The data is the AVStereo3D struct defined in libavutil/stereo3d.h.
-+     */
-+    AV_FRAME_DATA_STEREO3D,
-+    /**
-+     * The data is the AVMatrixEncoding enum defined in libavutil/channel_layout.h.
-+     */
-+    AV_FRAME_DATA_MATRIXENCODING,
-+    /**
-+     * Metadata relevant to a downmix procedure.
-+     * The data is the AVDownmixInfo struct defined in libavutil/downmix_info.h.
-+     */
-+    AV_FRAME_DATA_DOWNMIX_INFO,
-+    /**
-+     * ReplayGain information in the form of the AVReplayGain struct.
-+     */
-+    AV_FRAME_DATA_REPLAYGAIN,
-+    /**
-+     * This side data contains a 3x3 transformation matrix describing an affine
-+     * transformation that needs to be applied to the frame for correct
-+     * presentation.
-+     *
-+     * See libavutil/display.h for a detailed description of the data.
-+     */
-+    AV_FRAME_DATA_DISPLAYMATRIX,
-+    /**
-+     * Active Format Description data consisting of a single byte as specified
-+     * in ETSI TS 101 154 using AVActiveFormatDescription enum.
-+     */
-+    AV_FRAME_DATA_AFD,
-+    /**
-+     * Motion vectors exported by some codecs (on demand through the export_mvs
-+     * flag set in the libavcodec AVCodecContext flags2 option).
-+     * The data is the AVMotionVector struct defined in
-+     * libavutil/motion_vector.h.
-+     */
-+    AV_FRAME_DATA_MOTION_VECTORS,
-+    /**
-+     * Recommmends skipping the specified number of samples. This is exported
-+     * only if the "skip_manual" AVOption is set in libavcodec.
-+     * This has the same format as AV_PKT_DATA_SKIP_SAMPLES.
-+     * @code
-+     * u32le number of samples to skip from start of this packet
-+     * u32le number of samples to skip from end of this packet
-+     * u8    reason for start skip
-+     * u8    reason for end   skip (0=padding silence, 1=convergence)
-+     * @endcode
-+     */
-+    AV_FRAME_DATA_SKIP_SAMPLES,
-+    /**
-+     * This side data must be associated with an audio frame and corresponds to
-+     * enum AVAudioServiceType defined in avcodec.h.
-+     */
-+    AV_FRAME_DATA_AUDIO_SERVICE_TYPE,
-+    /**
-+     * Mastering display metadata associated with a video frame. The payload is
-+     * an AVMasteringDisplayMetadata type and contains information about the
-+     * mastering display color volume.
-+     */
-+    AV_FRAME_DATA_MASTERING_DISPLAY_METADATA,
-+    /**
-+     * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer.
-+     * This is set on the first frame of a GOP that has a temporal reference of 0.
-+     */
-+    AV_FRAME_DATA_GOP_TIMECODE,
-+
-+    /**
-+     * The data represents the AVSphericalMapping structure defined in
-+     * libavutil/spherical.h.
-+     */
-+    AV_FRAME_DATA_SPHERICAL,
-+
-+    /**
-+     * Content light level (based on CTA-861.3). This payload contains data in
-+     * the form of the AVContentLightMetadata struct.
-+     */
-+    AV_FRAME_DATA_CONTENT_LIGHT_LEVEL,
-+
-+    /**
-+     * The data contains an ICC profile as an opaque octet buffer following the
-+     * format described by ISO 15076-1 with an optional name defined in the
-+     * metadata key entry "name".
-+     */
-+    AV_FRAME_DATA_ICC_PROFILE,
-+
-+#if FF_API_FRAME_QP
-+    /**
-+     * Implementation-specific description of the format of AV_FRAME_QP_TABLE_DATA.
-+     * The contents of this side data are undocumented and internal; use
-+     * av_frame_set_qp_table() and av_frame_get_qp_table() to access this in a
-+     * meaningful way instead.
-+     */
-+    AV_FRAME_DATA_QP_TABLE_PROPERTIES,
-+
-+    /**
-+     * Raw QP table data. Its format is described by
-+     * AV_FRAME_DATA_QP_TABLE_PROPERTIES. Use av_frame_set_qp_table() and
-+     * av_frame_get_qp_table() to access this instead.
-+     */
-+    AV_FRAME_DATA_QP_TABLE_DATA,
-+#endif
-+};
-+
-+enum AVActiveFormatDescription {
-+    AV_AFD_SAME         = 8,
-+    AV_AFD_4_3          = 9,
-+    AV_AFD_16_9         = 10,
-+    AV_AFD_14_9         = 11,
-+    AV_AFD_4_3_SP_14_9  = 13,
-+    AV_AFD_16_9_SP_14_9 = 14,
-+    AV_AFD_SP_4_3       = 15,
-+};
-+
-+
-+/**
-+ * Structure to hold side data for an AVFrame.
-+ *
-+ * sizeof(AVFrameSideData) is not a part of the public ABI, so new fields may be added
-+ * to the end with a minor bump.
-+ */
-+typedef struct AVFrameSideData {
-+    enum AVFrameSideDataType type;
-+    uint8_t *data;
-+    int      size;
-+    AVDictionary *metadata;
-+    AVBufferRef *buf;
-+} AVFrameSideData;
-+
-+/**
-+ * This structure describes decoded (raw) audio or video data.
-+ *
-+ * AVFrame must be allocated using av_frame_alloc(). Note that this only
-+ * allocates the AVFrame itself, the buffers for the data must be managed
-+ * through other means (see below).
-+ * AVFrame must be freed with av_frame_free().
-+ *
-+ * AVFrame is typically allocated once and then reused multiple times to hold
-+ * different data (e.g. a single AVFrame to hold frames received from a
-+ * decoder). In such a case, av_frame_unref() will free any references held by
-+ * the frame and reset it to its original clean state before it
-+ * is reused again.
-+ *
-+ * The data described by an AVFrame is usually reference counted through the
-+ * AVBuffer API. The underlying buffer references are stored in AVFrame.buf /
-+ * AVFrame.extended_buf. An AVFrame is considered to be reference counted if at
-+ * least one reference is set, i.e. if AVFrame.buf[0] != NULL. In such a case,
-+ * every single data plane must be contained in one of the buffers in
-+ * AVFrame.buf or AVFrame.extended_buf.
-+ * There may be a single buffer for all the data, or one separate buffer for
-+ * each plane, or anything in between.
-+ *
-+ * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added
-+ * to the end with a minor bump.
-+ *
-+ * Fields can be accessed through AVOptions, the name string used, matches the
-+ * C structure field name for fields accessible through AVOptions. The AVClass
-+ * for AVFrame can be obtained from avcodec_get_frame_class()
-+ */
-+typedef struct AVFrame {
-+#define AV_NUM_DATA_POINTERS 8
-+    /**
-+     * pointer to the picture/channel planes.
-+     * This might be different from the first allocated byte
-+     *
-+     * Some decoders access areas outside 0,0 - width,height, please
-+     * see avcodec_align_dimensions2(). Some filters and swscale can read
-+     * up to 16 bytes beyond the planes, if these filters are to be used,
-+     * then 16 extra bytes must be allocated.
-+     *
-+     * NOTE: Except for hwaccel formats, pointers not needed by the format
-+     * MUST be set to NULL.
-+     */
-+    uint8_t *data[AV_NUM_DATA_POINTERS];
-+
-+    /**
-+     * For video, size in bytes of each picture line.
-+     * For audio, size in bytes of each plane.
-+     *
-+     * For audio, only linesize[0] may be set. For planar audio, each channel
-+     * plane must be the same size.
-+     *
-+     * For video the linesizes should be multiples of the CPUs alignment
-+     * preference, this is 16 or 32 for modern desktop CPUs.
-+     * Some code requires such alignment other code can be slower without
-+     * correct alignment, for yet other it makes no difference.
-+     *
-+     * @note The linesize may be larger than the size of usable data -- there
-+     * may be extra padding present for performance reasons.
-+     */
-+    int linesize[AV_NUM_DATA_POINTERS];
-+
-+    /**
-+     * pointers to the data planes/channels.
-+     *
-+     * For video, this should simply point to data[].
-+     *
-+     * For planar audio, each channel has a separate data pointer, and
-+     * linesize[0] contains the size of each channel buffer.
-+     * For packed audio, there is just one data pointer, and linesize[0]
-+     * contains the total size of the buffer for all channels.
-+     *
-+     * Note: Both data and extended_data should always be set in a valid frame,
-+     * but for planar audio with more channels that can fit in data,
-+     * extended_data must be used in order to access all channels.
-+     */
-+    uint8_t **extended_data;
-+
-+    /**
-+     * @name Video dimensions
-+     * Video frames only. The coded dimensions (in pixels) of the video frame,
-+     * i.e. the size of the rectangle that contains some well-defined values.
-+     *
-+     * @note The part of the frame intended for display/presentation is further
-+     * restricted by the @ref cropping "Cropping rectangle".
-+     * @{
-+     */
-+    int width, height;
-+    /**
-+     * @}
-+     */
-+
-+    /**
-+     * number of audio samples (per channel) described by this frame
-+     */
-+    int nb_samples;
-+
-+    /**
-+     * format of the frame, -1 if unknown or unset
-+     * Values correspond to enum AVPixelFormat for video frames,
-+     * enum AVSampleFormat for audio)
-+     */
-+    int format;
-+
-+    /**
-+     * 1 -> keyframe, 0-> not
-+     */
-+    int key_frame;
-+
-+    /**
-+     * Picture type of the frame.
-+     */
-+    enum AVPictureType pict_type;
-+
-+    /**
-+     * Sample aspect ratio for the video frame, 0/1 if unknown/unspecified.
-+     */
-+    AVRational sample_aspect_ratio;
-+
-+    /**
-+     * Presentation timestamp in time_base units (time when frame should be shown to user).
-+     */
-+    int64_t pts;
-+
-+#if FF_API_PKT_PTS
-+    /**
-+     * PTS copied from the AVPacket that was decoded to produce this frame.
-+     * @deprecated use the pts field instead
-+     */
-+    attribute_deprecated
-+    int64_t pkt_pts;
-+#endif
-+
-+    /**
-+     * DTS copied from the AVPacket that triggered returning this frame. (if frame threading isn't used)
-+     * This is also the Presentation time of this AVFrame calculated from
-+     * only AVPacket.dts values without pts values.
-+     */
-+    int64_t pkt_dts;
-+
-+    /**
-+     * picture number in bitstream order
-+     */
-+    int coded_picture_number;
-+    /**
-+     * picture number in display order
-+     */
-+    int display_picture_number;
-+
-+    /**
-+     * quality (between 1 (good) and FF_LAMBDA_MAX (bad))
-+     */
-+    int quality;
-+
-+    /**
-+     * for some private data of the user
-+     */
-+    void *opaque;
-+
-+#if FF_API_ERROR_FRAME
-+    /**
-+     * @deprecated unused
-+     */
-+    attribute_deprecated
-+    uint64_t error[AV_NUM_DATA_POINTERS];
-+#endif
-+
-+    /**
-+     * When decoding, this signals how much the picture must be delayed.
-+     * extra_delay = repeat_pict / (2*fps)
-+     */
-+    int repeat_pict;
-+
-+    /**
-+     * The content of the picture is interlaced.
-+     */
-+    int interlaced_frame;
-+
-+    /**
-+     * If the content is interlaced, is top field displayed first.
-+     */
-+    int top_field_first;
-+
-+    /**
-+     * Tell user application that palette has changed from previous frame.
-+     */
-+    int palette_has_changed;
-+
-+    /**
-+     * reordered opaque 64 bits (generally an integer or a double precision float
-+     * PTS but can be anything).
-+     * The user sets AVCodecContext.reordered_opaque to represent the input at
-+     * that time,
-+     * the decoder reorders values as needed and sets AVFrame.reordered_opaque
-+     * to exactly one of the values provided by the user through AVCodecContext.reordered_opaque
-+     * @deprecated in favor of pkt_pts
-+     */
-+    int64_t reordered_opaque;
-+
-+    /**
-+     * Sample rate of the audio data.
-+     */
-+    int sample_rate;
-+
-+    /**
-+     * Channel layout of the audio data.
-+     */
-+    uint64_t channel_layout;
-+
-+    /**
-+     * AVBuffer references backing the data for this frame. If all elements of
-+     * this array are NULL, then this frame is not reference counted. This array
-+     * must be filled contiguously -- if buf[i] is non-NULL then buf[j] must
-+     * also be non-NULL for all j < i.
-+     *
-+     * There may be at most one AVBuffer per data plane, so for video this array
-+     * always contains all the references. For planar audio with more than
-+     * AV_NUM_DATA_POINTERS channels, there may be more buffers than can fit in
-+     * this array. Then the extra AVBufferRef pointers are stored in the
-+     * extended_buf array.
-+     */
-+    AVBufferRef *buf[AV_NUM_DATA_POINTERS];
-+
-+    /**
-+     * For planar audio which requires more than AV_NUM_DATA_POINTERS
-+     * AVBufferRef pointers, this array will hold all the references which
-+     * cannot fit into AVFrame.buf.
-+     *
-+     * Note that this is different from AVFrame.extended_data, which always
-+     * contains all the pointers. This array only contains the extra pointers,
-+     * which cannot fit into AVFrame.buf.
-+     *
-+     * This array is always allocated using av_malloc() by whoever constructs
-+     * the frame. It is freed in av_frame_unref().
-+     */
-+    AVBufferRef **extended_buf;
-+    /**
-+     * Number of elements in extended_buf.
-+     */
-+    int        nb_extended_buf;
-+
-+    AVFrameSideData **side_data;
-+    int            nb_side_data;
-+
-+/**
-+ * @defgroup lavu_frame_flags AV_FRAME_FLAGS
-+ * @ingroup lavu_frame
-+ * Flags describing additional frame properties.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * The frame data may be corrupted, e.g. due to decoding errors.
-+ */
-+#define AV_FRAME_FLAG_CORRUPT       (1 << 0)
-+/**
-+ * A flag to mark the frames which need to be decoded, but shouldn't be output.
-+ */
-+#define AV_FRAME_FLAG_DISCARD   (1 << 2)
-+/**
-+ * @}
-+ */
-+
-+    /**
-+     * Frame flags, a combination of @ref lavu_frame_flags
-+     */
-+    int flags;
-+
-+    /**
-+     * MPEG vs JPEG YUV range.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorRange color_range;
-+
-+    enum AVColorPrimaries color_primaries;
-+
-+    enum AVColorTransferCharacteristic color_trc;
-+
-+    /**
-+     * YUV colorspace type.
-+     * - encoding: Set by user
-+     * - decoding: Set by libavcodec
-+     */
-+    enum AVColorSpace colorspace;
-+
-+    enum AVChromaLocation chroma_location;
-+
-+    /**
-+     * frame timestamp estimated using various heuristics, in stream time base
-+     * - encoding: unused
-+     * - decoding: set by libavcodec, read by user.
-+     */
-+    int64_t best_effort_timestamp;
-+
-+    /**
-+     * reordered pos from the last AVPacket that has been input into the decoder
-+     * - encoding: unused
-+     * - decoding: Read by user.
-+     */
-+    int64_t pkt_pos;
-+
-+    /**
-+     * duration of the corresponding packet, expressed in
-+     * AVStream->time_base units, 0 if unknown.
-+     * - encoding: unused
-+     * - decoding: Read by user.
-+     */
-+    int64_t pkt_duration;
-+
-+    /**
-+     * metadata.
-+     * - encoding: Set by user.
-+     * - decoding: Set by libavcodec.
-+     */
-+    AVDictionary *metadata;
-+
-+    /**
-+     * decode error flags of the frame, set to a combination of
-+     * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there
-+     * were errors during the decoding.
-+     * - encoding: unused
-+     * - decoding: set by libavcodec, read by user.
-+     */
-+    int decode_error_flags;
-+#define FF_DECODE_ERROR_INVALID_BITSTREAM   1
-+#define FF_DECODE_ERROR_MISSING_REFERENCE   2
-+
-+    /**
-+     * number of audio channels, only used for audio.
-+     * - encoding: unused
-+     * - decoding: Read by user.
-+     */
-+    int channels;
-+
-+    /**
-+     * size of the corresponding packet containing the compressed
-+     * frame.
-+     * It is set to a negative value if unknown.
-+     * - encoding: unused
-+     * - decoding: set by libavcodec, read by user.
-+     */
-+    int pkt_size;
-+
-+#if FF_API_FRAME_QP
-+    /**
-+     * QP table
-+     */
-+    attribute_deprecated
-+    int8_t *qscale_table;
-+    /**
-+     * QP store stride
-+     */
-+    attribute_deprecated
-+    int qstride;
-+
-+    attribute_deprecated
-+    int qscale_type;
-+
-+    attribute_deprecated
-+    AVBufferRef *qp_table_buf;
-+#endif
-+    /**
-+     * For hwaccel-format frames, this should be a reference to the
-+     * AVHWFramesContext describing the frame.
-+     */
-+    AVBufferRef *hw_frames_ctx;
-+
-+    /**
-+     * AVBufferRef for free use by the API user. FFmpeg will never check the
-+     * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when
-+     * the frame is unreferenced. av_frame_copy_props() calls create a new
-+     * reference with av_buffer_ref() for the target frame's opaque_ref field.
-+     *
-+     * This is unrelated to the opaque field, although it serves a similar
-+     * purpose.
-+     */
-+    AVBufferRef *opaque_ref;
-+
-+    /**
-+     * @anchor cropping
-+     * @name Cropping
-+     * Video frames only. The number of pixels to discard from the the
-+     * top/bottom/left/right border of the frame to obtain the sub-rectangle of
-+     * the frame intended for presentation.
-+     * @{
-+     */
-+    size_t crop_top;
-+    size_t crop_bottom;
-+    size_t crop_left;
-+    size_t crop_right;
-+    /**
-+     * @}
-+     */
-+
-+    /**
-+     * AVBufferRef for internal use by a single libav* library.
-+     * Must not be used to transfer data between libraries.
-+     * Has to be NULL when ownership of the frame leaves the respective library.
-+     *
-+     * Code outside the FFmpeg libs should never check or change the contents of the buffer ref.
-+     *
-+     * FFmpeg calls av_buffer_unref() on it when the frame is unreferenced.
-+     * av_frame_copy_props() calls create a new reference with av_buffer_ref()
-+     * for the target frame's private_ref field.
-+     */
-+    AVBufferRef *private_ref;
-+} AVFrame;
-+
-+#if FF_API_FRAME_GET_SET
-+/**
-+ * Accessors for some AVFrame fields. These used to be provided for ABI
-+ * compatibility, and do not need to be used anymore.
-+ */
-+attribute_deprecated
-+int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val);
-+attribute_deprecated
-+int64_t av_frame_get_pkt_duration         (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_pkt_duration         (AVFrame *frame, int64_t val);
-+attribute_deprecated
-+int64_t av_frame_get_pkt_pos              (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_pkt_pos              (AVFrame *frame, int64_t val);
-+attribute_deprecated
-+int64_t av_frame_get_channel_layout       (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_channel_layout       (AVFrame *frame, int64_t val);
-+attribute_deprecated
-+int     av_frame_get_channels             (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_channels             (AVFrame *frame, int     val);
-+attribute_deprecated
-+int     av_frame_get_sample_rate          (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_sample_rate          (AVFrame *frame, int     val);
-+attribute_deprecated
-+AVDictionary *av_frame_get_metadata       (const AVFrame *frame);
-+attribute_deprecated
-+void          av_frame_set_metadata       (AVFrame *frame, AVDictionary *val);
-+attribute_deprecated
-+int     av_frame_get_decode_error_flags   (const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_decode_error_flags   (AVFrame *frame, int     val);
-+attribute_deprecated
-+int     av_frame_get_pkt_size(const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_pkt_size(AVFrame *frame, int val);
-+#if FF_API_FRAME_QP
-+attribute_deprecated
-+int8_t *av_frame_get_qp_table(AVFrame *f, int *stride, int *type);
-+attribute_deprecated
-+int av_frame_set_qp_table(AVFrame *f, AVBufferRef *buf, int stride, int type);
-+#endif
-+attribute_deprecated
-+enum AVColorSpace av_frame_get_colorspace(const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_colorspace(AVFrame *frame, enum AVColorSpace val);
-+attribute_deprecated
-+enum AVColorRange av_frame_get_color_range(const AVFrame *frame);
-+attribute_deprecated
-+void    av_frame_set_color_range(AVFrame *frame, enum AVColorRange val);
-+#endif
-+
-+/**
-+ * Get the name of a colorspace.
-+ * @return a static string identifying the colorspace; can be NULL.
-+ */
-+const char *av_get_colorspace_name(enum AVColorSpace val);
-+
-+/**
-+ * Allocate an AVFrame and set its fields to default values.  The resulting
-+ * struct must be freed using av_frame_free().
-+ *
-+ * @return An AVFrame filled with default values or NULL on failure.
-+ *
-+ * @note this only allocates the AVFrame itself, not the data buffers. Those
-+ * must be allocated through other means, e.g. with av_frame_get_buffer() or
-+ * manually.
-+ */
-+AVFrame *av_frame_alloc(void);
-+
-+/**
-+ * Free the frame and any dynamically allocated objects in it,
-+ * e.g. extended_data. If the frame is reference counted, it will be
-+ * unreferenced first.
-+ *
-+ * @param frame frame to be freed. The pointer will be set to NULL.
-+ */
-+void av_frame_free(AVFrame **frame);
-+
-+/**
-+ * Set up a new reference to the data described by the source frame.
-+ *
-+ * Copy frame properties from src to dst and create a new reference for each
-+ * AVBufferRef from src.
-+ *
-+ * If src is not reference counted, new buffers are allocated and the data is
-+ * copied.
-+ *
-+ * @warning: dst MUST have been either unreferenced with av_frame_unref(dst),
-+ *           or newly allocated with av_frame_alloc() before calling this
-+ *           function, or undefined behavior will occur.
-+ *
-+ * @return 0 on success, a negative AVERROR on error
-+ */
-+int av_frame_ref(AVFrame *dst, const AVFrame *src);
-+
-+/**
-+ * Create a new frame that references the same data as src.
-+ *
-+ * This is a shortcut for av_frame_alloc()+av_frame_ref().
-+ *
-+ * @return newly created AVFrame on success, NULL on error.
-+ */
-+AVFrame *av_frame_clone(const AVFrame *src);
-+
-+/**
-+ * Unreference all the buffers referenced by frame and reset the frame fields.
-+ */
-+void av_frame_unref(AVFrame *frame);
-+
-+/**
-+ * Move everything contained in src to dst and reset src.
-+ *
-+ * @warning: dst is not unreferenced, but directly overwritten without reading
-+ *           or deallocating its contents. Call av_frame_unref(dst) manually
-+ *           before calling this function to ensure that no memory is leaked.
-+ */
-+void av_frame_move_ref(AVFrame *dst, AVFrame *src);
-+
-+/**
-+ * Allocate new buffer(s) for audio or video data.
-+ *
-+ * The following fields must be set on frame before calling this function:
-+ * - format (pixel format for video, sample format for audio)
-+ * - width and height for video
-+ * - nb_samples and channel_layout for audio
-+ *
-+ * This function will fill AVFrame.data and AVFrame.buf arrays and, if
-+ * necessary, allocate and fill AVFrame.extended_data and AVFrame.extended_buf.
-+ * For planar formats, one buffer will be allocated for each plane.
-+ *
-+ * @warning: if frame already has been allocated, calling this function will
-+ *           leak memory. In addition, undefined behavior can occur in certain
-+ *           cases.
-+ *
-+ * @param frame frame in which to store the new buffers.
-+ * @param align Required buffer size alignment. If equal to 0, alignment will be
-+ *              chosen automatically for the current CPU. It is highly
-+ *              recommended to pass 0 here unless you know what you are doing.
-+ *
-+ * @return 0 on success, a negative AVERROR on error.
-+ */
-+int av_frame_get_buffer(AVFrame *frame, int align);
-+
-+/**
-+ * Check if the frame data is writable.
-+ *
-+ * @return A positive value if the frame data is writable (which is true if and
-+ * only if each of the underlying buffers has only one reference, namely the one
-+ * stored in this frame). Return 0 otherwise.
-+ *
-+ * If 1 is returned the answer is valid until av_buffer_ref() is called on any
-+ * of the underlying AVBufferRefs (e.g. through av_frame_ref() or directly).
-+ *
-+ * @see av_frame_make_writable(), av_buffer_is_writable()
-+ */
-+int av_frame_is_writable(AVFrame *frame);
-+
-+/**
-+ * Ensure that the frame data is writable, avoiding data copy if possible.
-+ *
-+ * Do nothing if the frame is writable, allocate new buffers and copy the data
-+ * if it is not.
-+ *
-+ * @return 0 on success, a negative AVERROR on error.
-+ *
-+ * @see av_frame_is_writable(), av_buffer_is_writable(),
-+ * av_buffer_make_writable()
-+ */
-+int av_frame_make_writable(AVFrame *frame);
-+
-+/**
-+ * Copy the frame data from src to dst.
-+ *
-+ * This function does not allocate anything, dst must be already initialized and
-+ * allocated with the same parameters as src.
-+ *
-+ * This function only copies the frame data (i.e. the contents of the data /
-+ * extended data arrays), not any other properties.
-+ *
-+ * @return >= 0 on success, a negative AVERROR on error.
-+ */
-+int av_frame_copy(AVFrame *dst, const AVFrame *src);
-+
-+/**
-+ * Copy only "metadata" fields from src to dst.
-+ *
-+ * Metadata for the purpose of this function are those fields that do not affect
-+ * the data layout in the buffers.  E.g. pts, sample rate (for audio) or sample
-+ * aspect ratio (for video), but not width/height or channel layout.
-+ * Side data is also copied.
-+ */
-+int av_frame_copy_props(AVFrame *dst, const AVFrame *src);
-+
-+/**
-+ * Get the buffer reference a given data plane is stored in.
-+ *
-+ * @param plane index of the data plane of interest in frame->extended_data.
-+ *
-+ * @return the buffer reference that contains the plane or NULL if the input
-+ * frame is not valid.
-+ */
-+AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane);
-+
-+/**
-+ * Add a new side data to a frame.
-+ *
-+ * @param frame a frame to which the side data should be added
-+ * @param type type of the added side data
-+ * @param size size of the side data
-+ *
-+ * @return newly added side data on success, NULL on error
-+ */
-+AVFrameSideData *av_frame_new_side_data(AVFrame *frame,
-+                                        enum AVFrameSideDataType type,
-+                                        int size);
-+
-+/**
-+ * Add a new side data to a frame from an existing AVBufferRef
-+ *
-+ * @param frame a frame to which the side data should be added
-+ * @param type  the type of the added side data
-+ * @param buf   an AVBufferRef to add as side data. The ownership of
-+ *              the reference is transferred to the frame.
-+ *
-+ * @return newly added side data on success, NULL on error. On failure
-+ *         the frame is unchanged and the AVBufferRef remains owned by
-+ *         the caller.
-+ */
-+AVFrameSideData *av_frame_new_side_data_from_buf(AVFrame *frame,
-+                                                 enum AVFrameSideDataType type,
-+                                                 AVBufferRef *buf);
-+
-+/**
-+ * @return a pointer to the side data of a given type on success, NULL if there
-+ * is no side data with such type in this frame.
-+ */
-+AVFrameSideData *av_frame_get_side_data(const AVFrame *frame,
-+                                        enum AVFrameSideDataType type);
-+
-+/**
-+ * If side data of the supplied type exists in the frame, free it and remove it
-+ * from the frame.
-+ */
-+void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type);
-+
-+
-+/**
-+ * Flags for frame cropping.
-+ */
-+enum {
-+    /**
-+     * Apply the maximum possible cropping, even if it requires setting the
-+     * AVFrame.data[] entries to unaligned pointers. Passing unaligned data
-+     * to FFmpeg API is generally not allowed, and causes undefined behavior
-+     * (such as crashes). You can pass unaligned data only to FFmpeg APIs that
-+     * are explicitly documented to accept it. Use this flag only if you
-+     * absolutely know what you are doing.
-+     */
-+    AV_FRAME_CROP_UNALIGNED     = 1 << 0,
-+};
-+
-+/**
-+ * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/
-+ * crop_bottom fields. If cropping is successful, the function will adjust the
-+ * data pointers and the width/height fields, and set the crop fields to 0.
-+ *
-+ * In all cases, the cropping boundaries will be rounded to the inherent
-+ * alignment of the pixel format. In some cases, such as for opaque hwaccel
-+ * formats, the left/top cropping is ignored. The crop fields are set to 0 even
-+ * if the cropping was rounded or ignored.
-+ *
-+ * @param frame the frame which should be cropped
-+ * @param flags Some combination of AV_FRAME_CROP_* flags, or 0.
-+ *
-+ * @return >= 0 on success, a negative AVERROR on error. If the cropping fields
-+ * were invalid, AVERROR(ERANGE) is returned, and nothing is changed.
-+ */
-+int av_frame_apply_cropping(AVFrame *frame, int flags);
-+
-+/**
-+ * @return a string identifying the side data type
-+ */
-+const char *av_frame_side_data_name(enum AVFrameSideDataType type);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_FRAME_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/hwcontext.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/hwcontext.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/hwcontext.h
-@@ -0,0 +1,584 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_HWCONTEXT_H
-+#define AVUTIL_HWCONTEXT_H
-+
-+#include "buffer.h"
-+#include "frame.h"
-+#include "log.h"
-+#include "pixfmt.h"
-+
-+enum AVHWDeviceType {
-+    AV_HWDEVICE_TYPE_NONE,
-+    AV_HWDEVICE_TYPE_VDPAU,
-+    AV_HWDEVICE_TYPE_CUDA,
-+    AV_HWDEVICE_TYPE_VAAPI,
-+    AV_HWDEVICE_TYPE_DXVA2,
-+    AV_HWDEVICE_TYPE_QSV,
-+    AV_HWDEVICE_TYPE_VIDEOTOOLBOX,
-+    AV_HWDEVICE_TYPE_D3D11VA,
-+    AV_HWDEVICE_TYPE_DRM,
-+    AV_HWDEVICE_TYPE_OPENCL,
-+    AV_HWDEVICE_TYPE_MEDIACODEC,
-+};
-+
-+typedef struct AVHWDeviceInternal AVHWDeviceInternal;
-+
-+/**
-+ * This struct aggregates all the (hardware/vendor-specific) "high-level" state,
-+ * i.e. state that is not tied to a concrete processing configuration.
-+ * E.g., in an API that supports hardware-accelerated encoding and decoding,
-+ * this struct will (if possible) wrap the state that is common to both encoding
-+ * and decoding and from which specific instances of encoders or decoders can be
-+ * derived.
-+ *
-+ * This struct is reference-counted with the AVBuffer mechanism. The
-+ * av_hwdevice_ctx_alloc() constructor yields a reference, whose data field
-+ * points to the actual AVHWDeviceContext. Further objects derived from
-+ * AVHWDeviceContext (such as AVHWFramesContext, describing a frame pool with
-+ * specific properties) will hold an internal reference to it. After all the
-+ * references are released, the AVHWDeviceContext itself will be freed,
-+ * optionally invoking a user-specified callback for uninitializing the hardware
-+ * state.
-+ */
-+typedef struct AVHWDeviceContext {
-+    /**
-+     * A class for logging. Set by av_hwdevice_ctx_alloc().
-+     */
-+    const AVClass *av_class;
-+
-+    /**
-+     * Private data used internally by libavutil. Must not be accessed in any
-+     * way by the caller.
-+     */
-+    AVHWDeviceInternal *internal;
-+
-+    /**
-+     * This field identifies the underlying API used for hardware access.
-+     *
-+     * This field is set when this struct is allocated and never changed
-+     * afterwards.
-+     */
-+    enum AVHWDeviceType type;
-+
-+    /**
-+     * The format-specific data, allocated and freed by libavutil along with
-+     * this context.
-+     *
-+     * Should be cast by the user to the format-specific context defined in the
-+     * corresponding header (hwcontext_*.h) and filled as described in the
-+     * documentation before calling av_hwdevice_ctx_init().
-+     *
-+     * After calling av_hwdevice_ctx_init() this struct should not be modified
-+     * by the caller.
-+     */
-+    void *hwctx;
-+
-+    /**
-+     * This field may be set by the caller before calling av_hwdevice_ctx_init().
-+     *
-+     * If non-NULL, this callback will be called when the last reference to
-+     * this context is unreferenced, immediately before it is freed.
-+     *
-+     * @note when other objects (e.g an AVHWFramesContext) are derived from this
-+     *       struct, this callback will be invoked after all such child objects
-+     *       are fully uninitialized and their respective destructors invoked.
-+     */
-+    void (*free)(struct AVHWDeviceContext *ctx);
-+
-+    /**
-+     * Arbitrary user data, to be used e.g. by the free() callback.
-+     */
-+    void *user_opaque;
-+} AVHWDeviceContext;
-+
-+typedef struct AVHWFramesInternal AVHWFramesInternal;
-+
-+/**
-+ * This struct describes a set or pool of "hardware" frames (i.e. those with
-+ * data not located in normal system memory). All the frames in the pool are
-+ * assumed to be allocated in the same way and interchangeable.
-+ *
-+ * This struct is reference-counted with the AVBuffer mechanism and tied to a
-+ * given AVHWDeviceContext instance. The av_hwframe_ctx_alloc() constructor
-+ * yields a reference, whose data field points to the actual AVHWFramesContext
-+ * struct.
-+ */
-+typedef struct AVHWFramesContext {
-+    /**
-+     * A class for logging.
-+     */
-+    const AVClass *av_class;
-+
-+    /**
-+     * Private data used internally by libavutil. Must not be accessed in any
-+     * way by the caller.
-+     */
-+    AVHWFramesInternal *internal;
-+
-+    /**
-+     * A reference to the parent AVHWDeviceContext. This reference is owned and
-+     * managed by the enclosing AVHWFramesContext, but the caller may derive
-+     * additional references from it.
-+     */
-+    AVBufferRef *device_ref;
-+
-+    /**
-+     * The parent AVHWDeviceContext. This is simply a pointer to
-+     * device_ref->data provided for convenience.
-+     *
-+     * Set by libavutil in av_hwframe_ctx_init().
-+     */
-+    AVHWDeviceContext *device_ctx;
-+
-+    /**
-+     * The format-specific data, allocated and freed automatically along with
-+     * this context.
-+     *
-+     * Should be cast by the user to the format-specific context defined in the
-+     * corresponding header (hwframe_*.h) and filled as described in the
-+     * documentation before calling av_hwframe_ctx_init().
-+     *
-+     * After any frames using this context are created, the contents of this
-+     * struct should not be modified by the caller.
-+     */
-+    void *hwctx;
-+
-+    /**
-+     * This field may be set by the caller before calling av_hwframe_ctx_init().
-+     *
-+     * If non-NULL, this callback will be called when the last reference to
-+     * this context is unreferenced, immediately before it is freed.
-+     */
-+    void (*free)(struct AVHWFramesContext *ctx);
-+
-+    /**
-+     * Arbitrary user data, to be used e.g. by the free() callback.
-+     */
-+    void *user_opaque;
-+
-+    /**
-+     * A pool from which the frames are allocated by av_hwframe_get_buffer().
-+     * This field may be set by the caller before calling av_hwframe_ctx_init().
-+     * The buffers returned by calling av_buffer_pool_get() on this pool must
-+     * have the properties described in the documentation in the corresponding hw
-+     * type's header (hwcontext_*.h). The pool will be freed strictly before
-+     * this struct's free() callback is invoked.
-+     *
-+     * This field may be NULL, then libavutil will attempt to allocate a pool
-+     * internally. Note that certain device types enforce pools allocated at
-+     * fixed size (frame count), which cannot be extended dynamically. In such a
-+     * case, initial_pool_size must be set appropriately.
-+     */
-+    AVBufferPool *pool;
-+
-+    /**
-+     * Initial size of the frame pool. If a device type does not support
-+     * dynamically resizing the pool, then this is also the maximum pool size.
-+     *
-+     * May be set by the caller before calling av_hwframe_ctx_init(). Must be
-+     * set if pool is NULL and the device type does not support dynamic pools.
-+     */
-+    int initial_pool_size;
-+
-+    /**
-+     * The pixel format identifying the underlying HW surface type.
-+     *
-+     * Must be a hwaccel format, i.e. the corresponding descriptor must have the
-+     * AV_PIX_FMT_FLAG_HWACCEL flag set.
-+     *
-+     * Must be set by the user before calling av_hwframe_ctx_init().
-+     */
-+    enum AVPixelFormat format;
-+
-+    /**
-+     * The pixel format identifying the actual data layout of the hardware
-+     * frames.
-+     *
-+     * Must be set by the caller before calling av_hwframe_ctx_init().
-+     *
-+     * @note when the underlying API does not provide the exact data layout, but
-+     * only the colorspace/bit depth, this field should be set to the fully
-+     * planar version of that format (e.g. for 8-bit 420 YUV it should be
-+     * AV_PIX_FMT_YUV420P, not AV_PIX_FMT_NV12 or anything else).
-+     */
-+    enum AVPixelFormat sw_format;
-+
-+    /**
-+     * The allocated dimensions of the frames in this pool.
-+     *
-+     * Must be set by the user before calling av_hwframe_ctx_init().
-+     */
-+    int width, height;
-+} AVHWFramesContext;
-+
-+/**
-+ * Look up an AVHWDeviceType by name.
-+ *
-+ * @param name String name of the device type (case-insensitive).
-+ * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if
-+ *         not found.
-+ */
-+enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name);
-+
-+/** Get the string name of an AVHWDeviceType.
-+ *
-+ * @param type Type from enum AVHWDeviceType.
-+ * @return Pointer to a static string containing the name, or NULL if the type
-+ *         is not valid.
-+ */
-+const char *av_hwdevice_get_type_name(enum AVHWDeviceType type);
-+
-+/**
-+ * Iterate over supported device types.
-+ *
-+ * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type
-+ *             returned by this function in subsequent iterations.
-+ * @return The next usable device type from enum AVHWDeviceType, or
-+ *         AV_HWDEVICE_TYPE_NONE if there are no more.
-+ */
-+enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev);
-+
-+/**
-+ * Allocate an AVHWDeviceContext for a given hardware type.
-+ *
-+ * @param type the type of the hardware device to allocate.
-+ * @return a reference to the newly created AVHWDeviceContext on success or NULL
-+ *         on failure.
-+ */
-+AVBufferRef *av_hwdevice_ctx_alloc(enum AVHWDeviceType type);
-+
-+/**
-+ * Finalize the device context before use. This function must be called after
-+ * the context is filled with all the required information and before it is
-+ * used in any way.
-+ *
-+ * @param ref a reference to the AVHWDeviceContext
-+ * @return 0 on success, a negative AVERROR code on failure
-+ */
-+int av_hwdevice_ctx_init(AVBufferRef *ref);
-+
-+/**
-+ * Open a device of the specified type and create an AVHWDeviceContext for it.
-+ *
-+ * This is a convenience function intended to cover the simple cases. Callers
-+ * who need to fine-tune device creation/management should open the device
-+ * manually and then wrap it in an AVHWDeviceContext using
-+ * av_hwdevice_ctx_alloc()/av_hwdevice_ctx_init().
-+ *
-+ * The returned context is already initialized and ready for use, the caller
-+ * should not call av_hwdevice_ctx_init() on it. The user_opaque/free fields of
-+ * the created AVHWDeviceContext are set by this function and should not be
-+ * touched by the caller.
-+ *
-+ * @param device_ctx On success, a reference to the newly-created device context
-+ *                   will be written here. The reference is owned by the caller
-+ *                   and must be released with av_buffer_unref() when no longer
-+ *                   needed. On failure, NULL will be written to this pointer.
-+ * @param type The type of the device to create.
-+ * @param device A type-specific string identifying the device to open.
-+ * @param opts A dictionary of additional (type-specific) options to use in
-+ *             opening the device. The dictionary remains owned by the caller.
-+ * @param flags currently unused
-+ *
-+ * @return 0 on success, a negative AVERROR code on failure.
-+ */
-+int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type,
-+                           const char *device, AVDictionary *opts, int flags);
-+
-+/**
-+ * Create a new device of the specified type from an existing device.
-+ *
-+ * If the source device is a device of the target type or was originally
-+ * derived from such a device (possibly through one or more intermediate
-+ * devices of other types), then this will return a reference to the
-+ * existing device of the same type as is requested.
-+ *
-+ * Otherwise, it will attempt to derive a new device from the given source
-+ * device.  If direct derivation to the new type is not implemented, it will
-+ * attempt the same derivation from each ancestor of the source device in
-+ * turn looking for an implemented derivation method.
-+ *
-+ * @param dst_ctx On success, a reference to the newly-created
-+ *                AVHWDeviceContext.
-+ * @param type    The type of the new device to create.
-+ * @param src_ctx A reference to an existing AVHWDeviceContext which will be
-+ *                used to create the new device.
-+ * @param flags   Currently unused; should be set to zero.
-+ * @return        Zero on success, a negative AVERROR code on failure.
-+ */
-+int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx,
-+                                   enum AVHWDeviceType type,
-+                                   AVBufferRef *src_ctx, int flags);
-+
-+
-+/**
-+ * Allocate an AVHWFramesContext tied to a given device context.
-+ *
-+ * @param device_ctx a reference to a AVHWDeviceContext. This function will make
-+ *                   a new reference for internal use, the one passed to the
-+ *                   function remains owned by the caller.
-+ * @return a reference to the newly created AVHWFramesContext on success or NULL
-+ *         on failure.
-+ */
-+AVBufferRef *av_hwframe_ctx_alloc(AVBufferRef *device_ctx);
-+
-+/**
-+ * Finalize the context before use. This function must be called after the
-+ * context is filled with all the required information and before it is attached
-+ * to any frames.
-+ *
-+ * @param ref a reference to the AVHWFramesContext
-+ * @return 0 on success, a negative AVERROR code on failure
-+ */
-+int av_hwframe_ctx_init(AVBufferRef *ref);
-+
-+/**
-+ * Allocate a new frame attached to the given AVHWFramesContext.
-+ *
-+ * @param hwframe_ctx a reference to an AVHWFramesContext
-+ * @param frame an empty (freshly allocated or unreffed) frame to be filled with
-+ *              newly allocated buffers.
-+ * @param flags currently unused, should be set to zero
-+ * @return 0 on success, a negative AVERROR code on failure
-+ */
-+int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags);
-+
-+/**
-+ * Copy data to or from a hw surface. At least one of dst/src must have an
-+ * AVHWFramesContext attached.
-+ *
-+ * If src has an AVHWFramesContext attached, then the format of dst (if set)
-+ * must use one of the formats returned by av_hwframe_transfer_get_formats(src,
-+ * AV_HWFRAME_TRANSFER_DIRECTION_FROM).
-+ * If dst has an AVHWFramesContext attached, then the format of src must use one
-+ * of the formats returned by av_hwframe_transfer_get_formats(dst,
-+ * AV_HWFRAME_TRANSFER_DIRECTION_TO)
-+ *
-+ * dst may be "clean" (i.e. with data/buf pointers unset), in which case the
-+ * data buffers will be allocated by this function using av_frame_get_buffer().
-+ * If dst->format is set, then this format will be used, otherwise (when
-+ * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen.
-+ *
-+ * The two frames must have matching allocated dimensions (i.e. equal to
-+ * AVHWFramesContext.width/height), since not all device types support
-+ * transferring a sub-rectangle of the whole surface. The display dimensions
-+ * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but
-+ * also have to be equal for both frames. When the display dimensions are
-+ * smaller than the allocated dimensions, the content of the padding in the
-+ * destination frame is unspecified.
-+ *
-+ * @param dst the destination frame. dst is not touched on failure.
-+ * @param src the source frame.
-+ * @param flags currently unused, should be set to zero
-+ * @return 0 on success, a negative AVERROR error code on failure.
-+ */
-+int av_hwframe_transfer_data(AVFrame *dst, const AVFrame *src, int flags);
-+
-+enum AVHWFrameTransferDirection {
-+    /**
-+     * Transfer the data from the queried hw frame.
-+     */
-+    AV_HWFRAME_TRANSFER_DIRECTION_FROM,
-+
-+    /**
-+     * Transfer the data to the queried hw frame.
-+     */
-+    AV_HWFRAME_TRANSFER_DIRECTION_TO,
-+};
-+
-+/**
-+ * Get a list of possible source or target formats usable in
-+ * av_hwframe_transfer_data().
-+ *
-+ * @param hwframe_ctx the frame context to obtain the information for
-+ * @param dir the direction of the transfer
-+ * @param formats the pointer to the output format list will be written here.
-+ *                The list is terminated with AV_PIX_FMT_NONE and must be freed
-+ *                by the caller when no longer needed using av_free().
-+ *                If this function returns successfully, the format list will
-+ *                have at least one item (not counting the terminator).
-+ *                On failure, the contents of this pointer are unspecified.
-+ * @param flags currently unused, should be set to zero
-+ * @return 0 on success, a negative AVERROR code on failure.
-+ */
-+int av_hwframe_transfer_get_formats(AVBufferRef *hwframe_ctx,
-+                                    enum AVHWFrameTransferDirection dir,
-+                                    enum AVPixelFormat **formats, int flags);
-+
-+
-+/**
-+ * This struct describes the constraints on hardware frames attached to
-+ * a given device with a hardware-specific configuration.  This is returned
-+ * by av_hwdevice_get_hwframe_constraints() and must be freed by
-+ * av_hwframe_constraints_free() after use.
-+ */
-+typedef struct AVHWFramesConstraints {
-+    /**
-+     * A list of possible values for format in the hw_frames_ctx,
-+     * terminated by AV_PIX_FMT_NONE.  This member will always be filled.
-+     */
-+    enum AVPixelFormat *valid_hw_formats;
-+
-+    /**
-+     * A list of possible values for sw_format in the hw_frames_ctx,
-+     * terminated by AV_PIX_FMT_NONE.  Can be NULL if this information is
-+     * not known.
-+     */
-+    enum AVPixelFormat *valid_sw_formats;
-+
-+    /**
-+     * The minimum size of frames in this hw_frames_ctx.
-+     * (Zero if not known.)
-+     */
-+    int min_width;
-+    int min_height;
-+
-+    /**
-+     * The maximum size of frames in this hw_frames_ctx.
-+     * (INT_MAX if not known / no limit.)
-+     */
-+    int max_width;
-+    int max_height;
-+} AVHWFramesConstraints;
-+
-+/**
-+ * Allocate a HW-specific configuration structure for a given HW device.
-+ * After use, the user must free all members as required by the specific
-+ * hardware structure being used, then free the structure itself with
-+ * av_free().
-+ *
-+ * @param device_ctx a reference to the associated AVHWDeviceContext.
-+ * @return The newly created HW-specific configuration structure on
-+ *         success or NULL on failure.
-+ */
-+void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx);
-+
-+/**
-+ * Get the constraints on HW frames given a device and the HW-specific
-+ * configuration to be used with that device.  If no HW-specific
-+ * configuration is provided, returns the maximum possible capabilities
-+ * of the device.
-+ *
-+ * @param ref a reference to the associated AVHWDeviceContext.
-+ * @param hwconfig a filled HW-specific configuration structure, or NULL
-+ *        to return the maximum possible capabilities of the device.
-+ * @return AVHWFramesConstraints structure describing the constraints
-+ *         on the device, or NULL if not available.
-+ */
-+AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref,
-+                                                           const void *hwconfig);
-+
-+/**
-+ * Free an AVHWFrameConstraints structure.
-+ *
-+ * @param constraints The (filled or unfilled) AVHWFrameConstraints structure.
-+ */
-+void av_hwframe_constraints_free(AVHWFramesConstraints **constraints);
-+
-+
-+/**
-+ * Flags to apply to frame mappings.
-+ */
-+enum {
-+    /**
-+     * The mapping must be readable.
-+     */
-+    AV_HWFRAME_MAP_READ      = 1 << 0,
-+    /**
-+     * The mapping must be writeable.
-+     */
-+    AV_HWFRAME_MAP_WRITE     = 1 << 1,
-+    /**
-+     * The mapped frame will be overwritten completely in subsequent
-+     * operations, so the current frame data need not be loaded.  Any values
-+     * which are not overwritten are unspecified.
-+     */
-+    AV_HWFRAME_MAP_OVERWRITE = 1 << 2,
-+    /**
-+     * The mapping must be direct.  That is, there must not be any copying in
-+     * the map or unmap steps.  Note that performance of direct mappings may
-+     * be much lower than normal memory.
-+     */
-+    AV_HWFRAME_MAP_DIRECT    = 1 << 3,
-+};
-+
-+/**
-+ * Map a hardware frame.
-+ *
-+ * This has a number of different possible effects, depending on the format
-+ * and origin of the src and dst frames.  On input, src should be a usable
-+ * frame with valid buffers and dst should be blank (typically as just created
-+ * by av_frame_alloc()).  src should have an associated hwframe context, and
-+ * dst may optionally have a format and associated hwframe context.
-+ *
-+ * If src was created by mapping a frame from the hwframe context of dst,
-+ * then this function undoes the mapping - dst is replaced by a reference to
-+ * the frame that src was originally mapped from.
-+ *
-+ * If both src and dst have an associated hwframe context, then this function
-+ * attempts to map the src frame from its hardware context to that of dst and
-+ * then fill dst with appropriate data to be usable there.  This will only be
-+ * possible if the hwframe contexts and associated devices are compatible -
-+ * given compatible devices, av_hwframe_ctx_create_derived() can be used to
-+ * create a hwframe context for dst in which mapping should be possible.
-+ *
-+ * If src has a hwframe context but dst does not, then the src frame is
-+ * mapped to normal memory and should thereafter be usable as a normal frame.
-+ * If the format is set on dst, then the mapping will attempt to create dst
-+ * with that format and fail if it is not possible.  If format is unset (is
-+ * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate
-+ * format to use is (probably the sw_format of the src hwframe context).
-+ *
-+ * A return value of AVERROR(ENOSYS) indicates that the mapping is not
-+ * possible with the given arguments and hwframe setup, while other return
-+ * values indicate that it failed somehow.
-+ *
-+ * @param dst Destination frame, to contain the mapping.
-+ * @param src Source frame, to be mapped.
-+ * @param flags Some combination of AV_HWFRAME_MAP_* flags.
-+ * @return Zero on success, negative AVERROR code on failure.
-+ */
-+int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags);
-+
-+
-+/**
-+ * Create and initialise an AVHWFramesContext as a mapping of another existing
-+ * AVHWFramesContext on a different device.
-+ *
-+ * av_hwframe_ctx_init() should not be called after this.
-+ *
-+ * @param derived_frame_ctx  On success, a reference to the newly created
-+ *                           AVHWFramesContext.
-+ * @param derived_device_ctx A reference to the device to create the new
-+ *                           AVHWFramesContext on.
-+ * @param source_frame_ctx   A reference to an existing AVHWFramesContext
-+ *                           which will be mapped to the derived context.
-+ * @param flags  Some combination of AV_HWFRAME_MAP_* flags, defining the
-+ *               mapping parameters to apply to frames which are allocated
-+ *               in the derived device.
-+ * @return       Zero on success, negative AVERROR code on failure.
-+ */
-+int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx,
-+                                  enum AVPixelFormat format,
-+                                  AVBufferRef *derived_device_ctx,
-+                                  AVBufferRef *source_frame_ctx,
-+                                  int flags);
-+
-+#endif /* AVUTIL_HWCONTEXT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/intfloat.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/intfloat.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/intfloat.h
-@@ -0,0 +1,77 @@
-+/*
-+ * Copyright (c) 2011 Mans Rullgard
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_INTFLOAT_H
-+#define AVUTIL_INTFLOAT_H
-+
-+#include <stdint.h>
-+#include "attributes.h"
-+
-+union av_intfloat32 {
-+    uint32_t i;
-+    float    f;
-+};
-+
-+union av_intfloat64 {
-+    uint64_t i;
-+    double   f;
-+};
-+
-+/**
-+ * Reinterpret a 32-bit integer as a float.
-+ */
-+static av_always_inline float av_int2float(uint32_t i)
-+{
-+    union av_intfloat32 v;
-+    v.i = i;
-+    return v.f;
-+}
-+
-+/**
-+ * Reinterpret a float as a 32-bit integer.
-+ */
-+static av_always_inline uint32_t av_float2int(float f)
-+{
-+    union av_intfloat32 v;
-+    v.f = f;
-+    return v.i;
-+}
-+
-+/**
-+ * Reinterpret a 64-bit integer as a double.
-+ */
-+static av_always_inline double av_int2double(uint64_t i)
-+{
-+    union av_intfloat64 v;
-+    v.i = i;
-+    return v.f;
-+}
-+
-+/**
-+ * Reinterpret a double as a 64-bit integer.
-+ */
-+static av_always_inline uint64_t av_double2int(double f)
-+{
-+    union av_intfloat64 v;
-+    v.f = f;
-+    return v.i;
-+}
-+
-+#endif /* AVUTIL_INTFLOAT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/log.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/log.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/log.h
-@@ -0,0 +1,362 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_LOG_H
-+#define AVUTIL_LOG_H
-+
-+#include <stdarg.h>
-+#include "avutil.h"
-+#include "attributes.h"
-+#include "version.h"
-+
-+typedef enum {
-+    AV_CLASS_CATEGORY_NA = 0,
-+    AV_CLASS_CATEGORY_INPUT,
-+    AV_CLASS_CATEGORY_OUTPUT,
-+    AV_CLASS_CATEGORY_MUXER,
-+    AV_CLASS_CATEGORY_DEMUXER,
-+    AV_CLASS_CATEGORY_ENCODER,
-+    AV_CLASS_CATEGORY_DECODER,
-+    AV_CLASS_CATEGORY_FILTER,
-+    AV_CLASS_CATEGORY_BITSTREAM_FILTER,
-+    AV_CLASS_CATEGORY_SWSCALER,
-+    AV_CLASS_CATEGORY_SWRESAMPLER,
-+    AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT = 40,
-+    AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT,
-+    AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT,
-+    AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT,
-+    AV_CLASS_CATEGORY_DEVICE_OUTPUT,
-+    AV_CLASS_CATEGORY_DEVICE_INPUT,
-+    AV_CLASS_CATEGORY_NB  ///< not part of ABI/API
-+}AVClassCategory;
-+
-+#define AV_IS_INPUT_DEVICE(category) \
-+    (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_INPUT) || \
-+     ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_INPUT) || \
-+     ((category) == AV_CLASS_CATEGORY_DEVICE_INPUT))
-+
-+#define AV_IS_OUTPUT_DEVICE(category) \
-+    (((category) == AV_CLASS_CATEGORY_DEVICE_VIDEO_OUTPUT) || \
-+     ((category) == AV_CLASS_CATEGORY_DEVICE_AUDIO_OUTPUT) || \
-+     ((category) == AV_CLASS_CATEGORY_DEVICE_OUTPUT))
-+
-+struct AVOptionRanges;
-+
-+/**
-+ * Describe the class of an AVClass context structure. That is an
-+ * arbitrary struct of which the first field is a pointer to an
-+ * AVClass struct (e.g. AVCodecContext, AVFormatContext etc.).
-+ */
-+typedef struct AVClass {
-+    /**
-+     * The name of the class; usually it is the same name as the
-+     * context structure type to which the AVClass is associated.
-+     */
-+    const char* class_name;
-+
-+    /**
-+     * A pointer to a function which returns the name of a context
-+     * instance ctx associated with the class.
-+     */
-+    const char* (*item_name)(void* ctx);
-+
-+    /**
-+     * a pointer to the first option specified in the class if any or NULL
-+     *
-+     * @see av_set_default_options()
-+     */
-+    const struct AVOption *option;
-+
-+    /**
-+     * LIBAVUTIL_VERSION with which this structure was created.
-+     * This is used to allow fields to be added without requiring major
-+     * version bumps everywhere.
-+     */
-+
-+    int version;
-+
-+    /**
-+     * Offset in the structure where log_level_offset is stored.
-+     * 0 means there is no such variable
-+     */
-+    int log_level_offset_offset;
-+
-+    /**
-+     * Offset in the structure where a pointer to the parent context for
-+     * logging is stored. For example a decoder could pass its AVCodecContext
-+     * to eval as such a parent context, which an av_log() implementation
-+     * could then leverage to display the parent context.
-+     * The offset can be NULL.
-+     */
-+    int parent_log_context_offset;
-+
-+    /**
-+     * Return next AVOptions-enabled child or NULL
-+     */
-+    void* (*child_next)(void *obj, void *prev);
-+
-+    /**
-+     * Return an AVClass corresponding to the next potential
-+     * AVOptions-enabled child.
-+     *
-+     * The difference between child_next and this is that
-+     * child_next iterates over _already existing_ objects, while
-+     * child_class_next iterates over _all possible_ children.
-+     */
-+    const struct AVClass* (*child_class_next)(const struct AVClass *prev);
-+
-+    /**
-+     * Category used for visualization (like color)
-+     * This is only set if the category is equal for all objects using this class.
-+     * available since version (51 << 16 | 56 << 8 | 100)
-+     */
-+    AVClassCategory category;
-+
-+    /**
-+     * Callback to return the category.
-+     * available since version (51 << 16 | 59 << 8 | 100)
-+     */
-+    AVClassCategory (*get_category)(void* ctx);
-+
-+    /**
-+     * Callback to return the supported/allowed ranges.
-+     * available since version (52.12)
-+     */
-+    int (*query_ranges)(struct AVOptionRanges **, void *obj, const char *key, int flags);
-+} AVClass;
-+
-+/**
-+ * @addtogroup lavu_log
-+ *
-+ * @{
-+ *
-+ * @defgroup lavu_log_constants Logging Constants
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Print no output.
-+ */
-+#define AV_LOG_QUIET    -8
-+
-+/**
-+ * Something went really wrong and we will crash now.
-+ */
-+#define AV_LOG_PANIC     0
-+
-+/**
-+ * Something went wrong and recovery is not possible.
-+ * For example, no header was found for a format which depends
-+ * on headers or an illegal combination of parameters is used.
-+ */
-+#define AV_LOG_FATAL     8
-+
-+/**
-+ * Something went wrong and cannot losslessly be recovered.
-+ * However, not all future data is affected.
-+ */
-+#define AV_LOG_ERROR    16
-+
-+/**
-+ * Something somehow does not look correct. This may or may not
-+ * lead to problems. An example would be the use of '-vstrict -2'.
-+ */
-+#define AV_LOG_WARNING  24
-+
-+/**
-+ * Standard information.
-+ */
-+#define AV_LOG_INFO     32
-+
-+/**
-+ * Detailed information.
-+ */
-+#define AV_LOG_VERBOSE  40
-+
-+/**
-+ * Stuff which is only useful for libav* developers.
-+ */
-+#define AV_LOG_DEBUG    48
-+
-+/**
-+ * Extremely verbose debugging, useful for libav* development.
-+ */
-+#define AV_LOG_TRACE    56
-+
-+#define AV_LOG_MAX_OFFSET (AV_LOG_TRACE - AV_LOG_QUIET)
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * Sets additional colors for extended debugging sessions.
-+ * @code
-+   av_log(ctx, AV_LOG_DEBUG|AV_LOG_C(134), "Message in purple\n");
-+   @endcode
-+ * Requires 256color terminal support. Uses outside debugging is not
-+ * recommended.
-+ */
-+#define AV_LOG_C(x) ((x) << 8)
-+
-+/**
-+ * Send the specified message to the log if the level is less than or equal
-+ * to the current av_log_level. By default, all logging messages are sent to
-+ * stderr. This behavior can be altered by setting a different logging callback
-+ * function.
-+ * @see av_log_set_callback
-+ *
-+ * @param avcl A pointer to an arbitrary struct of which the first field is a
-+ *        pointer to an AVClass struct or NULL if general log.
-+ * @param level The importance level of the message expressed using a @ref
-+ *        lavu_log_constants "Logging Constant".
-+ * @param fmt The format string (printf-compatible) that specifies how
-+ *        subsequent arguments are converted to output.
-+ */
-+void av_log(void *avcl, int level, const char *fmt, ...) av_printf_format(3, 4);
-+
-+
-+/**
-+ * Send the specified message to the log if the level is less than or equal
-+ * to the current av_log_level. By default, all logging messages are sent to
-+ * stderr. This behavior can be altered by setting a different logging callback
-+ * function.
-+ * @see av_log_set_callback
-+ *
-+ * @param avcl A pointer to an arbitrary struct of which the first field is a
-+ *        pointer to an AVClass struct.
-+ * @param level The importance level of the message expressed using a @ref
-+ *        lavu_log_constants "Logging Constant".
-+ * @param fmt The format string (printf-compatible) that specifies how
-+ *        subsequent arguments are converted to output.
-+ * @param vl The arguments referenced by the format string.
-+ */
-+void av_vlog(void *avcl, int level, const char *fmt, va_list vl);
-+
-+/**
-+ * Get the current log level
-+ *
-+ * @see lavu_log_constants
-+ *
-+ * @return Current log level
-+ */
-+int av_log_get_level(void);
-+
-+/**
-+ * Set the log level
-+ *
-+ * @see lavu_log_constants
-+ *
-+ * @param level Logging level
-+ */
-+void av_log_set_level(int level);
-+
-+/**
-+ * Set the logging callback
-+ *
-+ * @note The callback must be thread safe, even if the application does not use
-+ *       threads itself as some codecs are multithreaded.
-+ *
-+ * @see av_log_default_callback
-+ *
-+ * @param callback A logging function with a compatible signature.
-+ */
-+void av_log_set_callback(void (*callback)(void*, int, const char*, va_list));
-+
-+/**
-+ * Default logging callback
-+ *
-+ * It prints the message to stderr, optionally colorizing it.
-+ *
-+ * @param avcl A pointer to an arbitrary struct of which the first field is a
-+ *        pointer to an AVClass struct.
-+ * @param level The importance level of the message expressed using a @ref
-+ *        lavu_log_constants "Logging Constant".
-+ * @param fmt The format string (printf-compatible) that specifies how
-+ *        subsequent arguments are converted to output.
-+ * @param vl The arguments referenced by the format string.
-+ */
-+void av_log_default_callback(void *avcl, int level, const char *fmt,
-+                             va_list vl);
-+
-+/**
-+ * Return the context name
-+ *
-+ * @param  ctx The AVClass context
-+ *
-+ * @return The AVClass class_name
-+ */
-+const char* av_default_item_name(void* ctx);
-+AVClassCategory av_default_get_category(void *ptr);
-+
-+/**
-+ * Format a line of log the same way as the default callback.
-+ * @param line          buffer to receive the formatted line
-+ * @param line_size     size of the buffer
-+ * @param print_prefix  used to store whether the prefix must be printed;
-+ *                      must point to a persistent integer initially set to 1
-+ */
-+void av_log_format_line(void *ptr, int level, const char *fmt, va_list vl,
-+                        char *line, int line_size, int *print_prefix);
-+
-+/**
-+ * Format a line of log the same way as the default callback.
-+ * @param line          buffer to receive the formatted line;
-+ *                      may be NULL if line_size is 0
-+ * @param line_size     size of the buffer; at most line_size-1 characters will
-+ *                      be written to the buffer, plus one null terminator
-+ * @param print_prefix  used to store whether the prefix must be printed;
-+ *                      must point to a persistent integer initially set to 1
-+ * @return Returns a negative value if an error occurred, otherwise returns
-+ *         the number of characters that would have been written for a
-+ *         sufficiently large buffer, not including the terminating null
-+ *         character. If the return value is not less than line_size, it means
-+ *         that the log message was truncated to fit the buffer.
-+ */
-+int av_log_format_line2(void *ptr, int level, const char *fmt, va_list vl,
-+                        char *line, int line_size, int *print_prefix);
-+
-+/**
-+ * Skip repeated messages, this requires the user app to use av_log() instead of
-+ * (f)printf as the 2 would otherwise interfere and lead to
-+ * "Last message repeated x times" messages below (f)printf messages with some
-+ * bad luck.
-+ * Also to receive the last, "last repeated" line if any, the user app must
-+ * call av_log(NULL, AV_LOG_QUIET, "%s", ""); at the end
-+ */
-+#define AV_LOG_SKIP_REPEATED 1
-+
-+/**
-+ * Include the log severity in messages originating from codecs.
-+ *
-+ * Results in messages such as:
-+ * [rawvideo @ 0xDEADBEEF] [error] encode did not produce valid pts
-+ */
-+#define AV_LOG_PRINT_LEVEL 2
-+
-+void av_log_set_flags(int arg);
-+int av_log_get_flags(void);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_LOG_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/macros.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/macros.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/macros.h
-@@ -0,0 +1,50 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu
-+ * Utility Preprocessor macros
-+ */
-+
-+#ifndef AVUTIL_MACROS_H
-+#define AVUTIL_MACROS_H
-+
-+/**
-+ * @addtogroup preproc_misc Preprocessor String Macros
-+ *
-+ * String manipulation macros
-+ *
-+ * @{
-+ */
-+
-+#define AV_STRINGIFY(s)         AV_TOSTRING(s)
-+#define AV_TOSTRING(s) #s
-+
-+#define AV_GLUE(a, b) a ## b
-+#define AV_JOIN(a, b) AV_GLUE(a, b)
-+
-+/**
-+ * @}
-+ */
-+
-+#define AV_PRAGMA(s) _Pragma(#s)
-+
-+#define FFALIGN(x, a) (((x)+(a)-1)&~((a)-1))
-+
-+#endif /* AVUTIL_MACROS_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mathematics.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mathematics.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mathematics.h
-@@ -0,0 +1,242 @@
-+/*
-+ * copyright (c) 2005-2012 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @addtogroup lavu_math
-+ * Mathematical utilities for working with timestamp and time base.
-+ */
-+
-+#ifndef AVUTIL_MATHEMATICS_H
-+#define AVUTIL_MATHEMATICS_H
-+
-+#include <stdint.h>
-+#include <math.h>
-+#include "attributes.h"
-+#include "rational.h"
-+#include "intfloat.h"
-+
-+#ifndef M_E
-+#define M_E            2.7182818284590452354   /* e */
-+#endif
-+#ifndef M_LN2
-+#define M_LN2          0.69314718055994530942  /* log_e 2 */
-+#endif
-+#ifndef M_LN10
-+#define M_LN10         2.30258509299404568402  /* log_e 10 */
-+#endif
-+#ifndef M_LOG2_10
-+#define M_LOG2_10      3.32192809488736234787  /* log_2 10 */
-+#endif
-+#ifndef M_PHI
-+#define M_PHI          1.61803398874989484820   /* phi / golden ratio */
-+#endif
-+#ifndef M_PI
-+#define M_PI           3.14159265358979323846  /* pi */
-+#endif
-+#ifndef M_PI_2
-+#define M_PI_2         1.57079632679489661923  /* pi/2 */
-+#endif
-+#ifndef M_SQRT1_2
-+#define M_SQRT1_2      0.70710678118654752440  /* 1/sqrt(2) */
-+#endif
-+#ifndef M_SQRT2
-+#define M_SQRT2        1.41421356237309504880  /* sqrt(2) */
-+#endif
-+#ifndef NAN
-+#define NAN            av_int2float(0x7fc00000)
-+#endif
-+#ifndef INFINITY
-+#define INFINITY       av_int2float(0x7f800000)
-+#endif
-+
-+/**
-+ * @addtogroup lavu_math
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Rounding methods.
-+ */
-+enum AVRounding {
-+    AV_ROUND_ZERO     = 0, ///< Round toward zero.
-+    AV_ROUND_INF      = 1, ///< Round away from zero.
-+    AV_ROUND_DOWN     = 2, ///< Round toward -infinity.
-+    AV_ROUND_UP       = 3, ///< Round toward +infinity.
-+    AV_ROUND_NEAR_INF = 5, ///< Round to nearest and halfway cases away from zero.
-+    /**
-+     * Flag telling rescaling functions to pass `INT64_MIN`/`MAX` through
-+     * unchanged, avoiding special cases for #AV_NOPTS_VALUE.
-+     *
-+     * Unlike other values of the enumeration AVRounding, this value is a
-+     * bitmask that must be used in conjunction with another value of the
-+     * enumeration through a bitwise OR, in order to set behavior for normal
-+     * cases.
-+     *
-+     * @code{.c}
-+     * av_rescale_rnd(3, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX);
-+     * // Rescaling 3:
-+     * //     Calculating 3 * 1 / 2
-+     * //     3 / 2 is rounded up to 2
-+     * //     => 2
-+     *
-+     * av_rescale_rnd(AV_NOPTS_VALUE, 1, 2, AV_ROUND_UP | AV_ROUND_PASS_MINMAX);
-+     * // Rescaling AV_NOPTS_VALUE:
-+     * //     AV_NOPTS_VALUE == INT64_MIN
-+     * //     AV_NOPTS_VALUE is passed through
-+     * //     => AV_NOPTS_VALUE
-+     * @endcode
-+     */
-+    AV_ROUND_PASS_MINMAX = 8192,
-+};
-+
-+/**
-+ * Compute the greatest common divisor of two integer operands.
-+ *
-+ * @param a,b Operands
-+ * @return GCD of a and b up to sign; if a >= 0 and b >= 0, return value is >= 0;
-+ * if a == 0 and b == 0, returns 0.
-+ */
-+int64_t av_const av_gcd(int64_t a, int64_t b);
-+
-+/**
-+ * Rescale a 64-bit integer with rounding to nearest.
-+ *
-+ * The operation is mathematically equivalent to `a * b / c`, but writing that
-+ * directly can overflow.
-+ *
-+ * This function is equivalent to av_rescale_rnd() with #AV_ROUND_NEAR_INF.
-+ *
-+ * @see av_rescale_rnd(), av_rescale_q(), av_rescale_q_rnd()
-+ */
-+int64_t av_rescale(int64_t a, int64_t b, int64_t c) av_const;
-+
-+/**
-+ * Rescale a 64-bit integer with specified rounding.
-+ *
-+ * The operation is mathematically equivalent to `a * b / c`, but writing that
-+ * directly can overflow, and does not support different rounding methods.
-+ *
-+ * @see av_rescale(), av_rescale_q(), av_rescale_q_rnd()
-+ */
-+int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) av_const;
-+
-+/**
-+ * Rescale a 64-bit integer by 2 rational numbers.
-+ *
-+ * The operation is mathematically equivalent to `a * bq / cq`.
-+ *
-+ * This function is equivalent to av_rescale_q_rnd() with #AV_ROUND_NEAR_INF.
-+ *
-+ * @see av_rescale(), av_rescale_rnd(), av_rescale_q_rnd()
-+ */
-+int64_t av_rescale_q(int64_t a, AVRational bq, AVRational cq) av_const;
-+
-+/**
-+ * Rescale a 64-bit integer by 2 rational numbers with specified rounding.
-+ *
-+ * The operation is mathematically equivalent to `a * bq / cq`.
-+ *
-+ * @see av_rescale(), av_rescale_rnd(), av_rescale_q()
-+ */
-+int64_t av_rescale_q_rnd(int64_t a, AVRational bq, AVRational cq,
-+                         enum AVRounding rnd) av_const;
-+
-+/**
-+ * Compare two timestamps each in its own time base.
-+ *
-+ * @return One of the following values:
-+ *         - -1 if `ts_a` is before `ts_b`
-+ *         - 1 if `ts_a` is after `ts_b`
-+ *         - 0 if they represent the same position
-+ *
-+ * @warning
-+ * The result of the function is undefined if one of the timestamps is outside
-+ * the `int64_t` range when represented in the other's timebase.
-+ */
-+int av_compare_ts(int64_t ts_a, AVRational tb_a, int64_t ts_b, AVRational tb_b);
-+
-+/**
-+ * Compare the remainders of two integer operands divided by a common divisor.
-+ *
-+ * In other words, compare the least significant `log2(mod)` bits of integers
-+ * `a` and `b`.
-+ *
-+ * @code{.c}
-+ * av_compare_mod(0x11, 0x02, 0x10) < 0 // since 0x11 % 0x10  (0x1) < 0x02 % 0x10  (0x2)
-+ * av_compare_mod(0x11, 0x02, 0x20) > 0 // since 0x11 % 0x20 (0x11) > 0x02 % 0x20 (0x02)
-+ * @endcode
-+ *
-+ * @param a,b Operands
-+ * @param mod Divisor; must be a power of 2
-+ * @return
-+ *         - a negative value if `a % mod < b % mod`
-+ *         - a positive value if `a % mod > b % mod`
-+ *         - zero             if `a % mod == b % mod`
-+ */
-+int64_t av_compare_mod(uint64_t a, uint64_t b, uint64_t mod);
-+
-+/**
-+ * Rescale a timestamp while preserving known durations.
-+ *
-+ * This function is designed to be called per audio packet to scale the input
-+ * timestamp to a different time base. Compared to a simple av_rescale_q()
-+ * call, this function is robust against possible inconsistent frame durations.
-+ *
-+ * The `last` parameter is a state variable that must be preserved for all
-+ * subsequent calls for the same stream. For the first call, `*last` should be
-+ * initialized to #AV_NOPTS_VALUE.
-+ *
-+ * @param[in]     in_tb    Input time base
-+ * @param[in]     in_ts    Input timestamp
-+ * @param[in]     fs_tb    Duration time base; typically this is finer-grained
-+ *                         (greater) than `in_tb` and `out_tb`
-+ * @param[in]     duration Duration till the next call to this function (i.e.
-+ *                         duration of the current packet/frame)
-+ * @param[in,out] last     Pointer to a timestamp expressed in terms of
-+ *                         `fs_tb`, acting as a state variable
-+ * @param[in]     out_tb   Output timebase
-+ * @return        Timestamp expressed in terms of `out_tb`
-+ *
-+ * @note In the context of this function, "duration" is in term of samples, not
-+ *       seconds.
-+ */
-+int64_t av_rescale_delta(AVRational in_tb, int64_t in_ts,  AVRational fs_tb, int duration, int64_t *last, AVRational out_tb);
-+
-+/**
-+ * Add a value to a timestamp.
-+ *
-+ * This function guarantees that when the same value is repeatly added that
-+ * no accumulation of rounding errors occurs.
-+ *
-+ * @param[in] ts     Input timestamp
-+ * @param[in] ts_tb  Input timestamp time base
-+ * @param[in] inc    Value to be added
-+ * @param[in] inc_tb Time base of `inc`
-+ */
-+int64_t av_add_stable(AVRational ts_tb, int64_t ts, AVRational inc_tb, int64_t inc);
-+
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_MATHEMATICS_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mem.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mem.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/mem.h
-@@ -0,0 +1,700 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu_mem
-+ * Memory handling functions
-+ */
-+
-+#ifndef AVUTIL_MEM_H
-+#define AVUTIL_MEM_H
-+
-+#include <limits.h>
-+#include <stdint.h>
-+
-+#include "attributes.h"
-+#include "error.h"
-+#include "avutil.h"
-+
-+/**
-+ * @addtogroup lavu_mem
-+ * Utilities for manipulating memory.
-+ *
-+ * FFmpeg has several applications of memory that are not required of a typical
-+ * program. For example, the computing-heavy components like video decoding and
-+ * encoding can be sped up significantly through the use of aligned memory.
-+ *
-+ * However, for each of FFmpeg's applications of memory, there might not be a
-+ * recognized or standardized API for that specific use. Memory alignment, for
-+ * instance, varies wildly depending on operating systems, architectures, and
-+ * compilers. Hence, this component of @ref libavutil is created to make
-+ * dealing with memory consistently possible on all platforms.
-+ *
-+ * @{
-+ *
-+ * @defgroup lavu_mem_macros Alignment Macros
-+ * Helper macros for declaring aligned variables.
-+ * @{
-+ */
-+
-+/**
-+ * @def DECLARE_ALIGNED(n,t,v)
-+ * Declare a variable that is aligned in memory.
-+ *
-+ * @code{.c}
-+ * DECLARE_ALIGNED(16, uint16_t, aligned_int) = 42;
-+ * DECLARE_ALIGNED(32, uint8_t, aligned_array)[128];
-+ *
-+ * // The default-alignment equivalent would be
-+ * uint16_t aligned_int = 42;
-+ * uint8_t aligned_array[128];
-+ * @endcode
-+ *
-+ * @param n Minimum alignment in bytes
-+ * @param t Type of the variable (or array element)
-+ * @param v Name of the variable
-+ */
-+
-+/**
-+ * @def DECLARE_ASM_ALIGNED(n,t,v)
-+ * Declare an aligned variable appropriate for use in inline assembly code.
-+ *
-+ * @code{.c}
-+ * DECLARE_ASM_ALIGNED(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008);
-+ * @endcode
-+ *
-+ * @param n Minimum alignment in bytes
-+ * @param t Type of the variable (or array element)
-+ * @param v Name of the variable
-+ */
-+
-+/**
-+ * @def DECLARE_ASM_CONST(n,t,v)
-+ * Declare a static constant aligned variable appropriate for use in inline
-+ * assembly code.
-+ *
-+ * @code{.c}
-+ * DECLARE_ASM_CONST(16, uint64_t, pw_08) = UINT64_C(0x0008000800080008);
-+ * @endcode
-+ *
-+ * @param n Minimum alignment in bytes
-+ * @param t Type of the variable (or array element)
-+ * @param v Name of the variable
-+ */
-+
-+#if defined(__INTEL_COMPILER) && __INTEL_COMPILER < 1110 || defined(__SUNPRO_C)
-+    #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
-+    #define DECLARE_ASM_ALIGNED(n,t,v)  t __attribute__ ((aligned (n))) v
-+    #define DECLARE_ASM_CONST(n,t,v)    const t __attribute__ ((aligned (n))) v
-+#elif defined(__DJGPP__)
-+    #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (FFMIN(n, 16)))) v
-+    #define DECLARE_ASM_ALIGNED(n,t,v)  t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
-+    #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v
-+#elif defined(__GNUC__) || defined(__clang__)
-+    #define DECLARE_ALIGNED(n,t,v)      t __attribute__ ((aligned (n))) v
-+    #define DECLARE_ASM_ALIGNED(n,t,v)  t av_used __attribute__ ((aligned (n))) v
-+    #define DECLARE_ASM_CONST(n,t,v)    static const t av_used __attribute__ ((aligned (n))) v
-+#elif defined(_MSC_VER)
-+    #define DECLARE_ALIGNED(n,t,v)      __declspec(align(n)) t v
-+    #define DECLARE_ASM_ALIGNED(n,t,v)  __declspec(align(n)) t v
-+    #define DECLARE_ASM_CONST(n,t,v)    __declspec(align(n)) static const t v
-+#else
-+    #define DECLARE_ALIGNED(n,t,v)      t v
-+    #define DECLARE_ASM_ALIGNED(n,t,v)  t v
-+    #define DECLARE_ASM_CONST(n,t,v)    static const t v
-+#endif
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_mem_attrs Function Attributes
-+ * Function attributes applicable to memory handling functions.
-+ *
-+ * These function attributes can help compilers emit more useful warnings, or
-+ * generate better code.
-+ * @{
-+ */
-+
-+/**
-+ * @def av_malloc_attrib
-+ * Function attribute denoting a malloc-like function.
-+ *
-+ * @see <a href="https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-g_t_0040code_007bmalloc_007d-function-attribute-3251">Function attribute `malloc` in GCC's documentation</a>
-+ */
-+
-+#if AV_GCC_VERSION_AT_LEAST(3,1)
-+    #define av_malloc_attrib __attribute__((__malloc__))
-+#else
-+    #define av_malloc_attrib
-+#endif
-+
-+/**
-+ * @def av_alloc_size(...)
-+ * Function attribute used on a function that allocates memory, whose size is
-+ * given by the specified parameter(s).
-+ *
-+ * @code{.c}
-+ * void *av_malloc(size_t size) av_alloc_size(1);
-+ * void *av_calloc(size_t nmemb, size_t size) av_alloc_size(1, 2);
-+ * @endcode
-+ *
-+ * @param ... One or two parameter indexes, separated by a comma
-+ *
-+ * @see <a href="https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html#index-g_t_0040code_007balloc_005fsize_007d-function-attribute-3220">Function attribute `alloc_size` in GCC's documentation</a>
-+ */
-+
-+#if AV_GCC_VERSION_AT_LEAST(4,3)
-+    #define av_alloc_size(...) __attribute__((alloc_size(__VA_ARGS__)))
-+#else
-+    #define av_alloc_size(...)
-+#endif
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_mem_funcs Heap Management
-+ * Functions responsible for allocating, freeing, and copying memory.
-+ *
-+ * All memory allocation functions have a built-in upper limit of `INT_MAX`
-+ * bytes. This may be changed with av_max_alloc(), although exercise extreme
-+ * caution when doing so.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Allocate a memory block with alignment suitable for all memory accesses
-+ * (including vectors if available on the CPU).
-+ *
-+ * @param size Size in bytes for the memory block to be allocated
-+ * @return Pointer to the allocated block, or `NULL` if the block cannot
-+ *         be allocated
-+ * @see av_mallocz()
-+ */
-+void *av_malloc(size_t size) av_malloc_attrib av_alloc_size(1);
-+
-+/**
-+ * Allocate a memory block with alignment suitable for all memory accesses
-+ * (including vectors if available on the CPU) and zero all the bytes of the
-+ * block.
-+ *
-+ * @param size Size in bytes for the memory block to be allocated
-+ * @return Pointer to the allocated block, or `NULL` if it cannot be allocated
-+ * @see av_malloc()
-+ */
-+void *av_mallocz(size_t size) av_malloc_attrib av_alloc_size(1);
-+
-+/**
-+ * Allocate a memory block for an array with av_malloc().
-+ *
-+ * The allocated memory will have size `size * nmemb` bytes.
-+ *
-+ * @param nmemb Number of element
-+ * @param size  Size of a single element
-+ * @return Pointer to the allocated block, or `NULL` if the block cannot
-+ *         be allocated
-+ * @see av_malloc()
-+ */
-+av_alloc_size(1, 2) void *av_malloc_array(size_t nmemb, size_t size);
-+
-+/**
-+ * Allocate a memory block for an array with av_mallocz().
-+ *
-+ * The allocated memory will have size `size * nmemb` bytes.
-+ *
-+ * @param nmemb Number of elements
-+ * @param size  Size of the single element
-+ * @return Pointer to the allocated block, or `NULL` if the block cannot
-+ *         be allocated
-+ *
-+ * @see av_mallocz()
-+ * @see av_malloc_array()
-+ */
-+av_alloc_size(1, 2) void *av_mallocz_array(size_t nmemb, size_t size);
-+
-+/**
-+ * Non-inlined equivalent of av_mallocz_array().
-+ *
-+ * Created for symmetry with the calloc() C function.
-+ */
-+void *av_calloc(size_t nmemb, size_t size) av_malloc_attrib;
-+
-+/**
-+ * Allocate, reallocate, or free a block of memory.
-+ *
-+ * If `ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is
-+ * zero, free the memory block pointed to by `ptr`. Otherwise, expand or
-+ * shrink that block of memory according to `size`.
-+ *
-+ * @param ptr  Pointer to a memory block already allocated with
-+ *             av_realloc() or `NULL`
-+ * @param size Size in bytes of the memory block to be allocated or
-+ *             reallocated
-+ *
-+ * @return Pointer to a newly-reallocated block or `NULL` if the block
-+ *         cannot be reallocated or the function is used to free the memory block
-+ *
-+ * @warning Unlike av_malloc(), the returned pointer is not guaranteed to be
-+ *          correctly aligned.
-+ * @see av_fast_realloc()
-+ * @see av_reallocp()
-+ */
-+void *av_realloc(void *ptr, size_t size) av_alloc_size(2);
-+
-+/**
-+ * Allocate, reallocate, or free a block of memory through a pointer to a
-+ * pointer.
-+ *
-+ * If `*ptr` is `NULL` and `size` > 0, allocate a new block. If `size` is
-+ * zero, free the memory block pointed to by `*ptr`. Otherwise, expand or
-+ * shrink that block of memory according to `size`.
-+ *
-+ * @param[in,out] ptr  Pointer to a pointer to a memory block already allocated
-+ *                     with av_realloc(), or a pointer to `NULL`. The pointer
-+ *                     is updated on success, or freed on failure.
-+ * @param[in]     size Size in bytes for the memory block to be allocated or
-+ *                     reallocated
-+ *
-+ * @return Zero on success, an AVERROR error code on failure
-+ *
-+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be
-+ *          correctly aligned.
-+ */
-+av_warn_unused_result
-+int av_reallocp(void *ptr, size_t size);
-+
-+/**
-+ * Allocate, reallocate, or free a block of memory.
-+ *
-+ * This function does the same thing as av_realloc(), except:
-+ * - It takes two size arguments and allocates `nelem * elsize` bytes,
-+ *   after checking the result of the multiplication for integer overflow.
-+ * - It frees the input block in case of failure, thus avoiding the memory
-+ *   leak with the classic
-+ *   @code{.c}
-+ *   buf = realloc(buf);
-+ *   if (!buf)
-+ *       return -1;
-+ *   @endcode
-+ *   pattern.
-+ */
-+void *av_realloc_f(void *ptr, size_t nelem, size_t elsize);
-+
-+/**
-+ * Allocate, reallocate, or free an array.
-+ *
-+ * If `ptr` is `NULL` and `nmemb` > 0, allocate a new block. If
-+ * `nmemb` is zero, free the memory block pointed to by `ptr`.
-+ *
-+ * @param ptr   Pointer to a memory block already allocated with
-+ *              av_realloc() or `NULL`
-+ * @param nmemb Number of elements in the array
-+ * @param size  Size of the single element of the array
-+ *
-+ * @return Pointer to a newly-reallocated block or NULL if the block
-+ *         cannot be reallocated or the function is used to free the memory block
-+ *
-+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be
-+ *          correctly aligned.
-+ * @see av_reallocp_array()
-+ */
-+av_alloc_size(2, 3) void *av_realloc_array(void *ptr, size_t nmemb, size_t size);
-+
-+/**
-+ * Allocate, reallocate, or free an array through a pointer to a pointer.
-+ *
-+ * If `*ptr` is `NULL` and `nmemb` > 0, allocate a new block. If `nmemb` is
-+ * zero, free the memory block pointed to by `*ptr`.
-+ *
-+ * @param[in,out] ptr   Pointer to a pointer to a memory block already
-+ *                      allocated with av_realloc(), or a pointer to `NULL`.
-+ *                      The pointer is updated on success, or freed on failure.
-+ * @param[in]     nmemb Number of elements
-+ * @param[in]     size  Size of the single element
-+ *
-+ * @return Zero on success, an AVERROR error code on failure
-+ *
-+ * @warning Unlike av_malloc(), the allocated memory is not guaranteed to be
-+ *          correctly aligned.
-+ */
-+av_alloc_size(2, 3) int av_reallocp_array(void *ptr, size_t nmemb, size_t size);
-+
-+/**
-+ * Reallocate the given buffer if it is not large enough, otherwise do nothing.
-+ *
-+ * If the given buffer is `NULL`, then a new uninitialized buffer is allocated.
-+ *
-+ * If the given buffer is not large enough, and reallocation fails, `NULL` is
-+ * returned and `*size` is set to 0, but the original buffer is not changed or
-+ * freed.
-+ *
-+ * A typical use pattern follows:
-+ *
-+ * @code{.c}
-+ * uint8_t *buf = ...;
-+ * uint8_t *new_buf = av_fast_realloc(buf, &current_size, size_needed);
-+ * if (!new_buf) {
-+ *     // Allocation failed; clean up original buffer
-+ *     av_freep(&buf);
-+ *     return AVERROR(ENOMEM);
-+ * }
-+ * @endcode
-+ *
-+ * @param[in,out] ptr      Already allocated buffer, or `NULL`
-+ * @param[in,out] size     Pointer to current size of buffer `ptr`. `*size` is
-+ *                         changed to `min_size` in case of success or 0 in
-+ *                         case of failure
-+ * @param[in]     min_size New size of buffer `ptr`
-+ * @return `ptr` if the buffer is large enough, a pointer to newly reallocated
-+ *         buffer if the buffer was not large enough, or `NULL` in case of
-+ *         error
-+ * @see av_realloc()
-+ * @see av_fast_malloc()
-+ */
-+void *av_fast_realloc(void *ptr, unsigned int *size, size_t min_size);
-+
-+/**
-+ * Allocate a buffer, reusing the given one if large enough.
-+ *
-+ * Contrary to av_fast_realloc(), the current buffer contents might not be
-+ * preserved and on error the old buffer is freed, thus no special handling to
-+ * avoid memleaks is necessary.
-+ *
-+ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if
-+ * `size_needed` is greater than 0.
-+ *
-+ * @code{.c}
-+ * uint8_t *buf = ...;
-+ * av_fast_malloc(&buf, &current_size, size_needed);
-+ * if (!buf) {
-+ *     // Allocation failed; buf already freed
-+ *     return AVERROR(ENOMEM);
-+ * }
-+ * @endcode
-+ *
-+ * @param[in,out] ptr      Pointer to pointer to an already allocated buffer.
-+ *                         `*ptr` will be overwritten with pointer to new
-+ *                         buffer on success or `NULL` on failure
-+ * @param[in,out] size     Pointer to current size of buffer `*ptr`. `*size` is
-+ *                         changed to `min_size` in case of success or 0 in
-+ *                         case of failure
-+ * @param[in]     min_size New size of buffer `*ptr`
-+ * @see av_realloc()
-+ * @see av_fast_mallocz()
-+ */
-+void av_fast_malloc(void *ptr, unsigned int *size, size_t min_size);
-+
-+/**
-+ * Allocate and clear a buffer, reusing the given one if large enough.
-+ *
-+ * Like av_fast_malloc(), but all newly allocated space is initially cleared.
-+ * Reused buffer is not cleared.
-+ *
-+ * `*ptr` is allowed to be `NULL`, in which case allocation always happens if
-+ * `size_needed` is greater than 0.
-+ *
-+ * @param[in,out] ptr      Pointer to pointer to an already allocated buffer.
-+ *                         `*ptr` will be overwritten with pointer to new
-+ *                         buffer on success or `NULL` on failure
-+ * @param[in,out] size     Pointer to current size of buffer `*ptr`. `*size` is
-+ *                         changed to `min_size` in case of success or 0 in
-+ *                         case of failure
-+ * @param[in]     min_size New size of buffer `*ptr`
-+ * @see av_fast_malloc()
-+ */
-+void av_fast_mallocz(void *ptr, unsigned int *size, size_t min_size);
-+
-+/**
-+ * Free a memory block which has been allocated with a function of av_malloc()
-+ * or av_realloc() family.
-+ *
-+ * @param ptr Pointer to the memory block which should be freed.
-+ *
-+ * @note `ptr = NULL` is explicitly allowed.
-+ * @note It is recommended that you use av_freep() instead, to prevent leaving
-+ *       behind dangling pointers.
-+ * @see av_freep()
-+ */
-+void av_free(void *ptr);
-+
-+/**
-+ * Free a memory block which has been allocated with a function of av_malloc()
-+ * or av_realloc() family, and set the pointer pointing to it to `NULL`.
-+ *
-+ * @code{.c}
-+ * uint8_t *buf = av_malloc(16);
-+ * av_free(buf);
-+ * // buf now contains a dangling pointer to freed memory, and accidental
-+ * // dereference of buf will result in a use-after-free, which may be a
-+ * // security risk.
-+ *
-+ * uint8_t *buf = av_malloc(16);
-+ * av_freep(&buf);
-+ * // buf is now NULL, and accidental dereference will only result in a
-+ * // NULL-pointer dereference.
-+ * @endcode
-+ *
-+ * @param ptr Pointer to the pointer to the memory block which should be freed
-+ * @note `*ptr = NULL` is safe and leads to no action.
-+ * @see av_free()
-+ */
-+void av_freep(void *ptr);
-+
-+/**
-+ * Duplicate a string.
-+ *
-+ * @param s String to be duplicated
-+ * @return Pointer to a newly-allocated string containing a
-+ *         copy of `s` or `NULL` if the string cannot be allocated
-+ * @see av_strndup()
-+ */
-+char *av_strdup(const char *s) av_malloc_attrib;
-+
-+/**
-+ * Duplicate a substring of a string.
-+ *
-+ * @param s   String to be duplicated
-+ * @param len Maximum length of the resulting string (not counting the
-+ *            terminating byte)
-+ * @return Pointer to a newly-allocated string containing a
-+ *         substring of `s` or `NULL` if the string cannot be allocated
-+ */
-+char *av_strndup(const char *s, size_t len) av_malloc_attrib;
-+
-+/**
-+ * Duplicate a buffer with av_malloc().
-+ *
-+ * @param p    Buffer to be duplicated
-+ * @param size Size in bytes of the buffer copied
-+ * @return Pointer to a newly allocated buffer containing a
-+ *         copy of `p` or `NULL` if the buffer cannot be allocated
-+ */
-+void *av_memdup(const void *p, size_t size);
-+
-+/**
-+ * Overlapping memcpy() implementation.
-+ *
-+ * @param dst  Destination buffer
-+ * @param back Number of bytes back to start copying (i.e. the initial size of
-+ *             the overlapping window); must be > 0
-+ * @param cnt  Number of bytes to copy; must be >= 0
-+ *
-+ * @note `cnt > back` is valid, this will copy the bytes we just copied,
-+ *       thus creating a repeating pattern with a period length of `back`.
-+ */
-+void av_memcpy_backptr(uint8_t *dst, int back, int cnt);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_mem_dynarray Dynamic Array
-+ *
-+ * Utilities to make an array grow when needed.
-+ *
-+ * Sometimes, the programmer would want to have an array that can grow when
-+ * needed. The libavutil dynamic array utilities fill that need.
-+ *
-+ * libavutil supports two systems of appending elements onto a dynamically
-+ * allocated array, the first one storing the pointer to the value in the
-+ * array, and the second storing the value directly. In both systems, the
-+ * caller is responsible for maintaining a variable containing the length of
-+ * the array, as well as freeing of the array after use.
-+ *
-+ * The first system stores pointers to values in a block of dynamically
-+ * allocated memory. Since only pointers are stored, the function does not need
-+ * to know the size of the type. Both av_dynarray_add() and
-+ * av_dynarray_add_nofree() implement this system.
-+ *
-+ * @code
-+ * type **array = NULL; //< an array of pointers to values
-+ * int    nb    = 0;    //< a variable to keep track of the length of the array
-+ *
-+ * type to_be_added  = ...;
-+ * type to_be_added2 = ...;
-+ *
-+ * av_dynarray_add(&array, &nb, &to_be_added);
-+ * if (nb == 0)
-+ *     return AVERROR(ENOMEM);
-+ *
-+ * av_dynarray_add(&array, &nb, &to_be_added2);
-+ * if (nb == 0)
-+ *     return AVERROR(ENOMEM);
-+ *
-+ * // Now:
-+ * //  nb           == 2
-+ * // &to_be_added  == array[0]
-+ * // &to_be_added2 == array[1]
-+ *
-+ * av_freep(&array);
-+ * @endcode
-+ *
-+ * The second system stores the value directly in a block of memory. As a
-+ * result, the function has to know the size of the type. av_dynarray2_add()
-+ * implements this mechanism.
-+ *
-+ * @code
-+ * type *array = NULL; //< an array of values
-+ * int   nb    = 0;    //< a variable to keep track of the length of the array
-+ *
-+ * type to_be_added  = ...;
-+ * type to_be_added2 = ...;
-+ *
-+ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array), NULL);
-+ * if (!addr)
-+ *     return AVERROR(ENOMEM);
-+ * memcpy(addr, &to_be_added, sizeof(to_be_added));
-+ *
-+ * // Shortcut of the above.
-+ * type *addr = av_dynarray2_add((void **)&array, &nb, sizeof(*array),
-+ *                               (const void *)&to_be_added2);
-+ * if (!addr)
-+ *     return AVERROR(ENOMEM);
-+ *
-+ * // Now:
-+ * //  nb           == 2
-+ * //  to_be_added  == array[0]
-+ * //  to_be_added2 == array[1]
-+ *
-+ * av_freep(&array);
-+ * @endcode
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Add the pointer to an element to a dynamic array.
-+ *
-+ * The array to grow is supposed to be an array of pointers to
-+ * structures, and the element to add must be a pointer to an already
-+ * allocated structure.
-+ *
-+ * The array is reallocated when its size reaches powers of 2.
-+ * Therefore, the amortized cost of adding an element is constant.
-+ *
-+ * In case of success, the pointer to the array is updated in order to
-+ * point to the new grown array, and the number pointed to by `nb_ptr`
-+ * is incremented.
-+ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and
-+ * `*nb_ptr` is set to 0.
-+ *
-+ * @param[in,out] tab_ptr Pointer to the array to grow
-+ * @param[in,out] nb_ptr  Pointer to the number of elements in the array
-+ * @param[in]     elem    Element to add
-+ * @see av_dynarray_add_nofree(), av_dynarray2_add()
-+ */
-+void av_dynarray_add(void *tab_ptr, int *nb_ptr, void *elem);
-+
-+/**
-+ * Add an element to a dynamic array.
-+ *
-+ * Function has the same functionality as av_dynarray_add(),
-+ * but it doesn't free memory on fails. It returns error code
-+ * instead and leave current buffer untouched.
-+ *
-+ * @return >=0 on success, negative otherwise
-+ * @see av_dynarray_add(), av_dynarray2_add()
-+ */
-+av_warn_unused_result
-+int av_dynarray_add_nofree(void *tab_ptr, int *nb_ptr, void *elem);
-+
-+/**
-+ * Add an element of size `elem_size` to a dynamic array.
-+ *
-+ * The array is reallocated when its number of elements reaches powers of 2.
-+ * Therefore, the amortized cost of adding an element is constant.
-+ *
-+ * In case of success, the pointer to the array is updated in order to
-+ * point to the new grown array, and the number pointed to by `nb_ptr`
-+ * is incremented.
-+ * In case of failure, the array is freed, `*tab_ptr` is set to `NULL` and
-+ * `*nb_ptr` is set to 0.
-+ *
-+ * @param[in,out] tab_ptr   Pointer to the array to grow
-+ * @param[in,out] nb_ptr    Pointer to the number of elements in the array
-+ * @param[in]     elem_size Size in bytes of an element in the array
-+ * @param[in]     elem_data Pointer to the data of the element to add. If
-+ *                          `NULL`, the space of the newly added element is
-+ *                          allocated but left uninitialized.
-+ *
-+ * @return Pointer to the data of the element to copy in the newly allocated
-+ *         space
-+ * @see av_dynarray_add(), av_dynarray_add_nofree()
-+ */
-+void *av_dynarray2_add(void **tab_ptr, int *nb_ptr, size_t elem_size,
-+                       const uint8_t *elem_data);
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_mem_misc Miscellaneous Functions
-+ *
-+ * Other functions related to memory allocation.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Multiply two `size_t` values checking for overflow.
-+ *
-+ * @param[in]  a,b Operands of multiplication
-+ * @param[out] r   Pointer to the result of the operation
-+ * @return 0 on success, AVERROR(EINVAL) on overflow
-+ */
-+static inline int av_size_mult(size_t a, size_t b, size_t *r)
-+{
-+    size_t t = a * b;
-+    /* Hack inspired from glibc: don't try the division if nelem and elsize
-+     * are both less than sqrt(SIZE_MAX). */
-+    if ((a | b) >= ((size_t)1 << (sizeof(size_t) * 4)) && a && t / a != b)
-+        return AVERROR(EINVAL);
-+    *r = t;
-+    return 0;
-+}
-+
-+/**
-+ * Set the maximum size that may be allocated in one block.
-+ *
-+ * The value specified with this function is effective for all libavutil's @ref
-+ * lavu_mem_funcs "heap management functions."
-+ *
-+ * By default, the max value is defined as `INT_MAX`.
-+ *
-+ * @param max Value to be set as the new maximum size
-+ *
-+ * @warning Exercise extreme caution when using this function. Don't touch
-+ *          this if you do not understand the full consequence of doing so.
-+ */
-+void av_max_alloc(size_t max);
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_MEM_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/pixfmt.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/pixfmt.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/pixfmt.h
-@@ -0,0 +1,529 @@
-+/*
-+ * copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_PIXFMT_H
-+#define AVUTIL_PIXFMT_H
-+
-+/**
-+ * @file
-+ * pixel format definitions
-+ */
-+
-+#include "libavutil/avconfig.h"
-+#include "version.h"
-+
-+#define AVPALETTE_SIZE 1024
-+#define AVPALETTE_COUNT 256
-+
-+/**
-+ * Pixel format.
-+ *
-+ * @note
-+ * AV_PIX_FMT_RGB32 is handled in an endian-specific manner. An RGBA
-+ * color is put together as:
-+ *  (A << 24) | (R << 16) | (G << 8) | B
-+ * This is stored as BGRA on little-endian CPU architectures and ARGB on
-+ * big-endian CPUs.
-+ *
-+ * @par
-+ * When the pixel format is palettized RGB32 (AV_PIX_FMT_PAL8), the palettized
-+ * image data is stored in AVFrame.data[0]. The palette is transported in
-+ * AVFrame.data[1], is 1024 bytes long (256 4-byte entries) and is
-+ * formatted the same as in AV_PIX_FMT_RGB32 described above (i.e., it is
-+ * also endian-specific). Note also that the individual RGB32 palette
-+ * components stored in AVFrame.data[1] should be in the range 0..255.
-+ * This is important as many custom PAL8 video codecs that were designed
-+ * to run on the IBM VGA graphics adapter use 6-bit palette components.
-+ *
-+ * @par
-+ * For all the 8 bits per pixel formats, an RGB32 palette is in data[1] like
-+ * for pal8. This palette is filled in automatically by the function
-+ * allocating the picture.
-+ */
-+enum AVPixelFormat {
-+    AV_PIX_FMT_NONE = -1,
-+    AV_PIX_FMT_YUV420P,   ///< planar YUV 4:2:0, 12bpp, (1 Cr & Cb sample per 2x2 Y samples)
-+    AV_PIX_FMT_YUYV422,   ///< packed YUV 4:2:2, 16bpp, Y0 Cb Y1 Cr
-+    AV_PIX_FMT_RGB24,     ///< packed RGB 8:8:8, 24bpp, RGBRGB...
-+    AV_PIX_FMT_BGR24,     ///< packed RGB 8:8:8, 24bpp, BGRBGR...
-+    AV_PIX_FMT_YUV422P,   ///< planar YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
-+    AV_PIX_FMT_YUV444P,   ///< planar YUV 4:4:4, 24bpp, (1 Cr & Cb sample per 1x1 Y samples)
-+    AV_PIX_FMT_YUV410P,   ///< planar YUV 4:1:0,  9bpp, (1 Cr & Cb sample per 4x4 Y samples)
-+    AV_PIX_FMT_YUV411P,   ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples)
-+    AV_PIX_FMT_GRAY8,     ///<        Y        ,  8bpp
-+    AV_PIX_FMT_MONOWHITE, ///<        Y        ,  1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb
-+    AV_PIX_FMT_MONOBLACK, ///<        Y        ,  1bpp, 0 is black, 1 is white, in each byte pixels are ordered from the msb to the lsb
-+    AV_PIX_FMT_PAL8,      ///< 8 bits with AV_PIX_FMT_RGB32 palette
-+    AV_PIX_FMT_YUVJ420P,  ///< planar YUV 4:2:0, 12bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV420P and setting color_range
-+    AV_PIX_FMT_YUVJ422P,  ///< planar YUV 4:2:2, 16bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV422P and setting color_range
-+    AV_PIX_FMT_YUVJ444P,  ///< planar YUV 4:4:4, 24bpp, full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV444P and setting color_range
-+    AV_PIX_FMT_UYVY422,   ///< packed YUV 4:2:2, 16bpp, Cb Y0 Cr Y1
-+    AV_PIX_FMT_UYYVYY411, ///< packed YUV 4:1:1, 12bpp, Cb Y0 Y1 Cr Y2 Y3
-+    AV_PIX_FMT_BGR8,      ///< packed RGB 3:3:2,  8bpp, (msb)2B 3G 3R(lsb)
-+    AV_PIX_FMT_BGR4,      ///< packed RGB 1:2:1 bitstream,  4bpp, (msb)1B 2G 1R(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
-+    AV_PIX_FMT_BGR4_BYTE, ///< packed RGB 1:2:1,  8bpp, (msb)1B 2G 1R(lsb)
-+    AV_PIX_FMT_RGB8,      ///< packed RGB 3:3:2,  8bpp, (msb)2R 3G 3B(lsb)
-+    AV_PIX_FMT_RGB4,      ///< packed RGB 1:2:1 bitstream,  4bpp, (msb)1R 2G 1B(lsb), a byte contains two pixels, the first pixel in the byte is the one composed by the 4 msb bits
-+    AV_PIX_FMT_RGB4_BYTE, ///< packed RGB 1:2:1,  8bpp, (msb)1R 2G 1B(lsb)
-+    AV_PIX_FMT_NV12,      ///< planar YUV 4:2:0, 12bpp, 1 plane for Y and 1 plane for the UV components, which are interleaved (first byte U and the following byte V)
-+    AV_PIX_FMT_NV21,      ///< as above, but U and V bytes are swapped
-+
-+    AV_PIX_FMT_ARGB,      ///< packed ARGB 8:8:8:8, 32bpp, ARGBARGB...
-+    AV_PIX_FMT_RGBA,      ///< packed RGBA 8:8:8:8, 32bpp, RGBARGBA...
-+    AV_PIX_FMT_ABGR,      ///< packed ABGR 8:8:8:8, 32bpp, ABGRABGR...
-+    AV_PIX_FMT_BGRA,      ///< packed BGRA 8:8:8:8, 32bpp, BGRABGRA...
-+
-+    AV_PIX_FMT_GRAY16BE,  ///<        Y        , 16bpp, big-endian
-+    AV_PIX_FMT_GRAY16LE,  ///<        Y        , 16bpp, little-endian
-+    AV_PIX_FMT_YUV440P,   ///< planar YUV 4:4:0 (1 Cr & Cb sample per 1x2 Y samples)
-+    AV_PIX_FMT_YUVJ440P,  ///< planar YUV 4:4:0 full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV440P and setting color_range
-+    AV_PIX_FMT_YUVA420P,  ///< planar YUV 4:2:0, 20bpp, (1 Cr & Cb sample per 2x2 Y & A samples)
-+    AV_PIX_FMT_RGB48BE,   ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as big-endian
-+    AV_PIX_FMT_RGB48LE,   ///< packed RGB 16:16:16, 48bpp, 16R, 16G, 16B, the 2-byte value for each R/G/B component is stored as little-endian
-+
-+    AV_PIX_FMT_RGB565BE,  ///< packed RGB 5:6:5, 16bpp, (msb)   5R 6G 5B(lsb), big-endian
-+    AV_PIX_FMT_RGB565LE,  ///< packed RGB 5:6:5, 16bpp, (msb)   5R 6G 5B(lsb), little-endian
-+    AV_PIX_FMT_RGB555BE,  ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), big-endian   , X=unused/undefined
-+    AV_PIX_FMT_RGB555LE,  ///< packed RGB 5:5:5, 16bpp, (msb)1X 5R 5G 5B(lsb), little-endian, X=unused/undefined
-+
-+    AV_PIX_FMT_BGR565BE,  ///< packed BGR 5:6:5, 16bpp, (msb)   5B 6G 5R(lsb), big-endian
-+    AV_PIX_FMT_BGR565LE,  ///< packed BGR 5:6:5, 16bpp, (msb)   5B 6G 5R(lsb), little-endian
-+    AV_PIX_FMT_BGR555BE,  ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), big-endian   , X=unused/undefined
-+    AV_PIX_FMT_BGR555LE,  ///< packed BGR 5:5:5, 16bpp, (msb)1X 5B 5G 5R(lsb), little-endian, X=unused/undefined
-+
-+#if FF_API_VAAPI
-+    /** @name Deprecated pixel formats */
-+    /**@{*/
-+    AV_PIX_FMT_VAAPI_MOCO, ///< HW acceleration through VA API at motion compensation entry-point, Picture.data[3] contains a vaapi_render_state struct which contains macroblocks as well as various fields extracted from headers
-+    AV_PIX_FMT_VAAPI_IDCT, ///< HW acceleration through VA API at IDCT entry-point, Picture.data[3] contains a vaapi_render_state struct which contains fields extracted from headers
-+    AV_PIX_FMT_VAAPI_VLD,  ///< HW decoding through VA API, Picture.data[3] contains a VASurfaceID
-+    /**@}*/
-+    AV_PIX_FMT_VAAPI = AV_PIX_FMT_VAAPI_VLD,
-+#else
-+    /**
-+     *  Hardware acceleration through VA-API, data[3] contains a
-+     *  VASurfaceID.
-+     */
-+    AV_PIX_FMT_VAAPI,
-+#endif
-+
-+    AV_PIX_FMT_YUV420P16LE,  ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV420P16BE,  ///< planar YUV 4:2:0, 24bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV422P16LE,  ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV422P16BE,  ///< planar YUV 4:2:2, 32bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV444P16LE,  ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV444P16BE,  ///< planar YUV 4:4:4, 48bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
-+    AV_PIX_FMT_DXVA2_VLD,    ///< HW decoding through DXVA2, Picture.data[3] contains a LPDIRECT3DSURFACE9 pointer
-+
-+    AV_PIX_FMT_RGB444LE,  ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), little-endian, X=unused/undefined
-+    AV_PIX_FMT_RGB444BE,  ///< packed RGB 4:4:4, 16bpp, (msb)4X 4R 4G 4B(lsb), big-endian,    X=unused/undefined
-+    AV_PIX_FMT_BGR444LE,  ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), little-endian, X=unused/undefined
-+    AV_PIX_FMT_BGR444BE,  ///< packed BGR 4:4:4, 16bpp, (msb)4X 4B 4G 4R(lsb), big-endian,    X=unused/undefined
-+    AV_PIX_FMT_YA8,       ///< 8 bits gray, 8 bits alpha
-+
-+    AV_PIX_FMT_Y400A = AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8
-+    AV_PIX_FMT_GRAY8A= AV_PIX_FMT_YA8, ///< alias for AV_PIX_FMT_YA8
-+
-+    AV_PIX_FMT_BGR48BE,   ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as big-endian
-+    AV_PIX_FMT_BGR48LE,   ///< packed RGB 16:16:16, 48bpp, 16B, 16G, 16R, the 2-byte value for each R/G/B component is stored as little-endian
-+
-+    /**
-+     * The following 12 formats have the disadvantage of needing 1 format for each bit depth.
-+     * Notice that each 9/10 bits sample is stored in 16 bits with extra padding.
-+     * If you want to support multiple bit depths, then using AV_PIX_FMT_YUV420P16* with the bpp stored separately is better.
-+     */
-+    AV_PIX_FMT_YUV420P9BE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV420P9LE, ///< planar YUV 4:2:0, 13.5bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV420P10BE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV420P10LE,///< planar YUV 4:2:0, 15bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV422P10BE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV422P10LE,///< planar YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV444P9BE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV444P9LE, ///< planar YUV 4:4:4, 27bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV444P10BE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV444P10LE,///< planar YUV 4:4:4, 30bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV422P9BE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV422P9LE, ///< planar YUV 4:2:2, 18bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_GBRP,      ///< planar GBR 4:4:4 24bpp
-+    AV_PIX_FMT_GBR24P = AV_PIX_FMT_GBRP, // alias for #AV_PIX_FMT_GBRP
-+    AV_PIX_FMT_GBRP9BE,   ///< planar GBR 4:4:4 27bpp, big-endian
-+    AV_PIX_FMT_GBRP9LE,   ///< planar GBR 4:4:4 27bpp, little-endian
-+    AV_PIX_FMT_GBRP10BE,  ///< planar GBR 4:4:4 30bpp, big-endian
-+    AV_PIX_FMT_GBRP10LE,  ///< planar GBR 4:4:4 30bpp, little-endian
-+    AV_PIX_FMT_GBRP16BE,  ///< planar GBR 4:4:4 48bpp, big-endian
-+    AV_PIX_FMT_GBRP16LE,  ///< planar GBR 4:4:4 48bpp, little-endian
-+    AV_PIX_FMT_YUVA422P,  ///< planar YUV 4:2:2 24bpp, (1 Cr & Cb sample per 2x1 Y & A samples)
-+    AV_PIX_FMT_YUVA444P,  ///< planar YUV 4:4:4 32bpp, (1 Cr & Cb sample per 1x1 Y & A samples)
-+    AV_PIX_FMT_YUVA420P9BE,  ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), big-endian
-+    AV_PIX_FMT_YUVA420P9LE,  ///< planar YUV 4:2:0 22.5bpp, (1 Cr & Cb sample per 2x2 Y & A samples), little-endian
-+    AV_PIX_FMT_YUVA422P9BE,  ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), big-endian
-+    AV_PIX_FMT_YUVA422P9LE,  ///< planar YUV 4:2:2 27bpp, (1 Cr & Cb sample per 2x1 Y & A samples), little-endian
-+    AV_PIX_FMT_YUVA444P9BE,  ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
-+    AV_PIX_FMT_YUVA444P9LE,  ///< planar YUV 4:4:4 36bpp, (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
-+    AV_PIX_FMT_YUVA420P10BE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA420P10LE, ///< planar YUV 4:2:0 25bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
-+    AV_PIX_FMT_YUVA422P10BE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA422P10LE, ///< planar YUV 4:2:2 30bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
-+    AV_PIX_FMT_YUVA444P10BE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA444P10LE, ///< planar YUV 4:4:4 40bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
-+    AV_PIX_FMT_YUVA420P16BE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA420P16LE, ///< planar YUV 4:2:0 40bpp, (1 Cr & Cb sample per 2x2 Y & A samples, little-endian)
-+    AV_PIX_FMT_YUVA422P16BE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA422P16LE, ///< planar YUV 4:2:2 48bpp, (1 Cr & Cb sample per 2x1 Y & A samples, little-endian)
-+    AV_PIX_FMT_YUVA444P16BE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, big-endian)
-+    AV_PIX_FMT_YUVA444P16LE, ///< planar YUV 4:4:4 64bpp, (1 Cr & Cb sample per 1x1 Y & A samples, little-endian)
-+
-+    AV_PIX_FMT_VDPAU,     ///< HW acceleration through VDPAU, Picture.data[3] contains a VdpVideoSurface
-+
-+    AV_PIX_FMT_XYZ12LE,      ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as little-endian, the 4 lower bits are set to 0
-+    AV_PIX_FMT_XYZ12BE,      ///< packed XYZ 4:4:4, 36 bpp, (msb) 12X, 12Y, 12Z (lsb), the 2-byte value for each X/Y/Z is stored as big-endian, the 4 lower bits are set to 0
-+    AV_PIX_FMT_NV16,         ///< interleaved chroma YUV 4:2:2, 16bpp, (1 Cr & Cb sample per 2x1 Y samples)
-+    AV_PIX_FMT_NV20LE,       ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_NV20BE,       ///< interleaved chroma YUV 4:2:2, 20bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+
-+    AV_PIX_FMT_RGBA64BE,     ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
-+    AV_PIX_FMT_RGBA64LE,     ///< packed RGBA 16:16:16:16, 64bpp, 16R, 16G, 16B, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
-+    AV_PIX_FMT_BGRA64BE,     ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as big-endian
-+    AV_PIX_FMT_BGRA64LE,     ///< packed RGBA 16:16:16:16, 64bpp, 16B, 16G, 16R, 16A, the 2-byte value for each R/G/B/A component is stored as little-endian
-+
-+    AV_PIX_FMT_YVYU422,   ///< packed YUV 4:2:2, 16bpp, Y0 Cr Y1 Cb
-+
-+    AV_PIX_FMT_YA16BE,       ///< 16 bits gray, 16 bits alpha (big-endian)
-+    AV_PIX_FMT_YA16LE,       ///< 16 bits gray, 16 bits alpha (little-endian)
-+
-+    AV_PIX_FMT_GBRAP,        ///< planar GBRA 4:4:4:4 32bpp
-+    AV_PIX_FMT_GBRAP16BE,    ///< planar GBRA 4:4:4:4 64bpp, big-endian
-+    AV_PIX_FMT_GBRAP16LE,    ///< planar GBRA 4:4:4:4 64bpp, little-endian
-+    /**
-+     *  HW acceleration through QSV, data[3] contains a pointer to the
-+     *  mfxFrameSurface1 structure.
-+     */
-+    AV_PIX_FMT_QSV,
-+    /**
-+     * HW acceleration though MMAL, data[3] contains a pointer to the
-+     * MMAL_BUFFER_HEADER_T structure.
-+     */
-+    AV_PIX_FMT_MMAL,
-+
-+    AV_PIX_FMT_D3D11VA_VLD,  ///< HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer
-+
-+    /**
-+     * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers
-+     * exactly as for system memory frames.
-+     */
-+    AV_PIX_FMT_CUDA,
-+
-+    AV_PIX_FMT_0RGB,        ///< packed RGB 8:8:8, 32bpp, XRGBXRGB...   X=unused/undefined
-+    AV_PIX_FMT_RGB0,        ///< packed RGB 8:8:8, 32bpp, RGBXRGBX...   X=unused/undefined
-+    AV_PIX_FMT_0BGR,        ///< packed BGR 8:8:8, 32bpp, XBGRXBGR...   X=unused/undefined
-+    AV_PIX_FMT_BGR0,        ///< packed BGR 8:8:8, 32bpp, BGRXBGRX...   X=unused/undefined
-+
-+    AV_PIX_FMT_YUV420P12BE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV420P12LE, ///< planar YUV 4:2:0,18bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV420P14BE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV420P14LE, ///< planar YUV 4:2:0,21bpp, (1 Cr & Cb sample per 2x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV422P12BE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV422P12LE, ///< planar YUV 4:2:2,24bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV422P14BE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV422P14LE, ///< planar YUV 4:2:2,28bpp, (1 Cr & Cb sample per 2x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV444P12BE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV444P12LE, ///< planar YUV 4:4:4,36bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
-+    AV_PIX_FMT_YUV444P14BE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), big-endian
-+    AV_PIX_FMT_YUV444P14LE, ///< planar YUV 4:4:4,42bpp, (1 Cr & Cb sample per 1x1 Y samples), little-endian
-+    AV_PIX_FMT_GBRP12BE,    ///< planar GBR 4:4:4 36bpp, big-endian
-+    AV_PIX_FMT_GBRP12LE,    ///< planar GBR 4:4:4 36bpp, little-endian
-+    AV_PIX_FMT_GBRP14BE,    ///< planar GBR 4:4:4 42bpp, big-endian
-+    AV_PIX_FMT_GBRP14LE,    ///< planar GBR 4:4:4 42bpp, little-endian
-+    AV_PIX_FMT_YUVJ411P,    ///< planar YUV 4:1:1, 12bpp, (1 Cr & Cb sample per 4x1 Y samples) full scale (JPEG), deprecated in favor of AV_PIX_FMT_YUV411P and setting color_range
-+
-+    AV_PIX_FMT_BAYER_BGGR8,    ///< bayer, BGBG..(odd line), GRGR..(even line), 8-bit samples */
-+    AV_PIX_FMT_BAYER_RGGB8,    ///< bayer, RGRG..(odd line), GBGB..(even line), 8-bit samples */
-+    AV_PIX_FMT_BAYER_GBRG8,    ///< bayer, GBGB..(odd line), RGRG..(even line), 8-bit samples */
-+    AV_PIX_FMT_BAYER_GRBG8,    ///< bayer, GRGR..(odd line), BGBG..(even line), 8-bit samples */
-+    AV_PIX_FMT_BAYER_BGGR16LE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, little-endian */
-+    AV_PIX_FMT_BAYER_BGGR16BE, ///< bayer, BGBG..(odd line), GRGR..(even line), 16-bit samples, big-endian */
-+    AV_PIX_FMT_BAYER_RGGB16LE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, little-endian */
-+    AV_PIX_FMT_BAYER_RGGB16BE, ///< bayer, RGRG..(odd line), GBGB..(even line), 16-bit samples, big-endian */
-+    AV_PIX_FMT_BAYER_GBRG16LE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, little-endian */
-+    AV_PIX_FMT_BAYER_GBRG16BE, ///< bayer, GBGB..(odd line), RGRG..(even line), 16-bit samples, big-endian */
-+    AV_PIX_FMT_BAYER_GRBG16LE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, little-endian */
-+    AV_PIX_FMT_BAYER_GRBG16BE, ///< bayer, GRGR..(odd line), BGBG..(even line), 16-bit samples, big-endian */
-+
-+    AV_PIX_FMT_XVMC,///< XVideo Motion Acceleration via common packet passing
-+
-+    AV_PIX_FMT_YUV440P10LE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV440P10BE, ///< planar YUV 4:4:0,20bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
-+    AV_PIX_FMT_YUV440P12LE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), little-endian
-+    AV_PIX_FMT_YUV440P12BE, ///< planar YUV 4:4:0,24bpp, (1 Cr & Cb sample per 1x2 Y samples), big-endian
-+    AV_PIX_FMT_AYUV64LE,    ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), little-endian
-+    AV_PIX_FMT_AYUV64BE,    ///< packed AYUV 4:4:4,64bpp (1 Cr & Cb sample per 1x1 Y & A samples), big-endian
-+
-+    AV_PIX_FMT_VIDEOTOOLBOX, ///< hardware decoding through Videotoolbox
-+
-+    AV_PIX_FMT_P010LE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, little-endian
-+    AV_PIX_FMT_P010BE, ///< like NV12, with 10bpp per component, data in the high bits, zeros in the low bits, big-endian
-+
-+    AV_PIX_FMT_GBRAP12BE,  ///< planar GBR 4:4:4:4 48bpp, big-endian
-+    AV_PIX_FMT_GBRAP12LE,  ///< planar GBR 4:4:4:4 48bpp, little-endian
-+
-+    AV_PIX_FMT_GBRAP10BE,  ///< planar GBR 4:4:4:4 40bpp, big-endian
-+    AV_PIX_FMT_GBRAP10LE,  ///< planar GBR 4:4:4:4 40bpp, little-endian
-+
-+    AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec
-+
-+    AV_PIX_FMT_GRAY12BE,   ///<        Y        , 12bpp, big-endian
-+    AV_PIX_FMT_GRAY12LE,   ///<        Y        , 12bpp, little-endian
-+    AV_PIX_FMT_GRAY10BE,   ///<        Y        , 10bpp, big-endian
-+    AV_PIX_FMT_GRAY10LE,   ///<        Y        , 10bpp, little-endian
-+
-+    AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian
-+    AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, big-endian
-+
-+    /**
-+     * Hardware surfaces for Direct3D11.
-+     *
-+     * This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11
-+     * hwaccel API and filtering support AV_PIX_FMT_D3D11 only.
-+     *
-+     * data[0] contains a ID3D11Texture2D pointer, and data[1] contains the
-+     * texture array index of the frame as intptr_t if the ID3D11Texture2D is
-+     * an array texture (or always 0 if it's a normal texture).
-+     */
-+    AV_PIX_FMT_D3D11,
-+
-+    AV_PIX_FMT_GRAY9BE,   ///<        Y        , 9bpp, big-endian
-+    AV_PIX_FMT_GRAY9LE,   ///<        Y        , 9bpp, little-endian
-+
-+    AV_PIX_FMT_GBRPF32BE,  ///< IEEE-754 single precision planar GBR 4:4:4,     96bpp, big-endian
-+    AV_PIX_FMT_GBRPF32LE,  ///< IEEE-754 single precision planar GBR 4:4:4,     96bpp, little-endian
-+    AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian
-+    AV_PIX_FMT_GBRAPF32LE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian
-+
-+    /**
-+     * DRM-managed buffers exposed through PRIME buffer sharing.
-+     *
-+     * data[0] points to an AVDRMFrameDescriptor.
-+     */
-+    AV_PIX_FMT_DRM_PRIME,
-+    /**
-+     * Hardware surfaces for OpenCL.
-+     *
-+     * data[i] contain 2D image objects (typed in C as cl_mem, used
-+     * in OpenCL as image2d_t) for each plane of the surface.
-+     */
-+    AV_PIX_FMT_OPENCL,
-+
-+    AV_PIX_FMT_NB         ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions
-+};
-+
-+#if AV_HAVE_BIGENDIAN
-+#   define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##be
-+#else
-+#   define AV_PIX_FMT_NE(be, le) AV_PIX_FMT_##le
-+#endif
-+
-+#define AV_PIX_FMT_RGB32   AV_PIX_FMT_NE(ARGB, BGRA)
-+#define AV_PIX_FMT_RGB32_1 AV_PIX_FMT_NE(RGBA, ABGR)
-+#define AV_PIX_FMT_BGR32   AV_PIX_FMT_NE(ABGR, RGBA)
-+#define AV_PIX_FMT_BGR32_1 AV_PIX_FMT_NE(BGRA, ARGB)
-+#define AV_PIX_FMT_0RGB32  AV_PIX_FMT_NE(0RGB, BGR0)
-+#define AV_PIX_FMT_0BGR32  AV_PIX_FMT_NE(0BGR, RGB0)
-+
-+#define AV_PIX_FMT_GRAY9  AV_PIX_FMT_NE(GRAY9BE,  GRAY9LE)
-+#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE)
-+#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE)
-+#define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE)
-+#define AV_PIX_FMT_YA16   AV_PIX_FMT_NE(YA16BE,   YA16LE)
-+#define AV_PIX_FMT_RGB48  AV_PIX_FMT_NE(RGB48BE,  RGB48LE)
-+#define AV_PIX_FMT_RGB565 AV_PIX_FMT_NE(RGB565BE, RGB565LE)
-+#define AV_PIX_FMT_RGB555 AV_PIX_FMT_NE(RGB555BE, RGB555LE)
-+#define AV_PIX_FMT_RGB444 AV_PIX_FMT_NE(RGB444BE, RGB444LE)
-+#define AV_PIX_FMT_RGBA64 AV_PIX_FMT_NE(RGBA64BE, RGBA64LE)
-+#define AV_PIX_FMT_BGR48  AV_PIX_FMT_NE(BGR48BE,  BGR48LE)
-+#define AV_PIX_FMT_BGR565 AV_PIX_FMT_NE(BGR565BE, BGR565LE)
-+#define AV_PIX_FMT_BGR555 AV_PIX_FMT_NE(BGR555BE, BGR555LE)
-+#define AV_PIX_FMT_BGR444 AV_PIX_FMT_NE(BGR444BE, BGR444LE)
-+#define AV_PIX_FMT_BGRA64 AV_PIX_FMT_NE(BGRA64BE, BGRA64LE)
-+
-+#define AV_PIX_FMT_YUV420P9  AV_PIX_FMT_NE(YUV420P9BE , YUV420P9LE)
-+#define AV_PIX_FMT_YUV422P9  AV_PIX_FMT_NE(YUV422P9BE , YUV422P9LE)
-+#define AV_PIX_FMT_YUV444P9  AV_PIX_FMT_NE(YUV444P9BE , YUV444P9LE)
-+#define AV_PIX_FMT_YUV420P10 AV_PIX_FMT_NE(YUV420P10BE, YUV420P10LE)
-+#define AV_PIX_FMT_YUV422P10 AV_PIX_FMT_NE(YUV422P10BE, YUV422P10LE)
-+#define AV_PIX_FMT_YUV440P10 AV_PIX_FMT_NE(YUV440P10BE, YUV440P10LE)
-+#define AV_PIX_FMT_YUV444P10 AV_PIX_FMT_NE(YUV444P10BE, YUV444P10LE)
-+#define AV_PIX_FMT_YUV420P12 AV_PIX_FMT_NE(YUV420P12BE, YUV420P12LE)
-+#define AV_PIX_FMT_YUV422P12 AV_PIX_FMT_NE(YUV422P12BE, YUV422P12LE)
-+#define AV_PIX_FMT_YUV440P12 AV_PIX_FMT_NE(YUV440P12BE, YUV440P12LE)
-+#define AV_PIX_FMT_YUV444P12 AV_PIX_FMT_NE(YUV444P12BE, YUV444P12LE)
-+#define AV_PIX_FMT_YUV420P14 AV_PIX_FMT_NE(YUV420P14BE, YUV420P14LE)
-+#define AV_PIX_FMT_YUV422P14 AV_PIX_FMT_NE(YUV422P14BE, YUV422P14LE)
-+#define AV_PIX_FMT_YUV444P14 AV_PIX_FMT_NE(YUV444P14BE, YUV444P14LE)
-+#define AV_PIX_FMT_YUV420P16 AV_PIX_FMT_NE(YUV420P16BE, YUV420P16LE)
-+#define AV_PIX_FMT_YUV422P16 AV_PIX_FMT_NE(YUV422P16BE, YUV422P16LE)
-+#define AV_PIX_FMT_YUV444P16 AV_PIX_FMT_NE(YUV444P16BE, YUV444P16LE)
-+
-+#define AV_PIX_FMT_GBRP9     AV_PIX_FMT_NE(GBRP9BE ,    GBRP9LE)
-+#define AV_PIX_FMT_GBRP10    AV_PIX_FMT_NE(GBRP10BE,    GBRP10LE)
-+#define AV_PIX_FMT_GBRP12    AV_PIX_FMT_NE(GBRP12BE,    GBRP12LE)
-+#define AV_PIX_FMT_GBRP14    AV_PIX_FMT_NE(GBRP14BE,    GBRP14LE)
-+#define AV_PIX_FMT_GBRP16    AV_PIX_FMT_NE(GBRP16BE,    GBRP16LE)
-+#define AV_PIX_FMT_GBRAP10   AV_PIX_FMT_NE(GBRAP10BE,   GBRAP10LE)
-+#define AV_PIX_FMT_GBRAP12   AV_PIX_FMT_NE(GBRAP12BE,   GBRAP12LE)
-+#define AV_PIX_FMT_GBRAP16   AV_PIX_FMT_NE(GBRAP16BE,   GBRAP16LE)
-+
-+#define AV_PIX_FMT_BAYER_BGGR16 AV_PIX_FMT_NE(BAYER_BGGR16BE,    BAYER_BGGR16LE)
-+#define AV_PIX_FMT_BAYER_RGGB16 AV_PIX_FMT_NE(BAYER_RGGB16BE,    BAYER_RGGB16LE)
-+#define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE,    BAYER_GBRG16LE)
-+#define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE,    BAYER_GRBG16LE)
-+
-+#define AV_PIX_FMT_GBRPF32    AV_PIX_FMT_NE(GBRPF32BE,  GBRPF32LE)
-+#define AV_PIX_FMT_GBRAPF32   AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE)
-+
-+#define AV_PIX_FMT_YUVA420P9  AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE)
-+#define AV_PIX_FMT_YUVA422P9  AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE)
-+#define AV_PIX_FMT_YUVA444P9  AV_PIX_FMT_NE(YUVA444P9BE , YUVA444P9LE)
-+#define AV_PIX_FMT_YUVA420P10 AV_PIX_FMT_NE(YUVA420P10BE, YUVA420P10LE)
-+#define AV_PIX_FMT_YUVA422P10 AV_PIX_FMT_NE(YUVA422P10BE, YUVA422P10LE)
-+#define AV_PIX_FMT_YUVA444P10 AV_PIX_FMT_NE(YUVA444P10BE, YUVA444P10LE)
-+#define AV_PIX_FMT_YUVA420P16 AV_PIX_FMT_NE(YUVA420P16BE, YUVA420P16LE)
-+#define AV_PIX_FMT_YUVA422P16 AV_PIX_FMT_NE(YUVA422P16BE, YUVA422P16LE)
-+#define AV_PIX_FMT_YUVA444P16 AV_PIX_FMT_NE(YUVA444P16BE, YUVA444P16LE)
-+
-+#define AV_PIX_FMT_XYZ12      AV_PIX_FMT_NE(XYZ12BE, XYZ12LE)
-+#define AV_PIX_FMT_NV20       AV_PIX_FMT_NE(NV20BE,  NV20LE)
-+#define AV_PIX_FMT_AYUV64     AV_PIX_FMT_NE(AYUV64BE, AYUV64LE)
-+#define AV_PIX_FMT_P010       AV_PIX_FMT_NE(P010BE,  P010LE)
-+#define AV_PIX_FMT_P016       AV_PIX_FMT_NE(P016BE,  P016LE)
-+
-+/**
-+  * Chromaticity coordinates of the source primaries.
-+  * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1.
-+  */
-+enum AVColorPrimaries {
-+    AVCOL_PRI_RESERVED0   = 0,
-+    AVCOL_PRI_BT709       = 1,  ///< also ITU-R BT1361 / IEC 61966-2-4 / SMPTE RP177 Annex B
-+    AVCOL_PRI_UNSPECIFIED = 2,
-+    AVCOL_PRI_RESERVED    = 3,
-+    AVCOL_PRI_BT470M      = 4,  ///< also FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
-+
-+    AVCOL_PRI_BT470BG     = 5,  ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM
-+    AVCOL_PRI_SMPTE170M   = 6,  ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
-+    AVCOL_PRI_SMPTE240M   = 7,  ///< functionally identical to above
-+    AVCOL_PRI_FILM        = 8,  ///< colour filters using Illuminant C
-+    AVCOL_PRI_BT2020      = 9,  ///< ITU-R BT2020
-+    AVCOL_PRI_SMPTE428    = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ)
-+    AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428,
-+    AVCOL_PRI_SMPTE431    = 11, ///< SMPTE ST 431-2 (2011) / DCI P3
-+    AVCOL_PRI_SMPTE432    = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3
-+    AVCOL_PRI_JEDEC_P22   = 22, ///< JEDEC P22 phosphors
-+    AVCOL_PRI_NB                ///< Not part of ABI
-+};
-+
-+/**
-+ * Color Transfer Characteristic.
-+ * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2.
-+ */
-+enum AVColorTransferCharacteristic {
-+    AVCOL_TRC_RESERVED0    = 0,
-+    AVCOL_TRC_BT709        = 1,  ///< also ITU-R BT1361
-+    AVCOL_TRC_UNSPECIFIED  = 2,
-+    AVCOL_TRC_RESERVED     = 3,
-+    AVCOL_TRC_GAMMA22      = 4,  ///< also ITU-R BT470M / ITU-R BT1700 625 PAL & SECAM
-+    AVCOL_TRC_GAMMA28      = 5,  ///< also ITU-R BT470BG
-+    AVCOL_TRC_SMPTE170M    = 6,  ///< also ITU-R BT601-6 525 or 625 / ITU-R BT1358 525 or 625 / ITU-R BT1700 NTSC
-+    AVCOL_TRC_SMPTE240M    = 7,
-+    AVCOL_TRC_LINEAR       = 8,  ///< "Linear transfer characteristics"
-+    AVCOL_TRC_LOG          = 9,  ///< "Logarithmic transfer characteristic (100:1 range)"
-+    AVCOL_TRC_LOG_SQRT     = 10, ///< "Logarithmic transfer characteristic (100 * Sqrt(10) : 1 range)"
-+    AVCOL_TRC_IEC61966_2_4 = 11, ///< IEC 61966-2-4
-+    AVCOL_TRC_BT1361_ECG   = 12, ///< ITU-R BT1361 Extended Colour Gamut
-+    AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC)
-+    AVCOL_TRC_BT2020_10    = 14, ///< ITU-R BT2020 for 10-bit system
-+    AVCOL_TRC_BT2020_12    = 15, ///< ITU-R BT2020 for 12-bit system
-+    AVCOL_TRC_SMPTE2084    = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems
-+    AVCOL_TRC_SMPTEST2084  = AVCOL_TRC_SMPTE2084,
-+    AVCOL_TRC_SMPTE428     = 17, ///< SMPTE ST 428-1
-+    AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428,
-+    AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma"
-+    AVCOL_TRC_NB                 ///< Not part of ABI
-+};
-+
-+/**
-+ * YUV colorspace type.
-+ * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3.
-+ */
-+enum AVColorSpace {
-+    AVCOL_SPC_RGB         = 0,  ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB)
-+    AVCOL_SPC_BT709       = 1,  ///< also ITU-R BT1361 / IEC 61966-2-4 xvYCC709 / SMPTE RP177 Annex B
-+    AVCOL_SPC_UNSPECIFIED = 2,
-+    AVCOL_SPC_RESERVED    = 3,
-+    AVCOL_SPC_FCC         = 4,  ///< FCC Title 47 Code of Federal Regulations 73.682 (a)(20)
-+    AVCOL_SPC_BT470BG     = 5,  ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601
-+    AVCOL_SPC_SMPTE170M   = 6,  ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC
-+    AVCOL_SPC_SMPTE240M   = 7,  ///< functionally identical to above
-+    AVCOL_SPC_YCGCO       = 8,  ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16
-+    AVCOL_SPC_YCOCG       = AVCOL_SPC_YCGCO,
-+    AVCOL_SPC_BT2020_NCL  = 9,  ///< ITU-R BT2020 non-constant luminance system
-+    AVCOL_SPC_BT2020_CL   = 10, ///< ITU-R BT2020 constant luminance system
-+    AVCOL_SPC_SMPTE2085   = 11, ///< SMPTE 2085, Y'D'zD'x
-+    AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system
-+    AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system
-+    AVCOL_SPC_ICTCP       = 14, ///< ITU-R BT.2100-0, ICtCp
-+    AVCOL_SPC_NB                ///< Not part of ABI
-+};
-+
-+/**
-+ * MPEG vs JPEG YUV range.
-+ */
-+enum AVColorRange {
-+    AVCOL_RANGE_UNSPECIFIED = 0,
-+    AVCOL_RANGE_MPEG        = 1, ///< the normal 219*2^(n-8) "MPEG" YUV ranges
-+    AVCOL_RANGE_JPEG        = 2, ///< the normal     2^n-1   "JPEG" YUV ranges
-+    AVCOL_RANGE_NB               ///< Not part of ABI
-+};
-+
-+/**
-+ * Location of chroma samples.
-+ *
-+ * Illustration showing the location of the first (top left) chroma sample of the
-+ * image, the left shows only luma, the right
-+ * shows the location of the chroma sample, the 2 could be imagined to overlay
-+ * each other but are drawn separately due to limitations of ASCII
-+ *
-+ *                1st 2nd       1st 2nd horizontal luma sample positions
-+ *                 v   v         v   v
-+ *                 ______        ______
-+ *1st luma line > |X   X ...    |3 4 X ...     X are luma samples,
-+ *                |             |1 2           1-6 are possible chroma positions
-+ *2nd luma line > |X   X ...    |5 6 X ...     0 is undefined/unknown position
-+ */
-+enum AVChromaLocation {
-+    AVCHROMA_LOC_UNSPECIFIED = 0,
-+    AVCHROMA_LOC_LEFT        = 1, ///< MPEG-2/4 4:2:0, H.264 default for 4:2:0
-+    AVCHROMA_LOC_CENTER      = 2, ///< MPEG-1 4:2:0, JPEG 4:2:0, H.263 4:2:0
-+    AVCHROMA_LOC_TOPLEFT     = 3, ///< ITU-R 601, SMPTE 274M 296M S314M(DV 4:1:1), mpeg2 4:2:2
-+    AVCHROMA_LOC_TOP         = 4,
-+    AVCHROMA_LOC_BOTTOMLEFT  = 5,
-+    AVCHROMA_LOC_BOTTOM      = 6,
-+    AVCHROMA_LOC_NB               ///< Not part of ABI
-+};
-+
-+#endif /* AVUTIL_PIXFMT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/rational.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/rational.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/rational.h
-@@ -0,0 +1,214 @@
-+/*
-+ * rational numbers
-+ * Copyright (c) 2003 Michael Niedermayer <michaelni@gmx.at>
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu_math_rational
-+ * Utilties for rational number calculation.
-+ * @author Michael Niedermayer <michaelni@gmx.at>
-+ */
-+
-+#ifndef AVUTIL_RATIONAL_H
-+#define AVUTIL_RATIONAL_H
-+
-+#include <stdint.h>
-+#include <limits.h>
-+#include "attributes.h"
-+
-+/**
-+ * @defgroup lavu_math_rational AVRational
-+ * @ingroup lavu_math
-+ * Rational number calculation.
-+ *
-+ * While rational numbers can be expressed as floating-point numbers, the
-+ * conversion process is a lossy one, so are floating-point operations. On the
-+ * other hand, the nature of FFmpeg demands highly accurate calculation of
-+ * timestamps. This set of rational number utilities serves as a generic
-+ * interface for manipulating rational numbers as pairs of numerators and
-+ * denominators.
-+ *
-+ * Many of the functions that operate on AVRational's have the suffix `_q`, in
-+ * reference to the mathematical symbol "ℚ" (Q) which denotes the set of all
-+ * rational numbers.
-+ *
-+ * @{
-+ */
-+
-+/**
-+ * Rational number (pair of numerator and denominator).
-+ */
-+typedef struct AVRational{
-+    int num; ///< Numerator
-+    int den; ///< Denominator
-+} AVRational;
-+
-+/**
-+ * Create an AVRational.
-+ *
-+ * Useful for compilers that do not support compound literals.
-+ *
-+ * @note The return value is not reduced.
-+ * @see av_reduce()
-+ */
-+static inline AVRational av_make_q(int num, int den)
-+{
-+    AVRational r = { num, den };
-+    return r;
-+}
-+
-+/**
-+ * Compare two rationals.
-+ *
-+ * @param a First rational
-+ * @param b Second rational
-+ *
-+ * @return One of the following values:
-+ *         - 0 if `a == b`
-+ *         - 1 if `a > b`
-+ *         - -1 if `a < b`
-+ *         - `INT_MIN` if one of the values is of the form `0 / 0`
-+ */
-+static inline int av_cmp_q(AVRational a, AVRational b){
-+    const int64_t tmp= a.num * (int64_t)b.den - b.num * (int64_t)a.den;
-+
-+    if(tmp) return (int)((tmp ^ a.den ^ b.den)>>63)|1;
-+    else if(b.den && a.den) return 0;
-+    else if(a.num && b.num) return (a.num>>31) - (b.num>>31);
-+    else                    return INT_MIN;
-+}
-+
-+/**
-+ * Convert an AVRational to a `double`.
-+ * @param a AVRational to convert
-+ * @return `a` in floating-point form
-+ * @see av_d2q()
-+ */
-+static inline double av_q2d(AVRational a){
-+    return a.num / (double) a.den;
-+}
-+
-+/**
-+ * Reduce a fraction.
-+ *
-+ * This is useful for framerate calculations.
-+ *
-+ * @param[out] dst_num Destination numerator
-+ * @param[out] dst_den Destination denominator
-+ * @param[in]      num Source numerator
-+ * @param[in]      den Source denominator
-+ * @param[in]      max Maximum allowed values for `dst_num` & `dst_den`
-+ * @return 1 if the operation is exact, 0 otherwise
-+ */
-+int av_reduce(int *dst_num, int *dst_den, int64_t num, int64_t den, int64_t max);
-+
-+/**
-+ * Multiply two rationals.
-+ * @param b First rational
-+ * @param c Second rational
-+ * @return b*c
-+ */
-+AVRational av_mul_q(AVRational b, AVRational c) av_const;
-+
-+/**
-+ * Divide one rational by another.
-+ * @param b First rational
-+ * @param c Second rational
-+ * @return b/c
-+ */
-+AVRational av_div_q(AVRational b, AVRational c) av_const;
-+
-+/**
-+ * Add two rationals.
-+ * @param b First rational
-+ * @param c Second rational
-+ * @return b+c
-+ */
-+AVRational av_add_q(AVRational b, AVRational c) av_const;
-+
-+/**
-+ * Subtract one rational from another.
-+ * @param b First rational
-+ * @param c Second rational
-+ * @return b-c
-+ */
-+AVRational av_sub_q(AVRational b, AVRational c) av_const;
-+
-+/**
-+ * Invert a rational.
-+ * @param q value
-+ * @return 1 / q
-+ */
-+static av_always_inline AVRational av_inv_q(AVRational q)
-+{
-+    AVRational r = { q.den, q.num };
-+    return r;
-+}
-+
-+/**
-+ * Convert a double precision floating point number to a rational.
-+ *
-+ * In case of infinity, the returned value is expressed as `{1, 0}` or
-+ * `{-1, 0}` depending on the sign.
-+ *
-+ * @param d   `double` to convert
-+ * @param max Maximum allowed numerator and denominator
-+ * @return `d` in AVRational form
-+ * @see av_q2d()
-+ */
-+AVRational av_d2q(double d, int max) av_const;
-+
-+/**
-+ * Find which of the two rationals is closer to another rational.
-+ *
-+ * @param q     Rational to be compared against
-+ * @param q1,q2 Rationals to be tested
-+ * @return One of the following values:
-+ *         - 1 if `q1` is nearer to `q` than `q2`
-+ *         - -1 if `q2` is nearer to `q` than `q1`
-+ *         - 0 if they have the same distance
-+ */
-+int av_nearer_q(AVRational q, AVRational q1, AVRational q2);
-+
-+/**
-+ * Find the value in a list of rationals nearest a given reference rational.
-+ *
-+ * @param q      Reference rational
-+ * @param q_list Array of rationals terminated by `{0, 0}`
-+ * @return Index of the nearest value found in the array
-+ */
-+int av_find_nearest_q_idx(AVRational q, const AVRational* q_list);
-+
-+/**
-+ * Convert an AVRational to a IEEE 32-bit `float` expressed in fixed-point
-+ * format.
-+ *
-+ * @param q Rational to be converted
-+ * @return Equivalent floating-point value, expressed as an unsigned 32-bit
-+ *         integer.
-+ * @note The returned value is platform-indepedant.
-+ */
-+uint32_t av_q2intfloat(AVRational q);
-+
-+/**
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_RATIONAL_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/samplefmt.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/samplefmt.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/samplefmt.h
-@@ -0,0 +1,272 @@
-+/*
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+#ifndef AVUTIL_SAMPLEFMT_H
-+#define AVUTIL_SAMPLEFMT_H
-+
-+#include <stdint.h>
-+
-+#include "avutil.h"
-+#include "attributes.h"
-+
-+/**
-+ * @addtogroup lavu_audio
-+ * @{
-+ *
-+ * @defgroup lavu_sampfmts Audio sample formats
-+ *
-+ * Audio sample format enumeration and related convenience functions.
-+ * @{
-+ */
-+
-+/**
-+ * Audio sample formats
-+ *
-+ * - The data described by the sample format is always in native-endian order.
-+ *   Sample values can be expressed by native C types, hence the lack of a signed
-+ *   24-bit sample format even though it is a common raw audio data format.
-+ *
-+ * - The floating-point formats are based on full volume being in the range
-+ *   [-1.0, 1.0]. Any values outside this range are beyond full volume level.
-+ *
-+ * - The data layout as used in av_samples_fill_arrays() and elsewhere in FFmpeg
-+ *   (such as AVFrame in libavcodec) is as follows:
-+ *
-+ * @par
-+ * For planar sample formats, each audio channel is in a separate data plane,
-+ * and linesize is the buffer size, in bytes, for a single plane. All data
-+ * planes must be the same size. For packed sample formats, only the first data
-+ * plane is used, and samples for each channel are interleaved. In this case,
-+ * linesize is the buffer size, in bytes, for the 1 plane.
-+ *
-+ */
-+enum AVSampleFormat {
-+    AV_SAMPLE_FMT_NONE = -1,
-+    AV_SAMPLE_FMT_U8,          ///< unsigned 8 bits
-+    AV_SAMPLE_FMT_S16,         ///< signed 16 bits
-+    AV_SAMPLE_FMT_S32,         ///< signed 32 bits
-+    AV_SAMPLE_FMT_FLT,         ///< float
-+    AV_SAMPLE_FMT_DBL,         ///< double
-+
-+    AV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planar
-+    AV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planar
-+    AV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planar
-+    AV_SAMPLE_FMT_FLTP,        ///< float, planar
-+    AV_SAMPLE_FMT_DBLP,        ///< double, planar
-+    AV_SAMPLE_FMT_S64,         ///< signed 64 bits
-+    AV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planar
-+
-+    AV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
-+};
-+
-+/**
-+ * Return the name of sample_fmt, or NULL if sample_fmt is not
-+ * recognized.
-+ */
-+const char *av_get_sample_fmt_name(enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Return a sample format corresponding to name, or AV_SAMPLE_FMT_NONE
-+ * on error.
-+ */
-+enum AVSampleFormat av_get_sample_fmt(const char *name);
-+
-+/**
-+ * Return the planar<->packed alternative form of the given sample format, or
-+ * AV_SAMPLE_FMT_NONE on error. If the passed sample_fmt is already in the
-+ * requested planar/packed format, the format returned is the same as the
-+ * input.
-+ */
-+enum AVSampleFormat av_get_alt_sample_fmt(enum AVSampleFormat sample_fmt, int planar);
-+
-+/**
-+ * Get the packed alternative form of the given sample format.
-+ *
-+ * If the passed sample_fmt is already in packed format, the format returned is
-+ * the same as the input.
-+ *
-+ * @return  the packed alternative form of the given sample format or
-+            AV_SAMPLE_FMT_NONE on error.
-+ */
-+enum AVSampleFormat av_get_packed_sample_fmt(enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Get the planar alternative form of the given sample format.
-+ *
-+ * If the passed sample_fmt is already in planar format, the format returned is
-+ * the same as the input.
-+ *
-+ * @return  the planar alternative form of the given sample format or
-+            AV_SAMPLE_FMT_NONE on error.
-+ */
-+enum AVSampleFormat av_get_planar_sample_fmt(enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Generate a string corresponding to the sample format with
-+ * sample_fmt, or a header if sample_fmt is negative.
-+ *
-+ * @param buf the buffer where to write the string
-+ * @param buf_size the size of buf
-+ * @param sample_fmt the number of the sample format to print the
-+ * corresponding info string, or a negative value to print the
-+ * corresponding header.
-+ * @return the pointer to the filled buffer or NULL if sample_fmt is
-+ * unknown or in case of other errors
-+ */
-+char *av_get_sample_fmt_string(char *buf, int buf_size, enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Return number of bytes per sample.
-+ *
-+ * @param sample_fmt the sample format
-+ * @return number of bytes per sample or zero if unknown for the given
-+ * sample format
-+ */
-+int av_get_bytes_per_sample(enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Check if the sample format is planar.
-+ *
-+ * @param sample_fmt the sample format to inspect
-+ * @return 1 if the sample format is planar, 0 if it is interleaved
-+ */
-+int av_sample_fmt_is_planar(enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Get the required buffer size for the given audio parameters.
-+ *
-+ * @param[out] linesize calculated linesize, may be NULL
-+ * @param nb_channels   the number of channels
-+ * @param nb_samples    the number of samples in a single channel
-+ * @param sample_fmt    the sample format
-+ * @param align         buffer size alignment (0 = default, 1 = no alignment)
-+ * @return              required buffer size, or negative error code on failure
-+ */
-+int av_samples_get_buffer_size(int *linesize, int nb_channels, int nb_samples,
-+                               enum AVSampleFormat sample_fmt, int align);
-+
-+/**
-+ * @}
-+ *
-+ * @defgroup lavu_sampmanip Samples manipulation
-+ *
-+ * Functions that manipulate audio samples
-+ * @{
-+ */
-+
-+/**
-+ * Fill plane data pointers and linesize for samples with sample
-+ * format sample_fmt.
-+ *
-+ * The audio_data array is filled with the pointers to the samples data planes:
-+ * for planar, set the start point of each channel's data within the buffer,
-+ * for packed, set the start point of the entire buffer only.
-+ *
-+ * The value pointed to by linesize is set to the aligned size of each
-+ * channel's data buffer for planar layout, or to the aligned size of the
-+ * buffer for all channels for packed layout.
-+ *
-+ * The buffer in buf must be big enough to contain all the samples
-+ * (use av_samples_get_buffer_size() to compute its minimum size),
-+ * otherwise the audio_data pointers will point to invalid data.
-+ *
-+ * @see enum AVSampleFormat
-+ * The documentation for AVSampleFormat describes the data layout.
-+ *
-+ * @param[out] audio_data  array to be filled with the pointer for each channel
-+ * @param[out] linesize    calculated linesize, may be NULL
-+ * @param buf              the pointer to a buffer containing the samples
-+ * @param nb_channels      the number of channels
-+ * @param nb_samples       the number of samples in a single channel
-+ * @param sample_fmt       the sample format
-+ * @param align            buffer size alignment (0 = default, 1 = no alignment)
-+ * @return                 >=0 on success or a negative error code on failure
-+ * @todo return minimum size in bytes required for the buffer in case
-+ * of success at the next bump
-+ */
-+int av_samples_fill_arrays(uint8_t **audio_data, int *linesize,
-+                           const uint8_t *buf,
-+                           int nb_channels, int nb_samples,
-+                           enum AVSampleFormat sample_fmt, int align);
-+
-+/**
-+ * Allocate a samples buffer for nb_samples samples, and fill data pointers and
-+ * linesize accordingly.
-+ * The allocated samples buffer can be freed by using av_freep(&audio_data[0])
-+ * Allocated data will be initialized to silence.
-+ *
-+ * @see enum AVSampleFormat
-+ * The documentation for AVSampleFormat describes the data layout.
-+ *
-+ * @param[out] audio_data  array to be filled with the pointer for each channel
-+ * @param[out] linesize    aligned size for audio buffer(s), may be NULL
-+ * @param nb_channels      number of audio channels
-+ * @param nb_samples       number of samples per channel
-+ * @param align            buffer size alignment (0 = default, 1 = no alignment)
-+ * @return                 >=0 on success or a negative error code on failure
-+ * @todo return the size of the allocated buffer in case of success at the next bump
-+ * @see av_samples_fill_arrays()
-+ * @see av_samples_alloc_array_and_samples()
-+ */
-+int av_samples_alloc(uint8_t **audio_data, int *linesize, int nb_channels,
-+                     int nb_samples, enum AVSampleFormat sample_fmt, int align);
-+
-+/**
-+ * Allocate a data pointers array, samples buffer for nb_samples
-+ * samples, and fill data pointers and linesize accordingly.
-+ *
-+ * This is the same as av_samples_alloc(), but also allocates the data
-+ * pointers array.
-+ *
-+ * @see av_samples_alloc()
-+ */
-+int av_samples_alloc_array_and_samples(uint8_t ***audio_data, int *linesize, int nb_channels,
-+                                       int nb_samples, enum AVSampleFormat sample_fmt, int align);
-+
-+/**
-+ * Copy samples from src to dst.
-+ *
-+ * @param dst destination array of pointers to data planes
-+ * @param src source array of pointers to data planes
-+ * @param dst_offset offset in samples at which the data will be written to dst
-+ * @param src_offset offset in samples at which the data will be read from src
-+ * @param nb_samples number of samples to be copied
-+ * @param nb_channels number of audio channels
-+ * @param sample_fmt audio sample format
-+ */
-+int av_samples_copy(uint8_t **dst, uint8_t * const *src, int dst_offset,
-+                    int src_offset, int nb_samples, int nb_channels,
-+                    enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * Fill an audio buffer with silence.
-+ *
-+ * @param audio_data  array of pointers to data planes
-+ * @param offset      offset in samples at which to start filling
-+ * @param nb_samples  number of samples to fill
-+ * @param nb_channels number of audio channels
-+ * @param sample_fmt  audio sample format
-+ */
-+int av_samples_set_silence(uint8_t **audio_data, int offset, int nb_samples,
-+                           int nb_channels, enum AVSampleFormat sample_fmt);
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+#endif /* AVUTIL_SAMPLEFMT_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/version.h b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/version.h
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/include/libavutil/version.h
-@@ -0,0 +1,139 @@
-+/*
-+ * copyright (c) 2003 Fabrice Bellard
-+ *
-+ * This file is part of FFmpeg.
-+ *
-+ * FFmpeg is free software; you can redistribute it and/or
-+ * modify it under the terms of the GNU Lesser General Public
-+ * License as published by the Free Software Foundation; either
-+ * version 2.1 of the License, or (at your option) any later version.
-+ *
-+ * FFmpeg is distributed in the hope that it will be useful,
-+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-+ * Lesser General Public License for more details.
-+ *
-+ * You should have received a copy of the GNU Lesser General Public
-+ * License along with FFmpeg; if not, write to the Free Software
-+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-+ */
-+
-+/**
-+ * @file
-+ * @ingroup lavu
-+ * Libavutil version macros
-+ */
-+
-+#ifndef AVUTIL_VERSION_H
-+#define AVUTIL_VERSION_H
-+
-+#include "macros.h"
-+
-+/**
-+ * @addtogroup version_utils
-+ *
-+ * Useful to check and match library version in order to maintain
-+ * backward compatibility.
-+ *
-+ * The FFmpeg libraries follow a versioning sheme very similar to
-+ * Semantic Versioning (http://semver.org/)
-+ * The difference is that the component called PATCH is called MICRO in FFmpeg
-+ * and its value is reset to 100 instead of 0 to keep it above or equal to 100.
-+ * Also we do not increase MICRO for every bugfix or change in git master.
-+ *
-+ * Prior to FFmpeg 3.2 point releases did not change any lib version number to
-+ * avoid aliassing different git master checkouts.
-+ * Starting with FFmpeg 3.2, the released library versions will occupy
-+ * a separate MAJOR.MINOR that is not used on the master development branch.
-+ * That is if we branch a release of master 55.10.123 we will bump to 55.11.100
-+ * for the release and master will continue at 55.12.100 after it. Each new
-+ * point release will then bump the MICRO improving the usefulness of the lib
-+ * versions.
-+ *
-+ * @{
-+ */
-+
-+#define AV_VERSION_INT(a, b, c) ((a)<<16 | (b)<<8 | (c))
-+#define AV_VERSION_DOT(a, b, c) a ##.## b ##.## c
-+#define AV_VERSION(a, b, c) AV_VERSION_DOT(a, b, c)
-+
-+/**
-+ * Extract version components from the full ::AV_VERSION_INT int as returned
-+ * by functions like ::avformat_version() and ::avcodec_version()
-+ */
-+#define AV_VERSION_MAJOR(a) ((a) >> 16)
-+#define AV_VERSION_MINOR(a) (((a) & 0x00FF00) >> 8)
-+#define AV_VERSION_MICRO(a) ((a) & 0xFF)
-+
-+/**
-+ * @}
-+ */
-+
-+/**
-+ * @defgroup lavu_ver Version and Build diagnostics
-+ *
-+ * Macros and function useful to check at compiletime and at runtime
-+ * which version of libavutil is in use.
-+ *
-+ * @{
-+ */
-+
-+#define LIBAVUTIL_VERSION_MAJOR  56
-+#define LIBAVUTIL_VERSION_MINOR  14
-+#define LIBAVUTIL_VERSION_MICRO 100
-+
-+#define LIBAVUTIL_VERSION_INT   AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \
-+                                               LIBAVUTIL_VERSION_MINOR, \
-+                                               LIBAVUTIL_VERSION_MICRO)
-+#define LIBAVUTIL_VERSION       AV_VERSION(LIBAVUTIL_VERSION_MAJOR,     \
-+                                           LIBAVUTIL_VERSION_MINOR,     \
-+                                           LIBAVUTIL_VERSION_MICRO)
-+#define LIBAVUTIL_BUILD         LIBAVUTIL_VERSION_INT
-+
-+#define LIBAVUTIL_IDENT         "Lavu" AV_STRINGIFY(LIBAVUTIL_VERSION)
-+
-+/**
-+ * @defgroup lavu_depr_guards Deprecation Guards
-+ * FF_API_* defines may be placed below to indicate public API that will be
-+ * dropped at a future version bump. The defines themselves are not part of
-+ * the public API and may change, break or disappear at any time.
-+ *
-+ * @note, when bumping the major version it is recommended to manually
-+ * disable each FF_API_* in its own commit instead of disabling them all
-+ * at once through the bump. This improves the git bisect-ability of the change.
-+ *
-+ * @{
-+ */
-+
-+#ifndef FF_API_VAAPI
-+#define FF_API_VAAPI                    (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_FRAME_QP
-+#define FF_API_FRAME_QP                 (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_PLUS1_MINUS1
-+#define FF_API_PLUS1_MINUS1             (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_ERROR_FRAME
-+#define FF_API_ERROR_FRAME              (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_PKT_PTS
-+#define FF_API_PKT_PTS                  (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_CRYPTO_SIZE_T
-+#define FF_API_CRYPTO_SIZE_T            (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_FRAME_GET_SET
-+#define FF_API_FRAME_GET_SET            (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+#ifndef FF_API_PSEUDOPAL
-+#define FF_API_PSEUDOPAL                (LIBAVUTIL_VERSION_MAJOR < 57)
-+#endif
-+
-+
-+/**
-+ * @}
-+ * @}
-+ */
-+
-+#endif /* AVUTIL_VERSION_H */
-diff --git a/dom/media/platforms/ffmpeg/ffmpeg58/moz.build b/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
-new file mode 100644
---- /dev/null
-+++ b/dom/media/platforms/ffmpeg/ffmpeg58/moz.build
-@@ -0,0 +1,25 @@
-+# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-+# vim: set filetype=python:
-+# This Source Code Form is subject to the terms of the Mozilla Public
-+# License, v. 2.0. If a copy of the MPL was not distributed with this
-+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-+
-+UNIFIED_SOURCES += [
-+    '../FFmpegAudioDecoder.cpp',
-+    '../FFmpegDataDecoder.cpp',
-+    '../FFmpegDecoderModule.cpp',
-+    '../FFmpegVideoDecoder.cpp',
-+]
-+LOCAL_INCLUDES += [
-+    '..',
-+    'include',
-+]
-+
-+if CONFIG['CC_TYPE'] in ('clang', 'gcc'):
-+  CXXFLAGS += [ '-Wno-deprecated-declarations' ]
-+if CONFIG['CC_TYPE'] == 'clang':
-+  CXXFLAGS += [
-+    '-Wno-unknown-attributes',
-+  ]
-+
-+FINAL_LIBRARY = 'xul'
-diff --git a/dom/media/platforms/ffmpeg/moz.build b/dom/media/platforms/ffmpeg/moz.build
---- a/dom/media/platforms/ffmpeg/moz.build
-+++ b/dom/media/platforms/ffmpeg/moz.build
-@@ -8,15 +8,16 @@ EXPORTS += [
-     'FFmpegRuntimeLinker.h',
- ]
- 
- DIRS += [
-     'libav53',
-     'libav54',
-     'libav55',
-     'ffmpeg57',
-+    'ffmpeg58',
- ]
- 
- UNIFIED_SOURCES += [
-     'FFmpegRuntimeLinker.cpp',
- ]
- 
- FINAL_LIBRARY = 'xul'

+ 0 - 87
mozilla-esr52/patches/1484184.patch

@@ -1,87 +0,0 @@
-
-# HG changeset patch
-# User Masatoshi Kimura <VYV03354@nifty.ne.jp>
-# Date 1534436849 -32400
-# Node ID c66cc808862f6c77361be44b38e78e86b4aa7c69
-# Parent  b1b6c8ba677347f013305e10c08b64ad4654b54f
-Bug 1484184 - Remove now unused _RAISE macro check to deal with MSVC 2017 15.8. r=froydnj, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/memory/mozalloc/moz.build b/memory/mozalloc/moz.build
---- a/memory/mozalloc/moz.build
-+++ b/memory/mozalloc/moz.build
-@@ -11,20 +11,19 @@ EXPORTS.mozilla += [
-     'mozalloc_oom.h',
- ]
- 
- if CONFIG['WRAP_STL_INCLUDES']:
-     if CONFIG['GNU_CXX']:
-         EXPORTS.mozilla += ['throw_gcc.h']
-     elif CONFIG['_MSC_VER']:
-         DEFINES['_HAS_EXCEPTIONS'] = 0
--        if CONFIG['MOZ_MSVC_STL_WRAP_RAISE']:
--            SOURCES += [
--                'msvc_raise_wrappers.cpp',
--            ]
-+        SOURCES += [
-+            'msvc_raise_wrappers.cpp',
-+        ]
- 
- if CONFIG['OS_TARGET'] == 'WINNT':
-     # Keep this file separate to avoid #include'ing windows.h everywhere.
-     SOURCES += [
-         'winheap.cpp',
-     ]
- 
- UNIFIED_SOURCES += [
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -318,45 +318,18 @@ case "$target" in
-             ;;
-         x86_64-*)
-             MIDL_FLAGS="${MIDL_FLAGS} -env x64"
-             ;;
-         esac
- 
-         unset _MSVC_VER_FILTER
- 
--        AC_CACHE_CHECK(for overridable _RAISE,
--                       ac_cv_have__RAISE,
--            [
--                AC_LANG_SAVE
--                AC_LANG_CPLUSPLUS
--                _SAVE_CXXFLAGS="$CXXFLAGS"
--                CXXFLAGS="${CXXFLAGS} -D_HAS_EXCEPTIONS=0"
--                AC_TRY_COMPILE([#include <xstddef>
--                                #undef _RAISE
--                                #define _RAISE(x) externallyDefinedFunction((x).what())
--                                #include <vector>
--                               ],
--                               [std::vector<int> v; return v.at(1);],
--                               ac_cv_have__RAISE="no",
--                               ac_cv_have__RAISE="yes")
--                CXXFLAGS="$_SAVE_CXXFLAGS"
--                AC_LANG_RESTORE
--            ])
--        if test "$ac_cv_have__RAISE" = "yes"; then
--            WRAP_STL_INCLUDES=1
--            MOZ_MSVC_STL_WRAP_RAISE=1
--            AC_DEFINE(MOZ_MSVC_STL_WRAP_RAISE)
--        else
--            AC_MSG_ERROR([Gecko exception wrapping doesn't understand your your MSVC/SDK.  Please file a bug describing this error and your build configuration.])
--        fi
--
--        if test "$WRAP_STL_INCLUDES" = "1"; then
--            STL_FLAGS="-I${DIST}/stl_wrappers"
--        fi
-+        WRAP_STL_INCLUDES=1
-+        STL_FLAGS="-I${DIST}/stl_wrappers"
-         CFLAGS="$CFLAGS -D_HAS_EXCEPTIONS=0"
-         CXXFLAGS="$CXXFLAGS -D_HAS_EXCEPTIONS=0"
-     else
-         # Check w32api version
-         _W32API_MAJOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $1 }'`
-         _W32API_MINOR_VERSION=`echo $W32API_VERSION | $AWK -F\. '{ print $2 }'`
-         AC_MSG_CHECKING([for w32api version >= $W32API_VERSION])
-         AC_TRY_COMPILE([#include <w32api.h>],

+ 0 - 49
mozilla-esr52/patches/1484190.patch

@@ -1,49 +0,0 @@
-
-# HG changeset patch
-# User Masatoshi Kimura <VYV03354@nifty.ne.jp>
-# Date 1534506109 -32400
-# Node ID 574377aa45865d04eed2713f331c1f553f7f12f7
-# Parent  cb93ee62f8461d7205713327094f784708e1418d
-Bug 1484190 - Unblock MSVC 2017 15.8. r=dmajor, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
---- a/build/moz.configure/toolchain.configure
-+++ b/build/moz.configure/toolchain.configure
-@@ -729,16 +729,36 @@ def compiler(language, host_or_target, c
-                 raise FatalCheckError(
-                     'This version (%s) of the MSVC compiler is not '
-                     'supported.\n'
-                     'You must install Visual C++ 2015 Update 3 or newer in '
-                     'order to build.\n'
-                     'See https://developer.mozilla.org/en/'
-                     'Windows_Build_Prerequisites' % info.version)
- 
-+            if info.version >= '19.10.0' and info.version < '19.13.26128':
-+                raise FatalCheckError(
-+                    'This version (%s) of the MSVC compiler is not '
-+                    'supported.\n'
-+                    'You must install Visual C++ 2017 Update 6 or '
-+                    'Update 8 or later in order to build.\n'
-+                    'See https://developer.mozilla.org/en/'
-+                    'Windows_Build_Prerequisites' % info.version)
-+
-+            # MSVC version 15.7 and the previews for 15.8, at least,
-+            # can't build Firefox.
-+            if info.version >= '19.14.0' and info.version < '19.15.26720':
-+                raise FatalCheckError(
-+                    'This version (%s) of the MSVC compiler is not '
-+                    'supported due to compiler bugs.\n'
-+                    'You must install Visual C++ 2017 Update 6 or '
-+                    'Update 8 or later in order to build.\n'
-+                    'See https://developer.mozilla.org/en/'
-+                    'Windows_Build_Prerequisites' % info.version)
-+
-         return namespace(
-             wrapper=wrapper,
-             compiler=compiler,
-             flags=flags,
-             type=info.type,
-             version=info.version,
-             language=language,
-         )

+ 0 - 87
mozilla-esr52/patches/1485224-1.patch

@@ -1,87 +0,0 @@
-
-# HG changeset patch
-# User Masatoshi Kimura <VYV03354@nifty.ne.jp>
-# Date 1536834138 -32400
-# Node ID 131188fb2361caf66b023dd24b72d21d7cb70d19
-# Parent  91c7687d381bbd5d5ac662ef5feefe965abfd60e
-Bug 1485224 - Make best efforts to write a stack frame atomically. r=froydnj, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/xpcom/base/nsTraceRefcnt.cpp b/xpcom/base/nsTraceRefcnt.cpp
---- a/xpcom/base/nsTraceRefcnt.cpp
-+++ b/xpcom/base/nsTraceRefcnt.cpp
-@@ -765,38 +765,67 @@ InitTraceLog()
-     gLogging = FullLogging;
-   }
- }
- 
- 
- extern "C" {
- 
- static void
-+EnsureWrite(FILE* aStream, const char* aBuf, size_t aLen)
-+{
-+#ifdef XP_WIN
-+  int fd = _fileno(aStream);
-+#else
-+  int fd = fileno(aStream);
-+#endif
-+  while (aLen > 0) {
-+#ifdef XP_WIN
-+    auto written = _write(fd, aBuf, aLen);
-+#else
-+    auto written = write(fd, aBuf, aLen);
-+#endif
-+    if (written <= 0 || size_t(written) > aLen) {
-+      break;
-+    }
-+    aBuf += written;
-+    aLen -= written;
-+  }
-+}
-+
-+static void
- PrintStackFrame(uint32_t aFrameNumber, void* aPC, void* aSP, void* aClosure)
- {
-   FILE* stream = (FILE*)aClosure;
-   MozCodeAddressDetails details;
--  char buf[1024];
-+  static const size_t buflen = 1024;
-+  char buf[buflen + 1];  // 1 for trailing '\n'
- 
-   MozDescribeCodeAddress(aPC, &details);
--  MozFormatCodeAddressDetails(buf, sizeof(buf), aFrameNumber, aPC, &details);
--  fprintf(stream, "%s\n", buf);
-+  MozFormatCodeAddressDetails(buf, buflen, aFrameNumber, aPC, &details);
-+  size_t len = std::min(strlen(buf), buflen + 1 - 2);
-+  buf[len++] = '\n';
-+  buf[len] = '\0';
-   fflush(stream);
-+  EnsureWrite(stream, buf, len);
- }
- 
- static void
- PrintStackFrameCached(uint32_t aFrameNumber, void* aPC, void* aSP,
-                       void* aClosure)
- {
-   auto stream = static_cast<FILE*>(aClosure);
-   static const size_t buflen = 1024;
--  char buf[buflen];
--  gCodeAddressService->GetLocation(aFrameNumber, aPC, buf, buflen);
--  fprintf(stream, "    %s\n", buf);
-+  char buf[buflen + 5] = "    ";  // 5 for leading "    " and trailing '\n'
-+  gCodeAddressService->GetLocation(aFrameNumber, aPC, buf + 4, buflen);
-+  size_t len = std::min(strlen(buf), buflen + 5 - 2);
-+  buf[len++] = '\n';
-+  buf[len] = '\0';
-   fflush(stream);
-+  EnsureWrite(stream, buf, len);
- }
- 
- static void
- RecordStackFrame(uint32_t /*aFrameNumber*/, void* aPC, void* /*aSP*/,
-                  void* aClosure)
- {
-   auto locations = static_cast<std::vector<void*>*>(aClosure);
-   locations->push_back(aPC);
-

+ 0 - 48
mozilla-esr52/patches/1485224-2.patch

@@ -1,48 +0,0 @@
-
-# HG changeset patch
-# User Masatoshi Kimura <VYV03354@nifty.ne.jp>
-# Date 1535467299 -32400
-# Node ID 815d17af6a7e0277bc0c6c60bf745cc2ef425a2b
-# Parent  0efe5d18153fa83cade36fb8ba1f1cc4a5a1bc85
-Bug 1485224 - Workaround a linker bug of MSVC 2017 Update 8. r=glandium, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-MSVC 15.8 linker dislikes forward slashes in the /OUT: parameter when it is generating a profile
-
-diff --git a/config/rules.mk b/config/rules.mk
---- a/config/rules.mk
-+++ b/config/rules.mk
-@@ -627,25 +627,32 @@ distclean::
- 	$(wildcard *.$(OBJ_SUFFIX)) $(wildcard *.ho) $(wildcard host_*.o*) \
- 	$(wildcard *.$(LIB_SUFFIX)) $(wildcard *$(DLL_SUFFIX)) \
- 	$(wildcard *.$(IMPORT_LIB_SUFFIX))
- 
- alltags:
- 	$(RM) TAGS
- 	find $(topsrcdir) -name dist -prune -o \( -name '*.[hc]' -o -name '*.cp' -o -name '*.cpp' -o -name '*.idl' \) -print | $(TAG_PROGRAM)
- 
-+# Workaround a bug of MSVC 2017 Update 8 (see bug 1485224)
-+ifeq ($(CC_TYPE)_$(HOST_OS_ARCH)_$(MOZ_PROFILE_GENERATE),msvc_WINNT_1)
-+LINKER_OUT=$(subst /,\,$1)
-+else
-+LINKER_OUT=$1
-+endif
-+
- #
- # PROGRAM = Foo
- # creates OBJS, links with LIBS to create Foo
- #
- $(PROGRAM): $(PROGOBJS) $(STATIC_LIBS_DEPS) $(EXTRA_DEPS) $(EXE_DEF_FILE) $(RESFILE) $(GLOBAL_DEPS)
- 	$(REPORT_BUILD)
- 	@$(RM) $@.manifest
- ifeq (_WINNT,$(GNU_CC)_$(OS_ARCH))
--	$(EXPAND_LINK) -NOLOGO -OUT:$@ -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
-+	$(EXPAND_LINK) -NOLOGO -OUT:$(call LINKER_OUT,$@) -PDB:$(LINK_PDBFILE) $(WIN32_EXE_LDFLAGS) $(LDFLAGS) $(MOZ_PROGRAM_LDFLAGS) $(PROGOBJS) $(RESFILE) $(STATIC_LIBS) $(SHARED_LIBS) $(EXTRA_LIBS) $(OS_LIBS)
- ifdef MSMANIFEST_TOOL
- 	@if test -f $@.manifest; then \
- 		if test -f '$(srcdir)/$@.manifest'; then \
- 			echo 'Embedding manifest from $(srcdir)/$@.manifest and $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST '$(win_srcdir)/$@.manifest' $@.manifest -OUTPUTRESOURCE:$@\;1; \
- 		else \
- 			echo 'Embedding manifest from $@.manifest'; \
- 			$(MT) -NOLOGO -MANIFEST $@.manifest -OUTPUTRESOURCE:$@\;1; \

+ 0 - 90
mozilla-esr52/patches/1489785-macOS1014.patch

@@ -1,90 +0,0 @@
-
-# HG changeset patch
-# User Stephen A Pohl <spohl.mozilla.bugs@gmail.com>
-# Date 1538283728 14400
-# Node ID 3920c858319dff66ebbc9263f6aa8d24f16071f8
-# Parent  9d3d8065392270b38d98f8684040fe72818ef83e
-Bug 1489785: Remove a workaround for gcc, introduced in bug 678607, that is no longer needed and that causes hangs in modal dialogs on macOS 10.14. r=mstange, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/widget/cocoa/nsChildView.mm b/widget/cocoa/nsChildView.mm
---- a/widget/cocoa/nsChildView.mm
-+++ b/widget/cocoa/nsChildView.mm
-@@ -423,23 +423,16 @@ nsChildView::Create(nsIWidget* aParent,
-   // we need to provide an autorelease pool to avoid leaking cocoa objects
-   // (see bug 559075).
-   nsAutoreleasePool localPool;
- 
-   // See NSView (MethodSwizzling) below.
-   if (!gChildViewMethodsSwizzled) {
-     nsToolkit::SwizzleMethods([NSView class], @selector(mouseDownCanMoveWindow),
-                               @selector(nsChildView_NSView_mouseDownCanMoveWindow));
--#ifdef __LP64__
--    nsToolkit::SwizzleMethods([NSEvent class], @selector(addLocalMonitorForEventsMatchingMask:handler:),
--                              @selector(nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:handler:),
--                              true);
--    nsToolkit::SwizzleMethods([NSEvent class], @selector(removeMonitor:),
--                              @selector(nsChildView_NSEvent_removeMonitor:), true);
--#endif
-     gChildViewMethodsSwizzled = true;
-   }
- 
-   mBounds = aRect;
- 
-   // Ensure that the toolkit is created.
-   nsToolkit::GetToolkit();
- 
-@@ -6528,53 +6521,8 @@ static const CGEventField kCGWindowNumbe
-   NSWindow *ourWindow = [self window];
-   NSView *contentView = [ourWindow contentView];
-   if ([ourWindow isKindOfClass:[ToolbarWindow class]] && (self == contentView))
-     return [ourWindow isMovableByWindowBackground];
-   return [self nsChildView_NSView_mouseDownCanMoveWindow];
- }
- 
- @end
--
--#ifdef __LP64__
--// When using blocks, at least on OS X 10.7, the OS sometimes calls
--// +[NSEvent removeMonitor:] more than once on a single event monitor, which
--// causes crashes.  See bug 678607.  We hook these methods to work around
--// the problem.
--@interface NSEvent (MethodSwizzling)
--+ (id)nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:(unsigned long long)mask handler:(id)block;
--+ (void)nsChildView_NSEvent_removeMonitor:(id)eventMonitor;
--@end
--
--// This is a local copy of the AppKit frameworks sEventObservers hashtable.
--// It only stores "local monitors".  We use it to ensure that +[NSEvent
--// removeMonitor:] is never called more than once on the same local monitor.
--static NSHashTable *sLocalEventObservers = nil;
--
--@implementation NSEvent (MethodSwizzling)
--
--+ (id)nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:(unsigned long long)mask handler:(id)block
--{
--  if (!sLocalEventObservers) {
--    sLocalEventObservers = [[NSHashTable hashTableWithOptions:
--      NSHashTableStrongMemory | NSHashTableObjectPointerPersonality] retain];
--  }
--  id retval =
--    [self nsChildView_NSEvent_addLocalMonitorForEventsMatchingMask:mask handler:block];
--  if (sLocalEventObservers && retval && ![sLocalEventObservers containsObject:retval]) {
--    [sLocalEventObservers addObject:retval];
--  }
--  return retval;
--}
--
--+ (void)nsChildView_NSEvent_removeMonitor:(id)eventMonitor
--{
--  if (sLocalEventObservers && [eventMonitor isKindOfClass: ::NSClassFromString(@"_NSLocalEventObserver")]) {
--    if (![sLocalEventObservers containsObject:eventMonitor]) {
--      return;
--    }
--    [sLocalEventObservers removeObject:eventMonitor];
--  }
--  [self nsChildView_NSEvent_removeMonitor:eventMonitor];
--}
--
--@end
--#endif // #ifdef __LP64__

+ 0 - 34
mozilla-esr52/patches/1496588.patch

@@ -1,34 +0,0 @@
-
-# HG changeset patch
-# User David Major <dmajor@mozilla.com>
-# Date 1538771020 14400
-# Node ID 859cf0f7d17c9571445b4ee2a17d49083c983615
-# Parent  8b56fcd1cc71e02d013200b39bd08b6908921218
-Bug 1496588: Avoid a UB in mozStorageService.cpp. r=froydnj, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/storage/mozStorageService.cpp b/storage/mozStorageService.cpp
---- a/storage/mozStorageService.cpp
-+++ b/storage/mozStorageService.cpp
-@@ -789,18 +789,20 @@ Service::OpenAsyncDatabase(nsIVariant *a
-   rv = aDatabaseStore->GetAsISupports(getter_AddRefs(dbStore));
-   if (NS_SUCCEEDED(rv)) {
-     // Generally, aDatabaseStore holds the database nsIFile.
-     storageFile = do_QueryInterface(dbStore, &rv);
-     if (NS_FAILED(rv)) {
-       return NS_ERROR_INVALID_ARG;
-     }
- 
--    rv = storageFile->Clone(getter_AddRefs(storageFile));
-+    nsCOMPtr<nsIFile> cloned;
-+    rv = storageFile->Clone(getter_AddRefs(cloned));
-     MOZ_ASSERT(NS_SUCCEEDED(rv));
-+    storageFile = cloned.forget();
- 
-     if (!readOnly) {
-       // Ensure that SQLITE_OPEN_CREATE is passed in for compatibility reasons.
-       flags |= SQLITE_OPEN_CREATE;
-     }
- 
-     // Apply the shared-cache option.
-     flags |= shared ? SQLITE_OPEN_SHAREDCACHE : SQLITE_OPEN_PRIVATECACHE;

+ 0 - 68
mozilla-esr52/patches/1500759.patch

@@ -1,68 +0,0 @@
-# HG changeset patch
-# User Jon Coppeard <jcoppeard@mozilla.com>
-# Date 1541589169 0
-#      Wed Nov 07 11:12:49 2018 +0000
-# Node ID 5e1a9644aeef3c38b34a81abb3ab2a931266b487
-# Parent  95adfc0b94e270123f7c245702eccf066688d470
-Bug 1500759 - Root parameter dictionaries in AesTask::Init(). r=keeler, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/dom/crypto/WebCryptoTask.cpp b/dom/crypto/WebCryptoTask.cpp
---- a/dom/crypto/WebCryptoTask.cpp
-+++ b/dom/crypto/WebCryptoTask.cpp
-@@ -580,34 +580,34 @@ public:
- 
-     // Cache parameters depending on the specific algorithm
-     TelemetryAlgorithm telemetryAlg;
-     if (algName.EqualsLiteral(WEBCRYPTO_ALG_AES_CBC)) {
-       CHECK_KEY_ALGORITHM(aKey.Algorithm(), WEBCRYPTO_ALG_AES_CBC);
- 
-       mMechanism = CKM_AES_CBC_PAD;
-       telemetryAlg = TA_AES_CBC;
--      AesCbcParams params;
-+      RootedDictionary<AesCbcParams> params(aCx);
-       nsresult rv = Coerce(aCx, params, aAlgorithm);
-       if (NS_FAILED(rv)) {
-         mEarlyRv = NS_ERROR_DOM_INVALID_ACCESS_ERR;
-         return;
-       }
- 
-       ATTEMPT_BUFFER_INIT(mIv, params.mIv)
-       if (mIv.Length() != 16) {
-         mEarlyRv = NS_ERROR_DOM_DATA_ERR;
-         return;
-       }
-     } else if (algName.EqualsLiteral(WEBCRYPTO_ALG_AES_CTR)) {
-       CHECK_KEY_ALGORITHM(aKey.Algorithm(), WEBCRYPTO_ALG_AES_CTR);
- 
-       mMechanism = CKM_AES_CTR;
-       telemetryAlg = TA_AES_CTR;
--      AesCtrParams params;
-+      RootedDictionary<AesCtrParams> params(aCx);
-       nsresult rv = Coerce(aCx, params, aAlgorithm);
-       if (NS_FAILED(rv)) {
-         mEarlyRv = NS_ERROR_DOM_SYNTAX_ERR;
-         return;
-       }
- 
-       ATTEMPT_BUFFER_INIT(mIv, params.mCounter)
-       if (mIv.Length() != 16) {
-@@ -616,17 +616,17 @@ public:
-       }
- 
-       mCounterLength = params.mLength;
-     } else if (algName.EqualsLiteral(WEBCRYPTO_ALG_AES_GCM)) {
-       CHECK_KEY_ALGORITHM(aKey.Algorithm(), WEBCRYPTO_ALG_AES_GCM);
- 
-       mMechanism = CKM_AES_GCM;
-       telemetryAlg = TA_AES_GCM;
--      AesGcmParams params;
-+      RootedDictionary<AesGcmParams> params(aCx);
-       nsresult rv = Coerce(aCx, params, aAlgorithm);
-       if (NS_FAILED(rv)) {
-         mEarlyRv = NS_ERROR_DOM_SYNTAX_ERR;
-         return;
-       }
- 
-       ATTEMPT_BUFFER_INIT(mIv, params.mIv)
- 

+ 0 - 125
mozilla-esr52/patches/1512882-clang-osx.patch

@@ -1,125 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  f9b2f9868d7712cd2803c0e981f6f1f047c6cf62
-Bug 1512882 - Allow macOS cross compile with clang 6 plus VS2017 and later rust fix. r=IanN a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r f9b2f9868d77 media/libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c
---- a/media/libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c	Mon Aug 13 22:07:50 2018 +0200
-+++ b/media/libvpx/vp9/common/x86/vp9_subpixel_8t_intrin_avx2.c	Mon Aug 13 22:15:27 2018 +0200
-@@ -40,24 +40,27 @@
- };
- 
- #if defined(__clang__)
--# if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ <= 3) || \
--      (defined(__APPLE__) && __clang_major__ == 5 && __clang_minor__ == 0)
--#  define MM256_BROADCASTSI128_SI256(x) \
--       _mm_broadcastsi128_si256((__m128i const *)&(x))
--# else  // clang > 3.3, and not 5.0 on macosx.
--#  define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
--# endif  // clang <= 3.3
-+#if (__clang_major__ > 0 && __clang_major__ < 3) ||            \
-+    (__clang_major__ == 3 && __clang_minor__ <= 3) ||          \
-+    (defined(__APPLE__) && defined(__apple_build_version__) && \
-+     ((__clang_major__ == 4 && __clang_minor__ <= 2) ||        \
-+      (__clang_major__ == 5 && __clang_minor__ == 0)))
-+#define MM256_BROADCASTSI128_SI256(x) \
-+  _mm_broadcastsi128_si256((__m128i const *)&(x))
-+#else  // clang > 3.3, and not 5.0 on macosx.
-+#define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
-+#endif  // clang <= 3.3
- #elif defined(__GNUC__)
--# if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 6)
--#  define MM256_BROADCASTSI128_SI256(x) \
--       _mm_broadcastsi128_si256((__m128i const *)&(x))
--# elif __GNUC__ == 4 && __GNUC_MINOR__ == 7
--#  define MM256_BROADCASTSI128_SI256(x) _mm_broadcastsi128_si256(x)
--# else  // gcc > 4.7
--#  define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
--# endif  // gcc <= 4.6
--#else  // !(gcc || clang)
--# define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
-+#if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ <= 6)
-+#define MM256_BROADCASTSI128_SI256(x) \
-+  _mm_broadcastsi128_si256((__m128i const *)&(x))
-+#elif __GNUC__ == 4 && __GNUC_MINOR__ == 7
-+#define MM256_BROADCASTSI128_SI256(x) _mm_broadcastsi128_si256(x)
-+#else  // gcc > 4.7
-+#define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
-+#endif  // gcc <= 4.6
-+#else   // !(gcc || clang)
-+#define MM256_BROADCASTSI128_SI256(x) _mm256_broadcastsi128_si256(x)
- #endif  // __clang__
- 
- static void vp9_filter_block1d16_h8_avx2(const uint8_t *src_ptr,
-diff -r f9b2f9868d77 mfbt/Compression.cpp
---- a/mfbt/Compression.cpp	Mon Aug 13 22:07:50 2018 +0200
-+++ b/mfbt/Compression.cpp	Mon Aug 13 22:15:27 2018 +0200
-@@ -12,6 +12,15 @@
- // corecrt_memory.h.
- #include <string>
- 
-+// Because we wrap lz4.c in an anonymous namespace, all of its #includes
-+// go in the anonymous namespace too. This would create conflicting
-+// declarations for intrinsic functions that are internally defined
-+// at top-level. Including intrin.h here prevents it from being included
-+// later within the anonymous namespace.
-+#ifdef _MSC_VER
-+#include <intrin.h>
-+#endif
-+
- using namespace mozilla::Compression;
- 
- namespace {
-diff -r f9b2f9868d77 toolkit/library/gtest/rust/Cargo.lock
---- a/toolkit/library/gtest/rust/Cargo.lock	Mon Aug 13 22:07:50 2018 +0200
-+++ b/toolkit/library/gtest/rust/Cargo.lock	Mon Aug 13 22:15:27 2018 +0200
-@@ -1,4 +1,9 @@
--[root]
-+[[package]]
-+name = "byteorder"
-+version = "0.5.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+
-+[[package]]
- name = "gkrust-gtest"
- version = "0.1.0"
- dependencies = [
-@@ -8,11 +13,6 @@
- ]
- 
- [[package]]
--name = "byteorder"
--version = "0.5.3"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--
--[[package]]
- name = "gkrust-shared"
- version = "0.1.0"
- dependencies = [
-diff -r f9b2f9868d77 toolkit/library/rust/Cargo.lock
---- a/toolkit/library/rust/Cargo.lock	Mon Aug 13 22:07:50 2018 +0200
-+++ b/toolkit/library/rust/Cargo.lock	Mon Aug 13 22:15:27 2018 +0200
-@@ -1,4 +1,9 @@
--[root]
-+[[package]]
-+name = "byteorder"
-+version = "0.5.3"
-+source = "registry+https://github.com/rust-lang/crates.io-index"
-+
-+[[package]]
- name = "gkrust"
- version = "0.1.0"
- dependencies = [
-@@ -6,11 +11,6 @@
- ]
- 
- [[package]]
--name = "byteorder"
--version = "0.5.3"
--source = "registry+https://github.com/rust-lang/crates.io-index"
--
--[[package]]
- name = "gkrust-shared"
- version = "0.1.0"
- dependencies = [

+ 0 - 47
mozilla-esr52/patches/1512882-search.patch

@@ -1,47 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  f9b2f9868d7712cd2803c0e981f6f1f047c6cf62
-Bug 1512882 - Use Windows 7 search icon on Windows 8.x. r=IanN a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff -r f9b2f9868d77 toolkit/themes/windows/global/global.css
---- a/toolkit/themes/windows/global/global.css	Mon Aug 13 22:07:50 2018 +0200
-+++ b/toolkit/themes/windows/global/global.css	Mon Aug 13 22:15:27 2018 +0200
-@@ -352,7 +352,8 @@
- 
- @media (-moz-os-version: windows-xp),
-        (-moz-os-version: windows-vista),
--       (-moz-os-version: windows-win7) {
-+       (-moz-os-version: windows-win7),
-+       (-moz-os-version: windows-win8) {
-   .close-icon {
-     -moz-image-region: rect(0, 16px, 16px, 0);
-   }
-@@ -388,7 +389,8 @@
- 
-   @media (-moz-os-version: windows-xp),
-          (-moz-os-version: windows-vista),
--         (-moz-os-version: windows-win7) {
-+         (-moz-os-version: windows-win7),
-+         (-moz-os-version: windows-win8) {
-     .close-icon {
-       -moz-image-region: rect(0, 32px, 32px, 0);
-     }
-diff -r f9b2f9868d77 toolkit/themes/windows/global/jar.mn
---- a/toolkit/themes/windows/global/jar.mn	Mon Aug 13 22:07:50 2018 +0200
-+++ b/toolkit/themes/windows/global/jar.mn	Mon Aug 13 22:15:27 2018 +0200
-@@ -122,10 +122,10 @@
- % override chrome://global/skin/tree/sort-asc.png                 chrome://global/skin/tree/sort-asc-XP.png                osversion<6
- % override chrome://global/skin/tree/sort-dsc.png                 chrome://global/skin/tree/sort-dsc-XP.png                osversion<6
- 
--% override chrome://global/skin/icons/close.png                   chrome://global/skin/icons/close-XPVista7.png            osversion<=6.1
--% override chrome://global/skin/icons/close@2x.png                chrome://global/skin/icons/close-XPVista7@2x.png         osversion<=6.1
--% override chrome://global/skin/icons/close-inverted.png          chrome://global/skin/icons/close-inverted-XPVista7.png   osversion<=6.1
--% override chrome://global/skin/icons/close-inverted@2x.png       chrome://global/skin/icons/close-inverted-XPVista7@2x.png osversion<=6.1
-+% override chrome://global/skin/icons/close.png                   chrome://global/skin/icons/close-XPVista7.png            osversion<=6.3
-+% override chrome://global/skin/icons/close@2x.png                chrome://global/skin/icons/close-XPVista7@2x.png         osversion<=6.3
-+% override chrome://global/skin/icons/close-inverted.png          chrome://global/skin/icons/close-inverted-XPVista7.png   osversion<=6.3
-+% override chrome://global/skin/icons/close-inverted@2x.png       chrome://global/skin/icons/close-inverted-XPVista7@2x.png osversion<=6.3
- 
- % override chrome://global/skin/tree/twisty.svg#clsd              chrome://global/skin/tree/twisty-Vista78.svg#clsd           osversion<=6.3
- % override chrome://global/skin/tree/twisty.svg#clsd-rtl          chrome://global/skin/tree/twisty-Vista78.svg#clsd-rtl       osversion<=6.3

+ 0 - 43
mozilla-esr52/patches/1512882-vs2017-x86.patch

@@ -1,43 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  f84791796fb86af664ef2896030e492581d8fa55
-Bug 1512882 - Support building comm-esr52 x86 with VS2017. r=IanN a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/security/sandbox/win/wow_helper/Makefile.in b/security/sandbox/win/wow_helper/Makefile.in
---- a/security/sandbox/win/wow_helper/Makefile.in
-+++ b/security/sandbox/win/wow_helper/Makefile.in
-@@ -16,26 +16,32 @@ lazy = $(if $(___$(1)),,$(eval ___$(1) :
- # to do the conversion for us by calling python with an environment variable
- # with the result of the call to `which`. Then munge that path to add the
- # x64 cross-compiler path.
- ifdef MOZ_USING_COMPILER_WRAPPER
- ORIG_CXX := cl
- else
- ORIG_CXX := $(CXX)
- endif
-+
-+# The path layout changed in VS2017.
-+ifeq ($(_MSC_VER),1900)
- CXX = $(call lazy,CXX,"$$(subst amd64_x86/x86_amd64/,amd64/,$$(shell CL=`which "$(ORIG_CXX)"` $(PYTHON) -c 'import os; print os.path.dirname(os.environ["CL"])')/x86_amd64/cl.exe)")
-+else
-+CXX = $(call lazy,CXX,"$$(subst HostX64/x86/,HostX64/x64/,$$(shell CL=`which "$(ORIG_CXX)"` $(PYTHON) -c 'import os; print os.path.dirname(os.environ["CL"])')/cl.exe)")
-+endif
- 
- MOZ_WINCONSOLE = 0
- 
- include $(topsrcdir)/config/config.mk
- 
- # Munge the LIB variable to contain paths to the x64 CRT and system libraries.
- # Unconveniently, none of the paths have the same convention, including the
- # compiler path above.
--LIB = $(call lazy,LIB,$$(shell python -c 'import os; print ";".join(s.lower().replace(os.sep, "/").replace("/vc/lib", "/vc/lib/amd64").replace("/um/x86", "/um/x64").replace("/ucrt/x86", "/ucrt/x64") for s in os.environ["LIB"].split(";"))'))
-+LIB = $(call lazy,LIB,$$(shell python -c 'import os; print ";".join(s.lower().replace(os.sep, "/").replace("/vc/lib", "/vc/lib/amd64").replace("/um/x86", "/um/x64").replace("/ucrt/x86", "/ucrt/x64").replace("/lib/x86", "/lib/x64") for s in os.environ["LIB"].split(";"))'))
- 
- CXXFLAGS := $(filter-out -arch:%,$(CXXFLAGS))
- 
- # OS_COMPILE_CXXFLAGS includes mozilla-config.h, which contains x86-specific
- # defines breaking the build.
- OS_COMPILE_CXXFLAGS :=
- 
- # LNK1246: '/SAFESEH' not compatible with 'x64' target machine

+ 0 - 39
mozilla-esr52/patches/PPPPPPP-psutil.patch

@@ -1,39 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  f9b2f9868d7712cd2803c0e981f6f1f047c6cf62
-Bug PPPPPPP - Fix compiler warnings in upstream psutil.
-
-diff -r f9b2f9868d77 python/psutil/psutil/arch/windows/ntextapi.h
---- a/python/psutil/psutil/arch/windows/ntextapi.h	Mon Aug 13 22:07:50 2018 +0200
-+++ b/python/psutil/psutil/arch/windows/ntextapi.h	Mon Aug 13 22:15:27 2018 +0200
-@@ -186,7 +186,7 @@
-     ProcessTimes,
-     ProcessBasePriority,
-     ProcessRaisePriority,
--    ProcessDebugPort,
-+    _ProcessDebugPort,
-     ProcessExceptionPort,
-     ProcessAccessToken,
-     ProcessLdtInformation,
-@@ -207,9 +207,9 @@
-     ProcessForegroundInformation,
-     _ProcessWow64Information,
-     /* added after XP+ */
--    ProcessImageFileName,
-+    _ProcessImageFileName,
-     ProcessLUIDDeviceMapsEnabled,
--    ProcessBreakOnTermination,
-+    _ProcessBreakOnTermination,
-     ProcessDebugObjectHandle,
-     ProcessDebugFlags,
-     ProcessHandleTracing,
-@@ -223,6 +223,9 @@
- 
- #define PROCESSINFOCLASS PROCESSINFOCLASS2
- #define ProcessBasicInformation _ProcessBasicInformation
-+#define ProcessDebugPort _ProcessDebugPort
-+#define ProcessImageFileName _ProcessImageFileName
-+#define ProcessBreakOnTermination _ProcessBreakOnTermination
- #define ProcessWow64Information _ProcessWow64Information
- 
- #endif // __NTEXTAPI_H__

+ 0 - 130
mozilla-esr52/patches/PPPPPPP-xpsp3.patch

@@ -1,130 +0,0 @@
-# HG changeset patch
-# User Frank-Rainer Grahl <frgrahl@gmx.net>
-# Parent  36509b1b5328601b101c62dfa7921b91614bd5b3
-Bug PPPPPPP - Set Windows XP Servicepack 3 with IE 8 as minimum supported level.
-
-diff --git a/browser/installer/windows/nsis/defines.nsi.in b/browser/installer/windows/nsis/defines.nsi.in
---- a/browser/installer/windows/nsis/defines.nsi.in
-+++ b/browser/installer/windows/nsis/defines.nsi.in
-@@ -66,17 +66,17 @@
- # ARCH is used when it is necessary to differentiate the x64 registry keys from
- # the x86 registry keys (e.g. the uninstall registry key).
- #ifdef HAVE_64BIT_BUILD
- !define HAVE_64BIT_BUILD
- !define ARCH "x64"
- !define MinSupportedVer "Microsoft Windows 7 x64"
- #else
- !define ARCH "x86"
--!define MinSupportedVer "Microsoft Windows XP SP2"
-+!define MinSupportedVer "Microsoft Windows XP SP3"
- #endif
- 
- !define MinSupportedCPU "SSE2"
- 
- #ifdef MOZ_MAINTENANCE_SERVICE
- !define MOZ_MAINTENANCE_SERVICE
- #endif
- 
-diff --git a/js/src/old-configure.in b/js/src/old-configure.in
---- a/js/src/old-configure.in
-+++ b/js/src/old-configure.in
-@@ -128,17 +128,17 @@ else
- fi
- 
- MOZ_TOOL_VARIABLES
- 
- dnl Special win32 checks
- dnl ========================================================
- 
- # Target the Windows 8.1 SDK by default
--WINVER=502
-+WINVER=503
- 
- case "$target" in
- *-mingw*)
-     if test "$GCC" != "yes"; then
-         # Check to see if we are really running in a msvc environemnt
-         _WIN32_MSVC=1
- 
-         # Make sure compilers are valid
-@@ -260,18 +260,18 @@ case "$target" in
-                 "$_WINDRES_RELEASE_VERSION" -lt "$WINDRES_RELEASE_VERSION"
-         then
-             AC_MSG_ERROR([windres version $WINDRES_VERSION or higher is required to build.])
-         fi
-     fi # !GNU_CC
- 
-     AC_DEFINE_UNQUOTED(WINVER,0x$WINVER)
-     AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x$WINVER)
--    # Require OS features provided by IE 6.0 SP2 (XP SP2)
--    AC_DEFINE_UNQUOTED(_WIN32_IE,0x0603)
-+    # Require OS features provided by IE 8.0 (XP SP3)
-+    AC_DEFINE_UNQUOTED(_WIN32_IE,0x0800)
- 
-     ;;
- esac
- 
- if test -n "$_WIN32_MSVC"; then
-     SKIP_PATH_CHECKS=1
-     SKIP_COMPILER_CHECKS=1
-     SKIP_LIBRARY_CHECKS=1
-diff --git a/old-configure.in b/old-configure.in
---- a/old-configure.in
-+++ b/old-configure.in
-@@ -198,17 +198,17 @@ if test -n "$MOZ_WINCONSOLE"; then
- fi
- 
- MOZ_TOOL_VARIABLES
- 
- dnl ========================================================
- dnl Special win32 checks
- dnl ========================================================
- 
--WINVER=502
-+WINVER=503
- 
- case "$target" in
- *-mingw*)
-     if test "$GCC" != "yes"; then
-         # Check to see if we are really running in a msvc environemnt
-         _WIN32_MSVC=1
-         AC_CHECK_PROGS(MIDL, midl)
- 
-@@ -377,18 +377,18 @@ case "$target" in
- 
-         # strsafe.h on mingw uses macros for function deprecation that pollutes namespace
-         # causing problems with local implementations with the same name.
-         AC_DEFINE(STRSAFE_NO_DEPRECATE)
-     fi # !GNU_CC
- 
-     AC_DEFINE_UNQUOTED(WINVER,0x$WINVER)
-     AC_DEFINE_UNQUOTED(_WIN32_WINNT,0x$WINVER)
--    # Require OS features provided by IE 6.0 SP2 (XP SP2)
--    AC_DEFINE_UNQUOTED(_WIN32_IE,0x0603)
-+    # Require OS features provided by IE 8.0 (XP SP3)
-+    AC_DEFINE_UNQUOTED(_WIN32_IE,0x0800)
- 
-     ;;
- esac
- 
- if test -n "$_WIN32_MSVC"; then
-     SKIP_PATH_CHECKS=1
-     SKIP_COMPILER_CHECKS=1
-     SKIP_LIBRARY_CHECKS=1
-diff --git a/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/resource.rc b/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/resource.rc
---- a/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/resource.rc
-+++ b/other-licenses/7zstub/src/7zip/Bundles/SFXSetup-moz/resource.rc
-@@ -7,12 +7,12 @@ IDI_ICON3  ICON "setup.ico"
- 
- STRINGTABLE
- BEGIN
-   IDS_EXTRACTION_ERROR_TITLE "Extraction Failed"
-   IDS_EXTRACTION_ERROR_MESSAGE "File is corrupt"
-   IDS_CANNOT_CREATE_FOLDER "Cannot create folder '{0}'"
-   IDS_PROGRESS_EXTRACTING "Extracting"
-   IDS_MIN_OS_TITLE "Setup Error"
--  IDS_MIN_OS_TEXT "Microsoft Windows XP SP2 or newer is required."
-+  IDS_MIN_OS_TEXT "Microsoft Windows XP SP3 or newer is required."
- END
- 
- #include "../../FileManager/Resource/ProgressDialog/resource.rc"

+ 0 - 7542
mozilla-esr52/patches/mozilla-esr52-push_355262.patch

@@ -1,7542 +0,0 @@
-# HG changeset patch
-# User Ryan VanderMeulen <ryanvm@gmail.com>
-# Date 1484106636 18000
-#      Tue Jan 10 22:50:36 2017 -0500
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 301a46b075293261115b39da1ff5f4d06cc08406
-# Parent  15d9d940341f02ef6dcad96899d284619d3d48db
-Bug 1322027 - Update jemalloc 4 to version 4.4.0. r=glandium a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/build/autoconf/jemalloc.m4 b/build/autoconf/jemalloc.m4
---- a/build/autoconf/jemalloc.m4
-+++ b/build/autoconf/jemalloc.m4
-@@ -83,16 +83,19 @@ if test "$MOZ_BUILD_APP" != js -o -n "$J
-     # their mozconfig.
-     if test "$_MSC_VER"; then
-        ac_configure_args="$ac_configure_args CFLAGS="
-     fi
- 
-     # Force disable DSS support in jemalloc.
-     ac_configure_args="$ac_configure_args ac_cv_func_sbrk=false"
- 
-+    # Force disable hugepage support in jemalloc.
-+    ac_configure_args="$ac_configure_args je_cv_thp=no"
-+
-     # Make Linux builds munmap freed chunks instead of recycling them.
-     ac_configure_args="$ac_configure_args --enable-munmap"
- 
-     # Disable cache oblivious behavior that appears to have a performance
-     # impact on Firefox.
-     ac_configure_args="$ac_configure_args --disable-cache-oblivious"
- 
-     if ! test -e memory/jemalloc; then
-diff --git a/memory/jemalloc/src/ChangeLog b/memory/jemalloc/src/ChangeLog
---- a/memory/jemalloc/src/ChangeLog
-+++ b/memory/jemalloc/src/ChangeLog
-@@ -1,14 +1,41 @@
- Following are change highlights associated with official releases.  Important
- bug fixes are all mentioned, but some internal enhancements are omitted here for
- brevity.  Much more detail can be found in the git revision history:
- 
-     https://github.com/jemalloc/jemalloc
- 
-+* 4.4.0 (December 3, 2016)
-+
-+  New features:
-+  - Add configure support for *-*-linux-android.  (@cferris1000, @jasone)
-+  - Add the --disable-syscall configure option, for use on systems that place
-+    security-motivated limitations on syscall(2).  (@jasone)
-+  - Add support for Debian GNU/kFreeBSD.  (@thesam)
-+
-+  Optimizations:
-+  - Add extent serial numbers and use them where appropriate as a sort key that
-+    is higher priority than address, so that the allocation policy prefers older
-+    extents.  This tends to improve locality (decrease fragmentation) when
-+    memory grows downward.  (@jasone)
-+  - Refactor madvise(2) configuration so that MADV_FREE is detected and utilized
-+    on Linux 4.5 and newer.  (@jasone)
-+  - Mark partially purged arena chunks as non-huge-page.  This improves
-+    interaction with Linux's transparent huge page functionality.  (@jasone)
-+
-+  Bug fixes:
-+  - Fix size class computations for edge conditions involving extremely large
-+    allocations.  This regression was first released in 4.0.0.  (@jasone,
-+    @ingvarha)
-+  - Remove overly restrictive assertions related to the cactive statistic.  This
-+    regression was first released in 4.1.0.  (@jasone)
-+  - Implement a more reliable detection scheme for os_unfair_lock on macOS.
-+    (@jszakmeister)
-+
- * 4.3.1 (November 7, 2016)
- 
-   Bug fixes:
-   - Fix a severe virtual memory leak.  This regression was first released in
-     4.3.0.  (@interwq, @jasone)
-   - Refactor atomic and prng APIs to restore support for 32-bit platforms that
-     use pre-C11 toolchains, e.g. FreeBSD's mips.  (@jasone)
- 
-diff --git a/memory/jemalloc/src/INSTALL b/memory/jemalloc/src/INSTALL
---- a/memory/jemalloc/src/INSTALL
-+++ b/memory/jemalloc/src/INSTALL
-@@ -201,16 +201,21 @@ any of the following arguments (not a de
-     Disable cache-oblivious large allocation alignment for large allocation
-     requests with no alignment constraints.  If this feature is disabled, all
-     large allocations are page-aligned as an implementation artifact, which can
-     severely harm CPU cache utilization.  However, the cache-oblivious layout
-     comes at the cost of one extra page per large allocation, which in the
-     most extreme case increases physical memory usage for the 16 KiB size class
-     to 20 KiB.
- 
-+--disable-syscall
-+    Disable use of syscall(2) rather than {open,read,write,close}(2).  This is
-+    intended as a workaround for systems that place security limitations on
-+    syscall(2).
-+
- --with-xslroot=<path>
-     Specify where to find DocBook XSL stylesheets when building the
-     documentation.
- 
- --with-lg-page=<lg-page>
-     Specify the base 2 log of the system page size.  This option is only useful
-     when cross compiling, since the configure script automatically determines
-     the host's page size by default.
-@@ -322,16 +327,25 @@ LD_LIBRARY_PATH="?"
-     'ld' uses this colon-separated list to find libraries.
- 
- LDFLAGS="?"
-     Pass these flags when linking.
- 
- PATH="?"
-     'configure' uses this to find programs.
- 
-+In some cases it may be necessary to work around configuration results that do
-+not match reality.  For example, Linux 4.5 added support for the MADV_FREE flag
-+to madvise(2), which can cause problems if building on a host with MADV_FREE
-+support and deploying to a target without.  To work around this, use a cache
-+file to override the relevant configuration variable defined in configure.ac,
-+e.g.:
-+
-+    echo "je_cv_madv_free=no" > config.cache && ./configure -C
-+
- === Advanced compilation =======================================================
- 
- To build only parts of jemalloc, use the following targets:
- 
-     build_lib_shared
-     build_lib_static
-     build_lib
-     build_doc_html
-diff --git a/memory/jemalloc/src/Makefile.in b/memory/jemalloc/src/Makefile.in
---- a/memory/jemalloc/src/Makefile.in
-+++ b/memory/jemalloc/src/Makefile.in
-@@ -161,16 +161,18 @@ TESTS_UNIT := \
- 	$(srcroot)test/unit/junk.c \
- 	$(srcroot)test/unit/junk_alloc.c \
- 	$(srcroot)test/unit/junk_free.c \
- 	$(srcroot)test/unit/lg_chunk.c \
- 	$(srcroot)test/unit/mallctl.c \
- 	$(srcroot)test/unit/math.c \
- 	$(srcroot)test/unit/mq.c \
- 	$(srcroot)test/unit/mtx.c \
-+	$(srcroot)test/unit/pack.c \
-+	$(srcroot)test/unit/pages.c \
- 	$(srcroot)test/unit/ph.c \
- 	$(srcroot)test/unit/prng.c \
- 	$(srcroot)test/unit/prof_accum.c \
- 	$(srcroot)test/unit/prof_active.c \
- 	$(srcroot)test/unit/prof_gdump.c \
- 	$(srcroot)test/unit/prof_idump.c \
- 	$(srcroot)test/unit/prof_reset.c \
- 	$(srcroot)test/unit/prof_thread_name.c \
-diff --git a/memory/jemalloc/src/VERSION b/memory/jemalloc/src/VERSION
---- a/memory/jemalloc/src/VERSION
-+++ b/memory/jemalloc/src/VERSION
-@@ -1,1 +1,1 @@
--4.3.1-0-g0110fa8451af905affd77c3bea0d545fee2251b2
-+4.4.0-0-gf1f76357313e7dcad7262f17a48ff0a2e005fcdc
-diff --git a/memory/jemalloc/src/build-aux/config.guess b/memory/jemalloc/src/build-aux/config.guess
---- a/memory/jemalloc/src/build-aux/config.guess
-+++ b/memory/jemalloc/src/build-aux/config.guess
-@@ -1,13 +1,13 @@
- #! /bin/sh
- # Attempt to guess a canonical system name.
--#   Copyright 1992-2014 Free Software Foundation, Inc.
-+#   Copyright 1992-2016 Free Software Foundation, Inc.
- 
--timestamp='2014-03-23'
-+timestamp='2016-10-02'
- 
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
-@@ -19,22 +19,22 @@ timestamp='2014-03-23'
- #
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that
- # program.  This Exception is an additional permission under section 7
- # of the GNU General Public License, version 3 ("GPLv3").
- #
--# Originally written by Per Bothner.
-+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
- #
- # You can get the latest version of this script from:
--# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
- #
--# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-+# Please send patches to <config-patches@gnu.org>.
- 
- 
- me=`echo "$0" | sed -e 's,.*/,,'`
- 
- usage="\
- Usage: $0 [OPTION]
- 
- Output the configuration name of the system \`$me' is run on.
-@@ -45,17 +45,17 @@ Operation modes:
-   -v, --version      print version number, then exit
- 
- Report bugs and patches to <config-patches@gnu.org>."
- 
- version="\
- GNU config.guess ($timestamp)
- 
- Originally written by Per Bothner.
--Copyright 1992-2014 Free Software Foundation, Inc.
-+Copyright 1992-2016 Free Software Foundation, Inc.
- 
- This is free software; see the source for copying conditions.  There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- 
- help="
- Try \`$me --help' for more information."
- 
- # Parse command line
-@@ -163,135 +163,159 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
- 	# switched to ELF, *-*-netbsd* would select the old
- 	# object file format.  This provides both forward
- 	# compatibility and a consistent mechanism for selecting the
- 	# object file format.
- 	#
- 	# Note: NetBSD doesn't particularly care about the vendor
- 	# portion of the name.  We always set it to "unknown".
- 	sysctl="sysctl -n hw.machine_arch"
--	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
--	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-+	UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
-+	    /sbin/$sysctl 2>/dev/null || \
-+	    /usr/sbin/$sysctl 2>/dev/null || \
-+	    echo unknown)`
- 	case "${UNAME_MACHINE_ARCH}" in
- 	    armeb) machine=armeb-unknown ;;
- 	    arm*) machine=arm-unknown ;;
- 	    sh3el) machine=shl-unknown ;;
- 	    sh3eb) machine=sh-unknown ;;
- 	    sh5el) machine=sh5le-unknown ;;
-+	    earmv*)
-+		arch=`echo ${UNAME_MACHINE_ARCH} | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
-+		endian=`echo ${UNAME_MACHINE_ARCH} | sed -ne 's,^.*\(eb\)$,\1,p'`
-+		machine=${arch}${endian}-unknown
-+		;;
- 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
- 	esac
- 	# The Operating System including object format, if it has switched
--	# to ELF recently, or will in the future.
-+	# to ELF recently (or will in the future) and ABI.
- 	case "${UNAME_MACHINE_ARCH}" in
-+	    earm*)
-+		os=netbsdelf
-+		;;
- 	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
- 		eval $set_cc_for_build
- 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
- 			| grep -q __ELF__
- 		then
- 		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
- 		    # Return netbsd for either.  FIX?
- 		    os=netbsd
- 		else
- 		    os=netbsdelf
- 		fi
- 		;;
- 	    *)
- 		os=netbsd
- 		;;
- 	esac
-+	# Determine ABI tags.
-+	case "${UNAME_MACHINE_ARCH}" in
-+	    earm*)
-+		expr='s/^earmv[0-9]/-eabi/;s/eb$//'
-+		abi=`echo ${UNAME_MACHINE_ARCH} | sed -e "$expr"`
-+		;;
-+	esac
- 	# The OS release
- 	# Debian GNU/NetBSD machines have a different userland, and
- 	# thus, need a distinct triplet. However, they do not need
- 	# kernel version information, so it can be replaced with a
- 	# suitable tag, in the style of linux-gnu.
- 	case "${UNAME_VERSION}" in
- 	    Debian*)
- 		release='-gnu'
- 		;;
- 	    *)
--		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-+		release=`echo ${UNAME_RELEASE} | sed -e 's/[-_].*//' | cut -d. -f1,2`
- 		;;
- 	esac
- 	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
- 	# contains redundant information, the shorter form:
- 	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
--	echo "${machine}-${os}${release}"
-+	echo "${machine}-${os}${release}${abi}"
- 	exit ;;
-     *:Bitrig:*:*)
- 	UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
- 	echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
- 	exit ;;
-     *:OpenBSD:*:*)
- 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
- 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
- 	exit ;;
-+    *:LibertyBSD:*:*)
-+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
-+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
-+	exit ;;
-     *:ekkoBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
- 	exit ;;
-     *:SolidBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
- 	exit ;;
-     macppc:MirBSD:*:*)
- 	echo powerpc-unknown-mirbsd${UNAME_RELEASE}
- 	exit ;;
-     *:MirBSD:*:*)
- 	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
- 	exit ;;
-+    *:Sortix:*:*)
-+	echo ${UNAME_MACHINE}-unknown-sortix
-+	exit ;;
-     alpha:OSF1:*:*)
- 	case $UNAME_RELEASE in
- 	*4.0)
- 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
- 		;;
- 	*5.*)
- 		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
- 		;;
- 	esac
- 	# According to Compaq, /usr/sbin/psrinfo has been available on
- 	# OSF/1 and Tru64 systems produced since 1995.  I hope that
- 	# covers most systems running today.  This code pipes the CPU
- 	# types through head -n 1, so we only detect the type of CPU 0.
- 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
- 	case "$ALPHA_CPU_TYPE" in
- 	    "EV4 (21064)")
--		UNAME_MACHINE="alpha" ;;
-+		UNAME_MACHINE=alpha ;;
- 	    "EV4.5 (21064)")
--		UNAME_MACHINE="alpha" ;;
-+		UNAME_MACHINE=alpha ;;
- 	    "LCA4 (21066/21068)")
--		UNAME_MACHINE="alpha" ;;
-+		UNAME_MACHINE=alpha ;;
- 	    "EV5 (21164)")
--		UNAME_MACHINE="alphaev5" ;;
-+		UNAME_MACHINE=alphaev5 ;;
- 	    "EV5.6 (21164A)")
--		UNAME_MACHINE="alphaev56" ;;
-+		UNAME_MACHINE=alphaev56 ;;
- 	    "EV5.6 (21164PC)")
--		UNAME_MACHINE="alphapca56" ;;
-+		UNAME_MACHINE=alphapca56 ;;
- 	    "EV5.7 (21164PC)")
--		UNAME_MACHINE="alphapca57" ;;
-+		UNAME_MACHINE=alphapca57 ;;
- 	    "EV6 (21264)")
--		UNAME_MACHINE="alphaev6" ;;
-+		UNAME_MACHINE=alphaev6 ;;
- 	    "EV6.7 (21264A)")
--		UNAME_MACHINE="alphaev67" ;;
-+		UNAME_MACHINE=alphaev67 ;;
- 	    "EV6.8CB (21264C)")
--		UNAME_MACHINE="alphaev68" ;;
-+		UNAME_MACHINE=alphaev68 ;;
- 	    "EV6.8AL (21264B)")
--		UNAME_MACHINE="alphaev68" ;;
-+		UNAME_MACHINE=alphaev68 ;;
- 	    "EV6.8CX (21264D)")
--		UNAME_MACHINE="alphaev68" ;;
-+		UNAME_MACHINE=alphaev68 ;;
- 	    "EV6.9A (21264/EV69A)")
--		UNAME_MACHINE="alphaev69" ;;
-+		UNAME_MACHINE=alphaev69 ;;
- 	    "EV7 (21364)")
--		UNAME_MACHINE="alphaev7" ;;
-+		UNAME_MACHINE=alphaev7 ;;
- 	    "EV7.9 (21364A)")
--		UNAME_MACHINE="alphaev79" ;;
-+		UNAME_MACHINE=alphaev79 ;;
- 	esac
- 	# A Pn.n version is a patched version.
- 	# A Vn.n version is a released version.
- 	# A Tn.n version is a released field test version.
- 	# A Xn.n version is an unreleased experimental baselevel.
- 	# 1.2 uses "1.2" for uname -r.
--	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
- 	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
- 	exitcode=$?
- 	trap '' 0
- 	exit $exitcode ;;
-     Alpha\ *:Windows_NT*:*)
- 	# How do we know it's Interix rather than the generic POSIX subsystem?
- 	# Should we change UNAME_MACHINE based on the output of uname instead
- 	# of the specific Alpha model?
-@@ -354,26 +378,26 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
-     sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
- 	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit ;;
-     i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
- 	echo i386-pc-auroraux${UNAME_RELEASE}
- 	exit ;;
-     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
- 	eval $set_cc_for_build
--	SUN_ARCH="i386"
-+	SUN_ARCH=i386
- 	# If there is a compiler, see if it is configured for 64-bit objects.
- 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
- 	# This test works for both compilers.
--	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
--		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- 		grep IS_64BIT_ARCH >/dev/null
- 	    then
--		SUN_ARCH="x86_64"
-+		SUN_ARCH=x86_64
- 	    fi
- 	fi
- 	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit ;;
-     sun4*:SunOS:6*:*)
- 	# According to config.sub, this is the proper way to canonicalize
- 	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
- 	# it's likely to be more like Solaris than SunOS4.
-@@ -388,17 +412,17 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:$
- 	# Japanese Language versions have a version number like `4.1.3-JL'.
- 	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
- 	exit ;;
-     sun3*:SunOS:*:*)
- 	echo m68k-sun-sunos${UNAME_RELEASE}
- 	exit ;;
-     sun*:*:4.2BSD:*)
- 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
--	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
- 	case "`/bin/arch`" in
- 	    sun3)
- 		echo m68k-sun-sunos${UNAME_RELEASE}
- 		;;
- 	    sun4)
- 		echo sparc-sun-sunos${UNAME_RELEASE}
- 		;;
- 	esac
-@@ -574,18 +598,19 @@ EOF
- 	exit ;;
-     *:AIX:*:[4567])
- 	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
- 	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
- 		IBM_ARCH=rs6000
- 	else
- 		IBM_ARCH=powerpc
- 	fi
--	if [ -x /usr/bin/oslevel ] ; then
--		IBM_REV=`/usr/bin/oslevel`
-+	if [ -x /usr/bin/lslpp ] ; then
-+		IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
-+			   awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
- 	else
- 		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
- 	fi
- 	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
- 	exit ;;
-     *:AIX:*:*)
- 	echo rs6000-ibm-aix
- 	exit ;;
-@@ -612,23 +637,23 @@ EOF
- 	case "${UNAME_MACHINE}" in
- 	    9000/31? )            HP_ARCH=m68000 ;;
- 	    9000/[34]?? )         HP_ARCH=m68k ;;
- 	    9000/[678][0-9][0-9])
- 		if [ -x /usr/bin/getconf ]; then
- 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
- 		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
- 		    case "${sc_cpu_version}" in
--		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
--		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
-+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
- 		      532)                      # CPU_PA_RISC2_0
- 			case "${sc_kernel_bits}" in
--			  32) HP_ARCH="hppa2.0n" ;;
--			  64) HP_ARCH="hppa2.0w" ;;
--			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-+			  32) HP_ARCH=hppa2.0n ;;
-+			  64) HP_ARCH=hppa2.0w ;;
-+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
- 			esac ;;
- 		    esac
- 		fi
- 		if [ "${HP_ARCH}" = "" ]; then
- 		    eval $set_cc_for_build
- 		    sed 's/^		//' << EOF >$dummy.c
- 
- 		#define _HPUX_SOURCE
-@@ -657,39 +682,39 @@ EOF
- 		#else  /* !defined(_SC_KERNEL_BITS) */
- 			    puts ("hppa2.0"); break;
- 		#endif
- 			default: puts ("hppa1.0"); break;
- 			}
- 		    exit (0);
- 		}
- EOF
--		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
- 		    test -z "$HP_ARCH" && HP_ARCH=hppa
- 		fi ;;
- 	esac
--	if [ ${HP_ARCH} = "hppa2.0w" ]
-+	if [ ${HP_ARCH} = hppa2.0w ]
- 	then
- 	    eval $set_cc_for_build
- 
- 	    # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
- 	    # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
- 	    # generating 64-bit code.  GNU and HP use different nomenclature:
- 	    #
- 	    # $ CC_FOR_BUILD=cc ./config.guess
- 	    # => hppa2.0w-hp-hpux11.23
- 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
- 	    # => hppa64-hp-hpux11.23
- 
--	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
- 		grep -q __LP64__
- 	    then
--		HP_ARCH="hppa2.0w"
-+		HP_ARCH=hppa2.0w
- 	    else
--		HP_ARCH="hppa64"
-+		HP_ARCH=hppa64
- 	    fi
- 	fi
- 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
- 	exit ;;
-     ia64:HP-UX:*:*)
- 	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
- 	echo ia64-hp-hpux${HPUX_REV}
- 	exit ;;
-@@ -784,24 +809,24 @@ EOF
- 	exit ;;
-     CRAY*SV1:*:*:*)
- 	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit ;;
-     *:UNICOS/mp:*:*)
- 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
- 	exit ;;
-     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
--	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
--	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
-+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
- 	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
- 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- 	exit ;;
-     5000:UNIX_System_V:4.*:*)
--	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
--	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
-+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
- 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
- 	exit ;;
-     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
- 	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
- 	exit ;;
-     sparc*:BSD/OS:*:*)
- 	echo sparc-unknown-bsdi${UNAME_RELEASE}
- 	exit ;;
-@@ -873,17 +898,17 @@ EOF
- 	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
- 	exit ;;
-     *:GNU:*:*)
- 	# the GNU system
- 	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
- 	exit ;;
-     *:GNU/*:*:*)
- 	# other systems with GNU libc and userland
--	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
- 	exit ;;
-     i*86:Minix:*:*)
- 	echo ${UNAME_MACHINE}-pc-minix
- 	exit ;;
-     aarch64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     aarch64_be:Linux:*:*)
-@@ -896,17 +921,17 @@ EOF
- 	  EV56)  UNAME_MACHINE=alphaev56 ;;
- 	  PCA56) UNAME_MACHINE=alphapca56 ;;
- 	  PCA57) UNAME_MACHINE=alphapca56 ;;
- 	  EV6)   UNAME_MACHINE=alphaev6 ;;
- 	  EV67)  UNAME_MACHINE=alphaev67 ;;
- 	  EV68*) UNAME_MACHINE=alphaev68 ;;
- 	esac
- 	objdump --private-headers /bin/sh | grep -q ld.so.1
--	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     arc:Linux:*:* | arceb:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     arm*:Linux:*:*)
- 	eval $set_cc_for_build
- 	if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-@@ -927,28 +952,34 @@ EOF
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     cris:Linux:*:*)
- 	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
- 	exit ;;
-     crisv32:Linux:*:*)
- 	echo ${UNAME_MACHINE}-axis-linux-${LIBC}
- 	exit ;;
-+    e2k:Linux:*:*)
-+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+	exit ;;
-     frv:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     hexagon:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     i*86:Linux:*:*)
- 	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
- 	exit ;;
-     ia64:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-+    k1om:Linux:*:*)
-+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+	exit ;;
-     m32r*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     m68*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     mips:Linux:*:* | mips64:Linux:*:*)
- 	eval $set_cc_for_build
-@@ -964,16 +995,19 @@ EOF
- 	#else
- 	CPU=
- 	#endif
- 	#endif
- EOF
- 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
- 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
- 	;;
-+    mips64el:Linux:*:*)
-+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+	exit ;;
-     openrisc*:Linux:*:*)
- 	echo or1k-unknown-linux-${LIBC}
- 	exit ;;
-     or32:Linux:*:* | or1k*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     padre:Linux:*:*)
- 	echo sparc-unknown-linux-${LIBC}
-@@ -996,16 +1030,19 @@ EOF
- 	echo powerpc-unknown-linux-${LIBC}
- 	exit ;;
-     ppc64le:Linux:*:*)
- 	echo powerpc64le-unknown-linux-${LIBC}
- 	exit ;;
-     ppcle:Linux:*:*)
- 	echo powerpcle-unknown-linux-${LIBC}
- 	exit ;;
-+    riscv32:Linux:*:* | riscv64:Linux:*:*)
-+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+	exit ;;
-     s390:Linux:*:* | s390x:Linux:*:*)
- 	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
- 	exit ;;
-     sh64*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     sh*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-@@ -1015,17 +1052,17 @@ EOF
- 	exit ;;
-     tile*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     vax:Linux:*:*)
- 	echo ${UNAME_MACHINE}-dec-linux-${LIBC}
- 	exit ;;
-     x86_64:Linux:*:*)
--	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-+	echo ${UNAME_MACHINE}-pc-linux-${LIBC}
- 	exit ;;
-     xtensa*:Linux:*:*)
- 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
- 	exit ;;
-     i*86:DYNIX/ptx:4*:*)
- 	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
- 	# earlier versions are messed up and put the nodename in both
- 	# sysname and nodename.
-@@ -1094,17 +1131,17 @@ EOF
- 		echo ${UNAME_MACHINE}-pc-sysv32
- 	fi
- 	exit ;;
-     pc:*:*:*)
- 	# Left here for compatibility:
- 	# uname -m prints for DJGPP always 'pc', but it prints nothing about
- 	# the processor, so we play safe by assuming i586.
- 	# Note: whatever this is, it MUST be the same as what config.sub
--	# prints for the "djgpp" host, or else GDB configury will decide that
-+	# prints for the "djgpp" host, or else GDB configure will decide that
- 	# this is a cross-build.
- 	echo i586-pc-msdosdjgpp
- 	exit ;;
-     Intel:Mach:3*:*)
- 	echo i386-pc-mach3
- 	exit ;;
-     paragon:*:*:*)
- 	echo i860-intel-osf1
-@@ -1243,32 +1280,35 @@ EOF
- 	echo sx7-nec-superux${UNAME_RELEASE}
- 	exit ;;
-     SX-8:SUPER-UX:*:*)
- 	echo sx8-nec-superux${UNAME_RELEASE}
- 	exit ;;
-     SX-8R:SUPER-UX:*:*)
- 	echo sx8r-nec-superux${UNAME_RELEASE}
- 	exit ;;
-+    SX-ACE:SUPER-UX:*:*)
-+	echo sxace-nec-superux${UNAME_RELEASE}
-+	exit ;;
-     Power*:Rhapsody:*:*)
- 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
- 	exit ;;
-     *:Rhapsody:*:*)
- 	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
- 	exit ;;
-     *:Darwin:*:*)
- 	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
- 	eval $set_cc_for_build
- 	if test "$UNAME_PROCESSOR" = unknown ; then
- 	    UNAME_PROCESSOR=powerpc
- 	fi
- 	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
--	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
- 		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
--		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-+		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
- 		    grep IS_64BIT_ARCH >/dev/null
- 		then
- 		    case $UNAME_PROCESSOR in
- 			i386) UNAME_PROCESSOR=x86_64 ;;
- 			powerpc) UNAME_PROCESSOR=powerpc64 ;;
- 		    esac
- 		fi
- 	    fi
-@@ -1280,17 +1320,17 @@ EOF
- 	    # processor. This is not true of the ARM version of Darwin
- 	    # that Apple uses in portable devices.
- 	    UNAME_PROCESSOR=x86_64
- 	fi
- 	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
- 	exit ;;
-     *:procnto*:*:* | *:QNX:[0123456789]*:*)
- 	UNAME_PROCESSOR=`uname -p`
--	if test "$UNAME_PROCESSOR" = "x86"; then
-+	if test "$UNAME_PROCESSOR" = x86; then
- 		UNAME_PROCESSOR=i386
- 		UNAME_MACHINE=pc
- 	fi
- 	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
- 	exit ;;
-     *:QNX:*:4*)
- 	echo i386-pc-qnx
- 	exit ;;
-@@ -1311,17 +1351,17 @@ EOF
- 	exit ;;
-     DS/*:UNIX_System_V:*:*)
- 	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
- 	exit ;;
-     *:Plan9:*:*)
- 	# "uname -m" is not consistent, so use $cputype instead. 386
- 	# is converted to i386 for consistency with other x86
- 	# operating systems.
--	if test "$cputype" = "386"; then
-+	if test "$cputype" = 386; then
- 	    UNAME_MACHINE=i386
- 	else
- 	    UNAME_MACHINE="$cputype"
- 	fi
- 	echo ${UNAME_MACHINE}-unknown-plan9
- 	exit ;;
-     *:TOPS-10:*:*)
- 	echo pdp10-unknown-tops10
-@@ -1353,44 +1393,46 @@ EOF
- 	    A*) echo alpha-dec-vms ; exit ;;
- 	    I*) echo ia64-dec-vms ; exit ;;
- 	    V*) echo vax-dec-vms ; exit ;;
- 	esac ;;
-     *:XENIX:*:SysV)
- 	echo i386-pc-xenix
- 	exit ;;
-     i*86:skyos:*:*)
--	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
- 	exit ;;
-     i*86:rdos:*:*)
- 	echo ${UNAME_MACHINE}-pc-rdos
- 	exit ;;
-     i*86:AROS:*:*)
- 	echo ${UNAME_MACHINE}-pc-aros
- 	exit ;;
-     x86_64:VMkernel:*:*)
- 	echo ${UNAME_MACHINE}-unknown-esx
- 	exit ;;
-+    amd64:Isilon\ OneFS:*:*)
-+	echo x86_64-unknown-onefs
-+	exit ;;
- esac
- 
- cat >&2 <<EOF
- $0: unable to guess system type
- 
--This script, last modified $timestamp, has failed to recognize
--the operating system you are using. It is advised that you
--download the most up to date version of the config scripts from
-+This script (version $timestamp), has failed to recognize the
-+operating system you are using. If your script is old, overwrite
-+config.guess and config.sub with the latest versions from:
- 
--  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
- and
--  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
- 
--If the version you run ($0) is already up to date, please
--send the following data and any information you think might be
--pertinent to <config-patches@gnu.org> in order to provide the needed
--information to handle your system.
-+If $0 has already been updated, send the following data and any
-+information you think might be pertinent to config-patches@gnu.org to
-+provide the necessary information to handle your system.
- 
- config.guess timestamp = $timestamp
- 
- uname -m = `(uname -m) 2>/dev/null || echo unknown`
- uname -r = `(uname -r) 2>/dev/null || echo unknown`
- uname -s = `(uname -s) 2>/dev/null || echo unknown`
- uname -v = `(uname -v) 2>/dev/null || echo unknown`
- 
-diff --git a/memory/jemalloc/src/build-aux/config.sub b/memory/jemalloc/src/build-aux/config.sub
---- a/memory/jemalloc/src/build-aux/config.sub
-+++ b/memory/jemalloc/src/build-aux/config.sub
-@@ -1,13 +1,13 @@
- #! /bin/sh
- # Configuration validation subroutine script.
--#   Copyright 1992-2014 Free Software Foundation, Inc.
-+#   Copyright 1992-2016 Free Software Foundation, Inc.
- 
--timestamp='2014-05-01'
-+timestamp='2016-11-04'
- 
- # This file is free software; you can redistribute it and/or modify it
- # under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 3 of the License, or
- # (at your option) any later version.
- #
- # This program is distributed in the hope that it will be useful, but
- # WITHOUT ANY WARRANTY; without even the implied warranty of
-@@ -20,25 +20,25 @@ timestamp='2014-05-01'
- # As a special exception to the GNU General Public License, if you
- # distribute this file as part of a program that contains a
- # configuration script generated by Autoconf, you may include it under
- # the same distribution terms that you use for the rest of that
- # program.  This Exception is an additional permission under section 7
- # of the GNU General Public License, version 3 ("GPLv3").
- 
- 
--# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-+# Please send patches to <config-patches@gnu.org>.
- #
- # Configuration subroutine to validate and canonicalize a configuration type.
- # Supply the specified configuration type as an argument.
- # If it is invalid, we print an error message on stderr and exit with code 1.
- # Otherwise, we print the canonical config type on stdout and succeed.
- 
- # You can get the latest version of this script from:
--# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
- 
- # This file is supposed to be the same for all GNU packages
- # and recognize all the CPU types, system types and aliases
- # that are meaningful with *any* GNU software.
- # Each package is responsible for reporting which valid configurations
- # it does not support.  The user should be able to distinguish
- # a failure to support a valid configuration from a meaningless
- # configuration.
-@@ -48,32 +48,31 @@ timestamp='2014-05-01'
- #	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
- # or in some cases, the newer four-part form:
- #	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
- # It is wrong to echo any other type of specification.
- 
- me=`echo "$0" | sed -e 's,.*/,,'`
- 
- usage="\
--Usage: $0 [OPTION] CPU-MFR-OPSYS
--       $0 [OPTION] ALIAS
-+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
- 
- Canonicalize a configuration name.
- 
- Operation modes:
-   -h, --help         print this help, then exit
-   -t, --time-stamp   print date of last modification, then exit
-   -v, --version      print version number, then exit
- 
- Report bugs and patches to <config-patches@gnu.org>."
- 
- version="\
- GNU config.sub ($timestamp)
- 
--Copyright 1992-2014 Free Software Foundation, Inc.
-+Copyright 1992-2016 Free Software Foundation, Inc.
- 
- This is free software; see the source for copying conditions.  There is NO
- warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
- 
- help="
- Try \`$me --help' for more information."
- 
- # Parse command line
-@@ -112,18 +111,18 @@ case $# in
- esac
- 
- # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
- # Here we must recognize all the valid KERNEL-OS combinations.
- maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
- case $maybe_os in
-   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
--  knetbsd*-gnu* | netbsd*-gnu* | \
--  kopensolaris*-gnu* | \
-+  knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-+  kopensolaris*-gnu* | cloudabi*-eabi* | \
-   storm-chaos* | os2-emx* | rtmk-nova*)
-     os=-$maybe_os
-     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-     ;;
-   android-linux)
-     os=-linux-android
-     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-     ;;
-@@ -250,22 +249,23 @@ case $basic_machine in
- 	| a29k \
- 	| aarch64 | aarch64_be \
- 	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
- 	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
- 	| am33_2.0 \
- 	| arc | arceb \
- 	| arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
- 	| avr | avr32 \
-+	| ba \
- 	| be32 | be64 \
- 	| bfin \
- 	| c4x | c8051 | clipper \
- 	| d10v | d30v | dlx | dsp16xx \
--	| epiphany \
--	| fido | fr30 | frv \
-+	| e2k | epiphany \
-+	| fido | fr30 | frv | ft32 \
- 	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
- 	| hexagon \
- 	| i370 | i860 | i960 | ia64 \
- 	| ip2k | iq2000 \
- 	| k1om \
- 	| le32 | le64 \
- 	| lm32 \
- 	| m32c | m32r | m32rle | m68000 | m68k | m88k \
-@@ -296,41 +296,47 @@ case $basic_machine in
- 	| mt \
- 	| msp430 \
- 	| nds32 | nds32le | nds32be \
- 	| nios | nios2 | nios2eb | nios2el \
- 	| ns16k | ns32k \
- 	| open8 | or1k | or1knd | or32 \
- 	| pdp10 | pdp11 | pj | pjl \
- 	| powerpc | powerpc64 | powerpc64le | powerpcle \
-+	| pru \
- 	| pyramid \
-+	| riscv32 | riscv64 \
- 	| rl78 | rx \
- 	| score \
--	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-+	| sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[234]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
- 	| sh64 | sh64le \
- 	| sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
- 	| sparcv8 | sparcv9 | sparcv9b | sparcv9v \
- 	| spu \
- 	| tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
- 	| ubicom32 \
- 	| v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-+	| visium \
- 	| we32k \
- 	| x86 | xc16x | xstormy16 | xtensa \
- 	| z8k | z80)
- 		basic_machine=$basic_machine-unknown
- 		;;
- 	c54x)
- 		basic_machine=tic54x-unknown
- 		;;
- 	c55x)
- 		basic_machine=tic55x-unknown
- 		;;
- 	c6x)
- 		basic_machine=tic6x-unknown
- 		;;
-+	leon|leon[3-9])
-+		basic_machine=sparc-$basic_machine
-+		;;
- 	m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
- 		basic_machine=$basic_machine-unknown
- 		os=-none
- 		;;
- 	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
- 		;;
- 	ms1)
- 		basic_machine=mt-unknown
-@@ -366,22 +372,23 @@ case $basic_machine in
- 	580-* \
- 	| a29k-* \
- 	| aarch64-* | aarch64_be-* \
- 	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
- 	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
- 	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
- 	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
- 	| avr-* | avr32-* \
-+	| ba-* \
- 	| be32-* | be64-* \
- 	| bfin-* | bs2000-* \
- 	| c[123]* | c30-* | [cjt]90-* | c4x-* \
- 	| c8051-* | clipper-* | craynv-* | cydra-* \
- 	| d10v-* | d30v-* | dlx-* \
--	| elxsi-* \
-+	| e2k-* | elxsi-* \
- 	| f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
- 	| h8300-* | h8500-* \
- 	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
- 	| hexagon-* \
- 	| i*86-* | i860-* | i960-* | ia64-* \
- 	| ip2k-* | iq2000-* \
- 	| k1om-* \
- 	| le32-* | le64-* \
-@@ -417,30 +424,33 @@ case $basic_machine in
- 	| nds32-* | nds32le-* | nds32be-* \
- 	| nios-* | nios2-* | nios2eb-* | nios2el-* \
- 	| none-* | np1-* | ns16k-* | ns32k-* \
- 	| open8-* \
- 	| or1k*-* \
- 	| orion-* \
- 	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
- 	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-+	| pru-* \
- 	| pyramid-* \
-+	| riscv32-* | riscv64-* \
- 	| rl78-* | romp-* | rs6000-* | rx-* \
- 	| sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
- 	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
- 	| sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
- 	| sparclite-* \
--	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-+	| sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx*-* \
- 	| tahoe-* \
- 	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
- 	| tile*-* \
- 	| tron-* \
- 	| ubicom32-* \
- 	| v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
- 	| vax-* \
-+	| visium-* \
- 	| we32k-* \
- 	| x86-* | x86_64-* | xc16x-* | xps100-* \
- 	| xstormy16-* | xtensa*-* \
- 	| ymp-* \
- 	| z8k-* | z80-*)
- 		;;
- 	# Recognize the basic CPU types without company name, with glob match.
- 	xtensa*)
-@@ -507,16 +517,19 @@ case $basic_machine in
- 	apollo68bsd)
- 		basic_machine=m68k-apollo
- 		os=-bsd
- 		;;
- 	aros)
- 		basic_machine=i386-pc
- 		os=-aros
- 		;;
-+	asmjs)
-+		basic_machine=asmjs-unknown
-+		;;
- 	aux)
- 		basic_machine=m68k-apple
- 		os=-aux
- 		;;
- 	balance)
- 		basic_machine=ns32k-sequent
- 		os=-dynix
- 		;;
-@@ -627,16 +640,24 @@ case $basic_machine in
- 	dpx20 | dpx20-*)
- 		basic_machine=rs6000-bull
- 		os=-bosx
- 		;;
- 	dpx2* | dpx2*-bull)
- 		basic_machine=m68k-bull
- 		os=-sysv3
- 		;;
-+	e500v[12])
-+		basic_machine=powerpc-unknown
-+		os=$os"spe"
-+		;;
-+	e500v[12]-*)
-+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-+		os=$os"spe"
-+		;;
- 	ebmon29k)
- 		basic_machine=a29k-amd
- 		os=-ebmon
- 		;;
- 	elxsi)
- 		basic_machine=elxsi-elxsi
- 		os=-bsd
- 		;;
-@@ -768,16 +789,19 @@ case $basic_machine in
- 			os=-irix4
- 			;;
- 		esac
- 		;;
- 	isi68 | isi)
- 		basic_machine=m68k-isi
- 		os=-sysv
- 		;;
-+	leon-*|leon[3-9]-*)
-+		basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-+		;;
- 	m68knommu)
- 		basic_machine=m68k-unknown
- 		os=-linux
- 		;;
- 	m68knommu-*)
- 		basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		os=-linux
- 		;;
-@@ -823,16 +847,20 @@ case $basic_machine in
- 	monitor)
- 		basic_machine=m68k-rom68k
- 		os=-coff
- 		;;
- 	morphos)
- 		basic_machine=powerpc-unknown
- 		os=-morphos
- 		;;
-+	moxiebox)
-+		basic_machine=moxie-unknown
-+		os=-moxiebox
-+		;;
- 	msdos)
- 		basic_machine=i386-pc
- 		os=-msdos
- 		;;
- 	ms1-*)
- 		basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
- 		;;
- 	msys)
-@@ -999,27 +1027,27 @@ case $basic_machine in
- 		;;
- 	power)	basic_machine=power-ibm
- 		;;
- 	ppc | ppcbe)	basic_machine=powerpc-unknown
- 		;;
- 	ppc-* | ppcbe-*)
- 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
--	ppcle | powerpclittle | ppc-le | powerpc-little)
-+	ppcle | powerpclittle)
- 		basic_machine=powerpcle-unknown
- 		;;
- 	ppcle-* | powerpclittle-*)
- 		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ppc64)	basic_machine=powerpc64-unknown
- 		;;
- 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
--	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-+	ppc64le | powerpc64little)
- 		basic_machine=powerpc64le-unknown
- 		;;
- 	ppc64le-* | powerpc64little-*)
- 		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
- 		;;
- 	ps2)
- 		basic_machine=i386-ibm
- 		;;
-@@ -1355,37 +1383,38 @@ case $os in
- 	# The portable systems comes first.
- 	# Each alternative MUST END IN A *, to match a version number.
- 	# -sysv* is not here because it comes later, after sysvr4.
- 	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
- 	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
- 	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
- 	      | -sym* | -kopensolaris* | -plan9* \
- 	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
--	      | -aos* | -aros* \
-+	      | -aos* | -aros* | -cloudabi* | -sortix* \
- 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
- 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
- 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
--	      | -bitrig* | -openbsd* | -solidbsd* \
-+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
- 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
- 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
- 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
- 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- 	      | -chorusos* | -chorusrdb* | -cegcc* \
- 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
--	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
- 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
--	      | -uxpv* | -beos* | -mpeix* | -udk* \
-+	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
- 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
- 	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
- 	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
- 	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
- 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
- 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
--	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-+	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-+	      | -onefs* | -tirtos* | -phoenix* | -fuchsia*)
- 	# Remember, each alternative MUST END IN *, to match a version number.
- 		;;
- 	-qnx*)
- 		case $basic_machine in
- 		    x86-* | i*86-*)
- 			;;
- 		    *)
- 			os=-nto$os
-@@ -1399,19 +1428,16 @@ case $os in
- 		;;
- 	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
- 	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
- 	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
- 		;;
- 	-mac*)
- 		os=`echo $os | sed -e 's|mac|macos|'`
- 		;;
--	# Apple iOS
--	-ios*)
--		;;
- 	-linux-dietlibc)
- 		os=-linux-dietlibc
- 		;;
- 	-linux*)
- 		os=`echo $os | sed -e 's|linux|linux-gnu|'`
- 		;;
- 	-sunos5*)
- 		os=`echo $os | sed -e 's|sunos5|solaris2|'`
-@@ -1510,16 +1536,18 @@ case $os in
- 	-zvmoe)
- 		os=-zvmoe
- 		;;
- 	-dicos*)
- 		os=-dicos
- 		;;
- 	-nacl*)
- 		;;
-+	-ios)
-+		;;
- 	-none)
- 		;;
- 	*)
- 		# Get rid of the `-' at the beginning of $os.
- 		os=`echo $os | sed 's/[^-]*-//'`
- 		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
- 		exit 1
- 		;;
-diff --git a/memory/jemalloc/src/configure b/memory/jemalloc/src/configure
---- a/memory/jemalloc/src/configure
-+++ b/memory/jemalloc/src/configure
-@@ -782,16 +782,17 @@ enable_valgrind
- enable_xmalloc
- enable_cache_oblivious
- with_lg_tiny_min
- with_lg_quantum
- with_lg_page
- with_lg_page_sizes
- with_lg_size_class_group
- with_version
-+enable_syscall
- enable_lazy_lock
- enable_tls
- enable_zone_allocator
- '
-       ac_precious_vars='build_alias
- host_alias
- target_alias
- CC
-@@ -1437,16 +1438,17 @@ Optional Features:
-   --disable-fill          Disable support for junk/zero filling, quarantine,
-                           and redzones
-   --enable-utrace         Enable utrace(2)-based tracing
-   --disable-valgrind      Disable support for Valgrind
-   --enable-xmalloc        Support xmalloc option
-   --disable-cache-oblivious
-                           Disable support for cache-oblivious allocation
-                           alignment
-+  --disable-syscall       Disable use of syscall(2)
-   --enable-lazy-lock      Enable lazy locking (only lock when multi-threaded)
-   --disable-tls           Disable thread-local storage (__thread keyword)
-   --disable-zone-allocator
-                           Disable zone allocator for Darwin
- 
- Optional Packages:
-   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
-   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
-@@ -5306,59 +5308,61 @@ fi
- 
- 
- CFLAGS="$CFLAGS"
- default_munmap="1"
- maps_coalesce="1"
- case "${host}" in
-   *-*-darwin* | *-*-ios*)
- 	abi="macho"
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	RPATH=""
- 	LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
- 	so="dylib"
- 	importlib="${so}"
- 	force_tls="0"
- 	DSO_LDFLAGS='-shared -Wl,-install_name,$(LIBDIR)/$(@F)'
- 	SOREV="${rev}.${so}"
- 	sbrk_deprecated="1"
- 	;;
-   *-*-freebsd*)
- 	abi="elf"
- 	$as_echo "#define JEMALLOC_SYSCTL_VM_OVERCOMMIT  " >>confdefs.h
- 
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	force_lazy_lock="1"
- 	;;
-   *-*-dragonfly*)
- 	abi="elf"
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	;;
-   *-*-openbsd*)
- 	abi="elf"
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	force_tls="0"
- 	;;
-   *-*-bitrig*)
- 	abi="elf"
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	;;
--  *-*-linux*)
-+  *-*-linux-android)
- 		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- 	abi="elf"
- 	$as_echo "#define JEMALLOC_HAS_ALLOCA_H 1" >>confdefs.h
- 
- 	$as_echo "#define JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY  " >>confdefs.h
- 
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_DONTNEED  " >>confdefs.h
-+	$as_echo "#define JEMALLOC_THREADED_INIT  " >>confdefs.h
-+
-+	$as_echo "#define JEMALLOC_C11ATOMICS 1" >>confdefs.h
-+
-+	force_tls="0"
-+	default_munmap="0"
-+	;;
-+  *-*-linux* | *-*-kfreebsd*)
-+		CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-+	abi="elf"
-+	$as_echo "#define JEMALLOC_HAS_ALLOCA_H 1" >>confdefs.h
-+
-+	$as_echo "#define JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY  " >>confdefs.h
- 
- 	$as_echo "#define JEMALLOC_THREADED_INIT  " >>confdefs.h
- 
- 	$as_echo "#define JEMALLOC_USE_CXX_THROW  " >>confdefs.h
- 
- 	default_munmap="0"
- 	;;
-   *-*-netbsd*)
-@@ -5383,23 +5387,19 @@ main ()
- if ac_fn_c_try_compile "$LINENO"; then :
-   abi="elf"
- else
-   abi="aout"
- fi
- rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- 	{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $abi" >&5
- $as_echo "$abi" >&6; }
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	;;
-   *-*-solaris2*)
- 	abi="elf"
--	$as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
--
- 	RPATH='-Wl,-R,$(1)'
- 		CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
- 	LIBS="$LIBS -lposix4 -lsocket -lnsl"
- 	;;
-   *-ibm-aix*)
- 	if "$LG_SIZEOF_PTR" = "8"; then
- 	  	  LD_PRELOAD_VAR="LDR_PRELOAD64"
- 	else
-@@ -7826,16 +7826,52 @@ if test "$ac_res" != no; then :
-   test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
- 
- else
-   as_fn_error $? "libpthread is missing" "$LINENO" 5
- fi
- 
- fi
- 
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthread_atfork(3) is compilable" >&5
-+$as_echo_n "checking whether pthread_atfork(3) is compilable... " >&6; }
-+if ${je_cv_pthread_atfork+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+#include <pthread.h>
-+
-+int
-+main ()
-+{
-+
-+  pthread_atfork((void *)0, (void *)0, (void *)0);
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  je_cv_pthread_atfork=yes
-+else
-+  je_cv_pthread_atfork=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_pthread_atfork" >&5
-+$as_echo "$je_cv_pthread_atfork" >&6; }
-+
-+  if test "x${je_cv_pthread_atfork}" = "xyes" ; then
-+    $as_echo "#define JEMALLOC_HAVE_PTHREAD_ATFORK  " >>confdefs.h
-+
-+  fi
- fi
- 
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5
- $as_echo_n "checking for library containing clock_gettime... " >&6; }
- if ${ac_cv_search_clock_gettime+:} false; then :
-   $as_echo_n "(cached) " >&6
-@@ -8108,17 +8144,31 @@ fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_mach_absolute_time" >&5
- $as_echo "$je_cv_mach_absolute_time" >&6; }
- 
- if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
-   $as_echo "#define JEMALLOC_HAVE_MACH_ABSOLUTE_TIME 1" >>confdefs.h
- 
- fi
- 
--SAVED_CFLAGS="${CFLAGS}"
-+# Check whether --enable-syscall was given.
-+if test "${enable_syscall+set}" = set; then :
-+  enableval=$enable_syscall; if test "x$enable_syscall" = "xno" ; then
-+  enable_syscall="0"
-+else
-+  enable_syscall="1"
-+fi
-+
-+else
-+  enable_syscall="1"
-+
-+fi
-+
-+if test "x$enable_syscall" = "x1" ; then
-+      SAVED_CFLAGS="${CFLAGS}"
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether compiler supports -Werror" >&5
- $as_echo_n "checking whether compiler supports -Werror... " >&6; }
- TCFLAGS="${CFLAGS}"
- if test "x${CFLAGS}" = "x" ; then
-   CFLAGS="-Werror"
- else
-   CFLAGS="${CFLAGS} -Werror"
-@@ -8178,20 +8228,21 @@ else
-   je_cv_syscall=no
- fi
- rm -f core conftest.err conftest.$ac_objext \
-     conftest$ac_exeext conftest.$ac_ext
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_syscall" >&5
- $as_echo "$je_cv_syscall" >&6; }
- 
--CFLAGS="${SAVED_CFLAGS}"
--if test "x$je_cv_syscall" = "xyes" ; then
--  $as_echo "#define JEMALLOC_HAVE_SYSCALL  " >>confdefs.h
--
-+  CFLAGS="${SAVED_CFLAGS}"
-+  if test "x$je_cv_syscall" = "xyes" ; then
-+    $as_echo "#define JEMALLOC_USE_SYSCALL  " >>confdefs.h
-+
-+  fi
- fi
- 
- ac_fn_c_check_func "$LINENO" "secure_getenv" "ac_cv_func_secure_getenv"
- if test "x$ac_cv_func_secure_getenv" = xyes; then :
-   have_secure_getenv="1"
- else
-   have_secure_getenv="0"
- 
-@@ -8568,19 +8619,17 @@ else
- /* end confdefs.h.  */
- 
- #include <sys/mman.h>
- 
- int
- main ()
- {
- 
--	{
--		madvise((void *)0, 0, 0);
--	}
-+	madvise((void *)0, 0, 0);
- 
-   ;
-   return 0;
- }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-   je_cv_madvise=yes
- else
-@@ -8590,16 +8639,128 @@ rm -f core conftest.err conftest.$ac_obj
-     conftest$ac_exeext conftest.$ac_ext
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_madvise" >&5
- $as_echo "$je_cv_madvise" >&6; }
- 
- if test "x${je_cv_madvise}" = "xyes" ; then
-   $as_echo "#define JEMALLOC_HAVE_MADVISE  " >>confdefs.h
- 
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether madvise(..., MADV_FREE) is compilable" >&5
-+$as_echo_n "checking whether madvise(..., MADV_FREE) is compilable... " >&6; }
-+if ${je_cv_madv_free+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+#include <sys/mman.h>
-+
-+int
-+main ()
-+{
-+
-+	madvise((void *)0, 0, MADV_FREE);
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  je_cv_madv_free=yes
-+else
-+  je_cv_madv_free=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_madv_free" >&5
-+$as_echo "$je_cv_madv_free" >&6; }
-+
-+  if test "x${je_cv_madv_free}" = "xyes" ; then
-+    $as_echo "#define JEMALLOC_PURGE_MADVISE_FREE  " >>confdefs.h
-+
-+  fi
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether madvise(..., MADV_DONTNEED) is compilable" >&5
-+$as_echo_n "checking whether madvise(..., MADV_DONTNEED) is compilable... " >&6; }
-+if ${je_cv_madv_dontneed+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+#include <sys/mman.h>
-+
-+int
-+main ()
-+{
-+
-+	madvise((void *)0, 0, MADV_DONTNEED);
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  je_cv_madv_dontneed=yes
-+else
-+  je_cv_madv_dontneed=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_madv_dontneed" >&5
-+$as_echo "$je_cv_madv_dontneed" >&6; }
-+
-+  if test "x${je_cv_madv_dontneed}" = "xyes" ; then
-+    $as_echo "#define JEMALLOC_PURGE_MADVISE_DONTNEED  " >>confdefs.h
-+
-+  fi
-+
-+
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether madvise(..., MADV_[NO]HUGEPAGE) is compilable" >&5
-+$as_echo_n "checking whether madvise(..., MADV_[NO]HUGEPAGE) is compilable... " >&6; }
-+if ${je_cv_thp+:} false; then :
-+  $as_echo_n "(cached) " >&6
-+else
-+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-+/* end confdefs.h.  */
-+
-+#include <sys/mman.h>
-+
-+int
-+main ()
-+{
-+
-+	madvise((void *)0, 0, MADV_HUGEPAGE);
-+	madvise((void *)0, 0, MADV_NOHUGEPAGE);
-+
-+  ;
-+  return 0;
-+}
-+_ACEOF
-+if ac_fn_c_try_link "$LINENO"; then :
-+  je_cv_thp=yes
-+else
-+  je_cv_thp=no
-+fi
-+rm -f core conftest.err conftest.$ac_objext \
-+    conftest$ac_exeext conftest.$ac_ext
-+fi
-+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $je_cv_thp" >&5
-+$as_echo "$je_cv_thp" >&6; }
-+
-+  if test "x${je_cv_thp}" = "xyes" ; then
-+    $as_echo "#define JEMALLOC_THP  " >>confdefs.h
-+
-+  fi
- fi
- 
- 
- 
- 
- if test "x${je_cv_atomic9}" != "xyes" -a "x${je_cv_osatomic}" != "xyes" ; then
- 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to force 32-bit __sync_{add,sub}_and_fetch()" >&5
-@@ -8741,24 +8902,29 @@ fi
- $as_echo_n "checking whether Darwin os_unfair_lock_*() is compilable... " >&6; }
- if ${je_cv_os_unfair_lock+:} false; then :
-   $as_echo_n "(cached) " >&6
- else
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
- /* end confdefs.h.  */
- 
- #include <os/lock.h>
--
--int
--main ()
--{
--
-+#include <AvailabilityMacros.h>
-+
-+int
-+main ()
-+{
-+
-+	#if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
-+	#error "os_unfair_lock is not supported"
-+	#else
- 	os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
- 	os_unfair_lock_lock(&lock);
- 	os_unfair_lock_unlock(&lock);
-+	#endif
- 
-   ;
-   return 0;
- }
- _ACEOF
- if ac_fn_c_try_link "$LINENO"; then :
-   je_cv_os_unfair_lock=yes
- else
-diff --git a/memory/jemalloc/src/configure.ac b/memory/jemalloc/src/configure.ac
---- a/memory/jemalloc/src/configure.ac
-+++ b/memory/jemalloc/src/configure.ac
-@@ -166,17 +166,16 @@ if test "x${je_cv_cray}" = "xyes" ; then
- ])],
-                               [je_cv_cray_84=yes],
-                               [je_cv_cray_84=no])])
- fi
- 
- if test "x$CFLAGS" = "x" ; then
-   no_CFLAGS="yes"
-   if test "x$GCC" = "xyes" ; then
--dnl    JE_CFLAGS_APPEND([-std=gnu99])
-     JE_CFLAGS_APPEND([-std=gnu11])
-     if test "x$je_cv_cflags_appended" = "x-std=gnu11" ; then
-       AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
-     else
-       JE_CFLAGS_APPEND([-std=gnu99])
-       if test "x$je_cv_cflags_appended" = "x-std=gnu99" ; then
-         AC_DEFINE_UNQUOTED([JEMALLOC_HAS_RESTRICT])
-       fi
-@@ -350,73 +349,76 @@ dnl Define cpp macros in CPPFLAGS, rathe
- dnl definitions need to be seen before any headers are included, which is a pain
- dnl to make happen otherwise.
- CFLAGS="$CFLAGS"
- default_munmap="1"
- maps_coalesce="1"
- case "${host}" in
-   *-*-darwin* | *-*-ios*)
- 	abi="macho"
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	RPATH=""
- 	LD_PRELOAD_VAR="DYLD_INSERT_LIBRARIES"
- 	so="dylib"
- 	importlib="${so}"
- 	force_tls="0"
- 	DSO_LDFLAGS='-shared -Wl,-install_name,$(LIBDIR)/$(@F)'
- 	SOREV="${rev}.${so}"
- 	sbrk_deprecated="1"
- 	;;
-   *-*-freebsd*)
- 	abi="elf"
- 	AC_DEFINE([JEMALLOC_SYSCTL_VM_OVERCOMMIT], [ ])
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	force_lazy_lock="1"
- 	;;
-   *-*-dragonfly*)
- 	abi="elf"
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	;;
-   *-*-openbsd*)
- 	abi="elf"
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	force_tls="0"
- 	;;
-   *-*-bitrig*)
- 	abi="elf"
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	;;
--  *-*-linux*)
-+  *-*-linux-android)
- 	dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
- 	CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
- 	abi="elf"
- 	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
- 	AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
-+	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
-+	AC_DEFINE([JEMALLOC_C11ATOMICS])
-+	force_tls="0"
-+	default_munmap="0"
-+	;;
-+  *-*-linux* | *-*-kfreebsd*)
-+	dnl syscall(2) and secure_getenv(3) are exposed by _GNU_SOURCE.
-+	CPPFLAGS="$CPPFLAGS -D_GNU_SOURCE"
-+	abi="elf"
-+	AC_DEFINE([JEMALLOC_HAS_ALLOCA_H])
-+	AC_DEFINE([JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY], [ ])
- 	AC_DEFINE([JEMALLOC_THREADED_INIT], [ ])
- 	AC_DEFINE([JEMALLOC_USE_CXX_THROW], [ ])
- 	default_munmap="0"
- 	;;
-   *-*-netbsd*)
- 	AC_MSG_CHECKING([ABI])
-         AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
- [[#ifdef __ELF__
- /* ELF */
- #else
- #error aout
- #endif
- ]])],
-                           [abi="elf"],
-                           [abi="aout"])
- 	AC_MSG_RESULT([$abi])
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	;;
-   *-*-solaris2*)
- 	abi="elf"
--	AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
- 	RPATH='-Wl,-R,$(1)'
- 	dnl Solaris needs this for sigwait().
- 	CPPFLAGS="$CPPFLAGS -D_POSIX_PTHREAD_SEMANTICS"
- 	LIBS="$LIBS -lposix4 -lsocket -lnsl"
- 	;;
-   *-ibm-aix*)
- 	if "$LG_SIZEOF_PTR" = "8"; then
- 	  dnl 64bit AIX
-@@ -1322,16 +1324,24 @@ dnl Configure pthreads.
- 
- if test "x$abi" != "xpecoff" ; then
-   AC_CHECK_HEADERS([pthread.h], , [AC_MSG_ERROR([pthread.h is missing])])
-   dnl Some systems may embed pthreads functionality in libc; check for libpthread
-   dnl first, but try libc too before failing.
-   AC_CHECK_LIB([pthread], [pthread_create], [LIBS="$LIBS -lpthread"],
-                [AC_SEARCH_LIBS([pthread_create], , ,
-                                AC_MSG_ERROR([libpthread is missing]))])
-+  JE_COMPILABLE([pthread_atfork(3)], [
-+#include <pthread.h>
-+], [
-+  pthread_atfork((void *)0, (void *)0, (void *)0);
-+], [je_cv_pthread_atfork])
-+  if test "x${je_cv_pthread_atfork}" = "xyes" ; then
-+    AC_DEFINE([JEMALLOC_HAVE_PTHREAD_ATFORK], [ ])
-+  fi
- fi
- 
- CPPFLAGS="$CPPFLAGS -D_REENTRANT"
- 
- dnl Check whether clock_gettime(2) is in libc or librt.
- AC_SEARCH_LIBS([clock_gettime], [rt])
- 
- dnl Cray wrapper compiler often adds `-lrt` when using `-static`. Check with
-@@ -1381,30 +1391,43 @@ JE_COMPILABLE([mach_absolute_time()], [
- #include <mach/mach_time.h>
- ], [
- 	mach_absolute_time();
- ], [je_cv_mach_absolute_time])
- if test "x${je_cv_mach_absolute_time}" = "xyes" ; then
-   AC_DEFINE([JEMALLOC_HAVE_MACH_ABSOLUTE_TIME])
- fi
- 
--dnl Check if syscall(2) is usable.  Treat warnings as errors, so that e.g. OS X
--dnl 10.12's deprecation warning prevents use.
--SAVED_CFLAGS="${CFLAGS}"
--JE_CFLAGS_APPEND([-Werror])
--JE_COMPILABLE([syscall(2)], [
-+dnl Use syscall(2) (if available) by default.
-+AC_ARG_ENABLE([syscall],
-+  [AS_HELP_STRING([--disable-syscall], [Disable use of syscall(2)])],
-+[if test "x$enable_syscall" = "xno" ; then
-+  enable_syscall="0"
-+else
-+  enable_syscall="1"
-+fi
-+],
-+[enable_syscall="1"]
-+)
-+if test "x$enable_syscall" = "x1" ; then
-+  dnl Check if syscall(2) is usable.  Treat warnings as errors, so that e.g. OS
-+  dnl X 10.12's deprecation warning prevents use.
-+  SAVED_CFLAGS="${CFLAGS}"
-+  JE_CFLAGS_APPEND([-Werror])
-+  JE_COMPILABLE([syscall(2)], [
- #include <sys/syscall.h>
- #include <unistd.h>
- ], [
- 	syscall(SYS_write, 2, "hello", 5);
- ],
--              [je_cv_syscall])
--CFLAGS="${SAVED_CFLAGS}"
--if test "x$je_cv_syscall" = "xyes" ; then
--  AC_DEFINE([JEMALLOC_HAVE_SYSCALL], [ ])
-+                [je_cv_syscall])
-+  CFLAGS="${SAVED_CFLAGS}"
-+  if test "x$je_cv_syscall" = "xyes" ; then
-+    AC_DEFINE([JEMALLOC_USE_SYSCALL], [ ])
-+  fi
- fi
- 
- dnl Check if the GNU-specific secure_getenv function exists.
- AC_CHECK_FUNC([secure_getenv],
-               [have_secure_getenv="1"],
-               [have_secure_getenv="0"]
-              )
- if test "x$have_secure_getenv" = "x1" ; then
-@@ -1594,22 +1617,51 @@ if test "x${je_cv_osatomic}" = "xyes" ; 
- fi
- 
- dnl ============================================================================
- dnl Check for madvise(2).
- 
- JE_COMPILABLE([madvise(2)], [
- #include <sys/mman.h>
- ], [
--	{
--		madvise((void *)0, 0, 0);
--	}
-+	madvise((void *)0, 0, 0);
- ], [je_cv_madvise])
- if test "x${je_cv_madvise}" = "xyes" ; then
-   AC_DEFINE([JEMALLOC_HAVE_MADVISE], [ ])
-+
-+  dnl Check for madvise(..., MADV_FREE).
-+  JE_COMPILABLE([madvise(..., MADV_FREE)], [
-+#include <sys/mman.h>
-+], [
-+	madvise((void *)0, 0, MADV_FREE);
-+], [je_cv_madv_free])
-+  if test "x${je_cv_madv_free}" = "xyes" ; then
-+    AC_DEFINE([JEMALLOC_PURGE_MADVISE_FREE], [ ])
-+  fi
-+
-+  dnl Check for madvise(..., MADV_DONTNEED).
-+  JE_COMPILABLE([madvise(..., MADV_DONTNEED)], [
-+#include <sys/mman.h>
-+], [
-+	madvise((void *)0, 0, MADV_DONTNEED);
-+], [je_cv_madv_dontneed])
-+  if test "x${je_cv_madv_dontneed}" = "xyes" ; then
-+    AC_DEFINE([JEMALLOC_PURGE_MADVISE_DONTNEED], [ ])
-+  fi
-+
-+  dnl Check for madvise(..., MADV_[NO]HUGEPAGE).
-+  JE_COMPILABLE([madvise(..., MADV_[[NO]]HUGEPAGE)], [
-+#include <sys/mman.h>
-+], [
-+	madvise((void *)0, 0, MADV_HUGEPAGE);
-+	madvise((void *)0, 0, MADV_NOHUGEPAGE);
-+], [je_cv_thp])
-+  if test "x${je_cv_thp}" = "xyes" ; then
-+    AC_DEFINE([JEMALLOC_THP], [ ])
-+  fi
- fi
- 
- dnl ============================================================================
- dnl Check whether __sync_{add,sub}_and_fetch() are available despite
- dnl __GCC_HAVE_SYNC_COMPARE_AND_SWAP_n macros being undefined.
- 
- AC_DEFUN([JE_SYNC_COMPARE_AND_SWAP_CHECK],[
-   AC_CACHE_CHECK([whether to force $1-bit __sync_{add,sub}_and_fetch()],
-@@ -1664,20 +1716,25 @@ if test "x${je_cv_builtin_clz}" = "xyes"
-   AC_DEFINE([JEMALLOC_HAVE_BUILTIN_CLZ], [ ])
- fi
- 
- dnl ============================================================================
- dnl Check for os_unfair_lock operations as provided on Darwin.
- 
- JE_COMPILABLE([Darwin os_unfair_lock_*()], [
- #include <os/lock.h>
-+#include <AvailabilityMacros.h>
- ], [
-+	#if MAC_OS_X_VERSION_MIN_REQUIRED < 101200
-+	#error "os_unfair_lock is not supported"
-+	#else
- 	os_unfair_lock lock = OS_UNFAIR_LOCK_INIT;
- 	os_unfair_lock_lock(&lock);
- 	os_unfair_lock_unlock(&lock);
-+	#endif
- ], [je_cv_os_unfair_lock])
- if test "x${je_cv_os_unfair_lock}" = "xyes" ; then
-   AC_DEFINE([JEMALLOC_OS_UNFAIR_LOCK], [ ])
- fi
- 
- dnl ============================================================================
- dnl Check for spinlock(3) operations as provided on Darwin.
- 
-diff --git a/memory/jemalloc/src/doc/jemalloc.xml.in b/memory/jemalloc/src/doc/jemalloc.xml.in
---- a/memory/jemalloc/src/doc/jemalloc.xml.in
-+++ b/memory/jemalloc/src/doc/jemalloc.xml.in
-@@ -401,17 +401,17 @@ mallctl("arenas.nbins", &nbins, &len, NU
- 
- miblen = 4;
- mallctlnametomib("arenas.bin.0.size", mib, &miblen);
- for (i = 0; i < nbins; i++) {
- 	size_t bin_size;
- 
- 	mib[2] = i;
- 	len = sizeof(bin_size);
--	mallctlbymib(mib, miblen, &bin_size, &len, NULL, 0);
-+	mallctlbymib(mib, miblen, (void *)&bin_size, &len, NULL, 0);
- 	/* Do something with bin_size... */
- }]]></programlisting></para>
- 
-       <para>The <function>malloc_stats_print()</function> function writes
-       summary statistics via the <parameter>write_cb</parameter> callback
-       function pointer and <parameter>cbopaque</parameter> data passed to
-       <parameter>write_cb</parameter>, or <function>malloc_message()</function>
-       if <parameter>write_cb</parameter> is <constant>NULL</constant>.  The
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/arena.h b/memory/jemalloc/src/include/jemalloc/internal/arena.h
---- a/memory/jemalloc/src/include/jemalloc/internal/arena.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/arena.h
-@@ -186,16 +186,24 @@ struct arena_chunk_s {
- 	/*
- 	 * A pointer to the arena that owns the chunk is stored within the node.
- 	 * This field as a whole is used by chunks_rtree to support both
- 	 * ivsalloc() and core-based debugging.
- 	 */
- 	extent_node_t		node;
- 
- 	/*
-+	 * True if memory could be backed by transparent huge pages.  This is
-+	 * only directly relevant to Linux, since it is the only supported
-+	 * platform on which jemalloc interacts with explicit transparent huge
-+	 * page controls.
-+	 */
-+	bool			hugepage;
-+
-+	/*
- 	 * Map of pages within chunk that keeps track of free/large/small.  The
- 	 * first map_bias entries are omitted, since the chunk header does not
- 	 * need to be tracked in the map.  This omission saves a header page
- 	 * for common chunk sizes (e.g. 4 MiB).
- 	 */
- 	arena_chunk_map_bits_t	map_bits[1]; /* Dynamically sized. */
- };
- 
-@@ -369,20 +377,22 @@ struct arena_s {
- 	/*
- 	 * PRNG state for cache index randomization of large allocation base
- 	 * pointers.
- 	 */
- 	size_t			offset_state;
- 
- 	dss_prec_t		dss_prec;
- 
--
- 	/* Extant arena chunks. */
- 	ql_head(extent_node_t)	achunks;
- 
-+	/* Extent serial number generator state. */
-+	size_t			extent_sn_next;
-+
- 	/*
- 	 * In order to avoid rapid chunk allocation/deallocation when an arena
- 	 * oscillates right on the cusp of needing a new chunk, cache the most
- 	 * recently freed chunk.  The spare is left in the arena's chunk trees
- 	 * until it is deleted.
- 	 *
- 	 * There is one spare chunk per arena, rather than one spare total, in
- 	 * order to avoid interactions between multiple threads that could make
-@@ -448,19 +458,19 @@ struct arena_s {
- 
- 	/*
- 	 * Trees of chunks that were previously allocated (trees differ only in
- 	 * node ordering).  These are used when allocating chunks, in an attempt
- 	 * to re-use address space.  Depending on function, different tree
- 	 * orderings are needed, which is why there are two trees with the same
- 	 * contents.
- 	 */
--	extent_tree_t		chunks_szad_cached;
-+	extent_tree_t		chunks_szsnad_cached;
- 	extent_tree_t		chunks_ad_cached;
--	extent_tree_t		chunks_szad_retained;
-+	extent_tree_t		chunks_szsnad_retained;
- 	extent_tree_t		chunks_ad_retained;
- 
- 	malloc_mutex_t		chunks_mtx;
- 	/* Cache of nodes that were allocated via base_alloc(). */
- 	ql_head(extent_node_t)	node_cache;
- 	malloc_mutex_t		node_cache_mtx;
- 
- 	/* User-configurable chunk hook functions. */
-@@ -517,23 +527,23 @@ extern run_quantize_t *run_quantize_ceil
- #endif
- void	arena_chunk_cache_maybe_insert(arena_t *arena, extent_node_t *node,
-     bool cache);
- void	arena_chunk_cache_maybe_remove(arena_t *arena, extent_node_t *node,
-     bool cache);
- extent_node_t	*arena_node_alloc(tsdn_t *tsdn, arena_t *arena);
- void	arena_node_dalloc(tsdn_t *tsdn, arena_t *arena, extent_node_t *node);
- void	*arena_chunk_alloc_huge(tsdn_t *tsdn, arena_t *arena, size_t usize,
--    size_t alignment, bool *zero);
-+    size_t alignment, size_t *sn, bool *zero);
- void	arena_chunk_dalloc_huge(tsdn_t *tsdn, arena_t *arena, void *chunk,
--    size_t usize);
-+    size_t usize, size_t sn);
- void	arena_chunk_ralloc_huge_similar(tsdn_t *tsdn, arena_t *arena,
-     void *chunk, size_t oldsize, size_t usize);
- void	arena_chunk_ralloc_huge_shrink(tsdn_t *tsdn, arena_t *arena,
--    void *chunk, size_t oldsize, size_t usize);
-+    void *chunk, size_t oldsize, size_t usize, size_t sn);
- bool	arena_chunk_ralloc_huge_expand(tsdn_t *tsdn, arena_t *arena,
-     void *chunk, size_t oldsize, size_t usize, bool *zero);
- ssize_t	arena_lg_dirty_mult_get(tsdn_t *tsdn, arena_t *arena);
- bool	arena_lg_dirty_mult_set(tsdn_t *tsdn, arena_t *arena,
-     ssize_t lg_dirty_mult);
- ssize_t	arena_decay_time_get(tsdn_t *tsdn, arena_t *arena);
- bool	arena_decay_time_set(tsdn_t *tsdn, arena_t *arena, ssize_t decay_time);
- void	arena_purge(tsdn_t *tsdn, arena_t *arena, bool all);
-@@ -596,16 +606,17 @@ void	arena_basic_stats_merge(tsdn_t *tsd
- void	arena_stats_merge(tsdn_t *tsdn, arena_t *arena, unsigned *nthreads,
-     const char **dss, ssize_t *lg_dirty_mult, ssize_t *decay_time,
-     size_t *nactive, size_t *ndirty, arena_stats_t *astats,
-     malloc_bin_stats_t *bstats, malloc_large_stats_t *lstats,
-     malloc_huge_stats_t *hstats);
- unsigned	arena_nthreads_get(arena_t *arena, bool internal);
- void	arena_nthreads_inc(arena_t *arena, bool internal);
- void	arena_nthreads_dec(arena_t *arena, bool internal);
-+size_t	arena_extent_sn_next(arena_t *arena);
- arena_t	*arena_new(tsdn_t *tsdn, unsigned ind);
- void	arena_boot(void);
- void	arena_prefork0(tsdn_t *tsdn, arena_t *arena);
- void	arena_prefork1(tsdn_t *tsdn, arena_t *arena);
- void	arena_prefork2(tsdn_t *tsdn, arena_t *arena);
- void	arena_prefork3(tsdn_t *tsdn, arena_t *arena);
- void	arena_postfork_parent(tsdn_t *tsdn, arena_t *arena);
- void	arena_postfork_child(tsdn_t *tsdn, arena_t *arena);
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/chunk.h b/memory/jemalloc/src/include/jemalloc/internal/chunk.h
---- a/memory/jemalloc/src/include/jemalloc/internal/chunk.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/chunk.h
-@@ -53,25 +53,26 @@ chunk_hooks_t	chunk_hooks_set(tsdn_t *ts
-     const chunk_hooks_t *chunk_hooks);
- 
- bool	chunk_register(tsdn_t *tsdn, const void *chunk,
-     const extent_node_t *node);
- void	chunk_deregister(const void *chunk, const extent_node_t *node);
- void	*chunk_alloc_base(size_t size);
- void	*chunk_alloc_cache(tsdn_t *tsdn, arena_t *arena,
-     chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment,
--    bool *zero, bool *commit, bool dalloc_node);
-+    size_t *sn, bool *zero, bool *commit, bool dalloc_node);
- void	*chunk_alloc_wrapper(tsdn_t *tsdn, arena_t *arena,
-     chunk_hooks_t *chunk_hooks, void *new_addr, size_t size, size_t alignment,
--    bool *zero, bool *commit);
-+    size_t *sn, bool *zero, bool *commit);
- void	chunk_dalloc_cache(tsdn_t *tsdn, arena_t *arena,
--    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool committed);
-+    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t sn,
-+    bool committed);
- void	chunk_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena,
--    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, bool zeroed,
--    bool committed);
-+    chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t sn,
-+    bool zeroed, bool committed);
- bool	chunk_purge_wrapper(tsdn_t *tsdn, arena_t *arena,
-     chunk_hooks_t *chunk_hooks, void *chunk, size_t size, size_t offset,
-     size_t length);
- bool	chunk_boot(void);
- 
- #endif /* JEMALLOC_H_EXTERNS */
- /******************************************************************************/
- #ifdef JEMALLOC_H_INLINES
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/extent.h b/memory/jemalloc/src/include/jemalloc/internal/extent.h
---- a/memory/jemalloc/src/include/jemalloc/internal/extent.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/extent.h
-@@ -14,16 +14,30 @@ struct extent_node_s {
- 
- 	/* Pointer to the extent that this tree node is responsible for. */
- 	void			*en_addr;
- 
- 	/* Total region size. */
- 	size_t			en_size;
- 
- 	/*
-+	 * Serial number (potentially non-unique).
-+	 *
-+	 * In principle serial numbers can wrap around on 32-bit systems if
-+	 * JEMALLOC_MUNMAP is defined, but as long as comparison functions fall
-+	 * back on address comparison for equal serial numbers, stable (if
-+	 * imperfect) ordering is maintained.
-+	 *
-+	 * Serial numbers may not be unique even in the absence of wrap-around,
-+	 * e.g. when splitting an extent and assigning the same serial number to
-+	 * both resulting adjacent extents.
-+	 */
-+	size_t			en_sn;
-+
-+	/*
- 	 * The zeroed flag is used by chunk recycling code to track whether
- 	 * memory is zero-filled.
- 	 */
- 	bool			en_zeroed;
- 
- 	/*
- 	 * True if physical memory is committed to the extent, whether
- 	 * explicitly or implicitly as on a system that overcommits and
-@@ -40,57 +54,59 @@ struct extent_node_s {
- 	/* Profile counters, used for huge objects. */
- 	prof_tctx_t		*en_prof_tctx;
- 
- 	/* Linkage for arena's runs_dirty and chunks_cache rings. */
- 	arena_runs_dirty_link_t	rd;
- 	qr(extent_node_t)	cc_link;
- 
- 	union {
--		/* Linkage for the size/address-ordered tree. */
--		rb_node(extent_node_t)	szad_link;
-+		/* Linkage for the size/sn/address-ordered tree. */
-+		rb_node(extent_node_t)	szsnad_link;
- 
- 		/* Linkage for arena's achunks, huge, and node_cache lists. */
- 		ql_elm(extent_node_t)	ql_link;
- 	};
- 
- 	/* Linkage for the address-ordered tree. */
- 	rb_node(extent_node_t)	ad_link;
- };
- typedef rb_tree(extent_node_t) extent_tree_t;
- 
- #endif /* JEMALLOC_H_STRUCTS */
- /******************************************************************************/
- #ifdef JEMALLOC_H_EXTERNS
- 
--rb_proto(, extent_tree_szad_, extent_tree_t, extent_node_t)
-+rb_proto(, extent_tree_szsnad_, extent_tree_t, extent_node_t)
- 
- rb_proto(, extent_tree_ad_, extent_tree_t, extent_node_t)
- 
- #endif /* JEMALLOC_H_EXTERNS */
- /******************************************************************************/
- #ifdef JEMALLOC_H_INLINES
- 
- #ifndef JEMALLOC_ENABLE_INLINE
- arena_t	*extent_node_arena_get(const extent_node_t *node);
- void	*extent_node_addr_get(const extent_node_t *node);
- size_t	extent_node_size_get(const extent_node_t *node);
-+size_t	extent_node_sn_get(const extent_node_t *node);
- bool	extent_node_zeroed_get(const extent_node_t *node);
- bool	extent_node_committed_get(const extent_node_t *node);
- bool	extent_node_achunk_get(const extent_node_t *node);
- prof_tctx_t	*extent_node_prof_tctx_get(const extent_node_t *node);
- void	extent_node_arena_set(extent_node_t *node, arena_t *arena);
- void	extent_node_addr_set(extent_node_t *node, void *addr);
- void	extent_node_size_set(extent_node_t *node, size_t size);
-+void	extent_node_sn_set(extent_node_t *node, size_t sn);
- void	extent_node_zeroed_set(extent_node_t *node, bool zeroed);
- void	extent_node_committed_set(extent_node_t *node, bool committed);
- void	extent_node_achunk_set(extent_node_t *node, bool achunk);
- void	extent_node_prof_tctx_set(extent_node_t *node, prof_tctx_t *tctx);
- void	extent_node_init(extent_node_t *node, arena_t *arena, void *addr,
--    size_t size, bool zeroed, bool committed);
-+    size_t size, size_t sn, bool zeroed, bool committed);
- void	extent_node_dirty_linkage_init(extent_node_t *node);
- void	extent_node_dirty_insert(extent_node_t *node,
-     arena_runs_dirty_link_t *runs_dirty, extent_node_t *chunks_dirty);
- void	extent_node_dirty_remove(extent_node_t *node);
- #endif
- 
- #if (defined(JEMALLOC_ENABLE_INLINE) || defined(JEMALLOC_EXTENT_C_))
- JEMALLOC_INLINE arena_t *
-@@ -109,16 +125,23 @@ extent_node_addr_get(const extent_node_t
- 
- JEMALLOC_INLINE size_t
- extent_node_size_get(const extent_node_t *node)
- {
- 
- 	return (node->en_size);
- }
- 
-+JEMALLOC_INLINE size_t
-+extent_node_sn_get(const extent_node_t *node)
-+{
-+
-+	return (node->en_sn);
-+}
-+
- JEMALLOC_INLINE bool
- extent_node_zeroed_get(const extent_node_t *node)
- {
- 
- 	return (node->en_zeroed);
- }
- 
- JEMALLOC_INLINE bool
-@@ -160,16 +183,23 @@ extent_node_addr_set(extent_node_t *node
- JEMALLOC_INLINE void
- extent_node_size_set(extent_node_t *node, size_t size)
- {
- 
- 	node->en_size = size;
- }
- 
- JEMALLOC_INLINE void
-+extent_node_sn_set(extent_node_t *node, size_t sn)
-+{
-+
-+	node->en_sn = sn;
-+}
-+
-+JEMALLOC_INLINE void
- extent_node_zeroed_set(extent_node_t *node, bool zeroed)
- {
- 
- 	node->en_zeroed = zeroed;
- }
- 
- JEMALLOC_INLINE void
- extent_node_committed_set(extent_node_t *node, bool committed)
-@@ -189,22 +219,23 @@ JEMALLOC_INLINE void
- extent_node_prof_tctx_set(extent_node_t *node, prof_tctx_t *tctx)
- {
- 
- 	node->en_prof_tctx = tctx;
- }
- 
- JEMALLOC_INLINE void
- extent_node_init(extent_node_t *node, arena_t *arena, void *addr, size_t size,
--    bool zeroed, bool committed)
-+    size_t sn, bool zeroed, bool committed)
- {
- 
- 	extent_node_arena_set(node, arena);
- 	extent_node_addr_set(node, addr);
- 	extent_node_size_set(node, size);
-+	extent_node_sn_set(node, sn);
- 	extent_node_zeroed_set(node, zeroed);
- 	extent_node_committed_set(node, committed);
- 	extent_node_achunk_set(node, false);
- 	if (config_prof)
- 		extent_node_prof_tctx_set(node, NULL);
- }
- 
- JEMALLOC_INLINE void
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
---- a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
-+++ b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
-@@ -332,25 +332,25 @@ typedef unsigned szind_t;
- 	((void *)((uintptr_t)(a) & ~PAGE_MASK))
- 
- /* Return the smallest pagesize multiple that is >= s. */
- #define	PAGE_CEILING(s)							\
- 	(((s) + PAGE_MASK) & ~PAGE_MASK)
- 
- /* Return the nearest aligned address at or below a. */
- #define	ALIGNMENT_ADDR2BASE(a, alignment)				\
--	((void *)((uintptr_t)(a) & (-(alignment))))
-+	((void *)((uintptr_t)(a) & ((~(alignment)) + 1)))
- 
- /* Return the offset between a and the nearest aligned address at or below a. */
- #define	ALIGNMENT_ADDR2OFFSET(a, alignment)				\
- 	((size_t)((uintptr_t)(a) & (alignment - 1)))
- 
- /* Return the smallest alignment multiple that is >= s. */
- #define	ALIGNMENT_CEILING(s, alignment)					\
--	(((s) + (alignment - 1)) & (-(alignment)))
-+	(((s) + (alignment - 1)) & ((~(alignment)) + 1))
- 
- /* Declare a variable-length array. */
- #if __STDC_VERSION__ < 199901L
- #  ifdef _MSC_VER
- #    include <malloc.h>
- #    define alloca _alloca
- #  else
- #    ifdef JEMALLOC_HAS_ALLOCA_H
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
---- a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
-+++ b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
-@@ -51,44 +51,42 @@
- #undef JE_FORCE_SYNC_COMPARE_AND_SWAP_8
- 
- /*
-  * Defined if __builtin_clz() and __builtin_clzl() are available.
-  */
- #undef JEMALLOC_HAVE_BUILTIN_CLZ
- 
- /*
-- * Defined if madvise(2) is available.
-- */
--#undef JEMALLOC_HAVE_MADVISE
--
--/*
-  * Defined if os_unfair_lock_*() functions are available, as provided by Darwin.
-  */
- #undef JEMALLOC_OS_UNFAIR_LOCK
- 
- /*
-  * Defined if OSSpin*() functions are available, as provided by Darwin, and
-  * documented in the spinlock(3) manual page.
-  */
- #undef JEMALLOC_OSSPIN
- 
--/* Defined if syscall(2) is available. */
--#undef JEMALLOC_HAVE_SYSCALL
-+/* Defined if syscall(2) is usable. */
-+#undef JEMALLOC_USE_SYSCALL
- 
- /*
-  * Defined if secure_getenv(3) is available.
-  */
- #undef JEMALLOC_HAVE_SECURE_GETENV
- 
- /*
-  * Defined if issetugid(2) is available.
-  */
- #undef JEMALLOC_HAVE_ISSETUGID
- 
-+/* Defined if pthread_atfork(3) is available. */
-+#undef JEMALLOC_HAVE_PTHREAD_ATFORK
-+
- /*
-  * Defined if clock_gettime(CLOCK_MONOTONIC_COARSE, ...) is available.
-  */
- #undef JEMALLOC_HAVE_CLOCK_MONOTONIC_COARSE
- 
- /*
-  * Defined if clock_gettime(CLOCK_MONOTONIC, ...) is available.
-  */
-@@ -247,28 +245,36 @@
-  * Methods for determining whether the OS overcommits.
-  * JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY: Linux's
-  *                                         /proc/sys/vm.overcommit_memory file.
-  * JEMALLOC_SYSCTL_VM_OVERCOMMIT: FreeBSD's vm.overcommit sysctl.
-  */
- #undef JEMALLOC_SYSCTL_VM_OVERCOMMIT
- #undef JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY
- 
-+/* Defined if madvise(2) is available. */
-+#undef JEMALLOC_HAVE_MADVISE
-+
- /*
-  * Methods for purging unused pages differ between operating systems.
-  *
-- *   madvise(..., MADV_DONTNEED) : On Linux, this immediately discards pages,
-- *                                 such that new pages will be demand-zeroed if
-- *                                 the address region is later touched.
-- *   madvise(..., MADV_FREE) : On FreeBSD and Darwin, this marks pages as being
-- *                             unused, such that they will be discarded rather
-- *                             than swapped out.
-+ *   madvise(..., MADV_FREE) : This marks pages as being unused, such that they
-+ *                             will be discarded rather than swapped out.
-+ *   madvise(..., MADV_DONTNEED) : This immediately discards pages, such that
-+ *                                 new pages will be demand-zeroed if the
-+ *                                 address region is later touched.
-  */
-+#undef JEMALLOC_PURGE_MADVISE_FREE
- #undef JEMALLOC_PURGE_MADVISE_DONTNEED
--#undef JEMALLOC_PURGE_MADVISE_FREE
-+
-+/*
-+ * Defined if transparent huge pages are supported via the MADV_[NO]HUGEPAGE
-+ * arguments to madvise(2).
-+ */
-+#undef JEMALLOC_THP
- 
- /* Define if operating system has alloca.h header. */
- #undef JEMALLOC_HAS_ALLOCA_H
- 
- /* C99 restrict keyword supported. */
- #undef JEMALLOC_HAS_RESTRICT
- 
- /* For use by hash code. */
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/pages.h b/memory/jemalloc/src/include/jemalloc/internal/pages.h
---- a/memory/jemalloc/src/include/jemalloc/internal/pages.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/pages.h
-@@ -11,16 +11,18 @@
- 
- void	*pages_map(void *addr, size_t size, bool *commit);
- void	pages_unmap(void *addr, size_t size);
- void	*pages_trim(void *addr, size_t alloc_size, size_t leadsize,
-     size_t size, bool *commit);
- bool	pages_commit(void *addr, size_t size);
- bool	pages_decommit(void *addr, size_t size);
- bool	pages_purge(void *addr, size_t size);
-+bool	pages_huge(void *addr, size_t size);
-+bool	pages_nohuge(void *addr, size_t size);
- void	pages_boot(void);
- 
- #endif /* JEMALLOC_H_EXTERNS */
- /******************************************************************************/
- #ifdef JEMALLOC_H_INLINES
- 
- #endif /* JEMALLOC_H_INLINES */
- /******************************************************************************/
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/private_symbols.txt b/memory/jemalloc/src/include/jemalloc/internal/private_symbols.txt
---- a/memory/jemalloc/src/include/jemalloc/internal/private_symbols.txt
-+++ b/memory/jemalloc/src/include/jemalloc/internal/private_symbols.txt
-@@ -31,16 +31,17 @@ arena_dalloc_small
- arena_decay_tick
- arena_decay_ticks
- arena_decay_time_default_get
- arena_decay_time_default_set
- arena_decay_time_get
- arena_decay_time_set
- arena_dss_prec_get
- arena_dss_prec_set
-+arena_extent_sn_next
- arena_get
- arena_ichoose
- arena_init
- arena_lg_dirty_mult_default_get
- arena_lg_dirty_mult_default_set
- arena_lg_dirty_mult_get
- arena_lg_dirty_mult_set
- arena_malloc
-@@ -213,16 +214,18 @@ extent_node_committed_set
- extent_node_dirty_insert
- extent_node_dirty_linkage_init
- extent_node_dirty_remove
- extent_node_init
- extent_node_prof_tctx_get
- extent_node_prof_tctx_set
- extent_node_size_get
- extent_node_size_set
-+extent_node_sn_get
-+extent_node_sn_set
- extent_node_zeroed_get
- extent_node_zeroed_set
- extent_tree_ad_destroy
- extent_tree_ad_destroy_recurse
- extent_tree_ad_empty
- extent_tree_ad_first
- extent_tree_ad_insert
- extent_tree_ad_iter
-@@ -234,35 +237,35 @@ extent_tree_ad_next
- extent_tree_ad_nsearch
- extent_tree_ad_prev
- extent_tree_ad_psearch
- extent_tree_ad_remove
- extent_tree_ad_reverse_iter
- extent_tree_ad_reverse_iter_recurse
- extent_tree_ad_reverse_iter_start
- extent_tree_ad_search
--extent_tree_szad_destroy
--extent_tree_szad_destroy_recurse
--extent_tree_szad_empty
--extent_tree_szad_first
--extent_tree_szad_insert
--extent_tree_szad_iter
--extent_tree_szad_iter_recurse
--extent_tree_szad_iter_start
--extent_tree_szad_last
--extent_tree_szad_new
--extent_tree_szad_next
--extent_tree_szad_nsearch
--extent_tree_szad_prev
--extent_tree_szad_psearch
--extent_tree_szad_remove
--extent_tree_szad_reverse_iter
--extent_tree_szad_reverse_iter_recurse
--extent_tree_szad_reverse_iter_start
--extent_tree_szad_search
-+extent_tree_szsnad_destroy
-+extent_tree_szsnad_destroy_recurse
-+extent_tree_szsnad_empty
-+extent_tree_szsnad_first
-+extent_tree_szsnad_insert
-+extent_tree_szsnad_iter
-+extent_tree_szsnad_iter_recurse
-+extent_tree_szsnad_iter_start
-+extent_tree_szsnad_last
-+extent_tree_szsnad_new
-+extent_tree_szsnad_next
-+extent_tree_szsnad_nsearch
-+extent_tree_szsnad_prev
-+extent_tree_szsnad_psearch
-+extent_tree_szsnad_remove
-+extent_tree_szsnad_reverse_iter
-+extent_tree_szsnad_reverse_iter_recurse
-+extent_tree_szsnad_reverse_iter_start
-+extent_tree_szsnad_search
- ffs_llu
- ffs_lu
- ffs_u
- ffs_u32
- ffs_u64
- ffs_zu
- get_errno
- hash
-@@ -389,17 +392,19 @@ opt_stats_print
- opt_tcache
- opt_utrace
- opt_xmalloc
- opt_zero
- p2rz
- pages_boot
- pages_commit
- pages_decommit
-+pages_huge
- pages_map
-+pages_nohuge
- pages_purge
- pages_trim
- pages_unmap
- pind2sz
- pind2sz_compute
- pind2sz_lookup
- pind2sz_tab
- pow2_ceil_u32
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/stats.h b/memory/jemalloc/src/include/jemalloc/internal/stats.h
---- a/memory/jemalloc/src/include/jemalloc/internal/stats.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/stats.h
-@@ -170,32 +170,28 @@ stats_cactive_get(void)
- {
- 
- 	return (atomic_read_z(&stats_cactive));
- }
- 
- JEMALLOC_INLINE void
- stats_cactive_add(size_t size)
- {
--	UNUSED size_t cactive;
- 
- 	assert(size > 0);
- 	assert((size & chunksize_mask) == 0);
- 
--	cactive = atomic_add_z(&stats_cactive, size);
--	assert(cactive - size < cactive);
-+	atomic_add_z(&stats_cactive, size);
- }
- 
- JEMALLOC_INLINE void
- stats_cactive_sub(size_t size)
- {
--	UNUSED size_t cactive;
- 
- 	assert(size > 0);
- 	assert((size & chunksize_mask) == 0);
- 
--	cactive = atomic_sub_z(&stats_cactive, size);
--	assert(cactive + size > cactive);
-+	atomic_sub_z(&stats_cactive, size);
- }
- #endif
- 
- #endif /* JEMALLOC_H_INLINES */
- /******************************************************************************/
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/util.h b/memory/jemalloc/src/include/jemalloc/internal/util.h
---- a/memory/jemalloc/src/include/jemalloc/internal/util.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/util.h
-@@ -36,18 +36,22 @@
- 
- /*
-  * Size of stack-allocated buffer used by malloc_{,v,vc}printf().  This must be
-  * large enough for all possible uses within jemalloc.
-  */
- #define	MALLOC_PRINTF_BUFSIZE	4096
- 
- /* Junk fill patterns. */
--#define	JEMALLOC_ALLOC_JUNK	((uint8_t)0xa5)
--#define	JEMALLOC_FREE_JUNK	((uint8_t)0x5a)
-+#ifndef JEMALLOC_ALLOC_JUNK
-+#  define JEMALLOC_ALLOC_JUNK	((uint8_t)0xa5)
-+#endif
-+#ifndef JEMALLOC_FREE_JUNK
-+#  define JEMALLOC_FREE_JUNK	((uint8_t)0x5a)
-+#endif
- 
- /*
-  * Wrap a cpp argument that contains commas such that it isn't broken up into
-  * multiple arguments.
-  */
- #define	JEMALLOC_ARG_CONCAT(...) __VA_ARGS__
- 
- /*
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/valgrind.h b/memory/jemalloc/src/include/jemalloc/internal/valgrind.h
---- a/memory/jemalloc/src/include/jemalloc/internal/valgrind.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/valgrind.h
-@@ -31,36 +31,50 @@
-  * Valgrind reports errors, there are no extra stack frames in the backtraces.
-  */
- #define	JEMALLOC_VALGRIND_MALLOC(cond, tsdn, ptr, usize, zero) do {	\
- 	if (unlikely(in_valgrind && cond)) {				\
- 		VALGRIND_MALLOCLIKE_BLOCK(ptr, usize, p2rz(tsdn, ptr),	\
- 		    zero);						\
- 	}								\
- } while (0)
--#define	JEMALLOC_VALGRIND_REALLOC(maybe_moved, tsdn, ptr, usize,	\
--    ptr_maybe_null, old_ptr, old_usize, old_rzsize, old_ptr_maybe_null,	\
--    zero) do {								\
-+#define	JEMALLOC_VALGRIND_REALLOC_MOVED_no(ptr, old_ptr)		\
-+    (false)
-+#define	JEMALLOC_VALGRIND_REALLOC_MOVED_maybe(ptr, old_ptr)		\
-+    ((ptr) != (old_ptr))
-+#define	JEMALLOC_VALGRIND_REALLOC_PTR_NULL_no(ptr)			\
-+    (false)
-+#define	JEMALLOC_VALGRIND_REALLOC_PTR_NULL_maybe(ptr)			\
-+    (ptr == NULL)
-+#define	JEMALLOC_VALGRIND_REALLOC_OLD_PTR_NULL_no(old_ptr)		\
-+    (false)
-+#define	JEMALLOC_VALGRIND_REALLOC_OLD_PTR_NULL_maybe(old_ptr)		\
-+    (old_ptr == NULL)
-+#define	JEMALLOC_VALGRIND_REALLOC(moved, tsdn, ptr, usize, ptr_null,	\
-+    old_ptr, old_usize, old_rzsize, old_ptr_null, zero) do {		\
- 	if (unlikely(in_valgrind)) {					\
- 		size_t rzsize = p2rz(tsdn, ptr);			\
- 									\
--		if (!maybe_moved || ptr == old_ptr) {			\
-+		if (!JEMALLOC_VALGRIND_REALLOC_MOVED_##moved(ptr,	\
-+		    old_ptr)) {						\
- 			VALGRIND_RESIZEINPLACE_BLOCK(ptr, old_usize,	\
- 			    usize, rzsize);				\
- 			if (zero && old_usize < usize) {		\
- 				valgrind_make_mem_defined(		\
- 				    (void *)((uintptr_t)ptr +		\
- 				    old_usize), usize - old_usize);	\
- 			}						\
- 		} else {						\
--			if (!old_ptr_maybe_null || old_ptr != NULL) {	\
-+			if (!JEMALLOC_VALGRIND_REALLOC_OLD_PTR_NULL_##	\
-+			    old_ptr_null(old_ptr)) {			\
- 				valgrind_freelike_block(old_ptr,	\
- 				    old_rzsize);			\
- 			}						\
--			if (!ptr_maybe_null || ptr != NULL) {		\
-+			if (!JEMALLOC_VALGRIND_REALLOC_PTR_NULL_##	\
-+			    ptr_null(ptr)) {				\
- 				size_t copy_size = (old_usize < usize)	\
- 				    ?  old_usize : usize;		\
- 				size_t tail_size = usize - copy_size;	\
- 				VALGRIND_MALLOCLIKE_BLOCK(ptr, usize,	\
- 				    rzsize, false);			\
- 				if (copy_size > 0) {			\
- 					valgrind_make_mem_defined(ptr,	\
- 					copy_size);			\
-diff --git a/memory/jemalloc/src/msvc/projects/vc2015/test_threads/test_threads.cpp b/memory/jemalloc/src/msvc/projects/vc2015/test_threads/test_threads.cpp
---- a/memory/jemalloc/src/msvc/projects/vc2015/test_threads/test_threads.cpp
-+++ b/memory/jemalloc/src/msvc/projects/vc2015/test_threads/test_threads.cpp
-@@ -16,29 +16,29 @@ using std::thread;
- using std::uniform_int_distribution;
- using std::minstd_rand;
- 
- int test_threads()
- {
-   je_malloc_conf = "narenas:3";
-   int narenas = 0;
-   size_t sz = sizeof(narenas);
--  je_mallctl("opt.narenas", &narenas, &sz, NULL, 0);
-+  je_mallctl("opt.narenas", (void *)&narenas, &sz, NULL, 0);
-   if (narenas != 3) {
-     printf("Error: unexpected number of arenas: %d\n", narenas);
-     return 1;
-   }
-   static const int sizes[] = { 7, 16, 32, 60, 91, 100, 120, 144, 169, 199, 255, 400, 670, 900, 917, 1025, 3333, 5190, 13131, 49192, 99999, 123123, 255265, 2333111 };
-   static const int numSizes = (int)(sizeof(sizes) / sizeof(sizes[0]));
-   vector<thread> workers;
-   static const int numThreads = narenas + 1, numAllocsMax = 25, numIter1 = 50, numIter2 = 50;
-   je_malloc_stats_print(NULL, NULL, NULL);
-   size_t allocated1;
-   size_t sz1 = sizeof(allocated1);
--  je_mallctl("stats.active", &allocated1, &sz1, NULL, 0);
-+  je_mallctl("stats.active", (void *)&allocated1, &sz1, NULL, 0);
-   printf("\nPress Enter to start threads...\n");
-   getchar();
-   printf("Starting %d threads x %d x %d iterations...\n", numThreads, numIter1, numIter2);
-   for (int i = 0; i < numThreads; i++) {
-     workers.emplace_back([tid=i]() {
-       uniform_int_distribution<int> sizeDist(0, numSizes - 1);
-       minstd_rand rnd(tid * 17);
-       uint8_t* ptrs[numAllocsMax];
-@@ -73,17 +73,17 @@ int test_threads()
-       }
-     });
-   }
-   for (thread& t : workers) {
-     t.join();
-   }
-   je_malloc_stats_print(NULL, NULL, NULL);
-   size_t allocated2;
--  je_mallctl("stats.active", &allocated2, &sz1, NULL, 0);
-+  je_mallctl("stats.active", (void *)&allocated2, &sz1, NULL, 0);
-   size_t leaked = allocated2 - allocated1;
-   printf("\nDone. Leaked: %zd bytes\n", leaked);
-   bool failed = leaked > 65536; // in case C++ runtime allocated something (e.g. iostream locale or facet)
-   printf("\nTest %s!\n", (failed ? "FAILED" : "successful"));
-   printf("\nPress Enter to continue...\n");
-   getchar();
-   return failed ? 1 : 0;
- }
-diff --git a/memory/jemalloc/src/src/arena.c b/memory/jemalloc/src/src/arena.c
---- a/memory/jemalloc/src/src/arena.c
-+++ b/memory/jemalloc/src/src/arena.c
-@@ -33,49 +33,89 @@ unsigned	nhclasses; /* Number of huge si
- static void	arena_chunk_dalloc(tsdn_t *tsdn, arena_t *arena,
-     arena_chunk_t *chunk);
- static void	arena_purge_to_limit(tsdn_t *tsdn, arena_t *arena,
-     size_t ndirty_limit);
- static void	arena_run_dalloc(tsdn_t *tsdn, arena_t *arena, arena_run_t *run,
-     bool dirty, bool cleaned, bool decommitted);
- static void	arena_dalloc_bin_run(tsdn_t *tsdn, arena_t *arena,
-     arena_chunk_t *chunk, arena_run_t *run, arena_bin_t *bin);
--static void	arena_bin_lower_run(arena_t *arena, arena_chunk_t *chunk,
--    arena_run_t *run, arena_bin_t *bin);
-+static void	arena_bin_lower_run(arena_t *arena, arena_run_t *run,
-+    arena_bin_t *bin);
- 
- /******************************************************************************/
- 
- JEMALLOC_INLINE_C size_t
- arena_miscelm_size_get(const arena_chunk_map_misc_t *miscelm)
- {
- 	arena_chunk_t *chunk;
- 	size_t pageind, mapbits;
- 
- 	chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(miscelm);
- 	pageind = arena_miscelm_to_pageind(miscelm);
- 	mapbits = arena_mapbits_get(chunk, pageind);
- 	return (arena_mapbits_size_decode(mapbits));
- }
- 
-+JEMALLOC_INLINE_C const extent_node_t *
-+arena_miscelm_extent_get(const arena_chunk_map_misc_t *miscelm)
-+{
-+	arena_chunk_t *chunk;
-+
-+	chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(miscelm);
-+	return (&chunk->node);
-+}
-+
- JEMALLOC_INLINE_C int
--arena_run_addr_comp(const arena_chunk_map_misc_t *a,
-+arena_sn_comp(const arena_chunk_map_misc_t *a, const arena_chunk_map_misc_t *b)
-+{
-+	size_t a_sn, b_sn;
-+
-+	assert(a != NULL);
-+	assert(b != NULL);
-+
-+	a_sn = extent_node_sn_get(arena_miscelm_extent_get(a));
-+	b_sn = extent_node_sn_get(arena_miscelm_extent_get(b));
-+
-+	return ((a_sn > b_sn) - (a_sn < b_sn));
-+}
-+
-+JEMALLOC_INLINE_C int
-+arena_ad_comp(const arena_chunk_map_misc_t *a,
-     const arena_chunk_map_misc_t *b)
- {
- 	uintptr_t a_miscelm = (uintptr_t)a;
- 	uintptr_t b_miscelm = (uintptr_t)b;
- 
- 	assert(a != NULL);
- 	assert(b != NULL);
- 
- 	return ((a_miscelm > b_miscelm) - (a_miscelm < b_miscelm));
- }
- 
-+JEMALLOC_INLINE_C int
-+arena_snad_comp(const arena_chunk_map_misc_t *a,
-+    const arena_chunk_map_misc_t *b)
-+{
-+	int ret;
-+
-+	assert(a != NULL);
-+	assert(b != NULL);
-+
-+	ret = arena_sn_comp(a, b);
-+	if (ret != 0)
-+		return (ret);
-+
-+	ret = arena_ad_comp(a, b);
-+	return (ret);
-+}
-+
- /* Generate pairing heap functions. */
- ph_gen(static UNUSED, arena_run_heap_, arena_run_heap_t, arena_chunk_map_misc_t,
--    ph_link, arena_run_addr_comp)
-+    ph_link, arena_snad_comp)
- 
- #ifdef JEMALLOC_JET
- #undef run_quantize_floor
- #define	run_quantize_floor JEMALLOC_N(n_run_quantize_floor)
- #endif
- static size_t
- run_quantize_floor(size_t size)
- {
-@@ -524,77 +564,80 @@ arena_chunk_init_spare(arena_t *arena)
- 	assert(arena_mapbits_dirty_get(chunk, map_bias) ==
- 	    arena_mapbits_dirty_get(chunk, chunk_npages-1));
- 
- 	return (chunk);
- }
- 
- static bool
- arena_chunk_register(tsdn_t *tsdn, arena_t *arena, arena_chunk_t *chunk,
--    bool zero)
-+    size_t sn, bool zero)
- {
- 
- 	/*
- 	 * The extent node notion of "committed" doesn't directly apply to
- 	 * arena chunks.  Arbitrarily mark them as committed.  The commit state
- 	 * of runs is tracked individually, and upon chunk deallocation the
- 	 * entire chunk is in a consistent commit state.
- 	 */
--	extent_node_init(&chunk->node, arena, chunk, chunksize, zero, true);
-+	extent_node_init(&chunk->node, arena, chunk, chunksize, sn, zero, true);
- 	extent_node_achunk_set(&chunk->node, true);
- 	return (chunk_register(tsdn, chunk, &chunk->node));
- }
- 
- static arena_chunk_t *
- arena_chunk_alloc_internal_hard(tsdn_t *tsdn, arena_t *arena,
-     chunk_hooks_t *chunk_hooks, bool *zero, bool *commit)
- {
- 	arena_chunk_t *chunk;
-+	size_t sn;
- 
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- 
- 	chunk = (arena_chunk_t *)chunk_alloc_wrapper(tsdn, arena, chunk_hooks,
--	    NULL, chunksize, chunksize, zero, commit);
-+	    NULL, chunksize, chunksize, &sn, zero, commit);
- 	if (chunk != NULL && !*commit) {
- 		/* Commit header. */
- 		if (chunk_hooks->commit(chunk, chunksize, 0, map_bias <<
- 		    LG_PAGE, arena->ind)) {
- 			chunk_dalloc_wrapper(tsdn, arena, chunk_hooks,
--			    (void *)chunk, chunksize, *zero, *commit);
-+			    (void *)chunk, chunksize, sn, *zero, *commit);
- 			chunk = NULL;
- 		}
- 	}
--	if (chunk != NULL && arena_chunk_register(tsdn, arena, chunk, *zero)) {
-+	if (chunk != NULL && arena_chunk_register(tsdn, arena, chunk, sn,
-+	    *zero)) {
- 		if (!*commit) {
- 			/* Undo commit of header. */
- 			chunk_hooks->decommit(chunk, chunksize, 0, map_bias <<
- 			    LG_PAGE, arena->ind);
- 		}
- 		chunk_dalloc_wrapper(tsdn, arena, chunk_hooks, (void *)chunk,
--		    chunksize, *zero, *commit);
-+		    chunksize, sn, *zero, *commit);
- 		chunk = NULL;
- 	}
- 
- 	malloc_mutex_lock(tsdn, &arena->lock);
- 	return (chunk);
- }
- 
- static arena_chunk_t *
- arena_chunk_alloc_internal(tsdn_t *tsdn, arena_t *arena, bool *zero,
-     bool *commit)
- {
- 	arena_chunk_t *chunk;
- 	chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
-+	size_t sn;
- 
- 	chunk = chunk_alloc_cache(tsdn, arena, &chunk_hooks, NULL, chunksize,
--	    chunksize, zero, commit, true);
-+	    chunksize, &sn, zero, commit, true);
- 	if (chunk != NULL) {
--		if (arena_chunk_register(tsdn, arena, chunk, *zero)) {
-+		if (arena_chunk_register(tsdn, arena, chunk, sn, *zero)) {
- 			chunk_dalloc_cache(tsdn, arena, &chunk_hooks, chunk,
--			    chunksize, true);
-+			    chunksize, sn, true);
- 			return (NULL);
- 		}
- 	}
- 	if (chunk == NULL) {
- 		chunk = arena_chunk_alloc_internal_hard(tsdn, arena,
- 		    &chunk_hooks, zero, commit);
- 	}
- 
-@@ -616,16 +659,18 @@ arena_chunk_init_hard(tsdn_t *tsdn, aren
- 	assert(arena->spare == NULL);
- 
- 	zero = false;
- 	commit = false;
- 	chunk = arena_chunk_alloc_internal(tsdn, arena, &zero, &commit);
- 	if (chunk == NULL)
- 		return (NULL);
- 
-+	chunk->hugepage = true;
-+
- 	/*
- 	 * Initialize the map to contain one maximal free untouched run.  Mark
- 	 * the pages as zeroed if arena_chunk_alloc_internal() returned a zeroed
- 	 * or decommitted chunk.
- 	 */
- 	flag_unzeroed = (zero || !commit) ? 0 : CHUNK_MAP_UNZEROED;
- 	flag_decommitted = commit ? 0 : CHUNK_MAP_DECOMMITTED;
- 	arena_mapbits_unallocated_set(chunk, map_bias, arena_maxrun,
-@@ -679,36 +724,47 @@ arena_chunk_alloc(tsdn_t *tsdn, arena_t 
- 	arena_avail_insert(arena, chunk, map_bias, chunk_npages-map_bias);
- 
- 	return (chunk);
- }
- 
- static void
- arena_chunk_discard(tsdn_t *tsdn, arena_t *arena, arena_chunk_t *chunk)
- {
-+	size_t sn, hugepage;
- 	bool committed;
- 	chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
- 
- 	chunk_deregister(chunk, &chunk->node);
- 
-+	sn = extent_node_sn_get(&chunk->node);
-+	hugepage = chunk->hugepage;
- 	committed = (arena_mapbits_decommitted_get(chunk, map_bias) == 0);
- 	if (!committed) {
- 		/*
- 		 * Decommit the header.  Mark the chunk as decommitted even if
- 		 * header decommit fails, since treating a partially committed
- 		 * chunk as committed has a high potential for causing later
- 		 * access of decommitted memory.
- 		 */
- 		chunk_hooks = chunk_hooks_get(tsdn, arena);
- 		chunk_hooks.decommit(chunk, chunksize, 0, map_bias << LG_PAGE,
- 		    arena->ind);
- 	}
-+	if (!hugepage) {
-+		/*
-+		 * Convert chunk back to the default state, so that all
-+		 * subsequent chunk allocations start out with chunks that can
-+		 * be backed by transparent huge pages.
-+		 */
-+		pages_huge(chunk, chunksize);
-+	}
- 
- 	chunk_dalloc_cache(tsdn, arena, &chunk_hooks, (void *)chunk, chunksize,
--	    committed);
-+	    sn, committed);
- 
- 	if (config_stats) {
- 		arena->stats.mapped -= chunksize;
- 		arena->stats.metadata_mapped -= (map_bias << LG_PAGE);
- 	}
- }
- 
- static void
-@@ -854,82 +910,83 @@ arena_node_dalloc(tsdn_t *tsdn, arena_t 
- 	malloc_mutex_lock(tsdn, &arena->node_cache_mtx);
- 	ql_elm_new(node, ql_link);
- 	ql_tail_insert(&arena->node_cache, node, ql_link);
- 	malloc_mutex_unlock(tsdn, &arena->node_cache_mtx);
- }
- 
- static void *
- arena_chunk_alloc_huge_hard(tsdn_t *tsdn, arena_t *arena,
--    chunk_hooks_t *chunk_hooks, size_t usize, size_t alignment, bool *zero,
--    size_t csize)
-+    chunk_hooks_t *chunk_hooks, size_t usize, size_t alignment, size_t *sn,
-+    bool *zero, size_t csize)
- {
- 	void *ret;
- 	bool commit = true;
- 
- 	ret = chunk_alloc_wrapper(tsdn, arena, chunk_hooks, NULL, csize,
--	    alignment, zero, &commit);
-+	    alignment, sn, zero, &commit);
- 	if (ret == NULL) {
- 		/* Revert optimistic stats updates. */
- 		malloc_mutex_lock(tsdn, &arena->lock);
- 		if (config_stats) {
- 			arena_huge_malloc_stats_update_undo(arena, usize);
- 			arena->stats.mapped -= usize;
- 		}
- 		arena_nactive_sub(arena, usize >> LG_PAGE);
- 		malloc_mutex_unlock(tsdn, &arena->lock);
- 	}
- 
- 	return (ret);
- }
- 
- void *
- arena_chunk_alloc_huge(tsdn_t *tsdn, arena_t *arena, size_t usize,
--    size_t alignment, bool *zero)
-+    size_t alignment, size_t *sn, bool *zero)
- {
- 	void *ret;
- 	chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
- 	size_t csize = CHUNK_CEILING(usize);
- 	bool commit = true;
- 
- 	malloc_mutex_lock(tsdn, &arena->lock);
- 
- 	/* Optimistically update stats. */
- 	if (config_stats) {
- 		arena_huge_malloc_stats_update(arena, usize);
- 		arena->stats.mapped += usize;
- 	}
- 	arena_nactive_add(arena, usize >> LG_PAGE);
- 
- 	ret = chunk_alloc_cache(tsdn, arena, &chunk_hooks, NULL, csize,
--	    alignment, zero, &commit, true);
-+	    alignment, sn, zero, &commit, true);
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- 	if (ret == NULL) {
- 		ret = arena_chunk_alloc_huge_hard(tsdn, arena, &chunk_hooks,
--		    usize, alignment, zero, csize);
-+		    usize, alignment, sn, zero, csize);
- 	}
- 
- 	return (ret);
- }
- 
- void
--arena_chunk_dalloc_huge(tsdn_t *tsdn, arena_t *arena, void *chunk, size_t usize)
-+arena_chunk_dalloc_huge(tsdn_t *tsdn, arena_t *arena, void *chunk, size_t usize,
-+    size_t sn)
- {
- 	chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
- 	size_t csize;
- 
- 	csize = CHUNK_CEILING(usize);
- 	malloc_mutex_lock(tsdn, &arena->lock);
- 	if (config_stats) {
- 		arena_huge_dalloc_stats_update(arena, usize);
- 		arena->stats.mapped -= usize;
- 	}
- 	arena_nactive_sub(arena, usize >> LG_PAGE);
- 
--	chunk_dalloc_cache(tsdn, arena, &chunk_hooks, chunk, csize, true);
-+	chunk_dalloc_cache(tsdn, arena, &chunk_hooks, chunk, csize, sn, true);
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- }
- 
- void
- arena_chunk_ralloc_huge_similar(tsdn_t *tsdn, arena_t *arena, void *chunk,
-     size_t oldsize, size_t usize)
- {
- 
-@@ -943,17 +1000,17 @@ arena_chunk_ralloc_huge_similar(tsdn_t *
- 		arena_nactive_add(arena, (usize - oldsize) >> LG_PAGE);
- 	else
- 		arena_nactive_sub(arena, (oldsize - usize) >> LG_PAGE);
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- }
- 
- void
- arena_chunk_ralloc_huge_shrink(tsdn_t *tsdn, arena_t *arena, void *chunk,
--    size_t oldsize, size_t usize)
-+    size_t oldsize, size_t usize, size_t sn)
- {
- 	size_t udiff = oldsize - usize;
- 	size_t cdiff = CHUNK_CEILING(oldsize) - CHUNK_CEILING(usize);
- 
- 	malloc_mutex_lock(tsdn, &arena->lock);
- 	if (config_stats) {
- 		arena_huge_ralloc_stats_update(arena, oldsize, usize);
- 		if (cdiff != 0)
-@@ -962,81 +1019,82 @@ arena_chunk_ralloc_huge_shrink(tsdn_t *t
- 	arena_nactive_sub(arena, udiff >> LG_PAGE);
- 
- 	if (cdiff != 0) {
- 		chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
- 		void *nchunk = (void *)((uintptr_t)chunk +
- 		    CHUNK_CEILING(usize));
- 
- 		chunk_dalloc_cache(tsdn, arena, &chunk_hooks, nchunk, cdiff,
--		    true);
-+		    sn, true);
- 	}
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- }
- 
- static bool
- arena_chunk_ralloc_huge_expand_hard(tsdn_t *tsdn, arena_t *arena,
-     chunk_hooks_t *chunk_hooks, void *chunk, size_t oldsize, size_t usize,
--    bool *zero, void *nchunk, size_t udiff, size_t cdiff)
-+    size_t *sn, bool *zero, void *nchunk, size_t udiff, size_t cdiff)
- {
- 	bool err;
- 	bool commit = true;
- 
- 	err = (chunk_alloc_wrapper(tsdn, arena, chunk_hooks, nchunk, cdiff,
--	    chunksize, zero, &commit) == NULL);
-+	    chunksize, sn, zero, &commit) == NULL);
- 	if (err) {
- 		/* Revert optimistic stats updates. */
- 		malloc_mutex_lock(tsdn, &arena->lock);
- 		if (config_stats) {
- 			arena_huge_ralloc_stats_update_undo(arena, oldsize,
- 			    usize);
- 			arena->stats.mapped -= cdiff;
- 		}
- 		arena_nactive_sub(arena, udiff >> LG_PAGE);
- 		malloc_mutex_unlock(tsdn, &arena->lock);
- 	} else if (chunk_hooks->merge(chunk, CHUNK_CEILING(oldsize), nchunk,
- 	    cdiff, true, arena->ind)) {
- 		chunk_dalloc_wrapper(tsdn, arena, chunk_hooks, nchunk, cdiff,
--		    *zero, true);
-+		    *sn, *zero, true);
- 		err = true;
- 	}
- 	return (err);
- }
- 
- bool
- arena_chunk_ralloc_huge_expand(tsdn_t *tsdn, arena_t *arena, void *chunk,
-     size_t oldsize, size_t usize, bool *zero)
- {
- 	bool err;
- 	chunk_hooks_t chunk_hooks = chunk_hooks_get(tsdn, arena);
- 	void *nchunk = (void *)((uintptr_t)chunk + CHUNK_CEILING(oldsize));
- 	size_t udiff = usize - oldsize;
- 	size_t cdiff = CHUNK_CEILING(usize) - CHUNK_CEILING(oldsize);
-+	size_t sn;
- 	bool commit = true;
- 
- 	malloc_mutex_lock(tsdn, &arena->lock);
- 
- 	/* Optimistically update stats. */
- 	if (config_stats) {
- 		arena_huge_ralloc_stats_update(arena, oldsize, usize);
- 		arena->stats.mapped += cdiff;
- 	}
- 	arena_nactive_add(arena, udiff >> LG_PAGE);
- 
- 	err = (chunk_alloc_cache(tsdn, arena, &chunk_hooks, nchunk, cdiff,
--	    chunksize, zero, &commit, true) == NULL);
-+	    chunksize, &sn, zero, &commit, true) == NULL);
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- 	if (err) {
- 		err = arena_chunk_ralloc_huge_expand_hard(tsdn, arena,
--		    &chunk_hooks, chunk, oldsize, usize, zero, nchunk, udiff,
--		    cdiff);
-+		    &chunk_hooks, chunk, oldsize, usize, &sn, zero, nchunk,
-+		    udiff, cdiff);
- 	} else if (chunk_hooks.merge(chunk, CHUNK_CEILING(oldsize), nchunk,
- 	    cdiff, true, arena->ind)) {
- 		chunk_dalloc_wrapper(tsdn, arena, &chunk_hooks, nchunk, cdiff,
--		    *zero, true);
-+		    sn, *zero, true);
- 		err = true;
- 	}
- 
- 	return (err);
- }
- 
- /*
-  * Do first-best-fit run selection, i.e. select the lowest run that best fits.
-@@ -1514,16 +1572,17 @@ arena_stash_dirty(tsdn_t *tsdn, arena_t 
- 	for (rdelm = qr_next(&arena->runs_dirty, rd_link),
- 	    chunkselm = qr_next(&arena->chunks_cache, cc_link);
- 	    rdelm != &arena->runs_dirty; rdelm = rdelm_next) {
- 		size_t npages;
- 		rdelm_next = qr_next(rdelm, rd_link);
- 
- 		if (rdelm == &chunkselm->rd) {
- 			extent_node_t *chunkselm_next;
-+			size_t sn;
- 			bool zero, commit;
- 			UNUSED void *chunk;
- 
- 			npages = extent_node_size_get(chunkselm) >> LG_PAGE;
- 			if (opt_purge == purge_mode_decay && arena->ndirty -
- 			    (nstashed + npages) < ndirty_limit)
- 				break;
- 
-@@ -1531,18 +1590,18 @@ arena_stash_dirty(tsdn_t *tsdn, arena_t 
- 			/*
- 			 * Allocate.  chunkselm remains valid due to the
- 			 * dalloc_node=false argument to chunk_alloc_cache().
- 			 */
- 			zero = false;
- 			commit = false;
- 			chunk = chunk_alloc_cache(tsdn, arena, chunk_hooks,
- 			    extent_node_addr_get(chunkselm),
--			    extent_node_size_get(chunkselm), chunksize, &zero,
--			    &commit, false);
-+			    extent_node_size_get(chunkselm), chunksize, &sn,
-+			    &zero, &commit, false);
- 			assert(chunk == extent_node_addr_get(chunkselm));
- 			assert(zero == extent_node_zeroed_get(chunkselm));
- 			extent_node_dirty_insert(chunkselm, purge_runs_sentinel,
- 			    purge_chunks_sentinel);
- 			assert(npages == (extent_node_size_get(chunkselm) >>
- 			    LG_PAGE));
- 			chunkselm = chunkselm_next;
- 		} else {
-@@ -1629,16 +1688,27 @@ arena_purge_stashed(tsdn_t *tsdn, arena_
- 			arena_chunk_t *chunk =
- 			    (arena_chunk_t *)CHUNK_ADDR2BASE(rdelm);
- 			arena_chunk_map_misc_t *miscelm =
- 			    arena_rd_to_miscelm(rdelm);
- 			pageind = arena_miscelm_to_pageind(miscelm);
- 			run_size = arena_mapbits_large_size_get(chunk, pageind);
- 			npages = run_size >> LG_PAGE;
- 
-+			/*
-+			 * If this is the first run purged within chunk, mark
-+			 * the chunk as non-huge.  This will prevent all use of
-+			 * transparent huge pages for this chunk until the chunk
-+			 * as a whole is deallocated.
-+			 */
-+			if (chunk->hugepage) {
-+				pages_nohuge(chunk, chunksize);
-+				chunk->hugepage = false;
-+			}
-+
- 			assert(pageind + npages <= chunk_npages);
- 			assert(!arena_mapbits_decommitted_get(chunk, pageind));
- 			assert(!arena_mapbits_decommitted_get(chunk,
- 			    pageind+npages-1));
- 			decommitted = !chunk_hooks->decommit(chunk, chunksize,
- 			    pageind << LG_PAGE, npages << LG_PAGE, arena->ind);
- 			if (decommitted) {
- 				flag_unzeroed = 0;
-@@ -1698,23 +1768,24 @@ arena_unstash_purged(tsdn_t *tsdn, arena
- 	    chunkselm = qr_next(purge_chunks_sentinel, cc_link);
- 	    rdelm != purge_runs_sentinel; rdelm = rdelm_next) {
- 		rdelm_next = qr_next(rdelm, rd_link);
- 		if (rdelm == &chunkselm->rd) {
- 			extent_node_t *chunkselm_next = qr_next(chunkselm,
- 			    cc_link);
- 			void *addr = extent_node_addr_get(chunkselm);
- 			size_t size = extent_node_size_get(chunkselm);
-+			size_t sn = extent_node_sn_get(chunkselm);
- 			bool zeroed = extent_node_zeroed_get(chunkselm);
- 			bool committed = extent_node_committed_get(chunkselm);
- 			extent_node_dirty_remove(chunkselm);
- 			arena_node_dalloc(tsdn, arena, chunkselm);
- 			chunkselm = chunkselm_next;
- 			chunk_dalloc_wrapper(tsdn, arena, chunk_hooks, addr,
--			    size, zeroed, committed);
-+			    size, sn, zeroed, committed);
- 		} else {
- 			arena_chunk_t *chunk =
- 			    (arena_chunk_t *)CHUNK_ADDR2BASE(rdelm);
- 			arena_chunk_map_misc_t *miscelm =
- 			    arena_rd_to_miscelm(rdelm);
- 			size_t pageind = arena_miscelm_to_pageind(miscelm);
- 			bool decommitted = (arena_mapbits_decommitted_get(chunk,
- 			    pageind) != 0);
-@@ -2310,17 +2381,17 @@ arena_bin_malloc_hard(tsdn_t *tsdn, aren
- 			 * arena_bin_lower_run() must be called, as if a region
- 			 * were just deallocated from the run.
- 			 */
- 			chunk = (arena_chunk_t *)CHUNK_ADDR2BASE(run);
- 			if (run->nfree == bin_info->nregs) {
- 				arena_dalloc_bin_run(tsdn, arena, chunk, run,
- 				    bin);
- 			} else
--				arena_bin_lower_run(arena, chunk, run, bin);
-+				arena_bin_lower_run(arena, run, bin);
- 		}
- 		return (ret);
- 	}
- 
- 	if (run == NULL)
- 		return (NULL);
- 
- 	bin->runcur = run;
-@@ -2815,26 +2886,28 @@ arena_dalloc_bin_run(tsdn_t *tsdn, arena
- 	malloc_mutex_unlock(tsdn, &arena->lock);
- 	/****************************/
- 	malloc_mutex_lock(tsdn, &bin->lock);
- 	if (config_stats)
- 		bin->stats.curruns--;
- }
- 
- static void
--arena_bin_lower_run(arena_t *arena, arena_chunk_t *chunk, arena_run_t *run,
--    arena_bin_t *bin)
-+arena_bin_lower_run(arena_t *arena, arena_run_t *run, arena_bin_t *bin)
- {
- 
- 	/*
--	 * Make sure that if bin->runcur is non-NULL, it refers to the lowest
--	 * non-full run.  It is okay to NULL runcur out rather than proactively
--	 * keeping it pointing at the lowest non-full run.
-+	 * Make sure that if bin->runcur is non-NULL, it refers to the
-+	 * oldest/lowest non-full run.  It is okay to NULL runcur out rather
-+	 * than proactively keeping it pointing at the oldest/lowest non-full
-+	 * run.
- 	 */
--	if ((uintptr_t)run < (uintptr_t)bin->runcur) {
-+	if (bin->runcur != NULL &&
-+	    arena_snad_comp(arena_run_to_miscelm(bin->runcur),
-+	    arena_run_to_miscelm(run)) > 0) {
- 		/* Switch runcur. */
- 		if (bin->runcur->nfree > 0)
- 			arena_bin_runs_insert(bin, bin->runcur);
- 		bin->runcur = run;
- 		if (config_stats)
- 			bin->stats.reruns++;
- 	} else
- 		arena_bin_runs_insert(bin, run);
-@@ -2860,17 +2933,17 @@ arena_dalloc_bin_locked_impl(tsdn_t *tsd
- 	if (!junked && config_fill && unlikely(opt_junk_free))
- 		arena_dalloc_junk_small(ptr, bin_info);
- 
- 	arena_run_reg_dalloc(run, ptr);
- 	if (run->nfree == bin_info->nregs) {
- 		arena_dissociate_bin_run(chunk, run, bin);
- 		arena_dalloc_bin_run(tsdn, arena, chunk, run, bin);
- 	} else if (run->nfree == 1 && run != bin->runcur)
--		arena_bin_lower_run(arena, chunk, run, bin);
-+		arena_bin_lower_run(arena, run, bin);
- 
- 	if (config_stats) {
- 		bin->stats.ndalloc++;
- 		bin->stats.curregs--;
- 	}
- }
- 
- void
-@@ -3447,16 +3520,23 @@ arena_nthreads_inc(arena_t *arena, bool 
- 
- void
- arena_nthreads_dec(arena_t *arena, bool internal)
- {
- 
- 	atomic_sub_u(&arena->nthreads[internal], 1);
- }
- 
-+size_t
-+arena_extent_sn_next(arena_t *arena)
-+{
-+
-+	return (atomic_add_z(&arena->extent_sn_next, 1) - 1);
-+}
-+
- arena_t *
- arena_new(tsdn_t *tsdn, unsigned ind)
- {
- 	arena_t *arena;
- 	unsigned i;
- 
- 	/*
- 	 * Allocate arena, arena->lstats, and arena->hstats contiguously, mainly
-@@ -3506,16 +3586,18 @@ arena_new(tsdn_t *tsdn, unsigned ind)
- 		arena->offset_state = config_debug ? ind :
- 		    (size_t)(uintptr_t)arena;
- 	}
- 
- 	arena->dss_prec = chunk_dss_prec_get();
- 
- 	ql_new(&arena->achunks);
- 
-+	arena->extent_sn_next = 0;
-+
- 	arena->spare = NULL;
- 
- 	arena->lg_dirty_mult = arena_lg_dirty_mult_default_get();
- 	arena->purging = false;
- 	arena->nactive = 0;
- 	arena->ndirty = 0;
- 
- 	for (i = 0; i < NPSIZES; i++)
-@@ -3527,19 +3609,19 @@ arena_new(tsdn_t *tsdn, unsigned ind)
- 	if (opt_purge == purge_mode_decay)
- 		arena_decay_init(arena, arena_decay_time_default_get());
- 
- 	ql_new(&arena->huge);
- 	if (malloc_mutex_init(&arena->huge_mtx, "arena_huge",
- 	    WITNESS_RANK_ARENA_HUGE))
- 		return (NULL);
- 
--	extent_tree_szad_new(&arena->chunks_szad_cached);
-+	extent_tree_szsnad_new(&arena->chunks_szsnad_cached);
- 	extent_tree_ad_new(&arena->chunks_ad_cached);
--	extent_tree_szad_new(&arena->chunks_szad_retained);
-+	extent_tree_szsnad_new(&arena->chunks_szsnad_retained);
- 	extent_tree_ad_new(&arena->chunks_ad_retained);
- 	if (malloc_mutex_init(&arena->chunks_mtx, "arena_chunks",
- 	    WITNESS_RANK_ARENA_CHUNKS))
- 		return (NULL);
- 	ql_new(&arena->node_cache);
- 	if (malloc_mutex_init(&arena->node_cache_mtx, "arena_node_cache",
- 	    WITNESS_RANK_ARENA_NODE_CACHE))
- 		return (NULL);
-diff --git a/memory/jemalloc/src/src/base.c b/memory/jemalloc/src/src/base.c
---- a/memory/jemalloc/src/src/base.c
-+++ b/memory/jemalloc/src/src/base.c
-@@ -1,16 +1,17 @@
- #define	JEMALLOC_BASE_C_
- #include "jemalloc/internal/jemalloc_internal.h"
- 
- /******************************************************************************/
- /* Data. */
- 
- static malloc_mutex_t	base_mtx;
--static extent_tree_t	base_avail_szad;
-+static size_t		base_extent_sn_next;
-+static extent_tree_t	base_avail_szsnad;
- static extent_node_t	*base_nodes;
- static size_t		base_allocated;
- static size_t		base_resident;
- static size_t		base_mapped;
- 
- /******************************************************************************/
- 
- static extent_node_t *
-@@ -34,16 +35,24 @@ base_node_dalloc(tsdn_t *tsdn, extent_no
- 
- 	malloc_mutex_assert_owner(tsdn, &base_mtx);
- 
- 	JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(node, sizeof(extent_node_t));
- 	*(extent_node_t **)node = base_nodes;
- 	base_nodes = node;
- }
- 
-+static void
-+base_extent_node_init(extent_node_t *node, void *addr, size_t size)
-+{
-+	size_t sn = atomic_add_z(&base_extent_sn_next, 1) - 1;
-+
-+	extent_node_init(node, NULL, addr, size, sn, true, true);
-+}
-+
- static extent_node_t *
- base_chunk_alloc(tsdn_t *tsdn, size_t minsize)
- {
- 	extent_node_t *node;
- 	size_t csize, nsize;
- 	void *addr;
- 
- 	malloc_mutex_assert_owner(tsdn, &base_mtx);
-@@ -63,17 +72,17 @@ base_chunk_alloc(tsdn_t *tsdn, size_t mi
- 		node = (extent_node_t *)addr;
- 		addr = (void *)((uintptr_t)addr + nsize);
- 		csize -= nsize;
- 		if (config_stats) {
- 			base_allocated += nsize;
- 			base_resident += PAGE_CEILING(nsize);
- 		}
- 	}
--	extent_node_init(node, NULL, addr, csize, true, true);
-+	base_extent_node_init(node, addr, csize);
- 	return (node);
- }
- 
- /*
-  * base_alloc() guarantees demand-zeroed memory, in order to make multi-page
-  * sparse data structures such as radix tree nodes efficient with respect to
-  * physical memory usage.
-  */
-@@ -87,36 +96,36 @@ base_alloc(tsdn_t *tsdn, size_t size)
- 
- 	/*
- 	 * Round size up to nearest multiple of the cacheline size, so that
- 	 * there is no chance of false cache line sharing.
- 	 */
- 	csize = CACHELINE_CEILING(size);
- 
- 	usize = s2u(csize);
--	extent_node_init(&key, NULL, NULL, usize, false, false);
-+	extent_node_init(&key, NULL, NULL, usize, 0, false, false);
- 	malloc_mutex_lock(tsdn, &base_mtx);
--	node = extent_tree_szad_nsearch(&base_avail_szad, &key);
-+	node = extent_tree_szsnad_nsearch(&base_avail_szsnad, &key);
- 	if (node != NULL) {
- 		/* Use existing space. */
--		extent_tree_szad_remove(&base_avail_szad, node);
-+		extent_tree_szsnad_remove(&base_avail_szsnad, node);
- 	} else {
- 		/* Try to allocate more space. */
- 		node = base_chunk_alloc(tsdn, csize);
- 	}
- 	if (node == NULL) {
- 		ret = NULL;
- 		goto label_return;
- 	}
- 
- 	ret = extent_node_addr_get(node);
- 	if (extent_node_size_get(node) > csize) {
- 		extent_node_addr_set(node, (void *)((uintptr_t)ret + csize));
- 		extent_node_size_set(node, extent_node_size_get(node) - csize);
--		extent_tree_szad_insert(&base_avail_szad, node);
-+		extent_tree_szsnad_insert(&base_avail_szsnad, node);
- 	} else
- 		base_node_dalloc(tsdn, node);
- 	if (config_stats) {
- 		base_allocated += csize;
- 		/*
- 		 * Add one PAGE to base_resident for every page boundary that is
- 		 * crossed by the new allocation.
- 		 */
-@@ -144,17 +153,18 @@ base_stats_get(tsdn_t *tsdn, size_t *all
- }
- 
- bool
- base_boot(void)
- {
- 
- 	if (malloc_mutex_init(&base_mtx, "base", WITNESS_RANK_BASE))
- 		return (true);
--	extent_tree_szad_new(&base_avail_szad);
-+	base_extent_sn_next = 0;
-+	extent_tree_szsnad_new(&base_avail_szsnad);
- 	base_nodes = NULL;
- 
- 	return (false);
- }
- 
- void
- base_prefork(tsdn_t *tsdn)
- {
-diff --git a/memory/jemalloc/src/src/chunk.c b/memory/jemalloc/src/src/chunk.c
---- a/memory/jemalloc/src/src/chunk.c
-+++ b/memory/jemalloc/src/src/chunk.c
-@@ -45,19 +45,19 @@ const chunk_hooks_t	chunk_hooks_default 
- 
- /******************************************************************************/
- /*
-  * Function prototypes for static functions that are referenced prior to
-  * definition.
-  */
- 
- static void	chunk_record(tsdn_t *tsdn, arena_t *arena,
--    chunk_hooks_t *chunk_hooks, extent_tree_t *chunks_szad,
--    extent_tree_t *chunks_ad, bool cache, void *chunk, size_t size, bool zeroed,
--    bool committed);
-+    chunk_hooks_t *chunk_hooks, extent_tree_t *chunks_szsnad,
-+    extent_tree_t *chunks_ad, bool cache, void *chunk, size_t size, size_t sn,
-+    bool zeroed, bool committed);
- 
- /******************************************************************************/
- 
- static chunk_hooks_t
- chunk_hooks_get_locked(arena_t *arena)
- {
- 
- 	return (arena->chunk_hooks);
-@@ -178,135 +178,137 @@ chunk_deregister(const void *chunk, cons
- 		size_t size = extent_node_size_get(node);
- 		size_t nsub = (size == 0) ? 1 : size / chunksize;
- 		assert(atomic_read_z(&curchunks) >= nsub);
- 		atomic_sub_z(&curchunks, nsub);
- 	}
- }
- 
- /*
-- * Do first-best-fit chunk selection, i.e. select the lowest chunk that best
-- * fits.
-+ * Do first-best-fit chunk selection, i.e. select the oldest/lowest chunk that
-+ * best fits.
-  */
- static extent_node_t *
--chunk_first_best_fit(arena_t *arena, extent_tree_t *chunks_szad,
--    extent_tree_t *chunks_ad, size_t size)
-+chunk_first_best_fit(arena_t *arena, extent_tree_t *chunks_szsnad, size_t size)
- {
- 	extent_node_t key;
- 
- 	assert(size == CHUNK_CEILING(size));
- 
--	extent_node_init(&key, arena, NULL, size, false, false);
--	return (extent_tree_szad_nsearch(chunks_szad, &key));
-+	extent_node_init(&key, arena, NULL, size, 0, false, false);
-+	return (extent_tree_szsnad_nsearch(chunks_szsnad, &key));
- }
- 
- static void *
- chunk_recycle(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    extent_tree_t *chunks_szad, extent_tree_t *chunks_ad, bool cache,
--    void *new_addr, size_t size, size_t alignment, bool *zero, bool *commit,
--    bool dalloc_node)
-+    extent_tree_t *chunks_szsnad, extent_tree_t *chunks_ad, bool cache,
-+    void *new_addr, size_t size, size_t alignment, size_t *sn, bool *zero,
-+    bool *commit, bool dalloc_node)
- {
- 	void *ret;
- 	extent_node_t *node;
- 	size_t alloc_size, leadsize, trailsize;
- 	bool zeroed, committed;
- 
-+	assert(CHUNK_CEILING(size) == size);
-+	assert(alignment > 0);
- 	assert(new_addr == NULL || alignment == chunksize);
-+	assert(CHUNK_ADDR2BASE(new_addr) == new_addr);
- 	/*
- 	 * Cached chunks use the node linkage embedded in their headers, in
- 	 * which case dalloc_node is true, and new_addr is non-NULL because
- 	 * we're operating on a specific chunk.
- 	 */
- 	assert(dalloc_node || new_addr != NULL);
- 
--	alloc_size = CHUNK_CEILING(s2u(size + alignment - chunksize));
-+	alloc_size = size + CHUNK_CEILING(alignment) - chunksize;
- 	/* Beware size_t wrap-around. */
- 	if (alloc_size < size)
- 		return (NULL);
- 	malloc_mutex_lock(tsdn, &arena->chunks_mtx);
- 	chunk_hooks_assure_initialized_locked(tsdn, arena, chunk_hooks);
- 	if (new_addr != NULL) {
- 		extent_node_t key;
--		extent_node_init(&key, arena, new_addr, alloc_size, false,
-+		extent_node_init(&key, arena, new_addr, alloc_size, 0, false,
- 		    false);
- 		node = extent_tree_ad_search(chunks_ad, &key);
- 	} else {
--		node = chunk_first_best_fit(arena, chunks_szad, chunks_ad,
--		    alloc_size);
-+		node = chunk_first_best_fit(arena, chunks_szsnad, alloc_size);
- 	}
- 	if (node == NULL || (new_addr != NULL && extent_node_size_get(node) <
- 	    size)) {
- 		malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
- 		return (NULL);
- 	}
- 	leadsize = ALIGNMENT_CEILING((uintptr_t)extent_node_addr_get(node),
- 	    alignment) - (uintptr_t)extent_node_addr_get(node);
- 	assert(new_addr == NULL || leadsize == 0);
- 	assert(extent_node_size_get(node) >= leadsize + size);
- 	trailsize = extent_node_size_get(node) - leadsize - size;
- 	ret = (void *)((uintptr_t)extent_node_addr_get(node) + leadsize);
-+	*sn = extent_node_sn_get(node);
- 	zeroed = extent_node_zeroed_get(node);
- 	if (zeroed)
- 		*zero = true;
- 	committed = extent_node_committed_get(node);
- 	if (committed)
- 		*commit = true;
- 	/* Split the lead. */
- 	if (leadsize != 0 &&
- 	    chunk_hooks->split(extent_node_addr_get(node),
- 	    extent_node_size_get(node), leadsize, size, false, arena->ind)) {
- 		malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
- 		return (NULL);
- 	}
- 	/* Remove node from the tree. */
--	extent_tree_szad_remove(chunks_szad, node);
-+	extent_tree_szsnad_remove(chunks_szsnad, node);
- 	extent_tree_ad_remove(chunks_ad, node);
- 	arena_chunk_cache_maybe_remove(arena, node, cache);
- 	if (leadsize != 0) {
- 		/* Insert the leading space as a smaller chunk. */
- 		extent_node_size_set(node, leadsize);
--		extent_tree_szad_insert(chunks_szad, node);
-+		extent_tree_szsnad_insert(chunks_szsnad, node);
- 		extent_tree_ad_insert(chunks_ad, node);
- 		arena_chunk_cache_maybe_insert(arena, node, cache);
- 		node = NULL;
- 	}
- 	if (trailsize != 0) {
- 		/* Split the trail. */
- 		if (chunk_hooks->split(ret, size + trailsize, size,
- 		    trailsize, false, arena->ind)) {
- 			if (dalloc_node && node != NULL)
- 				arena_node_dalloc(tsdn, arena, node);
- 			malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
--			chunk_record(tsdn, arena, chunk_hooks, chunks_szad,
--			    chunks_ad, cache, ret, size + trailsize, zeroed,
--			    committed);
-+			chunk_record(tsdn, arena, chunk_hooks, chunks_szsnad,
-+			    chunks_ad, cache, ret, size + trailsize, *sn,
-+			    zeroed, committed);
- 			return (NULL);
- 		}
- 		/* Insert the trailing space as a smaller chunk. */
- 		if (node == NULL) {
- 			node = arena_node_alloc(tsdn, arena);
- 			if (node == NULL) {
- 				malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
- 				chunk_record(tsdn, arena, chunk_hooks,
--				    chunks_szad, chunks_ad, cache, ret, size +
--				    trailsize, zeroed, committed);
-+				    chunks_szsnad, chunks_ad, cache, ret, size
-+				    + trailsize, *sn, zeroed, committed);
- 				return (NULL);
- 			}
- 		}
- 		extent_node_init(node, arena, (void *)((uintptr_t)(ret) + size),
--		    trailsize, zeroed, committed);
--		extent_tree_szad_insert(chunks_szad, node);
-+		    trailsize, *sn, zeroed, committed);
-+		extent_tree_szsnad_insert(chunks_szsnad, node);
- 		extent_tree_ad_insert(chunks_ad, node);
- 		arena_chunk_cache_maybe_insert(arena, node, cache);
- 		node = NULL;
- 	}
- 	if (!committed && chunk_hooks->commit(ret, size, 0, size, arena->ind)) {
- 		malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
--		chunk_record(tsdn, arena, chunk_hooks, chunks_szad, chunks_ad,
--		    cache, ret, size, zeroed, committed);
-+		chunk_record(tsdn, arena, chunk_hooks, chunks_szsnad, chunks_ad,
-+		    cache, ret, size, *sn, zeroed, committed);
- 		return (NULL);
- 	}
- 	malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
- 
- 	assert(dalloc_node || node != NULL);
- 	if (dalloc_node && node != NULL)
- 		arena_node_dalloc(tsdn, arena, node);
- 	if (*zero) {
-@@ -380,29 +382,29 @@ chunk_alloc_base(size_t size)
- 	if (config_valgrind)
- 		JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
- 
- 	return (ret);
- }
- 
- void *
- chunk_alloc_cache(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    void *new_addr, size_t size, size_t alignment, bool *zero, bool *commit,
--    bool dalloc_node)
-+    void *new_addr, size_t size, size_t alignment, size_t *sn, bool *zero,
-+    bool *commit, bool dalloc_node)
- {
- 	void *ret;
- 
- 	assert(size != 0);
- 	assert((size & chunksize_mask) == 0);
- 	assert(alignment != 0);
- 	assert((alignment & chunksize_mask) == 0);
- 
- 	ret = chunk_recycle(tsdn, arena, chunk_hooks,
--	    &arena->chunks_szad_cached, &arena->chunks_ad_cached, true,
--	    new_addr, size, alignment, zero, commit, dalloc_node);
-+	    &arena->chunks_szsnad_cached, &arena->chunks_ad_cached, true,
-+	    new_addr, size, alignment, sn, zero, commit, dalloc_node);
- 	if (ret == NULL)
- 		return (NULL);
- 	if (config_valgrind)
- 		JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(ret, size);
- 	return (ret);
- }
- 
- static arena_t *
-@@ -446,102 +448,108 @@ chunk_alloc_default(void *new_addr, size
- 	arena = chunk_arena_get(tsdn, arena_ind);
- 
- 	return (chunk_alloc_default_impl(tsdn, arena, new_addr, size, alignment,
- 	    zero, commit));
- }
- 
- static void *
- chunk_alloc_retained(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    void *new_addr, size_t size, size_t alignment, bool *zero, bool *commit)
-+    void *new_addr, size_t size, size_t alignment, size_t *sn, bool *zero,
-+    bool *commit)
- {
- 	void *ret;
- 
- 	assert(size != 0);
- 	assert((size & chunksize_mask) == 0);
- 	assert(alignment != 0);
- 	assert((alignment & chunksize_mask) == 0);
- 
- 	ret = chunk_recycle(tsdn, arena, chunk_hooks,
--	    &arena->chunks_szad_retained, &arena->chunks_ad_retained, false,
--	    new_addr, size, alignment, zero, commit, true);
-+	    &arena->chunks_szsnad_retained, &arena->chunks_ad_retained, false,
-+	    new_addr, size, alignment, sn, zero, commit, true);
- 
- 	if (config_stats && ret != NULL)
- 		arena->stats.retained -= size;
- 
- 	return (ret);
- }
- 
- void *
- chunk_alloc_wrapper(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    void *new_addr, size_t size, size_t alignment, bool *zero, bool *commit)
-+    void *new_addr, size_t size, size_t alignment, size_t *sn, bool *zero,
-+    bool *commit)
- {
- 	void *ret;
- 
- 	chunk_hooks_assure_initialized(tsdn, arena, chunk_hooks);
- 
- 	ret = chunk_alloc_retained(tsdn, arena, chunk_hooks, new_addr, size,
--	    alignment, zero, commit);
-+	    alignment, sn, zero, commit);
- 	if (ret == NULL) {
- 		if (chunk_hooks->alloc == chunk_alloc_default) {
- 			/* Call directly to propagate tsdn. */
- 			ret = chunk_alloc_default_impl(tsdn, arena, new_addr,
- 			    size, alignment, zero, commit);
- 		} else {
- 			ret = chunk_hooks->alloc(new_addr, size, alignment,
- 			    zero, commit, arena->ind);
- 		}
- 
- 		if (ret == NULL)
- 			return (NULL);
- 
-+		*sn = arena_extent_sn_next(arena);
-+
- 		if (config_valgrind && chunk_hooks->alloc !=
- 		    chunk_alloc_default)
- 			JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(ret, chunksize);
- 	}
- 
- 	return (ret);
- }
- 
- static void
- chunk_record(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    extent_tree_t *chunks_szad, extent_tree_t *chunks_ad, bool cache,
--    void *chunk, size_t size, bool zeroed, bool committed)
-+    extent_tree_t *chunks_szsnad, extent_tree_t *chunks_ad, bool cache,
-+    void *chunk, size_t size, size_t sn, bool zeroed, bool committed)
- {
- 	bool unzeroed;
- 	extent_node_t *node, *prev;
- 	extent_node_t key;
- 
- 	assert(!cache || !zeroed);
- 	unzeroed = cache || !zeroed;
- 	JEMALLOC_VALGRIND_MAKE_MEM_NOACCESS(chunk, size);
- 
- 	malloc_mutex_lock(tsdn, &arena->chunks_mtx);
- 	chunk_hooks_assure_initialized_locked(tsdn, arena, chunk_hooks);
--	extent_node_init(&key, arena, (void *)((uintptr_t)chunk + size), 0,
-+	extent_node_init(&key, arena, (void *)((uintptr_t)chunk + size), 0, 0,
- 	    false, false);
- 	node = extent_tree_ad_nsearch(chunks_ad, &key);
- 	/* Try to coalesce forward. */
- 	if (node != NULL && extent_node_addr_get(node) ==
- 	    extent_node_addr_get(&key) && extent_node_committed_get(node) ==
- 	    committed && !chunk_hooks->merge(chunk, size,
- 	    extent_node_addr_get(node), extent_node_size_get(node), false,
- 	    arena->ind)) {
- 		/*
- 		 * Coalesce chunk with the following address range.  This does
- 		 * not change the position within chunks_ad, so only
--		 * remove/insert from/into chunks_szad.
-+		 * remove/insert from/into chunks_szsnad.
- 		 */
--		extent_tree_szad_remove(chunks_szad, node);
-+		extent_tree_szsnad_remove(chunks_szsnad, node);
- 		arena_chunk_cache_maybe_remove(arena, node, cache);
- 		extent_node_addr_set(node, chunk);
- 		extent_node_size_set(node, size + extent_node_size_get(node));
-+		if (sn < extent_node_sn_get(node))
-+			extent_node_sn_set(node, sn);
- 		extent_node_zeroed_set(node, extent_node_zeroed_get(node) &&
- 		    !unzeroed);
--		extent_tree_szad_insert(chunks_szad, node);
-+		extent_tree_szsnad_insert(chunks_szsnad, node);
- 		arena_chunk_cache_maybe_insert(arena, node, cache);
- 	} else {
- 		/* Coalescing forward failed, so insert a new node. */
- 		node = arena_node_alloc(tsdn, arena);
- 		if (node == NULL) {
- 			/*
- 			 * Node allocation failed, which is an exceedingly
- 			 * unlikely failure.  Leak chunk after making sure its
-@@ -549,67 +557,70 @@ chunk_record(tsdn_t *tsdn, arena_t *aren
- 			 * a virtual memory leak.
- 			 */
- 			if (cache) {
- 				chunk_purge_wrapper(tsdn, arena, chunk_hooks,
- 				    chunk, size, 0, size);
- 			}
- 			goto label_return;
- 		}
--		extent_node_init(node, arena, chunk, size, !unzeroed,
-+		extent_node_init(node, arena, chunk, size, sn, !unzeroed,
- 		    committed);
- 		extent_tree_ad_insert(chunks_ad, node);
--		extent_tree_szad_insert(chunks_szad, node);
-+		extent_tree_szsnad_insert(chunks_szsnad, node);
- 		arena_chunk_cache_maybe_insert(arena, node, cache);
- 	}
- 
- 	/* Try to coalesce backward. */
- 	prev = extent_tree_ad_prev(chunks_ad, node);
- 	if (prev != NULL && (void *)((uintptr_t)extent_node_addr_get(prev) +
- 	    extent_node_size_get(prev)) == chunk &&
- 	    extent_node_committed_get(prev) == committed &&
- 	    !chunk_hooks->merge(extent_node_addr_get(prev),
- 	    extent_node_size_get(prev), chunk, size, false, arena->ind)) {
- 		/*
- 		 * Coalesce chunk with the previous address range.  This does
- 		 * not change the position within chunks_ad, so only
--		 * remove/insert node from/into chunks_szad.
-+		 * remove/insert node from/into chunks_szsnad.
- 		 */
--		extent_tree_szad_remove(chunks_szad, prev);
-+		extent_tree_szsnad_remove(chunks_szsnad, prev);
- 		extent_tree_ad_remove(chunks_ad, prev);
- 		arena_chunk_cache_maybe_remove(arena, prev, cache);
--		extent_tree_szad_remove(chunks_szad, node);
-+		extent_tree_szsnad_remove(chunks_szsnad, node);
- 		arena_chunk_cache_maybe_remove(arena, node, cache);
- 		extent_node_addr_set(node, extent_node_addr_get(prev));
- 		extent_node_size_set(node, extent_node_size_get(prev) +
- 		    extent_node_size_get(node));
-+		if (extent_node_sn_get(prev) < extent_node_sn_get(node))
-+			extent_node_sn_set(node, extent_node_sn_get(prev));
- 		extent_node_zeroed_set(node, extent_node_zeroed_get(prev) &&
- 		    extent_node_zeroed_get(node));
--		extent_tree_szad_insert(chunks_szad, node);
-+		extent_tree_szsnad_insert(chunks_szsnad, node);
- 		arena_chunk_cache_maybe_insert(arena, node, cache);
- 
- 		arena_node_dalloc(tsdn, arena, prev);
- 	}
- 
- label_return:
- 	malloc_mutex_unlock(tsdn, &arena->chunks_mtx);
- }
- 
- void
- chunk_dalloc_cache(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    void *chunk, size_t size, bool committed)
-+    void *chunk, size_t size, size_t sn, bool committed)
- {
- 
- 	assert(chunk != NULL);
- 	assert(CHUNK_ADDR2BASE(chunk) == chunk);
- 	assert(size != 0);
- 	assert((size & chunksize_mask) == 0);
- 
--	chunk_record(tsdn, arena, chunk_hooks, &arena->chunks_szad_cached,
--	    &arena->chunks_ad_cached, true, chunk, size, false, committed);
-+	chunk_record(tsdn, arena, chunk_hooks, &arena->chunks_szsnad_cached,
-+	    &arena->chunks_ad_cached, true, chunk, size, sn, false,
-+	    committed);
- 	arena_maybe_purge(tsdn, arena);
- }
- 
- static bool
- chunk_dalloc_default_impl(void *chunk, size_t size)
- {
- 
- 	if (!have_dss || !chunk_in_dss(chunk))
-@@ -622,17 +633,17 @@ chunk_dalloc_default(void *chunk, size_t
-     unsigned arena_ind)
- {
- 
- 	return (chunk_dalloc_default_impl(chunk, size));
- }
- 
- void
- chunk_dalloc_wrapper(tsdn_t *tsdn, arena_t *arena, chunk_hooks_t *chunk_hooks,
--    void *chunk, size_t size, bool zeroed, bool committed)
-+    void *chunk, size_t size, size_t sn, bool zeroed, bool committed)
- {
- 	bool err;
- 
- 	assert(chunk != NULL);
- 	assert(CHUNK_ADDR2BASE(chunk) == chunk);
- 	assert(size != 0);
- 	assert((size & chunksize_mask) == 0);
- 
-@@ -648,18 +659,19 @@ chunk_dalloc_wrapper(tsdn_t *tsdn, arena
- 		return;
- 	/* Try to decommit; purge if that fails. */
- 	if (committed) {
- 		committed = chunk_hooks->decommit(chunk, size, 0, size,
- 		    arena->ind);
- 	}
- 	zeroed = !committed || !chunk_hooks->purge(chunk, size, 0, size,
- 	    arena->ind);
--	chunk_record(tsdn, arena, chunk_hooks, &arena->chunks_szad_retained,
--	    &arena->chunks_ad_retained, false, chunk, size, zeroed, committed);
-+	chunk_record(tsdn, arena, chunk_hooks, &arena->chunks_szsnad_retained,
-+	    &arena->chunks_ad_retained, false, chunk, size, sn, zeroed,
-+	    committed);
- 
- 	if (config_stats)
- 		arena->stats.retained += size;
- }
- 
- static bool
- chunk_commit_default(void *chunk, size_t size, size_t offset, size_t length,
-     unsigned arena_ind)
-diff --git a/memory/jemalloc/src/src/chunk_dss.c b/memory/jemalloc/src/src/chunk_dss.c
---- a/memory/jemalloc/src/src/chunk_dss.c
-+++ b/memory/jemalloc/src/src/chunk_dss.c
-@@ -157,17 +157,18 @@ chunk_alloc_dss(tsdn_t *tsdn, arena_t *a
- 			dss_prev = chunk_dss_sbrk(incr);
- 			if (dss_prev == max_cur) {
- 				/* Success. */
- 				if (cpad_size != 0) {
- 					chunk_hooks_t chunk_hooks =
- 					    CHUNK_HOOKS_INITIALIZER;
- 					chunk_dalloc_wrapper(tsdn, arena,
- 					    &chunk_hooks, cpad, cpad_size,
--					    false, true);
-+					    arena_extent_sn_next(arena), false,
-+					    true);
- 				}
- 				if (*zero) {
- 					JEMALLOC_VALGRIND_MAKE_MEM_UNDEFINED(
- 					    ret, size);
- 					memset(ret, 0, size);
- 				}
- 				if (!*commit)
- 					*commit = pages_decommit(ret, size);
-diff --git a/memory/jemalloc/src/src/extent.c b/memory/jemalloc/src/src/extent.c
---- a/memory/jemalloc/src/src/extent.c
-+++ b/memory/jemalloc/src/src/extent.c
-@@ -1,53 +1,77 @@
- #define	JEMALLOC_EXTENT_C_
- #include "jemalloc/internal/jemalloc_internal.h"
- 
- /******************************************************************************/
- 
-+/*
-+ * Round down to the nearest chunk size that can actually be requested during
-+ * normal huge allocation.
-+ */
- JEMALLOC_INLINE_C size_t
- extent_quantize(size_t size)
- {
-+	size_t ret;
-+	szind_t ind;
- 
--	/*
--	 * Round down to the nearest chunk size that can actually be requested
--	 * during normal huge allocation.
--	 */
--	return (index2size(size2index(size + 1) - 1));
-+	assert(size > 0);
-+
-+	ind = size2index(size + 1);
-+	if (ind == 0) {
-+		/* Avoid underflow. */
-+		return (index2size(0));
-+	}
-+	ret = index2size(ind - 1);
-+	assert(ret <= size);
-+	return (ret);
- }
- 
- JEMALLOC_INLINE_C int
--extent_szad_comp(const extent_node_t *a, const extent_node_t *b)
-+extent_sz_comp(const extent_node_t *a, const extent_node_t *b)
- {
--	int ret;
- 	size_t a_qsize = extent_quantize(extent_node_size_get(a));
- 	size_t b_qsize = extent_quantize(extent_node_size_get(b));
- 
--	/*
--	 * Compare based on quantized size rather than size, in order to sort
--	 * equally useful extents only by address.
--	 */
--	ret = (a_qsize > b_qsize) - (a_qsize < b_qsize);
--	if (ret == 0) {
--		uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a);
--		uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b);
--
--		ret = (a_addr > b_addr) - (a_addr < b_addr);
--	}
--
--	return (ret);
-+	return ((a_qsize > b_qsize) - (a_qsize < b_qsize));
- }
- 
--/* Generate red-black tree functions. */
--rb_gen(, extent_tree_szad_, extent_tree_t, extent_node_t, szad_link,
--    extent_szad_comp)
-+JEMALLOC_INLINE_C int
-+extent_sn_comp(const extent_node_t *a, const extent_node_t *b)
-+{
-+	size_t a_sn = extent_node_sn_get(a);
-+	size_t b_sn = extent_node_sn_get(b);
-+
-+	return ((a_sn > b_sn) - (a_sn < b_sn));
-+}
- 
- JEMALLOC_INLINE_C int
- extent_ad_comp(const extent_node_t *a, const extent_node_t *b)
- {
- 	uintptr_t a_addr = (uintptr_t)extent_node_addr_get(a);
- 	uintptr_t b_addr = (uintptr_t)extent_node_addr_get(b);
- 
- 	return ((a_addr > b_addr) - (a_addr < b_addr));
- }
- 
-+JEMALLOC_INLINE_C int
-+extent_szsnad_comp(const extent_node_t *a, const extent_node_t *b)
-+{
-+	int ret;
-+
-+	ret = extent_sz_comp(a, b);
-+	if (ret != 0)
-+		return (ret);
-+
-+	ret = extent_sn_comp(a, b);
-+	if (ret != 0)
-+		return (ret);
-+
-+	ret = extent_ad_comp(a, b);
-+	return (ret);
-+}
-+
-+/* Generate red-black tree functions. */
-+rb_gen(, extent_tree_szsnad_, extent_tree_t, extent_node_t, szsnad_link,
-+    extent_szsnad_comp)
-+
- /* Generate red-black tree functions. */
- rb_gen(, extent_tree_ad_, extent_tree_t, extent_node_t, ad_link, extent_ad_comp)
-diff --git a/memory/jemalloc/src/src/huge.c b/memory/jemalloc/src/src/huge.c
---- a/memory/jemalloc/src/src/huge.c
-+++ b/memory/jemalloc/src/src/huge.c
-@@ -51,51 +51,53 @@ huge_malloc(tsdn_t *tsdn, arena_t *arena
- void *
- huge_palloc(tsdn_t *tsdn, arena_t *arena, size_t usize, size_t alignment,
-     bool zero)
- {
- 	void *ret;
- 	size_t ausize;
- 	arena_t *iarena;
- 	extent_node_t *node;
-+	size_t sn;
- 	bool is_zeroed;
- 
- 	/* Allocate one or more contiguous chunks for this request. */
- 
- 	assert(!tsdn_null(tsdn) || arena != NULL);
- 
- 	ausize = sa2u(usize, alignment);
- 	if (unlikely(ausize == 0 || ausize > HUGE_MAXCLASS))
- 		return (NULL);
- 	assert(ausize >= chunksize);
- 
- 	/* Allocate an extent node with which to track the chunk. */
--	iarena = (!tsdn_null(tsdn)) ? arena_ichoose(tsdn_tsd(tsdn), NULL) : a0get();
-+	iarena = (!tsdn_null(tsdn)) ? arena_ichoose(tsdn_tsd(tsdn), NULL) :
-+	    a0get();
- 	node = ipallocztm(tsdn, CACHELINE_CEILING(sizeof(extent_node_t)),
- 	    CACHELINE, false, NULL, true, iarena);
- 	if (node == NULL)
- 		return (NULL);
- 
- 	/*
- 	 * Copy zero into is_zeroed and pass the copy to chunk_alloc(), so that
- 	 * it is possible to make correct junk/zero fill decisions below.
- 	 */
- 	is_zeroed = zero;
- 	if (likely(!tsdn_null(tsdn)))
- 		arena = arena_choose(tsdn_tsd(tsdn), arena);
- 	if (unlikely(arena == NULL) || (ret = arena_chunk_alloc_huge(tsdn,
--	    arena, usize, alignment, &is_zeroed)) == NULL) {
-+	    arena, usize, alignment, &sn, &is_zeroed)) == NULL) {
- 		idalloctm(tsdn, node, NULL, true, true);
- 		return (NULL);
- 	}
- 
--	extent_node_init(node, arena, ret, usize, is_zeroed, true);
-+	extent_node_init(node, arena, ret, usize, sn, is_zeroed, true);
- 
- 	if (huge_node_set(tsdn, ret, node)) {
--		arena_chunk_dalloc_huge(tsdn, arena, ret, usize);
-+		arena_chunk_dalloc_huge(tsdn, arena, ret, usize, sn);
- 		idalloctm(tsdn, node, NULL, true, true);
- 		return (NULL);
- 	}
- 
- 	/* Insert node into huge. */
- 	malloc_mutex_lock(tsdn, &arena->huge_mtx);
- 	ql_elm_new(node, ql_link);
- 	ql_tail_insert(&arena->huge, node, ql_link);
-@@ -240,17 +242,18 @@ huge_ralloc_no_move_shrink(tsdn_t *tsdn,
- 	huge_node_unset(ptr, node);
- 	extent_node_size_set(node, usize);
- 	huge_node_reset(tsdn, ptr, node);
- 	/* Update zeroed. */
- 	extent_node_zeroed_set(node, post_zeroed);
- 	malloc_mutex_unlock(tsdn, &arena->huge_mtx);
- 
- 	/* Zap the excess chunks. */
--	arena_chunk_ralloc_huge_shrink(tsdn, arena, ptr, oldsize, usize);
-+	arena_chunk_ralloc_huge_shrink(tsdn, arena, ptr, oldsize, usize,
-+	    extent_node_sn_get(node));
- 
- 	return (false);
- }
- 
- static bool
- huge_ralloc_no_move_expand(tsdn_t *tsdn, void *ptr, size_t oldsize,
-     size_t usize, bool zero) {
- 	extent_node_t *node;
-@@ -402,17 +405,18 @@ huge_dalloc(tsdn_t *tsdn, void *ptr)
- 	huge_node_unset(ptr, node);
- 	malloc_mutex_lock(tsdn, &arena->huge_mtx);
- 	ql_remove(&arena->huge, node, ql_link);
- 	malloc_mutex_unlock(tsdn, &arena->huge_mtx);
- 
- 	huge_dalloc_junk(extent_node_addr_get(node),
- 	    extent_node_size_get(node));
- 	arena_chunk_dalloc_huge(tsdn, extent_node_arena_get(node),
--	    extent_node_addr_get(node), extent_node_size_get(node));
-+	    extent_node_addr_get(node), extent_node_size_get(node),
-+	    extent_node_sn_get(node));
- 	idalloctm(tsdn, node, NULL, true, true);
- 
- 	arena_decay_tick(tsdn, arena);
- }
- 
- arena_t *
- huge_aalloc(const void *ptr)
- {
-diff --git a/memory/jemalloc/src/src/jemalloc.c b/memory/jemalloc/src/src/jemalloc.c
---- a/memory/jemalloc/src/src/jemalloc.c
-+++ b/memory/jemalloc/src/src/jemalloc.c
-@@ -1051,51 +1051,62 @@ malloc_conf_init(void)
- 				else {					\
- 					malloc_conf_error(		\
- 					    "Invalid conf value",	\
- 					    k, klen, v, vlen);		\
- 				}					\
- 				if (cont)				\
- 					continue;			\
- 			}
--#define	CONF_HANDLE_T_U(t, o, n, min, max, clip)			\
-+#define	CONF_MIN_no(um, min)	false
-+#define	CONF_MIN_yes(um, min)	((um) < (min))
-+#define	CONF_MAX_no(um, max)	false
-+#define	CONF_MAX_yes(um, max)	((um) > (max))
-+#define	CONF_HANDLE_T_U(t, o, n, min, max, check_min, check_max, clip)	\
- 			if (CONF_MATCH(n)) {				\
- 				uintmax_t um;				\
- 				char *end;				\
- 									\
- 				set_errno(0);				\
- 				um = malloc_strtoumax(v, &end, 0);	\
- 				if (get_errno() != 0 || (uintptr_t)end -\
- 				    (uintptr_t)v != vlen) {		\
- 					malloc_conf_error(		\
- 					    "Invalid conf value",	\
- 					    k, klen, v, vlen);		\
- 				} else if (clip) {			\
--					if ((min) != 0 && um < (min))	\
-+					if (CONF_MIN_##check_min(um,	\
-+					    (min)))			\
- 						o = (t)(min);		\
--					else if (um > (max))		\
-+					else if (CONF_MAX_##check_max(	\
-+					    um, (max)))			\
- 						o = (t)(max);		\
- 					else				\
- 						o = (t)um;		\
- 				} else {				\
--					if (((min) != 0 && um < (min))	\
--					    || um > (max)) {		\
-+					if (CONF_MIN_##check_min(um,	\
-+					    (min)) ||			\
-+					    CONF_MAX_##check_max(um,	\
-+					    (max))) {			\
- 						malloc_conf_error(	\
- 						    "Out-of-range "	\
- 						    "conf value",	\
- 						    k, klen, v, vlen);	\
- 					} else				\
- 						o = (t)um;		\
- 				}					\
- 				continue;				\
- 			}
--#define	CONF_HANDLE_UNSIGNED(o, n, min, max, clip)			\
--			CONF_HANDLE_T_U(unsigned, o, n, min, max, clip)
--#define	CONF_HANDLE_SIZE_T(o, n, min, max, clip)			\
--			CONF_HANDLE_T_U(size_t, o, n, min, max, clip)
-+#define	CONF_HANDLE_UNSIGNED(o, n, min, max, check_min, check_max,	\
-+    clip)								\
-+			CONF_HANDLE_T_U(unsigned, o, n, min, max,	\
-+			    check_min, check_max, clip)
-+#define	CONF_HANDLE_SIZE_T(o, n, min, max, check_min, check_max, clip)	\
-+			CONF_HANDLE_T_U(size_t, o, n, min, max,		\
-+			    check_min, check_max, clip)
- #define	CONF_HANDLE_SSIZE_T(o, n, min, max)				\
- 			if (CONF_MATCH(n)) {				\
- 				long l;					\
- 				char *end;				\
- 									\
- 				set_errno(0);				\
- 				l = strtol(v, &end, 0);			\
- 				if (get_errno() != 0 || (uintptr_t)end -\
-@@ -1128,17 +1139,17 @@ malloc_conf_init(void)
- 			 * as many as 2^(LG_SIZE_CLASS_GROUP+1) data pages, and
- 			 * possibly an additional page in the presence of
- 			 * redzones.  In order to simplify options processing,
- 			 * use a conservative bound that accommodates all these
- 			 * constraints.
- 			 */
- 			CONF_HANDLE_SIZE_T(opt_lg_chunk, "lg_chunk", LG_PAGE +
- 			    LG_SIZE_CLASS_GROUP + (config_fill ? 2 : 1),
--			    (sizeof(size_t) << 3) - 1, true)
-+			    (sizeof(size_t) << 3) - 1, yes, yes, true)
- 			if (strncmp("dss", k, klen) == 0) {
- 				int i;
- 				bool match = false;
- 				for (i = 0; i < dss_prec_limit; i++) {
- 					if (strncmp(dss_prec_names[i], v, vlen)
- 					    == 0) {
- 						if (chunk_dss_prec_set(i)) {
- 							malloc_conf_error(
-@@ -1154,17 +1165,17 @@ malloc_conf_init(void)
- 				}
- 				if (!match) {
- 					malloc_conf_error("Invalid conf value",
- 					    k, klen, v, vlen);
- 				}
- 				continue;
- 			}
- 			CONF_HANDLE_UNSIGNED(opt_narenas, "narenas", 1,
--			    UINT_MAX, false)
-+			    UINT_MAX, yes, no, false)
- 			if (strncmp("purge", k, klen) == 0) {
- 				int i;
- 				bool match = false;
- 				for (i = 0; i < purge_mode_limit; i++) {
- 					if (strncmp(purge_mode_names[i], v,
- 					    vlen) == 0) {
- 						opt_purge = (purge_mode_t)i;
- 						match = true;
-@@ -1225,17 +1236,17 @@ malloc_conf_init(void)
- 					} else {
- 						malloc_conf_error(
- 						    "Invalid conf value", k,
- 						    klen, v, vlen);
- 					}
- 					continue;
- 				}
- 				CONF_HANDLE_SIZE_T(opt_quarantine, "quarantine",
--				    0, SIZE_T_MAX, false)
-+				    0, SIZE_T_MAX, no, no, false)
- 				CONF_HANDLE_BOOL(opt_redzone, "redzone", true)
- 				CONF_HANDLE_BOOL(opt_zero, "zero", true)
- 			}
- 			if (config_utrace) {
- 				CONF_HANDLE_BOOL(opt_utrace, "utrace", true)
- 			}
- 			if (config_xmalloc) {
- 				CONF_HANDLE_BOOL(opt_xmalloc, "xmalloc", true)
-@@ -1262,34 +1273,41 @@ malloc_conf_init(void)
- 				CONF_HANDLE_BOOL(opt_prof, "prof", true)
- 				CONF_HANDLE_CHAR_P(opt_prof_prefix,
- 				    "prof_prefix", "jeprof")
- 				CONF_HANDLE_BOOL(opt_prof_active, "prof_active",
- 				    true)
- 				CONF_HANDLE_BOOL(opt_prof_thread_active_init,
- 				    "prof_thread_active_init", true)
- 				CONF_HANDLE_SIZE_T(opt_lg_prof_sample,
--				    "lg_prof_sample", 0,
--				    (sizeof(uint64_t) << 3) - 1, true)
-+				    "lg_prof_sample", 0, (sizeof(uint64_t) << 3)
-+				    - 1, no, yes, true)
- 				CONF_HANDLE_BOOL(opt_prof_accum, "prof_accum",
- 				    true)
- 				CONF_HANDLE_SSIZE_T(opt_lg_prof_interval,
- 				    "lg_prof_interval", -1,
- 				    (sizeof(uint64_t) << 3) - 1)
- 				CONF_HANDLE_BOOL(opt_prof_gdump, "prof_gdump",
- 				    true)
- 				CONF_HANDLE_BOOL(opt_prof_final, "prof_final",
- 				    true)
- 				CONF_HANDLE_BOOL(opt_prof_leak, "prof_leak",
- 				    true)
- 			}
- 			malloc_conf_error("Invalid conf pair", k, klen, v,
- 			    vlen);
- #undef CONF_MATCH
-+#undef CONF_MATCH_VALUE
- #undef CONF_HANDLE_BOOL
-+#undef CONF_MIN_no
-+#undef CONF_MIN_yes
-+#undef CONF_MAX_no
-+#undef CONF_MAX_yes
-+#undef CONF_HANDLE_T_U
-+#undef CONF_HANDLE_UNSIGNED
- #undef CONF_HANDLE_SIZE_T
- #undef CONF_HANDLE_SSIZE_T
- #undef CONF_HANDLE_CHAR_P
- 		}
- 	}
- }
- 
- static bool
-@@ -1388,18 +1406,19 @@ malloc_init_hard_a0(void)
- static bool
- malloc_init_hard_recursible(void)
- {
- 
- 	malloc_init_state = malloc_init_recursible;
- 
- 	ncpus = malloc_ncpus();
- 
--#if (!defined(JEMALLOC_MUTEX_INIT_CB) && !defined(JEMALLOC_ZONE) \
--    && !defined(_WIN32) && !defined(__native_client__))
-+#if (defined(JEMALLOC_HAVE_PTHREAD_ATFORK) && !defined(JEMALLOC_MUTEX_INIT_CB) \
-+    && !defined(JEMALLOC_ZONE) && !defined(_WIN32) && \
-+    !defined(__native_client__))
- 	/* LinuxThreads' pthread_atfork() allocates. */
- 	if (pthread_atfork(jemalloc_prefork, jemalloc_postfork_parent,
- 	    jemalloc_postfork_child) != 0) {
- 		malloc_write("<jemalloc>: Error in pthread_atfork()\n");
- 		if (opt_abort)
- 			abort();
- 		return (true);
- 	}
-@@ -1968,18 +1987,18 @@ je_realloc(void *ptr, size_t size)
- 		tsd_t *tsd;
- 
- 		assert(usize == isalloc(tsdn, ret, config_prof));
- 		tsd = tsdn_tsd(tsdn);
- 		*tsd_thread_allocatedp_get(tsd) += usize;
- 		*tsd_thread_deallocatedp_get(tsd) += old_usize;
- 	}
- 	UTRACE(ptr, size, ret);
--	JEMALLOC_VALGRIND_REALLOC(true, tsdn, ret, usize, true, ptr, old_usize,
--	    old_rzsize, true, false);
-+	JEMALLOC_VALGRIND_REALLOC(maybe, tsdn, ret, usize, maybe, ptr,
-+	    old_usize, old_rzsize, maybe, false);
- 	witness_assert_lockless(tsdn);
- 	return (ret);
- }
- 
- JEMALLOC_EXPORT void JEMALLOC_NOTHROW
- je_free(void *ptr)
- {
- 
-@@ -2395,18 +2414,18 @@ je_rallocx(void *ptr, size_t size, int f
- 	}
- 	assert(alignment == 0 || ((uintptr_t)p & (alignment - 1)) == ZU(0));
- 
- 	if (config_stats) {
- 		*tsd_thread_allocatedp_get(tsd) += usize;
- 		*tsd_thread_deallocatedp_get(tsd) += old_usize;
- 	}
- 	UTRACE(ptr, size, p);
--	JEMALLOC_VALGRIND_REALLOC(true, tsd_tsdn(tsd), p, usize, false, ptr,
--	    old_usize, old_rzsize, false, zero);
-+	JEMALLOC_VALGRIND_REALLOC(maybe, tsd_tsdn(tsd), p, usize, no, ptr,
-+	    old_usize, old_rzsize, no, zero);
- 	witness_assert_lockless(tsd_tsdn(tsd));
- 	return (p);
- label_oom:
- 	if (config_xmalloc && unlikely(opt_xmalloc)) {
- 		malloc_write("<jemalloc>: Error in rallocx(): out of memory\n");
- 		abort();
- 	}
- 	UTRACE(ptr, size, 0);
-@@ -2538,18 +2557,18 @@ je_xallocx(void *ptr, size_t size, size_
- 	}
- 	if (unlikely(usize == old_usize))
- 		goto label_not_resized;
- 
- 	if (config_stats) {
- 		*tsd_thread_allocatedp_get(tsd) += usize;
- 		*tsd_thread_deallocatedp_get(tsd) += old_usize;
- 	}
--	JEMALLOC_VALGRIND_REALLOC(false, tsd_tsdn(tsd), ptr, usize, false, ptr,
--	    old_usize, old_rzsize, false, zero);
-+	JEMALLOC_VALGRIND_REALLOC(no, tsd_tsdn(tsd), ptr, usize, no, ptr,
-+	    old_usize, old_rzsize, no, zero);
- label_not_resized:
- 	UTRACE(ptr, size, ptr);
- 	witness_assert_lockless(tsd_tsdn(tsd));
- 	return (usize);
- }
- 
- JEMALLOC_EXPORT size_t JEMALLOC_NOTHROW
- JEMALLOC_ATTR(pure)
-diff --git a/memory/jemalloc/src/src/pages.c b/memory/jemalloc/src/src/pages.c
---- a/memory/jemalloc/src/src/pages.c
-+++ b/memory/jemalloc/src/src/pages.c
-@@ -165,37 +165,66 @@ pages_decommit(void *addr, size_t size)
- bool
- pages_purge(void *addr, size_t size)
- {
- 	bool unzeroed;
- 
- #ifdef _WIN32
- 	VirtualAlloc(addr, size, MEM_RESET, PAGE_READWRITE);
- 	unzeroed = true;
--#elif defined(JEMALLOC_HAVE_MADVISE)
--#  ifdef JEMALLOC_PURGE_MADVISE_DONTNEED
-+#elif (defined(JEMALLOC_PURGE_MADVISE_FREE) || \
-+    defined(JEMALLOC_PURGE_MADVISE_DONTNEED))
-+#  if defined(JEMALLOC_PURGE_MADVISE_FREE)
-+#    define JEMALLOC_MADV_PURGE MADV_FREE
-+#    define JEMALLOC_MADV_ZEROS false
-+#  elif defined(JEMALLOC_PURGE_MADVISE_DONTNEED)
- #    define JEMALLOC_MADV_PURGE MADV_DONTNEED
- #    define JEMALLOC_MADV_ZEROS true
--#  elif defined(JEMALLOC_PURGE_MADVISE_FREE)
--#    define JEMALLOC_MADV_PURGE MADV_FREE
--#    define JEMALLOC_MADV_ZEROS false
- #  else
--#    error "No madvise(2) flag defined for purging unused dirty pages."
-+#    error No madvise(2) flag defined for purging unused dirty pages
- #  endif
- 	int err = madvise(addr, size, JEMALLOC_MADV_PURGE);
- 	unzeroed = (!JEMALLOC_MADV_ZEROS || err != 0);
- #  undef JEMALLOC_MADV_PURGE
- #  undef JEMALLOC_MADV_ZEROS
- #else
- 	/* Last resort no-op. */
- 	unzeroed = true;
- #endif
- 	return (unzeroed);
- }
- 
-+bool
-+pages_huge(void *addr, size_t size)
-+{
-+
-+	assert(PAGE_ADDR2BASE(addr) == addr);
-+	assert(PAGE_CEILING(size) == size);
-+
-+#ifdef JEMALLOC_THP
-+	return (madvise(addr, size, MADV_HUGEPAGE) != 0);
-+#else
-+	return (false);
-+#endif
-+}
-+
-+bool
-+pages_nohuge(void *addr, size_t size)
-+{
-+
-+	assert(PAGE_ADDR2BASE(addr) == addr);
-+	assert(PAGE_CEILING(size) == size);
-+
-+#ifdef JEMALLOC_THP
-+	return (madvise(addr, size, MADV_NOHUGEPAGE) != 0);
-+#else
-+	return (false);
-+#endif
-+}
-+
- #ifdef JEMALLOC_SYSCTL_VM_OVERCOMMIT
- static bool
- os_overcommits_sysctl(void)
- {
- 	int vm_overcommit;
- 	size_t sz;
- 
- 	sz = sizeof(vm_overcommit);
-@@ -214,31 +243,31 @@ os_overcommits_sysctl(void)
-  */
- static bool
- os_overcommits_proc(void)
- {
- 	int fd;
- 	char buf[1];
- 	ssize_t nread;
- 
--#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_open)
-+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_open)
- 	fd = (int)syscall(SYS_open, "/proc/sys/vm/overcommit_memory", O_RDONLY);
- #else
- 	fd = open("/proc/sys/vm/overcommit_memory", O_RDONLY);
- #endif
- 	if (fd == -1)
- 		return (false); /* Error. */
- 
--#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_read)
-+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_read)
- 	nread = (ssize_t)syscall(SYS_read, fd, &buf, sizeof(buf));
- #else
- 	nread = read(fd, &buf, sizeof(buf));
- #endif
- 
--#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_close)
-+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_close)
- 	syscall(SYS_close, fd);
- #else
- 	close(fd);
- #endif
- 
- 	if (nread < 1)
- 		return (false); /* Error. */
- 	/*
-diff --git a/memory/jemalloc/src/src/stats.c b/memory/jemalloc/src/src/stats.c
---- a/memory/jemalloc/src/src/stats.c
-+++ b/memory/jemalloc/src/src/stats.c
-@@ -1,33 +1,33 @@
- #define	JEMALLOC_STATS_C_
- #include "jemalloc/internal/jemalloc_internal.h"
- 
- #define	CTL_GET(n, v, t) do {						\
- 	size_t sz = sizeof(t);						\
--	xmallctl(n, v, &sz, NULL, 0);					\
-+	xmallctl(n, (void *)v, &sz, NULL, 0);				\
- } while (0)
- 
- #define	CTL_M2_GET(n, i, v, t) do {					\
- 	size_t mib[6];							\
- 	size_t miblen = sizeof(mib) / sizeof(size_t);			\
- 	size_t sz = sizeof(t);						\
- 	xmallctlnametomib(n, mib, &miblen);				\
- 	mib[2] = (i);							\
--	xmallctlbymib(mib, miblen, v, &sz, NULL, 0);			\
-+	xmallctlbymib(mib, miblen, (void *)v, &sz, NULL, 0);		\
- } while (0)
- 
- #define	CTL_M2_M4_GET(n, i, j, v, t) do {				\
- 	size_t mib[6];							\
- 	size_t miblen = sizeof(mib) / sizeof(size_t);			\
- 	size_t sz = sizeof(t);						\
- 	xmallctlnametomib(n, mib, &miblen);				\
- 	mib[2] = (i);							\
- 	mib[4] = (j);							\
--	xmallctlbymib(mib, miblen, v, &sz, NULL, 0);			\
-+	xmallctlbymib(mib, miblen, (void *)v, &sz, NULL, 0);		\
- } while (0)
- 
- /******************************************************************************/
- /* Data. */
- 
- bool	opt_stats_print = false;
- 
- size_t	stats_cactive = 0;
-@@ -642,17 +642,17 @@ stats_general_print(void (*write_cb)(voi
- 		} else {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "  opt."#n": %s\n", bv ? "true" : "false");	\
- 		}							\
- 	}
- #define	OPT_WRITE_BOOL_MUTABLE(n, m, c) {				\
- 	bool bv2;							\
- 	if (je_mallctl("opt."#n, (void *)&bv, &bsz, NULL, 0) == 0 &&	\
--	    je_mallctl(#m, &bv2, &bsz, NULL, 0) == 0) {			\
-+	    je_mallctl(#m, &bv2, (void *)&bsz, NULL, 0) == 0) {		\
- 		if (json) {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "\t\t\t\""#n"\": %s%s\n", bv ? "true" :	\
- 			    "false", (c));				\
- 		} else {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "  opt."#n": %s ("#m": %s)\n", bv ? "true"	\
- 			    : "false", bv2 ? "true" : "false");		\
-@@ -687,17 +687,17 @@ stats_general_print(void (*write_cb)(voi
- 		} else {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "  opt."#n": %zd\n", ssv);			\
- 		}							\
- 	}
- #define	OPT_WRITE_SSIZE_T_MUTABLE(n, m, c) {				\
- 	ssize_t ssv2;							\
- 	if (je_mallctl("opt."#n, (void *)&ssv, &sssz, NULL, 0) == 0 &&	\
--	    je_mallctl(#m, &ssv2, &sssz, NULL, 0) == 0) {		\
-+	    je_mallctl(#m, (void *)&ssv2, &sssz, NULL, 0) == 0) {	\
- 		if (json) {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "\t\t\t\""#n"\": %zd%s\n", ssv, (c));	\
- 		} else {						\
- 			malloc_cprintf(write_cb, cbopaque,		\
- 			    "  opt."#n": %zd ("#m": %zd)\n",		\
- 			    ssv, ssv2);					\
- 		}							\
-@@ -1079,17 +1079,18 @@ stats_print(void (*write_cb)(void *, con
- 	 * Refresh stats, in case mallctl() was called by the application.
- 	 *
- 	 * Check for OOM here, since refreshing the ctl cache can trigger
- 	 * allocation.  In practice, none of the subsequent mallctl()-related
- 	 * calls in this function will cause OOM if this one succeeds.
- 	 * */
- 	epoch = 1;
- 	u64sz = sizeof(uint64_t);
--	err = je_mallctl("epoch", &epoch, &u64sz, &epoch, sizeof(uint64_t));
-+	err = je_mallctl("epoch", (void *)&epoch, &u64sz, (void *)&epoch,
-+	    sizeof(uint64_t));
- 	if (err != 0) {
- 		if (err == EAGAIN) {
- 			malloc_write("<jemalloc>: Memory allocation failure in "
- 			    "mallctl(\"epoch\", ...)\n");
- 			return;
- 		}
- 		malloc_write("<jemalloc>: Failure in mallctl(\"epoch\", "
- 		    "...)\n");
-diff --git a/memory/jemalloc/src/src/tcache.c b/memory/jemalloc/src/src/tcache.c
---- a/memory/jemalloc/src/src/tcache.c
-+++ b/memory/jemalloc/src/src/tcache.c
-@@ -512,22 +512,22 @@ bool
- tcache_boot(tsdn_t *tsdn)
- {
- 	unsigned i;
- 
- 	/*
- 	 * If necessary, clamp opt_lg_tcache_max, now that large_maxclass is
- 	 * known.
- 	 */
--	if (opt_lg_tcache_max < 0 || (1U << opt_lg_tcache_max) < SMALL_MAXCLASS)
-+	if (opt_lg_tcache_max < 0 || (ZU(1) << opt_lg_tcache_max) < SMALL_MAXCLASS)
- 		tcache_maxclass = SMALL_MAXCLASS;
--	else if ((1U << opt_lg_tcache_max) > large_maxclass)
-+	else if ((ZU(1) << opt_lg_tcache_max) > large_maxclass)
- 		tcache_maxclass = large_maxclass;
- 	else
--		tcache_maxclass = (1U << opt_lg_tcache_max);
-+		tcache_maxclass = (ZU(1) << opt_lg_tcache_max);
- 
- 	nhbins = size2index(tcache_maxclass) + 1;
- 
- 	/* Initialize tcache_bin_info. */
- 	tcache_bin_info = (tcache_bin_info_t *)base_alloc(tsdn, nhbins *
- 	    sizeof(tcache_bin_info_t));
- 	if (tcache_bin_info == NULL)
- 		return (true);
-diff --git a/memory/jemalloc/src/src/util.c b/memory/jemalloc/src/src/util.c
---- a/memory/jemalloc/src/src/util.c
-+++ b/memory/jemalloc/src/src/util.c
-@@ -44,17 +44,17 @@ static char	*x2s(uintmax_t x, bool alt_f
- 
- /******************************************************************************/
- 
- /* malloc_message() setup. */
- static void
- wrtmessage(void *cbopaque, const char *s)
- {
- 
--#if defined(JEMALLOC_HAVE_SYSCALL) && defined(SYS_write)
-+#if defined(JEMALLOC_USE_SYSCALL) && defined(SYS_write)
- 	/*
- 	 * Use syscall(2) rather than write(2) when possible in order to avoid
- 	 * the possibility of memory allocation within libc.  This is necessary
- 	 * on FreeBSD; most operating systems do not have this problem though.
- 	 *
- 	 * syscall() returns long or int, depending on platform, so capture the
- 	 * unused result in the widest plausible type to avoid compiler
- 	 * warnings.
-@@ -195,17 +195,17 @@ malloc_strtoumax(const char *restrict np
- 			/* Overflow. */
- 			set_errno(ERANGE);
- 			ret = UINTMAX_MAX;
- 			goto label_return;
- 		}
- 		p++;
- 	}
- 	if (neg)
--		ret = -ret;
-+		ret = (uintmax_t)(-((intmax_t)ret));
- 
- 	if (p == ns) {
- 		/* No conversion performed. */
- 		set_errno(EINVAL);
- 		ret = UINTMAX_MAX;
- 		goto label_return;
- 	}
- 
-diff --git a/memory/jemalloc/src/test/integration/MALLOCX_ARENA.c b/memory/jemalloc/src/test/integration/MALLOCX_ARENA.c
---- a/memory/jemalloc/src/test/integration/MALLOCX_ARENA.c
-+++ b/memory/jemalloc/src/test/integration/MALLOCX_ARENA.c
-@@ -14,18 +14,18 @@ void *
- thd_start(void *arg)
- {
- 	unsigned thread_ind = (unsigned)(uintptr_t)arg;
- 	unsigned arena_ind;
- 	void *p;
- 	size_t sz;
- 
- 	sz = sizeof(arena_ind);
--	assert_d_eq(mallctl("arenas.extend", &arena_ind, &sz, NULL, 0), 0,
--	    "Error in arenas.extend");
-+	assert_d_eq(mallctl("arenas.extend", (void *)&arena_ind, &sz, NULL, 0),
-+	    0, "Error in arenas.extend");
- 
- 	if (thread_ind % 4 != 3) {
- 		size_t mib[3];
- 		size_t miblen = sizeof(mib) / sizeof(size_t);
- 		const char *dss_precs[] = {"disabled", "primary", "secondary"};
- 		unsigned prec_ind = thread_ind %
- 		    (sizeof(dss_precs)/sizeof(char*));
- 		const char *dss = dss_precs[prec_ind];
-diff --git a/memory/jemalloc/src/test/integration/allocated.c b/memory/jemalloc/src/test/integration/allocated.c
---- a/memory/jemalloc/src/test/integration/allocated.c
-+++ b/memory/jemalloc/src/test/integration/allocated.c
-@@ -13,75 +13,76 @@ thd_start(void *arg)
- {
- 	int err;
- 	void *p;
- 	uint64_t a0, a1, d0, d1;
- 	uint64_t *ap0, *ap1, *dp0, *dp1;
- 	size_t sz, usize;
- 
- 	sz = sizeof(a0);
--	if ((err = mallctl("thread.allocated", &a0, &sz, NULL, 0))) {
-+	if ((err = mallctl("thread.allocated", (void *)&a0, &sz, NULL, 0))) {
- 		if (err == ENOENT)
- 			goto label_ENOENT;
- 		test_fail("%s(): Error in mallctl(): %s", __func__,
- 		    strerror(err));
- 	}
- 	sz = sizeof(ap0);
--	if ((err = mallctl("thread.allocatedp", &ap0, &sz, NULL, 0))) {
-+	if ((err = mallctl("thread.allocatedp", (void *)&ap0, &sz, NULL, 0))) {
- 		if (err == ENOENT)
- 			goto label_ENOENT;
- 		test_fail("%s(): Error in mallctl(): %s", __func__,
- 		    strerror(err));
- 	}
- 	assert_u64_eq(*ap0, a0,
- 	    "\"thread.allocatedp\" should provide a pointer to internal "
- 	    "storage");
- 
- 	sz = sizeof(d0);
--	if ((err = mallctl("thread.deallocated", &d0, &sz, NULL, 0))) {
-+	if ((err = mallctl("thread.deallocated", (void *)&d0, &sz, NULL, 0))) {
- 		if (err == ENOENT)
- 			goto label_ENOENT;
- 		test_fail("%s(): Error in mallctl(): %s", __func__,
- 		    strerror(err));
- 	}
- 	sz = sizeof(dp0);
--	if ((err = mallctl("thread.deallocatedp", &dp0, &sz, NULL, 0))) {
-+	if ((err = mallctl("thread.deallocatedp", (void *)&dp0, &sz, NULL,
-+	    0))) {
- 		if (err == ENOENT)
- 			goto label_ENOENT;
- 		test_fail("%s(): Error in mallctl(): %s", __func__,
- 		    strerror(err));
- 	}
- 	assert_u64_eq(*dp0, d0,
- 	    "\"thread.deallocatedp\" should provide a pointer to internal "
- 	    "storage");
- 
- 	p = malloc(1);
- 	assert_ptr_not_null(p, "Unexpected malloc() error");
- 
- 	sz = sizeof(a1);
--	mallctl("thread.allocated", &a1, &sz, NULL, 0);
-+	mallctl("thread.allocated", (void *)&a1, &sz, NULL, 0);
- 	sz = sizeof(ap1);
--	mallctl("thread.allocatedp", &ap1, &sz, NULL, 0);
-+	mallctl("thread.allocatedp", (void *)&ap1, &sz, NULL, 0);
- 	assert_u64_eq(*ap1, a1,
- 	    "Dereferenced \"thread.allocatedp\" value should equal "
- 	    "\"thread.allocated\" value");
- 	assert_ptr_eq(ap0, ap1,
- 	    "Pointer returned by \"thread.allocatedp\" should not change");
- 
- 	usize = malloc_usable_size(p);
- 	assert_u64_le(a0 + usize, a1,
- 	    "Allocated memory counter should increase by at least the amount "
- 	    "explicitly allocated");
- 
- 	free(p);
- 
- 	sz = sizeof(d1);
--	mallctl("thread.deallocated", &d1, &sz, NULL, 0);
-+	mallctl("thread.deallocated", (void *)&d1, &sz, NULL, 0);
- 	sz = sizeof(dp1);
--	mallctl("thread.deallocatedp", &dp1, &sz, NULL, 0);
-+	mallctl("thread.deallocatedp", (void *)&dp1, &sz, NULL, 0);
- 	assert_u64_eq(*dp1, d1,
- 	    "Dereferenced \"thread.deallocatedp\" value should equal "
- 	    "\"thread.deallocated\" value");
- 	assert_ptr_eq(dp0, dp1,
- 	    "Pointer returned by \"thread.deallocatedp\" should not change");
- 
- 	assert_u64_le(d0 + usize, d1,
- 	    "Deallocated memory counter should increase by at least the amount "
-diff --git a/memory/jemalloc/src/test/integration/chunk.c b/memory/jemalloc/src/test/integration/chunk.c
---- a/memory/jemalloc/src/test/integration/chunk.c
-+++ b/memory/jemalloc/src/test/integration/chunk.c
-@@ -132,55 +132,56 @@ TEST_BEGIN(test_chunk)
- 		chunk_decommit,
- 		chunk_purge,
- 		chunk_split,
- 		chunk_merge
- 	};
- 	bool xallocx_success_a, xallocx_success_b, xallocx_success_c;
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.extend", &arena_ind, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.extend", (void *)&arena_ind, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 	flags = MALLOCX_ARENA(arena_ind) | MALLOCX_TCACHE_NONE;
- 
- 	/* Install custom chunk hooks. */
- 	hooks_miblen = sizeof(hooks_mib)/sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("arena.0.chunk_hooks", hooks_mib,
- 	    &hooks_miblen), 0, "Unexpected mallctlnametomib() failure");
- 	hooks_mib[1] = (size_t)arena_ind;
- 	old_size = sizeof(chunk_hooks_t);
- 	new_size = sizeof(chunk_hooks_t);
--	assert_d_eq(mallctlbymib(hooks_mib, hooks_miblen, &old_hooks, &old_size,
--	    &new_hooks, new_size), 0, "Unexpected chunk_hooks error");
-+	assert_d_eq(mallctlbymib(hooks_mib, hooks_miblen, (void *)&old_hooks,
-+	    &old_size, (void *)&new_hooks, new_size), 0,
-+	    "Unexpected chunk_hooks error");
- 	orig_hooks = old_hooks;
- 	assert_ptr_ne(old_hooks.alloc, chunk_alloc, "Unexpected alloc error");
- 	assert_ptr_ne(old_hooks.dalloc, chunk_dalloc,
- 	    "Unexpected dalloc error");
- 	assert_ptr_ne(old_hooks.commit, chunk_commit,
- 	    "Unexpected commit error");
- 	assert_ptr_ne(old_hooks.decommit, chunk_decommit,
- 	    "Unexpected decommit error");
- 	assert_ptr_ne(old_hooks.purge, chunk_purge, "Unexpected purge error");
- 	assert_ptr_ne(old_hooks.split, chunk_split, "Unexpected split error");
- 	assert_ptr_ne(old_hooks.merge, chunk_merge, "Unexpected merge error");
- 
- 	/* Get large size classes. */
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("arenas.lrun.0.size", &large0, &sz, NULL, 0), 0,
--	    "Unexpected arenas.lrun.0.size failure");
--	assert_d_eq(mallctl("arenas.lrun.1.size", &large1, &sz, NULL, 0), 0,
--	    "Unexpected arenas.lrun.1.size failure");
-+	assert_d_eq(mallctl("arenas.lrun.0.size", (void *)&large0, &sz, NULL,
-+	    0), 0, "Unexpected arenas.lrun.0.size failure");
-+	assert_d_eq(mallctl("arenas.lrun.1.size", (void *)&large1, &sz, NULL,
-+	    0), 0, "Unexpected arenas.lrun.1.size failure");
- 
- 	/* Get huge size classes. */
--	assert_d_eq(mallctl("arenas.hchunk.0.size", &huge0, &sz, NULL, 0), 0,
--	    "Unexpected arenas.hchunk.0.size failure");
--	assert_d_eq(mallctl("arenas.hchunk.1.size", &huge1, &sz, NULL, 0), 0,
--	    "Unexpected arenas.hchunk.1.size failure");
--	assert_d_eq(mallctl("arenas.hchunk.2.size", &huge2, &sz, NULL, 0), 0,
--	    "Unexpected arenas.hchunk.2.size failure");
-+	assert_d_eq(mallctl("arenas.hchunk.0.size", (void *)&huge0, &sz, NULL,
-+	    0), 0, "Unexpected arenas.hchunk.0.size failure");
-+	assert_d_eq(mallctl("arenas.hchunk.1.size", (void *)&huge1, &sz, NULL,
-+	    0), 0, "Unexpected arenas.hchunk.1.size failure");
-+	assert_d_eq(mallctl("arenas.hchunk.2.size", (void *)&huge2, &sz, NULL,
-+	    0), 0, "Unexpected arenas.hchunk.2.size failure");
- 
- 	/* Test dalloc/decommit/purge cascade. */
- 	purge_miblen = sizeof(purge_mib)/sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("arena.0.purge", purge_mib, &purge_miblen),
- 	    0, "Unexpected mallctlnametomib() failure");
- 	purge_mib[1] = (size_t)arena_ind;
- 	do_dalloc = false;
- 	do_decommit = false;
-@@ -260,19 +261,19 @@ TEST_BEGIN(test_chunk)
- 
- 	/* Make sure non-huge allocation succeeds. */
- 	p = mallocx(42, flags);
- 	assert_ptr_not_null(p, "Unexpected mallocx() error");
- 	dallocx(p, flags);
- 
- 	/* Restore chunk hooks. */
- 	assert_d_eq(mallctlbymib(hooks_mib, hooks_miblen, NULL, NULL,
--	    &old_hooks, new_size), 0, "Unexpected chunk_hooks error");
--	assert_d_eq(mallctlbymib(hooks_mib, hooks_miblen, &old_hooks, &old_size,
--	    NULL, 0), 0, "Unexpected chunk_hooks error");
-+	    (void *)&old_hooks, new_size), 0, "Unexpected chunk_hooks error");
-+	assert_d_eq(mallctlbymib(hooks_mib, hooks_miblen, (void *)&old_hooks,
-+	    &old_size, NULL, 0), 0, "Unexpected chunk_hooks error");
- 	assert_ptr_eq(old_hooks.alloc, orig_hooks.alloc,
- 	    "Unexpected alloc error");
- 	assert_ptr_eq(old_hooks.dalloc, orig_hooks.dalloc,
- 	    "Unexpected dalloc error");
- 	assert_ptr_eq(old_hooks.commit, orig_hooks.commit,
- 	    "Unexpected commit error");
- 	assert_ptr_eq(old_hooks.decommit, orig_hooks.decommit,
- 	    "Unexpected decommit error");
-diff --git a/memory/jemalloc/src/test/integration/mallocx.c b/memory/jemalloc/src/test/integration/mallocx.c
---- a/memory/jemalloc/src/test/integration/mallocx.c
-+++ b/memory/jemalloc/src/test/integration/mallocx.c
-@@ -6,17 +6,17 @@ const char *malloc_conf = "junk:false";
- 
- static unsigned
- get_nsizes_impl(const char *cmd)
- {
- 	unsigned ret;
- 	size_t z;
- 
- 	z = sizeof(unsigned);
--	assert_d_eq(mallctl(cmd, &ret, &z, NULL, 0), 0,
-+	assert_d_eq(mallctl(cmd, (void *)&ret, &z, NULL, 0), 0,
- 	    "Unexpected mallctl(\"%s\", ...) failure", cmd);
- 
- 	return (ret);
- }
- 
- static unsigned
- get_nhuge(void)
- {
-@@ -32,17 +32,17 @@ get_size_impl(const char *cmd, size_t in
- 	size_t mib[4];
- 	size_t miblen = 4;
- 
- 	z = sizeof(size_t);
- 	assert_d_eq(mallctlnametomib(cmd, mib, &miblen),
- 	    0, "Unexpected mallctlnametomib(\"%s\", ...) failure", cmd);
- 	mib[2] = ind;
- 	z = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &ret, &z, NULL, 0),
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&ret, &z, NULL, 0),
- 	    0, "Unexpected mallctlbymib([\"%s\", %zu], ...) failure", cmd, ind);
- 
- 	return (ret);
- }
- 
- static size_t
- get_huge_size(size_t ind)
- {
-diff --git a/memory/jemalloc/src/test/integration/overflow.c b/memory/jemalloc/src/test/integration/overflow.c
---- a/memory/jemalloc/src/test/integration/overflow.c
-+++ b/memory/jemalloc/src/test/integration/overflow.c
-@@ -3,27 +3,27 @@
- TEST_BEGIN(test_overflow)
- {
- 	unsigned nhchunks;
- 	size_t mib[4];
- 	size_t sz, miblen, max_size_class;
- 	void *p;
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nhchunks", &nhchunks, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("arenas.nhchunks", (void *)&nhchunks, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() error");
- 
- 	miblen = sizeof(mib) / sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("arenas.hchunk.0.size", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() error");
- 	mib[2] = nhchunks - 1;
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &max_size_class, &sz, NULL, 0), 0,
--	    "Unexpected mallctlbymib() error");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&max_size_class, &sz,
-+	    NULL, 0), 0, "Unexpected mallctlbymib() error");
- 
- 	assert_ptr_null(malloc(max_size_class + 1),
- 	    "Expected OOM due to over-sized allocation request");
- 	assert_ptr_null(malloc(SIZE_T_MAX),
- 	    "Expected OOM due to over-sized allocation request");
- 
- 	assert_ptr_null(calloc(1, max_size_class + 1),
- 	    "Expected OOM due to over-sized allocation request");
-diff --git a/memory/jemalloc/src/test/integration/rallocx.c b/memory/jemalloc/src/test/integration/rallocx.c
---- a/memory/jemalloc/src/test/integration/rallocx.c
-+++ b/memory/jemalloc/src/test/integration/rallocx.c
-@@ -2,17 +2,17 @@
- 
- static unsigned
- get_nsizes_impl(const char *cmd)
- {
- 	unsigned ret;
- 	size_t z;
- 
- 	z = sizeof(unsigned);
--	assert_d_eq(mallctl(cmd, &ret, &z, NULL, 0), 0,
-+	assert_d_eq(mallctl(cmd, (void *)&ret, &z, NULL, 0), 0,
- 	    "Unexpected mallctl(\"%s\", ...) failure", cmd);
- 
- 	return (ret);
- }
- 
- static unsigned
- get_nhuge(void)
- {
-@@ -28,17 +28,17 @@ get_size_impl(const char *cmd, size_t in
- 	size_t mib[4];
- 	size_t miblen = 4;
- 
- 	z = sizeof(size_t);
- 	assert_d_eq(mallctlnametomib(cmd, mib, &miblen),
- 	    0, "Unexpected mallctlnametomib(\"%s\", ...) failure", cmd);
- 	mib[2] = ind;
- 	z = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &ret, &z, NULL, 0),
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&ret, &z, NULL, 0),
- 	    0, "Unexpected mallctlbymib([\"%s\", %zu], ...) failure", cmd, ind);
- 
- 	return (ret);
- }
- 
- static size_t
- get_huge_size(size_t ind)
- {
-diff --git a/memory/jemalloc/src/test/integration/sdallocx.c b/memory/jemalloc/src/test/integration/sdallocx.c
---- a/memory/jemalloc/src/test/integration/sdallocx.c
-+++ b/memory/jemalloc/src/test/integration/sdallocx.c
-@@ -1,12 +1,12 @@
- #include "test/jemalloc_test.h"
- 
--#define	MAXALIGN (((size_t)1) << 25)
--#define	NITER 4
-+#define	MAXALIGN (((size_t)1) << 22)
-+#define	NITER 3
- 
- TEST_BEGIN(test_basic)
- {
- 	void *ptr = mallocx(64, 0);
- 	sdallocx(ptr, 64, 0);
- }
- TEST_END
- 
-diff --git a/memory/jemalloc/src/test/integration/thread_arena.c b/memory/jemalloc/src/test/integration/thread_arena.c
---- a/memory/jemalloc/src/test/integration/thread_arena.c
-+++ b/memory/jemalloc/src/test/integration/thread_arena.c
-@@ -11,26 +11,27 @@ thd_start(void *arg)
- 	size_t size;
- 	int err;
- 
- 	p = malloc(1);
- 	assert_ptr_not_null(p, "Error in malloc()");
- 	free(p);
- 
- 	size = sizeof(arena_ind);
--	if ((err = mallctl("thread.arena", &arena_ind, &size, &main_arena_ind,
--	    sizeof(main_arena_ind)))) {
-+	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size,
-+	    (void *)&main_arena_ind, sizeof(main_arena_ind)))) {
- 		char buf[BUFERROR_BUF];
- 
- 		buferror(err, buf, sizeof(buf));
- 		test_fail("Error in mallctl(): %s", buf);
- 	}
- 
- 	size = sizeof(arena_ind);
--	if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
-+	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, NULL,
-+	    0))) {
- 		char buf[BUFERROR_BUF];
- 
- 		buferror(err, buf, sizeof(buf));
- 		test_fail("Error in mallctl(): %s", buf);
- 	}
- 	assert_u_eq(arena_ind, main_arena_ind,
- 	    "Arena index should be same as for main thread");
- 
-@@ -45,17 +46,18 @@ TEST_BEGIN(test_thread_arena)
- 	int err;
- 	thd_t thds[NTHREADS];
- 	unsigned i;
- 
- 	p = malloc(1);
- 	assert_ptr_not_null(p, "Error in malloc()");
- 
- 	size = sizeof(arena_ind);
--	if ((err = mallctl("thread.arena", &arena_ind, &size, NULL, 0))) {
-+	if ((err = mallctl("thread.arena", (void *)&arena_ind, &size, NULL,
-+	    0))) {
- 		char buf[BUFERROR_BUF];
- 
- 		buferror(err, buf, sizeof(buf));
- 		test_fail("Error in mallctl(): %s", buf);
- 	}
- 
- 	for (i = 0; i < NTHREADS; i++) {
- 		thd_create(&thds[i], thd_start,
-diff --git a/memory/jemalloc/src/test/integration/thread_tcache_enabled.c b/memory/jemalloc/src/test/integration/thread_tcache_enabled.c
---- a/memory/jemalloc/src/test/integration/thread_tcache_enabled.c
-+++ b/memory/jemalloc/src/test/integration/thread_tcache_enabled.c
-@@ -11,74 +11,75 @@ static const bool config_tcache =
- void *
- thd_start(void *arg)
- {
- 	int err;
- 	size_t sz;
- 	bool e0, e1;
- 
- 	sz = sizeof(bool);
--	if ((err = mallctl("thread.tcache.enabled", &e0, &sz, NULL, 0))) {
-+	if ((err = mallctl("thread.tcache.enabled", (void *)&e0, &sz, NULL,
-+	    0))) {
- 		if (err == ENOENT) {
- 			assert_false(config_tcache,
- 			    "ENOENT should only be returned if tcache is "
- 			    "disabled");
- 		}
- 		goto label_ENOENT;
- 	}
- 
- 	if (e0) {
- 		e1 = false;
--		assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz),
--		    0, "Unexpected mallctl() error");
-+		assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+		    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 		assert_true(e0, "tcache should be enabled");
- 	}
- 
- 	e1 = true;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_false(e0, "tcache should be disabled");
- 
- 	e1 = true;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_true(e0, "tcache should be enabled");
- 
- 	e1 = false;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_true(e0, "tcache should be enabled");
- 
- 	e1 = false;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_false(e0, "tcache should be disabled");
- 
- 	free(malloc(1));
- 	e1 = true;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_false(e0, "tcache should be disabled");
- 
- 	free(malloc(1));
- 	e1 = true;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_true(e0, "tcache should be enabled");
- 
- 	free(malloc(1));
- 	e1 = false;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_true(e0, "tcache should be enabled");
- 
- 	free(malloc(1));
- 	e1 = false;
--	assert_d_eq(mallctl("thread.tcache.enabled", &e0, &sz, &e1, sz), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("thread.tcache.enabled", (void *)&e0, &sz,
-+	    (void *)&e1, sz), 0, "Unexpected mallctl() error");
- 	assert_false(e0, "tcache should be disabled");
- 
- 	free(malloc(1));
- 	return (NULL);
- label_ENOENT:
- 	test_skip("\"thread.tcache.enabled\" mallctl not available");
- 	return (NULL);
- }
-diff --git a/memory/jemalloc/src/test/integration/xallocx.c b/memory/jemalloc/src/test/integration/xallocx.c
---- a/memory/jemalloc/src/test/integration/xallocx.c
-+++ b/memory/jemalloc/src/test/integration/xallocx.c
-@@ -11,18 +11,18 @@ const char *malloc_conf = "junk:false";
-  */
- static unsigned
- arena_ind(void)
- {
- 	static unsigned ind = 0;
- 
- 	if (ind == 0) {
- 		size_t sz = sizeof(ind);
--		assert_d_eq(mallctl("arenas.extend", &ind, &sz, NULL, 0), 0,
--		    "Unexpected mallctl failure creating arena");
-+		assert_d_eq(mallctl("arenas.extend", (void *)&ind, &sz, NULL,
-+		    0), 0, "Unexpected mallctl failure creating arena");
- 	}
- 
- 	return (ind);
- }
- 
- TEST_BEGIN(test_same_size)
- {
- 	void *p;
-@@ -73,17 +73,17 @@ TEST_END
- 
- static unsigned
- get_nsizes_impl(const char *cmd)
- {
- 	unsigned ret;
- 	size_t z;
- 
- 	z = sizeof(unsigned);
--	assert_d_eq(mallctl(cmd, &ret, &z, NULL, 0), 0,
-+	assert_d_eq(mallctl(cmd, (void *)&ret, &z, NULL, 0), 0,
- 	    "Unexpected mallctl(\"%s\", ...) failure", cmd);
- 
- 	return (ret);
- }
- 
- static unsigned
- get_nsmall(void)
- {
-@@ -113,17 +113,17 @@ get_size_impl(const char *cmd, size_t in
- 	size_t mib[4];
- 	size_t miblen = 4;
- 
- 	z = sizeof(size_t);
- 	assert_d_eq(mallctlnametomib(cmd, mib, &miblen),
- 	    0, "Unexpected mallctlnametomib(\"%s\", ...) failure", cmd);
- 	mib[2] = ind;
- 	z = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &ret, &z, NULL, 0),
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&ret, &z, NULL, 0),
- 	    0, "Unexpected mallctlbymib([\"%s\", %zu], ...) failure", cmd, ind);
- 
- 	return (ret);
- }
- 
- static size_t
- get_small_size(size_t ind)
- {
-diff --git a/memory/jemalloc/src/test/unit/arena_reset.c b/memory/jemalloc/src/test/unit/arena_reset.c
---- a/memory/jemalloc/src/test/unit/arena_reset.c
-+++ b/memory/jemalloc/src/test/unit/arena_reset.c
-@@ -6,17 +6,17 @@ const char *malloc_conf = "prof:true,lg_
- 
- static unsigned
- get_nsizes_impl(const char *cmd)
- {
- 	unsigned ret;
- 	size_t z;
- 
- 	z = sizeof(unsigned);
--	assert_d_eq(mallctl(cmd, &ret, &z, NULL, 0), 0,
-+	assert_d_eq(mallctl(cmd, (void *)&ret, &z, NULL, 0), 0,
- 	    "Unexpected mallctl(\"%s\", ...) failure", cmd);
- 
- 	return (ret);
- }
- 
- static unsigned
- get_nsmall(void)
- {
-@@ -46,17 +46,17 @@ get_size_impl(const char *cmd, size_t in
- 	size_t mib[4];
- 	size_t miblen = 4;
- 
- 	z = sizeof(size_t);
- 	assert_d_eq(mallctlnametomib(cmd, mib, &miblen),
- 	    0, "Unexpected mallctlnametomib(\"%s\", ...) failure", cmd);
- 	mib[2] = ind;
- 	z = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &ret, &z, NULL, 0),
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&ret, &z, NULL, 0),
- 	    0, "Unexpected mallctlbymib([\"%s\", %zu], ...) failure", cmd, ind);
- 
- 	return (ret);
- }
- 
- static size_t
- get_small_size(size_t ind)
- {
-@@ -87,18 +87,18 @@ TEST_BEGIN(test_arena_reset)
- 	int flags;
- 	size_t mib[3];
- 	tsdn_t *tsdn;
- 
- 	test_skip_if((config_valgrind && unlikely(in_valgrind)) || (config_fill
- 	    && unlikely(opt_quarantine)));
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.extend", &arena_ind, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.extend", (void *)&arena_ind, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 
- 	flags = MALLOCX_ARENA(arena_ind) | MALLOCX_TCACHE_NONE;
- 
- 	nsmall = get_nsmall();
- 	nlarge = get_nlarge();
- 	nhuge = get_nhuge() > NHUGE ? NHUGE : get_nhuge();
- 	nptrs = nsmall + nlarge + nhuge;
- 	ptrs = (void **)malloc(nptrs * sizeof(void *));
-diff --git a/memory/jemalloc/src/test/unit/decay.c b/memory/jemalloc/src/test/unit/decay.c
---- a/memory/jemalloc/src/test/unit/decay.c
-+++ b/memory/jemalloc/src/test/unit/decay.c
-@@ -35,20 +35,20 @@ TEST_BEGIN(test_decay_ticks)
- 
- 	test_skip_if(opt_purge != purge_mode_decay);
- 
- 	decay_ticker = decay_ticker_get(tsd_fetch(), 0);
- 	assert_ptr_not_null(decay_ticker,
- 	    "Unexpected failure getting decay ticker");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("arenas.hchunk.0.size", &huge0, &sz, NULL, 0), 0,
--	    "Unexpected mallctl failure");
--	assert_d_eq(mallctl("arenas.lrun.0.size", &large0, &sz, NULL, 0), 0,
--	    "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("arenas.hchunk.0.size", (void *)&huge0, &sz, NULL,
-+	    0), 0, "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("arenas.lrun.0.size", (void *)&large0, &sz, NULL,
-+	    0), 0, "Unexpected mallctl failure");
- 
- 	/*
- 	 * Test the standard APIs using a huge size class, since we can't
- 	 * control tcache interactions (except by completely disabling tcache
- 	 * for the entire test program).
- 	 */
- 
- 	/* malloc(). */
-@@ -170,35 +170,35 @@ TEST_BEGIN(test_decay_ticks)
- 	 */
- 	if (config_tcache) {
- 		unsigned tcache_ind, i;
- 		size_t tcache_sizes[2];
- 		tcache_sizes[0] = large0;
- 		tcache_sizes[1] = 1;
- 
- 		sz = sizeof(unsigned);
--		assert_d_eq(mallctl("tcache.create", &tcache_ind, &sz, NULL, 0),
--		    0, "Unexpected mallctl failure");
-+		assert_d_eq(mallctl("tcache.create", (void *)&tcache_ind, &sz,
-+		    NULL, 0), 0, "Unexpected mallctl failure");
- 
- 		for (i = 0; i < sizeof(tcache_sizes) / sizeof(size_t); i++) {
- 			sz = tcache_sizes[i];
- 
- 			/* tcache fill. */
- 			tick0 = ticker_read(decay_ticker);
- 			p = mallocx(sz, MALLOCX_TCACHE(tcache_ind));
- 			assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 			tick1 = ticker_read(decay_ticker);
- 			assert_u32_ne(tick1, tick0,
- 			    "Expected ticker to tick during tcache fill "
- 			    "(sz=%zu)", sz);
- 			/* tcache flush. */
- 			dallocx(p, MALLOCX_TCACHE(tcache_ind));
- 			tick0 = ticker_read(decay_ticker);
- 			assert_d_eq(mallctl("tcache.flush", NULL, NULL,
--			    &tcache_ind, sizeof(unsigned)), 0,
-+			    (void *)&tcache_ind, sizeof(unsigned)), 0,
- 			    "Unexpected mallctl failure");
- 			tick1 = ticker_read(decay_ticker);
- 			assert_u32_ne(tick1, tick0,
- 			    "Expected ticker to tick during tcache flush "
- 			    "(sz=%zu)", sz);
- 		}
- 	}
- }
-@@ -223,32 +223,32 @@ TEST_BEGIN(test_decay_ticker)
- 	 * objects, restore the clock, then [md]allocx() in a tight loop to
- 	 * verify the ticker triggers purging.
- 	 */
- 
- 	if (config_tcache) {
- 		size_t tcache_max;
- 
- 		sz = sizeof(size_t);
--		assert_d_eq(mallctl("arenas.tcache_max", &tcache_max, &sz, NULL,
--		    0), 0, "Unexpected mallctl failure");
-+		assert_d_eq(mallctl("arenas.tcache_max", (void *)&tcache_max,
-+		    &sz, NULL, 0), 0, "Unexpected mallctl failure");
- 		large = nallocx(tcache_max + 1, flags);
- 	}  else {
- 		sz = sizeof(size_t);
--		assert_d_eq(mallctl("arenas.lrun.0.size", &large, &sz, NULL, 0),
--		    0, "Unexpected mallctl failure");
-+		assert_d_eq(mallctl("arenas.lrun.0.size", (void *)&large, &sz,
-+		    NULL, 0), 0, "Unexpected mallctl failure");
- 	}
- 
- 	assert_d_eq(mallctl("arena.0.purge", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(uint64_t)), 0,
--	    "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
-+	    sizeof(uint64_t)), 0, "Unexpected mallctl failure");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.npurge", &npurge0, &sz, NULL, 0),
--	    config_stats ? 0 : ENOENT, "Unexpected mallctl result");
-+	assert_d_eq(mallctl("stats.arenas.0.npurge", (void *)&npurge0, &sz,
-+	    NULL, 0), config_stats ? 0 : ENOENT, "Unexpected mallctl result");
- 
- 	for (i = 0; i < NPS; i++) {
- 		ps[i] = mallocx(large, flags);
- 		assert_ptr_not_null(ps[i], "Unexpected mallocx() failure");
- 	}
- 
- 	nupdates_mock = 0;
- 	nstime_init(&time_mock, 0);
-@@ -278,21 +278,21 @@ TEST_BEGIN(test_decay_ticker)
- 	nstime_copy(&deadline, &time);
- 	nstime_add(&deadline, &decay_time);
- 	do {
- 		for (i = 0; i < DECAY_NTICKS_PER_UPDATE / 2; i++) {
- 			void *p = mallocx(1, flags);
- 			assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 			dallocx(p, flags);
- 		}
--		assert_d_eq(mallctl("epoch", NULL, NULL, &epoch,
-+		assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
- 		    sizeof(uint64_t)), 0, "Unexpected mallctl failure");
- 		sz = sizeof(uint64_t);
--		assert_d_eq(mallctl("stats.arenas.0.npurge", &npurge1, &sz,
--		    NULL, 0), config_stats ? 0 : ENOENT,
-+		assert_d_eq(mallctl("stats.arenas.0.npurge", (void *)&npurge1,
-+		    &sz, NULL, 0), config_stats ? 0 : ENOENT,
- 		    "Unexpected mallctl result");
- 
- 		nstime_update(&time);
- 	} while (nstime_compare(&time, &deadline) <= 0 && npurge1 == npurge0);
- 
- 	if (config_stats)
- 		assert_u64_gt(npurge1, npurge0, "Expected purging to occur");
- #undef NPS
-@@ -308,26 +308,26 @@ TEST_BEGIN(test_decay_nonmonotonic)
- 	uint64_t npurge0 = 0;
- 	uint64_t npurge1 = 0;
- 	size_t sz, large0;
- 	unsigned i, nupdates0;
- 
- 	test_skip_if(opt_purge != purge_mode_decay);
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("arenas.lrun.0.size", &large0, &sz, NULL, 0), 0,
--	    "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("arenas.lrun.0.size", (void *)&large0, &sz, NULL,
-+	    0), 0, "Unexpected mallctl failure");
- 
- 	assert_d_eq(mallctl("arena.0.purge", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(uint64_t)), 0,
--	    "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
-+	    sizeof(uint64_t)), 0, "Unexpected mallctl failure");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.npurge", &npurge0, &sz, NULL, 0),
--	    config_stats ? 0 : ENOENT, "Unexpected mallctl result");
-+	assert_d_eq(mallctl("stats.arenas.0.npurge", (void *)&npurge0, &sz,
-+	    NULL, 0), config_stats ? 0 : ENOENT, "Unexpected mallctl result");
- 
- 	nupdates_mock = 0;
- 	nstime_init(&time_mock, 0);
- 	nstime_update(&time_mock);
- 	monotonic_mock = false;
- 
- 	nstime_monotonic_orig = nstime_monotonic;
- 	nstime_update_orig = nstime_update;
-@@ -343,21 +343,21 @@ TEST_BEGIN(test_decay_nonmonotonic)
- 		dallocx(ps[i], flags);
- 		nupdates0 = nupdates_mock;
- 		assert_d_eq(mallctl("arena.0.decay", NULL, NULL, NULL, 0), 0,
- 		    "Unexpected arena.0.decay failure");
- 		assert_u_gt(nupdates_mock, nupdates0,
- 		    "Expected nstime_update() to be called");
- 	}
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(uint64_t)), 0,
--	    "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
-+	    sizeof(uint64_t)), 0, "Unexpected mallctl failure");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.npurge", &npurge1, &sz, NULL, 0),
--	    config_stats ? 0 : ENOENT, "Unexpected mallctl result");
-+	assert_d_eq(mallctl("stats.arenas.0.npurge", (void *)&npurge1, &sz,
-+	    NULL, 0), config_stats ? 0 : ENOENT, "Unexpected mallctl result");
- 
- 	if (config_stats)
- 		assert_u64_eq(npurge0, npurge1, "Unexpected purging occurred");
- 
- 	nstime_monotonic = nstime_monotonic_orig;
- 	nstime_update = nstime_update_orig;
- #undef NPS
- }
-diff --git a/memory/jemalloc/src/test/unit/mallctl.c b/memory/jemalloc/src/test/unit/mallctl.c
---- a/memory/jemalloc/src/test/unit/mallctl.c
-+++ b/memory/jemalloc/src/test/unit/mallctl.c
-@@ -7,26 +7,28 @@ TEST_BEGIN(test_mallctl_errors)
- 
- 	assert_d_eq(mallctl("no_such_name", NULL, NULL, NULL, 0), ENOENT,
- 	    "mallctl() should return ENOENT for non-existent names");
- 
- 	assert_d_eq(mallctl("version", NULL, NULL, "0.0.0", strlen("0.0.0")),
- 	    EPERM, "mallctl() should return EPERM on attempt to write "
- 	    "read-only value");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)-1),
--	    EINVAL, "mallctl() should return EINVAL for input size mismatch");
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)+1),
--	    EINVAL, "mallctl() should return EINVAL for input size mismatch");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
-+	    sizeof(epoch)-1), EINVAL,
-+	    "mallctl() should return EINVAL for input size mismatch");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch,
-+	    sizeof(epoch)+1), EINVAL,
-+	    "mallctl() should return EINVAL for input size mismatch");
- 
- 	sz = sizeof(epoch)-1;
--	assert_d_eq(mallctl("epoch", &epoch, &sz, NULL, 0), EINVAL,
-+	assert_d_eq(mallctl("epoch", (void *)&epoch, &sz, NULL, 0), EINVAL,
- 	    "mallctl() should return EINVAL for output size mismatch");
- 	sz = sizeof(epoch)+1;
--	assert_d_eq(mallctl("epoch", &epoch, &sz, NULL, 0), EINVAL,
-+	assert_d_eq(mallctl("epoch", (void *)&epoch, &sz, NULL, 0), EINVAL,
- 	    "mallctl() should return EINVAL for output size mismatch");
- }
- TEST_END
- 
- TEST_BEGIN(test_mallctlnametomib_errors)
- {
- 	size_t mib[1];
- 	size_t miblen;
-@@ -51,55 +53,58 @@ TEST_BEGIN(test_mallctlbymib_errors)
- 	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, "0.0.0",
- 	    strlen("0.0.0")), EPERM, "mallctl() should return EPERM on "
- 	    "attempt to write read-only value");
- 
- 	miblen = sizeof(mib)/sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("epoch", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() failure");
- 
--	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, &epoch,
-+	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, (void *)&epoch,
- 	    sizeof(epoch)-1), EINVAL,
- 	    "mallctlbymib() should return EINVAL for input size mismatch");
--	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, &epoch,
-+	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, (void *)&epoch,
- 	    sizeof(epoch)+1), EINVAL,
- 	    "mallctlbymib() should return EINVAL for input size mismatch");
- 
- 	sz = sizeof(epoch)-1;
--	assert_d_eq(mallctlbymib(mib, miblen, &epoch, &sz, NULL, 0), EINVAL,
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&epoch, &sz, NULL, 0),
-+	    EINVAL,
- 	    "mallctlbymib() should return EINVAL for output size mismatch");
- 	sz = sizeof(epoch)+1;
--	assert_d_eq(mallctlbymib(mib, miblen, &epoch, &sz, NULL, 0), EINVAL,
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&epoch, &sz, NULL, 0),
-+	    EINVAL,
- 	    "mallctlbymib() should return EINVAL for output size mismatch");
- }
- TEST_END
- 
- TEST_BEGIN(test_mallctl_read_write)
- {
- 	uint64_t old_epoch, new_epoch;
- 	size_t sz = sizeof(old_epoch);
- 
- 	/* Blind. */
- 	assert_d_eq(mallctl("epoch", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 	assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size");
- 
- 	/* Read. */
--	assert_d_eq(mallctl("epoch", &old_epoch, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("epoch", (void *)&old_epoch, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 	assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size");
- 
- 	/* Write. */
--	assert_d_eq(mallctl("epoch", NULL, NULL, &new_epoch, sizeof(new_epoch)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&new_epoch,
-+	    sizeof(new_epoch)), 0, "Unexpected mallctl() failure");
- 	assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size");
- 
- 	/* Read+write. */
--	assert_d_eq(mallctl("epoch", &old_epoch, &sz, &new_epoch,
--	    sizeof(new_epoch)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", (void *)&old_epoch, &sz,
-+	    (void *)&new_epoch, sizeof(new_epoch)), 0,
-+	    "Unexpected mallctl() failure");
- 	assert_zu_eq(sz, sizeof(old_epoch), "Unexpected output size");
- }
- TEST_END
- 
- TEST_BEGIN(test_mallctlnametomib_short_mib)
- {
- 	size_t mib[4];
- 	size_t miblen;
-@@ -115,18 +120,18 @@ TEST_BEGIN(test_mallctlnametomib_short_m
- TEST_END
- 
- TEST_BEGIN(test_mallctl_config)
- {
- 
- #define	TEST_MALLCTL_CONFIG(config, t) do {				\
- 	t oldval;							\
- 	size_t sz = sizeof(oldval);					\
--	assert_d_eq(mallctl("config."#config, &oldval, &sz, NULL, 0),	\
--	    0, "Unexpected mallctl() failure");				\
-+	assert_d_eq(mallctl("config."#config, (void *)&oldval, &sz,	\
-+	    NULL, 0), 0, "Unexpected mallctl() failure");		\
- 	assert_b_eq(oldval, config_##config, "Incorrect config value");	\
- 	assert_zu_eq(sz, sizeof(oldval), "Unexpected output size");	\
- } while (0)
- 
- 	TEST_MALLCTL_CONFIG(cache_oblivious, bool);
- 	TEST_MALLCTL_CONFIG(debug, bool);
- 	TEST_MALLCTL_CONFIG(fill, bool);
- 	TEST_MALLCTL_CONFIG(lazy_lock, bool);
-@@ -149,17 +154,18 @@ TEST_END
- TEST_BEGIN(test_mallctl_opt)
- {
- 	bool config_always = true;
- 
- #define	TEST_MALLCTL_OPT(t, opt, config) do {				\
- 	t oldval;							\
- 	size_t sz = sizeof(oldval);					\
- 	int expected = config_##config ? 0 : ENOENT;			\
--	int result = mallctl("opt."#opt, &oldval, &sz, NULL, 0);	\
-+	int result = mallctl("opt."#opt, (void *)&oldval, &sz, NULL,	\
-+	    0);								\
- 	assert_d_eq(result, expected,					\
- 	    "Unexpected mallctl() result for opt."#opt);		\
- 	assert_zu_eq(sz, sizeof(oldval), "Unexpected output size");	\
- } while (0)
- 
- 	TEST_MALLCTL_OPT(bool, abort, always);
- 	TEST_MALLCTL_OPT(size_t, lg_chunk, always);
- 	TEST_MALLCTL_OPT(const char *, dss, always);
-@@ -192,29 +198,29 @@ TEST_END
- 
- TEST_BEGIN(test_manpage_example)
- {
- 	unsigned nbins, i;
- 	size_t mib[4];
- 	size_t len, miblen;
- 
- 	len = sizeof(nbins);
--	assert_d_eq(mallctl("arenas.nbins", &nbins, &len, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.nbins", (void *)&nbins, &len, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 
- 	miblen = 4;
- 	assert_d_eq(mallctlnametomib("arenas.bin.0.size", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() failure");
- 	for (i = 0; i < nbins; i++) {
- 		size_t bin_size;
- 
- 		mib[2] = i;
- 		len = sizeof(bin_size);
--		assert_d_eq(mallctlbymib(mib, miblen, &bin_size, &len, NULL, 0),
--		    0, "Unexpected mallctlbymib() failure");
-+		assert_d_eq(mallctlbymib(mib, miblen, (void *)&bin_size, &len,
-+		    NULL, 0), 0, "Unexpected mallctlbymib() failure");
- 		/* Do something with bin_size... */
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_tcache_none)
- {
- 	void *p0, *q, *p1;
-@@ -253,35 +259,35 @@ TEST_BEGIN(test_tcache)
- 	test_skip_if(!config_tcache);
- 
- 	psz = 42;
- 	qsz = nallocx(psz, 0) + 1;
- 
- 	/* Create tcaches. */
- 	for (i = 0; i < NTCACHES; i++) {
- 		sz = sizeof(unsigned);
--		assert_d_eq(mallctl("tcache.create", &tis[i], &sz, NULL, 0), 0,
--		    "Unexpected mallctl() failure, i=%u", i);
-+		assert_d_eq(mallctl("tcache.create", (void *)&tis[i], &sz, NULL,
-+		    0), 0, "Unexpected mallctl() failure, i=%u", i);
- 	}
- 
- 	/* Exercise tcache ID recycling. */
- 	for (i = 0; i < NTCACHES; i++) {
--		assert_d_eq(mallctl("tcache.destroy", NULL, NULL, &tis[i],
--		    sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u",
--		    i);
-+		assert_d_eq(mallctl("tcache.destroy", NULL, NULL,
-+		    (void *)&tis[i], sizeof(unsigned)), 0,
-+		    "Unexpected mallctl() failure, i=%u", i);
- 	}
- 	for (i = 0; i < NTCACHES; i++) {
- 		sz = sizeof(unsigned);
--		assert_d_eq(mallctl("tcache.create", &tis[i], &sz, NULL, 0), 0,
--		    "Unexpected mallctl() failure, i=%u", i);
-+		assert_d_eq(mallctl("tcache.create", (void *)&tis[i], &sz, NULL,
-+		    0), 0, "Unexpected mallctl() failure, i=%u", i);
- 	}
- 
- 	/* Flush empty tcaches. */
- 	for (i = 0; i < NTCACHES; i++) {
--		assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i],
-+		assert_d_eq(mallctl("tcache.flush", NULL, NULL, (void *)&tis[i],
- 		    sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u",
- 		    i);
- 	}
- 
- 	/* Cache some allocations. */
- 	for (i = 0; i < NTCACHES; i++) {
- 		ps[i] = mallocx(psz, MALLOCX_TCACHE(tis[i]));
- 		assert_ptr_not_null(ps[i], "Unexpected mallocx() failure, i=%u",
-@@ -316,107 +322,110 @@ TEST_BEGIN(test_tcache)
- 		if (qs[i] == NULL)
- 			qs[i] = ps[i];
- 	}
- 	for (i = 0; i < NTCACHES; i++)
- 		dallocx(qs[i], MALLOCX_TCACHE(tis[i]));
- 
- 	/* Flush some non-empty tcaches. */
- 	for (i = 0; i < NTCACHES/2; i++) {
--		assert_d_eq(mallctl("tcache.flush", NULL, NULL, &tis[i],
-+		assert_d_eq(mallctl("tcache.flush", NULL, NULL, (void *)&tis[i],
- 		    sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u",
- 		    i);
- 	}
- 
- 	/* Destroy tcaches. */
- 	for (i = 0; i < NTCACHES; i++) {
--		assert_d_eq(mallctl("tcache.destroy", NULL, NULL, &tis[i],
--		    sizeof(unsigned)), 0, "Unexpected mallctl() failure, i=%u",
--		    i);
-+		assert_d_eq(mallctl("tcache.destroy", NULL, NULL,
-+		    (void *)&tis[i], sizeof(unsigned)), 0,
-+		    "Unexpected mallctl() failure, i=%u", i);
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_thread_arena)
- {
- 	unsigned arena_old, arena_new, narenas;
- 	size_t sz = sizeof(unsigned);
- 
--	assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 	assert_u_eq(narenas, opt_narenas, "Number of arenas incorrect");
- 	arena_new = narenas - 1;
--	assert_d_eq(mallctl("thread.arena", &arena_old, &sz, &arena_new,
--	    sizeof(unsigned)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", (void *)&arena_old, &sz,
-+	    (void *)&arena_new, sizeof(unsigned)), 0,
-+	    "Unexpected mallctl() failure");
- 	arena_new = 0;
--	assert_d_eq(mallctl("thread.arena", &arena_old, &sz, &arena_new,
--	    sizeof(unsigned)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", (void *)&arena_old, &sz,
-+	    (void *)&arena_new, sizeof(unsigned)), 0,
-+	    "Unexpected mallctl() failure");
- }
- TEST_END
- 
- TEST_BEGIN(test_arena_i_lg_dirty_mult)
- {
- 	ssize_t lg_dirty_mult, orig_lg_dirty_mult, prev_lg_dirty_mult;
- 	size_t sz = sizeof(ssize_t);
- 
- 	test_skip_if(opt_purge != purge_mode_ratio);
- 
--	assert_d_eq(mallctl("arena.0.lg_dirty_mult", &orig_lg_dirty_mult, &sz,
--	    NULL, 0), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arena.0.lg_dirty_mult",
-+	    (void *)&orig_lg_dirty_mult, &sz, NULL, 0), 0,
-+	    "Unexpected mallctl() failure");
- 
- 	lg_dirty_mult = -2;
- 	assert_d_eq(mallctl("arena.0.lg_dirty_mult", NULL, NULL,
--	    &lg_dirty_mult, sizeof(ssize_t)), EFAULT,
-+	    (void *)&lg_dirty_mult, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	lg_dirty_mult = (sizeof(size_t) << 3);
- 	assert_d_eq(mallctl("arena.0.lg_dirty_mult", NULL, NULL,
--	    &lg_dirty_mult, sizeof(ssize_t)), EFAULT,
-+	    (void *)&lg_dirty_mult, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	for (prev_lg_dirty_mult = orig_lg_dirty_mult, lg_dirty_mult = -1;
- 	    lg_dirty_mult < (ssize_t)(sizeof(size_t) << 3); prev_lg_dirty_mult
- 	    = lg_dirty_mult, lg_dirty_mult++) {
- 		ssize_t old_lg_dirty_mult;
- 
--		assert_d_eq(mallctl("arena.0.lg_dirty_mult", &old_lg_dirty_mult,
--		    &sz, &lg_dirty_mult, sizeof(ssize_t)), 0,
--		    "Unexpected mallctl() failure");
-+		assert_d_eq(mallctl("arena.0.lg_dirty_mult",
-+		    (void *)&old_lg_dirty_mult, &sz, (void *)&lg_dirty_mult,
-+		    sizeof(ssize_t)), 0, "Unexpected mallctl() failure");
- 		assert_zd_eq(old_lg_dirty_mult, prev_lg_dirty_mult,
- 		    "Unexpected old arena.0.lg_dirty_mult");
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_arena_i_decay_time)
- {
- 	ssize_t decay_time, orig_decay_time, prev_decay_time;
- 	size_t sz = sizeof(ssize_t);
- 
- 	test_skip_if(opt_purge != purge_mode_decay);
- 
--	assert_d_eq(mallctl("arena.0.decay_time", &orig_decay_time, &sz,
-+	assert_d_eq(mallctl("arena.0.decay_time", (void *)&orig_decay_time, &sz,
- 	    NULL, 0), 0, "Unexpected mallctl() failure");
- 
- 	decay_time = -2;
- 	assert_d_eq(mallctl("arena.0.decay_time", NULL, NULL,
--	    &decay_time, sizeof(ssize_t)), EFAULT,
-+	    (void *)&decay_time, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	decay_time = 0x7fffffff;
- 	assert_d_eq(mallctl("arena.0.decay_time", NULL, NULL,
--	    &decay_time, sizeof(ssize_t)), 0,
-+	    (void *)&decay_time, sizeof(ssize_t)), 0,
- 	    "Unexpected mallctl() failure");
- 
- 	for (prev_decay_time = decay_time, decay_time = -1;
- 	    decay_time < 20; prev_decay_time = decay_time, decay_time++) {
- 		ssize_t old_decay_time;
- 
--		assert_d_eq(mallctl("arena.0.decay_time", &old_decay_time,
--		    &sz, &decay_time, sizeof(ssize_t)), 0,
-+		assert_d_eq(mallctl("arena.0.decay_time", (void *)&old_decay_time,
-+		    &sz, (void *)&decay_time, sizeof(ssize_t)), 0,
- 		    "Unexpected mallctl() failure");
- 		assert_zd_eq(old_decay_time, prev_decay_time,
- 		    "Unexpected old arena.0.decay_time");
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_arena_i_purge)
-@@ -424,18 +433,18 @@ TEST_BEGIN(test_arena_i_purge)
- 	unsigned narenas;
- 	size_t sz = sizeof(unsigned);
- 	size_t mib[3];
- 	size_t miblen = 3;
- 
- 	assert_d_eq(mallctl("arena.0.purge", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 
--	assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 	assert_d_eq(mallctlnametomib("arena.0.purge", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() failure");
- 	mib[1] = narenas;
- 	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctlbymib() failure");
- }
- TEST_END
- 
-@@ -444,18 +453,18 @@ TEST_BEGIN(test_arena_i_decay)
- 	unsigned narenas;
- 	size_t sz = sizeof(unsigned);
- 	size_t mib[3];
- 	size_t miblen = 3;
- 
- 	assert_d_eq(mallctl("arena.0.decay", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 
--	assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 	assert_d_eq(mallctlnametomib("arena.0.decay", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() failure");
- 	mib[1] = narenas;
- 	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctlbymib() failure");
- }
- TEST_END
- 
-@@ -466,138 +475,142 @@ TEST_BEGIN(test_arena_i_dss)
- 	size_t mib[3];
- 	size_t miblen;
- 
- 	miblen = sizeof(mib)/sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("arena.0.dss", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() error");
- 
- 	dss_prec_new = "disabled";
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, &dss_prec_new,
--	    sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_old, &sz,
-+	    (void *)&dss_prec_new, sizeof(dss_prec_new)), 0,
-+	    "Unexpected mallctl() failure");
- 	assert_str_ne(dss_prec_old, "primary",
- 	    "Unexpected default for dss precedence");
- 
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_new, &sz, &dss_prec_old,
--	    sizeof(dss_prec_old)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_new, &sz,
-+	    (void *)&dss_prec_old, sizeof(dss_prec_old)), 0,
-+	    "Unexpected mallctl() failure");
- 
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_old, &sz, NULL,
-+	    0), 0, "Unexpected mallctl() failure");
- 	assert_str_ne(dss_prec_old, "primary",
- 	    "Unexpected value for dss precedence");
- 
- 	mib[1] = narenas_total_get();
- 	dss_prec_new = "disabled";
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, &dss_prec_new,
--	    sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_old, &sz,
-+	    (void *)&dss_prec_new, sizeof(dss_prec_new)), 0,
-+	    "Unexpected mallctl() failure");
- 	assert_str_ne(dss_prec_old, "primary",
- 	    "Unexpected default for dss precedence");
- 
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_new, &sz, &dss_prec_old,
--	    sizeof(dss_prec_new)), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_new, &sz,
-+	    (void *)&dss_prec_old, sizeof(dss_prec_new)), 0,
-+	    "Unexpected mallctl() failure");
- 
--	assert_d_eq(mallctlbymib(mib, miblen, &dss_prec_old, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&dss_prec_old, &sz, NULL,
-+	    0), 0, "Unexpected mallctl() failure");
- 	assert_str_ne(dss_prec_old, "primary",
- 	    "Unexpected value for dss precedence");
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_initialized)
- {
- 	unsigned narenas;
- 	size_t sz = sizeof(narenas);
- 
--	assert_d_eq(mallctl("arenas.narenas", &narenas, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() failure");
- 	{
- 		VARIABLE_ARRAY(bool, initialized, narenas);
- 
- 		sz = narenas * sizeof(bool);
--		assert_d_eq(mallctl("arenas.initialized", initialized, &sz,
--		    NULL, 0), 0, "Unexpected mallctl() failure");
-+		assert_d_eq(mallctl("arenas.initialized", (void *)initialized,
-+		    &sz, NULL, 0), 0, "Unexpected mallctl() failure");
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_lg_dirty_mult)
- {
- 	ssize_t lg_dirty_mult, orig_lg_dirty_mult, prev_lg_dirty_mult;
- 	size_t sz = sizeof(ssize_t);
- 
- 	test_skip_if(opt_purge != purge_mode_ratio);
- 
--	assert_d_eq(mallctl("arenas.lg_dirty_mult", &orig_lg_dirty_mult, &sz,
--	    NULL, 0), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.lg_dirty_mult", (void *)&orig_lg_dirty_mult,
-+	    &sz, NULL, 0), 0, "Unexpected mallctl() failure");
- 
- 	lg_dirty_mult = -2;
- 	assert_d_eq(mallctl("arenas.lg_dirty_mult", NULL, NULL,
--	    &lg_dirty_mult, sizeof(ssize_t)), EFAULT,
-+	    (void *)&lg_dirty_mult, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	lg_dirty_mult = (sizeof(size_t) << 3);
- 	assert_d_eq(mallctl("arenas.lg_dirty_mult", NULL, NULL,
--	    &lg_dirty_mult, sizeof(ssize_t)), EFAULT,
-+	    (void *)&lg_dirty_mult, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	for (prev_lg_dirty_mult = orig_lg_dirty_mult, lg_dirty_mult = -1;
- 	    lg_dirty_mult < (ssize_t)(sizeof(size_t) << 3); prev_lg_dirty_mult =
- 	    lg_dirty_mult, lg_dirty_mult++) {
- 		ssize_t old_lg_dirty_mult;
- 
--		assert_d_eq(mallctl("arenas.lg_dirty_mult", &old_lg_dirty_mult,
--		    &sz, &lg_dirty_mult, sizeof(ssize_t)), 0,
--		    "Unexpected mallctl() failure");
-+		assert_d_eq(mallctl("arenas.lg_dirty_mult",
-+		    (void *)&old_lg_dirty_mult, &sz, (void *)&lg_dirty_mult,
-+		    sizeof(ssize_t)), 0, "Unexpected mallctl() failure");
- 		assert_zd_eq(old_lg_dirty_mult, prev_lg_dirty_mult,
- 		    "Unexpected old arenas.lg_dirty_mult");
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_decay_time)
- {
- 	ssize_t decay_time, orig_decay_time, prev_decay_time;
- 	size_t sz = sizeof(ssize_t);
- 
- 	test_skip_if(opt_purge != purge_mode_decay);
- 
--	assert_d_eq(mallctl("arenas.decay_time", &orig_decay_time, &sz,
-+	assert_d_eq(mallctl("arenas.decay_time", (void *)&orig_decay_time, &sz,
- 	    NULL, 0), 0, "Unexpected mallctl() failure");
- 
- 	decay_time = -2;
- 	assert_d_eq(mallctl("arenas.decay_time", NULL, NULL,
--	    &decay_time, sizeof(ssize_t)), EFAULT,
-+	    (void *)&decay_time, sizeof(ssize_t)), EFAULT,
- 	    "Unexpected mallctl() success");
- 
- 	decay_time = 0x7fffffff;
- 	assert_d_eq(mallctl("arenas.decay_time", NULL, NULL,
--	    &decay_time, sizeof(ssize_t)), 0,
-+	    (void *)&decay_time, sizeof(ssize_t)), 0,
- 	    "Expected mallctl() failure");
- 
- 	for (prev_decay_time = decay_time, decay_time = -1;
- 	    decay_time < 20; prev_decay_time = decay_time, decay_time++) {
- 		ssize_t old_decay_time;
- 
--		assert_d_eq(mallctl("arenas.decay_time", &old_decay_time,
--		    &sz, &decay_time, sizeof(ssize_t)), 0,
--		    "Unexpected mallctl() failure");
-+		assert_d_eq(mallctl("arenas.decay_time",
-+		    (void *)&old_decay_time, &sz, (void *)&decay_time,
-+		    sizeof(ssize_t)), 0, "Unexpected mallctl() failure");
- 		assert_zd_eq(old_decay_time, prev_decay_time,
- 		    "Unexpected old arenas.decay_time");
- 	}
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_constants)
- {
- 
- #define	TEST_ARENAS_CONSTANT(t, name, expected) do {			\
- 	t name;								\
- 	size_t sz = sizeof(t);						\
--	assert_d_eq(mallctl("arenas."#name, &name, &sz, NULL, 0), 0,	\
--	    "Unexpected mallctl() failure");				\
-+	assert_d_eq(mallctl("arenas."#name, (void *)&name, &sz, NULL,	\
-+	    0), 0, "Unexpected mallctl() failure");			\
- 	assert_zu_eq(name, expected, "Incorrect "#name" size");		\
- } while (0)
- 
- 	TEST_ARENAS_CONSTANT(size_t, quantum, QUANTUM);
- 	TEST_ARENAS_CONSTANT(size_t, page, PAGE);
- 	TEST_ARENAS_CONSTANT(unsigned, nbins, NBINS);
- 	TEST_ARENAS_CONSTANT(unsigned, nlruns, nlclasses);
- 	TEST_ARENAS_CONSTANT(unsigned, nhchunks, nhclasses);
-@@ -607,18 +620,18 @@ TEST_BEGIN(test_arenas_constants)
- TEST_END
- 
- TEST_BEGIN(test_arenas_bin_constants)
- {
- 
- #define	TEST_ARENAS_BIN_CONSTANT(t, name, expected) do {		\
- 	t name;								\
- 	size_t sz = sizeof(t);						\
--	assert_d_eq(mallctl("arenas.bin.0."#name, &name, &sz, NULL, 0),	\
--	    0, "Unexpected mallctl() failure");				\
-+	assert_d_eq(mallctl("arenas.bin.0."#name, (void *)&name, &sz,	\
-+	    NULL, 0), 0, "Unexpected mallctl() failure");		\
- 	assert_zu_eq(name, expected, "Incorrect "#name" size");		\
- } while (0)
- 
- 	TEST_ARENAS_BIN_CONSTANT(size_t, size, arena_bin_info[0].reg_size);
- 	TEST_ARENAS_BIN_CONSTANT(uint32_t, nregs, arena_bin_info[0].nregs);
- 	TEST_ARENAS_BIN_CONSTANT(size_t, run_size, arena_bin_info[0].run_size);
- 
- #undef TEST_ARENAS_BIN_CONSTANT
-@@ -626,70 +639,70 @@ TEST_BEGIN(test_arenas_bin_constants)
- TEST_END
- 
- TEST_BEGIN(test_arenas_lrun_constants)
- {
- 
- #define	TEST_ARENAS_LRUN_CONSTANT(t, name, expected) do {		\
- 	t name;								\
- 	size_t sz = sizeof(t);						\
--	assert_d_eq(mallctl("arenas.lrun.0."#name, &name, &sz, NULL,	\
--	    0), 0, "Unexpected mallctl() failure");			\
-+	assert_d_eq(mallctl("arenas.lrun.0."#name, (void *)&name, &sz,	\
-+	    NULL, 0), 0, "Unexpected mallctl() failure");		\
- 	assert_zu_eq(name, expected, "Incorrect "#name" size");		\
- } while (0)
- 
- 	TEST_ARENAS_LRUN_CONSTANT(size_t, size, LARGE_MINCLASS);
- 
- #undef TEST_ARENAS_LRUN_CONSTANT
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_hchunk_constants)
- {
- 
- #define	TEST_ARENAS_HCHUNK_CONSTANT(t, name, expected) do {		\
- 	t name;								\
- 	size_t sz = sizeof(t);						\
--	assert_d_eq(mallctl("arenas.hchunk.0."#name, &name, &sz, NULL,	\
--	    0), 0, "Unexpected mallctl() failure");			\
-+	assert_d_eq(mallctl("arenas.hchunk.0."#name, (void *)&name,	\
-+	    &sz, NULL, 0), 0, "Unexpected mallctl() failure");		\
- 	assert_zu_eq(name, expected, "Incorrect "#name" size");		\
- } while (0)
- 
- 	TEST_ARENAS_HCHUNK_CONSTANT(size_t, size, chunksize);
- 
- #undef TEST_ARENAS_HCHUNK_CONSTANT
- }
- TEST_END
- 
- TEST_BEGIN(test_arenas_extend)
- {
- 	unsigned narenas_before, arena, narenas_after;
- 	size_t sz = sizeof(unsigned);
- 
--	assert_d_eq(mallctl("arenas.narenas", &narenas_before, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas_before, &sz,
-+	    NULL, 0), 0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.extend", (void *)&arena, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
--	assert_d_eq(mallctl("arenas.extend", &arena, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
--	assert_d_eq(mallctl("arenas.narenas", &narenas_after, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("arenas.narenas", (void *)&narenas_after, &sz, NULL,
-+	    0), 0, "Unexpected mallctl() failure");
- 
- 	assert_u_eq(narenas_before+1, narenas_after,
- 	    "Unexpected number of arenas before versus after extension");
- 	assert_u_eq(arena, narenas_after-1, "Unexpected arena index");
- }
- TEST_END
- 
- TEST_BEGIN(test_stats_arenas)
- {
- 
- #define	TEST_STATS_ARENAS(t, name) do {					\
- 	t name;								\
- 	size_t sz = sizeof(t);						\
--	assert_d_eq(mallctl("stats.arenas.0."#name, &name, &sz, NULL,	\
--	    0), 0, "Unexpected mallctl() failure");			\
-+	assert_d_eq(mallctl("stats.arenas.0."#name, (void *)&name, &sz,	\
-+	    NULL, 0), 0, "Unexpected mallctl() failure");		\
- } while (0)
- 
- 	TEST_STATS_ARENAS(unsigned, nthreads);
- 	TEST_STATS_ARENAS(const char *, dss);
- 	TEST_STATS_ARENAS(ssize_t, lg_dirty_mult);
- 	TEST_STATS_ARENAS(ssize_t, decay_time);
- 	TEST_STATS_ARENAS(size_t, pactive);
- 	TEST_STATS_ARENAS(size_t, pdirty);
-diff --git a/memory/jemalloc/src/test/unit/pack.c b/memory/jemalloc/src/test/unit/pack.c
-new file mode 100644
---- /dev/null
-+++ b/memory/jemalloc/src/test/unit/pack.c
-@@ -0,0 +1,206 @@
-+#include "test/jemalloc_test.h"
-+
-+const char *malloc_conf =
-+    /* Use smallest possible chunk size. */
-+    "lg_chunk:0"
-+    /* Immediately purge to minimize fragmentation. */
-+    ",lg_dirty_mult:-1"
-+    ",decay_time:-1"
-+    ;
-+
-+/*
-+ * Size class that is a divisor of the page size, ideally 4+ regions per run.
-+ */
-+#if LG_PAGE <= 14
-+#define	SZ	(ZU(1) << (LG_PAGE - 2))
-+#else
-+#define	SZ	4096
-+#endif
-+
-+/*
-+ * Number of chunks to consume at high water mark.  Should be at least 2 so that
-+ * if mmap()ed memory grows downward, downward growth of mmap()ed memory is
-+ * tested.
-+ */
-+#define	NCHUNKS	8
-+
-+static unsigned
-+binind_compute(void)
-+{
-+	size_t sz;
-+	unsigned nbins, i;
-+
-+	sz = sizeof(nbins);
-+	assert_d_eq(mallctl("arenas.nbins", (void *)&nbins, &sz, NULL, 0), 0,
-+	    "Unexpected mallctl failure");
-+
-+	for (i = 0; i < nbins; i++) {
-+		size_t mib[4];
-+		size_t miblen = sizeof(mib)/sizeof(size_t);
-+		size_t size;
-+
-+		assert_d_eq(mallctlnametomib("arenas.bin.0.size", mib,
-+		    &miblen), 0, "Unexpected mallctlnametomb failure");
-+		mib[2] = (size_t)i;
-+
-+		sz = sizeof(size);
-+		assert_d_eq(mallctlbymib(mib, miblen, (void *)&size, &sz, NULL,
-+		    0), 0, "Unexpected mallctlbymib failure");
-+		if (size == SZ)
-+			return (i);
-+	}
-+
-+	test_fail("Unable to compute nregs_per_run");
-+	return (0);
-+}
-+
-+static size_t
-+nregs_per_run_compute(void)
-+{
-+	uint32_t nregs;
-+	size_t sz;
-+	unsigned binind = binind_compute();
-+	size_t mib[4];
-+	size_t miblen = sizeof(mib)/sizeof(size_t);
-+
-+	assert_d_eq(mallctlnametomib("arenas.bin.0.nregs", mib, &miblen), 0,
-+	    "Unexpected mallctlnametomb failure");
-+	mib[2] = (size_t)binind;
-+	sz = sizeof(nregs);
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&nregs, &sz, NULL,
-+	    0), 0, "Unexpected mallctlbymib failure");
-+	return (nregs);
-+}
-+
-+static size_t
-+npages_per_run_compute(void)
-+{
-+	size_t sz;
-+	unsigned binind = binind_compute();
-+	size_t mib[4];
-+	size_t miblen = sizeof(mib)/sizeof(size_t);
-+	size_t run_size;
-+
-+	assert_d_eq(mallctlnametomib("arenas.bin.0.run_size", mib, &miblen), 0,
-+	    "Unexpected mallctlnametomb failure");
-+	mib[2] = (size_t)binind;
-+	sz = sizeof(run_size);
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&run_size, &sz, NULL,
-+	    0), 0, "Unexpected mallctlbymib failure");
-+	return (run_size >> LG_PAGE);
-+}
-+
-+static size_t
-+npages_per_chunk_compute(void)
-+{
-+
-+	return ((chunksize >> LG_PAGE) - map_bias);
-+}
-+
-+static size_t
-+nruns_per_chunk_compute(void)
-+{
-+
-+	return (npages_per_chunk_compute() / npages_per_run_compute());
-+}
-+
-+static unsigned
-+arenas_extend_mallctl(void)
-+{
-+	unsigned arena_ind;
-+	size_t sz;
-+
-+	sz = sizeof(arena_ind);
-+	assert_d_eq(mallctl("arenas.extend", (void *)&arena_ind, &sz, NULL, 0),
-+	    0, "Error in arenas.extend");
-+
-+	return (arena_ind);
-+}
-+
-+static void
-+arena_reset_mallctl(unsigned arena_ind)
-+{
-+	size_t mib[3];
-+	size_t miblen = sizeof(mib)/sizeof(size_t);
-+
-+	assert_d_eq(mallctlnametomib("arena.0.reset", mib, &miblen), 0,
-+	    "Unexpected mallctlnametomib() failure");
-+	mib[1] = (size_t)arena_ind;
-+	assert_d_eq(mallctlbymib(mib, miblen, NULL, NULL, NULL, 0), 0,
-+	    "Unexpected mallctlbymib() failure");
-+}
-+
-+TEST_BEGIN(test_pack)
-+{
-+	unsigned arena_ind = arenas_extend_mallctl();
-+	size_t nregs_per_run = nregs_per_run_compute();
-+	size_t nruns_per_chunk = nruns_per_chunk_compute();
-+	size_t nruns = nruns_per_chunk * NCHUNKS;
-+	size_t nregs = nregs_per_run * nruns;
-+	VARIABLE_ARRAY(void *, ptrs, nregs);
-+	size_t i, j, offset;
-+
-+	/* Fill matrix. */
-+	for (i = offset = 0; i < nruns; i++) {
-+		for (j = 0; j < nregs_per_run; j++) {
-+			void *p = mallocx(SZ, MALLOCX_ARENA(arena_ind) |
-+			    MALLOCX_TCACHE_NONE);
-+			assert_ptr_not_null(p,
-+			    "Unexpected mallocx(%zu, MALLOCX_ARENA(%u) |"
-+			    " MALLOCX_TCACHE_NONE) failure, run=%zu, reg=%zu",
-+			    SZ, arena_ind, i, j);
-+			ptrs[(i * nregs_per_run) + j] = p;
-+		}
-+	}
-+
-+	/*
-+	 * Free all but one region of each run, but rotate which region is
-+	 * preserved, so that subsequent allocations exercise the within-run
-+	 * layout policy.
-+	 */
-+	offset = 0;
-+	for (i = offset = 0;
-+	    i < nruns;
-+	    i++, offset = (offset + 1) % nregs_per_run) {
-+		for (j = 0; j < nregs_per_run; j++) {
-+			void *p = ptrs[(i * nregs_per_run) + j];
-+			if (offset == j)
-+				continue;
-+			dallocx(p, MALLOCX_ARENA(arena_ind) |
-+			    MALLOCX_TCACHE_NONE);
-+		}
-+	}
-+
-+	/*
-+	 * Logically refill matrix, skipping preserved regions and verifying
-+	 * that the matrix is unmodified.
-+	 */
-+	offset = 0;
-+	for (i = offset = 0;
-+	    i < nruns;
-+	    i++, offset = (offset + 1) % nregs_per_run) {
-+		for (j = 0; j < nregs_per_run; j++) {
-+			void *p;
-+
-+			if (offset == j)
-+				continue;
-+			p = mallocx(SZ, MALLOCX_ARENA(arena_ind) |
-+			    MALLOCX_TCACHE_NONE);
-+			assert_ptr_eq(p, ptrs[(i * nregs_per_run) + j],
-+			    "Unexpected refill discrepancy, run=%zu, reg=%zu\n",
-+			    i, j);
-+		}
-+	}
-+
-+	/* Clean up. */
-+	arena_reset_mallctl(arena_ind);
-+}
-+TEST_END
-+
-+int
-+main(void)
-+{
-+
-+	return (test(
-+	    test_pack));
-+}
-diff --git a/memory/jemalloc/src/test/unit/pages.c b/memory/jemalloc/src/test/unit/pages.c
-new file mode 100644
---- /dev/null
-+++ b/memory/jemalloc/src/test/unit/pages.c
-@@ -0,0 +1,27 @@
-+#include "test/jemalloc_test.h"
-+
-+TEST_BEGIN(test_pages_huge)
-+{
-+	bool commit;
-+	void *pages;
-+
-+	commit = true;
-+	pages = pages_map(NULL, PAGE, &commit);
-+	assert_ptr_not_null(pages, "Unexpected pages_map() error");
-+
-+	assert_false(pages_huge(pages, PAGE),
-+	    "Unexpected pages_huge() result");
-+	assert_false(pages_nohuge(pages, PAGE),
-+	    "Unexpected pages_nohuge() result");
-+
-+	pages_unmap(pages, PAGE);
-+}
-+TEST_END
-+
-+int
-+main(void)
-+{
-+
-+	return (test(
-+	    test_pages_huge));
-+}
-diff --git a/memory/jemalloc/src/test/unit/prof_accum.c b/memory/jemalloc/src/test/unit/prof_accum.c
---- a/memory/jemalloc/src/test/unit/prof_accum.c
-+++ b/memory/jemalloc/src/test/unit/prof_accum.c
-@@ -63,18 +63,19 @@ TEST_BEGIN(test_idump)
- 	bool active;
- 	thd_t thds[NTHREADS];
- 	unsigned thd_args[NTHREADS];
- 	unsigned i;
- 
- 	test_skip_if(!config_prof);
- 
- 	active = true;
--	assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
--	    0, "Unexpected mallctl failure while activating profiling");
-+	assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active,
-+	    sizeof(active)), 0,
-+	    "Unexpected mallctl failure while activating profiling");
- 
- 	prof_dump_open = prof_dump_open_intercept;
- 
- 	for (i = 0; i < NTHREADS; i++) {
- 		thd_args[i] = i;
- 		thd_create(&thds[i], thd_start, (void *)&thd_args[i]);
- 	}
- 	for (i = 0; i < NTHREADS; i++)
-diff --git a/memory/jemalloc/src/test/unit/prof_active.c b/memory/jemalloc/src/test/unit/prof_active.c
---- a/memory/jemalloc/src/test/unit/prof_active.c
-+++ b/memory/jemalloc/src/test/unit/prof_active.c
-@@ -7,31 +7,32 @@ const char *malloc_conf =
- 
- static void
- mallctl_bool_get(const char *name, bool expected, const char *func, int line)
- {
- 	bool old;
- 	size_t sz;
- 
- 	sz = sizeof(old);
--	assert_d_eq(mallctl(name, &old, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl(name, (void *)&old, &sz, NULL, 0), 0,
- 	    "%s():%d: Unexpected mallctl failure reading %s", func, line, name);
- 	assert_b_eq(old, expected, "%s():%d: Unexpected %s value", func, line,
- 	    name);
- }
- 
- static void
- mallctl_bool_set(const char *name, bool old_expected, bool val_new,
-     const char *func, int line)
- {
- 	bool old;
- 	size_t sz;
- 
- 	sz = sizeof(old);
--	assert_d_eq(mallctl(name, &old, &sz, &val_new, sizeof(val_new)), 0,
-+	assert_d_eq(mallctl(name, (void *)&old, &sz, (void *)&val_new,
-+	    sizeof(val_new)), 0,
- 	    "%s():%d: Unexpected mallctl failure reading/writing %s", func,
- 	    line, name);
- 	assert_b_eq(old, old_expected, "%s():%d: Unexpected %s value", func,
- 	    line, name);
- }
- 
- static void
- mallctl_prof_active_get_impl(bool prof_active_old_expected, const char *func,
-diff --git a/memory/jemalloc/src/test/unit/prof_gdump.c b/memory/jemalloc/src/test/unit/prof_gdump.c
---- a/memory/jemalloc/src/test/unit/prof_gdump.c
-+++ b/memory/jemalloc/src/test/unit/prof_gdump.c
-@@ -23,46 +23,47 @@ TEST_BEGIN(test_gdump)
- {
- 	bool active, gdump, gdump_old;
- 	void *p, *q, *r, *s;
- 	size_t sz;
- 
- 	test_skip_if(!config_prof);
- 
- 	active = true;
--	assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
--	    0, "Unexpected mallctl failure while activating profiling");
-+	assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active,
-+	    sizeof(active)), 0,
-+	    "Unexpected mallctl failure while activating profiling");
- 
- 	prof_dump_open = prof_dump_open_intercept;
- 
- 	did_prof_dump_open = false;
- 	p = mallocx(chunksize, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 	assert_true(did_prof_dump_open, "Expected a profile dump");
- 
- 	did_prof_dump_open = false;
- 	q = mallocx(chunksize, 0);
- 	assert_ptr_not_null(q, "Unexpected mallocx() failure");
- 	assert_true(did_prof_dump_open, "Expected a profile dump");
- 
- 	gdump = false;
- 	sz = sizeof(gdump_old);
--	assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump,
--	    sizeof(gdump)), 0,
-+	assert_d_eq(mallctl("prof.gdump", (void *)&gdump_old, &sz,
-+	    (void *)&gdump, sizeof(gdump)), 0,
- 	    "Unexpected mallctl failure while disabling prof.gdump");
- 	assert(gdump_old);
- 	did_prof_dump_open = false;
- 	r = mallocx(chunksize, 0);
- 	assert_ptr_not_null(q, "Unexpected mallocx() failure");
- 	assert_false(did_prof_dump_open, "Unexpected profile dump");
- 
- 	gdump = true;
- 	sz = sizeof(gdump_old);
--	assert_d_eq(mallctl("prof.gdump", &gdump_old, &sz, &gdump,
--	    sizeof(gdump)), 0,
-+	assert_d_eq(mallctl("prof.gdump", (void *)&gdump_old, &sz,
-+	    (void *)&gdump, sizeof(gdump)), 0,
- 	    "Unexpected mallctl failure while enabling prof.gdump");
- 	assert(!gdump_old);
- 	did_prof_dump_open = false;
- 	s = mallocx(chunksize, 0);
- 	assert_ptr_not_null(q, "Unexpected mallocx() failure");
- 	assert_true(did_prof_dump_open, "Expected a profile dump");
- 
- 	dallocx(p, 0);
-diff --git a/memory/jemalloc/src/test/unit/prof_idump.c b/memory/jemalloc/src/test/unit/prof_idump.c
---- a/memory/jemalloc/src/test/unit/prof_idump.c
-+++ b/memory/jemalloc/src/test/unit/prof_idump.c
-@@ -24,18 +24,19 @@ prof_dump_open_intercept(bool propagate_
- TEST_BEGIN(test_idump)
- {
- 	bool active;
- 	void *p;
- 
- 	test_skip_if(!config_prof);
- 
- 	active = true;
--	assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
--	    0, "Unexpected mallctl failure while activating profiling");
-+	assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active,
-+	    sizeof(active)), 0,
-+	    "Unexpected mallctl failure while activating profiling");
- 
- 	prof_dump_open = prof_dump_open_intercept;
- 
- 	did_prof_dump_open = false;
- 	p = mallocx(1, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 	dallocx(p, 0);
- 	assert_true(did_prof_dump_open, "Expected a profile dump");
-diff --git a/memory/jemalloc/src/test/unit/prof_reset.c b/memory/jemalloc/src/test/unit/prof_reset.c
---- a/memory/jemalloc/src/test/unit/prof_reset.c
-+++ b/memory/jemalloc/src/test/unit/prof_reset.c
-@@ -15,52 +15,53 @@ prof_dump_open_intercept(bool propagate_
- 
- 	return (fd);
- }
- 
- static void
- set_prof_active(bool active)
- {
- 
--	assert_d_eq(mallctl("prof.active", NULL, NULL, &active, sizeof(active)),
--	    0, "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("prof.active", NULL, NULL, (void *)&active,
-+	    sizeof(active)), 0, "Unexpected mallctl failure");
- }
- 
- static size_t
- get_lg_prof_sample(void)
- {
- 	size_t lg_prof_sample;
- 	size_t sz = sizeof(size_t);
- 
--	assert_d_eq(mallctl("prof.lg_sample", &lg_prof_sample, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("prof.lg_sample", (void *)&lg_prof_sample, &sz,
-+	    NULL, 0), 0,
- 	    "Unexpected mallctl failure while reading profiling sample rate");
- 	return (lg_prof_sample);
- }
- 
- static void
- do_prof_reset(size_t lg_prof_sample)
- {
- 	assert_d_eq(mallctl("prof.reset", NULL, NULL,
--	    &lg_prof_sample, sizeof(size_t)), 0,
-+	    (void *)&lg_prof_sample, sizeof(size_t)), 0,
- 	    "Unexpected mallctl failure while resetting profile data");
- 	assert_zu_eq(lg_prof_sample, get_lg_prof_sample(),
- 	    "Expected profile sample rate change");
- }
- 
- TEST_BEGIN(test_prof_reset_basic)
- {
- 	size_t lg_prof_sample_orig, lg_prof_sample, lg_prof_sample_next;
- 	size_t sz;
- 	unsigned i;
- 
- 	test_skip_if(!config_prof);
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("opt.lg_prof_sample", &lg_prof_sample_orig, &sz,
--	    NULL, 0), 0,
-+	assert_d_eq(mallctl("opt.lg_prof_sample", (void *)&lg_prof_sample_orig,
-+	    &sz, NULL, 0), 0,
- 	    "Unexpected mallctl failure while reading profiling sample rate");
- 	assert_zu_eq(lg_prof_sample_orig, 0,
- 	    "Unexpected profiling sample rate");
- 	lg_prof_sample = get_lg_prof_sample();
- 	assert_zu_eq(lg_prof_sample_orig, lg_prof_sample,
- 	    "Unexpected disagreement between \"opt.lg_prof_sample\" and "
- 	    "\"prof.lg_sample\"");
- 
-diff --git a/memory/jemalloc/src/test/unit/prof_thread_name.c b/memory/jemalloc/src/test/unit/prof_thread_name.c
---- a/memory/jemalloc/src/test/unit/prof_thread_name.c
-+++ b/memory/jemalloc/src/test/unit/prof_thread_name.c
-@@ -7,32 +7,33 @@ const char *malloc_conf = "prof:true,pro
- static void
- mallctl_thread_name_get_impl(const char *thread_name_expected, const char *func,
-     int line)
- {
- 	const char *thread_name_old;
- 	size_t sz;
- 
- 	sz = sizeof(thread_name_old);
--	assert_d_eq(mallctl("thread.prof.name", &thread_name_old, &sz, NULL, 0),
--	    0, "%s():%d: Unexpected mallctl failure reading thread.prof.name",
-+	assert_d_eq(mallctl("thread.prof.name", (void *)&thread_name_old, &sz,
-+	    NULL, 0), 0,
-+	    "%s():%d: Unexpected mallctl failure reading thread.prof.name",
- 	    func, line);
- 	assert_str_eq(thread_name_old, thread_name_expected,
- 	    "%s():%d: Unexpected thread.prof.name value", func, line);
- }
- #define	mallctl_thread_name_get(a)					\
- 	mallctl_thread_name_get_impl(a, __func__, __LINE__)
- 
- static void
- mallctl_thread_name_set_impl(const char *thread_name, const char *func,
-     int line)
- {
- 
--	assert_d_eq(mallctl("thread.prof.name", NULL, NULL, &thread_name,
--	    sizeof(thread_name)), 0,
-+	assert_d_eq(mallctl("thread.prof.name", NULL, NULL,
-+	    (void *)&thread_name, sizeof(thread_name)), 0,
- 	    "%s():%d: Unexpected mallctl failure reading thread.prof.name",
- 	    func, line);
- 	mallctl_thread_name_get_impl(thread_name, func, line);
- }
- #define	mallctl_thread_name_set(a)					\
- 	mallctl_thread_name_set_impl(a, __func__, __LINE__)
- 
- TEST_BEGIN(test_prof_thread_name_validation)
-@@ -41,36 +42,37 @@ TEST_BEGIN(test_prof_thread_name_validat
- 
- 	test_skip_if(!config_prof);
- 
- 	mallctl_thread_name_get("");
- 	mallctl_thread_name_set("hi there");
- 
- 	/* NULL input shouldn't be allowed. */
- 	thread_name = NULL;
--	assert_d_eq(mallctl("thread.prof.name", NULL, NULL, &thread_name,
--	    sizeof(thread_name)), EFAULT,
-+	assert_d_eq(mallctl("thread.prof.name", NULL, NULL,
-+	    (void *)&thread_name, sizeof(thread_name)), EFAULT,
- 	    "Unexpected mallctl result writing \"%s\" to thread.prof.name",
- 	    thread_name);
- 
- 	/* '\n' shouldn't be allowed. */
- 	thread_name = "hi\nthere";
--	assert_d_eq(mallctl("thread.prof.name", NULL, NULL, &thread_name,
--	    sizeof(thread_name)), EFAULT,
-+	assert_d_eq(mallctl("thread.prof.name", NULL, NULL,
-+	    (void *)&thread_name, sizeof(thread_name)), EFAULT,
- 	    "Unexpected mallctl result writing \"%s\" to thread.prof.name",
- 	    thread_name);
- 
- 	/* Simultaneous read/write shouldn't be allowed. */
- 	{
- 		const char *thread_name_old;
- 		size_t sz;
- 
- 		sz = sizeof(thread_name_old);
--		assert_d_eq(mallctl("thread.prof.name", &thread_name_old, &sz,
--		    &thread_name, sizeof(thread_name)), EPERM,
-+		assert_d_eq(mallctl("thread.prof.name",
-+		    (void *)&thread_name_old, &sz, (void *)&thread_name,
-+		    sizeof(thread_name)), EPERM,
- 		    "Unexpected mallctl result writing \"%s\" to "
- 		    "thread.prof.name", thread_name);
- 	}
- 
- 	mallctl_thread_name_set("");
- }
- TEST_END
- 
-diff --git a/memory/jemalloc/src/test/unit/run_quantize.c b/memory/jemalloc/src/test/unit/run_quantize.c
---- a/memory/jemalloc/src/test/unit/run_quantize.c
-+++ b/memory/jemalloc/src/test/unit/run_quantize.c
-@@ -8,26 +8,26 @@ TEST_BEGIN(test_small_run_size)
- 	size_t miblen = sizeof(mib) / sizeof(size_t);
- 
- 	/*
- 	 * Iterate over all small size classes, get their run sizes, and verify
- 	 * that the quantized size is the same as the run size.
- 	 */
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nbins", &nbins, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.nbins", (void *)&nbins, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
- 
- 	assert_d_eq(mallctlnametomib("arenas.bin.0.run_size", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib failure");
- 	for (i = 0; i < nbins; i++) {
- 		mib[2] = i;
- 		sz = sizeof(size_t);
--		assert_d_eq(mallctlbymib(mib, miblen, &run_size, &sz, NULL, 0),
--		    0, "Unexpected mallctlbymib failure");
-+		assert_d_eq(mallctlbymib(mib, miblen, (void *)&run_size, &sz,
-+		    NULL, 0), 0, "Unexpected mallctlbymib failure");
- 		assert_zu_eq(run_size, run_quantize_floor(run_size),
- 		    "Small run quantization should be a no-op (run_size=%zu)",
- 		    run_size);
- 		assert_zu_eq(run_size, run_quantize_ceil(run_size),
- 		    "Small run quantization should be a no-op (run_size=%zu)",
- 		    run_size);
- 	}
- }
-@@ -42,32 +42,32 @@ TEST_BEGIN(test_large_run_size)
- 	size_t miblen = sizeof(mib) / sizeof(size_t);
- 
- 	/*
- 	 * Iterate over all large size classes, get their run sizes, and verify
- 	 * that the quantized size is the same as the run size.
- 	 */
- 
- 	sz = sizeof(bool);
--	assert_d_eq(mallctl("config.cache_oblivious", &cache_oblivious, &sz,
--	    NULL, 0), 0, "Unexpected mallctl failure");
-+	assert_d_eq(mallctl("config.cache_oblivious", (void *)&cache_oblivious,
-+	    &sz, NULL, 0), 0, "Unexpected mallctl failure");
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nlruns", &nlruns, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.nlruns", (void *)&nlruns, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
- 
- 	assert_d_eq(mallctlnametomib("arenas.lrun.0.size", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib failure");
- 	for (i = 0; i < nlruns; i++) {
- 		size_t lrun_size, run_size, floor, ceil;
- 
- 		mib[2] = i;
- 		sz = sizeof(size_t);
--		assert_d_eq(mallctlbymib(mib, miblen, &lrun_size, &sz, NULL, 0),
--		    0, "Unexpected mallctlbymib failure");
-+		assert_d_eq(mallctlbymib(mib, miblen, (void *)&lrun_size, &sz,
-+		    NULL, 0), 0, "Unexpected mallctlbymib failure");
- 		run_size = cache_oblivious ? lrun_size + PAGE : lrun_size;
- 		floor = run_quantize_floor(run_size);
- 		ceil = run_quantize_ceil(run_size);
- 
- 		assert_zu_eq(run_size, floor,
- 		    "Large run quantization should be a no-op for precise "
- 		    "size (lrun_size=%zu, run_size=%zu)", lrun_size, run_size);
- 		assert_zu_eq(run_size, ceil,
-@@ -97,21 +97,21 @@ TEST_BEGIN(test_monotonic)
- 	size_t sz, floor_prev, ceil_prev;
- 
- 	/*
- 	 * Iterate over all run sizes and verify that
- 	 * run_quantize_{floor,ceil}() are monotonic.
- 	 */
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nbins", &nbins, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.nbins", (void *)&nbins, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nlruns", &nlruns, &sz, NULL, 0), 0,
-+	assert_d_eq(mallctl("arenas.nlruns", (void *)&nlruns, &sz, NULL, 0), 0,
- 	    "Unexpected mallctl failure");
- 
- 	floor_prev = 0;
- 	ceil_prev = 0;
- 	for (i = 1; i <= chunksize >> LG_PAGE; i++) {
- 		size_t run_size, floor, ceil;
- 
- 		run_size = i << LG_PAGE;
-diff --git a/memory/jemalloc/src/test/unit/size_classes.c b/memory/jemalloc/src/test/unit/size_classes.c
---- a/memory/jemalloc/src/test/unit/size_classes.c
-+++ b/memory/jemalloc/src/test/unit/size_classes.c
-@@ -3,27 +3,27 @@
- static size_t
- get_max_size_class(void)
- {
- 	unsigned nhchunks;
- 	size_t mib[4];
- 	size_t sz, miblen, max_size_class;
- 
- 	sz = sizeof(unsigned);
--	assert_d_eq(mallctl("arenas.nhchunks", &nhchunks, &sz, NULL, 0), 0,
--	    "Unexpected mallctl() error");
-+	assert_d_eq(mallctl("arenas.nhchunks", (void *)&nhchunks, &sz, NULL, 0),
-+	    0, "Unexpected mallctl() error");
- 
- 	miblen = sizeof(mib) / sizeof(size_t);
- 	assert_d_eq(mallctlnametomib("arenas.hchunk.0.size", mib, &miblen), 0,
- 	    "Unexpected mallctlnametomib() error");
- 	mib[2] = nhchunks - 1;
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctlbymib(mib, miblen, &max_size_class, &sz, NULL, 0), 0,
--	    "Unexpected mallctlbymib() error");
-+	assert_d_eq(mallctlbymib(mib, miblen, (void *)&max_size_class, &sz,
-+	    NULL, 0), 0, "Unexpected mallctlbymib() error");
- 
- 	return (max_size_class);
- }
- 
- TEST_BEGIN(test_size_classes)
- {
- 	size_t size_class, max_size_class;
- 	szind_t index, max_index;
-diff --git a/memory/jemalloc/src/test/unit/stats.c b/memory/jemalloc/src/test/unit/stats.c
---- a/memory/jemalloc/src/test/unit/stats.c
-+++ b/memory/jemalloc/src/test/unit/stats.c
-@@ -2,28 +2,28 @@
- 
- TEST_BEGIN(test_stats_summary)
- {
- 	size_t *cactive;
- 	size_t sz, allocated, active, resident, mapped;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	sz = sizeof(cactive);
--	assert_d_eq(mallctl("stats.cactive", &cactive, &sz, NULL, 0), expected,
--	    "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.cactive", (void *)&cactive, &sz, NULL, 0),
-+	    expected, "Unexpected mallctl() result");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.allocated", &allocated, &sz, NULL, 0),
-+	assert_d_eq(mallctl("stats.allocated", (void *)&allocated, &sz, NULL,
-+	    0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.active", (void *)&active, &sz, NULL, 0),
- 	    expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.active", &active, &sz, NULL, 0), expected,
--	    "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.resident", &resident, &sz, NULL, 0),
-+	assert_d_eq(mallctl("stats.resident", (void *)&resident, &sz, NULL, 0),
- 	    expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.mapped", &mapped, &sz, NULL, 0), expected,
--	    "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.mapped", (void *)&mapped, &sz, NULL, 0),
-+	    expected, "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_zu_le(active, *cactive,
- 		    "active should be no larger than cactive");
- 		assert_zu_le(allocated, active,
- 		    "allocated should be no larger than active");
- 		assert_zu_lt(active, resident,
- 		    "active should be less than resident");
-@@ -40,29 +40,29 @@ TEST_BEGIN(test_stats_huge)
- 	size_t allocated;
- 	uint64_t nmalloc, ndalloc, nrequests;
- 	size_t sz;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	p = mallocx(large_maxclass+1, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.huge.allocated", &allocated, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.allocated", (void *)&allocated,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.huge.nmalloc", &nmalloc, &sz, NULL,
--	    0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.huge.ndalloc", &ndalloc, &sz, NULL,
--	    0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.huge.nrequests", &nrequests, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.nrequests", (void *)&nrequests,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_zu_gt(allocated, 0,
- 		    "allocated should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
- 		assert_u64_le(nmalloc, nrequests,
- 		    "nmalloc should no larger than nrequests");
-@@ -78,46 +78,46 @@ TEST_BEGIN(test_stats_arenas_summary)
- 	void *little, *large, *huge;
- 	uint64_t epoch;
- 	size_t sz;
- 	int expected = config_stats ? 0 : ENOENT;
- 	size_t mapped;
- 	uint64_t npurge, nmadvise, purged;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	little = mallocx(SMALL_MAXCLASS, 0);
- 	assert_ptr_not_null(little, "Unexpected mallocx() failure");
- 	large = mallocx(large_maxclass, 0);
- 	assert_ptr_not_null(large, "Unexpected mallocx() failure");
- 	huge = mallocx(chunksize, 0);
- 	assert_ptr_not_null(huge, "Unexpected mallocx() failure");
- 
- 	dallocx(little, 0);
- 	dallocx(large, 0);
- 	dallocx(huge, 0);
- 
- 	assert_d_eq(mallctl("arena.0.purge", NULL, NULL, NULL, 0), 0,
- 	    "Unexpected mallctl() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.mapped", &mapped, &sz, NULL, 0),
--	    expected, "Unexepected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.mapped", (void *)&mapped, &sz, NULL,
-+	    0), expected, "Unexepected mallctl() result");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.npurge", &npurge, &sz, NULL, 0),
--	    expected, "Unexepected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.nmadvise", &nmadvise, &sz, NULL, 0),
--	    expected, "Unexepected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.purged", &purged, &sz, NULL, 0),
--	    expected, "Unexepected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.npurge", (void *)&npurge, &sz, NULL,
-+	    0), expected, "Unexepected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.nmadvise", (void *)&nmadvise, &sz,
-+	    NULL, 0), expected, "Unexepected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.purged", (void *)&purged, &sz, NULL,
-+	    0), expected, "Unexepected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_u64_gt(npurge, 0,
- 		    "At least one purge should have occurred");
- 		assert_u64_le(nmadvise, purged,
- 		    "nmadvise should be no greater than purged");
- 	}
- }
-@@ -145,38 +145,40 @@ TEST_BEGIN(test_stats_arenas_small)
- 	void *p;
- 	size_t sz, allocated;
- 	uint64_t epoch, nmalloc, ndalloc, nrequests;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	no_lazy_lock(); /* Lazy locking would dodge tcache testing. */
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(SMALL_MAXCLASS, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
- 	assert_d_eq(mallctl("thread.tcache.flush", NULL, NULL, NULL, 0),
- 	    config_tcache ? 0 : ENOENT, "Unexpected mallctl() result");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.small.allocated", &allocated, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.small.allocated",
-+	    (void *)&allocated, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.small.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.small.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.small.nrequests", &nrequests, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.small.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.small.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.small.nrequests",
-+	    (void *)&nrequests, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_zu_gt(allocated, 0,
- 		    "allocated should be greater than zero");
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be no greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
-@@ -192,35 +194,37 @@ TEST_BEGIN(test_stats_arenas_large)
- {
- 	unsigned arena;
- 	void *p;
- 	size_t sz, allocated;
- 	uint64_t epoch, nmalloc, ndalloc, nrequests;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(large_maxclass, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.large.allocated", &allocated, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.large.allocated",
-+	    (void *)&allocated, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.large.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.large.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.large.nrequests", &nrequests, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.large.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.large.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.large.nrequests",
-+	    (void *)&nrequests, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_zu_gt(allocated, 0,
- 		    "allocated should be greater than zero");
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
-@@ -236,33 +240,33 @@ TEST_BEGIN(test_stats_arenas_huge)
- {
- 	unsigned arena;
- 	void *p;
- 	size_t sz, allocated;
- 	uint64_t epoch, nmalloc, ndalloc;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(chunksize, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.huge.allocated", &allocated, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.allocated", (void *)&allocated,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.huge.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.huge.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.huge.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_zu_gt(allocated, 0,
- 		    "allocated should be greater than zero");
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
-@@ -277,54 +281,55 @@ TEST_BEGIN(test_stats_arenas_bins)
- 	unsigned arena;
- 	void *p;
- 	size_t sz, curruns, curregs;
- 	uint64_t epoch, nmalloc, ndalloc, nrequests, nfills, nflushes;
- 	uint64_t nruns, nreruns;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(arena_bin_info[0].reg_size, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
- 	assert_d_eq(mallctl("thread.tcache.flush", NULL, NULL, NULL, 0),
- 	    config_tcache ? 0 : ENOENT, "Unexpected mallctl() result");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
--
--	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nrequests", &nrequests, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.curregs", &curregs, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nfills", &nfills, &sz,
--	    NULL, 0), config_tcache ? expected : ENOENT,
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nrequests",
-+	    (void *)&nrequests, &sz, NULL, 0), expected,
- 	    "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nflushes", &nflushes, &sz,
--	    NULL, 0), config_tcache ? expected : ENOENT,
-+	sz = sizeof(size_t);
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.curregs", (void *)&curregs,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+
-+	sz = sizeof(uint64_t);
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nfills", (void *)&nfills,
-+	    &sz, NULL, 0), config_tcache ? expected : ENOENT,
-+	    "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nflushes", (void *)&nflushes,
-+	    &sz, NULL, 0), config_tcache ? expected : ENOENT,
- 	    "Unexpected mallctl() result");
- 
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nruns", &nruns, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.nreruns", &nreruns, &sz,
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nruns", (void *)&nruns, &sz,
- 	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.nreruns", (void *)&nreruns,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.bins.0.curruns", &curruns, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.bins.0.curruns", (void *)&curruns,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
- 		assert_u64_gt(nrequests, 0,
- 		    "nrequests should be greater than zero");
-@@ -350,35 +355,36 @@ TEST_BEGIN(test_stats_arenas_lruns)
- {
- 	unsigned arena;
- 	void *p;
- 	uint64_t epoch, nmalloc, ndalloc, nrequests;
- 	size_t curruns, sz;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(LARGE_MINCLASS, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.lruns.0.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.lruns.0.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.lruns.0.nrequests", &nrequests, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.lruns.0.nmalloc", (void *)&nmalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.lruns.0.ndalloc", (void *)&ndalloc,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.lruns.0.nrequests",
-+	    (void *)&nrequests, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.lruns.0.curruns", &curruns, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.lruns.0.curruns", (void *)&curruns,
-+	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
- 		assert_u64_gt(nrequests, 0,
- 		    "nrequests should be greater than zero");
-@@ -394,33 +400,36 @@ TEST_BEGIN(test_stats_arenas_hchunks)
- {
- 	unsigned arena;
- 	void *p;
- 	uint64_t epoch, nmalloc, ndalloc;
- 	size_t curhchunks, sz;
- 	int expected = config_stats ? 0 : ENOENT;
- 
- 	arena = 0;
--	assert_d_eq(mallctl("thread.arena", NULL, NULL, &arena, sizeof(arena)),
--	    0, "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("thread.arena", NULL, NULL, (void *)&arena,
-+	    sizeof(arena)), 0, "Unexpected mallctl() failure");
- 
- 	p = mallocx(chunksize, 0);
- 	assert_ptr_not_null(p, "Unexpected mallocx() failure");
- 
--	assert_d_eq(mallctl("epoch", NULL, NULL, &epoch, sizeof(epoch)), 0,
--	    "Unexpected mallctl() failure");
-+	assert_d_eq(mallctl("epoch", NULL, NULL, (void *)&epoch, sizeof(epoch)),
-+	    0, "Unexpected mallctl() failure");
- 
- 	sz = sizeof(uint64_t);
--	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.nmalloc", &nmalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
--	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.ndalloc", &ndalloc, &sz,
--	    NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.nmalloc",
-+	    (void *)&nmalloc, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.ndalloc",
-+	    (void *)&ndalloc, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 	sz = sizeof(size_t);
--	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.curhchunks", &curhchunks,
--	    &sz, NULL, 0), expected, "Unexpected mallctl() result");
-+	assert_d_eq(mallctl("stats.arenas.0.hchunks.0.curhchunks",
-+	    (void *)&curhchunks, &sz, NULL, 0), expected,
-+	    "Unexpected mallctl() result");
- 
- 	if (config_stats) {
- 		assert_u64_gt(nmalloc, 0,
- 		    "nmalloc should be greater than zero");
- 		assert_u64_ge(nmalloc, ndalloc,
- 		    "nmalloc should be at least as large as ndalloc");
- 		assert_u64_gt(curhchunks, 0,
- 		    "At least one chunk should be currently allocated");
-diff --git a/memory/jemalloc/src/test/unit/tsd.c b/memory/jemalloc/src/test/unit/tsd.c
---- a/memory/jemalloc/src/test/unit/tsd.c
-+++ b/memory/jemalloc/src/test/unit/tsd.c
-@@ -74,17 +74,17 @@ thd_start(void *arg)
- 
- 	free(p);
- 	return (NULL);
- }
- 
- TEST_BEGIN(test_tsd_main_thread)
- {
- 
--	thd_start((void *) 0xa5f3e329);
-+	thd_start((void *)(uintptr_t)0xa5f3e329);
- }
- TEST_END
- 
- TEST_BEGIN(test_tsd_sub_thread)
- {
- 	thd_t thd;
- 
- 	data_cleanup_executed = false;
-diff --git a/memory/jemalloc/src/test/unit/util.c b/memory/jemalloc/src/test/unit/util.c
---- a/memory/jemalloc/src/test/unit/util.c
-+++ b/memory/jemalloc/src/test/unit/util.c
-@@ -70,35 +70,36 @@ TEST_BEGIN(test_malloc_strtoumax)
- 		const char *expected_remainder;
- 		int base;
- 		int expected_errno;
- 		const char *expected_errno_name;
- 		uintmax_t expected_x;
- 	};
- #define	ERR(e)		e, #e
- #define	KUMAX(x)	((uintmax_t)x##ULL)
-+#define	KSMAX(x)	((uintmax_t)(intmax_t)x##LL)
- 	struct test_s tests[] = {
- 		{"0",		"0",	-1,	ERR(EINVAL),	UINTMAX_MAX},
- 		{"0",		"0",	1,	ERR(EINVAL),	UINTMAX_MAX},
- 		{"0",		"0",	37,	ERR(EINVAL),	UINTMAX_MAX},
- 
- 		{"",		"",	0,	ERR(EINVAL),	UINTMAX_MAX},
- 		{"+",		"+",	0,	ERR(EINVAL),	UINTMAX_MAX},
- 		{"++3",		"++3",	0,	ERR(EINVAL),	UINTMAX_MAX},
- 		{"-",		"-",	0,	ERR(EINVAL),	UINTMAX_MAX},
- 
- 		{"42",		"",	0,	ERR(0),		KUMAX(42)},
- 		{"+42",		"",	0,	ERR(0),		KUMAX(42)},
--		{"-42",		"",	0,	ERR(0),		KUMAX(-42)},
-+		{"-42",		"",	0,	ERR(0),		KSMAX(-42)},
- 		{"042",		"",	0,	ERR(0),		KUMAX(042)},
- 		{"+042",	"",	0,	ERR(0),		KUMAX(042)},
--		{"-042",	"",	0,	ERR(0),		KUMAX(-042)},
-+		{"-042",	"",	0,	ERR(0),		KSMAX(-042)},
- 		{"0x42",	"",	0,	ERR(0),		KUMAX(0x42)},
- 		{"+0x42",	"",	0,	ERR(0),		KUMAX(0x42)},
--		{"-0x42",	"",	0,	ERR(0),		KUMAX(-0x42)},
-+		{"-0x42",	"",	0,	ERR(0),		KSMAX(-0x42)},
- 
- 		{"0",		"",	0,	ERR(0),		KUMAX(0)},
- 		{"1",		"",	0,	ERR(0),		KUMAX(1)},
- 
- 		{"42",		"",	0,	ERR(0),		KUMAX(42)},
- 		{" 42",		"",	0,	ERR(0),		KUMAX(42)},
- 		{"42 ",		" ",	0,	ERR(0),		KUMAX(42)},
- 		{"0x",		"x",	0,	ERR(0),		KUMAX(0)},
-@@ -125,16 +126,17 @@ TEST_BEGIN(test_malloc_strtoumax)
- 		{"FG",		"G",	16,	ERR(0),		KUMAX(15)},
- 		{"0xfg",	"g",	16,	ERR(0),		KUMAX(15)},
- 		{"0XFG",	"G",	16,	ERR(0),		KUMAX(15)},
- 		{"z_",		"_",	36,	ERR(0),		KUMAX(35)},
- 		{"Z_",		"_",	36,	ERR(0),		KUMAX(35)}
- 	};
- #undef ERR
- #undef KUMAX
-+#undef KSMAX
- 	unsigned i;
- 
- 	for (i = 0; i < sizeof(tests)/sizeof(struct test_s); i++) {
- 		struct test_s *test = &tests[i];
- 		int err;
- 		uintmax_t result;
- 		char *remainder;
- 
-diff --git a/memory/jemalloc/upstream.info b/memory/jemalloc/upstream.info
---- a/memory/jemalloc/upstream.info
-+++ b/memory/jemalloc/upstream.info
-@@ -1,2 +1,2 @@
- UPSTREAM_REPO=https://github.com/jemalloc/jemalloc
--UPSTREAM_COMMIT=4.3.1
-+UPSTREAM_COMMIT=4.4.0

+ 0 - 33
mozilla-esr52/patches/mozilla-esr52-push_355263.patch

@@ -1,33 +0,0 @@
-# HG changeset patch
-# User Ryan VanderMeulen <ryanvm@gmail.com>
-# Date 1484143488 18000
-#      Wed Jan 11 09:04:48 2017 -0500
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 7770a9083198bca021de3c6fe3b48a4f7daff7cc
-# Parent  301a46b075293261115b39da1ff5f4d06cc08406
-Bug 1322027 - Don't disable hugepage support since it no longer causes PGO issues. r=glandium a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH1322027
-
-diff --git a/build/autoconf/jemalloc.m4 b/build/autoconf/jemalloc.m4
---- a/build/autoconf/jemalloc.m4
-+++ b/build/autoconf/jemalloc.m4
-@@ -83,19 +83,16 @@ if test "$MOZ_BUILD_APP" != js -o -n "$J
-     # their mozconfig.
-     if test "$_MSC_VER"; then
-        ac_configure_args="$ac_configure_args CFLAGS="
-     fi
- 
-     # Force disable DSS support in jemalloc.
-     ac_configure_args="$ac_configure_args ac_cv_func_sbrk=false"
- 
--    # Force disable hugepage support in jemalloc.
--    ac_configure_args="$ac_configure_args je_cv_thp=no"
--
-     # Make Linux builds munmap freed chunks instead of recycling them.
-     ac_configure_args="$ac_configure_args --enable-munmap"
- 
-     # Disable cache oblivious behavior that appears to have a performance
-     # impact on Firefox.
-     ac_configure_args="$ac_configure_args --disable-cache-oblivious"
- 
-     if ! test -e memory/jemalloc; then

+ 0 - 93
mozilla-esr52/patches/mozilla-esr52-push_355264.patch

@@ -1,93 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1478134926 -32400
-#      Thu Nov 03 10:02:06 2016 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 693fe5c8555069d6a88cc9c08a62f2b073d39d43
-# Parent  7770a9083198bca021de3c6fe3b48a4f7daff7cc
-Bug 1311039 - Properly detect the default malloc zone on OSX 10.12. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -1499,16 +1499,17 @@ static bool osx_use_jemalloc = false;
- 
- 
- static lion_malloc_zone l_szone;
- static malloc_zone_t * szone = (malloc_zone_t*)(&l_szone);
- 
- static lion_malloc_introspection l_ozone_introspect;
- static malloc_introspection_t * const ozone_introspect =
- 	(malloc_introspection_t*)(&l_ozone_introspect);
-+static malloc_zone_t *get_default_zone();
- static void szone2ozone(malloc_zone_t *zone, size_t size);
- static size_t zone_version_size(int version);
- #else
- static const bool osx_use_jemalloc = true;
- #endif
- 
- #endif
- 
-@@ -6076,17 +6077,17 @@ MALLOC_OUT:
- 		malloc_printf("<jemalloc>: Error in pthread_key_create()\n");
- 	}
- #endif
- 
- #if defined(MOZ_MEMORY_DARWIN) && !defined(MOZ_REPLACE_MALLOC)
- 	/*
- 	* Overwrite the default memory allocator to use jemalloc everywhere.
- 	*/
--	default_zone = malloc_default_zone();
-+	default_zone = get_default_zone();
- 
- 	/*
- 	 * We only use jemalloc with MacOS 10.6 and 10.7.  jemalloc is disabled
- 	 * on 32-bit builds (10.5 and 32-bit 10.6) due to bug 702250, an
- 	 * apparent MacOS bug.  In fact, this code isn't even compiled on
- 	 * 32-bit builds.
- 	 *
- 	 * We'll have to update our code to work with newer versions, because
-@@ -7057,16 +7058,42 @@ zone_version_size(int version)
-         case LEOPARD_MALLOC_ZONE_T_VERSION:
-             return sizeof(leopard_malloc_zone);
-         default:
-         case LION_MALLOC_ZONE_T_VERSION:
-             return sizeof(lion_malloc_zone);
-     }
- }
- 
-+static malloc_zone_t *get_default_zone()
-+{
-+  malloc_zone_t **zones = NULL;
-+  unsigned int num_zones = 0;
-+
-+  /*
-+   * On OSX 10.12, malloc_default_zone returns a special zone that is not
-+   * present in the list of registered zones. That zone uses a "lite zone"
-+   * if one is present (apparently enabled when malloc stack logging is
-+   * enabled), or the first registered zone otherwise. In practice this
-+   * means unless malloc stack logging is enabled, the first registered
-+   * zone is the default.
-+   * So get the list of zones to get the first one, instead of relying on
-+   * malloc_default_zone.
-+   */
-+  if (KERN_SUCCESS != malloc_get_all_zones(0, NULL, (vm_address_t**) &zones,
-+                                           &num_zones)) {
-+    /* Reset the value in case the failure happened after it was set. */
-+    num_zones = 0;
-+  }
-+  if (num_zones) {
-+    return zones[0];
-+  }
-+  return malloc_default_zone();
-+}
-+
- /*
-  * Overlay the default scalable zone (szone) such that existing allocations are
-  * drained, and further allocations come from jemalloc. This is necessary
-  * because Core Foundation directly accesses and uses the szone before the
-  * jemalloc library is even loaded.
-  */
- static void
- szone2ozone(malloc_zone_t *default_zone, size_t size)

+ 0 - 32
mozilla-esr52/patches/mozilla-esr52-push_355265.patch

@@ -1,32 +0,0 @@
-# HG changeset patch
-# User John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
-# Date 1481560294 -3600
-#      Mon Dec 12 17:31:34 2016 +0100
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 0d2f32e3bd87543d1b686a5c1f790be68a7bfdb2
-# Parent  693fe5c8555069d6a88cc9c08a62f2b073d39d43
-Bug 1275204 - mozjemalloc: Use better pre-processor defines for sparc64. r=glandium a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -486,17 +486,17 @@ static const bool isthreaded = true;
- #  define QUANTUM_2POW_MIN	4
- #  define SIZEOF_PTR_2POW	3
- #endif
- #ifdef __alpha__
- #  define QUANTUM_2POW_MIN	4
- #  define SIZEOF_PTR_2POW	3
- #  define NO_TLS
- #endif
--#ifdef __sparc64__
-+#if defined(__sparc__) && defined(__arch64__)
- #  define QUANTUM_2POW_MIN	4
- #  define SIZEOF_PTR_2POW	3
- #  define NO_TLS
- #endif
- #ifdef __amd64__
- #  define QUANTUM_2POW_MIN	4
- #  define SIZEOF_PTR_2POW	3
- #  define CPU_SPINWAIT		__asm__ volatile("pause")

+ 0 - 104
mozilla-esr52/patches/mozilla-esr52-push_355266.patch

@@ -1,104 +0,0 @@
-# HG changeset patch
-# User John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
-# Date 1481560515 -3600
-#      Mon Dec 12 17:35:15 2016 +0100
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID e2be59496c8626bc9f194d2a993ac77dbde41835
-# Parent  0d2f32e3bd87543d1b686a5c1f790be68a7bfdb2
-Bug 1275204 - mozjemalloc: Use the JS arm64 allocator on Linux/sparc64. r=glandium a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -2414,17 +2414,17 @@ pages_map_align(size_t size, size_t alig
- 	return (ret);
- }
- #endif
- 
- static void *
- pages_map(void *addr, size_t size)
- {
- 	void *ret;
--#if defined(__ia64__)
-+#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
-         /*
-          * The JS engine assumes that all allocated pointers have their high 17 bits clear,
-          * which ia64's mmap doesn't support directly. However, we can emulate it by passing
-          * mmap an "addr" parameter with those bits clear. The mmap will return that address,
-          * or the nearest available memory above that address, providing a near-guarantee
-          * that those bits are clear. If they are not, we return NULL below to indicate
-          * out-of-memory.
-          *
-@@ -2435,28 +2435,50 @@ pages_map(void *addr, size_t size)
-          */
- 	bool check_placement = true;
-         if (addr == NULL) {
- 		addr = (void*)0x0000070000000000;
- 		check_placement = false;
- 	}
- #endif
- 
-+#if defined(__sparc__) && defined(__arch64__) && defined(__linux__)
-+    const uintptr_t start = 0x0000070000000000ULL;
-+    const uintptr_t end   = 0x0000800000000000ULL;
-+
-+    /* Copied from js/src/gc/Memory.cpp and adapted for this source */
-+
-+    uintptr_t hint;
-+    void* region = MAP_FAILED;
-+    for (hint = start; region == MAP_FAILED && hint + size <= end; hint += chunksize) {
-+           region = mmap((void*)hint, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0);
-+           if (region != MAP_FAILED) {
-+                   if (((size_t) region + (size - 1)) & 0xffff800000000000) {
-+                           if (munmap(region, size)) {
-+                                   MOZ_ASSERT(errno == ENOMEM);
-+                           }
-+                           region = MAP_FAILED;
-+                   }
-+           }
-+    }
-+    ret = region;
-+#else
-+
- 	/*
- 	 * We don't use MAP_FIXED here, because it can cause the *replacement*
- 	 * of existing mappings, and we only want to create new mappings.
- 	 */
- 	ret = mmap(addr, size, PROT_READ | PROT_WRITE,
- 		MAP_PRIVATE | MAP_ANON, -1, 0);
- 	assert(ret != NULL);
--
-+#endif
- 	if (ret == MAP_FAILED) {
- 		ret = NULL;
- 	}
--#if defined(__ia64__)
-+#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
-         /*
-          * If the allocated memory doesn't have its upper 17 bits clear, consider it
-          * as out of memory.
-         */
-         else if ((long long)ret & 0xffff800000000000) {
- 		munmap(ret, size);
-                 ret = NULL;
-         }
-@@ -2479,17 +2501,17 @@ pages_map(void *addr, size_t size)
- 				abort();
- 		}
- 		ret = NULL;
- 	}
- 	if (ret != NULL) {
- 		MozTagAnonymousMemory(ret, size, "jemalloc");
- 	}
- 
--#if defined(__ia64__)
-+#if defined(__ia64__) || (defined(__sparc__) && defined(__arch64__) && defined(__linux__))
- 	assert(ret == NULL || (!check_placement && ret != NULL)
- 	    || (check_placement && ret == addr));
- #else
- 	assert(ret == NULL || (addr == NULL && ret != addr)
- 	    || (addr != NULL && ret == addr));
- #endif
- 	return (ret);
- }

+ 0 - 132
mozilla-esr52/patches/mozilla-esr52-push_355267.patch

@@ -1,132 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484786242 -32400
-#      Thu Jan 19 09:37:22 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 80b0b75f8b0d069a87d3c24fcf78901fe51258dc
-# Parent  e2be59496c8626bc9f194d2a993ac77dbde41835
-Bug 1286613 - Properly call mozjemalloc pre/post fork hooks on OSX when replace-malloc is enabled. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Somehow, we never called those hooks when replace-malloc is enabled. I'd
-expect this to cause random deadlocks when forking, and I'm surprised
-this hasn't surfaced. Maybe it actually causes some intermittent oranges
-on automation, who knows.
-
-This also brings consistency with what is done for jemalloc 4, and with
-the mozjemalloc implementation, too, that we're going to replace with
-this one in a subsequent changeset.
-
-diff --git a/memory/build/replace_malloc.c b/memory/build/replace_malloc.c
---- a/memory/build/replace_malloc.c
-+++ b/memory/build/replace_malloc.c
-@@ -411,26 +411,33 @@ zone_force_unlock(malloc_zone_t *zone)
-   if (isthreaded)
-     jemalloc_postfork_parent();
- }
- 
- #else
- 
- #define JEMALLOC_ZONE_VERSION 6
- 
--/* Empty implementations are needed, because fork() calls zone->force_(un)lock
-- * unconditionally. */
-+extern void _malloc_prefork(void);
-+extern void _malloc_postfork(void);
-+
- static void
- zone_force_lock(malloc_zone_t *zone)
- {
-+  /* /!\ This calls into mozjemalloc. It works because we're linked in the
-+   * same library. */
-+  _malloc_prefork();
- }
- 
- static void
- zone_force_unlock(malloc_zone_t *zone)
- {
-+  /* /!\ This calls into mozjemalloc. It works because we're linked in the
-+   * same library. */
-+  _malloc_postfork();
- }
- 
- #endif
- 
- static malloc_zone_t zone;
- static struct malloc_introspection_t zone_introspect;
- 
- static malloc_zone_t *get_default_zone()
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -1446,18 +1446,24 @@ static void	*huge_palloc(size_t size, si
- static void	*huge_ralloc(void *ptr, size_t size, size_t oldsize);
- static void	huge_dalloc(void *ptr);
- static void	malloc_print_stats(void);
- #ifndef MOZ_MEMORY_WINDOWS
- static
- #endif
- bool		malloc_init_hard(void);
- 
--static void	_malloc_prefork(void);
--static void	_malloc_postfork(void);
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void	_malloc_prefork(void);
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void	_malloc_postfork(void);
- 
- #ifdef MOZ_MEMORY_DARWIN
- /*
-  * MALLOC_ZONE_T_NOTE
-  *
-  * On Darwin, we hook into the memory allocator using a malloc_zone_t struct.
-  * We must be very careful around this struct because of different behaviour on
-  * different versions of OSX.
-@@ -6880,17 +6886,20 @@ jemalloc_free_dirty_pages_impl(void)
- /******************************************************************************/
- /*
-  * Begin library-private functions, used by threading libraries for protection
-  * of malloc during fork().  These functions are only called if the program is
-  * running in threaded mode, so there is no need to check whether the program
-  * is threaded here.
-  */
- 
--static void
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void
- _malloc_prefork(void)
- {
- 	unsigned i;
- 
- 	/* Acquire all mutexes in a safe order. */
- 
- 	malloc_spin_lock(&arenas_lock);
- 	for (i = 0; i < narenas; i++) {
-@@ -6898,17 +6907,20 @@ static void
- 			malloc_spin_lock(&arenas[i]->lock);
- 	}
- 
- 	malloc_mutex_lock(&base_mtx);
- 
- 	malloc_mutex_lock(&huge_mtx);
- }
- 
--static void
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void
- _malloc_postfork(void)
- {
- 	unsigned i;
- 
- 	/* Release all mutexes, now that fork() has completed. */
- 
- 	malloc_mutex_unlock(&huge_mtx);
- 

+ 0 - 617
mozilla-esr52/patches/mozilla-esr52-push_355268.patch

@@ -1,617 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484707169 -32400
-#      Wed Jan 18 11:39:29 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 7d0dd01d7dd4712ea8be076e9e03d67a5948b1f8
-# Parent  cd763eda1079e3d3f87cb8faf0cde7cde35db468
-Bug 1286613 - Move replace-malloc zone allocator to a separate file. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-The intent here is to reuse the zone allocator for mozjemalloc, to avoid
-all the shortcomings of mozjemalloc using a different one. This change
-only moves the replace-malloc zone allocator out of replace-malloc.c, to
-make changes for mozjemalloc integration clearer.
-
-diff --git a/memory/build/moz.build b/memory/build/moz.build
---- a/memory/build/moz.build
-+++ b/memory/build/moz.build
-@@ -39,6 +39,11 @@
-         'replace_malloc.c',
-     ]
- 
-+    if CONFIG['OS_TARGET'] == 'Darwin':
-+        SOURCES += [
-+            'zone.c',
-+        ]
-+
- Library('memory')
- 
- if CONFIG['MOZ_GLUE_IN_PROGRAM']:
-diff --git a/memory/build/replace_malloc.c b/memory/build/replace_malloc.c
---- a/memory/build/replace_malloc.c
-+++ b/memory/build/replace_malloc.c
-@@ -300,260 +300,3 @@
- MOZ_MEMORY_API __memalign_hook_type __memalign_hook = memalign_impl;
- 
- #endif
--
--/*
-- * The following is a OSX zone allocator implementation.
-- * /!\ WARNING. It assumes the underlying malloc implementation's
-- * malloc_usable_size returns 0 when the given pointer is not owned by
-- * the allocator. Sadly, OSX does call zone_size with pointers not
-- * owned by the allocator.
-- */
--
--#ifdef XP_DARWIN
--#include <stdlib.h>
--#include <malloc/malloc.h>
--#include "mozilla/Assertions.h"
--
--static size_t
--zone_size(malloc_zone_t *zone, void *ptr)
--{
--  return malloc_usable_size_impl(ptr);
--}
--
--static void *
--zone_malloc(malloc_zone_t *zone, size_t size)
--{
--  return malloc_impl(size);
--}
--
--static void *
--zone_calloc(malloc_zone_t *zone, size_t num, size_t size)
--{
--  return calloc_impl(num, size);
--}
--
--static void *
--zone_realloc(malloc_zone_t *zone, void *ptr, size_t size)
--{
--  if (malloc_usable_size_impl(ptr))
--    return realloc_impl(ptr, size);
--  return realloc(ptr, size);
--}
--
--static void
--zone_free(malloc_zone_t *zone, void *ptr)
--{
--  if (malloc_usable_size_impl(ptr)) {
--    free_impl(ptr);
--    return;
--  }
--  free(ptr);
--}
--
--static void
--zone_free_definite_size(malloc_zone_t *zone, void *ptr, size_t size)
--{
--  size_t current_size = malloc_usable_size_impl(ptr);
--  if (current_size) {
--    MOZ_ASSERT(current_size == size);
--    free_impl(ptr);
--    return;
--  }
--  free(ptr);
--}
--
--static void *
--zone_memalign(malloc_zone_t *zone, size_t alignment, size_t size)
--{
--  void *ptr;
--  if (posix_memalign_impl(&ptr, alignment, size) == 0)
--    return ptr;
--  return NULL;
--}
--
--static void *
--zone_valloc(malloc_zone_t *zone, size_t size)
--{
--  return valloc_impl(size);
--}
--
--static void *
--zone_destroy(malloc_zone_t *zone)
--{
--  /* This function should never be called. */
--  MOZ_CRASH();
--}
--
--static size_t
--zone_good_size(malloc_zone_t *zone, size_t size)
--{
--  return malloc_good_size_impl(size);
--}
--
--#ifdef MOZ_JEMALLOC
--
--#include "jemalloc/internal/jemalloc_internal.h"
--
--static void
--zone_force_lock(malloc_zone_t *zone)
--{
--  /* /!\ This calls into jemalloc. It works because we're linked in the
--   * same library. Stolen from jemalloc's zone.c. */
--  if (isthreaded)
--    jemalloc_prefork();
--}
--
--static void
--zone_force_unlock(malloc_zone_t *zone)
--{
--  /* /!\ This calls into jemalloc. It works because we're linked in the
--   * same library. Stolen from jemalloc's zone.c. */
--  if (isthreaded)
--    jemalloc_postfork_parent();
--}
--
--#else
--
--#define JEMALLOC_ZONE_VERSION 6
--
--extern void _malloc_prefork(void);
--extern void _malloc_postfork(void);
--
--static void
--zone_force_lock(malloc_zone_t *zone)
--{
--  /* /!\ This calls into mozjemalloc. It works because we're linked in the
--   * same library. */
--  _malloc_prefork();
--}
--
--static void
--zone_force_unlock(malloc_zone_t *zone)
--{
--  /* /!\ This calls into mozjemalloc. It works because we're linked in the
--   * same library. */
--  _malloc_postfork();
--}
--
--#endif
--
--static malloc_zone_t zone;
--static struct malloc_introspection_t zone_introspect;
--
--static malloc_zone_t *get_default_zone()
--{
--  malloc_zone_t **zones = NULL;
--  unsigned int num_zones = 0;
--
--  /*
--   * On OSX 10.12, malloc_default_zone returns a special zone that is not
--   * present in the list of registered zones. That zone uses a "lite zone"
--   * if one is present (apparently enabled when malloc stack logging is
--   * enabled), or the first registered zone otherwise. In practice this
--   * means unless malloc stack logging is enabled, the first registered
--   * zone is the default.
--   * So get the list of zones to get the first one, instead of relying on
--   * malloc_default_zone.
--   */
--  if (KERN_SUCCESS != malloc_get_all_zones(0, NULL, (vm_address_t**) &zones,
--                                           &num_zones)) {
--    /* Reset the value in case the failure happened after it was set. */
--    num_zones = 0;
--  }
--  if (num_zones) {
--    return zones[0];
--  }
--  return malloc_default_zone();
--}
--
--
--__attribute__((constructor)) void
--register_zone(void)
--{
--  malloc_zone_t *default_zone = get_default_zone();
--
--  zone.size = (void *)zone_size;
--  zone.malloc = (void *)zone_malloc;
--  zone.calloc = (void *)zone_calloc;
--  zone.valloc = (void *)zone_valloc;
--  zone.free = (void *)zone_free;
--  zone.realloc = (void *)zone_realloc;
--  zone.destroy = (void *)zone_destroy;
--  zone.zone_name = "replace_malloc_zone";
--  zone.batch_malloc = NULL;
--  zone.batch_free = NULL;
--  zone.introspect = &zone_introspect;
--  zone.version = JEMALLOC_ZONE_VERSION;
--  zone.memalign = zone_memalign;
--  zone.free_definite_size = zone_free_definite_size;
--#if (JEMALLOC_ZONE_VERSION >= 8)
--  zone.pressure_relief = NULL;
--#endif
--  zone_introspect.enumerator = NULL;
--  zone_introspect.good_size = (void *)zone_good_size;
--  zone_introspect.check = NULL;
--  zone_introspect.print = NULL;
--  zone_introspect.log = NULL;
--  zone_introspect.force_lock = (void *)zone_force_lock;
--  zone_introspect.force_unlock = (void *)zone_force_unlock;
--  zone_introspect.statistics = NULL;
--  zone_introspect.zone_locked = NULL;
--#if (JEMALLOC_ZONE_VERSION >= 7)
--  zone_introspect.enable_discharge_checking = NULL;
--  zone_introspect.disable_discharge_checking = NULL;
--  zone_introspect.discharge = NULL;
--#ifdef __BLOCKS__
--  zone_introspect.enumerate_discharged_pointers = NULL;
--#else
--  zone_introspect.enumerate_unavailable_without_blocks = NULL;
--#endif
--#endif
--
--  /*
--   * The default purgeable zone is created lazily by OSX's libc.  It uses
--   * the default zone when it is created for "small" allocations
--   * (< 15 KiB), but assumes the default zone is a scalable_zone.  This
--   * obviously fails when the default zone is the jemalloc zone, so
--   * malloc_default_purgeable_zone is called beforehand so that the
--   * default purgeable zone is created when the default zone is still
--   * a scalable_zone.
--   */
--  malloc_zone_t *purgeable_zone = malloc_default_purgeable_zone();
--
--  // There is a problem related to the above with the system nano zone, which
--  // is hard to work around from here, and that is instead worked around by
--  // disabling the nano zone through an environment variable
--  // (MallocNanoZone=0). In Firefox, we do that through
--  // browser/app/macbuild/Contents/Info.plist.in.
--
--  /* Register the custom zone.  At this point it won't be the default. */
--  malloc_zone_register(&zone);
--
--  do {
--    /*
--     * Unregister and reregister the default zone.  On OSX >= 10.6,
--     * unregistering takes the last registered zone and places it at the
--     * location of the specified zone.  Unregistering the default zone thus
--     * makes the last registered one the default.  On OSX < 10.6,
--     * unregistering shifts all registered zones.  The first registered zone
--     * then becomes the default.
--     */
--    malloc_zone_unregister(default_zone);
--    malloc_zone_register(default_zone);
--    /*
--     * On OSX 10.6, having the default purgeable zone appear before the default
--     * zone makes some things crash because it thinks it owns the default
--     * zone allocated pointers. We thus unregister/re-register it in order to
--     * ensure it's always after the default zone. On OSX < 10.6, as
--     * unregistering shifts registered zones, this simply removes the purgeable
--     * zone from the list and adds it back at the end, after the default zone.
--     * On OSX >= 10.6, unregistering replaces the purgeable zone with the last
--     * registered zone above, i.e the default zone. Registering it again then
--     * puts it at the end, obviously after the default zone.
--     */
--    malloc_zone_unregister(purgeable_zone);
--    malloc_zone_register(purgeable_zone);
--    default_zone = get_default_zone();
--  } while (default_zone != &zone);
--}
--#endif
-diff --git a/memory/build/replace_malloc.c b/memory/build/zone.c
-copy from memory/build/replace_malloc.c
-copy to memory/build/zone.c
---- a/memory/build/replace_malloc.c
-+++ b/memory/build/zone.c
-@@ -2,107 +2,11 @@
-  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
--#ifndef MOZ_MEMORY
--#  error Should not compile this file when MOZ_MEMORY is not set
--#endif
--
--#ifndef MOZ_REPLACE_MALLOC
--#  error Should not compile this file when replace-malloc is disabled
--#endif
--
--#ifdef MOZ_SYSTEM_JEMALLOC
--#  error Should not compile this file when we want to use native jemalloc
--#endif
--
- #include "mozmemory_wrap.h"
- 
--/* Declare all je_* functions */
--#define MALLOC_DECL(name, return_type, ...) \
--  return_type je_ ## name(__VA_ARGS__);
--#include "malloc_decls.h"
--
--#include "mozilla/Likely.h"
--
--/*
-- * Windows doesn't come with weak imports as they are possible with
-- * LD_PRELOAD or DYLD_INSERT_LIBRARIES on Linux/OSX. On this platform,
-- * the replacement functions are defined as variable pointers to the
-- * function resolved with GetProcAddress() instead of weak definitions
-- * of functions. On Android, the same needs to happen as well, because
-- * the Android linker doesn't handle weak linking with non LD_PRELOADed
-- * libraries, but LD_PRELOADing is not very convenient on Android, with
-- * the zygote.
-- */
--#ifdef XP_DARWIN
--#  define MOZ_REPLACE_WEAK __attribute__((weak_import))
--#elif defined(XP_WIN) || defined(MOZ_WIDGET_ANDROID)
--#  define MOZ_NO_REPLACE_FUNC_DECL
--#elif defined(__GNUC__)
--#  define MOZ_REPLACE_WEAK __attribute__((weak))
--#endif
--
--#include "replace_malloc.h"
--
--#define MALLOC_DECL(name, return_type, ...) \
--    je_ ## name,
--
--static const malloc_table_t malloc_table = {
--#include "malloc_decls.h"
--};
--
--#ifdef MOZ_NO_REPLACE_FUNC_DECL
--#  define MALLOC_DECL(name, return_type, ...) \
--    typedef return_type (replace_ ## name ## _impl_t)(__VA_ARGS__); \
--    replace_ ## name ## _impl_t *replace_ ## name = NULL;
--#  define MALLOC_FUNCS MALLOC_FUNCS_ALL
--#  include "malloc_decls.h"
--
--#  ifdef XP_WIN
--#    include <windows.h>
--static void
--replace_malloc_init_funcs()
--{
--  char replace_malloc_lib[1024];
--  if (GetEnvironmentVariableA("MOZ_REPLACE_MALLOC_LIB", (LPSTR)&replace_malloc_lib,
--                              sizeof(replace_malloc_lib)) > 0) {
--    HMODULE handle = LoadLibraryA(replace_malloc_lib);
--    if (handle) {
--#define MALLOC_DECL(name, ...) \
--  replace_ ## name = (replace_ ## name ## _impl_t *) GetProcAddress(handle, "replace_" # name);
--
--#  define MALLOC_FUNCS MALLOC_FUNCS_ALL
--#include "malloc_decls.h"
--    }
--  }
--}
--#  elif defined(MOZ_WIDGET_ANDROID)
--#    include <dlfcn.h>
--#    include <stdlib.h>
--static void
--replace_malloc_init_funcs()
--{
--  const char *replace_malloc_lib = getenv("MOZ_REPLACE_MALLOC_LIB");
--  if (replace_malloc_lib && *replace_malloc_lib) {
--    void *handle = dlopen(replace_malloc_lib, RTLD_LAZY);
--    if (handle) {
--#define MALLOC_DECL(name, ...) \
--  replace_ ## name = (replace_ ## name ## _impl_t *) dlsym(handle, "replace_" # name);
--
--#  define MALLOC_FUNCS MALLOC_FUNCS_ALL
--#include "malloc_decls.h"
--    }
--  }
--}
--#  else
--#    error No implementation for replace_malloc_init_funcs()
--#  endif
--
--#endif /* MOZ_NO_REPLACE_FUNC_DECL */
--
--/*
-- * Below is the malloc implementation overriding jemalloc and calling the
-- * replacement functions if they exist.
-- */
-+#include <stdlib.h>
-+#include <malloc/malloc.h>
-+#include "mozilla/Assertions.h"
- 
- /*
-  * Malloc implementation functions are MOZ_MEMORY_API, and jemalloc
-@@ -118,189 +22,6 @@
- #define MALLOC_FUNCS MALLOC_FUNCS_JEMALLOC
- #include "malloc_decls.h"
- 
--static int replace_malloc_initialized = 0;
--static void
--init()
--{
--#ifdef MOZ_NO_REPLACE_FUNC_DECL
--  replace_malloc_init_funcs();
--#endif
--  // Set this *before* calling replace_init, otherwise if replace_init calls
--  // malloc() we'll get an infinite loop.
--  replace_malloc_initialized = 1;
--  if (replace_init)
--    replace_init(&malloc_table);
--}
--
--MFBT_API struct ReplaceMallocBridge*
--get_bridge(void)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_get_bridge))
--    return NULL;
--  return replace_get_bridge();
--}
--
--void*
--malloc_impl(size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_malloc))
--    return je_malloc(size);
--  return replace_malloc(size);
--}
--
--int
--posix_memalign_impl(void **memptr, size_t alignment, size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_posix_memalign))
--    return je_posix_memalign(memptr, alignment, size);
--  return replace_posix_memalign(memptr, alignment, size);
--}
--
--void*
--aligned_alloc_impl(size_t alignment, size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_aligned_alloc))
--    return je_aligned_alloc(alignment, size);
--  return replace_aligned_alloc(alignment, size);
--}
--
--void*
--calloc_impl(size_t num, size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_calloc))
--    return je_calloc(num, size);
--  return replace_calloc(num, size);
--}
--
--void*
--realloc_impl(void *ptr, size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_realloc))
--    return je_realloc(ptr, size);
--  return replace_realloc(ptr, size);
--}
--
--void
--free_impl(void *ptr)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_free))
--    je_free(ptr);
--  else
--    replace_free(ptr);
--}
--
--void*
--memalign_impl(size_t alignment, size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_memalign))
--    return je_memalign(alignment, size);
--  return replace_memalign(alignment, size);
--}
--
--void*
--valloc_impl(size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_valloc))
--    return je_valloc(size);
--  return replace_valloc(size);
--}
--
--size_t
--malloc_usable_size_impl(usable_ptr_t ptr)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_malloc_usable_size))
--    return je_malloc_usable_size(ptr);
--  return replace_malloc_usable_size(ptr);
--}
--
--size_t
--malloc_good_size_impl(size_t size)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_malloc_good_size))
--    return je_malloc_good_size(size);
--  return replace_malloc_good_size(size);
--}
--
--void
--jemalloc_stats_impl(jemalloc_stats_t *stats)
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_jemalloc_stats))
--    je_jemalloc_stats(stats);
--  else
--    replace_jemalloc_stats(stats);
--}
--
--void
--jemalloc_purge_freed_pages_impl()
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_jemalloc_purge_freed_pages))
--    je_jemalloc_purge_freed_pages();
--  else
--    replace_jemalloc_purge_freed_pages();
--}
--
--void
--jemalloc_free_dirty_pages_impl()
--{
--  if (MOZ_UNLIKELY(!replace_malloc_initialized))
--    init();
--  if (MOZ_LIKELY(!replace_jemalloc_free_dirty_pages))
--    je_jemalloc_free_dirty_pages();
--  else
--    replace_jemalloc_free_dirty_pages();
--}
--
--/* The following comment and definitions are from jemalloc.c: */
--#if defined(__GLIBC__) && !defined(__UCLIBC__)
--
--/*
-- * glibc provides the RTLD_DEEPBIND flag for dlopen which can make it possible
-- * to inconsistently reference libc's malloc(3)-compatible functions
-- * (https://bugzilla.mozilla.org/show_bug.cgi?id=493541).
-- *
-- * These definitions interpose hooks in glibc.  The functions are actually
-- * passed an extra argument for the caller return address, which will be
-- * ignored.
-- */
--
--typedef void (* __free_hook_type)(void *ptr);
--typedef void *(* __malloc_hook_type)(size_t size);
--typedef void *(* __realloc_hook_type)(void *ptr, size_t size);
--typedef void *(* __memalign_hook_type)(size_t alignment, size_t size);
--
--MOZ_MEMORY_API __free_hook_type __free_hook = free_impl;
--MOZ_MEMORY_API __malloc_hook_type __malloc_hook = malloc_impl;
--MOZ_MEMORY_API __realloc_hook_type __realloc_hook = realloc_impl;
--MOZ_MEMORY_API __memalign_hook_type __memalign_hook = memalign_impl;
--
--#endif
--
- /*
-  * The following is a OSX zone allocator implementation.
-  * /!\ WARNING. It assumes the underlying malloc implementation's
-@@ -309,11 +30,6 @@
-  * owned by the allocator.
-  */
- 
--#ifdef XP_DARWIN
--#include <stdlib.h>
--#include <malloc/malloc.h>
--#include "mozilla/Assertions.h"
--
- static size_t
- zone_size(malloc_zone_t *zone, void *ptr)
- {
-@@ -556,4 +272,3 @@
-     default_zone = get_default_zone();
-   } while (default_zone != &zone);
- }
--#endif

+ 0 - 849
mozilla-esr52/patches/mozilla-esr52-push_355269.patch

@@ -1,849 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484707545 -32400
-#      Wed Jan 18 11:45:45 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID e2289a5148001a8b680875adbe11ce7835f15292
-# Parent  7d0dd01d7dd4712ea8be076e9e03d67a5948b1f8
-Bug 1286613 - Use the same zone allocator implementation as replace-malloc for mozjemalloc. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-We have been using a different zone allocator between mozjemalloc and
-replace-malloc for a long time. Jemalloc 4 uses the same as
-replace-malloc, albeit as part of the jemalloc upstream code base.
-
-We've been bitten many times in the past with Apple changes breaking the
-zone allocator, and each time we've had to make changes to the three
-instances, although two of them are similar and the changes there are
-straightforward.
-
-It also turns out that the way the mozjemalloc zone allocator is set up,
-when a new version of OSX appears with a new version of the system zone
-allocator, Firefox ends up using the system allocator, because the zone
-allocator version is not supported.
-
-So, we use the same zone allocator for both replace-malloc and
-mozjemalloc, making everything on par with jemalloc 4.
-
-diff --git a/memory/build/moz.build b/memory/build/moz.build
---- a/memory/build/moz.build
-+++ b/memory/build/moz.build
-@@ -34,20 +34,21 @@ if CONFIG['MOZ_JEMALLOC4']:
-         if not CONFIG['HAVE_INTTYPES_H']:
-             LOCAL_INCLUDES += ['/memory/jemalloc/src/include/msvc_compat/C99']
- 
- if CONFIG['MOZ_REPLACE_MALLOC']:
-     SOURCES += [
-         'replace_malloc.c',
-     ]
- 
--    if CONFIG['OS_TARGET'] == 'Darwin':
--        SOURCES += [
--            'zone.c',
--        ]
-+if CONFIG['OS_TARGET'] == 'Darwin' and (CONFIG['MOZ_REPLACE_MALLOC'] or
-+        CONFIG['MOZ_MEMORY'] and not CONFIG['MOZ_JEMALLOC4']):
-+    SOURCES += [
-+        'zone.c',
-+    ]
- 
- Library('memory')
- 
- if CONFIG['MOZ_GLUE_IN_PROGRAM']:
-     SDK_LIBRARY = True
-     DIST_INSTALL = True
- 
- # Keep jemalloc separated when mozglue is statically linked
-diff --git a/memory/build/zone.c b/memory/build/zone.c
---- a/memory/build/zone.c
-+++ b/memory/build/zone.c
-@@ -178,29 +178,36 @@ static malloc_zone_t *get_default_zone()
-   }
-   if (num_zones) {
-     return zones[0];
-   }
-   return malloc_default_zone();
- }
- 
- 
--__attribute__((constructor)) void
-+#ifdef MOZ_REPLACE_MALLOC
-+__attribute__((constructor))
-+#endif
-+void
- register_zone(void)
- {
-   malloc_zone_t *default_zone = get_default_zone();
- 
-   zone.size = (void *)zone_size;
-   zone.malloc = (void *)zone_malloc;
-   zone.calloc = (void *)zone_calloc;
-   zone.valloc = (void *)zone_valloc;
-   zone.free = (void *)zone_free;
-   zone.realloc = (void *)zone_realloc;
-   zone.destroy = (void *)zone_destroy;
-+#ifdef MOZ_REPLACE_MALLOC
-   zone.zone_name = "replace_malloc_zone";
-+#else
-+  zone.zone_name = "jemalloc_zone";
-+#endif
-   zone.batch_malloc = NULL;
-   zone.batch_free = NULL;
-   zone.introspect = &zone_introspect;
-   zone.version = JEMALLOC_ZONE_VERSION;
-   zone.memalign = zone_memalign;
-   zone.free_definite_size = zone_free_definite_size;
- #if (JEMALLOC_ZONE_VERSION >= 8)
-   zone.pressure_relief = NULL;
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -1455,75 +1455,16 @@ bool		malloc_init_hard(void);
- static
- #endif
- void	_malloc_prefork(void);
- #ifndef MOZ_MEMORY_DARWIN
- static
- #endif
- void	_malloc_postfork(void);
- 
--#ifdef MOZ_MEMORY_DARWIN
--/*
-- * MALLOC_ZONE_T_NOTE
-- *
-- * On Darwin, we hook into the memory allocator using a malloc_zone_t struct.
-- * We must be very careful around this struct because of different behaviour on
-- * different versions of OSX.
-- *
-- * Each of OSX 10.5, 10.6 and 10.7 use different versions of the struct
-- * (with version numbers 3, 6 and 8 respectively). The binary we use on each of
-- * these platforms will not necessarily be built using the correct SDK [1].
-- * This means we need to statically know the correct struct size to use on all
-- * OSX releases, and have a fallback for unknown future versions. The struct
-- * sizes defined in osx_zone_types.h.
-- *
-- * For OSX 10.8 and later, we may expect the malloc_zone_t struct to change
-- * again, and need to dynamically account for this. By simply leaving
-- * malloc_zone_t alone, we don't quite deal with the problem, because there
-- * remain calls to jemalloc through the mozalloc interface. We check this
-- * dynamically on each allocation, using the CHECK_DARWIN macro and
-- * osx_use_jemalloc.
-- *
-- *
-- * [1] Mozilla is built as a universal binary on Mac, supporting i386 and
-- *     x86_64. The i386 target is built using the 10.5 SDK, even if it runs on
-- *     10.6. The x86_64 target is built using the 10.6 SDK, even if it runs on
-- *     10.7 or later, or 10.5.
-- *
-- * FIXME:
-- *   When later versions of OSX come out (10.8 and up), we need to check their
-- *   malloc_zone_t versions. If they're greater than 8, we need a new version
-- *   of malloc_zone_t adapted into osx_zone_types.h.
-- */
--
--#ifndef MOZ_REPLACE_MALLOC
--#include "osx_zone_types.h"
--
--#define LEOPARD_MALLOC_ZONE_T_VERSION 3
--#define SNOW_LEOPARD_MALLOC_ZONE_T_VERSION 6
--#define LION_MALLOC_ZONE_T_VERSION 8
--
--static bool osx_use_jemalloc = false;
--
--
--static lion_malloc_zone l_szone;
--static malloc_zone_t * szone = (malloc_zone_t*)(&l_szone);
--
--static lion_malloc_introspection l_ozone_introspect;
--static malloc_introspection_t * const ozone_introspect =
--	(malloc_introspection_t*)(&l_ozone_introspect);
--static malloc_zone_t *get_default_zone();
--static void szone2ozone(malloc_zone_t *zone, size_t size);
--static size_t zone_version_size(int version);
--#else
--static const bool osx_use_jemalloc = true;
--#endif
--
--#endif
--
- /*
-  * End function prototypes.
-  */
- /******************************************************************************/
- 
- static inline size_t
- load_acquire_z(size_t *p)
- {
-@@ -5581,32 +5522,33 @@ malloc_init(void)
- 
- 	if (malloc_initialized == false)
- 		return (malloc_init_hard());
- 
- 	return (false);
- }
- #endif
- 
-+#if defined(MOZ_MEMORY_DARWIN) && !defined(MOZ_REPLACE_MALLOC)
-+extern void register_zone(void);
-+#endif
-+
- #if !defined(MOZ_MEMORY_WINDOWS)
- static
- #endif
- bool
- malloc_init_hard(void)
- {
- 	unsigned i;
- 	char buf[PATH_MAX + 1];
- 	const char *opts;
- 	long result;
- #ifndef MOZ_MEMORY_WINDOWS
- 	int linklen;
- #endif
--#ifdef MOZ_MEMORY_DARWIN
--    malloc_zone_t* default_zone;
--#endif
- 
- #ifndef MOZ_MEMORY_WINDOWS
- 	malloc_mutex_lock(&init_lock);
- #endif
- 
- 	if (malloc_initialized) {
- 		/*
- 		 * Another thread initialized the allocator before this one
-@@ -6102,55 +6044,17 @@ MALLOC_OUT:
- 
- #if defined(NEEDS_PTHREAD_MMAP_UNALIGNED_TSD)
- 	if (pthread_key_create(&mmap_unaligned_tsd, NULL) != 0) {
- 		malloc_printf("<jemalloc>: Error in pthread_key_create()\n");
- 	}
- #endif
- 
- #if defined(MOZ_MEMORY_DARWIN) && !defined(MOZ_REPLACE_MALLOC)
--	/*
--	* Overwrite the default memory allocator to use jemalloc everywhere.
--	*/
--	default_zone = get_default_zone();
--
--	/*
--	 * We only use jemalloc with MacOS 10.6 and 10.7.  jemalloc is disabled
--	 * on 32-bit builds (10.5 and 32-bit 10.6) due to bug 702250, an
--	 * apparent MacOS bug.  In fact, this code isn't even compiled on
--	 * 32-bit builds.
--	 *
--	 * We'll have to update our code to work with newer versions, because
--	 * the malloc zone layout is likely to change.
--	 */
--
--	osx_use_jemalloc = (default_zone->version == SNOW_LEOPARD_MALLOC_ZONE_T_VERSION ||
--			    default_zone->version == LION_MALLOC_ZONE_T_VERSION);
--
--	/* Allow us dynamically turn off jemalloc for testing. */
--	if (getenv("NO_MAC_JEMALLOC")) {
--		osx_use_jemalloc = false;
--#ifdef __i386__
--		malloc_printf("Warning: NO_MAC_JEMALLOC has no effect on "
--			      "i386 machines (such as this one).\n");
--#endif
--	}
--
--	if (osx_use_jemalloc) {
--		/*
--		 * Convert the default szone to an "overlay zone" that is capable
--		 * of deallocating szone-allocated objects, but allocating new
--		 * objects from jemalloc.
--		 */
--		size_t size = zone_version_size(default_zone->version);
--		szone2ozone(default_zone, size);
--	}
--	else {
--		szone = default_zone;
--	}
-+	register_zone();
- #endif
- 
- #ifndef MOZ_MEMORY_WINDOWS
- 	malloc_mutex_unlock(&init_lock);
- #endif
- 	return (false);
- }
- 
-@@ -6167,42 +6071,21 @@ malloc_shutdown()
- /*
-  * End general internal functions.
-  */
- /******************************************************************************/
- /*
-  * Begin malloc(3)-compatible functions.
-  */
- 
--/*
-- * Even though we compile with MOZ_MEMORY, we may have to dynamically decide
-- * not to use jemalloc, as discussed above. However, we call jemalloc
-- * functions directly from mozalloc. Since it's pretty dangerous to mix the
-- * allocators, we need to call the OSX allocators from the functions below,
-- * when osx_use_jemalloc is not (dynamically) set.
-- *
-- * Note that we assume jemalloc is enabled on i386.  This is safe because the
-- * only i386 versions of MacOS are 10.5 and 10.6, which we support.  We have to
-- * do this because madvise isn't in the malloc zone struct for 10.5.
-- *
-- * This means that NO_MAC_JEMALLOC doesn't work on i386.
-- */
--#if defined(MOZ_MEMORY_DARWIN) && !defined(__i386__) && !defined(MOZ_REPLACE_MALLOC)
--#define DARWIN_ONLY(A) if (!osx_use_jemalloc) { A; }
--#else
--#define DARWIN_ONLY(A)
--#endif
--
- MOZ_MEMORY_API void *
- malloc_impl(size_t size)
- {
- 	void *ret;
- 
--	DARWIN_ONLY(return (szone->malloc)(szone, size));
--
- 	if (malloc_init()) {
- 		ret = NULL;
- 		goto RETURN;
- 	}
- 
- 	if (size == 0) {
- #ifdef MALLOC_SYSV
- 		if (opt_sysv == false)
-@@ -6275,18 +6158,16 @@ memalign_impl(size_t alignment, size_t s
- #ifndef MOZ_MEMORY_ELF
- MOZ_MEMORY_API
- #endif
- void *
- MEMALIGN(size_t alignment, size_t size)
- {
- 	void *ret;
- 
--	DARWIN_ONLY(return (szone->memalign)(szone, alignment, size));
--
- 	assert(((alignment - 1) & alignment) == 0);
- 
- 	if (malloc_init()) {
- 		ret = NULL;
- 		goto RETURN;
- 	}
- 
- 	if (size == 0) {
-@@ -6375,18 +6256,16 @@ valloc_impl(size_t size)
- }
- 
- MOZ_MEMORY_API void *
- calloc_impl(size_t num, size_t size)
- {
- 	void *ret;
- 	size_t num_size;
- 
--	DARWIN_ONLY(return (szone->calloc)(szone, num, size));
--
- 	if (malloc_init()) {
- 		num_size = 0;
- 		ret = NULL;
- 		goto RETURN;
- 	}
- 
- 	num_size = num * size;
- 	if (num_size == 0) {
-@@ -6431,18 +6310,16 @@ RETURN:
- 	return (ret);
- }
- 
- MOZ_MEMORY_API void *
- realloc_impl(void *ptr, size_t size)
- {
- 	void *ret;
- 
--	DARWIN_ONLY(return (szone->realloc)(szone, ptr, size));
--
- 	if (size == 0) {
- #ifdef MALLOC_SYSV
- 		if (opt_sysv == false)
- #endif
- 			size = 1;
- #ifdef MALLOC_SYSV
- 		else {
- 			if (ptr != NULL)
-@@ -6495,18 +6372,16 @@ RETURN:
- 	return (ret);
- }
- 
- MOZ_MEMORY_API void
- free_impl(void *ptr)
- {
- 	size_t offset;
- 
--	DARWIN_ONLY((szone->free)(szone, ptr); return);
--
- 	UTRACE(ptr, 0, 0);
- 
- 	/*
- 	 * A version of idalloc that checks for NULL pointer but only for
- 	 * huge allocations assuming that CHUNK_ADDR2OFFSET(NULL) == 0.
- 	 */
- 	assert(CHUNK_ADDR2OFFSET(NULL) == 0);
- 	offset = CHUNK_ADDR2OFFSET(ptr);
-@@ -6520,22 +6395,17 @@ free_impl(void *ptr)
-  * End malloc(3)-compatible functions.
-  */
- /******************************************************************************/
- /*
-  * Begin non-standard functions.
-  */
- 
- /* This was added by Mozilla for use by SQLite. */
--#if defined(MOZ_MEMORY_DARWIN) && !defined(MOZ_REPLACE_MALLOC)
--static
--#else
--MOZ_MEMORY_API
--#endif
--size_t
-+MOZ_MEMORY_API size_t
- malloc_good_size_impl(size_t size)
- {
- 	/*
- 	 * This duplicates the logic in imalloc(), arena_malloc() and
- 	 * arena_malloc_small().
- 	 */
- 	if (size < small_min) {
- 		/* Small (tiny). */
-@@ -6567,18 +6437,16 @@ malloc_good_size_impl(size_t size)
- 	}
- 	return size;
- }
- 
- 
- MOZ_MEMORY_API size_t
- malloc_usable_size_impl(MALLOC_USABLE_SIZE_CONST_PTR void *ptr)
- {
--	DARWIN_ONLY(return (szone->size)(szone, ptr));
--
- #ifdef MALLOC_VALIDATE
- 	return (isalloc_validate(ptr));
- #else
- 	assert(ptr != NULL);
- 
- 	return (isalloc(ptr));
- #endif
- }
-@@ -6939,264 +6807,16 @@ void
- /******************************************************************************/
- 
- #ifdef HAVE_DLOPEN
- #  include <dlfcn.h>
- #endif
- 
- #if defined(MOZ_MEMORY_DARWIN)
- 
--#if !defined(MOZ_REPLACE_MALLOC)
--static void *
--zone_malloc(malloc_zone_t *zone, size_t size)
--{
--
--	return (malloc_impl(size));
--}
--
--static void *
--zone_calloc(malloc_zone_t *zone, size_t num, size_t size)
--{
--
--	return (calloc_impl(num, size));
--}
--
--static void *
--zone_valloc(malloc_zone_t *zone, size_t size)
--{
--	void *ret = NULL; /* Assignment avoids useless compiler warning. */
--
--	posix_memalign_impl(&ret, pagesize, size);
--
--	return (ret);
--}
--
--static void *
--zone_memalign(malloc_zone_t *zone, size_t alignment, size_t size)
--{
--	return (memalign_impl(alignment, size));
--}
--
--static void *
--zone_destroy(malloc_zone_t *zone)
--{
--
--	/* This function should never be called. */
--	assert(false);
--	return (NULL);
--}
--
--static size_t
--zone_good_size(malloc_zone_t *zone, size_t size)
--{
--	return malloc_good_size_impl(size);
--}
--
--static size_t
--ozone_size(malloc_zone_t *zone, void *ptr)
--{
--	size_t ret = isalloc_validate(ptr);
--	if (ret == 0)
--		ret = szone->size(zone, ptr);
--
--	return ret;
--}
--
--static void
--ozone_free(malloc_zone_t *zone, void *ptr)
--{
--	if (isalloc_validate(ptr) != 0)
--		free_impl(ptr);
--	else {
--		size_t size = szone->size(zone, ptr);
--		if (size != 0)
--			(szone->free)(zone, ptr);
--		/* Otherwise we leak. */
--	}
--}
--
--static void *
--ozone_realloc(malloc_zone_t *zone, void *ptr, size_t size)
--{
--    size_t oldsize;
--	if (ptr == NULL)
--		return (malloc_impl(size));
--
--	oldsize = isalloc_validate(ptr);
--	if (oldsize != 0)
--		return (realloc_impl(ptr, size));
--	else {
--		oldsize = szone->size(zone, ptr);
--		if (oldsize == 0)
--			return (malloc_impl(size));
--		else {
--			void *ret = malloc_impl(size);
--			if (ret != NULL) {
--				memcpy(ret, ptr, (oldsize < size) ? oldsize :
--				    size);
--				(szone->free)(zone, ptr);
--			}
--			return (ret);
--		}
--	}
--}
--
--static unsigned
--ozone_batch_malloc(malloc_zone_t *zone, size_t size, void **results,
--    unsigned num_requested)
--{
--	/* Don't bother implementing this interface, since it isn't required. */
--	return 0;
--}
--
--static void
--ozone_batch_free(malloc_zone_t *zone, void **to_be_freed, unsigned num)
--{
--	unsigned i;
--
--	for (i = 0; i < num; i++)
--		ozone_free(zone, to_be_freed[i]);
--}
--
--static void
--ozone_free_definite_size(malloc_zone_t *zone, void *ptr, size_t size)
--{
--	if (isalloc_validate(ptr) != 0) {
--		assert(isalloc_validate(ptr) == size);
--		free_impl(ptr);
--	} else {
--		assert(size == szone->size(zone, ptr));
--		l_szone.m16(zone, ptr, size);
--	}
--}
--
--static void
--ozone_force_lock(malloc_zone_t *zone)
--{
--	_malloc_prefork();
--	szone->introspect->force_lock(zone);
--}
--
--static void
--ozone_force_unlock(malloc_zone_t *zone)
--{
--	szone->introspect->force_unlock(zone);
--        _malloc_postfork();
--}
--
--static size_t
--zone_version_size(int version)
--{
--    switch (version)
--    {
--        case SNOW_LEOPARD_MALLOC_ZONE_T_VERSION:
--            return sizeof(snow_leopard_malloc_zone);
--        case LEOPARD_MALLOC_ZONE_T_VERSION:
--            return sizeof(leopard_malloc_zone);
--        default:
--        case LION_MALLOC_ZONE_T_VERSION:
--            return sizeof(lion_malloc_zone);
--    }
--}
--
--static malloc_zone_t *get_default_zone()
--{
--  malloc_zone_t **zones = NULL;
--  unsigned int num_zones = 0;
--
--  /*
--   * On OSX 10.12, malloc_default_zone returns a special zone that is not
--   * present in the list of registered zones. That zone uses a "lite zone"
--   * if one is present (apparently enabled when malloc stack logging is
--   * enabled), or the first registered zone otherwise. In practice this
--   * means unless malloc stack logging is enabled, the first registered
--   * zone is the default.
--   * So get the list of zones to get the first one, instead of relying on
--   * malloc_default_zone.
--   */
--  if (KERN_SUCCESS != malloc_get_all_zones(0, NULL, (vm_address_t**) &zones,
--                                           &num_zones)) {
--    /* Reset the value in case the failure happened after it was set. */
--    num_zones = 0;
--  }
--  if (num_zones) {
--    return zones[0];
--  }
--  return malloc_default_zone();
--}
--
--/*
-- * Overlay the default scalable zone (szone) such that existing allocations are
-- * drained, and further allocations come from jemalloc. This is necessary
-- * because Core Foundation directly accesses and uses the szone before the
-- * jemalloc library is even loaded.
-- */
--static void
--szone2ozone(malloc_zone_t *default_zone, size_t size)
--{
--    lion_malloc_zone *l_zone;
--	assert(malloc_initialized);
--
--	/*
--	 * Stash a copy of the original szone so that we can call its
--	 * functions as needed. Note that internally, the szone stores its
--	 * bookkeeping data structures immediately following the malloc_zone_t
--	 * header, so when calling szone functions, we need to pass a pointer to
--	 * the original zone structure.
--	 */
--	memcpy(szone, default_zone, size);
--
--	/* OSX 10.7 allocates the default zone in protected memory. */
--	if (default_zone->version >= LION_MALLOC_ZONE_T_VERSION) {
--		void* start_of_page = (void*)((size_t)(default_zone) & ~pagesize_mask);
--		mprotect (start_of_page, size, PROT_READ | PROT_WRITE);
--	}
--
--	default_zone->size = (void *)ozone_size;
--	default_zone->malloc = (void *)zone_malloc;
--	default_zone->calloc = (void *)zone_calloc;
--	default_zone->valloc = (void *)zone_valloc;
--	default_zone->free = (void *)ozone_free;
--	default_zone->realloc = (void *)ozone_realloc;
--	default_zone->destroy = (void *)zone_destroy;
--	default_zone->batch_malloc = NULL;
--	default_zone->batch_free = ozone_batch_free;
--	default_zone->introspect = ozone_introspect;
--
--	/* Don't modify default_zone->zone_name; Mac libc may rely on the name
--	 * being unchanged.  See Mozilla bug 694896. */
--
--	ozone_introspect->enumerator = NULL;
--	ozone_introspect->good_size = (void *)zone_good_size;
--	ozone_introspect->check = NULL;
--	ozone_introspect->print = NULL;
--	ozone_introspect->log = NULL;
--	ozone_introspect->force_lock = (void *)ozone_force_lock;
--	ozone_introspect->force_unlock = (void *)ozone_force_unlock;
--	ozone_introspect->statistics = NULL;
--
--    /* Platform-dependent structs */
--    l_zone = (lion_malloc_zone*)(default_zone);
--
--    if (default_zone->version >= SNOW_LEOPARD_MALLOC_ZONE_T_VERSION) {
--        l_zone->m15 = (void (*)())zone_memalign;
--        l_zone->m16 = (void (*)())ozone_free_definite_size;
--        l_ozone_introspect.m9 = NULL;
--    }
--
--    if (default_zone->version >= LION_MALLOC_ZONE_T_VERSION) {
--        l_zone->m17 = NULL;
--        l_ozone_introspect.m10 = NULL;
--        l_ozone_introspect.m11 = NULL;
--        l_ozone_introspect.m12 = NULL;
--        l_ozone_introspect.m13 = NULL;
--    }
--}
--#endif
--
- __attribute__((constructor))
- void
- jemalloc_darwin_init(void)
- {
- 	if (malloc_init_hard())
- 		abort();
- }
- 
-diff --git a/memory/mozjemalloc/osx_zone_types.h b/memory/mozjemalloc/osx_zone_types.h
-deleted file mode 100644
---- a/memory/mozjemalloc/osx_zone_types.h
-+++ /dev/null
-@@ -1,147 +0,0 @@
--/* -*- Mode: C; tab-width: 8; c-basic-offset: 8 -*- */
--/* vim:set softtabstop=8 shiftwidth=8: */
--/*-
-- * Copyright (C) 2006-2008 Jason Evans <jasone@FreeBSD.org>.
-- * All rights reserved.
-- *
-- * Redistribution and use in source and binary forms, with or without
-- * modification, are permitted provided that the following conditions
-- * are met:
-- * 1. Redistributions of source code must retain the above copyright
-- *    notice(s), this list of conditions and the following disclaimer as
-- *    the first lines of this file unmodified other than the possible
-- *    addition of one or more copyright notices.
-- * 2. Redistributions in binary form must reproduce the above copyright
-- *    notice(s), this list of conditions and the following disclaimer in
-- *    the documentation and/or other materials provided with the
-- *    distribution.
-- *
-- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER(S) ``AS IS'' AND ANY
-- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-- * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) BE
-- * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-- * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-- * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-- * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-- */
--
--/*
-- * The purpose of these structs is described in jemalloc.c, in the comment
-- * marked MALLOC_ZONE_T_NOTE.
-- *
-- * We need access to some structs that come with a specific version of OSX 
-- * but can't copy them here because of licensing restrictions (see bug
-- * 603655). The structs below are equivalent in that they'll always be
-- * compiled to the same representation on all platforms.
-- *
-- * `void*` and `void (*)()` may not be the same size on weird platforms, but
-- * the size of a function pointer shouldn't vary according to its parameters
-- * or return type.
-- *
-- * Apple's version of these structures, complete with member names and
-- * comments, is available online at
-- *
-- * http://www.opensource.apple.com/source/Libc/Libc-763.12/include/malloc/malloc.h
-- *
-- */
--
--/*
-- * OSX 10.5 - Leopard
-- */
--typedef struct _leopard_malloc_zone {
-- 	void *m1;
--	void *m2;
--	void (*m3)();
--	void (*m4)();
--	void (*m5)();
--	void (*m6)();
--	void (*m7)();
--	void (*m8)();
--	void (*m9)();
--	void *m10;
--	void (*m11)();
--	void (*m12)();
--	void *m13;
--	unsigned m14;
--} leopard_malloc_zone;
--
--/*
-- * OSX 10.6 - Snow Leopard
-- */
--typedef struct _snow_leopard_malloc_zone {
--	void *m1;
--	void *m2;
--	void (*m3)();
--	void (*m4)();
--	void (*m5)();
--	void (*m6)();
--	void (*m7)();
--	void (*m8)();
--	void (*m9)();
--	void *m10;
--	void (*m11)();
--	void (*m12)();
--	void *m13;
--	unsigned m14;
--	void (*m15)(); // this member added in 10.6
--	void (*m16)(); // this member added in 10.6
--} snow_leopard_malloc_zone;
--
--typedef struct _snow_leopard_malloc_introspection {
--    void (*m1)();
--    void (*m2)();
--    void (*m3)();
--    void (*m4)();
--    void (*m5)();
--    void (*m6)();
--    void (*m7)();
--    void (*m8)();
--    void (*m9)(); // this member added in 10.6
--} snow_leopard_malloc_introspection;
--
--/*
-- * OSX 10.7 - Lion
-- */
--typedef struct _lion_malloc_zone {
--	void *m1;
--	void *m2;
--	void (*m3)();
--	void (*m4)();
--	void (*m5)();
--	void (*m6)();
--	void (*m7)();
--	void (*m8)();
--	void (*m9)();
--	void *m10;
--	void (*m11)();
--	void (*m12)();
--	void *m13;
--	unsigned m14;
--	void (*m15)();
--	void (*m16)();
--	void (*m17)(); // this member added in 10.7
--} lion_malloc_zone;
--
--typedef struct _lion_malloc_introspection {
--    void (*m1)();
--    void (*m2)();
--    void (*m3)();
--    void (*m4)();
--    void (*m5)();
--    void (*m6)();
--    void (*m7)();
--    void (*m8)();
--    void (*m9)();
--    void (*m10)(); // this member added in 10.7
--    void (*m11)(); // this member added in 10.7
--    void (*m12)(); // this member added in 10.7
--#ifdef __BLOCKS__
--    void (*m13)(); // this member added in 10.7
--#else
--    void *m13; // this member added in 10.7
--#endif
--} lion_malloc_introspection;

+ 0 - 248
mozilla-esr52/patches/mozilla-esr52-push_355270.patch

@@ -1,248 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484715035 -32400
-#      Wed Jan 18 13:50:35 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 7b2c4625fa0fe62cd659f3f7b226bd1b295185d5
-# Parent  e2289a5148001a8b680875adbe11ce7835f15292
-Bug 1286613 - Don't rely on OSX SDK malloc/malloc.h for malloc_zone struct definitions. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-The SDK jemalloc is built against might be not be the latest for various
-reasons, but the resulting binary ought to work on newer versions of
-OSX.
-
-In order to ensure this, we need the fullest definitions possible, so
-copy what we need from the latest version of malloc/malloc.h available
-on opensource.apple.com.
-
-[Adapted from
-https://github.com/jemalloc/jemalloc/commit/c68bb4179312665e22d375aecf9f4306607c7c1a]
-
-diff --git a/memory/build/zone.c b/memory/build/zone.c
---- a/memory/build/zone.c
-+++ b/memory/build/zone.c
-@@ -1,16 +1,16 @@
- /* This Source Code Form is subject to the terms of the Mozilla Public
-  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
-  * You can obtain one at http://mozilla.org/MPL/2.0/. */
- 
- #include "mozmemory_wrap.h"
- 
- #include <stdlib.h>
--#include <malloc/malloc.h>
-+#include <mach/mach_types.h>
- #include "mozilla/Assertions.h"
- 
- /*
-  * Malloc implementation functions are MOZ_MEMORY_API, and jemalloc
-  * specific functions MOZ_JEMALLOC_API; see mozmemory_wrap.h
-  */
- #define MALLOC_DECL(name, return_type, ...) \
-   MOZ_MEMORY_API return_type name ## _impl(__VA_ARGS__);
-@@ -18,25 +18,98 @@
- #include "malloc_decls.h"
- 
- #define MALLOC_DECL(name, return_type, ...) \
-   MOZ_JEMALLOC_API return_type name ## _impl(__VA_ARGS__);
- #define MALLOC_FUNCS MALLOC_FUNCS_JEMALLOC
- #include "malloc_decls.h"
- 
- /*
-+ * Definitions of the following structs in malloc/malloc.h might be too old
-+ * for the built binary to run on newer versions of OSX. So use the newest
-+ * possible version of those structs.
-+ */
-+typedef struct _malloc_zone_t {
-+  void *reserved1;
-+  void *reserved2;
-+  size_t (*size)(struct _malloc_zone_t *, const void *);
-+  void *(*malloc)(struct _malloc_zone_t *, size_t);
-+  void *(*calloc)(struct _malloc_zone_t *, size_t, size_t);
-+  void *(*valloc)(struct _malloc_zone_t *, size_t);
-+  void (*free)(struct _malloc_zone_t *, void *);
-+  void *(*realloc)(struct _malloc_zone_t *, void *, size_t);
-+  void (*destroy)(struct _malloc_zone_t *);
-+  const char *zone_name;
-+  unsigned (*batch_malloc)(struct _malloc_zone_t *, size_t, void **, unsigned);
-+  void (*batch_free)(struct _malloc_zone_t *, void **, unsigned);
-+  struct malloc_introspection_t *introspect;
-+  unsigned version;
-+  void *(*memalign)(struct _malloc_zone_t *, size_t, size_t);
-+  void (*free_definite_size)(struct _malloc_zone_t *, void *, size_t);
-+  size_t (*pressure_relief)(struct _malloc_zone_t *, size_t);
-+} malloc_zone_t;
-+
-+typedef struct {
-+  vm_address_t address;
-+  vm_size_t size;
-+} vm_range_t;
-+
-+typedef struct malloc_statistics_t {
-+  unsigned blocks_in_use;
-+  size_t size_in_use;
-+  size_t max_size_in_use;
-+  size_t size_allocated;
-+} malloc_statistics_t;
-+
-+typedef kern_return_t memory_reader_t(task_t, vm_address_t, vm_size_t, void **);
-+
-+typedef void vm_range_recorder_t(task_t, void *, unsigned type, vm_range_t *, unsigned);
-+
-+typedef struct malloc_introspection_t {
-+  kern_return_t (*enumerator)(task_t, void *, unsigned, vm_address_t, memory_reader_t, vm_range_recorder_t);
-+  size_t (*good_size)(malloc_zone_t *, size_t);
-+  boolean_t (*check)(malloc_zone_t *);
-+  void (*print)(malloc_zone_t *, boolean_t);
-+  void (*log)(malloc_zone_t *, void *);
-+  void (*force_lock)(malloc_zone_t *);
-+  void (*force_unlock)(malloc_zone_t *);
-+  void (*statistics)(malloc_zone_t *, malloc_statistics_t *);
-+  boolean_t (*zone_locked)(malloc_zone_t *);
-+  boolean_t (*enable_discharge_checking)(malloc_zone_t *);
-+  boolean_t (*disable_discharge_checking)(malloc_zone_t *);
-+  void (*discharge)(malloc_zone_t *, void *);
-+#ifdef __BLOCKS__
-+  void (*enumerate_discharged_pointers)(malloc_zone_t *, void (^)(void *, void *));
-+#else
-+  void *enumerate_unavailable_without_blocks;
-+#endif
-+  void (*reinit_lock)(malloc_zone_t *);
-+} malloc_introspection_t;
-+
-+extern kern_return_t malloc_get_all_zones(task_t, memory_reader_t, vm_address_t **, unsigned *);
-+
-+extern malloc_zone_t *malloc_default_zone(void);
-+
-+extern void malloc_zone_register(malloc_zone_t *zone);
-+
-+extern void malloc_zone_unregister(malloc_zone_t *zone);
-+
-+extern malloc_zone_t *malloc_default_purgeable_zone(void);
-+
-+
-+/*
-  * The following is a OSX zone allocator implementation.
-  * /!\ WARNING. It assumes the underlying malloc implementation's
-  * malloc_usable_size returns 0 when the given pointer is not owned by
-  * the allocator. Sadly, OSX does call zone_size with pointers not
-  * owned by the allocator.
-  */
- 
- static size_t
--zone_size(malloc_zone_t *zone, void *ptr)
-+zone_size(malloc_zone_t *zone, const void *ptr)
- {
-   return malloc_usable_size_impl(ptr);
- }
- 
- static void *
- zone_malloc(malloc_zone_t *zone, size_t size)
- {
-   return malloc_impl(size);
-@@ -88,17 +161,17 @@ zone_memalign(malloc_zone_t *zone, size_
- }
- 
- static void *
- zone_valloc(malloc_zone_t *zone, size_t size)
- {
-   return valloc_impl(size);
- }
- 
--static void *
-+static void
- zone_destroy(malloc_zone_t *zone)
- {
-   /* This function should never be called. */
-   MOZ_CRASH();
- }
- 
- static size_t
- zone_good_size(malloc_zone_t *zone, size_t size)
-@@ -125,18 +198,16 @@ zone_force_unlock(malloc_zone_t *zone)
-   /* /!\ This calls into jemalloc. It works because we're linked in the
-    * same library. Stolen from jemalloc's zone.c. */
-   if (isthreaded)
-     jemalloc_postfork_parent();
- }
- 
- #else
- 
--#define JEMALLOC_ZONE_VERSION 6
--
- extern void _malloc_prefork(void);
- extern void _malloc_postfork(void);
- 
- static void
- zone_force_lock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into mozjemalloc. It works because we're linked in the
-    * same library. */
-@@ -186,56 +257,52 @@ static malloc_zone_t *get_default_zone()
- #ifdef MOZ_REPLACE_MALLOC
- __attribute__((constructor))
- #endif
- void
- register_zone(void)
- {
-   malloc_zone_t *default_zone = get_default_zone();
- 
--  zone.size = (void *)zone_size;
--  zone.malloc = (void *)zone_malloc;
--  zone.calloc = (void *)zone_calloc;
--  zone.valloc = (void *)zone_valloc;
--  zone.free = (void *)zone_free;
--  zone.realloc = (void *)zone_realloc;
--  zone.destroy = (void *)zone_destroy;
-+  zone.size = zone_size;
-+  zone.malloc = zone_malloc;
-+  zone.calloc = zone_calloc;
-+  zone.valloc = zone_valloc;
-+  zone.free = zone_free;
-+  zone.realloc = zone_realloc;
-+  zone.destroy = zone_destroy;
- #ifdef MOZ_REPLACE_MALLOC
-   zone.zone_name = "replace_malloc_zone";
- #else
-   zone.zone_name = "jemalloc_zone";
- #endif
-   zone.batch_malloc = NULL;
-   zone.batch_free = NULL;
-   zone.introspect = &zone_introspect;
--  zone.version = JEMALLOC_ZONE_VERSION;
-+  zone.version = 8;
-   zone.memalign = zone_memalign;
-   zone.free_definite_size = zone_free_definite_size;
--#if (JEMALLOC_ZONE_VERSION >= 8)
-   zone.pressure_relief = NULL;
--#endif
-   zone_introspect.enumerator = NULL;
--  zone_introspect.good_size = (void *)zone_good_size;
-+  zone_introspect.good_size = zone_good_size;
-   zone_introspect.check = NULL;
-   zone_introspect.print = NULL;
-   zone_introspect.log = NULL;
--  zone_introspect.force_lock = (void *)zone_force_lock;
--  zone_introspect.force_unlock = (void *)zone_force_unlock;
-+  zone_introspect.force_lock = zone_force_lock;
-+  zone_introspect.force_unlock = zone_force_unlock;
-   zone_introspect.statistics = NULL;
-   zone_introspect.zone_locked = NULL;
--#if (JEMALLOC_ZONE_VERSION >= 7)
-   zone_introspect.enable_discharge_checking = NULL;
-   zone_introspect.disable_discharge_checking = NULL;
-   zone_introspect.discharge = NULL;
- #ifdef __BLOCKS__
-   zone_introspect.enumerate_discharged_pointers = NULL;
- #else
-   zone_introspect.enumerate_unavailable_without_blocks = NULL;
- #endif
--#endif
- 
-   /*
-    * The default purgeable zone is created lazily by OSX's libc.  It uses
-    * the default zone when it is created for "small" allocations
-    * (< 15 KiB), but assumes the default zone is a scalable_zone.  This
-    * obviously fails when the default zone is the jemalloc zone, so
-    * malloc_default_purgeable_zone is called beforehand so that the
-    * default purgeable zone is created when the default zone is still

+ 0 - 213
mozilla-esr52/patches/mozilla-esr52-push_355271.patch

@@ -1,213 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484717711 -32400
-#      Wed Jan 18 14:35:11 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 2070ab8bedb27c8c85324a4083655f499e48e78b
-# Parent  7b2c4625fa0fe62cd659f3f7b226bd1b295185d5
-Bug 1286613 - Add dummy implementations for most remaining OSX zone allocator functions. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Some system libraries are using malloc_default_zone() and then using
-some of the malloc_zone_* API. Under normal conditions, those functions
-check the malloc_zone_t/malloc_introspection_t struct for the values
-that are allowed to be NULL, so that a NULL deref doesn't happen.
-
-As of OSX 10.12, malloc_default_zone() doesn't return the actual default
-zone anymore, but returns a fake, wrapper zone. The wrapper zone defines
-all the possible functions in the malloc_zone_t/malloc_introspection_t
-struct (almost), and calls the function from the registered default zone
-(jemalloc in our case) on its own. Without checking whether the pointers
-are NULL.
-
-This means that a system library that calls e.g.
-malloc_zone_batch_malloc(malloc_default_zone(), ...) ends up trying to
-call jemalloc_zone.batch_malloc, which is NULL, and crash follows.
-
-So as of OSX 10.12, the default zone is required to have all the
-functions available (really, the same as the wrapper zone), even if they
-do nothing.
-
-This is arguably a bug in libsystem_malloc in OSX 10.12, but jemalloc
-still needs to work in that case.
-
-[Adapted from
-https://github.com/jemalloc/jemalloc/commit/c6943acb3c56d1b3d1e82dd43b3fcfeae7771990]
-
-diff --git a/memory/build/zone.c b/memory/build/zone.c
---- a/memory/build/zone.c
-+++ b/memory/build/zone.c
-@@ -168,22 +168,79 @@ zone_valloc(malloc_zone_t *zone, size_t 
- 
- static void
- zone_destroy(malloc_zone_t *zone)
- {
-   /* This function should never be called. */
-   MOZ_CRASH();
- }
- 
-+static unsigned
-+zone_batch_malloc(malloc_zone_t *zone, size_t size, void **results,
-+    unsigned num_requested)
-+{
-+  unsigned i;
-+
-+  for (i = 0; i < num_requested; i++) {
-+    results[i] = malloc_impl(size);
-+    if (!results[i])
-+      break;
-+  }
-+
-+  return i;
-+}
-+
-+static void
-+zone_batch_free(malloc_zone_t *zone, void **to_be_freed,
-+    unsigned num_to_be_freed)
-+{
-+  unsigned i;
-+
-+  for (i = 0; i < num_to_be_freed; i++) {
-+    zone_free(zone, to_be_freed[i]);
-+    to_be_freed[i] = NULL;
-+  }
-+}
-+
-+static size_t
-+zone_pressure_relief(malloc_zone_t *zone, size_t goal)
-+{
-+  return 0;
-+}
-+
- static size_t
- zone_good_size(malloc_zone_t *zone, size_t size)
- {
-   return malloc_good_size_impl(size);
- }
- 
-+static kern_return_t
-+zone_enumerator(task_t task, void *data, unsigned type_mask,
-+    vm_address_t zone_address, memory_reader_t reader,
-+    vm_range_recorder_t recorder)
-+{
-+  return KERN_SUCCESS;
-+}
-+
-+static boolean_t
-+zone_check(malloc_zone_t *zone)
-+{
-+  return true;
-+}
-+
-+static void
-+zone_print(malloc_zone_t *zone, boolean_t verbose)
-+{
-+}
-+
-+static void
-+zone_log(malloc_zone_t *zone, void *address)
-+{
-+}
-+
- #ifdef MOZ_JEMALLOC
- 
- #include "jemalloc/internal/jemalloc_internal.h"
- 
- static void
- zone_force_lock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into jemalloc. It works because we're linked in the
-@@ -219,16 +276,41 @@ zone_force_unlock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into mozjemalloc. It works because we're linked in the
-    * same library. */
-   _malloc_postfork();
- }
- 
- #endif
- 
-+static void
-+zone_statistics(malloc_zone_t *zone, malloc_statistics_t *stats)
-+{
-+  /* We make no effort to actually fill the values */
-+  stats->blocks_in_use = 0;
-+  stats->size_in_use = 0;
-+  stats->max_size_in_use = 0;
-+  stats->size_allocated = 0;
-+}
-+
-+static boolean_t
-+zone_locked(malloc_zone_t *zone)
-+{
-+  /* Pretend no lock is being held */
-+  return false;
-+}
-+
-+static void
-+zone_reinit_lock(malloc_zone_t *zone)
-+{
-+  /* As of OSX 10.12, this function is only used when force_unlock would
-+   * be used if the zone version were < 9. So just use force_unlock. */
-+  zone_force_unlock(zone);
-+}
-+
- static malloc_zone_t zone;
- static struct malloc_introspection_t zone_introspect;
- 
- static malloc_zone_t *get_default_zone()
- {
-   malloc_zone_t **zones = NULL;
-   unsigned int num_zones = 0;
- 
-@@ -269,40 +351,41 @@ register_zone(void)
-   zone.free = zone_free;
-   zone.realloc = zone_realloc;
-   zone.destroy = zone_destroy;
- #ifdef MOZ_REPLACE_MALLOC
-   zone.zone_name = "replace_malloc_zone";
- #else
-   zone.zone_name = "jemalloc_zone";
- #endif
--  zone.batch_malloc = NULL;
--  zone.batch_free = NULL;
-+  zone.batch_malloc = zone_batch_malloc;
-+  zone.batch_free = zone_batch_free;
-   zone.introspect = &zone_introspect;
--  zone.version = 8;
-+  zone.version = 9;
-   zone.memalign = zone_memalign;
-   zone.free_definite_size = zone_free_definite_size;
--  zone.pressure_relief = NULL;
--  zone_introspect.enumerator = NULL;
-+  zone.pressure_relief = zone_pressure_relief;
-+  zone_introspect.enumerator = zone_enumerator;
-   zone_introspect.good_size = zone_good_size;
--  zone_introspect.check = NULL;
--  zone_introspect.print = NULL;
--  zone_introspect.log = NULL;
-+  zone_introspect.check = zone_check;
-+  zone_introspect.print = zone_print;
-+  zone_introspect.log = zone_log;
-   zone_introspect.force_lock = zone_force_lock;
-   zone_introspect.force_unlock = zone_force_unlock;
--  zone_introspect.statistics = NULL;
--  zone_introspect.zone_locked = NULL;
-+  zone_introspect.statistics = zone_statistics;
-+  zone_introspect.zone_locked = zone_locked;
-   zone_introspect.enable_discharge_checking = NULL;
-   zone_introspect.disable_discharge_checking = NULL;
-   zone_introspect.discharge = NULL;
- #ifdef __BLOCKS__
-   zone_introspect.enumerate_discharged_pointers = NULL;
- #else
-   zone_introspect.enumerate_unavailable_without_blocks = NULL;
- #endif
-+  zone_introspect.reinit_lock = zone_reinit_lock;
- 
-   /*
-    * The default purgeable zone is created lazily by OSX's libc.  It uses
-    * the default zone when it is created for "small" allocations
-    * (< 15 KiB), but assumes the default zone is a scalable_zone.  This
-    * obviously fails when the default zone is the jemalloc zone, so
-    * malloc_default_purgeable_zone is called beforehand so that the
-    * default purgeable zone is created when the default zone is still

+ 0 - 691
mozilla-esr52/patches/mozilla-esr52-push_355272.patch

@@ -1,691 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484722073 -32400
-#      Wed Jan 18 15:47:53 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 22d22554507f6db7c1ecd8e467516bd194e48e7e
-# Parent  2070ab8bedb27c8c85324a4083655f499e48e78b
-Bug 1286613 - Update jemalloc 4 to c6943ac. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-This picks the same changes as the ones we just did to
-memory/build/zone.c, plus a oneliner for sparc64.
-
-diff --git a/memory/jemalloc/src/VERSION b/memory/jemalloc/src/VERSION
---- a/memory/jemalloc/src/VERSION
-+++ b/memory/jemalloc/src/VERSION
-@@ -1,1 +1,1 @@
--4.4.0-0-gf1f76357313e7dcad7262f17a48ff0a2e005fcdc
-+4.4.0-3-gc6943acb3c56d1b3d1e82dd43b3fcfeae7771990
-diff --git a/memory/jemalloc/src/configure b/memory/jemalloc/src/configure
---- a/memory/jemalloc/src/configure
-+++ b/memory/jemalloc/src/configure
-@@ -9002,166 +9002,16 @@ fi
- 
- 
- if test "x${enable_zone_allocator}" = "x1" ; then
-   if test "x${abi}" != "xmacho"; then
-     as_fn_error $? "--enable-zone-allocator is only supported on Darwin" "$LINENO" 5
-   fi
-   $as_echo "#define JEMALLOC_ZONE  " >>confdefs.h
- 
--
--        { $as_echo "$as_me:${as_lineno-$LINENO}: checking malloc zone version" >&5
--$as_echo_n "checking malloc zone version... " >&6; }
--
--
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_zone_t) == sizeof(void *) * 14 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=3
--else
--
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_zone_t) == sizeof(void *) * 15 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=5
--else
--
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_zone_t) == sizeof(void *) * 16 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--
--    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_introspection_t) == sizeof(void *) * 9 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=6
--else
--
--    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_introspection_t) == sizeof(void *) * 13 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=7
--else
--  JEMALLOC_ZONE_VERSION=
--
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--else
--
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_zone_t) == sizeof(void *) * 17 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=8
--else
--
--  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
--/* end confdefs.h.  */
--#include <malloc/malloc.h>
--int
--main ()
--{
--static int foo[sizeof(malloc_zone_t) > sizeof(void *) * 17 ? 1 : -1]
--
--  ;
--  return 0;
--}
--_ACEOF
--if ac_fn_c_try_compile "$LINENO"; then :
--  JEMALLOC_ZONE_VERSION=9
--else
--  JEMALLOC_ZONE_VERSION=
--
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--fi
--rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
--  if test "x${JEMALLOC_ZONE_VERSION}" = "x"; then
--    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
--$as_echo "unsupported" >&6; }
--    as_fn_error $? "Unsupported malloc zone version" "$LINENO" 5
--  fi
--  if test "${JEMALLOC_ZONE_VERSION}" = 9; then
--    JEMALLOC_ZONE_VERSION=8
--    { $as_echo "$as_me:${as_lineno-$LINENO}: result: > 8" >&5
--$as_echo "> 8" >&6; }
--  else
--    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $JEMALLOC_ZONE_VERSION" >&5
--$as_echo "$JEMALLOC_ZONE_VERSION" >&6; }
--  fi
--  cat >>confdefs.h <<_ACEOF
--#define JEMALLOC_ZONE_VERSION $JEMALLOC_ZONE_VERSION
--_ACEOF
--
- fi
- 
- 
- 
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether glibc malloc hook is compilable" >&5
- $as_echo_n "checking whether glibc malloc hook is compilable... " >&6; }
- if ${je_cv_glibc_malloc_hook+:} false; then :
-   $as_echo_n "(cached) " >&6
-diff --git a/memory/jemalloc/src/configure.ac b/memory/jemalloc/src/configure.ac
---- a/memory/jemalloc/src/configure.ac
-+++ b/memory/jemalloc/src/configure.ac
-@@ -1769,47 +1769,16 @@ fi
- )
- AC_SUBST([enable_zone_allocator])
- 
- if test "x${enable_zone_allocator}" = "x1" ; then
-   if test "x${abi}" != "xmacho"; then
-     AC_MSG_ERROR([--enable-zone-allocator is only supported on Darwin])
-   fi
-   AC_DEFINE([JEMALLOC_ZONE], [ ])
--
--  dnl The szone version jumped from 3 to 6 between the OS X 10.5.x and 10.6
--  dnl releases.  malloc_zone_t and malloc_introspection_t have new fields in
--  dnl 10.6, which is the only source-level indication of the change.
--  AC_MSG_CHECKING([malloc zone version])
--  AC_DEFUN([JE_ZONE_PROGRAM],
--    [AC_LANG_PROGRAM(
--      [#include <malloc/malloc.h>],
--      [static int foo[[sizeof($1) $2 sizeof(void *) * $3 ? 1 : -1]]]
--    )])
--
--  AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,14)],[JEMALLOC_ZONE_VERSION=3],[
--  AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,15)],[JEMALLOC_ZONE_VERSION=5],[
--  AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,16)],[
--    AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,9)],[JEMALLOC_ZONE_VERSION=6],[
--    AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_introspection_t,==,13)],[JEMALLOC_ZONE_VERSION=7],[JEMALLOC_ZONE_VERSION=]
--  )])],[
--  AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,==,17)],[JEMALLOC_ZONE_VERSION=8],[
--  AC_COMPILE_IFELSE([JE_ZONE_PROGRAM(malloc_zone_t,>,17)],[JEMALLOC_ZONE_VERSION=9],[JEMALLOC_ZONE_VERSION=]
--  )])])])])
--  if test "x${JEMALLOC_ZONE_VERSION}" = "x"; then
--    AC_MSG_RESULT([unsupported])
--    AC_MSG_ERROR([Unsupported malloc zone version])
--  fi
--  if test "${JEMALLOC_ZONE_VERSION}" = 9; then
--    JEMALLOC_ZONE_VERSION=8
--    AC_MSG_RESULT([> 8])
--  else
--    AC_MSG_RESULT([$JEMALLOC_ZONE_VERSION])
--  fi
--  AC_DEFINE_UNQUOTED(JEMALLOC_ZONE_VERSION, [$JEMALLOC_ZONE_VERSION])
- fi
- 
- dnl ============================================================================
- dnl Check for glibc malloc hooks
- 
- JE_COMPILABLE([glibc malloc hook], [
- #include <stddef.h>
- 
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
---- a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
-+++ b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal.h.in
-@@ -153,17 +153,16 @@ static const bool config_cache_oblivious
- #if (defined(JEMALLOC_OSATOMIC) || defined(JEMALLOC_OSSPIN))
- #include <libkern/OSAtomic.h>
- #endif
- 
- #ifdef JEMALLOC_ZONE
- #include <mach/mach_error.h>
- #include <mach/mach_init.h>
- #include <mach/vm_map.h>
--#include <malloc/malloc.h>
- #endif
- 
- #include "jemalloc/internal/ph.h"
- #ifndef __PGI
- #define	RB_COMPACT
- #endif
- #include "jemalloc/internal/rb.h"
- #include "jemalloc/internal/qr.h"
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
---- a/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
-+++ b/memory/jemalloc/src/include/jemalloc/internal/jemalloc_internal_defs.h.in
-@@ -234,17 +234,16 @@
-  * pointer alignments across all cache indices.
-  */
- #undef JEMALLOC_CACHE_OBLIVIOUS
- 
- /*
-  * Darwin (OS X) uses zones to work around Mach-O symbol override shortcomings.
-  */
- #undef JEMALLOC_ZONE
--#undef JEMALLOC_ZONE_VERSION
- 
- /*
-  * Methods for determining whether the OS overcommits.
-  * JEMALLOC_PROC_SYS_VM_OVERCOMMIT_MEMORY: Linux's
-  *                                         /proc/sys/vm.overcommit_memory file.
-  * JEMALLOC_SYSCTL_VM_OVERCOMMIT: FreeBSD's vm.overcommit sysctl.
-  */
- #undef JEMALLOC_SYSCTL_VM_OVERCOMMIT
-diff --git a/memory/jemalloc/src/include/jemalloc/internal/mb.h b/memory/jemalloc/src/include/jemalloc/internal/mb.h
---- a/memory/jemalloc/src/include/jemalloc/internal/mb.h
-+++ b/memory/jemalloc/src/include/jemalloc/internal/mb.h
-@@ -71,17 +71,17 @@ mb_write(void)
- {
- 
- 	asm volatile ("eieio"
- 	    : /* Outputs. */
- 	    : /* Inputs. */
- 	    : "memory" /* Clobbers. */
- 	    );
- }
--#elif defined(__sparc64__)
-+#elif defined(__sparc__) && defined(__arch64__)
- JEMALLOC_INLINE void
- mb_write(void)
- {
- 
- 	asm volatile ("membar #StoreStore"
- 	    : /* Outputs. */
- 	    : /* Inputs. */
- 	    : "memory" /* Clobbers. */
-diff --git a/memory/jemalloc/src/src/zone.c b/memory/jemalloc/src/src/zone.c
---- a/memory/jemalloc/src/src/zone.c
-+++ b/memory/jemalloc/src/src/zone.c
-@@ -1,13 +1,82 @@
- #include "jemalloc/internal/jemalloc_internal.h"
- #ifndef JEMALLOC_ZONE
- #  error "This source file is for zones on Darwin (OS X)."
- #endif
- 
-+/* Definitions of the following structs in malloc/malloc.h might be too old
-+ * for the built binary to run on newer versions of OSX. So use the newest
-+ * possible version of those structs.
-+ */
-+typedef struct _malloc_zone_t {
-+	void *reserved1;
-+	void *reserved2;
-+	size_t (*size)(struct _malloc_zone_t *, const void *);
-+	void *(*malloc)(struct _malloc_zone_t *, size_t);
-+	void *(*calloc)(struct _malloc_zone_t *, size_t, size_t);
-+	void *(*valloc)(struct _malloc_zone_t *, size_t);
-+	void (*free)(struct _malloc_zone_t *, void *);
-+	void *(*realloc)(struct _malloc_zone_t *, void *, size_t);
-+	void (*destroy)(struct _malloc_zone_t *);
-+	const char *zone_name;
-+	unsigned (*batch_malloc)(struct _malloc_zone_t *, size_t, void **, unsigned);
-+	void (*batch_free)(struct _malloc_zone_t *, void **, unsigned);
-+	struct malloc_introspection_t *introspect;
-+	unsigned version;
-+	void *(*memalign)(struct _malloc_zone_t *, size_t, size_t);
-+	void (*free_definite_size)(struct _malloc_zone_t *, void *, size_t);
-+	size_t (*pressure_relief)(struct _malloc_zone_t *, size_t);
-+} malloc_zone_t;
-+
-+typedef struct {
-+	vm_address_t address;
-+	vm_size_t size;
-+} vm_range_t;
-+
-+typedef struct malloc_statistics_t {
-+	unsigned blocks_in_use;
-+	size_t size_in_use;
-+	size_t max_size_in_use;
-+	size_t size_allocated;
-+} malloc_statistics_t;
-+
-+typedef kern_return_t memory_reader_t(task_t, vm_address_t, vm_size_t, void **);
-+
-+typedef void vm_range_recorder_t(task_t, void *, unsigned type, vm_range_t *, unsigned);
-+
-+typedef struct malloc_introspection_t {
-+	kern_return_t (*enumerator)(task_t, void *, unsigned, vm_address_t, memory_reader_t, vm_range_recorder_t);
-+	size_t (*good_size)(malloc_zone_t *, size_t);
-+	boolean_t (*check)(malloc_zone_t *);
-+	void (*print)(malloc_zone_t *, boolean_t);
-+	void (*log)(malloc_zone_t *, void *);
-+	void (*force_lock)(malloc_zone_t *);
-+	void (*force_unlock)(malloc_zone_t *);
-+	void (*statistics)(malloc_zone_t *, malloc_statistics_t *);
-+	boolean_t (*zone_locked)(malloc_zone_t *);
-+	boolean_t (*enable_discharge_checking)(malloc_zone_t *);
-+	boolean_t (*disable_discharge_checking)(malloc_zone_t *);
-+	void (*discharge)(malloc_zone_t *, void *);
-+#ifdef __BLOCKS__
-+	void (*enumerate_discharged_pointers)(malloc_zone_t *, void (^)(void *, void *));
-+#else
-+	void *enumerate_unavailable_without_blocks;
-+#endif
-+	void (*reinit_lock)(malloc_zone_t *);
-+} malloc_introspection_t;
-+
-+extern kern_return_t malloc_get_all_zones(task_t, memory_reader_t, vm_address_t **, unsigned *);
-+
-+extern malloc_zone_t *malloc_default_zone(void);
-+
-+extern void malloc_zone_register(malloc_zone_t *zone);
-+
-+extern void malloc_zone_unregister(malloc_zone_t *zone);
-+
- /*
-  * The malloc_default_purgeable_zone() function is only available on >= 10.6.
-  * We need to check whether it is present at runtime, thus the weak_import.
-  */
- extern malloc_zone_t *malloc_default_purgeable_zone(void)
- JEMALLOC_ATTR(weak_import);
- 
- /******************************************************************************/
-@@ -15,42 +84,53 @@ JEMALLOC_ATTR(weak_import);
- 
- static malloc_zone_t *default_zone, *purgeable_zone;
- static malloc_zone_t jemalloc_zone;
- static struct malloc_introspection_t jemalloc_zone_introspect;
- 
- /******************************************************************************/
- /* Function prototypes for non-inline static functions. */
- 
--static size_t	zone_size(malloc_zone_t *zone, void *ptr);
-+static size_t	zone_size(malloc_zone_t *zone, const void *ptr);
- static void	*zone_malloc(malloc_zone_t *zone, size_t size);
- static void	*zone_calloc(malloc_zone_t *zone, size_t num, size_t size);
- static void	*zone_valloc(malloc_zone_t *zone, size_t size);
- static void	zone_free(malloc_zone_t *zone, void *ptr);
- static void	*zone_realloc(malloc_zone_t *zone, void *ptr, size_t size);
--#if (JEMALLOC_ZONE_VERSION >= 5)
- static void	*zone_memalign(malloc_zone_t *zone, size_t alignment,
--#endif
--#if (JEMALLOC_ZONE_VERSION >= 6)
-     size_t size);
- static void	zone_free_definite_size(malloc_zone_t *zone, void *ptr,
-     size_t size);
--#endif
--static void	*zone_destroy(malloc_zone_t *zone);
-+static void	zone_destroy(malloc_zone_t *zone);
-+static unsigned	zone_batch_malloc(struct _malloc_zone_t *zone, size_t size,
-+    void **results, unsigned num_requested);
-+static void	zone_batch_free(struct _malloc_zone_t *zone,
-+    void **to_be_freed, unsigned num_to_be_freed);
-+static size_t	zone_pressure_relief(struct _malloc_zone_t *zone, size_t goal);
- static size_t	zone_good_size(malloc_zone_t *zone, size_t size);
-+static kern_return_t	zone_enumerator(task_t task, void *data, unsigned type_mask,
-+    vm_address_t zone_address, memory_reader_t reader,
-+    vm_range_recorder_t recorder);
-+static boolean_t	zone_check(malloc_zone_t *zone);
-+static void	zone_print(malloc_zone_t *zone, boolean_t verbose);
-+static void	zone_log(malloc_zone_t *zone, void *address);
- static void	zone_force_lock(malloc_zone_t *zone);
- static void	zone_force_unlock(malloc_zone_t *zone);
-+static void	zone_statistics(malloc_zone_t *zone,
-+    malloc_statistics_t *stats);
-+static boolean_t	zone_locked(malloc_zone_t *zone);
-+static void	zone_reinit_lock(malloc_zone_t *zone);
- 
- /******************************************************************************/
- /*
-  * Functions.
-  */
- 
- static size_t
--zone_size(malloc_zone_t *zone, void *ptr)
-+zone_size(malloc_zone_t *zone, const void *ptr)
- {
- 
- 	/*
- 	 * There appear to be places within Darwin (such as setenv(3)) that
- 	 * cause calls to this function with pointers that *no* zone owns.  If
- 	 * we knew that all pointers were owned by *some* zone, we could split
- 	 * our zone into two parts, and use one as the default allocator and
- 	 * the other as the default deallocator/reallocator.  Since that will
-@@ -101,63 +181,115 @@ zone_realloc(malloc_zone_t *zone, void *
- {
- 
- 	if (ivsalloc(tsdn_fetch(), ptr, config_prof) != 0)
- 		return (je_realloc(ptr, size));
- 
- 	return (realloc(ptr, size));
- }
- 
--#if (JEMALLOC_ZONE_VERSION >= 5)
- static void *
- zone_memalign(malloc_zone_t *zone, size_t alignment, size_t size)
- {
- 	void *ret = NULL; /* Assignment avoids useless compiler warning. */
- 
- 	je_posix_memalign(&ret, alignment, size);
- 
- 	return (ret);
- }
--#endif
- 
--#if (JEMALLOC_ZONE_VERSION >= 6)
- static void
- zone_free_definite_size(malloc_zone_t *zone, void *ptr, size_t size)
- {
- 	size_t alloc_size;
- 
- 	alloc_size = ivsalloc(tsdn_fetch(), ptr, config_prof);
- 	if (alloc_size != 0) {
- 		assert(alloc_size == size);
- 		je_free(ptr);
- 		return;
- 	}
- 
- 	free(ptr);
- }
--#endif
- 
--static void *
-+static void
- zone_destroy(malloc_zone_t *zone)
- {
- 
- 	/* This function should never be called. */
- 	not_reached();
--	return (NULL);
-+}
-+
-+static unsigned
-+zone_batch_malloc(struct _malloc_zone_t *zone, size_t size, void **results,
-+    unsigned num_requested)
-+{
-+	unsigned i;
-+
-+	for (i = 0; i < num_requested; i++) {
-+		results[i] = je_malloc(size);
-+		if (!results[i])
-+			break;
-+	}
-+
-+	return i;
-+}
-+
-+static void
-+zone_batch_free(struct _malloc_zone_t *zone, void **to_be_freed,
-+    unsigned num_to_be_freed)
-+{
-+	unsigned i;
-+
-+	for (i = 0; i < num_to_be_freed; i++) {
-+		zone_free(zone, to_be_freed[i]);
-+		to_be_freed[i] = NULL;
-+	}
-+}
-+
-+static size_t
-+zone_pressure_relief(struct _malloc_zone_t *zone, size_t goal)
-+{
-+	return 0;
- }
- 
- static size_t
- zone_good_size(malloc_zone_t *zone, size_t size)
- {
- 
- 	if (size == 0)
- 		size = 1;
- 	return (s2u(size));
- }
- 
-+static kern_return_t
-+zone_enumerator(task_t task, void *data, unsigned type_mask,
-+    vm_address_t zone_address, memory_reader_t reader,
-+    vm_range_recorder_t recorder)
-+{
-+	return KERN_SUCCESS;
-+}
-+
-+static boolean_t
-+zone_check(malloc_zone_t *zone)
-+{
-+	return true;
-+}
-+
-+static void
-+zone_print(malloc_zone_t *zone, boolean_t verbose)
-+{
-+}
-+
-+static void
-+zone_log(malloc_zone_t *zone, void *address)
-+{
-+}
-+
- static void
- zone_force_lock(malloc_zone_t *zone)
- {
- 
- 	if (isthreaded)
- 		jemalloc_prefork();
- }
- 
-@@ -172,62 +304,78 @@ zone_force_unlock(malloc_zone_t *zone)
- 	 * reinitialized, but the child cannot unlock mutexes that were locked
- 	 * by the parent.
- 	 */
- 	if (isthreaded)
- 		jemalloc_postfork_child();
- }
- 
- static void
-+zone_statistics(malloc_zone_t *zone, malloc_statistics_t *stats)
-+{
-+	/* We make no effort to actually fill the values */
-+	stats->blocks_in_use = 0;
-+	stats->size_in_use = 0;
-+	stats->max_size_in_use = 0;
-+	stats->size_allocated = 0;
-+}
-+
-+static boolean_t
-+zone_locked(malloc_zone_t *zone)
-+{
-+	/* Pretend no lock is being held */
-+	return false;
-+}
-+
-+static void
-+zone_reinit_lock(malloc_zone_t *zone)
-+{
-+	/* As of OSX 10.12, this function is only used when force_unlock would
-+	 * be used if the zone version were < 9. So just use force_unlock. */
-+	zone_force_unlock(zone);
-+}
-+
-+static void
- zone_init(void)
- {
- 
--	jemalloc_zone.size = (void *)zone_size;
--	jemalloc_zone.malloc = (void *)zone_malloc;
--	jemalloc_zone.calloc = (void *)zone_calloc;
--	jemalloc_zone.valloc = (void *)zone_valloc;
--	jemalloc_zone.free = (void *)zone_free;
--	jemalloc_zone.realloc = (void *)zone_realloc;
--	jemalloc_zone.destroy = (void *)zone_destroy;
-+	jemalloc_zone.size = zone_size;
-+	jemalloc_zone.malloc = zone_malloc;
-+	jemalloc_zone.calloc = zone_calloc;
-+	jemalloc_zone.valloc = zone_valloc;
-+	jemalloc_zone.free = zone_free;
-+	jemalloc_zone.realloc = zone_realloc;
-+	jemalloc_zone.destroy = zone_destroy;
- 	jemalloc_zone.zone_name = "jemalloc_zone";
--	jemalloc_zone.batch_malloc = NULL;
--	jemalloc_zone.batch_free = NULL;
-+	jemalloc_zone.batch_malloc = zone_batch_malloc;
-+	jemalloc_zone.batch_free = zone_batch_free;
- 	jemalloc_zone.introspect = &jemalloc_zone_introspect;
--	jemalloc_zone.version = JEMALLOC_ZONE_VERSION;
--#if (JEMALLOC_ZONE_VERSION >= 5)
-+	jemalloc_zone.version = 9;
- 	jemalloc_zone.memalign = zone_memalign;
--#endif
--#if (JEMALLOC_ZONE_VERSION >= 6)
- 	jemalloc_zone.free_definite_size = zone_free_definite_size;
--#endif
--#if (JEMALLOC_ZONE_VERSION >= 8)
--	jemalloc_zone.pressure_relief = NULL;
--#endif
-+	jemalloc_zone.pressure_relief = zone_pressure_relief;
- 
--	jemalloc_zone_introspect.enumerator = NULL;
--	jemalloc_zone_introspect.good_size = (void *)zone_good_size;
--	jemalloc_zone_introspect.check = NULL;
--	jemalloc_zone_introspect.print = NULL;
--	jemalloc_zone_introspect.log = NULL;
--	jemalloc_zone_introspect.force_lock = (void *)zone_force_lock;
--	jemalloc_zone_introspect.force_unlock = (void *)zone_force_unlock;
--	jemalloc_zone_introspect.statistics = NULL;
--#if (JEMALLOC_ZONE_VERSION >= 6)
--	jemalloc_zone_introspect.zone_locked = NULL;
--#endif
--#if (JEMALLOC_ZONE_VERSION >= 7)
-+	jemalloc_zone_introspect.enumerator = zone_enumerator;
-+	jemalloc_zone_introspect.good_size = zone_good_size;
-+	jemalloc_zone_introspect.check = zone_check;
-+	jemalloc_zone_introspect.print = zone_print;
-+	jemalloc_zone_introspect.log = zone_log;
-+	jemalloc_zone_introspect.force_lock = zone_force_lock;
-+	jemalloc_zone_introspect.force_unlock = zone_force_unlock;
-+	jemalloc_zone_introspect.statistics = zone_statistics;
-+	jemalloc_zone_introspect.zone_locked = zone_locked;
- 	jemalloc_zone_introspect.enable_discharge_checking = NULL;
- 	jemalloc_zone_introspect.disable_discharge_checking = NULL;
- 	jemalloc_zone_introspect.discharge = NULL;
--#  ifdef __BLOCKS__
-+#ifdef __BLOCKS__
- 	jemalloc_zone_introspect.enumerate_discharged_pointers = NULL;
--#  else
-+#else
- 	jemalloc_zone_introspect.enumerate_unavailable_without_blocks = NULL;
--#  endif
- #endif
-+	jemalloc_zone_introspect.reinit_lock = zone_reinit_lock;
- }
- 
- static malloc_zone_t *
- zone_default_get(void)
- {
- 	malloc_zone_t **zones = NULL;
- 	unsigned int num_zones = 0;
- 
-diff --git a/memory/jemalloc/upstream.info b/memory/jemalloc/upstream.info
---- a/memory/jemalloc/upstream.info
-+++ b/memory/jemalloc/upstream.info
-@@ -1,2 +1,2 @@
- UPSTREAM_REPO=https://github.com/jemalloc/jemalloc
--UPSTREAM_COMMIT=4.4.0
-+UPSTREAM_COMMIT=c6943acb3c56d1b3d1e82dd43b3fcfeae7771990

+ 0 - 169
mozilla-esr52/patches/mozilla-esr52-push_355273.patch

@@ -1,169 +0,0 @@
-# HG changeset patch
-# User Mike Hommey <mh+mozilla@glandium.org>
-# Date 1484874401 -32400
-#      Fri Jan 20 10:06:41 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID ae7f7269073a31622cae4221fb7aad868767f24a
-# Parent  22d22554507f6db7c1ecd8e467516bd194e48e7e
-Bug 1332508 - Reinitialize allocator mutexes in fork() child processes. r=njn a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Adapted from
-https://github.com/jemalloc/jemalloc/commit/4e2e3dd9cf19ed5991938a708a8b50611aa5bbf8
-and
-https://github.com/jemalloc/jemalloc/commit/d9f7b2a4307f7ff9f7a139b33d366d44e8a8b83d
-
-As per the latter commit, it would seem unlocking, in fork() child
-processes, mutexes that were locked in the parent process is not really
-well supported on OSX 10.12. The addition of the zone_reinit_lock
-function in 10.12 supports this idea.
-
-diff --git a/memory/build/zone.c b/memory/build/zone.c
---- a/memory/build/zone.c
-+++ b/memory/build/zone.c
-@@ -248,40 +248,40 @@ zone_force_lock(malloc_zone_t *zone)
-   if (isthreaded)
-     jemalloc_prefork();
- }
- 
- static void
- zone_force_unlock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into jemalloc. It works because we're linked in the
--   * same library. Stolen from jemalloc's zone.c. */
-+   * same library. Stolen from jemalloc's zone.c. See the comment there. */
-   if (isthreaded)
--    jemalloc_postfork_parent();
-+    jemalloc_postfork_child();
- }
- 
- #else
- 
- extern void _malloc_prefork(void);
--extern void _malloc_postfork(void);
-+extern void _malloc_postfork_child(void);
- 
- static void
- zone_force_lock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into mozjemalloc. It works because we're linked in the
-    * same library. */
-   _malloc_prefork();
- }
- 
- static void
- zone_force_unlock(malloc_zone_t *zone)
- {
-   /* /!\ This calls into mozjemalloc. It works because we're linked in the
-    * same library. */
--  _malloc_postfork();
-+  _malloc_postfork_child();
- }
- 
- #endif
- 
- static void
- zone_statistics(malloc_zone_t *zone, malloc_statistics_t *stats)
- {
-   /* We make no effort to actually fill the values */
-diff --git a/memory/mozjemalloc/jemalloc.c b/memory/mozjemalloc/jemalloc.c
---- a/memory/mozjemalloc/jemalloc.c
-+++ b/memory/mozjemalloc/jemalloc.c
-@@ -1453,17 +1453,21 @@ bool		malloc_init_hard(void);
- 
- #ifndef MOZ_MEMORY_DARWIN
- static
- #endif
- void	_malloc_prefork(void);
- #ifndef MOZ_MEMORY_DARWIN
- static
- #endif
--void	_malloc_postfork(void);
-+void	_malloc_postfork_parent(void);
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void	_malloc_postfork_child(void);
- 
- /*
-  * End function prototypes.
-  */
- /******************************************************************************/
- 
- static inline size_t
- load_acquire_z(size_t *p)
-@@ -6034,17 +6038,17 @@ MALLOC_OUT:
- 	if (chunk_rtree == NULL)
- 		return (true);
- #endif
- 
- 	malloc_initialized = true;
- 
- #if !defined(MOZ_MEMORY_WINDOWS) && !defined(MOZ_MEMORY_DARWIN)
- 	/* Prevent potential deadlock on malloc locks after fork. */
--	pthread_atfork(_malloc_prefork, _malloc_postfork, _malloc_postfork);
-+	pthread_atfork(_malloc_prefork, _malloc_postfork_parent, _malloc_postfork_child);
- #endif
- 
- #if defined(NEEDS_PTHREAD_MMAP_UNALIGNED_TSD)
- 	if (pthread_key_create(&mmap_unaligned_tsd, NULL) != 0) {
- 		malloc_printf("<jemalloc>: Error in pthread_key_create()\n");
- 	}
- #endif
- 
-@@ -6779,33 +6783,54 @@ void
- 
- 	malloc_mutex_lock(&huge_mtx);
- }
- 
- #ifndef MOZ_MEMORY_DARWIN
- static
- #endif
- void
--_malloc_postfork(void)
-+_malloc_postfork_parent(void)
- {
- 	unsigned i;
- 
- 	/* Release all mutexes, now that fork() has completed. */
- 
- 	malloc_mutex_unlock(&huge_mtx);
- 
- 	malloc_mutex_unlock(&base_mtx);
- 
- 	for (i = 0; i < narenas; i++) {
- 		if (arenas[i] != NULL)
- 			malloc_spin_unlock(&arenas[i]->lock);
- 	}
- 	malloc_spin_unlock(&arenas_lock);
- }
- 
-+#ifndef MOZ_MEMORY_DARWIN
-+static
-+#endif
-+void
-+_malloc_postfork_child(void)
-+{
-+	unsigned i;
-+
-+	/* Reinitialize all mutexes, now that fork() has completed. */
-+
-+	malloc_mutex_init(&huge_mtx);
-+
-+	malloc_mutex_init(&base_mtx);
-+
-+	for (i = 0; i < narenas; i++) {
-+		if (arenas[i] != NULL)
-+			malloc_spin_init(&arenas[i]->lock);
-+	}
-+	malloc_spin_init(&arenas_lock);
-+}
-+
- /*
-  * End library-private functions.
-  */
- /******************************************************************************/
- 
- #ifdef HAVE_DLOPEN
- #  include <dlfcn.h>
- #endif

+ 0 - 35
mozilla-esr52/patches/mozilla-esr52-push_356225.patch

@@ -1,35 +0,0 @@
-# HG changeset patch
-# User Chris H-C <chutten@mozilla.com>
-# Date 1495813813 14400
-#      Fri May 26 11:50:13 2017 -0400
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID d13e3fefb76ea8a030579965d3c84e04649226fc
-# Parent  1ff98bcac541cf0801d9c684d52cf088472777f5
-bug 546387 - Don't try to set the GTK clipboard with null items r=karlt a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-It causes an assert failure in gtk which prints to the console.
-
-diff --git a/widget/gtk/nsClipboard.cpp b/widget/gtk/nsClipboard.cpp
---- a/widget/gtk/nsClipboard.cpp
-+++ b/widget/gtk/nsClipboard.cpp
-@@ -209,17 +209,18 @@ nsClipboard::SetData(nsITransferable *aT
-     
-     // Get GTK clipboard (CLIPBOARD or PRIMARY)
-     GtkClipboard *gtkClipboard = gtk_clipboard_get(GetSelectionAtom(aWhichClipboard));
-   
-     gint numTargets;
-     GtkTargetEntry *gtkTargets = gtk_target_table_new_from_list(list, &numTargets);
-           
-     // Set getcallback and request to store data after an application exit
--    if (gtk_clipboard_set_with_data(gtkClipboard, gtkTargets, numTargets, 
-+    if (gtkTargets &&
-+        gtk_clipboard_set_with_data(gtkClipboard, gtkTargets, numTargets,
-                                     clipboard_get_cb, clipboard_clear_cb, this))
-     {
-         // We managed to set-up the clipboard so update internal state
-         // We have to set it now because gtk_clipboard_set_with_data() calls clipboard_clear_cb()
-         // which reset our internal state 
-         if (aWhichClipboard == kSelectionClipboard) {
-             mSelectionOwner = aOwner;
-             mSelectionTransferable = aTransferable;

+ 0 - 84
mozilla-esr52/patches/mozilla-esr52-push_356226.patch

@@ -1,84 +0,0 @@
-# HG changeset patch
-# User Johann Hofmann <jhofmann@mozilla.com>
-# Date 1496346071 -7200
-#      Thu Jun 01 21:41:11 2017 +0200
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID f822bda79c28da0ad93b67d46abcb66f6d5c8c92
-# Parent  d13e3fefb76ea8a030579965d3c84e04649226fc
-Bug 1350152 - Don't rely on gBrowser in nsLoginManagerPrompter.js. r=mkaply a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-In bug 1266836 we fixed this code to properly work in e10s,
-but made the mistake of using gBrowser in toolkit code, breaking
-XUL apps that don't have a gBrowser. This solution implements
-a different code-path for non-e10s and returns a chrome
-window for consumers that don't offer a browser.
-
-diff --git a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
---- a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
-+++ b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
-@@ -803,16 +803,19 @@ LoginManagerPrompter.prototype = {
-    *        Login to save or change. For changes, this login should contain the
-    *        new password.
-    * @param {string} type
-    *        This is "password-save" or "password-change" depending on the
-    *        original notification type. This is used for telemetry and tests.
-    */
-   _showLoginCaptureDoorhanger(login, type) {
-     let { browser } = this._getNotifyWindow();
-+    if (!browser) {
-+      return;
-+    }
- 
-     let saveMsgNames = {
-       prompt: login.username === "" ? "rememberLoginMsgNoUser"
-                                     : "rememberLoginMsg",
-       buttonLabel: "rememberLoginButtonText",
-       buttonAccessKey: "rememberLoginButtonAccessKey",
-     };
- 
-@@ -1400,20 +1403,43 @@ LoginManagerPrompter.prototype = {
-     propBag.setProperty("timesUsedIncrement", 1);
-     this._pwmgr.modifyLogin(login, propBag);
-   },
- 
-   /**
-    * Given a content DOM window, returns the chrome window and browser it's in.
-    */
-   _getChromeWindow: function (aWindow) {
-+    // Handle non-e10s toolkit consumers.
-+    if (!Cu.isCrossProcessWrapper(aWindow)) {
-+      let chromeWin = aWindow.QueryInterface(Ci.nsIInterfaceRequestor)
-+                             .getInterface(Ci.nsIWebNavigation)
-+                             .QueryInterface(Ci.nsIDocShell)
-+                             .chromeEventHandler.ownerGlobal;
-+      if (!chromeWin) {
-+        return null;
-+      }
-+
-+      // gBrowser only exists on some apps, like Firefox.
-+      let tabbrowser = chromeWin.gBrowser || chromeWin.getBrowser();
-+      // At least serve the chrome window if getBrowser()
-+      // or getBrowserForContentWindow() are not supported.
-+      if (!tabbrowser || typeof tabbrowser.getBrowserForContentWindow != "function") {
-+        return { win: chromeWin };
-+      }
-+
-+      let browser = tabbrowser.getBrowserForContentWindow(aWindow);
-+      return { win: chromeWin, browser };
-+    }
-+
-     let windows = Services.wm.getEnumerator(null);
-     while (windows.hasMoreElements()) {
-       let win = windows.getNext();
--      let browser = win.gBrowser.getBrowserForContentWindow(aWindow);
-+      let tabbrowser = win.gBrowser || win.getBrowser();
-+      let browser = tabbrowser.getBrowserForContentWindow(aWindow);
-       if (browser) {
-         return { win, browser };
-       }
-     }
-     return null;
-   },
- 
-   _getNotifyWindow: function () {

+ 0 - 33
mozilla-esr52/patches/mozilla-esr52-push_356227.patch

@@ -1,33 +0,0 @@
-# HG changeset patch
-# User Jorg K <jorgk@jorgk.com>
-# Date 1502131440 14400
-#      Mon Aug 07 14:44:00 2017 -0400
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID fbb0bdb191d5e2d044ca00615d8c3ad3af7a0ab6
-# Parent  f822bda79c28da0ad93b67d46abcb66f6d5c8c92
-Bug 1388166 - Handle case where chromeWin.getBrowser() doesn't exist. r=johannh a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
---- a/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
-+++ b/toolkit/components/passwordmgr/nsLoginManagerPrompter.js
-@@ -1414,17 +1414,18 @@ LoginManagerPrompter.prototype = {
-                              .getInterface(Ci.nsIWebNavigation)
-                              .QueryInterface(Ci.nsIDocShell)
-                              .chromeEventHandler.ownerGlobal;
-       if (!chromeWin) {
-         return null;
-       }
- 
-       // gBrowser only exists on some apps, like Firefox.
--      let tabbrowser = chromeWin.gBrowser || chromeWin.getBrowser();
-+      let tabbrowser = chromeWin.gBrowser ||
-+        (typeof chromeWin.getBrowser == "function" ? chromeWin.getBrowser() : null);
-       // At least serve the chrome window if getBrowser()
-       // or getBrowserForContentWindow() are not supported.
-       if (!tabbrowser || typeof tabbrowser.getBrowserForContentWindow != "function") {
-         return { win: chromeWin };
-       }
- 
-       let browser = tabbrowser.getBrowserForContentWindow(aWindow);
-       return { win: chromeWin, browser };

+ 0 - 94
mozilla-esr52/patches/mozilla-esr52-push_356228.patch

@@ -1,94 +0,0 @@
-# HG changeset patch
-# User Aaron Klotz <aklotz@mozilla.com>
-# Date 1498711007 -32400
-#      Thu Jun 29 13:36:47 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID fdbd6734448b56e8fec5917cfae3bb1c45342aa2
-# Parent  2a0db45401fc6d3eda6112a8aa6b68e984ea0c8d
-Bug 1368150: Add IsWindows10BuildOrNewer to MFBT; r=froydnj a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-I need to be able to distinguish between builds of Windows 10. Unfortunately the
-stuff that I am working with cannot be sorted out via feature detection.
-
-diff --git a/mfbt/WindowsVersion.h b/mfbt/WindowsVersion.h
---- a/mfbt/WindowsVersion.h
-+++ b/mfbt/WindowsVersion.h
-@@ -79,16 +79,54 @@ IsWindowsBuildOrLater(uint32_t aBuild)
-     minBuild = aBuild;
-     return true;
-   }
- 
-   maxBuild = aBuild;
-   return false;
- }
- 
-+inline bool
-+IsWindows10BuildOrLater(uint32_t aBuild)
-+{
-+  static uint32_t minBuild = 0;
-+  static uint32_t maxBuild = UINT32_MAX;
-+
-+  if (minBuild >= aBuild) {
-+    return true;
-+  }
-+
-+  if (aBuild >= maxBuild) {
-+    return false;
-+  }
-+
-+  OSVERSIONINFOEX info;
-+  ZeroMemory(&info, sizeof(OSVERSIONINFOEX));
-+  info.dwOSVersionInfoSize = sizeof(OSVERSIONINFOEX);
-+  info.dwMajorVersion = 10;
-+  info.dwBuildNumber = aBuild;
-+
-+  DWORDLONG conditionMask = 0;
-+  VER_SET_CONDITION(conditionMask, VER_MAJORVERSION, VER_GREATER_EQUAL);
-+  VER_SET_CONDITION(conditionMask, VER_MINORVERSION, VER_GREATER_EQUAL);
-+  VER_SET_CONDITION(conditionMask, VER_BUILDNUMBER, VER_GREATER_EQUAL);
-+  VER_SET_CONDITION(conditionMask, VER_SERVICEPACKMAJOR, VER_GREATER_EQUAL);
-+  VER_SET_CONDITION(conditionMask, VER_SERVICEPACKMINOR, VER_GREATER_EQUAL);
-+
-+  if (VerifyVersionInfo(&info, VER_MAJORVERSION | VER_MINORVERSION |
-+                        VER_BUILDNUMBER | VER_SERVICEPACKMAJOR |
-+                        VER_SERVICEPACKMINOR, conditionMask)) {
-+    minBuild = aBuild;
-+    return true;
-+  }
-+
-+  maxBuild = aBuild;
-+  return false;
-+}
-+
- #if defined(_M_X64) || defined(_M_AMD64)
- // We support only Win7 or later on Win64.
- MOZ_ALWAYS_INLINE bool
- IsXPSP3OrLater()
- {
-   return true;
- }
- 
-@@ -179,16 +217,22 @@ IsWin8Point1OrLater()
- 
- MOZ_ALWAYS_INLINE bool
- IsWin10OrLater()
- {
-   return IsWindowsVersionOrLater(0x0a000000ul);
- }
- 
- MOZ_ALWAYS_INLINE bool
-+IsWin10CreatorsUpdateOrLater()
-+{
-+  return IsWindows10BuildOrLater(15063);
-+}
-+
-+MOZ_ALWAYS_INLINE bool
- IsNotWin7PreRTM()
- {
-   return IsWin7SP1OrLater() || !IsWin7OrLater() ||
-          IsWindowsBuildOrLater(7600);
- }
- 
- MOZ_ALWAYS_INLINE bool
- IsWin7AndPre2000Compatible() {

+ 0 - 126
mozilla-esr52/patches/mozilla-esr52-push_356229.patch

@@ -1,126 +0,0 @@
-# HG changeset patch
-# User Masayuki Nakano <masayuki@d-toybox.com>
-# Date 1498129630 -32400
-#      Thu Jun 22 20:07:10 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 459150ea79f6be75c0228450b2ae15c28b5fbe1b
-# Parent  fdbd6734448b56e8fec5917cfae3bb1c45342aa2
-Bug 1361132 - TSFTextStore::GetSelection() shouldn't return if it runs on Win10 Anniversary Update or later. r=m_kato, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-This is remaining cases of bug 1312302.  TSF may set focus to context when it receives focus related message.  In such case, TSF tries to retrieve selection but TSFTextStore::GetSelection() returns E_FAIL due to still not initialized, TSF crashes.
-
-This patch moves the hack to TSFTextStore::GetSelection() and restrict to work only on problematic versions of Windows 10.
-
-diff --git a/widget/windows/TSFTextStore.cpp b/widget/windows/TSFTextStore.cpp
---- a/widget/windows/TSFTextStore.cpp
-+++ b/widget/windows/TSFTextStore.cpp
-@@ -2117,28 +2117,56 @@ TSFTextStore::GetSelection(ULONG ulIndex
-     MOZ_LOG(sTextStoreLog, LogLevel::Error,
-       ("0x%p   TSFTextStore::GetSelection() FAILED due to "
-        "unsupported selection", this));
-     return TS_E_NOSELECTION;
-   }
- 
-   Selection& selectionForTSF = SelectionForTSFRef();
-   if (selectionForTSF.IsDirty()) {
-+    if (DoNotReturnErrorFromGetSelection()) {
-+      AutoSetTemporarySelection temprarySetter(selectionForTSF);
-+      *pSelection = selectionForTSF.ACP();
-+      *pcFetched = 1;
-+      MOZ_LOG(sTextStoreLog, LogLevel::Info,
-+        ("0x%p   TSFTextStore::GetSelection() returns fake selection range "
-+         "for avoiding a crash in TSF, "
-+         "acpStart=%d, acpEnd=%d (length=%d), reverted=%s",
-+         this, selectionForTSF.StartOffset(), selectionForTSF.EndOffset(),
-+         selectionForTSF.Length(), GetBoolName(selectionForTSF.IsReversed())));
-+      return S_OK;
-+    }
-     MOZ_LOG(sTextStoreLog, LogLevel::Error,
-       ("0x%p   TSFTextStore::GetSelection() FAILED due to "
-        "SelectionForTSFRef() failure", this));
-     return E_FAIL;
-   }
-   *pSelection = selectionForTSF.ACP();
-   *pcFetched = 1;
-   MOZ_LOG(sTextStoreLog, LogLevel::Info,
--    ("0x%p   TSFTextStore::GetSelection() succeeded", this));
-+    ("0x%p   TSFTextStore::GetSelection() succeeded, "
-+     "acpStart=%d, acpEnd=%d (length=%d), reverted=%s",
-+     this, selectionForTSF.StartOffset(), selectionForTSF.EndOffset(),
-+     selectionForTSF.Length(), GetBoolName(selectionForTSF.IsReversed())));
-   return S_OK;
- }
- 
-+// static
-+bool
-+TSFTextStore::DoNotReturnErrorFromGetSelection()
-+{
-+  // There is a crash bug of TSF if we return error from GetSelection().
-+  // That was introduced in Anniversary Update (build 14393, see bug 1312302)
-+  // TODO: We should avoid to run this hack on fixed builds.  When we get
-+  //       exact build number, we should get back here.
-+  static bool sTSFMayCrashIfGetSelectionReturnsError =
-+    IsWindows10BuildOrLater(14393);
-+  return sTSFMayCrashIfGetSelectionReturnsError;
-+}
-+
- bool
- TSFTextStore::IsComposingInContent() const
- {
-   if (!mDispatcher) {
-     return false;
-   }
-   if (!mDispatcher->IsInNativeInputTransaction()) {
-     return false;
-@@ -4856,24 +4884,17 @@ TSFTextStore::CreateAndSetFocus(nsWindow
-     newDocMgr->GetTop(getter_AddRefs(topContext));
-     if (topContext && topContext != textStore->mContext) {
-       MarkContextAsKeyboardDisabled(topContext);
-     }
-   }
- 
-   HRESULT hr;
-   RefPtr<ITfThreadMgr> threadMgr = sThreadMgr;
--  {
--    // Windows 10's softwware keyboard requires that SetSelection must be
--    // always successful into SetFocus.  If returning error, it might crash
--    // into TextInputFramework.dll.
--    AutoSetTemporarySelection setSelection(textStore->SelectionForTSFRef());
--
--    hr = threadMgr->SetFocus(newDocMgr);
--  }
-+  hr = threadMgr->SetFocus(newDocMgr);
- 
-   if (NS_WARN_IF(FAILED(hr))) {
-     MOZ_LOG(sTextStoreLog, LogLevel::Error,
-       ("  TSFTextStore::CreateAndSetFocus() FAILED due to "
-        "ITfTheadMgr::SetFocus() failure"));
-     EnsureToDestroyAndReleaseEnabledTextStoreIf(textStore);
-     return false;
-   }
-diff --git a/widget/windows/TSFTextStore.h b/widget/windows/TSFTextStore.h
---- a/widget/windows/TSFTextStore.h
-+++ b/widget/windows/TSFTextStore.h
-@@ -248,16 +248,21 @@ public:
-    */
-   static bool IsIMM_IMEActive();
- 
-   /**
-    * Returns true if active TIP is MS-IME for Japanese.
-    */
-   static bool IsMSJapaneseIMEActive();
- 
-+  /**
-+   * Returns true if TSF may crash if GetSelection() returns E_FAIL.
-+   */
-+  static bool DoNotReturnErrorFromGetSelection();
-+
- #ifdef DEBUG
-   // Returns true when keyboard layout has IME (TIP).
-   static bool     CurrentKeyboardLayoutHasIME();
- #endif // #ifdef DEBUG
- 
- protected:
-   TSFTextStore();
-   ~TSFTextStore();

+ 0 - 70
mozilla-esr52/patches/mozilla-esr52-push_356230.patch

@@ -1,70 +0,0 @@
-# HG changeset patch
-# User Ralph Giles <giles@mozilla.com>
-# Date 1486760298 28800
-#      Fri Feb 10 12:58:18 2017 -0800
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 21af4e17cbf9f225e99c4103ac73a72311a702d1
-# Parent  459150ea79f6be75c0228450b2ae15c28b5fbe1b
-Bug 1338655 - Don't try to build mp4parse bindings. r=froydnj a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-We use the cheddar crate to generate a C header file
-for our mp4parse_capi wrapper crate. Currently we
-do this at code check-in time via update-rust.sh.
-
-Cargo 0.18 and later will try to execute a build.rs
-file in the crate source tree regardless of whether
-it's specified in Cargo.toml so patching out that
-line just results in 'crate cheddar not found'.
-
-This change restores the old behaviour by substituting
-a 'build = false' line instead.
-
-We do have syntex vendored, but we don't currently build
-it by default, so I prefer this solution to just vendoring
-cheddar and generating the header at build time. The syntex
-crate is quite large and adds significantly to our compile
-time.
-
-diff --git a/media/libstagefright/binding/mp4parse-cargo.patch b/media/libstagefright/binding/mp4parse-cargo.patch
---- a/media/libstagefright/binding/mp4parse-cargo.patch
-+++ b/media/libstagefright/binding/mp4parse-cargo.patch
-@@ -1,15 +1,17 @@
- diff --git a/media/libstagefright/binding/mp4parse/Cargo.toml b/media/libstagefright/binding/mp4parse/Cargo.toml
- index ff9422c..814c4c6 100644
- --- a/media/libstagefright/binding/mp4parse/Cargo.toml
- +++ b/media/libstagefright/binding/mp4parse/Cargo.toml
--@@ -18,17 +18,11 @@ exclude = [
-+@@ -18,17 +18,13 @@ exclude = [
-  ]
-  
-++build = false
-++
-  [dependencies]
- -byteorder = "0.5.0"
- -afl = { version = "0.1.1", optional = true }
- -afl-plugin = { version = "0.1.1", optional = true }
- -abort_on_panic = { version = "1.0.0", optional = true }
- +byteorder = "0.5.0"
-  
-  [dev-dependencies]
-diff --git a/media/libstagefright/binding/mp4parse_capi/Cargo.toml b/media/libstagefright/binding/mp4parse_capi/Cargo.toml
---- a/media/libstagefright/binding/mp4parse_capi/Cargo.toml
-+++ b/media/libstagefright/binding/mp4parse_capi/Cargo.toml
-@@ -13,14 +13,16 @@ license = "MPL-2.0"
- 
- repository = "https://github.com/mozilla/mp4parse-rust"
- 
- # Avoid complaints about trying to package test files.
- exclude = [
-   "*.mp4",
- ]
- 
-+build = false
-+
- [dependencies]
- "mp4parse" = {version = "0.6.0", path = "../mp4parse"}
- 
- # Somewhat heavy-handed, but we want at least -Z force-overflow-checks=on.
- [profile.release]
- debug-assertions = true

+ 0 - 32
mozilla-esr52/patches/mozilla-esr52-push_356259.patch

@@ -1,32 +0,0 @@
-# HG changeset patch
-# User Edmund Wong <ewong@pw-wspx.org>
-# Date 1490753240 -28800
-#      Wed Mar 29 10:07:20 2017 +0800
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 1573a67310ccd1082e7dec4fe50c2c639b00aca3
-# Parent  21af4e17cbf9f225e99c4103ac73a72311a702d1
-Bug 1345781 - Add quotes around the PACKAGE name in case there are spaces. r=Callek a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/toolkit/locales/l10n.mk b/toolkit/locales/l10n.mk
---- a/toolkit/locales/l10n.mk
-+++ b/toolkit/locales/l10n.mk
-@@ -190,17 +190,17 @@ EN_US_PACKAGE_NAME ?= $(PACKAGE)
- # The make installers-% target needs the en-US binary in dist/
- # and for the windows repackages we need the .installer.exe in dist/sea
- wget-en-US:
- ifndef WGET
- 	$(error Wget not installed)
- endif
- 	$(NSINSTALL) -D $(ABS_DIST)/$(PKG_PATH)
- 	(cd $(ABS_DIST)/$(PKG_PATH) && \
--        $(WGET) --no-cache -nv --no-iri -N -O $(PACKAGE) '$(EN_US_BINARY_URL)/$(EN_US_PACKAGE_NAME)')
-+        $(WGET) --no-cache -nv --no-iri -N -O '$(notdir $(PACKAGE))' '$(EN_US_BINARY_URL)/$(EN_US_PACKAGE_NAME)')
- 	@echo 'Downloaded $(EN_US_BINARY_URL)/$(EN_US_PACKAGE_NAME) to $(ABS_DIST)/$(PKG_PATH)/$(PACKAGE)'
- ifdef RETRIEVE_WINDOWS_INSTALLER
- ifeq ($(OS_ARCH), WINNT)
- 	$(NSINSTALL) -D $(ABS_DIST)/$(PKG_INST_PATH)
- 	(cd $(ABS_DIST)/$(PKG_INST_PATH) && \
-         $(WGET) --no-cache -nv --no-iri -N '$(EN_US_BINARY_URL)/$(PKG_PATH)$(PKG_INST_BASENAME).exe')
- 	@echo 'Downloaded $(EN_US_BINARY_URL)/$(PKG_PATH)$(PKG_INST_BASENAME).exe to $(ABS_DIST)/$(PKG_INST_PATH)$(PKG_INST_BASENAME).exe'
- endif

+ 0 - 105
mozilla-esr52/patches/mozilla-esr52-push_356384.patch

@@ -1,105 +0,0 @@
-# HG changeset patch
-# User Masayuki Nakano <masayuki@d-toybox.com>
-# Date 1499450887 -32400
-#      Sat Jul 08 03:08:07 2017 +0900
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 2edc4420a9b86363601cd7085495103bfa8c7ee4
-# Parent  5fb6af232f119e02f60cbdc6c24f9db2a558ca77
-Bug 1367482 NativeKey::HandleCharMessage() should treat a WM_CHAR message for '\r' as a Enter key press r=m_kato a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-Starting from 52, NativeKey::HandleCharMessage() ignores all control characters.  However, some keyboard layout utilities may send WM_CHAR message whose wParam is '\r' for emulating pressing Enter key.  For supporting such utilities, we should dispatch Enter keypress event when HandleCharMessage() receives such event.
-
-Note that this patch does NOT support a pair of WM_KEYDOWN and WM_CHAR whose wParam is '\r' but the WM_KEYDOWN isn't VK_RETURN.  If there is such case, we need to support it too.  However, it needs a lot of code changes.  So, we shouldn't support it until such bug is filed actually.
-
-diff --git a/widget/windows/KeyboardLayout.cpp b/widget/windows/KeyboardLayout.cpp
---- a/widget/windows/KeyboardLayout.cpp
-+++ b/widget/windows/KeyboardLayout.cpp
-@@ -2567,17 +2567,18 @@ NativeKey::HandleCharMessage(const MSG& 
- {
-   MOZ_ASSERT(IsKeyDownMessage() || IsCharOrSysCharMessage(mMsg));
-   MOZ_ASSERT(IsCharOrSysCharMessage(aCharMsg.message));
- 
-   if (aEventDispatched) {
-     *aEventDispatched = false;
-   }
- 
--  if (IsCharOrSysCharMessage(mMsg) && IsAnotherInstanceRemovingCharMessage()) {
-+  if ((IsCharOrSysCharMessage(mMsg) || IsEnterKeyPressCharMessage(mMsg)) &&
-+      IsAnotherInstanceRemovingCharMessage()) {
-     MOZ_LOG(sNativeKeyLogger, LogLevel::Warning,
-       ("%p   NativeKey::HandleCharMessage(), WARNING, does nothing because "
-        "the message should be handled in another instance removing this "
-        "message", this));
-     // Consume this for now because it will be handled by another instance.
-     return true;
-   }
- 
-@@ -2596,17 +2597,19 @@ NativeKey::HandleCharMessage(const MSG& 
-       ("%p   NativeKey::HandleCharMessage(), WARNING, not handled due to "
-        "destroyed the widget", this));
-     return false;
-   }
- 
-   // When a control key is inputted by a key, it should be handled without
-   // WM_*CHAR messages at receiving WM_*KEYDOWN message.  So, when we receive
-   // WM_*CHAR message directly, we see a control character here.
--  if (IsControlCharMessage(aCharMsg)) {
-+  // Note that when the char is '\r', it means that the char message should
-+  // cause "Enter" keypress event for inserting a line break.
-+  if (IsControlCharMessage(aCharMsg) && !IsEnterKeyPressCharMessage(aCharMsg)) {
-     // In this case, we don't need to dispatch eKeyPress event because:
-     // 1. We're the only browser which dispatches "keypress" event for
-     //    non-printable characters (Although, both Chrome and Edge dispatch
-     //    "keypress" event for some keys accidentally.  For example, "IntlRo"
-     //    key with Ctrl of Japanese keyboard layout).
-     // 2. Currently, we may handle shortcut keys with "keydown" event if
-     //    it's reserved or something.  So, we shouldn't dispatch "keypress"
-     //    event without it.
-@@ -2623,17 +2626,21 @@ NativeKey::HandleCharMessage(const MSG& 
- 
-   // XXXmnakano I think that if mMsg is WM_CHAR, i.e., it comes without
-   //            preceding WM_KEYDOWN, we should should dispatch composition
-   //            events instead of eKeyPress because they are not caused by
-   //            actual keyboard operation.
- 
-   // First, handle normal text input or non-printable key case here.
-   WidgetKeyboardEvent keypressEvent(true, eKeyPress, mWidget);
--  keypressEvent.mCharCode = static_cast<uint32_t>(aCharMsg.wParam);
-+  if (IsEnterKeyPressCharMessage(aCharMsg)) {
-+    keypressEvent.mKeyCode = NS_VK_RETURN;
-+  } else {
-+    keypressEvent.mCharCode = static_cast<uint32_t>(aCharMsg.wParam);
-+  }
-   nsresult rv = mDispatcher->BeginNativeInputTransaction();
-   if (NS_WARN_IF(NS_FAILED(rv))) {
-     MOZ_LOG(sNativeKeyLogger, LogLevel::Error,
-       ("%p   NativeKey::HandleCharMessage(), FAILED due to "
-        "BeginNativeInputTransaction() failure", this));
-     return true;
-   }
- 
-diff --git a/widget/windows/KeyboardLayout.h b/widget/windows/KeyboardLayout.h
---- a/widget/windows/KeyboardLayout.h
-+++ b/widget/windows/KeyboardLayout.h
-@@ -526,16 +526,20 @@ private:
-     return (mMsg.message == MOZ_WM_KEYDOWN ||
-             mMsg.message == MOZ_WM_KEYUP);
-   }
-   bool IsPrintableCharMessage(const MSG& aMSG) const
-   {
-     return aMSG.message == WM_CHAR &&
-            !IsControlChar(static_cast<char16_t>(aMSG.wParam));
-   }
-+  bool IsEnterKeyPressCharMessage(const MSG& aMSG) const
-+  {
-+    return aMSG.message == WM_CHAR && aMSG.wParam == '\r';
-+  }
-   bool IsPrintableCharOrSysCharMessage(const MSG& aMSG) const
-   {
-     return IsCharOrSysCharMessage(aMSG) &&
-            !IsControlChar(static_cast<char16_t>(aMSG.wParam));
-   }
-   bool IsControlCharMessage(const MSG& aMSG) const
-   {
-     return IsCharMessage(aMSG.message) &&

+ 0 - 32
mozilla-esr52/patches/mozilla-esr52-push_356385.patch

@@ -1,32 +0,0 @@
-# HG changeset patch
-# User Daniel Stenberg <daniel@haxx.se>
-# Date 1505110560 14400
-#      Mon Sep 11 02:16:00 2017 -0400
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 2ddcbc54266bd4f8721a878db354d0a0a4117baf
-# Parent  2edc4420a9b86363601cd7085495103bfa8c7ee4
-Bug 1359624 - Disable nsAuthSambaNTLM module on OSX. r=mayhemer a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/extensions/auth/nsAuthFactory.cpp b/extensions/auth/nsAuthFactory.cpp
---- a/extensions/auth/nsAuthFactory.cpp
-+++ b/extensions/auth/nsAuthFactory.cpp
-@@ -205,17 +205,17 @@ static const mozilla::Module::CIDEntry k
- 
- static const mozilla::Module::ContractIDEntry kAuthContracts[] = {
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-gss", &kNS_GSSAUTH_CID },
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-gss", &kNS_NEGOTIATEAUTH_CID },
- #if defined( USE_SSPI )
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "negotiate-sspi", &kNS_NEGOTIATEAUTHSSPI_CID },
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "kerb-sspi", &kNS_KERBAUTHSSPI_CID },
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SYSNTLMAUTH_CID },
--#else
-+#elif !defined(XP_MACOSX)
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sys-ntlm", &kNS_SAMBANTLMAUTH_CID },
- #endif
-   { NS_HTTP_AUTHENTICATOR_CONTRACTID_PREFIX "negotiate", &kNS_HTTPNEGOTIATEAUTH_CID },
-   { NS_AUTH_MODULE_CONTRACTID_PREFIX "sasl-gssapi", &kNS_AUTHSASL_CID },
-   { nullptr }
- };
- 
- //-----------------------------------------------------------------------------

+ 0 - 52
mozilla-esr52/patches/mozilla-esr52-push_356391.patch

@@ -1,52 +0,0 @@
-# HG changeset patch
-# User Tom Prince <mozilla@hocat.ca>
-# Date 1507025630 -7200
-#      Tue Oct 03 12:13:50 2017 +0200
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 4926d82489d8d56433d45cc804e835180b842786
-# Parent  cce71d51e710a26393edc59e36f6e72d9ff2c75a
-Bug 1405177: Install (slightly) newer pip to install boto. r=nthomas a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/testing/mozharness/scripts/release/antivirus.py b/testing/mozharness/scripts/release/antivirus.py
---- a/testing/mozharness/scripts/release/antivirus.py
-+++ b/testing/mozharness/scripts/release/antivirus.py
-@@ -75,16 +75,17 @@ class AntivirusScan(BaseScript, Virtuale
-     CACHE_DIR = 'cache'
- 
-     def __init__(self):
-         BaseScript.__init__(self,
-             config_options=self.config_options,
-             require_config_file=False,
-             config={
-                 "virtualenv_modules": [
-+                    "pip==1.5.5",
-                     "boto",
-                     "redo",
-                     "mar",
-                 ],
-                 "virtualenv_path": "venv",
-             },
-             all_actions=[
-                 "create-virtualenv",
-diff --git a/testing/mozharness/scripts/release/push-candidate-to-releases.py b/testing/mozharness/scripts/release/push-candidate-to-releases.py
---- a/testing/mozharness/scripts/release/push-candidate-to-releases.py
-+++ b/testing/mozharness/scripts/release/push-candidate-to-releases.py
-@@ -66,16 +66,17 @@ class ReleasePusher(BaseScript, Virtuale
-     ] + virtualenv_config_options
- 
-     def __init__(self, aws_creds):
-         BaseScript.__init__(self,
-             config_options=self.config_options,
-             require_config_file=False,
-             config={
-                 "virtualenv_modules": [
-+                    "pip==1.5.5",
-                     "boto",
-                     "redo",
-                 ],
-                 "virtualenv_path": "venv",
-             },
-             all_actions=[
-                 "create-virtualenv",
-                 "activate-virtualenv",

+ 0 - 36
mozilla-esr52/patches/mozilla-esr52-push_356425.patch

@@ -1,36 +0,0 @@
-# HG changeset patch
-# User Justin Wood <Callek@gmail.com>
-# Date 1414548364 14400
-#      Tue Oct 28 22:06:04 2014 -0400
-# Node ID b2d10434b32f6d42581754de30db6f5d5bbade62
-# Parent  b8d623653f43d516a8b50bc40eede527f2183429
-Bug 1090219 - SeaMonkey updates for release jobs fail. r-pending=rstrong. a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/tools/update-packaging/make_incremental_updates.py b/tools/update-packaging/make_incremental_updates.py
---- a/tools/update-packaging/make_incremental_updates.py
-+++ b/tools/update-packaging/make_incremental_updates.py
-@@ -423,18 +423,21 @@ def usage():
- 
- def get_buildid(work_dir):
-     """ extracts buildid from MAR
-     """
-     ini = '%s/application.ini' % work_dir
-     if not os.path.exists(ini):
-         ini = '%s/Contents/Resources/application.ini' % work_dir
-         if not os.path.exists(ini):
--            print 'WARNING: application.ini not found, cannot find build ID'
--            return ''
-+            # Try the old (pre Gecko 34) location
-+            ini = '%s/Contents/MacOS/application.ini' % work_dir
-+            if not os.path.exists(ini):
-+                print 'WARNING: application.ini not found, cannot find build ID'
-+                return ''
- 
-     file = bz2.BZ2File(ini)
-     for line in file:
-         if line.find('BuildID') == 0:
-             return line.strip().split('=')[1]
-     print 'WARNING: cannot find build ID in application.ini'
-     return ''
- 

+ 0 - 33
mozilla-esr52/patches/mozilla-esr52-push_356660.patch

@@ -1,33 +0,0 @@
-# HG changeset patch
-# User Magnus Melin <mkmelin+mozilla@iki.fi>
-# Date 1512830596 -7200
-#      Sat Dec 09 16:43:16 2017 +0200
-# Branch THUNDERBIRD_52_VERBRANCH
-# Node ID 1a510ee578a057035fcff6592d65757092d79053
-# Parent  f36516ece06c40d2f232efd2f08e4ef25461ab1c
-Bug 1411745 - fix crash for svg linking to mailbox URI. r=smaug a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCH
-
-diff --git a/dom/base/nsDocument.cpp b/dom/base/nsDocument.cpp
---- a/dom/base/nsDocument.cpp
-+++ b/dom/base/nsDocument.cpp
-@@ -1030,17 +1030,18 @@ nsExternalResourceMap::PendingLoad::Setu
- 
- NS_IMETHODIMP
- nsExternalResourceMap::PendingLoad::OnDataAvailable(nsIRequest* aRequest,
-                                                     nsISupports* aContext,
-                                                     nsIInputStream* aStream,
-                                                     uint64_t aOffset,
-                                                     uint32_t aCount)
- {
--  NS_PRECONDITION(mTargetListener, "Shouldn't be getting called!");
-+  // mTargetListener might be null if SetupViewer or AddExternalResource failed.
-+  NS_ENSURE_TRUE(mTargetListener, NS_ERROR_FAILURE);
-   if (mDisplayDocument->ExternalResourceMap().HaveShutDown()) {
-     return NS_BINDING_ABORTED;
-   }
-   return mTargetListener->OnDataAvailable(aRequest, aContext, aStream, aOffset,
-                                           aCount);
- }
- 
- NS_IMETHODIMP

+ 0 - 94
mozilla-esr52/patches/mozilla-esr52-push_356661.patch

@@ -1,94 +0,0 @@
-# HG changeset patch
-# User Jorg K <jorgk@jorgk.com>
-# Date 1513879572 -3600
-#      Thu Dec 21 19:06:12 2017 +0100
-# Node ID 34c968767eb7aaaeb7d8707cf6b8e0f9fb86aa9c
-# Parent  1a510ee578a057035fcff6592d65757092d79053
-Bug 1411708 - port relevant hunks of bug 1035091 [limit @-moz-document to user and UA sheets]. r=jorgk, a=IanN CLOSED TREE DONTBUILD
-mozilla-esr52 SEAMONKEY_2_49_ESR_RELBRANCHDONTBUILD
-
-diff --git a/layout/style/nsCSSParser.cpp b/layout/style/nsCSSParser.cpp
---- a/layout/style/nsCSSParser.cpp
-+++ b/layout/style/nsCSSParser.cpp
-@@ -68,16 +68,17 @@ static bool sOpentypeSVGEnabled;
- static bool sWebkitPrefixedAliasesEnabled;
- static bool sWebkitDevicePixelRatioEnabled;
- static bool sUnprefixingServiceEnabled;
- #ifdef NIGHTLY_BUILD
- static bool sUnprefixingServiceGloballyWhitelisted;
- #endif
- static bool sMozGradientsEnabled;
- static bool sControlCharVisibility;
-+static bool sMozDocumentEnabledInContent;
- 
- const uint32_t
- nsCSSProps::kParserVariantTable[eCSSProperty_COUNT_no_shorthands] = {
- #define CSS_PROP(name_, id_, method_, flags_, pref_, parsevariant_, kwtable_, \
-                  stylestruct_, stylestructoffset_, animtype_)                 \
-   parsevariant_,
- #define CSS_PROP_LIST_INCLUDE_LOGICAL
- #include "nsCSSPropList.h"
-@@ -3913,16 +3914,21 @@ CSSParserImpl::ParseMediaRule(RuleAppend
- }
- 
- // Parse a @-moz-document rule.  This is like an @media rule, but instead
- // of a medium it has a nonempty list of items where each item is either
- // url(), url-prefix(), or domain().
- bool
- CSSParserImpl::ParseMozDocumentRule(RuleAppendFunc aAppendFunc, void* aData)
- {
-+  if (mParsingMode == css::eAuthorSheetFeatures &&
-+      !sMozDocumentEnabledInContent) {
-+    return false;
-+  }
-+
-   css::DocumentRule::URL *urls = nullptr;
-   css::DocumentRule::URL **next = &urls;
- 
-   uint32_t linenum, colnum;
-   if (!GetNextTokenLocation(true, &linenum, &colnum)) {
-     return false;
-   }
- 
-@@ -17967,16 +17973,18 @@ nsCSSParser::Startup()
- #ifdef NIGHTLY_BUILD
-   Preferences::AddBoolVarCache(&sUnprefixingServiceGloballyWhitelisted,
-                                "layout.css.unprefixing-service.globally-whitelisted");
- #endif
-   Preferences::AddBoolVarCache(&sMozGradientsEnabled,
-                                "layout.css.prefixes.gradients");
-   Preferences::AddBoolVarCache(&sControlCharVisibility,
-                                "layout.css.control-characters.visible");
-+  Preferences::AddBoolVarCache(&sMozDocumentEnabledInContent,
-+                               "layout.css.moz-document.content.enabled");
- }
- 
- nsCSSParser::nsCSSParser(mozilla::css::Loader* aLoader,
-                          CSSStyleSheet* aSheet)
- {
-   CSSParserImpl *impl = gFreeList;
-   if (impl) {
-     gFreeList = impl->mNextFree;
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -2444,16 +2444,19 @@ pref("layout.word_select.stop_at_punctua
- pref("layout.selection.caret_style", 0);
- 
- // pref to report CSS errors to the error console
- pref("layout.css.report_errors", true);
- 
- // Should the :visited selector ever match (otherwise :link matches instead)?
- pref("layout.css.visited_links_enabled", true);
- 
-+// Pref to control whether @-moz-document rules are enabled in content pages.
-+pref("layout.css.moz-document.content.enabled",  false);
-+
- // Override DPI. A value of -1 means use the maximum of 96 and the system DPI.
- // A value of 0 means use the system DPI. A positive value is used as the DPI.
- // This sets the physical size of a device pixel and thus controls the
- // interpretation of physical units such as "pt".
- pref("layout.css.dpi", -1);
- 
- // Set the number of device pixels per CSS pixel. A value <= 0 means choose
- // automatically based on user settings for the platform (e.g., "UI scale factor"

Some files were not shown because too many files changed in this diff