Architecture specific change in rpms/golang-github-milochristiansen-lua.git
by githook-noreply@fedoraproject.org
The package rpms/golang-github-milochristiansen-lua.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/golang-github-milochristiansen-lu....
Change:
+ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
Thanks.
Full change:
============
commit 1191890682a0161d4b7efd7631ed8924e6a354e0
Author: Ben Rosser <rosser.bjr(a)gmail.com>
Date: Mon Oct 23 23:30:04 2017 -0400
Updated to latest upstream release.
diff --git a/.gitignore b/.gitignore
index b799fc7..1a9a6d1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/milochristiansen-lua-1.1.3.tar.gz
+/milochristiansen-lua-1.1.4.tar.gz
diff --git a/golang-github-milochristiansen-lua.spec b/golang-github-milochristiansen-lua.spec
index a0f83eb..552eb3e 100644
--- a/golang-github-milochristiansen-lua.spec
+++ b/golang-github-milochristiansen-lua.spec
@@ -1,16 +1,27 @@
-%if 0%{?fedora} || 0%{?rhel} == 6
+# If any of the following macros should be set otherwise,
+# you can wrap any of them with the following conditions:
+# - %%if 0%%{centos} == 7
+# - %%if 0%%{?rhel} == 7
+# - %%if 0%%{?fedora} == 23
+# Or just test for particular distribution:
+# - %%if 0%%{centos}
+# - %%if 0%%{?rhel}
+# - %%if 0%%{?fedora}
+#
+# Be aware, on centos, both %%rhel and %%centos are set. If you want to test
+# rhel specific macros, you can use %%if 0%%{?rhel} && 0%%{?centos} == 0 condition.
+# (Don't forget to replace double percentage symbol with single one in order to apply a condition)
+
+# Generate devel rpm
%global with_devel 1
+# Build project from bundled dependencies
%global with_bundled 0
+# Build with debug info rpm
%global with_debug 0
+# Run tests in check section
%global with_check 1
+# Generate unit-test rpm
%global with_unit_test 1
-%else
-%global with_devel 0
-%global with_bundled 0
-%global with_debug 0
-%global with_check 0
-%global with_unit_test 0
-%endif
%if 0%{?with_debug}
%global _dwz_low_mem_die_limit 0
@@ -25,22 +36,23 @@
# https://github.com/milochristiansen/lua
%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
%global import_path %{provider_prefix}
-%global commit 68d5f07243f92541f65f6d6210404fff40448540
+%global commit 9cfe53dd9ceb6eec2638c96927350163705a4d4c
%global shortcommit %(c=%{commit}; echo ${c:0:7})
-# commit 68d5f07243f92541f65f6d6210404fff40448540 == version 1.1.3
+# commit 9cfe53dd9ceb6eec2638c96927350163705a4d4c == version 1.1.4
Name: golang-%{provider}-%{project}-%{repo}
-Version: 1.1.3
-Release: 3%{?dist}
+Version: 1.1.4
+Release: 1%{?dist}
Summary: Lua 5.3 VM and compiler written in Go
# License is confirmed to be zlib: https://github.com/milochristiansen/lua/issues/5
License: zlib
URL: https://%{provider_prefix}
-Source0: https://%{provider_prefix}/archive/%{version}/%{project}-%{repo}-%{version}.tar.gz
+Source0: https://%{provider_prefix}/archive/v%{version}/%{project}-%{repo}-%{version}.tar.gz
# e.g. el6 has ppc64 arch without gcc-go, so EA tag is required
-ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
+ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
+
# If go_compiler is not set to 1, there is no virtual provide. Use golang instead.
BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
@@ -103,23 +115,33 @@ install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
echo "%%dir %%{gopath}/src/%%{import_path}/." >> devel.file-list
echo "%%dir %%{gopath}/src/%%{import_path}/vendor" >> devel.file-list
# find all *.go but no *_test.go files and generate devel.file-list
-for file in $(find . -iname "*.go" \! -iname "*_test.go") ; do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
+for file in $(find . \( -iname "*.go" -or -iname "*.s" \) \! -iname "*_test.go") ; do
+ dirprefix=$(dirname $file)
+ install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$dirprefix
cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
echo "%%{gopath}/src/%%{import_path}/$file" >> devel.file-list
+
+ while [ "$dirprefix" != "." ]; do
+ echo "%%dir %%{gopath}/src/%%{import_path}/$dirprefix" >> devel.file-list
+ dirprefix=$(dirname $dirprefix)
+ done
done
%endif
# testing files for this project
%if 0%{?with_unit_test} && 0%{?with_devel}
install -d -p %{buildroot}/%{gopath}/src/%{import_path}/
-# find all *_test.go files and generate unit-test.file-list
-for file in $(find . -iname "*_test.go"); do
- echo "%%dir %%{gopath}/src/%%{import_path}/$(dirname $file)" >> devel.file-list
- install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$(dirname $file)
+# find all *_test.go files and generate unit-test-devel.file-list
+for file in $(find . -iname "*_test.go") ; do
+ dirprefix=$(dirname $file)
+ install -d -p %{buildroot}/%{gopath}/src/%{import_path}/$dirprefix
cp -pav $file %{buildroot}/%{gopath}/src/%{import_path}/$file
echo "%%{gopath}/src/%%{import_path}/$file" >> unit-test-devel.file-list
+
+ while [ "$dirprefix" != "." ]; do
+ echo "%%dir %%{gopath}/src/%%{import_path}/$dirprefix" >> devel.file-list
+ dirprefix=$(dirname $dirprefix)
+ done
done
%endif
@@ -144,16 +166,22 @@ export GOPATH=%{buildroot}/%{gopath}:%{gopath}
%if 0%{?with_devel}
%files devel -f devel.file-list
+%license LICENSE
%doc README.md
%dir %{gopath}/src/%{provider}.%{provider_tld}/%{project}
%endif
%if 0%{?with_unit_test} && 0%{?with_devel}
%files unit-test-devel -f unit-test-devel.file-list
+%license LICENSE
%doc README.md
%endif
%changelog
+* Mon Oct 23 2017 Ben Rosser <rosser.bjr(a)gmail.com> - 1.1.4-1
+- Updated to latest upstream release (#1493534).
+- Updated golang spec with new changes from gofed.
+
* Wed Aug 02 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 1.1.3-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
@@ -176,4 +204,3 @@ export GOPATH=%{buildroot}/%{gopath}:%{gopath}
* Fri Dec 30 2016 Ben Rosser <rosser.bjr(a)gmail.com> - 1.0.2-1
- First package for Fedora
-r
diff --git a/sources b/sources
index de302d8..d061abc 100644
--- a/sources
+++ b/sources
@@ -1 +1,2 @@
SHA512 (milochristiansen-lua-1.1.3.tar.gz) = 469fb1f487a453bb27d16ab8164b8303153f305f9be385bd6cdac108ccad2b13732caf82c29eb63fb8e872b934e4ec2c0fb59b7c7b736c4d3db36cf3b517b235
+SHA512 (milochristiansen-lua-1.1.4.tar.gz) = b2d7a8b3d06ce14ebda411ba7c7cf8af02b13ee7574fbb5039f28252e43e5b8bdf932c02870f63d3761854fca39835c1413b7bd2eca1a6c006ec5598bab5ed51
6 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=fd700ad0ae...
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=84f42722cf....
Change:
+%ifarch %{ix86}
+ExcludeArch: armv7hl
Thanks.
Full change:
============
commit 84f42722cf6ac1d363bf371c7334d257e8ddf5e0
Merge: c69ed95 b1a757c
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 23 20:34:27 2017 +0200
Updated to FF57Beta9
diff --cc firefox.spec
index fe2c132,86fb77f..f755707
--- a/firefox.spec
+++ b/firefox.spec
@@@ -1,10 -1,3 +1,7 @@@
+%if 0%{?fedora} < 26
+ExcludeArch: armv7hl
+%endif
+
- # Use ALSA backend?
- %define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
commit b1a757cbd45f3653b0d54b87a2f7f93145ebfbd0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Thu Oct 19 12:21:55 2017 +0200
Updated to 57.0 Beta 9
diff --git a/.gitignore b/.gitignore
index fe01930..eac0742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -257,3 +257,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b7-20171011.tar.xz
/firefox-57.0b8.source.tar.xz
/firefox-langpacks-57.0b8-20171016.tar.xz
+/firefox-57.0b9.source.tar.xz
+/firefox-langpacks-57.0b9-20171019.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 14f9672..86fb77f 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b8
+%define pre_version b9
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.4%{?pre_tag}%{?dist}
+Release: 0.5%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171019.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 19 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.5
+- Updated to 57.0 Beta 9
+
* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
- Updated to 57.0 Beta 8
diff --git a/sources b/sources
index 5e1ac99..df2fde5 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
-SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
+SHA512 (firefox-57.0b9.source.tar.xz) = 5d09a07ae48198de8d8ada4018afb4c1cfe16d9294bbbd502d3f23915c43496604f19761a409a41a23ec712d622a556b0b6dc9efd186f4528724e52c8305dda1
+SHA512 (firefox-langpacks-57.0b9-20171019.tar.xz) = 07a3182edf634a5151e4c599e9f8a886e286c1e708f5743db10efeeb5526b4aa120153491da926c5bfcd69cb0e683ff83f2637fca53c78b9e256151768c20712
commit 92f600486ea44fde51139f9e30fcdde6c939dcfc
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 12:29:32 2017 +0200
Fixed patch to apply
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index d7d8500..8daa2f2 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,10 +1,10 @@
-diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
---- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
-+++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
-@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
- pref("browser.tabs.loadBookmarksInBackground", false);
+diff -up firefox-57.0b8/browser/app/profile/firefox.js.1399611 firefox-57.0b8/browser/app/profile/firefox.js
+--- firefox-57.0b8/browser/app/profile/firefox.js.1399611 2017-10-16 12:11:45.364240654 +0200
++++ firefox-57.0b8/browser/app/profile/firefox.js 2017-10-16 12:28:03.860720910 +0200
+@@ -457,11 +457,7 @@ pref("browser.tabs.loadBookmarksInBackgr
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
+ pref("browser.tabs.tabMinWidth", 76);
-#ifdef UNIX_BUT_NOT_MAC
-pref("browser.tabs.drawInTitlebar", false);
-#else
@@ -13,9 +13,9 @@ diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/br
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
---- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
-+++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js 2017-10-16 12:11:45.364240654 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -28,9 +28,9 @@ diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 f
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
---- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
-+++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/moz.build.1399611 firefox-57.0b8/browser/base/moz.build
+--- firefox-57.0b8/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b8/browser/base/moz.build 2017-10-16 12:11:45.364240654 +0200
@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -40,9 +40,9 @@ diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/ba
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
---- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
-+++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+diff -up firefox-57.0b8/browser/themes/linux/browser.css.1399611 firefox-57.0b8/browser/themes/linux/browser.css
+--- firefox-57.0b8/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b8/browser/themes/linux/browser.css 2017-10-16 12:11:45.365240651 +0200
@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
#nav-bar,
@@ -140,9 +140,9 @@ diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/
+ }
+ }
+}
-diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
---- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
-+++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 firefox-57.0b8/dom/base/nsGkAtomList.h
+--- firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b8/dom/base/nsGkAtomList.h 2017-10-16 12:11:45.365240651 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -165,9 +165,9 @@ diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/
// application commands
GK_ATOM(Back, "Back")
-diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
---- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
-+++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b8/gfx/src/nsThemeConstants.h
+--- firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b8/gfx/src/nsThemeConstants.h 2017-10-16 12:11:45.365240651 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -176,9 +176,9 @@ diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/sr
ThemeWidgetType_COUNT
};
-diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
---- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp 2017-10-16 12:11:45.365240651 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -210,9 +210,9 @@ diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
---- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b8/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b8/layout/style/nsMediaFeatures.cpp 2017-10-16 12:11:45.366240647 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -256,9 +256,9 @@ diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
---- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
-+++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/modules/libpref/init/all.js.1399611 firefox-57.0b8/modules/libpref/init/all.js
+--- firefox-57.0b8/modules/libpref/init/all.js.1399611 2017-10-12 18:12:09.000000000 +0200
++++ firefox-57.0b8/modules/libpref/init/all.js 2017-10-16 12:11:45.366240647 +0200
@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
@@ -267,9 +267,9 @@ diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modul
#endif
#endif
-diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
---- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/toolkit/modules/moz.build.1399611 firefox-57.0b8/toolkit/modules/moz.build
+--- firefox-57.0b8/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/toolkit/modules/moz.build 2017-10-16 12:11:45.366240647 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -279,9 +279,9 @@ diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
---- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b8/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtk3drawing.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -569,9 +569,9 @@ diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget
default:
g_warning("Unknown widget type: %d", widget);
}
-diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
---- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b8/widget/gtk/gtkdrawing.h
+--- firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtkdrawing.h 2017-10-16 12:11:45.367240644 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -635,9 +635,9 @@ diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gt
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
-+++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c 2017-10-16 12:11:45.367240644 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -666,9 +666,9 @@ diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget
#endif
#ifdef GTK2_SYMBOLS
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
@@ -733,9 +733,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widg
}
// virtual
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.h 2017-10-16 12:11:45.367240644 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -756,9 +756,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget
bool mInitialized;
void EnsureInit();
-diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp 2017-10-16 12:11:45.368240640 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -839,9 +839,9 @@ diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/w
}
return eUnknownTransparency;
-diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
---- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b8/widget/gtk/nsWindow.cpp
+--- firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 2017-10-16 12:11:45.361240666 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1470,9 +1470,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gt
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
---- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.h.1399611 firefox-57.0b8/widget/gtk/nsWindow.h
+--- firefox-57.0b8/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.h 2017-10-16 12:11:45.369240636 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1562,9 +1562,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/
};
#endif /* __nsWindow_h__ */
-diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
---- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -26,10 +26,14 @@ static GtkStyleContext*
GetCssNodeStyleInternal(WidgetNodeType aNodeType);
@@ -1708,9 +1708,9 @@ diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/w
/* Clear already freed arrays */
mozilla::PodArrayZero(sWidgetStorage);
-diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
---- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
-+++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/LookAndFeel.h.1399611 firefox-57.0b8/widget/LookAndFeel.h
+--- firefox-57.0b8/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b8/widget/LookAndFeel.h 2017-10-16 12:11:45.369240636 +0200
@@ -405,6 +405,30 @@ public:
eIntID_PhysicalHomeButton,
commit 29052e77800f8522112525c0b2a2725ef28299a3
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 11:48:47 2017 +0200
Updated to 57.0 Beta 8
diff --git a/.gitignore b/.gitignore
index 3060bc4..fe01930 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,3 +255,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b6-20171009.tar.xz
/firefox-57.0b7.source.tar.xz
/firefox-langpacks-57.0b7-20171011.tar.xz
+/firefox-57.0b8.source.tar.xz
+/firefox-langpacks-57.0b8-20171016.tar.xz
diff --git a/firefox.spec b/firefox.spec
index e619503..14f9672 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b7
+%define pre_version b8
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.3%{?pre_tag}%{?dist}
+Release: 0.4%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
+- Updated to 57.0 Beta 8
+
* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
- Updated to 57.0 Beta 7
diff --git a/sources b/sources
index 3fd62bd..5e1ac99 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
-SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
+SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
+SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
commit 4f71e4765388439a6c2af118be25b5429c3f0c3e
Author: Martin Stransky <stransky(a)redhat.com>
Date: Wed Oct 11 14:23:39 2017 +0200
Updated to 57.0 Beta 7
diff --git a/.gitignore b/.gitignore
index 3f1c795..3060bc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -253,3 +253,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b5-20171005.tar.xz
/firefox-57.0b6.source.tar.xz
/firefox-langpacks-57.0b6-20171009.tar.xz
+/firefox-57.0b7.source.tar.xz
+/firefox-langpacks-57.0b7-20171011.tar.xz
diff --git a/firefox.spec b/firefox.spec
index f839e2e..e619503 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b6
+%define pre_version b7
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.2%{?pre_tag}%{?dist}
+Release: 0.3%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -155,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch415: mozilla-1405267.patch
Patch416: mozilla-1399611.patch
# Debian patches
@@ -335,7 +334,6 @@ This package contains results of tests executed during build.
%endif
%patch413 -p1 -b .1353817
-%patch415 -p1 -b .1405267
%patch416 -p1 -b .1399611
# Debian extension patch
@@ -858,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
+- Updated to 57.0 Beta 7
+
* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
- Updated to 57.0 Beta 6
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
deleted file mode 100644
index 46c7f1e..0000000
--- a/mozilla-1405267.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
-@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
- STUB(gdk_window_get_user_data)
- STUB(gdk_window_get_visual)
- STUB(gdk_window_get_width)
-+STUB(gdk_window_get_window_type)
- STUB(gdk_window_hide)
- STUB(gdk_window_input_shape_combine_region)
- STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
- STUB(gdk_event_get_source_device)
- STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_window_get_type)
--STUB(gdk_window_get_window_type)
- STUB(gdk_x11_window_get_xid)
- STUB(gdk_x11_display_get_type)
- STUB(gdk_wayland_display_get_type)
diff --git a/sources b/sources
index 43ea395..3fd62bd 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
-SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
+SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
+SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
commit fd700ad0ae450c4705017e05db7af709f7ea90f0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 14:49:41 2017 +0200
Disabled stylo on i686
diff --git a/firefox.spec b/firefox.spec
index c103013..f839e2e 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -453,6 +453,9 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
echo "ac_add_options --disable-ion" >> .mozconfig
%endif
+%ifarch %{ix86}
+echo "ac_add_options --disable-stylo" >> .mozconfig
+%endif
#---------------------------------------------------------------------
commit 92eee6224e69e8ca6591b1bafcab7b584cef5583
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 11:08:34 2017 +0200
Updated CSD patch
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index b30ae02..d7d8500 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,8 +1,7 @@
-diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index de61ac442b74..be15873ee2c4 100644
---- a/browser/app/profile/firefox.js
-+++ b/browser/app/profile/firefox.js
-@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
+--- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
++++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
+@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
pref("browser.tabs.loadBookmarksInBackground", false);
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
@@ -14,10 +13,9 @@ index de61ac442b74..be15873ee2c4 100644
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
-index d9509029bbf1..b56f81c0c138 100644
---- a/browser/base/content/browser-tabsintitlebar.js
-+++ b/browser/base/content/browser-tabsintitlebar.js
+diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
++++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -30,11 +28,10 @@ index d9509029bbf1..b56f81c0c138 100644
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff --git a/browser/base/moz.build b/browser/base/moz.build
-index a2bd4bcb4eca..f14553e4ba7f 100644
---- a/browser/base/moz.build
-+++ b/browser/base/moz.build
-@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
+--- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -43,16 +40,12 @@ index a2bd4bcb4eca..f14553e4ba7f 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
-index 65a3f0cca7b1..7bb448da620b 100644
---- a/browser/themes/linux/browser.css
-+++ b/browser/themes/linux/browser.css
-@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
- color: -moz-menubartext;
- }
+diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
+--- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
-+/* Support dragging the window using the toolbar when drawing our own
-+ * decorations, or where the GTK theme allows. */
+ #nav-bar,
#toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
+#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
@@ -61,7 +54,7 @@ index 65a3f0cca7b1..7bb448da620b 100644
-moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
}
-@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+@@ -713,3 +715,85 @@ html|span.ac-emphasize-text-url {
.restore-tabs-button:hover:active:not([disabled="true"]) {
padding: 3px;
}
@@ -147,10 +140,9 @@ index 65a3f0cca7b1..7bb448da620b 100644
+ }
+ }
+}
-diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
-index 5d5ec3d405c9..bb2f652c41e0 100644
---- a/dom/base/nsGkAtomList.h
-+++ b/dom/base/nsGkAtomList.h
+diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
+--- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -162,7 +154,7 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// windows theme selector metrics
GK_ATOM(windows_classic, "windows-classic")
-@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-d
GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
@@ -173,10 +165,9 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// application commands
GK_ATOM(Back, "Back")
-diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
-index d0ced405095d..1cd2361a0026 100644
---- a/gfx/src/nsThemeConstants.h
-+++ b/gfx/src/nsThemeConstants.h
+diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
+--- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -185,10 +176,9 @@ index d0ced405095d..1cd2361a0026 100644
ThemeWidgetType_COUNT
};
-diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
-index cbfb4d0f60aa..263372ca868e 100644
---- a/layout/style/nsCSSRuleProcessor.cpp
-+++ b/layout/style/nsCSSRuleProcessor.cpp
+diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -220,10 +210,9 @@ index cbfb4d0f60aa..263372ca868e 100644
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
-index 7cf6a08e46c1..bf955d759e8b 100644
---- a/layout/style/nsMediaFeatures.cpp
-+++ b/layout/style/nsMediaFeatures.cpp
+diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -267,11 +256,10 @@ index 7cf6a08e46c1..bf955d759e8b 100644
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 0b77f1759021..b8dc9aeebfd8 100644
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
+--- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
++++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
pref("widget.content.allow-gtk-dark-theme", false);
@@ -279,10 +267,9 @@ index 0b77f1759021..b8dc9aeebfd8 100644
#endif
#endif
-diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
-index 8b5dc9e25d7e..14fb0fe87e9d 100644
---- a/toolkit/modules/moz.build
-+++ b/toolkit/modules/moz.build
+diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
+--- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -292,192 +279,9 @@ index 8b5dc9e25d7e..14fb0fe87e9d 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
-index ff5da8017621..d31b411a9b1a 100644
---- a/widget/LookAndFeel.h
-+++ b/widget/LookAndFeel.h
-@@ -405,6 +405,30 @@ public:
- eIntID_PhysicalHomeButton,
-
- /*
-+ * A boolean value indicating whether client-side decorations are
-+ * supported by the user's GTK version.
-+ */
-+ eIntID_GTKCSDAvailable,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a minimize button.
-+ */
-+ eIntID_GTKCSDMinimizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a maximize button.
-+ */
-+ eIntID_GTKCSDMaximizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a close button.
-+ */
-+ eIntID_GTKCSDCloseButton,
-+
-+ /*
- * Controls whether overlay scrollbars display when the user moves
- * the mouse in a scrollable frame.
- */
-diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
-index 39b7893df3bd..4c9e8523b5bf 100644
---- a/widget/gtk/WidgetStyleCache.cpp
-+++ b/widget/gtk/WidgetStyleCache.cpp
-@@ -26,10 +26,14 @@ static GtkStyleContext*
- GetCssNodeStyleInternal(WidgetNodeType aNodeType);
-
- static GtkWidget*
--CreateWindowWidget()
-+CreateWindowWidget(WidgetNodeType type)
- {
- GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_widget_set_name(widget, "MozillaGtkWidget");
-+ if (type == MOZ_GTK_WINDOW_CSD) {
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, "csd");
-+ }
- return widget;
- }
-
-@@ -101,7 +105,7 @@ CreateTooltipWidget()
- {
- MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
- "CreateTooltipWidget should be used for Gtk < 3.20 only.");
-- GtkWidget* widget = CreateWindowWidget();
-+ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
- GtkStyleContext* style = gtk_widget_get_style_context(widget);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
- return widget;
-@@ -529,11 +533,82 @@ CreateNotebookWidget()
- }
-
- static GtkWidget*
-+CreateHeaderBar(bool aMaximized)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
-+ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
-+
-+ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
-+ if (aMaximized) {
-+ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
-+ GtkStyleContext* style = gtk_widget_get_style_context(window);
-+ gtk_style_context_add_class(style, "maximized");
-+ GtkWidget *fixed = gtk_fixed_new();
-+ gtk_container_add(GTK_CONTAINER(window), fixed);
-+ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
-+ // Save the window container so we don't leak it.
-+ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
-+ } else {
-+ AddToWindowContainer(headerbar);
-+ }
-+
-+ // Emulate what create_titlebar() at gtkwindow.c does.
-+ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
-+ gtk_style_context_add_class(style, "default-decoration");
-+
-+ return headerbar;
-+}
-+
-+// TODO - Also return style for buttons located at Maximized toolbar.
-+static GtkWidget*
-+CreateHeaderBarButton(WidgetNodeType aWidgetType)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
-+
-+ GtkWidget* widget = gtk_button_new();
-+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
-+
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
-+
-+ switch (aWidgetType) {
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ gtk_style_context_add_class(style, "close");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ gtk_style_context_add_class(style, "minimize");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ gtk_style_context_add_class(style, "maximize");
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return widget;
-+}
-+
-+static GtkWidget*
- CreateWidget(WidgetNodeType aWidgetType)
- {
- switch (aWidgetType) {
- case MOZ_GTK_WINDOW:
-- return CreateWindowWidget();
-+ case MOZ_GTK_WINDOW_CSD:
-+ return CreateWindowWidget(aWidgetType);
- case MOZ_GTK_WINDOW_CONTAINER:
- return CreateWindowContainerWidget();
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
-@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
- return CreateComboBoxEntryButtonWidget();
- case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
- return CreateComboBoxEntryArrowWidget();
-+ case MOZ_GTK_HEADER_BAR:
-+ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
-+ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ return CreateHeaderBarButton(aWidgetType);
- default:
- /* Not implemented */
- return nullptr;
-@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
- GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
- return gtk_widget_get_style_context(widget);
- }
-+ case MOZ_GTK_WINDOW_DECORATION:
-+ style = CreateChildCSSNode("decoration",
-+ MOZ_GTK_WINDOW_CSD);
-+ break;
- default:
- return GetWidgetRootStyle(aNodeType);
- }
-@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
- /* This will destroy all of our widgets */
- if (sWidgetStorage[MOZ_GTK_WINDOW])
- gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
-+ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
-+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
-
- /* Clear already freed arrays */
- mozilla::PodArrayZero(sWidgetStorage);
-diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
-index 4c562b380095..ee2b8a04f63f 100644
---- a/widget/gtk/gtk3drawing.cpp
-+++ b/widget/gtk/gtk3drawing.cpp
+diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -512,7 +316,7 @@ index 4c562b380095..ee2b8a04f63f 100644
// GetStateFlagsFromGtkWidgetState() can be safely used for the specific
// GtkWidgets that set both prelight and active flags. For other widgets,
// either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
-@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orient
return MOZ_GTK_SUCCESS;
}
@@ -556,7 +360,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static gint
moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
GtkTextDirection direction)
-@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
}
static gint
@@ -581,7 +385,7 @@ index 4c562b380095..ee2b8a04f63f 100644
moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
gboolean selected, gboolean inconsistent,
-@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkR
return MOZ_GTK_SUCCESS;
}
@@ -620,7 +424,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static void
moz_gtk_add_style_margin(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
-@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_pa
moz_gtk_add_style_padding(style, left, top, right, bottom);
}
@@ -635,7 +439,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static GtkBorder
GetMarginBorderPadding(GtkStyleContext* aStyle)
{
-@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType
// XXX: Subtract 1 pixel from the padding to account for the default
// padding in forms.css. See bug 1187385.
*left = *top = *right = *bottom = -1;
@@ -645,7 +449,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
-@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
@@ -657,7 +461,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
-@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
@@ -667,7 +471,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* If there is no separator, don't try to count its width. */
separator_width = 0;
-@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType
style = gtk_widget_get_style_context(w);
*left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
@@ -680,7 +484,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_MENUPOPUP:
-@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType
return MOZ_GTK_SUCCESS;
}
@@ -702,7 +506,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* These widgets have no borders, since they are not containers. */
case MOZ_GTK_CHECKBUTTON_LABEL:
-@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrie
return metrics;
}
@@ -739,7 +543,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* cairo_t *cr argument has to be a system-cairo. */
gint
moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
-@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widg
GetWidget(MOZ_GTK_BUTTON),
direction);
break;
@@ -754,7 +558,7 @@ index 4c562b380095..ee2b8a04f63f 100644
case MOZ_GTK_CHECKBUTTON:
case MOZ_GTK_RADIOBUTTON:
return moz_gtk_toggle_paint(cr, rect, state,
-@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widg
case MOZ_GTK_INFO_BAR:
return moz_gtk_info_bar_paint(cr, rect, state);
break;
@@ -765,10 +569,9 @@ index 4c562b380095..ee2b8a04f63f 100644
default:
g_warning("Unknown widget type: %d", widget);
}
-diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
-index 42dbf8287499..c0a7eba5006a 100644
---- a/widget/gtk/gtkdrawing.h
-+++ b/widget/gtk/gtkdrawing.h
+diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
+--- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -799,7 +602,7 @@ index 42dbf8287499..c0a7eba5006a 100644
MOZ_GTK_WIDGET_NODE_COUNT
} WidgetNodeType;
-@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(g
*/
gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
@@ -832,10 +635,9 @@ index 42dbf8287499..c0a7eba5006a 100644
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
-index 7285b7f001ac..6e554c7f628e 100644
---- a/widget/gtk/mozgtk/mozgtk.c
-+++ b/widget/gtk/mozgtk/mozgtk.c
+diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
++++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -864,11 +666,10 @@ index 7285b7f001ac..6e554c7f628e 100644
#endif
#ifdef GTK2_SYMBOLS
-diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
-index e02bf10fe87f..a5950ac35799 100644
---- a/widget/gtk/nsLookAndFeel.cpp
-+++ b/widget/gtk/nsLookAndFeel.cpp
-@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
break;
@@ -932,10 +733,9 @@ index e02bf10fe87f..a5950ac35799 100644
}
// virtual
-diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
-index 177d069f6567..6e14236e604a 100644
---- a/widget/gtk/nsLookAndFeel.h
-+++ b/widget/gtk/nsLookAndFeel.h
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -956,10 +756,9 @@ index 177d069f6567..6e14236e604a 100644
bool mInitialized;
void EnsureInit();
-diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
-index 211790096a3e..6ed35b97a0d7 100644
---- a/widget/gtk/nsNativeThemeGTK.cpp
-+++ b/widget/gtk/nsNativeThemeGTK.cpp
+diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -968,7 +767,7 @@ index 211790096a3e..6ed35b97a0d7 100644
#include "mozilla/EventStates.h"
#include "mozilla/Services.h"
-@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u
case NS_THEME_GTK_INFO_BAR:
aGtkWidgetType = MOZ_GTK_INFO_BAR;
break;
@@ -993,7 +792,7 @@ index 211790096a3e..6ed35b97a0d7 100644
default:
return false;
}
-@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
case NS_THEME_MENULIST:
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_TREEHEADERCELL:
@@ -1004,7 +803,7 @@ index 211790096a3e..6ed35b97a0d7 100644
{
if (aWidgetType == NS_THEME_MENULIST) {
// Include the arrow size.
-@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(ns
case NS_THEME_DIALOG:
#if (MOZ_WIDGET_GTK == 3)
case NS_THEME_GTK_INFO_BAR:
@@ -1026,7 +825,7 @@ index 211790096a3e..6ed35b97a0d7 100644
case NS_THEME_MENULIST_BUTTON:
if (aFrame && aFrame->GetWritingMode().IsVertical()) {
return false;
-@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(
#else
return eTransparent;
#endif
@@ -1040,10 +839,9 @@ index 211790096a3e..6ed35b97a0d7 100644
}
return eUnknownTransparency;
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
-index 37b6aae4c3d0..f0c3343f20ae 100644
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
+diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
+--- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1061,7 +859,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
using namespace mozilla;
using namespace mozilla::gfx;
using namespace mozilla::widget;
-@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+@@ -186,6 +189,8 @@ static gboolean expose_event_cb
#else
static gboolean expose_event_cb (GtkWidget *widget,
cairo_t *rect);
@@ -1070,7 +868,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif
static gboolean configure_event_cb (GtkWidget *widget,
GdkEventConfigure *event);
-@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+@@ -231,7 +236,6 @@ static void screen_composited_change
gpointer user_data);
static void widget_composited_changed_cb (GtkWidget* widget,
gpointer user_data);
@@ -1078,7 +876,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#if (MOZ_WIDGET_GTK == 3)
static void scale_changed_cb (GtkWidget* widget,
GParamSpec* aPSpec,
-@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+@@ -440,6 +444,7 @@ nsWindow::nsWindow()
mContainer = nullptr;
mGdkWindow = nullptr;
@@ -1086,7 +884,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
mShell = nullptr;
mCompositorWidgetDelegate = nullptr;
mHasMappedToplevel = false;
-@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+@@ -481,6 +486,9 @@ nsWindow::nsWindow()
mLastScrollEventTime = GDK_CURRENT_TIME;
#endif
mPendingConfigures = 0;
@@ -1096,7 +894,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
nsWindow::~nsWindow()
-@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+@@ -1479,8 +1487,8 @@ LayoutDeviceIntRect
nsWindow::GetScreenBounds()
{
LayoutDeviceIntRect rect;
@@ -1107,7 +905,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint x, y;
gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
rect.MoveTo(GdkPointToDevicePixels({ x, y }));
-@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+@@ -1606,6 +1614,10 @@ nsWindow::SetCursor(nsCursor aCursor)
return;
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
@@ -1118,7 +916,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
}
}
-@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+@@ -1662,6 +1674,10 @@ nsWindow::SetCursor(imgIContainer* aCurs
if (cursor) {
if (mContainer) {
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
@@ -1129,7 +927,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
rv = NS_OK;
}
#if (MOZ_WIDGET_GTK == 3)
-@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+@@ -2176,6 +2192,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
return TRUE;
}
@@ -1142,7 +940,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// If this widget uses OMTC...
if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
-@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+@@ -2586,6 +2608,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMo
}
}
#endif /* MOZ_X11 */
@@ -1196,7 +994,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
-@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+@@ -2756,6 +2825,20 @@ nsWindow::OnButtonPressEvent(GdkEventBut
if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
return;
@@ -1217,7 +1015,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gdouble pressure = 0;
gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
mLastMotionPressure = pressure;
-@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+@@ -3341,6 +3424,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *
#endif //ACCESSIBILITY
}
@@ -1226,7 +1024,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeState);
if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+@@ -3405,6 +3490,7 @@ nsWindow::OnCompositedChanged()
presShell->ThemeChanged();
}
}
@@ -1234,7 +1032,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
void
-@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3593,7 +3679,8 @@ nsWindow::Create(nsIWidget* aParent,
GtkWindow *topLevelParent = nullptr;
nsWindow *parentnsWindow = nullptr;
GtkWidget *eventWidget = nullptr;
@@ -1244,7 +1042,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (aParent) {
parentnsWindow = static_cast<nsWindow*>(aParent);
-@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3640,29 +3727,47 @@ nsWindow::Create(nsIWidget* aParent,
GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
mShell = gtk_window_new(type);
@@ -1303,7 +1101,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
// We only move a general managed toplevel window if someone has
-@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3756,24 +3861,56 @@ nsWindow::Create(nsIWidget* aParent,
mContainer = MOZ_CONTAINER(container);
#if (MOZ_WIDGET_GTK == 3)
@@ -1321,6 +1119,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
- gtk_widget_set_has_window(container, FALSE);
- // Prevent GtkWindow from painting a background to flicker.
- gtk_widget_set_app_paintable(mShell, TRUE);
+- }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
+ /* There are tree possible situations here:
+ *
+ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
@@ -1349,9 +1150,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
+
+ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+ drawToContainer = gtk_style_context_has_class(style, "csd");
- }
-- // Set up event widget
-- eventWidget = shellHasCSD ? container : mShell;
++ }
+#endif
+ drawWidget = (drawToContainer) ? container : mShell;
+ // When we draw decorations on our own we need to handle resize events
@@ -1376,7 +1175,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_container_add(GTK_CONTAINER(mShell), container);
gtk_widget_realize(container);
-@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3783,7 +3920,7 @@ nsWindow::Create(nsIWidget* aParent,
gtk_widget_grab_focus(container);
// the drawing window
@@ -1385,7 +1184,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWindowType == eWindowType_popup) {
// gdk does not automatically set the cursor for "temporary"
-@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3856,6 +3993,11 @@ nsWindow::Create(nsIWidget* aParent,
// label the drawing window with this object so we can find our way home
g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
@@ -1397,7 +1196,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mContainer)
g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
-@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3893,6 +4035,10 @@ nsWindow::Create(nsIWidget* aParent,
g_signal_connect_after(default_settings,
"notify::gtk-font-name",
G_CALLBACK(theme_changed_cb), this);
@@ -1408,7 +1207,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
if (mContainer) {
-@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3943,7 +4089,7 @@ nsWindow::Create(nsIWidget* aParent,
G_CALLBACK(drag_data_received_event_cb), nullptr);
GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
@@ -1417,7 +1216,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
// Visibility events are sent to the owning widget of the relevant
// window but do not propagate to parent widgets so connect on
-@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3973,7 +4119,6 @@ nsWindow::Create(nsIWidget* aParent,
// Don't let GTK mess with the shapes of our GdkWindows
GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
#endif
@@ -1425,7 +1224,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// These events are sent to the owning widget of the relevant window
// and propagate up to the first widget that handles the events, so we
// need only connect on mShell, if it exists, to catch events on its
-@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+@@ -4110,6 +4255,12 @@ nsWindow::NativeResize()
size.width, size.height));
if (mIsTopLevel) {
@@ -1438,7 +1237,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
else if (mContainer) {
-@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+@@ -4166,6 +4317,11 @@ nsWindow::NativeMoveResize()
if (mIsTopLevel) {
// x and y give the position of the window manager frame top-left.
gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
@@ -1450,7 +1249,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// This sets the client window size.
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
-@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+@@ -5524,6 +5680,33 @@ expose_event_cb(GtkWidget *widget, cairo
return FALSE;
}
@@ -1484,7 +1283,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif //MOZ_WIDGET_GTK == 2
static gboolean
-@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+@@ -6576,6 +6759,28 @@ nsWindow::ClearCachedResources()
}
}
@@ -1513,7 +1312,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint
nsWindow::GdkScaleFactor()
{
-@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+@@ -6846,6 +7051,157 @@ nsWindow::SynthesizeNativeTouchPoint(uin
}
#endif
@@ -1671,10 +1470,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
-index f7c07d57491b..d9a07316a52c 100644
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
+diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
+--- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1764,3 +1562,183 @@ index f7c07d57491b..d9a07316a52c 100644
};
#endif /* __nsWindow_h__ */
+diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType a
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
+--- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
commit b58833c2c841294c7300f32d7ac6a5447dedfab2
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:57:51 2017 +0200
Removed unused sources
diff --git a/sources b/sources
index c3e37bf..43ea395 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,2 @@
-SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
-SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit cd2371798ab1703676aec1a74a41ca64335af050
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:42:56 2017 +0200
Updated to 57.0 Beta 6
diff --git a/.gitignore b/.gitignore
index 5394cf0..3f1c795 100644
--- a/.gitignore
+++ b/.gitignore
@@ -251,3 +251,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-56.0-20170927.tar.xz
/firefox-57.0b5.source.tar.xz
/firefox-langpacks-57.0b5-20171005.tar.xz
+/firefox-57.0b6.source.tar.xz
+/firefox-langpacks-57.0b6-20171009.tar.xz
diff --git a/firefox.spec b/firefox.spec
index ecd2015..c103013 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b5
+%define pre_version b6
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.1%{?pre_tag}%{?dist}
+Release: 0.2%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -855,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
+- Updated to 57.0 Beta 6
+
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
- Added patch for mozbz#1399611 - CSD emulation
diff --git a/sources b/sources
index cb71924..c3e37bf 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,4 @@
SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
+SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
+SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit 1ae49b3a70a6a75888417b1d9a7a4699efeb5a98
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 21:00:47 2017 +0200
Added patch for mozbz#1399611 - CSD emulation
diff --git a/firefox.spec b/firefox.spec
index 5d86c4b..ecd2015 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -156,6 +156,7 @@ Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
Patch415: mozilla-1405267.patch
+Patch416: mozilla-1399611.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -313,8 +314,6 @@ This package contains results of tests executed during build.
%patch3 -p1 -b .arm
-# For branding specific patches.
-
# Fedora patches
%patch215 -p1 -b .addons
%patch219 -p2 -b .rhbz-1173156
@@ -337,6 +336,7 @@ This package contains results of tests executed during build.
%patch413 -p1 -b .1353817
%patch415 -p1 -b .1405267
+%patch416 -p1 -b .1399611
# Debian extension patch
%patch500 -p1 -b .440908
@@ -857,6 +857,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
+- Added patch for mozbz#1399611 - CSD emulation
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
new file mode 100644
index 0000000..b30ae02
--- /dev/null
+++ b/mozilla-1399611.patch
@@ -0,0 +1,1766 @@
+diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+index de61ac442b74..be15873ee2c4 100644
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+ pref("browser.tabs.loadBookmarksInBackground", false);
+ pref("browser.tabs.loadBookmarksInTabs", false);
+ pref("browser.tabs.tabClipWidth", 140);
+-#ifdef UNIX_BUT_NOT_MAC
+-pref("browser.tabs.drawInTitlebar", false);
+-#else
+ pref("browser.tabs.drawInTitlebar", true);
+-#endif
+
+ // Offer additional drag space to the user. The drag space
+ // will only be shown if browser.tabs.drawInTitlebar is true.
+diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
+index d9509029bbf1..b56f81c0c138 100644
+--- a/browser/base/content/browser-tabsintitlebar.js
++++ b/browser/base/content/browser-tabsintitlebar.js
+@@ -14,6 +14,11 @@ var TabsInTitlebar = {
+ this._readPref();
+ Services.prefs.addObserver(this._prefName, this);
+
++ // Always disable on unsupported GTK versions.
++ if (AppConstants.MOZ_WIDGET_TOOLKIT == "gtk3") {
++ this.allowedBy("gtk", window.matchMedia("(-moz-gtk-csd-available)"));
++ }
++
+ // We need to update the appearance of the titlebar when the menu changes
+ // from the active to the inactive state. We can't, however, rely on
+ // DOMMenuBarInactive, because the menu fires this event and then removes
+diff --git a/browser/base/moz.build b/browser/base/moz.build
+index a2bd4bcb4eca..f14553e4ba7f 100644
+--- a/browser/base/moz.build
++++ b/browser/base/moz.build
+@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
+ DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
+index 65a3f0cca7b1..7bb448da620b 100644
+--- a/browser/themes/linux/browser.css
++++ b/browser/themes/linux/browser.css
+@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
+ color: -moz-menubartext;
+ }
+
++/* Support dragging the window using the toolbar when drawing our own
++ * decorations, or where the GTK theme allows. */
+ #toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
+-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
++#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
++#main-window[tabsintitlebar] #toolbar-menubar:not([autohide="true"]),
++#main-window[tabsintitlebar] #TabsToolbar {
+ -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
+ }
+
+@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+ .restore-tabs-button:hover:active:not([disabled="true"]) {
+ padding: 3px;
+ }
++
++@media not all and (-moz-gtk-csd-available) {
++ #main-window > #titlebar {
++ /* We need to hide the titlebar explicitly on versions of GTK without CSD. */
++ display: none;
++ }
++}
++
++/* Titlebar/CSD */
++@media (-moz-gtk-csd-available) {
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ min-height: calc(var(--tab-min-height) + 12px);
++ }
++
++ #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
++ visibility: hidden;
++ }
++ #main-window[tabsintitlebar] #titlebar-content:-moz-lwtheme {
++ visibility: visible;
++ }
++
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar;
++ }
++ #main-window[tabsintitlebar][sizemode="maximized"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar-maximized;
++ }
++
++ /* The button box must appear on top of the navigator-toolbox in order for
++ * click and hover mouse events to work properly for the button in the restored
++ * window state. Otherwise, elements in the navigator-toolbox, like the menubar,
++ * can swallow those events.
++ */
++ #titlebar-buttonbox {
++ z-index: 1;
++ }
++
++ /* titlebar command buttons */
++ /* Use full scale icons here as the Gtk+ does. */
++ @media (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ list-style-image: url("moz-icon://stock/window-minimize-symbolic");
++ -moz-appearance: -moz-window-button-minimize;
++ }
++ }
++ @media not all and (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-maximize-symbolic");
++ -moz-appearance: -moz-window-button-maximize;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-restore-symbolic");
++ -moz-appearance: -moz-window-button-restore;
++ }
++ }
++ @media not all and (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ display: none;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ list-style-image: url("moz-icon://stock/window-close-symbolic");
++ -moz-appearance: -moz-window-button-close;
++ }
++ }
++ @media not all and (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ display: none;
++ }
++ }
++}
+diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
+index 5d5ec3d405c9..bb2f652c41e0 100644
+--- a/dom/base/nsGkAtomList.h
++++ b/dom/base/nsGkAtomList.h
+@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
+ GK_ATOM(menubar_drag, "menubar-drag")
+ GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
+ GK_ATOM(physical_home_button, "physical-home-button")
++GK_ATOM(gtk_csd_available, "gtk-csd-available")
++GK_ATOM(gtk_csd_minimize_button, "gtk-csd-minimize-button")
++GK_ATOM(gtk_csd_maximize_button, "gtk-csd-maximize-button")
++GK_ATOM(gtk_csd_close_button, "gtk-csd-close-button")
+
+ // windows theme selector metrics
+ GK_ATOM(windows_classic, "windows-classic")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+ GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
+ GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
+ GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
++GK_ATOM(_moz_gtk_csd_available, "-moz-gtk-csd-available")
++GK_ATOM(_moz_gtk_csd_minimize_button, "-moz-gtk-csd-minimize-button")
++GK_ATOM(_moz_gtk_csd_maximize_button, "-moz-gtk-csd-maximize-button")
++GK_ATOM(_moz_gtk_csd_close_button, "-moz-gtk-csd-close-button")
+
+ // application commands
+ GK_ATOM(Back, "Back")
+diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
+index d0ced405095d..1cd2361a0026 100644
+--- a/gfx/src/nsThemeConstants.h
++++ b/gfx/src/nsThemeConstants.h
+@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
+ NS_THEME_MAC_SOURCE_LIST,
+ NS_THEME_MAC_SOURCE_LIST_SELECTION,
+ NS_THEME_MAC_ACTIVE_SOURCE_LIST_SELECTION,
++ NS_THEME_GTK_WINDOW_DECORATION,
+
+ ThemeWidgetType_COUNT
+ };
+diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
+index cbfb4d0f60aa..263372ca868e 100644
+--- a/layout/style/nsCSSRuleProcessor.cpp
++++ b/layout/style/nsCSSRuleProcessor.cpp
+@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
+ sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
+ }
+
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_available);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMinimizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_minimize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMaximizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_maximize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDCloseButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_close_button);
++ }
++
+ #ifdef XP_WIN
+ if (NS_SUCCEEDED(
+ LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
+diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
+index 7cf6a08e46c1..bf955d759e8b 100644
+--- a/layout/style/nsMediaFeatures.cpp
++++ b/layout/style/nsMediaFeatures.cpp
+@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
+ GetSystemMetric
+ },
+
++ {
++ &nsGkAtoms::_moz_gtk_csd_available,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_available },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_minimize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_minimize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_maximize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_maximize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_close_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_close_button },
++ GetSystemMetric
++ },
++
+ // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
+ // Internal because it is really only useful in the user agent anyway
+ // and therefore not worth standardizing.
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index 0b77f1759021..b8dc9aeebfd8 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+ pref("gfx.xrender.enabled",false);
+ pref("widget.chrome.allow-gtk-dark-theme", false);
+ pref("widget.content.allow-gtk-dark-theme", false);
++pref("widget.allow-client-side-decoration", false);
+ #endif
+ #endif
+
+diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
+index 8b5dc9e25d7e..14fb0fe87e9d 100644
+--- a/toolkit/modules/moz.build
++++ b/toolkit/modules/moz.build
+@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
+ ]
+
+ DEFINES['INSTALL_COMPACT_THEMES'] = 1
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
+index ff5da8017621..d31b411a9b1a 100644
+--- a/widget/LookAndFeel.h
++++ b/widget/LookAndFeel.h
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
+diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
+index 39b7893df3bd..4c9e8523b5bf 100644
+--- a/widget/gtk/WidgetStyleCache.cpp
++++ b/widget/gtk/WidgetStyleCache.cpp
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
+index 4c562b380095..ee2b8a04f63f 100644
+--- a/widget/gtk/gtk3drawing.cpp
++++ b/widget/gtk/gtk3drawing.cpp
+@@ -17,6 +17,7 @@
+ #include "WidgetStyleCache.h"
+
+ #include <math.h>
++#include <dlfcn.h>
+
+ static gboolean checkbox_check_state;
+ static gboolean notebook_has_tab_gap;
+@@ -39,9 +40,25 @@ static gint
+ moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state, GtkTextDirection direction);
+
++static void
++moz_gtk_add_style_margin(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_border(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_padding(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle);
+
++
+ // GetStateFlagsFromGtkWidgetState() can be safely used for the specific
+ // GtkWidgets that set both prelight and active flags. For other widgets,
+ // either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
++void
++moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ MOZ_ASSERT(gtk_check_version(3, 20, 0) == nullptr,
++ "Window decorations are only supported on GTK 3.20+.");
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW);
++
++ *top = *right = *bottom = *left = 0;
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ GtkBorder windowMargin;
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &windowMargin);
++
++ style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION);
++
++ // Available on GTK 3.20+.
++ static auto sGtkRenderBackgroundGetClip =
++ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*))
++ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip");
++
++ GdkRectangle shadowClip;
++ sGtkRenderBackgroundGetClip(style, 0, 0, 0, 0, &shadowClip);
++
++ // Transfer returned inset rectangle to GtkBorder
++ GtkBorder shadowBorder = {
++ static_cast<gint16>(-shadowClip.x), // left
++ static_cast<gint16>(shadowClip.width + shadowClip.x), // right
++ static_cast<gint16>(-shadowClip.y), // top
++ static_cast<gint16>(shadowClip.height + shadowClip.y), // bottom
++ };
++
++ *left += MAX(windowMargin.left, shadowBorder.left);
++ *right += MAX(windowMargin.right, shadowBorder.right);
++ *top += MAX(windowMargin.top, shadowBorder.top);
++ *bottom += MAX(windowMargin.bottom, shadowBorder.bottom);
++}
++
+ static gint
+ moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkTextDirection direction)
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ static gint
++moz_gtk_header_bar_button_paint(cairo_t *cr, GdkRectangle* rect,
++ GtkWidgetState* state,
++ GtkReliefStyle relief, GtkWidget* widget,
++ GtkTextDirection direction)
++{
++ GtkBorder margin;
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &margin);
++
++ rect->x += margin.left;
++ rect->y += margin.top;
++ rect->width -= margin.left + margin.right;
++ rect->height -= margin.top + margin.bottom;
++
++ return moz_gtk_button_paint(cr, rect, state, relief, widget, direction);
++}
++
++static gint
+ moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+ gboolean selected, gboolean inconsistent,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+ return MOZ_GTK_SUCCESS;
+ }
+
++static gint
++moz_gtk_header_bar_paint(WidgetNodeType widgetType,
++ cairo_t *cr, GdkRectangle* rect, GtkWidgetState* state)
++{
++ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
++ GtkStyleContext *style;
++
++ style = GetStyleContext(widgetType, GTK_TEXT_DIR_LTR,
++ state_flags);
++ InsetByMargin(rect, style);
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width,
++ rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++
++ return MOZ_GTK_SUCCESS;
++}
++
++void
++moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ static GtkWidgetState state;
++ moz_gtk_header_bar_paint(MOZ_GTK_HEADER_BAR, cr, rect, &state);
++}
++
++void
++moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ *left = *top = *right = *bottom = 0;
++ moz_gtk_add_border_padding(GetStyleContext(MOZ_GTK_HEADER_BAR),
++ left, top, right, bottom);
++}
++
+ static void
+ moz_gtk_add_style_margin(GtkStyleContext* style,
+ gint* left, gint* top, gint* right, gint* bottom)
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom)
++{
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++}
++
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle)
+ {
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ // XXX: Subtract 1 pixel from the padding to account for the default
+ // padding in forms.css. See bug 1187385.
+ *left = *top = *right = *bottom = -1;
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ *left = *top = *right = *bottom =
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
+-
+ style = GetStyleContext(MOZ_GTK_TREE_HEADER_CELL);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
+ style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+- moz_gtk_add_style_border(style,
+- left, top, right, bottom);
+- moz_gtk_add_style_padding(style,
+- left, top, right, bottom);
++ moz_gtk_add_border_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+
+ return MOZ_GTK_SUCCESS;
+ }
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_margin_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
+
+ /* These widgets have no borders, since they are not containers. */
+ case MOZ_GTK_CHECKBUTTON_LABEL:
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+ return metrics;
+ }
+
++void
++moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ gint top, right, bottom, left;
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++
++ cairo_save(cr);
++ cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
++ cairo_rectangle(cr, rect->x, rect->y, left, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x+rect->width-right, rect->y, right, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->y, rect->width, top);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->height-bottom, rect->width, bottom);
++ cairo_fill(cr);
++ cairo_restore(cr);
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION,
++ GTK_TEXT_DIR_NONE);
++ rect->x += left;
++ rect->y += top;
++ rect->width -= left + right;
++ rect->height -= top + bottom;
++
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++}
++
++
+ /* cairo_t *cr argument has to be a system-cairo. */
+ gint
+ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ GetWidget(MOZ_GTK_BUTTON),
+ direction);
+ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return moz_gtk_header_bar_button_paint(cr, rect, state,
++ (GtkReliefStyle) flags,
++ GetWidget(widget),
++ direction);
++ break;
+ case MOZ_GTK_CHECKBUTTON:
+ case MOZ_GTK_RADIOBUTTON:
+ return moz_gtk_toggle_paint(cr, rect, state,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ case MOZ_GTK_INFO_BAR:
+ return moz_gtk_info_bar_paint(cr, rect, state);
+ break;
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return moz_gtk_header_bar_paint(widget, cr, rect, state);
++ break;
+ default:
+ g_warning("Unknown widget type: %d", widget);
+ }
+diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
+index 42dbf8287499..c0a7eba5006a 100644
+--- a/widget/gtk/gtkdrawing.h
++++ b/widget/gtk/gtkdrawing.h
+@@ -268,8 +268,14 @@ typedef enum {
+ MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
+ /* Paints the background of a window, dialog or page. */
+ MOZ_GTK_WINDOW,
++ /* Used only as a container for MOZ_GTK_HEADER_BAR_MAXIMIZED. */
++ MOZ_GTK_WINDOW_MAXIMIZED,
+ /* Window container for all widgets */
+ MOZ_GTK_WINDOW_CONTAINER,
++ /* Window with the 'csd' style class. */
++ MOZ_GTK_WINDOW_CSD,
++ /* Client-side window decoration node. Available on GTK 3.20+. */
++ MOZ_GTK_WINDOW_DECORATION,
+ /* Paints a GtkInfoBar, for notifications. */
+ MOZ_GTK_INFO_BAR,
+ /* Used for widget tree construction. */
+@@ -290,6 +296,14 @@ typedef enum {
+ MOZ_GTK_COMBOBOX_ENTRY_ARROW,
+ /* Used for scrolled window shell. */
+ MOZ_GTK_SCROLLED_WINDOW,
++ /* Paints a GtkHeaderBar */
++ MOZ_GTK_HEADER_BAR,
++ /* Paints a GtkHeaderBar in maximized state */
++ MOZ_GTK_HEADER_BAR_MAXIMIZED,
++ /* Paints a GtkHeaderBar title buttons */
++ MOZ_GTK_HEADER_BAR_BUTTON_CLOSE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE,
+
+ MOZ_GTK_WIDGET_NODE_COUNT
+ } WidgetNodeType;
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+ */
+ gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
+
++#if (MOZ_WIDGET_GTK == 3)
++/**
++ * Gets the margins to be used for window decorations, typically the extra space
++ * required to draw a drop shadow (obtained from gtk_render_background_get_clip).
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window decorations, typically a shadow.
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect);
++
++/**
++ * Gets the border of window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect);
++
++#endif
++
+ /**
+ * Get the YTHICKNESS of a tab (notebook extension).
+ */
+diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
+index 7285b7f001ac..6e554c7f628e 100644
+--- a/widget/gtk/mozgtk/mozgtk.c
++++ b/widget/gtk/mozgtk/mozgtk.c
+@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
+ STUB(gtk_style_properties_lookup_property)
+ STUB(gtk_tree_view_column_get_button)
+ STUB(gtk_widget_get_preferred_size)
++STUB(gtk_widget_get_preferred_width)
++STUB(gtk_widget_get_preferred_height)
+ STUB(gtk_widget_get_state_flags)
+ STUB(gtk_widget_get_style_context)
+ STUB(gtk_widget_path_append_type)
+@@ -589,6 +591,10 @@ STUB(gtk_widget_path_iter_add_class)
+ STUB(gtk_widget_path_get_object_type)
+ STUB(gtk_widget_path_new)
+ STUB(gtk_widget_path_unref)
++STUB(gtk_widget_set_margin_left)
++STUB(gtk_widget_set_margin_right)
++STUB(gtk_widget_set_margin_top)
++STUB(gtk_widget_set_margin_bottom)
+ STUB(gtk_widget_set_visual)
+ STUB(gtk_app_chooser_dialog_new_for_content_type)
+ STUB(gtk_app_chooser_get_type)
+@@ -601,6 +607,7 @@ STUB(gtk_color_chooser_get_type)
+ STUB(gtk_color_chooser_set_rgba)
+ STUB(gtk_color_chooser_get_rgba)
+ STUB(gtk_color_chooser_set_use_alpha)
++STUB(gtk_window_get_size)
+ #endif
+
+ #ifdef GTK2_SYMBOLS
+diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
+index e02bf10fe87f..a5950ac35799 100644
+--- a/widget/gtk/nsLookAndFeel.cpp
++++ b/widget/gtk/nsLookAndFeel.cpp
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+ case eIntID_ContextMenuOffsetHorizontal:
+ aResult = 2;
+ break;
++ case eIntID_GTKCSDAvailable:
++ EnsureInit();
++ aResult = sCSDAvailable;
++ break;
++ case eIntID_GTKCSDMaximizeButton:
++ EnsureInit();
++ aResult = sCSDMaximizeButton;
++ break;
++ case eIntID_GTKCSDMinimizeButton:
++ EnsureInit();
++ aResult = sCSDMinimizeButton;
++ break;
++ case eIntID_GTKCSDCloseButton:
++ EnsureInit();
++ aResult = sCSDCloseButton;
++ break;
+ default:
+ aResult = 0;
+ res = NS_ERROR_FAILURE;
+@@ -1048,6 +1064,40 @@ nsLookAndFeel::EnsureInit()
+
+ gtk_widget_destroy(window);
+ g_object_unref(labelWidget);
++
++ // Require GTK 3.20 for client-side decoration support.
++ // 3.20 exposes gtk_render_background_get_clip, which is required for
++ // calculating shadow metrics for decorated windows.
++ sCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
++ if (sCSDAvailable) {
++ sCSDAvailable =
++ mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
++ false);
++ }
++
++ const gchar* decorationLayout = nullptr;
++ if (gtk_check_version(3, 12, 0) == nullptr) {
++ static auto sGtkHeaderBarGetDecorationLayoutPtr =
++ (const gchar* (*)(GtkWidget*))
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
++
++ GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
++ decorationLayout = sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
++ if (!decorationLayout) {
++ g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
++ nullptr);
++ }
++ }
++
++ if (decorationLayout) {
++ sCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
++ sCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
++ sCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
++ } else {
++ sCSDCloseButton = true;
++ sCSDMaximizeButton = true;
++ sCSDMinimizeButton = true;
++ }
+ }
+
+ // virtual
+diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
+index 177d069f6567..6e14236e604a 100644
+--- a/widget/gtk/nsLookAndFeel.h
++++ b/widget/gtk/nsLookAndFeel.h
+@@ -32,6 +32,8 @@ public:
+ virtual char16_t GetPasswordCharacterImpl();
+ virtual bool GetEchoPasswordImpl();
+
++ bool IsCSDAvailable() const { return sCSDAvailable; }
++
+ protected:
+
+ // Cached fonts
+@@ -82,6 +84,10 @@ protected:
+ char16_t sInvisibleCharacter;
+ float sCaretRatio;
+ bool sMenuSupportsDrag;
++ bool sCSDAvailable;
++ bool sCSDMaximizeButton;
++ bool sCSDMinimizeButton;
++ bool sCSDCloseButton;
+ bool mInitialized;
+
+ void EnsureInit();
+diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
+index 211790096a3e..6ed35b97a0d7 100644
+--- a/widget/gtk/nsNativeThemeGTK.cpp
++++ b/widget/gtk/nsNativeThemeGTK.cpp
+@@ -23,6 +23,7 @@
+ #include "nsIDOMHTMLInputElement.h"
+ #include "nsGkAtoms.h"
+ #include "nsAttrValueInlines.h"
++#include "nsWindow.h"
+
+ #include "mozilla/EventStates.h"
+ #include "mozilla/Services.h"
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+ case NS_THEME_GTK_INFO_BAR:
+ aGtkWidgetType = MOZ_GTK_INFO_BAR;
+ break;
++ case NS_THEME_WINDOW_TITLEBAR:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR;
++ break;
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_MAXIMIZED;
++ break;
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_CLOSE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
+ default:
+ return false;
+ }
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+ case NS_THEME_MENULIST:
+ case NS_THEME_TOOLBARBUTTON:
+ case NS_THEME_TREEHEADERCELL:
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
+ {
+ if (aWidgetType == NS_THEME_MENULIST) {
+ // Include the arrow size.
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+ case NS_THEME_DIALOG:
+ #if (MOZ_WIDGET_GTK == 3)
+ case NS_THEME_GTK_INFO_BAR:
++ case NS_THEME_GTK_WINDOW_DECORATION:
+ #endif
+ return !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
+
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ case NS_THEME_WINDOW_TITLEBAR:
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ // GtkHeaderBar is available on GTK 3.10+, which is used for styling
++ // title bars and title buttons.
++ return gtk_check_version(3, 10, 0) == nullptr &&
++ !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
++
+ case NS_THEME_MENULIST_BUTTON:
+ if (aFrame && aFrame->GetWritingMode().IsVertical()) {
+ return false;
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+ #else
+ return eTransparent;
+ #endif
++ case NS_THEME_GTK_WINDOW_DECORATION:
++ {
++ nsWindow* window = static_cast<nsWindow*>(aFrame->GetNearestWidget());
++ if (window)
++ return window->IsComposited() ? eTransparent : eOpaque;
++ return eOpaque;
++ }
+ }
+
+ return eUnknownTransparency;
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+index 37b6aae4c3d0..f0c3343f20ae 100644
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -85,6 +85,7 @@
+ #include "nsIPropertyBag2.h"
+ #include "GLContext.h"
+ #include "gfx2DGlue.h"
++#include "nsLookAndFeel.h"
+
+ #ifdef ACCESSIBILITY
+ #include "mozilla/a11y/Accessible.h"
+@@ -139,6 +140,8 @@ using namespace mozilla::widget;
+
+ #include "mozilla/layers/APZCTreeManager.h"
+
++#include "gtkdrawing.h"
++
+ using namespace mozilla;
+ using namespace mozilla::gfx;
+ using namespace mozilla::widget;
+@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+ #else
+ static gboolean expose_event_cb (GtkWidget *widget,
+ cairo_t *rect);
++static gboolean expose_event_decoration_draw_cb (GtkWidget *widget,
++ cairo_t *cr);
+ #endif
+ static gboolean configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event);
+@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+ gpointer user_data);
+ static void widget_composited_changed_cb (GtkWidget* widget,
+ gpointer user_data);
+-
+ #if (MOZ_WIDGET_GTK == 3)
+ static void scale_changed_cb (GtkWidget* widget,
+ GParamSpec* aPSpec,
+@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+
+ mContainer = nullptr;
+ mGdkWindow = nullptr;
++ mIsCSDEnabled = false;
+ mShell = nullptr;
+ mCompositorWidgetDelegate = nullptr;
+ mHasMappedToplevel = false;
+@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+ mLastScrollEventTime = GDK_CURRENT_TIME;
+ #endif
+ mPendingConfigures = 0;
++ mDrawWindowDecoration = false;
++ mDecorationSize = {0,0,0,0};
++ mCSDSupportLevel = CSD_SUPPORT_UNKNOWN;
+ }
+
+ nsWindow::~nsWindow()
+@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+ nsWindow::GetScreenBounds()
+ {
+ LayoutDeviceIntRect rect;
+- if (mIsTopLevel && mContainer) {
+- // use the point including window decorations
++ if (mIsTopLevel && mContainer && !IsClientDecorated()) {
++ // use the point including default Gtk+ window decorations
+ gint x, y;
+ gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
+ rect.MoveTo(GdkPointToDevicePixels({ x, y }));
+@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+ return;
+
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ newCursor);
++ }
+ }
+ }
+ }
+@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+ if (cursor) {
+ if (mContainer) {
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ cursor);
++ }
+ rv = NS_OK;
+ }
+ #if (MOZ_WIDGET_GTK == 3)
+@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+ return TRUE;
+ }
+
++ // Clip upper part of the mContainer to get visible rounded corners
++ // of GtkHeaderBar which is renderd to mShell.
++ if (mIsCSDEnabled) {
++ ApplyCSDClipping();
++ }
++
+ // If this widget uses OMTC...
+ if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
+ GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
+@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+ }
+ }
+ #endif /* MOZ_X11 */
++ // Client is decorated and we're getting the motion event for mShell
++ // window which draws the CSD decorations around mContainer.
++ if (IsClientDecorated()) {
++ if (aEvent->window == gtk_widget_get_window(mShell)) {
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ nsCursor cursor = eCursor_none;
++ switch (edge) {
++ case GDK_WINDOW_EDGE_NORTH:
++ cursor = eCursor_n_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_WEST:
++ cursor = eCursor_nw_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_EAST:
++ cursor = eCursor_ne_resize;
++ break;
++ case GDK_WINDOW_EDGE_WEST:
++ cursor = eCursor_w_resize;
++ break;
++ case GDK_WINDOW_EDGE_EAST:
++ cursor = eCursor_e_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH:
++ cursor = eCursor_s_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_WEST:
++ cursor = eCursor_sw_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_EAST:
++ cursor = eCursor_se_resize;
++ break;
++ }
++ SetCursor(cursor);
++ return;
++ }
++ }
++ // We're not on resize handle - check if we need to reset cursor back.
++ if (mCursor == eCursor_n_resize || mCursor == eCursor_nw_resize ||
++ mCursor == eCursor_ne_resize || mCursor == eCursor_w_resize ||
++ mCursor == eCursor_e_resize || mCursor == eCursor_s_resize ||
++ mCursor == eCursor_sw_resize || mCursor == eCursor_se_resize) {
++ SetCursor(eCursor_standard);
++ }
++ }
+
+ WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
+
+@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
+ return;
+
++ if (IsClientDecorated() && aEvent->window == gtk_widget_get_window(mShell)) {
++ // Check to see if the event is within our window's resize region
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ gdk_window_begin_resize_drag(gtk_widget_get_window(mShell),
++ edge, aEvent->button,
++ aEvent->x_root, aEvent->y_root,
++ aEvent->time);
++ return;
++ }
++ }
++
+ gdouble pressure = 0;
+ gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
+ mLastMotionPressure = pressure;
+@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+ #endif //ACCESSIBILITY
+ }
+
++ UpdateClientDecorations();
++
+ if (mWidgetListener) {
+ mWidgetListener->SizeModeChanged(mSizeState);
+ if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+ presShell->ThemeChanged();
+ }
+ }
++ UpdateClientDecorations();
+ }
+
+ void
+@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+ GtkWindow *topLevelParent = nullptr;
+ nsWindow *parentnsWindow = nullptr;
+ GtkWidget *eventWidget = nullptr;
+- bool shellHasCSD = false;
++ GtkWidget *drawWidget = nullptr;
++ bool drawToContainer = false;
+
+ if (aParent) {
+ parentnsWindow = static_cast<nsWindow*>(aParent);
+@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+ GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
+ mShell = gtk_window_new(type);
+
+- bool useAlphaVisual = (mWindowType == eWindowType_popup &&
+- aInitData->mSupportTranslucency);
++ bool useAlphaVisual = false;
++#if (MOZ_WIDGET_GTK == 3)
++ // When CSD is available we can emulate it for toplevel windows.
++ // Content is rendered to mContainer and transparent decorations to mShell.
++ if (GetCSDSupportLevel() != CSD_SUPPORT_NONE &&
++ mWindowType == eWindowType_toplevel) {
++ int32_t isCSDAvailable = false;
++ nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &isCSDAvailable);
++ if (NS_SUCCEEDED(rv)) {
++ mIsCSDEnabled = useAlphaVisual = isCSDAvailable;
++ }
++ } else
++#endif
++ if (mWindowType == eWindowType_popup) {
++ useAlphaVisual = aInitData->mSupportTranslucency;
++ }
+
+ // mozilla.widget.use-argb-visuals is a hidden pref defaulting to false
+ // to allow experimentation
+ if (Preferences::GetBool("mozilla.widget.use-argb-visuals", false))
+ useAlphaVisual = true;
+
++ // An ARGB visual is only useful if we are on a compositing
++ // window manager.
++ GdkScreen *screen = gtk_widget_get_screen(mShell);
++ if (useAlphaVisual && !gdk_screen_is_composited(screen)) {
++ useAlphaVisual = false;
++ }
++
+ // We need to select an ARGB visual here instead of in
+ // SetTransparencyMode() because it has to be done before the
+- // widget is realized. An ARGB visual is only useful if we
+- // are on a compositing window manager.
++ // widget is realized.
+ if (useAlphaVisual) {
+- GdkScreen *screen = gtk_widget_get_screen(mShell);
+- if (gdk_screen_is_composited(screen)) {
+ #if (MOZ_WIDGET_GTK == 2)
+- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
+- gtk_widget_set_colormap(mShell, colormap);
++ GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
++ gtk_widget_set_colormap(mShell, colormap);
+ #else
+- GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+- gtk_widget_set_visual(mShell, visual);
++ GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
++ gtk_widget_set_visual(mShell, visual);
+ #endif
+- }
+ }
+
+ // We only move a general managed toplevel window if someone has
+@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+ mContainer = MOZ_CONTAINER(container);
+
+ #if (MOZ_WIDGET_GTK == 3)
+- // "csd" style is set when widget is realized so we need to call
+- // it explicitly now.
+- gtk_widget_realize(mShell);
+-
+- // We can't draw directly to top-level window when client side
+- // decorations are enabled. We use container with GdkWindow instead.
+- GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+- shellHasCSD = gtk_style_context_has_class(style, "csd");
+-#endif
+- if (!shellHasCSD) {
+- // Use mShell's window for drawing and events.
+- gtk_widget_set_has_window(container, FALSE);
+- // Prevent GtkWindow from painting a background to flicker.
+- gtk_widget_set_app_paintable(mShell, TRUE);
++ /* There are tree possible situations here:
++ *
++ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
++ * is rendered to mShell window and we listen Gtk+ events on mShell.
++ * 2) We're running on Gtk+ > 3.20 and window decorations are drawn
++ * by default by Gtk+. Content is rendered to mContainer,
++ * we listen events on mContainer. mShell contains default Gtk+
++ * window decorations rendered by Gtk+.
++ * 3) We're running on Gtk+ > 3.20 and both window decorations and
++ * content is rendered by gecko. We emulate Gtk+ decoration rendering
++ * to mShell and we need to listen Gtk events on both mShell
++ * and mContainer.
++ */
++
++ // When client side decorations are enabled (rendered by us or by Gtk+)
++ // the decoration is rendered to mShell (toplevel) window and
++ // we draw our content to mContainer.
++ if (mIsCSDEnabled) {
++ drawToContainer = true;
++ } else {
++ // mIsCSDEnabled can be disabled by preference so look at actual
++ // toplevel window style to to detect active "csd" style.
++ // The "csd" style is set when widget is realized so we need to call
++ // it explicitly now.
++ gtk_widget_realize(mShell);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
++ drawToContainer = gtk_style_context_has_class(style, "csd");
+ }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
++#endif
++ drawWidget = (drawToContainer) ? container : mShell;
++ // When we draw decorations on our own we need to handle resize events
++ // because Gtk+ does not provide resizers for undecorated windows.
++ // The CSD on mShell borders act as resize handlers
++ // so we need to listen there.
++ eventWidget = (drawToContainer && !mIsCSDEnabled) ? container : mShell;
++
+ gtk_widget_add_events(eventWidget, kEvents);
++ if (eventWidget != drawWidget) {
++ // CSD is rendered by us (not by Gtk+) so we also need to listen
++ // at mShell window for events.
++ gtk_widget_add_events(drawWidget, kEvents);
++ }
++
++ // Prevent GtkWindow from painting a background to flicker.
++ gtk_widget_set_app_paintable(drawWidget, TRUE);
++
++ // gtk_container_add() realizes the child widget so we need to
++ // set it now.
++ gtk_widget_set_has_window(container, drawToContainer);
+
+ gtk_container_add(GTK_CONTAINER(mShell), container);
+ gtk_widget_realize(container);
+@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+ gtk_widget_grab_focus(container);
+
+ // the drawing window
+- mGdkWindow = gtk_widget_get_window(eventWidget);
++ mGdkWindow = gtk_widget_get_window(drawWidget);
+
+ if (mWindowType == eWindowType_popup) {
+ // gdk does not automatically set the cursor for "temporary"
+@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+
+ // label the drawing window with this object so we can find our way home
+ g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
++ if (mIsCSDEnabled) {
++ // label the CSD window with this object so we can find our way home
++ g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
++ "nsWindow", this);
++ }
+
+ if (mContainer)
+ g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
+@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+ g_signal_connect_after(default_settings,
+ "notify::gtk-font-name",
+ G_CALLBACK(theme_changed_cb), this);
++ if (mIsCSDEnabled) {
++ g_signal_connect(G_OBJECT(mShell), "draw",
++ G_CALLBACK(expose_event_decoration_draw_cb), nullptr);
++ }
+ }
+
+ if (mContainer) {
+@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+ G_CALLBACK(drag_data_received_event_cb), nullptr);
+
+ GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
+- !shellHasCSD ? mShell : nullptr };
++ !drawToContainer ? mShell : nullptr };
+ for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
+ // Visibility events are sent to the owning widget of the relevant
+ // window but do not propagate to parent widgets so connect on
+@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+ // Don't let GTK mess with the shapes of our GdkWindows
+ GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
+ #endif
+-
+ // These events are sent to the owning widget of the relevant window
+ // and propagate up to the first widget that handles the events, so we
+ // need only connect on mShell, if it exists, to catch events on its
+@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+ size.width, size.height));
+
+ if (mIsTopLevel) {
++ // When we draw decorations add extra space to draw shadows
++ // around the main window.
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+ else if (mContainer) {
+@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+ if (mIsTopLevel) {
+ // x and y give the position of the window manager frame top-left.
+ gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
++
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ // This sets the client window size.
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+
+ return FALSE;
+ }
++
++/* static */
++gboolean
++expose_event_decoration_draw_cb(GtkWidget *widget, cairo_t *cr)
++{
++ GdkWindow* gdkWindow = gtk_widget_get_window(widget);
++ if (gtk_cairo_should_draw_window(cr, gdkWindow)) {
++ RefPtr<nsWindow> window = get_window_for_gtk_widget(widget);
++ if (!window) {
++ NS_WARNING("Cannot get nsWindow from GtkWidget");
++ }
++ else if (window->IsClientDecorated()) {
++ cairo_save(cr);
++ gtk_cairo_transform_to_window(cr, widget, gdkWindow);
++
++ GdkRectangle rect = {0,0,0,0};
++ gtk_window_get_size(GTK_WINDOW(widget), &rect.width, &rect.height);
++ moz_gtk_window_decoration_paint(cr, &rect);
++
++ rect.height = 40;
++ moz_gtk_header_bar_paint(cr, &rect);
++ cairo_restore(cr);
++ }
++ }
++ return TRUE;
++}
++
+ #endif //MOZ_WIDGET_GTK == 2
+
+ static gboolean
+@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+ }
+ }
+
++NS_IMETHODIMP
++nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins)
++{
++ SetDrawsInTitlebar(aMargins.top == 0);
++ return NS_OK;
++}
++
++void
++nsWindow::SetDrawsInTitlebar(bool aState)
++{
++ if (!mIsCSDEnabled || aState == mDrawWindowDecoration)
++ return;
++
++ if (mShell) {
++ gtk_window_set_decorated(GTK_WINDOW(mShell), !aState);
++ gtk_widget_set_app_paintable(mShell, aState);
++ }
++
++ mDrawWindowDecoration = aState;
++ UpdateClientDecorations();
++}
++
+ gint
+ nsWindow::GdkScaleFactor()
+ {
+@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+ }
+ #endif
+
++bool
++nsWindow::IsClientDecorated() const
++{
++ return mDrawWindowDecoration && mSizeState == nsSizeMode_Normal;
++}
++
++int
++nsWindow::GetClientResizerSize()
++{
++ if (!mShell)
++ return 0;
++
++ // GTK uses a default size of 20px as of 3.20.
++ gint size = 20;
++ gtk_widget_style_get(mShell, "decoration-resize-handle", &size, nullptr);
++
++ return GdkCoordToDevicePixels(size);
++}
++
++nsWindow::CSDSupportLevel
++nsWindow::GetCSDSupportLevel() {
++ if (mCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
++ return mCSDSupportLevel;
++ }
++ // TODO: MATE
++ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
++ if (currentDesktop) {
++ if (strcmp(currentDesktop, "GNOME") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "XFCE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "KDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "LXDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "openbox") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "i3") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ } else {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ }
++ }
++ return mCSDSupportLevel;
++}
++
++void
++nsWindow::UpdateClientDecorations()
++{
++ // When the CSD is not fully supported by window manager (ie. WM is not
++ // expecting that application is going to draw window shadows) we can't
++ // add shadows widths to the window margin. That would lead to completely
++ // opaque black border of the window.
++ if (!mDrawWindowDecoration || GetCSDSupportLevel() != CSD_SUPPORT_FULL)
++ return;
++
++ gint top = 0, right = 0, bottom = 0, left = 0;
++ if (mSizeState == nsSizeMode_Normal) {
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++ }
++
++ static auto sGdkWindowSetShadowWidth =
++ (void (*)(GdkWindow*, gint, gint, gint, gint))
++ dlsym(RTLD_DEFAULT, "gdk_window_set_shadow_width");
++ sGdkWindowSetShadowWidth(gtk_widget_get_window(mShell),
++ left, right, top, bottom);
++
++ mDecorationSize.left = left;
++ mDecorationSize.right = right;
++ mDecorationSize.top = top;
++ mDecorationSize.bottom = bottom;
++
++ // Gtk+ doesn't like when we set mContainer margin bigger than actual
++ // mContainer window size. That happens when we're called early and the
++ // mShell/mContainer is not allocated/resized yet and has default 1x1 size.
++ // Just resize to some minimal value which will be changed
++ // by Gecko soon.
++ GtkAllocation allocation;
++ gtk_widget_get_allocation(GTK_WIDGET(mContainer), &allocation);
++ if (allocation.width < left + right || allocation.height < top + bottom) {
++ gtk_widget_get_preferred_width(GTK_WIDGET(mContainer), nullptr,
++ &allocation.width);
++ gtk_widget_get_preferred_height(GTK_WIDGET(mContainer), nullptr,
++ &allocation.height);
++ allocation.width += left + right + 1;
++ allocation.height += top + bottom + 1;
++ gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
++ }
++
++ gtk_widget_set_margin_left(GTK_WIDGET(mContainer), mDecorationSize.left);
++ gtk_widget_set_margin_right(GTK_WIDGET(mContainer), mDecorationSize.right);
++ gtk_widget_set_margin_top(GTK_WIDGET(mContainer), mDecorationSize.top);
++ gtk_widget_set_margin_bottom(GTK_WIDGET(mContainer), mDecorationSize.bottom);
++}
++
++void
++nsWindow::ApplyCSDClipping()
++{
++ if (IsClientDecorated()) {
++ gint top, right, bottom, left;
++ moz_gtk_get_header_bar_border(&top, &right, &bottom, &left);
++ cairo_rectangle_int_t rect = { 0, top, mBounds.width, mBounds.height};
++ cairo_region_t *region = cairo_region_create_rectangle(&rect);
++ gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
++ cairo_region_destroy(region);
++ } else {
++ gdk_window_shape_combine_region(mGdkWindow, nullptr, 0, 0);
++ }
++}
++
++bool
++nsWindow::CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge)
++{
++ gint scale = GdkScaleFactor();
++ gint left = scale * mDecorationSize.left;
++ gint top = scale * mDecorationSize.top;
++ gint right = scale * mDecorationSize.right;
++ gint bottom = scale * mDecorationSize.bottom;
++
++ int resizerSize = GetClientResizerSize();
++ int topDist = aPoint.y;
++ int leftDist = aPoint.x;
++ int rightDist = mBounds.width - aPoint.x;
++ int bottomDist = mBounds.height - aPoint.y;
++
++ //TODO -> wrong sizes
++
++ if (leftDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_WEST;
++ } else if (rightDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_EAST;
++ } else if (leftDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_WEST;
++ } else if (rightDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_EAST;
++ } else if (topDist <= top) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH;
++ } else if (leftDist <= left) {
++ aOutEdge = GDK_WINDOW_EDGE_WEST;
++ } else if (rightDist <= right) {
++ aOutEdge = GDK_WINDOW_EDGE_EAST;
++ } else if (bottomDist <= bottom) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH;
++ } else {
++ return false;
++ }
++ return true;
++}
++
+ int32_t
+ nsWindow::RoundsWidgetCoordinatesTo()
+ {
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+index f7c07d57491b..d9a07316a52c 100644
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -123,6 +123,7 @@ public:
+ double aHeight,
+ bool aRepaint) override;
+ virtual bool IsEnabled() const override;
++ bool IsComposited() const;
+
+ void SetZIndex(int32_t aZIndex) override;
+ virtual void SetSizeMode(nsSizeMode aMode) override;
+@@ -351,6 +352,9 @@ public:
+ #endif
+ virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
+
++ NS_IMETHOD SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
++ void SetDrawsInTitlebar(bool aState) override;
++
+ // HiDPI scale conversion
+ gint GdkScaleFactor();
+
+@@ -367,6 +371,9 @@ public:
+ LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
+
+ virtual bool WidgetTypeSupportsAcceleration() override;
++
++ // Decorations
++ bool IsClientDecorated() const;
+ protected:
+ virtual ~nsWindow();
+
+@@ -384,6 +391,16 @@ protected:
+
+ virtual void RegisterTouchWindow() override;
+
++ int GetClientResizerSize();
++
++ // Informs the window manager about the size of the shadows surrounding
++ // a client-side decorated window.
++ void UpdateClientDecorations();
++
++ // Returns true if the given point (in device pixels) is within a resizer
++ // region of the window. Only used when drawing decorations client side.
++ bool CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge);
++
+ nsCOMPtr<nsIWidget> mParent;
+ // Is this a toplevel window?
+ bool mIsTopLevel;
+@@ -432,12 +449,12 @@ private:
+ gint* aRootX, gint* aRootY);
+ void ClearCachedResources();
+ nsIWidgetListener* GetListener();
+- bool IsComposited() const;
+-
++ void ApplyCSDClipping();
+
+ GtkWidget *mShell;
+ MozContainer *mContainer;
+ GdkWindow *mGdkWindow;
++ bool mIsCSDEnabled;
+ PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
+
+
+@@ -536,6 +553,10 @@ private:
+ // leaving fullscreen
+ nsSizeMode mLastSizeMode;
+
++ // If true, draw our own window decorations (where supported).
++ bool mDrawWindowDecoration;
++ GtkBorder mDecorationSize;
++
+ static bool DragInProgress(void);
+
+ void DispatchMissedButtonReleases(GdkEventCrossing *aGdkEvent);
+@@ -567,6 +588,17 @@ private:
+ RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
+
+ mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
++ typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
++ CSD_SUPPORT_FLAT, // CSD without shadows
++ CSD_SUPPORT_NONE, // WM does not support CSD at all
++ CSD_SUPPORT_UNKNOWN
++ } CSDSupportLevel;
++ /**
++ * Get the support of Client Side Decoration by checking
++ * the XDG_CURRENT_DESKTOP environment variable.
++ */
++ CSDSupportLevel GetCSDSupportLevel();
++ CSDSupportLevel mCSDSupportLevel;
+ };
+
+ #endif /* __nsWindow_h__ */
commit 92551052f62af4fa782b170d265e13aafabd58b8
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 12:40:42 2017 +0200
Updated to 57.0 Beta 5
diff --git a/.gitignore b/.gitignore
index a40dbb6..5394cf0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -249,3 +249,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-56.0.source.tar.xz
/firefox-langpacks-56.0-20170925.tar.xz
/firefox-langpacks-56.0-20170927.tar.xz
+/firefox-57.0b5.source.tar.xz
+/firefox-langpacks-57.0b5-20171005.tar.xz
diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch
index d6812b6..31bc5ec 100644
--- a/build-jit-atomic-always-lucky.patch
+++ b/build-jit-atomic-always-lucky.patch
@@ -1,19 +1,19 @@
-diff -up firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/AtomicOperations.h
---- firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-07-31 18:20:47.000000000 +0200
-+++ firefox-55.0.2/js/src/jit/AtomicOperations.h 2017-08-29 12:59:52.870926044 +0200
-@@ -348,7 +348,7 @@ AtomicOperations::isLockfree(int32_t siz
- # elif defined(__sh__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
- # else
--# include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
-+# include "jit/none/AtomicOperations-feeling-lucky.h"
- # endif
- #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
- # include "jit/x86-shared/AtomicOperations-x86-shared.h"
-diff -up firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h
---- firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-08-29 14:10:52.665031524 +0200
-+++ firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-08-29 14:09:40.756060235 +0200
-@@ -60,6 +60,14 @@
+diff -up firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/AtomicOperations.h
+--- firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-10-06 12:34:02.338973607 +0200
++++ firefox-57.0b5/js/src/jit/AtomicOperations.h 2017-10-06 12:38:24.632622215 +0200
+@@ -415,7 +415,7 @@ AtomicOperations::isLockfreeJS(int32_t s
+ #elif defined(__s390__) || defined(__s390x__)
+ # include "jit/none/AtomicOperations-feeling-lucky.h"
+ #else
+-# error "No AtomicOperations support provided for this platform"
++# include "jit/none/AtomicOperations-feeling-lucky.h"
+ #endif
+
+ #endif // jit_AtomicOperations_h
+diff -up firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h
+--- firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-10-06 12:34:02.338973607 +0200
+@@ -79,6 +79,14 @@
# define GNUC_COMPATIBLE
#endif
diff --git a/firefox-build-prbool.patch b/firefox-build-prbool.patch
deleted file mode 100644
index 17725af..0000000
--- a/firefox-build-prbool.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff -up firefox-53.0/dom/u2f/U2F.cpp.prbool firefox-53.0/dom/u2f/U2F.cpp
---- firefox-53.0/dom/u2f/U2F.cpp.prbool 2017-04-11 06:15:14.000000000 +0200
-+++ firefox-53.0/dom/u2f/U2F.cpp 2017-04-18 09:19:20.524285200 +0200
-@@ -4,6 +4,7 @@
- * 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 "prtypes.h"
- #include "hasht.h"
- #include "mozilla/dom/CallbackFunction.h"
- #include "mozilla/dom/ContentChild.h"
-diff -up firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool firefox-53.0/security/certverifier/CTLogVerifier.cpp
---- firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool 2017-04-18 09:19:20.524285200 +0200
-+++ firefox-53.0/security/certverifier/CTLogVerifier.cpp 2017-04-18 09:52:34.189402811 +0200
-@@ -9,6 +9,7 @@
- #include <stdint.h>
-
- #include "CTSerialization.h"
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Assertions.h"
-diff -up firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool firefox-53.0/security/certverifier/CTObjectsExtractor.cpp
---- firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool 2017-01-16 17:16:51.000000000 +0100
-+++ firefox-53.0/security/certverifier/CTObjectsExtractor.cpp 2017-04-18 09:19:20.525285196 +0200
-@@ -6,6 +6,7 @@
-
- #include "CTObjectsExtractor.h"
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/Casting.h"
-diff -up firefox-53.0/security/certverifier/OCSPCache.h.prbool firefox-53.0/security/certverifier/OCSPCache.h
---- firefox-53.0/security/certverifier/OCSPCache.h.prbool 2017-04-11 06:15:19.000000000 +0200
-+++ firefox-53.0/security/certverifier/OCSPCache.h 2017-04-18 09:19:20.525285196 +0200
-@@ -25,6 +25,7 @@
- #ifndef mozilla_psm_OCSPCache_h
- #define mozilla_psm_OCSPCache_h
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Mutex.h"
- #include "mozilla/Vector.h"
diff --git a/firefox-mozconfig b/firefox-mozconfig
index f98a89e..6b4cb54 100644
--- a/firefox-mozconfig
+++ b/firefox-mozconfig
@@ -12,9 +12,7 @@ ac_add_options --disable-tests
#ac_add_options --enable-libnotify
ac_add_options --enable-necko-wifi
ac_add_options --enable-startup-notification
-#ac_add_options --disable-cpp-exceptions
ac_add_options --disable-updater
-ac_add_options --enable-url-classifier
ac_add_options --enable-chrome-format=omni
ac_add_options --enable-pulseaudio
ac_add_options --with-system-icu
@@ -22,7 +20,8 @@ ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
ac_add_options --with-google-api-keyfile=../google-api-key
ac_add_options --enable-release
ac_add_options --enable-pie
-ac_add_options --disable-stylo
+# Workaround for mozbz#1341234
+ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
diff --git a/firefox.spec b/firefox.spec
index 1c7028f..5d86c4b 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -1,6 +1,3 @@
-# Use ALSA backend?
-%define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
@@ -64,12 +61,12 @@
%endif
%if %{?system_nss}
-%global nspr_version 4.10.10
+%global nspr_version 4.17.0
# NSS/NSPR quite often ends in build override, so as requirement the version
# we're building against could bring us some broken dependencies from time to time.
#%global nspr_build_version %(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536)
%global nspr_build_version %{nspr_version}
-%global nss_version 3.32.1
+%global nss_version 3.33
#%global nss_build_version %(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536)
%global nss_build_version %{nss_version}
%endif
@@ -80,9 +77,12 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
+%define pre_version b5
+
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
%global langpackdir %{mozappdir}/langpacks
+%global tarballdir %{name}-%{version}%{?pre_version}
%define official_branding 1
%define build_langpacks 1
@@ -98,14 +98,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 56.0
-Release: 4%{?pre_tag}%{?dist}
+Version: 57.0
+Release: 0.1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20170927.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -122,16 +122,13 @@ Patch0: firefox-install-dir.patch
Patch3: mozilla-build-arm.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=814879#c3
Patch18: xulrunner-24.0-jemalloc-ppc.patch
-Patch20: firefox-build-prbool.patch
Patch25: rhbz-1219542-s390-build.patch
Patch26: build-icu-big-endian.patch
Patch27: mozilla-1335250.patch
# Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268
Patch29: build-big-endian.patch
-Patch30: fedora-build.patch
Patch31: build-ppc64-s390x-curl.patch
Patch32: build-rust-ppc64le.patch
-Patch34: build-cubeb-pulse-arm.patch
Patch35: build-ppc-jit.patch
Patch36: build-missing-xlocale-h.patch
# Always feel lucky for unsupported platforms:
@@ -149,7 +146,6 @@ Patch225: mozilla-1005640-accept-lang.patch
#ARM run-time patch
Patch226: rhbz-1354671.patch
Patch229: firefox-nss-version.patch
-Patch230: rhbz-1497932.patch
# Upstream patches
Patch402: mozilla-1196777.patch
@@ -159,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch414: mozilla-1341234.patch
Patch415: mozilla-1405267.patch
# Debian patches
@@ -192,9 +187,6 @@ BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(hunspell)
%endif
BuildRequires: pkgconfig(libstartup-notification-1.0)
-%if %{?alsa_backend}
-BuildRequires: pkgconfig(alsa)
-%endif
BuildRequires: pkgconfig(libnotify) >= %{libnotify_version}
BuildRequires: pkgconfig(dri)
BuildRequires: pkgconfig(libcurl)
@@ -299,7 +291,7 @@ This package contains results of tests executed during build.
#---------------------------------------------------------------------
%prep
-%setup -q
+%setup -q -n %{tarballdir}
# Build patches, can't change backup suffix from default because during build
# there is a compare of config and js/config directories and .orig suffix is
@@ -308,15 +300,12 @@ This package contains results of tests executed during build.
%patch18 -p1 -b .jemalloc-ppc
-%patch20 -p1 -b .prbool
%ifarch s390
%patch25 -p1 -b .rhbz-1219542-s390
%endif
%patch29 -p1 -b .big-endian
-%patch30 -p1 -b .fedora-build
%patch31 -p1 -b .ppc64-s390x-curl
%patch32 -p1 -b .rust-ppc64le
-# don't need that %patch34 -p1 -b .cubeb-pulse-arm
%ifarch ppc ppc64 ppc64le
%patch35 -p1 -b .ppc-jit
%endif
@@ -336,7 +325,6 @@ This package contains results of tests executed during build.
%ifarch aarch64
%patch226 -p1 -b .1354671
%endif
-%patch230 -p1 -b .1497932
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
@@ -346,8 +334,8 @@ This package contains results of tests executed during build.
%patch412 -p1 -b .1337988
%endif
%endif
+
%patch413 -p1 -b .1353817
-%patch414 -p1 -b .1341234
%patch415 -p1 -b .1405267
# Debian extension patch
@@ -395,10 +383,6 @@ echo "ac_add_options --enable-system-ffi" >> .mozconfig
echo "ac_add_options --disable-elf-hack" >> .mozconfig
%endif
-%if %{?alsa_backend}
-echo "ac_add_options --enable-alsa" >> .mozconfig
-%endif
-
%if %{?system_hunspell}
echo "ac_add_options --enable-system-hunspell" >> .mozconfig
%else
@@ -871,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
+- Updated to 57.0 Beta 5
+
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
because of unresolved symbols
diff --git a/mozilla-1341234.patch b/mozilla-1341234.patch
deleted file mode 100644
index 2de5080..0000000
--- a/mozilla-1341234.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -up firefox-56.0/layout/style/bindgen.toml.in.old firefox-56.0/layout/style/bindgen.toml.in
---- firefox-56.0/layout/style/bindgen.toml.in.old 2017-09-27 16:30:14.518213900 +0200
-+++ firefox-56.0/layout/style/bindgen.toml.in 2017-09-27 16:30:38.089179153 +0200
-@@ -1,4 +1,5 @@
- [build]
- args = [
-+ "/usr/include",
- @BINDGEN_CFLAGS@
- ]
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
index 27fb5ea..46c7f1e 100644
--- a/mozilla-1405267.patch
+++ b/mozilla-1405267.patch
@@ -1,7 +1,7 @@
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-14 22:16:02.000000000 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:16:58.512697973 +0200
-@@ -96,6 +96,7 @@ STUB(gdk_window_get_update_area)
+diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
+@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
STUB(gdk_window_get_user_data)
STUB(gdk_window_get_visual)
STUB(gdk_window_get_width)
@@ -9,9 +9,9 @@ diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk
STUB(gdk_window_hide)
STUB(gdk_window_input_shape_combine_region)
STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_display_get_device_manager)
- STUB(gdk_error_trap_pop_ignored)
+@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
STUB(gdk_event_get_source_device)
+ STUB(gdk_screen_get_monitor_workarea)
STUB(gdk_window_get_type)
-STUB(gdk_window_get_window_type)
STUB(gdk_x11_window_get_xid)
diff --git a/rhbz-1497932.patch b/rhbz-1497932.patch
deleted file mode 100644
index d6e7886..0000000
--- a/rhbz-1497932.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-56.0/media/webrtc/trunk/Makefile.old firefox-56.0/media/webrtc/trunk/Makefile
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old 2017-10-04 09:21:56.155553585 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:22:35.562427061 +0200
-@@ -61,7 +61,6 @@ STUB(gdk_screen_get_height_mm)
- STUB(gdk_screen_get_n_monitors)
- STUB(gdk_screen_get_monitor_at_window)
- STUB(gdk_screen_get_monitor_geometry)
--STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_screen_get_monitor_height_mm)
- STUB(gdk_screen_get_number)
- STUB(gdk_screen_get_resolution)
-@@ -550,6 +549,7 @@ STUB(gtk_render_line)
- STUB(gtk_render_option)
- STUB(gtk_render_slider)
- STUB(gtk_scale_new)
-+STUB(gdk_screen_get_monitor_workarea)
- STUB(gtk_scrollbar_new)
- STUB(gtk_style_context_add_class)
- STUB(gtk_style_context_add_region)
diff --git a/sources b/sources
index f078f75..cb71924 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-56.0.source.tar.xz) = 3aeb0ff54e10c83894f61734daa4f0801a1bb499d4667adad9c78520e588eae809d0e4d61e9227206466d62c3b453e2ce9ca8198f59f5354cd1b6804c00f0990
-SHA512 (firefox-langpacks-56.0-20170927.tar.xz) = e74d85410891b6faa388d37043d764a6c01a2c83479d9912aa3d0b23684ed66ca639eb3cdb579cafef6c3156b0d774a66987a605e0f9e25c2d4eed967ef7b627
+SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
+SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
diff --git a/xulrunner-24.0-jemalloc-ppc.patch b/xulrunner-24.0-jemalloc-ppc.patch
index be6f259..840fca2 100644
--- a/xulrunner-24.0-jemalloc-ppc.patch
+++ b/xulrunner-24.0-jemalloc-ppc.patch
@@ -1,7 +1,7 @@
-diff -up firefox-48.0/memory/mozjemalloc/jemalloc.c.jemalloc-ppc firefox-48.0/memory/mozjemalloc/jemalloc.c
---- firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp.jemalloc-ppc 2016-07-26 10:51:46.385434384 +0200
-+++ firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp 2016-07-26 10:53:49.061023106 +0200
-@@ -1090,7 +1090,7 @@ static const bool config_recycle = false
+diff -up firefox-57.0b5/memory/build/mozjemalloc.cpp.old firefox-57.0b5/memory/build/mozjemalloc.cpp
+--- firefox-57.0b5/memory/build/mozjemalloc.cpp.old 2017-10-06 12:00:27.938687498 +0200
++++ firefox-57.0b5/memory/build/mozjemalloc.cpp 2017-10-06 12:02:45.232151309 +0200
+@@ -780,7 +780,7 @@ struct arena_t {
* controlling the malloc behavior are defined as compile-time constants
* for best performance and cannot be altered at runtime.
*/
6 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=fd700ad0ae...
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=84f42722cf....
Change:
+%ifarch %{ix86}
+ExcludeArch: armv7hl
Thanks.
Full change:
============
commit 38da98e3f8ee0ca484405dee28044c54c5495737
Merge: 703c166 84f4272
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 23 20:35:03 2017 +0200
Merge branch 'master' into f26
commit 84f42722cf6ac1d363bf371c7334d257e8ddf5e0
Merge: c69ed95 b1a757c
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 23 20:34:27 2017 +0200
Updated to FF57Beta9
diff --cc firefox.spec
index fe2c132,86fb77f..f755707
--- a/firefox.spec
+++ b/firefox.spec
@@@ -1,10 -1,3 +1,7 @@@
+%if 0%{?fedora} < 26
+ExcludeArch: armv7hl
+%endif
+
- # Use ALSA backend?
- %define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
commit b1a757cbd45f3653b0d54b87a2f7f93145ebfbd0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Thu Oct 19 12:21:55 2017 +0200
Updated to 57.0 Beta 9
diff --git a/.gitignore b/.gitignore
index fe01930..eac0742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -257,3 +257,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b7-20171011.tar.xz
/firefox-57.0b8.source.tar.xz
/firefox-langpacks-57.0b8-20171016.tar.xz
+/firefox-57.0b9.source.tar.xz
+/firefox-langpacks-57.0b9-20171019.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 14f9672..86fb77f 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b8
+%define pre_version b9
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.4%{?pre_tag}%{?dist}
+Release: 0.5%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171019.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 19 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.5
+- Updated to 57.0 Beta 9
+
* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
- Updated to 57.0 Beta 8
diff --git a/sources b/sources
index 5e1ac99..df2fde5 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
-SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
+SHA512 (firefox-57.0b9.source.tar.xz) = 5d09a07ae48198de8d8ada4018afb4c1cfe16d9294bbbd502d3f23915c43496604f19761a409a41a23ec712d622a556b0b6dc9efd186f4528724e52c8305dda1
+SHA512 (firefox-langpacks-57.0b9-20171019.tar.xz) = 07a3182edf634a5151e4c599e9f8a886e286c1e708f5743db10efeeb5526b4aa120153491da926c5bfcd69cb0e683ff83f2637fca53c78b9e256151768c20712
commit 92f600486ea44fde51139f9e30fcdde6c939dcfc
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 12:29:32 2017 +0200
Fixed patch to apply
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index d7d8500..8daa2f2 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,10 +1,10 @@
-diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
---- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
-+++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
-@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
- pref("browser.tabs.loadBookmarksInBackground", false);
+diff -up firefox-57.0b8/browser/app/profile/firefox.js.1399611 firefox-57.0b8/browser/app/profile/firefox.js
+--- firefox-57.0b8/browser/app/profile/firefox.js.1399611 2017-10-16 12:11:45.364240654 +0200
++++ firefox-57.0b8/browser/app/profile/firefox.js 2017-10-16 12:28:03.860720910 +0200
+@@ -457,11 +457,7 @@ pref("browser.tabs.loadBookmarksInBackgr
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
+ pref("browser.tabs.tabMinWidth", 76);
-#ifdef UNIX_BUT_NOT_MAC
-pref("browser.tabs.drawInTitlebar", false);
-#else
@@ -13,9 +13,9 @@ diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/br
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
---- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
-+++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js 2017-10-16 12:11:45.364240654 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -28,9 +28,9 @@ diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 f
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
---- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
-+++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/moz.build.1399611 firefox-57.0b8/browser/base/moz.build
+--- firefox-57.0b8/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b8/browser/base/moz.build 2017-10-16 12:11:45.364240654 +0200
@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -40,9 +40,9 @@ diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/ba
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
---- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
-+++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+diff -up firefox-57.0b8/browser/themes/linux/browser.css.1399611 firefox-57.0b8/browser/themes/linux/browser.css
+--- firefox-57.0b8/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b8/browser/themes/linux/browser.css 2017-10-16 12:11:45.365240651 +0200
@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
#nav-bar,
@@ -140,9 +140,9 @@ diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/
+ }
+ }
+}
-diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
---- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
-+++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 firefox-57.0b8/dom/base/nsGkAtomList.h
+--- firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b8/dom/base/nsGkAtomList.h 2017-10-16 12:11:45.365240651 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -165,9 +165,9 @@ diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/
// application commands
GK_ATOM(Back, "Back")
-diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
---- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
-+++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b8/gfx/src/nsThemeConstants.h
+--- firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b8/gfx/src/nsThemeConstants.h 2017-10-16 12:11:45.365240651 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -176,9 +176,9 @@ diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/sr
ThemeWidgetType_COUNT
};
-diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
---- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp 2017-10-16 12:11:45.365240651 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -210,9 +210,9 @@ diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
---- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b8/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b8/layout/style/nsMediaFeatures.cpp 2017-10-16 12:11:45.366240647 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -256,9 +256,9 @@ diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
---- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
-+++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/modules/libpref/init/all.js.1399611 firefox-57.0b8/modules/libpref/init/all.js
+--- firefox-57.0b8/modules/libpref/init/all.js.1399611 2017-10-12 18:12:09.000000000 +0200
++++ firefox-57.0b8/modules/libpref/init/all.js 2017-10-16 12:11:45.366240647 +0200
@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
@@ -267,9 +267,9 @@ diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modul
#endif
#endif
-diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
---- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/toolkit/modules/moz.build.1399611 firefox-57.0b8/toolkit/modules/moz.build
+--- firefox-57.0b8/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/toolkit/modules/moz.build 2017-10-16 12:11:45.366240647 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -279,9 +279,9 @@ diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
---- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b8/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtk3drawing.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -569,9 +569,9 @@ diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget
default:
g_warning("Unknown widget type: %d", widget);
}
-diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
---- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b8/widget/gtk/gtkdrawing.h
+--- firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtkdrawing.h 2017-10-16 12:11:45.367240644 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -635,9 +635,9 @@ diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gt
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
-+++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c 2017-10-16 12:11:45.367240644 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -666,9 +666,9 @@ diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget
#endif
#ifdef GTK2_SYMBOLS
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
@@ -733,9 +733,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widg
}
// virtual
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.h 2017-10-16 12:11:45.367240644 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -756,9 +756,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget
bool mInitialized;
void EnsureInit();
-diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp 2017-10-16 12:11:45.368240640 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -839,9 +839,9 @@ diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/w
}
return eUnknownTransparency;
-diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
---- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b8/widget/gtk/nsWindow.cpp
+--- firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 2017-10-16 12:11:45.361240666 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1470,9 +1470,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gt
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
---- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.h.1399611 firefox-57.0b8/widget/gtk/nsWindow.h
+--- firefox-57.0b8/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.h 2017-10-16 12:11:45.369240636 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1562,9 +1562,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/
};
#endif /* __nsWindow_h__ */
-diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
---- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -26,10 +26,14 @@ static GtkStyleContext*
GetCssNodeStyleInternal(WidgetNodeType aNodeType);
@@ -1708,9 +1708,9 @@ diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/w
/* Clear already freed arrays */
mozilla::PodArrayZero(sWidgetStorage);
-diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
---- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
-+++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/LookAndFeel.h.1399611 firefox-57.0b8/widget/LookAndFeel.h
+--- firefox-57.0b8/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b8/widget/LookAndFeel.h 2017-10-16 12:11:45.369240636 +0200
@@ -405,6 +405,30 @@ public:
eIntID_PhysicalHomeButton,
commit 29052e77800f8522112525c0b2a2725ef28299a3
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 11:48:47 2017 +0200
Updated to 57.0 Beta 8
diff --git a/.gitignore b/.gitignore
index 3060bc4..fe01930 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,3 +255,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b6-20171009.tar.xz
/firefox-57.0b7.source.tar.xz
/firefox-langpacks-57.0b7-20171011.tar.xz
+/firefox-57.0b8.source.tar.xz
+/firefox-langpacks-57.0b8-20171016.tar.xz
diff --git a/firefox.spec b/firefox.spec
index e619503..14f9672 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b7
+%define pre_version b8
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.3%{?pre_tag}%{?dist}
+Release: 0.4%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
+- Updated to 57.0 Beta 8
+
* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
- Updated to 57.0 Beta 7
diff --git a/sources b/sources
index 3fd62bd..5e1ac99 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
-SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
+SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
+SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
commit 4f71e4765388439a6c2af118be25b5429c3f0c3e
Author: Martin Stransky <stransky(a)redhat.com>
Date: Wed Oct 11 14:23:39 2017 +0200
Updated to 57.0 Beta 7
diff --git a/.gitignore b/.gitignore
index 3f1c795..3060bc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -253,3 +253,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b5-20171005.tar.xz
/firefox-57.0b6.source.tar.xz
/firefox-langpacks-57.0b6-20171009.tar.xz
+/firefox-57.0b7.source.tar.xz
+/firefox-langpacks-57.0b7-20171011.tar.xz
diff --git a/firefox.spec b/firefox.spec
index f839e2e..e619503 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b6
+%define pre_version b7
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.2%{?pre_tag}%{?dist}
+Release: 0.3%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -155,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch415: mozilla-1405267.patch
Patch416: mozilla-1399611.patch
# Debian patches
@@ -335,7 +334,6 @@ This package contains results of tests executed during build.
%endif
%patch413 -p1 -b .1353817
-%patch415 -p1 -b .1405267
%patch416 -p1 -b .1399611
# Debian extension patch
@@ -858,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
+- Updated to 57.0 Beta 7
+
* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
- Updated to 57.0 Beta 6
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
deleted file mode 100644
index 46c7f1e..0000000
--- a/mozilla-1405267.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
-@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
- STUB(gdk_window_get_user_data)
- STUB(gdk_window_get_visual)
- STUB(gdk_window_get_width)
-+STUB(gdk_window_get_window_type)
- STUB(gdk_window_hide)
- STUB(gdk_window_input_shape_combine_region)
- STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
- STUB(gdk_event_get_source_device)
- STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_window_get_type)
--STUB(gdk_window_get_window_type)
- STUB(gdk_x11_window_get_xid)
- STUB(gdk_x11_display_get_type)
- STUB(gdk_wayland_display_get_type)
diff --git a/sources b/sources
index 43ea395..3fd62bd 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
-SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
+SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
+SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
commit fd700ad0ae450c4705017e05db7af709f7ea90f0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 14:49:41 2017 +0200
Disabled stylo on i686
diff --git a/firefox.spec b/firefox.spec
index c103013..f839e2e 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -453,6 +453,9 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
echo "ac_add_options --disable-ion" >> .mozconfig
%endif
+%ifarch %{ix86}
+echo "ac_add_options --disable-stylo" >> .mozconfig
+%endif
#---------------------------------------------------------------------
commit 92eee6224e69e8ca6591b1bafcab7b584cef5583
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 11:08:34 2017 +0200
Updated CSD patch
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index b30ae02..d7d8500 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,8 +1,7 @@
-diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index de61ac442b74..be15873ee2c4 100644
---- a/browser/app/profile/firefox.js
-+++ b/browser/app/profile/firefox.js
-@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
+--- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
++++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
+@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
pref("browser.tabs.loadBookmarksInBackground", false);
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
@@ -14,10 +13,9 @@ index de61ac442b74..be15873ee2c4 100644
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
-index d9509029bbf1..b56f81c0c138 100644
---- a/browser/base/content/browser-tabsintitlebar.js
-+++ b/browser/base/content/browser-tabsintitlebar.js
+diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
++++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -30,11 +28,10 @@ index d9509029bbf1..b56f81c0c138 100644
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff --git a/browser/base/moz.build b/browser/base/moz.build
-index a2bd4bcb4eca..f14553e4ba7f 100644
---- a/browser/base/moz.build
-+++ b/browser/base/moz.build
-@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
+--- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -43,16 +40,12 @@ index a2bd4bcb4eca..f14553e4ba7f 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
-index 65a3f0cca7b1..7bb448da620b 100644
---- a/browser/themes/linux/browser.css
-+++ b/browser/themes/linux/browser.css
-@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
- color: -moz-menubartext;
- }
+diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
+--- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
-+/* Support dragging the window using the toolbar when drawing our own
-+ * decorations, or where the GTK theme allows. */
+ #nav-bar,
#toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
+#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
@@ -61,7 +54,7 @@ index 65a3f0cca7b1..7bb448da620b 100644
-moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
}
-@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+@@ -713,3 +715,85 @@ html|span.ac-emphasize-text-url {
.restore-tabs-button:hover:active:not([disabled="true"]) {
padding: 3px;
}
@@ -147,10 +140,9 @@ index 65a3f0cca7b1..7bb448da620b 100644
+ }
+ }
+}
-diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
-index 5d5ec3d405c9..bb2f652c41e0 100644
---- a/dom/base/nsGkAtomList.h
-+++ b/dom/base/nsGkAtomList.h
+diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
+--- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -162,7 +154,7 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// windows theme selector metrics
GK_ATOM(windows_classic, "windows-classic")
-@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-d
GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
@@ -173,10 +165,9 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// application commands
GK_ATOM(Back, "Back")
-diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
-index d0ced405095d..1cd2361a0026 100644
---- a/gfx/src/nsThemeConstants.h
-+++ b/gfx/src/nsThemeConstants.h
+diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
+--- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -185,10 +176,9 @@ index d0ced405095d..1cd2361a0026 100644
ThemeWidgetType_COUNT
};
-diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
-index cbfb4d0f60aa..263372ca868e 100644
---- a/layout/style/nsCSSRuleProcessor.cpp
-+++ b/layout/style/nsCSSRuleProcessor.cpp
+diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -220,10 +210,9 @@ index cbfb4d0f60aa..263372ca868e 100644
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
-index 7cf6a08e46c1..bf955d759e8b 100644
---- a/layout/style/nsMediaFeatures.cpp
-+++ b/layout/style/nsMediaFeatures.cpp
+diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -267,11 +256,10 @@ index 7cf6a08e46c1..bf955d759e8b 100644
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 0b77f1759021..b8dc9aeebfd8 100644
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
+--- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
++++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
pref("widget.content.allow-gtk-dark-theme", false);
@@ -279,10 +267,9 @@ index 0b77f1759021..b8dc9aeebfd8 100644
#endif
#endif
-diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
-index 8b5dc9e25d7e..14fb0fe87e9d 100644
---- a/toolkit/modules/moz.build
-+++ b/toolkit/modules/moz.build
+diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
+--- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -292,192 +279,9 @@ index 8b5dc9e25d7e..14fb0fe87e9d 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
-index ff5da8017621..d31b411a9b1a 100644
---- a/widget/LookAndFeel.h
-+++ b/widget/LookAndFeel.h
-@@ -405,6 +405,30 @@ public:
- eIntID_PhysicalHomeButton,
-
- /*
-+ * A boolean value indicating whether client-side decorations are
-+ * supported by the user's GTK version.
-+ */
-+ eIntID_GTKCSDAvailable,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a minimize button.
-+ */
-+ eIntID_GTKCSDMinimizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a maximize button.
-+ */
-+ eIntID_GTKCSDMaximizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a close button.
-+ */
-+ eIntID_GTKCSDCloseButton,
-+
-+ /*
- * Controls whether overlay scrollbars display when the user moves
- * the mouse in a scrollable frame.
- */
-diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
-index 39b7893df3bd..4c9e8523b5bf 100644
---- a/widget/gtk/WidgetStyleCache.cpp
-+++ b/widget/gtk/WidgetStyleCache.cpp
-@@ -26,10 +26,14 @@ static GtkStyleContext*
- GetCssNodeStyleInternal(WidgetNodeType aNodeType);
-
- static GtkWidget*
--CreateWindowWidget()
-+CreateWindowWidget(WidgetNodeType type)
- {
- GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_widget_set_name(widget, "MozillaGtkWidget");
-+ if (type == MOZ_GTK_WINDOW_CSD) {
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, "csd");
-+ }
- return widget;
- }
-
-@@ -101,7 +105,7 @@ CreateTooltipWidget()
- {
- MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
- "CreateTooltipWidget should be used for Gtk < 3.20 only.");
-- GtkWidget* widget = CreateWindowWidget();
-+ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
- GtkStyleContext* style = gtk_widget_get_style_context(widget);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
- return widget;
-@@ -529,11 +533,82 @@ CreateNotebookWidget()
- }
-
- static GtkWidget*
-+CreateHeaderBar(bool aMaximized)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
-+ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
-+
-+ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
-+ if (aMaximized) {
-+ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
-+ GtkStyleContext* style = gtk_widget_get_style_context(window);
-+ gtk_style_context_add_class(style, "maximized");
-+ GtkWidget *fixed = gtk_fixed_new();
-+ gtk_container_add(GTK_CONTAINER(window), fixed);
-+ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
-+ // Save the window container so we don't leak it.
-+ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
-+ } else {
-+ AddToWindowContainer(headerbar);
-+ }
-+
-+ // Emulate what create_titlebar() at gtkwindow.c does.
-+ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
-+ gtk_style_context_add_class(style, "default-decoration");
-+
-+ return headerbar;
-+}
-+
-+// TODO - Also return style for buttons located at Maximized toolbar.
-+static GtkWidget*
-+CreateHeaderBarButton(WidgetNodeType aWidgetType)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
-+
-+ GtkWidget* widget = gtk_button_new();
-+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
-+
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
-+
-+ switch (aWidgetType) {
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ gtk_style_context_add_class(style, "close");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ gtk_style_context_add_class(style, "minimize");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ gtk_style_context_add_class(style, "maximize");
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return widget;
-+}
-+
-+static GtkWidget*
- CreateWidget(WidgetNodeType aWidgetType)
- {
- switch (aWidgetType) {
- case MOZ_GTK_WINDOW:
-- return CreateWindowWidget();
-+ case MOZ_GTK_WINDOW_CSD:
-+ return CreateWindowWidget(aWidgetType);
- case MOZ_GTK_WINDOW_CONTAINER:
- return CreateWindowContainerWidget();
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
-@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
- return CreateComboBoxEntryButtonWidget();
- case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
- return CreateComboBoxEntryArrowWidget();
-+ case MOZ_GTK_HEADER_BAR:
-+ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
-+ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ return CreateHeaderBarButton(aWidgetType);
- default:
- /* Not implemented */
- return nullptr;
-@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
- GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
- return gtk_widget_get_style_context(widget);
- }
-+ case MOZ_GTK_WINDOW_DECORATION:
-+ style = CreateChildCSSNode("decoration",
-+ MOZ_GTK_WINDOW_CSD);
-+ break;
- default:
- return GetWidgetRootStyle(aNodeType);
- }
-@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
- /* This will destroy all of our widgets */
- if (sWidgetStorage[MOZ_GTK_WINDOW])
- gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
-+ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
-+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
-
- /* Clear already freed arrays */
- mozilla::PodArrayZero(sWidgetStorage);
-diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
-index 4c562b380095..ee2b8a04f63f 100644
---- a/widget/gtk/gtk3drawing.cpp
-+++ b/widget/gtk/gtk3drawing.cpp
+diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -512,7 +316,7 @@ index 4c562b380095..ee2b8a04f63f 100644
// GetStateFlagsFromGtkWidgetState() can be safely used for the specific
// GtkWidgets that set both prelight and active flags. For other widgets,
// either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
-@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orient
return MOZ_GTK_SUCCESS;
}
@@ -556,7 +360,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static gint
moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
GtkTextDirection direction)
-@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
}
static gint
@@ -581,7 +385,7 @@ index 4c562b380095..ee2b8a04f63f 100644
moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
gboolean selected, gboolean inconsistent,
-@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkR
return MOZ_GTK_SUCCESS;
}
@@ -620,7 +424,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static void
moz_gtk_add_style_margin(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
-@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_pa
moz_gtk_add_style_padding(style, left, top, right, bottom);
}
@@ -635,7 +439,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static GtkBorder
GetMarginBorderPadding(GtkStyleContext* aStyle)
{
-@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType
// XXX: Subtract 1 pixel from the padding to account for the default
// padding in forms.css. See bug 1187385.
*left = *top = *right = *bottom = -1;
@@ -645,7 +449,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
-@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
@@ -657,7 +461,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
-@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
@@ -667,7 +471,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* If there is no separator, don't try to count its width. */
separator_width = 0;
-@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType
style = gtk_widget_get_style_context(w);
*left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
@@ -680,7 +484,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_MENUPOPUP:
-@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType
return MOZ_GTK_SUCCESS;
}
@@ -702,7 +506,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* These widgets have no borders, since they are not containers. */
case MOZ_GTK_CHECKBUTTON_LABEL:
-@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrie
return metrics;
}
@@ -739,7 +543,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* cairo_t *cr argument has to be a system-cairo. */
gint
moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
-@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widg
GetWidget(MOZ_GTK_BUTTON),
direction);
break;
@@ -754,7 +558,7 @@ index 4c562b380095..ee2b8a04f63f 100644
case MOZ_GTK_CHECKBUTTON:
case MOZ_GTK_RADIOBUTTON:
return moz_gtk_toggle_paint(cr, rect, state,
-@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widg
case MOZ_GTK_INFO_BAR:
return moz_gtk_info_bar_paint(cr, rect, state);
break;
@@ -765,10 +569,9 @@ index 4c562b380095..ee2b8a04f63f 100644
default:
g_warning("Unknown widget type: %d", widget);
}
-diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
-index 42dbf8287499..c0a7eba5006a 100644
---- a/widget/gtk/gtkdrawing.h
-+++ b/widget/gtk/gtkdrawing.h
+diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
+--- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -799,7 +602,7 @@ index 42dbf8287499..c0a7eba5006a 100644
MOZ_GTK_WIDGET_NODE_COUNT
} WidgetNodeType;
-@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(g
*/
gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
@@ -832,10 +635,9 @@ index 42dbf8287499..c0a7eba5006a 100644
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
-index 7285b7f001ac..6e554c7f628e 100644
---- a/widget/gtk/mozgtk/mozgtk.c
-+++ b/widget/gtk/mozgtk/mozgtk.c
+diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
++++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -864,11 +666,10 @@ index 7285b7f001ac..6e554c7f628e 100644
#endif
#ifdef GTK2_SYMBOLS
-diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
-index e02bf10fe87f..a5950ac35799 100644
---- a/widget/gtk/nsLookAndFeel.cpp
-+++ b/widget/gtk/nsLookAndFeel.cpp
-@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
break;
@@ -932,10 +733,9 @@ index e02bf10fe87f..a5950ac35799 100644
}
// virtual
-diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
-index 177d069f6567..6e14236e604a 100644
---- a/widget/gtk/nsLookAndFeel.h
-+++ b/widget/gtk/nsLookAndFeel.h
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -956,10 +756,9 @@ index 177d069f6567..6e14236e604a 100644
bool mInitialized;
void EnsureInit();
-diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
-index 211790096a3e..6ed35b97a0d7 100644
---- a/widget/gtk/nsNativeThemeGTK.cpp
-+++ b/widget/gtk/nsNativeThemeGTK.cpp
+diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -968,7 +767,7 @@ index 211790096a3e..6ed35b97a0d7 100644
#include "mozilla/EventStates.h"
#include "mozilla/Services.h"
-@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u
case NS_THEME_GTK_INFO_BAR:
aGtkWidgetType = MOZ_GTK_INFO_BAR;
break;
@@ -993,7 +792,7 @@ index 211790096a3e..6ed35b97a0d7 100644
default:
return false;
}
-@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
case NS_THEME_MENULIST:
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_TREEHEADERCELL:
@@ -1004,7 +803,7 @@ index 211790096a3e..6ed35b97a0d7 100644
{
if (aWidgetType == NS_THEME_MENULIST) {
// Include the arrow size.
-@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(ns
case NS_THEME_DIALOG:
#if (MOZ_WIDGET_GTK == 3)
case NS_THEME_GTK_INFO_BAR:
@@ -1026,7 +825,7 @@ index 211790096a3e..6ed35b97a0d7 100644
case NS_THEME_MENULIST_BUTTON:
if (aFrame && aFrame->GetWritingMode().IsVertical()) {
return false;
-@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(
#else
return eTransparent;
#endif
@@ -1040,10 +839,9 @@ index 211790096a3e..6ed35b97a0d7 100644
}
return eUnknownTransparency;
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
-index 37b6aae4c3d0..f0c3343f20ae 100644
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
+diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
+--- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1061,7 +859,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
using namespace mozilla;
using namespace mozilla::gfx;
using namespace mozilla::widget;
-@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+@@ -186,6 +189,8 @@ static gboolean expose_event_cb
#else
static gboolean expose_event_cb (GtkWidget *widget,
cairo_t *rect);
@@ -1070,7 +868,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif
static gboolean configure_event_cb (GtkWidget *widget,
GdkEventConfigure *event);
-@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+@@ -231,7 +236,6 @@ static void screen_composited_change
gpointer user_data);
static void widget_composited_changed_cb (GtkWidget* widget,
gpointer user_data);
@@ -1078,7 +876,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#if (MOZ_WIDGET_GTK == 3)
static void scale_changed_cb (GtkWidget* widget,
GParamSpec* aPSpec,
-@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+@@ -440,6 +444,7 @@ nsWindow::nsWindow()
mContainer = nullptr;
mGdkWindow = nullptr;
@@ -1086,7 +884,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
mShell = nullptr;
mCompositorWidgetDelegate = nullptr;
mHasMappedToplevel = false;
-@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+@@ -481,6 +486,9 @@ nsWindow::nsWindow()
mLastScrollEventTime = GDK_CURRENT_TIME;
#endif
mPendingConfigures = 0;
@@ -1096,7 +894,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
nsWindow::~nsWindow()
-@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+@@ -1479,8 +1487,8 @@ LayoutDeviceIntRect
nsWindow::GetScreenBounds()
{
LayoutDeviceIntRect rect;
@@ -1107,7 +905,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint x, y;
gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
rect.MoveTo(GdkPointToDevicePixels({ x, y }));
-@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+@@ -1606,6 +1614,10 @@ nsWindow::SetCursor(nsCursor aCursor)
return;
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
@@ -1118,7 +916,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
}
}
-@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+@@ -1662,6 +1674,10 @@ nsWindow::SetCursor(imgIContainer* aCurs
if (cursor) {
if (mContainer) {
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
@@ -1129,7 +927,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
rv = NS_OK;
}
#if (MOZ_WIDGET_GTK == 3)
-@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+@@ -2176,6 +2192,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
return TRUE;
}
@@ -1142,7 +940,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// If this widget uses OMTC...
if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
-@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+@@ -2586,6 +2608,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMo
}
}
#endif /* MOZ_X11 */
@@ -1196,7 +994,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
-@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+@@ -2756,6 +2825,20 @@ nsWindow::OnButtonPressEvent(GdkEventBut
if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
return;
@@ -1217,7 +1015,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gdouble pressure = 0;
gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
mLastMotionPressure = pressure;
-@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+@@ -3341,6 +3424,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *
#endif //ACCESSIBILITY
}
@@ -1226,7 +1024,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeState);
if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+@@ -3405,6 +3490,7 @@ nsWindow::OnCompositedChanged()
presShell->ThemeChanged();
}
}
@@ -1234,7 +1032,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
void
-@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3593,7 +3679,8 @@ nsWindow::Create(nsIWidget* aParent,
GtkWindow *topLevelParent = nullptr;
nsWindow *parentnsWindow = nullptr;
GtkWidget *eventWidget = nullptr;
@@ -1244,7 +1042,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (aParent) {
parentnsWindow = static_cast<nsWindow*>(aParent);
-@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3640,29 +3727,47 @@ nsWindow::Create(nsIWidget* aParent,
GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
mShell = gtk_window_new(type);
@@ -1303,7 +1101,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
// We only move a general managed toplevel window if someone has
-@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3756,24 +3861,56 @@ nsWindow::Create(nsIWidget* aParent,
mContainer = MOZ_CONTAINER(container);
#if (MOZ_WIDGET_GTK == 3)
@@ -1321,6 +1119,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
- gtk_widget_set_has_window(container, FALSE);
- // Prevent GtkWindow from painting a background to flicker.
- gtk_widget_set_app_paintable(mShell, TRUE);
+- }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
+ /* There are tree possible situations here:
+ *
+ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
@@ -1349,9 +1150,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
+
+ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+ drawToContainer = gtk_style_context_has_class(style, "csd");
- }
-- // Set up event widget
-- eventWidget = shellHasCSD ? container : mShell;
++ }
+#endif
+ drawWidget = (drawToContainer) ? container : mShell;
+ // When we draw decorations on our own we need to handle resize events
@@ -1376,7 +1175,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_container_add(GTK_CONTAINER(mShell), container);
gtk_widget_realize(container);
-@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3783,7 +3920,7 @@ nsWindow::Create(nsIWidget* aParent,
gtk_widget_grab_focus(container);
// the drawing window
@@ -1385,7 +1184,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWindowType == eWindowType_popup) {
// gdk does not automatically set the cursor for "temporary"
-@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3856,6 +3993,11 @@ nsWindow::Create(nsIWidget* aParent,
// label the drawing window with this object so we can find our way home
g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
@@ -1397,7 +1196,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mContainer)
g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
-@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3893,6 +4035,10 @@ nsWindow::Create(nsIWidget* aParent,
g_signal_connect_after(default_settings,
"notify::gtk-font-name",
G_CALLBACK(theme_changed_cb), this);
@@ -1408,7 +1207,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
if (mContainer) {
-@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3943,7 +4089,7 @@ nsWindow::Create(nsIWidget* aParent,
G_CALLBACK(drag_data_received_event_cb), nullptr);
GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
@@ -1417,7 +1216,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
// Visibility events are sent to the owning widget of the relevant
// window but do not propagate to parent widgets so connect on
-@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3973,7 +4119,6 @@ nsWindow::Create(nsIWidget* aParent,
// Don't let GTK mess with the shapes of our GdkWindows
GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
#endif
@@ -1425,7 +1224,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// These events are sent to the owning widget of the relevant window
// and propagate up to the first widget that handles the events, so we
// need only connect on mShell, if it exists, to catch events on its
-@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+@@ -4110,6 +4255,12 @@ nsWindow::NativeResize()
size.width, size.height));
if (mIsTopLevel) {
@@ -1438,7 +1237,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
else if (mContainer) {
-@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+@@ -4166,6 +4317,11 @@ nsWindow::NativeMoveResize()
if (mIsTopLevel) {
// x and y give the position of the window manager frame top-left.
gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
@@ -1450,7 +1249,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// This sets the client window size.
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
-@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+@@ -5524,6 +5680,33 @@ expose_event_cb(GtkWidget *widget, cairo
return FALSE;
}
@@ -1484,7 +1283,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif //MOZ_WIDGET_GTK == 2
static gboolean
-@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+@@ -6576,6 +6759,28 @@ nsWindow::ClearCachedResources()
}
}
@@ -1513,7 +1312,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint
nsWindow::GdkScaleFactor()
{
-@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+@@ -6846,6 +7051,157 @@ nsWindow::SynthesizeNativeTouchPoint(uin
}
#endif
@@ -1671,10 +1470,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
-index f7c07d57491b..d9a07316a52c 100644
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
+diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
+--- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1764,3 +1562,183 @@ index f7c07d57491b..d9a07316a52c 100644
};
#endif /* __nsWindow_h__ */
+diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType a
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
+--- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
commit b58833c2c841294c7300f32d7ac6a5447dedfab2
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:57:51 2017 +0200
Removed unused sources
diff --git a/sources b/sources
index c3e37bf..43ea395 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,2 @@
-SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
-SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit cd2371798ab1703676aec1a74a41ca64335af050
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:42:56 2017 +0200
Updated to 57.0 Beta 6
diff --git a/.gitignore b/.gitignore
index 5394cf0..3f1c795 100644
--- a/.gitignore
+++ b/.gitignore
@@ -251,3 +251,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-56.0-20170927.tar.xz
/firefox-57.0b5.source.tar.xz
/firefox-langpacks-57.0b5-20171005.tar.xz
+/firefox-57.0b6.source.tar.xz
+/firefox-langpacks-57.0b6-20171009.tar.xz
diff --git a/firefox.spec b/firefox.spec
index ecd2015..c103013 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b5
+%define pre_version b6
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.1%{?pre_tag}%{?dist}
+Release: 0.2%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -855,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
+- Updated to 57.0 Beta 6
+
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
- Added patch for mozbz#1399611 - CSD emulation
diff --git a/sources b/sources
index cb71924..c3e37bf 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,4 @@
SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
+SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
+SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit 1ae49b3a70a6a75888417b1d9a7a4699efeb5a98
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 21:00:47 2017 +0200
Added patch for mozbz#1399611 - CSD emulation
diff --git a/firefox.spec b/firefox.spec
index 5d86c4b..ecd2015 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -156,6 +156,7 @@ Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
Patch415: mozilla-1405267.patch
+Patch416: mozilla-1399611.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -313,8 +314,6 @@ This package contains results of tests executed during build.
%patch3 -p1 -b .arm
-# For branding specific patches.
-
# Fedora patches
%patch215 -p1 -b .addons
%patch219 -p2 -b .rhbz-1173156
@@ -337,6 +336,7 @@ This package contains results of tests executed during build.
%patch413 -p1 -b .1353817
%patch415 -p1 -b .1405267
+%patch416 -p1 -b .1399611
# Debian extension patch
%patch500 -p1 -b .440908
@@ -857,6 +857,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
+- Added patch for mozbz#1399611 - CSD emulation
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
new file mode 100644
index 0000000..b30ae02
--- /dev/null
+++ b/mozilla-1399611.patch
@@ -0,0 +1,1766 @@
+diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+index de61ac442b74..be15873ee2c4 100644
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+ pref("browser.tabs.loadBookmarksInBackground", false);
+ pref("browser.tabs.loadBookmarksInTabs", false);
+ pref("browser.tabs.tabClipWidth", 140);
+-#ifdef UNIX_BUT_NOT_MAC
+-pref("browser.tabs.drawInTitlebar", false);
+-#else
+ pref("browser.tabs.drawInTitlebar", true);
+-#endif
+
+ // Offer additional drag space to the user. The drag space
+ // will only be shown if browser.tabs.drawInTitlebar is true.
+diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
+index d9509029bbf1..b56f81c0c138 100644
+--- a/browser/base/content/browser-tabsintitlebar.js
++++ b/browser/base/content/browser-tabsintitlebar.js
+@@ -14,6 +14,11 @@ var TabsInTitlebar = {
+ this._readPref();
+ Services.prefs.addObserver(this._prefName, this);
+
++ // Always disable on unsupported GTK versions.
++ if (AppConstants.MOZ_WIDGET_TOOLKIT == "gtk3") {
++ this.allowedBy("gtk", window.matchMedia("(-moz-gtk-csd-available)"));
++ }
++
+ // We need to update the appearance of the titlebar when the menu changes
+ // from the active to the inactive state. We can't, however, rely on
+ // DOMMenuBarInactive, because the menu fires this event and then removes
+diff --git a/browser/base/moz.build b/browser/base/moz.build
+index a2bd4bcb4eca..f14553e4ba7f 100644
+--- a/browser/base/moz.build
++++ b/browser/base/moz.build
+@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
+ DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
+index 65a3f0cca7b1..7bb448da620b 100644
+--- a/browser/themes/linux/browser.css
++++ b/browser/themes/linux/browser.css
+@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
+ color: -moz-menubartext;
+ }
+
++/* Support dragging the window using the toolbar when drawing our own
++ * decorations, or where the GTK theme allows. */
+ #toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
+-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
++#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
++#main-window[tabsintitlebar] #toolbar-menubar:not([autohide="true"]),
++#main-window[tabsintitlebar] #TabsToolbar {
+ -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
+ }
+
+@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+ .restore-tabs-button:hover:active:not([disabled="true"]) {
+ padding: 3px;
+ }
++
++@media not all and (-moz-gtk-csd-available) {
++ #main-window > #titlebar {
++ /* We need to hide the titlebar explicitly on versions of GTK without CSD. */
++ display: none;
++ }
++}
++
++/* Titlebar/CSD */
++@media (-moz-gtk-csd-available) {
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ min-height: calc(var(--tab-min-height) + 12px);
++ }
++
++ #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
++ visibility: hidden;
++ }
++ #main-window[tabsintitlebar] #titlebar-content:-moz-lwtheme {
++ visibility: visible;
++ }
++
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar;
++ }
++ #main-window[tabsintitlebar][sizemode="maximized"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar-maximized;
++ }
++
++ /* The button box must appear on top of the navigator-toolbox in order for
++ * click and hover mouse events to work properly for the button in the restored
++ * window state. Otherwise, elements in the navigator-toolbox, like the menubar,
++ * can swallow those events.
++ */
++ #titlebar-buttonbox {
++ z-index: 1;
++ }
++
++ /* titlebar command buttons */
++ /* Use full scale icons here as the Gtk+ does. */
++ @media (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ list-style-image: url("moz-icon://stock/window-minimize-symbolic");
++ -moz-appearance: -moz-window-button-minimize;
++ }
++ }
++ @media not all and (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-maximize-symbolic");
++ -moz-appearance: -moz-window-button-maximize;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-restore-symbolic");
++ -moz-appearance: -moz-window-button-restore;
++ }
++ }
++ @media not all and (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ display: none;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ list-style-image: url("moz-icon://stock/window-close-symbolic");
++ -moz-appearance: -moz-window-button-close;
++ }
++ }
++ @media not all and (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ display: none;
++ }
++ }
++}
+diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
+index 5d5ec3d405c9..bb2f652c41e0 100644
+--- a/dom/base/nsGkAtomList.h
++++ b/dom/base/nsGkAtomList.h
+@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
+ GK_ATOM(menubar_drag, "menubar-drag")
+ GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
+ GK_ATOM(physical_home_button, "physical-home-button")
++GK_ATOM(gtk_csd_available, "gtk-csd-available")
++GK_ATOM(gtk_csd_minimize_button, "gtk-csd-minimize-button")
++GK_ATOM(gtk_csd_maximize_button, "gtk-csd-maximize-button")
++GK_ATOM(gtk_csd_close_button, "gtk-csd-close-button")
+
+ // windows theme selector metrics
+ GK_ATOM(windows_classic, "windows-classic")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+ GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
+ GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
+ GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
++GK_ATOM(_moz_gtk_csd_available, "-moz-gtk-csd-available")
++GK_ATOM(_moz_gtk_csd_minimize_button, "-moz-gtk-csd-minimize-button")
++GK_ATOM(_moz_gtk_csd_maximize_button, "-moz-gtk-csd-maximize-button")
++GK_ATOM(_moz_gtk_csd_close_button, "-moz-gtk-csd-close-button")
+
+ // application commands
+ GK_ATOM(Back, "Back")
+diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
+index d0ced405095d..1cd2361a0026 100644
+--- a/gfx/src/nsThemeConstants.h
++++ b/gfx/src/nsThemeConstants.h
+@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
+ NS_THEME_MAC_SOURCE_LIST,
+ NS_THEME_MAC_SOURCE_LIST_SELECTION,
+ NS_THEME_MAC_ACTIVE_SOURCE_LIST_SELECTION,
++ NS_THEME_GTK_WINDOW_DECORATION,
+
+ ThemeWidgetType_COUNT
+ };
+diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
+index cbfb4d0f60aa..263372ca868e 100644
+--- a/layout/style/nsCSSRuleProcessor.cpp
++++ b/layout/style/nsCSSRuleProcessor.cpp
+@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
+ sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
+ }
+
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_available);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMinimizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_minimize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMaximizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_maximize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDCloseButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_close_button);
++ }
++
+ #ifdef XP_WIN
+ if (NS_SUCCEEDED(
+ LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
+diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
+index 7cf6a08e46c1..bf955d759e8b 100644
+--- a/layout/style/nsMediaFeatures.cpp
++++ b/layout/style/nsMediaFeatures.cpp
+@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
+ GetSystemMetric
+ },
+
++ {
++ &nsGkAtoms::_moz_gtk_csd_available,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_available },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_minimize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_minimize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_maximize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_maximize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_close_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_close_button },
++ GetSystemMetric
++ },
++
+ // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
+ // Internal because it is really only useful in the user agent anyway
+ // and therefore not worth standardizing.
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index 0b77f1759021..b8dc9aeebfd8 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+ pref("gfx.xrender.enabled",false);
+ pref("widget.chrome.allow-gtk-dark-theme", false);
+ pref("widget.content.allow-gtk-dark-theme", false);
++pref("widget.allow-client-side-decoration", false);
+ #endif
+ #endif
+
+diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
+index 8b5dc9e25d7e..14fb0fe87e9d 100644
+--- a/toolkit/modules/moz.build
++++ b/toolkit/modules/moz.build
+@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
+ ]
+
+ DEFINES['INSTALL_COMPACT_THEMES'] = 1
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
+index ff5da8017621..d31b411a9b1a 100644
+--- a/widget/LookAndFeel.h
++++ b/widget/LookAndFeel.h
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
+diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
+index 39b7893df3bd..4c9e8523b5bf 100644
+--- a/widget/gtk/WidgetStyleCache.cpp
++++ b/widget/gtk/WidgetStyleCache.cpp
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
+index 4c562b380095..ee2b8a04f63f 100644
+--- a/widget/gtk/gtk3drawing.cpp
++++ b/widget/gtk/gtk3drawing.cpp
+@@ -17,6 +17,7 @@
+ #include "WidgetStyleCache.h"
+
+ #include <math.h>
++#include <dlfcn.h>
+
+ static gboolean checkbox_check_state;
+ static gboolean notebook_has_tab_gap;
+@@ -39,9 +40,25 @@ static gint
+ moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state, GtkTextDirection direction);
+
++static void
++moz_gtk_add_style_margin(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_border(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_padding(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle);
+
++
+ // GetStateFlagsFromGtkWidgetState() can be safely used for the specific
+ // GtkWidgets that set both prelight and active flags. For other widgets,
+ // either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
++void
++moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ MOZ_ASSERT(gtk_check_version(3, 20, 0) == nullptr,
++ "Window decorations are only supported on GTK 3.20+.");
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW);
++
++ *top = *right = *bottom = *left = 0;
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ GtkBorder windowMargin;
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &windowMargin);
++
++ style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION);
++
++ // Available on GTK 3.20+.
++ static auto sGtkRenderBackgroundGetClip =
++ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*))
++ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip");
++
++ GdkRectangle shadowClip;
++ sGtkRenderBackgroundGetClip(style, 0, 0, 0, 0, &shadowClip);
++
++ // Transfer returned inset rectangle to GtkBorder
++ GtkBorder shadowBorder = {
++ static_cast<gint16>(-shadowClip.x), // left
++ static_cast<gint16>(shadowClip.width + shadowClip.x), // right
++ static_cast<gint16>(-shadowClip.y), // top
++ static_cast<gint16>(shadowClip.height + shadowClip.y), // bottom
++ };
++
++ *left += MAX(windowMargin.left, shadowBorder.left);
++ *right += MAX(windowMargin.right, shadowBorder.right);
++ *top += MAX(windowMargin.top, shadowBorder.top);
++ *bottom += MAX(windowMargin.bottom, shadowBorder.bottom);
++}
++
+ static gint
+ moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkTextDirection direction)
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ static gint
++moz_gtk_header_bar_button_paint(cairo_t *cr, GdkRectangle* rect,
++ GtkWidgetState* state,
++ GtkReliefStyle relief, GtkWidget* widget,
++ GtkTextDirection direction)
++{
++ GtkBorder margin;
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &margin);
++
++ rect->x += margin.left;
++ rect->y += margin.top;
++ rect->width -= margin.left + margin.right;
++ rect->height -= margin.top + margin.bottom;
++
++ return moz_gtk_button_paint(cr, rect, state, relief, widget, direction);
++}
++
++static gint
+ moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+ gboolean selected, gboolean inconsistent,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+ return MOZ_GTK_SUCCESS;
+ }
+
++static gint
++moz_gtk_header_bar_paint(WidgetNodeType widgetType,
++ cairo_t *cr, GdkRectangle* rect, GtkWidgetState* state)
++{
++ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
++ GtkStyleContext *style;
++
++ style = GetStyleContext(widgetType, GTK_TEXT_DIR_LTR,
++ state_flags);
++ InsetByMargin(rect, style);
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width,
++ rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++
++ return MOZ_GTK_SUCCESS;
++}
++
++void
++moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ static GtkWidgetState state;
++ moz_gtk_header_bar_paint(MOZ_GTK_HEADER_BAR, cr, rect, &state);
++}
++
++void
++moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ *left = *top = *right = *bottom = 0;
++ moz_gtk_add_border_padding(GetStyleContext(MOZ_GTK_HEADER_BAR),
++ left, top, right, bottom);
++}
++
+ static void
+ moz_gtk_add_style_margin(GtkStyleContext* style,
+ gint* left, gint* top, gint* right, gint* bottom)
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom)
++{
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++}
++
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle)
+ {
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ // XXX: Subtract 1 pixel from the padding to account for the default
+ // padding in forms.css. See bug 1187385.
+ *left = *top = *right = *bottom = -1;
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ *left = *top = *right = *bottom =
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
+-
+ style = GetStyleContext(MOZ_GTK_TREE_HEADER_CELL);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
+ style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+- moz_gtk_add_style_border(style,
+- left, top, right, bottom);
+- moz_gtk_add_style_padding(style,
+- left, top, right, bottom);
++ moz_gtk_add_border_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+
+ return MOZ_GTK_SUCCESS;
+ }
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_margin_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
+
+ /* These widgets have no borders, since they are not containers. */
+ case MOZ_GTK_CHECKBUTTON_LABEL:
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+ return metrics;
+ }
+
++void
++moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ gint top, right, bottom, left;
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++
++ cairo_save(cr);
++ cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
++ cairo_rectangle(cr, rect->x, rect->y, left, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x+rect->width-right, rect->y, right, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->y, rect->width, top);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->height-bottom, rect->width, bottom);
++ cairo_fill(cr);
++ cairo_restore(cr);
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION,
++ GTK_TEXT_DIR_NONE);
++ rect->x += left;
++ rect->y += top;
++ rect->width -= left + right;
++ rect->height -= top + bottom;
++
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++}
++
++
+ /* cairo_t *cr argument has to be a system-cairo. */
+ gint
+ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ GetWidget(MOZ_GTK_BUTTON),
+ direction);
+ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return moz_gtk_header_bar_button_paint(cr, rect, state,
++ (GtkReliefStyle) flags,
++ GetWidget(widget),
++ direction);
++ break;
+ case MOZ_GTK_CHECKBUTTON:
+ case MOZ_GTK_RADIOBUTTON:
+ return moz_gtk_toggle_paint(cr, rect, state,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ case MOZ_GTK_INFO_BAR:
+ return moz_gtk_info_bar_paint(cr, rect, state);
+ break;
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return moz_gtk_header_bar_paint(widget, cr, rect, state);
++ break;
+ default:
+ g_warning("Unknown widget type: %d", widget);
+ }
+diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
+index 42dbf8287499..c0a7eba5006a 100644
+--- a/widget/gtk/gtkdrawing.h
++++ b/widget/gtk/gtkdrawing.h
+@@ -268,8 +268,14 @@ typedef enum {
+ MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
+ /* Paints the background of a window, dialog or page. */
+ MOZ_GTK_WINDOW,
++ /* Used only as a container for MOZ_GTK_HEADER_BAR_MAXIMIZED. */
++ MOZ_GTK_WINDOW_MAXIMIZED,
+ /* Window container for all widgets */
+ MOZ_GTK_WINDOW_CONTAINER,
++ /* Window with the 'csd' style class. */
++ MOZ_GTK_WINDOW_CSD,
++ /* Client-side window decoration node. Available on GTK 3.20+. */
++ MOZ_GTK_WINDOW_DECORATION,
+ /* Paints a GtkInfoBar, for notifications. */
+ MOZ_GTK_INFO_BAR,
+ /* Used for widget tree construction. */
+@@ -290,6 +296,14 @@ typedef enum {
+ MOZ_GTK_COMBOBOX_ENTRY_ARROW,
+ /* Used for scrolled window shell. */
+ MOZ_GTK_SCROLLED_WINDOW,
++ /* Paints a GtkHeaderBar */
++ MOZ_GTK_HEADER_BAR,
++ /* Paints a GtkHeaderBar in maximized state */
++ MOZ_GTK_HEADER_BAR_MAXIMIZED,
++ /* Paints a GtkHeaderBar title buttons */
++ MOZ_GTK_HEADER_BAR_BUTTON_CLOSE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE,
+
+ MOZ_GTK_WIDGET_NODE_COUNT
+ } WidgetNodeType;
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+ */
+ gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
+
++#if (MOZ_WIDGET_GTK == 3)
++/**
++ * Gets the margins to be used for window decorations, typically the extra space
++ * required to draw a drop shadow (obtained from gtk_render_background_get_clip).
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window decorations, typically a shadow.
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect);
++
++/**
++ * Gets the border of window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect);
++
++#endif
++
+ /**
+ * Get the YTHICKNESS of a tab (notebook extension).
+ */
+diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
+index 7285b7f001ac..6e554c7f628e 100644
+--- a/widget/gtk/mozgtk/mozgtk.c
++++ b/widget/gtk/mozgtk/mozgtk.c
+@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
+ STUB(gtk_style_properties_lookup_property)
+ STUB(gtk_tree_view_column_get_button)
+ STUB(gtk_widget_get_preferred_size)
++STUB(gtk_widget_get_preferred_width)
++STUB(gtk_widget_get_preferred_height)
+ STUB(gtk_widget_get_state_flags)
+ STUB(gtk_widget_get_style_context)
+ STUB(gtk_widget_path_append_type)
+@@ -589,6 +591,10 @@ STUB(gtk_widget_path_iter_add_class)
+ STUB(gtk_widget_path_get_object_type)
+ STUB(gtk_widget_path_new)
+ STUB(gtk_widget_path_unref)
++STUB(gtk_widget_set_margin_left)
++STUB(gtk_widget_set_margin_right)
++STUB(gtk_widget_set_margin_top)
++STUB(gtk_widget_set_margin_bottom)
+ STUB(gtk_widget_set_visual)
+ STUB(gtk_app_chooser_dialog_new_for_content_type)
+ STUB(gtk_app_chooser_get_type)
+@@ -601,6 +607,7 @@ STUB(gtk_color_chooser_get_type)
+ STUB(gtk_color_chooser_set_rgba)
+ STUB(gtk_color_chooser_get_rgba)
+ STUB(gtk_color_chooser_set_use_alpha)
++STUB(gtk_window_get_size)
+ #endif
+
+ #ifdef GTK2_SYMBOLS
+diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
+index e02bf10fe87f..a5950ac35799 100644
+--- a/widget/gtk/nsLookAndFeel.cpp
++++ b/widget/gtk/nsLookAndFeel.cpp
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+ case eIntID_ContextMenuOffsetHorizontal:
+ aResult = 2;
+ break;
++ case eIntID_GTKCSDAvailable:
++ EnsureInit();
++ aResult = sCSDAvailable;
++ break;
++ case eIntID_GTKCSDMaximizeButton:
++ EnsureInit();
++ aResult = sCSDMaximizeButton;
++ break;
++ case eIntID_GTKCSDMinimizeButton:
++ EnsureInit();
++ aResult = sCSDMinimizeButton;
++ break;
++ case eIntID_GTKCSDCloseButton:
++ EnsureInit();
++ aResult = sCSDCloseButton;
++ break;
+ default:
+ aResult = 0;
+ res = NS_ERROR_FAILURE;
+@@ -1048,6 +1064,40 @@ nsLookAndFeel::EnsureInit()
+
+ gtk_widget_destroy(window);
+ g_object_unref(labelWidget);
++
++ // Require GTK 3.20 for client-side decoration support.
++ // 3.20 exposes gtk_render_background_get_clip, which is required for
++ // calculating shadow metrics for decorated windows.
++ sCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
++ if (sCSDAvailable) {
++ sCSDAvailable =
++ mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
++ false);
++ }
++
++ const gchar* decorationLayout = nullptr;
++ if (gtk_check_version(3, 12, 0) == nullptr) {
++ static auto sGtkHeaderBarGetDecorationLayoutPtr =
++ (const gchar* (*)(GtkWidget*))
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
++
++ GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
++ decorationLayout = sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
++ if (!decorationLayout) {
++ g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
++ nullptr);
++ }
++ }
++
++ if (decorationLayout) {
++ sCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
++ sCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
++ sCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
++ } else {
++ sCSDCloseButton = true;
++ sCSDMaximizeButton = true;
++ sCSDMinimizeButton = true;
++ }
+ }
+
+ // virtual
+diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
+index 177d069f6567..6e14236e604a 100644
+--- a/widget/gtk/nsLookAndFeel.h
++++ b/widget/gtk/nsLookAndFeel.h
+@@ -32,6 +32,8 @@ public:
+ virtual char16_t GetPasswordCharacterImpl();
+ virtual bool GetEchoPasswordImpl();
+
++ bool IsCSDAvailable() const { return sCSDAvailable; }
++
+ protected:
+
+ // Cached fonts
+@@ -82,6 +84,10 @@ protected:
+ char16_t sInvisibleCharacter;
+ float sCaretRatio;
+ bool sMenuSupportsDrag;
++ bool sCSDAvailable;
++ bool sCSDMaximizeButton;
++ bool sCSDMinimizeButton;
++ bool sCSDCloseButton;
+ bool mInitialized;
+
+ void EnsureInit();
+diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
+index 211790096a3e..6ed35b97a0d7 100644
+--- a/widget/gtk/nsNativeThemeGTK.cpp
++++ b/widget/gtk/nsNativeThemeGTK.cpp
+@@ -23,6 +23,7 @@
+ #include "nsIDOMHTMLInputElement.h"
+ #include "nsGkAtoms.h"
+ #include "nsAttrValueInlines.h"
++#include "nsWindow.h"
+
+ #include "mozilla/EventStates.h"
+ #include "mozilla/Services.h"
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+ case NS_THEME_GTK_INFO_BAR:
+ aGtkWidgetType = MOZ_GTK_INFO_BAR;
+ break;
++ case NS_THEME_WINDOW_TITLEBAR:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR;
++ break;
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_MAXIMIZED;
++ break;
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_CLOSE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
+ default:
+ return false;
+ }
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+ case NS_THEME_MENULIST:
+ case NS_THEME_TOOLBARBUTTON:
+ case NS_THEME_TREEHEADERCELL:
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
+ {
+ if (aWidgetType == NS_THEME_MENULIST) {
+ // Include the arrow size.
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+ case NS_THEME_DIALOG:
+ #if (MOZ_WIDGET_GTK == 3)
+ case NS_THEME_GTK_INFO_BAR:
++ case NS_THEME_GTK_WINDOW_DECORATION:
+ #endif
+ return !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
+
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ case NS_THEME_WINDOW_TITLEBAR:
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ // GtkHeaderBar is available on GTK 3.10+, which is used for styling
++ // title bars and title buttons.
++ return gtk_check_version(3, 10, 0) == nullptr &&
++ !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
++
+ case NS_THEME_MENULIST_BUTTON:
+ if (aFrame && aFrame->GetWritingMode().IsVertical()) {
+ return false;
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+ #else
+ return eTransparent;
+ #endif
++ case NS_THEME_GTK_WINDOW_DECORATION:
++ {
++ nsWindow* window = static_cast<nsWindow*>(aFrame->GetNearestWidget());
++ if (window)
++ return window->IsComposited() ? eTransparent : eOpaque;
++ return eOpaque;
++ }
+ }
+
+ return eUnknownTransparency;
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+index 37b6aae4c3d0..f0c3343f20ae 100644
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -85,6 +85,7 @@
+ #include "nsIPropertyBag2.h"
+ #include "GLContext.h"
+ #include "gfx2DGlue.h"
++#include "nsLookAndFeel.h"
+
+ #ifdef ACCESSIBILITY
+ #include "mozilla/a11y/Accessible.h"
+@@ -139,6 +140,8 @@ using namespace mozilla::widget;
+
+ #include "mozilla/layers/APZCTreeManager.h"
+
++#include "gtkdrawing.h"
++
+ using namespace mozilla;
+ using namespace mozilla::gfx;
+ using namespace mozilla::widget;
+@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+ #else
+ static gboolean expose_event_cb (GtkWidget *widget,
+ cairo_t *rect);
++static gboolean expose_event_decoration_draw_cb (GtkWidget *widget,
++ cairo_t *cr);
+ #endif
+ static gboolean configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event);
+@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+ gpointer user_data);
+ static void widget_composited_changed_cb (GtkWidget* widget,
+ gpointer user_data);
+-
+ #if (MOZ_WIDGET_GTK == 3)
+ static void scale_changed_cb (GtkWidget* widget,
+ GParamSpec* aPSpec,
+@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+
+ mContainer = nullptr;
+ mGdkWindow = nullptr;
++ mIsCSDEnabled = false;
+ mShell = nullptr;
+ mCompositorWidgetDelegate = nullptr;
+ mHasMappedToplevel = false;
+@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+ mLastScrollEventTime = GDK_CURRENT_TIME;
+ #endif
+ mPendingConfigures = 0;
++ mDrawWindowDecoration = false;
++ mDecorationSize = {0,0,0,0};
++ mCSDSupportLevel = CSD_SUPPORT_UNKNOWN;
+ }
+
+ nsWindow::~nsWindow()
+@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+ nsWindow::GetScreenBounds()
+ {
+ LayoutDeviceIntRect rect;
+- if (mIsTopLevel && mContainer) {
+- // use the point including window decorations
++ if (mIsTopLevel && mContainer && !IsClientDecorated()) {
++ // use the point including default Gtk+ window decorations
+ gint x, y;
+ gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
+ rect.MoveTo(GdkPointToDevicePixels({ x, y }));
+@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+ return;
+
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ newCursor);
++ }
+ }
+ }
+ }
+@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+ if (cursor) {
+ if (mContainer) {
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ cursor);
++ }
+ rv = NS_OK;
+ }
+ #if (MOZ_WIDGET_GTK == 3)
+@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+ return TRUE;
+ }
+
++ // Clip upper part of the mContainer to get visible rounded corners
++ // of GtkHeaderBar which is renderd to mShell.
++ if (mIsCSDEnabled) {
++ ApplyCSDClipping();
++ }
++
+ // If this widget uses OMTC...
+ if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
+ GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
+@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+ }
+ }
+ #endif /* MOZ_X11 */
++ // Client is decorated and we're getting the motion event for mShell
++ // window which draws the CSD decorations around mContainer.
++ if (IsClientDecorated()) {
++ if (aEvent->window == gtk_widget_get_window(mShell)) {
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ nsCursor cursor = eCursor_none;
++ switch (edge) {
++ case GDK_WINDOW_EDGE_NORTH:
++ cursor = eCursor_n_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_WEST:
++ cursor = eCursor_nw_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_EAST:
++ cursor = eCursor_ne_resize;
++ break;
++ case GDK_WINDOW_EDGE_WEST:
++ cursor = eCursor_w_resize;
++ break;
++ case GDK_WINDOW_EDGE_EAST:
++ cursor = eCursor_e_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH:
++ cursor = eCursor_s_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_WEST:
++ cursor = eCursor_sw_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_EAST:
++ cursor = eCursor_se_resize;
++ break;
++ }
++ SetCursor(cursor);
++ return;
++ }
++ }
++ // We're not on resize handle - check if we need to reset cursor back.
++ if (mCursor == eCursor_n_resize || mCursor == eCursor_nw_resize ||
++ mCursor == eCursor_ne_resize || mCursor == eCursor_w_resize ||
++ mCursor == eCursor_e_resize || mCursor == eCursor_s_resize ||
++ mCursor == eCursor_sw_resize || mCursor == eCursor_se_resize) {
++ SetCursor(eCursor_standard);
++ }
++ }
+
+ WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
+
+@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
+ return;
+
++ if (IsClientDecorated() && aEvent->window == gtk_widget_get_window(mShell)) {
++ // Check to see if the event is within our window's resize region
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ gdk_window_begin_resize_drag(gtk_widget_get_window(mShell),
++ edge, aEvent->button,
++ aEvent->x_root, aEvent->y_root,
++ aEvent->time);
++ return;
++ }
++ }
++
+ gdouble pressure = 0;
+ gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
+ mLastMotionPressure = pressure;
+@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+ #endif //ACCESSIBILITY
+ }
+
++ UpdateClientDecorations();
++
+ if (mWidgetListener) {
+ mWidgetListener->SizeModeChanged(mSizeState);
+ if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+ presShell->ThemeChanged();
+ }
+ }
++ UpdateClientDecorations();
+ }
+
+ void
+@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+ GtkWindow *topLevelParent = nullptr;
+ nsWindow *parentnsWindow = nullptr;
+ GtkWidget *eventWidget = nullptr;
+- bool shellHasCSD = false;
++ GtkWidget *drawWidget = nullptr;
++ bool drawToContainer = false;
+
+ if (aParent) {
+ parentnsWindow = static_cast<nsWindow*>(aParent);
+@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+ GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
+ mShell = gtk_window_new(type);
+
+- bool useAlphaVisual = (mWindowType == eWindowType_popup &&
+- aInitData->mSupportTranslucency);
++ bool useAlphaVisual = false;
++#if (MOZ_WIDGET_GTK == 3)
++ // When CSD is available we can emulate it for toplevel windows.
++ // Content is rendered to mContainer and transparent decorations to mShell.
++ if (GetCSDSupportLevel() != CSD_SUPPORT_NONE &&
++ mWindowType == eWindowType_toplevel) {
++ int32_t isCSDAvailable = false;
++ nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &isCSDAvailable);
++ if (NS_SUCCEEDED(rv)) {
++ mIsCSDEnabled = useAlphaVisual = isCSDAvailable;
++ }
++ } else
++#endif
++ if (mWindowType == eWindowType_popup) {
++ useAlphaVisual = aInitData->mSupportTranslucency;
++ }
+
+ // mozilla.widget.use-argb-visuals is a hidden pref defaulting to false
+ // to allow experimentation
+ if (Preferences::GetBool("mozilla.widget.use-argb-visuals", false))
+ useAlphaVisual = true;
+
++ // An ARGB visual is only useful if we are on a compositing
++ // window manager.
++ GdkScreen *screen = gtk_widget_get_screen(mShell);
++ if (useAlphaVisual && !gdk_screen_is_composited(screen)) {
++ useAlphaVisual = false;
++ }
++
+ // We need to select an ARGB visual here instead of in
+ // SetTransparencyMode() because it has to be done before the
+- // widget is realized. An ARGB visual is only useful if we
+- // are on a compositing window manager.
++ // widget is realized.
+ if (useAlphaVisual) {
+- GdkScreen *screen = gtk_widget_get_screen(mShell);
+- if (gdk_screen_is_composited(screen)) {
+ #if (MOZ_WIDGET_GTK == 2)
+- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
+- gtk_widget_set_colormap(mShell, colormap);
++ GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
++ gtk_widget_set_colormap(mShell, colormap);
+ #else
+- GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+- gtk_widget_set_visual(mShell, visual);
++ GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
++ gtk_widget_set_visual(mShell, visual);
+ #endif
+- }
+ }
+
+ // We only move a general managed toplevel window if someone has
+@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+ mContainer = MOZ_CONTAINER(container);
+
+ #if (MOZ_WIDGET_GTK == 3)
+- // "csd" style is set when widget is realized so we need to call
+- // it explicitly now.
+- gtk_widget_realize(mShell);
+-
+- // We can't draw directly to top-level window when client side
+- // decorations are enabled. We use container with GdkWindow instead.
+- GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+- shellHasCSD = gtk_style_context_has_class(style, "csd");
+-#endif
+- if (!shellHasCSD) {
+- // Use mShell's window for drawing and events.
+- gtk_widget_set_has_window(container, FALSE);
+- // Prevent GtkWindow from painting a background to flicker.
+- gtk_widget_set_app_paintable(mShell, TRUE);
++ /* There are tree possible situations here:
++ *
++ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
++ * is rendered to mShell window and we listen Gtk+ events on mShell.
++ * 2) We're running on Gtk+ > 3.20 and window decorations are drawn
++ * by default by Gtk+. Content is rendered to mContainer,
++ * we listen events on mContainer. mShell contains default Gtk+
++ * window decorations rendered by Gtk+.
++ * 3) We're running on Gtk+ > 3.20 and both window decorations and
++ * content is rendered by gecko. We emulate Gtk+ decoration rendering
++ * to mShell and we need to listen Gtk events on both mShell
++ * and mContainer.
++ */
++
++ // When client side decorations are enabled (rendered by us or by Gtk+)
++ // the decoration is rendered to mShell (toplevel) window and
++ // we draw our content to mContainer.
++ if (mIsCSDEnabled) {
++ drawToContainer = true;
++ } else {
++ // mIsCSDEnabled can be disabled by preference so look at actual
++ // toplevel window style to to detect active "csd" style.
++ // The "csd" style is set when widget is realized so we need to call
++ // it explicitly now.
++ gtk_widget_realize(mShell);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
++ drawToContainer = gtk_style_context_has_class(style, "csd");
+ }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
++#endif
++ drawWidget = (drawToContainer) ? container : mShell;
++ // When we draw decorations on our own we need to handle resize events
++ // because Gtk+ does not provide resizers for undecorated windows.
++ // The CSD on mShell borders act as resize handlers
++ // so we need to listen there.
++ eventWidget = (drawToContainer && !mIsCSDEnabled) ? container : mShell;
++
+ gtk_widget_add_events(eventWidget, kEvents);
++ if (eventWidget != drawWidget) {
++ // CSD is rendered by us (not by Gtk+) so we also need to listen
++ // at mShell window for events.
++ gtk_widget_add_events(drawWidget, kEvents);
++ }
++
++ // Prevent GtkWindow from painting a background to flicker.
++ gtk_widget_set_app_paintable(drawWidget, TRUE);
++
++ // gtk_container_add() realizes the child widget so we need to
++ // set it now.
++ gtk_widget_set_has_window(container, drawToContainer);
+
+ gtk_container_add(GTK_CONTAINER(mShell), container);
+ gtk_widget_realize(container);
+@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+ gtk_widget_grab_focus(container);
+
+ // the drawing window
+- mGdkWindow = gtk_widget_get_window(eventWidget);
++ mGdkWindow = gtk_widget_get_window(drawWidget);
+
+ if (mWindowType == eWindowType_popup) {
+ // gdk does not automatically set the cursor for "temporary"
+@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+
+ // label the drawing window with this object so we can find our way home
+ g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
++ if (mIsCSDEnabled) {
++ // label the CSD window with this object so we can find our way home
++ g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
++ "nsWindow", this);
++ }
+
+ if (mContainer)
+ g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
+@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+ g_signal_connect_after(default_settings,
+ "notify::gtk-font-name",
+ G_CALLBACK(theme_changed_cb), this);
++ if (mIsCSDEnabled) {
++ g_signal_connect(G_OBJECT(mShell), "draw",
++ G_CALLBACK(expose_event_decoration_draw_cb), nullptr);
++ }
+ }
+
+ if (mContainer) {
+@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+ G_CALLBACK(drag_data_received_event_cb), nullptr);
+
+ GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
+- !shellHasCSD ? mShell : nullptr };
++ !drawToContainer ? mShell : nullptr };
+ for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
+ // Visibility events are sent to the owning widget of the relevant
+ // window but do not propagate to parent widgets so connect on
+@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+ // Don't let GTK mess with the shapes of our GdkWindows
+ GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
+ #endif
+-
+ // These events are sent to the owning widget of the relevant window
+ // and propagate up to the first widget that handles the events, so we
+ // need only connect on mShell, if it exists, to catch events on its
+@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+ size.width, size.height));
+
+ if (mIsTopLevel) {
++ // When we draw decorations add extra space to draw shadows
++ // around the main window.
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+ else if (mContainer) {
+@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+ if (mIsTopLevel) {
+ // x and y give the position of the window manager frame top-left.
+ gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
++
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ // This sets the client window size.
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+
+ return FALSE;
+ }
++
++/* static */
++gboolean
++expose_event_decoration_draw_cb(GtkWidget *widget, cairo_t *cr)
++{
++ GdkWindow* gdkWindow = gtk_widget_get_window(widget);
++ if (gtk_cairo_should_draw_window(cr, gdkWindow)) {
++ RefPtr<nsWindow> window = get_window_for_gtk_widget(widget);
++ if (!window) {
++ NS_WARNING("Cannot get nsWindow from GtkWidget");
++ }
++ else if (window->IsClientDecorated()) {
++ cairo_save(cr);
++ gtk_cairo_transform_to_window(cr, widget, gdkWindow);
++
++ GdkRectangle rect = {0,0,0,0};
++ gtk_window_get_size(GTK_WINDOW(widget), &rect.width, &rect.height);
++ moz_gtk_window_decoration_paint(cr, &rect);
++
++ rect.height = 40;
++ moz_gtk_header_bar_paint(cr, &rect);
++ cairo_restore(cr);
++ }
++ }
++ return TRUE;
++}
++
+ #endif //MOZ_WIDGET_GTK == 2
+
+ static gboolean
+@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+ }
+ }
+
++NS_IMETHODIMP
++nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins)
++{
++ SetDrawsInTitlebar(aMargins.top == 0);
++ return NS_OK;
++}
++
++void
++nsWindow::SetDrawsInTitlebar(bool aState)
++{
++ if (!mIsCSDEnabled || aState == mDrawWindowDecoration)
++ return;
++
++ if (mShell) {
++ gtk_window_set_decorated(GTK_WINDOW(mShell), !aState);
++ gtk_widget_set_app_paintable(mShell, aState);
++ }
++
++ mDrawWindowDecoration = aState;
++ UpdateClientDecorations();
++}
++
+ gint
+ nsWindow::GdkScaleFactor()
+ {
+@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+ }
+ #endif
+
++bool
++nsWindow::IsClientDecorated() const
++{
++ return mDrawWindowDecoration && mSizeState == nsSizeMode_Normal;
++}
++
++int
++nsWindow::GetClientResizerSize()
++{
++ if (!mShell)
++ return 0;
++
++ // GTK uses a default size of 20px as of 3.20.
++ gint size = 20;
++ gtk_widget_style_get(mShell, "decoration-resize-handle", &size, nullptr);
++
++ return GdkCoordToDevicePixels(size);
++}
++
++nsWindow::CSDSupportLevel
++nsWindow::GetCSDSupportLevel() {
++ if (mCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
++ return mCSDSupportLevel;
++ }
++ // TODO: MATE
++ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
++ if (currentDesktop) {
++ if (strcmp(currentDesktop, "GNOME") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "XFCE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "KDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "LXDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "openbox") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "i3") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ } else {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ }
++ }
++ return mCSDSupportLevel;
++}
++
++void
++nsWindow::UpdateClientDecorations()
++{
++ // When the CSD is not fully supported by window manager (ie. WM is not
++ // expecting that application is going to draw window shadows) we can't
++ // add shadows widths to the window margin. That would lead to completely
++ // opaque black border of the window.
++ if (!mDrawWindowDecoration || GetCSDSupportLevel() != CSD_SUPPORT_FULL)
++ return;
++
++ gint top = 0, right = 0, bottom = 0, left = 0;
++ if (mSizeState == nsSizeMode_Normal) {
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++ }
++
++ static auto sGdkWindowSetShadowWidth =
++ (void (*)(GdkWindow*, gint, gint, gint, gint))
++ dlsym(RTLD_DEFAULT, "gdk_window_set_shadow_width");
++ sGdkWindowSetShadowWidth(gtk_widget_get_window(mShell),
++ left, right, top, bottom);
++
++ mDecorationSize.left = left;
++ mDecorationSize.right = right;
++ mDecorationSize.top = top;
++ mDecorationSize.bottom = bottom;
++
++ // Gtk+ doesn't like when we set mContainer margin bigger than actual
++ // mContainer window size. That happens when we're called early and the
++ // mShell/mContainer is not allocated/resized yet and has default 1x1 size.
++ // Just resize to some minimal value which will be changed
++ // by Gecko soon.
++ GtkAllocation allocation;
++ gtk_widget_get_allocation(GTK_WIDGET(mContainer), &allocation);
++ if (allocation.width < left + right || allocation.height < top + bottom) {
++ gtk_widget_get_preferred_width(GTK_WIDGET(mContainer), nullptr,
++ &allocation.width);
++ gtk_widget_get_preferred_height(GTK_WIDGET(mContainer), nullptr,
++ &allocation.height);
++ allocation.width += left + right + 1;
++ allocation.height += top + bottom + 1;
++ gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
++ }
++
++ gtk_widget_set_margin_left(GTK_WIDGET(mContainer), mDecorationSize.left);
++ gtk_widget_set_margin_right(GTK_WIDGET(mContainer), mDecorationSize.right);
++ gtk_widget_set_margin_top(GTK_WIDGET(mContainer), mDecorationSize.top);
++ gtk_widget_set_margin_bottom(GTK_WIDGET(mContainer), mDecorationSize.bottom);
++}
++
++void
++nsWindow::ApplyCSDClipping()
++{
++ if (IsClientDecorated()) {
++ gint top, right, bottom, left;
++ moz_gtk_get_header_bar_border(&top, &right, &bottom, &left);
++ cairo_rectangle_int_t rect = { 0, top, mBounds.width, mBounds.height};
++ cairo_region_t *region = cairo_region_create_rectangle(&rect);
++ gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
++ cairo_region_destroy(region);
++ } else {
++ gdk_window_shape_combine_region(mGdkWindow, nullptr, 0, 0);
++ }
++}
++
++bool
++nsWindow::CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge)
++{
++ gint scale = GdkScaleFactor();
++ gint left = scale * mDecorationSize.left;
++ gint top = scale * mDecorationSize.top;
++ gint right = scale * mDecorationSize.right;
++ gint bottom = scale * mDecorationSize.bottom;
++
++ int resizerSize = GetClientResizerSize();
++ int topDist = aPoint.y;
++ int leftDist = aPoint.x;
++ int rightDist = mBounds.width - aPoint.x;
++ int bottomDist = mBounds.height - aPoint.y;
++
++ //TODO -> wrong sizes
++
++ if (leftDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_WEST;
++ } else if (rightDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_EAST;
++ } else if (leftDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_WEST;
++ } else if (rightDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_EAST;
++ } else if (topDist <= top) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH;
++ } else if (leftDist <= left) {
++ aOutEdge = GDK_WINDOW_EDGE_WEST;
++ } else if (rightDist <= right) {
++ aOutEdge = GDK_WINDOW_EDGE_EAST;
++ } else if (bottomDist <= bottom) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH;
++ } else {
++ return false;
++ }
++ return true;
++}
++
+ int32_t
+ nsWindow::RoundsWidgetCoordinatesTo()
+ {
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+index f7c07d57491b..d9a07316a52c 100644
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -123,6 +123,7 @@ public:
+ double aHeight,
+ bool aRepaint) override;
+ virtual bool IsEnabled() const override;
++ bool IsComposited() const;
+
+ void SetZIndex(int32_t aZIndex) override;
+ virtual void SetSizeMode(nsSizeMode aMode) override;
+@@ -351,6 +352,9 @@ public:
+ #endif
+ virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
+
++ NS_IMETHOD SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
++ void SetDrawsInTitlebar(bool aState) override;
++
+ // HiDPI scale conversion
+ gint GdkScaleFactor();
+
+@@ -367,6 +371,9 @@ public:
+ LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
+
+ virtual bool WidgetTypeSupportsAcceleration() override;
++
++ // Decorations
++ bool IsClientDecorated() const;
+ protected:
+ virtual ~nsWindow();
+
+@@ -384,6 +391,16 @@ protected:
+
+ virtual void RegisterTouchWindow() override;
+
++ int GetClientResizerSize();
++
++ // Informs the window manager about the size of the shadows surrounding
++ // a client-side decorated window.
++ void UpdateClientDecorations();
++
++ // Returns true if the given point (in device pixels) is within a resizer
++ // region of the window. Only used when drawing decorations client side.
++ bool CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge);
++
+ nsCOMPtr<nsIWidget> mParent;
+ // Is this a toplevel window?
+ bool mIsTopLevel;
+@@ -432,12 +449,12 @@ private:
+ gint* aRootX, gint* aRootY);
+ void ClearCachedResources();
+ nsIWidgetListener* GetListener();
+- bool IsComposited() const;
+-
++ void ApplyCSDClipping();
+
+ GtkWidget *mShell;
+ MozContainer *mContainer;
+ GdkWindow *mGdkWindow;
++ bool mIsCSDEnabled;
+ PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
+
+
+@@ -536,6 +553,10 @@ private:
+ // leaving fullscreen
+ nsSizeMode mLastSizeMode;
+
++ // If true, draw our own window decorations (where supported).
++ bool mDrawWindowDecoration;
++ GtkBorder mDecorationSize;
++
+ static bool DragInProgress(void);
+
+ void DispatchMissedButtonReleases(GdkEventCrossing *aGdkEvent);
+@@ -567,6 +588,17 @@ private:
+ RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
+
+ mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
++ typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
++ CSD_SUPPORT_FLAT, // CSD without shadows
++ CSD_SUPPORT_NONE, // WM does not support CSD at all
++ CSD_SUPPORT_UNKNOWN
++ } CSDSupportLevel;
++ /**
++ * Get the support of Client Side Decoration by checking
++ * the XDG_CURRENT_DESKTOP environment variable.
++ */
++ CSDSupportLevel GetCSDSupportLevel();
++ CSDSupportLevel mCSDSupportLevel;
+ };
+
+ #endif /* __nsWindow_h__ */
commit 92551052f62af4fa782b170d265e13aafabd58b8
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 12:40:42 2017 +0200
Updated to 57.0 Beta 5
diff --git a/.gitignore b/.gitignore
index a40dbb6..5394cf0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -249,3 +249,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-56.0.source.tar.xz
/firefox-langpacks-56.0-20170925.tar.xz
/firefox-langpacks-56.0-20170927.tar.xz
+/firefox-57.0b5.source.tar.xz
+/firefox-langpacks-57.0b5-20171005.tar.xz
diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch
index d6812b6..31bc5ec 100644
--- a/build-jit-atomic-always-lucky.patch
+++ b/build-jit-atomic-always-lucky.patch
@@ -1,19 +1,19 @@
-diff -up firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/AtomicOperations.h
---- firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-07-31 18:20:47.000000000 +0200
-+++ firefox-55.0.2/js/src/jit/AtomicOperations.h 2017-08-29 12:59:52.870926044 +0200
-@@ -348,7 +348,7 @@ AtomicOperations::isLockfree(int32_t siz
- # elif defined(__sh__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
- # else
--# include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
-+# include "jit/none/AtomicOperations-feeling-lucky.h"
- # endif
- #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
- # include "jit/x86-shared/AtomicOperations-x86-shared.h"
-diff -up firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h
---- firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-08-29 14:10:52.665031524 +0200
-+++ firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-08-29 14:09:40.756060235 +0200
-@@ -60,6 +60,14 @@
+diff -up firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/AtomicOperations.h
+--- firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-10-06 12:34:02.338973607 +0200
++++ firefox-57.0b5/js/src/jit/AtomicOperations.h 2017-10-06 12:38:24.632622215 +0200
+@@ -415,7 +415,7 @@ AtomicOperations::isLockfreeJS(int32_t s
+ #elif defined(__s390__) || defined(__s390x__)
+ # include "jit/none/AtomicOperations-feeling-lucky.h"
+ #else
+-# error "No AtomicOperations support provided for this platform"
++# include "jit/none/AtomicOperations-feeling-lucky.h"
+ #endif
+
+ #endif // jit_AtomicOperations_h
+diff -up firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h
+--- firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-10-06 12:34:02.338973607 +0200
+@@ -79,6 +79,14 @@
# define GNUC_COMPATIBLE
#endif
diff --git a/firefox-build-prbool.patch b/firefox-build-prbool.patch
deleted file mode 100644
index 17725af..0000000
--- a/firefox-build-prbool.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff -up firefox-53.0/dom/u2f/U2F.cpp.prbool firefox-53.0/dom/u2f/U2F.cpp
---- firefox-53.0/dom/u2f/U2F.cpp.prbool 2017-04-11 06:15:14.000000000 +0200
-+++ firefox-53.0/dom/u2f/U2F.cpp 2017-04-18 09:19:20.524285200 +0200
-@@ -4,6 +4,7 @@
- * 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 "prtypes.h"
- #include "hasht.h"
- #include "mozilla/dom/CallbackFunction.h"
- #include "mozilla/dom/ContentChild.h"
-diff -up firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool firefox-53.0/security/certverifier/CTLogVerifier.cpp
---- firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool 2017-04-18 09:19:20.524285200 +0200
-+++ firefox-53.0/security/certverifier/CTLogVerifier.cpp 2017-04-18 09:52:34.189402811 +0200
-@@ -9,6 +9,7 @@
- #include <stdint.h>
-
- #include "CTSerialization.h"
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Assertions.h"
-diff -up firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool firefox-53.0/security/certverifier/CTObjectsExtractor.cpp
---- firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool 2017-01-16 17:16:51.000000000 +0100
-+++ firefox-53.0/security/certverifier/CTObjectsExtractor.cpp 2017-04-18 09:19:20.525285196 +0200
-@@ -6,6 +6,7 @@
-
- #include "CTObjectsExtractor.h"
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/Casting.h"
-diff -up firefox-53.0/security/certverifier/OCSPCache.h.prbool firefox-53.0/security/certverifier/OCSPCache.h
---- firefox-53.0/security/certverifier/OCSPCache.h.prbool 2017-04-11 06:15:19.000000000 +0200
-+++ firefox-53.0/security/certverifier/OCSPCache.h 2017-04-18 09:19:20.525285196 +0200
-@@ -25,6 +25,7 @@
- #ifndef mozilla_psm_OCSPCache_h
- #define mozilla_psm_OCSPCache_h
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Mutex.h"
- #include "mozilla/Vector.h"
diff --git a/firefox-mozconfig b/firefox-mozconfig
index f98a89e..6b4cb54 100644
--- a/firefox-mozconfig
+++ b/firefox-mozconfig
@@ -12,9 +12,7 @@ ac_add_options --disable-tests
#ac_add_options --enable-libnotify
ac_add_options --enable-necko-wifi
ac_add_options --enable-startup-notification
-#ac_add_options --disable-cpp-exceptions
ac_add_options --disable-updater
-ac_add_options --enable-url-classifier
ac_add_options --enable-chrome-format=omni
ac_add_options --enable-pulseaudio
ac_add_options --with-system-icu
@@ -22,7 +20,8 @@ ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
ac_add_options --with-google-api-keyfile=../google-api-key
ac_add_options --enable-release
ac_add_options --enable-pie
-ac_add_options --disable-stylo
+# Workaround for mozbz#1341234
+ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
diff --git a/firefox.spec b/firefox.spec
index 1c7028f..5d86c4b 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -1,6 +1,3 @@
-# Use ALSA backend?
-%define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
@@ -64,12 +61,12 @@
%endif
%if %{?system_nss}
-%global nspr_version 4.10.10
+%global nspr_version 4.17.0
# NSS/NSPR quite often ends in build override, so as requirement the version
# we're building against could bring us some broken dependencies from time to time.
#%global nspr_build_version %(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536)
%global nspr_build_version %{nspr_version}
-%global nss_version 3.32.1
+%global nss_version 3.33
#%global nss_build_version %(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536)
%global nss_build_version %{nss_version}
%endif
@@ -80,9 +77,12 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
+%define pre_version b5
+
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
%global langpackdir %{mozappdir}/langpacks
+%global tarballdir %{name}-%{version}%{?pre_version}
%define official_branding 1
%define build_langpacks 1
@@ -98,14 +98,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 56.0
-Release: 4%{?pre_tag}%{?dist}
+Version: 57.0
+Release: 0.1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20170927.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -122,16 +122,13 @@ Patch0: firefox-install-dir.patch
Patch3: mozilla-build-arm.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=814879#c3
Patch18: xulrunner-24.0-jemalloc-ppc.patch
-Patch20: firefox-build-prbool.patch
Patch25: rhbz-1219542-s390-build.patch
Patch26: build-icu-big-endian.patch
Patch27: mozilla-1335250.patch
# Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268
Patch29: build-big-endian.patch
-Patch30: fedora-build.patch
Patch31: build-ppc64-s390x-curl.patch
Patch32: build-rust-ppc64le.patch
-Patch34: build-cubeb-pulse-arm.patch
Patch35: build-ppc-jit.patch
Patch36: build-missing-xlocale-h.patch
# Always feel lucky for unsupported platforms:
@@ -149,7 +146,6 @@ Patch225: mozilla-1005640-accept-lang.patch
#ARM run-time patch
Patch226: rhbz-1354671.patch
Patch229: firefox-nss-version.patch
-Patch230: rhbz-1497932.patch
# Upstream patches
Patch402: mozilla-1196777.patch
@@ -159,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch414: mozilla-1341234.patch
Patch415: mozilla-1405267.patch
# Debian patches
@@ -192,9 +187,6 @@ BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(hunspell)
%endif
BuildRequires: pkgconfig(libstartup-notification-1.0)
-%if %{?alsa_backend}
-BuildRequires: pkgconfig(alsa)
-%endif
BuildRequires: pkgconfig(libnotify) >= %{libnotify_version}
BuildRequires: pkgconfig(dri)
BuildRequires: pkgconfig(libcurl)
@@ -299,7 +291,7 @@ This package contains results of tests executed during build.
#---------------------------------------------------------------------
%prep
-%setup -q
+%setup -q -n %{tarballdir}
# Build patches, can't change backup suffix from default because during build
# there is a compare of config and js/config directories and .orig suffix is
@@ -308,15 +300,12 @@ This package contains results of tests executed during build.
%patch18 -p1 -b .jemalloc-ppc
-%patch20 -p1 -b .prbool
%ifarch s390
%patch25 -p1 -b .rhbz-1219542-s390
%endif
%patch29 -p1 -b .big-endian
-%patch30 -p1 -b .fedora-build
%patch31 -p1 -b .ppc64-s390x-curl
%patch32 -p1 -b .rust-ppc64le
-# don't need that %patch34 -p1 -b .cubeb-pulse-arm
%ifarch ppc ppc64 ppc64le
%patch35 -p1 -b .ppc-jit
%endif
@@ -336,7 +325,6 @@ This package contains results of tests executed during build.
%ifarch aarch64
%patch226 -p1 -b .1354671
%endif
-%patch230 -p1 -b .1497932
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
@@ -346,8 +334,8 @@ This package contains results of tests executed during build.
%patch412 -p1 -b .1337988
%endif
%endif
+
%patch413 -p1 -b .1353817
-%patch414 -p1 -b .1341234
%patch415 -p1 -b .1405267
# Debian extension patch
@@ -395,10 +383,6 @@ echo "ac_add_options --enable-system-ffi" >> .mozconfig
echo "ac_add_options --disable-elf-hack" >> .mozconfig
%endif
-%if %{?alsa_backend}
-echo "ac_add_options --enable-alsa" >> .mozconfig
-%endif
-
%if %{?system_hunspell}
echo "ac_add_options --enable-system-hunspell" >> .mozconfig
%else
@@ -871,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
+- Updated to 57.0 Beta 5
+
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
because of unresolved symbols
diff --git a/mozilla-1341234.patch b/mozilla-1341234.patch
deleted file mode 100644
index 2de5080..0000000
--- a/mozilla-1341234.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -up firefox-56.0/layout/style/bindgen.toml.in.old firefox-56.0/layout/style/bindgen.toml.in
---- firefox-56.0/layout/style/bindgen.toml.in.old 2017-09-27 16:30:14.518213900 +0200
-+++ firefox-56.0/layout/style/bindgen.toml.in 2017-09-27 16:30:38.089179153 +0200
-@@ -1,4 +1,5 @@
- [build]
- args = [
-+ "/usr/include",
- @BINDGEN_CFLAGS@
- ]
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
index 27fb5ea..46c7f1e 100644
--- a/mozilla-1405267.patch
+++ b/mozilla-1405267.patch
@@ -1,7 +1,7 @@
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-14 22:16:02.000000000 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:16:58.512697973 +0200
-@@ -96,6 +96,7 @@ STUB(gdk_window_get_update_area)
+diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
+@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
STUB(gdk_window_get_user_data)
STUB(gdk_window_get_visual)
STUB(gdk_window_get_width)
@@ -9,9 +9,9 @@ diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk
STUB(gdk_window_hide)
STUB(gdk_window_input_shape_combine_region)
STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_display_get_device_manager)
- STUB(gdk_error_trap_pop_ignored)
+@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
STUB(gdk_event_get_source_device)
+ STUB(gdk_screen_get_monitor_workarea)
STUB(gdk_window_get_type)
-STUB(gdk_window_get_window_type)
STUB(gdk_x11_window_get_xid)
diff --git a/rhbz-1497932.patch b/rhbz-1497932.patch
deleted file mode 100644
index d6e7886..0000000
--- a/rhbz-1497932.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-56.0/media/webrtc/trunk/Makefile.old firefox-56.0/media/webrtc/trunk/Makefile
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old 2017-10-04 09:21:56.155553585 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:22:35.562427061 +0200
-@@ -61,7 +61,6 @@ STUB(gdk_screen_get_height_mm)
- STUB(gdk_screen_get_n_monitors)
- STUB(gdk_screen_get_monitor_at_window)
- STUB(gdk_screen_get_monitor_geometry)
--STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_screen_get_monitor_height_mm)
- STUB(gdk_screen_get_number)
- STUB(gdk_screen_get_resolution)
-@@ -550,6 +549,7 @@ STUB(gtk_render_line)
- STUB(gtk_render_option)
- STUB(gtk_render_slider)
- STUB(gtk_scale_new)
-+STUB(gdk_screen_get_monitor_workarea)
- STUB(gtk_scrollbar_new)
- STUB(gtk_style_context_add_class)
- STUB(gtk_style_context_add_region)
diff --git a/sources b/sources
index f078f75..cb71924 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-56.0.source.tar.xz) = 3aeb0ff54e10c83894f61734daa4f0801a1bb499d4667adad9c78520e588eae809d0e4d61e9227206466d62c3b453e2ce9ca8198f59f5354cd1b6804c00f0990
-SHA512 (firefox-langpacks-56.0-20170927.tar.xz) = e74d85410891b6faa388d37043d764a6c01a2c83479d9912aa3d0b23684ed66ca639eb3cdb579cafef6c3156b0d774a66987a605e0f9e25c2d4eed967ef7b627
+SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
+SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
diff --git a/xulrunner-24.0-jemalloc-ppc.patch b/xulrunner-24.0-jemalloc-ppc.patch
index be6f259..840fca2 100644
--- a/xulrunner-24.0-jemalloc-ppc.patch
+++ b/xulrunner-24.0-jemalloc-ppc.patch
@@ -1,7 +1,7 @@
-diff -up firefox-48.0/memory/mozjemalloc/jemalloc.c.jemalloc-ppc firefox-48.0/memory/mozjemalloc/jemalloc.c
---- firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp.jemalloc-ppc 2016-07-26 10:51:46.385434384 +0200
-+++ firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp 2016-07-26 10:53:49.061023106 +0200
-@@ -1090,7 +1090,7 @@ static const bool config_recycle = false
+diff -up firefox-57.0b5/memory/build/mozjemalloc.cpp.old firefox-57.0b5/memory/build/mozjemalloc.cpp
+--- firefox-57.0b5/memory/build/mozjemalloc.cpp.old 2017-10-06 12:00:27.938687498 +0200
++++ firefox-57.0b5/memory/build/mozjemalloc.cpp 2017-10-06 12:02:45.232151309 +0200
+@@ -780,7 +780,7 @@ struct arena_t {
* controlling the malloc behavior are defined as compile-time constants
* for best performance and cannot be altered at runtime.
*/
6 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=fd700ad0ae...
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=84f42722cf....
Change:
+%ifarch %{ix86}
+ExcludeArch: armv7hl
Thanks.
Full change:
============
commit 84f42722cf6ac1d363bf371c7334d257e8ddf5e0
Merge: c69ed95 b1a757c
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 23 20:34:27 2017 +0200
Updated to FF57Beta9
diff --cc firefox.spec
index fe2c132,86fb77f..f755707
--- a/firefox.spec
+++ b/firefox.spec
@@@ -1,10 -1,3 +1,7 @@@
+%if 0%{?fedora} < 26
+ExcludeArch: armv7hl
+%endif
+
- # Use ALSA backend?
- %define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
commit b1a757cbd45f3653b0d54b87a2f7f93145ebfbd0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Thu Oct 19 12:21:55 2017 +0200
Updated to 57.0 Beta 9
diff --git a/.gitignore b/.gitignore
index fe01930..eac0742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -257,3 +257,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b7-20171011.tar.xz
/firefox-57.0b8.source.tar.xz
/firefox-langpacks-57.0b8-20171016.tar.xz
+/firefox-57.0b9.source.tar.xz
+/firefox-langpacks-57.0b9-20171019.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 14f9672..86fb77f 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b8
+%define pre_version b9
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.4%{?pre_tag}%{?dist}
+Release: 0.5%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171019.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 19 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.5
+- Updated to 57.0 Beta 9
+
* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
- Updated to 57.0 Beta 8
diff --git a/sources b/sources
index 5e1ac99..df2fde5 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
-SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
+SHA512 (firefox-57.0b9.source.tar.xz) = 5d09a07ae48198de8d8ada4018afb4c1cfe16d9294bbbd502d3f23915c43496604f19761a409a41a23ec712d622a556b0b6dc9efd186f4528724e52c8305dda1
+SHA512 (firefox-langpacks-57.0b9-20171019.tar.xz) = 07a3182edf634a5151e4c599e9f8a886e286c1e708f5743db10efeeb5526b4aa120153491da926c5bfcd69cb0e683ff83f2637fca53c78b9e256151768c20712
commit 92f600486ea44fde51139f9e30fcdde6c939dcfc
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 12:29:32 2017 +0200
Fixed patch to apply
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index d7d8500..8daa2f2 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,10 +1,10 @@
-diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
---- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
-+++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
-@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
- pref("browser.tabs.loadBookmarksInBackground", false);
+diff -up firefox-57.0b8/browser/app/profile/firefox.js.1399611 firefox-57.0b8/browser/app/profile/firefox.js
+--- firefox-57.0b8/browser/app/profile/firefox.js.1399611 2017-10-16 12:11:45.364240654 +0200
++++ firefox-57.0b8/browser/app/profile/firefox.js 2017-10-16 12:28:03.860720910 +0200
+@@ -457,11 +457,7 @@ pref("browser.tabs.loadBookmarksInBackgr
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
+ pref("browser.tabs.tabMinWidth", 76);
-#ifdef UNIX_BUT_NOT_MAC
-pref("browser.tabs.drawInTitlebar", false);
-#else
@@ -13,9 +13,9 @@ diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/br
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
---- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
-+++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js 2017-10-16 12:11:45.364240654 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -28,9 +28,9 @@ diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 f
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
---- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
-+++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/moz.build.1399611 firefox-57.0b8/browser/base/moz.build
+--- firefox-57.0b8/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b8/browser/base/moz.build 2017-10-16 12:11:45.364240654 +0200
@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -40,9 +40,9 @@ diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/ba
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
---- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
-+++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+diff -up firefox-57.0b8/browser/themes/linux/browser.css.1399611 firefox-57.0b8/browser/themes/linux/browser.css
+--- firefox-57.0b8/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b8/browser/themes/linux/browser.css 2017-10-16 12:11:45.365240651 +0200
@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
#nav-bar,
@@ -140,9 +140,9 @@ diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/
+ }
+ }
+}
-diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
---- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
-+++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 firefox-57.0b8/dom/base/nsGkAtomList.h
+--- firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b8/dom/base/nsGkAtomList.h 2017-10-16 12:11:45.365240651 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -165,9 +165,9 @@ diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/
// application commands
GK_ATOM(Back, "Back")
-diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
---- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
-+++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b8/gfx/src/nsThemeConstants.h
+--- firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b8/gfx/src/nsThemeConstants.h 2017-10-16 12:11:45.365240651 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -176,9 +176,9 @@ diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/sr
ThemeWidgetType_COUNT
};
-diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
---- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp 2017-10-16 12:11:45.365240651 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -210,9 +210,9 @@ diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
---- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b8/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b8/layout/style/nsMediaFeatures.cpp 2017-10-16 12:11:45.366240647 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -256,9 +256,9 @@ diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
---- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
-+++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/modules/libpref/init/all.js.1399611 firefox-57.0b8/modules/libpref/init/all.js
+--- firefox-57.0b8/modules/libpref/init/all.js.1399611 2017-10-12 18:12:09.000000000 +0200
++++ firefox-57.0b8/modules/libpref/init/all.js 2017-10-16 12:11:45.366240647 +0200
@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
@@ -267,9 +267,9 @@ diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modul
#endif
#endif
-diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
---- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/toolkit/modules/moz.build.1399611 firefox-57.0b8/toolkit/modules/moz.build
+--- firefox-57.0b8/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/toolkit/modules/moz.build 2017-10-16 12:11:45.366240647 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -279,9 +279,9 @@ diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
---- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b8/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtk3drawing.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -569,9 +569,9 @@ diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget
default:
g_warning("Unknown widget type: %d", widget);
}
-diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
---- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b8/widget/gtk/gtkdrawing.h
+--- firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtkdrawing.h 2017-10-16 12:11:45.367240644 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -635,9 +635,9 @@ diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gt
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
-+++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c 2017-10-16 12:11:45.367240644 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -666,9 +666,9 @@ diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget
#endif
#ifdef GTK2_SYMBOLS
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
@@ -733,9 +733,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widg
}
// virtual
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.h 2017-10-16 12:11:45.367240644 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -756,9 +756,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget
bool mInitialized;
void EnsureInit();
-diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp 2017-10-16 12:11:45.368240640 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -839,9 +839,9 @@ diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/w
}
return eUnknownTransparency;
-diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
---- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b8/widget/gtk/nsWindow.cpp
+--- firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 2017-10-16 12:11:45.361240666 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1470,9 +1470,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gt
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
---- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.h.1399611 firefox-57.0b8/widget/gtk/nsWindow.h
+--- firefox-57.0b8/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.h 2017-10-16 12:11:45.369240636 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1562,9 +1562,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/
};
#endif /* __nsWindow_h__ */
-diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
---- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -26,10 +26,14 @@ static GtkStyleContext*
GetCssNodeStyleInternal(WidgetNodeType aNodeType);
@@ -1708,9 +1708,9 @@ diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/w
/* Clear already freed arrays */
mozilla::PodArrayZero(sWidgetStorage);
-diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
---- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
-+++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/LookAndFeel.h.1399611 firefox-57.0b8/widget/LookAndFeel.h
+--- firefox-57.0b8/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b8/widget/LookAndFeel.h 2017-10-16 12:11:45.369240636 +0200
@@ -405,6 +405,30 @@ public:
eIntID_PhysicalHomeButton,
commit 29052e77800f8522112525c0b2a2725ef28299a3
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 11:48:47 2017 +0200
Updated to 57.0 Beta 8
diff --git a/.gitignore b/.gitignore
index 3060bc4..fe01930 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,3 +255,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b6-20171009.tar.xz
/firefox-57.0b7.source.tar.xz
/firefox-langpacks-57.0b7-20171011.tar.xz
+/firefox-57.0b8.source.tar.xz
+/firefox-langpacks-57.0b8-20171016.tar.xz
diff --git a/firefox.spec b/firefox.spec
index e619503..14f9672 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b7
+%define pre_version b8
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.3%{?pre_tag}%{?dist}
+Release: 0.4%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
+- Updated to 57.0 Beta 8
+
* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
- Updated to 57.0 Beta 7
diff --git a/sources b/sources
index 3fd62bd..5e1ac99 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
-SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
+SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
+SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
commit 4f71e4765388439a6c2af118be25b5429c3f0c3e
Author: Martin Stransky <stransky(a)redhat.com>
Date: Wed Oct 11 14:23:39 2017 +0200
Updated to 57.0 Beta 7
diff --git a/.gitignore b/.gitignore
index 3f1c795..3060bc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -253,3 +253,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b5-20171005.tar.xz
/firefox-57.0b6.source.tar.xz
/firefox-langpacks-57.0b6-20171009.tar.xz
+/firefox-57.0b7.source.tar.xz
+/firefox-langpacks-57.0b7-20171011.tar.xz
diff --git a/firefox.spec b/firefox.spec
index f839e2e..e619503 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b6
+%define pre_version b7
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.2%{?pre_tag}%{?dist}
+Release: 0.3%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -155,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch415: mozilla-1405267.patch
Patch416: mozilla-1399611.patch
# Debian patches
@@ -335,7 +334,6 @@ This package contains results of tests executed during build.
%endif
%patch413 -p1 -b .1353817
-%patch415 -p1 -b .1405267
%patch416 -p1 -b .1399611
# Debian extension patch
@@ -858,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
+- Updated to 57.0 Beta 7
+
* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
- Updated to 57.0 Beta 6
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
deleted file mode 100644
index 46c7f1e..0000000
--- a/mozilla-1405267.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
-@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
- STUB(gdk_window_get_user_data)
- STUB(gdk_window_get_visual)
- STUB(gdk_window_get_width)
-+STUB(gdk_window_get_window_type)
- STUB(gdk_window_hide)
- STUB(gdk_window_input_shape_combine_region)
- STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
- STUB(gdk_event_get_source_device)
- STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_window_get_type)
--STUB(gdk_window_get_window_type)
- STUB(gdk_x11_window_get_xid)
- STUB(gdk_x11_display_get_type)
- STUB(gdk_wayland_display_get_type)
diff --git a/sources b/sources
index 43ea395..3fd62bd 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
-SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
+SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
+SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
commit fd700ad0ae450c4705017e05db7af709f7ea90f0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 14:49:41 2017 +0200
Disabled stylo on i686
diff --git a/firefox.spec b/firefox.spec
index c103013..f839e2e 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -453,6 +453,9 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
echo "ac_add_options --disable-ion" >> .mozconfig
%endif
+%ifarch %{ix86}
+echo "ac_add_options --disable-stylo" >> .mozconfig
+%endif
#---------------------------------------------------------------------
commit 92eee6224e69e8ca6591b1bafcab7b584cef5583
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 11:08:34 2017 +0200
Updated CSD patch
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index b30ae02..d7d8500 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,8 +1,7 @@
-diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index de61ac442b74..be15873ee2c4 100644
---- a/browser/app/profile/firefox.js
-+++ b/browser/app/profile/firefox.js
-@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
+--- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
++++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
+@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
pref("browser.tabs.loadBookmarksInBackground", false);
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
@@ -14,10 +13,9 @@ index de61ac442b74..be15873ee2c4 100644
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
-index d9509029bbf1..b56f81c0c138 100644
---- a/browser/base/content/browser-tabsintitlebar.js
-+++ b/browser/base/content/browser-tabsintitlebar.js
+diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
++++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -30,11 +28,10 @@ index d9509029bbf1..b56f81c0c138 100644
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff --git a/browser/base/moz.build b/browser/base/moz.build
-index a2bd4bcb4eca..f14553e4ba7f 100644
---- a/browser/base/moz.build
-+++ b/browser/base/moz.build
-@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
+--- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -43,16 +40,12 @@ index a2bd4bcb4eca..f14553e4ba7f 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
-index 65a3f0cca7b1..7bb448da620b 100644
---- a/browser/themes/linux/browser.css
-+++ b/browser/themes/linux/browser.css
-@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
- color: -moz-menubartext;
- }
+diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
+--- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
-+/* Support dragging the window using the toolbar when drawing our own
-+ * decorations, or where the GTK theme allows. */
+ #nav-bar,
#toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
+#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
@@ -61,7 +54,7 @@ index 65a3f0cca7b1..7bb448da620b 100644
-moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
}
-@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+@@ -713,3 +715,85 @@ html|span.ac-emphasize-text-url {
.restore-tabs-button:hover:active:not([disabled="true"]) {
padding: 3px;
}
@@ -147,10 +140,9 @@ index 65a3f0cca7b1..7bb448da620b 100644
+ }
+ }
+}
-diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
-index 5d5ec3d405c9..bb2f652c41e0 100644
---- a/dom/base/nsGkAtomList.h
-+++ b/dom/base/nsGkAtomList.h
+diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
+--- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -162,7 +154,7 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// windows theme selector metrics
GK_ATOM(windows_classic, "windows-classic")
-@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-d
GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
@@ -173,10 +165,9 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// application commands
GK_ATOM(Back, "Back")
-diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
-index d0ced405095d..1cd2361a0026 100644
---- a/gfx/src/nsThemeConstants.h
-+++ b/gfx/src/nsThemeConstants.h
+diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
+--- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -185,10 +176,9 @@ index d0ced405095d..1cd2361a0026 100644
ThemeWidgetType_COUNT
};
-diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
-index cbfb4d0f60aa..263372ca868e 100644
---- a/layout/style/nsCSSRuleProcessor.cpp
-+++ b/layout/style/nsCSSRuleProcessor.cpp
+diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -220,10 +210,9 @@ index cbfb4d0f60aa..263372ca868e 100644
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
-index 7cf6a08e46c1..bf955d759e8b 100644
---- a/layout/style/nsMediaFeatures.cpp
-+++ b/layout/style/nsMediaFeatures.cpp
+diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -267,11 +256,10 @@ index 7cf6a08e46c1..bf955d759e8b 100644
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 0b77f1759021..b8dc9aeebfd8 100644
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
+--- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
++++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
pref("widget.content.allow-gtk-dark-theme", false);
@@ -279,10 +267,9 @@ index 0b77f1759021..b8dc9aeebfd8 100644
#endif
#endif
-diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
-index 8b5dc9e25d7e..14fb0fe87e9d 100644
---- a/toolkit/modules/moz.build
-+++ b/toolkit/modules/moz.build
+diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
+--- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -292,192 +279,9 @@ index 8b5dc9e25d7e..14fb0fe87e9d 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
-index ff5da8017621..d31b411a9b1a 100644
---- a/widget/LookAndFeel.h
-+++ b/widget/LookAndFeel.h
-@@ -405,6 +405,30 @@ public:
- eIntID_PhysicalHomeButton,
-
- /*
-+ * A boolean value indicating whether client-side decorations are
-+ * supported by the user's GTK version.
-+ */
-+ eIntID_GTKCSDAvailable,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a minimize button.
-+ */
-+ eIntID_GTKCSDMinimizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a maximize button.
-+ */
-+ eIntID_GTKCSDMaximizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a close button.
-+ */
-+ eIntID_GTKCSDCloseButton,
-+
-+ /*
- * Controls whether overlay scrollbars display when the user moves
- * the mouse in a scrollable frame.
- */
-diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
-index 39b7893df3bd..4c9e8523b5bf 100644
---- a/widget/gtk/WidgetStyleCache.cpp
-+++ b/widget/gtk/WidgetStyleCache.cpp
-@@ -26,10 +26,14 @@ static GtkStyleContext*
- GetCssNodeStyleInternal(WidgetNodeType aNodeType);
-
- static GtkWidget*
--CreateWindowWidget()
-+CreateWindowWidget(WidgetNodeType type)
- {
- GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_widget_set_name(widget, "MozillaGtkWidget");
-+ if (type == MOZ_GTK_WINDOW_CSD) {
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, "csd");
-+ }
- return widget;
- }
-
-@@ -101,7 +105,7 @@ CreateTooltipWidget()
- {
- MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
- "CreateTooltipWidget should be used for Gtk < 3.20 only.");
-- GtkWidget* widget = CreateWindowWidget();
-+ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
- GtkStyleContext* style = gtk_widget_get_style_context(widget);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
- return widget;
-@@ -529,11 +533,82 @@ CreateNotebookWidget()
- }
-
- static GtkWidget*
-+CreateHeaderBar(bool aMaximized)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
-+ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
-+
-+ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
-+ if (aMaximized) {
-+ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
-+ GtkStyleContext* style = gtk_widget_get_style_context(window);
-+ gtk_style_context_add_class(style, "maximized");
-+ GtkWidget *fixed = gtk_fixed_new();
-+ gtk_container_add(GTK_CONTAINER(window), fixed);
-+ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
-+ // Save the window container so we don't leak it.
-+ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
-+ } else {
-+ AddToWindowContainer(headerbar);
-+ }
-+
-+ // Emulate what create_titlebar() at gtkwindow.c does.
-+ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
-+ gtk_style_context_add_class(style, "default-decoration");
-+
-+ return headerbar;
-+}
-+
-+// TODO - Also return style for buttons located at Maximized toolbar.
-+static GtkWidget*
-+CreateHeaderBarButton(WidgetNodeType aWidgetType)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
-+
-+ GtkWidget* widget = gtk_button_new();
-+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
-+
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
-+
-+ switch (aWidgetType) {
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ gtk_style_context_add_class(style, "close");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ gtk_style_context_add_class(style, "minimize");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ gtk_style_context_add_class(style, "maximize");
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return widget;
-+}
-+
-+static GtkWidget*
- CreateWidget(WidgetNodeType aWidgetType)
- {
- switch (aWidgetType) {
- case MOZ_GTK_WINDOW:
-- return CreateWindowWidget();
-+ case MOZ_GTK_WINDOW_CSD:
-+ return CreateWindowWidget(aWidgetType);
- case MOZ_GTK_WINDOW_CONTAINER:
- return CreateWindowContainerWidget();
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
-@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
- return CreateComboBoxEntryButtonWidget();
- case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
- return CreateComboBoxEntryArrowWidget();
-+ case MOZ_GTK_HEADER_BAR:
-+ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
-+ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ return CreateHeaderBarButton(aWidgetType);
- default:
- /* Not implemented */
- return nullptr;
-@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
- GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
- return gtk_widget_get_style_context(widget);
- }
-+ case MOZ_GTK_WINDOW_DECORATION:
-+ style = CreateChildCSSNode("decoration",
-+ MOZ_GTK_WINDOW_CSD);
-+ break;
- default:
- return GetWidgetRootStyle(aNodeType);
- }
-@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
- /* This will destroy all of our widgets */
- if (sWidgetStorage[MOZ_GTK_WINDOW])
- gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
-+ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
-+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
-
- /* Clear already freed arrays */
- mozilla::PodArrayZero(sWidgetStorage);
-diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
-index 4c562b380095..ee2b8a04f63f 100644
---- a/widget/gtk/gtk3drawing.cpp
-+++ b/widget/gtk/gtk3drawing.cpp
+diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -512,7 +316,7 @@ index 4c562b380095..ee2b8a04f63f 100644
// GetStateFlagsFromGtkWidgetState() can be safely used for the specific
// GtkWidgets that set both prelight and active flags. For other widgets,
// either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
-@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orient
return MOZ_GTK_SUCCESS;
}
@@ -556,7 +360,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static gint
moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
GtkTextDirection direction)
-@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
}
static gint
@@ -581,7 +385,7 @@ index 4c562b380095..ee2b8a04f63f 100644
moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
gboolean selected, gboolean inconsistent,
-@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkR
return MOZ_GTK_SUCCESS;
}
@@ -620,7 +424,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static void
moz_gtk_add_style_margin(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
-@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_pa
moz_gtk_add_style_padding(style, left, top, right, bottom);
}
@@ -635,7 +439,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static GtkBorder
GetMarginBorderPadding(GtkStyleContext* aStyle)
{
-@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType
// XXX: Subtract 1 pixel from the padding to account for the default
// padding in forms.css. See bug 1187385.
*left = *top = *right = *bottom = -1;
@@ -645,7 +449,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
-@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
@@ -657,7 +461,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
-@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
@@ -667,7 +471,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* If there is no separator, don't try to count its width. */
separator_width = 0;
-@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType
style = gtk_widget_get_style_context(w);
*left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
@@ -680,7 +484,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_MENUPOPUP:
-@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType
return MOZ_GTK_SUCCESS;
}
@@ -702,7 +506,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* These widgets have no borders, since they are not containers. */
case MOZ_GTK_CHECKBUTTON_LABEL:
-@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrie
return metrics;
}
@@ -739,7 +543,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* cairo_t *cr argument has to be a system-cairo. */
gint
moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
-@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widg
GetWidget(MOZ_GTK_BUTTON),
direction);
break;
@@ -754,7 +558,7 @@ index 4c562b380095..ee2b8a04f63f 100644
case MOZ_GTK_CHECKBUTTON:
case MOZ_GTK_RADIOBUTTON:
return moz_gtk_toggle_paint(cr, rect, state,
-@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widg
case MOZ_GTK_INFO_BAR:
return moz_gtk_info_bar_paint(cr, rect, state);
break;
@@ -765,10 +569,9 @@ index 4c562b380095..ee2b8a04f63f 100644
default:
g_warning("Unknown widget type: %d", widget);
}
-diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
-index 42dbf8287499..c0a7eba5006a 100644
---- a/widget/gtk/gtkdrawing.h
-+++ b/widget/gtk/gtkdrawing.h
+diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
+--- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -799,7 +602,7 @@ index 42dbf8287499..c0a7eba5006a 100644
MOZ_GTK_WIDGET_NODE_COUNT
} WidgetNodeType;
-@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(g
*/
gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
@@ -832,10 +635,9 @@ index 42dbf8287499..c0a7eba5006a 100644
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
-index 7285b7f001ac..6e554c7f628e 100644
---- a/widget/gtk/mozgtk/mozgtk.c
-+++ b/widget/gtk/mozgtk/mozgtk.c
+diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
++++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -864,11 +666,10 @@ index 7285b7f001ac..6e554c7f628e 100644
#endif
#ifdef GTK2_SYMBOLS
-diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
-index e02bf10fe87f..a5950ac35799 100644
---- a/widget/gtk/nsLookAndFeel.cpp
-+++ b/widget/gtk/nsLookAndFeel.cpp
-@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
break;
@@ -932,10 +733,9 @@ index e02bf10fe87f..a5950ac35799 100644
}
// virtual
-diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
-index 177d069f6567..6e14236e604a 100644
---- a/widget/gtk/nsLookAndFeel.h
-+++ b/widget/gtk/nsLookAndFeel.h
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -956,10 +756,9 @@ index 177d069f6567..6e14236e604a 100644
bool mInitialized;
void EnsureInit();
-diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
-index 211790096a3e..6ed35b97a0d7 100644
---- a/widget/gtk/nsNativeThemeGTK.cpp
-+++ b/widget/gtk/nsNativeThemeGTK.cpp
+diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -968,7 +767,7 @@ index 211790096a3e..6ed35b97a0d7 100644
#include "mozilla/EventStates.h"
#include "mozilla/Services.h"
-@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u
case NS_THEME_GTK_INFO_BAR:
aGtkWidgetType = MOZ_GTK_INFO_BAR;
break;
@@ -993,7 +792,7 @@ index 211790096a3e..6ed35b97a0d7 100644
default:
return false;
}
-@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
case NS_THEME_MENULIST:
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_TREEHEADERCELL:
@@ -1004,7 +803,7 @@ index 211790096a3e..6ed35b97a0d7 100644
{
if (aWidgetType == NS_THEME_MENULIST) {
// Include the arrow size.
-@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(ns
case NS_THEME_DIALOG:
#if (MOZ_WIDGET_GTK == 3)
case NS_THEME_GTK_INFO_BAR:
@@ -1026,7 +825,7 @@ index 211790096a3e..6ed35b97a0d7 100644
case NS_THEME_MENULIST_BUTTON:
if (aFrame && aFrame->GetWritingMode().IsVertical()) {
return false;
-@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(
#else
return eTransparent;
#endif
@@ -1040,10 +839,9 @@ index 211790096a3e..6ed35b97a0d7 100644
}
return eUnknownTransparency;
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
-index 37b6aae4c3d0..f0c3343f20ae 100644
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
+diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
+--- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1061,7 +859,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
using namespace mozilla;
using namespace mozilla::gfx;
using namespace mozilla::widget;
-@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+@@ -186,6 +189,8 @@ static gboolean expose_event_cb
#else
static gboolean expose_event_cb (GtkWidget *widget,
cairo_t *rect);
@@ -1070,7 +868,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif
static gboolean configure_event_cb (GtkWidget *widget,
GdkEventConfigure *event);
-@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+@@ -231,7 +236,6 @@ static void screen_composited_change
gpointer user_data);
static void widget_composited_changed_cb (GtkWidget* widget,
gpointer user_data);
@@ -1078,7 +876,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#if (MOZ_WIDGET_GTK == 3)
static void scale_changed_cb (GtkWidget* widget,
GParamSpec* aPSpec,
-@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+@@ -440,6 +444,7 @@ nsWindow::nsWindow()
mContainer = nullptr;
mGdkWindow = nullptr;
@@ -1086,7 +884,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
mShell = nullptr;
mCompositorWidgetDelegate = nullptr;
mHasMappedToplevel = false;
-@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+@@ -481,6 +486,9 @@ nsWindow::nsWindow()
mLastScrollEventTime = GDK_CURRENT_TIME;
#endif
mPendingConfigures = 0;
@@ -1096,7 +894,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
nsWindow::~nsWindow()
-@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+@@ -1479,8 +1487,8 @@ LayoutDeviceIntRect
nsWindow::GetScreenBounds()
{
LayoutDeviceIntRect rect;
@@ -1107,7 +905,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint x, y;
gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
rect.MoveTo(GdkPointToDevicePixels({ x, y }));
-@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+@@ -1606,6 +1614,10 @@ nsWindow::SetCursor(nsCursor aCursor)
return;
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
@@ -1118,7 +916,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
}
}
-@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+@@ -1662,6 +1674,10 @@ nsWindow::SetCursor(imgIContainer* aCurs
if (cursor) {
if (mContainer) {
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
@@ -1129,7 +927,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
rv = NS_OK;
}
#if (MOZ_WIDGET_GTK == 3)
-@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+@@ -2176,6 +2192,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
return TRUE;
}
@@ -1142,7 +940,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// If this widget uses OMTC...
if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
-@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+@@ -2586,6 +2608,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMo
}
}
#endif /* MOZ_X11 */
@@ -1196,7 +994,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
-@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+@@ -2756,6 +2825,20 @@ nsWindow::OnButtonPressEvent(GdkEventBut
if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
return;
@@ -1217,7 +1015,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gdouble pressure = 0;
gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
mLastMotionPressure = pressure;
-@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+@@ -3341,6 +3424,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *
#endif //ACCESSIBILITY
}
@@ -1226,7 +1024,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeState);
if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+@@ -3405,6 +3490,7 @@ nsWindow::OnCompositedChanged()
presShell->ThemeChanged();
}
}
@@ -1234,7 +1032,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
void
-@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3593,7 +3679,8 @@ nsWindow::Create(nsIWidget* aParent,
GtkWindow *topLevelParent = nullptr;
nsWindow *parentnsWindow = nullptr;
GtkWidget *eventWidget = nullptr;
@@ -1244,7 +1042,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (aParent) {
parentnsWindow = static_cast<nsWindow*>(aParent);
-@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3640,29 +3727,47 @@ nsWindow::Create(nsIWidget* aParent,
GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
mShell = gtk_window_new(type);
@@ -1303,7 +1101,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
// We only move a general managed toplevel window if someone has
-@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3756,24 +3861,56 @@ nsWindow::Create(nsIWidget* aParent,
mContainer = MOZ_CONTAINER(container);
#if (MOZ_WIDGET_GTK == 3)
@@ -1321,6 +1119,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
- gtk_widget_set_has_window(container, FALSE);
- // Prevent GtkWindow from painting a background to flicker.
- gtk_widget_set_app_paintable(mShell, TRUE);
+- }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
+ /* There are tree possible situations here:
+ *
+ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
@@ -1349,9 +1150,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
+
+ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+ drawToContainer = gtk_style_context_has_class(style, "csd");
- }
-- // Set up event widget
-- eventWidget = shellHasCSD ? container : mShell;
++ }
+#endif
+ drawWidget = (drawToContainer) ? container : mShell;
+ // When we draw decorations on our own we need to handle resize events
@@ -1376,7 +1175,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_container_add(GTK_CONTAINER(mShell), container);
gtk_widget_realize(container);
-@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3783,7 +3920,7 @@ nsWindow::Create(nsIWidget* aParent,
gtk_widget_grab_focus(container);
// the drawing window
@@ -1385,7 +1184,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWindowType == eWindowType_popup) {
// gdk does not automatically set the cursor for "temporary"
-@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3856,6 +3993,11 @@ nsWindow::Create(nsIWidget* aParent,
// label the drawing window with this object so we can find our way home
g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
@@ -1397,7 +1196,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mContainer)
g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
-@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3893,6 +4035,10 @@ nsWindow::Create(nsIWidget* aParent,
g_signal_connect_after(default_settings,
"notify::gtk-font-name",
G_CALLBACK(theme_changed_cb), this);
@@ -1408,7 +1207,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
if (mContainer) {
-@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3943,7 +4089,7 @@ nsWindow::Create(nsIWidget* aParent,
G_CALLBACK(drag_data_received_event_cb), nullptr);
GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
@@ -1417,7 +1216,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
// Visibility events are sent to the owning widget of the relevant
// window but do not propagate to parent widgets so connect on
-@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3973,7 +4119,6 @@ nsWindow::Create(nsIWidget* aParent,
// Don't let GTK mess with the shapes of our GdkWindows
GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
#endif
@@ -1425,7 +1224,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// These events are sent to the owning widget of the relevant window
// and propagate up to the first widget that handles the events, so we
// need only connect on mShell, if it exists, to catch events on its
-@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+@@ -4110,6 +4255,12 @@ nsWindow::NativeResize()
size.width, size.height));
if (mIsTopLevel) {
@@ -1438,7 +1237,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
else if (mContainer) {
-@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+@@ -4166,6 +4317,11 @@ nsWindow::NativeMoveResize()
if (mIsTopLevel) {
// x and y give the position of the window manager frame top-left.
gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
@@ -1450,7 +1249,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// This sets the client window size.
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
-@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+@@ -5524,6 +5680,33 @@ expose_event_cb(GtkWidget *widget, cairo
return FALSE;
}
@@ -1484,7 +1283,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif //MOZ_WIDGET_GTK == 2
static gboolean
-@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+@@ -6576,6 +6759,28 @@ nsWindow::ClearCachedResources()
}
}
@@ -1513,7 +1312,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint
nsWindow::GdkScaleFactor()
{
-@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+@@ -6846,6 +7051,157 @@ nsWindow::SynthesizeNativeTouchPoint(uin
}
#endif
@@ -1671,10 +1470,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
-index f7c07d57491b..d9a07316a52c 100644
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
+diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
+--- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1764,3 +1562,183 @@ index f7c07d57491b..d9a07316a52c 100644
};
#endif /* __nsWindow_h__ */
+diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType a
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
+--- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
commit b58833c2c841294c7300f32d7ac6a5447dedfab2
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:57:51 2017 +0200
Removed unused sources
diff --git a/sources b/sources
index c3e37bf..43ea395 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,2 @@
-SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
-SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit cd2371798ab1703676aec1a74a41ca64335af050
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:42:56 2017 +0200
Updated to 57.0 Beta 6
diff --git a/.gitignore b/.gitignore
index 5394cf0..3f1c795 100644
--- a/.gitignore
+++ b/.gitignore
@@ -251,3 +251,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-56.0-20170927.tar.xz
/firefox-57.0b5.source.tar.xz
/firefox-langpacks-57.0b5-20171005.tar.xz
+/firefox-57.0b6.source.tar.xz
+/firefox-langpacks-57.0b6-20171009.tar.xz
diff --git a/firefox.spec b/firefox.spec
index ecd2015..c103013 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b5
+%define pre_version b6
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.1%{?pre_tag}%{?dist}
+Release: 0.2%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -855,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
+- Updated to 57.0 Beta 6
+
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
- Added patch for mozbz#1399611 - CSD emulation
diff --git a/sources b/sources
index cb71924..c3e37bf 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,4 @@
SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
+SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
+SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit 1ae49b3a70a6a75888417b1d9a7a4699efeb5a98
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 21:00:47 2017 +0200
Added patch for mozbz#1399611 - CSD emulation
diff --git a/firefox.spec b/firefox.spec
index 5d86c4b..ecd2015 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -156,6 +156,7 @@ Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
Patch415: mozilla-1405267.patch
+Patch416: mozilla-1399611.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -313,8 +314,6 @@ This package contains results of tests executed during build.
%patch3 -p1 -b .arm
-# For branding specific patches.
-
# Fedora patches
%patch215 -p1 -b .addons
%patch219 -p2 -b .rhbz-1173156
@@ -337,6 +336,7 @@ This package contains results of tests executed during build.
%patch413 -p1 -b .1353817
%patch415 -p1 -b .1405267
+%patch416 -p1 -b .1399611
# Debian extension patch
%patch500 -p1 -b .440908
@@ -857,6 +857,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
+- Added patch for mozbz#1399611 - CSD emulation
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
new file mode 100644
index 0000000..b30ae02
--- /dev/null
+++ b/mozilla-1399611.patch
@@ -0,0 +1,1766 @@
+diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+index de61ac442b74..be15873ee2c4 100644
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+ pref("browser.tabs.loadBookmarksInBackground", false);
+ pref("browser.tabs.loadBookmarksInTabs", false);
+ pref("browser.tabs.tabClipWidth", 140);
+-#ifdef UNIX_BUT_NOT_MAC
+-pref("browser.tabs.drawInTitlebar", false);
+-#else
+ pref("browser.tabs.drawInTitlebar", true);
+-#endif
+
+ // Offer additional drag space to the user. The drag space
+ // will only be shown if browser.tabs.drawInTitlebar is true.
+diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
+index d9509029bbf1..b56f81c0c138 100644
+--- a/browser/base/content/browser-tabsintitlebar.js
++++ b/browser/base/content/browser-tabsintitlebar.js
+@@ -14,6 +14,11 @@ var TabsInTitlebar = {
+ this._readPref();
+ Services.prefs.addObserver(this._prefName, this);
+
++ // Always disable on unsupported GTK versions.
++ if (AppConstants.MOZ_WIDGET_TOOLKIT == "gtk3") {
++ this.allowedBy("gtk", window.matchMedia("(-moz-gtk-csd-available)"));
++ }
++
+ // We need to update the appearance of the titlebar when the menu changes
+ // from the active to the inactive state. We can't, however, rely on
+ // DOMMenuBarInactive, because the menu fires this event and then removes
+diff --git a/browser/base/moz.build b/browser/base/moz.build
+index a2bd4bcb4eca..f14553e4ba7f 100644
+--- a/browser/base/moz.build
++++ b/browser/base/moz.build
+@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
+ DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
+index 65a3f0cca7b1..7bb448da620b 100644
+--- a/browser/themes/linux/browser.css
++++ b/browser/themes/linux/browser.css
+@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
+ color: -moz-menubartext;
+ }
+
++/* Support dragging the window using the toolbar when drawing our own
++ * decorations, or where the GTK theme allows. */
+ #toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
+-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
++#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
++#main-window[tabsintitlebar] #toolbar-menubar:not([autohide="true"]),
++#main-window[tabsintitlebar] #TabsToolbar {
+ -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
+ }
+
+@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+ .restore-tabs-button:hover:active:not([disabled="true"]) {
+ padding: 3px;
+ }
++
++@media not all and (-moz-gtk-csd-available) {
++ #main-window > #titlebar {
++ /* We need to hide the titlebar explicitly on versions of GTK without CSD. */
++ display: none;
++ }
++}
++
++/* Titlebar/CSD */
++@media (-moz-gtk-csd-available) {
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ min-height: calc(var(--tab-min-height) + 12px);
++ }
++
++ #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
++ visibility: hidden;
++ }
++ #main-window[tabsintitlebar] #titlebar-content:-moz-lwtheme {
++ visibility: visible;
++ }
++
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar;
++ }
++ #main-window[tabsintitlebar][sizemode="maximized"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar-maximized;
++ }
++
++ /* The button box must appear on top of the navigator-toolbox in order for
++ * click and hover mouse events to work properly for the button in the restored
++ * window state. Otherwise, elements in the navigator-toolbox, like the menubar,
++ * can swallow those events.
++ */
++ #titlebar-buttonbox {
++ z-index: 1;
++ }
++
++ /* titlebar command buttons */
++ /* Use full scale icons here as the Gtk+ does. */
++ @media (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ list-style-image: url("moz-icon://stock/window-minimize-symbolic");
++ -moz-appearance: -moz-window-button-minimize;
++ }
++ }
++ @media not all and (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-maximize-symbolic");
++ -moz-appearance: -moz-window-button-maximize;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-restore-symbolic");
++ -moz-appearance: -moz-window-button-restore;
++ }
++ }
++ @media not all and (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ display: none;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ list-style-image: url("moz-icon://stock/window-close-symbolic");
++ -moz-appearance: -moz-window-button-close;
++ }
++ }
++ @media not all and (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ display: none;
++ }
++ }
++}
+diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
+index 5d5ec3d405c9..bb2f652c41e0 100644
+--- a/dom/base/nsGkAtomList.h
++++ b/dom/base/nsGkAtomList.h
+@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
+ GK_ATOM(menubar_drag, "menubar-drag")
+ GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
+ GK_ATOM(physical_home_button, "physical-home-button")
++GK_ATOM(gtk_csd_available, "gtk-csd-available")
++GK_ATOM(gtk_csd_minimize_button, "gtk-csd-minimize-button")
++GK_ATOM(gtk_csd_maximize_button, "gtk-csd-maximize-button")
++GK_ATOM(gtk_csd_close_button, "gtk-csd-close-button")
+
+ // windows theme selector metrics
+ GK_ATOM(windows_classic, "windows-classic")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+ GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
+ GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
+ GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
++GK_ATOM(_moz_gtk_csd_available, "-moz-gtk-csd-available")
++GK_ATOM(_moz_gtk_csd_minimize_button, "-moz-gtk-csd-minimize-button")
++GK_ATOM(_moz_gtk_csd_maximize_button, "-moz-gtk-csd-maximize-button")
++GK_ATOM(_moz_gtk_csd_close_button, "-moz-gtk-csd-close-button")
+
+ // application commands
+ GK_ATOM(Back, "Back")
+diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
+index d0ced405095d..1cd2361a0026 100644
+--- a/gfx/src/nsThemeConstants.h
++++ b/gfx/src/nsThemeConstants.h
+@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
+ NS_THEME_MAC_SOURCE_LIST,
+ NS_THEME_MAC_SOURCE_LIST_SELECTION,
+ NS_THEME_MAC_ACTIVE_SOURCE_LIST_SELECTION,
++ NS_THEME_GTK_WINDOW_DECORATION,
+
+ ThemeWidgetType_COUNT
+ };
+diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
+index cbfb4d0f60aa..263372ca868e 100644
+--- a/layout/style/nsCSSRuleProcessor.cpp
++++ b/layout/style/nsCSSRuleProcessor.cpp
+@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
+ sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
+ }
+
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_available);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMinimizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_minimize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMaximizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_maximize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDCloseButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_close_button);
++ }
++
+ #ifdef XP_WIN
+ if (NS_SUCCEEDED(
+ LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
+diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
+index 7cf6a08e46c1..bf955d759e8b 100644
+--- a/layout/style/nsMediaFeatures.cpp
++++ b/layout/style/nsMediaFeatures.cpp
+@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
+ GetSystemMetric
+ },
+
++ {
++ &nsGkAtoms::_moz_gtk_csd_available,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_available },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_minimize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_minimize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_maximize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_maximize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_close_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_close_button },
++ GetSystemMetric
++ },
++
+ // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
+ // Internal because it is really only useful in the user agent anyway
+ // and therefore not worth standardizing.
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index 0b77f1759021..b8dc9aeebfd8 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+ pref("gfx.xrender.enabled",false);
+ pref("widget.chrome.allow-gtk-dark-theme", false);
+ pref("widget.content.allow-gtk-dark-theme", false);
++pref("widget.allow-client-side-decoration", false);
+ #endif
+ #endif
+
+diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
+index 8b5dc9e25d7e..14fb0fe87e9d 100644
+--- a/toolkit/modules/moz.build
++++ b/toolkit/modules/moz.build
+@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
+ ]
+
+ DEFINES['INSTALL_COMPACT_THEMES'] = 1
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
+index ff5da8017621..d31b411a9b1a 100644
+--- a/widget/LookAndFeel.h
++++ b/widget/LookAndFeel.h
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
+diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
+index 39b7893df3bd..4c9e8523b5bf 100644
+--- a/widget/gtk/WidgetStyleCache.cpp
++++ b/widget/gtk/WidgetStyleCache.cpp
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
+index 4c562b380095..ee2b8a04f63f 100644
+--- a/widget/gtk/gtk3drawing.cpp
++++ b/widget/gtk/gtk3drawing.cpp
+@@ -17,6 +17,7 @@
+ #include "WidgetStyleCache.h"
+
+ #include <math.h>
++#include <dlfcn.h>
+
+ static gboolean checkbox_check_state;
+ static gboolean notebook_has_tab_gap;
+@@ -39,9 +40,25 @@ static gint
+ moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state, GtkTextDirection direction);
+
++static void
++moz_gtk_add_style_margin(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_border(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_padding(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle);
+
++
+ // GetStateFlagsFromGtkWidgetState() can be safely used for the specific
+ // GtkWidgets that set both prelight and active flags. For other widgets,
+ // either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
++void
++moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ MOZ_ASSERT(gtk_check_version(3, 20, 0) == nullptr,
++ "Window decorations are only supported on GTK 3.20+.");
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW);
++
++ *top = *right = *bottom = *left = 0;
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ GtkBorder windowMargin;
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &windowMargin);
++
++ style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION);
++
++ // Available on GTK 3.20+.
++ static auto sGtkRenderBackgroundGetClip =
++ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*))
++ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip");
++
++ GdkRectangle shadowClip;
++ sGtkRenderBackgroundGetClip(style, 0, 0, 0, 0, &shadowClip);
++
++ // Transfer returned inset rectangle to GtkBorder
++ GtkBorder shadowBorder = {
++ static_cast<gint16>(-shadowClip.x), // left
++ static_cast<gint16>(shadowClip.width + shadowClip.x), // right
++ static_cast<gint16>(-shadowClip.y), // top
++ static_cast<gint16>(shadowClip.height + shadowClip.y), // bottom
++ };
++
++ *left += MAX(windowMargin.left, shadowBorder.left);
++ *right += MAX(windowMargin.right, shadowBorder.right);
++ *top += MAX(windowMargin.top, shadowBorder.top);
++ *bottom += MAX(windowMargin.bottom, shadowBorder.bottom);
++}
++
+ static gint
+ moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkTextDirection direction)
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ static gint
++moz_gtk_header_bar_button_paint(cairo_t *cr, GdkRectangle* rect,
++ GtkWidgetState* state,
++ GtkReliefStyle relief, GtkWidget* widget,
++ GtkTextDirection direction)
++{
++ GtkBorder margin;
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &margin);
++
++ rect->x += margin.left;
++ rect->y += margin.top;
++ rect->width -= margin.left + margin.right;
++ rect->height -= margin.top + margin.bottom;
++
++ return moz_gtk_button_paint(cr, rect, state, relief, widget, direction);
++}
++
++static gint
+ moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+ gboolean selected, gboolean inconsistent,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+ return MOZ_GTK_SUCCESS;
+ }
+
++static gint
++moz_gtk_header_bar_paint(WidgetNodeType widgetType,
++ cairo_t *cr, GdkRectangle* rect, GtkWidgetState* state)
++{
++ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
++ GtkStyleContext *style;
++
++ style = GetStyleContext(widgetType, GTK_TEXT_DIR_LTR,
++ state_flags);
++ InsetByMargin(rect, style);
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width,
++ rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++
++ return MOZ_GTK_SUCCESS;
++}
++
++void
++moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ static GtkWidgetState state;
++ moz_gtk_header_bar_paint(MOZ_GTK_HEADER_BAR, cr, rect, &state);
++}
++
++void
++moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ *left = *top = *right = *bottom = 0;
++ moz_gtk_add_border_padding(GetStyleContext(MOZ_GTK_HEADER_BAR),
++ left, top, right, bottom);
++}
++
+ static void
+ moz_gtk_add_style_margin(GtkStyleContext* style,
+ gint* left, gint* top, gint* right, gint* bottom)
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom)
++{
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++}
++
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle)
+ {
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ // XXX: Subtract 1 pixel from the padding to account for the default
+ // padding in forms.css. See bug 1187385.
+ *left = *top = *right = *bottom = -1;
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ *left = *top = *right = *bottom =
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
+-
+ style = GetStyleContext(MOZ_GTK_TREE_HEADER_CELL);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
+ style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+- moz_gtk_add_style_border(style,
+- left, top, right, bottom);
+- moz_gtk_add_style_padding(style,
+- left, top, right, bottom);
++ moz_gtk_add_border_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+
+ return MOZ_GTK_SUCCESS;
+ }
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_margin_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
+
+ /* These widgets have no borders, since they are not containers. */
+ case MOZ_GTK_CHECKBUTTON_LABEL:
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+ return metrics;
+ }
+
++void
++moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ gint top, right, bottom, left;
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++
++ cairo_save(cr);
++ cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
++ cairo_rectangle(cr, rect->x, rect->y, left, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x+rect->width-right, rect->y, right, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->y, rect->width, top);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->height-bottom, rect->width, bottom);
++ cairo_fill(cr);
++ cairo_restore(cr);
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION,
++ GTK_TEXT_DIR_NONE);
++ rect->x += left;
++ rect->y += top;
++ rect->width -= left + right;
++ rect->height -= top + bottom;
++
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++}
++
++
+ /* cairo_t *cr argument has to be a system-cairo. */
+ gint
+ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ GetWidget(MOZ_GTK_BUTTON),
+ direction);
+ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return moz_gtk_header_bar_button_paint(cr, rect, state,
++ (GtkReliefStyle) flags,
++ GetWidget(widget),
++ direction);
++ break;
+ case MOZ_GTK_CHECKBUTTON:
+ case MOZ_GTK_RADIOBUTTON:
+ return moz_gtk_toggle_paint(cr, rect, state,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ case MOZ_GTK_INFO_BAR:
+ return moz_gtk_info_bar_paint(cr, rect, state);
+ break;
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return moz_gtk_header_bar_paint(widget, cr, rect, state);
++ break;
+ default:
+ g_warning("Unknown widget type: %d", widget);
+ }
+diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
+index 42dbf8287499..c0a7eba5006a 100644
+--- a/widget/gtk/gtkdrawing.h
++++ b/widget/gtk/gtkdrawing.h
+@@ -268,8 +268,14 @@ typedef enum {
+ MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
+ /* Paints the background of a window, dialog or page. */
+ MOZ_GTK_WINDOW,
++ /* Used only as a container for MOZ_GTK_HEADER_BAR_MAXIMIZED. */
++ MOZ_GTK_WINDOW_MAXIMIZED,
+ /* Window container for all widgets */
+ MOZ_GTK_WINDOW_CONTAINER,
++ /* Window with the 'csd' style class. */
++ MOZ_GTK_WINDOW_CSD,
++ /* Client-side window decoration node. Available on GTK 3.20+. */
++ MOZ_GTK_WINDOW_DECORATION,
+ /* Paints a GtkInfoBar, for notifications. */
+ MOZ_GTK_INFO_BAR,
+ /* Used for widget tree construction. */
+@@ -290,6 +296,14 @@ typedef enum {
+ MOZ_GTK_COMBOBOX_ENTRY_ARROW,
+ /* Used for scrolled window shell. */
+ MOZ_GTK_SCROLLED_WINDOW,
++ /* Paints a GtkHeaderBar */
++ MOZ_GTK_HEADER_BAR,
++ /* Paints a GtkHeaderBar in maximized state */
++ MOZ_GTK_HEADER_BAR_MAXIMIZED,
++ /* Paints a GtkHeaderBar title buttons */
++ MOZ_GTK_HEADER_BAR_BUTTON_CLOSE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE,
+
+ MOZ_GTK_WIDGET_NODE_COUNT
+ } WidgetNodeType;
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+ */
+ gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
+
++#if (MOZ_WIDGET_GTK == 3)
++/**
++ * Gets the margins to be used for window decorations, typically the extra space
++ * required to draw a drop shadow (obtained from gtk_render_background_get_clip).
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window decorations, typically a shadow.
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect);
++
++/**
++ * Gets the border of window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect);
++
++#endif
++
+ /**
+ * Get the YTHICKNESS of a tab (notebook extension).
+ */
+diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
+index 7285b7f001ac..6e554c7f628e 100644
+--- a/widget/gtk/mozgtk/mozgtk.c
++++ b/widget/gtk/mozgtk/mozgtk.c
+@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
+ STUB(gtk_style_properties_lookup_property)
+ STUB(gtk_tree_view_column_get_button)
+ STUB(gtk_widget_get_preferred_size)
++STUB(gtk_widget_get_preferred_width)
++STUB(gtk_widget_get_preferred_height)
+ STUB(gtk_widget_get_state_flags)
+ STUB(gtk_widget_get_style_context)
+ STUB(gtk_widget_path_append_type)
+@@ -589,6 +591,10 @@ STUB(gtk_widget_path_iter_add_class)
+ STUB(gtk_widget_path_get_object_type)
+ STUB(gtk_widget_path_new)
+ STUB(gtk_widget_path_unref)
++STUB(gtk_widget_set_margin_left)
++STUB(gtk_widget_set_margin_right)
++STUB(gtk_widget_set_margin_top)
++STUB(gtk_widget_set_margin_bottom)
+ STUB(gtk_widget_set_visual)
+ STUB(gtk_app_chooser_dialog_new_for_content_type)
+ STUB(gtk_app_chooser_get_type)
+@@ -601,6 +607,7 @@ STUB(gtk_color_chooser_get_type)
+ STUB(gtk_color_chooser_set_rgba)
+ STUB(gtk_color_chooser_get_rgba)
+ STUB(gtk_color_chooser_set_use_alpha)
++STUB(gtk_window_get_size)
+ #endif
+
+ #ifdef GTK2_SYMBOLS
+diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
+index e02bf10fe87f..a5950ac35799 100644
+--- a/widget/gtk/nsLookAndFeel.cpp
++++ b/widget/gtk/nsLookAndFeel.cpp
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+ case eIntID_ContextMenuOffsetHorizontal:
+ aResult = 2;
+ break;
++ case eIntID_GTKCSDAvailable:
++ EnsureInit();
++ aResult = sCSDAvailable;
++ break;
++ case eIntID_GTKCSDMaximizeButton:
++ EnsureInit();
++ aResult = sCSDMaximizeButton;
++ break;
++ case eIntID_GTKCSDMinimizeButton:
++ EnsureInit();
++ aResult = sCSDMinimizeButton;
++ break;
++ case eIntID_GTKCSDCloseButton:
++ EnsureInit();
++ aResult = sCSDCloseButton;
++ break;
+ default:
+ aResult = 0;
+ res = NS_ERROR_FAILURE;
+@@ -1048,6 +1064,40 @@ nsLookAndFeel::EnsureInit()
+
+ gtk_widget_destroy(window);
+ g_object_unref(labelWidget);
++
++ // Require GTK 3.20 for client-side decoration support.
++ // 3.20 exposes gtk_render_background_get_clip, which is required for
++ // calculating shadow metrics for decorated windows.
++ sCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
++ if (sCSDAvailable) {
++ sCSDAvailable =
++ mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
++ false);
++ }
++
++ const gchar* decorationLayout = nullptr;
++ if (gtk_check_version(3, 12, 0) == nullptr) {
++ static auto sGtkHeaderBarGetDecorationLayoutPtr =
++ (const gchar* (*)(GtkWidget*))
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
++
++ GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
++ decorationLayout = sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
++ if (!decorationLayout) {
++ g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
++ nullptr);
++ }
++ }
++
++ if (decorationLayout) {
++ sCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
++ sCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
++ sCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
++ } else {
++ sCSDCloseButton = true;
++ sCSDMaximizeButton = true;
++ sCSDMinimizeButton = true;
++ }
+ }
+
+ // virtual
+diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
+index 177d069f6567..6e14236e604a 100644
+--- a/widget/gtk/nsLookAndFeel.h
++++ b/widget/gtk/nsLookAndFeel.h
+@@ -32,6 +32,8 @@ public:
+ virtual char16_t GetPasswordCharacterImpl();
+ virtual bool GetEchoPasswordImpl();
+
++ bool IsCSDAvailable() const { return sCSDAvailable; }
++
+ protected:
+
+ // Cached fonts
+@@ -82,6 +84,10 @@ protected:
+ char16_t sInvisibleCharacter;
+ float sCaretRatio;
+ bool sMenuSupportsDrag;
++ bool sCSDAvailable;
++ bool sCSDMaximizeButton;
++ bool sCSDMinimizeButton;
++ bool sCSDCloseButton;
+ bool mInitialized;
+
+ void EnsureInit();
+diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
+index 211790096a3e..6ed35b97a0d7 100644
+--- a/widget/gtk/nsNativeThemeGTK.cpp
++++ b/widget/gtk/nsNativeThemeGTK.cpp
+@@ -23,6 +23,7 @@
+ #include "nsIDOMHTMLInputElement.h"
+ #include "nsGkAtoms.h"
+ #include "nsAttrValueInlines.h"
++#include "nsWindow.h"
+
+ #include "mozilla/EventStates.h"
+ #include "mozilla/Services.h"
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+ case NS_THEME_GTK_INFO_BAR:
+ aGtkWidgetType = MOZ_GTK_INFO_BAR;
+ break;
++ case NS_THEME_WINDOW_TITLEBAR:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR;
++ break;
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_MAXIMIZED;
++ break;
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_CLOSE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
+ default:
+ return false;
+ }
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+ case NS_THEME_MENULIST:
+ case NS_THEME_TOOLBARBUTTON:
+ case NS_THEME_TREEHEADERCELL:
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
+ {
+ if (aWidgetType == NS_THEME_MENULIST) {
+ // Include the arrow size.
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+ case NS_THEME_DIALOG:
+ #if (MOZ_WIDGET_GTK == 3)
+ case NS_THEME_GTK_INFO_BAR:
++ case NS_THEME_GTK_WINDOW_DECORATION:
+ #endif
+ return !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
+
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ case NS_THEME_WINDOW_TITLEBAR:
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ // GtkHeaderBar is available on GTK 3.10+, which is used for styling
++ // title bars and title buttons.
++ return gtk_check_version(3, 10, 0) == nullptr &&
++ !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
++
+ case NS_THEME_MENULIST_BUTTON:
+ if (aFrame && aFrame->GetWritingMode().IsVertical()) {
+ return false;
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+ #else
+ return eTransparent;
+ #endif
++ case NS_THEME_GTK_WINDOW_DECORATION:
++ {
++ nsWindow* window = static_cast<nsWindow*>(aFrame->GetNearestWidget());
++ if (window)
++ return window->IsComposited() ? eTransparent : eOpaque;
++ return eOpaque;
++ }
+ }
+
+ return eUnknownTransparency;
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+index 37b6aae4c3d0..f0c3343f20ae 100644
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -85,6 +85,7 @@
+ #include "nsIPropertyBag2.h"
+ #include "GLContext.h"
+ #include "gfx2DGlue.h"
++#include "nsLookAndFeel.h"
+
+ #ifdef ACCESSIBILITY
+ #include "mozilla/a11y/Accessible.h"
+@@ -139,6 +140,8 @@ using namespace mozilla::widget;
+
+ #include "mozilla/layers/APZCTreeManager.h"
+
++#include "gtkdrawing.h"
++
+ using namespace mozilla;
+ using namespace mozilla::gfx;
+ using namespace mozilla::widget;
+@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+ #else
+ static gboolean expose_event_cb (GtkWidget *widget,
+ cairo_t *rect);
++static gboolean expose_event_decoration_draw_cb (GtkWidget *widget,
++ cairo_t *cr);
+ #endif
+ static gboolean configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event);
+@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+ gpointer user_data);
+ static void widget_composited_changed_cb (GtkWidget* widget,
+ gpointer user_data);
+-
+ #if (MOZ_WIDGET_GTK == 3)
+ static void scale_changed_cb (GtkWidget* widget,
+ GParamSpec* aPSpec,
+@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+
+ mContainer = nullptr;
+ mGdkWindow = nullptr;
++ mIsCSDEnabled = false;
+ mShell = nullptr;
+ mCompositorWidgetDelegate = nullptr;
+ mHasMappedToplevel = false;
+@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+ mLastScrollEventTime = GDK_CURRENT_TIME;
+ #endif
+ mPendingConfigures = 0;
++ mDrawWindowDecoration = false;
++ mDecorationSize = {0,0,0,0};
++ mCSDSupportLevel = CSD_SUPPORT_UNKNOWN;
+ }
+
+ nsWindow::~nsWindow()
+@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+ nsWindow::GetScreenBounds()
+ {
+ LayoutDeviceIntRect rect;
+- if (mIsTopLevel && mContainer) {
+- // use the point including window decorations
++ if (mIsTopLevel && mContainer && !IsClientDecorated()) {
++ // use the point including default Gtk+ window decorations
+ gint x, y;
+ gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
+ rect.MoveTo(GdkPointToDevicePixels({ x, y }));
+@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+ return;
+
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ newCursor);
++ }
+ }
+ }
+ }
+@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+ if (cursor) {
+ if (mContainer) {
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ cursor);
++ }
+ rv = NS_OK;
+ }
+ #if (MOZ_WIDGET_GTK == 3)
+@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+ return TRUE;
+ }
+
++ // Clip upper part of the mContainer to get visible rounded corners
++ // of GtkHeaderBar which is renderd to mShell.
++ if (mIsCSDEnabled) {
++ ApplyCSDClipping();
++ }
++
+ // If this widget uses OMTC...
+ if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
+ GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
+@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+ }
+ }
+ #endif /* MOZ_X11 */
++ // Client is decorated and we're getting the motion event for mShell
++ // window which draws the CSD decorations around mContainer.
++ if (IsClientDecorated()) {
++ if (aEvent->window == gtk_widget_get_window(mShell)) {
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ nsCursor cursor = eCursor_none;
++ switch (edge) {
++ case GDK_WINDOW_EDGE_NORTH:
++ cursor = eCursor_n_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_WEST:
++ cursor = eCursor_nw_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_EAST:
++ cursor = eCursor_ne_resize;
++ break;
++ case GDK_WINDOW_EDGE_WEST:
++ cursor = eCursor_w_resize;
++ break;
++ case GDK_WINDOW_EDGE_EAST:
++ cursor = eCursor_e_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH:
++ cursor = eCursor_s_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_WEST:
++ cursor = eCursor_sw_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_EAST:
++ cursor = eCursor_se_resize;
++ break;
++ }
++ SetCursor(cursor);
++ return;
++ }
++ }
++ // We're not on resize handle - check if we need to reset cursor back.
++ if (mCursor == eCursor_n_resize || mCursor == eCursor_nw_resize ||
++ mCursor == eCursor_ne_resize || mCursor == eCursor_w_resize ||
++ mCursor == eCursor_e_resize || mCursor == eCursor_s_resize ||
++ mCursor == eCursor_sw_resize || mCursor == eCursor_se_resize) {
++ SetCursor(eCursor_standard);
++ }
++ }
+
+ WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
+
+@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
+ return;
+
++ if (IsClientDecorated() && aEvent->window == gtk_widget_get_window(mShell)) {
++ // Check to see if the event is within our window's resize region
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ gdk_window_begin_resize_drag(gtk_widget_get_window(mShell),
++ edge, aEvent->button,
++ aEvent->x_root, aEvent->y_root,
++ aEvent->time);
++ return;
++ }
++ }
++
+ gdouble pressure = 0;
+ gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
+ mLastMotionPressure = pressure;
+@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+ #endif //ACCESSIBILITY
+ }
+
++ UpdateClientDecorations();
++
+ if (mWidgetListener) {
+ mWidgetListener->SizeModeChanged(mSizeState);
+ if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+ presShell->ThemeChanged();
+ }
+ }
++ UpdateClientDecorations();
+ }
+
+ void
+@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+ GtkWindow *topLevelParent = nullptr;
+ nsWindow *parentnsWindow = nullptr;
+ GtkWidget *eventWidget = nullptr;
+- bool shellHasCSD = false;
++ GtkWidget *drawWidget = nullptr;
++ bool drawToContainer = false;
+
+ if (aParent) {
+ parentnsWindow = static_cast<nsWindow*>(aParent);
+@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+ GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
+ mShell = gtk_window_new(type);
+
+- bool useAlphaVisual = (mWindowType == eWindowType_popup &&
+- aInitData->mSupportTranslucency);
++ bool useAlphaVisual = false;
++#if (MOZ_WIDGET_GTK == 3)
++ // When CSD is available we can emulate it for toplevel windows.
++ // Content is rendered to mContainer and transparent decorations to mShell.
++ if (GetCSDSupportLevel() != CSD_SUPPORT_NONE &&
++ mWindowType == eWindowType_toplevel) {
++ int32_t isCSDAvailable = false;
++ nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &isCSDAvailable);
++ if (NS_SUCCEEDED(rv)) {
++ mIsCSDEnabled = useAlphaVisual = isCSDAvailable;
++ }
++ } else
++#endif
++ if (mWindowType == eWindowType_popup) {
++ useAlphaVisual = aInitData->mSupportTranslucency;
++ }
+
+ // mozilla.widget.use-argb-visuals is a hidden pref defaulting to false
+ // to allow experimentation
+ if (Preferences::GetBool("mozilla.widget.use-argb-visuals", false))
+ useAlphaVisual = true;
+
++ // An ARGB visual is only useful if we are on a compositing
++ // window manager.
++ GdkScreen *screen = gtk_widget_get_screen(mShell);
++ if (useAlphaVisual && !gdk_screen_is_composited(screen)) {
++ useAlphaVisual = false;
++ }
++
+ // We need to select an ARGB visual here instead of in
+ // SetTransparencyMode() because it has to be done before the
+- // widget is realized. An ARGB visual is only useful if we
+- // are on a compositing window manager.
++ // widget is realized.
+ if (useAlphaVisual) {
+- GdkScreen *screen = gtk_widget_get_screen(mShell);
+- if (gdk_screen_is_composited(screen)) {
+ #if (MOZ_WIDGET_GTK == 2)
+- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
+- gtk_widget_set_colormap(mShell, colormap);
++ GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
++ gtk_widget_set_colormap(mShell, colormap);
+ #else
+- GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+- gtk_widget_set_visual(mShell, visual);
++ GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
++ gtk_widget_set_visual(mShell, visual);
+ #endif
+- }
+ }
+
+ // We only move a general managed toplevel window if someone has
+@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+ mContainer = MOZ_CONTAINER(container);
+
+ #if (MOZ_WIDGET_GTK == 3)
+- // "csd" style is set when widget is realized so we need to call
+- // it explicitly now.
+- gtk_widget_realize(mShell);
+-
+- // We can't draw directly to top-level window when client side
+- // decorations are enabled. We use container with GdkWindow instead.
+- GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+- shellHasCSD = gtk_style_context_has_class(style, "csd");
+-#endif
+- if (!shellHasCSD) {
+- // Use mShell's window for drawing and events.
+- gtk_widget_set_has_window(container, FALSE);
+- // Prevent GtkWindow from painting a background to flicker.
+- gtk_widget_set_app_paintable(mShell, TRUE);
++ /* There are tree possible situations here:
++ *
++ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
++ * is rendered to mShell window and we listen Gtk+ events on mShell.
++ * 2) We're running on Gtk+ > 3.20 and window decorations are drawn
++ * by default by Gtk+. Content is rendered to mContainer,
++ * we listen events on mContainer. mShell contains default Gtk+
++ * window decorations rendered by Gtk+.
++ * 3) We're running on Gtk+ > 3.20 and both window decorations and
++ * content is rendered by gecko. We emulate Gtk+ decoration rendering
++ * to mShell and we need to listen Gtk events on both mShell
++ * and mContainer.
++ */
++
++ // When client side decorations are enabled (rendered by us or by Gtk+)
++ // the decoration is rendered to mShell (toplevel) window and
++ // we draw our content to mContainer.
++ if (mIsCSDEnabled) {
++ drawToContainer = true;
++ } else {
++ // mIsCSDEnabled can be disabled by preference so look at actual
++ // toplevel window style to to detect active "csd" style.
++ // The "csd" style is set when widget is realized so we need to call
++ // it explicitly now.
++ gtk_widget_realize(mShell);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
++ drawToContainer = gtk_style_context_has_class(style, "csd");
+ }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
++#endif
++ drawWidget = (drawToContainer) ? container : mShell;
++ // When we draw decorations on our own we need to handle resize events
++ // because Gtk+ does not provide resizers for undecorated windows.
++ // The CSD on mShell borders act as resize handlers
++ // so we need to listen there.
++ eventWidget = (drawToContainer && !mIsCSDEnabled) ? container : mShell;
++
+ gtk_widget_add_events(eventWidget, kEvents);
++ if (eventWidget != drawWidget) {
++ // CSD is rendered by us (not by Gtk+) so we also need to listen
++ // at mShell window for events.
++ gtk_widget_add_events(drawWidget, kEvents);
++ }
++
++ // Prevent GtkWindow from painting a background to flicker.
++ gtk_widget_set_app_paintable(drawWidget, TRUE);
++
++ // gtk_container_add() realizes the child widget so we need to
++ // set it now.
++ gtk_widget_set_has_window(container, drawToContainer);
+
+ gtk_container_add(GTK_CONTAINER(mShell), container);
+ gtk_widget_realize(container);
+@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+ gtk_widget_grab_focus(container);
+
+ // the drawing window
+- mGdkWindow = gtk_widget_get_window(eventWidget);
++ mGdkWindow = gtk_widget_get_window(drawWidget);
+
+ if (mWindowType == eWindowType_popup) {
+ // gdk does not automatically set the cursor for "temporary"
+@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+
+ // label the drawing window with this object so we can find our way home
+ g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
++ if (mIsCSDEnabled) {
++ // label the CSD window with this object so we can find our way home
++ g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
++ "nsWindow", this);
++ }
+
+ if (mContainer)
+ g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
+@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+ g_signal_connect_after(default_settings,
+ "notify::gtk-font-name",
+ G_CALLBACK(theme_changed_cb), this);
++ if (mIsCSDEnabled) {
++ g_signal_connect(G_OBJECT(mShell), "draw",
++ G_CALLBACK(expose_event_decoration_draw_cb), nullptr);
++ }
+ }
+
+ if (mContainer) {
+@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+ G_CALLBACK(drag_data_received_event_cb), nullptr);
+
+ GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
+- !shellHasCSD ? mShell : nullptr };
++ !drawToContainer ? mShell : nullptr };
+ for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
+ // Visibility events are sent to the owning widget of the relevant
+ // window but do not propagate to parent widgets so connect on
+@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+ // Don't let GTK mess with the shapes of our GdkWindows
+ GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
+ #endif
+-
+ // These events are sent to the owning widget of the relevant window
+ // and propagate up to the first widget that handles the events, so we
+ // need only connect on mShell, if it exists, to catch events on its
+@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+ size.width, size.height));
+
+ if (mIsTopLevel) {
++ // When we draw decorations add extra space to draw shadows
++ // around the main window.
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+ else if (mContainer) {
+@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+ if (mIsTopLevel) {
+ // x and y give the position of the window manager frame top-left.
+ gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
++
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ // This sets the client window size.
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+
+ return FALSE;
+ }
++
++/* static */
++gboolean
++expose_event_decoration_draw_cb(GtkWidget *widget, cairo_t *cr)
++{
++ GdkWindow* gdkWindow = gtk_widget_get_window(widget);
++ if (gtk_cairo_should_draw_window(cr, gdkWindow)) {
++ RefPtr<nsWindow> window = get_window_for_gtk_widget(widget);
++ if (!window) {
++ NS_WARNING("Cannot get nsWindow from GtkWidget");
++ }
++ else if (window->IsClientDecorated()) {
++ cairo_save(cr);
++ gtk_cairo_transform_to_window(cr, widget, gdkWindow);
++
++ GdkRectangle rect = {0,0,0,0};
++ gtk_window_get_size(GTK_WINDOW(widget), &rect.width, &rect.height);
++ moz_gtk_window_decoration_paint(cr, &rect);
++
++ rect.height = 40;
++ moz_gtk_header_bar_paint(cr, &rect);
++ cairo_restore(cr);
++ }
++ }
++ return TRUE;
++}
++
+ #endif //MOZ_WIDGET_GTK == 2
+
+ static gboolean
+@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+ }
+ }
+
++NS_IMETHODIMP
++nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins)
++{
++ SetDrawsInTitlebar(aMargins.top == 0);
++ return NS_OK;
++}
++
++void
++nsWindow::SetDrawsInTitlebar(bool aState)
++{
++ if (!mIsCSDEnabled || aState == mDrawWindowDecoration)
++ return;
++
++ if (mShell) {
++ gtk_window_set_decorated(GTK_WINDOW(mShell), !aState);
++ gtk_widget_set_app_paintable(mShell, aState);
++ }
++
++ mDrawWindowDecoration = aState;
++ UpdateClientDecorations();
++}
++
+ gint
+ nsWindow::GdkScaleFactor()
+ {
+@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+ }
+ #endif
+
++bool
++nsWindow::IsClientDecorated() const
++{
++ return mDrawWindowDecoration && mSizeState == nsSizeMode_Normal;
++}
++
++int
++nsWindow::GetClientResizerSize()
++{
++ if (!mShell)
++ return 0;
++
++ // GTK uses a default size of 20px as of 3.20.
++ gint size = 20;
++ gtk_widget_style_get(mShell, "decoration-resize-handle", &size, nullptr);
++
++ return GdkCoordToDevicePixels(size);
++}
++
++nsWindow::CSDSupportLevel
++nsWindow::GetCSDSupportLevel() {
++ if (mCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
++ return mCSDSupportLevel;
++ }
++ // TODO: MATE
++ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
++ if (currentDesktop) {
++ if (strcmp(currentDesktop, "GNOME") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "XFCE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "KDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "LXDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "openbox") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "i3") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ } else {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ }
++ }
++ return mCSDSupportLevel;
++}
++
++void
++nsWindow::UpdateClientDecorations()
++{
++ // When the CSD is not fully supported by window manager (ie. WM is not
++ // expecting that application is going to draw window shadows) we can't
++ // add shadows widths to the window margin. That would lead to completely
++ // opaque black border of the window.
++ if (!mDrawWindowDecoration || GetCSDSupportLevel() != CSD_SUPPORT_FULL)
++ return;
++
++ gint top = 0, right = 0, bottom = 0, left = 0;
++ if (mSizeState == nsSizeMode_Normal) {
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++ }
++
++ static auto sGdkWindowSetShadowWidth =
++ (void (*)(GdkWindow*, gint, gint, gint, gint))
++ dlsym(RTLD_DEFAULT, "gdk_window_set_shadow_width");
++ sGdkWindowSetShadowWidth(gtk_widget_get_window(mShell),
++ left, right, top, bottom);
++
++ mDecorationSize.left = left;
++ mDecorationSize.right = right;
++ mDecorationSize.top = top;
++ mDecorationSize.bottom = bottom;
++
++ // Gtk+ doesn't like when we set mContainer margin bigger than actual
++ // mContainer window size. That happens when we're called early and the
++ // mShell/mContainer is not allocated/resized yet and has default 1x1 size.
++ // Just resize to some minimal value which will be changed
++ // by Gecko soon.
++ GtkAllocation allocation;
++ gtk_widget_get_allocation(GTK_WIDGET(mContainer), &allocation);
++ if (allocation.width < left + right || allocation.height < top + bottom) {
++ gtk_widget_get_preferred_width(GTK_WIDGET(mContainer), nullptr,
++ &allocation.width);
++ gtk_widget_get_preferred_height(GTK_WIDGET(mContainer), nullptr,
++ &allocation.height);
++ allocation.width += left + right + 1;
++ allocation.height += top + bottom + 1;
++ gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
++ }
++
++ gtk_widget_set_margin_left(GTK_WIDGET(mContainer), mDecorationSize.left);
++ gtk_widget_set_margin_right(GTK_WIDGET(mContainer), mDecorationSize.right);
++ gtk_widget_set_margin_top(GTK_WIDGET(mContainer), mDecorationSize.top);
++ gtk_widget_set_margin_bottom(GTK_WIDGET(mContainer), mDecorationSize.bottom);
++}
++
++void
++nsWindow::ApplyCSDClipping()
++{
++ if (IsClientDecorated()) {
++ gint top, right, bottom, left;
++ moz_gtk_get_header_bar_border(&top, &right, &bottom, &left);
++ cairo_rectangle_int_t rect = { 0, top, mBounds.width, mBounds.height};
++ cairo_region_t *region = cairo_region_create_rectangle(&rect);
++ gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
++ cairo_region_destroy(region);
++ } else {
++ gdk_window_shape_combine_region(mGdkWindow, nullptr, 0, 0);
++ }
++}
++
++bool
++nsWindow::CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge)
++{
++ gint scale = GdkScaleFactor();
++ gint left = scale * mDecorationSize.left;
++ gint top = scale * mDecorationSize.top;
++ gint right = scale * mDecorationSize.right;
++ gint bottom = scale * mDecorationSize.bottom;
++
++ int resizerSize = GetClientResizerSize();
++ int topDist = aPoint.y;
++ int leftDist = aPoint.x;
++ int rightDist = mBounds.width - aPoint.x;
++ int bottomDist = mBounds.height - aPoint.y;
++
++ //TODO -> wrong sizes
++
++ if (leftDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_WEST;
++ } else if (rightDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_EAST;
++ } else if (leftDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_WEST;
++ } else if (rightDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_EAST;
++ } else if (topDist <= top) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH;
++ } else if (leftDist <= left) {
++ aOutEdge = GDK_WINDOW_EDGE_WEST;
++ } else if (rightDist <= right) {
++ aOutEdge = GDK_WINDOW_EDGE_EAST;
++ } else if (bottomDist <= bottom) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH;
++ } else {
++ return false;
++ }
++ return true;
++}
++
+ int32_t
+ nsWindow::RoundsWidgetCoordinatesTo()
+ {
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+index f7c07d57491b..d9a07316a52c 100644
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -123,6 +123,7 @@ public:
+ double aHeight,
+ bool aRepaint) override;
+ virtual bool IsEnabled() const override;
++ bool IsComposited() const;
+
+ void SetZIndex(int32_t aZIndex) override;
+ virtual void SetSizeMode(nsSizeMode aMode) override;
+@@ -351,6 +352,9 @@ public:
+ #endif
+ virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
+
++ NS_IMETHOD SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
++ void SetDrawsInTitlebar(bool aState) override;
++
+ // HiDPI scale conversion
+ gint GdkScaleFactor();
+
+@@ -367,6 +371,9 @@ public:
+ LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
+
+ virtual bool WidgetTypeSupportsAcceleration() override;
++
++ // Decorations
++ bool IsClientDecorated() const;
+ protected:
+ virtual ~nsWindow();
+
+@@ -384,6 +391,16 @@ protected:
+
+ virtual void RegisterTouchWindow() override;
+
++ int GetClientResizerSize();
++
++ // Informs the window manager about the size of the shadows surrounding
++ // a client-side decorated window.
++ void UpdateClientDecorations();
++
++ // Returns true if the given point (in device pixels) is within a resizer
++ // region of the window. Only used when drawing decorations client side.
++ bool CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge);
++
+ nsCOMPtr<nsIWidget> mParent;
+ // Is this a toplevel window?
+ bool mIsTopLevel;
+@@ -432,12 +449,12 @@ private:
+ gint* aRootX, gint* aRootY);
+ void ClearCachedResources();
+ nsIWidgetListener* GetListener();
+- bool IsComposited() const;
+-
++ void ApplyCSDClipping();
+
+ GtkWidget *mShell;
+ MozContainer *mContainer;
+ GdkWindow *mGdkWindow;
++ bool mIsCSDEnabled;
+ PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
+
+
+@@ -536,6 +553,10 @@ private:
+ // leaving fullscreen
+ nsSizeMode mLastSizeMode;
+
++ // If true, draw our own window decorations (where supported).
++ bool mDrawWindowDecoration;
++ GtkBorder mDecorationSize;
++
+ static bool DragInProgress(void);
+
+ void DispatchMissedButtonReleases(GdkEventCrossing *aGdkEvent);
+@@ -567,6 +588,17 @@ private:
+ RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
+
+ mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
++ typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
++ CSD_SUPPORT_FLAT, // CSD without shadows
++ CSD_SUPPORT_NONE, // WM does not support CSD at all
++ CSD_SUPPORT_UNKNOWN
++ } CSDSupportLevel;
++ /**
++ * Get the support of Client Side Decoration by checking
++ * the XDG_CURRENT_DESKTOP environment variable.
++ */
++ CSDSupportLevel GetCSDSupportLevel();
++ CSDSupportLevel mCSDSupportLevel;
+ };
+
+ #endif /* __nsWindow_h__ */
commit 92551052f62af4fa782b170d265e13aafabd58b8
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 12:40:42 2017 +0200
Updated to 57.0 Beta 5
diff --git a/.gitignore b/.gitignore
index a40dbb6..5394cf0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -249,3 +249,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-56.0.source.tar.xz
/firefox-langpacks-56.0-20170925.tar.xz
/firefox-langpacks-56.0-20170927.tar.xz
+/firefox-57.0b5.source.tar.xz
+/firefox-langpacks-57.0b5-20171005.tar.xz
diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch
index d6812b6..31bc5ec 100644
--- a/build-jit-atomic-always-lucky.patch
+++ b/build-jit-atomic-always-lucky.patch
@@ -1,19 +1,19 @@
-diff -up firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/AtomicOperations.h
---- firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-07-31 18:20:47.000000000 +0200
-+++ firefox-55.0.2/js/src/jit/AtomicOperations.h 2017-08-29 12:59:52.870926044 +0200
-@@ -348,7 +348,7 @@ AtomicOperations::isLockfree(int32_t siz
- # elif defined(__sh__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
- # else
--# include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
-+# include "jit/none/AtomicOperations-feeling-lucky.h"
- # endif
- #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
- # include "jit/x86-shared/AtomicOperations-x86-shared.h"
-diff -up firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h
---- firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-08-29 14:10:52.665031524 +0200
-+++ firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-08-29 14:09:40.756060235 +0200
-@@ -60,6 +60,14 @@
+diff -up firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/AtomicOperations.h
+--- firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-10-06 12:34:02.338973607 +0200
++++ firefox-57.0b5/js/src/jit/AtomicOperations.h 2017-10-06 12:38:24.632622215 +0200
+@@ -415,7 +415,7 @@ AtomicOperations::isLockfreeJS(int32_t s
+ #elif defined(__s390__) || defined(__s390x__)
+ # include "jit/none/AtomicOperations-feeling-lucky.h"
+ #else
+-# error "No AtomicOperations support provided for this platform"
++# include "jit/none/AtomicOperations-feeling-lucky.h"
+ #endif
+
+ #endif // jit_AtomicOperations_h
+diff -up firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h
+--- firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-10-06 12:34:02.338973607 +0200
+@@ -79,6 +79,14 @@
# define GNUC_COMPATIBLE
#endif
diff --git a/firefox-build-prbool.patch b/firefox-build-prbool.patch
deleted file mode 100644
index 17725af..0000000
--- a/firefox-build-prbool.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff -up firefox-53.0/dom/u2f/U2F.cpp.prbool firefox-53.0/dom/u2f/U2F.cpp
---- firefox-53.0/dom/u2f/U2F.cpp.prbool 2017-04-11 06:15:14.000000000 +0200
-+++ firefox-53.0/dom/u2f/U2F.cpp 2017-04-18 09:19:20.524285200 +0200
-@@ -4,6 +4,7 @@
- * 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 "prtypes.h"
- #include "hasht.h"
- #include "mozilla/dom/CallbackFunction.h"
- #include "mozilla/dom/ContentChild.h"
-diff -up firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool firefox-53.0/security/certverifier/CTLogVerifier.cpp
---- firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool 2017-04-18 09:19:20.524285200 +0200
-+++ firefox-53.0/security/certverifier/CTLogVerifier.cpp 2017-04-18 09:52:34.189402811 +0200
-@@ -9,6 +9,7 @@
- #include <stdint.h>
-
- #include "CTSerialization.h"
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Assertions.h"
-diff -up firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool firefox-53.0/security/certverifier/CTObjectsExtractor.cpp
---- firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool 2017-01-16 17:16:51.000000000 +0100
-+++ firefox-53.0/security/certverifier/CTObjectsExtractor.cpp 2017-04-18 09:19:20.525285196 +0200
-@@ -6,6 +6,7 @@
-
- #include "CTObjectsExtractor.h"
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/Casting.h"
-diff -up firefox-53.0/security/certverifier/OCSPCache.h.prbool firefox-53.0/security/certverifier/OCSPCache.h
---- firefox-53.0/security/certverifier/OCSPCache.h.prbool 2017-04-11 06:15:19.000000000 +0200
-+++ firefox-53.0/security/certverifier/OCSPCache.h 2017-04-18 09:19:20.525285196 +0200
-@@ -25,6 +25,7 @@
- #ifndef mozilla_psm_OCSPCache_h
- #define mozilla_psm_OCSPCache_h
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Mutex.h"
- #include "mozilla/Vector.h"
diff --git a/firefox-mozconfig b/firefox-mozconfig
index f98a89e..6b4cb54 100644
--- a/firefox-mozconfig
+++ b/firefox-mozconfig
@@ -12,9 +12,7 @@ ac_add_options --disable-tests
#ac_add_options --enable-libnotify
ac_add_options --enable-necko-wifi
ac_add_options --enable-startup-notification
-#ac_add_options --disable-cpp-exceptions
ac_add_options --disable-updater
-ac_add_options --enable-url-classifier
ac_add_options --enable-chrome-format=omni
ac_add_options --enable-pulseaudio
ac_add_options --with-system-icu
@@ -22,7 +20,8 @@ ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
ac_add_options --with-google-api-keyfile=../google-api-key
ac_add_options --enable-release
ac_add_options --enable-pie
-ac_add_options --disable-stylo
+# Workaround for mozbz#1341234
+ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
diff --git a/firefox.spec b/firefox.spec
index 1c7028f..5d86c4b 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -1,6 +1,3 @@
-# Use ALSA backend?
-%define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
@@ -64,12 +61,12 @@
%endif
%if %{?system_nss}
-%global nspr_version 4.10.10
+%global nspr_version 4.17.0
# NSS/NSPR quite often ends in build override, so as requirement the version
# we're building against could bring us some broken dependencies from time to time.
#%global nspr_build_version %(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536)
%global nspr_build_version %{nspr_version}
-%global nss_version 3.32.1
+%global nss_version 3.33
#%global nss_build_version %(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536)
%global nss_build_version %{nss_version}
%endif
@@ -80,9 +77,12 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
+%define pre_version b5
+
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
%global langpackdir %{mozappdir}/langpacks
+%global tarballdir %{name}-%{version}%{?pre_version}
%define official_branding 1
%define build_langpacks 1
@@ -98,14 +98,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 56.0
-Release: 4%{?pre_tag}%{?dist}
+Version: 57.0
+Release: 0.1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20170927.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -122,16 +122,13 @@ Patch0: firefox-install-dir.patch
Patch3: mozilla-build-arm.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=814879#c3
Patch18: xulrunner-24.0-jemalloc-ppc.patch
-Patch20: firefox-build-prbool.patch
Patch25: rhbz-1219542-s390-build.patch
Patch26: build-icu-big-endian.patch
Patch27: mozilla-1335250.patch
# Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268
Patch29: build-big-endian.patch
-Patch30: fedora-build.patch
Patch31: build-ppc64-s390x-curl.patch
Patch32: build-rust-ppc64le.patch
-Patch34: build-cubeb-pulse-arm.patch
Patch35: build-ppc-jit.patch
Patch36: build-missing-xlocale-h.patch
# Always feel lucky for unsupported platforms:
@@ -149,7 +146,6 @@ Patch225: mozilla-1005640-accept-lang.patch
#ARM run-time patch
Patch226: rhbz-1354671.patch
Patch229: firefox-nss-version.patch
-Patch230: rhbz-1497932.patch
# Upstream patches
Patch402: mozilla-1196777.patch
@@ -159,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch414: mozilla-1341234.patch
Patch415: mozilla-1405267.patch
# Debian patches
@@ -192,9 +187,6 @@ BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(hunspell)
%endif
BuildRequires: pkgconfig(libstartup-notification-1.0)
-%if %{?alsa_backend}
-BuildRequires: pkgconfig(alsa)
-%endif
BuildRequires: pkgconfig(libnotify) >= %{libnotify_version}
BuildRequires: pkgconfig(dri)
BuildRequires: pkgconfig(libcurl)
@@ -299,7 +291,7 @@ This package contains results of tests executed during build.
#---------------------------------------------------------------------
%prep
-%setup -q
+%setup -q -n %{tarballdir}
# Build patches, can't change backup suffix from default because during build
# there is a compare of config and js/config directories and .orig suffix is
@@ -308,15 +300,12 @@ This package contains results of tests executed during build.
%patch18 -p1 -b .jemalloc-ppc
-%patch20 -p1 -b .prbool
%ifarch s390
%patch25 -p1 -b .rhbz-1219542-s390
%endif
%patch29 -p1 -b .big-endian
-%patch30 -p1 -b .fedora-build
%patch31 -p1 -b .ppc64-s390x-curl
%patch32 -p1 -b .rust-ppc64le
-# don't need that %patch34 -p1 -b .cubeb-pulse-arm
%ifarch ppc ppc64 ppc64le
%patch35 -p1 -b .ppc-jit
%endif
@@ -336,7 +325,6 @@ This package contains results of tests executed during build.
%ifarch aarch64
%patch226 -p1 -b .1354671
%endif
-%patch230 -p1 -b .1497932
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
@@ -346,8 +334,8 @@ This package contains results of tests executed during build.
%patch412 -p1 -b .1337988
%endif
%endif
+
%patch413 -p1 -b .1353817
-%patch414 -p1 -b .1341234
%patch415 -p1 -b .1405267
# Debian extension patch
@@ -395,10 +383,6 @@ echo "ac_add_options --enable-system-ffi" >> .mozconfig
echo "ac_add_options --disable-elf-hack" >> .mozconfig
%endif
-%if %{?alsa_backend}
-echo "ac_add_options --enable-alsa" >> .mozconfig
-%endif
-
%if %{?system_hunspell}
echo "ac_add_options --enable-system-hunspell" >> .mozconfig
%else
@@ -871,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
+- Updated to 57.0 Beta 5
+
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
because of unresolved symbols
diff --git a/mozilla-1341234.patch b/mozilla-1341234.patch
deleted file mode 100644
index 2de5080..0000000
--- a/mozilla-1341234.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -up firefox-56.0/layout/style/bindgen.toml.in.old firefox-56.0/layout/style/bindgen.toml.in
---- firefox-56.0/layout/style/bindgen.toml.in.old 2017-09-27 16:30:14.518213900 +0200
-+++ firefox-56.0/layout/style/bindgen.toml.in 2017-09-27 16:30:38.089179153 +0200
-@@ -1,4 +1,5 @@
- [build]
- args = [
-+ "/usr/include",
- @BINDGEN_CFLAGS@
- ]
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
index 27fb5ea..46c7f1e 100644
--- a/mozilla-1405267.patch
+++ b/mozilla-1405267.patch
@@ -1,7 +1,7 @@
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-14 22:16:02.000000000 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:16:58.512697973 +0200
-@@ -96,6 +96,7 @@ STUB(gdk_window_get_update_area)
+diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
+@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
STUB(gdk_window_get_user_data)
STUB(gdk_window_get_visual)
STUB(gdk_window_get_width)
@@ -9,9 +9,9 @@ diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk
STUB(gdk_window_hide)
STUB(gdk_window_input_shape_combine_region)
STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_display_get_device_manager)
- STUB(gdk_error_trap_pop_ignored)
+@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
STUB(gdk_event_get_source_device)
+ STUB(gdk_screen_get_monitor_workarea)
STUB(gdk_window_get_type)
-STUB(gdk_window_get_window_type)
STUB(gdk_x11_window_get_xid)
diff --git a/rhbz-1497932.patch b/rhbz-1497932.patch
deleted file mode 100644
index d6e7886..0000000
--- a/rhbz-1497932.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-56.0/media/webrtc/trunk/Makefile.old firefox-56.0/media/webrtc/trunk/Makefile
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old 2017-10-04 09:21:56.155553585 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:22:35.562427061 +0200
-@@ -61,7 +61,6 @@ STUB(gdk_screen_get_height_mm)
- STUB(gdk_screen_get_n_monitors)
- STUB(gdk_screen_get_monitor_at_window)
- STUB(gdk_screen_get_monitor_geometry)
--STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_screen_get_monitor_height_mm)
- STUB(gdk_screen_get_number)
- STUB(gdk_screen_get_resolution)
-@@ -550,6 +549,7 @@ STUB(gtk_render_line)
- STUB(gtk_render_option)
- STUB(gtk_render_slider)
- STUB(gtk_scale_new)
-+STUB(gdk_screen_get_monitor_workarea)
- STUB(gtk_scrollbar_new)
- STUB(gtk_style_context_add_class)
- STUB(gtk_style_context_add_region)
diff --git a/sources b/sources
index f078f75..cb71924 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-56.0.source.tar.xz) = 3aeb0ff54e10c83894f61734daa4f0801a1bb499d4667adad9c78520e588eae809d0e4d61e9227206466d62c3b453e2ce9ca8198f59f5354cd1b6804c00f0990
-SHA512 (firefox-langpacks-56.0-20170927.tar.xz) = e74d85410891b6faa388d37043d764a6c01a2c83479d9912aa3d0b23684ed66ca639eb3cdb579cafef6c3156b0d774a66987a605e0f9e25c2d4eed967ef7b627
+SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
+SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
diff --git a/xulrunner-24.0-jemalloc-ppc.patch b/xulrunner-24.0-jemalloc-ppc.patch
index be6f259..840fca2 100644
--- a/xulrunner-24.0-jemalloc-ppc.patch
+++ b/xulrunner-24.0-jemalloc-ppc.patch
@@ -1,7 +1,7 @@
-diff -up firefox-48.0/memory/mozjemalloc/jemalloc.c.jemalloc-ppc firefox-48.0/memory/mozjemalloc/jemalloc.c
---- firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp.jemalloc-ppc 2016-07-26 10:51:46.385434384 +0200
-+++ firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp 2016-07-26 10:53:49.061023106 +0200
-@@ -1090,7 +1090,7 @@ static const bool config_recycle = false
+diff -up firefox-57.0b5/memory/build/mozjemalloc.cpp.old firefox-57.0b5/memory/build/mozjemalloc.cpp
+--- firefox-57.0b5/memory/build/mozjemalloc.cpp.old 2017-10-06 12:00:27.938687498 +0200
++++ firefox-57.0b5/memory/build/mozjemalloc.cpp 2017-10-06 12:02:45.232151309 +0200
+@@ -780,7 +780,7 @@ struct arena_t {
* controlling the malloc behavior are defined as compile-time constants
* for best performance and cannot be altered at runtime.
*/
6 years, 6 months
Architecture specific change in rpms/firefox.git
by githook-noreply@fedoraproject.org
The package rpms/firefox.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=fd700ad0ae...
https://src.fedoraproject.org/cgit/rpms/firefox.git/commit/?id=84f42722cf....
Change:
+%ifarch %{ix86}
+ExcludeArch: armv7hl
Thanks.
Full change:
============
commit 84f42722cf6ac1d363bf371c7334d257e8ddf5e0
Merge: c69ed95 b1a757c
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 23 20:34:27 2017 +0200
Updated to FF57Beta9
diff --cc firefox.spec
index fe2c132,86fb77f..f755707
--- a/firefox.spec
+++ b/firefox.spec
@@@ -1,10 -1,3 +1,7 @@@
+%if 0%{?fedora} < 26
+ExcludeArch: armv7hl
+%endif
+
- # Use ALSA backend?
- %define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
commit b1a757cbd45f3653b0d54b87a2f7f93145ebfbd0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Thu Oct 19 12:21:55 2017 +0200
Updated to 57.0 Beta 9
diff --git a/.gitignore b/.gitignore
index fe01930..eac0742 100644
--- a/.gitignore
+++ b/.gitignore
@@ -257,3 +257,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b7-20171011.tar.xz
/firefox-57.0b8.source.tar.xz
/firefox-langpacks-57.0b8-20171016.tar.xz
+/firefox-57.0b9.source.tar.xz
+/firefox-langpacks-57.0b9-20171019.tar.xz
diff --git a/firefox.spec b/firefox.spec
index 14f9672..86fb77f 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b8
+%define pre_version b9
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.4%{?pre_tag}%{?dist}
+Release: 0.5%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171019.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 19 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.5
+- Updated to 57.0 Beta 9
+
* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
- Updated to 57.0 Beta 8
diff --git a/sources b/sources
index 5e1ac99..df2fde5 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
-SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
+SHA512 (firefox-57.0b9.source.tar.xz) = 5d09a07ae48198de8d8ada4018afb4c1cfe16d9294bbbd502d3f23915c43496604f19761a409a41a23ec712d622a556b0b6dc9efd186f4528724e52c8305dda1
+SHA512 (firefox-langpacks-57.0b9-20171019.tar.xz) = 07a3182edf634a5151e4c599e9f8a886e286c1e708f5743db10efeeb5526b4aa120153491da926c5bfcd69cb0e683ff83f2637fca53c78b9e256151768c20712
commit 92f600486ea44fde51139f9e30fcdde6c939dcfc
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 12:29:32 2017 +0200
Fixed patch to apply
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index d7d8500..8daa2f2 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,10 +1,10 @@
-diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
---- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
-+++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
-@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
- pref("browser.tabs.loadBookmarksInBackground", false);
+diff -up firefox-57.0b8/browser/app/profile/firefox.js.1399611 firefox-57.0b8/browser/app/profile/firefox.js
+--- firefox-57.0b8/browser/app/profile/firefox.js.1399611 2017-10-16 12:11:45.364240654 +0200
++++ firefox-57.0b8/browser/app/profile/firefox.js 2017-10-16 12:28:03.860720910 +0200
+@@ -457,11 +457,7 @@ pref("browser.tabs.loadBookmarksInBackgr
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
+ pref("browser.tabs.tabMinWidth", 76);
-#ifdef UNIX_BUT_NOT_MAC
-pref("browser.tabs.drawInTitlebar", false);
-#else
@@ -13,9 +13,9 @@ diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/br
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
---- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
-+++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/browser/base/content/browser-tabsintitlebar.js 2017-10-16 12:11:45.364240654 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -28,9 +28,9 @@ diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 f
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
---- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
-+++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+diff -up firefox-57.0b8/browser/base/moz.build.1399611 firefox-57.0b8/browser/base/moz.build
+--- firefox-57.0b8/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b8/browser/base/moz.build 2017-10-16 12:11:45.364240654 +0200
@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -40,9 +40,9 @@ diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/ba
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
---- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
-+++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+diff -up firefox-57.0b8/browser/themes/linux/browser.css.1399611 firefox-57.0b8/browser/themes/linux/browser.css
+--- firefox-57.0b8/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b8/browser/themes/linux/browser.css 2017-10-16 12:11:45.365240651 +0200
@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
#nav-bar,
@@ -140,9 +140,9 @@ diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/
+ }
+ }
+}
-diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
---- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
-+++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 firefox-57.0b8/dom/base/nsGkAtomList.h
+--- firefox-57.0b8/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b8/dom/base/nsGkAtomList.h 2017-10-16 12:11:45.365240651 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -165,9 +165,9 @@ diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/
// application commands
GK_ATOM(Back, "Back")
-diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
---- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
-+++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b8/gfx/src/nsThemeConstants.h
+--- firefox-57.0b8/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b8/gfx/src/nsThemeConstants.h 2017-10-16 12:11:45.365240651 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -176,9 +176,9 @@ diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/sr
ThemeWidgetType_COUNT
};
-diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
---- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b8/layout/style/nsCSSRuleProcessor.cpp 2017-10-16 12:11:45.365240651 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -210,9 +210,9 @@ diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
---- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
-+++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
+diff -up firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b8/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b8/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b8/layout/style/nsMediaFeatures.cpp 2017-10-16 12:11:45.366240647 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -256,9 +256,9 @@ diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
---- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
-+++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/modules/libpref/init/all.js.1399611 firefox-57.0b8/modules/libpref/init/all.js
+--- firefox-57.0b8/modules/libpref/init/all.js.1399611 2017-10-12 18:12:09.000000000 +0200
++++ firefox-57.0b8/modules/libpref/init/all.js 2017-10-16 12:11:45.366240647 +0200
@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
@@ -267,9 +267,9 @@ diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modul
#endif
#endif
-diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
---- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/toolkit/modules/moz.build.1399611 firefox-57.0b8/toolkit/modules/moz.build
+--- firefox-57.0b8/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/toolkit/modules/moz.build 2017-10-16 12:11:45.366240647 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -279,9 +279,9 @@ diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
---- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b8/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b8/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtk3drawing.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -569,9 +569,9 @@ diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget
default:
g_warning("Unknown widget type: %d", widget);
}
-diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
---- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b8/widget/gtk/gtkdrawing.h
+--- firefox-57.0b8/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b8/widget/gtk/gtkdrawing.h 2017-10-16 12:11:45.367240644 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -635,9 +635,9 @@ diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gt
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
-+++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 22:17:13.000000000 +0200
++++ firefox-57.0b8/widget/gtk/mozgtk/mozgtk.c 2017-10-16 12:11:45.367240644 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -666,9 +666,9 @@ diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget
#endif
#ifdef GTK2_SYMBOLS
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.cpp 2017-10-16 12:11:45.367240644 +0200
@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
@@ -733,9 +733,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widg
}
// virtual
-diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
---- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b8/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b8/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsLookAndFeel.h 2017-10-16 12:11:45.367240644 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -756,9 +756,9 @@ diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget
bool mInitialized;
void EnsureInit();
-diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
---- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
+diff -up firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsNativeThemeGTK.cpp 2017-10-16 12:11:45.368240640 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -839,9 +839,9 @@ diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/w
}
return eUnknownTransparency;
-diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
---- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b8/widget/gtk/nsWindow.cpp
+--- firefox-57.0b8/widget/gtk/nsWindow.cpp.1399611 2017-10-16 12:11:45.361240666 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1470,9 +1470,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gt
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
---- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
+diff -up firefox-57.0b8/widget/gtk/nsWindow.h.1399611 firefox-57.0b8/widget/gtk/nsWindow.h
+--- firefox-57.0b8/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/nsWindow.h 2017-10-16 12:11:45.369240636 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1562,9 +1562,9 @@ diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/
};
#endif /* __nsWindow_h__ */
-diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
---- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
-+++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b8/widget/gtk/WidgetStyleCache.cpp 2017-10-16 12:11:45.369240636 +0200
@@ -26,10 +26,14 @@ static GtkStyleContext*
GetCssNodeStyleInternal(WidgetNodeType aNodeType);
@@ -1708,9 +1708,9 @@ diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/w
/* Clear already freed arrays */
mozilla::PodArrayZero(sWidgetStorage);
-diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
---- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
-+++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+diff -up firefox-57.0b8/widget/LookAndFeel.h.1399611 firefox-57.0b8/widget/LookAndFeel.h
+--- firefox-57.0b8/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b8/widget/LookAndFeel.h 2017-10-16 12:11:45.369240636 +0200
@@ -405,6 +405,30 @@ public:
eIntID_PhysicalHomeButton,
commit 29052e77800f8522112525c0b2a2725ef28299a3
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 16 11:48:47 2017 +0200
Updated to 57.0 Beta 8
diff --git a/.gitignore b/.gitignore
index 3060bc4..fe01930 100644
--- a/.gitignore
+++ b/.gitignore
@@ -255,3 +255,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b6-20171009.tar.xz
/firefox-57.0b7.source.tar.xz
/firefox-langpacks-57.0b7-20171011.tar.xz
+/firefox-57.0b8.source.tar.xz
+/firefox-langpacks-57.0b8-20171016.tar.xz
diff --git a/firefox.spec b/firefox.spec
index e619503..14f9672 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b7
+%define pre_version b8
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.3%{?pre_tag}%{?dist}
+Release: 0.4%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171016.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -856,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 16 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.4
+- Updated to 57.0 Beta 8
+
* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
- Updated to 57.0 Beta 7
diff --git a/sources b/sources
index 3fd62bd..5e1ac99 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
-SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
+SHA512 (firefox-57.0b8.source.tar.xz) = 777758663c32bced491aa44369668f00be973b082a67af9852ea941dbf92c6c297f14070851d7d388b8017a34ddd8496be6fa842454420d0d404db69c36a0a61
+SHA512 (firefox-langpacks-57.0b8-20171016.tar.xz) = 7d8ee9d993550fe86bc626127440ffa5ce980770981a4e3bb4ccd443172cd7b8ebe7af728c57819bb073a486f79ccb3beb62bf15a14586622a4cf3a36907cf9f
commit 4f71e4765388439a6c2af118be25b5429c3f0c3e
Author: Martin Stransky <stransky(a)redhat.com>
Date: Wed Oct 11 14:23:39 2017 +0200
Updated to 57.0 Beta 7
diff --git a/.gitignore b/.gitignore
index 3f1c795..3060bc4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -253,3 +253,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-57.0b5-20171005.tar.xz
/firefox-57.0b6.source.tar.xz
/firefox-langpacks-57.0b6-20171009.tar.xz
+/firefox-57.0b7.source.tar.xz
+/firefox-langpacks-57.0b7-20171011.tar.xz
diff --git a/firefox.spec b/firefox.spec
index f839e2e..e619503 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b6
+%define pre_version b7
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.2%{?pre_tag}%{?dist}
+Release: 0.3%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171011.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -155,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch415: mozilla-1405267.patch
Patch416: mozilla-1399611.patch
# Debian patches
@@ -335,7 +334,6 @@ This package contains results of tests executed during build.
%endif
%patch413 -p1 -b .1353817
-%patch415 -p1 -b .1405267
%patch416 -p1 -b .1399611
# Debian extension patch
@@ -858,6 +856,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Wed Oct 11 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.3
+- Updated to 57.0 Beta 7
+
* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
- Updated to 57.0 Beta 6
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
deleted file mode 100644
index 46c7f1e..0000000
--- a/mozilla-1405267.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
---- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
-+++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
-@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
- STUB(gdk_window_get_user_data)
- STUB(gdk_window_get_visual)
- STUB(gdk_window_get_width)
-+STUB(gdk_window_get_window_type)
- STUB(gdk_window_hide)
- STUB(gdk_window_input_shape_combine_region)
- STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
- STUB(gdk_event_get_source_device)
- STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_window_get_type)
--STUB(gdk_window_get_window_type)
- STUB(gdk_x11_window_get_xid)
- STUB(gdk_x11_display_get_type)
- STUB(gdk_wayland_display_get_type)
diff --git a/sources b/sources
index 43ea395..3fd62bd 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
-SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
+SHA512 (firefox-57.0b7.source.tar.xz) = 86f9669263e5bae53556d27eedc8ae3f88f3f946bfe121e6c357f2719f38e1e0d448beab2844b8fd80bc200beedc6fbbbb20df7f7cac8d6399cdd024675f0fbe
+SHA512 (firefox-langpacks-57.0b7-20171011.tar.xz) = c9df71681a3bcb0d5267ea77e03868a9bc4c2321cc0228b69e0ebd58f3ccca792abe747611908b0c2b4d2ffd561c195fac550f3f0a25e0b4e0f7464a78ef1c71
commit fd700ad0ae450c4705017e05db7af709f7ea90f0
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 14:49:41 2017 +0200
Disabled stylo on i686
diff --git a/firefox.spec b/firefox.spec
index c103013..f839e2e 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -453,6 +453,9 @@ echo "ac_add_options --without-system-icu" >> .mozconfig
echo "ac_add_options --disable-ion" >> .mozconfig
%endif
+%ifarch %{ix86}
+echo "ac_add_options --disable-stylo" >> .mozconfig
+%endif
#---------------------------------------------------------------------
commit 92eee6224e69e8ca6591b1bafcab7b584cef5583
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 11:08:34 2017 +0200
Updated CSD patch
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
index b30ae02..d7d8500 100644
--- a/mozilla-1399611.patch
+++ b/mozilla-1399611.patch
@@ -1,8 +1,7 @@
-diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
-index de61ac442b74..be15873ee2c4 100644
---- a/browser/app/profile/firefox.js
-+++ b/browser/app/profile/firefox.js
-@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+diff -up firefox-57.0b6/browser/app/profile/firefox.js.1399611 firefox-57.0b6/browser/app/profile/firefox.js
+--- firefox-57.0b6/browser/app/profile/firefox.js.1399611 2017-10-09 10:58:19.851078873 +0200
++++ firefox-57.0b6/browser/app/profile/firefox.js 2017-10-09 10:58:19.862078833 +0200
+@@ -456,11 +456,7 @@ pref("browser.tabs.loadDivertedInBackgro
pref("browser.tabs.loadBookmarksInBackground", false);
pref("browser.tabs.loadBookmarksInTabs", false);
pref("browser.tabs.tabClipWidth", 140);
@@ -14,10 +13,9 @@ index de61ac442b74..be15873ee2c4 100644
// Offer additional drag space to the user. The drag space
// will only be shown if browser.tabs.drawInTitlebar is true.
-diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
-index d9509029bbf1..b56f81c0c138 100644
---- a/browser/base/content/browser-tabsintitlebar.js
-+++ b/browser/base/content/browser-tabsintitlebar.js
+diff -up firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js
+--- firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js.1399611 2017-10-02 22:17:19.000000000 +0200
++++ firefox-57.0b6/browser/base/content/browser-tabsintitlebar.js 2017-10-09 10:58:19.862078833 +0200
@@ -14,6 +14,11 @@ var TabsInTitlebar = {
this._readPref();
Services.prefs.addObserver(this._prefName, this);
@@ -30,11 +28,10 @@ index d9509029bbf1..b56f81c0c138 100644
// We need to update the appearance of the titlebar when the menu changes
// from the active to the inactive state. We can't, however, rely on
// DOMMenuBarInactive, because the menu fires this event and then removes
-diff --git a/browser/base/moz.build b/browser/base/moz.build
-index a2bd4bcb4eca..f14553e4ba7f 100644
---- a/browser/base/moz.build
-+++ b/browser/base/moz.build
-@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+diff -up firefox-57.0b6/browser/base/moz.build.1399611 firefox-57.0b6/browser/base/moz.build
+--- firefox-57.0b6/browser/base/moz.build.1399611 2017-09-29 18:16:45.000000000 +0200
++++ firefox-57.0b6/browser/base/moz.build 2017-10-09 10:58:19.862078833 +0200
+@@ -57,7 +57,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/conte
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
@@ -43,16 +40,12 @@ index a2bd4bcb4eca..f14553e4ba7f 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
-index 65a3f0cca7b1..7bb448da620b 100644
---- a/browser/themes/linux/browser.css
-+++ b/browser/themes/linux/browser.css
-@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
- color: -moz-menubartext;
- }
+diff -up firefox-57.0b6/browser/themes/linux/browser.css.1399611 firefox-57.0b6/browser/themes/linux/browser.css
+--- firefox-57.0b6/browser/themes/linux/browser.css.1399611 2017-10-05 06:17:37.000000000 +0200
++++ firefox-57.0b6/browser/themes/linux/browser.css 2017-10-09 11:07:21.604073376 +0200
+@@ -556,7 +556,9 @@ html|span.ac-emphasize-text-url {
-+/* Support dragging the window using the toolbar when drawing our own
-+ * decorations, or where the GTK theme allows. */
+ #nav-bar,
#toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
+#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
@@ -61,7 +54,7 @@ index 65a3f0cca7b1..7bb448da620b 100644
-moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
}
-@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+@@ -713,3 +715,85 @@ html|span.ac-emphasize-text-url {
.restore-tabs-button:hover:active:not([disabled="true"]) {
padding: 3px;
}
@@ -147,10 +140,9 @@ index 65a3f0cca7b1..7bb448da620b 100644
+ }
+ }
+}
-diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
-index 5d5ec3d405c9..bb2f652c41e0 100644
---- a/dom/base/nsGkAtomList.h
-+++ b/dom/base/nsGkAtomList.h
+diff -up firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 firefox-57.0b6/dom/base/nsGkAtomList.h
+--- firefox-57.0b6/dom/base/nsGkAtomList.h.1399611 2017-09-15 06:15:41.000000000 +0200
++++ firefox-57.0b6/dom/base/nsGkAtomList.h 2017-10-09 10:58:19.863078829 +0200
@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
GK_ATOM(menubar_drag, "menubar-drag")
GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
@@ -162,7 +154,7 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// windows theme selector metrics
GK_ATOM(windows_classic, "windows-classic")
-@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-d
GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
@@ -173,10 +165,9 @@ index 5d5ec3d405c9..bb2f652c41e0 100644
// application commands
GK_ATOM(Back, "Back")
-diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
-index d0ced405095d..1cd2361a0026 100644
---- a/gfx/src/nsThemeConstants.h
-+++ b/gfx/src/nsThemeConstants.h
+diff -up firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 firefox-57.0b6/gfx/src/nsThemeConstants.h
+--- firefox-57.0b6/gfx/src/nsThemeConstants.h.1399611 2017-06-12 18:37:10.000000000 +0200
++++ firefox-57.0b6/gfx/src/nsThemeConstants.h 2017-10-09 10:58:19.863078829 +0200
@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
NS_THEME_MAC_SOURCE_LIST,
NS_THEME_MAC_SOURCE_LIST_SELECTION,
@@ -185,10 +176,9 @@ index d0ced405095d..1cd2361a0026 100644
ThemeWidgetType_COUNT
};
-diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
-index cbfb4d0f60aa..263372ca868e 100644
---- a/layout/style/nsCSSRuleProcessor.cpp
-+++ b/layout/style/nsCSSRuleProcessor.cpp
+diff -up firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp
+--- firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp.1399611 2017-08-02 14:27:54.000000000 +0200
++++ firefox-57.0b6/layout/style/nsCSSRuleProcessor.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
}
@@ -220,10 +210,9 @@ index cbfb4d0f60aa..263372ca868e 100644
#ifdef XP_WIN
if (NS_SUCCEEDED(
LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
-diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
-index 7cf6a08e46c1..bf955d759e8b 100644
---- a/layout/style/nsMediaFeatures.cpp
-+++ b/layout/style/nsMediaFeatures.cpp
+diff -up firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 firefox-57.0b6/layout/style/nsMediaFeatures.cpp
+--- firefox-57.0b6/layout/style/nsMediaFeatures.cpp.1399611 2017-09-15 06:15:42.000000000 +0200
++++ firefox-57.0b6/layout/style/nsMediaFeatures.cpp 2017-10-09 10:58:19.863078829 +0200
@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
GetSystemMetric
},
@@ -267,11 +256,10 @@ index 7cf6a08e46c1..bf955d759e8b 100644
// Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
// Internal because it is really only useful in the user agent anyway
// and therefore not worth standardizing.
-diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
-index 0b77f1759021..b8dc9aeebfd8 100644
---- a/modules/libpref/init/all.js
-+++ b/modules/libpref/init/all.js
-@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+diff -up firefox-57.0b6/modules/libpref/init/all.js.1399611 firefox-57.0b6/modules/libpref/init/all.js
+--- firefox-57.0b6/modules/libpref/init/all.js.1399611 2017-10-02 22:17:20.000000000 +0200
++++ firefox-57.0b6/modules/libpref/init/all.js 2017-10-09 10:58:19.864078825 +0200
+@@ -4911,6 +4911,7 @@ pref("gfx.apitrace.enabled",false);
pref("gfx.xrender.enabled",false);
pref("widget.chrome.allow-gtk-dark-theme", false);
pref("widget.content.allow-gtk-dark-theme", false);
@@ -279,10 +267,9 @@ index 0b77f1759021..b8dc9aeebfd8 100644
#endif
#endif
-diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
-index 8b5dc9e25d7e..14fb0fe87e9d 100644
---- a/toolkit/modules/moz.build
-+++ b/toolkit/modules/moz.build
+diff -up firefox-57.0b6/toolkit/modules/moz.build.1399611 firefox-57.0b6/toolkit/modules/moz.build
+--- firefox-57.0b6/toolkit/modules/moz.build.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/toolkit/modules/moz.build 2017-10-09 10:58:19.864078825 +0200
@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
]
@@ -292,192 +279,9 @@ index 8b5dc9e25d7e..14fb0fe87e9d 100644
DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
-diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
-index ff5da8017621..d31b411a9b1a 100644
---- a/widget/LookAndFeel.h
-+++ b/widget/LookAndFeel.h
-@@ -405,6 +405,30 @@ public:
- eIntID_PhysicalHomeButton,
-
- /*
-+ * A boolean value indicating whether client-side decorations are
-+ * supported by the user's GTK version.
-+ */
-+ eIntID_GTKCSDAvailable,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a minimize button.
-+ */
-+ eIntID_GTKCSDMinimizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a maximize button.
-+ */
-+ eIntID_GTKCSDMaximizeButton,
-+
-+ /*
-+ * A boolean value indicating whether client-side decorations should
-+ * contain a close button.
-+ */
-+ eIntID_GTKCSDCloseButton,
-+
-+ /*
- * Controls whether overlay scrollbars display when the user moves
- * the mouse in a scrollable frame.
- */
-diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
-index 39b7893df3bd..4c9e8523b5bf 100644
---- a/widget/gtk/WidgetStyleCache.cpp
-+++ b/widget/gtk/WidgetStyleCache.cpp
-@@ -26,10 +26,14 @@ static GtkStyleContext*
- GetCssNodeStyleInternal(WidgetNodeType aNodeType);
-
- static GtkWidget*
--CreateWindowWidget()
-+CreateWindowWidget(WidgetNodeType type)
- {
- GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
- gtk_widget_set_name(widget, "MozillaGtkWidget");
-+ if (type == MOZ_GTK_WINDOW_CSD) {
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, "csd");
-+ }
- return widget;
- }
-
-@@ -101,7 +105,7 @@ CreateTooltipWidget()
- {
- MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
- "CreateTooltipWidget should be used for Gtk < 3.20 only.");
-- GtkWidget* widget = CreateWindowWidget();
-+ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
- GtkStyleContext* style = gtk_widget_get_style_context(widget);
- gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
- return widget;
-@@ -529,11 +533,82 @@ CreateNotebookWidget()
- }
-
- static GtkWidget*
-+CreateHeaderBar(bool aMaximized)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
-+ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
-+
-+ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
-+ if (aMaximized) {
-+ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
-+ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
-+ GtkStyleContext* style = gtk_widget_get_style_context(window);
-+ gtk_style_context_add_class(style, "maximized");
-+ GtkWidget *fixed = gtk_fixed_new();
-+ gtk_container_add(GTK_CONTAINER(window), fixed);
-+ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
-+ // Save the window container so we don't leak it.
-+ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
-+ } else {
-+ AddToWindowContainer(headerbar);
-+ }
-+
-+ // Emulate what create_titlebar() at gtkwindow.c does.
-+ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
-+ gtk_style_context_add_class(style, "default-decoration");
-+
-+ return headerbar;
-+}
-+
-+// TODO - Also return style for buttons located at Maximized toolbar.
-+static GtkWidget*
-+CreateHeaderBarButton(WidgetNodeType aWidgetType)
-+{
-+ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
-+ "GtkHeaderBar is only available on GTK 3.10+.");
-+
-+ if (gtk_check_version(3, 10, 0) != nullptr)
-+ return nullptr;
-+
-+ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
-+
-+ GtkWidget* widget = gtk_button_new();
-+ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
-+
-+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
-+ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
-+
-+ switch (aWidgetType) {
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ gtk_style_context_add_class(style, "close");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ gtk_style_context_add_class(style, "minimize");
-+ break;
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ gtk_style_context_add_class(style, "maximize");
-+ break;
-+ default:
-+ break;
-+ }
-+
-+ return widget;
-+}
-+
-+static GtkWidget*
- CreateWidget(WidgetNodeType aWidgetType)
- {
- switch (aWidgetType) {
- case MOZ_GTK_WINDOW:
-- return CreateWindowWidget();
-+ case MOZ_GTK_WINDOW_CSD:
-+ return CreateWindowWidget(aWidgetType);
- case MOZ_GTK_WINDOW_CONTAINER:
- return CreateWindowContainerWidget();
- case MOZ_GTK_CHECKBUTTON_CONTAINER:
-@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
- return CreateComboBoxEntryButtonWidget();
- case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
- return CreateComboBoxEntryArrowWidget();
-+ case MOZ_GTK_HEADER_BAR:
-+ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
-+ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
-+ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
-+ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
-+ return CreateHeaderBarButton(aWidgetType);
- default:
- /* Not implemented */
- return nullptr;
-@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
- GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
- return gtk_widget_get_style_context(widget);
- }
-+ case MOZ_GTK_WINDOW_DECORATION:
-+ style = CreateChildCSSNode("decoration",
-+ MOZ_GTK_WINDOW_CSD);
-+ break;
- default:
- return GetWidgetRootStyle(aNodeType);
- }
-@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
- /* This will destroy all of our widgets */
- if (sWidgetStorage[MOZ_GTK_WINDOW])
- gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
-+ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
-+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
-
- /* Clear already freed arrays */
- mozilla::PodArrayZero(sWidgetStorage);
-diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
-index 4c562b380095..ee2b8a04f63f 100644
---- a/widget/gtk/gtk3drawing.cpp
-+++ b/widget/gtk/gtk3drawing.cpp
+diff -up firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 firefox-57.0b6/widget/gtk/gtk3drawing.cpp
+--- firefox-57.0b6/widget/gtk/gtk3drawing.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtk3drawing.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -17,6 +17,7 @@
#include "WidgetStyleCache.h"
@@ -512,7 +316,7 @@ index 4c562b380095..ee2b8a04f63f 100644
// GetStateFlagsFromGtkWidgetState() can be safely used for the specific
// GtkWidgets that set both prelight and active flags. For other widgets,
// either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
-@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orient
return MOZ_GTK_SUCCESS;
}
@@ -556,7 +360,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static gint
moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
GtkTextDirection direction)
-@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRec
}
static gint
@@ -581,7 +385,7 @@ index 4c562b380095..ee2b8a04f63f 100644
moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
GtkWidgetState* state,
gboolean selected, gboolean inconsistent,
-@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkR
return MOZ_GTK_SUCCESS;
}
@@ -620,7 +424,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static void
moz_gtk_add_style_margin(GtkStyleContext* style,
gint* left, gint* top, gint* right, gint* bottom)
-@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_pa
moz_gtk_add_style_padding(style, left, top, right, bottom);
}
@@ -635,7 +439,7 @@ index 4c562b380095..ee2b8a04f63f 100644
static GtkBorder
GetMarginBorderPadding(GtkStyleContext* aStyle)
{
-@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType
// XXX: Subtract 1 pixel from the padding to account for the default
// padding in forms.css. See bug 1187385.
*left = *top = *right = *bottom = -1;
@@ -645,7 +449,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
-@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType
*left = *top = *right = *bottom =
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
@@ -657,7 +461,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_TREE_HEADER_SORTARROW:
-@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType
gtk_container_get_border_width(GTK_CONTAINER(
GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
@@ -667,7 +471,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* If there is no separator, don't try to count its width. */
separator_width = 0;
-@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType
style = gtk_widget_get_style_context(w);
*left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
@@ -680,7 +484,7 @@ index 4c562b380095..ee2b8a04f63f 100644
return MOZ_GTK_SUCCESS;
}
case MOZ_GTK_MENUPOPUP:
-@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType
return MOZ_GTK_SUCCESS;
}
@@ -702,7 +506,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* These widgets have no borders, since they are not containers. */
case MOZ_GTK_CHECKBUTTON_LABEL:
-@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrie
return metrics;
}
@@ -739,7 +543,7 @@ index 4c562b380095..ee2b8a04f63f 100644
/* cairo_t *cr argument has to be a system-cairo. */
gint
moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
-@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widg
GetWidget(MOZ_GTK_BUTTON),
direction);
break;
@@ -754,7 +558,7 @@ index 4c562b380095..ee2b8a04f63f 100644
case MOZ_GTK_CHECKBUTTON:
case MOZ_GTK_RADIOBUTTON:
return moz_gtk_toggle_paint(cr, rect, state,
-@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widg
case MOZ_GTK_INFO_BAR:
return moz_gtk_info_bar_paint(cr, rect, state);
break;
@@ -765,10 +569,9 @@ index 4c562b380095..ee2b8a04f63f 100644
default:
g_warning("Unknown widget type: %d", widget);
}
-diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
-index 42dbf8287499..c0a7eba5006a 100644
---- a/widget/gtk/gtkdrawing.h
-+++ b/widget/gtk/gtkdrawing.h
+diff -up firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 firefox-57.0b6/widget/gtk/gtkdrawing.h
+--- firefox-57.0b6/widget/gtk/gtkdrawing.h.1399611 2017-06-12 18:37:20.000000000 +0200
++++ firefox-57.0b6/widget/gtk/gtkdrawing.h 2017-10-09 10:58:19.865078822 +0200
@@ -268,8 +268,14 @@ typedef enum {
MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
/* Paints the background of a window, dialog or page. */
@@ -799,7 +602,7 @@ index 42dbf8287499..c0a7eba5006a 100644
MOZ_GTK_WIDGET_NODE_COUNT
} WidgetNodeType;
-@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(g
*/
gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
@@ -832,10 +635,9 @@ index 42dbf8287499..c0a7eba5006a 100644
/**
* Get the YTHICKNESS of a tab (notebook extension).
*/
-diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
-index 7285b7f001ac..6e554c7f628e 100644
---- a/widget/gtk/mozgtk/mozgtk.c
-+++ b/widget/gtk/mozgtk/mozgtk.c
+diff -up firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c.1399611 2017-10-09 10:58:19.861078836 +0200
++++ firefox-57.0b6/widget/gtk/mozgtk/mozgtk.c 2017-10-09 10:58:19.865078822 +0200
@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
STUB(gtk_style_properties_lookup_property)
STUB(gtk_tree_view_column_get_button)
@@ -864,11 +666,10 @@ index 7285b7f001ac..6e554c7f628e 100644
#endif
#ifdef GTK2_SYMBOLS
-diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
-index e02bf10fe87f..a5950ac35799 100644
---- a/widget/gtk/nsLookAndFeel.cpp
-+++ b/widget/gtk/nsLookAndFeel.cpp
-@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.cpp 2017-10-09 10:58:19.865078822 +0200
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int
case eIntID_ContextMenuOffsetHorizontal:
aResult = 2;
break;
@@ -932,10 +733,9 @@ index e02bf10fe87f..a5950ac35799 100644
}
// virtual
-diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
-index 177d069f6567..6e14236e604a 100644
---- a/widget/gtk/nsLookAndFeel.h
-+++ b/widget/gtk/nsLookAndFeel.h
+diff -up firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 firefox-57.0b6/widget/gtk/nsLookAndFeel.h
+--- firefox-57.0b6/widget/gtk/nsLookAndFeel.h.1399611 2017-09-21 06:10:10.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsLookAndFeel.h 2017-10-09 10:58:19.865078822 +0200
@@ -32,6 +32,8 @@ public:
virtual char16_t GetPasswordCharacterImpl();
virtual bool GetEchoPasswordImpl();
@@ -956,10 +756,9 @@ index 177d069f6567..6e14236e604a 100644
bool mInitialized;
void EnsureInit();
-diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
-index 211790096a3e..6ed35b97a0d7 100644
---- a/widget/gtk/nsNativeThemeGTK.cpp
-+++ b/widget/gtk/nsNativeThemeGTK.cpp
+diff -up firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp
+--- firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp.1399611 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsNativeThemeGTK.cpp 2017-10-09 10:58:19.865078822 +0200
@@ -23,6 +23,7 @@
#include "nsIDOMHTMLInputElement.h"
#include "nsGkAtoms.h"
@@ -968,7 +767,7 @@ index 211790096a3e..6ed35b97a0d7 100644
#include "mozilla/EventStates.h"
#include "mozilla/Services.h"
-@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(u
case NS_THEME_GTK_INFO_BAR:
aGtkWidgetType = MOZ_GTK_INFO_BAR;
break;
@@ -993,7 +792,7 @@ index 211790096a3e..6ed35b97a0d7 100644
default:
return false;
}
-@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(n
case NS_THEME_MENULIST:
case NS_THEME_TOOLBARBUTTON:
case NS_THEME_TREEHEADERCELL:
@@ -1004,7 +803,7 @@ index 211790096a3e..6ed35b97a0d7 100644
{
if (aWidgetType == NS_THEME_MENULIST) {
// Include the arrow size.
-@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(ns
case NS_THEME_DIALOG:
#if (MOZ_WIDGET_GTK == 3)
case NS_THEME_GTK_INFO_BAR:
@@ -1026,7 +825,7 @@ index 211790096a3e..6ed35b97a0d7 100644
case NS_THEME_MENULIST_BUTTON:
if (aFrame && aFrame->GetWritingMode().IsVertical()) {
return false;
-@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(
#else
return eTransparent;
#endif
@@ -1040,10 +839,9 @@ index 211790096a3e..6ed35b97a0d7 100644
}
return eUnknownTransparency;
-diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
-index 37b6aae4c3d0..f0c3343f20ae 100644
---- a/widget/gtk/nsWindow.cpp
-+++ b/widget/gtk/nsWindow.cpp
+diff -up firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 firefox-57.0b6/widget/gtk/nsWindow.cpp
+--- firefox-57.0b6/widget/gtk/nsWindow.cpp.1399611 2017-10-09 10:58:19.858078848 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.cpp 2017-10-09 10:58:19.866078818 +0200
@@ -85,6 +85,7 @@
#include "nsIPropertyBag2.h"
#include "GLContext.h"
@@ -1061,7 +859,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
using namespace mozilla;
using namespace mozilla::gfx;
using namespace mozilla::widget;
-@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+@@ -186,6 +189,8 @@ static gboolean expose_event_cb
#else
static gboolean expose_event_cb (GtkWidget *widget,
cairo_t *rect);
@@ -1070,7 +868,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif
static gboolean configure_event_cb (GtkWidget *widget,
GdkEventConfigure *event);
-@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+@@ -231,7 +236,6 @@ static void screen_composited_change
gpointer user_data);
static void widget_composited_changed_cb (GtkWidget* widget,
gpointer user_data);
@@ -1078,7 +876,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#if (MOZ_WIDGET_GTK == 3)
static void scale_changed_cb (GtkWidget* widget,
GParamSpec* aPSpec,
-@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+@@ -440,6 +444,7 @@ nsWindow::nsWindow()
mContainer = nullptr;
mGdkWindow = nullptr;
@@ -1086,7 +884,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
mShell = nullptr;
mCompositorWidgetDelegate = nullptr;
mHasMappedToplevel = false;
-@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+@@ -481,6 +486,9 @@ nsWindow::nsWindow()
mLastScrollEventTime = GDK_CURRENT_TIME;
#endif
mPendingConfigures = 0;
@@ -1096,7 +894,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
nsWindow::~nsWindow()
-@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+@@ -1479,8 +1487,8 @@ LayoutDeviceIntRect
nsWindow::GetScreenBounds()
{
LayoutDeviceIntRect rect;
@@ -1107,7 +905,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint x, y;
gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
rect.MoveTo(GdkPointToDevicePixels({ x, y }));
-@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+@@ -1606,6 +1614,10 @@ nsWindow::SetCursor(nsCursor aCursor)
return;
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
@@ -1118,7 +916,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
}
}
-@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+@@ -1662,6 +1674,10 @@ nsWindow::SetCursor(imgIContainer* aCurs
if (cursor) {
if (mContainer) {
gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
@@ -1129,7 +927,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
rv = NS_OK;
}
#if (MOZ_WIDGET_GTK == 3)
-@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+@@ -2176,6 +2192,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
return TRUE;
}
@@ -1142,7 +940,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// If this widget uses OMTC...
if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
-@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+@@ -2586,6 +2608,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMo
}
}
#endif /* MOZ_X11 */
@@ -1196,7 +994,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
-@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+@@ -2756,6 +2825,20 @@ nsWindow::OnButtonPressEvent(GdkEventBut
if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
return;
@@ -1217,7 +1015,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gdouble pressure = 0;
gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
mLastMotionPressure = pressure;
-@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+@@ -3341,6 +3424,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *
#endif //ACCESSIBILITY
}
@@ -1226,7 +1024,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWidgetListener) {
mWidgetListener->SizeModeChanged(mSizeState);
if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
-@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+@@ -3405,6 +3490,7 @@ nsWindow::OnCompositedChanged()
presShell->ThemeChanged();
}
}
@@ -1234,7 +1032,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
void
-@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3593,7 +3679,8 @@ nsWindow::Create(nsIWidget* aParent,
GtkWindow *topLevelParent = nullptr;
nsWindow *parentnsWindow = nullptr;
GtkWidget *eventWidget = nullptr;
@@ -1244,7 +1042,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (aParent) {
parentnsWindow = static_cast<nsWindow*>(aParent);
-@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3640,29 +3727,47 @@ nsWindow::Create(nsIWidget* aParent,
GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
mShell = gtk_window_new(type);
@@ -1303,7 +1101,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
// We only move a general managed toplevel window if someone has
-@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3756,24 +3861,56 @@ nsWindow::Create(nsIWidget* aParent,
mContainer = MOZ_CONTAINER(container);
#if (MOZ_WIDGET_GTK == 3)
@@ -1321,6 +1119,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
- gtk_widget_set_has_window(container, FALSE);
- // Prevent GtkWindow from painting a background to flicker.
- gtk_widget_set_app_paintable(mShell, TRUE);
+- }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
+ /* There are tree possible situations here:
+ *
+ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
@@ -1349,9 +1150,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
+
+ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+ drawToContainer = gtk_style_context_has_class(style, "csd");
- }
-- // Set up event widget
-- eventWidget = shellHasCSD ? container : mShell;
++ }
+#endif
+ drawWidget = (drawToContainer) ? container : mShell;
+ // When we draw decorations on our own we need to handle resize events
@@ -1376,7 +1175,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_container_add(GTK_CONTAINER(mShell), container);
gtk_widget_realize(container);
-@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3783,7 +3920,7 @@ nsWindow::Create(nsIWidget* aParent,
gtk_widget_grab_focus(container);
// the drawing window
@@ -1385,7 +1184,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mWindowType == eWindowType_popup) {
// gdk does not automatically set the cursor for "temporary"
-@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3856,6 +3993,11 @@ nsWindow::Create(nsIWidget* aParent,
// label the drawing window with this object so we can find our way home
g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
@@ -1397,7 +1196,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
if (mContainer)
g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
-@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3893,6 +4035,10 @@ nsWindow::Create(nsIWidget* aParent,
g_signal_connect_after(default_settings,
"notify::gtk-font-name",
G_CALLBACK(theme_changed_cb), this);
@@ -1408,7 +1207,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
}
if (mContainer) {
-@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3943,7 +4089,7 @@ nsWindow::Create(nsIWidget* aParent,
G_CALLBACK(drag_data_received_event_cb), nullptr);
GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
@@ -1417,7 +1216,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
// Visibility events are sent to the owning widget of the relevant
// window but do not propagate to parent widgets so connect on
-@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+@@ -3973,7 +4119,6 @@ nsWindow::Create(nsIWidget* aParent,
// Don't let GTK mess with the shapes of our GdkWindows
GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
#endif
@@ -1425,7 +1224,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// These events are sent to the owning widget of the relevant window
// and propagate up to the first widget that handles the events, so we
// need only connect on mShell, if it exists, to catch events on its
-@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+@@ -4110,6 +4255,12 @@ nsWindow::NativeResize()
size.width, size.height));
if (mIsTopLevel) {
@@ -1438,7 +1237,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
else if (mContainer) {
-@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+@@ -4166,6 +4317,11 @@ nsWindow::NativeMoveResize()
if (mIsTopLevel) {
// x and y give the position of the window manager frame top-left.
gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
@@ -1450,7 +1249,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
// This sets the client window size.
gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
}
-@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+@@ -5524,6 +5680,33 @@ expose_event_cb(GtkWidget *widget, cairo
return FALSE;
}
@@ -1484,7 +1283,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
#endif //MOZ_WIDGET_GTK == 2
static gboolean
-@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+@@ -6576,6 +6759,28 @@ nsWindow::ClearCachedResources()
}
}
@@ -1513,7 +1312,7 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
gint
nsWindow::GdkScaleFactor()
{
-@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+@@ -6846,6 +7051,157 @@ nsWindow::SynthesizeNativeTouchPoint(uin
}
#endif
@@ -1671,10 +1470,9 @@ index 37b6aae4c3d0..f0c3343f20ae 100644
int32_t
nsWindow::RoundsWidgetCoordinatesTo()
{
-diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
-index f7c07d57491b..d9a07316a52c 100644
---- a/widget/gtk/nsWindow.h
-+++ b/widget/gtk/nsWindow.h
+diff -up firefox-57.0b6/widget/gtk/nsWindow.h.1399611 firefox-57.0b6/widget/gtk/nsWindow.h
+--- firefox-57.0b6/widget/gtk/nsWindow.h.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/nsWindow.h 2017-10-09 10:58:19.867078814 +0200
@@ -123,6 +123,7 @@ public:
double aHeight,
bool aRepaint) override;
@@ -1764,3 +1562,183 @@ index f7c07d57491b..d9a07316a52c 100644
};
#endif /* __nsWindow_h__ */
+diff -up firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp
+--- firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp.1399611 2017-09-15 06:15:40.000000000 +0200
++++ firefox-57.0b6/widget/gtk/WidgetStyleCache.cpp 2017-10-09 10:58:19.864078825 +0200
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType a
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff -up firefox-57.0b6/widget/LookAndFeel.h.1399611 firefox-57.0b6/widget/LookAndFeel.h
+--- firefox-57.0b6/widget/LookAndFeel.h.1399611 2017-09-16 18:22:54.000000000 +0200
++++ firefox-57.0b6/widget/LookAndFeel.h 2017-10-09 10:58:19.864078825 +0200
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
commit b58833c2c841294c7300f32d7ac6a5447dedfab2
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:57:51 2017 +0200
Removed unused sources
diff --git a/sources b/sources
index c3e37bf..43ea395 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,2 @@
-SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
-SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit cd2371798ab1703676aec1a74a41ca64335af050
Author: Martin Stransky <stransky(a)redhat.com>
Date: Mon Oct 9 10:42:56 2017 +0200
Updated to 57.0 Beta 6
diff --git a/.gitignore b/.gitignore
index 5394cf0..3f1c795 100644
--- a/.gitignore
+++ b/.gitignore
@@ -251,3 +251,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-56.0-20170927.tar.xz
/firefox-57.0b5.source.tar.xz
/firefox-langpacks-57.0b5-20171005.tar.xz
+/firefox-57.0b6.source.tar.xz
+/firefox-langpacks-57.0b6-20171009.tar.xz
diff --git a/firefox.spec b/firefox.spec
index ecd2015..c103013 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -77,7 +77,7 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
-%define pre_version b5
+%define pre_version b6
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
@@ -99,13 +99,13 @@
Summary: Mozilla Firefox Web browser
Name: firefox
Version: 57.0
-Release: 0.1%{?pre_tag}%{?dist}
+Release: 0.2%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171009.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -855,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Mon Oct 9 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.2
+- Updated to 57.0 Beta 6
+
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
- Added patch for mozbz#1399611 - CSD emulation
diff --git a/sources b/sources
index cb71924..c3e37bf 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,4 @@
SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
+SHA512 (firefox-57.0b6.source.tar.xz) = 182fef4180ed511be61201925ea3c29bd3ca087c4380234fe434640b00fa46730f41d41cd61cf79ff6bd66c6f3749c9a19a19d8cb28281761ef74065e7e44eb8
+SHA512 (firefox-langpacks-57.0b6-20171009.tar.xz) = 4e5ccece1a4e09db8ae04d5a22503f67da64e5d224f5d3c60f70344fd12520781e66c09d6b764ce64a72974dd69f3fb0fa1c747bafdf0e0b9fb9094d934fdc4b
commit 1ae49b3a70a6a75888417b1d9a7a4699efeb5a98
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 21:00:47 2017 +0200
Added patch for mozbz#1399611 - CSD emulation
diff --git a/firefox.spec b/firefox.spec
index 5d86c4b..ecd2015 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -156,6 +156,7 @@ Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
Patch415: mozilla-1405267.patch
+Patch416: mozilla-1399611.patch
# Debian patches
Patch500: mozilla-440908.patch
@@ -313,8 +314,6 @@ This package contains results of tests executed during build.
%patch3 -p1 -b .arm
-# For branding specific patches.
-
# Fedora patches
%patch215 -p1 -b .addons
%patch219 -p2 -b .rhbz-1173156
@@ -337,6 +336,7 @@ This package contains results of tests executed during build.
%patch413 -p1 -b .1353817
%patch415 -p1 -b .1405267
+%patch416 -p1 -b .1399611
# Debian extension patch
%patch500 -p1 -b .440908
@@ -857,6 +857,7 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
%changelog
* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
- Updated to 57.0 Beta 5
+- Added patch for mozbz#1399611 - CSD emulation
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
diff --git a/mozilla-1399611.patch b/mozilla-1399611.patch
new file mode 100644
index 0000000..b30ae02
--- /dev/null
+++ b/mozilla-1399611.patch
@@ -0,0 +1,1766 @@
+diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+index de61ac442b74..be15873ee2c4 100644
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -455,11 +455,7 @@ pref("browser.tabs.loadDivertedInBackground", false);
+ pref("browser.tabs.loadBookmarksInBackground", false);
+ pref("browser.tabs.loadBookmarksInTabs", false);
+ pref("browser.tabs.tabClipWidth", 140);
+-#ifdef UNIX_BUT_NOT_MAC
+-pref("browser.tabs.drawInTitlebar", false);
+-#else
+ pref("browser.tabs.drawInTitlebar", true);
+-#endif
+
+ // Offer additional drag space to the user. The drag space
+ // will only be shown if browser.tabs.drawInTitlebar is true.
+diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js
+index d9509029bbf1..b56f81c0c138 100644
+--- a/browser/base/content/browser-tabsintitlebar.js
++++ b/browser/base/content/browser-tabsintitlebar.js
+@@ -14,6 +14,11 @@ var TabsInTitlebar = {
+ this._readPref();
+ Services.prefs.addObserver(this._prefName, this);
+
++ // Always disable on unsupported GTK versions.
++ if (AppConstants.MOZ_WIDGET_TOOLKIT == "gtk3") {
++ this.allowedBy("gtk", window.matchMedia("(-moz-gtk-csd-available)"));
++ }
++
+ // We need to update the appearance of the titlebar when the menu changes
+ // from the active to the inactive state. We can't, however, rely on
+ // DOMMenuBarInactive, because the menu fires this event and then removes
+diff --git a/browser/base/moz.build b/browser/base/moz.build
+index a2bd4bcb4eca..f14553e4ba7f 100644
+--- a/browser/base/moz.build
++++ b/browser/base/moz.build
+@@ -56,7 +56,7 @@ DEFINES['APP_LICENSE_BLOCK'] = '%s/content/overrides/app-license.html' % SRCDIR
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3', 'cocoa'):
+ DEFINES['CONTEXT_COPY_IMAGE_CONTENTS'] = 1
+
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/browser/themes/linux/browser.css b/browser/themes/linux/browser.css
+index 65a3f0cca7b1..7bb448da620b 100644
+--- a/browser/themes/linux/browser.css
++++ b/browser/themes/linux/browser.css
+@@ -557,8 +557,12 @@ html|span.ac-emphasize-text-url {
+ color: -moz-menubartext;
+ }
+
++/* Support dragging the window using the toolbar when drawing our own
++ * decorations, or where the GTK theme allows. */
+ #toolbar-menubar:not([autohide="true"]):not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
+-#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag) {
++#TabsToolbar:not(:-moz-lwtheme):-moz-system-metric(menubar-drag),
++#main-window[tabsintitlebar] #toolbar-menubar:not([autohide="true"]),
++#main-window[tabsintitlebar] #TabsToolbar {
+ -moz-binding: url("chrome://browser/content/customizableui/toolbar.xml#toolbar-drag");
+ }
+
+@@ -715,3 +719,85 @@ html|span.ac-emphasize-text-url {
+ .restore-tabs-button:hover:active:not([disabled="true"]) {
+ padding: 3px;
+ }
++
++@media not all and (-moz-gtk-csd-available) {
++ #main-window > #titlebar {
++ /* We need to hide the titlebar explicitly on versions of GTK without CSD. */
++ display: none;
++ }
++}
++
++/* Titlebar/CSD */
++@media (-moz-gtk-csd-available) {
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ min-height: calc(var(--tab-min-height) + 12px);
++ }
++
++ #main-window[tabsintitlebar] #titlebar:-moz-lwtheme {
++ visibility: hidden;
++ }
++ #main-window[tabsintitlebar] #titlebar-content:-moz-lwtheme {
++ visibility: visible;
++ }
++
++ #main-window[tabsintitlebar][sizemode="normal"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar;
++ }
++ #main-window[tabsintitlebar][sizemode="maximized"] > #titlebar {
++ -moz-appearance: -moz-window-titlebar-maximized;
++ }
++
++ /* The button box must appear on top of the navigator-toolbox in order for
++ * click and hover mouse events to work properly for the button in the restored
++ * window state. Otherwise, elements in the navigator-toolbox, like the menubar,
++ * can swallow those events.
++ */
++ #titlebar-buttonbox {
++ z-index: 1;
++ }
++
++ /* titlebar command buttons */
++ /* Use full scale icons here as the Gtk+ does. */
++ @media (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ list-style-image: url("moz-icon://stock/window-minimize-symbolic");
++ -moz-appearance: -moz-window-button-minimize;
++ }
++ }
++ @media not all and (-moz-gtk-csd-minimize-button) {
++ #titlebar-min {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-maximize-symbolic");
++ -moz-appearance: -moz-window-button-maximize;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ list-style-image: url("moz-icon://stock/window-restore-symbolic");
++ -moz-appearance: -moz-window-button-restore;
++ }
++ }
++ @media not all and (-moz-gtk-csd-maximize-button) {
++ #titlebar-max {
++ display: none;
++ }
++ #main-window[sizemode="maximized"] #titlebar-max {
++ display: none;
++ }
++ }
++
++ @media (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ list-style-image: url("moz-icon://stock/window-close-symbolic");
++ -moz-appearance: -moz-window-button-close;
++ }
++ }
++ @media not all and (-moz-gtk-csd-close-button) {
++ #titlebar-close {
++ display: none;
++ }
++ }
++}
+diff --git a/dom/base/nsGkAtomList.h b/dom/base/nsGkAtomList.h
+index 5d5ec3d405c9..bb2f652c41e0 100644
+--- a/dom/base/nsGkAtomList.h
++++ b/dom/base/nsGkAtomList.h
+@@ -2270,6 +2270,10 @@ GK_ATOM(touch_enabled, "touch-enabled")
+ GK_ATOM(menubar_drag, "menubar-drag")
+ GK_ATOM(swipe_animation_enabled, "swipe-animation-enabled")
+ GK_ATOM(physical_home_button, "physical-home-button")
++GK_ATOM(gtk_csd_available, "gtk-csd-available")
++GK_ATOM(gtk_csd_minimize_button, "gtk-csd-minimize-button")
++GK_ATOM(gtk_csd_maximize_button, "gtk-csd-maximize-button")
++GK_ATOM(gtk_csd_close_button, "gtk-csd-close-button")
+
+ // windows theme selector metrics
+ GK_ATOM(windows_classic, "windows-classic")
+@@ -2306,6 +2310,10 @@ GK_ATOM(_moz_device_orientation, "-moz-device-orientation")
+ GK_ATOM(_moz_is_resource_document, "-moz-is-resource-document")
+ GK_ATOM(_moz_swipe_animation_enabled, "-moz-swipe-animation-enabled")
+ GK_ATOM(_moz_physical_home_button, "-moz-physical-home-button")
++GK_ATOM(_moz_gtk_csd_available, "-moz-gtk-csd-available")
++GK_ATOM(_moz_gtk_csd_minimize_button, "-moz-gtk-csd-minimize-button")
++GK_ATOM(_moz_gtk_csd_maximize_button, "-moz-gtk-csd-maximize-button")
++GK_ATOM(_moz_gtk_csd_close_button, "-moz-gtk-csd-close-button")
+
+ // application commands
+ GK_ATOM(Back, "Back")
+diff --git a/gfx/src/nsThemeConstants.h b/gfx/src/nsThemeConstants.h
+index d0ced405095d..1cd2361a0026 100644
+--- a/gfx/src/nsThemeConstants.h
++++ b/gfx/src/nsThemeConstants.h
+@@ -299,6 +299,7 @@ enum ThemeWidgetType : uint8_t {
+ NS_THEME_MAC_SOURCE_LIST,
+ NS_THEME_MAC_SOURCE_LIST_SELECTION,
+ NS_THEME_MAC_ACTIVE_SOURCE_LIST_SELECTION,
++ NS_THEME_GTK_WINDOW_DECORATION,
+
+ ThemeWidgetType_COUNT
+ };
+diff --git a/layout/style/nsCSSRuleProcessor.cpp b/layout/style/nsCSSRuleProcessor.cpp
+index cbfb4d0f60aa..263372ca868e 100644
+--- a/layout/style/nsCSSRuleProcessor.cpp
++++ b/layout/style/nsCSSRuleProcessor.cpp
+@@ -1180,6 +1180,30 @@ nsCSSRuleProcessor::InitSystemMetrics()
+ sSystemMetrics->AppendElement(nsGkAtoms::physical_home_button);
+ }
+
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_available);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMinimizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_minimize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDMaximizeButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_maximize_button);
++ }
++
++ rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDCloseButton,
++ &metricResult);
++ if (NS_SUCCEEDED(rv) && metricResult) {
++ sSystemMetrics->AppendElement(nsGkAtoms::gtk_csd_close_button);
++ }
++
+ #ifdef XP_WIN
+ if (NS_SUCCEEDED(
+ LookAndFeel::GetInt(LookAndFeel::eIntID_WindowsThemeIdentifier,
+diff --git a/layout/style/nsMediaFeatures.cpp b/layout/style/nsMediaFeatures.cpp
+index 7cf6a08e46c1..bf955d759e8b 100644
+--- a/layout/style/nsMediaFeatures.cpp
++++ b/layout/style/nsMediaFeatures.cpp
+@@ -788,6 +788,42 @@ nsMediaFeatures::features[] = {
+ GetSystemMetric
+ },
+
++ {
++ &nsGkAtoms::_moz_gtk_csd_available,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_available },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_minimize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_minimize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_maximize_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_maximize_button },
++ GetSystemMetric
++ },
++
++ {
++ &nsGkAtoms::_moz_gtk_csd_close_button,
++ nsMediaFeature::eMinMaxNotAllowed,
++ nsMediaFeature::eBoolInteger,
++ nsMediaFeature::eNoRequirements,
++ { &nsGkAtoms::gtk_csd_close_button },
++ GetSystemMetric
++ },
++
+ // Internal -moz-is-glyph media feature: applies only inside SVG glyphs.
+ // Internal because it is really only useful in the user agent anyway
+ // and therefore not worth standardizing.
+diff --git a/modules/libpref/init/all.js b/modules/libpref/init/all.js
+index 0b77f1759021..b8dc9aeebfd8 100644
+--- a/modules/libpref/init/all.js
++++ b/modules/libpref/init/all.js
+@@ -4912,6 +4912,7 @@ pref("gfx.apitrace.enabled",false);
+ pref("gfx.xrender.enabled",false);
+ pref("widget.chrome.allow-gtk-dark-theme", false);
+ pref("widget.content.allow-gtk-dark-theme", false);
++pref("widget.allow-client-side-decoration", false);
+ #endif
+ #endif
+
+diff --git a/toolkit/modules/moz.build b/toolkit/modules/moz.build
+index 8b5dc9e25d7e..14fb0fe87e9d 100644
+--- a/toolkit/modules/moz.build
++++ b/toolkit/modules/moz.build
+@@ -259,7 +259,7 @@ EXTRA_JS_MODULES.sessionstore += [
+ ]
+
+ DEFINES['INSTALL_COMPACT_THEMES'] = 1
+-if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa'):
++if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'cocoa', 'gtk3'):
+ DEFINES['CAN_DRAW_IN_TITLEBAR'] = 1
+
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('windows', 'gtk2', 'gtk3'):
+diff --git a/widget/LookAndFeel.h b/widget/LookAndFeel.h
+index ff5da8017621..d31b411a9b1a 100644
+--- a/widget/LookAndFeel.h
++++ b/widget/LookAndFeel.h
+@@ -405,6 +405,30 @@ public:
+ eIntID_PhysicalHomeButton,
+
+ /*
++ * A boolean value indicating whether client-side decorations are
++ * supported by the user's GTK version.
++ */
++ eIntID_GTKCSDAvailable,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a minimize button.
++ */
++ eIntID_GTKCSDMinimizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a maximize button.
++ */
++ eIntID_GTKCSDMaximizeButton,
++
++ /*
++ * A boolean value indicating whether client-side decorations should
++ * contain a close button.
++ */
++ eIntID_GTKCSDCloseButton,
++
++ /*
+ * Controls whether overlay scrollbars display when the user moves
+ * the mouse in a scrollable frame.
+ */
+diff --git a/widget/gtk/WidgetStyleCache.cpp b/widget/gtk/WidgetStyleCache.cpp
+index 39b7893df3bd..4c9e8523b5bf 100644
+--- a/widget/gtk/WidgetStyleCache.cpp
++++ b/widget/gtk/WidgetStyleCache.cpp
+@@ -26,10 +26,14 @@ static GtkStyleContext*
+ GetCssNodeStyleInternal(WidgetNodeType aNodeType);
+
+ static GtkWidget*
+-CreateWindowWidget()
++CreateWindowWidget(WidgetNodeType type)
+ {
+ GtkWidget *widget = gtk_window_new(GTK_WINDOW_POPUP);
+ gtk_widget_set_name(widget, "MozillaGtkWidget");
++ if (type == MOZ_GTK_WINDOW_CSD) {
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, "csd");
++ }
+ return widget;
+ }
+
+@@ -101,7 +105,7 @@ CreateTooltipWidget()
+ {
+ MOZ_ASSERT(gtk_check_version(3, 20, 0) != nullptr,
+ "CreateTooltipWidget should be used for Gtk < 3.20 only.");
+- GtkWidget* widget = CreateWindowWidget();
++ GtkWidget* widget = CreateWindowWidget(MOZ_GTK_WINDOW);
+ GtkStyleContext* style = gtk_widget_get_style_context(widget);
+ gtk_style_context_add_class(style, GTK_STYLE_CLASS_TOOLTIP);
+ return widget;
+@@ -529,11 +533,82 @@ CreateNotebookWidget()
+ }
+
+ static GtkWidget*
++CreateHeaderBar(bool aMaximized)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static auto sGtkHeaderBarNewPtr = (GtkWidget* (*)())
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_new");
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBAR = "titlebar";
++
++ GtkWidget* headerbar = sGtkHeaderBarNewPtr();
++ if (aMaximized) {
++ GtkWidget *window = gtk_window_new(GTK_WINDOW_POPUP);
++ gtk_widget_set_name(window, "MozillaMaximizedGtkWidget");
++ GtkStyleContext* style = gtk_widget_get_style_context(window);
++ gtk_style_context_add_class(style, "maximized");
++ GtkWidget *fixed = gtk_fixed_new();
++ gtk_container_add(GTK_CONTAINER(window), fixed);
++ gtk_container_add(GTK_CONTAINER(fixed), headerbar);
++ // Save the window container so we don't leak it.
++ sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED] = window;
++ } else {
++ AddToWindowContainer(headerbar);
++ }
++
++ // Emulate what create_titlebar() at gtkwindow.c does.
++ GtkStyleContext* style = gtk_widget_get_style_context(headerbar);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBAR);
++ gtk_style_context_add_class(style, "default-decoration");
++
++ return headerbar;
++}
++
++// TODO - Also return style for buttons located at Maximized toolbar.
++static GtkWidget*
++CreateHeaderBarButton(WidgetNodeType aWidgetType)
++{
++ MOZ_ASSERT(gtk_check_version(3, 10, 0) == nullptr,
++ "GtkHeaderBar is only available on GTK 3.10+.");
++
++ if (gtk_check_version(3, 10, 0) != nullptr)
++ return nullptr;
++
++ static const char* MOZ_GTK_STYLE_CLASS_TITLEBUTTON = "titlebutton";
++
++ GtkWidget* widget = gtk_button_new();
++ gtk_container_add(GTK_CONTAINER(GetWidget(MOZ_GTK_HEADER_BAR)), widget);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_add_class(style, MOZ_GTK_STYLE_CLASS_TITLEBUTTON);
++
++ switch (aWidgetType) {
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ gtk_style_context_add_class(style, "close");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ gtk_style_context_add_class(style, "minimize");
++ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ gtk_style_context_add_class(style, "maximize");
++ break;
++ default:
++ break;
++ }
++
++ return widget;
++}
++
++static GtkWidget*
+ CreateWidget(WidgetNodeType aWidgetType)
+ {
+ switch (aWidgetType) {
+ case MOZ_GTK_WINDOW:
+- return CreateWindowWidget();
++ case MOZ_GTK_WINDOW_CSD:
++ return CreateWindowWidget(aWidgetType);
+ case MOZ_GTK_WINDOW_CONTAINER:
+ return CreateWindowContainerWidget();
+ case MOZ_GTK_CHECKBUTTON_CONTAINER:
+@@ -610,6 +685,13 @@ CreateWidget(WidgetNodeType aWidgetType)
+ return CreateComboBoxEntryButtonWidget();
+ case MOZ_GTK_COMBOBOX_ENTRY_ARROW:
+ return CreateComboBoxEntryArrowWidget();
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return CreateHeaderBar(aWidgetType == MOZ_GTK_HEADER_BAR_MAXIMIZED);
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return CreateHeaderBarButton(aWidgetType);
+ default:
+ /* Not implemented */
+ return nullptr;
+@@ -1049,6 +1131,10 @@ GetCssNodeStyleInternal(WidgetNodeType aNodeType)
+ GtkWidget* widget = GetWidget(MOZ_GTK_NOTEBOOK);
+ return gtk_widget_get_style_context(widget);
+ }
++ case MOZ_GTK_WINDOW_DECORATION:
++ style = CreateChildCSSNode("decoration",
++ MOZ_GTK_WINDOW_CSD);
++ break;
+ default:
+ return GetWidgetRootStyle(aNodeType);
+ }
+@@ -1214,6 +1300,8 @@ ResetWidgetCache(void)
+ /* This will destroy all of our widgets */
+ if (sWidgetStorage[MOZ_GTK_WINDOW])
+ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW]);
++ if (sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED])
++ gtk_widget_destroy(sWidgetStorage[MOZ_GTK_WINDOW_MAXIMIZED]);
+
+ /* Clear already freed arrays */
+ mozilla::PodArrayZero(sWidgetStorage);
+diff --git a/widget/gtk/gtk3drawing.cpp b/widget/gtk/gtk3drawing.cpp
+index 4c562b380095..ee2b8a04f63f 100644
+--- a/widget/gtk/gtk3drawing.cpp
++++ b/widget/gtk/gtk3drawing.cpp
+@@ -17,6 +17,7 @@
+ #include "WidgetStyleCache.h"
+
+ #include <math.h>
++#include <dlfcn.h>
+
+ static gboolean checkbox_check_state;
+ static gboolean notebook_has_tab_gap;
+@@ -39,9 +40,25 @@ static gint
+ moz_gtk_menu_item_paint(WidgetNodeType widget, cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state, GtkTextDirection direction);
+
++static void
++moz_gtk_add_style_margin(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_border(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void
++moz_gtk_add_style_padding(GtkStyleContext* style,
++ gint* left, gint* top, gint* right, gint* bottom);
++static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom);
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle);
+
++
+ // GetStateFlagsFromGtkWidgetState() can be safely used for the specific
+ // GtkWidgets that set both prelight and active flags. For other widgets,
+ // either the GtkStateFlags or Gecko's GtkWidgetState need to be carefully
+@@ -233,6 +250,43 @@ moz_gtk_splitter_get_metrics(gint orientation, gint* size)
+ return MOZ_GTK_SUCCESS;
+ }
+
++void
++moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ MOZ_ASSERT(gtk_check_version(3, 20, 0) == nullptr,
++ "Window decorations are only supported on GTK 3.20+.");
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW);
++
++ *top = *right = *bottom = *left = 0;
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ GtkBorder windowMargin;
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &windowMargin);
++
++ style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION);
++
++ // Available on GTK 3.20+.
++ static auto sGtkRenderBackgroundGetClip =
++ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*))
++ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip");
++
++ GdkRectangle shadowClip;
++ sGtkRenderBackgroundGetClip(style, 0, 0, 0, 0, &shadowClip);
++
++ // Transfer returned inset rectangle to GtkBorder
++ GtkBorder shadowBorder = {
++ static_cast<gint16>(-shadowClip.x), // left
++ static_cast<gint16>(shadowClip.width + shadowClip.x), // right
++ static_cast<gint16>(-shadowClip.y), // top
++ static_cast<gint16>(shadowClip.height + shadowClip.y), // bottom
++ };
++
++ *left += MAX(windowMargin.left, shadowBorder.left);
++ *right += MAX(windowMargin.right, shadowBorder.right);
++ *top += MAX(windowMargin.top, shadowBorder.top);
++ *bottom += MAX(windowMargin.bottom, shadowBorder.bottom);
++}
++
+ static gint
+ moz_gtk_window_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkTextDirection direction)
+@@ -302,6 +356,24 @@ moz_gtk_button_paint(cairo_t *cr, GdkRectangle* rect,
+ }
+
+ static gint
++moz_gtk_header_bar_button_paint(cairo_t *cr, GdkRectangle* rect,
++ GtkWidgetState* state,
++ GtkReliefStyle relief, GtkWidget* widget,
++ GtkTextDirection direction)
++{
++ GtkBorder margin;
++ GtkStyleContext* style = gtk_widget_get_style_context(widget);
++ gtk_style_context_get_margin(style, GTK_STATE_FLAG_NORMAL, &margin);
++
++ rect->x += margin.left;
++ rect->y += margin.top;
++ rect->width -= margin.left + margin.right;
++ rect->height -= margin.top + margin.bottom;
++
++ return moz_gtk_button_paint(cr, rect, state, relief, widget, direction);
++}
++
++static gint
+ moz_gtk_toggle_paint(cairo_t *cr, GdkRectangle* rect,
+ GtkWidgetState* state,
+ gboolean selected, gboolean inconsistent,
+@@ -1948,6 +2020,38 @@ moz_gtk_info_bar_paint(cairo_t *cr, GdkRectangle* rect,
+ return MOZ_GTK_SUCCESS;
+ }
+
++static gint
++moz_gtk_header_bar_paint(WidgetNodeType widgetType,
++ cairo_t *cr, GdkRectangle* rect, GtkWidgetState* state)
++{
++ GtkStateFlags state_flags = GetStateFlagsFromGtkWidgetState(state);
++ GtkStyleContext *style;
++
++ style = GetStyleContext(widgetType, GTK_TEXT_DIR_LTR,
++ state_flags);
++ InsetByMargin(rect, style);
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width,
++ rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++
++ return MOZ_GTK_SUCCESS;
++}
++
++void
++moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ static GtkWidgetState state;
++ moz_gtk_header_bar_paint(MOZ_GTK_HEADER_BAR, cr, rect, &state);
++}
++
++void
++moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left)
++{
++ *left = *top = *right = *bottom = 0;
++ moz_gtk_add_border_padding(GetStyleContext(MOZ_GTK_HEADER_BAR),
++ left, top, right, bottom);
++}
++
+ static void
+ moz_gtk_add_style_margin(GtkStyleContext* style,
+ gint* left, gint* top, gint* right, gint* bottom)
+@@ -1999,6 +2103,14 @@ static void moz_gtk_add_margin_border_padding(GtkStyleContext *style,
+ moz_gtk_add_style_padding(style, left, top, right, bottom);
+ }
+
++static void moz_gtk_add_border_padding(GtkStyleContext *style,
++ gint* left, gint* top,
++ gint* right, gint* bottom)
++{
++ moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_style_padding(style, left, top, right, bottom);
++}
++
+ static GtkBorder
+ GetMarginBorderPadding(GtkStyleContext* aStyle)
+ {
+@@ -2054,8 +2166,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ // XXX: Subtract 1 pixel from the padding to account for the default
+ // padding in forms.css. See bug 1187385.
+ *left = *top = *right = *bottom = -1;
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ return MOZ_GTK_SUCCESS;
+ }
+@@ -2076,10 +2187,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ *left = *top = *right = *bottom =
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_TREE_HEADER_CELL)));
+-
+ style = GetStyleContext(MOZ_GTK_TREE_HEADER_CELL);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_TREE_HEADER_SORTARROW:
+@@ -2105,8 +2214,7 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ gtk_container_get_border_width(GTK_CONTAINER(
+ GetWidget(MOZ_GTK_COMBOBOX_BUTTON)));
+ style = GetStyleContext(MOZ_GTK_COMBOBOX_BUTTON);
+- moz_gtk_add_style_padding(style, left, top, right, bottom);
+- moz_gtk_add_style_border(style, left, top, right, bottom);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
+
+ /* If there is no separator, don't try to count its width. */
+ separator_width = 0;
+@@ -2160,10 +2268,8 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+ style = gtk_widget_get_style_context(w);
+
+ *left = *top = *right = *bottom = gtk_container_get_border_width(GTK_CONTAINER(w));
+- moz_gtk_add_style_border(style,
+- left, top, right, bottom);
+- moz_gtk_add_style_padding(style,
+- left, top, right, bottom);
++ moz_gtk_add_border_padding(style,
++ left, top, right, bottom);
+ return MOZ_GTK_SUCCESS;
+ }
+ case MOZ_GTK_MENUPOPUP:
+@@ -2210,6 +2316,21 @@ moz_gtk_get_widget_border(WidgetNodeType widget, gint* left, gint* top,
+
+ return MOZ_GTK_SUCCESS;
+ }
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ {
++ style = GetStyleContext(widget);
++ moz_gtk_add_margin_border_padding(style, left, top, right, bottom);
++ return MOZ_GTK_SUCCESS;
++ }
+
+ /* These widgets have no borders, since they are not containers. */
+ case MOZ_GTK_CHECKBUTTON_LABEL:
+@@ -2646,6 +2767,36 @@ GetScrollbarMetrics(GtkOrientation aOrientation)
+ return metrics;
+ }
+
++void
++moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect)
++{
++ gint top, right, bottom, left;
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++
++ cairo_save(cr);
++ cairo_set_operator(cr, CAIRO_OPERATOR_CLEAR);
++ cairo_rectangle(cr, rect->x, rect->y, left, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x+rect->width-right, rect->y, right, rect->height);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->y, rect->width, top);
++ cairo_fill(cr);
++ cairo_rectangle(cr, rect->x, rect->height-bottom, rect->width, bottom);
++ cairo_fill(cr);
++ cairo_restore(cr);
++
++ GtkStyleContext* style = GetStyleContext(MOZ_GTK_WINDOW_DECORATION,
++ GTK_TEXT_DIR_NONE);
++ rect->x += left;
++ rect->y += top;
++ rect->width -= left + right;
++ rect->height -= top + bottom;
++
++ gtk_render_background(style, cr, rect->x, rect->y, rect->width, rect->height);
++ gtk_render_frame(style, cr, rect->x, rect->y, rect->width, rect->height);
++}
++
++
+ /* cairo_t *cr argument has to be a system-cairo. */
+ gint
+ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+@@ -2671,6 +2822,14 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ GetWidget(MOZ_GTK_BUTTON),
+ direction);
+ break;
++ case MOZ_GTK_HEADER_BAR_BUTTON_CLOSE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE:
++ case MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE:
++ return moz_gtk_header_bar_button_paint(cr, rect, state,
++ (GtkReliefStyle) flags,
++ GetWidget(widget),
++ direction);
++ break;
+ case MOZ_GTK_CHECKBUTTON:
+ case MOZ_GTK_RADIOBUTTON:
+ return moz_gtk_toggle_paint(cr, rect, state,
+@@ -2877,6 +3036,10 @@ moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr,
+ case MOZ_GTK_INFO_BAR:
+ return moz_gtk_info_bar_paint(cr, rect, state);
+ break;
++ case MOZ_GTK_HEADER_BAR:
++ case MOZ_GTK_HEADER_BAR_MAXIMIZED:
++ return moz_gtk_header_bar_paint(widget, cr, rect, state);
++ break;
+ default:
+ g_warning("Unknown widget type: %d", widget);
+ }
+diff --git a/widget/gtk/gtkdrawing.h b/widget/gtk/gtkdrawing.h
+index 42dbf8287499..c0a7eba5006a 100644
+--- a/widget/gtk/gtkdrawing.h
++++ b/widget/gtk/gtkdrawing.h
+@@ -268,8 +268,14 @@ typedef enum {
+ MOZ_GTK_SPLITTER_SEPARATOR_VERTICAL,
+ /* Paints the background of a window, dialog or page. */
+ MOZ_GTK_WINDOW,
++ /* Used only as a container for MOZ_GTK_HEADER_BAR_MAXIMIZED. */
++ MOZ_GTK_WINDOW_MAXIMIZED,
+ /* Window container for all widgets */
+ MOZ_GTK_WINDOW_CONTAINER,
++ /* Window with the 'csd' style class. */
++ MOZ_GTK_WINDOW_CSD,
++ /* Client-side window decoration node. Available on GTK 3.20+. */
++ MOZ_GTK_WINDOW_DECORATION,
+ /* Paints a GtkInfoBar, for notifications. */
+ MOZ_GTK_INFO_BAR,
+ /* Used for widget tree construction. */
+@@ -290,6 +296,14 @@ typedef enum {
+ MOZ_GTK_COMBOBOX_ENTRY_ARROW,
+ /* Used for scrolled window shell. */
+ MOZ_GTK_SCROLLED_WINDOW,
++ /* Paints a GtkHeaderBar */
++ MOZ_GTK_HEADER_BAR,
++ /* Paints a GtkHeaderBar in maximized state */
++ MOZ_GTK_HEADER_BAR_MAXIMIZED,
++ /* Paints a GtkHeaderBar title buttons */
++ MOZ_GTK_HEADER_BAR_BUTTON_CLOSE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE,
++ MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE,
+
+ MOZ_GTK_WIDGET_NODE_COUNT
+ } WidgetNodeType;
+@@ -542,6 +556,32 @@ gint moz_gtk_get_menu_separator_height(gint* size);
+ */
+ gint moz_gtk_splitter_get_metrics(gint orientation, gint* size);
+
++#if (MOZ_WIDGET_GTK == 3)
++/**
++ * Gets the margins to be used for window decorations, typically the extra space
++ * required to draw a drop shadow (obtained from gtk_render_background_get_clip).
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_get_window_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window decorations, typically a shadow.
++ * Only available on GTK 3.20+.
++ */
++void moz_gtk_window_decoration_paint(cairo_t *cr, GdkRectangle* rect);
++
++/**
++ * Gets the border of window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_get_header_bar_border(gint* top, gint* right, gint* bottom, gint* left);
++
++/**
++ * Draw window header bar, only available on GTK 3.20+.
++ */
++void moz_gtk_header_bar_paint(cairo_t *cr, GdkRectangle* rect);
++
++#endif
++
+ /**
+ * Get the YTHICKNESS of a tab (notebook extension).
+ */
+diff --git a/widget/gtk/mozgtk/mozgtk.c b/widget/gtk/mozgtk/mozgtk.c
+index 7285b7f001ac..6e554c7f628e 100644
+--- a/widget/gtk/mozgtk/mozgtk.c
++++ b/widget/gtk/mozgtk/mozgtk.c
+@@ -580,6 +580,8 @@ STUB(gtk_style_context_set_state)
+ STUB(gtk_style_properties_lookup_property)
+ STUB(gtk_tree_view_column_get_button)
+ STUB(gtk_widget_get_preferred_size)
++STUB(gtk_widget_get_preferred_width)
++STUB(gtk_widget_get_preferred_height)
+ STUB(gtk_widget_get_state_flags)
+ STUB(gtk_widget_get_style_context)
+ STUB(gtk_widget_path_append_type)
+@@ -589,6 +591,10 @@ STUB(gtk_widget_path_iter_add_class)
+ STUB(gtk_widget_path_get_object_type)
+ STUB(gtk_widget_path_new)
+ STUB(gtk_widget_path_unref)
++STUB(gtk_widget_set_margin_left)
++STUB(gtk_widget_set_margin_right)
++STUB(gtk_widget_set_margin_top)
++STUB(gtk_widget_set_margin_bottom)
+ STUB(gtk_widget_set_visual)
+ STUB(gtk_app_chooser_dialog_new_for_content_type)
+ STUB(gtk_app_chooser_get_type)
+@@ -601,6 +607,7 @@ STUB(gtk_color_chooser_get_type)
+ STUB(gtk_color_chooser_set_rgba)
+ STUB(gtk_color_chooser_get_rgba)
+ STUB(gtk_color_chooser_set_use_alpha)
++STUB(gtk_window_get_size)
+ #endif
+
+ #ifdef GTK2_SYMBOLS
+diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp
+index e02bf10fe87f..a5950ac35799 100644
+--- a/widget/gtk/nsLookAndFeel.cpp
++++ b/widget/gtk/nsLookAndFeel.cpp
+@@ -642,6 +642,22 @@ nsLookAndFeel::GetIntImpl(IntID aID, int32_t &aResult)
+ case eIntID_ContextMenuOffsetHorizontal:
+ aResult = 2;
+ break;
++ case eIntID_GTKCSDAvailable:
++ EnsureInit();
++ aResult = sCSDAvailable;
++ break;
++ case eIntID_GTKCSDMaximizeButton:
++ EnsureInit();
++ aResult = sCSDMaximizeButton;
++ break;
++ case eIntID_GTKCSDMinimizeButton:
++ EnsureInit();
++ aResult = sCSDMinimizeButton;
++ break;
++ case eIntID_GTKCSDCloseButton:
++ EnsureInit();
++ aResult = sCSDCloseButton;
++ break;
+ default:
+ aResult = 0;
+ res = NS_ERROR_FAILURE;
+@@ -1048,6 +1064,40 @@ nsLookAndFeel::EnsureInit()
+
+ gtk_widget_destroy(window);
+ g_object_unref(labelWidget);
++
++ // Require GTK 3.20 for client-side decoration support.
++ // 3.20 exposes gtk_render_background_get_clip, which is required for
++ // calculating shadow metrics for decorated windows.
++ sCSDAvailable = gtk_check_version(3, 20, 0) == nullptr;
++ if (sCSDAvailable) {
++ sCSDAvailable =
++ mozilla::Preferences::GetBool("widget.allow-client-side-decoration",
++ false);
++ }
++
++ const gchar* decorationLayout = nullptr;
++ if (gtk_check_version(3, 12, 0) == nullptr) {
++ static auto sGtkHeaderBarGetDecorationLayoutPtr =
++ (const gchar* (*)(GtkWidget*))
++ dlsym(RTLD_DEFAULT, "gtk_header_bar_get_decoration_layout");
++
++ GtkWidget* headerBar = GetWidget(MOZ_GTK_HEADER_BAR);
++ decorationLayout = sGtkHeaderBarGetDecorationLayoutPtr(headerBar);
++ if (!decorationLayout) {
++ g_object_get(settings, "gtk-decoration-layout", &decorationLayout,
++ nullptr);
++ }
++ }
++
++ if (decorationLayout) {
++ sCSDCloseButton = (strstr(decorationLayout, "close") != nullptr);
++ sCSDMaximizeButton = (strstr(decorationLayout, "maximize") != nullptr);
++ sCSDMinimizeButton = (strstr(decorationLayout, "minimize") != nullptr);
++ } else {
++ sCSDCloseButton = true;
++ sCSDMaximizeButton = true;
++ sCSDMinimizeButton = true;
++ }
+ }
+
+ // virtual
+diff --git a/widget/gtk/nsLookAndFeel.h b/widget/gtk/nsLookAndFeel.h
+index 177d069f6567..6e14236e604a 100644
+--- a/widget/gtk/nsLookAndFeel.h
++++ b/widget/gtk/nsLookAndFeel.h
+@@ -32,6 +32,8 @@ public:
+ virtual char16_t GetPasswordCharacterImpl();
+ virtual bool GetEchoPasswordImpl();
+
++ bool IsCSDAvailable() const { return sCSDAvailable; }
++
+ protected:
+
+ // Cached fonts
+@@ -82,6 +84,10 @@ protected:
+ char16_t sInvisibleCharacter;
+ float sCaretRatio;
+ bool sMenuSupportsDrag;
++ bool sCSDAvailable;
++ bool sCSDMaximizeButton;
++ bool sCSDMinimizeButton;
++ bool sCSDCloseButton;
+ bool mInitialized;
+
+ void EnsureInit();
+diff --git a/widget/gtk/nsNativeThemeGTK.cpp b/widget/gtk/nsNativeThemeGTK.cpp
+index 211790096a3e..6ed35b97a0d7 100644
+--- a/widget/gtk/nsNativeThemeGTK.cpp
++++ b/widget/gtk/nsNativeThemeGTK.cpp
+@@ -23,6 +23,7 @@
+ #include "nsIDOMHTMLInputElement.h"
+ #include "nsGkAtoms.h"
+ #include "nsAttrValueInlines.h"
++#include "nsWindow.h"
+
+ #include "mozilla/EventStates.h"
+ #include "mozilla/Services.h"
+@@ -703,6 +704,24 @@ nsNativeThemeGTK::GetGtkWidgetAndState(uint8_t aWidgetType, nsIFrame* aFrame,
+ case NS_THEME_GTK_INFO_BAR:
+ aGtkWidgetType = MOZ_GTK_INFO_BAR;
+ break;
++ case NS_THEME_WINDOW_TITLEBAR:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR;
++ break;
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_MAXIMIZED;
++ break;
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_CLOSE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MINIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ aGtkWidgetType = MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE;
++ break;
+ default:
+ return false;
+ }
+@@ -1627,6 +1646,10 @@ nsNativeThemeGTK::GetMinimumWidgetSize(nsPresContext* aPresContext,
+ case NS_THEME_MENULIST:
+ case NS_THEME_TOOLBARBUTTON:
+ case NS_THEME_TREEHEADERCELL:
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
+ {
+ if (aWidgetType == NS_THEME_MENULIST) {
+ // Include the arrow size.
+@@ -1892,9 +1915,21 @@ nsNativeThemeGTK::ThemeSupportsWidget(nsPresContext* aPresContext,
+ case NS_THEME_DIALOG:
+ #if (MOZ_WIDGET_GTK == 3)
+ case NS_THEME_GTK_INFO_BAR:
++ case NS_THEME_GTK_WINDOW_DECORATION:
+ #endif
+ return !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
+
++ case NS_THEME_WINDOW_BUTTON_CLOSE:
++ case NS_THEME_WINDOW_BUTTON_MINIMIZE:
++ case NS_THEME_WINDOW_BUTTON_MAXIMIZE:
++ case NS_THEME_WINDOW_BUTTON_RESTORE:
++ case NS_THEME_WINDOW_TITLEBAR:
++ case NS_THEME_WINDOW_TITLEBAR_MAXIMIZED:
++ // GtkHeaderBar is available on GTK 3.10+, which is used for styling
++ // title bars and title buttons.
++ return gtk_check_version(3, 10, 0) == nullptr &&
++ !IsWidgetStyled(aPresContext, aFrame, aWidgetType);
++
+ case NS_THEME_MENULIST_BUTTON:
+ if (aFrame && aFrame->GetWritingMode().IsVertical()) {
+ return false;
+@@ -1978,6 +2013,13 @@ nsNativeThemeGTK::GetWidgetTransparency(nsIFrame* aFrame, uint8_t aWidgetType)
+ #else
+ return eTransparent;
+ #endif
++ case NS_THEME_GTK_WINDOW_DECORATION:
++ {
++ nsWindow* window = static_cast<nsWindow*>(aFrame->GetNearestWidget());
++ if (window)
++ return window->IsComposited() ? eTransparent : eOpaque;
++ return eOpaque;
++ }
+ }
+
+ return eUnknownTransparency;
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+index 37b6aae4c3d0..f0c3343f20ae 100644
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -85,6 +85,7 @@
+ #include "nsIPropertyBag2.h"
+ #include "GLContext.h"
+ #include "gfx2DGlue.h"
++#include "nsLookAndFeel.h"
+
+ #ifdef ACCESSIBILITY
+ #include "mozilla/a11y/Accessible.h"
+@@ -139,6 +140,8 @@ using namespace mozilla::widget;
+
+ #include "mozilla/layers/APZCTreeManager.h"
+
++#include "gtkdrawing.h"
++
+ using namespace mozilla;
+ using namespace mozilla::gfx;
+ using namespace mozilla::widget;
+@@ -185,6 +188,8 @@ static gboolean expose_event_cb (GtkWidget *widget,
+ #else
+ static gboolean expose_event_cb (GtkWidget *widget,
+ cairo_t *rect);
++static gboolean expose_event_decoration_draw_cb (GtkWidget *widget,
++ cairo_t *cr);
+ #endif
+ static gboolean configure_event_cb (GtkWidget *widget,
+ GdkEventConfigure *event);
+@@ -230,7 +235,6 @@ static void screen_composited_changed_cb (GdkScreen* screen,
+ gpointer user_data);
+ static void widget_composited_changed_cb (GtkWidget* widget,
+ gpointer user_data);
+-
+ #if (MOZ_WIDGET_GTK == 3)
+ static void scale_changed_cb (GtkWidget* widget,
+ GParamSpec* aPSpec,
+@@ -439,6 +443,7 @@ nsWindow::nsWindow()
+
+ mContainer = nullptr;
+ mGdkWindow = nullptr;
++ mIsCSDEnabled = false;
+ mShell = nullptr;
+ mCompositorWidgetDelegate = nullptr;
+ mHasMappedToplevel = false;
+@@ -480,6 +485,9 @@ nsWindow::nsWindow()
+ mLastScrollEventTime = GDK_CURRENT_TIME;
+ #endif
+ mPendingConfigures = 0;
++ mDrawWindowDecoration = false;
++ mDecorationSize = {0,0,0,0};
++ mCSDSupportLevel = CSD_SUPPORT_UNKNOWN;
+ }
+
+ nsWindow::~nsWindow()
+@@ -1478,8 +1486,8 @@ LayoutDeviceIntRect
+ nsWindow::GetScreenBounds()
+ {
+ LayoutDeviceIntRect rect;
+- if (mIsTopLevel && mContainer) {
+- // use the point including window decorations
++ if (mIsTopLevel && mContainer && !IsClientDecorated()) {
++ // use the point including default Gtk+ window decorations
+ gint x, y;
+ gdk_window_get_root_origin(gtk_widget_get_window(GTK_WIDGET(mContainer)), &x, &y);
+ rect.MoveTo(GdkPointToDevicePixels({ x, y }));
+@@ -1605,6 +1613,10 @@ nsWindow::SetCursor(nsCursor aCursor)
+ return;
+
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), newCursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ newCursor);
++ }
+ }
+ }
+ }
+@@ -1661,6 +1673,10 @@ nsWindow::SetCursor(imgIContainer* aCursor,
+ if (cursor) {
+ if (mContainer) {
+ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mContainer)), cursor);
++ if (IsClientDecorated()) {
++ gdk_window_set_cursor(gtk_widget_get_window(GTK_WIDGET(mShell)),
++ cursor);
++ }
+ rv = NS_OK;
+ }
+ #if (MOZ_WIDGET_GTK == 3)
+@@ -2175,6 +2191,12 @@ nsWindow::OnExposeEvent(cairo_t *cr)
+ return TRUE;
+ }
+
++ // Clip upper part of the mContainer to get visible rounded corners
++ // of GtkHeaderBar which is renderd to mShell.
++ if (mIsCSDEnabled) {
++ ApplyCSDClipping();
++ }
++
+ // If this widget uses OMTC...
+ if (GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_CLIENT ||
+ GetLayerManager()->GetBackendType() == LayersBackend::LAYERS_WR) {
+@@ -2585,6 +2607,53 @@ nsWindow::OnMotionNotifyEvent(GdkEventMotion *aEvent)
+ }
+ }
+ #endif /* MOZ_X11 */
++ // Client is decorated and we're getting the motion event for mShell
++ // window which draws the CSD decorations around mContainer.
++ if (IsClientDecorated()) {
++ if (aEvent->window == gtk_widget_get_window(mShell)) {
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ nsCursor cursor = eCursor_none;
++ switch (edge) {
++ case GDK_WINDOW_EDGE_NORTH:
++ cursor = eCursor_n_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_WEST:
++ cursor = eCursor_nw_resize;
++ break;
++ case GDK_WINDOW_EDGE_NORTH_EAST:
++ cursor = eCursor_ne_resize;
++ break;
++ case GDK_WINDOW_EDGE_WEST:
++ cursor = eCursor_w_resize;
++ break;
++ case GDK_WINDOW_EDGE_EAST:
++ cursor = eCursor_e_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH:
++ cursor = eCursor_s_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_WEST:
++ cursor = eCursor_sw_resize;
++ break;
++ case GDK_WINDOW_EDGE_SOUTH_EAST:
++ cursor = eCursor_se_resize;
++ break;
++ }
++ SetCursor(cursor);
++ return;
++ }
++ }
++ // We're not on resize handle - check if we need to reset cursor back.
++ if (mCursor == eCursor_n_resize || mCursor == eCursor_nw_resize ||
++ mCursor == eCursor_ne_resize || mCursor == eCursor_w_resize ||
++ mCursor == eCursor_e_resize || mCursor == eCursor_s_resize ||
++ mCursor == eCursor_sw_resize || mCursor == eCursor_se_resize) {
++ SetCursor(eCursor_standard);
++ }
++ }
+
+ WidgetMouseEvent event(true, eMouseMove, this, WidgetMouseEvent::eReal);
+
+@@ -2755,6 +2824,20 @@ nsWindow::OnButtonPressEvent(GdkEventButton *aEvent)
+ if (CheckForRollup(aEvent->x_root, aEvent->y_root, false, false))
+ return;
+
++ if (IsClientDecorated() && aEvent->window == gtk_widget_get_window(mShell)) {
++ // Check to see if the event is within our window's resize region
++ GdkWindowEdge edge;
++ LayoutDeviceIntPoint refPoint =
++ GdkEventCoordsToDevicePixels(aEvent->x, aEvent->y);
++ if (CheckResizerEdge(refPoint, edge)) {
++ gdk_window_begin_resize_drag(gtk_widget_get_window(mShell),
++ edge, aEvent->button,
++ aEvent->x_root, aEvent->y_root,
++ aEvent->time);
++ return;
++ }
++ }
++
+ gdouble pressure = 0;
+ gdk_event_get_axis ((GdkEvent*)aEvent, GDK_AXIS_PRESSURE, &pressure);
+ mLastMotionPressure = pressure;
+@@ -3340,6 +3423,8 @@ nsWindow::OnWindowStateEvent(GtkWidget *aWidget, GdkEventWindowState *aEvent)
+ #endif //ACCESSIBILITY
+ }
+
++ UpdateClientDecorations();
++
+ if (mWidgetListener) {
+ mWidgetListener->SizeModeChanged(mSizeState);
+ if (aEvent->changed_mask & GDK_WINDOW_STATE_FULLSCREEN) {
+@@ -3404,6 +3489,7 @@ nsWindow::OnCompositedChanged()
+ presShell->ThemeChanged();
+ }
+ }
++ UpdateClientDecorations();
+ }
+
+ void
+@@ -3592,7 +3678,8 @@ nsWindow::Create(nsIWidget* aParent,
+ GtkWindow *topLevelParent = nullptr;
+ nsWindow *parentnsWindow = nullptr;
+ GtkWidget *eventWidget = nullptr;
+- bool shellHasCSD = false;
++ GtkWidget *drawWidget = nullptr;
++ bool drawToContainer = false;
+
+ if (aParent) {
+ parentnsWindow = static_cast<nsWindow*>(aParent);
+@@ -3639,29 +3726,47 @@ nsWindow::Create(nsIWidget* aParent,
+ GTK_WINDOW_TOPLEVEL : GTK_WINDOW_POPUP;
+ mShell = gtk_window_new(type);
+
+- bool useAlphaVisual = (mWindowType == eWindowType_popup &&
+- aInitData->mSupportTranslucency);
++ bool useAlphaVisual = false;
++#if (MOZ_WIDGET_GTK == 3)
++ // When CSD is available we can emulate it for toplevel windows.
++ // Content is rendered to mContainer and transparent decorations to mShell.
++ if (GetCSDSupportLevel() != CSD_SUPPORT_NONE &&
++ mWindowType == eWindowType_toplevel) {
++ int32_t isCSDAvailable = false;
++ nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable,
++ &isCSDAvailable);
++ if (NS_SUCCEEDED(rv)) {
++ mIsCSDEnabled = useAlphaVisual = isCSDAvailable;
++ }
++ } else
++#endif
++ if (mWindowType == eWindowType_popup) {
++ useAlphaVisual = aInitData->mSupportTranslucency;
++ }
+
+ // mozilla.widget.use-argb-visuals is a hidden pref defaulting to false
+ // to allow experimentation
+ if (Preferences::GetBool("mozilla.widget.use-argb-visuals", false))
+ useAlphaVisual = true;
+
++ // An ARGB visual is only useful if we are on a compositing
++ // window manager.
++ GdkScreen *screen = gtk_widget_get_screen(mShell);
++ if (useAlphaVisual && !gdk_screen_is_composited(screen)) {
++ useAlphaVisual = false;
++ }
++
+ // We need to select an ARGB visual here instead of in
+ // SetTransparencyMode() because it has to be done before the
+- // widget is realized. An ARGB visual is only useful if we
+- // are on a compositing window manager.
++ // widget is realized.
+ if (useAlphaVisual) {
+- GdkScreen *screen = gtk_widget_get_screen(mShell);
+- if (gdk_screen_is_composited(screen)) {
+ #if (MOZ_WIDGET_GTK == 2)
+- GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
+- gtk_widget_set_colormap(mShell, colormap);
++ GdkColormap *colormap = gdk_screen_get_rgba_colormap(screen);
++ gtk_widget_set_colormap(mShell, colormap);
+ #else
+- GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
+- gtk_widget_set_visual(mShell, visual);
++ GdkVisual *visual = gdk_screen_get_rgba_visual(screen);
++ gtk_widget_set_visual(mShell, visual);
+ #endif
+- }
+ }
+
+ // We only move a general managed toplevel window if someone has
+@@ -3755,24 +3860,56 @@ nsWindow::Create(nsIWidget* aParent,
+ mContainer = MOZ_CONTAINER(container);
+
+ #if (MOZ_WIDGET_GTK == 3)
+- // "csd" style is set when widget is realized so we need to call
+- // it explicitly now.
+- gtk_widget_realize(mShell);
+-
+- // We can't draw directly to top-level window when client side
+- // decorations are enabled. We use container with GdkWindow instead.
+- GtkStyleContext* style = gtk_widget_get_style_context(mShell);
+- shellHasCSD = gtk_style_context_has_class(style, "csd");
+-#endif
+- if (!shellHasCSD) {
+- // Use mShell's window for drawing and events.
+- gtk_widget_set_has_window(container, FALSE);
+- // Prevent GtkWindow from painting a background to flicker.
+- gtk_widget_set_app_paintable(mShell, TRUE);
++ /* There are tree possible situations here:
++ *
++ * 1) We're running on Gtk+ < 3.20 without any decorations. Content
++ * is rendered to mShell window and we listen Gtk+ events on mShell.
++ * 2) We're running on Gtk+ > 3.20 and window decorations are drawn
++ * by default by Gtk+. Content is rendered to mContainer,
++ * we listen events on mContainer. mShell contains default Gtk+
++ * window decorations rendered by Gtk+.
++ * 3) We're running on Gtk+ > 3.20 and both window decorations and
++ * content is rendered by gecko. We emulate Gtk+ decoration rendering
++ * to mShell and we need to listen Gtk events on both mShell
++ * and mContainer.
++ */
++
++ // When client side decorations are enabled (rendered by us or by Gtk+)
++ // the decoration is rendered to mShell (toplevel) window and
++ // we draw our content to mContainer.
++ if (mIsCSDEnabled) {
++ drawToContainer = true;
++ } else {
++ // mIsCSDEnabled can be disabled by preference so look at actual
++ // toplevel window style to to detect active "csd" style.
++ // The "csd" style is set when widget is realized so we need to call
++ // it explicitly now.
++ gtk_widget_realize(mShell);
++
++ GtkStyleContext* style = gtk_widget_get_style_context(mShell);
++ drawToContainer = gtk_style_context_has_class(style, "csd");
+ }
+- // Set up event widget
+- eventWidget = shellHasCSD ? container : mShell;
++#endif
++ drawWidget = (drawToContainer) ? container : mShell;
++ // When we draw decorations on our own we need to handle resize events
++ // because Gtk+ does not provide resizers for undecorated windows.
++ // The CSD on mShell borders act as resize handlers
++ // so we need to listen there.
++ eventWidget = (drawToContainer && !mIsCSDEnabled) ? container : mShell;
++
+ gtk_widget_add_events(eventWidget, kEvents);
++ if (eventWidget != drawWidget) {
++ // CSD is rendered by us (not by Gtk+) so we also need to listen
++ // at mShell window for events.
++ gtk_widget_add_events(drawWidget, kEvents);
++ }
++
++ // Prevent GtkWindow from painting a background to flicker.
++ gtk_widget_set_app_paintable(drawWidget, TRUE);
++
++ // gtk_container_add() realizes the child widget so we need to
++ // set it now.
++ gtk_widget_set_has_window(container, drawToContainer);
+
+ gtk_container_add(GTK_CONTAINER(mShell), container);
+ gtk_widget_realize(container);
+@@ -3782,7 +3919,7 @@ nsWindow::Create(nsIWidget* aParent,
+ gtk_widget_grab_focus(container);
+
+ // the drawing window
+- mGdkWindow = gtk_widget_get_window(eventWidget);
++ mGdkWindow = gtk_widget_get_window(drawWidget);
+
+ if (mWindowType == eWindowType_popup) {
+ // gdk does not automatically set the cursor for "temporary"
+@@ -3855,6 +3992,11 @@ nsWindow::Create(nsIWidget* aParent,
+
+ // label the drawing window with this object so we can find our way home
+ g_object_set_data(G_OBJECT(mGdkWindow), "nsWindow", this);
++ if (mIsCSDEnabled) {
++ // label the CSD window with this object so we can find our way home
++ g_object_set_data(G_OBJECT(gtk_widget_get_window(mShell)),
++ "nsWindow", this);
++ }
+
+ if (mContainer)
+ g_object_set_data(G_OBJECT(mContainer), "nsWindow", this);
+@@ -3892,6 +4034,10 @@ nsWindow::Create(nsIWidget* aParent,
+ g_signal_connect_after(default_settings,
+ "notify::gtk-font-name",
+ G_CALLBACK(theme_changed_cb), this);
++ if (mIsCSDEnabled) {
++ g_signal_connect(G_OBJECT(mShell), "draw",
++ G_CALLBACK(expose_event_decoration_draw_cb), nullptr);
++ }
+ }
+
+ if (mContainer) {
+@@ -3942,7 +4088,7 @@ nsWindow::Create(nsIWidget* aParent,
+ G_CALLBACK(drag_data_received_event_cb), nullptr);
+
+ GtkWidget *widgets[] = { GTK_WIDGET(mContainer),
+- !shellHasCSD ? mShell : nullptr };
++ !drawToContainer ? mShell : nullptr };
+ for (size_t i = 0; i < ArrayLength(widgets) && widgets[i]; ++i) {
+ // Visibility events are sent to the owning widget of the relevant
+ // window but do not propagate to parent widgets so connect on
+@@ -3972,7 +4118,6 @@ nsWindow::Create(nsIWidget* aParent,
+ // Don't let GTK mess with the shapes of our GdkWindows
+ GTK_PRIVATE_SET_FLAG(eventWidget, GTK_HAS_SHAPE_MASK);
+ #endif
+-
+ // These events are sent to the owning widget of the relevant window
+ // and propagate up to the first widget that handles the events, so we
+ // need only connect on mShell, if it exists, to catch events on its
+@@ -4109,6 +4254,12 @@ nsWindow::NativeResize()
+ size.width, size.height));
+
+ if (mIsTopLevel) {
++ // When we draw decorations add extra space to draw shadows
++ // around the main window.
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+ else if (mContainer) {
+@@ -4165,6 +4316,11 @@ nsWindow::NativeMoveResize()
+ if (mIsTopLevel) {
+ // x and y give the position of the window manager frame top-left.
+ gtk_window_move(GTK_WINDOW(mShell), topLeft.x, topLeft.y);
++
++ if (mDrawWindowDecoration) {
++ size.width += mDecorationSize.left + mDecorationSize.right;
++ size.height += mDecorationSize.top + mDecorationSize.bottom;
++ }
+ // This sets the client window size.
+ gtk_window_resize(GTK_WINDOW(mShell), size.width, size.height);
+ }
+@@ -5523,6 +5679,33 @@ expose_event_cb(GtkWidget *widget, cairo_t *cr)
+
+ return FALSE;
+ }
++
++/* static */
++gboolean
++expose_event_decoration_draw_cb(GtkWidget *widget, cairo_t *cr)
++{
++ GdkWindow* gdkWindow = gtk_widget_get_window(widget);
++ if (gtk_cairo_should_draw_window(cr, gdkWindow)) {
++ RefPtr<nsWindow> window = get_window_for_gtk_widget(widget);
++ if (!window) {
++ NS_WARNING("Cannot get nsWindow from GtkWidget");
++ }
++ else if (window->IsClientDecorated()) {
++ cairo_save(cr);
++ gtk_cairo_transform_to_window(cr, widget, gdkWindow);
++
++ GdkRectangle rect = {0,0,0,0};
++ gtk_window_get_size(GTK_WINDOW(widget), &rect.width, &rect.height);
++ moz_gtk_window_decoration_paint(cr, &rect);
++
++ rect.height = 40;
++ moz_gtk_header_bar_paint(cr, &rect);
++ cairo_restore(cr);
++ }
++ }
++ return TRUE;
++}
++
+ #endif //MOZ_WIDGET_GTK == 2
+
+ static gboolean
+@@ -6575,6 +6758,28 @@ nsWindow::ClearCachedResources()
+ }
+ }
+
++NS_IMETHODIMP
++nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins)
++{
++ SetDrawsInTitlebar(aMargins.top == 0);
++ return NS_OK;
++}
++
++void
++nsWindow::SetDrawsInTitlebar(bool aState)
++{
++ if (!mIsCSDEnabled || aState == mDrawWindowDecoration)
++ return;
++
++ if (mShell) {
++ gtk_window_set_decorated(GTK_WINDOW(mShell), !aState);
++ gtk_widget_set_app_paintable(mShell, aState);
++ }
++
++ mDrawWindowDecoration = aState;
++ UpdateClientDecorations();
++}
++
+ gint
+ nsWindow::GdkScaleFactor()
+ {
+@@ -6845,6 +7050,157 @@ nsWindow::SynthesizeNativeTouchPoint(uint32_t aPointerId,
+ }
+ #endif
+
++bool
++nsWindow::IsClientDecorated() const
++{
++ return mDrawWindowDecoration && mSizeState == nsSizeMode_Normal;
++}
++
++int
++nsWindow::GetClientResizerSize()
++{
++ if (!mShell)
++ return 0;
++
++ // GTK uses a default size of 20px as of 3.20.
++ gint size = 20;
++ gtk_widget_style_get(mShell, "decoration-resize-handle", &size, nullptr);
++
++ return GdkCoordToDevicePixels(size);
++}
++
++nsWindow::CSDSupportLevel
++nsWindow::GetCSDSupportLevel() {
++ if (mCSDSupportLevel != CSD_SUPPORT_UNKNOWN) {
++ return mCSDSupportLevel;
++ }
++ // TODO: MATE
++ const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP");
++ if (currentDesktop) {
++ if (strcmp(currentDesktop, "GNOME") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "XFCE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "X-Cinnamon") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FULL;
++ } else if (strcmp(currentDesktop, "KDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "LXDE") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "openbox") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_FLAT;
++ } else if (strcmp(currentDesktop, "i3") == 0) {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ } else {
++ mCSDSupportLevel = CSD_SUPPORT_NONE;
++ }
++ }
++ return mCSDSupportLevel;
++}
++
++void
++nsWindow::UpdateClientDecorations()
++{
++ // When the CSD is not fully supported by window manager (ie. WM is not
++ // expecting that application is going to draw window shadows) we can't
++ // add shadows widths to the window margin. That would lead to completely
++ // opaque black border of the window.
++ if (!mDrawWindowDecoration || GetCSDSupportLevel() != CSD_SUPPORT_FULL)
++ return;
++
++ gint top = 0, right = 0, bottom = 0, left = 0;
++ if (mSizeState == nsSizeMode_Normal) {
++ moz_gtk_get_window_border(&top, &right, &bottom, &left);
++ }
++
++ static auto sGdkWindowSetShadowWidth =
++ (void (*)(GdkWindow*, gint, gint, gint, gint))
++ dlsym(RTLD_DEFAULT, "gdk_window_set_shadow_width");
++ sGdkWindowSetShadowWidth(gtk_widget_get_window(mShell),
++ left, right, top, bottom);
++
++ mDecorationSize.left = left;
++ mDecorationSize.right = right;
++ mDecorationSize.top = top;
++ mDecorationSize.bottom = bottom;
++
++ // Gtk+ doesn't like when we set mContainer margin bigger than actual
++ // mContainer window size. That happens when we're called early and the
++ // mShell/mContainer is not allocated/resized yet and has default 1x1 size.
++ // Just resize to some minimal value which will be changed
++ // by Gecko soon.
++ GtkAllocation allocation;
++ gtk_widget_get_allocation(GTK_WIDGET(mContainer), &allocation);
++ if (allocation.width < left + right || allocation.height < top + bottom) {
++ gtk_widget_get_preferred_width(GTK_WIDGET(mContainer), nullptr,
++ &allocation.width);
++ gtk_widget_get_preferred_height(GTK_WIDGET(mContainer), nullptr,
++ &allocation.height);
++ allocation.width += left + right + 1;
++ allocation.height += top + bottom + 1;
++ gtk_widget_size_allocate(GTK_WIDGET(mContainer), &allocation);
++ }
++
++ gtk_widget_set_margin_left(GTK_WIDGET(mContainer), mDecorationSize.left);
++ gtk_widget_set_margin_right(GTK_WIDGET(mContainer), mDecorationSize.right);
++ gtk_widget_set_margin_top(GTK_WIDGET(mContainer), mDecorationSize.top);
++ gtk_widget_set_margin_bottom(GTK_WIDGET(mContainer), mDecorationSize.bottom);
++}
++
++void
++nsWindow::ApplyCSDClipping()
++{
++ if (IsClientDecorated()) {
++ gint top, right, bottom, left;
++ moz_gtk_get_header_bar_border(&top, &right, &bottom, &left);
++ cairo_rectangle_int_t rect = { 0, top, mBounds.width, mBounds.height};
++ cairo_region_t *region = cairo_region_create_rectangle(&rect);
++ gdk_window_shape_combine_region(mGdkWindow, region, 0, 0);
++ cairo_region_destroy(region);
++ } else {
++ gdk_window_shape_combine_region(mGdkWindow, nullptr, 0, 0);
++ }
++}
++
++bool
++nsWindow::CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge)
++{
++ gint scale = GdkScaleFactor();
++ gint left = scale * mDecorationSize.left;
++ gint top = scale * mDecorationSize.top;
++ gint right = scale * mDecorationSize.right;
++ gint bottom = scale * mDecorationSize.bottom;
++
++ int resizerSize = GetClientResizerSize();
++ int topDist = aPoint.y;
++ int leftDist = aPoint.x;
++ int rightDist = mBounds.width - aPoint.x;
++ int bottomDist = mBounds.height - aPoint.y;
++
++ //TODO -> wrong sizes
++
++ if (leftDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_WEST;
++ } else if (rightDist <= resizerSize && topDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH_EAST;
++ } else if (leftDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_WEST;
++ } else if (rightDist <= resizerSize && bottomDist <= resizerSize) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH_EAST;
++ } else if (topDist <= top) {
++ aOutEdge = GDK_WINDOW_EDGE_NORTH;
++ } else if (leftDist <= left) {
++ aOutEdge = GDK_WINDOW_EDGE_WEST;
++ } else if (rightDist <= right) {
++ aOutEdge = GDK_WINDOW_EDGE_EAST;
++ } else if (bottomDist <= bottom) {
++ aOutEdge = GDK_WINDOW_EDGE_SOUTH;
++ } else {
++ return false;
++ }
++ return true;
++}
++
+ int32_t
+ nsWindow::RoundsWidgetCoordinatesTo()
+ {
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+index f7c07d57491b..d9a07316a52c 100644
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -123,6 +123,7 @@ public:
+ double aHeight,
+ bool aRepaint) override;
+ virtual bool IsEnabled() const override;
++ bool IsComposited() const;
+
+ void SetZIndex(int32_t aZIndex) override;
+ virtual void SetSizeMode(nsSizeMode aMode) override;
+@@ -351,6 +352,9 @@ public:
+ #endif
+ virtual void GetCompositorWidgetInitData(mozilla::widget::CompositorWidgetInitData* aInitData) override;
+
++ NS_IMETHOD SetNonClientMargins(LayoutDeviceIntMargin& aMargins) override;
++ void SetDrawsInTitlebar(bool aState) override;
++
+ // HiDPI scale conversion
+ gint GdkScaleFactor();
+
+@@ -367,6 +371,9 @@ public:
+ LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect);
+
+ virtual bool WidgetTypeSupportsAcceleration() override;
++
++ // Decorations
++ bool IsClientDecorated() const;
+ protected:
+ virtual ~nsWindow();
+
+@@ -384,6 +391,16 @@ protected:
+
+ virtual void RegisterTouchWindow() override;
+
++ int GetClientResizerSize();
++
++ // Informs the window manager about the size of the shadows surrounding
++ // a client-side decorated window.
++ void UpdateClientDecorations();
++
++ // Returns true if the given point (in device pixels) is within a resizer
++ // region of the window. Only used when drawing decorations client side.
++ bool CheckResizerEdge(LayoutDeviceIntPoint aPoint, GdkWindowEdge& aOutEdge);
++
+ nsCOMPtr<nsIWidget> mParent;
+ // Is this a toplevel window?
+ bool mIsTopLevel;
+@@ -432,12 +449,12 @@ private:
+ gint* aRootX, gint* aRootY);
+ void ClearCachedResources();
+ nsIWidgetListener* GetListener();
+- bool IsComposited() const;
+-
++ void ApplyCSDClipping();
+
+ GtkWidget *mShell;
+ MozContainer *mContainer;
+ GdkWindow *mGdkWindow;
++ bool mIsCSDEnabled;
+ PlatformCompositorWidgetDelegate* mCompositorWidgetDelegate;
+
+
+@@ -536,6 +553,10 @@ private:
+ // leaving fullscreen
+ nsSizeMode mLastSizeMode;
+
++ // If true, draw our own window decorations (where supported).
++ bool mDrawWindowDecoration;
++ GtkBorder mDecorationSize;
++
+ static bool DragInProgress(void);
+
+ void DispatchMissedButtonReleases(GdkEventCrossing *aGdkEvent);
+@@ -567,6 +588,17 @@ private:
+ RefPtr<mozilla::widget::IMContextWrapper> mIMContext;
+
+ mozilla::UniquePtr<mozilla::CurrentX11TimeGetter> mCurrentTimeGetter;
++ typedef enum { CSD_SUPPORT_FULL, // CSD including shadows
++ CSD_SUPPORT_FLAT, // CSD without shadows
++ CSD_SUPPORT_NONE, // WM does not support CSD at all
++ CSD_SUPPORT_UNKNOWN
++ } CSDSupportLevel;
++ /**
++ * Get the support of Client Side Decoration by checking
++ * the XDG_CURRENT_DESKTOP environment variable.
++ */
++ CSDSupportLevel GetCSDSupportLevel();
++ CSDSupportLevel mCSDSupportLevel;
+ };
+
+ #endif /* __nsWindow_h__ */
commit 92551052f62af4fa782b170d265e13aafabd58b8
Author: Martin Stransky <stransky(a)redhat.com>
Date: Fri Oct 6 12:40:42 2017 +0200
Updated to 57.0 Beta 5
diff --git a/.gitignore b/.gitignore
index a40dbb6..5394cf0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -249,3 +249,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-56.0.source.tar.xz
/firefox-langpacks-56.0-20170925.tar.xz
/firefox-langpacks-56.0-20170927.tar.xz
+/firefox-57.0b5.source.tar.xz
+/firefox-langpacks-57.0b5-20171005.tar.xz
diff --git a/build-jit-atomic-always-lucky.patch b/build-jit-atomic-always-lucky.patch
index d6812b6..31bc5ec 100644
--- a/build-jit-atomic-always-lucky.patch
+++ b/build-jit-atomic-always-lucky.patch
@@ -1,19 +1,19 @@
-diff -up firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/AtomicOperations.h
---- firefox-55.0.2/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-07-31 18:20:47.000000000 +0200
-+++ firefox-55.0.2/js/src/jit/AtomicOperations.h 2017-08-29 12:59:52.870926044 +0200
-@@ -348,7 +348,7 @@ AtomicOperations::isLockfree(int32_t siz
- # elif defined(__sh__)
- # include "jit/none/AtomicOperations-feeling-lucky.h"
- # else
--# include "jit/none/AtomicOperations-none.h" // These MOZ_CRASH() always
-+# include "jit/none/AtomicOperations-feeling-lucky.h"
- # endif
- #elif defined(JS_CODEGEN_X86) || defined(JS_CODEGEN_X64)
- # include "jit/x86-shared/AtomicOperations-x86-shared.h"
-diff -up firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h
---- firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-08-29 14:10:52.665031524 +0200
-+++ firefox-55.0.2/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-08-29 14:09:40.756060235 +0200
-@@ -60,6 +60,14 @@
+diff -up firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/AtomicOperations.h
+--- firefox-57.0b5/js/src/jit/AtomicOperations.h.jit-atomic-lucky 2017-10-06 12:34:02.338973607 +0200
++++ firefox-57.0b5/js/src/jit/AtomicOperations.h 2017-10-06 12:38:24.632622215 +0200
+@@ -415,7 +415,7 @@ AtomicOperations::isLockfreeJS(int32_t s
+ #elif defined(__s390__) || defined(__s390x__)
+ # include "jit/none/AtomicOperations-feeling-lucky.h"
+ #else
+-# error "No AtomicOperations support provided for this platform"
++# include "jit/none/AtomicOperations-feeling-lucky.h"
+ #endif
+
+ #endif // jit_AtomicOperations_h
+diff -up firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h
+--- firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h.jit-atomic-lucky 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/js/src/jit/none/AtomicOperations-feeling-lucky.h 2017-10-06 12:34:02.338973607 +0200
+@@ -79,6 +79,14 @@
# define GNUC_COMPATIBLE
#endif
diff --git a/firefox-build-prbool.patch b/firefox-build-prbool.patch
deleted file mode 100644
index 17725af..0000000
--- a/firefox-build-prbool.patch
+++ /dev/null
@@ -1,44 +0,0 @@
-diff -up firefox-53.0/dom/u2f/U2F.cpp.prbool firefox-53.0/dom/u2f/U2F.cpp
---- firefox-53.0/dom/u2f/U2F.cpp.prbool 2017-04-11 06:15:14.000000000 +0200
-+++ firefox-53.0/dom/u2f/U2F.cpp 2017-04-18 09:19:20.524285200 +0200
-@@ -4,6 +4,7 @@
- * 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 "prtypes.h"
- #include "hasht.h"
- #include "mozilla/dom/CallbackFunction.h"
- #include "mozilla/dom/ContentChild.h"
-diff -up firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool firefox-53.0/security/certverifier/CTLogVerifier.cpp
---- firefox-53.0/security/certverifier/CTLogVerifier.cpp.prbool 2017-04-18 09:19:20.524285200 +0200
-+++ firefox-53.0/security/certverifier/CTLogVerifier.cpp 2017-04-18 09:52:34.189402811 +0200
-@@ -9,6 +9,7 @@
- #include <stdint.h>
-
- #include "CTSerialization.h"
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/ArrayUtils.h"
- #include "mozilla/Assertions.h"
-diff -up firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool firefox-53.0/security/certverifier/CTObjectsExtractor.cpp
---- firefox-53.0/security/certverifier/CTObjectsExtractor.cpp.prbool 2017-01-16 17:16:51.000000000 +0100
-+++ firefox-53.0/security/certverifier/CTObjectsExtractor.cpp 2017-04-18 09:19:20.525285196 +0200
-@@ -6,6 +6,7 @@
-
- #include "CTObjectsExtractor.h"
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Assertions.h"
- #include "mozilla/Casting.h"
-diff -up firefox-53.0/security/certverifier/OCSPCache.h.prbool firefox-53.0/security/certverifier/OCSPCache.h
---- firefox-53.0/security/certverifier/OCSPCache.h.prbool 2017-04-11 06:15:19.000000000 +0200
-+++ firefox-53.0/security/certverifier/OCSPCache.h 2017-04-18 09:19:20.525285196 +0200
-@@ -25,6 +25,7 @@
- #ifndef mozilla_psm_OCSPCache_h
- #define mozilla_psm_OCSPCache_h
-
-+#include "prtypes.h"
- #include "hasht.h"
- #include "mozilla/Mutex.h"
- #include "mozilla/Vector.h"
diff --git a/firefox-mozconfig b/firefox-mozconfig
index f98a89e..6b4cb54 100644
--- a/firefox-mozconfig
+++ b/firefox-mozconfig
@@ -12,9 +12,7 @@ ac_add_options --disable-tests
#ac_add_options --enable-libnotify
ac_add_options --enable-necko-wifi
ac_add_options --enable-startup-notification
-#ac_add_options --disable-cpp-exceptions
ac_add_options --disable-updater
-ac_add_options --enable-url-classifier
ac_add_options --enable-chrome-format=omni
ac_add_options --enable-pulseaudio
ac_add_options --with-system-icu
@@ -22,7 +20,8 @@ ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key
ac_add_options --with-google-api-keyfile=../google-api-key
ac_add_options --enable-release
ac_add_options --enable-pie
-ac_add_options --disable-stylo
+# Workaround for mozbz#1341234
+ac_add_options BINDGEN_CFLAGS="$(pkg-config nspr pixman-1 --cflags)"
export BUILD_OFFICIAL=1
export MOZILLA_OFFICIAL=1
diff --git a/firefox.spec b/firefox.spec
index 1c7028f..5d86c4b 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -1,6 +1,3 @@
-# Use ALSA backend?
-%define alsa_backend 0
-
# Use system nspr/nss?
%define system_nss 1
@@ -64,12 +61,12 @@
%endif
%if %{?system_nss}
-%global nspr_version 4.10.10
+%global nspr_version 4.17.0
# NSS/NSPR quite often ends in build override, so as requirement the version
# we're building against could bring us some broken dependencies from time to time.
#%global nspr_build_version %(pkg-config --silence-errors --modversion nspr 2>/dev/null || echo 65536)
%global nspr_build_version %{nspr_version}
-%global nss_version 3.32.1
+%global nss_version 3.33
#%global nss_build_version %(pkg-config --silence-errors --modversion nss 2>/dev/null || echo 65536)
%global nss_build_version %{nss_version}
%endif
@@ -80,9 +77,12 @@
%global sqlite_build_version %(pkg-config --silence-errors --modversion sqlite3 2>/dev/null || echo 65536)
%endif
+%define pre_version b5
+
%global mozappdir %{_libdir}/%{name}
%global mozappdirdev %{_libdir}/%{name}-devel-%{version}
%global langpackdir %{mozappdir}/langpacks
+%global tarballdir %{name}-%{version}%{?pre_version}
%define official_branding 1
%define build_langpacks 1
@@ -98,14 +98,14 @@
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 56.0
-Release: 4%{?pre_tag}%{?dist}
+Version: 57.0
+Release: 0.1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Group: Applications/Internet
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version...
%if %{build_langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20170927.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20171005.tar.xz
%endif
Source10: firefox-mozconfig
Source12: firefox-redhat-default-prefs.js
@@ -122,16 +122,13 @@ Patch0: firefox-install-dir.patch
Patch3: mozilla-build-arm.patch
# https://bugzilla.redhat.com/show_bug.cgi?id=814879#c3
Patch18: xulrunner-24.0-jemalloc-ppc.patch
-Patch20: firefox-build-prbool.patch
Patch25: rhbz-1219542-s390-build.patch
Patch26: build-icu-big-endian.patch
Patch27: mozilla-1335250.patch
# Also fixes s390x: https://bugzilla.mozilla.org/show_bug.cgi?id=1376268
Patch29: build-big-endian.patch
-Patch30: fedora-build.patch
Patch31: build-ppc64-s390x-curl.patch
Patch32: build-rust-ppc64le.patch
-Patch34: build-cubeb-pulse-arm.patch
Patch35: build-ppc-jit.patch
Patch36: build-missing-xlocale-h.patch
# Always feel lucky for unsupported platforms:
@@ -149,7 +146,6 @@ Patch225: mozilla-1005640-accept-lang.patch
#ARM run-time patch
Patch226: rhbz-1354671.patch
Patch229: firefox-nss-version.patch
-Patch230: rhbz-1497932.patch
# Upstream patches
Patch402: mozilla-1196777.patch
@@ -159,7 +155,6 @@ Patch410: mozilla-1321521.patch
Patch411: mozilla-1321521-2.patch
Patch412: mozilla-1337988.patch
Patch413: mozilla-1353817.patch
-Patch414: mozilla-1341234.patch
Patch415: mozilla-1405267.patch
# Debian patches
@@ -192,9 +187,6 @@ BuildRequires: pkgconfig(xrender)
BuildRequires: pkgconfig(hunspell)
%endif
BuildRequires: pkgconfig(libstartup-notification-1.0)
-%if %{?alsa_backend}
-BuildRequires: pkgconfig(alsa)
-%endif
BuildRequires: pkgconfig(libnotify) >= %{libnotify_version}
BuildRequires: pkgconfig(dri)
BuildRequires: pkgconfig(libcurl)
@@ -299,7 +291,7 @@ This package contains results of tests executed during build.
#---------------------------------------------------------------------
%prep
-%setup -q
+%setup -q -n %{tarballdir}
# Build patches, can't change backup suffix from default because during build
# there is a compare of config and js/config directories and .orig suffix is
@@ -308,15 +300,12 @@ This package contains results of tests executed during build.
%patch18 -p1 -b .jemalloc-ppc
-%patch20 -p1 -b .prbool
%ifarch s390
%patch25 -p1 -b .rhbz-1219542-s390
%endif
%patch29 -p1 -b .big-endian
-%patch30 -p1 -b .fedora-build
%patch31 -p1 -b .ppc64-s390x-curl
%patch32 -p1 -b .rust-ppc64le
-# don't need that %patch34 -p1 -b .cubeb-pulse-arm
%ifarch ppc ppc64 ppc64le
%patch35 -p1 -b .ppc-jit
%endif
@@ -336,7 +325,6 @@ This package contains results of tests executed during build.
%ifarch aarch64
%patch226 -p1 -b .1354671
%endif
-%patch230 -p1 -b .1497932
%patch402 -p1 -b .1196777
%patch406 -p1 -b .256180
@@ -346,8 +334,8 @@ This package contains results of tests executed during build.
%patch412 -p1 -b .1337988
%endif
%endif
+
%patch413 -p1 -b .1353817
-%patch414 -p1 -b .1341234
%patch415 -p1 -b .1405267
# Debian extension patch
@@ -395,10 +383,6 @@ echo "ac_add_options --enable-system-ffi" >> .mozconfig
echo "ac_add_options --disable-elf-hack" >> .mozconfig
%endif
-%if %{?alsa_backend}
-echo "ac_add_options --enable-alsa" >> .mozconfig
-%endif
-
%if %{?system_hunspell}
echo "ac_add_options --enable-system-hunspell" >> .mozconfig
%else
@@ -871,6 +855,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Thu Oct 5 2017 Martin Stransky <stransky(a)redhat.com> - 57.0-0.1
+- Updated to 57.0 Beta 5
+
* Wed Oct 4 2017 Martin Stransky <stransky(a)redhat.com> - 56.0-4
- Fixed rhbz#1497932 - Plug-Ins for example flash fails
because of unresolved symbols
diff --git a/mozilla-1341234.patch b/mozilla-1341234.patch
deleted file mode 100644
index 2de5080..0000000
--- a/mozilla-1341234.patch
+++ /dev/null
@@ -1,9 +0,0 @@
-diff -up firefox-56.0/layout/style/bindgen.toml.in.old firefox-56.0/layout/style/bindgen.toml.in
---- firefox-56.0/layout/style/bindgen.toml.in.old 2017-09-27 16:30:14.518213900 +0200
-+++ firefox-56.0/layout/style/bindgen.toml.in 2017-09-27 16:30:38.089179153 +0200
-@@ -1,4 +1,5 @@
- [build]
- args = [
-+ "/usr/include",
- @BINDGEN_CFLAGS@
- ]
diff --git a/mozilla-1405267.patch b/mozilla-1405267.patch
index 27fb5ea..46c7f1e 100644
--- a/mozilla-1405267.patch
+++ b/mozilla-1405267.patch
@@ -1,7 +1,7 @@
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-14 22:16:02.000000000 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:16:58.512697973 +0200
-@@ -96,6 +96,7 @@ STUB(gdk_window_get_update_area)
+diff -up firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c
+--- firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c.1405267 2017-09-19 06:18:28.000000000 +0200
++++ firefox-57.0b5/widget/gtk/mozgtk/mozgtk.c 2017-10-06 12:29:46.941289468 +0200
+@@ -95,6 +95,7 @@ STUB(gdk_window_get_update_area)
STUB(gdk_window_get_user_data)
STUB(gdk_window_get_visual)
STUB(gdk_window_get_width)
@@ -9,9 +9,9 @@ diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.1405267 firefox-56.0/widget/gtk
STUB(gdk_window_hide)
STUB(gdk_window_input_shape_combine_region)
STUB(gdk_window_invalidate_rect)
-@@ -520,7 +521,6 @@ STUB(gdk_display_get_device_manager)
- STUB(gdk_error_trap_pop_ignored)
+@@ -520,7 +521,6 @@ STUB(gdk_error_trap_pop_ignored)
STUB(gdk_event_get_source_device)
+ STUB(gdk_screen_get_monitor_workarea)
STUB(gdk_window_get_type)
-STUB(gdk_window_get_window_type)
STUB(gdk_x11_window_get_xid)
diff --git a/rhbz-1497932.patch b/rhbz-1497932.patch
deleted file mode 100644
index d6e7886..0000000
--- a/rhbz-1497932.patch
+++ /dev/null
@@ -1,21 +0,0 @@
-diff -up firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-56.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium
-diff -up firefox-56.0/media/webrtc/trunk/Makefile.old firefox-56.0/media/webrtc/trunk/Makefile
-diff -up firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old firefox-56.0/widget/gtk/mozgtk/mozgtk.c
---- firefox-56.0/widget/gtk/mozgtk/mozgtk.c.old 2017-10-04 09:21:56.155553585 +0200
-+++ firefox-56.0/widget/gtk/mozgtk/mozgtk.c 2017-10-04 09:22:35.562427061 +0200
-@@ -61,7 +61,6 @@ STUB(gdk_screen_get_height_mm)
- STUB(gdk_screen_get_n_monitors)
- STUB(gdk_screen_get_monitor_at_window)
- STUB(gdk_screen_get_monitor_geometry)
--STUB(gdk_screen_get_monitor_workarea)
- STUB(gdk_screen_get_monitor_height_mm)
- STUB(gdk_screen_get_number)
- STUB(gdk_screen_get_resolution)
-@@ -550,6 +549,7 @@ STUB(gtk_render_line)
- STUB(gtk_render_option)
- STUB(gtk_render_slider)
- STUB(gtk_scale_new)
-+STUB(gdk_screen_get_monitor_workarea)
- STUB(gtk_scrollbar_new)
- STUB(gtk_style_context_add_class)
- STUB(gtk_style_context_add_region)
diff --git a/sources b/sources
index f078f75..cb71924 100644
--- a/sources
+++ b/sources
@@ -1,2 +1,2 @@
-SHA512 (firefox-56.0.source.tar.xz) = 3aeb0ff54e10c83894f61734daa4f0801a1bb499d4667adad9c78520e588eae809d0e4d61e9227206466d62c3b453e2ce9ca8198f59f5354cd1b6804c00f0990
-SHA512 (firefox-langpacks-56.0-20170927.tar.xz) = e74d85410891b6faa388d37043d764a6c01a2c83479d9912aa3d0b23684ed66ca639eb3cdb579cafef6c3156b0d774a66987a605e0f9e25c2d4eed967ef7b627
+SHA512 (firefox-57.0b5.source.tar.xz) = a95dfcb138794517ebf7231a0881d304c8d05bfd223ef433e5cd7d862bbad1d4ee0d70248456b94ddcad3eb22145fe6164be9f5b650cc2c18aa80f6d7af9a387
+SHA512 (firefox-langpacks-57.0b5-20171005.tar.xz) = 318645c2c8e97f91ceddd21865f9afc7918f39e8f0046ca1f3c5472ba056425b49472612d355e88a098507f98ddcf1aec97f8640f3e45f1d8951c5a3f5d72c12
diff --git a/xulrunner-24.0-jemalloc-ppc.patch b/xulrunner-24.0-jemalloc-ppc.patch
index be6f259..840fca2 100644
--- a/xulrunner-24.0-jemalloc-ppc.patch
+++ b/xulrunner-24.0-jemalloc-ppc.patch
@@ -1,7 +1,7 @@
-diff -up firefox-48.0/memory/mozjemalloc/jemalloc.c.jemalloc-ppc firefox-48.0/memory/mozjemalloc/jemalloc.c
---- firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp.jemalloc-ppc 2016-07-26 10:51:46.385434384 +0200
-+++ firefox-48.0/memory/mozjemalloc/mozjemalloc.cpp 2016-07-26 10:53:49.061023106 +0200
-@@ -1090,7 +1090,7 @@ static const bool config_recycle = false
+diff -up firefox-57.0b5/memory/build/mozjemalloc.cpp.old firefox-57.0b5/memory/build/mozjemalloc.cpp
+--- firefox-57.0b5/memory/build/mozjemalloc.cpp.old 2017-10-06 12:00:27.938687498 +0200
++++ firefox-57.0b5/memory/build/mozjemalloc.cpp 2017-10-06 12:02:45.232151309 +0200
+@@ -780,7 +780,7 @@ struct arena_t {
* controlling the malloc behavior are defined as compile-time constants
* for best performance and cannot be altered at runtime.
*/
6 years, 6 months
Architecture specific change in rpms/varnish.git
by githook-noreply@fedoraproject.org
The package rpms/varnish.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/varnish.git/commit/?id=35bf0acdc6....
Change:
+%ifarch %ix86
Thanks.
Full change:
============
commit 35bf0acdc62f077479ccf9e5441c9d0d62e4017c
Author: Ingvar Hagelund <ingvar(a)redpill-linpro.com>
Date: Mon Oct 23 13:06:02 2017 +0200
Use ix86 macro for all ifarch matches of 32bit x86 hardware
Added Makefile hack for el6 also to libvarnishapi
diff --git a/varnish.spec b/varnish.spec
index cfa9205..f325552 100644
--- a/varnish.spec
+++ b/varnish.spec
@@ -146,7 +146,7 @@ export LDFLAGS=" -pie"
%endif
# https://gcc.gnu.org/wiki/FAQ#PR323
-%ifarch i386 i686
+%ifarch %ix86
%if 0%{?fedora} > 21
export CFLAGS="%{optflags} -ffloat-store -fexcess-precision=standard"
%endif
@@ -179,6 +179,7 @@ popd
# Upstream github issue #2265
%if 0%{?rhel} == 6
sed -i 's/-Werror$//g;' bin/varnishd/Makefile
+sed -i 's/-Werror$//g;' lib/libvarnishapi/Makefile
%endif
make %{?_smp_mflags} V=1
@@ -399,6 +400,10 @@ fi
%endif
%changelog
+* Mon Oct 23 2017 Ingvar Hagelund <ingvar(a)redpill-linpro.com> - 5.2.0-2
+- Use ix86 macro for all ifarch matches of 32bit x86 hardware
+- Added Makefile hack for el6 also to libvarnishapi
+
* Thu Oct 12 2017 Ingvar Hagelund <ingvar(a)redpill-linpro.com> - 5.2.0-1
- New upstream release
6 years, 6 months
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (1883)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- GtkAda
ExclusiveArch: %{GNAT_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- LuxRender
ExclusiveArch: x86_64
- OpenTK
ExclusiveArch: %mono_arches
- PragmARC
ExclusiveArch: %{GNAT_arches}
- R-DynDoc
ExclusiveArch: armv7, ppc, go_arch
- RdRand
ExclusiveArch: %{ix86} x86_64
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GNAT_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GNAT_arches}
- apmd
ExclusiveArch: %{ix86}
- apmud
ExclusiveArch: ppc
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-boot-config
ExclusiveArch: %{arm}
- arm-trusted-firmware
ExclusiveArch: aarch64
- atomic
ExclusiveArch: i386 i486 i586 i686 pentium3 pentium4 athlon geode x86_64 armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv6hl armv7l armv7hl armv7hnl aarch64 ppc64le s390x mips mipsel mipsr6 mipsr6el mips64 mips64el mips64r6 mips64r6el
ExclusiveArch: x86_64 ppc64le
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- banshee
ExclusiveArch: %{mono_arches}
- banshee-community-extensions
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 %{arm} sparcv9 alpha s390x
- bareftp
ExclusiveArch: %{mono_arches}
- bcc
ExclusiveArch: x86_64
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- beignet
ExclusiveArch: x86_64 %{ix86}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64 ia64
- bless
ExclusiveArch: %mono_arches
- boo
ExclusiveArch: %{mono_arches}
- buildah
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- bwa
ExclusiveArch: x86_64
- cadvisor
ExclusiveArch: %{ix86} x86_64 aarch64 ppc64le
- calamares
ExclusiveArch: %{ix86} x86_64
- cargo
ExclusiveArch: %{rust_arches}
- carto
ExclusiveArch: %{nodejs_arches} noarch
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- chromium-native_client
ExclusiveArch: x86_64
- cjdns
ExclusiveArch: %{nodejs_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- compat-gcc-296
ExclusiveArch: %{ix86} ia64 ppc
- consul
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- corosync
ExclusiveArch: i686 x86_64
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- derelict
ExclusiveArch: %{ldc_arches}
- direnv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: %ix86 x86_64 aarch64
- docco
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- docker
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-anaconda-addon
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- docker-latest
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- dolphin-emu
ExclusiveArch: x86_64 armv7l aarch64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dustmite
ExclusiveArch: %{ldc_arches}
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc ppc64
- e3
ExclusiveArch: %{ix86} x86_64
- edac-utils
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- edb
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- efibootmgr
ExclusiveArch: %{ix86} x86_64 aarch64 arm
- efivar
ExclusiveArch: %{ix86} x86_64 aarch64
- elasticdump
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- embree
ExclusiveArch: x86_64
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- etcd
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- exciting
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- expresso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fedora-gnat-project-common
ExclusiveArch: noarch %{GNAT_arches}
- fence-virt
ExclusiveArch: i686 x86_64
- fes
ExclusiveArch: x86_64
- ffcall
ExclusiveArch: %{ffcall_arches}
- firmware-addon-dell
ExclusiveArch: x86_64 ia64 %{ix86}
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %GPRbuild_arches
- fpc
ExclusiveArch: %{arm} %{ix86} x86_64 ppc ppc64
- freshmaker
ExclusiveArch: %{ix86} x86_64
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fst
ExclusiveArch: i686
- fwupdate
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gela-asis
ExclusiveArch: %{GNAT_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- gl3n
ExclusiveArch: %{ldc_arches}
- glibc32
ExclusiveArch: x86_64 ppc64 s390x
- glide
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %GPRbuild_arches
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-guitar
ExclusiveArch: %{mono_arches}
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- gnu-smalltalk
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-i18n
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gofed
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- golang
ExclusiveArch: %{golang_arches}
- golang-bitbucket-kardianos-osext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-bitbucket-ww-goautoneg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-10gen-openssl
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- golang-github-3rf-mongo-lint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AdRoll-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AudriusButkevicius-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-go-nat-pmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-pfilter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-Azure-azure-sdk-for-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-BurntSushi-toml-test
ExclusiveArch: %{go_arches}
- golang-github-DATA-DOG-go-sqlmock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-DataDog-datadog-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-MakeNowJust-heredoc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-vcs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-PuerkitoBio-purell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-urlesc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-RangelReale-osin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-RangelReale-osincli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-SeanDolphin-bqschema
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-Shopify-sarama
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Shopify-toxiproxy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Sirupsen-logrus
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-abbot-go-http-auth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-agl-ed25519
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-akrennmair-gopcap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-appc-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-circbuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-gomdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-asaskevich-govalidator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-auth0-go-jwt-middleware
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-aws-aws-sdk-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-beorn7-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-gitmap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bgentry-speakeasy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bkaradzic-go-lz4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-blang-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bmizerany-assert
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-pat
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-boltdb-bolt
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bradfitz-http2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bugsnag-bugsnag-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bugsnag-panicwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-du
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-luhn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-xdr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ccding-go-stun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cenkalti-backoff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-chaseadamsio-goorgeous
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cheggaaa-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chmduquesne-rollinghash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonus-gometrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonusllhist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cloudfoundry-incubator-candiedyaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cockroachdb-cmux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codegangsta-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-codegangsta-negroni
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-collectd-go-collectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-gexpect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-etcd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-iptables
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-log
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-oidc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-systemd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-pkg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cpuguy83-go-md2man
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-cznic-b
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-fileutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-golex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lexer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-mathutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-ql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-sortutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-strutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-zappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d4l3k-messagediff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-davecgh-go-spew
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-daviddengcn-go-colortext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dchest-cssmin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-denverdino-aliyungo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgnorton-goback
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgrijalva-jwt-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-digitalocean-godo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-connections
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-units
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libcontainer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libkv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libtrust
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-spdystream
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docopt-docopt-go
ExclusiveArch: %{go_arches}
- golang-github-dustin-go-humanize
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dvsekhvalnov-jose2go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-go-resiliency
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-queue
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-edsrzf-mmap-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-eknkc-amber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-elazarl-go-bindata-assetfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-emicklei-go-restful
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-endophage-gotuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-evanphx-json-patch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-pool
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fortytw2-leaktest
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsouza-go-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-garyburd-redigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gengo-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-getsentry-raven-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ghodss-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-glacjay-goini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-asn1-ber-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-errors-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ini-ini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ldap-ldap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-macaron-inject
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-mgo-mgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-sql-driver-mysql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-tomb-tomb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gobwas-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-godbus-dbus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-appengine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-glog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-groupcache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-golang-sys
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-time
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-blas
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-floats
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-graph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-lapack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-matrix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-btree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-genproto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-github
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-querystring
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-gofuzz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-goraft-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-context
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-handlers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-mux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-securecookie
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-sessions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-websocket
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gosexy-gettext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-grpc-ecosystem-go-grpc-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-ecosystem-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-grpc-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-consul-migrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-errwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-checkpoint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-cleanhttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-immutable-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-memdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-msgpack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-multierror
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-retryablehttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-sockaddr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-syslog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-golang-lru
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-hcl
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-hil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-logutils
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-mdns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-memberlist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-net-rpc-msgpackrpc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-boltdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-mdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-scada-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-serf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-yamux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hawkular-hawkular-client-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-howeyc-gopass
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-imdario-mergo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-mousetrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-muxado
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-hyperleveldb-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-influxdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-influxdb-rocksdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jackpal-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jacobsa-oglematchers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jessevdk-go-flags
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jfrazelle-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jinzhu-gorm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jmespath-go-jmespath
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jmhodges-levigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jonboulle-clockwork
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jtolds-gls
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-juju-ratelimit
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-julienschmidt-httprouter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-karlseguin-ccache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-karlseguin-expect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kballard-go-shellquote
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kdar-factorlog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kimor79-gollectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-cpuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-klauspost-crc32
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-knieriem-markdown
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-fs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kr-pretty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-pty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kyokomi-emoji
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-lib-pq
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lpabon-godbc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lsegal-gucumber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-magiconair-properties
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-isatty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-runewidth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-sqlite3
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-matttproud-golang_protobuf_extensions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mesos-mesos-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-miekg-dns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-miekg-mmark
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-pkcs11
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-axis2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-lua
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-minio-sha256-simd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mistifyio-go-zfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-copystructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-homedir
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-go-wordwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-mapstructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-reflectwalk
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mreiferson-go-httpclient
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-mvo5-goconfigparser
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mvo5-uboot-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mxk-go-flowrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ncw-swift
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-noahdesu-go-ceph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ojii-gettext.go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-tablewriter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-ts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olivere-elastic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-onsi-ginkgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-onsi-gomega
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-opencontainers-runtime-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-opencontainers-specs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-openshift-go-json-rest
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-go-systemd
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-openshift-sdn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-oschwald-geoip2-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-oschwald-maxminddb-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pelletier-go-buffruneio
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pelletier-go-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-petar-GoLLRB
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-peterh-liner
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-petermattis-goid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-profile
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pkg-sftp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pmezard-go-difflib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-client_golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-client_model
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-prometheus-common
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-procfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-racker-perigee
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rackspace-gophercloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-rakyll-globalconf
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rakyll-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-rakyll-statik
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rcrowley-go-metrics
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-remyoudompheng-bigfft
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-russross-blackfriday
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ryanuber-columnize
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-samalba-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-samuel-go-zookeeper
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-sasha-s-go-deadlock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-seccomp-libseccomp-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-shiena-ansicolor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shurcooL-sanitized_anchor_name
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-skarademir-naturalsort
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skratchdot-open-golang
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skynetservices-skydns
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-assertions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-smartystreets-go-aws-auth
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-goconvey
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spacejam-loghisto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spacemonkeygo-flagfile
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spacemonkeygo-spacelog
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spf13-afero
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cast
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cobra
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-fsync
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-jWalterWeatherman
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-nitro
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-pflag
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-viper
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stathat-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-stevvooe-resumable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-stretchr-objx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stretchr-testify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-syndtr-gocapability
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-goleveldb
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-gosnappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-tent-http-link-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-thejerf-suture
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tonnerre-golang-pretty
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ugorji-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-urfave-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vaughan0-go-ini
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-vbatts-tar-split
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vishvananda-netlink
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} aarch64 x86_64 %{arm}}
- golang-github-vishvananda-netns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vitrun-qart
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vjeantet-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vmware-govcloudair
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-wsxiaoys-terminal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonpointer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonreference
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonschema
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xiang90-probing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-xtaci-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xtaci-smux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-ace
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-gohtml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yvasiyarov-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-gorelic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-newrelic_platform_go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-zillode-notify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-google-golangorg-cloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gcfg
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-go-crypto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-decimal-inf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-exp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-googlecode-goauth2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gogoprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gomock
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-google-api-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-goprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-log4go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-net
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-sqlite
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-go-check-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-go-macaroon-macaroon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-retry-v1
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotags
ExclusiveArch: %{go_arches}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- gsf-sharp
ExclusiveArch: %mono_arches
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- hedgewars
ExclusiveArch: %{fpc_arches}
- heketi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- hub
ExclusiveArch: %{go_arches}
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- icaro
ExclusiveArch: %{ix86} %{arm} x86_64 noarch
- ikarus
ExclusiveArch: %{ix86}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- ioport
ExclusiveArch: %{ix86} x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: %{arm} %{ix86} x86_64
- iwyu
ExclusiveArch: %{ix86} x86_64
- ixpdimm_sw
ExclusiveArch: x86_64
- jake
ExclusiveArch: %{nodejs_arches} noarch
- jasmine-node
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- julia
ExclusiveArch: %{ix86} x86_64
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: %{all_x86} x86_64 ppc64 s390x %{arm} aarch64 ppc64le
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64 ppc64le aarch64
- knot-resolver
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kosmtik
ExclusiveArch: %{nodejs_arches} noarch
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- latrace
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- lazarus
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libflatarray
ExclusiveArch: %{ix86} x86_64
- libhfi1
ExclusiveArch: x86_64
- libica
ExclusiveArch: s390 s390x
- libinvm-cim
ExclusiveArch: x86_64
- libinvm-cli
ExclusiveArch: x86_64
- libinvm-i18n
ExclusiveArch: x86_64
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libjingle
ExclusiveArch: %{ix86} x86_64 %{arm}
- libmfx
ExclusiveArch: %{ix86} x86_64
- libpsm2
ExclusiveArch: x86_64
- librtas
ExclusiveArch: ppc %{power64}
- libseccomp
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mipsel mips64el ppc64 ppc64le s390 s390x
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 ia64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} %{ix86} x86_64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: ppc %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lldb
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- lodash
ExclusiveArch: %{nodejs_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: ppc %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maven-eclipse-plugin
ExclusiveArch: %{ix86} x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GNAT_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mnemosyne
ExclusiveArch: noarch %{qt5_qtwebengine_arches}
- mocha
ExclusiveArch: %{nodejs_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64
- mongo-tools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-debugger
ExclusiveArch: %ix86 x86_64
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nacl-arm-binutils
ExclusiveArch: x86_64
- nacl-arm-gcc
ExclusiveArch: x86_64
- nacl-arm-newlib
ExclusiveArch: x86_64
- nacl-binutils
ExclusiveArch: x86_64
- nacl-gcc
ExclusiveArch: x86_64
- nacl-newlib
ExclusiveArch: x86_64
- nant
ExclusiveArch: %mono_arches
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nini
ExclusiveArch: %{mono_arches}
- node-gyp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-abbrev
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-accepts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-after
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-agent-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-agentkeepalive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ain2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-alter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-cyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-font
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-green
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-magenta
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-styles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-wrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-yellow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansicolors
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansidiff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansistyles
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aproba
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-are-we-there-yet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-argparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-argsparser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-union
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-differ
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-find-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-foreach
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-uniq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-unique
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arrify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-as-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ascii-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ascli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-asn1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assert-plus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assertion-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assume
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ast-traverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ast-types
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-astral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-angular-annotate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-pass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-async-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-queue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-some
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-runtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-balanced-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-batch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bcrypt
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-beeper
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-benchmark
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bignumber-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bindings
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-block-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bluebird
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-body-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boolbase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-brace-expansion
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-breakable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-browser-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buf-compare
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-crc32
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-shims
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffer-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffertools
ExclusiveArch: %{nodejs_arches}
- nodejs-bufferutil
ExclusiveArch: %{nodejs_arches}
- nodejs-builtin-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-builtins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bundle-dependencies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-burrito
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-caching-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-call-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-caller-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsites
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camel-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caniuse-db
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-capture-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-carrier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caseless
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-connect-middleware
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainsaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chalk
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-change-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-char-spinner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-character-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-child-process-close
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chmodr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chownr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chrono
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cjson
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-yaml-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-spinner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cliui
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-stats
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-closure-compiler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-code-point-at
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-collections
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colour
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-columnify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-combined-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commander
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commondir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commoner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commonmark
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-component-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compress-commons
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compressible
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compression
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-map
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-config-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-livereload
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-console-dot-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-constant-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constantinople
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-disposition
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-jar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookiejar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-core-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-util-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-couch-login
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coveralls
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-crc32-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-create-error-class
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cross-spawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn-async
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cryptiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-select
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-what
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csscomb-core
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cssom
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csurf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-generate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-spectrum
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ctype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-currently-unhandled
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cycle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-d
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dashdash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-data-uri-to-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-date-now
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dateformat
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-debuglog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-decamelize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decompress-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-eql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deep-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-default-require-extensions
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defaults
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defence
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defence-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-properties
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defined
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-degenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-del
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delayed-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-delegates
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dep-graph
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-depd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dependency-lister
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deprecated
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detective
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dezalgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-docopt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-doctrine
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dom-serializer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domelementtype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domutils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dotfile-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dreamopt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dryice
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dtree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexer3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duration
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ebnf-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ecstatic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-editor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ee-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-emojione
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encodeurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encoding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-end-of-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-entities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-ex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errorhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-abstract
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-to-primitive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es5-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es5-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-iterator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-set
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-html
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-regexp-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-string-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escodegen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-fb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-harmony-jscs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esrecurse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse-fb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-etag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-event-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-event-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eventemitter2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eventemitter3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-exit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-brackets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-tilde
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extsprintf
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eyes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fancy-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-far
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fast-levenshtein
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-faye-websocket
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fd-slicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fg-lodash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-figures
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-file-entry-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-sync-cmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-uri-to-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-filed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filelist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filename-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fileset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fill-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fill-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-finalhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-find-cache-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-find-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-findup-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-first-chunk-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flagged-respawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-dot-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-in
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-for-own
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-foreach
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forever-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-form-data
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-formatio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-formidable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forwarded
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-freetree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fresh
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-from2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fs-ext
ExclusiveArch: %{nodejs_arches}
- nodejs-fs-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-vacuum
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-write-stream-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-ignore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-npm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ftp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-function-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gauge
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gaze
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gdal
ExclusiveArch: %{nodejs_arches}
- nodejs-generate-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generate-object-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-pkg-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stdin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-uri
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-getobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gettext-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-username-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-parent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-prefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globby
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globule
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glogg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gonzales-pe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-got
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-readlink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-growl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-angular-templates
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-banner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-cli
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-compare-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-clean
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-concat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-cssmin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-htmlmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-internal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-less
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-requirejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-uglify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-watch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-git-authors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-html-validation
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-init
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-known-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-lib-contrib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-sed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-simple-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-util-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-process
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gzip-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-handlebars
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-har-validator
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-unicode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hash_file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hawk
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-he
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-heap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-highlight-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hoek
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hooker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hosted-git-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-html-minifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-htmlparser2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-errors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-signature
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-https-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-humanize-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-i18n-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i2c
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv-lite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-iferr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ignore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-imurmurhash
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-indent-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-infinity-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inflight
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-inherits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherits1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ini
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-init-package-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inline-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-install
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-int64-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-interpret
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-into-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-invert-kv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ip
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irc-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irregular-plurals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-arrayish
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-boolean-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-builtin-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-callable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-date-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-dotfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-equal-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extendable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-finite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-fullwidth-code-point
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-generator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-my-json-valid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-number
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-number-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-in-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-inside
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-plain-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-plain-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-primitive
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-redirect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-relative
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-retry-allowed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-text-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-typedarray
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-unc-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-valid-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-windows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-isexe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-iso8601
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isodate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jade
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-growl-reporter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-reporters
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jison
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison-lex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jju
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joose
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-namespace-depended
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-simplerequest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-base64
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-yaml
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jschardet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jscoverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-localizer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-helpfulerror
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stable-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stringify-safe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonselect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jwt-simple
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keypress
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-kind-of
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-klaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-langdetect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-latest-version
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazystream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lcid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lcov-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-leaflet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-formbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-hash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leche
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-left-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-levn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lex-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-libxmljs
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-line-reader
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linkify-it
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-grunt-tasks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lockfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-log-driver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-symbols
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lolex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loud-rejection
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lower-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lowercase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ltx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-make-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-generator-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik
ExclusiveArch: %{nodejs_arches}
- nodejs-mapnik-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik-vector-tile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-markdown
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-markdown-it-testgen
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-max-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-maxmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mbtiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-md5-hex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-o-matic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mdurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-media-typer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoizee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-meow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-merge-descriptors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-merge-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-metascript
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-method-override
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-millstone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mime-db
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mimeparse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minimatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minstache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkfiletree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-module-not-found-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-moment
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mongodb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb-core
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-monocle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-morgan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-muffin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-multimatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiparty
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mustache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mute-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mysql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mz
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nan0
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nano
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-native-or-bluebird
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ncp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-needle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-negotiator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nested-error-stacks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-net-browserify-alt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-netmask
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-next-tick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-node-expat
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-int64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-print
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-static
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-status-codes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-stringprep
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-uuid
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nomnom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt-usage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-noptify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-normalize-git-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-package-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-cache-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-install-checks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-package-arg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-run-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-stats
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-user-validate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npmlog
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-api
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-audit-shrinkwrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nth-check
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-number-is-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-numeral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-entries
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-omit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-finished
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-headers
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-once
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-onetime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-only-shallow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opener
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opn
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optionator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-orchestrator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ordered-read-streams
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-os-homedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-locale
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-tmpdir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-osenv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-output-file-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-p-finally
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-locate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pac-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pac-resolver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packet-reader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pad-left
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-paperboy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-param-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-github-repo-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parse-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parserlib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parseurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pascal-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-array
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-exists
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-inside
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-key
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pathval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pause
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pause-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pedding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pegjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pem
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pg-connection-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pgpass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkg-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkginfo
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-platform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-plur
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portfinder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-posix-getopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-bytea
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-date
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-interval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prelude-ls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prepend-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-preserve
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-hrtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-private
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-process-nextick-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promises-aplus-tests
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prompt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promzard
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-propagate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proto-list
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxyquire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pruddy-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pseudomap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pubcontrol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q-io
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qtdatastream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-queue-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qunit-extras
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qunitjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rainbowsocks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-randomatic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-range-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-raw-body
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rc
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-re-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-all-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-dir-files
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-installed
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-tree
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readable-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-readdir-scoped-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdirp
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-realize-package-specifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-recast
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rechoir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-redent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reduce-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-regex-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-registry-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-relateurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repeat-element
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeat-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeating
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-requestretry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-cs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-require-directory
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-inject
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-uncached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-yaml
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requirejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requires-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-pkg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-response-time
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resumer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-retry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-revalidator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rewire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rhea
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rimraf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rndm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ronn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-run-parallel-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-runforcover
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safe-json-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safecb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-samsam
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sauce-tunnel
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sax
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-scmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-secure-random
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-semver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-send
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sentence-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sequencify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serialize-error
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-static
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-getter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-immediate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-immediate-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-setimmediate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sha
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shelljs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-shelljs-nodecli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-format
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-showdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sigmund
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-signal-exit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-silent-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-fmt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-single-line-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon-restore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slide
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-smart-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-snake-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snockets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sntp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socks-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-socks-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sort-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sorted-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-fixtures
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sparkles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-spdx-correct
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-exceptions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-expression-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-license-ids
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-speedometer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sqlite3
ExclusiveArch: %{nodejs_arches}
- nodejs-srs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-st
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-utils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-static-favicon
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-statuses
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-std-mocks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-combiner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-consume
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-counter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-reduce
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-replace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-shift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-spigot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamsink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamtest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-repeat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-trim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string-width
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string_decoder
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringmap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-ansi
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-bom-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-json-comments
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strscanner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stylus
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-success-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent-proxy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-supertest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supports-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-swap-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-symbol-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-mocha-reporter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-temporary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-cordovajs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-liferay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-terst
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-test
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testswarm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-text-extensions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-thenify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thenify-all
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through2-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thunkify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tildify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tilejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive-mapnik
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tiletype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-stamp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-timed-out
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timers-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tiny-lr-fork
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-title-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tlds
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-absolute-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-object-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tough-cookie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tracejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-transformers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-traverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-treeify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-trim-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-try-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tryor
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tsscmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ttembed-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tunnel-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-check
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-type-detect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-name
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-typeahead.js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typedarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uc-dot-micro
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uglify-to-browserify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uid-safe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ultron
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-umask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unc-path-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore-dot-logger
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unicode-7.0.0
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unicode-length
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unique-filename
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-slug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unpipe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unzip-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uri-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-join
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-parse-lax
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utfx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-deprecate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utilities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utils-merge
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vali-date
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-validate-npm-package-license
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-validate-npm-package-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vasync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-verror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vhost
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vinyl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vow-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-w3cjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walkdir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-watchit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wcwidth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-websocket-driver
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-when
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-which
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-win-spawn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-window-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-winston
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-with
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-woothee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wordwrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrap-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wrap-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrappy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-file-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ws
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xml2js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmldom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xregexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-xtend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-y18n
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yallist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yargs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yauzl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zip-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zipfile
ExclusiveArch: %{nodejs_arches}
- nodejs-zlib-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zlibjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: %{ix86} x86_64
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64
- nwchem
ExclusiveArch: x86_64 %{ix86}
- oci-register-machine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- ocitools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- odcs
ExclusiveArch: %{ix86} x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-powerd
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: %{ix86} x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openmx
ExclusiveArch: x86_64 %{ix86}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orocos-bfl
ExclusiveArch: %{ix86} x86_64
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- paflib
ExclusiveArch: ppc %{power64}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdfmod
ExclusiveArch: %mono_arches
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 arm
- pesign-test-app
ExclusiveArch: i686 x86_64 ia64 aarch64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- polyml
ExclusiveArch: %{ix86} x86_64 sparc sparcv8 sparcv9 sparcv9v ppc %{power64} %{arm} aarch64 ia64 mips mipsel
- poppler-sharp
ExclusiveArch: %mono_arches
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- ppc64-utils
ExclusiveArch: ppc %{power64}
- publican-jboss
ExclusiveArch: i686 x86_64
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- python-afl
ExclusiveArch: %{ix86} x86_64
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-openoffice
ExclusiveArch: noarch x86_64
- python-ovirt-register
ExclusiveArch: %{ix86} x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: %{openblas_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- reg
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rkt
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches} noarch
- s390utils
ExclusiveArch: s390 s390x
- sagemath
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x
- seamonkey
ExclusiveArch: %{ix86} x86_64
- servicelog
ExclusiveArch: ppc %{power64}
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: x86_64
- shim-signed
ExclusiveArch: x86_64 aarch64
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slapi-nis
ExclusiveArch: x86_64 %{ix86}
- smuxi
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64le
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- source-to-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-xpi
ExclusiveArch: i686 x86_64 armv6l armv7l armv7hl aarch64
- spring
ExclusiveArch: %{ix86} x86_64
- springlobby
ExclusiveArch: %{ix86} x86_64
- statsd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supermin
ExclusiveArch: x86_64
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64 armv7hl armv7hnl aarch64
- tboot
ExclusiveArch: %{ix86} x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- thunderbird-enigmail
ExclusiveArch: %{ix86} %{arm} ppc64 ppc64le s390x x86_64 noarch
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tpm2-tools
ExclusiveArch: %{ix86} x86_64
- tpm2-tss
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- v8
ExclusiveArch: %{ix86} x86_64 %{arm} ppc mipsel mips64el
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vdsm
ExclusiveArch: x86_64 %{power64} aarch64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wiredtiger
ExclusiveArch: x86_64 aarch64 ppc64le
- wraplinux
ExclusiveArch: %{ix86} x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x86info
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-geode
ExclusiveArch: %{ix86}
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64 ia64
- xorg-x11-drv-omap
ExclusiveArch: %{arm}
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-opentegra
ExclusiveArch: %{arm}
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xsupplicant
ExclusiveArch: %{ix86} x86_64 ppc %{power64}
- ycssmin
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GNAT_arches}
- zlib-ada
ExclusiveArch: %{GNAT_arches}
6 years, 6 months
Architecture specific change in rpms/deepin-daemon.git
by githook-noreply@fedoraproject.org
The package rpms/deepin-daemon.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/deepin-daemon.git/commit/?id=7299....
Change:
+ExcludeArch: ppc64le
Thanks.
Full change:
============
commit 7299ed0cc82f6e98b8ea0fa4c765c4ff1b12b30b
Author: mosquito <sensor.wen(a)gmail.com>
Date: Sun Oct 22 16:54:30 2017 +0800
Exclude ppc64le
diff --git a/deepin-daemon.spec b/deepin-daemon.spec
index 4989c40..e2a3bba 100644
--- a/deepin-daemon.spec
+++ b/deepin-daemon.spec
@@ -12,6 +12,8 @@ Source1: %{ds_url}/archive/2016.9.8/default-settings-2016.9.8.tar.gz
Source2: deepin-daemon.sysusers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
+# https://github.com/golang/go/issues/21947
+ExcludeArch: ppc64le
BuildRequires: %{?go_compiler:compiler(go-compiler)}%{!?go_compiler:golang}
BuildRequires: gettext
BuildRequires: deepin-gir-generator
6 years, 6 months
[Report] Packages Restricting Arches
by root
List of packages currently excluding arches (1883)
===========================================
- 0ad
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- GtkAda
ExclusiveArch: %{GNAT_arches}
- GtkAda3
ExclusiveArch: %{GPRbuild_arches}
- LuxRender
ExclusiveArch: x86_64
- OpenTK
ExclusiveArch: %mono_arches
- PragmARC
ExclusiveArch: %{GNAT_arches}
- R-DynDoc
ExclusiveArch: armv7, ppc, go_arch
- RdRand
ExclusiveArch: %{ix86} x86_64
- YafaRay
ExclusiveArch: %{ix86} x86_64
- aboot
ExclusiveArch: alpha
- acpid
ExclusiveArch: ia64 x86_64 %{ix86} %{arm} aarch64
- ahven
ExclusiveArch: %{GNAT_arches}
- alleyoop
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x %{arm} aarch64
- american-fuzzy-lop
ExclusiveArch: %{ix86} x86_64
- anet
ExclusiveArch: %{GNAT_arches}
- apmd
ExclusiveArch: %{ix86}
- apmud
ExclusiveArch: ppc
- arduino
ExclusiveArch: %{go_arches}
- arduino-builder
ExclusiveArch: %{go_arches}
- arm-boot-config
ExclusiveArch: %{arm}
- arm-trusted-firmware
ExclusiveArch: aarch64
- atomic
ExclusiveArch: i386 i486 i586 i686 pentium3 pentium4 athlon geode x86_64 armv3l armv4b armv4l armv4tl armv5tel armv5tejl armv6l armv6hl armv7l armv7hl armv7hnl aarch64 ppc64le s390x mips mipsel mipsr6 mipsr6el mips64 mips64el mips64r6 mips64r6el
ExclusiveArch: x86_64 ppc64le
- aunit
ExclusiveArch: %GPRbuild_arches
- avgtime
ExclusiveArch: %{ldc_arches}
- aws
ExclusiveArch: %GPRbuild_arches
- banshee
ExclusiveArch: %{mono_arches}
- banshee-community-extensions
ExclusiveArch: %ix86 x86_64 ppc ppc64 ia64 %{arm} sparcv9 alpha s390x
- bareftp
ExclusiveArch: %{mono_arches}
- bcc
ExclusiveArch: x86_64
- bcm283x-firmware
ExclusiveArch: %{arm} aarch64
- beignet
ExclusiveArch: x86_64 %{ix86}
- berusky2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{mips}
- biosdevname
ExclusiveArch: %{ix86} x86_64 ia64
- bless
ExclusiveArch: %mono_arches
- boo
ExclusiveArch: %{mono_arches}
- buildah
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- bwa
ExclusiveArch: x86_64
- cadvisor
ExclusiveArch: %{ix86} x86_64 aarch64 ppc64le
- calamares
ExclusiveArch: %{ix86} x86_64
- cargo
ExclusiveArch: %{rust_arches}
- carto
ExclusiveArch: %{nodejs_arches} noarch
- ccdciel
ExclusiveArch: %{fpc_arches}
- cdcollect
ExclusiveArch: %{mono_arches}
- ceph
ExclusiveArch: x86_64 aarch64 ppc64 ppc64le
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- chromium
ExclusiveArch: x86_64 i686
ExclusiveArch: x86_64 i686 aarch64
- chromium-native_client
ExclusiveArch: x86_64
- cjdns
ExclusiveArch: %{nodejs_arches}
- cmospwd
ExclusiveArch: %{ix86} x86_64
- coffee-script
ExclusiveArch: %{nodejs_arches} noarch
- colorful
ExclusiveArch: %{fpc_arches}
- compat-gcc-296
ExclusiveArch: %{ix86} ia64 ppc
- consul
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- corosync
ExclusiveArch: i686 x86_64
- cpuid
ExclusiveArch: %{ix86} x86_64
- cqrlog
ExclusiveArch: %{fpc_arches}
- crash
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- criu
ExclusiveArch: x86_64 %{arm} ppc64le aarch64
ExclusiveArch: x86_64 %{arm} ppc64le aarch64 s390x
- cryptlib
ExclusiveArch: x86_64 %{ix86} aarch64 ppc64 ppc64le
- cryptobone
ExclusiveArch: x86_64 %{ix86} ppc64 ppc64le aarch64
- daq
ExclusiveArch: x86_64 aarch64
- darktable
ExclusiveArch: x86_64 aarch64
- dbus-sharp
ExclusiveArch: %mono_arches
- dbus-sharp-glib
ExclusiveArch: %mono_arches
- dbxtool
ExclusiveArch: i386 x86_64 aarch64
- derelict
ExclusiveArch: %{ldc_arches}
- direnv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- dlm
ExclusiveArch: i686 x86_64
- dmidecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- dmtcp
ExclusiveArch: %ix86 x86_64 aarch64
- docco
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- docker
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-anaconda-addon
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- docker-distribution
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- docker-latest
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- dolphin-emu
ExclusiveArch: x86_64 armv7l aarch64
- dpdk
ExclusiveArch: x86_64 i686 aarch64 ppc64le
- dssi-vst
ExclusiveArch: %{ix86} x86_64
- dustmite
ExclusiveArch: %{ldc_arches}
- dyninst
ExclusiveArch: %{ix86} x86_64 ppc ppc64
- e3
ExclusiveArch: %{ix86} x86_64
- edac-utils
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- edb
ExclusiveArch: %{ix86} x86_64
- edk2
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- efibootmgr
ExclusiveArch: %{ix86} x86_64 aarch64 arm
- efivar
ExclusiveArch: %{ix86} x86_64 aarch64
- elasticdump
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- elk
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- embree
ExclusiveArch: x86_64
- envytools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- etcd
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- exciting
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: x86_64 %{ix86} aarch64 %{arm} %{power64}
- expresso
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- extlinux-bootloader
ExclusiveArch: %{arm} aarch64
- fcitx-libpinyin
ExclusiveArch: %{qt5_qtwebengine_arches}
- fedora-dockerfiles
ExclusiveArch: %{go_arches}
- fedora-gnat-project-common
ExclusiveArch: noarch %{GNAT_arches}
- fence-virt
ExclusiveArch: i686 x86_64
- fes
ExclusiveArch: x86_64
- ffcall
ExclusiveArch: %{ffcall_arches}
- firmware-addon-dell
ExclusiveArch: x86_64 ia64 %{ix86}
- flannel
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- florist
ExclusiveArch: %GPRbuild_arches
- fpc
ExclusiveArch: %{arm} %{ix86} x86_64 ppc ppc64
- freshmaker
ExclusiveArch: %{ix86} x86_64
- frysk
ExclusiveArch: %{ix86} x86_64 ppc64
- fst
ExclusiveArch: i686
- fwupdate
ExclusiveArch: x86_64 aarch64
- ga
ExclusiveArch: %{ix86} x86_64
- gbrainy
ExclusiveArch: %mono_arches
- gdata-sharp
ExclusiveArch: %mono_arches
- gdb-exploitable
ExclusiveArch: x86_64 i386
ExclusiveArch: x86_64 noarch
- gela-asis
ExclusiveArch: %{GNAT_arches}
- ghdl
ExclusiveArch: %{GNAT_arches}
- gio-sharp
ExclusiveArch: %mono_arches
- gir-to-d
ExclusiveArch: %{ldc_arches}
- git-octopus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- giver
ExclusiveArch: %{mono_arches}
- gkeyfile-sharp
ExclusiveArch: %mono_arches
- gl3n
ExclusiveArch: %{ldc_arches}
- glibc32
ExclusiveArch: x86_64 ppc64 s390x
- glide
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gmqcc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- gnatcoll
ExclusiveArch: %GPRbuild_arches
- gnome-boxes
ExclusiveArch: x86_64
- gnome-desktop-sharp
ExclusiveArch: %mono_arches
- gnome-do
ExclusiveArch: %mono_arches
- gnome-guitar
ExclusiveArch: %{mono_arches}
- gnome-keyring-sharp
ExclusiveArch: %mono_arches
- gnome-rdp
ExclusiveArch: %{mono_arches}
- gnome-sharp
ExclusiveArch: %mono_arches
- gnome-subtitles
ExclusiveArch: %mono_arches
- gnu-efi
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- gnu-smalltalk
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le
- go-bindata
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- go-compilers
ExclusiveArch: %{go_arches}
- go-i18n
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- godep
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gofed
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x %{mips}
- golang
ExclusiveArch: %{golang_arches}
- golang-bitbucket-kardianos-osext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-bitbucket-ww-goautoneg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-10gen-openssl
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- golang-github-3rf-mongo-lint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AdRoll-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-AudriusButkevicius-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-go-nat-pmp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-AudriusButkevicius-pfilter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-Azure-azure-sdk-for-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-BurntSushi-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-BurntSushi-toml-test
ExclusiveArch: %{go_arches}
- golang-github-DATA-DOG-go-sqlmock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-DataDog-datadog-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-MakeNowJust-heredoc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Masterminds-vcs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-PuerkitoBio-purell
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-PuerkitoBio-urlesc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-RangelReale-osin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-RangelReale-osincli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-SeanDolphin-bqschema
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-Shopify-sarama
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Shopify-toxiproxy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-Sirupsen-logrus
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-abbot-go-http-auth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-agl-ed25519
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-akrennmair-gopcap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-appc-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-circbuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-go-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-armon-gomdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-asaskevich-govalidator
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-auth0-go-jwt-middleware
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-aws-aws-sdk-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-beorn7-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-gitmap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bep-inflect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bgentry-speakeasy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bkaradzic-go-lz4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-blang-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bmizerany-assert
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-pat
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bmizerany-perks
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-boltdb-bolt
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bradfitz-http2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-bugsnag-bugsnag-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-bugsnag-panicwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-du
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-luhn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-calmh-xdr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-ccding-go-stun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cenkalti-backoff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-chaseadamsio-goorgeous
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cheggaaa-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-chmduquesne-rollinghash
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonus-gometrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-circonus-labs-circonusllhist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cloudfoundry-incubator-candiedyaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cockroachdb-cmux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-codegangsta-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-codegangsta-negroni
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-collectd-go-collectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-gexpect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-etcd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-iptables
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-log
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-oidc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-coreos-go-semver
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-go-systemd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-coreos-pkg
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cpuguy83-go-md2man
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-cznic-b
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-fileutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-golex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lex
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lexer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-lldb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-mathutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-ql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-sortutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-strutil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-cznic-zappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d2g-dhcp4client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-d4l3k-messagediff
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-davecgh-go-spew
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-daviddengcn-go-colortext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dchest-cssmin
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-denverdino-aliyungo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgnorton-goback
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-dgrijalva-jwt-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-digitalocean-godo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-connections
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-go-units
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libcontainer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libkv
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-libtrust
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docker-spdystream
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-docopt-docopt-go
ExclusiveArch: %{go_arches}
- golang-github-dustin-go-humanize
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-dvsekhvalnov-jose2go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-go-resiliency
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-eapache-queue
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-edsrzf-mmap-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-eknkc-amber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-elazarl-go-bindata-assetfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-emicklei-go-restful
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-endophage-gotuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-evanphx-json-patch
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fatih-pool
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-fortytw2-leaktest
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-fsouza-go-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-garyburd-redigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gengo-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-getsentry-raven-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ghodss-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-glacjay-goini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-asn1-ber-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-errors-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-fsnotify-fsnotify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ini-ini
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-ldap-ldap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-macaron-inject
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-go-mgo-mgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-sql-driver-mysql
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-go-tomb-tomb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gobwas-glob
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-godbus-dbus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-appengine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-glog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-groupcache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-golang-sys
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-golang-time
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-blas
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-floats
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-graph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-internal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-lapack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gonum-matrix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-btree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-genproto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-github
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-google-go-querystring
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-google-gofuzz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-goraft-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-context
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-handlers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-mux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-securecookie
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-sessions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gorilla-websocket
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-gosexy-gettext
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-grpc-ecosystem-go-grpc-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-ecosystem-grpc-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-grpc-grpc-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-consul-migrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-errwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-checkpoint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-cleanhttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-immutable-radix
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-memdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-msgpack
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-multierror
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-retryablehttp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-sockaddr
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-go-syslog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-go-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-golang-lru
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-hcl
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-hil
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-hashicorp-logutils
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-mdns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-memberlist
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-net-rpc-msgpackrpc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-boltdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-raft-mdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-scada-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-serf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hashicorp-yamux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-hawkular-hawkular-client-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-howeyc-gopass
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-imdario-mergo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-mousetrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-inconshreveable-muxado
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-hyperleveldb-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-influxdb-influxdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-influxdb-rocksdb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jackpal-gateway
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jacobsa-oglematchers
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jessevdk-go-flags
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jfrazelle-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jinzhu-gorm
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jmespath-go-jmespath
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jmhodges-levigo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-jonboulle-clockwork
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-jtolds-gls
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-juju-ratelimit
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-julienschmidt-httprouter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-karlseguin-ccache
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-karlseguin-expect
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kballard-go-shellquote
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kdar-factorlog
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kimor79-gollectd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-cpuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-klauspost-crc32
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-klauspost-reedsolomon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-knieriem-markdown
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-fs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kr-pretty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-pty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-kr-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-kyokomi-emoji
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-lib-pq
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lpabon-godbc
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-lsegal-gucumber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-magiconair-properties
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-isatty
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-runewidth
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mattn-go-sqlite3
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-matttproud-golang_protobuf_extensions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mesos-mesos-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-miekg-dns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-miekg-mmark
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-miekg-pkcs11
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-axis2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-milochristiansen-lua
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-minio-sha256-simd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mistifyio-go-zfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-copystructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-go-homedir
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-go-wordwrap
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-goamz
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mitchellh-mapstructure
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mitchellh-reflectwalk
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-mreiferson-go-httpclient
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-mvo5-goconfigparser
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mvo5-uboot-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-mxk-go-flowrate
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ncw-swift
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-noahdesu-go-ceph
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ojii-gettext.go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-tablewriter
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olekukonko-ts
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-olivere-elastic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-onsi-ginkgo
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-onsi-gomega
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-opencontainers-runtime-spec
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-opencontainers-specs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-openshift-go-json-rest
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-go-systemd
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-openshift-openshift-sdn
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-oschwald-geoip2-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-oschwald-maxminddb-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pelletier-go-buffruneio
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pelletier-go-toml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-petar-GoLLRB
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-peterh-liner
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-petermattis-goid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-errors
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pkg-profile
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-pkg-sftp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-pmezard-go-difflib
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-client_golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-client_model
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-prometheus-common
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-procfs
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-prometheus-prometheus
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-racker-perigee
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rackspace-gophercloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-rakyll-globalconf
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rakyll-pb
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-rakyll-statik
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-rcrowley-go-metrics
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-remyoudompheng-bigfft
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-russross-blackfriday
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-ryanuber-columnize
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-samalba-dockerclient
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-samuel-go-zookeeper
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-sasha-s-go-deadlock
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-seccomp-libseccomp-golang
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-shiena-ansicolor
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-shurcooL-sanitized_anchor_name
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-skarademir-naturalsort
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skratchdot-open-golang
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-skynetservices-skydns
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-assertions
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-smartystreets-go-aws-auth
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-smartystreets-goconvey
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spacejam-loghisto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spacemonkeygo-flagfile
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spacemonkeygo-spacelog
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-spf13-afero
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cast
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-cobra
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-fsync
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-jWalterWeatherman
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-nitro
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-spf13-pflag
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-spf13-viper
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stathat-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-stevvooe-resumable
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-stretchr-objx
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-stretchr-testify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-syndtr-gocapability
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-goleveldb
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-syndtr-gosnappy
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-tent-http-link-go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-thejerf-suture
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-tonnerre-golang-pretty
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-ugorji-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-urfave-cli
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vaughan0-go-ini
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-vbatts-tar-split
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vishvananda-netlink
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} aarch64 x86_64 %{arm}}
- golang-github-vishvananda-netns
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vitrun-qart
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-vjeantet-asn1-ber
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-vmware-govcloudair
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-github-wsxiaoys-terminal
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonpointer
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonreference
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xeipuuv-gojsonschema
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xiang90-probing
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-xtaci-kcp-go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-xtaci-smux
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-ace
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yosssi-gohtml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-github-yvasiyarov-go-metrics
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-gorelic
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-yvasiyarov-newrelic_platform_go
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-github-zillode-notify
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-google-golangorg-cloud
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gcfg
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-go-crypto
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-decimal-inf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-go-exp
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-googlecode-goauth2
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gogoprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-gomock
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-google-api-client
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-goprotobuf
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-log4go
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-net
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-sqlite
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
ExclusiveArch: %{go_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- golang-googlecode-text
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-tools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-googlecode-uuid
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-go-check-check
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-go-macaroon-macaroon
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- golang-gopkg-retry-v1
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golang-gopkg-yaml
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 aarch64 %{arm}}
- golint
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gomtree
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- gotags
ExclusiveArch: %{go_arches}
- gotun
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: x86_64
- gprbuild
ExclusiveArch: %{GPRbuild_arches} %{bootstrap_arch}
- gprolog
ExclusiveArch: x86_64 %{ix86} ppc alpha
- gsf-sharp
ExclusiveArch: %mono_arches
- gtk-sharp-beans
ExclusiveArch: %mono_arches
- gtk-sharp2
ExclusiveArch: %mono_arches
- gtk-sharp3
ExclusiveArch: %{mono_arches}
- gtkd
ExclusiveArch: %{ldc_arches}
- gudev-sharp
ExclusiveArch: %mono_arches
- hedgewars
ExclusiveArch: %{fpc_arches}
- heketi
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- hub
ExclusiveArch: %{go_arches}
- hyena
ExclusiveArch: %{mono_arches}
- hyperscan
ExclusiveArch: x86_64
- hyperv-daemons
ExclusiveArch: i686 x86_64
- icaro
ExclusiveArch: %{ix86} %{arm} x86_64 noarch
- ikarus
ExclusiveArch: %{ix86}
- imvirt
ExclusiveArch: %{ix86} x86_64 ia64
- indistarter
ExclusiveArch: %{fpc_arches}
- infinipath-psm
ExclusiveArch: x86_64
- intel-cmt-cat
ExclusiveArch: x86_64 i686 i586
ExclusiveArch: x86_64 i686 i586
- ioport
ExclusiveArch: %{ix86} x86_64
- ipw2100-firmware
ExclusiveArch: noarch i386 x86_64
- ipw2200-firmware
ExclusiveArch: noarch i386 x86_64
- ispc
ExclusiveArch: %{arm} %{ix86} x86_64
- iwyu
ExclusiveArch: %{ix86} x86_64
- ixpdimm_sw
ExclusiveArch: x86_64
- jake
ExclusiveArch: %{nodejs_arches} noarch
- jasmine-node
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- java-1.8.0-openjdk-aarch32
ExclusiveArch: %{arm}
- julia
ExclusiveArch: %{ix86} x86_64
- keepass
ExclusiveArch: %{mono_arches}
- kernel
ExclusiveArch: %{all_x86} x86_64 ppc64 s390x %{arm} aarch64 ppc64le
- kicad
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64 ppc64le aarch64
- knot-resolver
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- kompose
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 s390x
- kosmtik
ExclusiveArch: %{nodejs_arches} noarch
- kubernetes
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- latrace
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64}
- lazarus
ExclusiveArch: %{fpc_arches}
- ldc
ExclusiveArch: %{ldc_arches}
- libbsr
ExclusiveArch: %{power64}
- libclc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 %{power64} s390x
- libcxl
ExclusiveArch: %{power64}
- libflatarray
ExclusiveArch: %{ix86} x86_64
- libhfi1
ExclusiveArch: x86_64
- libica
ExclusiveArch: s390 s390x
- libinvm-cim
ExclusiveArch: x86_64
- libinvm-cli
ExclusiveArch: x86_64
- libinvm-i18n
ExclusiveArch: x86_64
- libipt
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- libjingle
ExclusiveArch: %{ix86} x86_64 %{arm}
- libmfx
ExclusiveArch: %{ix86} x86_64
- libpsm2
ExclusiveArch: x86_64
- librtas
ExclusiveArch: ppc %{power64}
- libseccomp
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 mipsel mips64el ppc64 ppc64le s390 s390x
- libservicelog
ExclusiveArch: ppc %{power64}
- libsmbios
ExclusiveArch: x86_64 ia64 %{ix86}
- libunwind
ExclusiveArch: %{arm} aarch64 hppa ia64 mips ppc %{power64} %{ix86} x86_64
- libvmi
ExclusiveArch: x86_64
- libvpd
ExclusiveArch: ppc %{power64}
- libxsmm
ExclusiveArch: x86_64
- libzfcphbaapi
ExclusiveArch: s390 s390x
- lldb
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- lodash
ExclusiveArch: %{nodejs_arches} noarch
- log4net
ExclusiveArch: %mono_arches
- lrmi
ExclusiveArch: %{ix86}
- lsvpd
ExclusiveArch: ppc %{power64}
- luajit
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mactel-boot
ExclusiveArch: x86_64
- manifest-tool
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- marked
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- matreshka
ExclusiveArch: %GPRbuild_arches
- maven-eclipse-plugin
ExclusiveArch: %{ix86} x86_64
- maxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- mcelog
ExclusiveArch: i686 x86_64
- mediaconch
ExclusiveArch: %{qt5_qtwebengine_arches}
- memkind
ExclusiveArch: x86_64
- memtest86+
ExclusiveArch: %{ix86} x86_64
- mesos
ExclusiveArch: x86_64
- microcode_ctl
ExclusiveArch: %{ix86} x86_64
- micropython
ExclusiveArch: %{arm} %{ix86} x86_64
- mine_detector
ExclusiveArch: %{GNAT_arches}
- minetest
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- mingw-wine-gecko
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- mkbootdisk
ExclusiveArch: %{ix86} sparc sparc64 x86_64
- mnemosyne
ExclusiveArch: noarch %{qt5_qtwebengine_arches}
- mocha
ExclusiveArch: %{nodejs_arches} noarch
- mod_mono
ExclusiveArch: %mono_arches
- mokutil
ExclusiveArch: %{ix86} x86_64 aarch64
- mongo-tools
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- mono
ExclusiveArch: %mono_arches
- mono-addins
ExclusiveArch: %mono_arches
- mono-basic
ExclusiveArch: %{mono_arches}
- mono-bouncycastle
ExclusiveArch: %mono_arches
- mono-cecil
ExclusiveArch: %mono_arches
- mono-cecil-flowanalysis
ExclusiveArch: %mono_arches
- mono-debugger
ExclusiveArch: %ix86 x86_64
- mono-reflection
ExclusiveArch: %mono_arches
- mono-tools
ExclusiveArch: %mono_arches
- mono-zeroconf
ExclusiveArch: %mono_arches
- monobristol
ExclusiveArch: %{mono_arches}
- monodevelop
ExclusiveArch: %mono_arches
- monodevelop-debugger-gdb
ExclusiveArch: %{mono_arches}
- monosim
ExclusiveArch: %mono_arches
- mrrescue
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- msr-tools
ExclusiveArch: %{ix86} x86_64
- mustache-d
ExclusiveArch: %{ldc_arches}
- mysql-connector-net
ExclusiveArch: %{mono_arches}
- nacl-arm-binutils
ExclusiveArch: x86_64
- nacl-arm-gcc
ExclusiveArch: x86_64
- nacl-arm-newlib
ExclusiveArch: x86_64
- nacl-binutils
ExclusiveArch: x86_64
- nacl-gcc
ExclusiveArch: x86_64
- nacl-newlib
ExclusiveArch: x86_64
- nant
ExclusiveArch: %mono_arches
- nbc
ExclusiveArch: %{fpc_arches}
- nbdkit
ExclusiveArch: x86_64
- ndesk-dbus
ExclusiveArch: %{mono_arches}
- ndesk-dbus-glib
ExclusiveArch: %{mono_arches}
- newtonsoft-json
ExclusiveArch: %{mono_arches}
- nini
ExclusiveArch: %{mono_arches}
- node-gyp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs
ExclusiveArch: %{nodejs_arches}
- nodejs-abbrev
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-accepts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-acorn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-after
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-agent-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-agentkeepalive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ain2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-alter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-cyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-font
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-green
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-magenta
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ansi-styles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-wrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansi-yellow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansicolors
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansidiff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ansistyles
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-any-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-append-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-aproba
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archiver-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-archy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-are-we-there-yet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-argparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-argsparser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-exclude
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-arr-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arr-union
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-differ
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-find-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-flatten
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-foreach
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-array-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-uniq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-array-unique
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-arrify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-as-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-asap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ascii-tree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ascli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-asn1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assert-plus
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assertion-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-assume
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ast-traverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ast-types
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-astral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-angular-annotate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-astral-pass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-array-reduce
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-async-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-each
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-queue
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-async-some
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-aws-sign2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-babel-runtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-backbone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-balanced-match
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-base64-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-base64-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-basic-auth-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-basic-auth-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-batch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bcrypt
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-beeper
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-benchmark
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-better-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bignumber-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bindings
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-block-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bluebird
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-body-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boolbase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-boom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-brace-expansion
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-breakable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-browser-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buf-compare
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-crc32
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-buffer-shims
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffer-writer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-buffertools
ExclusiveArch: %{nodejs_arches}
- nodejs-bufferutil
ExclusiveArch: %{nodejs_arches}
- nodejs-builtin-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-builtins
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-bundle-dependencies
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bunyan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-burrito
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-caching-transform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-call-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-caller-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caller-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-callsites
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camel-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-camelcase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caniuse-db
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-capture-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-carrier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-caseless
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-connect-middleware
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chai-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chainsaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chalk
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-change-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-char-spinner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-character-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-charm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-child-process-close
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chmodr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chownr
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-chrono
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cjson
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-clean-yaml-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cli-spinner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cliui
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-clone-stats
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-closure-compiler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-co-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-code-point-at
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-codemirror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-collections
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-colour
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-columnify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-combined-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commander
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commondir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-commoner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-commonmark
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-component-emitter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-component-indexof
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compress-commons
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-compressible
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-compression
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-map
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-concat-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-config-chain
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-livereload
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-connect-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-console-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-console-dot-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-constant-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-constantinople
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-disposition
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-content-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-convert-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookie-jar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cookie-signature
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cookiejar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-core-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-core-util-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-couch-login
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-coveralls
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-crc32-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-create-error-class
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-cross-spawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cross-spawn-async
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cryptiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-select
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-css-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-css-what
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-csscomb-core
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cssom
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csurf
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-generate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-csv-spectrum
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ctype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-currently-unhandled
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-cycle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-d
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dashdash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-data-uri-to-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-date-now
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dateformat
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-debug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-debuglog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-decamelize
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-decompress-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-eql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-equal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deep-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deep-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deeper
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-default-require-extensions
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defaults
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defence
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-defence-cli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-deferred
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-define-properties
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defined
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-defs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-degenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-del
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-delayed-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-delegates
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dep-graph
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-depd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dependency-lister
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-deprecated
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-destroy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-detect-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-detective
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dezalgo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-difflib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-docopt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-doctrine
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dom-serializer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domelementtype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-domutils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dot-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dotfile-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dreamopt
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-dryice
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-dtree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexer2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-duplexer3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duplexify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-duration
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-each-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ebnf-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ecstatic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-editor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ee-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-emojione
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encodeurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-encoding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-end-of-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-entities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-error-ex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errorhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-errs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-abstract
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es-to-primitive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es5-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es5-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-iterator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-es6-set
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-es6-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-html
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escape-regexp-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-escape-string-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-escodegen
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-fb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-esprima-harmony-jscs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esrecurse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-estraverse-fb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-esutils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-etag
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-event-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-event-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eventemitter2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-eventemitter3
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-events-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-exit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-brackets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expand-tilde
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-expect-dot-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-express-session
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extend-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-extsprintf
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-eyes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fancy-log
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-far
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fast-levenshtein
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-faye-websocket
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fd
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fd-slicer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fg-lodash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-figures
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-file-entry-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-sync-cmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-file-uri-to-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-filed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filelist
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-filename-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fileset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fill-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fill-range
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-finalhandler
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-find-cache-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-find-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-findup-sync
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-first-chunk-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flagged-respawn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-flot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-dot-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fn-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-follow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-for-in
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-for-own
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-foreach
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forever-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-form-data
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-formatio
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-formidable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-forwarded
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-freetree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fresh
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-from2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-exists-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-fs-ext
ExclusiveArch: %{nodejs_arches}
- nodejs-fs-extra
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-vacuum
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs-write-stream-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fs2
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-ignore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-fstream-npm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ftp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-function-bind
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gauge
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gaze
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gdal
ExclusiveArch: %{nodejs_arches}
- nodejs-generate-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generate-object-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-generic-pool
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-get-pkg-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stdin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-get-uri
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-getobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gettext-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-git
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-github-url-from-username-repo
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glob-base
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-glob-parent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-global-prefix
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globby
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-globule
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-glogg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gonzales-pe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-got
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-graceful-readlink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grip
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-growl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-angular-templates
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-banner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-cli
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-compare-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-clean
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-concat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-connect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-copy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-csslint
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-cssmin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-htmlmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-internal
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-less
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-requirejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-contrib-uglify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-contrib-watch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-git-authors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-html-validation
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-init
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-known-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-log-utils
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-legacy-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-lib-contrib
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-sed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-simple-mocha
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-grunt-util-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-process
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-util-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-grunt-wrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-gzip-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-handlebars
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-har-validator
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-gulplog
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-has-unicode
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-has-yarn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hash_file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hawk
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-he
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-heap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-highlight-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hock
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hoek
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-hooker
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-hosted-git-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-html-minifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-htmlparser2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-errors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-http-server
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-http-signature
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-https-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-humanize-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-i18n-transform
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-i2c
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv
ExclusiveArch: %{nodejs_arches}
- nodejs-iconv-lite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-iferr
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ignore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-imurmurhash
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-indent-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-infinity-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inflight
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-inherits
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inherits1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ini
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-init-package-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-inline-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-install
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-int64-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-interpret
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-into-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-invert-kv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ip
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irc-colors
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-irregular-plurals
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-arrayish
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-boolean-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-builtin-module
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-callable
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-date-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-dotfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-equal-shallow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extendable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-extglob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-finite
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-fullwidth-code-point
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-generator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-generator-function
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-my-json-valid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-number
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-number-object
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-in-cwd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-path-inside
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-plain-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-plain-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-primitive
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-property
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-redirect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-regexp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-relative
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-retry-allowed
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-symbol
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-text-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-typedarray
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-unc-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-url
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-utf8
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-is-valid-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-is-windows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-isexe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-iso8601
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isobject
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isodate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-isstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-istanbul
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jade
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-growl-reporter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jasmine-reporters
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jison
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jison-lex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jju
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joose
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-namespace-depended
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-joosex-simplerequest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-base64
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-js-yaml
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jschardet
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jscoverage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jshint
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-diff
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-localizer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-json-parse-helpfulerror
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stable-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-json-stringify-safe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jsonm
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonparse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonpointer
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-jsonselect
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-jwt-simple
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-keypress
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-kind-of
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-klaw
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-langdetect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-latest-version
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lazystream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lcid
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lcov-parse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-leaflet
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-formbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leaflet-hash
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-leche
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-left-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-less
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-levn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lex-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-libxmljs
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-line-reader
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-linkify-it
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-grunt-tasks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-load-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-locate-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lockfile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-log-driver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-log-symbols
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lolex
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-loud-rejection
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-lower-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lower-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lowercase-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-cache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-lru-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ltx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-make-arrow-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-make-generator-function
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-obj
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-map-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik
ExclusiveArch: %{nodejs_arches}
- nodejs-mapnik-pool
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mapnik-vector-tile
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-markdown
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-markdown-it-testgen
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-max-timeout
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-maxmin
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mbtiles
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-md5-hex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-md5-o-matic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mdurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-media-typer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-memoizee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-meow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-merge-descriptors
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-merge-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-metascript
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-method-override
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-methods
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-millstone
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mime-db
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mime-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mimeparse
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minimatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-minimist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-minstache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkdirp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mkfiletree
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mock-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-module-not-found-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-moment
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mongodb
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mongodb-core
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-monocle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-morgan
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-muffin
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiline
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-multimatch
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-multiparty
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mustache
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mute-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mv
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-mysql
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-mz
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nan0
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nan1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nano
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-native-or-bluebird
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ncp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-needle
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-negotiator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nested-error-stacks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-net-browserify-alt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-netmask
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-next
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-next-tick
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-node-expat
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-int64
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-print
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-static
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-status-codes
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-node-stringprep
ExclusiveArch: %{nodejs_arches}
ExclusiveArch: %{ix86} x86_64 %{arm}
- nodejs-node-uuid
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-nomnom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nopt-usage
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-noptify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-normalize-git-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-package-data
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-normalize-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-cache-filename
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-install-checks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-package-arg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-npm-run-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-stats
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npm-user-validate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-npmlog
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-api
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nsp-audit-shrinkwrap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-nth-check
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-number-is-nan
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-numeral
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oauth-sign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-assign
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-dot-entries
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-dot-omit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-object-inspect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-object-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-finished
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-on-headers
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-once
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-onetime
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-only-shallow
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-oop
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opener
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-opn
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optionator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-options
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-optjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-opts
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-orchestrator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ordered-read-streams
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-os-homedir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-locale
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-os-tmpdir
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-osenv
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-output-file-sync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-p-finally
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-is-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-p-locate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pac-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pac-resolver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-info
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-package-license
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-packaging
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-packet-reader
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pad-left
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-paperboy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-param-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-github-repo-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parse-json
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parse-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-parserlib
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-parseurl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pascal-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth1
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-oauth2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-passport-strategy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-array
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-exists
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-absolute
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-is-inside
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-key
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path-to-regexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-path-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-path2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pathval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pause
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pause-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pedding
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pegjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pem
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pff
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pg-connection-string
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-escape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pg-types
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pgpass
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pinkie-promise
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkg-dir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pkginfo
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-platform
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-plur
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portfinder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-portscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-posix-getopt
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-bytea
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-date
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-postgres-interval
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-prelude-ls
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prepend-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-preserve
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-bytes
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-hrtime
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pretty-ms
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-private
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-process-nextick-args
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-progress-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-promise
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promises-aplus-tests
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-prompt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-promzard
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-propagate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proto-list
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-proxyquire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pruddy-error
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-pseudomap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-pubcontrol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-q-io
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qtdatastream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-queue-async
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-qunit-extras
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-qunitjs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rainbowsocks
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-randomatic
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-range-parser
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-raw-body
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rc
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-re-emitter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-all-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-cmd-shim
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-dir-files
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-file
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-installed
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-json
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-package-tree
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-read-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-read-pkg-up
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readable-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-readdir-scoped-modules
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-readdirp
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-realize-package-specifier
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-recast
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rechoir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-redent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-reduce-component
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-regenerator
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-regex-cache
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-registry-url
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-relateurl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repeat-element
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeat-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-repeating
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-repl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-replace-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-replace-require-self
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-request
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-requestretry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-cs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-require-directory
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-inject
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-uncached
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-require-yaml
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requirejs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-requires-port
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-from
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-resolve-pkg
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-response-time
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-resumer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-retry
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-revalidator
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rewire
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rhea
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-rimraf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-rndm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ronn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-run-parallel-limit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-runforcover
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safe-buffer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-safe-json-stringify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-safecb
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-samsam
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sauce-tunnel
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-saucelabs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sax
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-scmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-secure-random
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-semver
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-send
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sentence-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-seq
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sequencify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serialize-error
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-index
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-serve-static
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-getter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-set-immediate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-set-immediate-shim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-setimmediate
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sha
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-shelljs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-shelljs-nodecli
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-should-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-format
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-http
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-should-type
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-showdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sigmund
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-signal-exit
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-silent-npm-registry-client
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-assert
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-simple-fmt
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-is
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-simple-markdown
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-single-line-log
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sinon-restore
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-slide
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-smart-buffer
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-snake-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-snockets
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sntp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-socks-client
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-socks-proxy-agent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sort-keys
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sorted-object
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-source-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-source-map-fixtures
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-sparkles
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-spdx-correct
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-exceptions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-expression-parse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-spdx-license-ids
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-speedometer
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-split
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sprintf-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-sqlite3
ExclusiveArch: %{nodejs_arches}
- nodejs-srs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-st
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-trace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stack-utils
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-static-favicon
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-statuses
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-std-mocks
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-combiner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-consume
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-counter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-equal
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-reduce
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-replace
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stream-shift
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-spigot
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stream-to-array
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamsink
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-streamtest
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-repeat
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-string-dot-prototype-dot-trim
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string-width
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-string_decoder
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringmap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringscanner
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringset
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-stringstream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-ansi
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-bom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-bom-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-indent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strip-json-comments
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-strip-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-strscanner
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-stylus
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-success-symbol
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-superagent-proxy
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-supertest
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supervisor
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-supports-color
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-swap-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-symbol-observable
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tad
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-mocha-reporter
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tap-parser
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tape
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tar-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-temp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-temporary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-cordovajs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tern-liferay
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-terst
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-test
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-testjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-testswarm
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-text-extensions
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-text-table
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-thenify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thenify-all
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-through2
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-through2-filter
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-thunkify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tildify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tilejson
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tilelive-mapnik
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tiletype
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-time-stamp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-timed-out
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-timers-ext
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tiny-lr-fork
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-title-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tlds
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tmatch
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tmp
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-to-absolute-glob
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-to-object-path
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tough-cookie
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tracejs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-transformers
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-traverse
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-treeify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-trim-newlines
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-try-open
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tryor
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-tsscmp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ttembed-js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-tunnel-agent
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-check
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-type-detect
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-is
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-type-name
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-typeahead.js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typedarray
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-typescript
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uc-dot-micro
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uglify-to-browserify
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid-number
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uid-safe
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-uid2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-ultron
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-umask
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unc-path-regex
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-underscore-dot-logger
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unicode-7.0.0
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unicode-length
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-union
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unique-filename
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-slug
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unique-stream
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-unpipe
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-unzip-response
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-upper-case-first
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-uri-path
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-join
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url-parse-lax
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-url2
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utfx
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-util
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-deprecate
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-util-extend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utile
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-utilities
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-utils-merge
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vali-date
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-validate-npm-package-license
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-validate-npm-package-name
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vary
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vasync
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-verror
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vhost
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vinyl
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vow-fs
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-vow-queue
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-vows
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-w3cjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-walkdir
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-watchit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wcwidth
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-weak-map
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-websocket-driver
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-when
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-which
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-win-spawn
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-window-size
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-winston
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-with
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-woothee
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wordwrap
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrap-ansi
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-wrap-fn
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-wrappy
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-file-atomic
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-json-file
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-write-pkg
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-ws
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xml2js
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmlbuilder
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xmldom
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-xregexp
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-xtend
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-y18n
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-yallist
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yargs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodejs-yauzl
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zap
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zip-stream
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zipfile
ExclusiveArch: %{nodejs_arches}
- nodejs-zlib-browserify
ExclusiveArch: %{nodejs_arches} noarch
- nodejs-zlibjs
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- nodeunit
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- notify-sharp
ExclusiveArch: %{mono_arches}
- notify-sharp3
ExclusiveArch: %{mono_arches}
- nuget
ExclusiveArch: %{mono_arches}
- numatop
ExclusiveArch: %{ix86} x86_64
- nunit
ExclusiveArch: %{mono_arches}
- nunit2
ExclusiveArch: %{mono_arches}
- nvml
ExclusiveArch: x86_64
- nwchem
ExclusiveArch: x86_64 %{ix86}
- oci-register-machine
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- ocitools
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- odcs
ExclusiveArch: %{ix86} x86_64
- olpc-kbdshim
ExclusiveArch: %{ix86} %{arm}
- olpc-netutils
ExclusiveArch: %{ix86} %{arm}
- olpc-powerd
ExclusiveArch: %{ix86} %{arm}
- olpc-utils
ExclusiveArch: %{ix86} %{arm}
- opal-prd
ExclusiveArch: ppc64le
- open-vm-tools
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64
- openblas
ExclusiveArch: %{openblas_arches}
- openjfx
ExclusiveArch: %{ix86} x86_64
- openlibm
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 %{power64}
- openmx
ExclusiveArch: x86_64 %{ix86}
- openni
ExclusiveArch: %{ix86} x86_64 %{arm}
- openni-primesense
ExclusiveArch: %{ix86} x86_64 %{arm}
- openssl-ibmca
ExclusiveArch: s390 s390x
- origin
ExclusiveArch: %{go_arches}
ExclusiveArch: x86_64 aarch64 ppc64le s390x
- orocos-bfl
ExclusiveArch: %{ix86} x86_64
- orthorobot
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64 ppc64
- paflib
ExclusiveArch: ppc %{power64}
- pcc
ExclusiveArch: %{ix86} x86_64
- pcmciautils
ExclusiveArch: %{ix86} x86_64 ia64 ppc ppc64 %{arm}
- pdfmod
ExclusiveArch: %mono_arches
- perl-Dumbbench
ExclusiveArch: %{ix86} x86_64 noarch
- perl-Parse-DMIDecode
ExclusiveArch: %{ix86} x86_64 ia64 aarch64
- pesign
ExclusiveArch: %{ix86} x86_64 ia64 aarch64 arm
- pesign-test-app
ExclusiveArch: i686 x86_64 ia64 aarch64
- pinta
ExclusiveArch: %mono_arches
- pioneer
ExclusiveArch: %{ix86} x86_64
- playonlinux
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- polyml
ExclusiveArch: %{ix86} x86_64 sparc sparcv8 sparcv9 sparcv9v ppc %{power64} %{arm} aarch64 ia64 mips mipsel
- poppler-sharp
ExclusiveArch: %mono_arches
- powerpc-utils
ExclusiveArch: ppc %{power64}
- ppc64-diag
ExclusiveArch: ppc %{power64}
- ppc64-utils
ExclusiveArch: ppc %{power64}
- publican-jboss
ExclusiveArch: i686 x86_64
- pvs-sbcl
ExclusiveArch: %{ix86} x86_64 ppc sparcv9
- python-afl
ExclusiveArch: %{ix86} x86_64
- python-etcd
ExclusiveArch: noarch %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- python-healpy
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-openoffice
ExclusiveArch: noarch x86_64
- python-ovirt-register
ExclusiveArch: %{ix86} x86_64
- python-pymoc
ExclusiveArch: aarch64 ppc64 ppc64le x86_64 s390x
- python-rpi-gpio
ExclusiveArch: %{arm} aarch64
- q4wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- qcint
ExclusiveArch: x86_64
- qclib
ExclusiveArch: s390 s390x
- qt4pas
ExclusiveArch: %{fpc_arches}
- qt5-qtwebengine
ExclusiveArch: %{qt5_qtwebengine_arches}
- quantum-espresso
ExclusiveArch: x86_64 %{ix86}
ExclusiveArch: %{openblas_arches}
- rear
ExclusiveArch: %ix86 x86_64 ppc ppc64 ppc64le ia64
- redhat-lsb
ExclusiveArch: %{ix86} ia64 x86_64 ppc ppc64 s390 s390x %{arm} aarch64 ppc64le
- reg
ExclusiveArch: x86_64
- reptyr
ExclusiveArch: %{ix86} x86_64 %{arm}
- rescene
ExclusiveArch: %{mono_arches}
- restsharp
ExclusiveArch: %{mono_arches}
- rhythmbox-alternative-toolbar
ExclusiveArch: %{ix86} %{arm} x86_64 ppc64 ppc64le
- rkt
ExclusiveArch: x86_64 aarch64 %{arm} %{ix86}
- runc
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le %{mips} s390x
- rust
ExclusiveArch: %{rust_arches}
- rust-packaging
ExclusiveArch: %{rust_arches} noarch
- s390utils
ExclusiveArch: s390 s390x
- sagemath
ExclusiveArch: aarch64 %{arm} %{ix86} x86_64 ppc sparcv9
- sbcl
ExclusiveArch: %{arm} %{ix86} x86_64 ppc sparcv9 aarch64
- sbd
ExclusiveArch: i686 x86_64 s390x
- seamonkey
ExclusiveArch: %{ix86} x86_64
- servicelog
ExclusiveArch: ppc %{power64}
- sharpfont
ExclusiveArch: %mono_arches
- sharpziplib
ExclusiveArch: %{mono_arches}
- shim
ExclusiveArch: x86_64
- shim-signed
ExclusiveArch: x86_64 aarch64
- shim-unsigned-aarch64
ExclusiveArch: aarch64
- sigul
ExclusiveArch: x86_64
- skychart
ExclusiveArch: %{fpc_arches}
- slapi-nis
ExclusiveArch: x86_64 %{ix86}
- smuxi
ExclusiveArch: %{ix86} x86_64 %{arm} ppc64le
- snapd
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64 ppc64le s390x
- source-to-image
ExclusiveArch: %{?go_arches:%{go_arches}}%{!?go_arches:%{ix86} x86_64 %{arm}}
- sparkleshare
ExclusiveArch: %{mono_arches}
- spicctrl
ExclusiveArch: %{ix86} x86_64
- spice
ExclusiveArch: x86_64
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- spice-xpi
ExclusiveArch: i686 x86_64 armv6l armv7l armv7hl aarch64
- spring
ExclusiveArch: %{ix86} x86_64
- springlobby
ExclusiveArch: %{ix86} x86_64
- statsd
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- stripesnoop
ExclusiveArch: %{ix86} x86_64
- supermin
ExclusiveArch: x86_64
- sysbench
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips} aarch64
- syslinux
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
ExclusiveArch: %{ix86} x86_64
- taglib-sharp
ExclusiveArch: %{mono_arches}
- tarantool
ExclusiveArch: %{ix86} x86_64 armv7hl armv7hnl aarch64
- tboot
ExclusiveArch: %{ix86} x86_64
- templates_parser
ExclusiveArch: %GPRbuild_arches
- themonospot-base
ExclusiveArch: %mono_arches
- themonospot-console
ExclusiveArch: %mono_arches
- themonospot-gui-gtk
ExclusiveArch: %mono_arches
- themonospot-plugin-avi
ExclusiveArch: %mono_arches
- themonospot-plugin-mkv
ExclusiveArch: %mono_arches
- thermald
ExclusiveArch: %{ix86} x86_64
- thunderbird-enigmail
ExclusiveArch: %{ix86} %{arm} ppc64 ppc64le s390x x86_64 noarch
- tilix
ExclusiveArch: %{ldc_arches}
- tmux-top
ExclusiveArch: %{go_arches}
- tomboy
ExclusiveArch: %{mono_arches}
- tpm2-tools
ExclusiveArch: %{ix86} x86_64
- tpm2-tss
ExclusiveArch: %{ix86} x86_64
- uClibc
ExclusiveArch: %{arm} %{ix86} x86_64 %{mips}
- ugene
ExclusiveArch: %{ix86} x86_64
- uglify-js
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- uglify-js1
ExclusiveArch: %{nodejs_arches} noarch
ExclusiveArch: %{ix86} x86_64 %{arm} noarch
- unetbootin
ExclusiveArch: %{ix86} x86_64
- v8
ExclusiveArch: %{ix86} x86_64 %{arm} ppc mipsel mips64el
- v8-314
ExclusiveArch: %{ix86} x86_64 %{arm} mips mipsel ppc ppc64
- valgrind
ExclusiveArch: %{ix86} x86_64 ppc ppc64 ppc64le s390x armv7hl aarch64
- vboot-utils
ExclusiveArch: %{arm} aarch64 %{ix86} x86_64
- vdsm
ExclusiveArch: x86_64 %{power64} aarch64
- vim-go
ExclusiveArch: %{?golang_arches}%{!?golang_arches:%{ix86} x86_64 %{arm}}
- virtualplanet
ExclusiveArch: %{fpc_arches}
- vrq
ExclusiveArch: %{ix86} x86_64
- warsow
ExclusiveArch: %{ix86} x86_64 %{arm}
- warsow-data
ExclusiveArch: %{ix86} x86_64 %{arm}
- webkit-sharp
ExclusiveArch: %mono_arches
- wine
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
ExclusiveArch: %{ix86} %{arm}
- winetricks
ExclusiveArch: %{ix86} x86_64 %{arm} aarch64
- wiredtiger
ExclusiveArch: x86_64 aarch64 ppc64le
- wraplinux
ExclusiveArch: %{ix86} x86_64
- wxMaxima
ExclusiveArch: %{arm} %{ix86} x86_64 aarch64 ppc sparcv9
- x86info
ExclusiveArch: %{ix86} x86_64
- xen
ExclusiveArch: %{ix86} x86_64 armv7hl aarch64
- xmlada
ExclusiveArch: %{GPRbuild_arches}
- xorg-x11-drv-armsoc
ExclusiveArch: %{arm} aarch64
- xorg-x11-drv-geode
ExclusiveArch: %{ix86}
- xorg-x11-drv-intel
ExclusiveArch: %{ix86} x86_64 ia64
- xorg-x11-drv-omap
ExclusiveArch: %{arm}
- xorg-x11-drv-openchrome
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-opentegra
ExclusiveArch: %{arm}
- xorg-x11-drv-vesa
ExclusiveArch: %{ix86} x86_64
- xorg-x11-drv-vmware
ExclusiveArch: %{ix86} x86_64 ia64
- xsp
ExclusiveArch: %mono_arches
- xsupplicant
ExclusiveArch: %{ix86} x86_64 ppc %{power64}
- ycssmin
ExclusiveArch: %{nodejs_arches} noarch
- zeromq-ada
ExclusiveArch: %{GNAT_arches}
- zlib-ada
ExclusiveArch: %{GNAT_arches}
6 years, 6 months
Architecture specific change in rpms/livecd-tools.git
by githook-noreply@fedoraproject.org
The package rpms/livecd-tools.git has added or updated architecture specific content in its
spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s):
https://src.fedoraproject.org/cgit/rpms/livecd-tools.git/commit/?id=1ec64....
Change:
+%ifarch %{ix86} x86_64
Thanks.
Full change:
============
commit 1ec641eab8e586cdcf925380ecffb4f5b9299eb8
Author: Neal Gompa <ngompa13(a)gmail.com>
Date: Sat Oct 21 14:25:09 2017 -0400
Bump version to 25.0 (ngompa13)
Set the correct partition size for minimal Mageia kickstarts (ngompa13)
editliveos: A full featured replacement for tools/edit-livecd. (fgrose)
fs.py: Add functions and classes to support Live Image Mounting. (fgrose)
creator.py, live.py: Allow more options to be passed to functions. (fgrose)
debug.py: Add support for argparse parser. (fgrose)
fs.py: Allow more options to be passed to functions. (fgrose)
util.py: Add a subprocess call that returns standard values. (fgrose)
Remove absolute directories on external program call paths. (fgrose)
livecd-iso-to-disk: Allow auto --multi install. (fgrose)
Fix ARM architecture check (ngompa13)
Declare the literal "kernel-" as a byte array to fix crash (ngompa13)
livecd-iso-to-disk: Fix boot configuration for images lacking /EFI (fgrose)
livecd-iso-to-disk: Fix space evaluation for images lacking /EFI (fgrose)
Use restorecon instead of setfiles for relabeling (scott)
liveimage-mount: Add support for OverlayFS overlays. (fgrose)
livecd-iso-to-disk+pod: Enable a --copy-overlay option. (fgrose)
livecd-iso-to-disk+pod: Enable a --copy-home option. (fgrose)
livecd-iso-to-disk+pod: Add --overlayfs option for overlay. (fgrose)
livecd-iso-to-disk+pod: Allow multi installs to live booted devices (fgrose)
livecd-iso-to-disk: Fix sed for kernelargs. (fgrose)
livecd-iso-to-disk: Adjust syslinux default menu style, as needed. (fgrose)
diff --git a/.gitignore b/.gitignore
index 593e045..7146af3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,3 +13,4 @@
/livecd-tools-24.2.tar.gz
/livecd-tools-24.3.tar.gz
/livecd-tools-24.4.tar.gz
+/livecd-tools-25.0.tar.gz
diff --git a/livecd-tools.spec b/livecd-tools.spec
index af40b23..65de795 100644
--- a/livecd-tools.spec
+++ b/livecd-tools.spec
@@ -9,8 +9,8 @@
Summary: Tools for building live CDs
Name: livecd-tools
-Version: 24.4
-Release: 3%{?dist}
+Version: 25.0
+Release: 1%{?dist}
Epoch: 1
License: GPLv2
Group: System Environment/Base
@@ -29,6 +29,12 @@ Requires: python3-imgcreate = %{epoch}:%{version}-%{release}
Requires: python2-imgcreate = %{epoch}:%{version}-%{release}
%endif
+# For splitting out livecd-iso-to-disk to separate subpackage
+Conflicts: livecd-tools < 25.0
+
+%ifarch %{ix86} x86_64
+Requires: livecd-iso-to-mediums = %{epoch}:%{version}-%{release}
+%endif
%description
Tools for generating live CDs on Fedora based systems including
@@ -63,6 +69,7 @@ Requires: sssd-client
Requires: cryptsetup
Requires: squashfs-tools
Requires: policycoreutils
+Requires: dracut >= 045
%description -n python-imgcreate-sysdeps
This package describes the common system dependencies for
@@ -102,6 +109,21 @@ Python 3 modules that can be used for building images for things
like live image or appliances.
%endif
+%ifarch %{ix86} x86_64
+%package -n livecd-iso-to-mediums
+Summary: Tools for installing ISOs to different mediums
+Group: System Environment/Base
+Requires: python-imgcreate-sysdeps%{?_isa} = %{epoch}:%{version}-%{release}
+Requires: syslinux >= 6.02-4
+Requires: syslinux-nonlinux >= 6.02-4
+Requires: /sbin/extlinux
+Conflicts: livecd-tools < 25.0
+
+%description -n livecd-iso-to-mediums
+Tools for installing Live CD ISOs to different mediums
+(e.g. USB sticks, hard drives, PXE boot, etc.)
+%endif
+
%prep
%autosetup -p1
@@ -120,18 +142,24 @@ like live image or appliances.
# Delete license file from docs, we'll grab it later
rm -rf %{buildroot}%{_datadir}/doc/%{name}/COPYING
+%ifnarch %{ix86} x86_64
+# livecd-iso-to-mediums doesn't work without syslinux
+rm -rfv %{buildroot}%{_bindir}/livecd-iso-to-*
+rm -rfv %{buildroot}%{_mandir}/man8/livecd-iso-to-*
+%endif
+
%files
%license COPYING
%doc AUTHORS README HACKING
%doc config/livecd-fedora-minimal.ks
%doc config/livecd-mageia-minimal-*.ks
%{_mandir}/man*/*
+%exclude %{_mandir}/man8/livecd-iso-to-disk.8*
%{_bindir}/livecd-creator
-%{_bindir}/livecd-iso-to-disk
-%{_bindir}/livecd-iso-to-pxeboot
%{_bindir}/image-creator
%{_bindir}/liveimage-mount
%{_bindir}/edit-livecd
+%{_bindir}/editliveos
%{_bindir}/mkbiarch
%files -n python-imgcreate-sysdeps
@@ -149,7 +177,39 @@ rm -rf %{buildroot}%{_datadir}/doc/%{name}/COPYING
%{python3_sitelib}/imgcreate
%endif
+%ifarch %{ix86} x86_64
+%files -n livecd-iso-to-mediums
+%license COPYING
+%{_bindir}/livecd-iso-to-disk
+%{_bindir}/livecd-iso-to-pxeboot
+%{_mandir}/man8/livecd-iso-to-disk.8*
+%endif
+
%changelog
+* Sat Oct 21 2017 Neal Gompa <ngompa13(a)gmail.com> - 25.0-1
+- Bump version to 25.0 (ngompa13)
+- Set the correct partition size for minimal Mageia kickstarts (ngompa13)
+- editliveos: A full featured replacement for tools/edit-livecd. (fgrose)
+- fs.py: Add functions and classes to support Live Image Mounting. (fgrose)
+- creator.py, live.py: Allow more options to be passed to functions. (fgrose)
+- debug.py: Add support for argparse parser. (fgrose)
+- fs.py: Allow more options to be passed to functions. (fgrose)
+- util.py: Add a subprocess call that returns standard values. (fgrose)
+- Remove absolute directories on external program call paths. (fgrose)
+- livecd-iso-to-disk: Allow auto --multi install. (fgrose)
+- Fix ARM architecture check (ngompa13)
+- Declare the literal "kernel-" as a byte array to fix crash (ngompa13)
+- livecd-iso-to-disk: Fix boot configuration for images lacking /EFI (fgrose)
+- livecd-iso-to-disk: Fix space evaluation for images lacking /EFI (fgrose)
+- Use restorecon instead of setfiles for relabeling (scott)
+- liveimage-mount: Add support for OverlayFS overlays. (fgrose)
+- livecd-iso-to-disk+pod: Enable a --copy-overlay option. (fgrose)
+- livecd-iso-to-disk+pod: Enable a --copy-home option. (fgrose)
+- livecd-iso-to-disk+pod: Add --overlayfs option for overlay. (fgrose)
+- livecd-iso-to-disk+pod: Allow multi installs to live booted devices (fgrose)
+- livecd-iso-to-disk: Fix sed for kernelargs. (fgrose)
+- livecd-iso-to-disk: Adjust syslinux default menu style, as needed. (fgrose)
+
* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:24.4-3
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/sources b/sources
index c3ad72f..b054d8e 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-SHA512 (livecd-tools-24.4.tar.gz) = 1a82d648efbad279dee6361c95a06f1be685c92311bce9022241d1f3904655c62fb361f2421448b6cc9767e931cbce47356d7e04343a458dbb6ad00a750f2976
+SHA512 (livecd-tools-25.0.tar.gz) = 8b42fce8148d699e08611a8dcfa49a1f90c53f8df57d6debd1d873727ca8d097445c02b25a990f57e5778fb4e4235ea7a3cd2bf8af21d9431cad666b9823ef4d
commit 1706ad7d9700a80d47fdd3f24c57af387f7e2af3
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Thu Aug 3 02:40:43 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
diff --git a/livecd-tools.spec b/livecd-tools.spec
index 213aab1..af40b23 100644
--- a/livecd-tools.spec
+++ b/livecd-tools.spec
@@ -10,7 +10,7 @@
Summary: Tools for building live CDs
Name: livecd-tools
Version: 24.4
-Release: 2%{?dist}
+Release: 3%{?dist}
Epoch: 1
License: GPLv2
Group: System Environment/Base
@@ -150,6 +150,9 @@ rm -rf %{buildroot}%{_datadir}/doc/%{name}/COPYING
%endif
%changelog
+* Thu Aug 03 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:24.4-3
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
+
* Wed Jul 26 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:24.4-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
commit 91f9d257ff058fe1b72d94770f5b6d75e21df0c7
Author: Fedora Release Engineering <releng(a)fedoraproject.org>
Date: Wed Jul 26 20:12:29 2017 +0000
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
diff --git a/livecd-tools.spec b/livecd-tools.spec
index c7aa57d..213aab1 100644
--- a/livecd-tools.spec
+++ b/livecd-tools.spec
@@ -10,7 +10,7 @@
Summary: Tools for building live CDs
Name: livecd-tools
Version: 24.4
-Release: 1%{?dist}
+Release: 2%{?dist}
Epoch: 1
License: GPLv2
Group: System Environment/Base
@@ -150,6 +150,9 @@ rm -rf %{buildroot}%{_datadir}/doc/%{name}/COPYING
%endif
%changelog
+* Wed Jul 26 2017 Fedora Release Engineering <releng(a)fedoraproject.org> - 1:24.4-2
+- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
+
* Mon May 08 2017 Neal Gompa <ngompa13(a)gmail.com> - 24.4-1
- Bump version to 24.4 (ngompa13)
- livecd-iso-to-disk: Fix freespace determination for DVD installer. (fgrose)
6 years, 6 months