summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorConnor Behan2018-05-18 01:51:27 -0400
committerConnor Behan2018-05-18 01:51:27 -0400
commitebc0cdac9d9cbeefebc7c50e66519b2c3e514507 (patch)
tree5b1db885821eb1c838093df98ef50d4def2279e2
downloadaur-ebc0cdac9d9cbeefebc7c50e66519b2c3e514507.tar.gz
Initial import
-rw-r--r--.SRCINFO59
-rw-r--r--0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch49
-rw-r--r--Bug-1269171.patch139
-rw-r--r--LFS_graphite2_harfbuzz.patch212
-rw-r--r--PKGBUILD105
-rw-r--r--freetype261.patch31
-rw-r--r--gcc6.diff37
-rw-r--r--mozconfig37
-rw-r--r--mozilla-pkgconfig.patch40
-rw-r--r--sed43.patch21
-rw-r--r--shared-libs.patch12
-rw-r--r--unbreak-plugin-build.patch76
12 files changed, 818 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..890990b24b0e
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,59 @@
+pkgbase = xulrunner
+ pkgdesc = Mozilla Runtime Environment
+ pkgver = 41.0.2
+ pkgrel = 15
+ url = http://wiki.mozilla.org/XUL:Xul_Runner
+ arch = x86_64
+ license = MPL
+ license = GPL
+ license = LGPL
+ makedepends = gcc6
+ makedepends = zip
+ makedepends = unzip
+ makedepends = pkg-config
+ makedepends = diffutils
+ makedepends = yasm
+ makedepends = mesa
+ makedepends = gconf
+ makedepends = autoconf2.13
+ makedepends = gst-plugins-base-libs
+ depends = gtk2
+ depends = mozilla-common
+ depends = nss>3.18
+ depends = libxt
+ depends = hunspell
+ depends = startup-notification
+ depends = mime-types
+ depends = dbus-glib
+ depends = libpulse
+ depends = libevent
+ depends = libvpx
+ depends = icu
+ depends = python2
+ replaces = xulrunner-oss
+ options = !emptydirs
+ options = !makeflags
+ options = staticlibs
+ source = https://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/41.0.2/source/xulrunner-41.0.2.source.tar.xz
+ source = mozconfig
+ source = freetype261.patch
+ source = 0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch
+ source = Bug-1269171.patch
+ source = LFS_graphite2_harfbuzz.patch
+ source = mozilla-pkgconfig.patch
+ source = shared-libs.patch
+ source = sed43.patch
+ source = gcc6.diff
+ sha256sums = f7abb2e2989779305ab1f80d30caf9fc55d96c7e66d1394e2cc9639442e2b864
+ sha256sums = 8ab57ae3ba4660a721cdb210babee02488b670d9af9fdecf5da3b832d77e342b
+ sha256sums = 3aea9a83bf304da5525f34a911712cf42f8ded1c8b6becf0a2cf8a4b4f7facd6
+ sha256sums = 13a27a385fab88938ac7417f1e7ca7225ec6b88840bafe67e0f5642e5446554a
+ sha256sums = bd78da5d5319c8eb6a9195c3bd35bf919f9a9c030d69890f42e96171e32be60f
+ sha256sums = afcd7d3f6113b0f9ead0cb1b47b3fccedadce56a16b4406c439411864bd11863
+ sha256sums = 1aa9ebe67542a2b8c28905d070829ada5b29438c6a7961f2b0cdd6b92d8b9f5c
+ sha256sums = 59d9fc421bc10a5515b73e159f44a72365bf7b7e8b3fc8a8c46043ef40bd3a40
+ sha256sums = e9b7199b57fa07e440d37db0cc3cf52aa1c1fd7d5e8b31db14e511d77b5ce327
+ sha256sums = 0992d5dce883de760ff0445448466f096d0baa75fe5fd1e60bfd3cc13cb4d098
+
+pkgname = xulrunner
+
diff --git a/0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch b/0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch
new file mode 100644
index 000000000000..1e7fa1cd1e82
--- /dev/null
+++ b/0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch
@@ -0,0 +1,49 @@
+From 4d0fe8f40364c170226f1ef3bc98975630463e87 Mon Sep 17 00:00:00 2001
+From: Mike Hommey <mh+mozilla@glandium.org>
+Date: Tue, 19 Jan 2016 14:31:04 +0900
+Subject: [PATCH] Bug 1233963 - Work around recent GNU gold behavior with
+ segments starting before the first section they contain
+
+---
+ build/unix/elfhack/elf.cpp | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/build/unix/elfhack/elf.cpp b/build/unix/elfhack/elf.cpp
+index 666b535..743afde 100644
+--- a/build/unix/elfhack/elf.cpp
++++ b/build/unix/elfhack/elf.cpp
+@@ -253,26 +253,29 @@ Elf::Elf(std::ifstream &file)
+ }
+ if (phdr.p_type == PT_PHDR)
+ segment->addSection(phdr_section);
+ for (int j = 1; j < ehdr->e_shnum; j++)
+ if (phdr.contains(sections[j]))
+ segment->addSection(sections[j]);
+ // Make sure that our view of segments corresponds to the original
+ // ELF file.
+- assert(segment->getFileSize() == phdr.p_filesz);
++ // GNU gold likes to start some segments before the first section
++ // they contain. https://sourceware.org/bugzilla/show_bug.cgi?id=19392
++ unsigned int gold_adjustment = segment->getAddr() - phdr.p_vaddr;
++ assert(segment->getFileSize() == phdr.p_filesz - gold_adjustment);
+ // gold makes TLS segments end on an aligned virtual address, even
+ // when the underlying section ends before that, while bfd ld
+ // doesn't. It's fine if we don't keep that alignment.
+ unsigned int memsize = segment->getMemSize();
+ if (phdr.p_type == PT_TLS && memsize != phdr.p_memsz) {
+ unsigned int align = segment->getAlign();
+ memsize = (memsize + align - 1) & ~(align - 1);
+ }
+- assert(memsize == phdr.p_memsz);
++ assert(memsize == phdr.p_memsz - gold_adjustment);
+ segments.push_back(segment);
+ }
+
+ new (&eh_entry) ElfLocation(ehdr->e_entry, this);
+ }
+
+ Elf::~Elf()
+ {
+--
+2.7.0
+
diff --git a/Bug-1269171.patch b/Bug-1269171.patch
new file mode 100644
index 000000000000..e67672adb89c
--- /dev/null
+++ b/Bug-1269171.patch
@@ -0,0 +1,139 @@
+diff --git a/config/gcc-stl-wrapper.template.h b/config/gcc-stl-wrapper.template.h
+--- a/config/gcc-stl-wrapper.template.h
++++ b/config/gcc-stl-wrapper.template.h
+@@ -22,21 +22,34 @@
+ #define NOMINMAX 1
+ #endif
+
++#if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
++// Enable checked iterators and other goodies
++//
++// FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
++// Figure out how to resolve this with -fno-rtti. Maybe build with
++// -frtti in DEBUG builds?
++//
++// # define _GLIBCXX_DEBUG 1
++#endif
++
+ // Don't include mozalloc for cstdlib. See bug 1245076.
+ #ifndef moz_dont_include_mozalloc_for_cstdlib
+ # define moz_dont_include_mozalloc_for_cstdlib
+ #endif
+-#ifndef moz_dont_include_mozalloc_for_${HEADER}
+-// mozalloc.h wants <new>; break the cycle by always explicitly
+-// including <new> here. NB: this is a tad sneaky. Sez the gcc docs:
+-//
+-// `#include_next' does not distinguish between <file> and "file"
+-// inclusion, nor does it check that the file you specify has the
+-// same name as the current file. It simply looks for the file
+-// named, starting with the directory in the search path after the
+-// one where the current file was found.
+-# include_next <new>
+
++// Include mozalloc after the STL header and all other headers it includes
++// have been preprocessed.
++#if !defined(MOZ_INCLUDE_MOZALLOC_H) && \
++ !defined(moz_dont_include_mozalloc_for_${HEADER})
++# define MOZ_INCLUDE_MOZALLOC_H
++# define MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
++#endif
++
++#pragma GCC visibility push(default)
++#include_next <${HEADER}>
++#pragma GCC visibility pop
++
++#ifdef MOZ_INCLUDE_MOZALLOC_H_FROM_${HEADER}
+ // See if we're in code that can use mozalloc. NB: this duplicates
+ // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
+ // can't build with that being included before base/basictypes.h.
+@@ -45,23 +58,8 @@
+ # else
+ # error "STL code can only be used with infallible ::operator new()"
+ # endif
+-
+-#endif
+-
+-#if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
+-// Enable checked iterators and other goodies
+-//
+-// FIXME/bug 551254: gcc's debug STL implementation requires -frtti.
+-// Figure out how to resolve this with -fno-rtti. Maybe build with
+-// -frtti in DEBUG builds?
+-//
+-// # define _GLIBCXX_DEBUG 1
+ #endif
+
+-#pragma GCC visibility push(default)
+-#include_next <${HEADER}>
+-#pragma GCC visibility pop
+-
+ // gcc calls a __throw_*() function from bits/functexcept.h when it
+ // wants to "throw an exception". functexcept exists nominally to
+ // support -fno-exceptions, but since we'll always use the system
+diff --git a/config/make-stl-wrappers.py b/config/make-stl-wrappers.py
+--- a/config/make-stl-wrappers.py
++++ b/config/make-stl-wrappers.py
+@@ -25,28 +25,26 @@
+ def is_comment(line):
+ return re.match(r'\s*#.*', line)
+
+ def main(outdir, compiler, template_file, header_list_file):
+ if not os.path.isdir(outdir):
+ os.mkdir(outdir)
+
+ template = open(template_file, 'r').read()
+- path_to_new = header_path('new', compiler)
+
+ for header in open(header_list_file, 'r'):
+ header = header.rstrip()
+ if 0 == len(header) or is_comment(header):
+ continue
+
+ path = header_path(header, compiler)
+ with FileAvoidWrite(os.path.join(outdir, header)) as f:
+ f.write(string.Template(template).substitute(HEADER=header,
+- HEADER_PATH=path,
+- NEW_HEADER_PATH=path_to_new))
++ HEADER_PATH=path))
+
+
+ if __name__ == '__main__':
+ if 5 != len(sys.argv):
+ print("""Usage:
+ python {0} OUT_DIR ('msvc'|'gcc') TEMPLATE_FILE HEADER_LIST_FILE
+ """.format(sys.argv[0]), file=sys.stderr)
+ sys.exit(1)
+diff --git a/memory/mozalloc/mozalloc.h b/memory/mozalloc/mozalloc.h
+--- a/memory/mozalloc/mozalloc.h
++++ b/memory/mozalloc/mozalloc.h
+@@ -7,20 +7,27 @@
+
+ #ifndef mozilla_mozalloc_h
+ #define mozilla_mozalloc_h
+
+ /*
+ * https://bugzilla.mozilla.org/show_bug.cgi?id=427099
+ */
+
+-#include <stdlib.h>
+-#include <string.h>
+ #if defined(__cplusplus)
+ # include <new>
++// Since libstdc++ 6, including the C headers (e.g. stdlib.h) instead of the
++// corresponding C++ header (e.g. cstdlib) can cause confusion in C++ code
++// using things defined there. Specifically, with stdlib.h, the use of abs()
++// in gfx/graphite2/src/inc/UtfCodec.h somehow ends up picking the wrong abs()
++# include <cstdlib>
++# include <cstring>
++#else
++# include <stdlib.h>
++# include <string.h>
+ #endif
+
+ #if defined(__cplusplus)
+ #include "mozilla/fallible.h"
+ #include "mozilla/TemplateLib.h"
+ #endif
+ #include "mozilla/Attributes.h"
+ #include "mozilla/Types.h"
+
diff --git a/LFS_graphite2_harfbuzz.patch b/LFS_graphite2_harfbuzz.patch
new file mode 100644
index 000000000000..06035686d14f
--- /dev/null
+++ b/LFS_graphite2_harfbuzz.patch
@@ -0,0 +1,212 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2016-06-13
+Initial Package Version: 47.0
+Upstream Status: Waiting for review
+Origin: OpenBSD (found at gentoo, rediffed because of one offset > 1500 lines)
+Description: Allow use of system versions of graphite2 and harfbuzz. This
+should be regarded as experimental. Add the options --enable-system-graphite
+and --enable-system-harfbuzz to use this (needs recent versions of both).
+
+diff -Naur ff47-vanilla/config/Makefile.in ff47-patched/config/Makefile.in
+--- ff47-vanilla/config/Makefile.in 2016-06-01 05:11:40.000000000 +0100
++++ ff47-patched/config/Makefile.in 2016-06-11 18:51:40.389876996 +0100
+@@ -49,6 +49,8 @@
+ -DMOZ_NATIVE_LIBEVENT=$(MOZ_NATIVE_LIBEVENT) \
+ -DMOZ_NATIVE_LIBVPX=$(MOZ_NATIVE_LIBVPX) \
+ -DMOZ_NATIVE_ICU=$(MOZ_NATIVE_ICU) \
++ -DMOZ_NATIVE_GRAPHITE2=$(MOZ_NATIVE_GRAPHITE2) \
++ -DMOZ_NATIVE_HARFBUZZ=$(MOZ_NATIVE_HARFBUZZ) \
+ $(srcdir)/system-headers | $(PERL) $(topsrcdir)/nsprpub/config/make-system-wrappers.pl system_wrappers
+ $(INSTALL) system_wrappers $(DIST)
+
+diff -Naur ff47-vanilla/config/system-headers ff47-patched/config/system-headers
+--- ff47-vanilla/config/system-headers 2016-06-01 05:11:40.000000000 +0100
++++ ff47-patched/config/system-headers 2016-06-11 18:51:40.389876996 +0100
+@@ -1345,3 +1345,11 @@
+ #endif
+ libutil.h
+ unwind.h
++#if MOZ_NATIVE_GRAPHITE2==1
++graphite2/Font.h
++graphite2/Segment.h
++#endif
++#if MOZ_NATIVE_HARFBUZZ==1
++harfbuzz/hb-ot.h
++harfbuzz/hb.h
++#endif
+diff -Naur ff47-vanilla/dom/base/moz.build ff47-patched/dom/base/moz.build
+--- ff47-vanilla/dom/base/moz.build 2016-06-01 05:11:44.000000000 +0100
++++ ff47-patched/dom/base/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -482,6 +482,9 @@
+ if CONFIG['MOZ_X11']:
+ CXXFLAGS += CONFIG['TK_CFLAGS']
+
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ GENERATED_FILES += [
+ 'PropertyUseCounterMap.inc',
+ 'UseCounterList.h',
+diff -Naur ff47-vanilla/gfx/moz.build ff47-patched/gfx/moz.build
+--- ff47-vanilla/gfx/moz.build 2016-05-12 18:13:06.000000000 +0100
++++ ff47-patched/gfx/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -7,6 +7,12 @@
+ if CONFIG['MOZ_TREE_CAIRO']:
+ DIRS += ['cairo']
+
++if not CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ DIRS += ['graphite2/src' ]
++
++if not CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ DIRS += ['harfbuzz/src']
++
+ DIRS += [
+ '2d',
+ 'ycbcr',
+@@ -15,8 +21,6 @@
+ 'qcms',
+ 'gl',
+ 'layers',
+- 'graphite2/src',
+- 'harfbuzz/src',
+ 'ots/src',
+ 'thebes',
+ 'ipc',
+diff -Naur ff47-vanilla/gfx/skia/generate_mozbuild.py ff47-patched/gfx/skia/generate_mozbuild.py
+--- ff47-vanilla/gfx/skia/generate_mozbuild.py 2016-06-01 05:11:44.000000000 +0100
++++ ff47-patched/gfx/skia/generate_mozbuild.py 2016-06-11 18:51:40.389876996 +0100
+@@ -134,6 +134,9 @@
+ '-Wno-unused-private-field',
+ ]
+
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff -Naur ff47-vanilla/gfx/skia/moz.build ff47-patched/gfx/skia/moz.build
+--- ff47-vanilla/gfx/skia/moz.build 2016-06-01 05:11:44.000000000 +0100
++++ ff47-patched/gfx/skia/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -752,6 +752,9 @@
+ '-Wno-unused-private-field',
+ ]
+
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] in ('gtk2', 'gtk3', 'android', 'gonk', 'qt'):
+ CXXFLAGS += CONFIG['MOZ_CAIRO_CFLAGS']
+ CXXFLAGS += CONFIG['CAIRO_FT_CFLAGS']
+diff -Naur ff47-vanilla/gfx/thebes/moz.build ff47-patched/gfx/thebes/moz.build
+--- ff47-vanilla/gfx/thebes/moz.build 2016-06-01 05:11:44.000000000 +0100
++++ ff47-patched/gfx/thebes/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -307,7 +307,14 @@
+
+ LOCAL_INCLUDES += CONFIG['SKIA_INCLUDES']
+
+-DEFINES['GRAPHITE2_STATIC'] = True
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ CXXFLAGS += CONFIG['MOZ_GRAPHITE2_CFLAGS']
++else:
++ DEFINES['GRAPHITE2_STATIC'] = True
++
+
+ if CONFIG['CLANG_CXX']:
+ # Suppress warnings from Skia header files.
+diff -Naur ff47-vanilla/intl/unicharutil/util/moz.build ff47-patched/intl/unicharutil/util/moz.build
+--- ff47-vanilla/intl/unicharutil/util/moz.build 2016-06-01 05:11:45.000000000 +0100
++++ ff47-patched/intl/unicharutil/util/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -44,4 +44,7 @@
+ LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES']
+ USE_LIBS += ['icu']
+
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ DIST_INSTALL = True
+diff -Naur ff47-vanilla/netwerk/dns/moz.build ff47-patched/netwerk/dns/moz.build
+--- ff47-vanilla/netwerk/dns/moz.build 2016-05-12 18:13:28.000000000 +0100
++++ ff47-patched/netwerk/dns/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -66,6 +66,9 @@
+ '/netwerk/base',
+ ]
+
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ CXXFLAGS += CONFIG['MOZ_HARFBUZZ_CFLAGS']
++
+ if CONFIG['MOZ_WIDGET_TOOLKIT'] == 'gonk' and CONFIG['ANDROID_VERSION'] > '19':
+ LOCAL_INCLUDES += ['%' + '%s/bionic/libc/dns/include' % CONFIG['ANDROID_SOURCE']]
+
+diff -Naur ff47-vanilla/configure.in ff47-patched/old-configure.in
+--- ff47-vanilla/configure.in 2016-06-01 05:11:44.000000000 +0100
++++ ff47-patched/configure.in 2016-06-11 18:51:40.389876996 +0100
+@@ -8013,6 +8013,49 @@
+ fi
+
+ dnl ========================================================
++dnl Check for harfbuzz
++dnl ========================================================
++
++MOZ_ARG_WITH_BOOL(system-harfbuzz,
++[ --with-system-harfbuzz Use system harfbuzz (located with pkgconfig)],
++MOZ_NATIVE_HARFBUZZ=1,
++MOZ_NATIVE_HARFBUZZ=)
++
++if test -n "$MOZ_NATIVE_HARFBUZZ"; then
++ PKG_CHECK_MODULES(MOZ_HARFBUZZ, harfbuzz >= 1.1.3)
++fi
++
++AC_SUBST(MOZ_NATIVE_HARFBUZZ)
++
++dnl ========================================================
++dnl Check for graphite2
++dnl ========================================================
++
++MOZ_ARG_WITH_BOOL(system-graphite2,
++[ --with-system-graphite2 Use system graphite2 (located with pkgconfig)],
++MOZ_NATIVE_GRAPHITE2=1,
++MOZ_NATIVE_GRAPHITE2=)
++
++if test -n "$MOZ_NATIVE_GRAPHITE2"; then
++ PKG_CHECK_MODULES(MOZ_GRAPHITE2, graphite2)
++
++ dnl graphite2.pc has bogus version, check manually
++ AC_TRY_COMPILE([ #include <graphite2/Font.h>
++ #define GR2_VERSION_REQUIRE(major,minor,bugfix) \
++ ( GR2_VERSION_MAJOR * 10000 + GR2_VERSION_MINOR \
++ * 100 + GR2_VERSION_BUGFIX >= \
++ (major) * 10000 + (minor) * 100 + (bugfix) )
++ ], [
++ #if !GR2_VERSION_REQUIRE(1,3,8)
++ #error "Insufficient graphite2 version."
++ #endif
++ ], [],
++ [AC_MSG_ERROR([--with-system-graphite2 requested but no working libgraphite2 found])])
++fi
++
++AC_SUBST(MOZ_NATIVE_GRAPHITE2)
++
++dnl ========================================================
+ dnl Check for pixman and cairo
+ dnl ========================================================
+
+diff -Naur ff47-vanilla/toolkit/library/moz.build ff47-patched/toolkit/library/moz.build
+--- ff47-vanilla/toolkit/library/moz.build 2016-06-01 05:11:43.000000000 +0100
++++ ff47-patched/toolkit/library/moz.build 2016-06-11 18:51:40.389876996 +0100
+@@ -235,6 +235,12 @@
+ if CONFIG['MOZ_ALSA']:
+ OS_LIBS += CONFIG['MOZ_ALSA_LIBS']
+
++if CONFIG['MOZ_NATIVE_GRAPHITE2']:
++ OS_LIBS += CONFIG['MOZ_GRAPHITE2_LIBS']
++
++if CONFIG['MOZ_NATIVE_HARFBUZZ']:
++ OS_LIBS += CONFIG['MOZ_HARFBUZZ_LIBS']
++
+ if CONFIG['HAVE_CLOCK_MONOTONIC']:
+ OS_LIBS += CONFIG['REALTIME_LIBS']
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..40904c722bcf
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,105 @@
+# $Id: PKGBUILD 312979 2018-03-27 23:00:59Z foutrelis $
+# Maintainer: Connor Behan <connor.behan@gmail.com>
+# Contributor: Jan de Groot <jgc@archlinux.org>
+# Contributor: Alexander Baldeck <alexander@archlinux.org>
+
+pkgname=xulrunner
+pkgver=41.0.2
+pkgrel=15
+pkgdesc="Mozilla Runtime Environment"
+arch=('x86_64')
+license=('MPL' 'GPL' 'LGPL')
+depends=('gtk2' 'mozilla-common' 'nss>3.18' 'libxt' 'hunspell' 'startup-notification' 'mime-types' 'dbus-glib' 'libpulse' 'libevent' 'libvpx' 'icu' 'python2')
+makedepends=('gcc6' 'zip' 'unzip' 'pkg-config' 'diffutils' 'yasm' 'mesa' 'gconf' 'autoconf2.13' 'gst-plugins-base-libs')
+url="http://wiki.mozilla.org/XUL:Xul_Runner"
+source=(https://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/$pkgver/source/xulrunner-$pkgver.source.tar.xz
+ mozconfig
+ freetype261.patch
+ 0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch
+ Bug-1269171.patch
+ LFS_graphite2_harfbuzz.patch
+ mozilla-pkgconfig.patch
+ shared-libs.patch
+ sed43.patch
+ gcc6.diff)
+options=('!emptydirs' '!makeflags' 'staticlibs')
+replaces=('xulrunner-oss')
+sha256sums=('f7abb2e2989779305ab1f80d30caf9fc55d96c7e66d1394e2cc9639442e2b864'
+ '8ab57ae3ba4660a721cdb210babee02488b670d9af9fdecf5da3b832d77e342b'
+ '3aea9a83bf304da5525f34a911712cf42f8ded1c8b6becf0a2cf8a4b4f7facd6'
+ '13a27a385fab88938ac7417f1e7ca7225ec6b88840bafe67e0f5642e5446554a'
+ 'bd78da5d5319c8eb6a9195c3bd35bf919f9a9c030d69890f42e96171e32be60f'
+ 'afcd7d3f6113b0f9ead0cb1b47b3fccedadce56a16b4406c439411864bd11863'
+ '1aa9ebe67542a2b8c28905d070829ada5b29438c6a7961f2b0cdd6b92d8b9f5c'
+ '59d9fc421bc10a5515b73e159f44a72365bf7b7e8b3fc8a8c46043ef40bd3a40'
+ 'e9b7199b57fa07e440d37db0cc3cf52aa1c1fd7d5e8b31db14e511d77b5ce327'
+ '0992d5dce883de760ff0445448466f096d0baa75fe5fd1e60bfd3cc13cb4d098')
+
+prepare() {
+ cd "$srcdir/mozilla-release"
+ cp "$srcdir/mozconfig" .mozconfig
+
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1329272
+ patch -Np1 -i ../sed43.patch
+
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1194520
+ patch -Np1 -i ../freetype261.patch
+
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1233963
+ patch -Np1 -i ../0001-Bug-1233963-Work-around-recent-GNU-gold-behavior-wit.patch
+
+ # It would be great to track down all the gcc7 fixes
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=1269171
+ patch -Np1 -i ../gcc6.diff
+ patch -Np1 -i ../Bug-1269171.patch
+
+ # https://bugzilla.mozilla.org/show_bug.cgi?id=847568
+ patch -Np1 -i ../LFS_graphite2_harfbuzz.patch
+ sed -i -e "s|lcrmf|lm|g" configure.in
+ sed -i -e "/lcrmf/d" config/external/nss/crmf/moz.build
+ rm configure
+ autoconf-2.13
+
+ # fix libdir/sdkdir - fedora
+ patch -Np1 -i ../mozilla-pkgconfig.patch
+ patch -Np1 -i ../shared-libs.patch
+
+ # WebRTC build tries to execute "python" and expects Python 2
+ # Workaround taken from chromium PKGBUILD
+ mkdir "$srcdir/python2-path"
+ ln -s /usr/bin/python2 "$srcdir/python2-path/python"
+
+ # configure script misdetects the preprocessor without an optimization level
+ # https://bugs.archlinux.org/task/34644
+ sed -i '/ac_cpp=/s/$CPPFLAGS/& -O2/' configure
+}
+
+build() {
+ cd "$srcdir/mozilla-release"
+
+ export PATH="$srcdir/python2-path:$PATH"
+ export LDFLAGS="$LDFALGS -Wl,-rpath,/usr/lib/xulrunner-$pkgver"
+ export PYTHON="/usr/bin/python2"
+
+ make -j1 -f client.mk build
+}
+
+package() {
+ cd "$srcdir/mozilla-release"
+ make -j1 -f client.mk DESTDIR="$pkgdir" install
+
+ # Use system-provided dictionaries
+ rm -rf "$pkgdir"/usr/lib/xulrunner-$pkgver/{dictionaries,hyphenation}
+ ln -sf /usr/share/hunspell "$pkgdir/usr/lib/xulrunner-$pkgver/dictionaries"
+ ln -sf /usr/share/hyphen "$pkgdir/usr/lib/xulrunner-$pkgver/hyphenation"
+
+ # add xulrunner library path to ld.so.conf
+ install -d $pkgdir/etc/ld.so.conf.d
+ echo "/usr/lib/xulrunner-$pkgver" > $pkgdir/etc/ld.so.conf.d/xulrunner.conf
+
+ chmod +x "${pkgdir}/usr/lib/xulrunner-devel-$pkgver/sdk/bin/xpt.py"
+ chmod +x "${pkgdir}/usr/lib/xulrunner-devel-$pkgver/sdk/bin/xpcshell"
+ ln -s /usr/lib/xulrunner-devel-$pkgver/sdk/bin/xpcshell "${pkgdir}/usr/lib/xulrunner-$pkgver/xpcshell"
+ sed -i 's|!/usr/bin/env python$|!/usr/bin/env python2|' \
+ "$pkgdir"/usr/lib/xulrunner-devel-$pkgver/sdk/bin/{xpt,header,typelib,xpidl}.py
+}
diff --git a/freetype261.patch b/freetype261.patch
new file mode 100644
index 000000000000..318ea644eef2
--- /dev/null
+++ b/freetype261.patch
@@ -0,0 +1,31 @@
+
+# HG changeset patch
+# User Mike Hommey <mh+mozilla@glandium.org>
+# Date 1439509838 -32400
+# Node ID af40750720b59cb7af58c32f4f3325d6e03bbbc4
+# Parent e578cc44a96a2a953e75e295b0d8954f467d5cff
+Bug 1194520 - Add a system header wrapper for <freetype/ftfntfmt.h>. r=mshal
+
+
+diff --git a/config/system-headers b/config/system-headers
+--- a/config/system-headers
++++ b/config/system-headers
+@@ -450,16 +450,17 @@ foundation/base64.h
+ foundation/hexdump.h
+ #endif
+ fp.h
+ fpieee.h
+ frame/log.h
+ frame/req.h
+ freetype/freetype.h
+ freetype/ftcache.h
++freetype/ftfntfmt.h
+ freetype/ftglyph.h
+ freetype/ftsynth.h
+ freetype/ftoutln.h
+ freetype/ttnameid.h
+ freetype/tttables.h
+ freetype/t1tables.h
+ freetype/ftlcdfil.h
+ freetype/ftsizes.h
+
diff --git a/gcc6.diff b/gcc6.diff
new file mode 100644
index 000000000000..ed465407aef5
--- /dev/null
+++ b/gcc6.diff
@@ -0,0 +1,37 @@
+--- mozilla-release/config/gcc-stl-wrapper.template.h 2015-10-14 23:40:56.000000000 +0200
++++ mozilla-release/config/gcc-stl-wrapper.template.h.new 2016-06-14 19:40:50.542435101 +0200
+@@ -22,6 +22,11 @@
+ #define NOMINMAX 1
+ #endif
+
++// Don't include mozalloc for cstdlib. See bug 1245076.
++#ifndef moz_dont_include_mozalloc_for_cstdlib
++# define moz_dont_include_mozalloc_for_cstdlib
++#endif
++#ifndef moz_dont_include_mozalloc_for_${HEADER}
+ // mozalloc.h wants <new>; break the cycle by always explicitly
+ // including <new> here. NB: this is a tad sneaky. Sez the gcc docs:
+ //
+@@ -30,15 +35,17 @@
+ // same name as the current file. It simply looks for the file
+ // named, starting with the directory in the search path after the
+ // one where the current file was found.
+-#include_next <new>
++# include_next <new>
+
+ // See if we're in code that can use mozalloc. NB: this duplicates
+ // code in nscore.h because nscore.h pulls in prtypes.h, and chromium
+ // can't build with that being included before base/basictypes.h.
+-#if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
+-# include "mozilla/mozalloc.h"
+-#else
+-# error "STL code can only be used with infallible ::operator new()"
++# if !defined(XPCOM_GLUE) && !defined(NS_NO_XPCOM) && !defined(MOZ_NO_MOZALLOC)
++# include "mozilla/mozalloc.h"
++# else
++# error "STL code can only be used with infallible ::operator new()"
++# endif
++
+ #endif
+
+ #if defined(DEBUG) && !defined(_GLIBCXX_DEBUG)
diff --git a/mozconfig b/mozconfig
new file mode 100644
index 000000000000..eef1fa15afd5
--- /dev/null
+++ b/mozconfig
@@ -0,0 +1,37 @@
+. $topsrcdir/xulrunner/config/mozconfig
+
+export CC=gcc-6
+export CXX=g++-6
+
+ac_add_options --prefix=/usr
+ac_add_options --libdir=/usr/lib
+
+# System libraries
+ac_add_options --with-system-nspr
+ac_add_options --with-system-nss
+ac_add_options --with-system-jpeg
+ac_add_options --with-system-zlib
+ac_add_options --with-system-bz2
+ac_add_options --with-system-png
+ac_add_options --with-system-libevent
+ac_add_options --with-system-libvpx
+ac_add_options --with-system-icu
+ac_add_options --with-system-graphite2
+ac_add_options --enable-system-hunspell
+ac_add_options --enable-system-sqlite
+ac_add_options --enable-system-ffi
+ac_add_options --enable-system-cairo
+ac_add_options --enable-system-pixman
+ac_add_options --with-pthreads
+
+# Features
+ac_add_options --enable-startup-notification
+ac_add_options --enable-gstreamer=1.0
+ac_add_options --disable-crashreporter
+ac_add_options --disable-updater
+ac_add_options --disable-tests
+ac_add_options --disable-installer
+
+# https://bugzilla.mozilla.org/show_bug.cgi?id=955876
+#ac_add_options --enable-release
+ac_add_options --disable-gold
diff --git a/mozilla-pkgconfig.patch b/mozilla-pkgconfig.patch
new file mode 100644
index 000000000000..6567009d27c6
--- /dev/null
+++ b/mozilla-pkgconfig.patch
@@ -0,0 +1,40 @@
+diff -Nur mozilla-release.orig/xulrunner/installer/libxul-embedding.pc.in mozilla-release/xulrunner/installer/libxul-embedding.pc.in
+--- mozilla-release.orig/xulrunner/installer/libxul-embedding.pc.in 2011-12-19 22:11:38.100005674 +0000
++++ mozilla-release/xulrunner/installer/libxul-embedding.pc.in 2011-12-19 22:14:35.095147521 +0000
+@@ -6,5 +6,6 @@
+ Name: libxul-embedding
+ Description: Static library for version-independent embedding of the Mozilla runtime
+ Version: %MOZILLA_VERSION%
++Requires: %NSPR_NAME% >= %NSPR_VERSION%
+ Libs: -L${sdkdir}/lib -lxpcomglue -ldl
+ Cflags: -DXPCOM_GLUE -I${includedir} %WCHAR_CFLAGS%
+diff -Nur mozilla-release.orig/xulrunner/installer/libxul.pc.in mozilla-release/xulrunner/installer/libxul.pc.in
+--- mozilla-release.orig/xulrunner/installer/libxul.pc.in 2011-12-19 22:11:38.126672110 +0000
++++ mozilla-release/xulrunner/installer/libxul.pc.in 2011-12-19 22:14:04.375412141 +0000
+@@ -1,5 +1,6 @@
+ prefix=%prefix%
+ sdkdir=%sdkdir%
++libdir=%libdir%
+ includedir=%includedir%
+ idldir=%idldir%
+
+diff -Nur mozilla-release.orig/xulrunner/installer/Makefile.in mozilla-release/xulrunner/installer/Makefile.in
+--- mozilla-release.orig/xulrunner/installer/Makefile.in 2011-12-19 22:11:38.126672110 +0000
++++ mozilla-release/xulrunner/installer/Makefile.in 2011-12-19 22:18:28.743135321 +0000
+@@ -108,6 +108,7 @@
+ -e "s|%includedir%|$(includedir)|" \
+ -e "s|%idldir%|$(idldir)|" \
+ -e "s|%sdkdir%|$(sdkdir)|" \
++ -e "s|%libdir%|$(installdir)|" \
+ -e "s|%MOZ_APP_NAME%|$(MOZ_APP_NAME)|" \
+ -e "s|%MOZILLA_VERSION%|$(MOZ_APP_VERSION)|" \
+ -e "s|%WCHAR_CFLAGS%|$(WCHAR_CFLAGS)|" \
+diff -Nur mozilla-release.orig/xulrunner/installer/mozilla-js.pc.in mozilla-release/xulrunner/installer/mozilla-js.pc.in
+--- mozilla-release.orig/xulrunner/installer/mozilla-js.pc.in 2011-12-19 22:11:38.126672110 +0000
++++ mozilla-release/xulrunner/installer/mozilla-js.pc.in 2011-12-19 22:18:55.569571004 +0000
+@@ -7,4 +7,4 @@
+ Version: %MOZILLA_VERSION%
+ Requires: %NSPR_NAME% >= %NSPR_VERSION%
+ Libs: -L${sdkdir}/lib %MOZ_JS_LINK%
+-Cflags: -I${includedir} -DXP_UNIX
++Cflags: -I${includedir} -I${includedir}/js -DXP_UNIX
diff --git a/sed43.patch b/sed43.patch
new file mode 100644
index 000000000000..cf3133696ee2
--- /dev/null
+++ b/sed43.patch
@@ -0,0 +1,21 @@
+
+# HG changeset patch
+# User Daniel Stenberg <daniel@haxx.se>
+# Date 1484000700 -3600
+# Node ID ebcbf47a83e7d3b89460cf1c991b6be5a79a967b
+# Parent 0759511f24e1b8d42acf5e9612f3ab91715842c2
+Bug 1329272 - add bracket for sed 4.3 compliance, r=glandium
+
+diff --git a/build/autoconf/icu.m4 b/build/autoconf/icu.m4
+--- a/build/autoconf/icu.m4
++++ b/build/autoconf/icu.m4
+@@ -69,7 +69,7 @@ if test -n "$USE_ICU"; then
+ fi
+ fi
+
+- version=`sed -n 's/^[[:space:]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"`
++ version=`sed -n 's/^[[[:space:]]]*#[[:space:]]*define[[:space:]][[:space:]]*U_ICU_VERSION_MAJOR_NUM[[:space:]][[:space:]]*\([0-9][0-9]*\)[[:space:]]*$/\1/p' "$icudir/common/unicode/uvernum.h"`
+ if test x"$version" = x; then
+ AC_MSG_ERROR([cannot determine icu version number from uvernum.h header file $lineno])
+ fi
+
diff --git a/shared-libs.patch b/shared-libs.patch
new file mode 100644
index 000000000000..b2cac8b29fc4
--- /dev/null
+++ b/shared-libs.patch
@@ -0,0 +1,12 @@
+diff -Nur mozilla-release.orig/browser/installer/Makefile.in mozilla-release/browser/installer/Makefile.in
+--- mozilla-release.orig/browser/installer/Makefile.in 2012-07-17 16:19:29.480356991 +0000
++++ mozilla-release/browser/installer/Makefile.in 2012-07-17 17:32:41.250937293 +0000
+@@ -17,7 +17,7 @@
+
+ # Some files have been already bundled with xulrunner
+ ifndef MOZ_MULET
+-MOZ_PKG_FATAL_WARNINGS = 1
++MOZ_PKG_FATAL_WARNINGS = 0
+ endif
+
+ DEFINES += -DAB_CD=$(AB_CD) -DMOZ_APP_NAME=$(MOZ_APP_NAME) -DPREF_DIR=$(PREF_DIR)
diff --git a/unbreak-plugin-build.patch b/unbreak-plugin-build.patch
new file mode 100644
index 000000000000..63e624ef353d
--- /dev/null
+++ b/unbreak-plugin-build.patch
@@ -0,0 +1,76 @@
+
+# HG changeset patch
+# User Ehsan Akhgari <ehsan@mozilla.com>
+# Date 1392421799 18000
+# Node ID 0691948a0abedc7db35c4cb67ec11ad06f782ab0
+# Parent 6f78482c5792b03adca38c924cc4a41f6e16b8ff
+Bug 784739 follow-up: Use NULL in npruntime.h
+
+diff --git a/dom/plugins/base/npruntime.h b/dom/plugins/base/npruntime.h
+--- a/dom/plugins/base/npruntime.h
++++ b/dom/plugins/base/npruntime.h
+@@ -132,23 +132,23 @@ void NPN_ReleaseVariantValue(NPVariant *
+ #define NPVARIANT_TO_INT32(_v) ((_v).value.intValue)
+ #define NPVARIANT_TO_DOUBLE(_v) ((_v).value.doubleValue)
+ #define NPVARIANT_TO_STRING(_v) ((_v).value.stringValue)
+ #define NPVARIANT_TO_OBJECT(_v) ((_v).value.objectValue)
+
+ #define VOID_TO_NPVARIANT(_v) \
+ NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Void; \
+- (_v).value.objectValue = nullptr; \
++ (_v).value.objectValue = NULL; \
+ NP_END_MACRO
+
+ #define NULL_TO_NPVARIANT(_v) \
+ NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Null; \
+- (_v).value.objectValue = nullptr; \
++ (_v).value.objectValue = NULL; \
+ NP_END_MACRO
+
+ #define BOOLEAN_TO_NPVARIANT(_val, _v) \
+ NP_BEGIN_MACRO \
+ (_v).type = NPVariantType_Bool; \
+ (_v).value.boolValue = !!(_val); \
+ NP_END_MACRO
+
+@@ -211,17 +211,17 @@ typedef void *NPIdentifier;
+
+ /*
+ NPObjects have methods and properties. Methods and properties are
+ identified with NPIdentifiers. These identifiers may be reflected
+ in script. NPIdentifiers can be either strings or integers, IOW,
+ methods and properties can be identified by either strings or
+ integers (i.e. foo["bar"] vs foo[1]). NPIdentifiers can be
+ compared using ==. In case of any errors, the requested
+- NPIdentifier(s) will be nullptr. NPIdentifier lifetime is controlled
++ NPIdentifier(s) will be NULL. NPIdentifier lifetime is controlled
+ by the browser. Plugins do not need to worry about memory management
+ with regards to NPIdentifiers.
+ */
+ NPIdentifier NPN_GetStringIdentifier(const NPUTF8 *name);
+ void NPN_GetStringIdentifiers(const NPUTF8 **names, int32_t nameCount,
+ NPIdentifier *identifiers);
+ NPIdentifier NPN_GetIntIdentifier(int32_t intid);
+ bool NPN_IdentifierIsString(NPIdentifier identifier);
+@@ -278,17 +278,17 @@ typedef bool (*NPConstructFunctionPtr)(N
+ NPInvokeFunctionPtr function may return 0 to indicate a void
+ result.
+
+ NPInvalidateFunctionPtr is called by the scripting environment
+ when the native code is shutdown. Any attempt to message a
+ NPObject instance after the invalidate callback has been
+ called will result in undefined behavior, even if the native code
+ is still retaining those NPObject instances. (The runtime
+- will typically return immediately, with 0 or nullptr, from an
++ will typically return immediately, with 0 or NULL, from an
+ attempt to dispatch to a NPObject, but this behavior should not
+ be depended upon.)
+
+ The NPEnumerationFunctionPtr function may pass an array of
+ NPIdentifiers back to the caller. The callee allocs the memory of
+ the array using NPN_MemAlloc(), and it's the caller's responsibility
+ to release it using NPN_MemFree().
+ */
+