summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorryoon <ryoon@pkgsrc.org>2013-05-23 13:12:13 +0000
committerryoon <ryoon@pkgsrc.org>2013-05-23 13:12:13 +0000
commit2c532219ce2e709608e4319a16d2c96404e0f6d9 (patch)
tree629b986d14128a632e067de5dd670396b8a6c3e3
parent25576cfc42948f49fd49b99a5fd2c3540c545db2 (diff)
downloadpkgsrc-2c532219ce2e709608e4319a16d2c96404e0f6d9.tar.gz
Bump PKGREVISION.
* Remove reference to devel/xulrunner. * Move some common files for firefox/xulrunner-21.0. * Move patches from devel/sulrunner. * Take MAINTAINERship.
-rw-r--r--www/firefox/Makefile43
-rw-r--r--www/firefox/PLIST3
-rw-r--r--www/firefox/distinfo123
-rw-r--r--www/firefox/files/firefox.sh.in9
-rw-r--r--www/firefox/hacks.mk13
-rw-r--r--www/firefox/mozilla-common.mk151
-rw-r--r--www/firefox/options.mk4
-rw-r--r--www/firefox/patches/patch-aa205
-rw-r--r--www/firefox/patches/patch-ak13
-rw-r--r--www/firefox/patches/patch-al16
-rw-r--r--www/firefox/patches/patch-am17
-rw-r--r--www/firefox/patches/patch-an48
-rw-r--r--www/firefox/patches/patch-ao15
-rw-r--r--www/firefox/patches/patch-as51
-rw-r--r--www/firefox/patches/patch-au41
-rw-r--r--www/firefox/patches/patch-az19
-rw-r--r--www/firefox/patches/patch-ba24
-rw-r--r--www/firefox/patches/patch-bd28
-rw-r--r--www/firefox/patches/patch-bf22
-rw-r--r--www/firefox/patches/patch-bg24
-rw-r--r--www/firefox/patches/patch-bi12
-rw-r--r--www/firefox/patches/patch-build_autoconf_nss.m446
-rw-r--r--www/firefox/patches/patch-config_baseconfig.mk18
-rw-r--r--www/firefox/patches/patch-config_stl__wrappers_ios8
-rw-r--r--www/firefox/patches/patch-config_stl__wrappers_ostream8
-rw-r--r--www/firefox/patches/patch-config_system-headers10
-rw-r--r--www/firefox/patches/patch-config_system__wrappers_unwind.h9
-rw-r--r--www/firefox/patches/patch-content_media_AudioStream.cpp13
-rw-r--r--www/firefox/patches/patch-extensions_auth_nsAuthGSSAPI.cpp14
-rw-r--r--www/firefox/patches/patch-gfx_skia_Makefile.in16
-rw-r--r--www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__head.h24
-rw-r--r--www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__name.h24
-rw-r--r--www/firefox/patches/patch-gfx_skia_src_sfnt_SkSFNTHeader.h24
-rw-r--r--www/firefox/patches/patch-gfx_thebes_gfxPlatform.cpp36
-rw-r--r--www/firefox/patches/patch-image_decoders_nsJPEGDecoder.cpp363
-rw-r--r--www/firefox/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc13
-rw-r--r--www/firefox/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc14
-rw-r--r--www/firefox/patches/patch-ipc_glue_GeckoChildProcessHost.cpp18
-rw-r--r--www/firefox/patches/patch-ipc_ipdl_ipdl_lower.py13
-rw-r--r--www/firefox/patches/patch-js_src_Makefile.in18
-rw-r--r--www/firefox/patches/patch-js_src_config_system-headers10
-rw-r--r--www/firefox/patches/patch-js_src_jscompartment.h20
-rw-r--r--www/firefox/patches/patch-js_src_jspropertycacheinlines.h22
-rw-r--r--www/firefox/patches/patch-js_src_methodjit_MethodJIT.cpp25
-rw-r--r--www/firefox/patches/patch-js_src_vm_ObjectImpl-inl.h43
-rw-r--r--www/firefox/patches/patch-mb63
-rw-r--r--www/firefox/patches/patch-md17
-rw-r--r--www/firefox/patches/patch-me15
-rw-r--r--www/firefox/patches/patch-media_libsoundtouch_src_cpu__detect__x86.cpp23
-rw-r--r--www/firefox/patches/patch-media_mtransport_objs.mk22
-rw-r--r--www/firefox/patches/patch-media_mtransport_test_Makefile.in20
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nICEr_nicer.gyp33
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_addrs.c32
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_stun.h20
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_util_mbslen.c78
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nrappkit_nrappkit.gyp32
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_log_r__log.c12
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h13
-rw-r--r--www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_util_util.c12
-rw-r--r--www/firefox/patches/patch-media_webrtc_signaling_signaling.gyp49
-rw-r--r--www/firefox/patches/patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c20
-rw-r--r--www/firefox/patches/patch-media_webrtc_signaling_test_Makefile.in21
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_build_common.gypi60
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h19
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp24
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py55
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_build_common.gypi35
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi91
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc21
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc12
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc49
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc90
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc22
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc31
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc47
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc45
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi62
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h13
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h67
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc12
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc33
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc13
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc22
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc50
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp18
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc96
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc13
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_typedefs.h13
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h13
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc31
-rw-r--r--www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h38
-rw-r--r--www/firefox/patches/patch-media_webrtc_webrtc__config.gypi12
-rw-r--r--www/firefox/patches/patch-mp23
-rw-r--r--www/firefox/patches/patch-netwerk_sctp_src_Makefile.in23
-rw-r--r--www/firefox/patches/patch-netwerk_sctp_src_netinet_sctp__os__userspace.h14
-rw-r--r--www/firefox/patches/patch-netwerk_sctp_src_user__recv__thread.c13
-rw-r--r--www/firefox/patches/patch-netwerk_sctp_src_user__socketvar.h33
-rw-r--r--www/firefox/patches/patch-pa11
-rw-r--r--www/firefox/patches/patch-pb11
-rw-r--r--www/firefox/patches/patch-pc12
-rw-r--r--www/firefox/patches/patch-pd11
-rw-r--r--www/firefox/patches/patch-pg14
-rw-r--r--www/firefox/patches/patch-rc14
-rw-r--r--www/firefox/patches/patch-security_manager_ssl_src_nsNSSComponent.cpp12
-rw-r--r--www/firefox/patches/patch-toolkit_library_Makefile.in12
-rw-r--r--www/firefox/patches/patch-toolkit_toolkit-tiers.mk13
-rw-r--r--www/firefox/patches/patch-xa119
-rw-r--r--www/firefox/patches/patch-xb91
-rw-r--r--www/firefox/patches/patch-xc73
-rw-r--r--www/firefox/patches/patch-xd126
-rw-r--r--www/firefox/patches/patch-xe75
-rw-r--r--www/firefox/patches/patch-xf43
-rw-r--r--www/firefox/patches/patch-xg33
-rw-r--r--www/firefox/patches/patch-xj128
-rw-r--r--www/firefox/patches/patch-xk72
-rw-r--r--www/firefox/patches/patch-xl74
-rw-r--r--www/firefox/patches/patch-xm49
-rw-r--r--www/firefox/patches/patch-xn52
-rw-r--r--www/firefox/patches/patch-xo52
-rw-r--r--www/firefox/patches/patch-xpcom_Makefile.in15
-rw-r--r--www/firefox/patches/patch-xpcom_ds_TimeStamp.h20
-rw-r--r--www/firefox/patches/patch-xpcom_io_nsMultiplexInputStream_cpp18
-rw-r--r--www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp13
-rw-r--r--www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp13
-rw-r--r--www/firefox/patches/patch-xpcom_string_public_nsAlgorithm.h16
-rw-r--r--www/firefox/xpi.mk25
126 files changed, 4560 insertions, 42 deletions
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index fb8b6a4bdb0..db38151ad6c 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -1,10 +1,20 @@
-# $NetBSD: Makefile,v 1.124 2013/05/19 08:50:24 ryoon Exp $
+# $NetBSD: Makefile,v 1.125 2013/05/23 13:12:13 ryoon Exp $
-.include "../../devel/xulrunner/dist.mk"
+FIREFOX_VER= ${MOZ_BRANCH}${MOZ_BRANCH_MINOR}
+MOZ_BRANCH= 21.0
+MOZ_BRANCH_MINOR=
+
+DISTNAME= firefox-${FIREFOX_VER}.source
PKGNAME= firefox-${MOZ_BRANCH}${MOZ_BRANCH_MINOR}
+PKGREVISION= 1
CATEGORIES= www
+MASTER_SITES= ${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/source/} \
+ ${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/source/}
+EXTRACT_SUFX= .tar.bz2
+
+WRKSRC= ${WRKDIR}/mozilla-release
-MAINTAINER= pkgsrc-users@NetBSD.org
+MAINTAINER= ryoon@NetBSD.org
HOMEPAGE= http://www.mozilla.com/en-US/firefox/
COMMENT= Web browser with support for extensions
LICENSE= mpl-1.1
@@ -14,8 +24,6 @@ MOZILLA_DIR= # empty
# Note: when updating remember to conditionalise about-background.png in PLIST
# XXX Firefox 21.0's firefox/xulrunner separation is not working.
CONFIGURE_ARGS+= --enable-application=browser
-#CONFIGURE_ARGS+= --with-libxul-sdk=${PREFIX}/lib/xulrunner
-#CONFIGURE_ARGS+= --with-system-libxul
# workround for link of libxul.so etc.
LDFLAGS+= ${COMPILER_RPATH_FLAG}${PREFIX}/lib/firefox ${COMPILER_RPATH_FLAG}${PREFIX}/lib
@@ -27,7 +35,7 @@ LDFLAGS.DragonFly= -lplc4 -lnspr4
LDFLAGS.FreeBSD= -lplc4 -lnspr4
LDFLAGS.Linux= -lnspr4
-.include "../../devel/xulrunner/mozilla-common.mk"
+.include "../../www/firefox/mozilla-common.mk"
.include "options.mk"
MOZILLA=firefox
@@ -40,7 +48,6 @@ MOZILLA_NAME= Browser
pre-configure:
cd ${WRKSRC} && autoconf
-# XXX not built here, just to make check-portability.awk shut up.
cd ${WRKSRC}/js/src && autoconf
# XXX Makefile is broken? When libxul is provided from devel/xulrunner,
# XXX please remove this.
@@ -52,8 +59,6 @@ post-build:
-e 's|@FIREFOX_ICON@|${MOZILLA}.png|g' \
< ${FILESDIR}/desktop.in \
> ${WRKDIR}/desktop
-# ${SED} -e 's|@PREFIX@|${PREFIX}|g' < ${FILESDIR}/firefox.sh.in \
-# > ${WRKDIR}/firefox
INSTALLATION_DIRS+= share/applications share/pixmaps
post-install:
@@ -61,26 +66,6 @@ post-install:
${DESTDIR}${PREFIX}/share/applications/${MOZILLA}.desktop
${INSTALL_DATA} ${MOZILLA_ICON} \
${DESTDIR}${PREFIX}/share/pixmaps/${MOZILLA}.png
-# rm -f ${DESTDIR}${PREFIX}/bin/firefox
-# ${INSTALL_SCRIPT} ${WRKDIR}/firefox ${DESTDIR}${PREFIX}/bin
-# XXX Firefox 21.0's firefox/xulrunner separation is not working.
-#BUILDLINK_API_DEPENDS.xulrunner+= xulrunner>=${MOZ_BRANCH}${MOZ_BRANCH_MINOR}
-#BUILD_DEPENDS+= xulrunner-${MOZ_BRANCH}${MOZ_BRANCH_MINOR}{,nb*}:../../devel/xulrunner
-#.include "../../devel/xulrunner/buildlink3.mk"
-#PLIST_VARS+= gnome
-#.if !empty(PKG_BUILD_OPTIONS.xulrunner:Mgnome)
-#CONFIGURE_ARGS+= --enable-gnomevfs --enable-dbus --enable-gnomeui
-#PLIST.gnome= yes
-#.else
-#CONFIGURE_ARGS+= --disable-gnomevfs --disable-dbus --disable-gnomeui
-#.endif
-#.if !empty(PKG_BUILD_OPTIONS.xulrunner:Mdebug)
-#CONFIGURE_ARGS+= --enable-debug --enable-debug-symbols
-#CONFIGURE_ARGS+= --disable-install-strip
-#.else
-#CONFIGURE_ARGS+= --disable-debug --disable-debug-symbols
-#CONFIGURE_ARGS+= --enable-install-strip
-#.endif
.include "../../sysutils/desktop-file-utils/desktopdb.mk"
.include "../../mk/bsd.pkg.mk"
diff --git a/www/firefox/PLIST b/www/firefox/PLIST
index 76663c42354..45996c699b1 100644
--- a/www/firefox/PLIST
+++ b/www/firefox/PLIST
@@ -1,4 +1,4 @@
-@comment $NetBSD: PLIST,v 1.64 2013/05/19 12:31:58 ryoon Exp $
+@comment $NetBSD: PLIST,v 1.65 2013/05/23 13:12:13 ryoon Exp $
bin/firefox
include/firefox/AbstractMediaDecoder.h
include/firefox/AccEvent.h
@@ -400,6 +400,7 @@ include/firefox/mozilla/a11y/DocManager.h
include/firefox/mozilla/a11y/FocusManager.h
include/firefox/mozilla/a11y/HyperTextAccessible.h
include/firefox/mozilla/a11y/HyperTextAccessibleWrap.h
+${PLIST.debug}include/firefox/mozilla/a11y/Logging.h
include/firefox/mozilla/a11y/Platform.h
include/firefox/mozilla/a11y/Role.h
include/firefox/mozilla/a11y/States.h
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
new file mode 100644
index 00000000000..c76f53025fb
--- /dev/null
+++ b/www/firefox/distinfo
@@ -0,0 +1,123 @@
+$NetBSD: distinfo,v 1.100 2013/05/23 13:12:13 ryoon Exp $
+
+SHA1 (firefox-21.0.source.tar.bz2) = e63b5488eaec1956947f59609d5839332ba7ffe1
+RMD160 (firefox-21.0.source.tar.bz2) = 3a62e242a7829f98978436464ab3306c96e58cdd
+Size (firefox-21.0.source.tar.bz2) = 105558931 bytes
+SHA1 (patch-aa) = 51f0d88210cc3ebc44b73804d8c1f7edc557b1e0
+SHA1 (patch-ak) = 971ddb1f12b14bcee604c9d7e72da5e7bf47d9be
+SHA1 (patch-al) = 553c6042a98e4b381a46eec50c02cff349d88bd2
+SHA1 (patch-am) = c5aa36638b666d99d4510f345802de259579e884
+SHA1 (patch-an) = 4c8ca17d259f56863d6066f1e3de0d81fefdcd6c
+SHA1 (patch-ao) = ebf95a9abf76439cdd890ea34f75f0d8d1114fe0
+SHA1 (patch-as) = 076082d8b2c6f7ef91c152497a4cd7d60545e70b
+SHA1 (patch-au) = 09ebe8f5cb73f7746e1f640ff78a5ea966369d02
+SHA1 (patch-az) = 2012a7fef2eac59f48ff21fea0e205e89b313e46
+SHA1 (patch-ba) = 1692053c1b0e65dd38bcf37cc1a80390cce081eb
+SHA1 (patch-bd) = 1a24cb9e4dc312725d0a6ffdf202b6f3e98d17fb
+SHA1 (patch-bf) = 6a052e8c83967e9054a81eb11f1501eb50e88782
+SHA1 (patch-bg) = e5af56b3dca81ad67149c09942580ebd9062b38d
+SHA1 (patch-bi) = 3dd927d93431afe000cd4a45b4d9920e63158a85
+SHA1 (patch-build_autoconf_nss.m4) = 4731f46a41f6d4ff31a6da07c9badb328a0f676f
+SHA1 (patch-config_baseconfig.mk) = 4f8e966e5e9684c165929d02f82099fb4befcc75
+SHA1 (patch-config_stl__wrappers_ios) = 00d723e2f2f252485350ede5833f0bb84c1235c1
+SHA1 (patch-config_stl__wrappers_ostream) = 7be7fe36704ffbdc070a113b46b4f391a598206b
+SHA1 (patch-config_system-headers) = 5957acc2b4d14a1a9e71791bca3eb76c448a02b2
+SHA1 (patch-config_system__wrappers_unwind.h) = b3bdac0710179b9c8f8eabd824216d0114504491
+SHA1 (patch-content_media_AudioStream.cpp) = 28533c67c744ed8c721c81b90250acad8251fd14
+SHA1 (patch-extensions_auth_nsAuthGSSAPI.cpp) = 548886fc4a86a988f3f91650061ddc04f37653a8
+SHA1 (patch-gfx_skia_Makefile.in) = ddc7e4a375f4cfd7dd76c5b37835bbcd3ad13cf1
+SHA1 (patch-gfx_skia_src_sfnt_SkOTTable__head.h) = 493fced792610ea1ce5ab6b1e043ef36b33f8279
+SHA1 (patch-gfx_skia_src_sfnt_SkOTTable__name.h) = 61a6611b3dd08f5bd56681244eefbfa3f209f6a1
+SHA1 (patch-gfx_skia_src_sfnt_SkSFNTHeader.h) = 9d997d23ed80370e5b36648b9b35d80c5db88be8
+SHA1 (patch-gfx_thebes_gfxPlatform.cpp) = 1ebc8e894e9d63961f49ba0798ad3eed100d95a6
+SHA1 (patch-image_decoders_nsJPEGDecoder.cpp) = e5df11499b1ec14e1d4c9a1408c0611d1c4e0574
+SHA1 (patch-ipc_chromium_src_base_message__pump__libevent.cc) = 12f3e063cf3fef23f0e3e0fdba5d5a4c1fc32af3
+SHA1 (patch-ipc_chromium_src_base_platform__thread__posix.cc) = a6175d1e97966944f14cb96ed3527e879412534b
+SHA1 (patch-ipc_glue_GeckoChildProcessHost.cpp) = faed34d94646453cd01acbdec1da2d9ec0f3d05f
+SHA1 (patch-ipc_ipdl_ipdl_lower.py) = 4025c0a4e149d9b2087331e10b342734fa77a905
+SHA1 (patch-js_src_Makefile.in) = 98734e93974965419da3d3706f94e1be515799e1
+SHA1 (patch-js_src_config_system-headers) = ea170db4562cd69913e91d186b238ecbea9a3f83
+SHA1 (patch-js_src_jscompartment.h) = a29ec049ce085ec2a70fffd34647fc78062b7a2e
+SHA1 (patch-js_src_jspropertycacheinlines.h) = a34a82193212e945dcba6f0310973117a6c22941
+SHA1 (patch-js_src_methodjit_MethodJIT.cpp) = 77685fc735bde4e592a3ddc29fa05b13a694fa8a
+SHA1 (patch-js_src_vm_ObjectImpl-inl.h) = 7b9f7c87980e13a7b801de473737489c5f57921d
+SHA1 (patch-mb) = d6f624296ac83bebfdb4ad5e06e64d6d0c2541a3
+SHA1 (patch-md) = 7fd607a3edd2ea5f7a5671fc6d06fba69c46c36f
+SHA1 (patch-me) = 2ff755782bd35caded8934000d039976dad44103
+SHA1 (patch-media_libsoundtouch_src_cpu__detect__x86.cpp) = e4472576ec9e8c46fb0a2d5622986503cf2767aa
+SHA1 (patch-media_mtransport_objs.mk) = 1877b73706451bc9ff5254ab32d5e2edb9f36883
+SHA1 (patch-media_mtransport_test_Makefile.in) = 9d2364f2bfd0f5fbafb6d0204f98ae0df4e5664c
+SHA1 (patch-media_mtransport_third__party_nICEr_nicer.gyp) = 3ed56a7c9ea61f5910a7d608a1bd404b9ce58344
+SHA1 (patch-media_mtransport_third__party_nICEr_src_stun_addrs.c) = 9a501cdf1fe50a35849f280718462c003f0fded4
+SHA1 (patch-media_mtransport_third__party_nICEr_src_stun_stun.h) = 90eb67c93dabf4d84bf3df521f1d53aa874d3050
+SHA1 (patch-media_mtransport_third__party_nICEr_src_util_mbslen.c) = e166ce56f20b026f81e3de208db292e8332d6de0
+SHA1 (patch-media_mtransport_third__party_nrappkit_nrappkit.gyp) = 68b7c5a15ff6027baccf18130673670d51d6a724
+SHA1 (patch-media_mtransport_third__party_nrappkit_src_log_r__log.c) = cf0e6c0d9278578f27ec19c4a3af211bec273ba8
+SHA1 (patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = edbd94c944cfd0f6581acd4e5ed18bed7e3e142d
+SHA1 (patch-media_mtransport_third__party_nrappkit_src_util_util.c) = 8406228a493c973121f0019138cd7007bfa3340b
+SHA1 (patch-media_webrtc_signaling_signaling.gyp) = 3541d06aeb691032d9e63f9d5a17af555f2ee8dc
+SHA1 (patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c) = c6e604c731e1adecfff5706299b7999e479273e2
+SHA1 (patch-media_webrtc_signaling_test_Makefile.in) = cdc7d5b87a465ba57d2f0523bb26a5cbfdaa03df
+SHA1 (patch-media_webrtc_trunk_build_common.gypi) = 10fbead1d12fa95bccbefc0d0c6b3fe4c4a288e8
+SHA1 (patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h) = 09b8003606ee5a1cdcbba7caaf1de1895e24b3ac
+SHA1 (patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp) = 74aafdb3a83f44576f1d821083d963ff8c78df9c
+SHA1 (patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py) = f465afb37d74988764e4dd362911063b3697cfbd
+SHA1 (patch-media_webrtc_trunk_webrtc_build_common.gypi) = 7c696b7e27542634ead8bfe16667a39d23c85dc8
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi) = 590f92eec70f5e3ab663489050e5449f08515121
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc) = 9767c35fa45b54fb28d67479efa86cdc769aa447
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc) = e407e7714b9eb7cc79a8976ec62fc2092d8aeac1
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc) = 29e331acf449bdb212305b96c7cb44e93721e335
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc) = 96b312ee61fdcb94004ed5aa29eefb0d5a51af81
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc) = 8610717389ae840b23252ea0f15068a03e3c99be
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc) = fe09632ff216ba621ef6953ab3cb5354842d3a30
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc) = 6dfa87bc5a36fb9eb2555b1081455526948966f4
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc) = ec735e09515434f504fd1c16584b99fa61aff2ad
+SHA1 (patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi) = 7377ddf7a57d84c270a5387e0d2eaa51b6ee804b
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h) = 8a061afbaae0948f46152a45b14160b3885c08b0
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h) = c96ef7e729868da5d897a71de214958d2f5b7c67
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc) = 8178fdc13f5961a7d70fa75eb33968f55a76e24e
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc) = 918474cffa9b10134a8aedc32b93289e923f9f4e
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc) = 43fa25f89b475cc8132d4863ab248e1e96fe13ea
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc) = 1875fc230d3c02e05f9d848b9af9f60afe9474f4
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc) = b92bb51b6640eaa16a18ed2b6bf186fed6cb7125
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp) = 853b178ca1b95c6907ca2fc2de9865807661a8f5
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc) = 8bd3a5791027aa788fac9da4170339e2a42750e5
+SHA1 (patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc) = 7cb19fb82210887a6c6c17a5e60cb069f06466cc
+SHA1 (patch-media_webrtc_trunk_webrtc_typedefs.h) = 9a62eb31eb5acb8ff240244273de42d8c66c45a7
+SHA1 (patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h) = 33323114b03a4231c810e56964e354cb06e90f09
+SHA1 (patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc) = 42af9d8fb83ff2c3ea1f7353a15555c07ceca2b8
+SHA1 (patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h) = 8606dfda5b8a3090789e5599b12d0668632fd945
+SHA1 (patch-media_webrtc_webrtc__config.gypi) = be2e3128d84b2acdbf7754c71752453f42482c6b
+SHA1 (patch-mp) = bc64a6d75df5cf9482d96895f0270b729ff57997
+SHA1 (patch-netwerk_sctp_src_Makefile.in) = e86199357b57c64dac95e5eff5c0d29509dce628
+SHA1 (patch-netwerk_sctp_src_netinet_sctp__os__userspace.h) = d1af7cc0eaf201041e3de4128c516a6f71d7b773
+SHA1 (patch-netwerk_sctp_src_user__recv__thread.c) = cf26945441f74c581aeb5a8d7435780f4a48a607
+SHA1 (patch-netwerk_sctp_src_user__socketvar.h) = 3b001cea73ed1162d11391efcba38d1bba2ff4f7
+SHA1 (patch-pa) = 8045cf02d83e87684b497dd30e890107f76a3bdf
+SHA1 (patch-pb) = 7665d8156fa734cdc2e1746558cc08b7eefce98e
+SHA1 (patch-pc) = 099a4f6ac32fd2f45c91eb525750bde96684693a
+SHA1 (patch-pd) = 9750259906ee270f6898e3c77288aa5260d6e9a7
+SHA1 (patch-pg) = d6d6071cbe8a771873e1537034c0bb9186f8e245
+SHA1 (patch-rc) = 2733724442a2cb49c5091146fd7e6001af686121
+SHA1 (patch-security_manager_ssl_src_nsNSSComponent.cpp) = 15e9466d60e60f93a27fe23aadfea6e1d59ad0bc
+SHA1 (patch-toolkit_library_Makefile.in) = 0c91d647f0f3a4653d39f11c9d8fd63611235932
+SHA1 (patch-toolkit_toolkit-tiers.mk) = 59e5174edd04f3c4e5d6ebb450a42e4e1dee0801
+SHA1 (patch-xa) = 9182485283599a96663358bdc680c5cdb1d94a78
+SHA1 (patch-xb) = 30eea880b40cee45d1235d3292fead4b5a54bbaa
+SHA1 (patch-xc) = 8575fdac2b47966ccfb5e1cc7ca8505163e358c9
+SHA1 (patch-xd) = 5fcb512091db8193ade345ece8eb2909f0a278e7
+SHA1 (patch-xe) = ca4c87dbf9bb09e0e6c270d0fa76fc69a7d6df7f
+SHA1 (patch-xf) = 1720ae5cf3cf0df6f2e9519c83a332585bdd67bf
+SHA1 (patch-xg) = b80e660e85b06e4f71146bd41bd4bc0d2e3b6488
+SHA1 (patch-xj) = c373bb0135ef042d07c98e648dce1612a0b47efe
+SHA1 (patch-xk) = 3accd4080f4576391f06a0a16a8fb477b2d7b3e3
+SHA1 (patch-xl) = e7dbe631e8d1fcee48054c0cb8ff01169cfcb744
+SHA1 (patch-xm) = 81e02e410c00175cbb98c646dda90c7adf199657
+SHA1 (patch-xn) = c042e39d93706934ec03c78be3dc6e224ac62c0e
+SHA1 (patch-xo) = aae6107dcfaf731bd3e9962d953fb8701fc5f163
+SHA1 (patch-xpcom_Makefile.in) = e5f77ed56ed4ad26a08a67085e3dfec0e7af3fa6
+SHA1 (patch-xpcom_ds_TimeStamp.h) = a1fb060f91720eb330f102b28d9373bbdbe96e30
+SHA1 (patch-xpcom_io_nsMultiplexInputStream_cpp) = 899e4797dcef5c295cc7afd7cc31f593a7d46a19
+SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 8cd42915cd32756b55894a773a1e6d7c012b4467
+SHA1 (patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = e9e336817c172187f3e15ddf539a8a2176e3e952
+SHA1 (patch-xpcom_string_public_nsAlgorithm.h) = 6cdce480510f0cebbb1271de385b6ec7f5c3ddee
diff --git a/www/firefox/files/firefox.sh.in b/www/firefox/files/firefox.sh.in
deleted file mode 100644
index 7d302389a85..00000000000
--- a/www/firefox/files/firefox.sh.in
+++ /dev/null
@@ -1,9 +0,0 @@
-#! /bin/sh
-#
-# $NetBSD: firefox.sh.in,v 1.2 2012/08/28 12:42:02 ryoon Exp $
-#
-# We currently overwrite the nsXULStub launcher with this wrapper script.
-# The stub causes problems like HTTPS protocol not working.
-# XXX to be investigated
-
-exec @PREFIX@/lib/xulrunner/xulrunner @PREFIX@/lib/firefox/application.ini "$@"
diff --git a/www/firefox/hacks.mk b/www/firefox/hacks.mk
new file mode 100644
index 00000000000..b518e8b38ee
--- /dev/null
+++ b/www/firefox/hacks.mk
@@ -0,0 +1,13 @@
+# $NetBSD: hacks.mk,v 1.4 2013/05/23 13:12:13 ryoon Exp $
+
+.if !defined(XULRUNNER_HACKS_MK)
+XULRUNNER_HACKS_MK= defined
+
+.include "../../mk/bsd.fast.prefs.mk"
+.include "../../mk/compiler.mk"
+
+.if !empty(PKGSRC_COMPILER:Mclang)
+CXXFLAGS+= -Wno-return-type-c-linkage
+.endif
+
+.endif # XULRUNNER_HACKS_MK
diff --git a/www/firefox/mozilla-common.mk b/www/firefox/mozilla-common.mk
new file mode 100644
index 00000000000..4bad34178be
--- /dev/null
+++ b/www/firefox/mozilla-common.mk
@@ -0,0 +1,151 @@
+# $NetBSD: mozilla-common.mk,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+#
+# common Makefile fragment for mozilla packages based on gecko 2.0.
+#
+# used by devel/xulrunner/Makefile
+# used by mail/thunderbird/Makefile
+# used by www/firefox/Makefile
+# used by www/seamonkey/Makefile
+
+GNU_CONFIGURE= yes
+USE_TOOLS+= pkg-config perl gmake autoconf213 unzip zip
+USE_LANGUAGES+= c99 c++
+UNLIMIT_RESOURCES+= datasize
+
+.include "../../mk/bsd.prefs.mk"
+# gcc45-4.5.3 of lang/gcc45 does not generate proper binary,
+# but gcc 4.5.4 of NetBSD 7 generates working binary.
+.if !empty(MACHINE_PLATFORM:MNetBSD-5.*)
+GCC_REQD+= 4.6
+.else
+GCC_REQD+= 4.5
+.endif
+
+CHECK_PORTABILITY_SKIP+=${MOZILLA_DIR}security/nss/tests/libpkix/libpkix.sh
+CHECK_PORTABILITY_SKIP+=${MOZILLA_DIR}security/nss/tests/multinit/multinit.sh
+CHECK_INTERPRETER_SKIP+=lib/xulrunner-sdk/sdk/bin/xpt.py
+
+CONFIGURE_ARGS+= --disable-tests --disable-pedantic
+CONFIGURE_ARGS+= --enable-crypto
+CONFIGURE_ARGS+= --enable-optimize=-O2 --with-pthreads
+CONFIGURE_ARGS+= --disable-javaxpcom
+CONFIGURE_ARGS+= --enable-default-toolkit=cairo-gtk2
+CONFIGURE_ARGS+= --enable-svg --enable-mathml
+CONFIGURE_ARGS+= --enable-system-cairo
+CONFIGURE_ARGS+= --enable-system-pixman
+CONFIGURE_ARGS+= --with-system-libvpx
+CONFIGURE_ARGS+= --enable-system-hunspell
+CONFIGURE_ARGS+= --enable-system-ffi
+CONFIGURE_ARGS+= --with-system-nss
+CONFIGURE_ARGS+= --with-system-nspr
+CONFIGURE_ARGS+= --with-system-jpeg
+CONFIGURE_ARGS+= --with-system-zlib --with-system-bz2
+CONFIGURE_ARGS+= --with-system-libevent=${BUILDLINK_PREFIX.libevent}
+CONFIGURE_ARGS+= --enable-system-sqlite
+CONFIGURE_ARGS+= --disable-crashreporter
+CONFIGURE_ARGS+= --disable-libnotify
+CONFIGURE_ARGS+= --disable-necko-wifi
+CONFIGURE_ARGS+= --enable-chrome-format=flat
+
+SUBST_CLASSES+= fix-paths
+SUBST_STAGE.fix-paths= pre-configure
+SUBST_MESSAGE.fix-paths= Fixing absolute paths.
+SUBST_FILES.fix-paths= ${MOZILLA_DIR}xpcom/build/nsXPCOMPrivate.h
+SUBST_FILES.fix-paths+= ${MOZILLA_DIR}xpcom/io/nsAppFileLocationProvider.cpp
+SUBST_SED.fix-paths+= -e 's,/usr/lib/mozilla/plugins,${PREFIX}/lib/netscape/plugins,g'
+
+CONFIG_GUESS_OVERRIDE+= ${MOZILLA_DIR}build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+= ${MOZILLA_DIR}js/src/build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+= ${MOZILLA_DIR}nsprpub/build/autoconf/config.guess
+CONFIG_GUESS_OVERRIDE+= ${MOZILLA_DIR}/js/ctypes/libffi/config.guess
+CONFIG_SUB_OVERRIDE+= ${MOZILLA_DIR}build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+= ${MOZILLA_DIR}js/src/build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+= ${MOZILLA_DIR}nsprpub/build/autoconf/config.sub
+CONFIG_SUB_OVERRIDE+= ${MOZILLA_DIR}/js/ctypes/libffi/config.sub
+
+PYTHON_FOR_BUILD_ONLY= yes
+.include "../../lang/python/application.mk"
+CONFIGURE_ENV+= PYTHON=${PYTHONBIN:Q}
+
+SUBST_CLASSES+= python
+SUBST_STAGE.python= pre-configure
+SUBST_MESSAGE.python= Fixing path to python.
+SUBST_FILES.python+= media/webrtc/trunk/build/common.gypi
+SUBST_SED.python+= -e 's,<!(python,<!(${PYTHONBIN},'
+
+# When MACHINAE_ARCH == "arm", libjpeg-turbo should be enabled.
+.if (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64")
+BUILD_DEPENDS+= yasm>=1.1.0:../../devel/yasm
+CONFIGURE_ARGS+= --enable-libjpeg-turbo
+.else
+CONFIGURE_ARGS+= --disable-libjpeg-turbo
+.endif
+
+PLIST_VARS+= sps vorbis tremor
+
+.if !empty(MACHINE_PLATFORM:S/i386/x86/:MLinux-*-x86*)
+PLIST.sps= yes
+.endif
+
+.if !empty(MACHINE_PLATFORM:MLinux-*-arm*) || ${OPSYS} == "DragonFly" \
+ || ${OPSYS} == "FreeBSD" || ${OPSYS} == "NetBSD" || ${OPSYS} == "OpenBSD"
+PLIST.tremor= yes
+.else
+PLIST.vorbis= yes
+.endif
+
+#
+# pysqlite2 is used by xulrunner's Python virtualenv. If pysqlite2 isn't
+# installed at build time it will attempt to download it instead, so the
+# problem is stealthy in a networked environment, and obvious in an
+# offline environment.
+#
+BUILD_DEPENDS+= ${PYPKGPREFIX}-sqlite2-[0-9]*:../../databases/py-sqlite2
+
+# Makefiles sometimes call "rm -f" without more arguments. Kludge around ...
+.PHONY: create-rm-wrapper
+pre-configure: create-rm-wrapper
+create-rm-wrapper:
+ printf '#!/bin/sh\n[ "$$*" = "-f" ] && exit 0\nexec /bin/rm $$@\n' > \
+ ${WRAPPER_DIR}/bin/rm
+ chmod +x ${WRAPPER_DIR}/bin/rm
+
+.include "../../mk/bsd.prefs.mk"
+
+.if ${OPSYS} == "NetBSD"
+# The configure test for __thread succeeds, but later we end up with:
+# dist/bin/libxul.so: undefined reference to `__tls_get_addr'
+CONFIGURE_ENV+= ac_cv_thread_keyword=no
+.endif
+
+.if ${OPSYS} == "SunOS"
+# native libbz2.so hides BZ2_crc32Table
+PREFER.bzip2?= pkgsrc
+.endif
+
+.if ${OPSYS} == "Linux"
+.include "../../audio/alsa-lib/buildlink3.mk"
+.endif
+.include "../../archivers/bzip2/buildlink3.mk"
+BUILDLINK_API_DEPENDS.sqlite3+= sqlite3>=3.7.14.1
+CONFIGURE_ENV+= ac_cv_sqlite_secure_delete=yes # c.f. patches/patch-al
+.include "../../databases/sqlite3/buildlink3.mk"
+BUILDLINK_API_DEPENDS.libevent+= libevent>=1.1
+.include "../../devel/libevent/buildlink3.mk"
+.include "../../devel/libffi/buildlink3.mk"
+BUILDLINK_API_DEPENDS.nspr+= nspr>=4.9.4
+.include "../../devel/nspr/buildlink3.mk"
+BUILDLINK_API_DEPENDS.nss+= nss>=3.14.1
+.include "../../devel/nss/buildlink3.mk"
+.include "../../devel/zlib/buildlink3.mk"
+## xulrunner-18.0 or later really requires libjpeg-turbo
+#.include "../../mk/jpeg.buildlink3.mk"
+.include "../../graphics/MesaLib/buildlink3.mk"
+BUILDLINK_API_DEPENDS.cairo+= cairo>=1.10.2nb4
+.include "../../graphics/cairo/buildlink3.mk"
+.include "../../multimedia/libvpx/buildlink3.mk"
+.include "../../net/libIDL/buildlink3.mk"
+.include "../../textproc/hunspell/buildlink3.mk"
+BUILDLINK_API_DEPENDS.gtk2+= gtk2+>=2.18.3nb1
+.include "../../x11/gtk2/buildlink3.mk"
+.include "../../x11/libXt/buildlink3.mk"
diff --git a/www/firefox/options.mk b/www/firefox/options.mk
index 7452f850efb..f8fb89f391d 100644
--- a/www/firefox/options.mk
+++ b/www/firefox/options.mk
@@ -1,9 +1,7 @@
-# $NetBSD: options.mk,v 1.12 2013/05/19 12:31:58 ryoon Exp $
+# $NetBSD: options.mk,v 1.13 2013/05/23 13:12:13 ryoon Exp $
PKG_OPTIONS_VAR= PKG_OPTIONS.firefox
PKG_SUPPORTED_OPTIONS= official-mozilla-branding
-
-# XXX for xulrunner integrated firefox.
PKG_SUPPORTED_OPTIONS+= debug mozilla-jemalloc gnome pulseaudio
PLIST_VARS+= gnome jemalloc debug
diff --git a/www/firefox/patches/patch-aa b/www/firefox/patches/patch-aa
new file mode 100644
index 00000000000..4239197c458
--- /dev/null
+++ b/www/firefox/patches/patch-aa
@@ -0,0 +1,205 @@
+$NetBSD: patch-aa,v 1.10 2013/05/23 13:12:13 ryoon Exp $
+
+--- configure.in.orig 2013-05-11 19:19:23.000000000 +0000
++++ configure.in
+@@ -1404,6 +1404,17 @@ if test "$GNU_CC"; then
+ CFLAGS=$_SAVE_CFLAGS
+ AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSSE3)
+
++ # Check for -msse4.1 on $CC
++ AC_MSG_CHECKING([if toolchain supports -msse4.1 option])
++ HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=
++ _SAVE_CFLAGS=$CFLAGS
++ CFLAGS="$CFLAGS -msse4.1"
++ AC_TRY_COMPILE([asm ("pmulld %xmm6,%xmm0");],,AC_MSG_RESULT([yes])
++ [HAVE_TOOLCHAIN_SUPPORT_MSSE4_1=1],
++ AC_MSG_RESULT([no]))
++ CFLAGS=$_SAVE_CFLAGS
++ AC_SUBST(HAVE_TOOLCHAIN_SUPPORT_MSSE4_1)
++
+ # Turn on GNU-specific warnings:
+ # -Wall - turn on a lot of warnings
+ # -Wpointer-arith - good to have
+@@ -2066,6 +2077,9 @@ ia64*-hpux*)
+ if test -z "$MC"; then
+ MC=mc.exe
+ fi
++ if test "$LIBRUNPATH"; then
++ DSO_LDOPTS="-Wl,-R$LIBRUNPATH $DSO_LDOPTS"
++ fi
+ ;;
+ *-mingw*)
+ DSO_CFLAGS=
+@@ -2848,6 +2862,7 @@ EOF
+ #pragma GCC visibility push(hidden)
+ #pragma GCC visibility push(default)
+ #include <string.h>
++#include <iterator>
+ #pragma GCC visibility pop
+
+ __attribute__ ((visibility ("default"))) void Func() {
+@@ -2856,7 +2871,7 @@ __attribute__ ((visibility ("default")))
+ }
+ EOF
+ ac_cv_have_visibility_builtin_bug=no
+- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
++ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
+ ac_cv_have_visibility_builtin_bug=yes
+ else
+ if test `grep -c "@PLT" conftest.S` = 0; then
+@@ -3018,6 +3033,9 @@ dnl ====================================
+ case $target in
+ *-hpux11.*)
+ ;;
++*-dragonfly*)
++ AC_CHECK_LIB(c, gethostbyname_r)
++ ;;
+ *)
+ AC_CHECK_LIB(c_r, gethostbyname_r)
+ ;;
+@@ -3319,6 +3337,9 @@ AC_CACHE_CHECK(
+ #ifdef linux
+ #define _BSD_SOURCE 1
+ #endif
++ #ifdef __NetBSD__
++ #error use of global _res variable in threaded programs is not portable
++ #endif
+ #include <resolv.h>
+ ],
+ [int foo = res_ninit(&_res);],
+@@ -3989,6 +4010,14 @@ if test -n "$YASM"; then
+ _YASM_BUILD=` echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'`
+ fi
+
++if test -n "${LIBXUL_SDK_DIR}"; then
++ AC_MSG_WARN([pkgsrc: LIBXUL_SDK_DIR is set; assuming we want nss and nspr from xulrunner.])
++ NSPR_CFLAGS="-I${prefix}/include/xulrunner/unstable `pkg-config --cflags mozilla-nspr`"
++ NSPR_LIBS="`pkg-config --libs mozilla-nspr`"
++ NSS_CFLAGS="`pkg-config --cflags mozilla-nss`"
++ NSS_LIBS="`pkg-config --libs mozilla-nss`"
++fi
++
+ if test -z "$SKIP_LIBRARY_CHECKS"; then
+ dnl system JPEG support
+ dnl ========================================================
+@@ -4016,11 +4045,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then
+ #include <jpeglib.h> ],
+ [ #if JPEG_LIB_VERSION < $MOZJPEG
+ #error "Insufficient JPEG library version ($MOZJPEG required)."
+- #endif
+- #ifndef JCS_EXTENSIONS
+- #error "libjpeg-turbo JCS_EXTENSIONS required"
+- #endif
+- ],
++ #endif ],
+ MOZ_NATIVE_JPEG=1,
+ AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg]))
+ fi
+@@ -5212,7 +5237,11 @@ if test -n "$MOZ_WEBRTC"; then
+ dnl Make sure doesn't get matched by *-linux*
+ MOZ_WEBRTC=
+ ;;
+- *-linux*|*-mingw*|*-darwin*)
++ *-netbsd*)
++ dnl Custom socketvar.h is not compatible with NetBSD.
++ MOZ_WEBRTC=
++ ;;
++ *-linux*|*-mingw*|*-darwin*|*-dragonfly*|*-freebsd*|*-openbsd*)
+ dnl Leave enabled
+ ;;
+ *)
+@@ -5263,6 +5292,9 @@ if test -n "$MOZ_WEBRTC"; then
+ MOZ_VP8_ENCODER=1
+ MOZ_VP8_ERROR_CONCEALMENT=1
+
++ dnl with libv4l2 we can support more cameras
++ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2)
++
+ dnl OpenSLES is only available in Android 2.3 and later; we'll change this
+ dnl hard dependency to a dynamic load with graceful runtime failure before
+ dnl we make --enable-webrtc on by default in Android (bug 815905)
+@@ -5299,8 +5331,8 @@ AC_SUBST(MOZ_WEBRTC_IN_LIBXUL)
+ AC_SUBST(MOZ_SCTP)
+ AC_SUBST(MOZ_SRTP)
+
+-case "$target_cpu" in
+-arm*)
++case "$target" in
++arm-*-linux*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*)
+ MOZ_SAMPLE_TYPE_S16=1
+ AC_DEFINE(MOZ_SAMPLE_TYPE_S16)
+ AC_SUBST(MOZ_SAMPLE_TYPE_S16)
+@@ -5704,7 +5736,7 @@ MOZ_ALSA=)
+
+ if test -n "$MOZ_ALSA"; then
+ AC_DEFINE(MOZ_CUBEB)
+- PKG_CHECK_MODULES(MOZ_ALSA, alsa, ,
++ PKG_CHECK_MODULES(MOZ_ALSA, alsa, MOZ_ALSA=1,
+ [echo "$MOZ_ALSA_PKG_ERRORS"
+ AC_MSG_ERROR([Need alsa for Ogg, Wave or WebM decoding on Linux. Disable with --disable-ogg --disable-wave --disable-webm. (On Ubuntu, you might try installing the package libasound2-dev.)])])
+ fi
+@@ -8311,16 +8343,26 @@ MOZ_ARG_DISABLE_BOOL(necko-wifi,
+ NECKO_WIFI=,
+ NECKO_WIFI=1)
+
+-if test "$OS_ARCH" = "OS2"; then
+- dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566
+- NECKO_WIFI=
+-fi
+-if test "$NECKO_WIFI" -a \
+- "$OS_ARCH" != "Linux" -a \
+- "$OS_ARCH" != "Darwin" -a \
+- "$OS_ARCH" != "SunOS" -a \
+- "$OS_ARCH" != "WINNT"; then
+- AC_MSG_ERROR([Necko WiFi scanning not supported on your platform, use --disable-necko-wifi])
++if test "$NECKO_WIFI"; then
++ case "$OS_TARGET" in
++ Android)
++ ;;
++ Darwin)
++ ;;
++ SunOS)
++ ;;
++ WINNT)
++ ;;
++ OS2)
++ dnl OS/2 implementation of Necko-WiFi support will be added in bug 506566
++ NECKO_WIFI=
++ ;;
++ *)
++ if test -z "$MOZ_ENABLE_DBUS"; then
++ AC_MSG_ERROR([Necko WiFi scanning needs DBus on your platform, remove --disable-dbus or use --disable-necko-wifi])
++ fi
++ ;;
++ esac
+ fi
+
+ if test "$NECKO_WIFI"; then
+@@ -8981,6 +9023,27 @@ elif test "${OS_TARGET}" = "Android"; th
+ fi
+ fi
+
++# Keep libcubeb and audio_device backends in sync
++if test -n "$MOZ_ALSA"; then
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D include_alsa_audio=1"
++else
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D include_alsa_audio=0"
++fi
++if test -n "$MOZ_PULSEAUDIO"; then
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D include_pulse_audio=1"
++else
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D include_pulse_audio=0"
++fi
++
++# Don't try to compile sse4.1 code if toolchain doesn't support
++if test -z "$HAVE_TOOLCHAIN_SUPPORT_MSSE4_1"; then
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D yuv_disable_asm=1"
++fi
++
++if test -n "$MOZ_LIBV4L2_LIBS"; then
++ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1"
++fi
++
+ if test -n "$MOZ_WEBRTC"; then
+ AC_MSG_RESULT("generating WebRTC Makefiles...")
+
diff --git a/www/firefox/patches/patch-ak b/www/firefox/patches/patch-ak
new file mode 100644
index 00000000000..6695a3d594f
--- /dev/null
+++ b/www/firefox/patches/patch-ak
@@ -0,0 +1,13 @@
+$NetBSD: patch-ak,v 1.9 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/ctypes/libffi/configure.orig 2013-01-04 23:44:34.000000000 +0000
++++ js/src/ctypes/libffi/configure
+@@ -11278,7 +11278,7 @@ case "$host" in
+ powerpc-*-aix* | rs6000-*-aix*)
+ TARGET=POWERPC_AIX; TARGETDIR=powerpc
+ ;;
+- powerpc-*-freebsd* | powerpc-*-openbsd*)
++ powerpc-*-freebsd* | powerpc-*-openbsd* | powerpc-*-netbsd*)
+ TARGET=POWERPC_FREEBSD; TARGETDIR=powerpc
+ ;;
+ powerpc*-*-rtems*)
diff --git a/www/firefox/patches/patch-al b/www/firefox/patches/patch-al
new file mode 100644
index 00000000000..d5c3a93dc04
--- /dev/null
+++ b/www/firefox/patches/patch-al
@@ -0,0 +1,16 @@
+$NetBSD: patch-al,v 1.9 2013/05/23 13:12:13 ryoon Exp $
+
+--- storage/src/mozStorageConnection.cpp.orig 2013-01-04 23:44:44.000000000 +0000
++++ storage/src/mozStorageConnection.cpp
+@@ -584,6 +584,11 @@ Connection::initialize(nsIFile *aDatabas
+ break;
+ }
+
++ // XXX tnn: the configure script demands that sqlite3 is compiled with
++ // SECURE_DELETE on by default. sqlite3 in pkgsrc does not have that,
++ // so instead we enable secure_delete manually here.
++ (void)ExecuteSimpleSQL(NS_LITERAL_CSTRING("PRAGMA secure_delete = 1;"));
++
+ return NS_OK;
+ }
+
diff --git a/www/firefox/patches/patch-am b/www/firefox/patches/patch-am
new file mode 100644
index 00000000000..faf5c92c145
--- /dev/null
+++ b/www/firefox/patches/patch-am
@@ -0,0 +1,17 @@
+$NetBSD: patch-am,v 1.5 2013/05/23 13:12:13 ryoon Exp $
+
+SHA1_Update conflicts with openssl which may be dynamically loaded
+at runtime via libcups or libgssapi so causing a crash due to using
+the wrong binding. So rename here to avoid conflict.
+
+--- security/nss/lib/freebl/blapi.h.orig 2013-01-04 23:44:43.000000000 +0000
++++ security/nss/lib/freebl/blapi.h
+@@ -1010,6 +1010,8 @@ extern void SHA1_DestroyContext(SHA1Cont
+ */
+ extern void SHA1_Begin(SHA1Context *cx);
+
++#define SHA1_Update NSS_SHA1_Update
++
+ /*
+ ** Update the SHA-1 hash function with more data.
+ ** "cx" the context
diff --git a/www/firefox/patches/patch-an b/www/firefox/patches/patch-an
new file mode 100644
index 00000000000..fe7f6bb3c09
--- /dev/null
+++ b/www/firefox/patches/patch-an
@@ -0,0 +1,48 @@
+$NetBSD: patch-an,v 1.9 2013/05/23 13:12:13 ryoon Exp $
+
+SHA1_Update conflicts with openssl which may be dynamically loaded
+at runtime via libcups or libgssapi so causing a crash due to using
+the wrong binding. So rename here to avoid conflict.
+
+--- security/nss/lib/freebl/sha-fast-amd64-sun.s.orig 2013-01-04 23:44:43.000000000 +0000
++++ security/nss/lib/freebl/sha-fast-amd64-sun.s
+@@ -1680,9 +1680,9 @@ shaCompress:
+ .LFE7:
+ .size shaCompress, .-shaCompress
+ .align 16
+-.globl SHA1_Update
+- .type SHA1_Update, @function
+-SHA1_Update:
++.globl NSS_SHA1_Update
++ .type NSS_SHA1_Update, @function
++NSS_SHA1_Update:
+ .LFB5:
+ pushq %rbp
+ .LCFI5:
+@@ -1768,7 +1768,7 @@ SHA1_Update:
+ call shaCompress
+ jmp .L245
+ .LFE5:
+- .size SHA1_Update, .-SHA1_Update
++ .size NSS_SHA1_Update, .-NSS_SHA1_Update
+ .section .rodata
+ .align 32
+ .type bulk_pad.0, @object
+@@ -1870,7 +1870,7 @@ SHA1_End:
+ subl %r8d, %edx
+ andl $63, %edx
+ incl %edx
+- call SHA1_Update@PLT
++ call NSS_SHA1_Update@PLT
+ movq %rbx, %rdi
+ movq %r12, %rsi
+ shrq $32, %rdi
+@@ -1986,7 +1986,7 @@ SHA1_HashBuf:
+ movl %r12d, %edx
+ movq %r13, %rsi
+ movq %rbx, %rdi
+- call SHA1_Update@PLT
++ call NSS_SHA1_Update@PLT
+ leaq -292(%rbp), %rdx
+ movq %r14, %rsi
+ movq %rbx, %rdi
diff --git a/www/firefox/patches/patch-ao b/www/firefox/patches/patch-ao
new file mode 100644
index 00000000000..2377385922d
--- /dev/null
+++ b/www/firefox/patches/patch-ao
@@ -0,0 +1,15 @@
+$NetBSD: patch-ao,v 1.9 2013/05/23 13:12:13 ryoon Exp $
+
+--- toolkit/mozapps/installer/packager.mk.orig 2013-03-26 22:18:05.000000000 +0000
++++ toolkit/mozapps/installer/packager.mk
+@@ -911,8 +911,8 @@ endif
+ (cd $(DIST)/$(MOZ_PKG_DIR) && $(TAR) --exclude=precomplete $(TAR_CREATE_FLAGS) - .) | \
+ (cd $(DESTDIR)$(installdir) && tar -xf -)
+ $(NSINSTALL) -D $(DESTDIR)$(bindir)
+- $(RM) -f $(DESTDIR)$(bindir)/$(MOZ_APP_NAME)
+- ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir)
++ $(RM) -f $(DESTDIR)$(bindir)/$(MOZILLA_PKG_NAME)
++ ln -s $(installdir)/$(MOZ_APP_NAME) $(DESTDIR)$(bindir)/$(MOZILLA_PKG_NAME)
+ ifdef INSTALL_SDK # Here comes the hard part
+ $(NSINSTALL) -D $(DESTDIR)$(includedir)
+ (cd $(DIST)/include && $(TAR) $(TAR_CREATE_FLAGS) - .) | \
diff --git a/www/firefox/patches/patch-as b/www/firefox/patches/patch-as
new file mode 100644
index 00000000000..dbf4713e7dd
--- /dev/null
+++ b/www/firefox/patches/patch-as
@@ -0,0 +1,51 @@
+$NetBSD: patch-as,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+Treat DragonFly like FreeBSD.
+
+--- js/src/configure.in.orig 2013-05-11 19:19:32.000000000 +0000
++++ js/src/configure.in
+@@ -2399,6 +2399,7 @@ EOF
+ #pragma GCC visibility push(hidden)
+ #pragma GCC visibility push(default)
+ #include <string.h>
++#include <iterator>
+ #pragma GCC visibility pop
+
+ __attribute__ ((visibility ("default"))) void Func() {
+@@ -2407,7 +2408,7 @@ __attribute__ ((visibility ("default")))
+ }
+ EOF
+ ac_cv_have_visibility_builtin_bug=no
+- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
++ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
+ ac_cv_have_visibility_builtin_bug=yes
+ else
+ if test `grep -c "@PLT" conftest.S` = 0; then
+@@ -2628,7 +2629,7 @@ then
+ fi
+
+ case "$target" in
+- *-*-freebsd*)
++ *-*-freebsd*|*-dragonfly*)
+ AC_DEFINE(_REENTRANT)
+ AC_DEFINE(_THREAD_SAFE)
+ dnl -pthread links in -lpthread, so don't specify it explicitly.
+@@ -2711,6 +2712,9 @@ AC_CACHE_CHECK(
+ #ifdef linux
+ #define _BSD_SOURCE 1
+ #endif
++ #ifdef __NetBSD__
++ #error use of global _res variable in threaded programs is not portable
++ #endif
+ #include <resolv.h>
+ ],
+ [int foo = res_ninit(&_res);],
+@@ -3486,7 +3490,7 @@ if test "$MOZ_MEMORY"; then
+ *-darwin*)
+ AC_DEFINE(MOZ_MEMORY_DARWIN)
+ ;;
+- *-*freebsd*)
++ *-*freebsd*|*-*dragonfly*)
+ AC_DEFINE(MOZ_MEMORY_BSD)
+ ;;
+ *-android*|*-linuxandroid*)
diff --git a/www/firefox/patches/patch-au b/www/firefox/patches/patch-au
new file mode 100644
index 00000000000..144739dd78e
--- /dev/null
+++ b/www/firefox/patches/patch-au
@@ -0,0 +1,41 @@
+$NetBSD: patch-au,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+- Fix device name on NetBSD
+- SOUND_VERSION just isn't a reliable way to detect features supported by
+ particular OSS implementation.
+
+--- media/libsydneyaudio/src/sydney_audio_oss.c.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/libsydneyaudio/src/sydney_audio_oss.c
+@@ -23,7 +23,7 @@
+ // support only versions newer than 3.6.1
+ #define SUPP_OSS_VERSION OSS_VERSION(3,0,1)
+
+-#if (SOUND_VERSION < SUPP_OSS_VERSION)
++#if 0 // (SOUND_VERSION < SUPP_OSS_VERSION)
+ #error Unsupported OSS Version
+ #else
+
+@@ -173,7 +173,12 @@ sa_stream_create_pcm(
+ return SA_ERROR_SYSTEM;
+ }
+
++#if defined(__NetBSD__)
++ /* XXX should use DEVOSSAUDIO provided by pkgsrc. */
++ s->output_unit = "/dev/audio";
++#else
+ s->output_unit = "/dev/dsp";
++#endif
+ s->output_fd = -1;
+ s->thread_id = 0;
+ s->playing = 0;
+@@ -446,6 +451,10 @@ static void audio_callback(void* data)
+ printf("!"); /* not enough audio data */
+ #endif
+ bytes = bytes-bytes_to_copy;
++ struct timespec ts = {0, 1000000};
++ pthread_mutex_unlock(&s->mutex);
++ nanosleep(&ts, NULL);
++ pthread_mutex_lock(&s->mutex);
+ break;
+ }
+ free(s->bl_head);
diff --git a/www/firefox/patches/patch-az b/www/firefox/patches/patch-az
new file mode 100644
index 00000000000..d37d51c9540
--- /dev/null
+++ b/www/firefox/patches/patch-az
@@ -0,0 +1,19 @@
+$NetBSD: patch-az,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- nsprpub/pr/src/pthreads/ptthread.c.orig 2013-01-04 23:44:43.000000000 +0000
++++ nsprpub/pr/src/pthreads/ptthread.c
+@@ -1043,12 +1043,12 @@ PR_IMPLEMENT(void) PR_ProcessExit(PRIntn
+ _exit(status);
+ }
+
+-PR_IMPLEMENT(PRUint32) PR_GetThreadID(PRThread *thred)
++PR_IMPLEMENT(pthread_t) PR_GetThreadID(PRThread *thred)
+ {
+ #if defined(_PR_DCETHREADS)
+ return (PRUint32)&thred->id; /* this is really a sham! */
+ #else
+- return (PRUint32)thred->id; /* and I don't know what they will do with it */
++ return thred->id; /* and I don't know what they will do with it */
+ #endif
+ }
+
diff --git a/www/firefox/patches/patch-ba b/www/firefox/patches/patch-ba
new file mode 100644
index 00000000000..4bfb2767934
--- /dev/null
+++ b/www/firefox/patches/patch-ba
@@ -0,0 +1,24 @@
+$NetBSD: patch-ba,v 1.9 2013/05/23 13:12:13 ryoon Exp $
+
+pthread_t may be 64-bit, avoid casting it.
+
+--- nsprpub/pr/include/private/pprthred.h.orig 2013-01-04 23:44:43.000000000 +0000
++++ nsprpub/pr/include/private/pprthred.h
+@@ -19,6 +19,8 @@
+ #include <os2.h>
+ #endif
+
++#include <pthread.h>
++
+ PR_BEGIN_EXTERN_C
+
+ /*---------------------------------------------------------------------------
+@@ -59,7 +61,7 @@ NSPR_API(void) PR_DetachThread(void);
+ ** Get the id of the named thread. Each thread is assigned a unique id
+ ** when it is created or attached.
+ */
+-NSPR_API(PRUint32) PR_GetThreadID(PRThread *thread);
++NSPR_API(pthread_t) PR_GetThreadID(PRThread *thread);
+
+ /*
+ ** Set the procedure that is called when a thread is dumped. The procedure
diff --git a/www/firefox/patches/patch-bd b/www/firefox/patches/patch-bd
new file mode 100644
index 00000000000..42b00ac8f52
--- /dev/null
+++ b/www/firefox/patches/patch-bd
@@ -0,0 +1,28 @@
+$NetBSD: patch-bd,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/ctypes/CTypes.cpp.orig 2013-01-04 23:44:34.000000000 +0000
++++ js/src/ctypes/CTypes.cpp
+@@ -5,6 +5,23 @@
+
+ #include "mozilla/FloatingPoint.h"
+
++#if defined(__NetBSD__)
++#include <stdint.h>
++/* XXX why do we have those funky __ #defines in stdint.h? */
++#warning this is a retarded workaround
++#define uint8_t uint8_t
++#define uint16_t uint16_t
++#define uint32_t uint32_t
++#define uint64_t uint64_t
++#define int8_t int8_t
++#define int16_t int16_t
++#define int32_t int32_t
++#define int64_t int64_t
++#define intptr_t intptr_t
++#define uintptr_t uintptr_t
++#define off_t off_t
++#endif
++
+ #include "CTypes.h"
+ #include "Library.h"
+ #include "jsnum.h"
diff --git a/www/firefox/patches/patch-bf b/www/firefox/patches/patch-bf
new file mode 100644
index 00000000000..55c998c98e1
--- /dev/null
+++ b/www/firefox/patches/patch-bf
@@ -0,0 +1,22 @@
+$NetBSD: patch-bf,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/jsnativestack.cpp.orig 2013-03-26 22:17:48.000000000 +0000
++++ js/src/jsnativestack.cpp
+@@ -19,7 +19,7 @@
+ #elif defined(XP_MACOSX) || defined(DARWIN) || defined(XP_UNIX)
+ # include <pthread.h>
+
+-# if defined(__FreeBSD__) || defined(__OpenBSD__)
++# if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__DragonFly__)
+ # include <pthread_np.h>
+ # endif
+
+@@ -112,7 +112,7 @@ js::GetNativeStackBaseImpl()
+ pthread_attr_init(&sattr);
+ # if defined(__OpenBSD__)
+ stack_t ss;
+-# elif defined(PTHREAD_NP_H) || defined(_PTHREAD_NP_H_) || defined(NETBSD)
++# elif defined(PTHREAD_NP_H) || defined(_PTHREAD_NP_H_) || defined(__DragonFly__) || defined(NETBSD) || defined(__NetBSD__) /* XXX tnn not sure why NETBSD isn't defined, it looks like it should be ... */
+ /* e.g. on FreeBSD 4.8 or newer, neundorf@kde.org */
+ pthread_attr_get_np(thread, &sattr);
+ # else
diff --git a/www/firefox/patches/patch-bg b/www/firefox/patches/patch-bg
new file mode 100644
index 00000000000..7fbf3f0a4ab
--- /dev/null
+++ b/www/firefox/patches/patch-bg
@@ -0,0 +1,24 @@
+$NetBSD: patch-bg,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- storage/src/SQLiteMutex.h.orig 2013-01-04 23:44:44.000000000 +0000
++++ storage/src/SQLiteMutex.h
+@@ -108,15 +108,19 @@ public:
+ void assertCurrentThreadOwns()
+ {
+ NS_ASSERTION(mMutex, "No mutex associated with this wrapper!");
++#if 0 /* XXX tnn: this breaks the debug build. */
+ NS_ASSERTION(sqlite3_mutex_held(mMutex),
+ "Mutex is not held, but we expect it to be!");
++#endif
+ }
+
+ void assertNotCurrentThreadOwns()
+ {
+ NS_ASSERTION(mMutex, "No mutex associated with this wrapper!");
++#if 0 /* XXX tnn: this breaks the debug build. */
+ NS_ASSERTION(sqlite3_mutex_notheld(mMutex),
+ "Mutex is held, but we expect it to not be!");
++#endif
+ }
+ #endif // ifndef DEBUG
+
diff --git a/www/firefox/patches/patch-bi b/www/firefox/patches/patch-bi
new file mode 100644
index 00000000000..244fefe5c18
--- /dev/null
+++ b/www/firefox/patches/patch-bi
@@ -0,0 +1,12 @@
+$NetBSD: patch-bi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- gfx/angle/src/compiler/osinclude.h.orig 2013-01-04 23:44:32.000000000 +0000
++++ gfx/angle/src/compiler/osinclude.h
+@@ -16,6 +16,7 @@
+ #define ANGLE_OS_WIN
+ #elif defined(__APPLE__) || defined(__linux__) || \
+ defined(__FreeBSD__) || defined(__OpenBSD__) || \
++ defined(__NetBSD__) || defined(__DragonFly__) || \
+ defined(__sun) || defined(ANDROID) || \
+ defined(__GLIBC__) || defined(__GNU__) || \
+ defined(__QNX__)
diff --git a/www/firefox/patches/patch-build_autoconf_nss.m4 b/www/firefox/patches/patch-build_autoconf_nss.m4
new file mode 100644
index 00000000000..10aef826650
--- /dev/null
+++ b/www/firefox/patches/patch-build_autoconf_nss.m4
@@ -0,0 +1,46 @@
+$NetBSD: patch-build_autoconf_nss.m4,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- build/autoconf/nss.m4.orig 2013-01-04 23:44:28.000000000 +0000
++++ build/autoconf/nss.m4
+@@ -22,18 +22,18 @@ AC_ARG_WITH(nss-exec-prefix,
+ if test -n "$nss_config_exec_prefix"; then
+ nss_config_args="$nss_config_args --exec-prefix=$nss_config_exec_prefix"
+ if test -z "$NSS_CONFIG"; then
+- NSS_CONFIG=$nss_config_exec_prefix/bin/nss-config
++ NSS_CONFIG=$nss_config_exec_prefix/bin/pkg-config
+ fi
+ fi
+ if test -n "$nss_config_prefix"; then
+ nss_config_args="$nss_config_args --prefix=$nss_config_prefix"
+ if test -z "$NSS_CONFIG"; then
+- NSS_CONFIG=$nss_config_prefix/bin/nss-config
++ NSS_CONFIG=$nss_config_prefix/bin/pkg-config
+ fi
+ fi
+
+ unset ac_cv_path_NSS_CONFIG
+- AC_PATH_PROG(NSS_CONFIG, nss-config, no)
++ AC_PATH_PROG(NSS_CONFIG, pkg-config, no)
+ min_nss_version=ifelse([$1], ,3.0.0,$1)
+ AC_MSG_CHECKING(for NSS - version >= $min_nss_version)
+
+@@ -41,14 +41,14 @@ AC_ARG_WITH(nss-exec-prefix,
+ if test "$NSS_CONFIG" = "no"; then
+ no_nss="yes"
+ else
+- NSS_CFLAGS=`$NSS_CONFIG $nss_config_args --cflags`
+- NSS_LIBS=`$NSS_CONFIG $nss_config_args --libs`
++ NSS_CFLAGS=`$NSS_CONFIG $nss_config_args nss --cflags`
++ NSS_LIBS=`$NSS_CONFIG $nss_config_args nss --libs`
+
+- nss_config_major_version=`$NSS_CONFIG $nss_config_args --version | \
++ nss_config_major_version=`$NSS_CONFIG $nss_config_args nss --modversion | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
+- nss_config_minor_version=`$NSS_CONFIG $nss_config_args --version | \
++ nss_config_minor_version=`$NSS_CONFIG $nss_config_args nss --modversion | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'`
+- nss_config_micro_version=`$NSS_CONFIG $nss_config_args --version | \
++ nss_config_micro_version=`$NSS_CONFIG $nss_config_args nss --modversion | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'`
+ min_nss_major_version=`echo $min_nss_version | \
+ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'`
diff --git a/www/firefox/patches/patch-config_baseconfig.mk b/www/firefox/patches/patch-config_baseconfig.mk
new file mode 100644
index 00000000000..f922cf95733
--- /dev/null
+++ b/www/firefox/patches/patch-config_baseconfig.mk
@@ -0,0 +1,18 @@
+$NetBSD: patch-config_baseconfig.mk,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- config/baseconfig.mk.orig 2013-01-04 23:44:28.000000000 +0000
++++ config/baseconfig.mk
+@@ -1,9 +1,9 @@
+ INCLUDED_AUTOCONF_MK = 1
+
+-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
++includedir := $(includedir)/${MOZILLA_PKG_NAME}
++idldir = $(datadir)/idl/${MOZILLA_PKG_NAME}
++installdir = $(libdir)/${MOZILLA_PKG_NAME}
++sdkdir = $(libdir)/${MOZILLA_PKG_NAME}
+ DIST = $(DEPTH)/dist
+
+ # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't
diff --git a/www/firefox/patches/patch-config_stl__wrappers_ios b/www/firefox/patches/patch-config_stl__wrappers_ios
new file mode 100644
index 00000000000..08b9e3367b5
--- /dev/null
+++ b/www/firefox/patches/patch-config_stl__wrappers_ios
@@ -0,0 +1,8 @@
+$NetBSD: patch-config_stl__wrappers_ios,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- config/stl_wrappers/ios.orig 2013-05-13 18:23:07.000000000 +0000
++++ config/stl_wrappers/ios
+@@ -0,0 +1,3 @@
++#pragma GCC visibility push(default)
++#include_next <ios>
++#pragma GCC visibility pop
diff --git a/www/firefox/patches/patch-config_stl__wrappers_ostream b/www/firefox/patches/patch-config_stl__wrappers_ostream
new file mode 100644
index 00000000000..96911b99e24
--- /dev/null
+++ b/www/firefox/patches/patch-config_stl__wrappers_ostream
@@ -0,0 +1,8 @@
+$NetBSD: patch-config_stl__wrappers_ostream,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- config/stl_wrappers/ostream.orig 2013-05-13 18:22:40.000000000 +0000
++++ config/stl_wrappers/ostream
+@@ -0,0 +1,3 @@
++#pragma GCC visibility push(default)
++#include_next <ostream>
++#pragma GCC visibility pop
diff --git a/www/firefox/patches/patch-config_system-headers b/www/firefox/patches/patch-config_system-headers
new file mode 100644
index 00000000000..a7136c49c30
--- /dev/null
+++ b/www/firefox/patches/patch-config_system-headers
@@ -0,0 +1,10 @@
+$NetBSD: patch-config_system-headers,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- config/system-headers.orig 2013-05-11 19:19:23.000000000 +0000
++++ config/system-headers
+@@ -1126,3 +1126,5 @@ sys/thr.h
+ sys/user.h
+ kvm.h
+ spawn.h
++err.h
++xlocale.h
diff --git a/www/firefox/patches/patch-config_system__wrappers_unwind.h b/www/firefox/patches/patch-config_system__wrappers_unwind.h
new file mode 100644
index 00000000000..62dd43784e2
--- /dev/null
+++ b/www/firefox/patches/patch-config_system__wrappers_unwind.h
@@ -0,0 +1,9 @@
+$NetBSD: patch-config_system__wrappers_unwind.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- config/system_wrappers/unwind.h.orig 2013-05-13 19:56:18.000000000 +0000
++++ config/system_wrappers/unwind.h
+@@ -0,0 +1,4 @@
++#pragma GCC system_header
++#pragma GCC visibility push(default)
++#include_next <unwind.h>
++#pragma GCC visibility pop
diff --git a/www/firefox/patches/patch-content_media_AudioStream.cpp b/www/firefox/patches/patch-content_media_AudioStream.cpp
new file mode 100644
index 00000000000..ec469674baf
--- /dev/null
+++ b/www/firefox/patches/patch-content_media_AudioStream.cpp
@@ -0,0 +1,13 @@
+$NetBSD: patch-content_media_AudioStream.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- content/media/AudioStream.cpp.orig 2013-05-11 19:19:24.000000000 +0000
++++ content/media/AudioStream.cpp
+@@ -314,7 +314,7 @@ nsresult NativeAudioStream::Init(int32_t
+ mChannels = aNumChannels;
+
+ if (sa_stream_create_pcm(reinterpret_cast<sa_stream_t**>(&mAudioHandle),
+- NULL,
++ "Mozilla",
+ SA_MODE_WRONLY,
+ SA_PCM_FORMAT_S16_NE,
+ aRate,
diff --git a/www/firefox/patches/patch-extensions_auth_nsAuthGSSAPI.cpp b/www/firefox/patches/patch-extensions_auth_nsAuthGSSAPI.cpp
new file mode 100644
index 00000000000..8fabf80eec4
--- /dev/null
+++ b/www/firefox/patches/patch-extensions_auth_nsAuthGSSAPI.cpp
@@ -0,0 +1,14 @@
+$NetBSD: patch-extensions_auth_nsAuthGSSAPI.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- extensions/auth/nsAuthGSSAPI.cpp.orig 2013-05-11 19:19:29.000000000 +0000
++++ extensions/auth/nsAuthGSSAPI.cpp
+@@ -39,6 +39,9 @@ typedef KLStatus (*KLCacheHasValidTicket
+ #endif
+
+ #if defined(HAVE_RES_NINIT)
++#include <sys/types.h>
++#include <netinet/in.h>
++#include <arpa/nameser.h>
+ #include <resolv.h>
+ #endif
+
diff --git a/www/firefox/patches/patch-gfx_skia_Makefile.in b/www/firefox/patches/patch-gfx_skia_Makefile.in
new file mode 100644
index 00000000000..57738e8e543
--- /dev/null
+++ b/www/firefox/patches/patch-gfx_skia_Makefile.in
@@ -0,0 +1,16 @@
+$NetBSD: patch-gfx_skia_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- gfx/skia/Makefile.in.orig 2013-01-04 23:44:33.000000000 +0000
++++ gfx/skia/Makefile.in
+@@ -355,10 +355,9 @@ CPPSRCS += \
+ SkMMapStream.cpp \
+ SkOSFile.cpp \
+ $(NULL)
+-ifeq (Linux,$(OS_TARGET))
++ifneq (,$(or $(MOZ_X11),$(filter Linux,$(OS_TARGET))))
+ CPPSRCS += \
+ SkFontHost_linux.cpp \
+- SkFontHost_tables.cpp \
+ SkTime_Unix.cpp \
+ $(NULL)
+ endif
diff --git a/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__head.h b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__head.h
new file mode 100644
index 00000000000..c05763b9086
--- /dev/null
+++ b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__head.h
@@ -0,0 +1,24 @@
+$NetBSD: patch-gfx_skia_src_sfnt_SkOTTable__head.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+* Fix build with NetBSD 5's gcc
+
+--- gfx/skia/src/sfnt/SkOTTable_head.h.orig 2013-01-04 23:44:33.000000000 +0000
++++ gfx/skia/src/sfnt/SkOTTable_head.h
+@@ -12,7 +12,7 @@
+ #include "SkOTTableTypes.h"
+ #include "SkTypedEnum.h"
+
+-#pragma pack(push, 1)
++#pragma pack(1)
+
+ struct SkOTTableHead {
+ static const SK_OT_CHAR TAG0 = 'h';
+@@ -140,7 +140,7 @@ struct SkOTTableHead {
+ } glyphDataFormat;
+ };
+
+-#pragma pack(pop)
++#pragma pack()
+
+
+ #include <stddef.h>
diff --git a/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__name.h b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__name.h
new file mode 100644
index 00000000000..b46db57b235
--- /dev/null
+++ b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkOTTable__name.h
@@ -0,0 +1,24 @@
+$NetBSD: patch-gfx_skia_src_sfnt_SkOTTable__name.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+* Fix build with NetBSD 5's gcc
+
+--- gfx/skia/src/sfnt/SkOTTable_name.h.orig 2013-01-04 23:44:33.000000000 +0000
++++ gfx/skia/src/sfnt/SkOTTable_name.h
+@@ -12,7 +12,7 @@
+ #include "SkOTTableTypes.h"
+ #include "SkTypedEnum.h"
+
+-#pragma pack(push, 1)
++#pragma pack(1)
+
+ struct SkOTTableName {
+ static const SK_OT_CHAR TAG0 = 'n';
+@@ -499,7 +499,7 @@ struct SkOTTableNameRecord {
+ SK_OT_USHORT offset; //From start of storage area.
+ };
+
+-#pragma pack(pop)
++#pragma pack()
+
+
+ SK_COMPILE_ASSERT(sizeof(SkOTTableName) == 6, sizeof_SkOTTableName_not_6);
diff --git a/www/firefox/patches/patch-gfx_skia_src_sfnt_SkSFNTHeader.h b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkSFNTHeader.h
new file mode 100644
index 00000000000..8e102db5016
--- /dev/null
+++ b/www/firefox/patches/patch-gfx_skia_src_sfnt_SkSFNTHeader.h
@@ -0,0 +1,24 @@
+$NetBSD: patch-gfx_skia_src_sfnt_SkSFNTHeader.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+* Fix build wth NetBSD 5's gcc
+
+--- gfx/skia/src/sfnt/SkSFNTHeader.h.orig 2013-01-04 23:44:33.000000000 +0000
++++ gfx/skia/src/sfnt/SkSFNTHeader.h
+@@ -15,7 +15,7 @@
+ typedef uint16_t SK_SFNT_USHORT;
+ typedef uint32_t SK_SFNT_ULONG;
+
+-#pragma pack(push, 1)
++#pragma pack(1)
+
+ struct SkSFNTHeader {
+ SK_SFNT_ULONG fontType;
+@@ -61,7 +61,7 @@ struct SkSFNTTableDirectoryEntry {
+ SK_SFNT_ULONG logicalLength;
+ };
+
+-#pragma pack(pop)
++#pragma pack()
+
+
+ SK_COMPILE_ASSERT(sizeof(SkSFNTHeader) == 12, sizeof_SkSFNTHeader_not_12);
diff --git a/www/firefox/patches/patch-gfx_thebes_gfxPlatform.cpp b/www/firefox/patches/patch-gfx_thebes_gfxPlatform.cpp
new file mode 100644
index 00000000000..f9bc2d0eedc
--- /dev/null
+++ b/www/firefox/patches/patch-gfx_thebes_gfxPlatform.cpp
@@ -0,0 +1,36 @@
+$NetBSD: patch-gfx_thebes_gfxPlatform.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- gfx/thebes/gfxPlatform.cpp.orig 2013-01-04 23:44:33.000000000 +0000
++++ gfx/thebes/gfxPlatform.cpp
+@@ -507,11 +507,9 @@ void SourceBufferDestroy(void *srcSurfUD
+ delete static_cast<SourceSurfaceUserData*>(srcSurfUD);
+ }
+
+-void SourceSnapshotDetached(cairo_surface_t *nullSurf)
++void SourceSnapshotDetached(void *nullSurf)
+ {
+- gfxImageSurface* origSurf =
+- static_cast<gfxImageSurface*>(cairo_surface_get_user_data(nullSurf, &kSourceSurface));
+-
++ gfxImageSurface *origSurf = static_cast<gfxImageSurface*>(nullSurf);
+ origSurf->SetData(&kSourceSurface, NULL, NULL);
+ }
+
+@@ -626,14 +624,9 @@ gfxPlatform::GetSourceSurfaceForSurface(
+
+ }
+
+- cairo_surface_t *nullSurf =
+- cairo_null_surface_create(CAIRO_CONTENT_COLOR_ALPHA);
+- cairo_surface_set_user_data(nullSurf,
+- &kSourceSurface,
+- imgSurface,
+- NULL);
+- cairo_surface_attach_snapshot(imgSurface->CairoSurface(), nullSurf, SourceSnapshotDetached);
+- cairo_surface_destroy(nullSurf);
++ cairo_surface_set_mime_data(imgSurface->CairoSurface(), "mozilla/magic",
++ (const unsigned char *) "data", 4,
++ SourceSnapshotDetached, imgSurface.get());
+ }
+
+ SourceSurfaceUserData *srcSurfUD = new SourceSurfaceUserData;
diff --git a/www/firefox/patches/patch-image_decoders_nsJPEGDecoder.cpp b/www/firefox/patches/patch-image_decoders_nsJPEGDecoder.cpp
new file mode 100644
index 00000000000..5e5bcea13b6
--- /dev/null
+++ b/www/firefox/patches/patch-image_decoders_nsJPEGDecoder.cpp
@@ -0,0 +1,363 @@
+$NetBSD: patch-image_decoders_nsJPEGDecoder.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- image/decoders/nsJPEGDecoder.cpp.orig 2013-05-11 19:19:31.000000000 +0000
++++ image/decoders/nsJPEGDecoder.cpp
+@@ -19,13 +19,28 @@
+
+ extern "C" {
+ #include "iccjpeg.h"
+-}
+
++#ifdef JCS_EXTENSIONS
+ #if defined(IS_BIG_ENDIAN)
+ #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_XRGB
+ #else
+ #define MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB JCS_EXT_BGRX
+ #endif
++#else
++/* Colorspace conversion (copied from jpegint.h) */
++struct jpeg_color_deconverter {
++ JMETHOD(void, start_pass, (j_decompress_ptr cinfo));
++ JMETHOD(void, color_convert, (j_decompress_ptr cinfo,
++ JSAMPIMAGE input_buf, JDIMENSION input_row,
++ JSAMPARRAY output_buf, int num_rows));
++};
++
++METHODDEF(void)
++ycc_rgb_convert_argb (j_decompress_ptr cinfo,
++ JSAMPIMAGE input_buf, JDIMENSION input_row,
++ JSAMPARRAY output_buf, int num_rows);
++#endif
++}
+
+ static void cmyk_convert_rgb(JSAMPROW row, JDIMENSION width);
+
+@@ -338,6 +353,7 @@ nsJPEGDecoder::WriteInternal(const char
+ case JCS_GRAYSCALE:
+ case JCS_RGB:
+ case JCS_YCbCr:
++#ifdef JCS_EXTENSIONS
+ // if we're not color managing we can decode directly to
+ // MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB
+ if (mCMSMode != eCMSMode_All) {
+@@ -346,6 +362,9 @@ nsJPEGDecoder::WriteInternal(const char
+ } else {
+ mInfo.out_color_space = JCS_RGB;
+ }
++#else
++ mInfo.out_color_space = JCS_RGB;
++#endif
+ break;
+ case JCS_CMYK:
+ case JCS_YCCK:
+@@ -413,6 +432,15 @@ nsJPEGDecoder::WriteInternal(const char
+ return; /* I/O suspension */
+ }
+
++#ifndef JCS_EXTENSIONS
++ /* Force to use our YCbCr to Packed RGB converter when possible */
++ if (!mTransform && (mCMSMode != eCMSMode_All) &&
++ mInfo.jpeg_color_space == JCS_YCbCr && mInfo.out_color_space == JCS_RGB) {
++ /* Special case for the most common case: transform from YCbCr direct into packed ARGB */
++ mInfo.out_color_components = 4; /* Packed ARGB pixels are always 4 bytes...*/
++ mInfo.cconvert->color_convert = ycc_rgb_convert_argb;
++ }
++#endif
+
+ /* If this is a progressive JPEG ... */
+ mState = mInfo.buffered_image ? JPEG_DECOMPRESS_PROGRESSIVE : JPEG_DECOMPRESS_SEQUENTIAL;
+@@ -558,7 +586,11 @@ nsJPEGDecoder::OutputScanlines(bool* sus
+ uint32_t *imageRow = ((uint32_t*)mImageData) +
+ (mInfo.output_scanline * mInfo.output_width);
+
++#ifdef JCS_EXTENSIONS
+ if (mInfo.out_color_space == MOZ_JCS_EXT_NATIVE_ENDIAN_XRGB) {
++#else
++ if (mInfo.cconvert->color_convert == ycc_rgb_convert_argb) {
++#endif
+ /* Special case: scanline will be directly converted into packed ARGB */
+ if (jpeg_read_scanlines(&mInfo, (JSAMPARRAY)&imageRow, 1) != 1) {
+ *suspend = true; /* suspend */
+@@ -868,6 +900,282 @@ term_source (j_decompress_ptr jd)
+ } // namespace mozilla
+
+
++#ifndef JCS_EXTENSIONS
++/**************** YCbCr -> Cairo's RGB24/ARGB32 conversion: most common case **************/
++
++/*
++ * YCbCr is defined per CCIR 601-1, except that Cb and Cr are
++ * normalized to the range 0..MAXJSAMPLE rather than -0.5 .. 0.5.
++ * The conversion equations to be implemented are therefore
++ * R = Y + 1.40200 * Cr
++ * G = Y - 0.34414 * Cb - 0.71414 * Cr
++ * B = Y + 1.77200 * Cb
++ * where Cb and Cr represent the incoming values less CENTERJSAMPLE.
++ * (These numbers are derived from TIFF 6.0 section 21, dated 3-June-92.)
++ *
++ * To avoid floating-point arithmetic, we represent the fractional constants
++ * as integers scaled up by 2^16 (about 4 digits precision); we have to divide
++ * the products by 2^16, with appropriate rounding, to get the correct answer.
++ * Notice that Y, being an integral input, does not contribute any fraction
++ * so it need not participate in the rounding.
++ *
++ * For even more speed, we avoid doing any multiplications in the inner loop
++ * by precalculating the constants times Cb and Cr for all possible values.
++ * For 8-bit JSAMPLEs this is very reasonable (only 256 entries per table);
++ * for 12-bit samples it is still acceptable. It's not very reasonable for
++ * 16-bit samples, but if you want lossless storage you shouldn't be changing
++ * colorspace anyway.
++ * The Cr=>R and Cb=>B values can be rounded to integers in advance; the
++ * values for the G calculation are left scaled up, since we must add them
++ * together before rounding.
++ */
++
++#define SCALEBITS 16 /* speediest right-shift on some machines */
++
++/* Use static tables for color processing. */
++/* Four tables, each 256 entries of 4 bytes totals 4K which is not bad... */
++
++const int Cr_r_tab[(MAXJSAMPLE+1) * sizeof(int)] ={
++ -0xb3, -0xb2, -0xb1, -0xaf, -0xae, -0xac,
++ -0xab, -0xaa, -0xa8, -0xa7, -0xa5, -0xa4,
++ -0xa3, -0xa1, -0xa0, -0x9e, -0x9d, -0x9c,
++ -0x9a, -0x99, -0x97, -0x96, -0x95, -0x93,
++ -0x92, -0x90, -0x8f, -0x8e, -0x8c, -0x8b,
++ -0x89, -0x88, -0x87, -0x85, -0x84, -0x82,
++ -0x81, -0x80, -0x7e, -0x7d, -0x7b, -0x7a,
++ -0x79, -0x77, -0x76, -0x74, -0x73, -0x72,
++ -0x70, -0x6f, -0x6d, -0x6c, -0x6b, -0x69,
++ -0x68, -0x66, -0x65, -0x64, -0x62, -0x61,
++ -0x5f, -0x5e, -0x5d, -0x5b, -0x5a, -0x58,
++ -0x57, -0x56, -0x54, -0x53, -0x51, -0x50,
++ -0x4f, -0x4d, -0x4c, -0x4a, -0x49, -0x48,
++ -0x46, -0x45, -0x43, -0x42, -0x40, -0x3f,
++ -0x3e, -0x3c, -0x3b, -0x39, -0x38, -0x37,
++ -0x35, -0x34, -0x32, -0x31, -0x30, -0x2e,
++ -0x2d, -0x2b, -0x2a, -0x29, -0x27, -0x26,
++ -0x24, -0x23, -0x22, -0x20, -0x1f, -0x1d,
++ -0x1c, -0x1b, -0x19, -0x18, -0x16, -0x15,
++ -0x14, -0x12, -0x11, -0x0f, -0x0e, -0x0d,
++ -0x0b, -0x0a, -0x08, -0x07, -0x06, -0x04,
++ -0x03, -0x01, 0x00, 0x01, 0x03, 0x04,
++ 0x06, 0x07, 0x08, 0x0a, 0x0b, 0x0d,
++ 0x0e, 0x0f, 0x11, 0x12, 0x14, 0x15,
++ 0x16, 0x18, 0x19, 0x1b, 0x1c, 0x1d,
++ 0x1f, 0x20, 0x22, 0x23, 0x24, 0x26,
++ 0x27, 0x29, 0x2a, 0x2b, 0x2d, 0x2e,
++ 0x30, 0x31, 0x32, 0x34, 0x35, 0x37,
++ 0x38, 0x39, 0x3b, 0x3c, 0x3e, 0x3f,
++ 0x40, 0x42, 0x43, 0x45, 0x46, 0x48,
++ 0x49, 0x4a, 0x4c, 0x4d, 0x4f, 0x50,
++ 0x51, 0x53, 0x54, 0x56, 0x57, 0x58,
++ 0x5a, 0x5b, 0x5d, 0x5e, 0x5f, 0x61,
++ 0x62, 0x64, 0x65, 0x66, 0x68, 0x69,
++ 0x6b, 0x6c, 0x6d, 0x6f, 0x70, 0x72,
++ 0x73, 0x74, 0x76, 0x77, 0x79, 0x7a,
++ 0x7b, 0x7d, 0x7e, 0x80, 0x81, 0x82,
++ 0x84, 0x85, 0x87, 0x88, 0x89, 0x8b,
++ 0x8c, 0x8e, 0x8f, 0x90, 0x92, 0x93,
++ 0x95, 0x96, 0x97, 0x99, 0x9a, 0x9c,
++ 0x9d, 0x9e, 0xa0, 0xa1, 0xa3, 0xa4,
++ 0xa5, 0xa7, 0xa8, 0xaa, 0xab, 0xac,
++ 0xae, 0xaf, 0xb1, 0xb2,
++ };
++
++const int Cb_b_tab[(MAXJSAMPLE+1) * sizeof(int)] ={
++ -0xe3, -0xe1, -0xdf, -0xde, -0xdc, -0xda,
++ -0xd8, -0xd6, -0xd5, -0xd3, -0xd1, -0xcf,
++ -0xce, -0xcc, -0xca, -0xc8, -0xc6, -0xc5,
++ -0xc3, -0xc1, -0xbf, -0xbe, -0xbc, -0xba,
++ -0xb8, -0xb7, -0xb5, -0xb3, -0xb1, -0xaf,
++ -0xae, -0xac, -0xaa, -0xa8, -0xa7, -0xa5,
++ -0xa3, -0xa1, -0x9f, -0x9e, -0x9c, -0x9a,
++ -0x98, -0x97, -0x95, -0x93, -0x91, -0x90,
++ -0x8e, -0x8c, -0x8a, -0x88, -0x87, -0x85,
++ -0x83, -0x81, -0x80, -0x7e, -0x7c, -0x7a,
++ -0x78, -0x77, -0x75, -0x73, -0x71, -0x70,
++ -0x6e, -0x6c, -0x6a, -0x69, -0x67, -0x65,
++ -0x63, -0x61, -0x60, -0x5e, -0x5c, -0x5a,
++ -0x59, -0x57, -0x55, -0x53, -0x52, -0x50,
++ -0x4e, -0x4c, -0x4a, -0x49, -0x47, -0x45,
++ -0x43, -0x42, -0x40, -0x3e, -0x3c, -0x3a,
++ -0x39, -0x37, -0x35, -0x33, -0x32, -0x30,
++ -0x2e, -0x2c, -0x2b, -0x29, -0x27, -0x25,
++ -0x23, -0x22, -0x20, -0x1e, -0x1c, -0x1b,
++ -0x19, -0x17, -0x15, -0x13, -0x12, -0x10,
++ -0x0e, -0x0c, -0x0b, -0x09, -0x07, -0x05,
++ -0x04, -0x02, 0x00, 0x02, 0x04, 0x05,
++ 0x07, 0x09, 0x0b, 0x0c, 0x0e, 0x10,
++ 0x12, 0x13, 0x15, 0x17, 0x19, 0x1b,
++ 0x1c, 0x1e, 0x20, 0x22, 0x23, 0x25,
++ 0x27, 0x29, 0x2b, 0x2c, 0x2e, 0x30,
++ 0x32, 0x33, 0x35, 0x37, 0x39, 0x3a,
++ 0x3c, 0x3e, 0x40, 0x42, 0x43, 0x45,
++ 0x47, 0x49, 0x4a, 0x4c, 0x4e, 0x50,
++ 0x52, 0x53, 0x55, 0x57, 0x59, 0x5a,
++ 0x5c, 0x5e, 0x60, 0x61, 0x63, 0x65,
++ 0x67, 0x69, 0x6a, 0x6c, 0x6e, 0x70,
++ 0x71, 0x73, 0x75, 0x77, 0x78, 0x7a,
++ 0x7c, 0x7e, 0x80, 0x81, 0x83, 0x85,
++ 0x87, 0x88, 0x8a, 0x8c, 0x8e, 0x90,
++ 0x91, 0x93, 0x95, 0x97, 0x98, 0x9a,
++ 0x9c, 0x9e, 0x9f, 0xa1, 0xa3, 0xa5,
++ 0xa7, 0xa8, 0xaa, 0xac, 0xae, 0xaf,
++ 0xb1, 0xb3, 0xb5, 0xb7, 0xb8, 0xba,
++ 0xbc, 0xbe, 0xbf, 0xc1, 0xc3, 0xc5,
++ 0xc6, 0xc8, 0xca, 0xcc, 0xce, 0xcf,
++ 0xd1, 0xd3, 0xd5, 0xd6, 0xd8, 0xda,
++ 0xdc, 0xde, 0xdf, 0xe1,
++ };
++
++const int Cr_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={
++ 0x5b6900, 0x5ab22e, 0x59fb5c, 0x59448a, 0x588db8, 0x57d6e6,
++ 0x572014, 0x566942, 0x55b270, 0x54fb9e, 0x5444cc, 0x538dfa,
++ 0x52d728, 0x522056, 0x516984, 0x50b2b2, 0x4ffbe0, 0x4f450e,
++ 0x4e8e3c, 0x4dd76a, 0x4d2098, 0x4c69c6, 0x4bb2f4, 0x4afc22,
++ 0x4a4550, 0x498e7e, 0x48d7ac, 0x4820da, 0x476a08, 0x46b336,
++ 0x45fc64, 0x454592, 0x448ec0, 0x43d7ee, 0x43211c, 0x426a4a,
++ 0x41b378, 0x40fca6, 0x4045d4, 0x3f8f02, 0x3ed830, 0x3e215e,
++ 0x3d6a8c, 0x3cb3ba, 0x3bfce8, 0x3b4616, 0x3a8f44, 0x39d872,
++ 0x3921a0, 0x386ace, 0x37b3fc, 0x36fd2a, 0x364658, 0x358f86,
++ 0x34d8b4, 0x3421e2, 0x336b10, 0x32b43e, 0x31fd6c, 0x31469a,
++ 0x308fc8, 0x2fd8f6, 0x2f2224, 0x2e6b52, 0x2db480, 0x2cfdae,
++ 0x2c46dc, 0x2b900a, 0x2ad938, 0x2a2266, 0x296b94, 0x28b4c2,
++ 0x27fdf0, 0x27471e, 0x26904c, 0x25d97a, 0x2522a8, 0x246bd6,
++ 0x23b504, 0x22fe32, 0x224760, 0x21908e, 0x20d9bc, 0x2022ea,
++ 0x1f6c18, 0x1eb546, 0x1dfe74, 0x1d47a2, 0x1c90d0, 0x1bd9fe,
++ 0x1b232c, 0x1a6c5a, 0x19b588, 0x18feb6, 0x1847e4, 0x179112,
++ 0x16da40, 0x16236e, 0x156c9c, 0x14b5ca, 0x13fef8, 0x134826,
++ 0x129154, 0x11da82, 0x1123b0, 0x106cde, 0x0fb60c, 0x0eff3a,
++ 0x0e4868, 0x0d9196, 0x0cdac4, 0x0c23f2, 0x0b6d20, 0x0ab64e,
++ 0x09ff7c, 0x0948aa, 0x0891d8, 0x07db06, 0x072434, 0x066d62,
++ 0x05b690, 0x04ffbe, 0x0448ec, 0x03921a, 0x02db48, 0x022476,
++ 0x016da4, 0x00b6d2, 0x000000, -0x00b6d2, -0x016da4, -0x022476,
++ -0x02db48, -0x03921a, -0x0448ec, -0x04ffbe, -0x05b690, -0x066d62,
++ -0x072434, -0x07db06, -0x0891d8, -0x0948aa, -0x09ff7c, -0x0ab64e,
++ -0x0b6d20, -0x0c23f2, -0x0cdac4, -0x0d9196, -0x0e4868, -0x0eff3a,
++ -0x0fb60c, -0x106cde, -0x1123b0, -0x11da82, -0x129154, -0x134826,
++ -0x13fef8, -0x14b5ca, -0x156c9c, -0x16236e, -0x16da40, -0x179112,
++ -0x1847e4, -0x18feb6, -0x19b588, -0x1a6c5a, -0x1b232c, -0x1bd9fe,
++ -0x1c90d0, -0x1d47a2, -0x1dfe74, -0x1eb546, -0x1f6c18, -0x2022ea,
++ -0x20d9bc, -0x21908e, -0x224760, -0x22fe32, -0x23b504, -0x246bd6,
++ -0x2522a8, -0x25d97a, -0x26904c, -0x27471e, -0x27fdf0, -0x28b4c2,
++ -0x296b94, -0x2a2266, -0x2ad938, -0x2b900a, -0x2c46dc, -0x2cfdae,
++ -0x2db480, -0x2e6b52, -0x2f2224, -0x2fd8f6, -0x308fc8, -0x31469a,
++ -0x31fd6c, -0x32b43e, -0x336b10, -0x3421e2, -0x34d8b4, -0x358f86,
++ -0x364658, -0x36fd2a, -0x37b3fc, -0x386ace, -0x3921a0, -0x39d872,
++ -0x3a8f44, -0x3b4616, -0x3bfce8, -0x3cb3ba, -0x3d6a8c, -0x3e215e,
++ -0x3ed830, -0x3f8f02, -0x4045d4, -0x40fca6, -0x41b378, -0x426a4a,
++ -0x43211c, -0x43d7ee, -0x448ec0, -0x454592, -0x45fc64, -0x46b336,
++ -0x476a08, -0x4820da, -0x48d7ac, -0x498e7e, -0x4a4550, -0x4afc22,
++ -0x4bb2f4, -0x4c69c6, -0x4d2098, -0x4dd76a, -0x4e8e3c, -0x4f450e,
++ -0x4ffbe0, -0x50b2b2, -0x516984, -0x522056, -0x52d728, -0x538dfa,
++ -0x5444cc, -0x54fb9e, -0x55b270, -0x566942, -0x572014, -0x57d6e6,
++ -0x588db8, -0x59448a, -0x59fb5c, -0x5ab22e,
++ };
++
++const int Cb_g_tab[(MAXJSAMPLE+1) * sizeof(int)] ={
++ 0x2c8d00, 0x2c34e6, 0x2bdccc, 0x2b84b2, 0x2b2c98, 0x2ad47e,
++ 0x2a7c64, 0x2a244a, 0x29cc30, 0x297416, 0x291bfc, 0x28c3e2,
++ 0x286bc8, 0x2813ae, 0x27bb94, 0x27637a, 0x270b60, 0x26b346,
++ 0x265b2c, 0x260312, 0x25aaf8, 0x2552de, 0x24fac4, 0x24a2aa,
++ 0x244a90, 0x23f276, 0x239a5c, 0x234242, 0x22ea28, 0x22920e,
++ 0x2239f4, 0x21e1da, 0x2189c0, 0x2131a6, 0x20d98c, 0x208172,
++ 0x202958, 0x1fd13e, 0x1f7924, 0x1f210a, 0x1ec8f0, 0x1e70d6,
++ 0x1e18bc, 0x1dc0a2, 0x1d6888, 0x1d106e, 0x1cb854, 0x1c603a,
++ 0x1c0820, 0x1bb006, 0x1b57ec, 0x1affd2, 0x1aa7b8, 0x1a4f9e,
++ 0x19f784, 0x199f6a, 0x194750, 0x18ef36, 0x18971c, 0x183f02,
++ 0x17e6e8, 0x178ece, 0x1736b4, 0x16de9a, 0x168680, 0x162e66,
++ 0x15d64c, 0x157e32, 0x152618, 0x14cdfe, 0x1475e4, 0x141dca,
++ 0x13c5b0, 0x136d96, 0x13157c, 0x12bd62, 0x126548, 0x120d2e,
++ 0x11b514, 0x115cfa, 0x1104e0, 0x10acc6, 0x1054ac, 0x0ffc92,
++ 0x0fa478, 0x0f4c5e, 0x0ef444, 0x0e9c2a, 0x0e4410, 0x0debf6,
++ 0x0d93dc, 0x0d3bc2, 0x0ce3a8, 0x0c8b8e, 0x0c3374, 0x0bdb5a,
++ 0x0b8340, 0x0b2b26, 0x0ad30c, 0x0a7af2, 0x0a22d8, 0x09cabe,
++ 0x0972a4, 0x091a8a, 0x08c270, 0x086a56, 0x08123c, 0x07ba22,
++ 0x076208, 0x0709ee, 0x06b1d4, 0x0659ba, 0x0601a0, 0x05a986,
++ 0x05516c, 0x04f952, 0x04a138, 0x04491e, 0x03f104, 0x0398ea,
++ 0x0340d0, 0x02e8b6, 0x02909c, 0x023882, 0x01e068, 0x01884e,
++ 0x013034, 0x00d81a, 0x008000, 0x0027e6, -0x003034, -0x00884e,
++ -0x00e068, -0x013882, -0x01909c, -0x01e8b6, -0x0240d0, -0x0298ea,
++ -0x02f104, -0x03491e, -0x03a138, -0x03f952, -0x04516c, -0x04a986,
++ -0x0501a0, -0x0559ba, -0x05b1d4, -0x0609ee, -0x066208, -0x06ba22,
++ -0x07123c, -0x076a56, -0x07c270, -0x081a8a, -0x0872a4, -0x08cabe,
++ -0x0922d8, -0x097af2, -0x09d30c, -0x0a2b26, -0x0a8340, -0x0adb5a,
++ -0x0b3374, -0x0b8b8e, -0x0be3a8, -0x0c3bc2, -0x0c93dc, -0x0cebf6,
++ -0x0d4410, -0x0d9c2a, -0x0df444, -0x0e4c5e, -0x0ea478, -0x0efc92,
++ -0x0f54ac, -0x0facc6, -0x1004e0, -0x105cfa, -0x10b514, -0x110d2e,
++ -0x116548, -0x11bd62, -0x12157c, -0x126d96, -0x12c5b0, -0x131dca,
++ -0x1375e4, -0x13cdfe, -0x142618, -0x147e32, -0x14d64c, -0x152e66,
++ -0x158680, -0x15de9a, -0x1636b4, -0x168ece, -0x16e6e8, -0x173f02,
++ -0x17971c, -0x17ef36, -0x184750, -0x189f6a, -0x18f784, -0x194f9e,
++ -0x19a7b8, -0x19ffd2, -0x1a57ec, -0x1ab006, -0x1b0820, -0x1b603a,
++ -0x1bb854, -0x1c106e, -0x1c6888, -0x1cc0a2, -0x1d18bc, -0x1d70d6,
++ -0x1dc8f0, -0x1e210a, -0x1e7924, -0x1ed13e, -0x1f2958, -0x1f8172,
++ -0x1fd98c, -0x2031a6, -0x2089c0, -0x20e1da, -0x2139f4, -0x21920e,
++ -0x21ea28, -0x224242, -0x229a5c, -0x22f276, -0x234a90, -0x23a2aa,
++ -0x23fac4, -0x2452de, -0x24aaf8, -0x250312, -0x255b2c, -0x25b346,
++ -0x260b60, -0x26637a, -0x26bb94, -0x2713ae, -0x276bc8, -0x27c3e2,
++ -0x281bfc, -0x287416, -0x28cc30, -0x29244a, -0x297c64, -0x29d47e,
++ -0x2a2c98, -0x2a84b2, -0x2adccc, -0x2b34e6,
++ };
++
++
++/* We assume that right shift corresponds to signed division by 2 with
++ * rounding towards minus infinity. This is correct for typical "arithmetic
++ * shift" instructions that shift in copies of the sign bit. But some
++ * C compilers implement >> with an unsigned shift. For these machines you
++ * must define RIGHT_SHIFT_IS_UNSIGNED.
++ * RIGHT_SHIFT provides a proper signed right shift of an INT32 quantity.
++ * It is only applied with constant shift counts. SHIFT_TEMPS must be
++ * included in the variables of any routine using RIGHT_SHIFT.
++ */
++
++#ifdef RIGHT_SHIFT_IS_UNSIGNED
++#define SHIFT_TEMPS INT32 shift_temp;
++#define RIGHT_SHIFT(x,shft) \
++ ((shift_temp = (x)) < 0 ? \
++ (shift_temp >> (shft)) | ((~((INT32) 0)) << (32-(shft))) : \
++ (shift_temp >> (shft)))
++#else
++#define SHIFT_TEMPS
++#define RIGHT_SHIFT(x,shft) ((x) >> (shft))
++#endif
++
++
++METHODDEF(void)
++ycc_rgb_convert_argb (j_decompress_ptr cinfo,
++ JSAMPIMAGE input_buf, JDIMENSION input_row,
++ JSAMPARRAY output_buf, int num_rows)
++{
++ JDIMENSION num_cols = cinfo->output_width;
++ JSAMPLE * range_limit = cinfo->sample_range_limit;
++
++ SHIFT_TEMPS
++
++ /* This is used if we don't have SSE2 */
++
++ while (--num_rows >= 0) {
++ JSAMPROW inptr0 = input_buf[0][input_row];
++ JSAMPROW inptr1 = input_buf[1][input_row];
++ JSAMPROW inptr2 = input_buf[2][input_row];
++ input_row++;
++ uint32_t *outptr = (uint32_t *) *output_buf++;
++ for (JDIMENSION col = 0; col < num_cols; col++) {
++ int y = GETJSAMPLE(inptr0[col]);
++ int cb = GETJSAMPLE(inptr1[col]);
++ int cr = GETJSAMPLE(inptr2[col]);
++ JSAMPLE * range_limit_y = range_limit + y;
++ /* Range-limiting is essential due to noise introduced by DCT losses. */
++ outptr[col] = 0xFF000000 |
++ ( range_limit_y[Cr_r_tab[cr]] << 16 ) |
++ ( range_limit_y[((int) RIGHT_SHIFT(Cb_g_tab[cb] + Cr_g_tab[cr], SCALEBITS))] << 8 ) |
++ ( range_limit_y[Cb_b_tab[cb]] );
++ }
++ }
++}
++#endif
++
++
+ /**************** Inverted CMYK -> RGB conversion **************/
+ /*
+ * Input is (Inverted) CMYK stored as 4 bytes per pixel.
diff --git a/www/firefox/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc b/www/firefox/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc
new file mode 100644
index 00000000000..093ed3cd4f3
--- /dev/null
+++ b/www/firefox/patches/patch-ipc_chromium_src_base_message__pump__libevent.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-ipc_chromium_src_base_message__pump__libevent.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- ipc/chromium/src/base/message_pump_libevent.cc.orig 2013-05-11 19:19:32.000000000 +0000
++++ ipc/chromium/src/base/message_pump_libevent.cc
+@@ -16,7 +16,7 @@
+ #include "base/scoped_ptr.h"
+ #include "base/time.h"
+ #include "nsDependentSubstring.h"
+-#include "third_party/libevent/event.h"
++#include "event.h"
+
+ // Lifecycle of struct event
+ // Libevent uses two main data structures:
diff --git a/www/firefox/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc b/www/firefox/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc
new file mode 100644
index 00000000000..d7362a7baa7
--- /dev/null
+++ b/www/firefox/patches/patch-ipc_chromium_src_base_platform__thread__posix.cc
@@ -0,0 +1,14 @@
+$NetBSD: patch-ipc_chromium_src_base_platform__thread__posix.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- ipc/chromium/src/base/platform_thread_posix.cc.orig 2013-03-07 10:48:46.000000000 +0000
++++ ipc/chromium/src/base/platform_thread_posix.cc
+@@ -10,7 +10,9 @@
+ #if defined(OS_MACOSX)
+ #include <mach/mach.h>
+ #elif defined(OS_NETBSD)
++_Pragma("GCC visibility push(default)")
+ #include <lwp.h>
++_Pragma("GCC visibility pop")
+ #elif defined(OS_LINUX)
+ #include <sys/syscall.h>
+ #include <sys/prctl.h>
diff --git a/www/firefox/patches/patch-ipc_glue_GeckoChildProcessHost.cpp b/www/firefox/patches/patch-ipc_glue_GeckoChildProcessHost.cpp
new file mode 100644
index 00000000000..dd95dec1993
--- /dev/null
+++ b/www/firefox/patches/patch-ipc_glue_GeckoChildProcessHost.cpp
@@ -0,0 +1,18 @@
+$NetBSD: patch-ipc_glue_GeckoChildProcessHost.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- ipc/glue/GeckoChildProcessHost.cpp.orig 2013-01-04 23:44:34.000000000 +0000
++++ ipc/glue/GeckoChildProcessHost.cpp
+@@ -4,7 +4,13 @@
+ * 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/. */
+
++#if defined(__NetBSD__)
++_Pragma("GCC visibility push(default)")
++#endif
+ #include "GeckoChildProcessHost.h"
++#if defined(__NetBSD__)
++_Pragma("GCC visibility pop")
++#endif
+
+ #include "base/command_line.h"
+ #include "base/path_service.h"
diff --git a/www/firefox/patches/patch-ipc_ipdl_ipdl_lower.py b/www/firefox/patches/patch-ipc_ipdl_ipdl_lower.py
new file mode 100644
index 00000000000..9da29b7409a
--- /dev/null
+++ b/www/firefox/patches/patch-ipc_ipdl_ipdl_lower.py
@@ -0,0 +1,13 @@
+$NetBSD: patch-ipc_ipdl_ipdl_lower.py,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- ipc/ipdl/ipdl/lower.py.orig 2013-01-04 23:44:34.000000000 +0000
++++ ipc/ipdl/ipdl/lower.py
+@@ -1797,7 +1797,7 @@ def _generateMessageClass(clsname, msgid
+ StmtExpr(ExprCall(
+ ExprVar('StringAppendF'),
+ args=[ ExprAddrOf(msgvar),
+- ExprLiteral.String('[time:%" PRId64 "][%d]'),
++ ExprLiteral.String('[time:%\\" PRId64 \\"][%d]'),
+ ExprCall(ExprVar('PR_Now')),
+ ExprCall(ExprVar('base::GetCurrentProcId')) ])),
+ appendToMsg(pfxvar),
diff --git a/www/firefox/patches/patch-js_src_Makefile.in b/www/firefox/patches/patch-js_src_Makefile.in
new file mode 100644
index 00000000000..83b1e5b5008
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_Makefile.in
@@ -0,0 +1,18 @@
+$NetBSD: patch-js_src_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/Makefile.in.orig 2013-05-11 19:19:32.000000000 +0000
++++ js/src/Makefile.in
+@@ -791,6 +791,13 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsock
+ endif
+ endif
+
++# clang 3.3 + -O2 makes jaeger crash in FixupArity
++ifdef CLANG_CXX
++ifndef MOZ_DEBUG
++Compiler.$(OBJ_SUFFIX): CXXFLAGS += -fno-inline-functions
++endif
++endif
++
+ # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result.
+ # This suppresses optimization for this single compilation unit.
+ ifeq ($(OS_ARCH),AIX)
diff --git a/www/firefox/patches/patch-js_src_config_system-headers b/www/firefox/patches/patch-js_src_config_system-headers
new file mode 100644
index 00000000000..ba6adbc619c
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_config_system-headers
@@ -0,0 +1,10 @@
+$NetBSD: patch-js_src_config_system-headers,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/config/system-headers.orig 2013-05-11 19:19:32.000000000 +0000
++++ js/src/config/system-headers
+@@ -1126,3 +1126,5 @@ sys/thr.h
+ sys/user.h
+ kvm.h
+ spawn.h
++err.h
++xlocale.h
diff --git a/www/firefox/patches/patch-js_src_jscompartment.h b/www/firefox/patches/patch-js_src_jscompartment.h
new file mode 100644
index 00000000000..22b6fdc3365
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_jscompartment.h
@@ -0,0 +1,20 @@
+$NetBSD: patch-js_src_jscompartment.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/jscompartment.h.orig 2013-05-11 19:19:34.000000000 +0000
++++ js/src/jscompartment.h
+@@ -596,12 +596,12 @@ class js::AutoDebugModeGC
+ // The DEBUG_MODE_GC reason forces the collector to always throw
+ // everything away, as required for debug mode transitions.
+ if (needGC)
+- GC(rt, GC_NORMAL, gcreason::DEBUG_MODE_GC);
++ GC(rt, GC_NORMAL, js::gcreason::DEBUG_MODE_GC);
+ }
+
+- void scheduleGC(Zone *zone) {
++ void scheduleGC(JS::Zone *zone) {
+ JS_ASSERT(!rt->isHeapBusy());
+- PrepareZoneForGC(zone);
++ js::PrepareZoneForGC(zone);
+ needGC = true;
+ }
+ };
diff --git a/www/firefox/patches/patch-js_src_jspropertycacheinlines.h b/www/firefox/patches/patch-js_src_jspropertycacheinlines.h
new file mode 100644
index 00000000000..c67744f6898
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_jspropertycacheinlines.h
@@ -0,0 +1,22 @@
+$NetBSD: patch-js_src_jspropertycacheinlines.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/jspropertycacheinlines.h.orig 2013-05-11 19:19:34.000000000 +0000
++++ js/src/jspropertycacheinlines.h
+@@ -32,7 +32,7 @@ JS_ALWAYS_INLINE void
+ js::PropertyCache::test(JSContext *cx, jsbytecode *pc, JSObject **obj,
+ JSObject **pobj, PropertyCacheEntry **entry, PropertyName **name)
+ {
+- AutoAssertNoGC nogc;
++ js::AutoAssertNoGC nogc;
+
+ JS_ASSERT(this == &cx->propertyCache());
+
+@@ -65,7 +65,7 @@ JS_ALWAYS_INLINE bool
+ js::PropertyCache::testForSet(JSContext *cx, jsbytecode *pc, JSObject *obj,
+ PropertyCacheEntry **entryp, JSObject **obj2p, PropertyName **namep)
+ {
+- AutoAssertNoGC nogc;
++ js::AutoAssertNoGC nogc;
+
+ JS_ASSERT(this == &cx->propertyCache());
+
diff --git a/www/firefox/patches/patch-js_src_methodjit_MethodJIT.cpp b/www/firefox/patches/patch-js_src_methodjit_MethodJIT.cpp
new file mode 100644
index 00000000000..545e2b86ff3
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_methodjit_MethodJIT.cpp
@@ -0,0 +1,25 @@
+$NetBSD: patch-js_src_methodjit_MethodJIT.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+# This does not only apply to linux, but all ELF platforms (otherwise the
+# generated code will not be PIC)
+
+--- js/src/methodjit/MethodJIT.cpp.orig 2013-05-11 19:19:34.000000000 +0000
++++ js/src/methodjit/MethodJIT.cpp
+@@ -138,7 +138,7 @@ PopActiveVMFrame(VMFrame &f)
+
+ JS_STATIC_ASSERT(offsetof(FrameRegs, sp) == 0);
+
+-#if defined(__linux__) && defined(JS_CPU_X64)
++#if defined(__ELF__) && defined(JS_CPU_X64)
+ # define SYMBOL_STRING_RELOC(name) #name "@plt"
+ #else
+ # define SYMBOL_STRING_RELOC(name) SYMBOL_STRING(name)
+@@ -152,7 +152,7 @@ JS_STATIC_ASSERT(offsetof(FrameRegs, sp)
+
+ #if defined(XP_MACOSX)
+ # define HIDE_SYMBOL(name) ".private_extern _" #name
+-#elif defined(__linux__)
++#elif defined(__ELF__)
+ # define HIDE_SYMBOL(name) ".hidden" #name
+ #else
+ # define HIDE_SYMBOL(name)
diff --git a/www/firefox/patches/patch-js_src_vm_ObjectImpl-inl.h b/www/firefox/patches/patch-js_src_vm_ObjectImpl-inl.h
new file mode 100644
index 00000000000..7e4ebb6cdea
--- /dev/null
+++ b/www/firefox/patches/patch-js_src_vm_ObjectImpl-inl.h
@@ -0,0 +1,43 @@
+$NetBSD: patch-js_src_vm_ObjectImpl-inl.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- js/src/vm/ObjectImpl-inl.h.orig 2013-05-11 19:19:36.000000000 +0000
++++ js/src/vm/ObjectImpl-inl.h
+@@ -164,9 +164,9 @@ js::ObjectImpl::initializeSlotRange(uint
+ JSRuntime *rt = runtime();
+ uint32_t offset = start;
+ for (HeapSlot *sp = fixedStart; sp < fixedEnd; sp++)
+- sp->init(rt, this->asObjectPtr(), HeapSlot::Slot, offset++, UndefinedValue());
++ sp->init(rt, this->asObjectPtr(), HeapSlot::Slot, offset++, js::UndefinedValue());
+ for (HeapSlot *sp = slotsStart; sp < slotsEnd; sp++)
+- sp->init(rt, this->asObjectPtr(), HeapSlot::Slot, offset++, UndefinedValue());
++ sp->init(rt, this->asObjectPtr(), HeapSlot::Slot, offset++, js::UndefinedValue());
+ }
+
+ inline bool
+@@ -321,7 +321,7 @@ js::ObjectImpl::sizeOfThis() const
+ js::ObjectImpl::readBarrier(ObjectImpl *obj)
+ {
+ #ifdef JSGC_INCREMENTAL
+- Zone *zone = obj->zone();
++ JS::Zone *zone = obj->zone();
+ if (zone->needsBarrier()) {
+ MOZ_ASSERT(!zone->rt->isHeapBusy());
+ JSObject *tmp = obj->asObjectPtr();
+@@ -335,7 +335,7 @@ inline void
+ js::ObjectImpl::privateWriteBarrierPre(void **old)
+ {
+ #ifdef JSGC_INCREMENTAL
+- Zone *zone = this->zone();
++ JS::Zone *zone = this->zone();
+ if (zone->needsBarrier()) {
+ if (*old && getClass()->trace)
+ getClass()->trace(zone->barrierTracer(), this->asObjectPtr());
+@@ -362,7 +362,7 @@ js::ObjectImpl::writeBarrierPre(ObjectIm
+ if (uintptr_t(obj) < 32)
+ return;
+
+- Zone *zone = obj->zone();
++ JS::Zone *zone = obj->zone();
+ if (zone->needsBarrier()) {
+ MOZ_ASSERT(!zone->rt->isHeapBusy());
+ JSObject *tmp = obj->asObjectPtr();
diff --git a/www/firefox/patches/patch-mb b/www/firefox/patches/patch-mb
new file mode 100644
index 00000000000..9f0d85feeb0
--- /dev/null
+++ b/www/firefox/patches/patch-mb
@@ -0,0 +1,63 @@
+$NetBSD: patch-mb,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig 2013-02-15 21:15:14.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/Makefile.in
+@@ -50,7 +50,7 @@ endif
+ endif
+ endif
+
+-ifneq (,$(filter NetBSD OpenBSD GNU,$(OS_ARCH)))
++ifneq (,$(filter GNU,$(OS_ARCH)))
+ ifeq (86,$(findstring 86,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_gcc_x86_unix.cpp xptcstubs_gcc_x86_unix.cpp
+ endif
+@@ -59,7 +59,7 @@ endif
+ # New code for Linux, et. al., with gcc
+ # Migrate other platforms here after testing
+ #
+-ifneq (,$(filter Linux FreeBSD GNU_%,$(OS_ARCH)))
++ifneq (,$(filter Linux FreeBSD DragonFly NetBSD OpenBSD GNU_%,$(OS_ARCH)))
+ # Linux/x86-64
+ ifeq (x86_64,$(OS_TEST))
+ CPPSRCS := xptcinvoke_x86_64_unix.cpp xptcstubs_x86_64_linux.cpp
+@@ -158,7 +158,7 @@ endif
+ # NetBSD/ARM
+ #
+ ifeq ($(OS_ARCH),NetBSD)
+-ifneq (,$(filter arm% sa110,$(OS_TEST)))
++ifneq (,$(filter arm%,$(TARGET_CPU)))
+ CPPSRCS := xptcinvoke_arm_netbsd.cpp xptcstubs_arm_netbsd.cpp
+ endif
+ endif
+@@ -215,7 +215,7 @@ endif
+ # NetBSD/m68k
+ #
+ ifeq ($(OS_ARCH),NetBSD)
+-ifneq (,$(filter amiga atari hp300 mac68k mvme68k next68k sun3 sun3x x68k,$(OS_TEST)))
++ifneq (,$(filter m68k,$(TARGET_CPU)))
+ CPPSRCS := xptcinvoke_netbsd_m68k.cpp xptcstubs_netbsd_m68k.cpp
+ endif
+ endif
+@@ -287,7 +287,7 @@ endif
+ #
+ # NetBSD/PPC
+ #
+-ifneq (,$(filter NetBSDmacppc NetBSDbebox NetBSDofppc NetBSDprep NetBSDamigappc,$(OS_ARCH)$(OS_TEST)))
++ifeq ($(OS_ARCH)$(OS_TEST),NetBSDpowerpc)
+ CPPSRCS := xptcinvoke_ppc_netbsd.cpp xptcstubs_ppc_netbsd.cpp
+ ASFILES := xptcinvoke_asm_ppc_netbsd.s xptcstubs_asm_ppc_netbsd.s
+ endif
+@@ -346,6 +346,13 @@ CPPSRCS := xptcinvoke_sparc64_openbsd.c
+ ASFILES := xptcinvoke_asm_sparc64_openbsd.s xptcstubs_asm_sparc64_openbsd.s
+ endif
+ #
++# NetBSD/SPARC64
++#
++ifeq ($(OS_ARCH)$(OS_TEST),NetBSDsparc64)
++CPPSRCS := xptcinvoke_sparc64_netbsd.cpp xptcstubs_sparc64_netbsd.cpp
++ASFILES := xptcinvoke_asm_sparc64_netbsd.s xptcstubs_asm_sparc64_netbsd.s
++endif
++#
+ # Solaris/SPARC
+ #
+ ifeq ($(OS_ARCH),SunOS)
diff --git a/www/firefox/patches/patch-md b/www/firefox/patches/patch-md
new file mode 100644
index 00000000000..562a3ffa398
--- /dev/null
+++ b/www/firefox/patches/patch-md
@@ -0,0 +1,17 @@
+$NetBSD: patch-md,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+???. from www/firefox/patch-ax.
+
+--- security/coreconf/SunOS5.mk.orig 2013-01-04 23:44:43.000000000 +0000
++++ security/coreconf/SunOS5.mk
+@@ -115,6 +115,10 @@ endif
+ endif
+ DSO_LDOPTS += -z combreloc -z defs -z ignore
+
++ifdef LIBRUNPATH
++DSO_LDOPTS += -R$(LIBRUNPATH)
++endif
++
+ # -KPIC generates position independent code for use in shared libraries.
+ # (Similarly for -fPIC in case of gcc.)
+ ifdef NS_USE_GCC
diff --git a/www/firefox/patches/patch-me b/www/firefox/patches/patch-me
new file mode 100644
index 00000000000..dcc8780908b
--- /dev/null
+++ b/www/firefox/patches/patch-me
@@ -0,0 +1,15 @@
+$NetBSD: patch-me,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+Add DragonFly support.
+
+--- security/nss/lib/freebl/Makefile.orig 2013-01-04 23:44:43.000000000 +0000
++++ security/nss/lib/freebl/Makefile
+@@ -255,7 +255,7 @@ endif
+ # to bind the blapi function references in FREEBLVector vector
+ # (ldvector.c) to the blapi functions defined in the freebl
+ # shared libraries.
+-ifeq (,$(filter-out BSD_OS FreeBSD Linux NetBSD OpenBSD, $(OS_TARGET)))
++ifeq (,$(filter-out BSD_OS DragonFly FreeBSD Linux NetBSD OpenBSD, $(OS_TARGET)))
+ MKSHLIB += -Wl,-Bsymbolic
+ endif
+
diff --git a/www/firefox/patches/patch-media_libsoundtouch_src_cpu__detect__x86.cpp b/www/firefox/patches/patch-media_libsoundtouch_src_cpu__detect__x86.cpp
new file mode 100644
index 00000000000..43aee0260be
--- /dev/null
+++ b/www/firefox/patches/patch-media_libsoundtouch_src_cpu__detect__x86.cpp
@@ -0,0 +1,23 @@
+$NetBSD: patch-media_libsoundtouch_src_cpu__detect__x86.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/libsoundtouch/src/cpu_detect_x86.cpp.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/libsoundtouch/src/cpu_detect_x86.cpp
+@@ -101,7 +101,7 @@ uint detectCPUextensions(void)
+
+ uint res = 0;
+
+-#if defined(__GNUC__)
++#if defined(__GNUC__) && defined(HAVE_CPUID_H)
+ // GCC version of cpuid. Requires GCC 4.3.0 or later for __cpuid intrinsic support.
+ uint eax, ebx, ecx, edx; // unsigned int is the standard type. uint is defined by the compiler and not guaranteed to be portable.
+
+@@ -112,6 +112,9 @@ uint detectCPUextensions(void)
+ if (edx & bit_SSE) res = res | SUPPORT_SSE;
+ if (edx & bit_SSE2) res = res | SUPPORT_SSE2;
+
++#elif defined(__GNUC__)
++ // No cpuid.h --> no cpuid support
++ return 0;
+ #else
+ // Window / VS version of cpuid. Notice that Visual Studio 2005 or later required
+ // for __cpuid intrinsic support.
diff --git a/www/firefox/patches/patch-media_mtransport_objs.mk b/www/firefox/patches/patch-media_mtransport_objs.mk
new file mode 100644
index 00000000000..8ee0f622ae1
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_objs.mk
@@ -0,0 +1,22 @@
+$NetBSD: patch-media_mtransport_objs.mk,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/objs.mk.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/objs.mk
+@@ -23,12 +23,16 @@ LOCAL_INCLUDES += \
+ -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/event \
+ $(NULL)
+
+-ifeq ($(OS_TARGET), Darwin)
++ifneq (,$(filter Darwin DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
+ LOCAL_INCLUDES += \
+ -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/darwin/include \
+ -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/generic/include \
+ $(NULL)
++ifeq ($(OS_TARGET), Darwin)
+ DEFINES += -DDARWIN
++else
++DEFINES += -DBSD
++endif
+ endif
+
+ ifeq ($(OS_TARGET), Linux)
diff --git a/www/firefox/patches/patch-media_mtransport_test_Makefile.in b/www/firefox/patches/patch-media_mtransport_test_Makefile.in
new file mode 100644
index 00000000000..acdbf5f27e3
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_test_Makefile.in
@@ -0,0 +1,20 @@
+$NetBSD: patch-media_mtransport_test_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/test/Makefile.in.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/test/Makefile.in
+@@ -78,12 +78,14 @@ endif
+ endif
+ endif
+
+-ifeq ($(OS_TARGET), Darwin)
++ifneq (,$(filter Darwin DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
+ LOCAL_INCLUDES += -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/darwin/include
++ifeq ($(OS_TARGET), Darwin)
+ DEFINES += \
+ -DGTEST_USE_OWN_TR1_TUPLE=1 \
+ $(NULL)
+ endif
++endif
+
+ ifeq ($(OS_TARGET), Linux)
+ LOCAL_INCLUDES += -I$(topsrcdir)/media/mtransport/third_party/nrappkit/src/port/linux/include
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nICEr_nicer.gyp b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_nicer.gyp
new file mode 100644
index 00000000000..6e950d8b102
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_nicer.gyp
@@ -0,0 +1,33 @@
+$NetBSD: patch-media_mtransport_third__party_nICEr_nicer.gyp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nICEr/nicer.gyp.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nICEr/nicer.gyp
+@@ -129,8 +129,19 @@
+ ],
+
+ 'conditions' : [
+- ## Mac
++ ## Mac and BSDs
+ [ 'OS == "mac"', {
++ 'defines' : [
++ 'DARWIN',
++ 'HAVE_XLOCALE',
++ ],
++ }],
++ [ 'os_bsd == 1', {
++ 'defines' : [
++ 'BSD',
++ ],
++ }],
++ [ 'OS == "mac" or os_bsd == 1', {
+ 'cflags_mozilla': [
+ '-Wall',
+ '-Wno-parentheses',
+@@ -138,7 +149,6 @@
+ '-Wmissing-prototypes',
+ ],
+ 'defines' : [
+- 'DARWIN',
+ 'HAVE_LIBM=1',
+ 'HAVE_STRDUP=1',
+ 'HAVE_STRLCPY=1',
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_addrs.c b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_addrs.c
new file mode 100644
index 00000000000..dbe165352f9
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_addrs.c
@@ -0,0 +1,32 @@
+$NetBSD: patch-media_mtransport_third__party_nICEr_src_stun_addrs.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nICEr/src/stun/addrs.c.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nICEr/src/stun/addrs.c
+@@ -55,7 +55,9 @@ static char *RCSSTRING __UNUSED__="$Id:
+ #endif
+ #include <net/if.h>
+ #ifndef LINUX
++#if !defined(__OpenBSD__) && !defined(__NetBSD__)
+ #include <net/if_var.h>
++#endif
+ #include <net/if_dl.h>
+ #include <net/if_types.h>
+ #include <sys/sockio.h>
+@@ -80,7 +82,7 @@ static char *RCSSTRING __UNUSED__="$Id:
+
+
+
+-#ifdef DARWIN
++#if defined(BSD) || defined(DARWIN)
+ /*
+ * Copyright (c) 1983, 1993
+ * The Regents of the University of California. All rights reserved.
+@@ -690,7 +692,7 @@ nr_stun_get_addrs(nr_transport_addr addr
+ int _status=0;
+ int i;
+
+-#ifdef DARWIN
++#if defined(BSD) || defined(DARWIN)
+ _status = stun_get_mib_addrs(addrs, maxaddrs, count);
+ #elif defined(WIN32)
+ _status = stun_get_win32_addrs(addrs, maxaddrs, count);
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_stun.h b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_stun.h
new file mode 100644
index 00000000000..006222856eb
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_stun_stun.h
@@ -0,0 +1,20 @@
+$NetBSD: patch-media_mtransport_third__party_nICEr_src_stun_stun.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nICEr/src/stun/stun.h.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nICEr/src/stun/stun.h
+@@ -41,11 +41,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ #include <sys/socket.h>
+ #include <net/if.h>
+ #ifndef LINUX
++#if !defined(__OpenBSD__) && !defined(__NetBSD__)
+ #include <net/if_var.h>
++#endif
+ #include <net/if_dl.h>
+ #include <net/if_types.h>
+ #endif
++#ifndef BSD
+ #include <net/route.h>
++#endif
+ #include <netinet/in.h>
+ #ifndef LINUX
+ #include <netinet/in_var.h>
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_util_mbslen.c b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_util_mbslen.c
new file mode 100644
index 00000000000..5e8a5d43340
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nICEr_src_util_mbslen.c
@@ -0,0 +1,78 @@
+$NetBSD: patch-media_mtransport_third__party_nICEr_src_util_mbslen.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nICEr/src/util/mbslen.c.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nICEr/src/util/mbslen.c
+@@ -43,9 +43,17 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ #include <locale.h>
+ #include <stdlib.h>
+ #include <wchar.h>
+-#ifdef DARWIN
++
++#ifdef __FreeBSD__
++#include <osreldate.h>
++# if __FreeBSD_version > 900505
++# define HAVE_XLOCALE
++# endif
++#endif
++
++#ifdef HAVE_XLOCALE
+ #include <xlocale.h>
+-#endif /* DARWIN */
++#endif /* HAVE_XLOCALE */
+
+ #include "nr_api.h"
+ #include "mbslen.h"
+@@ -54,10 +62,10 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ int
+ mbslen(const char *s, size_t *ncharsp)
+ {
+-#ifdef DARWIN
++#ifdef HAVE_XLOCALE
+ static locale_t loc = 0;
+ static int initialized = 0;
+-#endif /* DARWIN */
++#endif /* HAVE_XLOCALE */
+ #ifdef WIN32
+ char *my_locale=0;
+ unsigned int i;
+@@ -67,7 +75,7 @@ mbslen(const char *s, size_t *ncharsp)
+ int nchars;
+ mbstate_t mbs;
+
+-#ifdef DARWIN
++#ifdef HAVE_XLOCALE
+ if (! initialized) {
+ initialized = 1;
+ loc = newlocale(LC_CTYPE_MASK, "UTF-8", LC_GLOBAL_LOCALE);
+@@ -76,7 +84,7 @@ mbslen(const char *s, size_t *ncharsp)
+ if (loc == 0) {
+ /* unable to create the UTF-8 locale */
+ assert(loc != 0); /* should never happen */
+-#endif /* DARWIN */
++#endif /* HAVE_XLOCALE */
+
+ #ifdef WIN32
+ if (!setlocale(LC_CTYPE, 0))
+@@ -98,18 +106,18 @@ mbslen(const char *s, size_t *ncharsp)
+ ABORT(R_NOT_FOUND);
+ #endif
+
+-#ifdef DARWIN
++#ifdef HAVE_XLOCALE
+ }
+-#endif /* DARWIN */
++#endif /* HAVE_XLOCALE */
+
+ memset(&mbs, 0, sizeof(mbs));
+ nchars = 0;
+
+-#ifdef DARWIN
++#ifdef HAVE_XLOCALE
+ while (*s != '\0' && (nbytes = mbrlen_l(s, strlen(s), &mbs, loc)) != 0)
+ #else
+ while (*s != '\0' && (nbytes = mbrlen(s, strlen(s), &mbs)) != 0)
+-#endif /* DARWIN */
++#endif /* HAVE_XLOCALE */
+ {
+ if (nbytes == (size_t)-1) /* should never happen */ {
+ assert(0);
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_nrappkit.gyp b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_nrappkit.gyp
new file mode 100644
index 00000000000..d7050e2f012
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_nrappkit.gyp
@@ -0,0 +1,32 @@
+$NetBSD: patch-media_mtransport_third__party_nrappkit_nrappkit.gyp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nrappkit/nrappkit.gyp.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nrappkit/nrappkit.gyp
+@@ -147,8 +147,18 @@
+ ],
+
+ 'conditions' : [
+- ## Mac
++ ## Mac and BSDs
+ [ 'OS == "mac"', {
++ 'defines' : [
++ 'DARWIN',
++ ],
++ }],
++ [ 'os_bsd == 1', {
++ 'defines' : [
++ 'BSD',
++ ],
++ }],
++ [ 'OS == "mac" or os_bsd == 1', {
+ 'cflags_mozilla': [
+ '-Wall',
+ '-Wno-parentheses',
+@@ -156,7 +166,6 @@
+ '-Wmissing-prototypes',
+ ],
+ 'defines' : [
+- 'DARWIN',
+ 'HAVE_LIBM=1',
+ 'HAVE_STRDUP=1',
+ 'HAVE_STRLCPY=1',
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_log_r__log.c b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_log_r__log.c
new file mode 100644
index 00000000000..9b800e7abaa
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_log_r__log.c
@@ -0,0 +1,12 @@
+$NetBSD: patch-media_mtransport_third__party_nrappkit_src_log_r__log.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nrappkit/src/log/r_log.c.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nrappkit/src/log/r_log.c
+@@ -48,6 +48,7 @@ static char *RCSSTRING __UNUSED__ ="$Id:
+ #include "hex.h"
+
+ #include <string.h>
++#include <errno.h>
+ #ifndef _MSC_VER
+ #include <strings.h>
+ #include <syslog.h>
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h
new file mode 100644
index 00000000000..fb2c054a0bc
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
+@@ -33,7 +33,7 @@
+ #ifndef _SYS_QUEUE_H_
+ #define _SYS_QUEUE_H_
+
+-#ifndef DARWIN
++#if !defined(__FreeBSD__) && !defined(DARWIN)
+ #include <stddef.h>
+ #define __offsetof offsetof
+ #endif
diff --git a/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_util_util.c b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_util_util.c
new file mode 100644
index 00000000000..2ebeb042481
--- /dev/null
+++ b/www/firefox/patches/patch-media_mtransport_third__party_nrappkit_src_util_util.c
@@ -0,0 +1,12 @@
+$NetBSD: patch-media_mtransport_third__party_nrappkit_src_util_util.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/mtransport/third_party/nrappkit/src/util/util.c.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/mtransport/third_party/nrappkit/src/util/util.c
+@@ -45,6 +45,7 @@ static char *RCSSTRING __UNUSED__ ="$Id:
+ #include <dirent.h>
+ #endif
+ #include <string.h>
++#include <errno.h>
+ #include <ctype.h>
+ #include <sys/stat.h>
+ #ifdef OPENSSL
diff --git a/www/firefox/patches/patch-media_webrtc_signaling_signaling.gyp b/www/firefox/patches/patch-media_webrtc_signaling_signaling.gyp
new file mode 100644
index 00000000000..cd06229f6ff
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_signaling_signaling.gyp
@@ -0,0 +1,49 @@
+$NetBSD: patch-media_webrtc_signaling_signaling.gyp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/signaling/signaling.gyp.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/signaling/signaling.gyp
+@@ -217,6 +217,19 @@
+ 'cflags_mozilla': [
+ ],
+ }],
++ ['os_bsd==1', {
++ 'include_dirs': [
++ ],
++ 'defines': [
++ # avoiding pointless ifdef churn
++ 'SIP_OS_OSX',
++ 'OSX',
++ 'SECLIB_OPENSSL',
++ ],
++
++ 'cflags_mozilla': [
++ ],
++ }],
+ ['OS=="mac"', {
+ 'include_dirs': [
+ ],
+@@ -752,7 +765,7 @@
+ ],
+
+ }],
+- ['OS=="mac"', {
++ ['OS=="mac" or os_bsd==1', {
+
+ 'include_dirs': [
+ ],
+@@ -797,14 +810,13 @@
+
+ 'defines' : [
+ 'SIP_OS_OSX',
+- '_POSIX_SOURCE',
++ # using BSD extensions, leave _POSIX_SOURCE undefined
+ 'CPR_MEMORY_LITTLE_ENDIAN',
+ 'NO_SOCKET_POLLING',
+ 'USE_TIMER_SELECT_BASED',
+ 'FULL_BUILD',
+ 'STUBBED_OUT',
+ 'USE_PRINTF',
+- '_DARWIN_C_SOURCE',
+ 'NO_NSPR_10_SUPPORT',
+ ],
+
diff --git a/www/firefox/patches/patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c b/www/firefox/patches/patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c
new file mode 100644
index 00000000000..2f73da756b1
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c
@@ -0,0 +1,20 @@
+$NetBSD: patch-media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/signaling/src/sipcc/cpr/darwin/cpr_darwin_ipc.c
+@@ -322,11 +322,15 @@ cprGetMessage (cprMsgQueue_t msgQueue, b
+ cpr_msgq_node_t *node;
+ struct timespec timeout;
+ struct timeval tv;
++#ifndef __APPLE__
++ struct timezone tz;
++#else
+ // On the iPhone, there is a DarwinAlias problem with "timezone"
+ struct _timezone {
+ int tz_minuteswest; /* of Greenwich */
+ int tz_dsttime; /* type of dst correction to apply */
+ } tz;
++#endif
+
+ /* Initialize ppUserData */
+ if (ppUserData) {
diff --git a/www/firefox/patches/patch-media_webrtc_signaling_test_Makefile.in b/www/firefox/patches/patch-media_webrtc_signaling_test_Makefile.in
new file mode 100644
index 00000000000..9b7fc1727a3
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_signaling_test_Makefile.in
@@ -0,0 +1,21 @@
+$NetBSD: patch-media_webrtc_signaling_test_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/signaling/test/Makefile.in.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/signaling/test/Makefile.in
+@@ -17,6 +17,7 @@ LIBS = \
+ $(NSPR_LIBS) \
+ $(NSS_LIBS) \
+ $(REALTIME_LIBS) \
++ $(MOZ_LIBV4L2_LIBS) \
+ $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
+ $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \
+ $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \
+@@ -86,7 +87,7 @@ LIBS += \
+ $(NULL)
+ endif
+
+-ifeq ($(OS_TARGET),Linux)
++ifneq (,$(filter Linux DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET)))
+ LIBS += \
+ $(MOZ_CAIRO_OSLIBS) \
+ $(NULL)
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_build_common.gypi b/www/firefox/patches/patch-media_webrtc_trunk_build_common.gypi
new file mode 100644
index 00000000000..38081eb4aea
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_build_common.gypi
@@ -0,0 +1,60 @@
+$NetBSD: patch-media_webrtc_trunk_build_common.gypi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/build/common.gypi.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/trunk/build/common.gypi
+@@ -80,12 +80,21 @@
+ ['use_ash==1', {
+ 'use_aura%': 1,
+ }],
++
++ # A flag for BSD platforms
++ ['OS=="dragonfly" or OS=="freebsd" or OS=="netbsd" or \
++ OS=="openbsd"', {
++ 'os_bsd%': 1,
++ }, {
++ 'os_bsd%': 0,
++ }],
+ ],
+ },
+ # Copy conditionally-set variables out one scope.
+ 'chromeos%': '<(chromeos)',
+ 'use_aura%': '<(use_aura)',
+ 'use_ash%': '<(use_ash)',
++ 'os_bsd%': '<(os_bsd)',
+ 'use_openssl%': '<(use_openssl)',
+ 'use_ibus%': '<(use_ibus)',
+ 'enable_viewport%': '<(enable_viewport)',
+@@ -119,7 +128,7 @@
+ }],
+
+ # Set toolkit_uses_gtk for the Chromium browser on Linux.
+- ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris") and use_aura==0', {
++ ['(OS=="linux" or OS=="solaris" or os_bsd==1) and use_aura==0', {
+ 'toolkit_uses_gtk%': 1,
+ }, {
+ 'toolkit_uses_gtk%': 0,
+@@ -144,6 +153,7 @@
+ 'toolkit_uses_gtk%': '<(toolkit_uses_gtk)',
+ 'use_aura%': '<(use_aura)',
+ 'use_ash%': '<(use_ash)',
++ 'os_bsd%': '<(os_bsd)',
+ 'use_openssl%': '<(use_openssl)',
+ 'use_ibus%': '<(use_ibus)',
+ 'enable_viewport%': '<(enable_viewport)',
+@@ -406,15 +416,8 @@
+ 'os_posix%': 1,
+ }],
+
+- # A flag for BSD platforms
+- ['OS=="freebsd" or OS=="openbsd"', {
+- 'os_bsd%': 1,
+- }, {
+- 'os_bsd%': 0,
+- }],
+-
+ # NSS usage.
+- ['(OS=="linux" or OS=="freebsd" or OS=="openbsd" or OS=="solaris") and use_openssl==0', {
++ ['(OS=="linux" or OS=="solaris" or os_bsd==1) and use_openssl==0', {
+ 'use_nss%': 1,
+ }, {
+ 'use_nss%': 0,
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h b/www/firefox/patches/patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h
new file mode 100644
index 00000000000..0fe88296002
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h
@@ -0,0 +1,19 @@
+$NetBSD: patch-media_webrtc_trunk_testing_gtest_include_gtest_internal_gtest-port.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/testing/gtest/include/gtest/internal/gtest-port.h.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/trunk/testing/gtest/include/gtest/internal/gtest-port.h
+@@ -490,10 +490,10 @@
+ # define GTEST_ENV_HAS_TR1_TUPLE_ 1
+ # endif
+
+-// C++11 specifies that <tuple> provides std::tuple. Users can't use
+-// gtest in C++11 mode until their standard library is at least that
+-// compliant.
+-# if GTEST_LANG_CXX11
++// C++11 specifies that <tuple> provides std::tuple. Use that if gtest is used
++// in C++11 mode and libstdc++ isn't very old (binaries targeting OS X 10.6
++// can build with clang but need to use gcc4.2's libstdc++).
++# if GTEST_LANG_CXX11 && (!defined(__GLIBCXX__) || __GLIBCXX__ > 20110325)
+ # define GTEST_ENV_HAS_STD_TUPLE_ 1
+ # endif
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp b/www/firefox/patches/patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp
new file mode 100644
index 00000000000..153536a9a01
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp
@@ -0,0 +1,24 @@
+$NetBSD: patch-media_webrtc_trunk_third__party_libyuv_libyuv.gyp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/third_party/libyuv/libyuv.gyp.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/trunk/third_party/libyuv/libyuv.gyp
+@@ -9,6 +9,7 @@
+ {
+ 'variables': {
+ 'use_system_libjpeg%': 0,
++ 'yuv_disable_asm%': 0,
+ },
+ 'targets': [
+ {
+@@ -50,6 +51,11 @@
+ ],
+ },
+ 'conditions': [
++ ['yuv_disable_asm==1', {
++ 'defines': [
++ 'YUV_DISABLE_ASM',
++ ],
++ }],
+ ['build_with_mozilla==1', {
+ 'include_dirs': [
+ '$(DEPTH)/dist/include',
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py b/www/firefox/patches/patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py
new file mode 100644
index 00000000000..35ea3978d4d
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py
@@ -0,0 +1,55 @@
+$NetBSD: patch-media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/trunk/tools/gyp/pylib/gyp/generator/mozmake.py
+@@ -9,6 +9,7 @@ import collections
+ import gyp
+ import gyp.common
+ import sys
++import platform
+ import os
+ import re
+ import shlex
+@@ -111,20 +112,34 @@ def ensure_directory_exists(path):
+
+ def GetFlavor(params):
+ """Returns |params.flavor| if it's set, the system's default flavor else."""
++ system = platform.system().lower()
+ flavors = {
+- 'win32': 'win',
+- 'darwin': 'mac',
+- 'sunos5': 'solaris',
+- 'freebsd7': 'freebsd',
+- 'freebsd8': 'freebsd',
++ 'microsoft': 'win',
++ 'windows' : 'win',
++ 'darwin' : 'mac',
++ 'sunos' : 'solaris',
++ 'dragonfly': 'bsd',
++ 'freebsd' : 'bsd',
++ 'netbsd' : 'bsd',
++ 'openbsd' : 'bsd',
+ }
+- flavor = flavors.get(sys.platform, 'linux')
+- return params.get('flavor', flavor)
++
++ if 'flavor' in params:
++ return params['flavor']
++ if system.startswith('cygwin'):
++ return 'win'
++ if system in flavors:
++ return flavors[system]
++
++ return 'linux'
+
+
+ def CalculateVariables(default_variables, params):
++ flavor = GetFlavor(params)
++ if flavor == 'bsd':
++ flavor = platform.system().lower()
+ generator_flags = params.get('generator_flags', {})
+- default_variables['OS'] = generator_flags.get('os', GetFlavor(params))
++ default_variables['OS'] = generator_flags.get('os', flavor)
+
+
+ def CalculateGeneratorInputInfo(params):
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_build_common.gypi b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_build_common.gypi
new file mode 100644
index 00000000000..ede6bd8c8b0
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_build_common.gypi
@@ -0,0 +1,35 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_build_common.gypi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/build/common.gypi.orig 2013-05-11 19:19:44.000000000 +0000
++++ media/webrtc/trunk/webrtc/build/common.gypi
+@@ -124,6 +124,11 @@
+ # and Java Implementation
+ 'enable_android_opensl%': 0,
+ }],
++ ['OS=="linux" or OS=="solaris" or os_bsd==1', {
++ 'include_v4l2_video_capture%': 1,
++ }, {
++ 'include_v4l2_video_capture%': 0,
++ }],
+ ['OS=="ios"', {
+ 'enable_video%': 0,
+ 'enable_protobuf%': 0,
+@@ -210,6 +215,18 @@
+ }],
+ ],
+ }],
++ ['os_bsd==1', {
++ 'defines': [
++ 'WEBRTC_BSD',
++ 'WEBRTC_THREAD_RR',
++ ],
++ }],
++ ['OS=="dragonfly" or OS=="netbsd"', {
++ 'defines': [
++ # doesn't support pthread_condattr_setclock
++ 'WEBRTC_CLOCK_TYPE_REALTIME',
++ ],
++ }],
+ ['OS=="ios"', {
+ 'defines': [
+ 'WEBRTC_MAC',
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi
new file mode 100644
index 00000000000..60b8063823b
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi
@@ -0,0 +1,91 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device.gypi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/audio_device/audio_device.gypi.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/audio_device/audio_device.gypi
+@@ -45,11 +45,15 @@
+ 'dummy/audio_device_utility_dummy.h',
+ ],
+ 'conditions': [
+- ['OS=="linux"', {
++ ['include_alsa_audio==1 or include_pulse_audio==1', {
+ 'include_dirs': [
+ 'linux',
+ ],
+- }], # OS==linux
++ 'defines': [
++ # avoid pointless rename
++ 'WEBRTC_LINUX',
++ ],
++ }], # include_alsa_audio==1 or include_pulse_audio==1
+ ['OS=="ios"', {
+ 'include_dirs': [
+ 'ios',
+@@ -77,14 +81,8 @@
+ }],
+ ['include_internal_audio_device==1', {
+ 'sources': [
+- 'linux/alsasymboltable_linux.cc',
+- 'linux/alsasymboltable_linux.h',
+- 'linux/audio_device_alsa_linux.cc',
+- 'linux/audio_device_alsa_linux.h',
+ 'linux/audio_device_utility_linux.cc',
+ 'linux/audio_device_utility_linux.h',
+- 'linux/audio_mixer_manager_alsa_linux.cc',
+- 'linux/audio_mixer_manager_alsa_linux.h',
+ 'linux/latebindingsymboltable_linux.cc',
+ 'linux/latebindingsymboltable_linux.h',
+ 'ios/audio_device_ios.cc',
+@@ -134,28 +132,36 @@
+ ],
+ }],
+ ['OS=="linux"', {
+- 'defines': [
+- 'LINUX_ALSA',
+- ],
+ 'link_settings': {
+ 'libraries': [
+ '-ldl',
+ ],
+ },
+- 'conditions': [
+- ['include_pulse_audio==1', {
+- 'defines': [
+- 'LINUX_PULSE',
+- ],
+- 'sources': [
+- 'linux/audio_device_pulse_linux.cc',
+- 'linux/audio_device_pulse_linux.h',
+- 'linux/audio_mixer_manager_pulse_linux.cc',
+- 'linux/audio_mixer_manager_pulse_linux.h',
+- 'linux/pulseaudiosymboltable_linux.cc',
+- 'linux/pulseaudiosymboltable_linux.h',
+- ],
+- }],
++ }],
++ ['include_alsa_audio==1', {
++ 'defines': [
++ 'LINUX_ALSA',
++ ],
++ 'sources': [
++ 'linux/alsasymboltable_linux.cc',
++ 'linux/alsasymboltable_linux.h',
++ 'linux/audio_device_alsa_linux.cc',
++ 'linux/audio_device_alsa_linux.h',
++ 'linux/audio_mixer_manager_alsa_linux.cc',
++ 'linux/audio_mixer_manager_alsa_linux.h',
++ ],
++ }],
++ ['include_pulse_audio==1', {
++ 'defines': [
++ 'LINUX_PULSE',
++ ],
++ 'sources': [
++ 'linux/audio_device_pulse_linux.cc',
++ 'linux/audio_device_pulse_linux.h',
++ 'linux/audio_mixer_manager_pulse_linux.cc',
++ 'linux/audio_mixer_manager_pulse_linux.h',
++ 'linux/pulseaudiosymboltable_linux.cc',
++ 'linux/pulseaudiosymboltable_linux.h',
+ ],
+ }],
+ ['OS=="mac" or OS=="ios"', {
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc
new file mode 100644
index 00000000000..7b9d60cf745
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc
@@ -0,0 +1,21 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_audio__device_audio__device__utility.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/audio_device/audio_device_utility.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/audio_device/audio_device_utility.cc
+@@ -46,7 +46,7 @@ bool AudioDeviceUtility::StringCompare(
+
+ } // namespace webrtc
+
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+ // ============================================================================
+ // Linux & Mac
+@@ -109,6 +109,6 @@ bool AudioDeviceUtility::StringCompare(
+
+ } // namespace webrtc
+
+-#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
new file mode 100644
index 00000000000..f0a1909bb2d
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc
@@ -0,0 +1,12 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_forward__error__correction.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/forward_error_correction.cc
+@@ -12,6 +12,7 @@
+
+ #include <algorithm>
+ #include <cassert>
++#include <cstdlib> // for abs()
+ #include <cstring>
+ #include <iterator>
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc
new file mode 100644
index 00000000000..d81103babb2
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc
@@ -0,0 +1,49 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_rtp__rtcp_source_rtp__utility.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/rtp_utility.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/rtp_rtcp/source/rtp_utility.cc
+@@ -18,7 +18,7 @@
+ #include <Windows.h> // FILETIME
+ #include <WinSock.h> // timeval
+ #include <MMSystem.h> // timeGetTime
+-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
++#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
+ #include <sys/time.h> // gettimeofday
+ #include <time.h>
+ #endif
+@@ -156,7 +156,7 @@ void get_time(WindowsHelpTimer* help_tim
+ WindowsHelpTimer* _helpTimer;
+ };
+
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+ // A clock reading times from the POSIX API.
+ class UnixSystemClock : public RtpRtcpClock {
+@@ -214,7 +214,7 @@ void WindowsSystemClock::CurrentNTP(WebR
+ frac = (WebRtc_UWord32)dtemp;
+ }
+
+-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
++#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
+
+ WebRtc_Word64 UnixSystemClock::GetTimeInMS() {
+ return TickTime::MillisecondTimestamp();
+@@ -253,7 +253,7 @@ static WindowsHelpTimer global_help_time
+ RtpRtcpClock* GetSystemClock() {
+ #if defined(_WIN32)
+ return new WindowsSystemClock(&global_help_timer);
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return new UnixSystemClock();
+ #else
+ return NULL;
+@@ -330,7 +330,7 @@ bool StringCompare(const char* str1, con
+ const WebRtc_UWord32 length) {
+ return (_strnicmp(str1, str2, length) == 0) ? true : false;
+ }
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ bool StringCompare(const char* str1, const char* str2,
+ const WebRtc_UWord32 length) {
+ return (strncasecmp(str1, str2, length) == 0) ? true : false;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc
new file mode 100644
index 00000000000..a697624c2d3
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc
@@ -0,0 +1,90 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_udp__transport_source_udp__transport__impl.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/udp_transport/source/udp_transport_impl.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/udp_transport/source/udp_transport_impl.cc
+@@ -18,16 +18,16 @@
+ #if defined(_WIN32)
+ #include <winsock2.h>
+ #include <ws2tcpip.h>
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ #include <arpa/inet.h>
+ #include <ctype.h>
+ #include <fcntl.h>
+ #include <netdb.h>
++#include <sys/socket.h>
+ #include <net/if.h>
+ #include <netinet/in.h>
+ #include <stdlib.h>
+ #include <sys/ioctl.h>
+-#include <sys/socket.h>
+ #include <sys/time.h>
+ #include <unistd.h>
+ #ifndef WEBRTC_IOS
+@@ -36,9 +36,11 @@
+ #endif // defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
+
+ #if defined(WEBRTC_MAC)
+-#include <ifaddrs.h>
+ #include <machine/types.h>
+ #endif
++#if defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
++#include <ifaddrs.h>
++#endif
+ #if defined(WEBRTC_LINUX)
+ #include <linux/netlink.h>
+ #include <linux/rtnetlink.h>
+@@ -51,7 +53,7 @@
+ #include "typedefs.h"
+ #include "udp_socket_manager_wrapper.h"
+
+-#if defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ #define GetLastError() errno
+
+ #define IFRSIZE ((int)(size * sizeof (struct ifreq)))
+@@ -61,7 +63,7 @@
+ (int)(nlh)->nlmsg_len >= (int)sizeof(struct nlmsghdr) && \
+ (int)(nlh)->nlmsg_len <= (len))
+
+-#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#endif // defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+ namespace webrtc {
+
+@@ -2371,7 +2373,7 @@ WebRtc_Word32 UdpTransport::InetPresenta
+ const char* src,
+ void* dst)
+ {
+-#if defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ const WebRtc_Word32 result = inet_pton(af, src, dst);
+ return result > 0 ? 0 : -1;
+
+@@ -2493,7 +2495,7 @@ WebRtc_Word32 UdpTransport::LocalHostAdd
+ "getaddrinfo failed to find address");
+ return -1;
+
+-#elif defined(WEBRTC_MAC)
++#elif defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ struct ifaddrs* ptrIfAddrs = NULL;
+ struct ifaddrs* ptrIfAddrsStart = NULL;
+
+@@ -2685,7 +2687,7 @@ WebRtc_Word32 UdpTransport::LocalHostAdd
+ "gethostbyname failed, error:%d", error);
+ return -1;
+ }
+-#elif (defined(WEBRTC_MAC))
++#elif (defined(WEBRTC_BSD) || defined(WEBRTC_MAC))
+ char localname[255];
+ if (gethostname(localname, 255) != -1)
+ {
+@@ -2824,7 +2826,7 @@ WebRtc_Word32 UdpTransport::IPAddress(co
+ sourcePort = htons(source_port);
+ return 0;
+
+- #elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++ #elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ WebRtc_Word32 ipFamily = address._sockaddr_storage.sin_family;
+ const void* ptrNumericIP = NULL;
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc
new file mode 100644
index 00000000000..1e7aba3452b
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc
@@ -0,0 +1,22 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_utility_source_rtp__dump__impl.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/utility/source/rtp_dump_impl.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/utility/source/rtp_dump_impl.cc
+@@ -19,7 +19,7 @@
+ #if defined(_WIN32)
+ #include <Windows.h>
+ #include <mmsystem.h>
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ #include <string.h>
+ #include <sys/time.h>
+ #include <time.h>
+@@ -238,7 +238,7 @@ inline WebRtc_UWord32 RtpDumpImpl::GetTi
+ {
+ #if defined(_WIN32)
+ return timeGetTime();
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ struct timeval tv;
+ struct timezone tz;
+ unsigned long val;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc
new file mode 100644
index 00000000000..09efe9d5f26
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc
@@ -0,0 +1,31 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_video__capture_device__info__impl.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/video_capture/device_info_impl.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/video_capture/device_info_impl.cc
+@@ -54,7 +54,7 @@ WebRtc_Word32 DeviceInfoImpl::NumberOfCa
+ if (_lastUsedDeviceNameLength == strlen((char*) deviceUniqueIdUTF8))
+ {
+ // Is it the same device that is asked for again.
+-#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX)
++#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ if(strncasecmp((char*)_lastUsedDeviceName,
+ (char*) deviceUniqueIdUTF8,
+ _lastUsedDeviceNameLength)==0)
+@@ -91,7 +91,7 @@ WebRtc_Word32 DeviceInfoImpl::GetCapabil
+ ReadLockScoped cs(_apiLock);
+
+ if ((_lastUsedDeviceNameLength != strlen((char*) deviceUniqueIdUTF8))
+-#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX)
++#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ || (strncasecmp((char*)_lastUsedDeviceName,
+ (char*) deviceUniqueIdUTF8,
+ _lastUsedDeviceNameLength)!=0))
+@@ -155,7 +155,7 @@ WebRtc_Word32 DeviceInfoImpl::GetBestMat
+
+ ReadLockScoped cs(_apiLock);
+ if ((_lastUsedDeviceNameLength != strlen((char*) deviceUniqueIdUTF8))
+-#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX)
++#if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ || (strncasecmp((char*)_lastUsedDeviceName,
+ (char*) deviceUniqueIdUTF8,
+ _lastUsedDeviceNameLength)!=0))
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc
new file mode 100644
index 00000000000..c49a6bb89d0
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc
@@ -0,0 +1,47 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/video_capture/linux/device_info_linux.cc
+@@ -19,12 +19,30 @@
+ #include <stdlib.h>
+
+ //v4l includes
++#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
++#include <sys/videoio.h>
++#elif defined(__sun)
++#include <sys/videodev2.h>
++#else
+ #include <linux/videodev2.h>
++#endif
++#ifdef HAVE_LIBV4L2
++#include <libv4l2.h>
++#endif
+
+ #include "ref_count.h"
+ #include "trace.h"
+
+
++#ifdef HAVE_LIBV4L2
++#define open v4l2_open
++#define close v4l2_close
++#define dup v4l2_dup
++#define ioctl v4l2_ioctl
++#define mmap v4l2_mmap
++#define munmap v4l2_munmap
++#endif
++
+ namespace webrtc
+ {
+ namespace videocapturemodule
+@@ -130,6 +148,11 @@ WebRtc_Word32 DeviceInfoLinux::GetDevice
+ memset(deviceNameUTF8, 0, deviceNameLength);
+ memcpy(cameraName, cap.card, sizeof(cap.card));
+
++ if (cameraName[0] == '\0')
++ {
++ sprintf(cameraName, "Camera at /dev/video%d", deviceNumber);
++ }
++
+ if (deviceNameLength >= strlen(cameraName))
+ {
+ memcpy(deviceNameUTF8, cameraName, strlen(cameraName));
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc
new file mode 100644
index 00000000000..46bd089c564
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc
@@ -0,0 +1,45 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/video_capture/linux/video_capture_linux.cc
+@@ -12,12 +12,23 @@
+ #include <unistd.h>
+ #include <sys/stat.h>
+ #include <fcntl.h>
+-#include <linux/videodev2.h>
+ #include <errno.h>
+ #include <stdio.h>
+ #include <sys/mman.h>
+ #include <string.h>
+
++//v4l includes
++#if defined(__DragonFly__) || defined(__NetBSD__) || defined(__OpenBSD__)
++#include <sys/videoio.h>
++#elif defined(__sun)
++#include <sys/videodev2.h>
++#else
++#include <linux/videodev2.h>
++#endif
++#ifdef HAVE_LIBV4L2
++#include <libv4l2.h>
++#endif
++
+ #include <new>
+
+ #include "ref_count.h"
+@@ -26,6 +37,15 @@
+ #include "critical_section_wrapper.h"
+ #include "video_capture_linux.h"
+
++#ifdef HAVE_LIBV4L2
++#define open v4l2_open
++#define close v4l2_close
++#define dup v4l2_dup
++#define ioctl v4l2_ioctl
++#define mmap v4l2_mmap
++#define munmap v4l2_munmap
++#endif
++
+ namespace webrtc
+ {
+ namespace videocapturemodule
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi
new file mode 100644
index 00000000000..4efa9f66844
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi
@@ -0,0 +1,62 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi.orig 2013-05-11 19:19:45.000000000 +0000
++++ media/webrtc/trunk/webrtc/modules/video_capture/video_capture.gypi
+@@ -7,6 +7,9 @@
+ # be found in the AUTHORS file in the root of the source tree.
+
+ {
++ 'variables': {
++ 'use_libv4l2%': 0,
++ },
+ 'targets': [
+ {
+ 'target_name': 'video_capture_module',
+@@ -48,7 +51,17 @@
+ ],
+ }, { # include_internal_video_capture == 1
+ 'conditions': [
+- ['OS=="linux"', {
++ ['include_v4l2_video_capture==1', {
++ 'conditions': [
++ ['use_libv4l2==1', {
++ 'defines': [
++ 'HAVE_LIBV4L2',
++ ],
++ 'libraries': [
++ '-lv4l2',
++ ],
++ }],
++ ],
+ 'include_dirs': [
+ 'linux',
+ ],
+@@ -157,7 +170,7 @@
+ 'test/video_capture_main_mac.mm',
+ ],
+ 'conditions': [
+- ['OS=="mac" or OS=="linux"', {
++ ['OS!="win" and OS!="android"', {
+ 'cflags': [
+ '-Wno-write-strings',
+ ],
+@@ -165,13 +178,17 @@
+ '-lpthread -lm',
+ ],
+ }],
+- ['OS=="linux"', {
++ ['include_v4l2_video_capture==1', {
+ 'libraries': [
+- '-lrt',
+ '-lXext',
+ '-lX11',
+ ],
+ }],
++ ['OS=="linux"', {
++ 'libraries': [
++ '-lrt',
++ ],
++ }],
+ ['OS=="mac"', {
+ 'dependencies': [
+ # Link with a special main for mac so we can use the webcam.
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h
new file mode 100644
index 00000000000..04cf5fe9213
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_interface_asm__defines.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/interface/asm_defines.h.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/interface/asm_defines.h
+@@ -11,7 +11,7 @@
+ #ifndef WEBRTC_SYSTEM_WRAPPERS_INTERFACE_ASM_DEFINES_H_
+ #define WEBRTC_SYSTEM_WRAPPERS_INTERFACE_ASM_DEFINES_H_
+
+-#if defined(__linux__) && defined(__ELF__)
++#if (defined(__linux__) || defined(__FreeBSD__)) && defined(__ELF__)
+ .section .note.GNU-stack,"",%progbits
+ #endif
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h
new file mode 100644
index 00000000000..83322b8c75b
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h
@@ -0,0 +1,67 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_interface_tick__util.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/interface/tick_util.h.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/interface/tick_util.h
+@@ -194,7 +194,7 @@ inline WebRtc_Word64 TickTime::QueryOsFo
+ }
+ result.ticks_ = now + (num_wrap_time_get_time << 32);
+ #endif
+-#elif defined(WEBRTC_LINUX)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ struct timespec ts;
+ // TODO(wu): Remove CLOCK_REALTIME implementation.
+ #ifdef WEBRTC_CLOCK_TYPE_REALTIME
+@@ -241,7 +241,7 @@ inline WebRtc_Word64 TickTime::Milliseco
+ #else
+ return ticks;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return ticks / 1000000LL;
+ #else
+ return ticks / 1000LL;
+@@ -258,7 +258,7 @@ inline WebRtc_Word64 TickTime::Microseco
+ #else
+ return ticks * 1000LL;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return ticks / 1000LL;
+ #else
+ return ticks;
+@@ -278,7 +278,7 @@ inline WebRtc_Word64 TickTime::Milliseco
+ #else
+ return ms;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return ms * 1000000LL;
+ #else
+ return ms * 1000LL;
+@@ -294,7 +294,7 @@ inline WebRtc_Word64 TickTime::TicksToMi
+ #else
+ return ticks;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return ticks / 1000000LL;
+ #else
+ return ticks / 1000LL;
+@@ -323,7 +323,7 @@ inline WebRtc_Word64 TickInterval::Milli
+ // interval_ is in ms
+ return interval_;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ // interval_ is in ns
+ return interval_ / 1000000;
+ #else
+@@ -342,7 +342,7 @@ inline WebRtc_Word64 TickInterval::Micro
+ // interval_ is in ms
+ return interval_ * 1000LL;
+ #endif
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ // interval_ is in ns
+ return interval_ / 1000;
+ #else
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc
new file mode 100644
index 00000000000..6d669160392
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc
@@ -0,0 +1,12 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_atomic32__posix.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/atomic32_posix.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/atomic32_posix.cc
+@@ -12,7 +12,6 @@
+
+ #include <assert.h>
+ #include <inttypes.h>
+-#include <malloc.h>
+
+ #include "common_types.h"
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc
new file mode 100644
index 00000000000..7787e060f2d
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc
@@ -0,0 +1,33 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable.cc
+@@ -8,14 +8,16 @@
+ * be found in the AUTHORS file in the root of the source tree.
+ */
+
++#include "condition_variable_wrapper.h"
++
+ #if defined(_WIN32)
+ #include <windows.h>
+ #include "condition_variable_win.h"
+-#include "condition_variable_wrapper.h"
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ #include <pthread.h>
+ #include "condition_variable_posix.h"
+-#include "condition_variable_wrapper.h"
++#else
++#include <stddef.h> // for NULL
+ #endif
+
+ namespace webrtc {
+@@ -23,7 +25,7 @@ namespace webrtc {
+ ConditionVariableWrapper* ConditionVariableWrapper::CreateConditionVariable() {
+ #if defined(_WIN32)
+ return new ConditionVariableWindows;
+-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#elif defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ return ConditionVariablePosix::Create();
+ #else
+ return NULL;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc
new file mode 100644
index 00000000000..0c4edac72a7
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable__posix.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_posix.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/condition_variable_posix.cc
+@@ -79,7 +79,7 @@ bool ConditionVariablePosix::SleepCS(Cri
+ unsigned long max_time_inMS) {
+ const unsigned long INFINITE = 0xFFFFFFFF;
+ const int MILLISECONDS_PER_SECOND = 1000;
+-#ifndef WEBRTC_LINUX
++#if !defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)
+ const int MICROSECONDS_PER_MILLISECOND = 1000;
+ #endif
+ const int NANOSECONDS_PER_SECOND = 1000000000;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc
new file mode 100644
index 00000000000..39e0ccb1eb9
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc
@@ -0,0 +1,22 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/cpu.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/cpu.cc
+@@ -14,7 +14,7 @@
+ #include "cpu_win.h"
+ #elif defined(WEBRTC_MAC)
+ #include "cpu_mac.h"
+-#elif defined(WEBRTC_ANDROID)
++#elif defined(WEBRTC_ANDROID) || defined(WEBRTC_BSD)
+ // Not implemented yet, might be possible to use Linux implementation
+ #else // defined(WEBRTC_LINUX)
+ #include "cpu_linux.h"
+@@ -26,7 +26,7 @@ CpuWrapper* CpuWrapper::CreateCpu() {
+ return new CpuWindows();
+ #elif defined(WEBRTC_MAC)
+ return new CpuWrapperMac();
+-#elif defined(WEBRTC_ANDROID)
++#elif defined(WEBRTC_ANDROID) || defined(WEBRTC_BSD)
+ return 0;
+ #else
+ return new CpuLinux();
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc
new file mode 100644
index 00000000000..a32bb735dc1
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc
@@ -0,0 +1,50 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_cpu__info.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/cpu_info.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/cpu_info.cc
+@@ -12,13 +12,15 @@
+
+ #if defined(_WIN32)
+ #include <Windows.h>
+-#elif defined(WEBRTC_MAC)
+-#include <sys/sysctl.h>
++#elif defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ #include <sys/types.h>
++#include <sys/sysctl.h>
+ #elif defined(WEBRTC_ANDROID)
+ // Not implemented yet, might be possible to use Linux implementation
+-#else // defined(WEBRTC_LINUX)
++#elif defined(WEBRTC_LINUX)
+ #include <sys/sysinfo.h>
++#else // defined(_SC_NPROCESSORS_ONLN)
++#include <unistd.h>
+ #endif
+
+ #include "trace.h"
+@@ -41,8 +43,15 @@ WebRtc_UWord32 CpuInfo::DetectNumberOfCo
+ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1,
+ "Available number of cores:%d", number_of_cores_);
+
+-#elif defined(WEBRTC_MAC)
+- int name[] = {CTL_HW, HW_AVAILCPU};
++#elif defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
++ int name[] = {
++ CTL_HW,
++#ifdef HW_AVAILCPU
++ HW_AVAILCPU,
++#else
++ HW_NCPU,
++#endif
++ };
+ int ncpu;
+ size_t size = sizeof(ncpu);
+ if (0 == sysctl(name, 2, &ncpu, &size, NULL, 0)) {
+@@ -54,6 +63,8 @@ WebRtc_UWord32 CpuInfo::DetectNumberOfCo
+ "Failed to get number of cores");
+ number_of_cores_ = 1;
+ }
++#elif defined(_SC_NPROCESSORS_ONLN)
++ _numberOfCores = sysconf(_SC_NPROCESSORS_ONLN);
+ #else
+ WEBRTC_TRACE(kTraceWarning, kTraceUtility, -1,
+ "No function to get number of cores");
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp
new file mode 100644
index 00000000000..a6cd0624dd1
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp
@@ -0,0 +1,18 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
+@@ -21,6 +21,13 @@ Scott McMurray
+ #include "constants.hpp"
+ #include <cstring>
+
++#ifdef __FreeBSD__
++# include <osreldate.h>
++# if __FreeBSD_version < 900506
++# define getchar boost_getchar
++# endif
++#endif
++
+ namespace boost {
+ namespace detail {
+ //This only works on unsigned data types
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc
new file mode 100644
index 00000000000..4562c3bc9bd
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc
@@ -0,0 +1,96 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/thread_posix.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/thread_posix.cc
+@@ -59,6 +59,17 @@
+ #include <sys/prctl.h>
+ #endif
+
++#if defined(__NetBSD__)
++#include <lwp.h>
++#elif defined(__FreeBSD__)
++#include <sys/param.h>
++#include <sys/thr.h>
++#endif
++
++#if defined(WEBRTC_BSD) && !defined(__NetBSD__)
++#include <pthread_np.h>
++#endif
++
+ #include "webrtc/system_wrappers/interface/critical_section_wrapper.h"
+ #include "webrtc/system_wrappers/interface/event_wrapper.h"
+ #include "webrtc/system_wrappers/interface/trace.h"
+@@ -141,6 +152,20 @@ uint32_t ThreadWrapper::GetThreadId() {
+ return static_cast<uint32_t>(syscall(__NR_gettid));
+ #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS)
+ return pthread_mach_thread_np(pthread_self());
++#elif defined(__NetBSD__)
++ return _lwp_self();
++#elif defined(__DragonFly__)
++ return lwp_gettid();
++#elif defined(__OpenBSD__)
++ return reinterpret_cast<uintptr_t> (pthread_self());
++#elif defined(__FreeBSD__)
++# if __FreeBSD_version > 900030
++ return pthread_getthreadid_np();
++# else
++ long lwpid;
++ thr_self(&lwpid);
++ return lwpid;
++# endif
+ #else
+ return reinterpret_cast<uint32_t>(pthread_self());
+ #endif
+@@ -172,7 +197,7 @@ ThreadPosix::~ThreadPosix() {
+ delete crit_state_;
+ }
+
+-#define HAS_THREAD_ID !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC)
++#define HAS_THREAD_ID !defined(WEBRTC_IOS) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD)
+
+ bool ThreadPosix::Start(unsigned int& thread_id)
+ {
+@@ -237,13 +262,18 @@ bool ThreadPosix::Start(unsigned int& th
+
+ // CPU_ZERO and CPU_SET are not available in NDK r7, so disable
+ // SetAffinity on Android for now.
+-#if (defined(WEBRTC_LINUX) && (!defined(WEBRTC_ANDROID)))
++#if defined(__FreeBSD__) || (defined(WEBRTC_LINUX) && \
++ (!defined(WEBRTC_ANDROID)))
+ bool ThreadPosix::SetAffinity(const int* processor_numbers,
+ const unsigned int amount_of_processors) {
+ if (!processor_numbers || (amount_of_processors == 0)) {
+ return false;
+ }
++#if defined(__FreeBSD__)
++ cpuset_t mask;
++#else
+ cpu_set_t mask;
++#endif
+ CPU_ZERO(&mask);
+
+ for (unsigned int processor = 0;
+@@ -251,7 +281,11 @@ bool ThreadPosix::SetAffinity(const int*
+ ++processor) {
+ CPU_SET(processor_numbers[processor], &mask);
+ }
+-#if defined(WEBRTC_ANDROID)
++#if defined(__FreeBSD__)
++ const int result = pthread_setaffinity_np(thread_,
++ sizeof(mask),
++ &mask);
++#elif defined(WEBRTC_ANDROID)
+ // Android.
+ const int result = syscall(__NR_sched_setaffinity,
+ pid_,
+@@ -325,6 +359,10 @@ void ThreadPosix::Run() {
+ if (set_thread_name_) {
+ #ifdef WEBRTC_LINUX
+ prctl(PR_SET_NAME, (unsigned long)name_, 0, 0, 0);
++#elif defined(__NetBSD__)
++ pthread_setname_np(pthread_self(), "%s", (void *)name_);
++#elif defined(WEBRTC_BSD)
++ pthread_set_name_np(pthread_self(), name_);
+ #endif
+ WEBRTC_TRACE(kTraceStateInfo, kTraceUtility, -1,
+ "Thread with name:%s started ", name_);
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc
new file mode 100644
index 00000000000..0330f2319f8
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_system__wrappers_source_trace__posix.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/system_wrappers/source/trace_posix.cc
+@@ -54,7 +54,7 @@ WebRtc_Word32 TracePosix::AddTime(char*
+ }
+ struct tm buffer;
+ const struct tm* system_time =
+- localtime_r(&system_time_high_res.tv_sec, &buffer);
++ localtime_r((const time_t *)(&system_time_high_res.tv_sec), &buffer);
+
+ const WebRtc_UWord32 ms_time = system_time_high_res.tv_usec / 1000;
+ WebRtc_UWord32 prev_tickCount = 0;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_typedefs.h b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_typedefs.h
new file mode 100644
index 00000000000..65813c26e86
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_typedefs.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_typedefs.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/typedefs.h.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/typedefs.h
+@@ -21,7 +21,7 @@
+ // For access to standard POSIXish features, use WEBRTC_POSIX instead of a
+ // more specific macro.
+ #if defined(WEBRTC_MAC) || defined(WEBRTC_LINUX) || \
+- defined(WEBRTC_ANDROID)
++ defined(WEBRTC_ANDROID) || defined(WEBRTC_BSD)
+ #define WEBRTC_POSIX
+ #endif
+
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h
new file mode 100644
index 00000000000..c5ab01ee68a
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h
@@ -0,0 +1,13 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_video__engine_vie__defines.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/video_engine/vie_defines.h.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/video_engine/vie_defines.h
+@@ -173,7 +173,7 @@ inline int ChannelId(const int moduleId)
+
+ // Linux specific.
+ #ifndef WEBRTC_ANDROID
+-#ifdef WEBRTC_LINUX
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD)
+ // Build information macros.
+ #if defined(_DEBUG)
+ #define BUILDMODE "d"
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc
new file mode 100644
index 00000000000..88e91a5694d
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc
@@ -0,0 +1,31 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_voice__engine_voe__network__impl.cc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/voice_engine/voe_network_impl.cc.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/voice_engine/voe_network_impl.cc
+@@ -472,7 +472,7 @@ int VoENetworkImpl::SetSendTOS(int chann
+ "SetSendTOS(channel=%d, DSCP=%d, useSetSockopt=%d)",
+ channel, DSCP, useSetSockopt);
+
+-#if !defined(_WIN32) && !defined(WEBRTC_LINUX) && !defined(WEBRTC_MAC)
++#if !defined(_WIN32) && !defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD) && !defined(WEBRTC_MAC)
+ _shared->SetLastError(VE_FUNC_NOT_SUPPORTED, kTraceWarning,
+ "SetSendTOS() is not supported on this platform");
+ return -1;
+@@ -528,7 +528,7 @@ int VoENetworkImpl::SetSendTOS(int chann
+ "SetSendTOS() external transport is enabled");
+ return -1;
+ }
+-#if defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
++#if defined(WEBRTC_LINUX) || defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+ useSetSockopt = true;
+ WEBRTC_TRACE(kTraceInfo, kTraceVoice, VoEId(_shared->instance_id(), -1),
+ " force useSetSockopt=true since there is no alternative"
+@@ -551,7 +551,7 @@ int VoENetworkImpl::GetSendTOS(int chann
+ WEBRTC_TRACE(kTraceApiCall, kTraceVoice, VoEId(_shared->instance_id(), -1),
+ "GetSendTOS(channel=%d)", channel);
+
+-#if !defined(_WIN32) && !defined(WEBRTC_LINUX) && !defined(WEBRTC_MAC)
++#if !defined(_WIN32) && !defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD) && !defined(WEBRTC_MAC)
+ _shared->SetLastError(VE_FUNC_NOT_SUPPORTED, kTraceWarning,
+ "GetSendTOS() is not supported on this platform");
+ return -1;
diff --git a/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h
new file mode 100644
index 00000000000..c49d461a40f
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h
@@ -0,0 +1,38 @@
+$NetBSD: patch-media_webrtc_trunk_webrtc_voice__engine_voice__engine__defines.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/trunk/webrtc/voice_engine/voice_engine_defines.h.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/trunk/webrtc/voice_engine/voice_engine_defines.h
+@@ -414,7 +414,7 @@ namespace webrtc
+ // *** WEBRTC_MAC ***
+ // including iPhone
+
+-#ifdef WEBRTC_MAC
++#if defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+ #include <pthread.h>
+ #include <sys/types.h>
+@@ -431,6 +431,7 @@ namespace webrtc
+ #include <sched.h>
+ #include <sys/time.h>
+ #include <time.h>
++#if !defined(WEBRTC_BSD)
+ #include <AudioUnit/AudioUnit.h>
+ #if !defined(WEBRTC_IOS)
+ #include <CoreServices/CoreServices.h>
+@@ -439,6 +440,7 @@ namespace webrtc
+ #include <AudioToolbox/AudioConverter.h>
+ #include <CoreAudio/HostTime.h>
+ #endif
++#endif
+
+ #define DWORD unsigned long int
+ #define WINAPI
+@@ -531,7 +533,7 @@ namespace webrtc
+
+ #else
+ #define IPHONE_NOT_SUPPORTED(stat)
+-#endif // #ifdef WEBRTC_MAC
++#endif // #if defined(WEBRTC_BSD) || defined(WEBRTC_MAC)
+
+
+
diff --git a/www/firefox/patches/patch-media_webrtc_webrtc__config.gypi b/www/firefox/patches/patch-media_webrtc_webrtc__config.gypi
new file mode 100644
index 00000000000..2b827584637
--- /dev/null
+++ b/www/firefox/patches/patch-media_webrtc_webrtc__config.gypi
@@ -0,0 +1,12 @@
+$NetBSD: patch-media_webrtc_webrtc__config.gypi,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/webrtc/webrtc_config.gypi.orig 2013-05-11 19:19:46.000000000 +0000
++++ media/webrtc/webrtc_config.gypi
+@@ -14,7 +14,6 @@
+ 'include_internal_video_render': 0,
+ 'clang_use_chrome_plugins': 0,
+ 'enable_protobuf': 0,
+- 'include_pulse_audio': 0,
+ 'include_tests': 0,
+ # use_system_lib* still seems to be in use in trunk/build
+ 'use_system_libjpeg': 0,
diff --git a/www/firefox/patches/patch-mp b/www/firefox/patches/patch-mp
new file mode 100644
index 00000000000..4060c67e8bd
--- /dev/null
+++ b/www/firefox/patches/patch-mp
@@ -0,0 +1,23 @@
+$NetBSD: patch-mp,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+--- media/libsydneyaudio/src/Makefile.in.orig 2013-05-11 19:19:43.000000000 +0000
++++ media/libsydneyaudio/src/Makefile.in
+@@ -70,6 +70,18 @@ CSRCS = \
+ $(NULL)
+ endif
+
++ifdef MOZ_PULSEAUDIO
++CSRCS = \
++ sydney_audio_pulseaudio.c \
++ $(NULL)
++endif
++
++ifdef MOZ_PULSEAUDIO
++CSRCS = \
++ sydney_audio_pulseaudio.c \
++ $(NULL)
++endif
++
+ ifeq ($(OS_ARCH),WINNT)
+ OS_LIBS += winmm.lib
+ endif
diff --git a/www/firefox/patches/patch-netwerk_sctp_src_Makefile.in b/www/firefox/patches/patch-netwerk_sctp_src_Makefile.in
new file mode 100644
index 00000000000..ac190313978
--- /dev/null
+++ b/www/firefox/patches/patch-netwerk_sctp_src_Makefile.in
@@ -0,0 +1,23 @@
+$NetBSD: patch-netwerk_sctp_src_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- netwerk/sctp/src/Makefile.in.orig 2013-05-11 19:19:49.000000000 +0000
++++ netwerk/sctp/src/Makefile.in
+@@ -114,11 +114,18 @@ DEFINES += \
+ -U__FreeBSD__ \
+ $(NULL)
+ else
++ifeq ($(OS_TARGET),NetBSD)
++DEFINES += \
++ -D__Userspace_os_NetBSD=1 \
++ -U__NetBSD__ \
++ $(NULL)
++else
+ #error Unsupported platform!
+ endif
+ endif
+ endif
+ endif
++endif
+
+ include $(topsrcdir)/config/config.mk
+ include $(topsrcdir)/ipc/chromium/chromium-config.mk
diff --git a/www/firefox/patches/patch-netwerk_sctp_src_netinet_sctp__os__userspace.h b/www/firefox/patches/patch-netwerk_sctp_src_netinet_sctp__os__userspace.h
new file mode 100644
index 00000000000..ce6a786c477
--- /dev/null
+++ b/www/firefox/patches/patch-netwerk_sctp_src_netinet_sctp__os__userspace.h
@@ -0,0 +1,14 @@
+$NetBSD: patch-netwerk_sctp_src_netinet_sctp__os__userspace.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- netwerk/sctp/src/netinet/sctp_os_userspace.h.orig 2013-05-11 19:19:49.000000000 +0000
++++ netwerk/sctp/src/netinet/sctp_os_userspace.h
+@@ -395,7 +395,9 @@ typedef pthread_t userland_thread_t;
+ #define MA_OWNED 7 /* sys/mutex.h typically on FreeBSD */
+ #if !defined(__Userspace_os_FreeBSD)
+ struct mtx {int dummy;};
++#if !defined(__Userspace_os_NetBSD)
+ struct selinfo {int dummy;};
++#endif
+ struct sx {int dummy;};
+ #endif
+
diff --git a/www/firefox/patches/patch-netwerk_sctp_src_user__recv__thread.c b/www/firefox/patches/patch-netwerk_sctp_src_user__recv__thread.c
new file mode 100644
index 00000000000..39275b9effa
--- /dev/null
+++ b/www/firefox/patches/patch-netwerk_sctp_src_user__recv__thread.c
@@ -0,0 +1,13 @@
+$NetBSD: patch-netwerk_sctp_src_user__recv__thread.c,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- netwerk/sctp/src/user_recv_thread.c.orig 2013-05-11 19:19:49.000000000 +0000
++++ netwerk/sctp/src/user_recv_thread.c
+@@ -35,7 +35,7 @@
+ #include <netinet/in.h>
+ #include <unistd.h>
+ #include <pthread.h>
+-#if !defined(__Userspace_os_FreeBSD)
++#if !defined(__Userspace_os_FreeBSD) && !defined(__Userspace_os_NetBSD)
+ #include <sys/uio.h>
+ #else
+ #include <user_ip6_var.h>
diff --git a/www/firefox/patches/patch-netwerk_sctp_src_user__socketvar.h b/www/firefox/patches/patch-netwerk_sctp_src_user__socketvar.h
new file mode 100644
index 00000000000..e7f07a0cd6c
--- /dev/null
+++ b/www/firefox/patches/patch-netwerk_sctp_src_user__socketvar.h
@@ -0,0 +1,33 @@
+$NetBSD: patch-netwerk_sctp_src_user__socketvar.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- netwerk/sctp/src/user_socketvar.h.orig 2013-05-11 19:19:49.000000000 +0000
++++ netwerk/sctp/src/user_socketvar.h
+@@ -47,7 +47,7 @@
+ /* #include <sys/_lock.h> was 0 byte file */
+ /* #include <sys/_mutex.h> was 0 byte file */
+ /* #include <sys/_sx.h> */ /*__Userspace__ alternative?*/
+-#if !defined(__Userspace_os_Windows) && !defined(__Userspace_os_FreeBSD)
++#if !defined(__Userspace_os_Windows) && !defined(__Userspace_os_FreeBSD) && !defined(__Userspace_os_NetBSD)
+ #include <sys/uio.h>
+ #endif
+ #define SOCK_MAXADDRLEN 255
+@@ -64,16 +64,18 @@
+ #define ERESTART (-1)
+ #endif
+
+-#if !defined(__Userspace_os_Darwin)
++#if !defined(__Userspace_os_Darwin) && !defined(__Userspace_os_NetBSD)
+ enum uio_rw { UIO_READ, UIO_WRITE };
+ #endif
+
++#if !defined(__Userspace_os_NetBSD)
+ /* Segment flag values. */
+ enum uio_seg {
+ UIO_USERSPACE, /* from user data space */
+ UIO_SYSSPACE, /* from system space */
+ UIO_NOCOPY /* don't copy, already in object */
+ };
++#endif
+
+ struct proc {
+ int stub; /* struct proc is a dummy for __Userspace__ */
diff --git a/www/firefox/patches/patch-pa b/www/firefox/patches/patch-pa
new file mode 100644
index 00000000000..f057e11d868
--- /dev/null
+++ b/www/firefox/patches/patch-pa
@@ -0,0 +1,11 @@
+$NetBSD: patch-pa,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xulrunner/installer/mozilla-js.pc.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xulrunner/installer/mozilla-js.pc.in
+@@ -6,5 +6,5 @@ Name: JavaScript
+ Description: The Mozilla JavaScript Library
+ Version: %MOZILLA_VERSION%
+ Requires: %NSPR_NAME% >= %NSPR_VERSION%
+-Libs: -L${sdkdir}/lib %MOZ_JS_LINK%
++Libs: -Wl,-R${prefix}/lib/xulrunner -Wl,-R${prefix}/lib/xulrunner -L${prefix}/lib/xulrunner %MOZ_JS_LINK%
+ Cflags: -I${includedir} -DXP_UNIX -DJS_THREADSAFE
diff --git a/www/firefox/patches/patch-pb b/www/firefox/patches/patch-pb
new file mode 100644
index 00000000000..5404fd7b00c
--- /dev/null
+++ b/www/firefox/patches/patch-pb
@@ -0,0 +1,11 @@
+$NetBSD: patch-pb,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xulrunner/installer/libxul.pc.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xulrunner/installer/libxul.pc.in
+@@ -7,5 +7,5 @@ Name: libxul
+ Description: The Mozilla Runtime and Embedding Engine
+ Version: %MOZILLA_VERSION%
+ Requires: %NSPR_NAME% >= %NSPR_VERSION%
+-Libs: -L${sdkdir}/lib %MOZ_XUL_LINK%
++Libs: -Wl,-R${prefix}/lib/xulrunner -Wl,-R${prefix}/lib/xulrunner -L${prefix}/lib/xulrunner %MOZ_XUL_LINK%
+ Cflags: -I${includedir} %WCHAR_CFLAGS%
diff --git a/www/firefox/patches/patch-pc b/www/firefox/patches/patch-pc
new file mode 100644
index 00000000000..23a339dcaf8
--- /dev/null
+++ b/www/firefox/patches/patch-pc
@@ -0,0 +1,12 @@
+$NetBSD: patch-pc,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xulrunner/installer/libxul-embedding.pc.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xulrunner/installer/libxul-embedding.pc.in
+@@ -6,5 +6,6 @@ idldir=%idldir%
+ Name: libxul-embedding
+ Description: Static library for version-independent embedding of the Mozilla runtime
+ Version: %MOZILLA_VERSION%
+-Libs: -L${sdkdir}/lib -lxpcomglue -ldl
++# XXXtnn -ldl removed
++Libs: -Wl,-R${prefix}/lib/xulrunner -Wl,-R${prefix}/lib/xulrunner -L${prefix}/lib/xulrunner -lxpcomglue
+ Cflags: -DXPCOM_GLUE -I${includedir} %WCHAR_CFLAGS%
diff --git a/www/firefox/patches/patch-pd b/www/firefox/patches/patch-pd
new file mode 100644
index 00000000000..aafec9dba3b
--- /dev/null
+++ b/www/firefox/patches/patch-pd
@@ -0,0 +1,11 @@
+$NetBSD: patch-pd,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xulrunner/installer/mozilla-nss.pc.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xulrunner/installer/mozilla-nss.pc.in
+@@ -6,5 +6,5 @@ Name: NSS
+ Description: Mozilla Network Security Services
+ Version: %MOZILLA_VERSION%
+ Requires: %NSPR_NAME% >= %NSPR_VERSION%
+-Libs: -L${sdkdir}/lib -lsmime3 -lssl3 -lnss3 -lnssutil3
++Libs: -Wl,-R${prefix}/lib/xulrunner -Wl,-R${prefix}/lib/xulrunner -L${prefix}/lib/xulrunner -lsmime3 -lssl3 -lnss3 -lnssutil3
+ Cflags: -I${includedir}
diff --git a/www/firefox/patches/patch-pg b/www/firefox/patches/patch-pg
new file mode 100644
index 00000000000..ff456516150
--- /dev/null
+++ b/www/firefox/patches/patch-pg
@@ -0,0 +1,14 @@
+$NetBSD: patch-pg,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xulrunner/installer/mozilla-nspr.pc.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xulrunner/installer/mozilla-nspr.pc.in
+@@ -5,7 +5,5 @@ includedir=%includedir%
+ Name: NSPR
+ Description: The Netscape Portable Runtime
+ Version: %NSPR_VERSION%
+-Libs: %FULL_NSPR_LIBS%
+-Cflags: %FULL_NSPR_CFLAGS%
+-
+-
++Libs: -Wl,-R${prefix}/lib/xulrunner -Wl,-R${prefix}/lib/xulrunner -L${prefix}/lib/xulrunner -lplds4 -lplc4 -lnspr4 -pthread
++Cflags: -I${includedir}
diff --git a/www/firefox/patches/patch-rc b/www/firefox/patches/patch-rc
new file mode 100644
index 00000000000..77238838924
--- /dev/null
+++ b/www/firefox/patches/patch-rc
@@ -0,0 +1,14 @@
+$NetBSD: patch-rc,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+--- browser/branding/unofficial/locales/en-US/brand.dtd.orig 2013-01-04 23:44:28.000000000 +0000
++++ browser/branding/unofficial/locales/en-US/brand.dtd
+@@ -2,7 +2,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/. -->
+
+-<!ENTITY brandShortName "Mozilla Developer Preview">
+-<!ENTITY brandFullName "Mozilla Developer Preview">
++<!ENTITY brandShortName "Browser">
++<!ENTITY brandFullName "Browser">
+ <!ENTITY vendorShortName "mozilla.org">
+ <!ENTITY trademarkInfo.part1 " ">
diff --git a/www/firefox/patches/patch-security_manager_ssl_src_nsNSSComponent.cpp b/www/firefox/patches/patch-security_manager_ssl_src_nsNSSComponent.cpp
new file mode 100644
index 00000000000..29f25a3572a
--- /dev/null
+++ b/www/firefox/patches/patch-security_manager_ssl_src_nsNSSComponent.cpp
@@ -0,0 +1,12 @@
+$NetBSD: patch-security_manager_ssl_src_nsNSSComponent.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- security/manager/ssl/src/nsNSSComponent.cpp.orig 2013-05-11 19:19:50.000000000 +0000
++++ security/manager/ssl/src/nsNSSComponent.cpp
+@@ -72,6 +72,7 @@
+ #include "nss.h"
+ #include "pk11func.h"
+ #include "ssl.h"
++#define NSS_ENABLE_ECC 1
+ #include "sslproto.h"
+ #include "secmod.h"
+ #include "sechash.h"
diff --git a/www/firefox/patches/patch-toolkit_library_Makefile.in b/www/firefox/patches/patch-toolkit_library_Makefile.in
new file mode 100644
index 00000000000..008c4950b8a
--- /dev/null
+++ b/www/firefox/patches/patch-toolkit_library_Makefile.in
@@ -0,0 +1,12 @@
+$NetBSD: patch-toolkit_library_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- toolkit/library/Makefile.in.orig 2013-05-11 19:19:54.000000000 +0000
++++ toolkit/library/Makefile.in
+@@ -405,6 +405,7 @@ endif
+ EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
+
+ ifdef MOZ_WEBRTC
++EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
+ ifdef MOZ_PEERCONNECTION
+ COMPONENT_LIBS += peerconnection
+ endif
diff --git a/www/firefox/patches/patch-toolkit_toolkit-tiers.mk b/www/firefox/patches/patch-toolkit_toolkit-tiers.mk
new file mode 100644
index 00000000000..6eaceeaf07e
--- /dev/null
+++ b/www/firefox/patches/patch-toolkit_toolkit-tiers.mk
@@ -0,0 +1,13 @@
+$NetBSD: patch-toolkit_toolkit-tiers.mk,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- toolkit/toolkit-tiers.mk.orig 2013-01-04 23:44:46.000000000 +0000
++++ toolkit/toolkit-tiers.mk
+@@ -43,7 +43,7 @@ ifdef MOZ_UPDATER
+ ifndef MOZ_NATIVE_BZ2
+ tier_platform_dirs += modules/libbz2
+ endif
+-tier_platform_dirs += other-licenses/bsdiff
++#tier_platform_dirs += other-licenses/bsdiff
+ endif
+
+ tier_platform_dirs += gfx/qcms
diff --git a/www/firefox/patches/patch-xa b/www/firefox/patches/patch-xa
new file mode 100644
index 00000000000..3b4141a0504
--- /dev/null
+++ b/www/firefox/patches/patch-xa
@@ -0,0 +1,119 @@
+$NetBSD: patch-xa,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/sparc64 xptcall support code. From pkgsrc/www/firefox3/files/
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc64_netbsd.s.orig 2013-01-09 15:25:54.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc64_netbsd.s
+@@ -0,0 +1,112 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * The contents of this file are subject to the Netscape Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/NPL/
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The Original Code is mozilla.org code.
++ *
++ * The Initial Developer of the Original Code is Netscape
++ * Communications Corporation. Portions created by Netscape are
++ * Copyright (C) 1998 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ */
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++ .global NS_InvokeByIndex_P
++ .type NS_InvokeByIndex_P, #function
++/*
++ NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant* params);
++
++*/
++/*
++ * Note: To simplify stack handling we allocate an extra stack
++ * frame here. In principle invoke_copy_to_stack() could
++ * save the parameters our caller's frame and we could
++ * reclaim the stackframe and do a tail call to the
++ * function. However, this gets complicated....
++ *
++ * The vtable consist of be:
++ *
++ * struct {
++ * short __delta;
++ * short __index;
++ * union {
++ * P __pfn;
++ * short __delta2;
++ * } __pfn_or_delta2;
++ * };
++ *
++ * See gcc/cp/cp-tree.h
++ */
++
++NS_InvokeByIndex_P:
++ save %sp,-(128 + 64),%sp ! room for the register window and
++ ! struct pointer, rounded up to 0 % 64
++ sll %i2,4,%l0 ! assume the worst case
++ ! paramCount * 2 * 8 bytes
++ cmp %l0, 0 ! are there any args? If not,
++ be .invoke ! no need to copy args to stack
++ nop
++
++ sub %sp,%l0,%sp ! create the additional stack space
++ add %sp,0x7ff+136,%o0 ! step past the register window, the
++ ! struct result pointer and the 'this' slot
++ mov %i2,%o1 ! paramCount
++ call invoke_copy_to_stack
++ mov %i3,%o2 ! params
++
++!
++! load arguments from stack into the outgoing registers
++! BIAS is 0x7ff (2047)
++!
++
++! load the %o1..5 64bit (extended word) output registers registers
++ ldx [%sp + 0x7ff + 136],%o1 ! %i1
++ ldx [%sp + 0x7ff + 144],%o2 ! %i2
++ ldx [%sp + 0x7ff + 152],%o3 ! %i3
++ ldx [%sp + 0x7ff + 160],%o4 ! %i4
++ ldx [%sp + 0x7ff + 168],%o5 ! %i5
++
++! load the even number double registers starting with %f2
++ ldd [%sp + 0x7ff + 136],%f2
++ ldd [%sp + 0x7ff + 144],%f4
++ ldd [%sp + 0x7ff + 152],%f6
++ ldd [%sp + 0x7ff + 160],%f8
++ ldd [%sp + 0x7ff + 168],%f10
++ ldd [%sp + 0x7ff + 176],%f12
++ ldd [%sp + 0x7ff + 184],%f14
++ ldd [%sp + 0x7ff + 192],%f16
++ ldd [%sp + 0x7ff + 200],%f18
++ ldd [%sp + 0x7ff + 208],%f20
++ ldd [%sp + 0x7ff + 216],%f22
++ ldd [%sp + 0x7ff + 224],%f24
++ ldd [%sp + 0x7ff + 232],%f26
++ ldd [%sp + 0x7ff + 240],%f28
++ ldd [%sp + 0x7ff + 248],%f30
++
++!
++! calculate the target address from the vtable
++!
++.invoke:
++ sll %i1,3,%l0 ! index *= 8
++ ldx [%i0],%l1 ! *this --> address of vtable
++ ldx [%l0 + %l1],%l0 ! this->vtable[index] --> address
++
++ jmpl %l0,%o7 ! call the routine
++ mov %i0,%o0 ! move 'this' pointer to out register
++
++ mov %o0,%i0 ! propagate return value
++ ret
++ restore
++
++ .size NS_InvokeByIndex_P, .-NS_InvokeByIndex_P
diff --git a/www/firefox/patches/patch-xb b/www/firefox/patches/patch-xb
new file mode 100644
index 00000000000..8e6bc80d8b2
--- /dev/null
+++ b/www/firefox/patches/patch-xb
@@ -0,0 +1,91 @@
+$NetBSD: patch-xb,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/sparc64 xptcall support code. From pkgsrc/www/firefox3/files/
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_sparc64_netbsd.cpp.orig 2013-01-09 15:25:54.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_sparc64_netbsd.cpp
+@@ -0,0 +1,84 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * The contents of this file are subject to the Netscape Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/NPL/
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The Original Code is mozilla.org code.
++ *
++ * The Initial Developer of the Original Code is Netscape
++ * Communications Corporation. Portions created by Netscape are
++ * Copyright (C) 1998 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ */
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++#include "xptcprivate.h"
++
++#if !defined(__sparc64__) && !defined(_LP64)
++#error "This code is for Sparc64 only"
++#endif
++
++extern "C" PRUint32
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
++{
++ /*
++ We need to copy the parameters for this function to locals and use them
++ from there since the parameters occupy the same stack space as the stack
++ we're trying to populate.
++ */
++ PRUint64 *l_d = d;
++ nsXPTCVariant *l_s = s;
++ PRUint64 l_paramCount = paramCount;
++ PRUint64 regCount = 0; // return the number of registers to load from the stack
++
++ for(PRUint64 i = 0; i < l_paramCount; i++, l_d++, l_s++)
++ {
++ if (regCount < 5) regCount++;
++
++ if (l_s->IsPtrData())
++ {
++ *l_d = (PRUint64)l_s->ptr;
++ continue;
++ }
++ switch (l_s->type)
++ {
++ case nsXPTType::T_I8 : *((PRInt64*)l_d) = l_s->val.i8; break;
++ case nsXPTType::T_I16 : *((PRInt64*)l_d) = l_s->val.i16; break;
++ case nsXPTType::T_I32 : *((PRInt64*)l_d) = l_s->val.i32; break;
++ case nsXPTType::T_I64 : *((PRInt64*)l_d) = l_s->val.i64; break;
++
++ case nsXPTType::T_U8 : *((PRUint64*)l_d) = l_s->val.u8; break;
++ case nsXPTType::T_U16 : *((PRUint64*)l_d) = l_s->val.u16; break;
++ case nsXPTType::T_U32 : *((PRUint64*)l_d) = l_s->val.u32; break;
++ case nsXPTType::T_U64 : *((PRUint64*)l_d) = l_s->val.u64; break;
++
++ /* in the case of floats, we want to put the bits in to the
++ 64bit space right justified... floats in the paramter array on
++ sparcv9 use odd numbered registers.. %f1, %f3, so we have to skip
++ the space that would be occupied by %f0, %f2, etc.
++ */
++ case nsXPTType::T_FLOAT : *(((float*)l_d) + 1) = l_s->val.f; break;
++ case nsXPTType::T_DOUBLE: *((double*)l_d) = l_s->val.d; break;
++ case nsXPTType::T_BOOL : *((PRInt64*)l_d) = l_s->val.b; break;
++ case nsXPTType::T_CHAR : *((PRUint64*)l_d) = l_s->val.c; break;
++ case nsXPTType::T_WCHAR : *((PRInt64*)l_d) = l_s->val.wc; break;
++
++ default:
++ // all the others are plain pointer types
++ *((void**)l_d) = l_s->val.p;
++ break;
++ }
++ }
++
++ return regCount;
++}
diff --git a/www/firefox/patches/patch-xc b/www/firefox/patches/patch-xc
new file mode 100644
index 00000000000..cb184ec9803
--- /dev/null
+++ b/www/firefox/patches/patch-xc
@@ -0,0 +1,73 @@
+$NetBSD: patch-xc,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/sparc64 xptcall support code. From pkgsrc/www/firefox3/files/
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_sparc64_netbsd.s.orig 2013-01-09 15:25:54.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_sparc64_netbsd.s
+@@ -0,0 +1,66 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * The contents of this file are subject to the Netscape Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/NPL/
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The Original Code is mozilla.org code.
++ *
++ * The Initial Developer of the Original Code is Netscape
++ * Communications Corporation. Portions created by Netscape are
++ * Copyright (C) 1999 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ */
++
++ .global SharedStub
++
++/*
++ in the frame for the function that called SharedStub are the
++ rest of the parameters we need
++
++*/
++
++SharedStub:
++! we don't create a new frame yet, but work within the frame of the calling
++! function to give ourselves the other parameters we want
++
++ mov %o0, %o1 ! shuffle the index up to 2nd place
++ mov %i0, %o0 ! the original 'this'
++ add %fp, 0x7ff + 136, %o2 ! previous stack top adjusted to the first argument slot (beyond 'this')
++
++! save off the original incoming parameters that arrived in
++! registers, the ABI guarantees the space for us to do this
++ stx %i1, [%fp + 0x7ff + 136]
++ stx %i2, [%fp + 0x7ff + 144]
++ stx %i3, [%fp + 0x7ff + 152]
++ stx %i4, [%fp + 0x7ff + 160]
++ stx %i5, [%fp + 0x7ff + 168]
++! now we can build our own stack frame
++ save %sp,-(128 + 64),%sp ! room for the register window and
++ ! struct pointer, rounded up to 0 % 64
++! our function now appears to have been called
++! as SharedStub(nsISupports* that, PRUint32 index, PRUint32* args)
++! so we can just copy these through
++
++ mov %i0, %o0
++ mov %i1, %o1
++ mov %i2, %o2
++ call PrepareAndDispatch
++ nop
++ mov %o0,%i0 ! propagate return value
++ b .LL1
++ nop
++.LL1:
++ ret
++ restore
++
++ .size SharedStub, .-SharedStub
++ .type SharedStub, #function
diff --git a/www/firefox/patches/patch-xd b/www/firefox/patches/patch-xd
new file mode 100644
index 00000000000..d59e0de290c
--- /dev/null
+++ b/www/firefox/patches/patch-xd
@@ -0,0 +1,126 @@
+$NetBSD: patch-xd,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/sparc64 xptcall support code. From pkgsrc/www/firefox3/files/
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_netbsd.cpp.orig 2013-01-09 15:25:54.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_netbsd.cpp
+@@ -0,0 +1,119 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
++ *
++ * The contents of this file are subject to the Netscape Public
++ * License Version 1.1 (the "License"); you may not use this file
++ * except in compliance with the License. You may obtain a copy of
++ * the License at http://www.mozilla.org/NPL/
++ *
++ * Software distributed under the License is distributed on an "AS
++ * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
++ * implied. See the License for the specific language governing
++ * rights and limitations under the License.
++ *
++ * The Original Code is mozilla.org code.
++ *
++ * The Initial Developer of the Original Code is Netscape
++ * Communications Corporation. Portions created by Netscape are
++ * Copyright (C) 1999 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ */
++
++/* Implement shared vtbl methods. */
++
++#include "xptcprivate.h"
++#include "xptiprivate.h"
++
++#if defined(sparc) || defined(__sparc__)
++
++extern "C" nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, PRUint64 methodIndex, PRUint64* args)
++{
++
++#define PARAM_BUFFER_COUNT 16
++
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint8 paramCount;
++ PRUint8 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->mEntry->GetMethodInfo(PRUint16(methodIndex), &info);
++ NS_ASSERTION(info,"no interface info");
++
++ paramCount = info->GetParamCount();
++
++ // setup variant array pointer
++ if(paramCount > PARAM_BUFFER_COUNT)
++ dispatchParams = new nsXPTCMiniVariant[paramCount];
++ else
++ dispatchParams = paramBuffer;
++ NS_ASSERTION(dispatchParams,"no place for params");
++ if (!dispatchParams)
++ return NS_ERROR_OUT_OF_MEMORY;
++
++ PRUint64* ap = args;
++ for(i = 0; i < paramCount; i++, ap++)
++ {
++ const nsXPTParamInfo& param = info->GetParam(i);
++ const nsXPTType& type = param.GetType();
++ nsXPTCMiniVariant* dp = &dispatchParams[i];
++
++ if(param.IsOut() || !type.IsArithmetic())
++ {
++ dp->val.p = (void*) *ap;
++ continue;
++ }
++ // else
++ switch(type)
++ {
++ case nsXPTType::T_BOOL : dp->val.b = *((PRInt64*) ap); break;
++ case nsXPTType::T_CHAR : dp->val.c = *((PRUint64*) ap); break;
++ case nsXPTType::T_WCHAR : dp->val.wc = *((PRInt64*) ap); break;
++ case nsXPTType::T_I8 : dp->val.i8 = *((PRInt64*) ap); break;
++ case nsXPTType::T_I16 : dp->val.i16 = *((PRInt64*) ap); break;
++ case nsXPTType::T_I32 : dp->val.i32 = *((PRInt64*) ap); break;
++ case nsXPTType::T_I64 : dp->val.i64 = *((PRInt64*) ap); break;
++ case nsXPTType::T_U8 : dp->val.u8 = *((PRUint64*) ap); break;
++ case nsXPTType::T_U16 : dp->val.u16 = *((PRUint64*)ap); break;
++ case nsXPTType::T_U32 : dp->val.u32 = *((PRUint64*)ap); break;
++ case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) ap); break;
++ case nsXPTType::T_FLOAT : dp->val.f = ((float*) ap)[1]; break;
++ case nsXPTType::T_DOUBLE : dp->val.d = *((double*) ap); break;
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->mOuter->CallMethod((PRUint16)methodIndex, info, dispatchParams);
++
++ if(dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++extern "C" int SharedStub(int, int*);
++
++#define STUB_ENTRY(n) \
++nsresult nsXPTCStubBase::Stub##n() \
++{ \
++ int dummy; /* defeat tail-call optimization */ \
++ return SharedStub(n, &dummy); \
++}
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
++
++#endif /* sparc || __sparc__ */
diff --git a/www/firefox/patches/patch-xe b/www/firefox/patches/patch-xe
new file mode 100644
index 00000000000..c279674d445
--- /dev/null
+++ b/www/firefox/patches/patch-xe
@@ -0,0 +1,75 @@
+$NetBSD: patch-xe,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_netbsd_m68k.cpp.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_netbsd_m68k.cpp
+@@ -100,6 +100,15 @@ extern "C" {
+ }
+ }
+
++/*
++ * SYMBOL PREFIX must be "_" for aout symbols and "" for ELF
++ */
++#ifndef __ELF__
++#define SYMBOLPREFIX "_"
++#else
++#define SYMBOLPREFIX
++#endif
++
+ XPTC_PUBLIC_API(nsresult)
+ XPTC_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
+ uint32_t paramCount, nsXPTCVariant* params)
+@@ -107,30 +116,30 @@ XPTC_InvokeByIndex(nsISupports* that, ui
+ uint32_t result;
+
+ __asm__ __volatile__(
+- "movl %4, sp@-\n\t"
+- "movl %3, sp@-\n\t"
+- "jbsr _invoke_count_words\n\t" /* count words */
+- "addql #8, sp\n\t"
+- "lsll #2, d0\n\t" /* *= 4 */
+- "movl sp, a2\n\t" /* save original sp */
+- "subl d0, sp\n\t" /* make room for params */
+- "movl sp, a0\n\t"
+- "movl %4, sp@-\n\t"
+- "movl %3, sp@-\n\t"
+- "movl a0, sp@-\n\t"
+- "jbsr _invoke_copy_to_stack\n\t" /* copy params */
+- "addl #12, sp\n\t"
+- "movl %1, a0\n\t"
+- "movl a0@, a1\n\t"
+- "movl %2, d0\n\t" /* function index */
+- "movl a0, d1\n\t"
+- "movw a1@(8,d0:l:8), a0\n\t"
+- "addl a0, d1\n\t"
+- "movl a1@(12,d0:l:8), a1\n\t"
+- "movl d1, sp@-\n\t"
+- "jbsr a1@\n\t"
+- "movl a2, sp\n\t" /* restore original sp */
+- "movl d0, %0\n\t"
++ "movl %4, %%sp@-\n\t"
++ "movl %3, %%sp@-\n\t"
++ "jbsr "SYMBOLPREFIX"invoke_count_words\n\t" /* count words */
++ "addql #8, %%sp\n\t"
++ "lsll #2, %%d0\n\t" /* *= 4 */
++ "movl %%sp, %%a2\n\t" /* save original sp */
++ "subl %%d0, %%sp\n\t" /* make room for params */
++ "movl %%sp, %%a0\n\t"
++ "movl %4, %%sp@-\n\t"
++ "movl %3, %%sp@-\n\t"
++ "movl %%a0, %%sp@-\n\t"
++ "jbsr "SYMBOLPREFIX"invoke_copy_to_stack\n\t" /* copy params */
++ "addl #12, %%sp\n\t"
++ "movl %1, %%a0\n\t"
++ "movl %%a0@, %%a1\n\t"
++ "movl %2, %%d0\n\t" /* function index */
++ "movl %%a0, %%d1\n\t"
++ "movw %%a1@(8,%%d0:l:8), %%a0\n\t"
++ "addl %%a0, %%d1\n\t"
++ "movl %%a1@(12,%%d0:l:8), %%a1\n\t"
++ "movl %%d1, %%sp@-\n\t"
++ "jbsr %%a1@\n\t"
++ "movl %%a2, %%sp\n\t" /* restore original sp */
++ "movl %%d0, %0\n\t"
+ : "=g" (result) /* %0 */
+ : "g" (that), /* %1 */
+ "g" (methodIndex), /* %2 */
diff --git a/www/firefox/patches/patch-xf b/www/firefox/patches/patch-xf
new file mode 100644
index 00000000000..677b4d2fd74
--- /dev/null
+++ b/www/firefox/patches/patch-xf
@@ -0,0 +1,43 @@
+$NetBSD: patch-xf,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/m68k xptcall support code. From pkgsrc/www/firefox/patch-ae.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_netbsd_m68k.cpp.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_netbsd_m68k.cpp
+@@ -91,17 +91,27 @@ extern "C" {
+ }
+ }
+
++/*
++ * Beware: use % instead of %% for register identifiers in a preprocessor macro
++ * SYMBOL PREFIX must be "_" for aout and "" for ELF
++ */
++#ifndef __ELF__
++#define SYMBOLPREFIX "_"
++#else
++#define SYMBOLPREFIX
++#endif
++
+ #define STUB_ENTRY(n) \
+ __asm__( \
+- ".global _Stub"#n"__14nsXPTCStubBase\n\t" \
+-"_Stub"#n"__14nsXPTCStubBase:\n\t" \
+- "link a6,#0 \n\t" \
+- "lea a6@(12), a0 \n\t" /* pointer to args */ \
+- "movl a0, sp@- \n\t" \
+- "movl #"#n", sp@- \n\t" /* method index */ \
+- "movl a6@(8), sp@- \n\t" /* this */ \
+- "jbsr _PrepareAndDispatch \n\t" \
+- "unlk a6 \n\t" \
++ ".global "SYMBOLPREFIX"Stub"#n"__14nsXPTCStubBase\n\t" \
++SYMBOLPREFIX"Stub"#n"__14nsXPTCStubBase:\n\t" \
++ "link %a6,#0 \n\t" \
++ "lea %a6@(12), %a0 \n\t" /* pointer to args */ \
++ "movl %a0, %sp@- \n\t" \
++ "movl #"#n", %sp@- \n\t" /* method index */ \
++ "movl %a6@(8), %sp@- \n\t" /* this */ \
++ "jbsr "SYMBOLPREFIX"PrepareAndDispatch\n\t" \
++ "unlk %a6 \n\t" \
+ "rts \n\t" \
+ );
+
diff --git a/www/firefox/patches/patch-xg b/www/firefox/patches/patch-xg
new file mode 100644
index 00000000000..d7acfa1fd6d
--- /dev/null
+++ b/www/firefox/patches/patch-xg
@@ -0,0 +1,33 @@
+$NetBSD: patch-xg,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/arm xptcall support code. From pkgsrc/www/firefox/patch-bm.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm_netbsd.cpp.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_arm_netbsd.cpp
+@@ -86,18 +86,23 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ * so they are contiguous with values passed on the stack, and then calls
+ * PrepareAndDispatch() to do the dirty work.
+ */
++#ifndef __ELF__
++#define SYMBOLPREFIX "_"
++#else
++#define SYMBOLPREFIX
++#endif
+
+ #define STUB_ENTRY(n) \
+ __asm__( \
+- ".global _Stub"#n"__14nsXPTCStubBase\n\t" \
+-"_Stub"#n"__14nsXPTCStubBase:\n\t" \
++ ".global "SYMBOLPREFIX"Stub"#n"__14nsXPTCStubBase\n\t" \
++SYMBOLPREFIX"Stub"#n"__14nsXPTCStubBase:\n\t" \
+ "stmfd sp!, {r1, r2, r3} \n\t" \
+ "mov ip, sp \n\t" \
+ "stmfd sp!, {fp, ip, lr, pc} \n\t" \
+ "sub fp, ip, #4 \n\t" \
+ "mov r1, #"#n" \n\t" /* = methodIndex */ \
+ "add r2, sp, #16 \n\t" \
+- "bl _PrepareAndDispatch__FP14nsXPTCStubBaseUiPUi \n\t" \
++ "bl "SYMBOLPREFIX"PrepareAndDispatch__FP14nsXPTCStubBaseUiPUi \n\t" \
+ "ldmea fp, {fp, sp, lr} \n\t" \
+ "add sp, sp, #12 \n\t" \
+ "mov pc, lr \n\t" \
diff --git a/www/firefox/patches/patch-xj b/www/firefox/patches/patch-xj
new file mode 100644
index 00000000000..b4c0d9a6687
--- /dev/null
+++ b/www/firefox/patches/patch-xj
@@ -0,0 +1,128 @@
+$NetBSD: patch-xj,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD ppc xptcall support code. Originally from pkgsrc/www/mozilla.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_netbsd.cpp.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_ppc_netbsd.cpp
+@@ -6,6 +6,7 @@
+ // Implement shared vtbl methods.
+
+ #include "xptcprivate.h"
++#include "xptiprivate.h"
+
+ // The Linux/PPC ABI (aka PPC/SYSV ABI) passes the first 8 integral
+ // parameters and the first 8 floating point parameters in registers
+@@ -36,7 +37,6 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ {
+ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
+ nsXPTCMiniVariant* dispatchParams = NULL;
+- nsIInterfaceInfo* iface_info = NULL;
+ const nsXPTMethodInfo* info;
+ uint32_t paramCount;
+ uint32_t i;
+@@ -44,11 +44,7 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+
+ NS_ASSERTION(self,"no self");
+
+- self->GetInterfaceInfo(&iface_info);
+- NS_ASSERTION(iface_info,"no interface info");
+- if (! iface_info)
+- return NS_ERROR_UNEXPECTED;
+-
++ self->mEntry->GetMethodInfo(PRUint16(methodIndex), &info);
+ iface_info->GetMethodInfo(uint16_t(methodIndex), &info);
+ NS_ASSERTION(info,"no method info");
+ if (! info)
+@@ -84,8 +80,10 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ if ((uint32_t) ap & 4) ap++; // doubles are 8-byte aligned on stack
+ dp->val.d = *(double*) ap;
+ ap += 2;
++#if __GXX_ABI_VERSION < 100
+ if (gpr < GPR_COUNT)
+ gpr += 2;
++#endif
+ }
+ continue;
+ }
+@@ -95,8 +93,10 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ else {
+ dp->val.f = *(float*) ap;
+ ap += 1;
++#if __GXX_ABI_VERSION < 100
+ if (gpr < GPR_COUNT)
+ gpr += 1;
++#endif
+ }
+ continue;
+ }
+@@ -144,9 +144,9 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ }
+ }
+
+- result = self->CallMethod((uint16_t) methodIndex, info, dispatchParams);
+-
+- NS_RELEASE(iface_info);
++ result = self->mOuter->CallMethod((PRUint16) methodIndex,
++ info,
++ dispatchParams);
+
+ if (dispatchParams != paramBuffer)
+ delete [] dispatchParams;
+@@ -160,7 +160,9 @@ PrepareAndDispatch(nsXPTCStubBase* self,
+ // however, it's quick, dirty, and'll break when the ABI changes on
+ // us, which is what we want ;-).
+
+-#define STUB_ENTRY(n) \
++#if __GXX_ABI_VERSION < 100
++// gcc-2 version
++# define STUB_ENTRY(n) \
+ __asm__ ( \
+ ".section \".text\" \n\t" \
+ ".align 2 \n\t" \
+@@ -171,6 +173,46 @@ __asm__ (
+ "li 11,"#n" \n\t" \
+ "b SharedStub@local \n" \
+ );
++#else
++// gcc-3 version
++//
++// As G++3 ABI contains the length of the functionname in the mangled
++// name, it is difficult to get a generic assembler mechanism like
++// in the G++ 2.95 case.
++// Create names would be like:
++// _ZN14nsXPTCStubBase5Stub1Ev
++// _ZN14nsXPTCStubBase6Stub12Ev
++// _ZN14nsXPTCStubBase7Stub123Ev
++// _ZN14nsXPTCStubBase8Stub1234Ev
++// etc.
++// Use assembler directives to get the names right...
++
++# define STUB_ENTRY(n) \
++__asm__ ( \
++ ".align 2 \n\t" \
++ ".if "#n" < 10 \n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev \n\t" \
++ ".type _ZN14nsXPTCStubBase5Stub"#n"Ev,@function \n\n" \
++"_ZN14nsXPTCStubBase5Stub"#n"Ev: \n\t" \
++ \
++ ".elseif "#n" < 100 \n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev \n\t" \
++ ".type _ZN14nsXPTCStubBase6Stub"#n"Ev,@function \n\n" \
++"_ZN14nsXPTCStubBase6Stub"#n"Ev: \n\t" \
++ \
++ ".elseif "#n" < 1000 \n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev \n\t" \
++ ".type _ZN14nsXPTCStubBase7Stub"#n"Ev,@function \n\n" \
++"_ZN14nsXPTCStubBase7Stub"#n"Ev: \n\t" \
++ \
++ ".else \n\t" \
++ ".err \"stub number "#n" >= 1000 not yet supported\"\n" \
++ ".endif \n\t" \
++ \
++ "li 11,"#n" \n\t" \
++ "b SharedStub@local \n" \
++);
++#endif
+
+ #define SENTINEL_ENTRY(n) \
+ nsresult nsXPTCStubBase::Sentinel##n() \
diff --git a/www/firefox/patches/patch-xk b/www/firefox/patches/patch-xk
new file mode 100644
index 00000000000..3ff76e5d418
--- /dev/null
+++ b/www/firefox/patches/patch-xk
@@ -0,0 +1,72 @@
+$NetBSD: patch-xk,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD ppc xptcall support code. Originally from pkgsrc/www/mozilla.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_netbsd.s.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ppc_netbsd.s
+@@ -25,23 +25,23 @@
+ .type SharedStub,@function
+
+ SharedStub:
+- stwu sp,-112(sp) # room for
+- # linkage (8),
+- # gprData (32),
+- # fprData (64),
+- # stack alignment(8)
++ stwu sp,-112(sp) // room for
++ // linkage (8),
++ // gprData (32),
++ // fprData (64),
++ // stack alignment(8)
+ mflr r0
+- stw r0,116(sp) # save LR backchain
++ stw r0,116(sp) // save LR backchain
+
+- stw r4,12(sp) # save GP registers
+- stw r5,16(sp) # (n.b. that we don't save r3
+- stw r6,20(sp) # because PrepareAndDispatch() is savvy)
++ stw r4,12(sp) // save GP registers
++ stw r5,16(sp) // (n.b. that we don't save r3
++ stw r6,20(sp) // because PrepareAndDispatch() is savvy)
+ stw r7,24(sp)
+ stw r8,28(sp)
+ stw r9,32(sp)
+ stw r10,36(sp)
+
+- stfd f1,40(sp) # save FP registers
++ stfd f1,40(sp) // save FP registers
+ stfd f2,48(sp)
+ stfd f3,56(sp)
+ stfd f4,64(sp)
+@@ -50,21 +50,21 @@ SharedStub:
+ stfd f7,88(sp)
+ stfd f8,96(sp)
+
+- # r3 has the 'self' pointer already
++ // r3 has the 'self' pointer already
+
+- mr r4,r11 # r4 <= methodIndex selector, passed
+- # via r11 in the nsXPTCStubBase::StubXX() call
++ mr r4,r11 // r4 <= methodIndex selector, passed
++ // via r11 in the nsXPTCStubBase::StubXX() call
+
+- addi r5,sp,120 # r5 <= pointer to callers args area,
+- # beyond r3-r10/f1-f8 mapped range
++ addi r5,sp,120 // r5 <= pointer to callers args area,
++ // beyond r3-r10/f1-f8 mapped range
+
+- addi r6,sp,8 # r6 <= gprData
+- addi r7,sp,40 # r7 <= fprData
++ addi r6,sp,8 // r6 <= gprData
++ addi r7,sp,40 // r7 <= fprData
+
+- bl PrepareAndDispatch@local # Go!
++ bl PrepareAndDispatch@local // Go!
+
+- lwz r0,116(sp) # restore LR
++ lwz r0,116(sp) // restore LR
+ mtlr r0
+- la sp,112(sp) # clean up the stack
++ la sp,112(sp) // clean up the stack
+ blr
+
diff --git a/www/firefox/patches/patch-xl b/www/firefox/patches/patch-xl
new file mode 100644
index 00000000000..0619a151cea
--- /dev/null
+++ b/www/firefox/patches/patch-xl
@@ -0,0 +1,74 @@
+$NetBSD: patch-xl,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD ppc xptcall support code. Originally from pkgsrc/www/mozilla.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ppc_netbsd.s
+@@ -20,41 +20,42 @@
+
+ .section ".text"
+ .align 2
+- .globl XPTC_InvokeByIndex
+- .type XPTC_InvokeByIndex,@function
++ .globl NS_InvokeByIndex_P
++ .type NS_InvokeByIndex_P,@function
++
++//
++// NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
++// PRUint32 paramCount, nsXPTCVariant* params)
++//
++
++NS_InvokeByIndex_P:
++ stwu sp,-32(sp) // setup standard stack frame
++ mflr r0 // save LR
++ stw r3,8(sp) // r3 <= that
++ stw r4,12(sp) // r4 <= methodIndex
+
+-#
+-# XPTC_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
+-# uint32_t paramCount, nsXPTCVariant* params)
+-#
+-
+-XPTC_InvokeByIndex:
+- stwu sp,-32(sp) # setup standard stack frame
+- mflr r0 # save LR
+- stw r3,8(sp) # r3 <= that
+- stw r4,12(sp) # r4 <= methodIndex
+ stw r30,16(sp)
+ stw r31,20(sp)
+
+- stw r0,36(sp) # store LR backchain
++ stw r0,36(sp) // store LR backchain
+ mr r31,sp
+
+- rlwinm r10,r5,3,0,27 # r10 = (ParamCount * 2 * 4) & ~0x0f
+- addi r0,r10,96 # reserve stack for GPR and FPR register save area r0 = r10 + 96
+- lwz r9,0(sp) # r9 = backchain
++ rlwinm r10,r5,3,0,27 // r10 = (ParamCount * 2 * 4) & ~0x0f
++ addi r0,r10,96 // reserve stack for GPR and FPR register save area r0 = r10 + 96
++ lwz r9,0(sp) // r9 = backchain
+ neg r0,r0
+- stwux r9,sp,r0 # reserve stack sapce and save SP backchain
++ stwux r9,sp,r0 // reserve stack sapce and save SP backchain
+
+- addi r3,sp,8 # r3 <= args
+- mr r4,r5 # r4 <= paramCount
+- mr r5,r6 # r5 <= params
+- add r6,r3,r10 # r6 <= gpregs ( == args + r10 )
+- mr r30,r6 # store in r30 for use later...
+- addi r7,r6,32 # r7 <= fpregs ( == gpregs + 32 )
++ addi r3,sp,8 // r3 <= args
++ mr r4,r5 // r4 <= paramCount
++ mr r5,r6 // r5 <= params
++ add r6,r3,r10 // r6 <= gpregs ( == args + r10 )
++ mr r30,r6 // store in r30 for use later...
++ addi r7,r6,32 // r7 <= fpregs ( == gpregs + 32 )
+
+- bl invoke_copy_to_stack@local # (args, paramCount, params, gpregs, fpregs)
++ bl invoke_copy_to_stack@local // (args, paramCount, params, gpregs, fpregs)
+
+- lfd f1,32(r30) # load FP registers with method parameters
++ lfd f1,32(r30) // load FP registers with method parameters
+ lfd f2,40(r30)
+ lfd f3,48(r30)
+ lfd f4,56(r30)
diff --git a/www/firefox/patches/patch-xm b/www/firefox/patches/patch-xm
new file mode 100644
index 00000000000..5ec641e821c
--- /dev/null
+++ b/www/firefox/patches/patch-xm
@@ -0,0 +1,49 @@
+$NetBSD: patch-xm,v 1.3 2013/05/23 13:12:13 ryoon Exp $
+
+NetBSD/ppc xptcall support code. Originally from pkgsrc/www/mozilla.
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc_netbsd.cpp.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_ppc_netbsd.cpp
+@@ -5,9 +5,9 @@
+
+ // Platform specific code to invoke XPCOM methods on native objects
+
+-// The purpose of XPTC_InvokeByIndex() is to map a platform
++// The purpose of NS_InvokeByIndex_P() is to map a platform
+ // indepenpent call to the platform ABI. To do that,
+-// XPTC_InvokeByIndex() has to determine the method to call via vtable
++// NS_InvokeByIndex_P() has to determine the method to call via vtable
+ // access. The parameters for the method are read from the
+ // nsXPTCVariant* and prepared for the native ABI. For the Linux/PPC
+ // ABI this means that the first 8 integral and floating point
+@@ -69,8 +69,10 @@ invoke_copy_to_stack(uint32_t* d,
+ if ((uint32_t) d & 4) d++; // doubles are 8-byte aligned on stack
+ *((double*) d) = s->val.d;
+ d += 2;
++#if __GXX_ABI_VERSION < 100
+ if (gpr < GPR_COUNT)
+ gpr += 2;
++#endif
+ }
+ }
+ else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
+@@ -79,8 +81,10 @@ invoke_copy_to_stack(uint32_t* d,
+ else {
+ *((float*) d) = s->val.f;
+ d += 1;
++#if __GXX_ABI_VERSION < 100
+ if (gpr < GPR_COUNT)
+ gpr += 1;
++#endif
+ }
+ }
+ else if (!s->IsPtrData() && (s->type == nsXPTType::T_I64
+@@ -107,6 +111,6 @@ invoke_copy_to_stack(uint32_t* d,
+ }
+
+ extern "C"
+-XPTC_PUBLIC_API(nsresult)
+-XPTC_InvokeByIndex(nsISupports* that, uint32_t methodIndex,
++EXPORT_XPCOM_API(nsresult)
++NS_InvokeByIndex_P(nsISupports* that, PRUint32 methodIndex,
+ uint32_t paramCount, nsXPTCVariant* params);
diff --git a/www/firefox/patches/patch-xn b/www/firefox/patches/patch-xn
new file mode 100644
index 00000000000..d1df51f4031
--- /dev/null
+++ b/www/firefox/patches/patch-xn
@@ -0,0 +1,52 @@
+$NetBSD: patch-xn,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_mips.s
+@@ -16,6 +16,47 @@
+ #include <sys/asm.h>
+ #endif
+
++#ifdef __NetBSD__
++# include <machine/regdef.h>
++# include <machine/asm.h>
++# ifndef fp
++# define fp s8
++# endif
++# ifndef PTRLOG
++# if SZREG == 4
++# define PTRLOG 2
++# else
++# define PTRLOG 3
++# endif
++# endif
++# ifndef SETUP_GP
++# if defined(__mips_o32)
++# define SETUP_GP \
++ .set push; \
++ .set noreorder; \
++ .cpload t9; \
++ .set pop
++# define SAVE_GP(x) \
++ .cprestore x
++# else
++# define SETUP_GP
++# define SAVE_GP(x)
++# endif
++# endif
++# ifndef ALSZ
++# if defined(__mips_n32) || defined(__mips_n64)
++# define ALSZ 15
++# define ALMASK ~15
++# else
++# define ALSZ 7
++# define ALMASK ~7
++# endif
++# endif
++#else
++# include <sys/regdef.h>
++# include <sys/asm.h>
++#endif
++
+ # NARGSAVE is the argument space in the callers frame, including extra
+ # 'shadowed' space for the argument registers. The minimum of 4
+ # argument slots is sometimes predefined in the header files.
diff --git a/www/firefox/patches/patch-xo b/www/firefox/patches/patch-xo
new file mode 100644
index 00000000000..3b559851216
--- /dev/null
+++ b/www/firefox/patches/patch-xo
@@ -0,0 +1,52 @@
+$NetBSD: patch-xo,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_mips.s
+@@ -14,6 +14,47 @@
+ #include <sys/asm.h>
+ #endif
+
++#ifdef __NetBSD__
++# include <machine/regdef.h>
++# include <machine/asm.h>
++# ifndef fp
++# define fp s8
++# endif
++# ifndef PTRLOG
++# if SZREG == 4
++# define PTRLOG 2
++# else
++# define PTRLOG 3
++# endif
++# endif
++# ifndef SETUP_GP
++# if defined(__mips_o32)
++# define SETUP_GP \
++ .set push; \
++ .set noreorder; \
++ .cpload t9; \
++ .set pop
++# define SAVE_GP(x) \
++ .cprestore x
++# else
++# define SETUP_GP
++# define SAVE_GP(x)
++# endif
++# endif
++# ifndef ALSZ
++# if defined(__mips_n32) || defined(__mips_n64)
++# define ALSZ 15
++# define ALMASK ~15
++# else
++# define ALSZ 7
++# define ALMASK ~7
++# endif
++# endif
++#else
++# include <sys/regdef.h>
++# include <sys/asm.h>
++#endif
++
+ # NARGSAVE is the argument space in the callers frame, including extra
+ # 'shadowed' space for the argument registers. The minimum of 4
+ # argument slots is sometimes predefined in the header files.
diff --git a/www/firefox/patches/patch-xpcom_Makefile.in b/www/firefox/patches/patch-xpcom_Makefile.in
new file mode 100644
index 00000000000..9e49ec14d04
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_Makefile.in
@@ -0,0 +1,15 @@
+$NetBSD: patch-xpcom_Makefile.in,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/Makefile.in.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/Makefile.in
+@@ -35,6 +35,10 @@ DIRS += windbgdlg
+ endif
+ endif
+
++ifeq ($(OS_ARCH),NetBSD)
++EXTRA_DSO_LDOPTS += -Wl,-rpath,${PREFIX}/lib/xulrunner/sdk/lib
++endif
++
+ ifdef ENABLE_TESTS
+ TOOL_DIRS += \
+ tests \
diff --git a/www/firefox/patches/patch-xpcom_ds_TimeStamp.h b/www/firefox/patches/patch-xpcom_ds_TimeStamp.h
new file mode 100644
index 00000000000..156e30f6c26
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_ds_TimeStamp.h
@@ -0,0 +1,20 @@
+$NetBSD: patch-xpcom_ds_TimeStamp.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+http://gnats.netbsd.org/47233
+
+--- xpcom/ds/TimeStamp.h.orig 2013-01-04 23:44:47.000000000 +0000
++++ xpcom/ds/TimeStamp.h
+@@ -130,11 +130,11 @@ private:
+ // NOTE: this MUST be a >= test, because int64_t(double(INT64_MAX))
+ // overflows and gives INT64_MIN.
+ if (aTicks >= double(INT64_MAX))
+- return TimeDuration::FromTicks(INT64_MAX);
++ return TimeDuration::FromTicks(int64_t(INT64_MAX));
+
+ // This MUST be a <= test.
+ if (aTicks <= double(INT64_MIN))
+- return TimeDuration::FromTicks(INT64_MIN);
++ return TimeDuration::FromTicks(int64_t(INT64_MIN));
+
+ return TimeDuration::FromTicks(int64_t(aTicks));
+ }
diff --git a/www/firefox/patches/patch-xpcom_io_nsMultiplexInputStream_cpp b/www/firefox/patches/patch-xpcom_io_nsMultiplexInputStream_cpp
new file mode 100644
index 00000000000..1a8f182489a
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_io_nsMultiplexInputStream_cpp
@@ -0,0 +1,18 @@
+$NetBSD: patch-xpcom_io_nsMultiplexInputStream_cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+Fix PR/47722, dragonfly (gcc 4.7) build problem:
+error: no matching function for call to
+ 'NS_MIN(int64_t&, __gnu_cxx::__enable_if<true, double>::__type)'
+devel/xulrunner/work/mozilla-release/xpcom/io/nsMultiplexInputStream.cpp:532:83
+
+--- xpcom/io/nsMultiplexInputStream.cpp.orig 2013-05-11 19:19:56.000000000 +0000
++++ xpcom/io/nsMultiplexInputStream.cpp
+@@ -529,7 +529,7 @@ nsMultiplexInputStream::Seek(int32_t aWh
+ rv = stream->Tell(&avail);
+ NS_ENSURE_SUCCESS(rv, rv);
+
+- int64_t newPos = streamPos + XPCOM_MIN(avail, std::abs(remaining));
++ int64_t newPos = streamPos + XPCOM_MIN(avail, (int64_t)std::abs(remaining));
+
+ rv = stream->Seek(NS_SEEK_END, -newPos);
+ NS_ENSURE_SUCCESS(rv, rv);
diff --git a/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp b/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp
new file mode 100644
index 00000000000..2f1a49545cb
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp
@@ -0,0 +1,13 @@
+$NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_gcc_x86_unix.cpp.orig 2013-05-11 19:19:56.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_gcc_x86_unix.cpp
+@@ -9,7 +9,7 @@
+ #include "xptc_gcc_x86_unix.h"
+
+ extern "C" {
+-static void ATTRIBUTE_USED __attribute__ ((regparm(3)))
++void ATTRIBUTE_USED __attribute__ ((regparm(3)))
+ invoke_copy_to_stack(uint32_t paramCount, nsXPTCVariant* s, uint32_t* d)
+ {
+ for(uint32_t i = paramCount; i >0; i--, d++, s++)
diff --git a/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp b/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp
new file mode 100644
index 00000000000..f0d9d00e511
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp
@@ -0,0 +1,13 @@
+$NetBSD: patch-xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp.orig 2013-05-11 19:19:56.000000000 +0000
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_gcc_x86_unix.cpp
+@@ -10,7 +10,7 @@
+ #include "xptc_gcc_x86_unix.h"
+
+ extern "C" {
+-static nsresult ATTRIBUTE_USED
++nsresult ATTRIBUTE_USED
+ __attribute__ ((regparm (3)))
+ PrepareAndDispatch(uint32_t methodIndex, nsXPTCStubBase* self, uint32_t* args)
+ {
diff --git a/www/firefox/patches/patch-xpcom_string_public_nsAlgorithm.h b/www/firefox/patches/patch-xpcom_string_public_nsAlgorithm.h
new file mode 100644
index 00000000000..4c7c0fbc11f
--- /dev/null
+++ b/www/firefox/patches/patch-xpcom_string_public_nsAlgorithm.h
@@ -0,0 +1,16 @@
+$NetBSD: patch-xpcom_string_public_nsAlgorithm.h,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+
+--- xpcom/string/public/nsAlgorithm.h.orig 2013-05-11 19:19:56.000000000 +0000
++++ xpcom/string/public/nsAlgorithm.h
+@@ -45,7 +45,10 @@ XPCOM_MAX( const T& a, const T& b )
+ return a > b ? a : b;
+ }
+
+-#if defined(_MSC_VER) && (_MSC_VER < 1600)
++#if (defined(_MSC_VER) && (_MSC_VER < 1600)) || \
++ ((defined(__GLIBCXX__) && __GLIBCXX__ < 20121005) && \
++ (defined(_GLIBCXX_USE_LONG_LONG) && \
++ (!_GLIBCXX_USE_C99 || _GLIBCXX_USE_C99_LONG_LONG_DYNAMIC)))
+ namespace std {
+ inline
+ long long
diff --git a/www/firefox/xpi.mk b/www/firefox/xpi.mk
new file mode 100644
index 00000000000..625dba05cf7
--- /dev/null
+++ b/www/firefox/xpi.mk
@@ -0,0 +1,25 @@
+# $NetBSD: xpi.mk,v 1.1 2013/05/23 13:12:13 ryoon Exp $
+#
+# common logic for repackaging mozilla extensions (.xpi files)
+# Used by the {firefox,seamonkey,thunderbird}-l10n packages.
+
+USE_TOOLS+= unzip pax
+
+post-extract: extract-xpi
+
+.PHONY: extract-xpi
+extract-xpi:
+.for f in ${XPI_FILES}
+ @${MKDIR} ${WRKDIR}/${f:S/.xpi//} && cd ${WRKDIR}/${f:S/.xpi//} && ${UNZIP_CMD} -aqo "${WRKDIR}/${f}"
+.endfor
+
+do-install: install-xpi
+
+.PHONY: install-xpi
+install-xpi:
+.for f in ${XPI_FILES}
+ id=$$(${AWK} '/em:id=/ {sub("^.*em:id=\"", "");sub("\".*$$","");print $$0}' < ${WRKDIR}/${f:S/.xpi//}/install.rdf); \
+ ${MKDIR} ${DESTDIR}${EXTENSIONS_DIR}/$${id} && \
+ cd ${WRKDIR}/${f:S/.xpi//} && \
+ pax -rw . ${DESTDIR}${EXTENSIONS_DIR}/$${id}
+.endfor