summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorahze <ahze@df743ca5-7f9a-e211-a948-0013205c9059>2007-09-20 07:49:35 +0800
committerahze <ahze@df743ca5-7f9a-e211-a948-0013205c9059>2007-09-20 07:49:35 +0800
commitb442dbd9e67da99c8d55212e9d478992187c3647 (patch)
treeb05f98d3b411fd42bda7e588d03aabe1e4c7f546
parent5b91dc4abb1cb328397c8d8e4c78af31ee46259a (diff)
downloadmarcuscom-ports-experimental-b442dbd9e67da99c8d55212e9d478992187c3647.tar.gz
marcuscom-ports-experimental-b442dbd9e67da99c8d55212e9d478992187c3647.tar.zst
marcuscom-ports-experimental-b442dbd9e67da99c8d55212e9d478992187c3647.zip
Merge from MCom ports
git-svn-id: svn://creme-brulee.marcuscom.com/ports-experimental/trunk@17365 df743ca5-7f9a-e211-a948-0013205c9059
-rw-r--r--devel/nspr/Makefile85
-rw-r--r--devel/nspr/distinfo3
-rw-r--r--devel/nspr/files/patch-..::config::autoconf.mk.in11
-rw-r--r--devel/nspr/files/patch-..::configure46
-rw-r--r--devel/nspr/files/patch-..::pr::src::pthreads::ptio.c20
-rw-r--r--devel/nspr/files/patch-.._pr_include_md__freebsd.h19
-rw-r--r--devel/nspr/files/patch-.._pr_src_misc_prsystem.c22
-rw-r--r--devel/nspr/files/patch-.._pr_tests_Makefile11
-rw-r--r--devel/nspr/files/patch-config-nsprc.pc.in13
-rw-r--r--devel/nspr/files/patch-libtests611
-rw-r--r--devel/nspr/files/patch-pthread_t47
-rw-r--r--devel/nspr/files/patch-tests1895
-rw-r--r--devel/nspr/files/patch-warnings67
-rw-r--r--devel/nspr/pkg-descr5
-rw-r--r--devel/nspr/pkg-plist105
-rw-r--r--graphics/png/Makefile54
-rw-r--r--graphics/png/distinfo3
-rw-r--r--graphics/png/files/patch-aa63
-rw-r--r--graphics/png/files/patch-ab18
-rw-r--r--graphics/png/files/patch-ac16
-rw-r--r--graphics/png/files/patch-ad11
-rw-r--r--graphics/png/files/patch-ae18
-rw-r--r--graphics/png/files/patch-apng1696
-rw-r--r--graphics/png/pkg-descr11
-rw-r--r--graphics/png/pkg-plist14
-rw-r--r--security/nss/Makefile105
-rw-r--r--security/nss/distinfo3
-rw-r--r--security/nss/files/nss-config.in137
-rw-r--r--security/nss/files/nss.pc.in11
-rw-r--r--security/nss/files/patch-..::coreconf::FreeBSD.mk62
-rw-r--r--security/nss/files/patch-..::coreconf::command.mk9
-rw-r--r--security/nss/files/patch-..::coreconf::rules.mk10
-rw-r--r--security/nss/files/patch-Makefile11
-rw-r--r--security/nss/files/patch-cmd::platlibs.mk14
-rw-r--r--security/nss/files/patch-const46
-rw-r--r--security/nss/files/patch-sysdb175
-rw-r--r--security/nss/files/patch-tests10
-rw-r--r--security/nss/pkg-descr7
-rw-r--r--security/nss/pkg-plist153
-rw-r--r--www/firefox-devel/Makefile101
-rw-r--r--www/firefox-devel/distinfo3
-rw-r--r--www/firefox-devel/files/firefox.desktop.in191
-rw-r--r--www/firefox-devel/files/patch-bugzilla2968181621
-rw-r--r--www/firefox-devel/files/patch-build_unix_run-mozilla.sh12
-rw-r--r--www/firefox-devel/files/patch-config-mkdepend-imakemdep.h10
-rw-r--r--www/firefox-devel/files/patch-config-rules.mk13
-rw-r--r--www/firefox-devel/files/patch-config_autoconf.mk.in18
-rw-r--r--www/firefox-devel/files/patch-config_mkdepend_Makefile.in10
-rw-r--r--www/firefox-devel/files/patch-content_xslt_public_txDouble.h20
-rw-r--r--www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp46
-rw-r--r--www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h12
-rw-r--r--www/firefox-devel/files/patch-js_src_Makefile.in10
-rw-r--r--www/firefox-devel/files/patch-js_src_jsnum.c28
-rw-r--r--www/firefox-devel/files/patch-modules_libpref_src_init_all.js53
-rw-r--r--www/firefox-devel/files/patch-security-coreconf-FreeBSD.mk24
-rw-r--r--www/firefox-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp10
-rw-r--r--www/firefox-devel/files/patch-storage_build_Makefile.in10
-rw-r--r--www/firefox-devel/files/patch-sysnss34
-rw-r--r--www/firefox-devel/files/patch-toolkit_xre_Makefile.in8
-rw-r--r--www/firefox-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp29
-rw-r--r--www/firefox-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc11
-rw-r--r--www/firefox-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in54
-rw-r--r--www/firefox-devel/files/patch-xptcall-alpha459
-rw-r--r--www/firefox-devel/files/patch-xptcall-sparc64327
-rw-r--r--www/firefox-devel/pkg-descr12
-rw-r--r--www/firefox-devel/pkg-message32
-rw-r--r--www/mozilla/Makefile162
-rw-r--r--www/mozilla/Makefile.common433
-rw-r--r--www/mozilla/bsd.gecko.mk171
-rw-r--r--www/mozilla/distinfo6
-rw-r--r--www/mozilla/files/extra-patch-nsSVGLibartGlyphMetricsFT.cpp88
-rw-r--r--www/mozilla/files/extra-patch2-nsSVGLibartGlyphMetricsFT.cpp50
-rw-r--r--www/mozilla/files/mozconfig-generic.in8
-rw-r--r--www/mozilla/files/mozilla.desktop.in169
-rw-r--r--www/mozilla/files/patch-Double.cpp59
-rw-r--r--www/mozilla/files/patch-Makefile.in22
-rw-r--r--www/mozilla/files/patch-bugzilla149334342
-rw-r--r--www/mozilla/files/patch-build_unix_run-mozilla.sh21
-rw-r--r--www/mozilla/files/patch-config-mkdepend-imakemdep.h10
-rw-r--r--www/mozilla/files/patch-config::mkdepend::Makefile.in10
-rw-r--r--www/mozilla/files/patch-config::rules.mk14
-rw-r--r--www/mozilla/files/patch-config_autoconf.mk.in18
-rw-r--r--www/mozilla/files/patch-extensions_p3p_Makefile.in30
-rw-r--r--www/mozilla/files/patch-gcc479
-rw-r--r--www/mozilla/files/patch-gfx-src-gtk-Makefile.in15
-rw-r--r--www/mozilla/files/patch-gfx_src_ps_nsType1.cpp58
-rw-r--r--www/mozilla/files/patch-libm25
-rw-r--r--www/mozilla/files/patch-qt65
-rw-r--r--www/mozilla/files/patch-security::coreconf::FreeBSD.mk37
-rw-r--r--www/mozilla/files/patch-sysnspr21
-rw-r--r--www/mozilla/files/patch-sysnss178
-rw-r--r--www/mozilla/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp29
-rw-r--r--www/mozilla/files/patch-widget_src_gtk2_nsDragService.cpp18
-rw-r--r--www/mozilla/files/patch-xpcom::reflect::xptcall::public::xptcstubsdecl.inc11
-rw-r--r--www/mozilla/files/patch-xpcom_reflect_xptcall_src_md_unix_Makefile.in56
-rw-r--r--www/mozilla/files/patch-xpfe_bootstrap_mozilla.in436
-rw-r--r--www/mozilla/files/patch-xptcall-alpha459
-rw-r--r--www/mozilla/files/patch-xptcall-amd64386
-rw-r--r--www/mozilla/files/patch-xptcall-ia6438
-rwxr-xr-xwww/mozilla/files/patch-xptcall-sparc64327
-rw-r--r--www/mozilla/pkg-deinstall.in28
-rw-r--r--www/mozilla/pkg-descr10
-rw-r--r--www/mozilla/pkg-install.in42
103 files changed, 12706 insertions, 0 deletions
diff --git a/devel/nspr/Makefile b/devel/nspr/Makefile
new file mode 100644
index 0000000..0d72072
--- /dev/null
+++ b/devel/nspr/Makefile
@@ -0,0 +1,85 @@
+# Ports collection Makefile for: nspr
+# Date created: 18 December 2001
+# Whom: Maxim Sobolev <sobomax@FreeBSD.org>
+#
+# $FreeBSD$
+# $MCom$
+
+PORTNAME= nspr
+DISTVERSION= 4.6.7-2
+CATEGORIES= devel
+MASTER_SITES= LOCAL
+MASTER_SITE_SUBDIR= ahze
+#MASTER_SITES= ${MASTER_SITE_MOZILLA}
+#MASTER_SITE_SUBDIR= nspr/releases/v${PORTVERSION}/src
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= A platform-neutral API for system level and libc like functions
+
+USE_BZIP2= yes
+
+WRKSRC= ${WRKDIR}/${DISTNAME}/mozilla/nsprpub/build
+
+USE_LDCONFIG= yes
+USE_GMAKE= yes
+GNU_CONFIGURE= yes
+CONFIGURE_SCRIPT=../configure
+CONFIGURE_ARGS= --disable-debug \
+ --with-pthreads
+CONFIGURE_ENV= BSD_PTHREAD_LIBS=${PTHREAD_LIBS}
+
+MAKE_ENV= DIST=${WRKSRC}/dist
+
+LIBS= libnspr4.so.1 libplc4.so.1 libplds4.so.1
+
+.include <bsd.port.pre.mk>
+
+post-patch:
+ @${REINPLACE_CMD} -e 's,-lpthread,${PTHREAD_LIBS},g ; s,echo aout,echo elf,g' ${WRKSRC}/${CONFIGURE_SCRIPT}
+.if ${OSVERSION} < 601104
+ @${REINPLACE_CMD} -e 's|pthread_cond_wait|_pthread_cond_wait|g' \
+ ${WRKSRC}/../pr/src/md/unix/pthreads_user.c \
+ ${WRKSRC}/../pr/src/pthreads/ptsynch.c
+.endif
+
+do-install:
+ ${MKDIR} ${PREFIX}/include/nspr
+ ${TAR} -C ${WRKSRC}/dist/include --dereference -cf - . | \
+ ${TAR} -C ${PREFIX}/include -xf -
+ ${TAR} -C ${WRKSRC}/dist/lib --dereference -cf - . | \
+ ${TAR} -C ${PREFIX}/lib -xf -
+ ${INSTALL_SCRIPT} ${WRKSRC}/config/nspr-config ${PREFIX}/bin
+ ${MKDIR} ${PREFIX}/libdata/pkgconfig
+ ${INSTALL_DATA} ${WRKSRC}/config/nspr.pc ${PREFIX}/libdata/pkgconfig
+.for lib in ${LIBS}
+ ${LN} -sf ${lib} ${PREFIX}/lib/${lib:R}
+.endfor
+
+prtests:
+ env PTHREAD_LIBS="${PTHREAD_LIBS}" ${GMAKE} -C ${WRKSRC}/pr/tests
+ ${LN} -sf libmy.so.1 ${WRKSRC}/pr/tests/dll/libmy.so
+ cd ${WRKSRC}/pr/tests && ../../../pr/tests/runtests.sh
+
+libtests:
+ ${GMAKE} -C ${WRKSRC}/lib/tests
+ ${WRKSRC}/lib/tests/string
+ ${WRKSRC}/lib/tests/base64t
+ # The test below is commented out, because arena requires
+ # command-line arguments. If you can provide reasonable values
+ # for it, please contact ${MAINTAINER}. Thank you.
+ # ${WRKSRC}/lib/tests/arena
+ #
+
+test: libtests prtests
+
+#.if defined(PACKAGE_BUILDING)
+#post-build: test
+#.else
+post-build:
+ #
+ # Please, consider running ``make test'' to find any
+ # possible build problems.
+ #
+#.endif
+
+.include <bsd.port.post.mk>
diff --git a/devel/nspr/distinfo b/devel/nspr/distinfo
new file mode 100644
index 0000000..c49a839
--- /dev/null
+++ b/devel/nspr/distinfo
@@ -0,0 +1,3 @@
+MD5 (nspr-4.6.7-2.tar.bz2) = cf298d4c1115fffe37ba61bb3fa95611
+SHA256 (nspr-4.6.7-2.tar.bz2) = 256c79ed3c8a2a3446918281c2606010fc4242f39b04e78573fde27f57b9b030
+SIZE (nspr-4.6.7-2.tar.bz2) = 972827
diff --git a/devel/nspr/files/patch-..::config::autoconf.mk.in b/devel/nspr/files/patch-..::config::autoconf.mk.in
new file mode 100644
index 0000000..a0a1026
--- /dev/null
+++ b/devel/nspr/files/patch-..::config::autoconf.mk.in
@@ -0,0 +1,11 @@
+--- ../config/autoconf.mk.in.orig Wed Oct 17 02:31:02 2001
++++ ../config/autoconf.mk.in Thu Aug 8 19:22:44 2002
+@@ -17,7 +17,7 @@
+ dist_includedir = @dist_includedir@
+ dist_libdir = @dist_libdir@
+
+-DIST = $(dist_prefix)
++DIST ?= $(dist_prefix)
+
+ RELEASE_OBJDIR_NAME = @RELEASE_OBJDIR_NAME@
+ OBJDIR_NAME = @OBJDIR_NAME@
diff --git a/devel/nspr/files/patch-..::configure b/devel/nspr/files/patch-..::configure
new file mode 100644
index 0000000..e74898f
--- /dev/null
+++ b/devel/nspr/files/patch-..::configure
@@ -0,0 +1,46 @@
+--- ../configure.orig Tue Nov 14 10:37:41 2006
++++ ../configure Mon Nov 27 22:52:52 2006
+@@ -3466,16 +3466,21 @@
+ #define HAVE_SOCKLEN_T 1
+ EOF
+
+- CFLAGS="$CFLAGS $(DSO_CFLAGS) -ansi -Wall"
++ cat >> confdefs.h <<\EOF
++#define HAVE_SOCKLEN_T 1
++EOF
++
++ CFLAFS="$CFLAGS $DSO_CFLAGS -ansi -Wall -pipe -DXP_UNIX"
+ MOZ_OBJFORMAT=`test -x /usr/bin/objformat && /usr/bin/objformat || echo aout`
+ if test "$MOZ_OBJFORMAT" = "elf"; then
+- DLL_SUFFIX=so
++ DLL_SUFFIX=so.1
+ else
+ DLL_SUFFIX=so.1.0
+ fi
+ MKSHLIB='$(CC) $(DSO_LDOPTS) -o $@'
+ DSO_CFLAGS=-fPIC
+ DSO_LDOPTS='-shared -Wl,-soname -Wl,$(notdir $@)'
++ DSO_LDOPTS="$DSO_LDOPTS $BSD_PTHREAD_LIBS"
+ MDCPUCFG_H=_freebsd.cfg
+ PR_MD_CSRCS=freebsd.c
+ ;;
+@@ -5467,11 +5472,6 @@
+ #define _THREAD_SAFE 1
+ EOF
+
+- if test "$ac_cv_have_dash_pthread" = "yes"; then
+- _PTHREAD_LDFLAGS="-pthread"
+- else
+- _PTHREAD_LDFLAGS="-lc_r"
+- fi
+ ;;
+ *-netbsd*)
+ if test "$ac_cv_have_dash_pthread" = "yes"; then
+@@ -5864,6 +5864,7 @@
+ config/nsprincl.mk
+ config/nsprincl.sh
+ config/nspr-config
++config/nspr.pc
+ lib/Makefile
+ lib/ds/Makefile
+ lib/libc/Makefile
diff --git a/devel/nspr/files/patch-..::pr::src::pthreads::ptio.c b/devel/nspr/files/patch-..::pr::src::pthreads::ptio.c
new file mode 100644
index 0000000..940aaeb
--- /dev/null
+++ b/devel/nspr/files/patch-..::pr::src::pthreads::ptio.c
@@ -0,0 +1,20 @@
+--- ../pr/src/pthreads/ptio.c.orig Mon Feb 2 10:41:43 2004
++++ ../pr/src/pthreads/ptio.c Mon Feb 2 10:44:49 2004
+@@ -3470,6 +3470,17 @@
+ &on, sizeof(on));
+ }
+ #endif
++#if (defined(_PR_INET6_PROBE) || defined(_PR_INET6)) && \
++ defined(__FreeBSD__) && defined(IPV6_V6ONLY)
++ if (domain == PR_AF_INET6) {
++ int opt = 0;
++ if (setsockopt(osfd, IPPROTO_IPV6, IPV6_V6ONLY,
++ &opt, sizeof(opt))) {
++ close(osfd);
++ return NULL;
++ }
++ }
++#endif
+ fd = pt_SetMethods(osfd, ftype, PR_FALSE, PR_FALSE);
+ if (fd == NULL) close(osfd);
+ }
diff --git a/devel/nspr/files/patch-.._pr_include_md__freebsd.h b/devel/nspr/files/patch-.._pr_include_md__freebsd.h
new file mode 100644
index 0000000..b02b5a3
--- /dev/null
+++ b/devel/nspr/files/patch-.._pr_include_md__freebsd.h
@@ -0,0 +1,19 @@
+--- ../pr/include/md/_freebsd.h.orig Mon Nov 22 16:24:53 2004
++++ ../pr/include/md/_freebsd.h Sun Jul 23 13:15:29 2006
+@@ -106,6 +106,16 @@
+ #define _PR_IPV6_V6ONLY_PROBE
+ #endif
+
++#if (__FreeBSD_version >= 700016) || (__FreeBSD_version < 700000 && __FreeBSD_version >= 601103)
++#if defined(_PR_PTHREADS)
++#define _PR_HAVE_GETPROTO_R
++#define _PR_HAVE_5_ARG_GETPROTO_R
++#define _PR_HAVE_GETHOST_R
++#define _PR_HAVE_GETHOST_R_INT
++#define _PR_HAVE_THREADSAFE_GETHOST
++#endif
++#endif
++
+ #define USE_SETJMP
+
+ #ifndef _PR_PTHREADS
diff --git a/devel/nspr/files/patch-.._pr_src_misc_prsystem.c b/devel/nspr/files/patch-.._pr_src_misc_prsystem.c
new file mode 100644
index 0000000..a73a823
--- /dev/null
+++ b/devel/nspr/files/patch-.._pr_src_misc_prsystem.c
@@ -0,0 +1,22 @@
+--- ../pr/src/misc/prsystem.c.orig Fri May 6 20:35:58 2005
++++ ../pr/src/misc/prsystem.c Sun Dec 4 22:09:51 2005
+@@ -352,6 +352,19 @@ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMem
+ odm_terminate();
+ }
+
++#elif defined(__FreeBSD__)
++
++ int mib[2];
++ unsigned long physmem;
++ size_t len;
++
++ mib[0] = CTL_HW;
++ mib[1] = HW_PHYSMEM;
++ len = sizeof(physmem);
++ if(sysctl(mib, 2, &physmem, &len, NULL, 0) == 0
++ && len == sizeof(physmem))
++ bytes = physmem;
++
+ #else
+
+ PR_SetError(PR_NOT_IMPLEMENTED_ERROR, 0);
diff --git a/devel/nspr/files/patch-.._pr_tests_Makefile b/devel/nspr/files/patch-.._pr_tests_Makefile
new file mode 100644
index 0000000..af79616
--- /dev/null
+++ b/devel/nspr/files/patch-.._pr_tests_Makefile
@@ -0,0 +1,11 @@
+--- ../../nsprpub/pr/tests/Makefile.in.orig Mon Apr 26 00:01:02 2004
++++ ../../nsprpub/pr/tests/Makefile.in Tue Nov 28 11:08:14 2006
+@@ -418,7 +418,7 @@
+
+ ifeq ($(OS_ARCH),FreeBSD)
+ ifeq ($(USE_PTHREADS),1)
+-LDOPTS += -pthread
++LDOPTS += ${PTHREAD_LIBS}
+ endif
+ LDOPTS += -Xlinker -R $(ABSOLUTE_LIB_DIR)
+ endif
diff --git a/devel/nspr/files/patch-config-nsprc.pc.in b/devel/nspr/files/patch-config-nsprc.pc.in
new file mode 100644
index 0000000..70c912f
--- /dev/null
+++ b/devel/nspr/files/patch-config-nsprc.pc.in
@@ -0,0 +1,13 @@
+--- ../config/nspr.pc.in.orig Thu Aug 4 21:38:50 2005
++++ ../config/nspr.pc.in Thu Aug 4 21:38:59 2005
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: NSPR
++Description: The Netscape Portable Runtime
++Version: @MOD_MAJOR_VERSION@.@MOD_MINOR_VERSION@.@MOD_PATCH_VERSION@
++Libs: -L${libdir} -lplds@MOD_MAJOR_VERSION@ -lplc@MOD_MAJOR_VERSION@ -lnspr@MOD_MAJOR_VERSION@ @OS_LIBS@
++Cflags: -I${includedir}
diff --git a/devel/nspr/files/patch-libtests b/devel/nspr/files/patch-libtests
new file mode 100644
index 0000000..a069bba
--- /dev/null
+++ b/devel/nspr/files/patch-libtests
@@ -0,0 +1,611 @@
+--- ../lib/tests/string.c Sun Apr 25 11:00:46 2004
++++ ../lib/tests/string.c Mon Jul 25 20:14:12 2005
+@@ -160,5 +160,5 @@
+ if( array[i].rv != rv )
+ {
+- printf("FAIL %d: (0x%x, %s)->0x%x\n", i, array[i].dest,
++ printf("FAIL %d: (%p, %s)->%p\n", i, array[i].dest,
+ array[i].str ? array[i].str : "(null)", rv);
+ return PR_FALSE;
+@@ -270,6 +270,6 @@
+ if( array[i].rv != rv )
+ {
+- printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
+- array[i].str ? array[i].str : "(null)", array[i].len, rv);
++ printf("FAIL %d: (%p, %s, %u)->%p\n", i, array[i].dest,
++ array[i].str ? array[i].str : "(null)", (unsigned)array[i].len, rv);
+ return PR_FALSE;
+ }
+@@ -396,6 +396,6 @@
+ if( array[i].rv != rv )
+ {
+- printf("FAIL %d: (0x%x, %s, %lu)->0x%x\n", i, array[i].dest,
+- array[i].str ? array[i].str : "(null)", array[i].len, rv);
++ printf("FAIL %d: (%p, %s, %u)->%p\n", i, array[i].dest,
++ array[i].str ? array[i].str : "(null)", (unsigned)array[i].len, rv);
+ return PR_FALSE;
+ }
+@@ -448,5 +448,5 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: 0x%x -> 0\n", i, array[i]);
++ printf("FAIL %d: %p -> 0\n", i, array[i]);
+ return PR_FALSE;
+ }
+@@ -532,6 +532,6 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%lu -> 0\n", i,
+- array[i].str ? array[i].str : "(null)", array[i].len);
++ printf("FAIL %d: %s,%u -> 0\n", i,
++ array[i].str ? array[i].str : "(null)", (unsigned)array[i].len);
+ return PR_FALSE;
+ }
+@@ -717,8 +717,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
++ printf("FAIL %d: %s+%s/%u -> %.32s, not zero\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, rv);
++ (unsigned)array[i].length, rv);
+ return PR_FALSE;
+ }
+@@ -728,8 +728,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
++ printf("FAIL %d: %s+%s/%u -> null, not %s\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, array[i].result);
++ (unsigned)array[i].length, array[i].result);
+ return PR_FALSE;
+ }
+@@ -743,8 +743,8 @@
+ if( *a != *b )
+ {
+- printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
++ printf("FAIL %d: %s+%s/%u -> %.32s, not %s\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, rv, array[i].result);
++ (unsigned)array[i].length, rv, array[i].result);
+ return PR_FALSE;
+ }
+@@ -758,8 +758,8 @@
+ if( (char)0 != *b )
+ {
+- printf("FAIL %d: %s+%s/%lu -> not nulled\n", i,
++ printf("FAIL %d: %s+%s/%u -> not nulled\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length);
++ (unsigned)array[i].length);
+ return PR_FALSE;
+ }
+@@ -769,8 +769,8 @@
+ if( (char)0 == *b )
+ {
+- printf("FAIL %d: %s+%s/%lu -> overrun\n", i,
++ printf("FAIL %d: %s+%s/%u -> overrun\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length);
++ (unsigned)array[i].length);
+ return PR_FALSE;
+ }
+@@ -847,8 +847,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s+%s/%lu -> %.32s, not zero\n", i,
++ printf("FAIL %d: %s+%s/%u -> %.32s, not zero\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, rv);
++ (unsigned)array[i].length, rv);
+ return PR_FALSE;
+ }
+@@ -858,8 +858,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s+%s/%lu -> null, not %s\n", i,
++ printf("FAIL %d: %s+%s/%u -> null, not %s\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, array[i].result);
++ (unsigned)array[i].length, array[i].result);
+ return PR_FALSE;
+ }
+@@ -873,8 +873,8 @@
+ if( *a != *b )
+ {
+- printf("FAIL %d: %s+%s/%lu -> %.32s, not %s\n", i,
++ printf("FAIL %d: %s+%s/%u -> %.32s, not %s\n", i,
+ array[i].first ? array[i].first : "(null)",
+ array[i].second ? array[i].second : "(null)",
+- array[i].length, rv, array[i].result);
++ (unsigned)array[i].length, rv, array[i].result);
+ return PR_FALSE;
+ }
+@@ -1105,8 +1105,8 @@
+ }
+
+- printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
++ printf("FAIL %d: %s-%s/%d -> %d, not %d\n", i,
+ array[i].one ? array[i].one : "(null)",
+ array[i].two ? array[i].two : "(null)",
+- array[i].max, rv, array[i].sign);
++ (int)array[i].max, rv, array[i].sign);
+ return PR_FALSE;
+ }
+@@ -1327,8 +1327,8 @@
+ }
+
+- printf("FAIL %d: %s-%s/%ld -> %d, not %d\n", i,
++ printf("FAIL %d: %s-%s/%d -> %d, not %d\n", i,
+ array[i].one ? array[i].one : "(null)",
+ array[i].two ? array[i].two : "(null)",
+- array[i].max, rv, array[i].sign);
++ (int)array[i].max, rv, array[i].sign);
+ return PR_FALSE;
+ }
+@@ -1400,6 +1400,6 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
+- array[i].chr, array[i].off);
++ printf("FAIL %d: %s,%c -> null, not +%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1407,6 +1407,6 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
+- array[i].chr, rv, array[i].str, array[i].off);
++ printf("FAIL %d: %s,%c -> %p, not %p+%u\n", i, array[i].str,
++ array[i].chr, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1480,6 +1480,6 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%c -> null, not +%lu\n", i, array[i].str,
+- array[i].chr, array[i].off);
++ printf("FAIL %d: %s,%c -> null, not +%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1487,6 +1487,6 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%c -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
+- array[i].chr, rv, array[i].str, array[i].off);
++ printf("FAIL %d: %s,%c -> %p, not %p+%u\n", i, array[i].str,
++ array[i].chr, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1555,6 +1555,6 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
+- array[i].chr, array[i].max, rv);
++ printf("FAIL %d: %s,%c/%u -> %.32s, not zero\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -1564,6 +1564,6 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
+- array[i].chr, array[i].max, array[i].off);
++ printf("FAIL %d: %s,%c/%u -> null, not +%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1571,6 +1571,6 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
+- array[i].chr, array[i].max, rv, array[i].str, array[i].off);
++ printf("FAIL %d: %s,%c/%u -> %p, not %p+%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1639,6 +1639,6 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%c/%lu -> %.32s, not zero\n", i, array[i].str,
+- array[i].chr, array[i].max, rv);
++ printf("FAIL %d: %s,%c/%u -> %.32s, not zero\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -1648,13 +1648,13 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%c/%lu -> null, not +%lu\n", i, array[i].str,
+- array[i].chr, array[i].max, array[i].off);
++ printf("FAIL %d: %s,%c/%u -> null, not +%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+
+- if( &array[i].str[ array[i].off ] != rv )
++ if( &array[i].str[ array[i].off ] != rv)
+ {
+- printf("FAIL %d: %s,%c/%lu -> 0x%x, not 0x%x+%lu\n", i, array[i].str,
+- array[i].chr, array[i].max, rv, array[i].str, array[i].off);
++ printf("FAIL %d: %s,%c/%u -> %p, not %p+%u\n", i, array[i].str,
++ array[i].chr, (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1735,8 +1735,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not +%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].off);
++ (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1744,8 +1744,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1826,8 +1826,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not +%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not +%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].off);
++ (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1835,8 +1835,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -1912,8 +1912,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -1923,8 +1923,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not +%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, array[i].off);
++ (unsigned)array[i].max, array[i].off);
+ return PR_FALSE;
+ }
+@@ -1932,8 +1932,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, array[i].off);
+ return PR_FALSE;
+ }
+@@ -2018,8 +2018,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -2029,8 +2029,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not +%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not +%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, array[i].off);
++ (unsigned)array[i].max, array[i].off);
+ return PR_FALSE;
+ }
+@@ -2038,8 +2038,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].chrs ? array[i].chrs : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, array[i].off);
+ return PR_FALSE;
+ }
+@@ -2137,8 +2137,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].str, array[i].off);
++ array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2146,8 +2146,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2245,8 +2245,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].str, array[i].off);
++ array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2254,8 +2254,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2364,8 +2364,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -2375,8 +2375,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, array[i].str, array[i].off);
++ (unsigned)array[i].max, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2384,8 +2384,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2496,8 +2496,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -2507,8 +2507,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, array[i].str, array[i].off);
++ (unsigned)array[i].max, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2516,8 +2516,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2615,8 +2615,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].str, array[i].off);
++ array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2624,8 +2624,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2723,8 +2723,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].str, array[i].off);
++ array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2732,8 +2732,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- rv, array[i].str, array[i].off);
++ rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2842,8 +2842,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -2853,8 +2853,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, array[i].str, array[i].off);
++ (unsigned)array[i].max, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2862,8 +2862,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2974,8 +2974,8 @@
+ if( (char *)0 != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> %.32s, not null\n", i,
++ printf("FAIL %d: %s,%s/%u -> %.32s, not null\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv);
++ (unsigned)array[i].max, rv);
+ return PR_FALSE;
+ }
+@@ -2985,8 +2985,8 @@
+ if( (char *)0 == rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> null, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> null, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, array[i].str, array[i].off);
++ (unsigned)array[i].max, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+@@ -2994,8 +2994,8 @@
+ if( &array[i].str[ array[i].off ] != rv )
+ {
+- printf("FAIL %d: %s,%s/%lu -> 0x%x, not 0x%x+%lu\n", i,
++ printf("FAIL %d: %s,%s/%u -> %p, not %p+%u\n", i,
+ array[i].str ? array[i].str : "(null)",
+ array[i].sub ? array[i].sub : "(null)",
+- array[i].max, rv, array[i].str, array[i].off);
++ (unsigned)array[i].max, rv, array[i].str, (unsigned)array[i].off);
+ return PR_FALSE;
+ }
+--- ../lib/tests/arena.c Sun Apr 25 11:00:46 2004
++++ ../lib/tests/arena.c Mon Jul 25 19:52:15 2005
+@@ -69,4 +69,5 @@
+ }
+
++#if 0
+ /*
+ ** Test Arena allocation.
+@@ -129,4 +130,5 @@
+ return;
+ } /* end ArenaGrow() */
++#endif
+
+
+--- ../lib/tests/base64t.c Sun Apr 25 11:00:46 2004
++++ ../lib/tests/base64t.c Mon Jul 25 20:16:54 2005
+@@ -2020,5 +2020,4 @@
+ {
+ PRUint32 plen = PL_strlen(array[i].plaintext);
+- PRUint32 clen = ((plen + 2)/3)*4;
+
+ char *rv = PL_Base64Encode(array[i].plaintext, plen, (char *)0);
+@@ -2780,7 +2779,4 @@
+ for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
+ {
+- PRUint32 plen = PL_strlen(array[i].plaintext);
+- PRUint32 clen = ((plen + 2)/3)*4;
+-
+ char *rv = PL_Base64Encode(array[i].plaintext, 0, (char *)0);
+
+@@ -2916,6 +2912,4 @@
+ for( i = 0; i < sizeof(array)/sizeof(array[0]); i++ )
+ {
+- PRUint32 clen = PL_strlen(array[i].cyphertext);
+-
+ char *rv = PL_Base64Decode(array[i].cyphertext, 0, (char *)0);
+
diff --git a/devel/nspr/files/patch-pthread_t b/devel/nspr/files/patch-pthread_t
new file mode 100644
index 0000000..5ecbbe4
--- /dev/null
+++ b/devel/nspr/files/patch-pthread_t
@@ -0,0 +1,47 @@
+pthread_t can well be a 64-bit value -- on FreeBSD/amd64, for example.
+Better to just keep calling it pthread_t isntead of casting to anything.
+
+ -mi
+
+--- ../pr/include/private/pprthred.h Sun Apr 25 11:00:56 2004
++++ ../pr/include/private/pprthred.h Tue Jul 12 00:52:42 2005
+@@ -44,4 +44,5 @@
+ */
+ #include "nspr.h"
++#include <pthread.h>
+
+ #if defined(XP_OS2)
+@@ -92,5 +92,5 @@
+ ** when it is created or attached.
+ */
+-NSPR_API(PRUint32) PR_GetThreadID(PRThread *thread);
++NSPR_API(pthread_t) PR_GetThreadID(PRThread *thread);
+
+ /*
+--- ../pr/src/pthreads/ptthread.c.orig 2007-07-05 08:21:07.000000000 -0400
++++ ../pr/src/pthreads/ptthread.c 2007-07-05 08:32:39.000000000 -0400
+@@ -1059,12 +1059,12 @@
+ _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
+ }
+
+@@ -1196,7 +1196,9 @@
+ PRIntn count = 0;
+ PRStatus rv = PR_SUCCESS;
+ PRThread* thred = pt_book.first;
++#if !defined(_PR_DCETHREADS) && (defined(DEBUG) || defined(FORCE_PR_ASSERT))
+ PRThread *me = PR_GetCurrentThread();
++#endif
+
+ PR_LOG(_pr_gc_lm, PR_LOG_ALWAYS, ("Begin PR_EnumerateThreads\n"));
+ /*
diff --git a/devel/nspr/files/patch-tests b/devel/nspr/files/patch-tests
new file mode 100644
index 0000000..05fb3b5
--- /dev/null
+++ b/devel/nspr/files/patch-tests
@@ -0,0 +1,1895 @@
+--- ../pr/tests/cleanup.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/cleanup.c Tue Jul 12 01:19:53 2005
+@@ -48,5 +48,5 @@
+ static void PR_CALLBACK Thread(void *sleep)
+ {
+- PR_Sleep(PR_SecondsToInterval((PRUint32)sleep));
++ PR_Sleep(PR_SecondsToInterval((intptr_t)sleep));
+ printf("Thread exiting\n");
+ }
+@@ -72,5 +72,6 @@
+ PRFileDesc *err = PR_GetSpecialFD(PR_StandardError);
+ PLOptState *opt = PL_CreateOptState(argc, argv, "Ghs:S:t:cC:");
+- PRIntn concurrency = 1, child_sleep = 10, main_sleep = 5, threads = 1;
++ PRIntn concurrency = 1, main_sleep = 5, threads = 1;
++ intptr_t child_sleep = 10;
+
+ PR_STDIO_INIT();
+@@ -113,5 +114,5 @@
+ PR_fprintf(err, "\tConcurrency: %d\n", concurrency);
+ PR_fprintf(err, "\tNumber of threads: %d\n", threads);
+- PR_fprintf(err, "\tThread sleep: %d\n", child_sleep);
++ PR_fprintf(err, "\tThread sleep: %ld\n", (long)child_sleep);
+ PR_fprintf(err, "\tMain sleep: %d\n", main_sleep);
+ PR_fprintf(err, "\tCleanup will %sbe called\n\n", (cleanup) ? "" : "NOT ");
+--- ../pr/tests/cvar.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/cvar.c Tue Jul 12 01:22:52 2005
+@@ -174,5 +174,5 @@
+ {
+ CircBuf *cbp = (CircBuf *)arg;
+- PRInt32 i, n;
++ intptr_t i, n;
+ void *data;
+
+@@ -180,6 +180,6 @@
+ for (i = 0; i < n; i++) {
+ data = GetCBData(cbp);
+- if ((int)data != i)
+- if (debug_mode) printf("data mismatch at for i = %d usec\n", i);
++ if ((intptr_t)data != i)
++ if (debug_mode) printf("data mismatch at for i = %ld usec\n", (long)i);
+ }
+
+@@ -193,5 +193,5 @@
+ {
+ CircBuf *cbp = (CircBuf *)arg;
+- PRInt32 i, n;
++ intptr_t i, n;
+
+ n = count / 2;
+--- ../pr/tests/foreign.c Mon Mar 7 20:22:57 2005
++++ ../pr/tests/foreign.c Tue Jul 12 01:25:31 2005
+@@ -269,5 +269,5 @@
+ PRDir *dir;
+ PRFileDesc *pair[2];
+- PRIntn test = (PRIntn)arg;
++ intptr_t test = (intptr_t)arg;
+
+ for (test = 0; test < 12; ++test) {
+@@ -364,5 +364,5 @@
+ {
+ PRStatus rv;
+- PRInt32 thread_cnt = DEFAULT_THREAD_COUNT;
++ intptr_t thread_cnt = DEFAULT_THREAD_COUNT;
+ PLOptStatus os;
+ PLOptState *opt = PL_CreateOptState(argc, argv, "dt:");
+--- ../pr/tests/forktest.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/forktest.c Tue Jul 12 01:28:15 2005
+@@ -80,5 +80,5 @@
+ PRNetAddr addr;
+ PRFileDesc *sock = NULL;
+- PRInt32 tmp = (PRInt32)arg;
++ intptr_t tmp = (intptr_t)arg;
+
+ /*
+@@ -176,5 +176,5 @@
+ }
+ clientThread = PR_CreateThread( PR_USER_THREAD, ClientThreadFunc,
+- (void *) PR_ntohs(addr.inet.port), PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
++ (void *)(intptr_t)PR_ntohs(addr.inet.port), PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_JOINABLE_THREAD, 0);
+ if (clientThread == NULL) {
+@@ -185,2 +185,5 @@
+ }
++ printf("Wait one second before accept\n");
++ fflush(stdout);
++ PR_Sleep(PR_SecondsToInterval(1));
+ printf("Accepting connection at port %hu\n", PR_ntohs(addr.inet.port));
+--- ../pr/tests/mbcs.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/mbcs.c Tue Jul 12 01:34:26 2005
+@@ -93,5 +93,4 @@
+ PRFileInfo info;
+ PRStatus rc;
+- PRInt32 err;
+ PRFileDesc *fd;
+ char nextDir[256];
+@@ -114,14 +114,14 @@
+ }
+ if ( PR_FILE_FILE == info.type ) {
+- printf("File: %s \tsize: %ld\n", dirEntry->name, info.size );
++ printf("File: %s \tsize: %ld\n", dirEntry->name, (long)info.size );
+ fd = PR_Open( file, PR_RDONLY, 0 );
+ if ( NULL == fd ) {
+ printf("PR_Open() failed. Error: %ld, OSError: %ld\n",
+- PR_GetError(), PR_GetOSError());
++ (long)PR_GetError(), (long)PR_GetOSError());
+ }
+ rc = PR_Close( fd );
+ if ( PR_FAILURE == rc ) {
+ printf("PR_Close() failed. Error: %ld, OSError: %ld\n",
+- PR_GetError(), PR_GetOSError());
++ (long)PR_GetError(), (long)PR_GetOSError());
+ }
+ } else if ( PR_FILE_DIRECTORY == info.type ) {
+--- ../pr/tests/nonblock.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/nonblock.c Tue Jul 12 01:37:52 2005
+@@ -84,5 +84,5 @@
+ clientThreadFunc(void *arg)
+ {
+- PRUintn port = (PRUintn)arg;
++ intptr_t port = (intptr_t)arg;
+ PRFileDesc *sock;
+ PRNetAddr addr;
+@@ -196,5 +196,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort,
++ clientThreadFunc, (void *) (intptr_t)listenPort,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+@@ -240,5 +240,5 @@
+ PL_PrintError("First Receive:\n");
+ fprintf(stderr, "First PR_Recv: retVal: %ld, Error: %ld\n",
+- retVal, PR_GetError());
++ (long)retVal, (long)PR_GetError());
+ exit(1);
+ }
+@@ -250,5 +250,5 @@
+ PL_PrintError("Second Receive:\n");
+ fprintf(stderr, "Second PR_Recv: retVal: %ld, Error: %ld\n",
+- retVal, PR_GetError());
++ (long)retVal, (long)PR_GetError());
+ exit(1);
+ }
+--- ../pr/tests/op_noacc.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/op_noacc.c Tue Jul 12 01:40:22 2005
+@@ -82,5 +82,5 @@
+ PR_STDIO_INIT();
+ err01 = PR_Open("err01.tmp", PR_CREATE_FILE | PR_RDWR, 0);
+- if (err01 == NULL)
++ if (err01 == NULL) {
+ if (PR_GetError() == PR_NO_ACCESS_RIGHTS_ERROR) {
+ printf ("error code is %d\n",PR_GetError());
+@@ -92,3 +92,7 @@
+ return 1;
+ }
+-}
++ } else {
++ perror("err01.tmp");
++ return 2;
++ }
++}
+--- ../pr/tests/peek.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/peek.c Tue Jul 12 01:41:44 2005
+@@ -168,5 +168,5 @@
+ PRFileDesc *sock;
+ PRSocketOptionData opt;
+- PRUint16 port = (PRUint16) arg;
++ PRUint16 port = (intptr_t) arg;
+ PRNetAddr addr;
+ char buf[BUFFER_SIZE];
+@@ -332,5 +332,5 @@
+ }
+ client = PR_CreateThread(
+- PR_USER_THREAD, ClientNB, (void *) port,
++ PR_USER_THREAD, ClientNB, (void *)(intptr_t) port,
+ PR_PRIORITY_NORMAL, scope, PR_JOINABLE_THREAD, 0);
+ if (NULL == client) {
+--- ../pr/tests/pipepong.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/pipepong.c Tue Jul 12 01:43:52 2005
+@@ -69,5 +69,5 @@
+ fprintf(stderr, "pong process: received \"%s\"\n", buf);
+ if (nBytes != 5) {
+- fprintf(stderr, "pong process: expected 5 bytes but got %d bytes\n",
++ fprintf(stderr, "pong process: expected 5 bytes but got %zd bytes\n",
+ nBytes);
+ exit(1);
+--- ../pr/tests/poll_nm.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/poll_nm.c Tue Jul 12 01:45:57 2005
+@@ -97,5 +97,5 @@
+ clientThreadFunc(void *arg)
+ {
+- PRUintn port = (PRUintn) arg;
++ PRUintn port = (intptr_t) arg;
+ PRFileDesc *sock;
+ PRNetAddr addr;
+@@ -251,5 +251,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort1,
++ clientThreadFunc, (void *)(intptr_t)listenPort1,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+@@ -261,5 +261,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort2,
++ clientThreadFunc, (void *)(intptr_t)listenPort2,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+--- ../lib/tests/Makefile.in Sun Nov 7 21:52:55 2004
++++ ../lib/tests/Makefile.in Tue Jul 12 01:49:15 2005
+@@ -247,5 +247,5 @@
+ $(LINK) $(EXEFLAGS) $(LDOPTS) $< $(LIBPLC) $(LIBPLDS) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS)
+ else
+- $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBPLDS) $(LIBPR) $(EXTRA_LIBS) -o $@
++ $(CC) $(XCFLAGS) $< $(LDOPTS) $(LIBPLC) $(LIBPLDS) $(LIBPR) $(OS_LIBS) $(EXTRA_LIBS) -o $@
+ endif
+ endif
+--- ../pr/tests/getai.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/getai.c Tue Jul 12 02:20:40 2005
+@@ -46,6 +46,11 @@
+ void *iter;
+ PRNetAddr addr;
++ const char *host;
+
+- ai = PR_GetAddrInfoByName(argv[1], PR_AF_UNSPEC, PR_AI_ADDRCONFIG);
++ if (argc > 1)
++ host = argv[1];
++ else
++ host = "www.FreeBSD.org";
++ ai = PR_GetAddrInfoByName(host, PR_AF_UNSPEC, PR_AI_ADDRCONFIG);
+ if (ai == NULL) {
+ fprintf(stderr, "PR_GetAddrInfoByName failed: (%d, %d)\n",
+--- ../pr/tests/Makefile.in Sun Apr 25 11:01:02 2004
++++ ../pr/tests/Makefile.in Tue Jul 12 02:25:18 2005
+@@ -556,16 +557,17 @@
+
+ runtests:: $(PROGS) ALWAYS
+- @$(ECHO) "\nNSPR Test Results - $(OBJDIR)\n"
+- @$(ECHO) "BEGIN\t\t\t`date`"
+- @$(ECHO) "NSPR_TEST_LOGFILE\t$(LOGFILE)\n"
+- @$(ECHO) "Test\t\t\tResult\n"
++ @$(ECHO) "NSPR Test Results - $(OBJDIR)"
++ @$(ECHO) "BEGIN `date`"
++ @$(ECHO) "Test Result"
+ @cd $(OBJDIR); for i in $(PROGRAMS); do \
+- $(ECHO) "$$i\c"; \
+- ./$$i >> $(LOGFILE) 2>&1 ; \
++ printf "$$i"; \
++ ./$$i > $$i.output 2>&1; \
+ if [ 0 = $$? ] ; then \
+- $(ECHO) "\t\t\tPassed"; \
+- else \
+- $(ECHO) "\t\t\tFAILED"; \
+- fi; \
++ $(ECHO) " Passed"; \
++ rm $$i.output; \
++ else \
++ $(ECHO) " FAILED"; \
++ cat $$i.output; \
++ fi; \
+ done
+- @$(ECHO) "\nEND\t\t`date`\n"
++ @$(ECHO) "END `date`"
+--- ../pr/tests/instrumt.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/instrumt.c Mon Jul 25 20:45:54 2005
+@@ -83,5 +83,5 @@
+
+ #define SMALL_TRACE_BUFSIZE ( 60 * 1024 )
+-
++#define DEBUG
+ typedef enum
+ {
+@@ -114,5 +114,4 @@
+ PR_DEFINE_COUNTER( rh );
+ const char *qn, *rn, *dn;
+- const char **qname = &qn, **rname = &rn, **desc = &dn;
+ PRUint32 tCtr;
+
+@@ -126,5 +125,5 @@
+ {
+ PR_GET_COUNTER_NAME_FROM_HANDLE( rh, qname, rname, desc );
+- tCtr = PR_GET_COUNTER(tCtr, rh);
++ PR_GET_COUNTER(tCtr, rh);
+ PR_LOG( lm, msgLevel,
+ ( "QName: %s RName: %s Desc: %s Value: %ld\n",
+@@ -142,5 +141,4 @@
+ PR_DEFINE_TRACE( rh );
+ const char *qn, *rn, *dn;
+- const char **qname = &qn, **rname = &rn, **desc = &dn;
+
+ PR_INIT_TRACE_HANDLE( qh, NULL );
+@@ -221,6 +219,4 @@
+ PRThread *t1, *t2, *t3, *t4;
+ PRIntn i = 0;
+- PR_DEFINE_COUNTER( tc );
+- PR_DEFINE_COUNTER( zCounter );
+
+ PR_LOG( lm, msgLevel,
+@@ -359,7 +355,5 @@
+ static void TraceTest( void )
+ {
+- PRInt32 i;
+ PRInt32 size;
+- PR_DEFINE_TRACE( th );
+ PRThread *t1, *t2;
+
+--- ../pr/tests/layer.c Fri Apr 29 18:46:05 2005
++++ ../pr/tests/layer.c Mon Jul 25 20:53:03 2005
+@@ -78,5 +78,8 @@
+ {
+ PRFileDesc *layer = PR_CreateIOLayerStub(identity, &myMethods);
+- PRStatus rv = PR_PushIOLayer(stack, PR_GetLayersIdentity(stack), layer);
++#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
++ PRStatus rv = /* we only need rv for PR_ASSERT() */
++#endif
++ PR_PushIOLayer(stack, PR_GetLayersIdentity(stack), layer);
+ if (verbosity > quiet)
+ PR_fprintf(logFile, "Pushed layer(0x%x) onto stack(0x%x)\n", layer, stack);
+--- ../pr/tests/lazyinit.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/lazyinit.c Mon Jul 25 20:54:18 2005
+@@ -76,5 +76,4 @@
+ PRDir *dir = NULL;
+ PRLock *ml = NULL;
+- PRCondVar *cv = NULL;
+ PRThread *thread = NULL;
+ PRIntervalTime interval = 0;
+--- ../pr/tests/lltest.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/lltest.c Mon Jul 25 20:57:30 2005
+@@ -578,4 +578,5 @@
+ }
+
++#if 0
+ static void ShiftCompileOnly()
+ {
+@@ -594,4 +595,5 @@
+
+ } /* ShiftCompileOnly */
++#endif
+
+
+@@ -668,5 +670,4 @@
+ PRInt64 largeValTimesTwo = LL_INIT( 0x00000003, 0xfffffffe );
+ PRInt64 largeMultCand = LL_INIT( 0x00000000, 0x7fffffff );
+- PRInt64 largeMinusMultCand = LL_INIT( 0xffffffff, 0x10000001 );
+ PRInt64 largeMultCandx64K = LL_INIT( 0x00007fff, 0xffff0000 );
+ PRInt64 largeNumSHL5 = LL_INIT( 0x0000001f, 0xffffffe0 );
+--- ../pr/tests/nbconn.c Fri Apr 29 18:46:05 2005
++++ ../pr/tests/nbconn.c Mon Jul 25 21:00:51 2005
+@@ -93,6 +93,5 @@
+ PRSocketOptionData optData;
+ const char *hostname = NULL;
+- PRIntn default_case, n, bytes_read, bytes_sent;
+- PRInt32 failed_already = 0;
++ PRIntn default_case, n;
+ #ifdef XP_MAC
+ int index;
+@@ -226,5 +225,5 @@
+ }
+ printf( "PR_GetConnectStatus: connect failed: (%ld, %ld)\n",
+- PR_GetError(), PR_GetOSError());
++ (long)PR_GetError(), (long)PR_GetOSError());
+ }
+ PR_Close(sock);
+@@ -300,5 +299,5 @@
+ Server_Param sp;
+ char send_buf[DATA_BUF_SIZE], recv_buf[DATA_BUF_SIZE];
+- PRIntn default_case, n, bytes_read, bytes_sent;
++ PRIntn n, bytes_read, bytes_sent;
+ PRIntn failed_already = 0;
+
+@@ -376,5 +375,5 @@
+ goto def_exit;
+ }
+- DPRINTF(("Created TCP_Server thread [0x%x]\n",thr));
++ DPRINTF(("Created TCP_Server thread [%p]\n", thr));
+ pd.fd = conn_fd;
+ pd.in_flags = PR_POLL_WRITE | PR_POLL_EXCEPT;
+@@ -459,5 +458,5 @@
+ } else {
+ fprintf(stderr,"PR_GetConnectStatus: connect failed: (%ld, %ld)\n",
+- PR_GetError(), PR_GetOSError());
++ (long)PR_GetError(), (long)PR_GetOSError());
+ failed_already = 1;
+ goto def_exit;
+@@ -569,5 +568,4 @@
+ }
+ if (PR_GetConnectStatus(&pd) == PR_SUCCESS) {
+- PRInt32 rv;
+ fprintf(stderr,"PR_GetConnectStatus succeeded, expected to fail\n");
+ failed_already = 1;
+--- ../pr/tests/nblayer.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/nblayer.c Mon Jul 25 21:02:17 2005
+@@ -375,5 +375,5 @@
+ {
+ PRStatus rv;
+- PRFileDesc *newfd, *layer = fd;
++ PRFileDesc *newfd;
+ PRFileDesc *newstack;
+ PRFilePrivate *newsecret;
+--- ../pr/tests/obsints.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/obsints.c Mon Jul 25 21:04:56 2005
+@@ -58,4 +58,7 @@
+
+ #include "prtypes.h" /* which includes protypes.h */
++#if !defined(__GNUC__)
++# define __unused
++#endif
+
+ int main()
+@@ -65,15 +68,15 @@
+ * defined by protypes.h.
+ */
+- intn in;
+- uintn uin;
+- uint ui;
+- int8 i8;
+- uint8 ui8;
+- int16 i16;
+- uint16 ui16;
+- int32 i32;
+- uint32 ui32;
+- int64 i64;
+- uint64 ui64;
++ intn in __unused;
++ uintn uin __unused;
++ uint ui __unused;
++ int8 i8 __unused;
++ uint8 ui8 __unused;
++ int16 i16 __unused;
++ uint16 ui16 __unused;
++ int32 i32 __unused;
++ uint32 ui32 __unused;
++ int64 i64 __unused;
++ uint64 ui64 __unused;
+
+ printf("PASS\n");
+--- ../pr/tests/perf.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/perf.c Mon Jul 25 21:05:55 2005
+@@ -181,5 +181,5 @@
+ for (i = 0; i < n; i++) {
+ while (cxq == 0) {
+- DPRINTF(("CXReader: thread = 0x%lx waiting\n",
++ DPRINTF(("CXReader: thread = %p waiting\n",
+ PR_GetCurrentThread()));
+ PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);
+@@ -194,5 +194,5 @@
+ PR_Notify(mon2);
+ PR_ExitMonitor(mon2);
+- DPRINTF(("CXReader: thread = 0x%lx exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("CXReader: thread = %p exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -205,5 +205,5 @@
+ for (i = 0; i < n; i++) {
+ while (cxq == 1) {
+- DPRINTF(("CXWriter: thread = 0x%lx waiting\n",
++ DPRINTF(("CXWriter: thread = %p waiting\n",
+ PR_GetCurrentThread()));
+ PR_Wait(mon, PR_INTERVAL_NO_TIMEOUT);
+@@ -218,5 +218,5 @@
+ PR_Notify(mon2);
+ PR_ExitMonitor(mon2);
+- DPRINTF(("CXWriter: thread = 0x%lx exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("CXWriter: thread = %p exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -238,5 +238,5 @@
+ fprintf(stderr, "ContextSwitch: cannot create thread\n");
+ } else {
+- DPRINTF(("ContextSwitch: created %s thread = 0x%lx\n",
++ DPRINTF(("ContextSwitch: created %s thread = %p\n",
+ (scope1 == PR_GLOBAL_THREAD ?
+ "PR_GLOBAL_THREAD" : "PR_LOCAL_THREAD"),
+@@ -252,5 +252,5 @@
+ fprintf(stderr, "ContextSwitch: cannot create thread\n");
+ } else {
+- DPRINTF(("ContextSwitch: created %s thread = 0x%lx\n",
++ DPRINTF(("ContextSwitch: created %s thread = %p\n",
+ (scope2 == PR_GLOBAL_THREAD ?
+ "PR_GLOBAL_THREAD" : "PR_LOCAL_THREAD"),
+@@ -294,8 +294,8 @@
+ n = count / 2;
+ for (i = 0; i < n; i++) {
+- DPRINTF(("SemaThread: thread = 0x%lx waiting on sem = 0x%lx\n",
++ DPRINTF(("SemaThread: thread = %p waiting on sem = %p\n",
+ PR_GetCurrentThread(), sem[0]));
+ PR_WaitSem(sem[0]);
+- DPRINTF(("SemaThread: thread = 0x%lx posting on sem = 0x%lx\n",
++ DPRINTF(("SemaThread: thread = %p posting on sem = %p\n",
+ PR_GetCurrentThread(), sem[1]));
+ PR_PostSem(sem[1]);
+@@ -306,5 +306,5 @@
+ PR_Notify(mon2);
+ PR_ExitMonitor(mon2);
+- DPRINTF(("SemaThread: thread = 0x%lx exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("SemaThread: thread = %p exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -334,5 +334,5 @@
+ fprintf(stderr, "SemaContextSwitch: cannot create thread\n");
+ } else {
+- DPRINTF(("SemaContextSwitch: created %s thread = 0x%lx\n",
++ DPRINTF(("SemaContextSwitch: created %s thread = %p\n",
+ (scope1 == PR_GLOBAL_THREAD ?
+ "PR_GLOBAL_THREAD" : "PR_LOCAL_THREAD"),
+@@ -349,5 +349,5 @@
+ fprintf(stderr, "SemaContextSwitch: cannot create thread\n");
+ } else {
+- DPRINTF(("SemaContextSwitch: created %s thread = 0x%lx\n",
++ DPRINTF(("SemaContextSwitch: created %s thread = %p\n",
+ (scope2 == PR_GLOBAL_THREAD ?
+ "PR_GLOBAL_THREAD" : "PR_LOCAL_THREAD"),
+--- ../pr/tests/prpoll.c Fri Apr 29 18:46:05 2005
++++ ../pr/tests/prpoll.c Mon Jul 25 21:07:40 2005
+@@ -70,5 +70,5 @@
+ clientThreadFunc(void *arg)
+ {
+- PRUint16 port = (PRUint16) arg;
++ PRUint16 port = (PRUint16)(uintptr_t)arg;
+ PRFileDesc *sock;
+ PRNetAddr addr;
+@@ -229,5 +229,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort1,
++ clientThreadFunc, (void *)(uintptr_t)listenPort1,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+@@ -238,5 +238,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort2,
++ clientThreadFunc, (void *)(uintptr_t)listenPort2,
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+@@ -247,5 +247,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort3,
++ clientThreadFunc, (void *)(uintptr_t)listenPort3,
+ PR_PRIORITY_NORMAL, PR_GLOBAL_BOUND_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+--- ../pr/tests/ranfile.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/ranfile.c Mon Jul 25 21:13:44 2005
+@@ -169,5 +169,5 @@
+ Hammer_t *cd = (Hammer_t*)arg;
+
+- (void)sprintf(filename, "%ssg%04ld.dat", baseName, cd->id);
++ (void)sprintf(filename, "%ssg%04d.dat", baseName, (int)cd->id);
+
+ if (debug_mode) printf("Starting work on %s\n", filename);
+@@ -408,6 +408,6 @@
+ else
+ if (debug_mode) printf(
+- "%s: test failed %s after %ld seconds\n",
+- programName, where[hammer[poll].problem], duration);
++ "%s: test failed %s after %d seconds\n",
++ programName, where[hammer[poll].problem], (int)duration);
+ else failed_already=1;
+ }
+@@ -415,5 +415,5 @@
+ }
+ if (debug_mode) printf(
+- "%s: [%ld [%ld] %ld] writes/sec average\n",
++ "%s: [%d [%d] %d] writes/sec average\n",
+ programName, writesMin, writesTot * 1000 / durationTot, writesMax);
+
+--- ../pr/tests/randseed.c Fri Apr 29 18:46:05 2005
++++ ../pr/tests/randseed.c Mon Jul 25 21:15:01 2005
+@@ -81,5 +81,4 @@
+ {
+ PRUint32 *rp = buf;
+- PRIntn i;
+
+ printf("%4.4d--\n", size );
+--- ../pr/tests/sel_spd.c Fri Apr 29 17:02:55 2005
++++ ../pr/tests/sel_spd.c Mon Jul 25 21:20:29 2005
+@@ -48,4 +48,7 @@
+ #include <errno.h>
+ #include <string.h>
++#if defined(XP_UNIX) || defined(XP_OS2_EMX)
++# include <unistd.h> /* getopt(3) */
++#endif
+
+ #ifdef XP_MAC
+@@ -63,14 +66,14 @@
+
+ typedef struct timer_slot_t {
+- unsigned long d_connect;
+- unsigned long d_cl_data;
+- unsigned long d_sv_data;
+- unsigned long d_close;
+- unsigned long d_total;
+- unsigned long requests;
++ unsigned int d_connect;
++ unsigned int d_cl_data;
++ unsigned int d_sv_data;
++ unsigned int d_close;
++ unsigned int d_total;
++ unsigned int requests;
+ } timer_slot_t;
+
+-static long _iterations = 5;
+-static long _client_data = 8192;
++static int _iterations = 5;
++static int _client_data = 8192;
+
+ #if defined(XP_MAC)
+@@ -81,10 +84,9 @@
+ * buffer.
+ */
+-static long _server_data = (8*1024);
+-static long _threads_max = 10, _threads = 10;
++static int _server_data = (8*1024);
+ #else
+-static long _server_data = (128*1024);
+-static long _threads_max = 10, _threads = 10;
++static int _server_data = (128*1024);
+ #endif
++static int _threads_max = 10, _threads = 10;
+
+ static int verbose=0;
+@@ -514,10 +516,10 @@
+ {
+ int index;
+- unsigned long tot_connect = 0;
+- unsigned long tot_cl_data = 0;
+- unsigned long tot_sv_data = 0;
+- unsigned long tot_close = 0;
+- unsigned long tot_all = 0;
+- unsigned long tot_requests = 0;
++ unsigned int tot_connect = 0;
++ unsigned int tot_cl_data = 0;
++ unsigned int tot_sv_data = 0;
++ unsigned int tot_close = 0;
++ unsigned int tot_all = 0;
++ unsigned int tot_requests = 0;
+
+ fprintf(stdout, "Server results:\n\n");
+--- ../pr/tests/selct_nm.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/selct_nm.c Mon Jul 25 21:21:56 2005
+@@ -82,5 +82,5 @@
+ clientThreadFunc(void *arg)
+ {
+- PRUintn port = (PRUintn) arg;
++ PRUintn port = (PRUintn)(uintptr_t)arg;
+ PRFileDesc *sock;
+ PRNetAddr addr;
+@@ -202,5 +202,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort1,
++ clientThreadFunc, (void *)(uintptr_t)listenPort1,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+@@ -212,5 +212,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- clientThreadFunc, (void *) listenPort2,
++ clientThreadFunc, (void *)(uintptr_t)listenPort2,
+ PR_PRIORITY_NORMAL, PR_LOCAL_THREAD,
+ PR_UNJOINABLE_THREAD, 0);
+--- ../pr/tests/select2.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/select2.c Mon Jul 25 21:27:44 2005
+@@ -86,4 +86,5 @@
+ ***********************************************************************/
+
++static int exitcode = 2;
+
+ static void Test_Result (int result)
+@@ -93,7 +94,10 @@
+ case PASS:
+ printf ("PASS\n");
++ if (exitcode == 2)
++ exitcode = 0;
+ break;
+ case FAIL:
+ printf ("FAIL\n");
++ exitcode = 1;
+ break;
+ default:
+@@ -305,5 +309,6 @@
+ }
+
+-void main(int argc, char **argv)
++int
++main(int argc, char **argv)
+ {
+
+@@ -352,3 +357,4 @@
+
+
++ return exitcode;
+ }
+--- ../pr/tests/semaerr.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/semaerr.c Mon Jul 25 21:29:23 2005
+@@ -91,5 +91,5 @@
+ }
+ if (PR_GetError() != PR_FILE_NOT_FOUND_ERROR) {
+- fprintf(stderr, "Expected error is %d but got (%d, %d)\n",
++ fprintf(stderr, "Expected error is %ld (PR_FILE_NOT_FOUND_ERROR) but got (%d, %d)\n",
+ PR_FILE_NOT_FOUND_ERROR, PR_GetError(), PR_GetOSError());
+ exit(1);
+--- ../pr/tests/semaerr1.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/semaerr1.c Mon Jul 25 21:30:25 2005
+@@ -103,5 +103,5 @@
+ }
+ if (PR_GetError() != PR_FILE_EXISTS_ERROR) {
+- fprintf(stderr, "Expect %d but got %d\n", PR_FILE_EXISTS_ERROR,
++ fprintf(stderr, "Expected %ld (PR_FILE_EXISTS_ERROR) but got %d\n", PR_FILE_EXISTS_ERROR,
+ PR_GetError());
+ exit(1);
+--- ../pr/tests/sendzlf.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/sendzlf.c Mon Jul 25 21:31:35 2005
+@@ -59,5 +59,5 @@
+ PRFileDesc *sock;
+ PRNetAddr addr;
+- PRUint16 port = (PRUint16) arg;
++ PRUint16 port = (PRUint16)(uintptr_t)arg;
+ char buf[1024];
+ char *bufPtr;
+@@ -217,5 +217,5 @@
+
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- ClientThread, (void *) PR_ntohs(PR_NetAddrInetPort(&addr)),
++ ClientThread, (void *)(uintptr_t)PR_ntohs(PR_NetAddrInetPort(&addr)),
+ PR_PRIORITY_NORMAL, scope, PR_JOINABLE_THREAD, 0);
+ if (NULL == clientThread) {
+--- ../pr/tests/server_test.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/server_test.c Mon Jul 25 21:35:37 2005
+@@ -93,5 +93,5 @@
+ #define DPRINTF printf
+ #else
+-#define DPRINTF
++#define DPRINTF(...)
+ #endif
+
+@@ -531,4 +531,5 @@
+ }
+
++#if 0
+ static void do_workUK(void)
+ {
+@@ -551,4 +552,5 @@
+ do_work();
+ }
++#endif
+
+
+@@ -568,4 +570,5 @@
+
+
++int
+ main(int argc, char **argv)
+ {
+--- ../pr/tests/servr_kk.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/servr_kk.c Mon Jul 25 21:38:28 2005
+@@ -90,5 +90,5 @@
+ #define DPRINTF printf
+ #else
+-#define DPRINTF
++#define DPRINTF(...)
+ #endif
+
+@@ -501,4 +501,5 @@
+ }
+
++#if 0
+ static void do_workUU(void)
+ {
+@@ -521,4 +522,5 @@
+ do_work();
+ }
++#endif
+
+ static void do_workKK(void)
+--- ../pr/tests/servr_ku.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/servr_ku.c Mon Jul 25 21:40:29 2005
+@@ -90,5 +90,5 @@
+ #define DPRINTF printf
+ #else
+-#define DPRINTF
++#define DPRINTF(...)
+ #endif
+
+@@ -527,4 +527,5 @@
+
+
++int
+ main(int argc, char **argv)
+ {
+--- ../pr/tests/servr_uk.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/servr_uk.c Mon Jul 25 21:41:31 2005
+@@ -90,5 +90,5 @@
+ #define DPRINTF printf
+ #else
+-#define DPRINTF
++#define DPRINTF(...)
+ #endif
+
+@@ -529,4 +529,5 @@
+
+
++int
+ main(int argc, char **argv)
+ {
+--- ../pr/tests/servr_uu.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/servr_uu.c Mon Jul 25 21:42:27 2005
+@@ -90,5 +90,5 @@
+ #define DPRINTF printf
+ #else
+-#define DPRINTF
++#define DPRINTF(...)
+ #endif
+
+@@ -526,4 +526,5 @@
+
+
++int
+ main(int argc, char **argv)
+ {
+--- ../pr/tests/short_thread.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/short_thread.c Mon Jul 25 21:44:20 2005
+@@ -76,6 +76,6 @@
+ == NULL ) {
+ fprintf(stderr,
+- "simple_test: Error - PR_CreateThread failed: (%ld, %ld)\n",
+- PR_GetError(), PR_GetOSError());
++ "simple_test: Error - PR_CreateThread failed: (%d, %d)\n",
++ PR_GetError(), PR_GetOSError());
+ exit( 1 );
+ }
+--- ../pr/tests/cvar2.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/cvar2.c Mon Jul 25 20:37:10 2005
+@@ -134,5 +134,5 @@
+ PR_Lock(info->lock);
+ if (*info->tcount == 0) {
+- DPRINTF(("PrivateCondVarThread: thread 0x%lx waiting on cvar = 0x%lx\n",
++ DPRINTF(("PrivateCondVarThread: thread %p waiting on cvar = %p\n",
+ PR_GetCurrentThread(), info->cvar));
+ PR_WaitCondVar(info->cvar, info->timeout);
+@@ -147,6 +147,6 @@
+ (*info->exitcount)++;
+ PR_NotifyCondVar(info->exitcvar);
+-DPRINTF(("PrivateCondVarThread: thread 0x%lx notified exitcvar = 0x%lx cnt = %ld\n",
+- PR_GetCurrentThread(), info->exitcvar,(*info->exitcount)));
++DPRINTF(("PrivateCondVarThread: thread %p notified exitcvar = %p cnt = %d\n",
++ PR_GetCurrentThread(), info->exitcvar,(int)(*info->exitcount)));
+ PR_Unlock(info->exitlock);
+ }
+@@ -196,5 +196,5 @@
+ CondVarTestSUU(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -228,5 +228,5 @@
+ PR_LOCAL_THREAD);
+ index++;
+- DPRINTF(("CondVarTestSUU: created thread 0x%lx\n",list[index].thread));
++ DPRINTF(("CondVarTestSUU: created thread %p\n",list[index].thread));
+ }
+
+@@ -238,5 +238,5 @@
+ PR_NotifyCondVar(list[index].cvar);
+ PR_Unlock(list[index].lock);
+- DPRINTF(("PrivateCondVarThread: thread 0x%lx notified cvar = 0x%lx\n",
++ DPRINTF(("PrivateCondVarThread: thread %p notified cvar = %p\n",
+ PR_GetCurrentThread(), list[index].cvar));
+ }
+@@ -266,5 +266,5 @@
+ CondVarTestSUK(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -340,5 +340,5 @@
+ CondVarTestPUU(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -375,5 +375,5 @@
+ PR_LOCAL_THREAD);
+
+- DPRINTF(("CondVarTestPUU: created thread 0x%lx\n",list[index].thread));
++ DPRINTF(("CondVarTestPUU: created thread %p\n",list[index].thread));
+ index++;
+ tcount++;
+@@ -393,6 +393,6 @@
+ /* Wait for threads to finish */
+ while(exitcount < arg) {
+-DPRINTF(("CondVarTestPUU: thread 0x%lx waiting on exitcvar = 0x%lx cnt = %ld\n",
+- PR_GetCurrentThread(), exitcvar, exitcount));
++DPRINTF(("CondVarTestPUU: thread %p waiting on exitcvar = %p cnt = %d\n",
++ PR_GetCurrentThread(), exitcvar, (int)exitcount));
+ PR_WaitCondVar(exitcvar, PR_SecondsToInterval(60));
+ }
+@@ -404,5 +404,5 @@
+ /* Join all the threads */
+ for(index=0; index<(arg); index++) {
+- DPRINTF(("CondVarTestPUU: joining thread 0x%lx\n",list[index].thread));
++ DPRINTF(("CondVarTestPUU: joining thread %p\n",list[index].thread));
+ PR_JoinThread(list[index].thread);
+ if (list[index].internal) {
+@@ -426,5 +426,5 @@
+ CondVarTestPUK(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -507,5 +507,5 @@
+ CondVarTest(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -640,5 +640,5 @@
+ CondVarTimeoutTest(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -751,5 +751,5 @@
+ CondVarMixedTest(void *_arg)
+ {
+- PRInt32 arg = (PRInt32)_arg;
++ PRInt32 arg = (PRInt32)(intptr_t)_arg;
+ PRInt32 index, loops;
+ threadinfo *list;
+@@ -912,5 +912,5 @@
+
+ start = PR_IntervalNow();
+- (*func)((void *)arg);
++ (*func)((void *)(intptr_t)arg);
+ stop = PR_IntervalNow();
+
+@@ -975,5 +975,5 @@
+
+ for (threads = default_threads; threads < default_threads*5; threads+=default_threads) {
+- printf("\n%ld Thread tests\n", threads);
++ printf("\n%d Thread tests\n", (int)threads);
+ Measure(CondVarTestSUU, threads, "Condvar simple test shared UU");
+ Measure(CondVarTestSUK, threads, "Condvar simple test shared UK");
+--- ../pr/tests/io_timeout.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/io_timeout.c Mon Jul 25 20:50:40 2005
+@@ -56,3 +56,5 @@
+
++#include <errno.h>
+ #include <stdio.h>
++#include <string.h>
+ #include "nspr.h"
+@@ -66,3 +68,3 @@
+ #define NUM_THREADS 1
+-#define BASE_PORT 8000
++#define BASE_PORT 38011
+ #define DEFAULT_ACCEPT_TIMEOUT 2
+@@ -78,3 +80,3 @@
+ PRIntn failed_already = 0;
+-PRIntn debug_mode = 0;
++PRIntn debug_mode = 1;
+
+@@ -131,3 +133,8 @@
+ if (debug_mode)
+- printf("unable to bind\n");
++ printf("unable to bind to %d: %s\n",
++ BASE_PORT + info->id, strerror(PR_GetOSError()));
++ if (PR_GetOSError() == EADDRINUSE) {
++ printf("can not proceed with this test\n");
++ exit(0);
++ }
+ failed_already=1;
+@@ -153,4 +160,5 @@
+ if (debug_mode) {
+- printf("PR_Accept() timeout worked!\n");
+- printf("TEST PASSED! PR_Accept() returned error %d\n",
++ printf("PR_Accept() timeout worked!\n"
++ "TEST PASSED! PR_Accept() returned error "
++ "PR_IO_TIMEOUT_ERROR (%ld)\n",
+ PR_IO_TIMEOUT_ERROR);
+--- ../pr/tests/socket.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/socket.c Mon Jul 25 22:14:47 2005
+@@ -219,5 +219,7 @@
+ int bytes;
+ int offset = 0;
++#ifdef WINNT
+ int err;
++#endif
+ PRIntervalTime timeout = PR_INTERVAL_NO_TIMEOUT;
+
+@@ -226,10 +228,12 @@
+
+ for (rem=len; rem; offset += bytes, rem -= bytes) {
+- DPRINTF(("thread = 0x%lx: calling PR_Recv, bytes = %d\n",
++ DPRINTF(("thread = %p: calling PR_Recv, bytes = %d\n",
+ PR_GetCurrentThread(), rem));
++#ifdef WINNT
+ retry:
++#endif
+ bytes = PR_Recv(sockfd, buf + offset, rem, 0,
+ timeout);
+- DPRINTF(("thread = 0x%lx: returning from PR_Recv, bytes = %d\n",
++ DPRINTF(("thread = %p: returning from PR_Recv, bytes = %d\n",
+ PR_GetCurrentThread(), bytes));
+ if (bytes < 0) {
+@@ -262,9 +266,9 @@
+
+ for (rem=len; rem; offset += bytes, rem -= bytes) {
+- DPRINTF(("thread = 0x%lx: calling PR_Send, bytes = %d\n",
++ DPRINTF(("thread = %p: calling PR_Send, bytes = %d\n",
+ PR_GetCurrentThread(), rem));
+ bytes = PR_Send(sockfd, buf + offset, rem, 0,
+ PR_INTERVAL_NO_TIMEOUT);
+- DPRINTF(("thread = 0x%lx: returning from PR_Send, bytes = %d\n",
++ DPRINTF(("thread = %p: returning from PR_Send, bytes = %d\n",
+ PR_GetCurrentThread(), bytes));
+ if (bytes <= 0)
+@@ -314,5 +318,5 @@
+ fprintf(stderr,"prsocket_test: ERROR - PR_Shutdown\n");
+ }
+- DPRINTF(("Serve_Client [0x%lx]: inbuf[0] = 0x%lx\n",PR_GetCurrentThread(),
++ DPRINTF(("Serve_Client [%p]: inbuf[0] = %d\n",PR_GetCurrentThread(),
+ (*((int *) in_buf->data))));
+ if (writen(sockfd, in_buf->data, bytes) < bytes) {
+@@ -453,5 +457,5 @@
+ }
+
+- DPRINTF(("TCP_Server: PR_BIND netaddr.inet.ip = 0x%lx, netaddr.inet.port = %d\n",
++ DPRINTF(("TCP_Server: PR_BIND netaddr.inet.ip = 0x%x, netaddr.inet.port = %d\n",
+ netaddr.inet.ip, netaddr.inet.port));
+ if (PR_SetNetAddr(PR_IpAddrLoopback, client_domain,
+@@ -495,5 +499,5 @@
+
+ t = create_new_thread(PR_USER_THREAD,
+- Serve_Client, (void *)scp,
++ Serve_Client, (void *)scp,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -505,5 +509,5 @@
+ goto exit;
+ }
+- DPRINTF(("TCP_Server: Created Serve_Client = 0x%lx\n", t));
++ DPRINTF(("TCP_Server: Created Serve_Client = %p\n", t));
+ }
+
+@@ -521,5 +525,5 @@
+ PR_Notify(sp->exit_mon);
+ PR_ExitMonitor(sp->exit_mon);
+- DPRINTF(("TCP_Server [0x%lx] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("TCP_Server [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -579,5 +583,5 @@
+ }
+
+- DPRINTF(("PR_Bind: UDP Server netaddr.inet.ip = 0x%lx, netaddr.inet.port = %d\n",
++ DPRINTF(("PR_Bind: UDP Server netaddr.inet.ip = 0x%x, netaddr.inet.port = %d\n",
+ netaddr.inet.ip, netaddr.inet.port));
+ /*
+@@ -617,5 +621,5 @@
+ memset(&netaddr, 0 , sizeof(netaddr));
+ for (i = 0; i < (num_udp_clients * num_udp_datagrams_per_client); i++) {
+- DPRINTF(("UDP_Server: calling PR_RecvFrom client - ip = 0x%lx, port = %d bytes = %d inbuf = 0x%lx, inbuf[0] = 0x%lx\n",
++ DPRINTF(("UDP_Server: calling PR_RecvFrom client - ip = 0x%x, port = %d bytes = %d inbuf = %p, inbuf[0] = 0x%x\n",
+ netaddr.inet.ip, netaddr.inet.port, bytes, in_buf->data,
+ in_buf->data[0]));
+@@ -623,5 +627,5 @@
+ rv = PR_RecvFrom(sockfd, in_buf->data, bytes, 0, &netaddr,
+ PR_INTERVAL_NO_TIMEOUT);
+- DPRINTF(("UDP_Server: PR_RecvFrom client - ip = 0x%lx, port = %d bytes = %d inbuf = 0x%lx, inbuf[0] = 0x%lx\n",
++ DPRINTF(("UDP_Server: PR_RecvFrom client - ip = 0x%x, port = %d bytes = %d inbuf = %p, inbuf[0] = 0x%x\n",
+ netaddr.inet.ip, netaddr.inet.port, rv, in_buf->data,
+ in_buf->data[0]));
+@@ -646,5 +650,5 @@
+ PR_Notify(sp->exit_mon);
+ PR_ExitMonitor(sp->exit_mon);
+- DPRINTF(("UDP_Server [0x%x] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("UDP_Server [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -689,5 +693,5 @@
+ }
+ if (PR_Connect(sockfd, &netaddr,PR_INTERVAL_NO_TIMEOUT) < 0){
+- fprintf(stderr, "PR_Connect failed: (%ld, %ld)\n",
++ fprintf(stderr, "PR_Connect failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -698,5 +702,5 @@
+ * fill in random data
+ */
+- memset(out_buf->data, ((PRInt32) (&netaddr)) + i + j, bytes);
++ memset(out_buf->data, ((intptr_t)(&netaddr)) + i + j, bytes);
+ /*
+ * write to server
+@@ -711,5 +715,5 @@
+ return;
+ }
+- DPRINTF(("TCP Client [0x%lx]: out_buf = 0x%lx out_buf[0] = 0x%lx\n",
++ DPRINTF(("TCP Client [%p]: out_buf = %p out_buf[0] = 0x%x\n",
+ PR_GetCurrentThread(), out_buf, (*((int *) out_buf->data))));
+ if (readn(sockfd, in_buf->data, bytes) < bytes) {
+@@ -748,5 +752,5 @@
+ PR_Notify(cp->exit_mon);
+ PR_ExitMonitor(cp->exit_mon);
+- DPRINTF(("TCP_Client [0x%x] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("TCP_Client [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -754,5 +758,5 @@
+ * UDP_Client
+ * Client Thread
+- * Create a socket and bind an address
++ * Create a socket and bind an address
+ * Communicate with the server at the address specified in the argument.
+ * Fill in a buffer, write data to server, read it back and check
+@@ -812,5 +816,5 @@
+ }
+
+- DPRINTF(("PR_Bind: UDP Client netaddr.inet.ip = 0x%lx, netaddr.inet.port = %d\n",
++ DPRINTF(("PR_Bind: UDP Client netaddr.inet.ip = 0x%x, netaddr.inet.port = %d\n",
+ netaddr.inet.ip, netaddr.inet.port));
+
+@@ -829,7 +833,7 @@
+ * fill in random data
+ */
+- DPRINTF(("UDP_Client [0x%lx]: out_buf = 0x%lx bytes = 0x%lx\n",
++ DPRINTF(("UDP_Client [%p]: out_buf = %p bytes = %d\n",
+ PR_GetCurrentThread(), out_buf->data, bytes));
+- memset(out_buf->data, ((PRInt32) (&netaddr)) + i, bytes);
++ memset(out_buf->data, ((intptr_t)(&netaddr)) + i, bytes);
+ /*
+ * write to server
+@@ -844,5 +848,5 @@
+ return;
+ }
+- DPRINTF(("UDP_Client [0x%lx]: out_buf = 0x%lx out_buf[0] = 0x%lx\n",
++ DPRINTF(("UDP_Client [%p]: out_buf = %p out_buf[0] = 0x%x\n",
+ PR_GetCurrentThread(), out_buf, (*((int *) out_buf->data))));
+ if (cp->udp_connect)
+@@ -855,5 +859,5 @@
+ return;
+ }
+- DPRINTF(("UDP_Client [0x%lx]: in_buf = 0x%lx in_buf[0] = 0x%lx\n",
++ DPRINTF(("UDP_Client [%p]: in_buf = %p in_buf[0] = 0x%x\n",
+ PR_GetCurrentThread(), in_buf, (*((int *) in_buf->data))));
+ /*
+@@ -880,10 +884,10 @@
+ PR_ExitMonitor(cp->exit_mon);
+ PR_DELETE(cp);
+- DPRINTF(("UDP_Client [0x%x] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("UDP_Client [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+ /*
+ * TCP_Socket_Client_Server_Test - concurrent server test
+- *
++ *
+ * One server and several clients are started
+ * Each client connects to the server and sends a chunk of data
+@@ -937,5 +941,5 @@
+ sparamp->datalen = datalen;
+ t = PR_CreateThread(PR_USER_THREAD,
+- TCP_Server, (void *)sparamp,
++ TCP_Server, (void *)sparamp,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -947,5 +951,5 @@
+ return -1;
+ }
+- DPRINTF(("Created TCP server = 0x%lx\n", t));
++ DPRINTF(("Created TCP server = %p\n", t));
+ thread_count++;
+
+@@ -981,5 +985,5 @@
+ return -1;
+ }
+- DPRINTF(("Created TCP client = 0x%lx\n", t));
++ DPRINTF(("Created TCP client = %p\n", t));
+ thread_count++;
+ }
+@@ -991,7 +995,7 @@
+ PR_ExitMonitor(mon2);
+ printf("%30s","TCP_Socket_Client_Server_Test:");
+- printf("%2ld Server %2ld Clients %2ld connections_per_client\n",1l,
++ printf(" 1 Server %2d Clients %2d connections_per_client\n",
+ num_tcp_clients, num_tcp_connections_per_client);
+- printf("%30s %2ld messages_per_connection %4ld bytes_per_message\n",":",
++ printf("%30s %2d messages_per_connection %4d bytes_per_message\n",":",
+ num_tcp_mesgs_per_connection, tcp_mesg_size);
+
+@@ -1001,5 +1005,5 @@
+ /*
+ * UDP_Socket_Client_Server_Test - iterative server test
+- *
++ *
+ * One server and several clients are started
+ * Each client connects to the server and sends a chunk of data
+@@ -1055,5 +1059,5 @@
+ DPRINTF(("Creating UDP server"));
+ t = PR_CreateThread(PR_USER_THREAD,
+- UDP_Server, (void *)sparamp,
++ UDP_Server, (void *)sparamp,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -1121,6 +1125,6 @@
+ PR_ExitMonitor(mon2);
+ printf("%30s","UDP_Socket_Client_Server_Test: ");
+- printf("%2ld Server %2ld Clients\n",1l, num_udp_clients);
+- printf("%30s %2ld datagrams_per_client %4ld bytes_per_datagram\n",":",
++ printf(" 1 Server %2d Clients\n", num_udp_clients);
++ printf("%30s %2d datagrams_per_client %4d bytes_per_datagram\n",":",
+ num_udp_datagrams_per_client, udp_datagram_size);
+
+@@ -1477,5 +1481,5 @@
+ PR_Notify(cp->exit_mon);
+ PR_ExitMonitor(cp->exit_mon);
+- DPRINTF(("TransmitFile_Client [0x%lx] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("TransmitFile_Client [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+@@ -1519,5 +1523,5 @@
+ if (bytes != (SMALL_FILE_SIZE+ SMALL_FILE_HEADER_SIZE)) {
+ fprintf(stderr,
+- "prsocet_test: PR_TransmitFile failed: (%ld, %ld)\n",
++ "prsocet_test: PR_TransmitFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1527,5 +1531,5 @@
+ if (bytes != LARGE_FILE_SIZE) {
+ fprintf(stderr,
+- "prsocket_test: PR_TransmitFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_TransmitFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1555,5 +1559,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1579,5 +1583,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1601,5 +1605,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1623,5 +1627,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1645,5 +1649,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1667,5 +1671,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1689,5 +1693,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1713,5 +1717,5 @@
+ slen, bytes);
+ fprintf(stderr,
+- "prsocket_test: PR_SendFile failed: (%ld, %ld)\n",
++ "prsocket_test: PR_SendFile failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -1788,5 +1792,5 @@
+ }
+
+- DPRINTF(("TCP_Server: PR_BIND netaddr.inet.ip = 0x%lx, netaddr.inet.port = %d\n",
++ DPRINTF(("TCP_Server: PR_BIND netaddr.inet.ip = 0x%x, netaddr.inet.port = %d\n",
+ netaddr.inet.ip, netaddr.inet.port));
+ tcp_server_addr.inet.family = netaddr.inet.family;
+@@ -1843,5 +1847,5 @@
+
+ t[i] = PR_CreateThread(PR_USER_THREAD,
+- Serve_TransmitFile_Client, (void *)scp,
++ Serve_TransmitFile_Client, (void *)scp,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -1854,5 +1858,5 @@
+ goto exit;
+ }
+- DPRINTF(("TransmitFile_Server: Created Serve_TransmitFile_Client = 0x%lx\n", t));
++ DPRINTF(("TransmitFile_Server: Created Serve_TransmitFile_Client = %p\n", t));
+ }
+
+@@ -1882,10 +1886,10 @@
+ PR_Notify(sp->exit_mon);
+ PR_ExitMonitor(sp->exit_mon);
+- DPRINTF(("TransmitFile_Server [0x%lx] exiting\n", PR_GetCurrentThread()));
++ DPRINTF(("TransmitFile_Server [%p] exiting\n", PR_GetCurrentThread()));
+ }
+
+ /*
+- * Socket_Misc_Test - test miscellaneous functions
+- *
++ * Socket_Misc_Test - test miscellaneous functions
++ *
+ */
+ static PRInt32
+@@ -2020,5 +2024,5 @@
+ if (bytes <= 0) {
+ fprintf(stderr,
+- "prsocket_test failed to write to file %s: (%ld, %ld)\n",
++ "prsocket_test failed to write to file %s: (%d, %d)\n",
+ LARGE_FILE_NAME,
+ PR_GetError(), PR_GetOSError());
+@@ -2101,5 +2105,5 @@
+ sparamp->datalen = datalen;
+ t = PR_CreateThread(PR_USER_THREAD,
+- TransmitFile_Server, (void *)sparamp,
++ TransmitFile_Server, (void *)sparamp,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -2112,5 +2116,5 @@
+ goto done;
+ }
+- DPRINTF(("Created TCP server = 0x%x\n", t));
++ DPRINTF(("Created TCP server = %p\n", t));
+ thread_count++;
+
+@@ -2149,5 +2153,5 @@
+ goto done;
+ }
+- DPRINTF(("Created TransmitFile client = 0x%lx\n", t));
++ DPRINTF(("Created TransmitFile client = %p\n", t));
+ thread_count++;
+ }
+@@ -2179,5 +2183,5 @@
+ }
+ if ((PR_RmDir(TEST_DIR)) == PR_FAILURE) {
+- fprintf(stderr,"prsocket_test failed to rmdir %s: (%ld, %ld)\n",
++ fprintf(stderr,"prsocket_test failed to rmdir %s: (%d, %d)\n",
+ TEST_DIR, PR_GetError(), PR_GetOSError());
+ failed_already=1;
+--- ../pr/tests/sockopt.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/sockopt.c Mon Jul 25 22:16:20 2005
+@@ -79,5 +79,5 @@
+ } /* Incr */
+
+-PRIntn main(PRIntn argc, char *argv)
++PRIntn main(PRIntn argc, char *argv[])
+ {
+ PRStatus rv;
+--- ../pr/tests/sprintf.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/sprintf.c Mon Jul 25 22:21:32 2005
+@@ -162,5 +162,5 @@
+ fprintf(stderr,
+ "pattern='%s' l=%ld\nPR_smprintf='%s'\nPR_snprintf='%s'\n sprintf='%s'\n",
+- pattern, l, s, buf, sbuf);
++ pattern, (long)l, s, buf, sbuf);
+ PR_smprintf_free(s);
+ exit(-1);
+--- ../pr/tests/stack.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/stack.c Mon Jul 25 22:22:43 2005
+@@ -86,5 +86,5 @@
+ PRIntn main(PRIntn argc, char **argv)
+ {
+- PRInt32 rv, cnt, sum;
++ PRInt32 cnt, sum;
+ DataRecord *Item;
+ PRStack *list1, *list2;
+@@ -240,5 +240,5 @@
+ {
+ PRInt32 val, cnt, index, loops;
+- DataRecord *Items, *Item;
++ DataRecord *Items;
+ PRStack *list1, *list2;
+ PRStackElem *node;
+--- ../pr/tests/suspend.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/suspend.c Mon Jul 25 22:28:14 2005
+@@ -74,5 +74,5 @@
+ {
+ PR_Sleep(PR_MillisecondsToInterval(4 * 1000));
+- printf("Level_2_Thread[0x%lx] exiting\n",PR_GetCurrentThread());
++ printf("Level_2_Thread[%p] exiting\n",PR_GetCurrentThread());
+ return;
+ }
+@@ -81,5 +81,5 @@
+ Level_1_Thread(void *arg)
+ {
+- PRUint32 tmp = (PRUint32)arg;
++ PRUint32 tmp = (PRUint32)(uintptr_t)arg;
+ PRThreadScope scope = (PRThreadScope) tmp;
+ PRThread *thr;
+@@ -96,5 +96,5 @@
+ printf("Could not create thread!\n");
+ } else {
+- printf("Level_1_Thread[0x%lx] created %15s thread 0x%lx\n",
++ printf("Level_1_Thread[%p] created %15s thread %p\n",
+ PR_GetCurrentThread(),
+ (scope == PR_GLOBAL_THREAD) ?
+@@ -107,5 +107,5 @@
+ PR_Notify(mon);
+ PR_ExitMonitor(mon);
+- printf("Thread[0x%lx] exiting\n",PR_GetCurrentThread());
++ printf("Thread[%p] exiting\n",PR_GetCurrentThread());
+ }
+
+@@ -116,11 +116,12 @@
+
+ printf(
+- "\nprint_thread[0x%lx]: %-20s - i = %ld\n",thread,
++ "\nprint_thread[%p]: %-20s - i = %d\n",thread,
+ (PR_GLOBAL_THREAD == PR_GetThreadScope(thread)) ?
+ "PR_GLOBAL_THREAD" : "PR_LOCAL_THREAD", i);
+ registers = PR_GetGCRegisters(thread, 0, (int *)&words);
+- printf("Regsters R0 = 0x%x R1 = 0x%x R2 = 0x%x R3 = 0x%x\n",
+- registers[0],registers[1],registers[2],registers[3]);
+- printf("Stack Pointer = 0x%lx\n", PR_GetSP(thread));
++ printf("Regsters R0 = 0x%lx R1 = 0x%lx R2 = 0x%lx R3 = 0x%lx\n",
++ (unsigned long)registers[0], (unsigned long)registers[1],
++ (unsigned long)registers[2], (unsigned long)registers[3]);
++ printf("Stack Pointer = %p\n", PR_GetSP(thread));
+ return PR_SUCCESS;
+ }
+@@ -150,5 +151,5 @@
+ alive--;
+ }
+- printf("Level_0_Thread[0x%lx] created %15s thread 0x%lx\n",
++ printf("Level_0_Thread[%p] created %15s thread %p\n",
+ PR_GetCurrentThread(),
+ (scope1 == PR_GLOBAL_THREAD) ?
+@@ -161,7 +162,8 @@
+ PR_EnumerateThreads(print_thread, NULL);
+ registers = PR_GetGCRegisters(me, 1, (int *)&words);
+- printf("My Registers: R0 = 0x%x R1 = 0x%x R2 = 0x%x R3 = 0x%x\n",
+- registers[0],registers[1],registers[2],registers[3]);
+- printf("My Stack Pointer = 0x%lx\n", PR_GetSP(me));
++ printf("My Registers: R0 = 0x%lx R1 = 0x%lx R2 = 0x%lx R3 = 0x%lx\n",
++ (unsigned long)registers[0], (unsigned long)registers[1],
++ (unsigned long)registers[2], (unsigned long)registers[3]);
++ printf("My Stack Pointer = %p\n", PR_GetSP(me));
+ PR_ResumeAll();
+
+@@ -197,5 +199,5 @@
+
+
+-void
++int
+ main(int argc, char **argv)
+ {
+@@ -227,4 +229,6 @@
+ CreateThreadsKU();
+ PR_Cleanup();
++
++ return 0;
+ }
+
+--- ../pr/tests/testfile.c Tue Jun 20 17:46:54 2000
++++ ../pr/tests/testfile.c Mon Jul 25 22:36:39 2005
+@@ -69,4 +69,7 @@
+ #define mode_t int
+ #endif
++#if defined(XP_UNIX) || defined(XP_OS2_EMX)
++# include <unistd.h> /* getopt(3) */
++#endif
+
+ #define DPRINTF(arg) if (_debug_on) printf arg
+@@ -119,5 +122,5 @@
+
+ PRThread* create_new_thread(PRThreadType type,
+- void (*start)(void *arg),
++ void *(*start)(void *arg),
+ void *arg,
+ PRThreadPriority priority,
+@@ -181,5 +184,5 @@
+ #endif
+ } else {
+- return(PR_CreateThread(type,start,arg,priority,scope,state,stackSize));
++ return(PR_CreateThread(type,(void (*)(void*))start,arg,priority,scope,state,stackSize));
+ }
+ #else
+@@ -342,6 +345,6 @@
+ "testfile PR_GetFileInfo returned incorrect status-change time: %s\n",
+ pathname);
+- printf("ft = %lld, ft1 = %lld\n",file_info.creationTime,
+- file_info1.creationTime);
++ printf("ft = %lld, ft1 = %lld\n", (long long)file_info.creationTime,
++ (long long)file_info1.creationTime);
+ rv = -1;
+ goto cleanup;
+@@ -368,6 +371,6 @@
+ "testfile PR_GetFileInfo returned incorrect modify time: %s\n",
+ pathname);
+- printf("ft = %lld, ft1 = %lld\n",file_info.modifyTime,
+- file_info1.modifyTime);
++ printf("ft = %lld, ft1 = %lld\n", (long long)file_info.modifyTime,
++ (long long)file_info1.modifyTime);
+ rv = -1;
+ goto cleanup;
+@@ -495,5 +498,5 @@
+
+ t = create_new_thread(PR_USER_THREAD,
+- File_Write, (void *)fparamp,
++ (void *(*)(void *))File_Write, (void *)fparamp,
+ PR_PRIORITY_NORMAL,
+ scope,
+@@ -530,5 +533,5 @@
+
+ t = create_new_thread(PR_USER_THREAD,
+- File_Read, (void *)fparamp,
++ (void *(*)(void *))File_Read, (void *)fparamp,
+ PR_PRIORITY_NORMAL,
+ scope,
+@@ -598,5 +601,5 @@
+ thrarg.done= 0;
+ t = create_new_thread(PR_USER_THREAD,
+- DirTest, &thrarg,
++ (void *(*)(void *))DirTest, &thrarg,
+ PR_PRIORITY_NORMAL,
+ PR_LOCAL_THREAD,
+@@ -953,6 +956,4 @@
+ #if defined(XP_UNIX) || defined(XP_OS2_EMX)
+ int opt;
+- extern char *optarg;
+- extern int optind;
+ #endif
+ #if defined(XP_UNIX) || defined(XP_OS2_EMX)
+--- ../pr/tests/thrpool_server.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/thrpool_server.c Mon Jul 25 22:38:33 2005
+@@ -363,5 +363,5 @@
+
+ DPRINTF((
+- "TCP_Server: PR_BIND netaddr.inet.ip = 0x%lx, netaddr.inet.port = %d\n",
++ "TCP_Server: PR_BIND netaddr.inet.ip = 0x%x, netaddr.inet.port = %d\n",
+ netaddr.inet.ip, netaddr.inet.port));
+
+@@ -496,5 +496,5 @@
+
+ PR_ASSERT(NULL != jobp);
+- DPRINTF(("TCP_Server: Created Serve_Client = 0x%lx\n", jobp));
++ DPRINTF(("TCP_Server: Created Serve_Client = %p\n", jobp));
+
+ /*
+@@ -513,5 +513,5 @@
+
+ PR_ASSERT(NULL != jobp);
+- DPRINTF(("TCP_Server: Created print_stats timer job = 0x%lx\n", jobp));
++ DPRINTF(("TCP_Server: Created print_stats timer job = %p\n", jobp));
+
+ exit:
+@@ -530,7 +530,7 @@
+ PR_DestroyMonitor(sp->exit_mon);
+ printf("%30s","TCP_Socket_Client_Server_Test:");
+- printf("%2ld Server %2ld Clients %2ld connections_per_client\n",1l,
++ printf(" 1 Server %2d Clients %2d connections_per_client\n",
+ num_tcp_clients, num_tcp_connections_per_client);
+- printf("%30s %2ld messages_per_connection %4ld bytes_per_message\n",":",
++ printf("%30s %2d messages_per_connection %4d bytes_per_message\n",":",
+ num_tcp_mesgs_per_connection, tcp_mesg_size);
+
+--- ../pr/tests/thrpool_client.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/thrpool_client.c Mon Jul 25 22:40:45 2005
+@@ -127,9 +127,9 @@
+
+ for (rem=len; rem; offset += bytes, rem -= bytes) {
+- DPRINTF(("thread = 0x%lx: calling PR_Recv, bytes = %d\n",
++ DPRINTF(("thread = %p: calling PR_Recv, bytes = %d\n",
+ PR_GetCurrentThread(), rem));
+ bytes = PR_Recv(sockfd, buf + offset, rem, 0,
+ timeout);
+- DPRINTF(("thread = 0x%lx: returning from PR_Recv, bytes = %d\n",
++ DPRINTF(("thread = %p: returning from PR_Recv, bytes = %d\n",
+ PR_GetCurrentThread(), bytes));
+ if (bytes < 0) {
+@@ -152,9 +152,9 @@
+
+ for (rem=len; rem; offset += bytes, rem -= bytes) {
+- DPRINTF(("thread = 0x%lx: calling PR_Send, bytes = %d\n",
++ DPRINTF(("thread = %p: calling PR_Send, bytes = %d\n",
+ PR_GetCurrentThread(), rem));
+ bytes = PR_Send(sockfd, buf + offset, rem, 0,
+ PR_INTERVAL_NO_TIMEOUT);
+- DPRINTF(("thread = 0x%lx: returning from PR_Send, bytes = %d\n",
++ DPRINTF(("thread = %p: returning from PR_Send, bytes = %d\n",
+ PR_GetCurrentThread(), bytes));
+ if (bytes <= 0)
+@@ -209,5 +209,5 @@
+ DPRINTF(("TCP client connecting to server:%d\n", server_port));
+ if (PR_Connect(sockfd, &netaddr,PR_INTERVAL_NO_TIMEOUT) < 0){
+- fprintf(stderr, "PR_Connect failed: (%ld, %ld)\n",
++ fprintf(stderr, "PR_Connect failed: (%d, %d)\n",
+ PR_GetError(), PR_GetOSError());
+ failed_already=1;
+@@ -218,5 +218,5 @@
+ * fill in random data
+ */
+- memset(out_buf->data, ((PRInt32) (&netaddr)) + i + j, bytes);
++ memset(out_buf->data, ((intptr_t)(&netaddr)) + i + j, bytes);
+ /*
+ * write to server
+@@ -326,5 +326,5 @@
+ connections++;
+ PR_ExitMonitor(mon2);
+- DPRINTF(("Created TCP client = 0x%lx\n", thr));
++ DPRINTF(("Created TCP client = %p\n", thr));
+ }
+ /* Wait for client jobs to exit */
+@@ -336,7 +336,7 @@
+ PR_ExitMonitor(mon2);
+ printf("%30s","TCP_Socket_Client_Server_Test:");
+- printf("%2ld Server %2ld Clients %2ld connections_per_client\n",1l,
++ printf(" 1 Server %2d Clients %2d connections_per_client\n",
+ num_tcp_clients, num_tcp_connections_per_client);
+- printf("%30s %2ld messages_per_connection %4ld bytes_per_message\n",":",
++ printf("%30s %2d messages_per_connection %4d bytes_per_message\n",":",
+ num_tcp_mesgs_per_connection, tcp_mesg_size);
+
+--- ../pr/tests/threads.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/threads.c Mon Jul 25 22:43:10 2005
+@@ -66,5 +66,5 @@
+ DumbThread(void *arg)
+ {
+- PRInt32 tmp = (PRInt32)arg;
++ PRInt32 tmp = (PRInt32)(intptr_t)arg;
+ PRThreadScope scope = (PRThreadScope)tmp;
+ PRThread *thr;
+@@ -214,8 +214,8 @@
+ if (debug_mode)
+ {
+- printf("\
+-** Tests lots of thread creations. \n\
+-** Create %ld native threads %ld times. \n\
+-** Create %ld user threads %ld times \n", iterations,count,iterations,count);
++ printf("** Tests lots of thread creations.\n"
++ "** Create %d native threads %d times.\n"
++ "** Create %d user threads %d times.\n", iterations, count,
++ iterations, count);
+ }
+
+--- ../pr/tests/thruput.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/thruput.c Mon Jul 25 22:44:16 2005
+@@ -407,4 +407,5 @@
+ else Client(server_name);
+
++ return 0;
+ } /* main */
+
+--- ../pr/tests/timemac.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/timemac.c Mon Jul 25 22:45:33 2005
+@@ -63,5 +63,5 @@
+
+ /* Print day of the week, month, day, hour, minute, and second */
+- printf( "%s %s %ld %02ld:%02ld:%02ld ",
++ printf( "%s %s %d %02d:%02d:%02d ",
+ dayOfWeek[et->tm_wday], month[et->tm_month], et->tm_mday,
+ et->tm_hour, et->tm_min, et->tm_sec);
+@@ -79,5 +79,5 @@
+ hourOffset = totalOffset / 3600;
+ minOffset = (totalOffset % 3600) / 60;
+- printf("%s%02ld%02ld ", sign, hourOffset, minOffset);
++ printf("%s%02d%02d ", sign, hourOffset, minOffset);
+ }
+
+@@ -140,5 +140,5 @@
+ printExplodedTime(&et);
+ printf("\n");
+- printf("GMT offset is %ld, DST offset is %ld\n",
++ printf("GMT offset is %d, DST offset is %d\n",
+ et.tm_params.tp_gmt_offset, et.tm_params.tp_dst_offset);
+ t2 = PR_ImplodeTime(&et);
+--- ../pr/tests/timetest.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/timetest.c Mon Jul 25 22:48:03 2005
+@@ -75,5 +75,5 @@
+
+ /* Print day of the week, month, day, hour, minute, and second */
+- if (debug_mode) printf("%s %s %ld %02ld:%02ld:%02ld ",
++ if (debug_mode) printf("%s %s %d %02d:%02d:%02d ",
+ dayOfWeek[et->tm_wday], month[et->tm_month], et->tm_mday,
+ et->tm_hour, et->tm_min, et->tm_sec);
+@@ -92,5 +92,5 @@
+ minOffset = (totalOffset % 3600) / 60;
+ if (debug_mode)
+- printf("%s%02ld%02ld ", sign, hourOffset, minOffset);
++ printf("%s%02d%02d ", sign, hourOffset, minOffset);
+ }
+
+@@ -276,5 +276,5 @@
+ PrintExplodedTime(&et);
+ if (debug_mode) printf("\n");
+- if (debug_mode) printf("GMT offset is %ld, DST offset is %ld\n",
++ if (debug_mode) printf("GMT offset is %d, DST offset is %d\n",
+ et.tm_params.tp_gmt_offset, et.tm_params.tp_dst_offset);
+ t2 = PR_ImplodeTime(&et);
+--- ../pr/tests/y2k.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/y2k.c Mon Jul 25 22:49:18 2005
+@@ -82,5 +82,5 @@
+
+ /* Print day of the week, month, day, hour, minute, and second */
+- printf("%s %s %2ld %02ld:%02ld:%02ld ",
++ printf("%s %s %2d %02d:%02d:%02d ",
+ dayOfWeek[et->tm_wday], month[et->tm_month], et->tm_mday,
+ et->tm_hour, et->tm_min, et->tm_sec);
+@@ -101,5 +101,5 @@
+ hourOffset = totalOffset / 3600;
+ minOffset = (totalOffset % 3600) / 60;
+- printf("%s%02ld%02ld ", sign, hourOffset, minOffset);
++ printf("%s%02d%02d ", sign, hourOffset, minOffset);
+ }
+ #ifdef PRINT_DETAILS
+--- ../pr/tests/y2ktmo.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/y2ktmo.c Mon Jul 25 22:58:00 2005
+@@ -95,5 +95,5 @@
+ static void SleepThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -142,5 +142,5 @@
+ static void AcceptThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -214,5 +214,5 @@
+ static void PollThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -289,5 +289,5 @@
+ static void WaitCondVarThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -349,5 +349,5 @@
+ static void WaitMonitorThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -402,5 +402,5 @@
+ static void WaitCMonitorThread(void *arg)
+ {
+- PRIntervalTime timeout = (PRIntervalTime) arg;
++ PRIntervalTime timeout = (PRIntervalTime)(intptr_t)arg;
+ PRIntervalTime elapsed;
+ #if defined(XP_UNIX) || defined(WIN32)
+@@ -525,5 +525,5 @@
+ for (j = 0; j < num_thread_funcs; j++) {
+ threads[idx] = PR_CreateThread(PR_USER_THREAD, threadFuncs[j],
+- (void*)PR_SecondsToInterval(secs), PR_PRIORITY_NORMAL,
++ (void*)(intptr_t)PR_SecondsToInterval(secs), PR_PRIORITY_NORMAL,
+ threadScopes[i], PR_JOINABLE_THREAD, 0);
+ if (threads[idx] == NULL) {
+--- ../pr/tests/zerolen.c Sun Apr 25 11:01:02 2004
++++ ../pr/tests/zerolen.c Mon Jul 25 23:04:19 2005
+@@ -78,5 +78,5 @@
+ PRFileDesc *sock;
+ PRNetAddr addr;
+- PRUint16 port = (PRUint16) arg;
++ PRUint16 port = (PRUint16)(uintptr_t)arg;
+ char buf[1024];
+ PRInt32 nbytes;
+@@ -157,5 +157,5 @@
+ */
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- ClientThread, (void *) PR_ntohs(PR_NetAddrInetPort(&addr)),
++ ClientThread, (void *)(uintptr_t)PR_ntohs(PR_NetAddrInetPort(&addr)),
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
+ if (NULL == clientThread) {
+@@ -198,5 +198,5 @@
+ */
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- ClientThread, (void *) PR_ntohs(PR_NetAddrInetPort(&addr)),
++ ClientThread, (void *)(uintptr_t)PR_ntohs(PR_NetAddrInetPort(&addr)),
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
+ if (NULL == clientThread) {
+@@ -237,5 +237,5 @@
+ */
+ clientThread = PR_CreateThread(PR_USER_THREAD,
+- ClientThread, (void *) PR_ntohs(PR_NetAddrInetPort(&addr)),
++ ClientThread, (void *)(uintptr_t)PR_ntohs(PR_NetAddrInetPort(&addr)),
+ PR_PRIORITY_NORMAL, PR_GLOBAL_THREAD, PR_JOINABLE_THREAD, 0);
+ if (NULL == clientThread) {
+--- ../pr/tests/runtests.sh Sun Apr 25 11:01:02 2004
++++ ../pr/tests/runtests.sh Tue Jul 26 00:01:35 2005
+@@ -85,7 +85,4 @@
+ #
+
+-#forktest (failed on IRIX)
+-#nbconn - fails on some platforms
+-#poll_er - fails on some platforms? limited use?
+ #prpoll - the bad-FD test needs to be moved to a different test
+ #sleep - specific to OS/2
+@@ -119,4 +116,5 @@
+ fileio
+ foreign
++forktest
+ formattm
+ fsync
+@@ -126,5 +124,4 @@
+ initclk
+ inrval
+-instrumt
+ intrio
+ intrupt
+@@ -146,4 +143,5 @@
+ multiwait
+ nameshm1
++nbconn
+ nblayer
+ nonblock
+@@ -161,4 +159,5 @@
+ pipeping2
+ pipeself
++poll_er
+ poll_nm
+ poll_to
+@@ -230,5 +229,5 @@
+ printf "BEGIN\t\t\t`date`\n"
+ printf "NSPR_TEST_LOGFILE\t${LOGFILE}\n\n"
+-printf "Test\t\t\tResult\n\n"
++printf " Test\t\t\tResult\n\n"
+ if [ $OS_PLATFORM = "Windows_95" ] || [ $OS_PLATFORM = "Windows_98" ] || [ $OS_PLATFORM = "Windows_NT" ] || [ $OS_PLATFORM = "OS/2" ] ; then
+ for prog in $TESTS
+@@ -248,8 +247,6 @@
+ for prog in $TESTS
+ do
+- printf "$prog"
+- printf "\nBEGIN TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+- export test_rval
+- ./$prog >> ${LOGFILE} 2>&1 &
++ printf %16s $prog
++ ./$prog >> $prog.output 2>&1 &
+ test_pid=$!
+ sleep_pid=0
+@@ -266,7 +263,7 @@
+ else
+ printf "\t\t\tFAILED\n";
++ sed "s,^, $prog: ," < $prog.output
+ rval=1
+ fi;
+- printf "\nEND TEST: $prog\n\n" >> ${LOGFILE} 2>&1
+ done
+ fi;
+@@ -274,19 +271,2 @@
+ printf "END\t\t\t`date`\n"
+ exit $rval
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
+-
diff --git a/devel/nspr/files/patch-warnings b/devel/nspr/files/patch-warnings
new file mode 100644
index 0000000..d4e7145
--- /dev/null
+++ b/devel/nspr/files/patch-warnings
@@ -0,0 +1,67 @@
+--- ../pr/src/misc/prdtoa.c Sun Apr 25 11:01:01 2004
++++ ../pr/src/misc/prdtoa.c Sun Jul 24 23:55:19 2005
+@@ -3355,5 +3355,7 @@
+ }
+ else {
++#ifdef Honor_FLT_ROUNDS
+ trimzeros:
++#endif
+ while(*--s == '0');
+ s++;
+--- ../pr/src/pthreads/ptsynch.c Mon Nov 22 16:24:53 2004
++++ ../pr/src/pthreads/ptsynch.c Mon Jul 25 00:03:49 2005
+@@ -63,5 +63,5 @@
+ #endif /* defined(DEBUG) */
+
+-#if defined(FREEBSD)
++#if defined(FREEBSD) && (defined(DEBUG) || defined(FORCE_PR_ASSERT))
+ /*
+ * On older versions of FreeBSD, pthread_mutex_trylock returns EDEADLK.
+@@ -343,5 +343,8 @@
+ if (cv != NULL)
+ {
+- int rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr);
++#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
++ int rv =
++#endif
++ _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr);
+ PR_ASSERT(0 == rv);
+ cv->lock = lock;
+@@ -358,5 +361,9 @@
+ if (0 > PR_AtomicDecrement(&cvar->notify_pending))
+ {
+- PRIntn rv = pthread_cond_destroy(&cvar->cv); PR_ASSERT(0 == rv);
++#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
++ PRIntn rv =
++#endif
++ pthread_cond_destroy(&cvar->cv);
++ PR_ASSERT(0 == rv);
+ #if defined(DEBUG)
+ memset(cvar, 0xaf, sizeof(PRCondVar));
+@@ -1080,6 +1087,9 @@
+ if (cv != NULL)
+ {
++#if defined(DEBUG) || defined(FORCE_PR_ASSERT)
+ int rv;
+- rv = _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr);
++ rv =
++#endif
++ _PT_PTHREAD_COND_INIT(cv->cv, _pt_cvar_attr);
+ PR_ASSERT(0 == rv);
+ cv->lock = _PR_NAKED_CV_LOCK;
+--- ../pr/include/prcountr.h Sun Apr 25 11:00:47 2004
++++ ../pr/include/prcountr.h Mon Jul 25 20:43:03 2005
+@@ -427,5 +427,5 @@
+ (counter) = PR_GetCounter((handle))
+ #else
+-#define PR_GET_COUNTER(counter,handle) 0
++#define PR_GET_COUNTER(counter,handle)
+ #endif
+
+@@ -501,5 +501,5 @@
+ (next) = PR_FindNextCounterQname((handle))
+ #else
+-#define PR_FIND_NEXT_COUNTER_QNAME(next,handle) NULL
++#define PR_FIND_NEXT_COUNTER_QNAME(next,handle)
+ #endif
+
diff --git a/devel/nspr/pkg-descr b/devel/nspr/pkg-descr
new file mode 100644
index 0000000..938c027
--- /dev/null
+++ b/devel/nspr/pkg-descr
@@ -0,0 +1,5 @@
+Netscape Portable Runtime (NSPR) provides a platform-neutral API for system
+level and libc like functions. The API is used in the Mozilla client, many of
+Netscape/AOL/iPlanet's and other software offerings.
+
+WWW: http://www.mozilla.org/projects/nspr/index.html
diff --git a/devel/nspr/pkg-plist b/devel/nspr/pkg-plist
new file mode 100644
index 0000000..e9264e5
--- /dev/null
+++ b/devel/nspr/pkg-plist
@@ -0,0 +1,105 @@
+bin/nspr-config
+include/nspr/md/_aix32.cfg
+include/nspr/md/_aix64.cfg
+include/nspr/md/_beos.cfg
+include/nspr/md/_bsdi.cfg
+include/nspr/md/_darwin.cfg
+include/nspr/md/_dgux.cfg
+include/nspr/md/_freebsd.cfg
+include/nspr/md/_hpux32.cfg
+include/nspr/md/_hpux64.cfg
+include/nspr/md/_irix32.cfg
+include/nspr/md/_irix64.cfg
+include/nspr/md/_linux.cfg
+include/nspr/md/_ncr.cfg
+include/nspr/md/_nec.cfg
+include/nspr/md/_netbsd.cfg
+include/nspr/md/_nextstep.cfg
+include/nspr/md/_nto.cfg
+include/nspr/md/_openbsd.cfg
+include/nspr/md/_openvms.cfg
+include/nspr/md/_os2.cfg
+include/nspr/md/_osf1.cfg
+include/nspr/md/_qnx.cfg
+include/nspr/md/_reliantunix.cfg
+include/nspr/md/_rhapsody.cfg
+include/nspr/md/_riscos.cfg
+include/nspr/md/_scoos.cfg
+include/nspr/md/_solaris.cfg
+include/nspr/md/_sony.cfg
+include/nspr/md/_sunos4.cfg
+include/nspr/md/_unixware.cfg
+include/nspr/md/_unixware7.cfg
+include/nspr/md/_win16.cfg
+include/nspr/md/_win95.cfg
+include/nspr/md/_winnt.cfg
+include/nspr/nspr.h
+include/nspr/obsolete/pralarm.h
+include/nspr/obsolete/probslet.h
+include/nspr/obsolete/protypes.h
+include/nspr/obsolete/prsem.h
+include/nspr/plarena.h
+include/nspr/plarenas.h
+include/nspr/plbase64.h
+include/nspr/plerror.h
+include/nspr/plgetopt.h
+include/nspr/plhash.h
+include/nspr/plresolv.h
+include/nspr/plstr.h
+include/nspr/pratom.h
+include/nspr/prbit.h
+include/nspr/prclist.h
+include/nspr/prcmon.h
+include/nspr/prcountr.h
+include/nspr/prcpucfg.h
+include/nspr/prcvar.h
+include/nspr/prdtoa.h
+include/nspr/prenv.h
+include/nspr/prerr.h
+include/nspr/prerror.h
+include/nspr/prinet.h
+include/nspr/prinit.h
+include/nspr/prinrval.h
+include/nspr/prio.h
+include/nspr/pripcsem.h
+include/nspr/private/pprio.h
+include/nspr/private/pprthred.h
+include/nspr/private/prpriv.h
+include/nspr/prlink.h
+include/nspr/prlock.h
+include/nspr/prlog.h
+include/nspr/prlong.h
+include/nspr/prmem.h
+include/nspr/prmon.h
+include/nspr/prmwait.h
+include/nspr/prnetdb.h
+include/nspr/prolock.h
+include/nspr/prpdce.h
+include/nspr/prprf.h
+include/nspr/prproces.h
+include/nspr/prrng.h
+include/nspr/prrwlock.h
+include/nspr/prshm.h
+include/nspr/prshma.h
+include/nspr/prsystem.h
+include/nspr/prthread.h
+include/nspr/prtime.h
+include/nspr/prtpool.h
+include/nspr/prtrace.h
+include/nspr/prtypes.h
+include/nspr/prvrsion.h
+include/nspr/prwin16.h
+lib/libnspr4.a
+lib/libnspr4.so
+lib/libnspr4.so.1
+lib/libplc4.a
+lib/libplc4.so
+lib/libplc4.so.1
+lib/libplds4.a
+lib/libplds4.so
+lib/libplds4.so.1
+libdata/pkgconfig/nspr.pc
+@dirrm include/nspr/private
+@dirrm include/nspr/obsolete
+@dirrm include/nspr/md
+@dirrm include/nspr
diff --git a/graphics/png/Makefile b/graphics/png/Makefile
new file mode 100644
index 0000000..bfc3374
--- /dev/null
+++ b/graphics/png/Makefile
@@ -0,0 +1,54 @@
+# New ports collection makefile for: PNG images library
+# Date created: 5 Dec 1995
+# Whom: ache
+#
+# $FreeBSD$
+#
+
+PORTNAME= png
+PORTVERSION= 1.2.18
+PORTREVISION= 1
+CATEGORIES= graphics
+MASTER_SITES= ${MASTER_SITE_SOURCEFORGE}
+MASTER_SITE_SUBDIR= lib${PORTNAME}
+DISTNAME= lib${PORTNAME}-${PORTVERSION}
+
+PATCH_SITES= ${MASTER_SITES}
+#PATCH_SITE_SUBDIR= ${MASTER_SITE_SUBDIR}
+#PATCHFILES=
+#PATCH_DIST_STRIP= -p1
+
+MAINTAINER= ache@FreeBSD.org
+COMMENT= Library for manipulating PNG images
+
+MAKEFILE= ${WRKSRC}/scripts/makefile.freebsd
+ALL_TARGET= all libpng-config test
+MAKE_FLAGS= ccopts="${CFLAGS}" ldopts="${LDFLAGS}" -f
+INSTALLS_SHLIB= yes
+SHLIB_VER= 5
+USE_BZIP2= yes
+
+MAKE_ENV= SHLIB_VER="${SHLIB_VER}"
+PLIST_SUB= SHLIB_VER="${SHLIB_VER}"
+
+MAN3= libpng.3 libpngpf.3
+MAN5= png.5
+MANCOMPRESSED= maybe
+
+.include <bsd.port.pre.mk>
+
+post-extract:
+# Please don't delete the following line - this link used by ghostscript* ports
+ @${LN} -sf ${WRKSRC} ${WRKDIR}/libpng
+
+pre-su-install:
+ @${MKDIR} ${PREFIX}/include/libpng
+ @${MKDIR} ${PREFIX}/libdata/pkgconfig
+
+post-install:
+ ${SED} -e 's|@PREFIX@|${PREFIX}|' ${WRKSRC}/scripts/libpng.pc.in \
+ > ${WRKSRC}/scripts/libpng.pc
+ ${INSTALL_DATA} ${WRKSRC}/scripts/libpng.pc \
+ ${PREFIX}/libdata/pkgconfig/libpng12.pc
+
+.include <bsd.port.post.mk>
diff --git a/graphics/png/distinfo b/graphics/png/distinfo
new file mode 100644
index 0000000..7f2c876
--- /dev/null
+++ b/graphics/png/distinfo
@@ -0,0 +1,3 @@
+MD5 (libpng-1.2.18.tar.bz2) = 25a7f2f101eaaf2eb18c4987e0fbe39d
+SHA256 (libpng-1.2.18.tar.bz2) = 6fce62f9e67e951c38672bf520c062a2be742e893d240d150748a00c32f20c62
+SIZE (libpng-1.2.18.tar.bz2) = 623690
diff --git a/graphics/png/files/patch-aa b/graphics/png/files/patch-aa
new file mode 100644
index 0000000..e42a97d
--- /dev/null
+++ b/graphics/png/files/patch-aa
@@ -0,0 +1,63 @@
+--- scripts/makefile.freebsd.orig Sat Feb 25 15:37:11 2006
++++ scripts/makefile.freebsd Thu Jul 27 22:03:50 2006
+@@ -8,27 +8,26 @@
+ LIB= png
+ SHLIB_MAJOR= ${SHLIB_VER}
+ SHLIB_MINOR= 0
++.if (${OSVERSION} > 600007)
++NO_PROFILE= YES
++NO_OBJ= YES
++.else
+ NOPROFILE= YES
+-NOOBJ= YES
++NOOBJ= YES
++.endif
+
+ # where make install puts libpng.a and png.h
+-DESTDIR= ${PREFIX}
+-LIBDIR= /lib
++LIBDIR= ${PREFIX}/lib
+ INCS= png.h pngconf.h
+-INCSDIR= /include/libpng
++INCSDIR= ${PREFIX}/include/libpng
+ INCDIR= ${INCSDIR} # for 4.x bsd.lib.mk
+ MAN= libpng.3 libpngpf.3 png.5
+-MANDIR= /man/man
++MANDIR= ${PREFIX}/man/man
+ SYMLINKS= libpng/png.h ${INCSDIR}/../png.h \
+ libpng/pngconf.h ${INCSDIR}/../pngconf.h
+ LDADD+= -lm -lz
+ DPADD+= ${LIBM} ${LIBZ}
+
+-CFLAGS+= -I. -DPNG_USE_PNGGCCRD
+-.if (${MACHINE_ARCH} != "i386")
+-CFLAGS+= -DPNG_NO_MMX_CODE
+-.endif
+-
+ SRCS= png.c pngset.c pngget.c pngrutil.c pngtrans.c pngwutil.c \
+ pngread.c pngrio.c pngwio.c pngwrite.c pngrtran.c \
+ pngwtran.c pngmem.c pngerror.c pngpread.c pnggccrd.c
+@@ -44,5 +43,23 @@
+ DOCS = ANNOUNCE CHANGES INSTALL KNOWNBUG LICENSE README TODO Y2KINFO
+ writelock:
+ chmod a-w *.[ch35] $(DOCS) scripts/*
++
++libpng-config:
++ ( cat scripts/libpng-config-head.in; \
++ echo prefix=\"${PREFIX}\"; \
++ echo libdir=\"${LIBDIR}\"; \
++ echo ccopts=\"${ccopts}\"; \
++ echo cppflags=\"${cppflags}\"; \
++ echo I_opts=\"-I${INCSDIR}\"; \
++ echo L_opts=\"-L${LIBDIR}\"; \
++ echo libs=\"-lpng -lz -lm\"; \
++ echo ldopts=\"${ldopts}\"; \
++ cat scripts/libpng-config-body.in ) > libpng-config
++ chmod +x libpng-config
++
++beforeinstall: libpng-config
++ ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m ${BINMODE} \
++ libpng-config ${PREFIX}/bin
++ ln -sf libpng-config ${PREFIX}/bin/libpng12-config
+
+ .include <bsd.lib.mk>
diff --git a/graphics/png/files/patch-ab b/graphics/png/files/patch-ab
new file mode 100644
index 0000000..e07387d
--- /dev/null
+++ b/graphics/png/files/patch-ab
@@ -0,0 +1,18 @@
+--- scripts/libpng.pc.in.orig Wed Jun 28 00:22:40 2006
++++ scripts/libpng.pc.in Sun Jul 23 10:56:25 2006
+@@ -1,10 +1,10 @@
+-prefix=@prefix@
+-exec_prefix=@exec_prefix@
+-libdir=@libdir@
+-includedir=@includedir@/libpng12
++prefix=@PREFIX@
++exec_prefix=${prefix}
++libdir=${exec_prefix}/lib
++includedir=${prefix}/include
+
+ Name: libpng
+ Description: Loads and saves PNG files
+ Version: 1.2.18
+-Libs: -L${libdir} -lpng12
++Libs: -L${libdir} -lpng -lz -lm
+ Cflags: -I${includedir}
diff --git a/graphics/png/files/patch-ac b/graphics/png/files/patch-ac
new file mode 100644
index 0000000..5666752
--- /dev/null
+++ b/graphics/png/files/patch-ac
@@ -0,0 +1,16 @@
+--- scripts/libpng-config-body.in.orig Wed Sep 18 08:05:43 2002
++++ scripts/libpng-config-body.in Sun Jul 23 10:27:47 2006
+@@ -77,8 +77,12 @@
+ echo ${R_opts}
+ ;;
+
++ --ldopts)
++ echo ${ldopts}
++ ;;
++
+ --ldflags)
+- echo ${ldflags} ${L_opts} ${R_opts} ${libs}
++ echo ${ldopts} ${L_opts} ${R_opts} ${libs}
+ ;;
+
+ --static)
diff --git a/graphics/png/files/patch-ad b/graphics/png/files/patch-ad
new file mode 100644
index 0000000..08efaca
--- /dev/null
+++ b/graphics/png/files/patch-ad
@@ -0,0 +1,11 @@
+--- pngconf.h.orig Wed May 16 03:52:22 2007
++++ pngconf.h Mon May 21 13:25:03 2007
+@@ -729,7 +729,7 @@
+ * PNG_NO_MMX_CODE disables the use of MMX code without changing the API.
+ * When MMX code is off, then optimized C replacement functions are used.
+ */
+-#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE)
++#if defined(PNG_READ_SUPPORTED) && !defined(PNG_NO_ASSEMBLER_CODE) && defined(__i386__)
+ # ifndef PNG_ASSEMBLER_CODE_SUPPORTED
+ # define PNG_ASSEMBLER_CODE_SUPPORTED
+ # endif
diff --git a/graphics/png/files/patch-ae b/graphics/png/files/patch-ae
new file mode 100644
index 0000000..cb24f17
--- /dev/null
+++ b/graphics/png/files/patch-ae
@@ -0,0 +1,18 @@
+--- pnggccrd.c.bak Wed May 16 03:52:23 2007
++++ pnggccrd.c Mon May 21 13:04:54 2007
+@@ -359,6 +359,7 @@
+ _pctemp = _pctemp;
+ _MMXLength = _MMXLength;
+ #endif
++#if 0
+ _const4 = _const4;
+ _const6 = _const6;
+ _mask8_0 = _mask8_0;
+@@ -377,6 +378,7 @@
+ _mask48_2 = _mask48_2;
+ _mask48_1 = _mask48_1;
+ _mask48_0 = _mask48_0;
++#endif
+ }
+ #endif /* PNG_MMX_CODE_SUPPORTED */
+
diff --git a/graphics/png/files/patch-apng b/graphics/png/files/patch-apng
new file mode 100644
index 0000000..e72ac3a
--- /dev/null
+++ b/graphics/png/files/patch-apng
@@ -0,0 +1,1696 @@
+Index: pngread.c
+===================================================================
+--- pngread.c (révision 119)
++++ pngread.c (copie de travail)
+@@ -401,6 +401,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_acTL;
++ PNG_fcTL;
++ PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ png_byte chunk_length[4];
+ png_uint_32 length;
+@@ -454,6 +459,9 @@
+ !(png_ptr->mode & PNG_HAVE_PLTE))
+ png_error(png_ptr, "Missing PLTE before IDAT");
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ break;
+@@ -526,12 +534,97 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ }
+ }
+ #endif /* PNG_NO_SEQUENTIAL_READ_SUPPORTED */
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_read_frame_head(png_structp png_ptr, png_infop info_ptr)
++{
++ png_byte have_chunk_after_DAT; /* after IDAT or after fdAT */
++
++ png_debug(0, "Reading frame head\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_acTL))
++ png_error(png_ptr, "attempt to png_read_frame_head() but "
++ "no acTL present");
++
++ /* do nothing for the main IDAT */
++ if (png_ptr->num_frames_read == 0)
++ return;
++
++ png_crc_finish(png_ptr, 0); /* CRC from last IDAT or fdAT chunk */
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ have_chunk_after_DAT = 0;
++ for (;;)
++ {
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_IDAT;
++ PNG_fdAT;
++ PNG_fcTL;
++#endif
++ png_byte chunk_length[4];
++ png_uint_32 length;
++
++ png_read_data(png_ptr, chunk_length, 4);
++ length = png_get_uint_31(png_ptr, chunk_length);
++
++ png_reset_crc(png_ptr);
++ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
++
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (have_chunk_after_DAT || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "png_read_frame_head(): out of place IDAT");
++ png_crc_finish(png_ptr, length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ have_chunk_after_DAT = 1;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* discard trailing fdATs for frames other than the first */
++ if (!have_chunk_after_DAT && png_ptr->num_frames_read > 1)
++ png_crc_finish(png_ptr, length - 4);
++ else if(png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_ptr->idat_size = length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++
++ break;
++ }
++ else
++ png_error(png_ptr, "png_read_frame_head(): out of place fdAT");
++ }
++ else
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_crc_finish(png_ptr, length);
++ }
++ }
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* optional call to update the users info_ptr structure */
+ void PNGAPI
+ png_read_update_info(png_structp png_ptr, png_infop info_ptr)
+@@ -568,6 +661,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
++#endif
+ const int png_pass_dsp_mask[7] = {0xff, 0x0f, 0xff, 0x33, 0xff, 0x55, 0xff};
+ const int png_pass_mask[7] = {0x80, 0x08, 0x88, 0x22, 0xaa, 0x55, 0xff};
+ #endif
+@@ -696,19 +793,46 @@
+ {
+ if (!(png_ptr->zstream.avail_in))
+ {
+- while (!png_ptr->idat_size)
++ png_uint_32 bytes_to_skip = 0;
++
++ while (!png_ptr->idat_size || bytes_to_skip != 0)
+ {
+ png_byte chunk_length[4];
+
+- png_crc_finish(png_ptr, 0);
+-
++ png_crc_finish(png_ptr, bytes_to_skip);
++ bytes_to_skip = 0;
++
+ png_read_data(png_ptr, chunk_length, 4);
+ png_ptr->idat_size = png_get_uint_31(png_ptr,chunk_length);
+-
++
+ png_reset_crc(png_ptr);
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+- if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
+- png_error(png_ptr, "Not enough image data");
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read == 0)
++ {
++#endif
++ if (png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ png_error(png_ptr, "Not enough image data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ bytes_to_skip = png_ptr->idat_size;
++ continue;
++ }
++
++ png_ensure_sequence_number(png_ptr, png_ptr->idat_size);
++
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ png_ptr->zstream.avail_in = (uInt)png_ptr->zbuf_size;
+ png_ptr->zstream.next_in = png_ptr->zbuf;
+@@ -726,6 +850,9 @@
+ png_error(png_ptr, "Extra compressed data");
+ png_ptr->mode |= PNG_AFTER_IDAT;
+ png_ptr->flags |= PNG_FLAG_ZLIB_FINISHED;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->num_frames_read++;
++#endif
+ break;
+ }
+ if (ret != Z_OK)
+@@ -980,6 +1107,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_acTL;
++ PNG_fcTL;
++ PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+
+ png_read_data(png_ptr, chunk_length, 4);
+@@ -1086,6 +1218,14 @@
+ else if (!png_memcmp(png_ptr->chunk_name, png_iTXt, 4))
+ png_handle_iTXt(png_ptr, info_ptr, length);
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ png_handle_acTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ png_handle_fcTL(png_ptr, info_ptr, length);
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ png_handle_fdAT(png_ptr, info_ptr, length);
++#endif
+ else
+ png_handle_unknown(png_ptr, info_ptr, length);
+ } while (!(png_ptr->mode & PNG_HAVE_IEND));
+Index: png.c
+===================================================================
+--- png.c (révision 119)
++++ png.c (copie de travail)
+@@ -51,6 +51,9 @@
+ PNG_tIME;
+ PNG_tRNS;
+ PNG_zTXt;
++PNG_acTL;
++PNG_fcTL;
++PNG_fdAT;
+
+ #ifdef PNG_READ_SUPPORTED
+ /* arrays to facilitate easy interlacing - use pass (0 - 6) as index */
+Index: pngget.c
+===================================================================
+--- pngget.c (révision 119)
++++ pngget.c (copie de travail)
+@@ -794,6 +794,167 @@
+ }
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_get_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *num_frames, png_uint_32 *num_plays)
++{
++ png_debug1(1, "in %s retrieval function\n", "acTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_acTL) &&
++ num_frames != NULL && num_plays != NULL)
++ {
++ *num_frames = info_ptr->num_frames;
++ *num_plays = info_ptr->num_plays;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_frames(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_frames()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_frames);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_num_plays(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_num_plays()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->num_plays);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 *width, png_uint_32 *height,
++ png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den,
++ png_byte *dispose_op, png_byte *blend_op)
++{
++ png_debug1(1, "in %s retrieval function\n", "fcTL");
++
++ if (png_ptr != NULL && info_ptr != NULL &&
++ (info_ptr->valid & PNG_INFO_fcTL) &&
++ width != NULL && height != NULL &&
++ x_offset != NULL && x_offset != NULL &&
++ delay_num != NULL && delay_den != NULL &&
++ dispose_op != NULL && blend_op != NULL)
++ {
++ *width = info_ptr->next_frame_width;
++ *height = info_ptr->next_frame_height;
++ *x_offset = info_ptr->next_frame_x_offset;
++ *y_offset = info_ptr->next_frame_y_offset;
++ *delay_num = info_ptr->next_frame_delay_num;
++ *delay_den = info_ptr->next_frame_delay_den;
++ *dispose_op = info_ptr->next_frame_dispose_op;
++ *blend_op = info_ptr->next_frame_blend_op;
++ return (1);
++ }
++
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_width(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_width()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_width);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_height(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_height()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_height);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_x_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_x_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_x_offset);
++ return (0);
++}
++
++png_uint_32 PNGAPI
++png_get_next_frame_y_offset(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_y_offset()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_y_offset);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_num(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_num()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_num);
++ return (0);
++}
++
++png_uint_16 PNGAPI
++png_get_next_frame_delay_den(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_delay_den()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_delay_den);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_dispose_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_dispose_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_dispose_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_next_frame_blend_op(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_get_next_frame_blend_op()\n");
++
++ if (png_ptr != NULL && info_ptr != NULL)
++ return (info_ptr->next_frame_blend_op);
++ return (0);
++}
++
++png_byte PNGAPI
++png_get_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr != NULL)
++ return (png_byte)(png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN);
++
++ return 0;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ png_uint_32 PNGAPI
+ png_get_unknown_chunks(png_structp png_ptr, png_infop info_ptr,
+Index: pngconf.h
+===================================================================
+--- pngconf.h (révision 119)
++++ pngconf.h (copie de travail)
+@@ -905,6 +905,10 @@
+ # define PNG_READ_zTXt_SUPPORTED
+ # define PNG_zTXt_SUPPORTED
+ #endif
++#ifndef PNG_NO_READ_APNG
++# define PNG_READ_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++#endif
+ #ifndef PNG_NO_READ_UNKNOWN_CHUNKS
+ # define PNG_READ_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+@@ -1047,6 +1051,12 @@
+ # define PNG_zTXt_SUPPORTED
+ # endif
+ #endif
++#ifndef PNG_NO_WRITE_APNG
++# define PNG_WRITE_APNG_SUPPORTED
++# ifndef PNG_APNG_SUPPORTED
++# define PNG_APNG_SUPPORTED
++# endif
++#endif
+ #ifndef PNG_NO_WRITE_UNKNOWN_CHUNKS
+ # define PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED
+ # ifndef PNG_UNKNOWN_CHUNKS_SUPPORTED
+Index: pngwrite.c
+===================================================================
+--- pngwrite.c (révision 119)
++++ pngwrite.c (copie de travail)
+@@ -261,6 +261,10 @@
+ }
+ }
+ #endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (info_ptr->valid & PNG_INFO_acTL)
++ png_write_acTL(png_ptr, info_ptr->num_frames, info_ptr->num_plays);
++#endif
+ #if defined(PNG_WRITE_UNKNOWN_CHUNKS_SUPPORTED)
+ if (info_ptr->unknown_chunks_num)
+ {
+@@ -299,6 +303,10 @@
+ return;
+ if (!(png_ptr->mode & PNG_HAVE_IDAT))
+ png_error(png_ptr, "No IDATs written into file");
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if (png_ptr->num_frames_written != png_ptr->num_frames_to_write)
++ png_error(png_ptr, "Not enough frames written");
++#endif
+
+ /* see if user wants us to write information chunks */
+ if (info_ptr != NULL)
+@@ -1515,4 +1523,39 @@
+ /* quiet compiler warnings */ return;
+ }
+ #endif
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void PNGAPI
++png_write_frame_head(png_structp png_ptr, png_infop info_ptr,
++ png_bytepp row_pointers, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++ png_debug(1, "in png_write_frame_head\n");
++
++ /* there is a chance this has been set after png_write_info was called,
++ * so it would be set but not written. is there a way to be sure? */
++ if (!(info_ptr->valid & PNG_INFO_acTL))
++ png_error(png_ptr, "png_write_frame_head(): acTL not set");
++
++ png_write_reset(png_ptr);
++
++ png_write_reinit(png_ptr, info_ptr, width, height);
++
++ if ( !(png_ptr->num_frames_written == 0 &&
++ (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN) ) )
++ png_write_fcTL(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++}
++
++void PNGAPI
++png_write_frame_tail(png_structp png_ptr, png_infop png_info)
++{
++ png_debug(1, "in png_write_frame_tail\n");
++
++ png_ptr->num_frames_written++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ #endif /* PNG_WRITE_SUPPORTED */
+Index: pngset.c
+===================================================================
+--- pngset.c (révision 119)
++++ pngset.c (copie de travail)
+@@ -362,6 +362,11 @@
+ info_ptr->rowbytes = (png_size_t)0;
+ else
+ info_ptr->rowbytes = PNG_ROWBYTES(info_ptr->pixel_depth,width);
++
++#if defined(PNG_APNG_SUPPORTED)
++ /* for non-animated png. this may be overritten from an acTL chunk later */
++ info_ptr->num_frames = 1;
++#endif
+ }
+
+ #if defined(PNG_oFFs_SUPPORTED)
+@@ -993,6 +998,141 @@
+ }
+ #endif /* PNG_sPLT_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++png_uint_32 PNGAPI
++png_set_acTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++ png_debug1(1, "in %s storage function\n", "acTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_acTL() with NULL png_ptr "
++ "or info_ptr ignored");
++ return (0);
++ }
++ if (num_frames == 0)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames zero");
++ return (0);
++ }
++ if (num_frames > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_frames > 2^31-1");
++ return (0);
++ }
++ if (num_plays > PNG_UINT_31_MAX)
++ {
++ png_warning(png_ptr,
++ "Ignoring attempt to set acTL with num_plays "
++ "> 2^31-1");
++ return (0);
++ }
++
++ info_ptr->num_frames = num_frames;
++ info_ptr->num_plays = num_plays;
++
++ info_ptr->valid |= PNG_INFO_acTL;
++
++ return (1);
++}
++
++/* delay_num and delay_den can hold any values including zero */
++png_uint_32 PNGAPI
++png_set_next_frame_fcTL(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ png_debug1(1, "in %s storage function\n", "fcTL");
++
++ if (png_ptr == NULL || info_ptr == NULL)
++ {
++ png_warning(png_ptr,
++ "Call to png_set_fcTL() with NULL png_ptr or info_ptr "
++ "ignored");
++ return (0);
++ }
++
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ info_ptr->next_frame_width = width;
++ info_ptr->next_frame_height = height;
++ info_ptr->next_frame_x_offset = x_offset;
++ info_ptr->next_frame_y_offset = y_offset;
++ info_ptr->next_frame_delay_num = delay_num;
++ info_ptr->next_frame_delay_den = delay_den;
++ info_ptr->next_frame_dispose_op = dispose_op;
++ info_ptr->next_frame_blend_op = blend_op;
++
++ info_ptr->valid |= PNG_INFO_fcTL;
++
++ return (1);
++}
++
++void /* PRIVATE */
++png_ensure_fcTL_is_valid(png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op)
++{
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++ if (width > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid width in fcTL (> 2^31-1)");
++ if (height > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid height in fcTL (> 2^31-1)");
++ if (x_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid x_offset in fcTL (> 2^31-1)");
++ if (y_offset > PNG_UINT_31_MAX)
++ png_error(png_ptr, "invalid y_offset in fcTL (> 2^31-1)");
++
++ if (dispose_op != PNG_DISPOSE_OP_NONE &&
++ dispose_op != PNG_DISPOSE_OP_BACKGROUND &&
++ dispose_op != PNG_DISPOSE_OP_PREVIOUS)
++ png_error(png_ptr, "invalid dispose_op in fcTL");
++
++ if (blend_op != PNG_BLEND_OP_SOURCE &&
++ blend_op != PNG_BLEND_OP_OVER)
++ png_error(png_ptr, "invalid blend_op in fcTL");
++
++ if (blend_op == PNG_BLEND_OP_OVER) {
++ if (png_ptr->color_type == PNG_COLOR_TYPE_GRAY)
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'greyscale without alpha'");
++ else if ((png_ptr->color_type & PNG_COLOR_MASK_COLOR) &&
++ !(png_ptr->color_type & PNG_COLOR_MASK_ALPHA))
++ png_error(png_ptr, "PNG_BLEND_OP_OVER is not valid for "
++ "color type 'truecolor without alpha'");
++ }
++}
++
++png_uint_32 PNGAPI
++png_set_first_frame_is_hidden(png_structp png_ptr, png_infop info_ptr,
++ png_byte is_hidden)
++{
++ png_debug(1, "in png_first_frame_is_hidden()\n");
++
++ if (png_ptr == NULL)
++ return 0;
++
++ if(is_hidden)
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ else
++ png_ptr->apng_flags &= ~PNG_FIRST_FRAME_HIDDEN;
++
++ return 1;
++}
++#endif /* PNG_APNG_SUPPORTED */
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ void PNGAPI
+ png_set_unknown_chunks(png_structp png_ptr,
+Index: pngrutil.c
+===================================================================
+--- pngrutil.c (révision 119)
++++ pngrutil.c (copie de travail)
+@@ -366,6 +366,11 @@
+ filter_type = buf[11];
+ interlace_type = buf[12];
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* set internal variables */
+ png_ptr->width = width;
+ png_ptr->height = height;
+@@ -2133,6 +2138,168 @@
+ }
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void /* PRIVATE */
++png_handle_acTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[8];
++ png_uint_32 num_frames;
++ png_uint_32 num_plays;
++ png_uint_32 didSet;
++
++ png_debug(1, "in png_handle_acTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before acTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ png_warning(png_ptr, "Invalid acTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_acTL)
++ {
++ png_warning(png_ptr, "Duplicate acTL skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 8)
++ {
++ png_warning(png_ptr, "acTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_crc_read(png_ptr, data, 8);
++ png_crc_finish(png_ptr, 0);
++
++ num_frames = png_get_uint_31(png_ptr, data);
++ num_plays = png_get_uint_31(png_ptr, data + 4);
++
++ /* the set function will do error checking on num_frames */
++ didSet = png_set_acTL(png_ptr, info_ptr, num_frames, num_plays);
++ if(didSet)
++ png_ptr->mode |= PNG_HAVE_acTL;
++}
++
++void /* PRIVATE */
++png_handle_fcTL(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_byte data[22];
++ png_uint_32 width;
++ png_uint_32 height;
++ png_uint_32 x_offset;
++ png_uint_32 y_offset;
++ png_uint_16 delay_num;
++ png_uint_16 delay_den;
++ png_byte dispose_op;
++ png_byte blend_op;
++
++ png_debug(1, "in png_handle_fcTL\n");
++
++ if (!(png_ptr->mode & PNG_HAVE_IHDR))
++ {
++ png_error(png_ptr, "Missing IHDR before fcTL");
++ }
++ else if (png_ptr->mode & PNG_HAVE_IDAT)
++ {
++ /* for any frames other then the first this message may be misleading,
++ * but correct. PNG_HAVE_IDAT is unset before the frame head is read
++ * i can't think of a better message */
++ png_warning(png_ptr, "Invalid fcTL after IDAT skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (png_ptr->mode & PNG_HAVE_fcTL)
++ {
++ png_warning(png_ptr, "Duplicate fcTL within one frame skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++ else if (length != 26)
++ {
++ png_warning(png_ptr, "fcTL with invalid length skipped");
++ png_crc_finish(png_ptr, length);
++ return;
++ }
++
++ png_ensure_sequence_number(png_ptr, length);
++
++ png_crc_read(png_ptr, data, 22);
++ png_crc_finish(png_ptr, 0);
++
++ width = png_get_uint_31(png_ptr, data);
++ height = png_get_uint_31(png_ptr, data + 4);
++ x_offset = png_get_uint_31(png_ptr, data + 8);
++ y_offset = png_get_uint_31(png_ptr, data + 12);
++ delay_num = png_get_uint_16(data + 16);
++ delay_den = png_get_uint_16(data + 18);
++ dispose_op = data[20];
++ blend_op = data[21];
++
++ if (png_ptr->num_frames_read == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "fcTL for the first frame must have zero offset");
++ if (png_ptr->num_frames_read == 0 &&
++ (width != info_ptr->width || height != info_ptr->height))
++ png_error(png_ptr, "size in first frame's fcTL must match "
++ "the size in IHDR");
++
++ /* the set function will do more error checking */
++ png_set_next_frame_fcTL(png_ptr, info_ptr, width, height,
++ x_offset, y_offset, delay_num, delay_den,
++ dispose_op, blend_op);
++
++ png_read_reinit(png_ptr, info_ptr);
++
++ png_ptr->mode |= PNG_HAVE_fcTL;
++}
++
++void /* PRIVATE */
++png_have_info(png_structp png_ptr, png_infop info_ptr)
++{
++ if((info_ptr->valid & PNG_INFO_acTL) && !(info_ptr->valid & PNG_INFO_fcTL))
++ {
++ png_ptr->apng_flags |= PNG_FIRST_FRAME_HIDDEN;
++ info_ptr->num_frames++;
++ }
++}
++
++void /* PRIVATE */
++png_handle_fdAT(png_structp png_ptr, png_infop info_ptr, png_uint_32 length)
++{
++ png_ensure_sequence_number(png_ptr, length);
++
++ /* This function is only called from png_read_end(), png_read_info(),
++ * and png_push_read_chunk() which means that:
++ * - the user doesn't want to read this frame
++ * - or this is an out-of-place fdAT
++ * in either case it is safe to ignore the chunk with a warning */
++ png_warning(png_ptr, "ignoring fdAT chunk");
++ png_crc_finish(png_ptr, length - 4);
++}
++
++void /* PRIVATE */
++png_ensure_sequence_number(png_structp png_ptr, png_uint_32 length)
++{
++ png_byte data[4];
++ png_uint_32 sequence_number;
++
++ if (length < 4)
++ png_error(png_ptr, "invalid fcTL or fdAT chunk found");
++
++ png_crc_read(png_ptr, data, 4);
++ sequence_number = png_get_uint_31(png_ptr, data);
++
++ if (sequence_number != png_ptr->next_seq_num)
++ png_error(png_ptr, "fcTL or fdAT chunk with out-of-order sequence "
++ "number found");
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ /* This function is called when we haven't found a handler for a
+ chunk. If there isn't a problem with the chunk itself (ie bad
+ chunk name, CRC, or a critical chunk), the chunk is silently ignored
+@@ -3097,8 +3264,10 @@
+ if (row_bytes > (png_uint_32)65536L)
+ png_error(png_ptr, "This image requires a row greater than 64KB");
+ #endif
+- png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
+- png_ptr->row_buf = png_ptr->big_row_buf+32;
++ if (png_ptr->big_row_buf == NULL)
++ png_ptr->big_row_buf = (png_bytep)png_malloc(png_ptr, row_bytes+64);
++ if (png_ptr->row_buf == NULL)
++ png_ptr->row_buf = png_ptr->big_row_buf+32;
+ #if defined(PNG_DEBUG) && defined(PNG_USE_PNGGCCRD)
+ png_ptr->row_buf_size = row_bytes;
+ #endif
+@@ -3123,4 +3292,82 @@
+
+ png_ptr->flags |= PNG_FLAG_ROW_INIT;
+ }
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* This function is to be called after the main IDAT set has been read and
++ * before a new IDAT is read. It resets some parts of png_ptr
++ * to make them usable by the read functions again */
++void /* PRIVATE */
++png_read_reset(png_structp png_ptr)
++{
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++ png_ptr->mode &= ~PNG_AFTER_IDAT;
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->flags &= ~PNG_FLAG_ROW_INIT;
++}
++
++void /* PRIVATE */
++png_read_reinit(png_structp png_ptr, png_infop info_ptr)
++{
++ png_ptr->width = info_ptr->next_frame_width;
++ png_ptr->height = info_ptr->next_frame_height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->width);
++}
++
++/* same as png_read_reset() but for the progressive reader */
++void /* PRIVATE */
++png_progressive_read_reset(png_structp png_ptr)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ /* start of interlace block */
++ const int FARDATA png_pass_start[] = {0, 4, 0, 2, 0, 1, 0};
++
++ /* offset to next interlace block */
++ const int FARDATA png_pass_inc[] = {8, 8, 4, 4, 2, 2, 1};
++
++ /* start of interlace block in the y direction */
++ const int FARDATA png_pass_ystart[] = {0, 0, 4, 0, 2, 0, 1};
++
++ /* offset to next interlace block in the y direction */
++ const int FARDATA png_pass_yinc[] = {8, 8, 8, 4, 4, 2, 2};
++#endif
++ png_uint_32 row_bytes;
++
++ if (png_ptr->interlaced)
++ {
++ if (!(png_ptr->transformations & PNG_INTERLACE))
++ png_ptr->num_rows = (png_ptr->height + png_pass_yinc[0] - 1 -
++ png_pass_ystart[0]) / png_pass_yinc[0];
++ else
++ png_ptr->num_rows = png_ptr->height;
++
++ png_ptr->iwidth = (png_ptr->width +
++ png_pass_inc[png_ptr->pass] - 1 -
++ png_pass_start[png_ptr->pass]) /
++ png_pass_inc[png_ptr->pass];
++
++ row_bytes = PNG_ROWBYTES(png_ptr->pixel_depth,png_ptr->iwidth) + 1;
++
++ png_ptr->irowbytes = (png_size_t)row_bytes;
++ if((png_uint_32)png_ptr->irowbytes != row_bytes)
++ png_error(png_ptr, "png_progressive_read_reset(): Rowbytes "
++ "overflow");
++ }
++ else
++ {
++ png_ptr->num_rows = png_ptr->height;
++ png_ptr->iwidth = png_ptr->width;
++ png_ptr->irowbytes = png_ptr->rowbytes + 1;
++ }
++
++ png_ptr->flags &= ~PNG_FLAG_ZLIB_FINISHED;
++ if (inflateReset(&(png_ptr->zstream)) != Z_OK)
++ png_error(png_ptr, "inflateReset failed");
++ png_ptr->zstream.avail_in = 0;
++ png_ptr->zstream.next_in = 0;
++ png_ptr->zstream.next_out = png_ptr->row_buf;
++ png_ptr->zstream.avail_out = (uInt)png_ptr->irowbytes;
++}
++#endif /* PNG_READ_APNG_SUPPORTED */
+ #endif /* PNG_READ_SUPPORTED */
+Index: pngwutil.c
+===================================================================
+--- pngwutil.c (révision 119)
++++ pngwutil.c (copie de travail)
+@@ -496,6 +496,11 @@
+ /* write the chunk */
+ png_write_chunk(png_ptr, (png_bytep)png_IHDR, buf, (png_size_t)13);
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_ptr->first_frame_width = width;
++ png_ptr->first_frame_height = height;
++#endif
++
+ /* initialize zlib with PNG info */
+ png_ptr->zstream.zalloc = png_zalloc;
+ png_ptr->zstream.zfree = png_zfree;
+@@ -607,7 +612,10 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ PNG_fdAT;
+ #endif
++#endif
+ png_debug(1, "in png_write_IDAT\n");
+
+ /* Optimize the CMF field in the zlib stream. */
+@@ -649,7 +657,28 @@
+ "Invalid zlib compression method or flags in IDAT");
+ }
+
+- png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ if(png_ptr->num_frames_written == 0)
++#endif
++ png_write_chunk(png_ptr, (png_bytep)png_IDAT, data, length);
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ else
++ {
++ png_byte buf[4];
++
++ png_write_chunk_start(png_ptr, (png_bytep)png_fdAT, 4 + length);
++
++ png_save_uint_32(buf, png_ptr->next_seq_num);
++ png_write_chunk_data(png_ptr, buf, 4);
++
++ png_write_chunk_data(png_ptr, data, length);
++
++ png_write_chunk_end(png_ptr);
++
++ png_ptr->next_seq_num++;
++ }
++#endif
++
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ }
+
+@@ -1720,6 +1749,70 @@
+ }
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_acTL(png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_acTL;
++#endif
++ png_byte data[16];
++
++ png_debug(1, "in png_write_acTL\n");
++
++ png_ptr->num_frames_to_write = num_frames;
++
++ if (png_ptr->apng_flags & PNG_FIRST_FRAME_HIDDEN)
++ num_frames--;
++
++ png_save_uint_32(data, num_frames);
++ png_save_uint_32(data + 4, num_plays);
++
++ png_write_chunk(png_ptr, (png_bytep)png_acTL, data, (png_size_t)8);
++}
++
++void /* PRIVATE */
++png_write_fcTL(png_structp png_ptr, png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op)
++{
++#ifdef PNG_USE_LOCAL_ARRAYS
++ PNG_fcTL;
++#endif
++ png_byte data[26];
++
++ png_debug(1, "in png_write_fcTL\n");
++
++ if (png_ptr->num_frames_written == 0 && (x_offset != 0 || y_offset != 0))
++ png_error(png_ptr, "x and/or y offset for the first frame aren't 0\n");
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++
++ /* more error checking */
++ png_ensure_fcTL_is_valid(png_ptr, width, height, x_offset, y_offset,
++ delay_num, delay_den, dispose_op, blend_op);
++
++ png_save_uint_32(data, png_ptr->next_seq_num);
++ png_save_uint_32(data + 4, width);
++ png_save_uint_32(data + 8, height);
++ png_save_uint_32(data + 12, x_offset);
++ png_save_uint_32(data + 16, y_offset);
++ png_save_uint_16(data + 20, delay_num);
++ png_save_uint_16(data + 22, delay_den);
++ data[24] = dispose_op;
++ data[25] = blend_op;
++
++ png_write_chunk(png_ptr, (png_bytep)png_fcTL, data, (png_size_t)26);
++
++ png_ptr->next_seq_num++;
++}
++#endif /* PNG_WRITE_APNG_SUPPORTED */
++
+ /* initializes the row writing capability of libpng */
+ void /* PRIVATE */
+ png_write_start_row(png_structp png_ptr)
+@@ -1747,14 +1840,16 @@
+ png_ptr->usr_channels*png_ptr->usr_bit_depth,png_ptr->width)+1);
+
+ /* set up row buffer */
+- png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
++ if (png_ptr->row_buf == NULL)
++ png_ptr->row_buf = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
+ png_ptr->row_buf[0] = PNG_FILTER_VALUE_NONE;
+
+ /* set up filtering buffer, if using this filter */
+ if (png_ptr->do_filter & PNG_FILTER_SUB)
+ {
+- png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
+- (png_ptr->rowbytes + 1));
++ if (png_ptr->sub_row == NULL)
++ png_ptr->sub_row = (png_bytep)png_malloc(png_ptr,
++ (png_ptr->rowbytes + 1));
+ png_ptr->sub_row[0] = PNG_FILTER_VALUE_SUB;
+ }
+
+@@ -1762,27 +1857,31 @@
+ if (png_ptr->do_filter & (PNG_FILTER_AVG | PNG_FILTER_UP | PNG_FILTER_PAETH))
+ {
+ /* set up previous row buffer */
+- png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
++ if (png_ptr->prev_row == NULL)
++ png_ptr->prev_row = (png_bytep)png_malloc(png_ptr, (png_uint_32)buf_size);
+ png_memset(png_ptr->prev_row, 0, buf_size);
+
+ if (png_ptr->do_filter & PNG_FILTER_UP)
+ {
+- png_ptr->up_row = (png_bytep )png_malloc(png_ptr,
+- (png_ptr->rowbytes + 1));
++ if (png_ptr->up_row == NULL)
++ png_ptr->up_row = (png_bytep )png_malloc(png_ptr,
++ (png_ptr->rowbytes + 1));
+ png_ptr->up_row[0] = PNG_FILTER_VALUE_UP;
+ }
+
+ if (png_ptr->do_filter & PNG_FILTER_AVG)
+ {
+- png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
+- (png_ptr->rowbytes + 1));
++ if (png_ptr->avg_row == NULL)
++ png_ptr->avg_row = (png_bytep)png_malloc(png_ptr,
++ (png_ptr->rowbytes + 1));
+ png_ptr->avg_row[0] = PNG_FILTER_VALUE_AVG;
+ }
+
+ if (png_ptr->do_filter & PNG_FILTER_PAETH)
+ {
+- png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr,
+- (png_ptr->rowbytes + 1));
++ if (png_ptr->paeth_row == NULL)
++ png_ptr->paeth_row = (png_bytep )png_malloc(png_ptr,
++ (png_ptr->rowbytes + 1));
+ png_ptr->paeth_row[0] = PNG_FILTER_VALUE_PAETH;
+ }
+ }
+@@ -2774,4 +2873,39 @@
+ }
+ #endif
+ }
++
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++void /* PRIVATE */
++png_write_reset(png_structp png_ptr)
++{
++ png_ptr->row_number = 0;
++ png_ptr->pass = 0;
++ png_ptr->mode &= ~PNG_HAVE_IDAT;
++}
++
++void /* PRIVATE */
++png_write_reinit(png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 width, png_uint_32 height)
++{
++ if (png_ptr->num_frames_written == 0 &&
++ (width != png_ptr->first_frame_width ||
++ height != png_ptr->first_frame_height))
++ png_error(png_ptr, "width and/or height in the first frame's fcTL "
++ "don't match the ones in IHDR\n");
++ if (width > png_ptr->first_frame_width ||
++ height > png_ptr->first_frame_height)
++ png_error(png_ptr, "width and/or height for a frame greater than"
++ "the ones in IHDR");
++
++ png_set_IHDR(png_ptr, info_ptr, width, height,
++ info_ptr->bit_depth, info_ptr->color_type,
++ info_ptr->interlace_type, info_ptr->compression_type,
++ info_ptr->filter_type);
++
++ png_ptr->width = width;
++ png_ptr->height = height;
++ png_ptr->rowbytes = PNG_ROWBYTES(png_ptr->pixel_depth, width);
++ png_ptr->usr_width = png_ptr->width;
++}
++#endif
+ #endif /* PNG_WRITE_SUPPORTED */
+--- png.h.orig 2007-05-15 19:52:22.000000000 -0400
++++ png.h 2007-07-05 09:08:50.000000000 -0400
+@@ -924,6 +924,19 @@
+ png_fixed_point int_y_blue;
+ #endif
+
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 num_frames; /* including default image */
++ png_uint_32 num_plays;
++ png_uint_32 next_frame_width;
++ png_uint_32 next_frame_height;
++ png_uint_32 next_frame_x_offset;
++ png_uint_32 next_frame_y_offset;
++ png_uint_16 next_frame_delay_num;
++ png_uint_16 next_frame_delay_den;
++ png_byte next_frame_dispose_op;
++ png_byte next_frame_blend_op;
++#endif
++
+ } png_info;
+
+ typedef png_info FAR * png_infop;
+@@ -1025,6 +1038,8 @@
+ #define PNG_INFO_sPLT 0x2000 /* ESR, 1.0.6 */
+ #define PNG_INFO_sCAL 0x4000 /* ESR, 1.0.6 */
+ #define PNG_INFO_IDAT 0x8000L /* ESR, 1.0.6 */
++#define PNG_INFO_acTL 0x10000L
++#define PNG_INFO_fcTL 0x20000L
+
+ /* This is used for the transformation routines, as some of them
+ * change these values for the row. It also should enable using
+@@ -1065,6 +1080,10 @@
+ typedef void (PNGAPI *png_progressive_end_ptr) PNGARG((png_structp, png_infop));
+ typedef void (PNGAPI *png_progressive_row_ptr) PNGARG((png_structp, png_bytep,
+ png_uint_32, int));
++#if defined(PNG_APNG_SUPPORTED)
++typedef void (PNGAPI *png_progressive_frame_ptr) PNGARG((png_structp,
++ png_uint_32));
++#endif
+ #endif
+
+ #if defined(PNG_READ_USER_TRANSFORM_SUPPORTED) || \
+@@ -1400,8 +1419,40 @@
+ /* storage for unknown chunk that the library doesn't recognize. */
+ png_unknown_chunk unknown_chunk;
+ #endif
+-};
++#if defined(PNG_APNG_SUPPORTED)
++ png_uint_32 apng_flags;
++ png_uint_32 next_seq_num; /* next fcTL/fdAT chunk sequence number */
++ png_uint_32 first_frame_width;
++ png_uint_32 first_frame_height;
++#endif
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_uint_32 num_frames_read; /* incremented after all image data of */
++ /* a frame is read */
++#ifdef PNG_PROGRESSIVE_READ_SUPPORTED
++ png_progressive_frame_ptr frame_info_fn; /* frame info read callback */
++ png_progressive_frame_ptr frame_end_fn; /* frame data read callback */
++#endif
++#endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++ png_uint_32 num_frames_to_write;
++ png_uint_32 num_frames_written;
++#endif
++
++};
++
++/* For png_struct.apng_flags: */
++#define PNG_FIRST_FRAME_HIDDEN 0x0001
++
++/* dispose_op flags from inside fcTL */
++#define PNG_DISPOSE_OP_NONE 0x00
++#define PNG_DISPOSE_OP_BACKGROUND 0x01
++#define PNG_DISPOSE_OP_PREVIOUS 0x02
++
++/* blend_op flags from inside fcTL */
++#define PNG_BLEND_OP_SOURCE 0x00
++#define PNG_BLEND_OP_OVER 0x01
+
+ /* This triggers a compiler error in png.c, if png.c and png.h
+ * do not agree upon the version number.
+@@ -1721,6 +1772,18 @@
+ extern PNG_EXPORT(void,png_write_image) PNGARG((png_structp png_ptr,
+ png_bytepp image));
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++extern PNG_EXPORT (void,png_write_frame_head) PNGARG((png_structp png_ptr,
++ png_infop png_info, png_bytepp row_pointers,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++
++extern PNG_EXPORT (void,png_write_frame_tail) PNGARG((png_structp png_ptr,
++ png_infop png_info));
++#endif
++
+ /* writes the end of the PNG file. */
+ extern PNG_EXPORT(void,png_write_end) PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+@@ -1969,6 +2032,11 @@
+ png_voidp progressive_ptr,
+ png_progressive_info_ptr info_fn, png_progressive_row_ptr row_fn,
+ png_progressive_end_ptr end_fn));
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_set_progressive_frame_fn) PNGARG((png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn));
++#endif
+
+ /* returns the user pointer associated with the push read functions */
+ extern PNG_EXPORT(png_voidp,png_get_progressive_ptr)
+@@ -2397,6 +2465,59 @@
+ #endif
+ #endif /* PNG_sCAL_SUPPORTED || PNG_WRITE_sCAL_SUPPORTED */
+
++#if defined(PNG_APNG_SUPPORTED)
++extern PNG_EXPORT(png_uint_32,png_get_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 *num_frames, png_uint_32 *num_plays));
++extern PNG_EXPORT(png_uint_32,png_set_acTL) PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 num_frames, png_uint_32 num_plays));
++extern PNG_EXPORT(png_uint_32,png_get_num_frames) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_num_plays)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 *width,
++ png_uint_32 *height, png_uint_32 *x_offset, png_uint_32 *y_offset,
++ png_uint_16 *delay_num, png_uint_16 *delay_den, png_byte *dispose_op,
++ png_byte *blend_op));
++extern PNG_EXPORT(png_uint_32,png_set_next_frame_fcTL)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_uint_32 width,
++ png_uint_32 height, png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den, png_byte dispose_op,
++ png_byte blend_op));
++extern PNG_EXPORT(void,png_ensure_fcTL_is_valid)
++ PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_width)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_height)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_x_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_get_next_frame_y_offset)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_num)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_16,png_get_next_frame_delay_den)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_dispose_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_next_frame_blend_op)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_byte,png_get_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr));
++extern PNG_EXPORT(png_uint_32,png_set_first_frame_is_hidden)
++ PNGARG((png_structp png_ptr, png_infop info_ptr, png_byte is_hidden));
++#endif /* PNG_APNG_SUPPORTED */
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++extern PNG_EXPORT(void,png_read_frame_head) PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++#endif
++
+ #if defined(PNG_UNKNOWN_CHUNKS_SUPPORTED)
+ /* provide a list of chunks and how they are to be handled, if the built-in
+ handling or default unknown chunk handling is not desired. Any chunks not
+@@ -2707,6 +2828,8 @@
+ #define PNG_BACKGROUND_IS_GRAY 0x800
+ #define PNG_HAVE_PNG_SIGNATURE 0x1000
+ #define PNG_HAVE_CHUNK_AFTER_IDAT 0x2000 /* Have another chunk after IDAT */
++#define PNG_HAVE_acTL 0x4000
++#define PNG_HAVE_fcTL 0x8000L
+
+ /* flags for the transformations the PNG library does on the image data */
+ #define PNG_BGR 0x0001
+@@ -2850,6 +2973,9 @@
+ #define PNG_tIME const png_byte png_tIME[5] = {116, 73, 77, 69, '\0'}
+ #define PNG_tRNS const png_byte png_tRNS[5] = {116, 82, 78, 83, '\0'}
+ #define PNG_zTXt const png_byte png_zTXt[5] = {122, 84, 88, 116, '\0'}
++#define PNG_acTL const png_byte png_acTL[5] = { 97, 99, 84, 76, '\0'}
++#define PNG_fcTL const png_byte png_fcTL[5] = {102, 99, 84, 76, '\0'}
++#define PNG_fdAT const png_byte png_fdAT[5] = {102, 100, 65, 84, '\0'}
+
+ #ifdef PNG_USE_GLOBAL_ARRAYS
+ PNG_EXPORT_VAR (const png_byte FARDATA) png_IHDR[5];
+@@ -2873,6 +2999,9 @@
+ PNG_EXPORT_VAR (const png_byte FARDATA) png_tIME[5];
+ PNG_EXPORT_VAR (const png_byte FARDATA) png_tRNS[5];
+ PNG_EXPORT_VAR (const png_byte FARDATA) png_zTXt[5];
++PNG_EXPORT_VAR (const png_byte FARDATA) png_acTL[5];
++PNG_EXPORT_VAR (const png_byte FARDATA) png_fcTL[5];
++PNG_EXPORT_VAR (const png_byte FARDATA) png_fdAT[5];
+ #endif /* PNG_USE_GLOBAL_ARRAYS */
+
+ #if defined(PNG_1_0_X) || defined (PNG_1_2_X)
+@@ -3147,6 +3276,17 @@
+ #endif
+ #endif
+
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++PNG_EXTERN void png_write_acTL PNGARG((png_structp png_ptr,
++ png_uint_32 num_frames, png_uint_32 num_plays));
++
++PNG_EXTERN void png_write_fcTL PNGARG((png_structp png_ptr,
++ png_uint_32 width, png_uint_32 height,
++ png_uint_32 x_offset, png_uint_32 y_offset,
++ png_uint_16 delay_num, png_uint_16 delay_den,
++ png_byte dispose_op, png_byte blend_op));
++#endif
++
+ /* Called when finished processing a row of data */
+ PNG_EXTERN void png_write_finish_row PNGARG((png_structp png_ptr));
+
+@@ -3198,6 +3338,20 @@
+ PNG_EXTERN void png_read_transform_info PNGARG((png_structp png_ptr,
+ png_infop info_ptr));
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++/* private, reset some things to become ready for reading next frame */
++PNG_EXTERN void png_read_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_read_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr));
++PNG_EXTERN void png_progressive_read_reset PNGARG((png_structp png_ptr));
++#endif
++#if defined(PNG_WRITE_APNG_SUPPORTED)
++/* private, reset some things to become ready for writing next frame */
++PNG_EXTERN void png_write_reset PNGARG((png_structp png_ptr));
++PNG_EXTERN void png_write_reinit PNGARG((png_structp png_ptr,
++ png_infop info_ptr, png_uint_32 width, png_uint_32 height));
++#endif
++
+ /* these are the functions that do the transformations */
+ #if defined(PNG_READ_FILLER_SUPPORTED)
+ PNG_EXTERN void png_do_read_filler PNGARG((png_row_infop row_info,
+@@ -3413,6 +3567,18 @@
+ png_uint_32 length));
+ #endif
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++PNG_EXTERN void png_handle_acTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_handle_fcTL PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_have_info PNGARG((png_structp png_ptr, png_infop info_ptr));
++PNG_EXTERN void png_handle_fdAT PNGARG((png_structp png_ptr, png_infop info_ptr,
++ png_uint_32 length));
++PNG_EXTERN void png_ensure_sequence_number PNGARG((png_structp png_ptr,
++ png_uint_32 length));
++#endif
++
+ PNG_EXTERN void png_handle_unknown PNGARG((png_structp png_ptr,
+ png_infop info_ptr, png_uint_32 length));
+
+--- pngpread.c.orig 2007-05-15 19:52:24.000000000 -0400
++++ pngpread.c 2007-07-05 09:25:21.000000000 -0400
+@@ -192,6 +192,11 @@
+ #if defined(PNG_READ_zTXt_SUPPORTED)
+ PNG_zTXt;
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_acTL;
++ PNG_fcTL;
++ PNG_fdAT;
++#endif
+ #endif /* PNG_USE_LOCAL_ARRAYS */
+ /* First we make sure we have enough data for the 4 byte chunk name
+ * and the 4 byte chunk length before proceeding with decoding the
+@@ -215,7 +220,104 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+ }
+-
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->num_frames_read > 0 &&
++ png_ptr->num_frames_read < info_ptr->num_frames)
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IDAT, 4))
++ {
++ /* discard trailing IDATs for the first frame */
++ if (png_ptr->mode & PNG_HAVE_fcTL || png_ptr->num_frames_read > 1)
++ png_error(png_ptr, "out of place IDAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->buffer_size < 4)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_ensure_sequence_number(png_ptr, 4);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ {
++ /* discard trailing fdATs for frames other than the first */
++ if (png_ptr->num_frames_read < 2)
++ png_error(png_ptr, "out of place fdAT");
++
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ else
++ {
++ /* frame data follows */
++ png_ptr->idat_size = png_ptr->push_length - 4;
++ png_ptr->mode |= PNG_HAVE_IDAT;
++ png_ptr->process_mode = PNG_READ_IDAT_MODE;
++
++ return;
++ }
++ }
++ else if(!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++
++ png_read_reset(png_ptr);
++ png_ptr->mode &= ~PNG_HAVE_fcTL;
++
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++
++ if (!(png_ptr->mode & PNG_HAVE_fcTL))
++ png_error(png_ptr, "missing required fcTL chunk");
++
++ png_read_reinit(png_ptr, info_ptr);
++ png_progressive_read_reset(png_ptr);
++
++ if (png_ptr->frame_info_fn != NULL)
++ (*(png_ptr->frame_info_fn))(png_ptr, png_ptr->num_frames_read);
++
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++
++ return;
++ }
++ else
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipped (ignored) a chunk "
++ "between APNG chunks");
++ png_push_crc_skip(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++
++ return;
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
++
+ if (!png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4))
+ if(png_ptr->mode & PNG_AFTER_IDAT)
+ png_ptr->mode |= PNG_HAVE_CHUNK_AFTER_IDAT;
+@@ -295,6 +397,9 @@
+ png_error(png_ptr, "Too many IDAT's found");
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++ png_have_info(png_ptr, info_ptr);
++#endif
+ png_ptr->idat_size = png_ptr->push_length;
+ png_ptr->mode |= PNG_HAVE_IDAT;
+ png_ptr->process_mode = PNG_READ_IDAT_MODE;
+@@ -490,6 +595,35 @@
+ png_push_handle_iTXt(png_ptr, info_ptr, png_ptr->push_length);
+ }
+ #endif
++#if defined(PNG_READ_APNG_SUPPORTED)
++ else if (!png_memcmp(png_ptr->chunk_name, png_acTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_acTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fcTL, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fcTL(png_ptr, info_ptr, png_ptr->push_length);
++ }
++ else if (!png_memcmp(png_ptr->chunk_name, png_fdAT, 4))
++ {
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_handle_fdAT(png_ptr, info_ptr, png_ptr->push_length);
++ }
++#endif /* PNG_READ_APNG_SUPPORTED */
+ else
+ {
+ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
+@@ -661,12 +795,16 @@
+ {
+ #ifdef PNG_USE_LOCAL_ARRAYS
+ PNG_IDAT;
++#if defined(PNG_READ_APNG_SUPPORTED)
++ PNG_fdAT;
++ PNG_IEND;
++#endif
+ #endif
+ if (!(png_ptr->mode & PNG_HAVE_CHUNK_HEADER))
+ {
+ png_byte chunk_length[4];
+
+- if (png_ptr->buffer_size < 8)
++ if (png_ptr->buffer_size < 12)
+ {
+ png_push_save_buffer(png_ptr);
+ return;
+@@ -678,15 +816,59 @@
+ png_crc_read(png_ptr, png_ptr->chunk_name, 4);
+ png_ptr->mode |= PNG_HAVE_CHUNK_HEADER;
+
+- if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4))
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_memcmp(png_ptr->chunk_name, (png_bytep)png_fdAT, 4)
++ && png_ptr->num_frames_read > 0)
++ {
++ if (png_ptr->flags & PNG_FLAG_ZLIB_FINISHED)
++ {
++ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++ return;
++ }
++ else
++ {
++ if (!png_memcmp(png_ptr->chunk_name, png_IEND, 4))
++ png_error(png_ptr, "Not enough image data");
++ if (png_ptr->push_length + 4 > png_ptr->buffer_size)
++ {
++ png_push_save_buffer(png_ptr);
++ return;
++ }
++ png_warning(png_ptr, "Skipping (ignoring) a chunk between "
++ "APNG chunks");
++ png_crc_finish(png_ptr, png_ptr->push_length);
++ png_ptr->mode &= ~PNG_HAVE_CHUNK_HEADER;
++ return;
++ }
++ }
++ else
++#endif
++ if ( png_memcmp(png_ptr->chunk_name, (png_bytep)png_IDAT, 4)
++ && (png_ptr->num_frames_read == 0) )
+ {
+ png_ptr->process_mode = PNG_READ_CHUNK_MODE;
+ if (!(png_ptr->flags & PNG_FLAG_ZLIB_FINISHED))
+ png_error(png_ptr, "Not enough compressed data");
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if (png_ptr->frame_end_fn != NULL)
++ (*(png_ptr->frame_end_fn))(png_ptr, png_ptr->num_frames_read);
++ png_ptr->num_frames_read++;
++#endif
+ return;
+ }
+
+ png_ptr->idat_size = png_ptr->push_length;
++
++#if defined(PNG_READ_APNG_SUPPORTED)
++ if(png_ptr->num_frames_read > 0)
++ {
++ png_ensure_sequence_number(png_ptr, 4);
++ png_ptr->idat_size -= 4;
++ }
++#endif
+ }
+ if (png_ptr->idat_size && png_ptr->save_buffer_size)
+ {
+@@ -1580,6 +1762,17 @@
+ png_set_read_fn(png_ptr, progressive_ptr, png_push_fill_buffer);
+ }
+
++#if defined(PNG_READ_APNG_SUPPORTED)
++void PNGAPI
++png_set_progressive_frame_fn(png_structp png_ptr,
++ png_progressive_frame_ptr frame_info_fn,
++ png_progressive_frame_ptr frame_end_fn)
++{
++ png_ptr->frame_info_fn = frame_info_fn;
++ png_ptr->frame_end_fn = frame_end_fn;
++}
++#endif
++
+ png_voidp PNGAPI
+ png_get_progressive_ptr(png_structp png_ptr)
+ {
diff --git a/graphics/png/pkg-descr b/graphics/png/pkg-descr
new file mode 100644
index 0000000..fb11db4
--- /dev/null
+++ b/graphics/png/pkg-descr
@@ -0,0 +1,11 @@
+Libpng was written as a companion to the PNG specification, as a
+way to reduce the amount of time and effort it takes to support
+the PNG file format in application programs. Most users will not
+have to modify the library significantly; advanced users may want
+to modify it more. The library was coded for both users. All
+attempts were made to make it as complete as possible, while
+keeping the code easy to understand. Currently, this library
+only supports C. Support for other languages is being considered.
+
+WWW: http://www.libpng.org/pub/png/libpng.html
+ http://libpng.sourceforge.net/
diff --git a/graphics/png/pkg-plist b/graphics/png/pkg-plist
new file mode 100644
index 0000000..2f8148c
--- /dev/null
+++ b/graphics/png/pkg-plist
@@ -0,0 +1,14 @@
+@unexec rm -f %D/bin/libpng12-config
+bin/libpng-config
+@exec ln -sf %f %D/bin/libpng12-config
+include/libpng/png.h
+@exec ln -sf libpng/%f %D/include/%f
+@unexec rm -f %D/include/%f
+include/libpng/pngconf.h
+@exec ln -sf libpng/%f %D/include/%f
+@unexec rm -f %D/include/%f
+lib/libpng.a
+lib/libpng.so
+lib/libpng.so.%%SHLIB_VER%%
+libdata/pkgconfig/libpng12.pc
+@dirrm include/libpng
diff --git a/security/nss/Makefile b/security/nss/Makefile
new file mode 100644
index 0000000..b6fbdeb
--- /dev/null
+++ b/security/nss/Makefile
@@ -0,0 +1,105 @@
+# Ports collection Makefile for: nss
+# Date created: 18 December 2001
+# Whom: Maxim Sobolev <sobomax@FreeBSD.org>
+#
+# $FreeBSD$
+# $MCom$
+
+PORTNAME= nss
+DISTVERSION= ${_MAJOR}.${_MINOR}.${_PATCH}-2
+PORTREVISION= 1
+CATEGORIES= security
+MASTER_SITES= LOCAL
+MASTER_SITE_SUBDIR= ahze
+#MASTER_SITES= ${MASTER_SITE_MOZILLA}
+#MASTER_SITE_SUBDIR= security/nss/releases/NSS_${PORTVERSION:S/./_/g}_RTM/src
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= Libraries to support development of security-enabled applications
+
+BUILD_DEPENDS= zip:${PORTSDIR}/archivers/zip
+LIB_DEPENDS= nspr4.1:${PORTSDIR}/devel/nspr
+
+USE_BZIP2=yes
+
+_MAJOR= 3
+_MINOR= 11
+_PATCH= 7
+
+WRKSRC= ${WRKDIR}/${DISTNAME}/mozilla/security/nss
+
+USE_LDCONFIG= ${PREFIX}/lib/nss
+USE_GMAKE= yes
+USE_PERL5_BUILD=yes
+MAKE_ENV= BSD_LDOPTS="${PTHREAD_LIBS} -L${LOCALBASE}/lib" \
+ BUILD_OPT=1
+ALL_TARGET= nss_build_all
+CFLAGS+= -I${LOCALBASE}/include/nspr
+
+DIST= ${WRKSRC:H:H}/dist
+
+.include <bsd.port.pre.mk>
+
+.if ${ARCH} == "alpha" && ${OSVERSION} < 500035
+IGNORE= core dumps on alpha during build
+.endif
+
+EXTERNALS= CVS dbm security/nss/cmd/zlib nsprpub security/dbm
+EXTRACT_AFTER_ARGS=| ${TAR} -xf - \
+ ${EXTERNALS:C,^,--exclude ${DISTNAME}/mozilla/,}
+
+BINS=${DIST}/${OPSYS}${OSREL}_OPT.OBJ
+
+INSTALL_BINS= certcgi certutil checkcert cmsutil crlutil derdump makepqg \
+ mangle modutil ocspclnt oidcalc p7content p7env p7sign \
+ p7verify pk12util rsaperf shlibsign signtool signver \
+ ssltap strsclnt symkeyutil vfychain vfyserv
+
+test:
+ cd ${WRKSRC}/tests; \
+ ${SETENV} PATH="${BINS}/bin:${PATH}" \
+ LD_LIBRARY_PATH="${BINS}/lib" \
+ ./all.sh
+ @if ${GREP} -F '>Failed<' \
+ ${WRKSRC:H:H}/tests_results/security/*/results.html; then \
+ echo "Some tests have failed. Let ${MAINTAINER} know."; \
+ exit 1; \
+ else \
+ echo "All tests succeeded. Good news."; \
+ fi
+
+post-patch:
+ @${REINPLACE_CMD} -e "s|-pthread|${PTHREAD_LIBS}|g ; \
+ s|/usr/X11R6|${LOCALBASE}|g" \
+ ${WRKSRC:H:H}/security/coreconf/FreeBSD.mk
+ @${SED} -e 's|@exec_prefix@|${PREFIX}|; \
+ s|@includedir@|${PREFIX}/include/nss|; \
+ s|@libdir@|${PREFIX}/lib/nss|; \
+ s|@prefix@|${PREFIX}|' \
+ ${FILESDIR}/nss-config.in >${WRKDIR}/nss-config
+ @${SED} -e 's|@PREFIX@|${PREFIX}|; s|@PORTVERSION@|${PORTVERSION}|' \
+ ${FILESDIR}/nss.pc.in >${WRKDIR}/nss.pc
+.for i in MAJOR MINOR PATCH
+ @${SED} -i.${i} -e 's|@${i}@|${_${i}}|' ${WRKDIR}/nss-config
+.endfor
+
+do-install:
+ ${MKDIR} ${PREFIX}/include/nss ${PREFIX}/lib/nss
+ ${TAR} -C ${DIST}/public --dereference -cf - . | \
+ ${TAR} -C ${PREFIX}/include/nss -xf -
+ ${INSTALL_DATA} ${DIST}/FreeBSD${OSREL:C/.$/*/}_OPT.OBJ/lib/*.so.1 \
+ ${PREFIX}/lib/nss
+ ${INSTALL_DATA} ${DIST}/FreeBSD${OSREL:C/.$/*/}_OPT.OBJ/lib/libcrmf.a \
+ ${PREFIX}/lib/nss
+.for bin in ${INSTALL_BINS}
+ ${INSTALL_PROGRAM} ${DIST}/FreeBSD${OSREL:C/.$/*/}_OPT.OBJ/bin/${bin} \
+ ${PREFIX}/bin
+.endfor
+ cd ${DIST}/FreeBSD${OSREL:C/.$/*/}_OPT.OBJ/lib && \
+ ${TAR} -cf - *.so | ${TAR} --unlink -C ${PREFIX}/lib/nss -xf -
+ ${INSTALL_SCRIPT} ${WRKDIR}/nss-config ${PREFIX}/bin
+ ${INSTALL_DATA} ${WRKDIR}/nss.pc ${PREFIX}/libdata/pkgconfig
+#### Causes problems with older geckos, and it's not needed *yet*
+ ${RM} -f ${PREFIX}/lib/nss/libsqlite3.so.1 ${PREFIX}/lib/nss/libsqlite3.so
+
+.include <bsd.port.post.mk>
diff --git a/security/nss/distinfo b/security/nss/distinfo
new file mode 100644
index 0000000..353b58a
--- /dev/null
+++ b/security/nss/distinfo
@@ -0,0 +1,3 @@
+MD5 (nss-3.11.7-2.tar.bz2) = 777e9249d32a1cac9ba79379eb180899
+SHA256 (nss-3.11.7-2.tar.bz2) = 97586947ccf84b091358618af59b937c9100bfd6e5ca911fa16b2d7c5e6315f2
+SIZE (nss-3.11.7-2.tar.bz2) = 3791065
diff --git a/security/nss/files/nss-config.in b/security/nss/files/nss-config.in
new file mode 100644
index 0000000..d2605fe
--- /dev/null
+++ b/security/nss/files/nss-config.in
@@ -0,0 +1,137 @@
+#!/bin/sh
+
+prefix=@prefix@
+
+major_version=@MAJOR@
+minor_version=@MINOR@
+patch_version=@PATCH@
+
+usage()
+{
+ cat <<EOF
+Usage: nss-config [OPTIONS] [LIBRARIES]
+Options:
+ [--prefix[=DIR]]
+ [--exec-prefix[=DIR]]
+ [--includedir[=DIR]]
+ [--libdir[=DIR]]
+ [--version]
+ [--libs]
+ [--cflags]
+Dynamic Libraries:
+ nss
+ ssl
+ smime
+EOF
+ exit $1
+}
+
+if test $# -eq 0; then
+ usage 1 1>&2
+fi
+
+lib_ssl=yes
+lib_smime=yes
+lib_nss=yes
+
+while test $# -gt 0; do
+ case "$1" in
+ -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) optarg= ;;
+ esac
+
+ case $1 in
+ --prefix=*)
+ prefix=$optarg
+ ;;
+ --prefix)
+ echo_prefix=yes
+ ;;
+ --exec-prefix=*)
+ exec_prefix=$optarg
+ ;;
+ --exec-prefix)
+ echo_exec_prefix=yes
+ ;;
+ --includedir=*)
+ includedir=$optarg
+ ;;
+ --includedir)
+ echo_includedir=yes
+ ;;
+ --libdir=*)
+ libdir=$optarg
+ ;;
+ --libdir)
+ echo_libdir=yes
+ ;;
+ --version)
+ echo ${major_version}.${minor_version}.${patch_version}
+ ;;
+ --cflags)
+ echo_cflags=yes
+ ;;
+ --libs)
+ echo_libs=yes
+ ;;
+ ssl)
+ lib_ssl=yes
+ ;;
+ smime)
+ lib_smime=yes
+ ;;
+ nss)
+ lib_nss=yes
+ ;;
+ *)
+ usage 1 1>&2
+ ;;
+ esac
+ shift
+done
+
+# Set variables that may be dependent upon other variables
+if test -z "$exec_prefix"; then
+ exec_prefix=@exec_prefix@
+fi
+if test -z "$includedir"; then
+ includedir=@includedir@
+fi
+if test -z "$libdir"; then
+ libdir=@libdir@
+fi
+
+if test "$echo_prefix" = "yes"; then
+ echo $prefix
+fi
+
+if test "$echo_exec_prefix" = "yes"; then
+ echo $exec_prefix
+fi
+
+if test "$echo_includedir" = "yes"; then
+ echo $includedir
+fi
+
+if test "$echo_libdir" = "yes"; then
+ echo $libdir
+fi
+
+if test "$echo_cflags" = "yes"; then
+ echo -I$includedir
+fi
+
+if test "$echo_libs" = "yes"; then
+ libdirs="-Wl,-R$libdir -L$libdir"
+ if test -n "$lib_ssl"; then
+ libdirs="$libdirs -lssl${major_version}"
+ fi
+ if test -n "$lib_smime"; then
+ libdirs="$libdirs -lsmime${major_version}"
+ fi
+ if test -n "$lib_nss"; then
+ libdirs="$libdirs -lnss${major_version}"
+ fi
+ echo $libdirs
+fi
+
diff --git a/security/nss/files/nss.pc.in b/security/nss/files/nss.pc.in
new file mode 100644
index 0000000..7b17143
--- /dev/null
+++ b/security/nss/files/nss.pc.in
@@ -0,0 +1,11 @@
+prefix=@PREFIX@
+exec_prefix=@PREFIX@
+libdir=@PREFIX@/lib/nss
+includedir=@PREFIX@/include
+
+Name: NSS
+Description: Mozilla Network Security Services
+Version: @PORTVERSION@
+Requires: nspr
+Libs: -L${libdir} -lnss3 -lsmime3 -lssl3
+Cflags: -I${includedir}/nss -I${includedir}/nss/nss
diff --git a/security/nss/files/patch-..::coreconf::FreeBSD.mk b/security/nss/files/patch-..::coreconf::FreeBSD.mk
new file mode 100644
index 0000000..7a0417e
--- /dev/null
+++ b/security/nss/files/patch-..::coreconf::FreeBSD.mk
@@ -0,0 +1,62 @@
+--- ../coreconf/FreeBSD.mk.orig Sat Jan 21 03:36:11 2006
++++ ../coreconf/FreeBSD.mk Tue Jan 30 21:13:41 2007
+@@ -37,9 +37,9 @@
+
+ include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+-DEFAULT_COMPILER = gcc
+-CC = gcc
+-CCC = g++
++DEFAULT_COMPILER = $(CC)
++CC ?= gcc
++CCC = $(CXX)
+ RANLIB = ranlib
+
+ ifeq ($(OS_TEST),alpha)
+@@ -49,8 +49,14 @@
+ endif
+
+ OS_CFLAGS = $(DSO_CFLAGS) -ansi -Wall -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK
++OS_LIBS = $(BSD_LDOPTS)
++OPTIMIZER =
+
++ifeq ($(OS_TEST),sparc64)
+ DSO_CFLAGS = -fPIC
++else
++DSO_CFLAGS = -fpic
++endif
+ DSO_LDOPTS = -shared -Wl,-soname -Wl,$(notdir $@)
+
+ #
+@@ -60,20 +66,18 @@
+ USE_PTHREADS = 1
+ DEFINES += -D_THREAD_SAFE -D_REENTRANT
+ OS_LIBS += -pthread
+-DSO_LDOPTS += -pthread
++DSO_LDOPTS += $(BSD_LDOPTS)
+ endif
+
+ ARCH = freebsd
+
+-MOZ_OBJFORMAT := $(shell test -x /usr/bin/objformat && /usr/bin/objformat || echo aout)
++DLL_SUFFIX = so.1
+
+-ifeq ($(MOZ_OBJFORMAT),elf)
+-DLL_SUFFIX = so
++ifneq (,$(filter alpha ia64,$(OS_TEST)))
++MKSHLIB = $(CC) -Wl,-Bsymbolic -lc $(DSO_LDOPTS)
+ else
+-DLL_SUFFIX = so.1.0
++MKSHLIB = $(CC) -Wl,-Bsymbolic $(DSO_LDOPTS)
+ endif
+-
+-MKSHLIB = $(CC) $(DSO_LDOPTS)
+ ifdef MAPFILE
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+ endif
+@@ -83,3 +87,5 @@
+ G++INCLUDES = -I/usr/include/g++
+
+ INCLUDES += -I/usr/X11R6/include
++USE_SYSTEM_ZLIB = 1
++ZLIB_LIBS = -lz
diff --git a/security/nss/files/patch-..::coreconf::command.mk b/security/nss/files/patch-..::coreconf::command.mk
new file mode 100644
index 0000000..1e3de66
--- /dev/null
+++ b/security/nss/files/patch-..::coreconf::command.mk
@@ -0,0 +1,9 @@
+--- ../coreconf/command.mk Mon Oct 10 19:46:12 2005
++++ ../coreconf/command.mk Wed Jan 18 17:23:28 2006
+@@ -46,5 +46,5 @@
+ LINK_DLL = $(LINK) $(OS_DLLFLAGS) $(DLLFLAGS)
+ LINK_EXE = $(LINK) $(OS_LFLAGS) $(LFLAGS)
+-CFLAGS = $(OPTIMIZER) $(OS_CFLAGS) $(XP_DEFINE) $(DEFINES) $(INCLUDES) \
++CFLAGS += $(OPTIMIZER) $(OS_CFLAGS) $(XP_DEFINE) $(DEFINES) $(INCLUDES) \
+ $(XCFLAGS)
+ RANLIB = echo
diff --git a/security/nss/files/patch-..::coreconf::rules.mk b/security/nss/files/patch-..::coreconf::rules.mk
new file mode 100644
index 0000000..707f69d
--- /dev/null
+++ b/security/nss/files/patch-..::coreconf::rules.mk
@@ -0,0 +1,10 @@
+--- ../coreconf/rules.mk.orig Sat Jan 6 00:48:54 2007
++++ ../coreconf/rules.mk Fri Mar 23 10:15:46 2007
+@@ -114,6 +114,7 @@
+ endif
+ ifdef SHARED_LIBRARY
+ $(INSTALL) -m 775 $(SHARED_LIBRARY) $(SOURCE_LIB_DIR)
++ ln -sf $(notdir $(SHARED_LIBRARY)) $(SOURCE_LIB_DIR)/$(notdir $(SHARED_LIBRARY:.so.1=.so))
+ ifdef MOZ_DEBUG_SYMBOLS
+ ifeq (,$(filter-out _WIN%,$(NS_USE_GCC)_$(OS_TARGET)))
+ $(INSTALL) -m 644 $(SHARED_LIBRARY:$(DLL_SUFFIX)=pdb) $(SOURCE_LIB_DIR)
diff --git a/security/nss/files/patch-Makefile b/security/nss/files/patch-Makefile
new file mode 100644
index 0000000..af20e9a
--- /dev/null
+++ b/security/nss/files/patch-Makefile
@@ -0,0 +1,11 @@
+--- Makefile.orig Thu Apr 14 20:28:40 2005
++++ Makefile Tue Aug 30 15:32:11 2005
+@@ -78,7 +78,7 @@
+ # (7) Execute "local" rules. (OPTIONAL). #
+ #######################################################################
+
+-nss_build_all: build_coreconf build_nspr build_dbm all
++nss_build_all: build_coreconf all
+
+ build_coreconf:
+ cd $(CORE_DEPTH)/coreconf ; $(MAKE)
diff --git a/security/nss/files/patch-cmd::platlibs.mk b/security/nss/files/patch-cmd::platlibs.mk
new file mode 100644
index 0000000..4ac01e3
--- /dev/null
+++ b/security/nss/files/patch-cmd::platlibs.mk
@@ -0,0 +1,14 @@
+--- cmd/platlibs.mk Wed Apr 6 17:35:41 2005
++++ cmd/platlibs.mk Wed Jul 27 22:22:59 2005
+@@ -72,5 +72,4 @@
+ $(DIST)/lib/$(LIB_PREFIX)nssdev.$(LIB_SUFFIX) \
+ $(DIST)/lib/$(LIB_PREFIX)nssb.$(LIB_SUFFIX) \
+- $(DIST)/lib/$(LIB_PREFIX)dbm.$(LIB_SUFFIX) \
+ $(DIST)/lib/$(NSPR31_LIB_PREFIX)plc4.$(LIB_SUFFIX) \
+ $(DIST)/lib/$(NSPR31_LIB_PREFIX)plds4.$(LIB_SUFFIX) \
+@@ -120,5 +118,4 @@
+ $(CRYPTOLIB) \
+ $(DIST)/lib/$(LIB_PREFIX)secutil.$(LIB_SUFFIX) \
+- $(DIST)/lib/$(LIB_PREFIX)dbm.$(LIB_SUFFIX) \
+ $(NULL)
+
diff --git a/security/nss/files/patch-const b/security/nss/files/patch-const
new file mode 100644
index 0000000..de5fae9
--- /dev/null
+++ b/security/nss/files/patch-const
@@ -0,0 +1,46 @@
+--- cmd/modutil/modutil.h Sun Apr 25 11:02:47 2004
++++ cmd/modutil/modutil.h Fri Jul 22 17:35:20 2005
+@@ -53,6 +53,6 @@
+ #include "error.h"
+
+-Error FipsMode(char *arg);
+-Error ChkFipsMode(char *arg);
++Error FipsMode(const char *arg);
++Error ChkFipsMode(const char *arg);
+ Error AddModule(char *moduleName, char *libFile, char *ciphers,
+ char *mechanisms, char* modparms);
+--- cmd/modutil/pk11.c Sun Apr 25 11:02:47 2004
++++ cmd/modutil/pk11.c Fri Jul 22 17:36:48 2005
+@@ -53,5 +53,5 @@
+ */
+ Error
+-FipsMode(char *arg)
++FipsMode(const char *arg)
+ {
+ char *internal_name;
+@@ -62,14 +62,16 @@
+ SECMOD_GetInternalModule()->commonName);
+ if(SECMOD_DeleteInternalModule(internal_name) != SECSuccess) {
+- PR_fprintf(PR_STDERR, "%s\n", SECU_Strerror(PORT_GetError()));
++ PR_fprintf(PR_STDERR, "FipsMode(true): %s (%s)\n", SECU_Strerror(PORT_GetError()), internal_name);
+ PR_smprintf_free(internal_name);
+ PR_fprintf(PR_STDERR, errStrings[FIPS_SWITCH_FAILED_ERR]);
+ return FIPS_SWITCH_FAILED_ERR;
+ }
+- PR_smprintf_free(internal_name);
+ if (!PK11_IsFIPS()) {
++ PR_fprintf(PR_STDERR, "FipsMode(true): in module %s", internal_name);
++ PR_smprintf_free(internal_name);
+ PR_fprintf(PR_STDERR, errStrings[FIPS_SWITCH_FAILED_ERR]);
+ return FIPS_SWITCH_FAILED_ERR;
+ }
++ PR_smprintf_free(internal_name);
+ PR_fprintf(PR_STDOUT, msgStrings[FIPS_ENABLED_MSG]);
+ } else {
+@@ -112,5 +114,5 @@
+ */
+ Error
+-ChkFipsMode(char *arg)
++ChkFipsMode(const char *arg)
+ {
+ if(!PORT_Strcasecmp(arg, "true")) {
diff --git a/security/nss/files/patch-sysdb b/security/nss/files/patch-sysdb
new file mode 100644
index 0000000..7cab2a3
--- /dev/null
+++ b/security/nss/files/patch-sysdb
@@ -0,0 +1,175 @@
+--- lib/softoken/legacydb/cdbhdl.h Sun Apr 25 11:03:16 2004
++++ lib/softoken/legacydb/cdbhdl.h Fri Jul 22 00:25:16 2005
+@@ -43,6 +43,6 @@
+ #define _CDBHDL_H_
+
+-#include "nspr.h"
+-#include "mcom_db.h"
++#include <nspr.h>
++#include <db.h>
+ #include "pcertt.h"
+ --- lib/softoken/legacydb/dbmshim.c Tue Mar 29 13:21:18 2005
++++ lib/softoken/legacydb/dbmshim.c Fri Jul 22 00:35:33 2005
+@@ -40,5 +40,6 @@
+ * $Id: patch-sysdb,v 1.1 2007-09-19 23:49:33 ahze Exp $
+ */
+-#include "mcom_db.h"
++#include <db.h>
++#include <fcntl.h>
+ #include "secitem.h"
+ #include "secder.h"
+--- lib/softoken/legacydb/keydb.c Fri Jun 4 20:50:32 2004
++++ lib/softoken/legacydb/keydb.c Fri Jul 22 00:37:01 2005
+@@ -46,5 +46,6 @@
+ #include "secitem.h"
+ #include "pcert.h"
+-#include "mcom_db.h"
++#include <db.h>
++#include <fcntl.h>
+ #include "lowpbe.h"
+ #include "secerr.h"
+--- lib/softoken/legacydb/pcertdb.c Tue Mar 29 13:21:18 2005
++++ lib/softoken/legacydb/pcertdb.c Fri Jul 22 00:40:00 2005
+@@ -44,5 +44,6 @@
+ #include "lowkeyti.h"
+ #include "pcert.h"
+-#include "mcom_db.h"
++#include <db.h>
++#include <fcntl.h>
+ #include "pcert.h"
+ #include "secitem.h"
+--- lib/softoken/legacydb/pk11db.c Fri Apr 1 19:46:13 2005
++++ lib/softoken/legacydb/pk11db.c Fri Jul 22 00:42:01 2005
+@@ -42,5 +42,6 @@
+ #include "pk11pars.h"
+ #include "pkcs11i.h"
+-#include "mcom_db.h"
++#include <db.h>
++#include <fcntl.h>
+ #include "cdbhdl.h"
+ #include "secerr.h"
+--- lib/softoken/legacydb/keydbi.h Tue Apr 27 19:04:38 2004
++++ lib/softoken/legacydb/keydbi.h Fri Jul 22 00:43:24 2005
+@@ -42,7 +42,7 @@
+ #define _KEYDBI_H_
+
+-#include "nspr.h"
++#include <nspr.h>
+ #include "seccomon.h"
+-#include "mcom_db.h"
++#include <db.h>
+
+ /*
+--- lib/softoken/legacydb/config.mk Mon May 24 20:13:11 2004
++++ lib/softoken/legacydb/config.mk Fri Jul 22 00:55:20 2005
+@@ -47,5 +47,4 @@
+ $(CRYPTOLIB) \
+ $(DIST)/lib/$(LIB_PREFIX)secutil.$(LIB_SUFFIX) \
+- $(DIST)/lib/$(LIB_PREFIX)dbm.$(LIB_SUFFIX) \
+ $(NULL)
+
+--- lib/certdb/certdb.c Sat Mar 5 03:03:03 2005
++++ lib/certdb/certdb.c Fri Jul 22 01:02:11 2005
+@@ -53,5 +53,4 @@
+ #include "keyhi.h"
+ #include "secitem.h"
+-#include "mcom_db.h"
+ #include "certdb.h"
+ #include "prprf.h"
+--- lib/certdb/genname.c Sun Apr 25 11:03:03 2004
++++ lib/certdb/genname.c Fri Jul 22 01:02:59 2005
+@@ -39,5 +39,4 @@
+ #include "secitem.h"
+ #include "secoidt.h"
+-#include "mcom_db.h"
+ #include "secasn1.h"
+ #include "secder.h"
+--- lib/certdb/stanpcertdb.c Thu Dec 2 16:34:15 2004
++++ lib/certdb/stanpcertdb.c Fri Jul 22 01:03:19 2005
+@@ -38,5 +38,4 @@
+
+ #include "cert.h"
+-#include "mcom_db.h"
+ #include "certdb.h"
+ #include "secitem.h"
+--- lib/certdb/xauthkid.c Sun Apr 25 11:03:03 2004
++++ lib/certdb/xauthkid.c Fri Jul 22 01:03:54 2005
+@@ -40,6 +40,5 @@
+ */
+
+-#include "prtypes.h"
+-#include "mcom_db.h"
++#include <prtypes.h>
+ #include "seccomon.h"
+ #include "secdert.h"
+--- lib/certdb/xbsconst.c Sun Apr 25 11:03:03 2004
++++ lib/certdb/xbsconst.c Fri Jul 22 01:05:41 2005
+@@ -39,6 +39,6 @@
+ */
+
+-#include "prtypes.h"
+-#include "mcom_db.h"
++#include <limits.h> /* LONG_MAX */
++#include <prtypes.h>
+ #include "seccomon.h"
+ #include "secdert.h"
+@@ -48,5 +48,5 @@
+ #include "certt.h"
+ #include "secder.h"
+-#include "prprf.h"
++#include <prprf.h>
+ #include "secerr.h"
+
+--- lib/certdb/xconst.c Tue Nov 9 01:13:32 2004
++++ lib/certdb/xconst.c Fri Jul 22 01:06:20 2005
+@@ -39,6 +39,5 @@
+ */
+
+-#include "prtypes.h"
+-#include "mcom_db.h"
++#include <prtypes.h>
+ #include "seccomon.h"
+ #include "secdert.h"
+@@ -48,5 +47,5 @@
+ #include "cert.h"
+ #include "secder.h"
+-#include "prprf.h"
++#include <prprf.h>
+ #include "xconst.h"
+ #include "genname.h"
+--- lib/ckfw/dbm/ckdbm.h Wed Jan 19 21:25:47 2005
++++ lib/ckfw/dbm/ckdbm.h Fri Jul 22 01:06:58 2005
+@@ -57,5 +57,5 @@
+ #endif /* CKT_H */
+
+-#include "mcom_db.h"
++#include <db.h>
+
+ NSS_EXTERN_DATA NSSCKMDInstance nss_dbm_mdInstance;
+--- lib/freebl/mac_rand.c Sun Apr 25 11:03:08 2004
++++ lib/freebl/mac_rand.c Fri Jul 22 01:08:19 2005
+@@ -40,5 +40,4 @@
+ #endif
+ #include "secrng.h"
+-#include "mcom_db.h"
+ #ifdef XP_MAC
+ #include <Events.h>
+--- lib/pk11wrap/secmodi.h Mon Mar 28 15:45:37 2005
++++ lib/pk11wrap/secmodi.h Fri Jul 22 01:08:47 2005
+@@ -42,5 +42,5 @@
+ #include "pkcs11.h"
+ #include "nssilock.h"
+-#include "mcom_db.h"
++#include <db.h>
+ #include "secoidt.h"
+ #include "secdert.h"
+--- lib/softoken/legacydb/lginit.c.orig 2007-09-05 06:52:46.000000000 -0400
++++ lib/softoken/legacydb/lginit.c 2007-09-05 06:53:06.000000000 -0400
+@@ -38,6 +38,7 @@
+ * ***** END LICENSE BLOCK ***** */
+ /* $Id: patch-sysdb,v 1.1 2007-09-19 23:49:33 ahze Exp $ */
+
++#include <fcntl.h>
+ #include "lowkeyi.h"
+ #include "pcert.h"
+ #include "keydbi.h"
diff --git a/security/nss/files/patch-tests b/security/nss/files/patch-tests
new file mode 100644
index 0000000..2ff07f3
--- /dev/null
+++ b/security/nss/files/patch-tests
@@ -0,0 +1,10 @@
+--- tests/common/init.sh Mon Apr 11 22:24:17 2005
++++ tests/common/init.sh Fri Jul 22 16:55:36 2005
+@@ -197,5 +197,6 @@
+ case $HOST in
+ *\.*)
+- HOST=`echo $HOST | sed -e "s/\..*//"`
++ DOMSUF=${HOST#*.} # remove Smallest Prefix matching ``*.''
++ HOST=${HOST%%.*} # remove Largest Suffix ``.*''. See sh(1)
+ ;;
+ ?*)
diff --git a/security/nss/pkg-descr b/security/nss/pkg-descr
new file mode 100644
index 0000000..4d06c9a
--- /dev/null
+++ b/security/nss/pkg-descr
@@ -0,0 +1,7 @@
+Network Security Services (NSS) is a set of libraries designed to support
+cross-platform development of security-enabled server applications.
+Applications built with NSS can support SSL v2 and v3, TLS, PKCS #5, PKCS #7,
+PKCS #11, PKCS #12, S/MIME, X.509 v3 certificates, and other security
+standards.
+
+WWW: http://www.mozilla.org/projects/security/pki/nss/
diff --git a/security/nss/pkg-plist b/security/nss/pkg-plist
new file mode 100644
index 0000000..e90a557
--- /dev/null
+++ b/security/nss/pkg-plist
@@ -0,0 +1,153 @@
+bin/certcgi
+bin/certutil
+bin/checkcert
+bin/cmsutil
+bin/crlutil
+bin/derdump
+bin/makepqg
+bin/mangle
+bin/modutil
+bin/nss-config
+bin/ocspclnt
+bin/oidcalc
+bin/p7content
+bin/p7env
+bin/p7sign
+bin/p7verify
+bin/pk12util
+bin/rsaperf
+bin/shlibsign
+bin/signtool
+bin/signver
+bin/ssltap
+bin/strsclnt
+bin/symkeyutil
+bin/vfychain
+bin/vfyserv
+include/nss/nss/base64.h
+include/nss/nss/blapit.h
+include/nss/nss/cert.h
+include/nss/nss/certdb.h
+include/nss/nss/certt.h
+include/nss/nss/ciferfam.h
+include/nss/nss/cmmf.h
+include/nss/nss/cmmft.h
+include/nss/nss/cms.h
+include/nss/nss/cmsreclist.h
+include/nss/nss/cmst.h
+include/nss/nss/crmf.h
+include/nss/nss/crmft.h
+include/nss/nss/cryptohi.h
+include/nss/nss/cryptoht.h
+include/nss/nss/ecl-exp.h
+include/nss/nss/hasht.h
+include/nss/nss/jar-ds.h
+include/nss/nss/jar.h
+include/nss/nss/jarfile.h
+include/nss/nss/key.h
+include/nss/nss/keyhi.h
+include/nss/nss/keyt.h
+include/nss/nss/keythi.h
+include/nss/nss/nss.h
+include/nss/nss/nssb64.h
+include/nss/nss/nssb64t.h
+include/nss/nss/nssbase.h
+include/nss/nss/nssbaset.h
+include/nss/nss/nssck.api
+include/nss/nss/nssckbi.h
+include/nss/nss/nssckepv.h
+include/nss/nss/nssckft.h
+include/nss/nss/nssckfw.h
+include/nss/nss/nssckfwc.h
+include/nss/nss/nssckfwt.h
+include/nss/nss/nssckg.h
+include/nss/nss/nssckmdt.h
+include/nss/nss/nssckt.h
+include/nss/nss/nssilckt.h
+include/nss/nss/nssilock.h
+include/nss/nss/nsslocks.h
+include/nss/nss/nssrwlk.h
+include/nss/nss/nssrwlkt.h
+include/nss/nss/ocsp.h
+include/nss/nss/ocspt.h
+include/nss/nss/p12.h
+include/nss/nss/p12plcy.h
+include/nss/nss/p12t.h
+include/nss/nss/pk11func.h
+include/nss/nss/pk11pqg.h
+include/nss/nss/pk11priv.h
+include/nss/nss/pk11pub.h
+include/nss/nss/pk11sdr.h
+include/nss/nss/pkcs11.h
+include/nss/nss/pkcs11f.h
+include/nss/nss/pkcs11n.h
+include/nss/nss/pkcs11p.h
+include/nss/nss/pkcs11t.h
+include/nss/nss/pkcs11u.h
+include/nss/nss/pkcs12.h
+include/nss/nss/pkcs12t.h
+include/nss/nss/pkcs7t.h
+include/nss/nss/pkix.h
+include/nss/nss/pkix_certsel.h
+include/nss/nss/pkix_certselector.h
+include/nss/nss/pkix_certstore.h
+include/nss/nss/pkix_checker.h
+include/nss/nss/pkix_comcertselparams.h
+include/nss/nss/pkix_crlsel.h
+include/nss/nss/pkix_errorstrings.h
+include/nss/nss/pkix_params.h
+include/nss/nss/pkix_pl_pki.h
+include/nss/nss/pkix_pl_system.h
+include/nss/nss/pkix_results.h
+include/nss/nss/pkix_revchecker.h
+include/nss/nss/pkix_sample_modules.h
+include/nss/nss/pkix_util.h
+include/nss/nss/pkixt.h
+include/nss/nss/portreg.h
+include/nss/nss/preenc.h
+include/nss/nss/sdb.h
+include/nss/nss/secasn1.h
+include/nss/nss/secasn1t.h
+include/nss/nss/seccomon.h
+include/nss/nss/secder.h
+include/nss/nss/secdert.h
+include/nss/nss/secdig.h
+include/nss/nss/secdigt.h
+include/nss/nss/secerr.h
+include/nss/nss/sechash.h
+include/nss/nss/secitem.h
+include/nss/nss/secmime.h
+include/nss/nss/secmod.h
+include/nss/nss/secmodt.h
+include/nss/nss/secoid.h
+include/nss/nss/secoidt.h
+include/nss/nss/secpkcs5.h
+include/nss/nss/secpkcs7.h
+include/nss/nss/secport.h
+include/nss/nss/sftkdbt.h
+include/nss/nss/shsign.h
+include/nss/nss/smime.h
+include/nss/nss/ssl.h
+include/nss/nss/sslerr.h
+include/nss/nss/sslproto.h
+include/nss/nss/sslt.h
+include/nss/nss/watcomfx.h
+lib/nss/libcrmf.a
+lib/nss/libfreebl3.so
+lib/nss/libfreebl3.so.1
+lib/nss/libnss3.so
+lib/nss/libnss3.so.1
+lib/nss/libnssckbi.so
+lib/nss/libnssckbi.so.1
+lib/nss/libnssdbm3.so
+lib/nss/libnssdbm3.so.1
+lib/nss/libsmime3.so
+lib/nss/libsmime3.so.1
+lib/nss/libsoftokn3.so
+lib/nss/libsoftokn3.so.1
+lib/nss/libssl3.so
+lib/nss/libssl3.so.1
+libdata/pkgconfig/nss.pc
+@dirrm lib/nss
+@dirrm include/nss/nss
+@dirrm include/nss
diff --git a/www/firefox-devel/Makefile b/www/firefox-devel/Makefile
new file mode 100644
index 0000000..3b39ea3
--- /dev/null
+++ b/www/firefox-devel/Makefile
@@ -0,0 +1,101 @@
+# New ports collection makefile for: phoenix
+# Date created: 2002/10/21
+# Whom: Alan Eldridge <alane@FreeBSD.org>
+#
+# $FreeBSD$
+# $MCom$
+
+PORTNAME= firefox
+DISTVERSION= 3.0.a7
+PORTEPOCH= 1
+CATEGORIES= www ipv6
+MASTER_SITES= ${MASTER_SITE_MOZILLA}
+MASTER_SITE_SUBDIR= ${PORTNAME}/releases/granparadiso/alpha7/source/
+#MASTER_SITE_SUBDIR= ${PORTNAME}/releases/${DISTVERSION}/source
+DISTNAME= granparadiso-alpha7-source
+#DISTNAME= ${PORTNAME}-${DISTVERSION}-source
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= Web browser based on the browser portion of Mozilla
+
+MOZILLA_NAME= Firefox-${MOZILLA_SUFX}
+MOZILLA_SUFX= -devel
+MOZILLA= ${PORTNAME}${MOZILLA_SUFX}
+MOZ_OPTIONS= --program-transform-name='s/firefox/${MOZILLA}/' \
+ --enable-svg --enable-svg-renderer=cairo
+MOZ_TOOLKIT= cairo-gtk2
+
+WANT_GNOME= yes
+ALL_TARGET= default
+CONFIGURE_ENV= LOCALBASE=${LOCALBASE}
+EXTRA_CFLAGS= -O2
+HAS_CONFIGURE= yes
+USE_BZIP2= yes
+USE_GMAKE= yes
+NO_MOZPKGINSTALL=yes
+
+FIREFOX_ICON= ${MOZILLA}.xpm
+FIREFOX_ICON_SRC= ${PREFIX}/lib/firefox-devel/chrome/icons/default/default.xpm
+MOZ_PKGCONFIG_FILES= ${MOZILLA}-js ${MOZILLA}-xpcom ${MOZILLA}-plugin
+MOZ_OPTIONS= --enable-application=browser \
+ --enable-system-cairo \
+ --enable-official-branding \
+ --enable-canvas \
+ --with-system-nss
+
+SYSTEM_PREFS= ${FAKEDIR}/lib/${MOZILLA}/defaults/pref/firefox.js
+
+OPTIONS= NEWTAB "Open external links in a new tab" on \
+ SMB "Enable smb:// URI support using gnomevfs" off
+
+.include <bsd.port.pre.mk>
+
+GECKO_PTHREAD_LIBS!=${CC} -dumpspecs | ${GREP} -m 1 pthread | ${SED} -e 's|^.*%{\!pg: %{pthread:|| ; s|}.*$$||' || ${TRUE}
+
+post-extract::
+ @${SED} -e 's|@FIREFOX_ICON@|${FIREFOX_ICON}|' -e 's|@MOZILLA@|${MOZILLA}|' \
+ -e 's|@MOZILLA_NAME@|${MOZILLA_NAME}|' \
+ <${FILESDIR}/firefox.desktop.in >${WRKDIR}/${MOZILLA}.desktop
+
+post-patch:
+ ${REINPLACE_CMD} -e 's|%%PTHREAD_LIBS%%|${PTHREAD_LIBS:C/-pthread/${GECKO_PTHREAD_LIBS}/}|' \
+ ${WRKSRC}/storage/build/Makefile.in
+ @${REINPLACE_CMD} -e 's|%%LOCALBASE%%|${LOCALBASE}|' \
+ ${WRKSRC}/security/manager/ssl/src/Makefile.in
+.for ii in modules/libpref/src/init extensions/sroaming/resources/content/prefs
+ @${REINPLACE_CMD} -e '/accessibility.typeaheadfind.enablesound/s/true/false/ ; \
+ /dom.disable_window_open_feature.toolbar/s/false/true/' \
+ ${WRKSRC}/${ii}/all.js
+.endfor
+
+port-pre-install:
+ ${SED} -e 's|1.9a7|0|' ${WRKSRC}/dist/bin/application.ini ${FAKEDIR}/lib
+ ${ECHO_CMD} 'share/applications/${MOZILLA}.desktop' >> ${PLIST}
+ ${ECHO_CMD} "@unexec ${RMDIR} %D/share/applications 2>/dev/null || ${TRUE}" >> ${PLIST}
+ ${ECHO_CMD} 'share/pixmaps/${FIREFOX_ICON}' >> ${PLIST}
+.if !defined(WITHOUT_NEWTAB)
+ ${ECHO_CMD} >> ${SYSTEM_PREFS}
+ ${ECHO_CMD} "// Open external links in new tab" >> ${SYSTEM_PREFS}
+ ${ECHO_CMD} "pref(\"browser.link.open_external\", 3);" \
+ >> ${SYSTEM_PREFS}
+.endif # !defined(WITHOUT_NEWTAB)
+
+do-install:
+ if [ ! -L ${PREFIX}/lib/browser_plugins/libjavaplugin_oji.so ]; then \
+ for jpi in ${JPI_LIST}; do \
+ if [ -f $${jpi} ]; then \
+ ${LN} -sf $${jpi} \
+ ${PREFIX}/lib/browser_plugins/libjavaplugin_oji.so ; \
+ break; \
+ fi; \
+ done; \
+ fi
+
+post-install:
+ ${MKDIR} ${PREFIX}/share/applications ${PREFIX}/share/pixmaps
+ ${INSTALL_DATA} ${WRKDIR}/${MOZILLA}.desktop ${PREFIX}/share/applications/
+ ${MKDIR} ${PREFIX}/lib/${MOZILLA}/chrome/icons/default
+ ${LN} -sf ${FIREFOX_ICON_SRC} ${PREFIX}/share/pixmaps/${FIREFOX_ICON}
+
+.include "${PORTSDIR}/www/mozilla/Makefile.common"
+.include <bsd.port.post.mk>
diff --git a/www/firefox-devel/distinfo b/www/firefox-devel/distinfo
new file mode 100644
index 0000000..1340a04
--- /dev/null
+++ b/www/firefox-devel/distinfo
@@ -0,0 +1,3 @@
+MD5 (granparadiso-alpha7-source.tar.bz2) = cd692127775b55f5e64685ef49788c1c
+SHA256 (granparadiso-alpha7-source.tar.bz2) = 91369eff2bba6b0ef3a9b5a40a1585b27f66a670f1a96299852f2595bd96f209
+SIZE (granparadiso-alpha7-source.tar.bz2) = 35319889
diff --git a/www/firefox-devel/files/firefox.desktop.in b/www/firefox-devel/files/firefox.desktop.in
new file mode 100644
index 0000000..d72090e
--- /dev/null
+++ b/www/firefox-devel/files/firefox.desktop.in
@@ -0,0 +1,191 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=@MOZILLA_NAME@ Web Browser
+Name[am]=
+Name[ar]=
+Name[az]=@MOZILLA_NAME@ Veb Səyyahı
+Name[be]=
+Name[bg]=Интернет браузър @MOZILLA_NAME@
+Name[bn]=
+Name[bs]=@MOZILLA_NAME@ web preglednik
+Name[ca]=Navegador web @MOZILLA_NAME@
+Name[cs]=ProhlížeÄ WWW @MOZILLA_NAME@
+Name[cy]=Y Porwr Gwe @MOZILLA_NAME@
+Name[da]=@MOZILLA_NAME@ - internetsurfning
+Name[de]=@MOZILLA_NAME@ Webbrowser
+Name[el]=ΠεÏιηγητής ΔιαδικτÏου @MOZILLA_NAME@
+Name[en_CA]=@MOZILLA_NAME@ Web Browser
+Name[en_GB]=@MOZILLA_NAME@ Web Browser
+Name[es]=Navegador Web @MOZILLA_NAME@
+Name[et]=@MOZILLA_NAME@ veebibrauser
+Name[eu]=@MOZILLA_NAME@ web arakatzailea
+Name[fi]=@MOZILLA_NAME@, WWW-selain
+Name[fr]=Navigateur Web @MOZILLA_NAME@
+Name[ga]=Brabhsálaí Lín @MOZILLA_NAME@
+Name[gu]=àªàªªà«€àª«àª¨à«€ વૅબ બà«àª°àª¾àª‰àªàª°
+Name[he]=דפדפן @MOZILLA_NAME@
+Name[hi]=
+Name[hr]=@MOZILLA_NAME@ Web preglednik
+Name[hu]=@MOZILLA_NAME@ webböngésző
+Name[id]=Web Browser @MOZILLA_NAME@
+Name[it]=Browser web @MOZILLA_NAME@
+Name[ja]=@MOZILLA_NAME@ ウェブ・ブラウザ
+Name[ko]=@MOZILLA_NAME@ 웹 브ë¼ìš°ì €
+Name[li]=@MOZILLA_NAME@ Web Browser
+Name[lt]=@MOZILLA_NAME@ web naršyklė
+Name[mk]=@MOZILLA_NAME@ веб прелиÑтувач
+Name[ml]=à´Žà´ªàµà´ªà´¿à´«à´¾à´¨à´¿ വെബàµà´¬àµ à´¬àµà´°àµŒà´¸â€Œà´°àµ
+Name[mn]=@MOZILLA_NAME@ веб хөтөч
+Name[ms]=Pelungsur Web @MOZILLA_NAME@
+Name[nb]=@MOZILLA_NAME@ nettleser
+Name[nl]=@MOZILLA_NAME@ Webbrowser
+Name[nn]=@MOZILLA_NAME@ nettlesar
+Name[no]=@MOZILLA_NAME@ nettleser
+Name[pa]=à¨à¨ªà©€à¨«à¨¾à¨¨à©€ ਵੈੱਬ ਬਰਾਊਜ਼ਰ
+Name[pl]=PrzeglÄ…darka WWW @MOZILLA_NAME@
+Name[pt]=Navegador Web @MOZILLA_NAME@
+Name[pt_BR]=Navegador Web @MOZILLA_NAME@
+Name[ro]=Navigatorul @MOZILLA_NAME@
+Name[ru]=Веб-браузер @MOZILLA_NAME@
+Name[sk]=
+Name[sl]=Spletni brskalnik @MOZILLA_NAME@
+Name[sq]=@MOZILLA_NAME@ - Shfletuesi Web
+Name[sr]=
+Name[sr@Latn]=Veb ÄitaÄ Spoznaja
+Name[sv]=Webbläsaren @MOZILLA_NAME@
+Name[ta]=எபிபனி வலை உலாவி
+Name[tk]=@MOZILLA_NAME@ Web Ahtarçisi
+Name[tr]=@MOZILLA_NAME@ Web Tarayıcı
+Name[uk]=ПереглÑдач web @MOZILLA_NAME@
+Name[vi]=Trình Duyệt Web @MOZILLA_NAME@
+Name[wa]=Betchteu waibe epiphany
+Name[zh_CN]=@MOZILLA_NAME@ Web æµè§ˆå™¨
+Name[zh_TW]=@MOZILLA_NAME@ ç¶²é ç€è¦½å™¨
+GenericName=Web Browser
+GenericName[ar]=متصÙّح الانترنت
+GenericName[az]=Veb Səyyahı
+GenericName[be]=Вандроўнік па павуціньню
+GenericName[bg]=Браузър
+GenericName[bn]=ওয়েব বà§à¦°à¦¾à¦‰à¦œà¦¾à¦°
+GenericName[bs]=Web preglednik
+GenericName[ca]=Navegador web
+GenericName[cs]=ProhlížeÄ WWW
+GenericName[cy]=Porwr Gwe
+GenericName[da]=Internetsurfning
+GenericName[de]=Webbrowser
+GenericName[el]=ΠεÏιηγητής Ιστοσελίδων
+GenericName[en_CA]=Web Browser
+GenericName[en_GB]=Web Browser
+GenericName[es]=Navegador web
+GenericName[et]=Veebilehitseja
+GenericName[eu]=Web arakatzailea
+GenericName[fi]=WWW-selain
+GenericName[fr]=Navigateur Web @MOZILLA_NAME@
+GenericName[ga]=Brabhsálaí Lín
+GenericName[gu]=વેબ બà«àª°àª¾àª‰àªàª°
+GenericName[he]=דפדפן ×ינטרנט
+GenericName[hi]=वेब बà¥à¤°à¤¾à¤‰à¤œà¤¼à¤°
+GenericName[hr]=Web preglednik
+GenericName[hu]=Webböngésző
+GenericName[id]=Browser Web
+GenericName[it]=Browser web
+GenericName[ja]=GNOME ウェブ・ブラウザ
+GenericName[ko]=웹 브ë¼ìš°ì €
+GenericName[li]=Wèb Browser
+GenericName[lt]=Web naršyklė
+GenericName[mk]=Веб прелиÑтувач
+GenericName[mn]=Веб хөтөч
+GenericName[ms]=Pelungsur Web
+GenericName[nb]=Nettleser
+GenericName[nl]=Web-browser
+GenericName[nn]=Nettlesar
+GenericName[no]=Nettleser
+GenericName[pa]=ਵੈਬ ਬਰਾਊਜ਼
+GenericName[pl]=PrzeglÄ…darka WWW
+GenericName[pt]=Navegador Web
+GenericName[pt_BR]=Navegador Web
+GenericName[ro]=Navigator Internet
+GenericName[ru]=Веб-браузер
+GenericName[sk]=WWW prehliadaÄ
+GenericName[sl]=Spletni brskalnik
+GenericName[sq]=Shfletuesi Web
+GenericName[sr]=Веб читач
+GenericName[sr@Latn]=Veb ÄitaÄ
+GenericName[sv]=Webbläsare
+GenericName[ta]=வலை உலாவி
+GenericName[th]=เว็บบราวเซอร์
+GenericName[tk]=Web Ahtarçysy
+GenericName[tr]=Web Tarayıcı
+GenericName[uk]=ПереглÑдач web-Ñторінок
+GenericName[vi]=Trình duyệt Web
+GenericName[wa]=Betchteu waibe
+GenericName[zh_CN]=Web æµè§ˆå™¨
+GenericName[zh_TW]=ç¶²é ç€è¦½å™¨
+Comment=Browse the web
+Comment[ar]=ØªØµÙØ­ الانترنت
+Comment[az]=Vebi gəzin
+Comment[be]=Вандраваць па павуціньню
+Comment[bg]=Сърфиране в интернет
+Comment[bn]=ওয়েব বà§à¦°à¦¾à¦‰à¦œ করà§à¦¨
+Comment[bs]=Pregledaj na internetu
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížet WWW
+Comment[cy]=Pori'r we
+Comment[da]=Surf på internettet
+Comment[de]=Im Web surfen
+Comment[el]=ΠεÏιήγηση στον παγκόσμιο ιστό
+Comment[en_CA]=Browse the web
+Comment[en_GB]=Browse the web
+Comment[es]=Navegar por la web
+Comment[et]=Sirvi veebi
+Comment[eu]=Arakatu web-a
+Comment[fi]=Selaa WWW:tä
+Comment[fr]=Naviguer sur Internet
+Comment[ga]=Brabhsáil an Líon
+Comment[gu]=વેબમાં શોધો
+Comment[he]=גלוש ברשת
+Comment[hi]=वेब बà¥à¤°à¤¾à¤‰à¤œà¤¼ करें
+Comment[hr]=Pregledaj Web
+Comment[hu]=A világháló böngészése
+Comment[id]=Jelajah web
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧ã—ã¾ã™
+Comment[ko]=ì›¹ì„ ëŒì•„ 다닙니다
+Comment[li]=Blajere op internet
+Comment[lt]=Naršyti internete
+Comment[mk]=ПрелиÑтувајте на веб
+Comment[ml]=വലകàµà´•െടàµà´Ÿàµ തിരയàµà´•
+Comment[mn]=Веб броузе хийх
+Comment[ms]=Layari web
+Comment[nb]=Surf på nettet
+Comment[nl]=Websurfen
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pa]=ਵੈਬ ਬਰਾਊਜ਼
+Comment[pl]=PrzeglÄ…danie stron WWW
+Comment[pt]=Navegar na web
+Comment[pt_BR]=Navegar na web
+Comment[ro]=Navigare Internet
+Comment[ru]=Веб-браузер
+Comment[sk]=Prehliadať internet
+Comment[sl]=Brskaj po spletu
+Comment[sq]=Eksploro web-in
+Comment[sr]=Прегледај веб
+Comment[sr@Latn]=Pregledaj veb
+Comment[sv]=Surfa på nätet
+Comment[ta]=வலையில௠உலாவà¯
+Comment[th]=ใช้งานเว็บบราวเซอร์ @MOZILLA_NAME@
+Comment[tk]=Webi Ahtar
+Comment[tr]=Web'e Gözat
+Comment[uk]=Програма переглÑду web-Ñторінок
+Comment[vi]=Duyệt web
+Comment[wa]=Naivyî avå les waibes
+Comment[zh_CN]=æµè§ˆ Web
+Comment[zh_TW]=ç€è¦½ç¶²é 
+Exec=@MOZILLA@ %u
+Icon=@FIREFOX_ICON@
+StartupNotify=false
+Terminal=false
+Type=Application
+Categories=Application;Network;
+MimeType=text/html;text/xml;application/xhtml+xml;application/vnd.mozilla.xul+xml;text/mml;
diff --git a/www/firefox-devel/files/patch-bugzilla296818 b/www/firefox-devel/files/patch-bugzilla296818
new file mode 100644
index 0000000..a7f22b4
--- /dev/null
+++ b/www/firefox-devel/files/patch-bugzilla296818
@@ -0,0 +1,1621 @@
+diff --git ChangeLog ChangeLog
+new file mode 100644
+index 0000000..c9c7dce
+--- /dev/null
++++ ChangeLog
+@@ -0,0 +1,277 @@
++2007-09-06 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Write the restore data regardless of
++ the state we are in, right when we first fill the buffer.
++
++2007-09-06 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::RestoreDataDone): Print the first four bytes of the
++ restore data, to check it later.
++ (imgContainer::ReloadImages): Likewise.
++
++2007-09-06 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (info_callback):
++ Reuse the image container if the loader has one; don't always
++ create a new one. This lets containers reload themselves.
++
++2007-09-06 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::AppendFrame): Unconditionally increment mNumFrames!
++ (imgContainer::RestoreDiscardedData): Check the number of restored
++ frames here.
++ (imgContainer::ReloadImages): Flush and close the decoder.
++ (imgContainer::RestoreDataDone): No-op if we are already restoring
++ the data.
++
++2007-09-06 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (*): Print the
++ imgContainer pointers when logging.
++
++ * modules/libpr0n/src/imgContainer.cpp (*): Likewise.
++
++2007-09-04 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::ReloadImages): Oops, use an nsCOMPtr<> for the
++ ContainerLoader, not a direct pointer.
++ (ContainerLoader NS_IMPL_ISUPPORTS3): Oops, we also implement
++ imgIContainerObserver.
++ (class ContainerLoader): Implement nsISupportsWeakReference as
++ well; imgContainer needs it from the observer.
++ (imgContainer::RestoreDiscardedData): Log how many frames we got
++ and how many we expected.
++ (imgContainer::ReloadImages): Assert that we got the right number
++ of frames.
++ (imgContainer::GetCurrentFrameNoRef): Log failures from
++ RestoreDiscardedData().
++
++ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (end_callback):
++ Don't tell the container that the restore data is done here...
++ (nsPNGDecoder::Close): ... but do it here instead. This is
++ because end_callback() gets called from within ReadDataOut(); we
++ don't want end_callback() to inform the container that the restore
++ data is done before actually writing the restore data to it!
++
++2007-09-04 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/decoders/png/nsPNGDecoder.cpp (info_callback):
++ Set the image container as discardable.
++ (ReadDataOut): Store the compressed data in the image container to
++ restore from it later.
++ (end_callback): Tell the image container that we finished feeding
++ it the restore data.
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::SetDiscardable): Log the MIME type of the
++ discardable container.
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Clean up a printf format, and do the
++ logging only on success.
++
++ * gfx/thebes/public/gfxXlibSurface.h: Add myself to the contributors.
++ * modules/libpr0n/public/imgIContainer.idl: Likewise.
++ * modules/libpr0n/src/imgContainer.cpp: Likewise.
++ * modules/libpr0n/src/imgContainer.h: Likewise.
++
++2007-09-03 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::AddRestoreData): No-op if we are being called
++ during the restore process (we already have the data; there is no
++ need to save it again).
++ (class ContainerLoader): Put the macro to implement QI for
++ imgILoad and imgIDecoderObserver.
++ (imgContainer::AppendFrame): Don't increment mNumFrames if we are
++ restoring the image data. Fix the use of the frame counters.
++ (imgContainer::sDiscardTimerCallback): Implement.
++ (imgContainer::GetCurrentFrame): Oops, preserve the semantics of
++ the original function --- if the actual getter gives us a null
++ frame, return NS_ERROR_FAILURE.
++
++2007-08-31 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.h (class imgContainer): New
++ prototype for a ReloadImages() method.
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::RestoreDiscardedData): Call ReloadImages().
++ (imgContainer::ReloadImages): Implement.
++ (class ContainerLoader): New helper class that implements
++ imgILoader and imgIDecoderObserver. We'll use this to re-load the
++ imgContainer from an image decoder.
++
++2007-08-31 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::RestoreDiscardedData): Reset the timer; if we got
++ here it means that the data may be used again soon.
++
++2007-08-30 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add an
++ mDiscarded field. We'll use it to know if the uncompressed image
++ data has been discarded already and needs to be regenerated on
++ demand.
++ (class imgContainer): New prototype for a RestoreDiscardedData() method.
++
++ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize
++ mDiscarded.
++ (imgContainer::GetCurrentFrameNoRef): Return an nsresult rather
++ than the image frame; return the actual image frame as a
++ reference. Ensure that the discarded data gets restored.
++ (imgContainer::GetCurrentFrame): Return the error from
++ GetCurrentFrameNoRef() if it fails.
++ (imgContainer::StartAnimation): Likewise.
++ (imgContainer::GetFrameAt): Ensure that the discarded data gets restored.
++ (imgContainer::ResetAnimation): Likewise.
++ (imgContainer::Notify): Likewise.
++ (imgContainer::RestoreDiscardedData): Just a stub for now.
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Oops, use "count" for the restore
++ data, not "mBufferLen".
++
++2007-08-29 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add a
++ mNumFrames field. Since we'll discard the contents of mFrames, we
++ can't rely on mFrames.Count() for the frame count.
++
++ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize mNumFrames.
++ (imgContainer::AppendFrame): Maintain the frame count in mNumFrames.
++ (imgContainer::GetNumFrames): Use mNumFrames instead of mFrames.Count().
++ (imgContainer::GetFrameAt): Likewise.
++ (imgContainer::DecodingComplete): Likewise.
++ (imgContainer::SetAnimationMode): Likewise.
++ (imgContainer::StartAnimation): Likewise.
++ (imgContainer::Notify): Likewise.
++
++2007-08-29 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.h
++ (imgContainer::inlinedGetCurrentFrame): Removed to make it not
++ inline.
++ (imgContainer::GetCurrentFrameNoRef): New prototype.
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (imgContainer::GetCurrentFrameNoRef): Implement this here.
++ (imgContainer::GetCurrentFrame, imgContainer::StartAnimation): Use
++ GetCurrentFrameNoRef() instead of inlinedGetCurrentFrame().
++
++2007-08-28 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/public/imgIContainer.idl (restoreDataDone): New
++ method. We'll use this to tell the container when we finish
++ feeding it the compressed data. After that, it can begin its
++ discard process whenever it wants.
++
++ * modules/libpr0n/src/imgContainer.h (class imgContainer): Add
++ mRestoreDataDone and mDiscardTimer fields.
++
++ * modules/libpr0n/src/imgContainer.cpp (imgContainer): Initialize
++ the new fields.
++ (imgContainer::RestoreDataDone): Implement. When turned on, we
++ start the discard timer.
++ (imgContainer::ResetDiscardTimer): New method.
++ (~imgContainer): Cancel and destroy the timer.
++ (imgContainer::sDiscardTimerCallback): New callback. Here we'll
++ discard the uncompressed image data in the image frames. For now
++ this is just a stub.
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Tell the imgContainer when we are done
++ feeding data to it.
++
++2007-08-28 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp (discarding_is_enabled):
++ Stub function, to be replaced with something better in the
++ future. This lets us disable image discarding by setting a
++ MOZ_DISABLE_IMAGE_DISCARD environment variable.
++ (imgContainer::SetDiscardable): Noop if discarding is disabled.
++ (imgContainer::AddRestoreData): Likewise.
++
++2007-08-28 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Mark the imgContainer as discardable
++ when we create it. And when writing to the JPEG decoder, add the
++ compressed data to the imgContainer so that it can restore itself
++ later.
++
++2007-08-28 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgContainer.cpp
++ (gCompressedImageAccountingLog): Create a
++ "CompressedImageAccounting" log domain.
++ (~imgContainer): Log the destruction of compressed data.
++ (imgContainer::AddRestoreData): Log the addition of compressed data.
++ (imgContainer::SetDiscardable): Log the creation of a compressed imgContainer.
++
++2007-08-28 Federico Mena Quintero <federico@novell.com>
++
++
++ * modules/libpr0n/src/imgContainer.cpp (~imgContainer): Free the
++ restore data and the MIME type.
++
++2007-08-22 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/public/imgIContainer.idl (setDiscardable): New
++ method. When this is called (can be called only once) from an
++ image decoder, the image container will discard its uncompressed
++ image data after a timeout.
++ (addRestoreData): New method. Image decoders should call this
++ repeatedly after calling setDiscardable(); this is used to feed
++ the original, compressed image data to the image container so that
++ it can uncompress it on demand after discarding it.
++
++ * modules/libpr0n/src/imgContainer.cpp (imgContainer::SetDiscardable):
++ Implement.
++ (imgContainer::AddRestoreData): Implement.
++
++2007-08-20 Federico Mena Quintero <federico@novell.com>
++
++ * gfx/thebes/src/gfxXlibSurface.cpp
++ (gfxXlibSurface::LogSurfaceCreation, surface_destroy_func): Count
++ the number of surfaces in addition to the number of pixels.
++
++2007-08-17 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/public/ImageLogging.h: Remove gImgAccountingLog
++ from here.
++
++ * modules/libpr0n/src/imgRequest.cpp: Likewise.
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (gJPEGDecodeAccountingLog): Create a "JPEGDecoderAccounting" log domain.
++ (nsJPEGDecoder::WriteFrom): Use that log domain.
++
++ * gfx/thebes/src/gfxXlibSurface.cpp (gXlibSurfaceAccountingLog):
++ Define a "XlibSurfaceAccounting" log domain.
++ (gfxXlibSurface::LogSurfaceCreation): New method to log when an
++ Xlib surface is created from a pixmap. Keeps a counter of how
++ many pixels are allocated globally.
++ (gfxXlibSurface::HookSurfaceDestructionForLogging): Utility method
++ to set user data on the cairo surface, so that we can know when it
++ is destroyed.
++ (gfxXlibSurface::gfxXlibSurface): Log the creation of the surface,
++ and hook it so that we can know when it is destroyed.
++
++2007-08-17 Federico Mena Quintero <federico@novell.com>
++
++ * modules/libpr0n/src/imgRequest.cpp (gImgAccountingLog): New
++ logging domain "imgAccounting". We'll use this to log when images
++ get allocated, freed, requested, etc.
++
++ * modules/libpr0n/public/ImageLogging.h (gImgAccountingLog):
++ Declare this.
++
++ * modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++ (nsJPEGDecoder::WriteFrom): Log the creation of an image frame.
++
+diff --git gfx/thebes/public/gfxXlibSurface.h gfx/thebes/public/gfxXlibSurface.h
+index 078dc73..ea7ba24 100644
+--- gfx/thebes/public/gfxXlibSurface.h
++++ gfx/thebes/public/gfxXlibSurface.h
+@@ -21,6 +21,7 @@
+ * Contributor(s):
+ * Stuart Parmenter <pavlov@pavlov.net>
+ * Vladimir Vukicevic <vladimir@pobox.com>
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -85,6 +86,9 @@ public:
+ // when the gfxXlibSurface is destroyed.
+ void TakePixmap();
+
++ void LogSurfaceCreation ();
++ void HookSurfaceDestructionForLogging ();
++
+ protected:
+ // if TakePixmap() was already called on this
+ PRBool mPixmapTaken;
+diff --git gfx/thebes/src/gfxXlibSurface.cpp gfx/thebes/src/gfxXlibSurface.cpp
+index dc2a19f..f9c191c 100644
+--- gfx/thebes/src/gfxXlibSurface.cpp
++++ gfx/thebes/src/gfxXlibSurface.cpp
+@@ -21,6 +21,7 @@
+ * Contributor(s):
+ * Stuart Parmenter <pavlov@pavlov.net>
+ * Vladimir Vukicevic <vladimir@pobox.com>
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -37,6 +38,7 @@
+ * ***** END LICENSE BLOCK ***** */
+
+ #include "gfxXlibSurface.h"
++#include "prlog.h"
+
+ #include "cairo.h"
+ #include "cairo-xlib.h"
+@@ -51,6 +53,18 @@ typedef struct {
+
+ static void pixmap_free_func (void *);
+
++
++#if defined(PR_LOGGING)
++static PRLogModuleInfo *gXlibSurfaceAccountingLog = PR_NewLogModule ("XlibSurfaceAccounting");
++#else
++#define gXlibSurfaceAccountingLog
++#endif
++
++static cairo_user_data_key_t surface_free_key;
++static int num_surfaces_allocated;
++static PRInt64 pixels_allocated;
++
++
+ #define XLIB_IMAGE_SIDE_SIZE_LIMIT 0xffff
+
+ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual)
+@@ -59,6 +73,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual)
+ DoSizeQuery();
+ cairo_surface_t *surf = cairo_xlib_surface_create(dpy, drawable, visual, mSize.width, mSize.height);
+ Init(surf);
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual, const gfxIntSize& size)
+@@ -69,6 +86,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, Visual *visual,
+
+ cairo_surface_t *surf = cairo_xlib_surface_create(dpy, drawable, visual, mSize.width, mSize.height);
+ Init(surf);
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::gfxXlibSurface(Display *dpy, Visual *visual, const gfxIntSize& size)
+@@ -87,6 +107,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Visual *visual, const gfxIntSize& s
+
+ Init(surf);
+ TakePixmap();
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, XRenderPictFormat *format,
+@@ -100,6 +123,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, Drawable drawable, XRenderPictForma
+ ScreenOfDisplay(dpy,DefaultScreen(dpy)),
+ format, mSize.width, mSize.height);
+ Init(surf);
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::gfxXlibSurface(Display *dpy, XRenderPictFormat *format, const gfxIntSize& size)
+@@ -115,6 +141,9 @@ gfxXlibSurface::gfxXlibSurface(Display *dpy, XRenderPictFormat *format, const gf
+ format, mSize.width, mSize.height);
+ Init(surf);
+ TakePixmap();
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::gfxXlibSurface(cairo_surface_t *csurf)
+@@ -124,6 +153,9 @@ gfxXlibSurface::gfxXlibSurface(cairo_surface_t *csurf)
+ mDisplay = cairo_xlib_surface_get_display(csurf);
+
+ Init(csurf, PR_TRUE);
++
++ LogSurfaceCreation ();
++ HookSurfaceDestructionForLogging();
+ }
+
+ gfxXlibSurface::~gfxXlibSurface()
+@@ -198,3 +230,63 @@ pixmap_free_func (void *data)
+
+ delete pfs;
+ }
++
++void
++gfxXlibSurface::LogSurfaceCreation ()
++{
++ gfxIntSize size;
++
++ size = GetSize ();
++
++ num_surfaces_allocated++;
++ pixels_allocated += (PRInt64) size.width * size.height;
++
++ PR_LOG (gXlibSurfaceAccountingLog, PR_LOG_DEBUG,
++ ("XlibSurfaceAccounting: Xlib surface %p created, %ux%u pixels - %d surfaces with %lld global pixels allocated",
++ CairoSurface (),
++ size.width,
++ size.height,
++ num_surfaces_allocated,
++ pixels_allocated));
++}
++
++struct SurfaceFreeData {
++ gfxIntSize size;
++ cairo_surface_t *surface;
++};
++
++static void
++surface_destroy_func (void *closure)
++{
++ SurfaceFreeData *data;
++
++ data = (SurfaceFreeData *) closure;
++
++ num_surfaces_allocated--;
++ pixels_allocated -= (PRInt64) data->size.width * data->size.height;
++
++ PR_LOG (gXlibSurfaceAccountingLog, PR_LOG_DEBUG,
++ ("XlibSurfaceAccounting: Destroying Xlib surface %p, %dx%d pixels - %d surfaces with %lld global pixels allocated",
++ data->surface,
++ data->size.width,
++ data->size.height,
++ num_surfaces_allocated,
++ pixels_allocated));
++
++ delete data;
++}
++
++void
++gfxXlibSurface::HookSurfaceDestructionForLogging ()
++{
++ SurfaceFreeData *data;
++
++ data = new SurfaceFreeData;
++ data->size = GetSize ();
++ data->surface = CairoSurface ();
++
++ cairo_surface_set_user_data (data->surface,
++ &surface_free_key,
++ data,
++ surface_destroy_func);
++}
+diff --git modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
+index 16b9fd8..48431e4 100644
+--- modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
++++ modules/libpr0n/decoders/jpeg/nsJPEGDecoder.cpp
+@@ -22,6 +22,7 @@
+ *
+ * Contributor(s):
+ * Stuart Parmenter <stuart@mozilla.com>
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -63,8 +64,10 @@ NS_IMPL_ISUPPORTS1(nsJPEGDecoder, imgIDecoder)
+
+ #if defined(PR_LOGGING)
+ PRLogModuleInfo *gJPEGlog = PR_NewLogModule("JPEGDecoder");
++static PRLogModuleInfo *gJPEGDecoderAccountingLog = PR_NewLogModule ("JPEGDecoderAccounting");
+ #else
+ #define gJPEGlog
++#define gJPEGDecoderAccountingLog
+ #endif
+
+
+@@ -208,6 +211,15 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+ nsresult rv = inStr->Read((char*)mBuffer, count, &mBufferLen);
+ *_retval = mBufferLen;
+
++ if (mImage) {
++ nsresult result = mImage->AddRestoreData ((char *) mBuffer, count);
++
++ if (NS_FAILED (result)) {
++ mState = JPEG_ERROR;
++ return result;
++ }
++ }
++
+ NS_ASSERTION(NS_SUCCEEDED(rv), "nsJPEGDecoder::WriteFrom -- inStr->Read failed");
+ }
+ // else no input stream.. Flush() ?
+@@ -357,6 +369,9 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+ /* Check if the request already has an image container.
+ this is the case when multipart/x-mixed-replace is being downloaded
+ if we already have one and it has the same width and height, reuse it.
++
++ This is also the case when an existing container is reloading itself from
++ us.
+ */
+ mImageLoad->GetImage(getter_AddRefs(mImage));
+ if (mImage) {
+@@ -370,6 +385,8 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+ }
+
+ if (!mImage) {
++ nsresult result;
++
+ mImage = do_CreateInstance("@mozilla.org/image/container;1");
+ if (!mImage) {
+ mState = JPEG_ERROR;
+@@ -377,6 +394,18 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+ }
+ mImageLoad->SetImage(mImage);
+ mImage->Init(mInfo.image_width, mInfo.image_height, mObserver);
++
++ result = mImage->SetDiscardable ("image/jpeg"); /* FIXME: is this MIME type always right for this decoder? */
++ if (NS_FAILED (result)) {
++ mState = JPEG_ERROR;
++ return result;
++ }
++
++ result = mImage->AddRestoreData ((char *) mBuffer, count);
++ if (NS_FAILED (result)) {
++ mState = JPEG_ERROR;
++ return result;
++ }
+ }
+
+ mObserver->OnStartContainer(nsnull, mImage);
+@@ -416,7 +445,11 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+ }
+
+ mImage->AppendFrame(mFrame);
+- }
++
++ PR_LOG (gJPEGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("JPEGDecoderAccounting: nsJPEGDecoder::WriteFrom -- created image frame with %ux%u pixels",
++ mInfo.image_width, mInfo.image_height));
++ }
+
+ mObserver->OnStartFrame(nsnull, mFrame);
+
+@@ -538,6 +571,8 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+
+ case JPEG_DONE:
+ {
++ nsresult result;
++
+ LOG_SCOPE(gJPEGlog, "nsJPEGDecoder::WriteFrom -- entering JPEG_DONE case");
+
+ /* Step 7: Finish decompression */
+@@ -547,6 +582,12 @@ NS_IMETHODIMP nsJPEGDecoder::WriteFrom(nsIInputStream *inStr, PRUint32 count, PR
+
+ mState = JPEG_SINK_NON_JPEG_TRAILER;
+
++ result = mImage->RestoreDataDone ();
++ if (NS_FAILED (result)) {
++ mState = JPEG_ERROR;
++ return result;
++ }
++
+ /* we're done dude */
+ break;
+ }
+diff --git modules/libpr0n/decoders/png/nsPNGDecoder.cpp modules/libpr0n/decoders/png/nsPNGDecoder.cpp
+index 85f0216..15abc9f 100644
+--- modules/libpr0n/decoders/png/nsPNGDecoder.cpp
++++ modules/libpr0n/decoders/png/nsPNGDecoder.cpp
+@@ -23,6 +23,7 @@
+ * Contributor(s):
+ * Stuart Parmenter <stuart@mozilla.com>
+ * Andrew Smith
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -73,6 +74,7 @@ static void PNGAPI warning_callback(png_structp png_ptr, png_const_charp warning
+
+ #ifdef PR_LOGGING
+ PRLogModuleInfo *gPNGLog = PR_NewLogModule("PNGDecoder");
++static PRLogModuleInfo *gPNGDecoderAccountingLog = PR_NewLogModule ("PNGDecoderAccounting");
+ #endif
+
+ NS_IMPL_ISUPPORTS1(nsPNGDecoder, imgIDecoder)
+@@ -119,6 +121,11 @@ void nsPNGDecoder::CreateFrame(png_uint_32 x_offset, png_uint_32 y_offset,
+
+ if (mObserver)
+ mObserver->OnStartFrame(nsnull, mFrame);
++
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: nsPNGDecoder::CreateFrame -- created image frame with %dx%d pixels in container %p",
++ width, height,
++ mImage.get ()));
+ }
+
+ // set timeout and frame disposal method for the current frame
+@@ -213,9 +220,25 @@ NS_IMETHODIMP nsPNGDecoder::Init(imgILoad *aLoad)
+ /* void close (); */
+ NS_IMETHODIMP nsPNGDecoder::Close()
+ {
++ nsresult result;
++
+ if (mPNG)
+ png_destroy_read_struct(&mPNG, mInfo ? &mInfo : NULL, NULL);
+
++ result = mImage->RestoreDataDone ();
++ if (NS_FAILED (result)) {
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: nsPNGDecoder::Close(): failure in RestoreDataDone() for image container %p",
++ mImage.get ()));
++
++ mError = PR_TRUE;
++ return result;
++ }
++
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: nsPNGDecoder::Close(): image container %p is now with RestoreDataDone",
++ mImage.get ()));
++
+ return NS_OK;
+ }
+
+@@ -234,6 +257,7 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
+ PRUint32 *writeCount)
+ {
+ nsPNGDecoder *decoder = static_cast<nsPNGDecoder*>(closure);
++ nsresult result;
+
+ if (decoder->mError) {
+ *writeCount = 0;
+@@ -248,10 +272,24 @@ static NS_METHOD ReadDataOut(nsIInputStream* in,
+ *writeCount = 0;
+ return NS_ERROR_FAILURE;
+ }
+-
+ png_process_data(decoder->mPNG, decoder->mInfo,
+ reinterpret_cast<unsigned char *>(const_cast<char *>(fromRawSegment)), count);
+
++ result = decoder->mImage->AddRestoreData ((char *) fromRawSegment, count);
++ if (NS_FAILED (result)) {
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: ReadDataOut(): failed to add restore data to image container %p",
++ decoder->mImage.get ()));
++
++ decoder->mError = PR_TRUE;
++ *writeCount = 0;
++ return result;
++ }
++
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: ReadDataOut(): Added restore data to image container %p",
++ decoder->mImage.get ()));
++
+ *writeCount = count;
+ return NS_OK;
+ }
+@@ -525,13 +563,41 @@ info_callback(png_structp png_ptr, png_infop info_ptr)
+ if (decoder->mObserver)
+ decoder->mObserver->OnStartDecode(nsnull);
+
+- decoder->mImage = do_CreateInstance("@mozilla.org/image/container;1");
+- if (!decoder->mImage)
+- longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
++ /* The image container may already exist if it is reloading itself from us.
++ * Check that it has the same width/height; otherwise create a new container.
++ */
++ decoder->mImageLoad->GetImage (getter_AddRefs (decoder->mImage));
++ if (decoder->mImage) {
++ PRInt32 container_width, container_height;
++
++ decoder->mImage->GetWidth (&container_width);
++ decoder->mImage->GetHeight (&container_height);
+
+- decoder->mImageLoad->SetImage(decoder->mImage);
++ if (container_width != width || container_height != height)
++ decoder->mImage = nsnull;
++ }
+
+- decoder->mImage->Init(width, height, decoder->mObserver);
++ if (!decoder->mImage) {
++ decoder->mImage = do_CreateInstance("@mozilla.org/image/container;1");
++ if (!decoder->mImage)
++ longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
++
++ decoder->mImageLoad->SetImage(decoder->mImage);
++
++ decoder->mImage->Init(width, height, decoder->mObserver);
++
++ /* FIXME: is this MIME type always right for this decoder? */
++ if (NS_FAILED (decoder->mImage->SetDiscardable ("image/png"))) {
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: info_callback(): failed to set image container %p as discardable",
++ decoder->mImage.get ()));
++ longjmp(decoder->mPNG->jmpbuf, 5); // NS_ERROR_OUT_OF_MEMORY
++ }
++
++ PR_LOG (gPNGDecoderAccountingLog, PR_LOG_DEBUG,
++ ("PNGDecoderAccounting: info_callback(): set image container %p as discardable",
++ decoder->mImage.get ()));
++ }
+
+ if (decoder->mObserver)
+ decoder->mObserver->OnStartContainer(nsnull, decoder->mImage);
+@@ -757,7 +823,7 @@ end_callback(png_structp png_ptr, png_infop info_ptr)
+ }
+
+ decoder->mImage->DecodingComplete();
+-
++
+ if (decoder->mObserver) {
+ if (!(decoder->apngFlags & FRAME_HIDDEN))
+ decoder->mObserver->OnStopFrame(nsnull, decoder->mFrame);
+diff --git modules/libpr0n/public/imgIContainer.idl modules/libpr0n/public/imgIContainer.idl
+index fc42335..524af96 100644
+--- modules/libpr0n/public/imgIContainer.idl
++++ modules/libpr0n/public/imgIContainer.idl
+@@ -22,6 +22,7 @@
+ *
+ * Contributor(s):
+ * Stuart Parmenter <pavlov@netscape.com>
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -144,4 +145,10 @@ interface imgIContainer : nsISupports
+ * @note -1 means forever.
+ */
+ attribute long loopCount;
++
++ /* Methods to discard uncompressed images and restore them again */
++ [noscript] void setDiscardable(in string aMimeType);
++ [noscript] void addRestoreData(in charPtr aBuffer,
++ in unsigned long aCount);
++ [noscript] void restoreDataDone();
+ };
+diff --git modules/libpr0n/src/imgContainer.cpp modules/libpr0n/src/imgContainer.cpp
+index 776c4ee..22d8735 100644
+--- modules/libpr0n/src/imgContainer.cpp
++++ modules/libpr0n/src/imgContainer.cpp
+@@ -25,6 +25,7 @@
+ * Asko Tontti <atontti@cc.hut.fi>
+ * Arron Mogge <paper@animecity.nu>
+ * Andrew Smith
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -42,23 +43,49 @@
+
+ #include "nsComponentManagerUtils.h"
+ #include "imgIContainerObserver.h"
++#include "ImageErrors.h"
+ #include "nsIImage.h"
++#include "imgILoad.h"
++#include "imgIDecoder.h"
++#include "imgIDecoderObserver.h"
+ #include "imgContainer.h"
+ #include "nsIInterfaceRequestor.h"
+ #include "nsIInterfaceRequestorUtils.h"
+ #include "nsAutoPtr.h"
++#include "nsStringStream.h"
++#include "prmem.h"
++#include "prlog.h"
+
+ #include "gfxContext.h"
+
++/* Accounting for compressed data */
++#if defined(PR_LOGGING)
++static PRLogModuleInfo *gCompressedImageAccountingLog = PR_NewLogModule ("CompressedImageAccounting");
++#else
++#define gCompressedImageAccountingLog
++#endif
++
++static int num_containers_with_discardable_data;
++static PRInt64 num_compressed_image_bytes;
++
++
+ NS_IMPL_ISUPPORTS3(imgContainer, imgIContainer, nsITimerCallback, nsIProperties)
+
+ //******************************************************************************
+ imgContainer::imgContainer() :
+ mSize(0,0),
++ mNumFrames(0),
+ mAnim(nsnull),
+ mAnimationMode(kNormalAnimMode),
+ mLoopCount(-1),
+- mObserver(nsnull)
++ mObserver(nsnull),
++ mDiscardable(PR_FALSE),
++ mDiscarded(PR_FALSE),
++ mDiscardableMimeType(nsnull),
++ mRestoreData(nsnull),
++ mRestoreDataLength(0),
++ mRestoreDataDone(PR_FALSE),
++ mDiscardTimer(nsnull)
+ {
+ }
+
+@@ -67,6 +94,32 @@ imgContainer::~imgContainer()
+ {
+ if (mAnim)
+ delete mAnim;
++
++ if (mDiscardableMimeType) {
++ free (mDiscardableMimeType);
++ mDiscardableMimeType = nsnull;
++ }
++
++ if (mRestoreData) {
++ PR_Free (mRestoreData);
++
++ num_containers_with_discardable_data--;
++ num_compressed_image_bytes -= mRestoreDataLength;
++
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: destroying imgContainer %p. "
++ "Compressed containers: %d, Compressed data bytes: %lld",
++ this,
++ num_containers_with_discardable_data,
++ num_compressed_image_bytes));
++
++ mRestoreDataLength = 0;
++ }
++
++ if (mDiscardTimer) {
++ mDiscardTimer->Cancel ();
++ mDiscardTimer = nsnull;
++ }
+ }
+
+ //******************************************************************************
+@@ -124,15 +177,53 @@ NS_IMETHODIMP imgContainer::GetHeight(PRInt32 *aHeight)
+ return NS_OK;
+ }
+
++nsresult imgContainer::GetCurrentFrameNoRef (gfxIImageFrame** aFrame)
++{
++ nsresult result;
++
++ result = RestoreDiscardedData ();
++ if (NS_FAILED (result)) {
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: imgContainer::GetCurrentFrameNoRef(): error %d in RestoreDiscardedData(); "
++ "returning a null frame from imgContainer %p",
++ result,
++ this));
++
++ *aFrame = nsnull;
++ return result;
++ }
++
++ if (!mAnim)
++ *aFrame = mFrames.SafeObjectAt(0);
++ else if (mAnim->lastCompositedFrameIndex == mAnim->currentAnimationFrameIndex)
++ *aFrame = mAnim->compositingFrame;
++ else
++ *aFrame = mFrames.SafeObjectAt(mAnim->currentAnimationFrameIndex);
++
++ if (!*aFrame)
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: imgContainer::GetCurrentFrameNoRef(): returning null frame from imgContainer %p "
++ "(no errors when restoring data)",
++ this));
++
++ return NS_OK;
++}
++
+ //******************************************************************************
+ /* readonly attribute gfxIImageFrame currentFrame; */
+ NS_IMETHODIMP imgContainer::GetCurrentFrame(gfxIImageFrame **aCurrentFrame)
+ {
++ nsresult result;
++
+ NS_ASSERTION(aCurrentFrame, "imgContainer::GetCurrentFrame; Invalid Arg");
+ if (!aCurrentFrame)
+ return NS_ERROR_INVALID_POINTER;
+
+- if (!(*aCurrentFrame = inlinedGetCurrentFrame()))
++ result = GetCurrentFrameNoRef (aCurrentFrame);
++ if (NS_FAILED (result))
++ return result;
++
++ if (!*aCurrentFrame)
+ return NS_ERROR_FAILURE;
+
+ NS_ADDREF(*aCurrentFrame);
+@@ -148,7 +239,7 @@ NS_IMETHODIMP imgContainer::GetNumFrames(PRUint32 *aNumFrames)
+ if (!aNumFrames)
+ return NS_ERROR_INVALID_ARG;
+
+- *aNumFrames = mFrames.Count();
++ *aNumFrames = mNumFrames;
+
+ return NS_OK;
+ }
+@@ -157,16 +248,24 @@ NS_IMETHODIMP imgContainer::GetNumFrames(PRUint32 *aNumFrames)
+ /* gfxIImageFrame getFrameAt (in unsigned long index); */
+ NS_IMETHODIMP imgContainer::GetFrameAt(PRUint32 index, gfxIImageFrame **_retval)
+ {
++ nsresult result;
++
+ NS_ASSERTION(_retval, "imgContainer::GetFrameAt; Invalid Arg");
+ if (!_retval)
+ return NS_ERROR_INVALID_POINTER;
+
+- if (!mFrames.Count()) {
++ if (mNumFrames == 0) {
+ *_retval = nsnull;
+ return NS_OK;
+ }
+
+- NS_ENSURE_ARG(index < static_cast<PRUint32>(mFrames.Count()));
++ NS_ENSURE_ARG((int) index < mNumFrames);
++
++ result = RestoreDiscardedData ();
++ if (NS_FAILED (result)) {
++ *_retval = nsnull;
++ return result;
++ }
+
+ if (!(*_retval = mFrames[index]))
+ return NS_ERROR_FAILURE;
+@@ -183,16 +282,17 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
+ NS_ASSERTION(item, "imgContainer::AppendFrame; Invalid Arg");
+ if (!item)
+ return NS_ERROR_INVALID_ARG;
+-
+- PRInt32 numFrames = mFrames.Count();
+-
+- if (numFrames == 0) {
++
++ if (mFrames.Count () == 0) {
+ // This may not be an animated image, don't do all the animation stuff.
+ mFrames.AppendObject(item);
++
++ mNumFrames++;
++
+ return NS_OK;
+ }
+
+- if (numFrames == 1) {
++ if (mFrames.Count () == 1) {
+ // Now that we got a second frame, initialize animation stuff.
+ if (!ensureAnimExists())
+ return NS_ERROR_OUT_OF_MEMORY;
+@@ -216,11 +316,13 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
+ itemRect);
+
+ mFrames.AppendObject(item);
++
++ mNumFrames++;
+
+ // If this is our second frame, start the animation.
+ // Must be called after AppendObject because StartAnimation checks for > 1
+ // frame
+- if (numFrames == 1)
++ if (mFrames.Count () == 1)
+ StartAnimation();
+
+ return NS_OK;
+@@ -230,6 +332,7 @@ NS_IMETHODIMP imgContainer::AppendFrame(gfxIImageFrame *item)
+ /* void removeFrame (in gfxIImageFrame item); */
+ NS_IMETHODIMP imgContainer::RemoveFrame(gfxIImageFrame *item)
+ {
++ /* Remember to decrement mNumFrames if you implement this */
+ return NS_ERROR_NOT_IMPLEMENTED;
+ }
+
+@@ -253,7 +356,7 @@ NS_IMETHODIMP imgContainer::DecodingComplete(void)
+ mAnim->doneDecoding = PR_TRUE;
+ // If there's only 1 frame, optimize it.
+ // Optimizing animated images is not supported
+- if (mFrames.Count() == 1)
++ if (mNumFrames == 1)
+ mFrames[0]->SetMutable(PR_FALSE);
+ return NS_OK;
+ }
+@@ -292,11 +395,11 @@ NS_IMETHODIMP imgContainer::SetAnimationMode(PRUint16 aAnimationMode)
+ break;
+ case kNormalAnimMode:
+ if (mLoopCount != 0 ||
+- (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mFrames.Count())))
++ (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mNumFrames)))
+ StartAnimation();
+ break;
+ case kLoopOnceAnimMode:
+- if (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mFrames.Count()))
++ if (mAnim && (mAnim->currentAnimationFrameIndex + 1 < mNumFrames))
+ StartAnimation();
+ break;
+ }
+@@ -312,12 +415,18 @@ NS_IMETHODIMP imgContainer::StartAnimation()
+ (mAnim && (mAnim->timer || mAnim->animating)))
+ return NS_OK;
+
+- if (mFrames.Count() > 1) {
++ if (mNumFrames > 1) {
+ if (!ensureAnimExists())
+ return NS_ERROR_OUT_OF_MEMORY;
+
+ PRInt32 timeout;
+- gfxIImageFrame *currentFrame = inlinedGetCurrentFrame();
++ nsresult result;
++ gfxIImageFrame *currentFrame;
++
++ result = GetCurrentFrameNoRef (&currentFrame);
++ if (NS_FAILED (result))
++ return result;
++
+ if (currentFrame) {
+ currentFrame->GetTimeout(&timeout);
+ if (timeout <= 0) // -1 means display this frame forever
+@@ -376,8 +485,15 @@ NS_IMETHODIMP imgContainer::ResetAnimation()
+ mAnim->currentAnimationFrameIndex = 0;
+ // Update display
+ nsCOMPtr<imgIContainerObserver> observer(do_QueryReferent(mObserver));
+- if (observer)
++ if (observer) {
++ nsresult result;
++
++ result = RestoreDiscardedData ();
++ if (NS_FAILED (result))
++ return result;
++
+ observer->FrameChanged(this, mFrames[0], &(mAnim->firstFrameRefreshArea));
++ }
+
+ if (oldAnimating)
+ return StartAnimation();
+@@ -411,10 +527,161 @@ NS_IMETHODIMP imgContainer::SetLoopCount(PRInt32 aLoopCount)
+ return NS_OK;
+ }
+
++static PRBool
++discarding_is_enabled (void)
++{
++ static PRBool inited;
++ static PRBool enabled;
++
++ if (!inited) {
++ inited = PR_TRUE;
++
++ enabled = (getenv ("MOZ_DISABLE_IMAGE_DISCARD") == nsnull);
++ }
++
++ return enabled;
++}
++
++//******************************************************************************
++/* void setDiscardable(in string mime_type); */
++NS_IMETHODIMP imgContainer::SetDiscardable (const char* aMimeType)
++{
++ NS_ASSERTION(aMimeType, "imgContainer::SetDiscardable() called with null aMimeType");
++
++ if (!discarding_is_enabled ())
++ return NS_OK;
++
++ if (mDiscardable) {
++ NS_WARNING ("imgContainer::SetDiscardable(): cannot change an imgContainer which is already discardable");
++ return NS_ERROR_FAILURE;
++ }
++
++ mDiscardableMimeType = strdup (aMimeType);
++ if (!mDiscardableMimeType)
++ return NS_ERROR_OUT_OF_MEMORY;
++
++ mDiscardable = PR_TRUE;
++
++ num_containers_with_discardable_data++;
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: Making imgContainer %p (%s) discardable. "
++ "Compressed containers: %d, Compressed data bytes: %lld",
++ this,
++ aMimeType,
++ num_containers_with_discardable_data,
++ num_compressed_image_bytes));
++
++ return NS_OK;
++}
++
++//******************************************************************************
++/* void addRestoreData(in nsIInputStream aInputStream, in unsigned long aCount); */
++NS_IMETHODIMP imgContainer::AddRestoreData (char *aBuffer, PRUint32 aCount)
++{
++ PRSize new_size;
++ char *new_buffer;
++
++ NS_ASSERTION(aBuffer, "imgContainer::AddRestoreData() called with null aBuffer");
++
++ if (!discarding_is_enabled ())
++ return NS_OK;
++
++ if (!mDiscardable) {
++ NS_WARNING ("imgContainer::AddRestoreData() can only be called if SetDiscardable is called first");
++ return NS_ERROR_FAILURE;
++ }
++
++ if (mRestoreDataDone) {
++ /* We are being called from the decoder while the data is being restored
++ * (i.e. we were fully loaded once, then we discarded the image data, then
++ * we are being restored). We don't want to save the compressed data again,
++ * since we already have it.
++ */
++ return NS_OK;
++ }
++
++ new_size = mRestoreDataLength + aCount;
++
++ new_buffer = (char *) PR_Realloc (mRestoreData, new_size);
++ if (new_buffer)
++ mRestoreData = new_buffer;
++ else {
++ /* Hmm, should we discard the whole buffer? The caller isn't going to be able to recover... */
++ return NS_ERROR_OUT_OF_MEMORY;
++ }
++
++ memcpy (mRestoreData + mRestoreDataLength, aBuffer, aCount);
++ mRestoreDataLength = new_size;
++
++ num_compressed_image_bytes += aCount;
++
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: Added compressed data to imgContainer %p (%s). "
++ "Compressed containers: %d, Compressed data bytes: %lld",
++ this,
++ mDiscardableMimeType,
++ num_containers_with_discardable_data,
++ num_compressed_image_bytes));
++
++ return NS_OK;
++}
++
++/* Note! buf must be declared as char buf[9]; */
++static void
++get_header_str (char *buf, char *data, PRSize data_len)
++{
++ int i;
++ int n;
++ static char hex[] = "0123456789abcdef";
++
++ n = data_len < 4 ? data_len : 4;
++
++ for (i = 0; i < n; i++) {
++ buf[i * 2] = hex[(data[i] >> 4) & 0x0f];
++ buf[i * 2 + 1] = hex[data[i] & 0x0f];
++ }
++
++ buf[i * 2] = 0;
++}
++
++//******************************************************************************
++/* void restoreDataDone(); */
++NS_IMETHODIMP imgContainer::RestoreDataDone (void)
++{
++ char buf[9];
++
++ if (!discarding_is_enabled ())
++ return NS_OK;
++
++ if (mRestoreDataDone)
++ return NS_OK;
++
++ mRestoreDataDone = PR_TRUE;
++
++ get_header_str (buf, mRestoreData, mRestoreDataLength);
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: imgContainer::RestoreDataDone() - data is done for container %p (%s), %d real frames (cached as %d frames) - header %p is 0x%s (length %d)",
++ this,
++ mDiscardableMimeType,
++ mFrames.Count (),
++ mNumFrames,
++ mRestoreData,
++ buf,
++ (int) mRestoreDataLength));
++
++ return ResetDiscardTimer ();
++}
++
+ //******************************************************************************
+ /* void notify(in nsITimer timer); */
+ NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
+ {
++ nsresult result;
++
++ result = RestoreDiscardedData ();
++ if (NS_FAILED (result))
++ return result;
++
+ // This should never happen since the timer is only set up in StartAnimation()
+ // after mAnim is checked to exist.
+ NS_ASSERTION(mAnim, "imgContainer::Notify() called but mAnim is null");
+@@ -433,8 +700,7 @@ NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
+ return NS_OK;
+ }
+
+- PRInt32 numFrames = mFrames.Count();
+- if (!numFrames)
++ if (mNumFrames == 0)
+ return NS_OK;
+
+ gfxIImageFrame *nextFrame = nsnull;
+@@ -448,7 +714,7 @@ NS_IMETHODIMP imgContainer::Notify(nsITimer *timer)
+ // finished decoding (see EndFrameDecode)
+ if (mAnim->doneDecoding ||
+ (nextFrameIndex < mAnim->currentDecodingFrameIndex)) {
+- if (numFrames == nextFrameIndex) {
++ if (mNumFrames == nextFrameIndex) {
+ // End of Animation
+
+ // If animation mode is "loop once", it's time to stop animating
+@@ -875,3 +1141,328 @@ NS_IMETHODIMP imgContainer::GetKeys(PRUint32 *count, char ***keys)
+ }
+ return mProperties->GetKeys(count, keys);
+ }
++
++static int
++get_discard_timer_ms (void)
++{
++ /* FIXME: don't hardcode this */
++ return 5000; /* 5 seconds */
++}
++
++void
++imgContainer::sDiscardTimerCallback (nsITimer *aTimer, void *aClosure)
++{
++ imgContainer *self = (imgContainer *) aClosure;
++ int old_frame_count;
++
++ NS_ASSERTION (aTimer == self->mDiscardTimer,
++ "imgContainer::DiscardTimerCallback() got a callback for an unknown timer");
++
++ self->mDiscardTimer = nsnull;
++
++ old_frame_count = self->mFrames.Count ();
++
++ if (self->mAnim) {
++ delete self->mAnim;
++ self->mAnim = nsnull;
++ }
++
++ self->mFrames.Clear ();
++
++ self->mDiscarded = PR_TRUE;
++
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: discarded uncompressed image data from imgContainer %p (%s) - %d frames (cached count: %d); "
++ "Compressed containers: %d, Compressed data bytes: %lld",
++ self,
++ self->mDiscardableMimeType,
++ old_frame_count,
++ self->mNumFrames,
++ num_containers_with_discardable_data,
++ num_compressed_image_bytes));
++}
++
++nsresult
++imgContainer::ResetDiscardTimer (void)
++{
++ if (!discarding_is_enabled ())
++ return NS_OK;
++
++ if (!mDiscardTimer) {
++ mDiscardTimer = do_CreateInstance("@mozilla.org/timer;1");
++
++ if (!mDiscardTimer)
++ return NS_ERROR_OUT_OF_MEMORY;
++ } else {
++ if (NS_FAILED (mDiscardTimer->Cancel ()))
++ return NS_ERROR_FAILURE;
++ }
++
++ return mDiscardTimer->InitWithFuncCallback (sDiscardTimerCallback,
++ (void *) this,
++ get_discard_timer_ms (),
++ nsITimer::TYPE_ONE_SHOT);
++}
++
++nsresult
++imgContainer::RestoreDiscardedData (void)
++{
++ nsresult result;
++ int num_expected_frames;
++
++ if (!mDiscarded)
++ return NS_OK;
++
++ result = ResetDiscardTimer ();
++ if (NS_FAILED (result))
++ return result;
++
++ num_expected_frames = mNumFrames;
++
++ result = ReloadImages ();
++ if (NS_FAILED (result)) {
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: imgContainer::RestoreDiscardedData() for container %p failed to ReloadImages()",
++ this));
++ return result;
++ }
++
++ mDiscarded = PR_FALSE;
++
++ NS_ASSERTION (mNumFrames == mFrames.Count (),
++ "number of restored image frames doesn't match");
++ NS_ASSERTION (num_expected_frames == mNumFrames,
++ "number of restored image frames doesn't match the original number of frames!");
++
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_DEBUG,
++ ("CompressedImageAccounting: imgContainer::RestoreDiscardedData() restored discarded data "
++ "for imgContainer %p (%s) - %d image frames. "
++ "Compressed containers: %d, Compressed data bytes: %lld",
++ this,
++ mDiscardableMimeType,
++ mNumFrames,
++ num_containers_with_discardable_data,
++ num_compressed_image_bytes));
++
++ return NS_OK;
++}
++
++class ContainerLoader : public imgILoad,
++ public imgIDecoderObserver,
++ public nsSupportsWeakReference
++{
++public:
++
++ NS_DECL_ISUPPORTS
++ NS_DECL_IMGILOAD
++ NS_DECL_IMGIDECODEROBSERVER
++ NS_DECL_IMGICONTAINEROBSERVER
++
++ ContainerLoader (void);
++
++private:
++
++ imgIContainer *mContainer;
++};
++
++NS_IMPL_ISUPPORTS4 (ContainerLoader, imgILoad, imgIDecoderObserver, imgIContainerObserver, nsISupportsWeakReference)
++
++ContainerLoader::ContainerLoader (void)
++{
++}
++
++/* Implement imgILoad::image getter */
++NS_IMETHODIMP
++ContainerLoader::GetImage(imgIContainer **aImage)
++{
++ *aImage = mContainer;
++ NS_IF_ADDREF (*aImage);
++ return NS_OK;
++}
++
++/* Implement imgILoad::image setter */
++NS_IMETHODIMP
++ContainerLoader::SetImage(imgIContainer *aImage)
++{
++ mContainer = aImage;
++ return NS_OK;
++}
++
++/* Implement imgILoad::isMultiPartChannel getter */
++NS_IMETHODIMP
++ContainerLoader::GetIsMultiPartChannel(PRBool *aIsMultiPartChannel)
++{
++ *aIsMultiPartChannel = PR_FALSE; /* FIXME: is this always right? */
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStartRequest() */
++NS_IMETHODIMP
++ContainerLoader::OnStartRequest (imgIRequest *aRequest)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStartDecode() */
++NS_IMETHODIMP
++ContainerLoader::OnStartDecode (imgIRequest *aRequest)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStartContainer() */
++NS_IMETHODIMP
++ContainerLoader::OnStartContainer (imgIRequest *aRequest, imgIContainer *aContainer)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStartFrame() */
++NS_IMETHODIMP
++ContainerLoader::OnStartFrame (imgIRequest *aRequest, gfxIImageFrame *aFrame)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onDataAvailable() */
++NS_IMETHODIMP
++ContainerLoader::OnDataAvailable (imgIRequest *aRequest, gfxIImageFrame *aFrame, const nsIntRect * aRect)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStopFrame() */
++NS_IMETHODIMP
++ContainerLoader::OnStopFrame (imgIRequest *aRequest, gfxIImageFrame *aFrame)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStopContainer() */
++NS_IMETHODIMP
++ContainerLoader::OnStopContainer (imgIRequest *aRequest, imgIContainer *aContainer)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStopDecode() */
++NS_IMETHODIMP
++ContainerLoader::OnStopDecode (imgIRequest *aRequest, nsresult status, const PRUnichar *statusArg)
++{
++ return NS_OK;
++}
++
++/* Implement imgIDecoderObserver::onStopRequest() */
++NS_IMETHODIMP
++ContainerLoader::OnStopRequest (imgIRequest *aRequest, PRBool aIsLastPart)
++{
++ return NS_OK;
++}
++
++/* implement imgIContainerObserver::frameChanged() */
++NS_IMETHODIMP
++ContainerLoader::FrameChanged (imgIContainer *aContainer, gfxIImageFrame *aFrame, nsIntRect * aDirtyRect)
++{
++ return NS_OK;
++}
++
++static char *
++make_id_from_mime_type (char *mime_type)
++{
++ const char idbase[] = "@mozilla.org/image/decoder;2?type=";
++ int idbase_len = strlen (idbase);
++ char *id;
++
++ id = (char *) PR_Malloc (strlen (mime_type) + idbase_len + 1);
++ if (!id)
++ return nsnull;
++
++ strcpy (id, idbase);
++ strcpy (id + idbase_len, mime_type);
++
++ return id;
++}
++
++nsresult
++imgContainer::ReloadImages (void)
++{
++ char *id;
++ nsCOMPtr<imgILoad> loader;
++ nsCOMPtr<imgIDecoder> decoder;
++ nsresult result;
++ PRUint32 written;
++ nsCOMPtr<nsIInputStream> stream;
++ char buf[9];
++
++ NS_ASSERTION (mRestoreData,
++ "imgContainer::ReloadImages(): mRestoreData should not be null");
++ NS_ASSERTION (mRestoreDataDone,
++ "imgContainer::ReloadImages(): mRestoreDataDone shoudl be true!");
++
++ id = make_id_from_mime_type (mDiscardableMimeType);
++ if (!id)
++ return NS_ERROR_OUT_OF_MEMORY;
++
++ mNumFrames = 0;
++ NS_ASSERTION (mFrames.Count() == 0,
++ "imgContainer::ReloadImages(): mFrames should be empty");
++
++ decoder = do_CreateInstance (id);
++ PR_Free (id);
++
++ if (!decoder) {
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
++ ("CompressedImageAccounting: imgContainer::ReloadImages() could not create decoder for %s",
++ mDiscardableMimeType));
++ return NS_IMAGELIB_ERROR_NO_DECODER;
++ }
++
++ loader = new ContainerLoader ();
++ if (!loader) {
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
++ ("CompressedImageAccounting: imgContainer::ReloadImages() could not allocate ContainerLoader "
++ "when reloading the images for container %p",
++ this));
++ return NS_ERROR_OUT_OF_MEMORY;
++ }
++
++ loader->SetImage (this);
++
++ result = decoder->Init (loader);
++ if (NS_FAILED (result)) {
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
++ ("CompressedImageAccounting: imgContainer::ReloadImages() image container %p "
++ "failed to initialize the decoder (%s)",
++ this,
++ mDiscardableMimeType));
++ return result;
++ }
++
++ result = NS_NewByteInputStream (getter_AddRefs (stream), mRestoreData, mRestoreDataLength, NS_ASSIGNMENT_DEPEND);
++ NS_ENSURE_SUCCESS (result, result);
++
++ get_header_str (buf, mRestoreData, mRestoreDataLength);
++ PR_LOG (gCompressedImageAccountingLog, PR_LOG_WARNING,
++ ("CompressedImageAccounting: imgContainer::ReloadImages() starting to restore images for container %p (%s) - "
++ "header %p is 0x%s (length %d)",
++ this,
++ mDiscardableMimeType,
++ mRestoreData,
++ buf,
++ (int) mRestoreDataLength));
++
++ result = decoder->WriteFrom (stream, mRestoreDataLength, &written);
++ NS_ENSURE_SUCCESS (result, result);
++
++ result = decoder->Flush ();
++ if (!(result == NS_OK || result == NS_ERROR_NOT_IMPLEMENTED)) /* PNG doesn't implement Flush(), for example */
++ return result;
++
++ result = decoder->Close ();
++ NS_ENSURE_SUCCESS (result, result);
++
++ NS_ASSERTION (mFrames.Count() == mNumFrames,
++ "imgContainer::ReloadImages(): the restored mFrames.Count() doesn't match mNumFrames!");
++
++ return result;
++}
+diff --git modules/libpr0n/src/imgContainer.h modules/libpr0n/src/imgContainer.h
+index 3db7034..aa56939 100644
+--- modules/libpr0n/src/imgContainer.h
++++ modules/libpr0n/src/imgContainer.h
+@@ -23,6 +23,7 @@
+ * Contributor(s):
+ * Stuart Parmenter <pavlov@netscape.com>
+ * Chris Saari <saari@netscape.com>
++ * Federico Mena-Quintero <federico@novell.com>
+ *
+ * Alternatively, the contents of this file may be used under the terms of
+ * either the GNU General Public License Version 2 or later (the "GPL"), or
+@@ -194,14 +195,8 @@ private:
+ timer->Cancel();
+ }
+ };
+-
+- inline gfxIImageFrame* inlinedGetCurrentFrame() {
+- if (!mAnim)
+- return mFrames.SafeObjectAt(0);
+- if (mAnim->lastCompositedFrameIndex == mAnim->currentAnimationFrameIndex)
+- return mAnim->compositingFrame;
+- return mFrames.SafeObjectAt(mAnim->currentAnimationFrameIndex);
+- }
++
++ nsresult GetCurrentFrameNoRef(gfxIImageFrame** aFrame);
+
+ inline Anim* ensureAnimExists() {
+ if (!mAnim)
+@@ -274,10 +269,15 @@ private:
+ nsIntSize mSize;
+
+ //! All the <gfxIImageFrame>s of the PNG
++ // *** IMPORTANT: if you use mFrames in a method, call RestoreDiscardedData() first to ensure
++ // that the frames actually exist (they may have been discarded to save memory).
+ nsCOMArray<gfxIImageFrame> mFrames;
++ int mNumFrames; /* stored separately from mFrames.Count() to support discarded images */
+
+ nsCOMPtr<nsIProperties> mProperties;
+-
++
++ // *** IMPORTANT: if you use mAnim in a method, call RestoreDiscardedData() first to ensure
++ // that the frames actually exist (they may have been discarded to save memory).
+ imgContainer::Anim* mAnim;
+
+ //! See imgIContainer for mode constants
+@@ -288,6 +288,19 @@ private:
+
+ //! imgIContainerObserver
+ nsWeakPtr mObserver;
++
++ PRBool mDiscardable;
++ PRBool mDiscarded;
++ char* mDiscardableMimeType;
++ char* mRestoreData;
++ PRSize mRestoreDataLength;
++ PRBool mRestoreDataDone;
++ nsCOMPtr<nsITimer> mDiscardTimer;
++
++ nsresult ResetDiscardTimer (void);
++ nsresult RestoreDiscardedData (void);
++ nsresult ReloadImages (void);
++ static void sDiscardTimerCallback (nsITimer *aTimer, void *aClosure);
+ };
+
+ #endif /* __imgContainer_h__ */
diff --git a/www/firefox-devel/files/patch-build_unix_run-mozilla.sh b/www/firefox-devel/files/patch-build_unix_run-mozilla.sh
new file mode 100644
index 0000000..a529558
--- /dev/null
+++ b/www/firefox-devel/files/patch-build_unix_run-mozilla.sh
@@ -0,0 +1,12 @@
+--- build/unix/run-mozilla.sh.orig Tue Feb 14 19:56:54 2006
++++ build/unix/run-mozilla.sh Fri Dec 8 15:49:48 2006
+@@ -443,6 +443,9 @@
+ export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
+ export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH
+
++MOZ_PLUGIN_PATH=%%PREFIX%%/lib/browser_plugins:%%PREFIX%%/lib/browser_linux_plugins
++export MOZ_PLUGIN_PATH
++
+ if [ $moz_debug -eq 1 ]
+ then
+ moz_debug_program ${1+"$@"}
diff --git a/www/firefox-devel/files/patch-config-mkdepend-imakemdep.h b/www/firefox-devel/files/patch-config-mkdepend-imakemdep.h
new file mode 100644
index 0000000..b688e66
--- /dev/null
+++ b/www/firefox-devel/files/patch-config-mkdepend-imakemdep.h
@@ -0,0 +1,10 @@
+--- config/mkdepend/imakemdep.h Fri Sep 4 21:22:25 1998
++++ config/mkdepend/imakemdep.h Thu Oct 16 22:43:25 2003
+@@ -278,4 +278,7 @@
+ "-D__i386__",
+ # endif
++# if defined(__amd64__) || defined(__x86_64__)
++ "-D__amd64__ -D__x86_64__",
++# endif
+ # ifdef __GNUC__
+ "-traditional",
diff --git a/www/firefox-devel/files/patch-config-rules.mk b/www/firefox-devel/files/patch-config-rules.mk
new file mode 100644
index 0000000..8ab35f5
--- /dev/null
+++ b/www/firefox-devel/files/patch-config-rules.mk
@@ -0,0 +1,13 @@
+--- config/rules.mk.orig Thu Sep 14 14:07:03 2006
++++ config/rules.mk Wed Oct 18 11:00:09 2006
+@@ -442,9 +442,7 @@
+ endif
+
+ ifeq ($(OS_ARCH),FreeBSD)
+-ifdef IS_COMPONENT
+-EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
+-endif
++EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic -lc
+ endif
+
+ ifeq ($(OS_ARCH),NetBSD)
diff --git a/www/firefox-devel/files/patch-config_autoconf.mk.in b/www/firefox-devel/files/patch-config_autoconf.mk.in
new file mode 100644
index 0000000..29fe7f8
--- /dev/null
+++ b/www/firefox-devel/files/patch-config_autoconf.mk.in
@@ -0,0 +1,18 @@
+--- config/autoconf.mk.in.orig Thu Jul 14 00:50:06 2005
++++ config/autoconf.mk.in Thu Jul 14 00:50:40 2005
+@@ -50,13 +50,13 @@
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ bindir = @bindir@
+-includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++includedir = @includedir@/%%MOZILLA%%
+ libdir = @libdir@
+ datadir = @datadir@
+ mandir = @mandir@
+ idldir = @datadir@/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+
+-mozappdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++mozappdir = $(libdir)/%%MOZILLA%%
+ mredir = $(libdir)/mre/mre-$(MOZ_APP_VERSION)
+ mrelibdir = $(mredir)/lib
+
diff --git a/www/firefox-devel/files/patch-config_mkdepend_Makefile.in b/www/firefox-devel/files/patch-config_mkdepend_Makefile.in
new file mode 100644
index 0000000..bace012
--- /dev/null
+++ b/www/firefox-devel/files/patch-config_mkdepend_Makefile.in
@@ -0,0 +1,10 @@
+--- config/mkdepend/Makefile.in.orig Sun Dec 12 07:36:57 2004
++++ config/mkdepend/Makefile.in Sun Dec 12 07:37:55 2004
+@@ -57,6 +57,7 @@
+ include $(topsrcdir)/config/rules.mk
+
+ HOST_CFLAGS += -DINCLUDEDIR=\"/usr/include\" -DOBJSUFFIX=\".$(OBJ_SUFFIX)\"
++HOST_CFLAGS += $(XCFLAGS)
+
+ ifdef GNU_CC
+ _GCCDIR = $(shell $(CC) -print-file-name=include)
diff --git a/www/firefox-devel/files/patch-content_xslt_public_txDouble.h b/www/firefox-devel/files/patch-content_xslt_public_txDouble.h
new file mode 100644
index 0000000..534bccb
--- /dev/null
+++ b/www/firefox-devel/files/patch-content_xslt_public_txDouble.h
@@ -0,0 +1,20 @@
+--- content/xslt/public/txDouble.h.orig Fri Oct 13 00:00:29 2006
++++ content/xslt/public/txDouble.h Fri Oct 13 00:00:53 2006
+@@ -41,7 +41,7 @@
+ #define __txdouble_h__
+
+ //A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
+-#ifdef __FreeBSD__
++/* #ifdef __FreeBSD__
+ #include <ieeefp.h>
+ #ifdef __alpha__
+ fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
+@@ -50,7 +50,7 @@
+ #endif
+ fp_except_t oldmask = fpsetmask(~allmask);
+ #endif
+-
++*/
+ /**
+ * Macros to workaround math-bugs bugs in various platforms
+ */
diff --git a/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp b/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp
new file mode 100644
index 0000000..41c462d
--- /dev/null
+++ b/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.cpp
@@ -0,0 +1,46 @@
+--- extensions/typeaheadfind/src/nsTypeAheadFind.cpp.orig Wed Nov 19 01:20:47 2003
++++ extensions/typeaheadfind/src/nsTypeAheadFind.cpp Tue Feb 10 02:52:26 2004
+@@ -323,11 +323,11 @@
+ prefBranch->GetBoolPref("accessibility.typeaheadfind.startlinksonly",
+ &mStartLinksOnlyPref);
+
+- PRBool isSoundEnabled = PR_TRUE;
++ mIsSoundEnabled = PR_TRUE;
+ prefBranch->GetBoolPref("accessibility.typeaheadfind.enablesound",
+- &isSoundEnabled);
++ &mIsSoundEnabled);
+ nsXPIDLCString soundStr;
+- if (isSoundEnabled) {
++ if (mIsSoundEnabled && mIsSoundEnabled) {
+ prefBranch->GetCharPref("accessibility.typeaheadfind.soundURL",
+ getter_Copies(soundStr));
+ }
+@@ -758,7 +758,7 @@
+ }
+ else {
+ // No find string to backspace in!
+- if (mIsBackspaceProtectOn) {
++ if (mIsBackspaceProtectOn && mIsSoundEnabled) {
+ // This flag should be on only if the last key was a backspace.
+ // It keeps us from accidentally hitting backspace too many times and
+ // going back in history when we really just wanted to clear
+@@ -1012,7 +1012,9 @@
+
+ // Error sound (don't fire when backspace is pressed, they're
+ // trying to correct the mistake!)
+- PlayNotFoundSound();
++ if (mIsSoundEnabled) {
++ PlayNotFoundSound();
++ }
+
+ // Remove bad character from buffer, so we can continue typing from
+ // last matched character
+@@ -1059,7 +1061,7 @@
+ void
+ nsTypeAheadFind::PlayNotFoundSound()
+ {
+- if (mNotFoundSoundURL.IsEmpty()) // no sound
++ if (mNotFoundSoundURL.IsEmpty() || !mIsSoundEnabled) // no sound
+ return;
+ if (!mSoundInterface) {
+ mSoundInterface = do_CreateInstance("@mozilla.org/sound;1");
diff --git a/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h b/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h
new file mode 100644
index 0000000..07ad43b
--- /dev/null
+++ b/www/firefox-devel/files/patch-extensions_typeaheadfind_src_nsTypeAheadFind.h
@@ -0,0 +1,12 @@
+--- extensions/typeaheadfind/src/nsTypeAheadFind.h.orig Fri May 23 22:00:33 2003
++++ extensions/typeaheadfind/src/nsTypeAheadFind.h Mon Feb 9 22:21:43 2004
+@@ -194,6 +194,9 @@
+
+ nsCString mNotFoundSoundURL;
+
++ // Move the sound enabled boolean out for all methods to access.
++ PRBool mIsSoundEnabled;
++
+ // PRBool's are used instead of PRPackedBool's where the address of the
+ // boolean variable is getting passed into a method. For example:
+ // GetBoolPref("accessibility.typeaheadfind.linksonly", &mLinksOnlyPref);
diff --git a/www/firefox-devel/files/patch-js_src_Makefile.in b/www/firefox-devel/files/patch-js_src_Makefile.in
new file mode 100644
index 0000000..fb0bd7f
--- /dev/null
+++ b/www/firefox-devel/files/patch-js_src_Makefile.in
@@ -0,0 +1,10 @@
+--- js/src/Makefile.in.orig Wed Oct 18 09:23:09 2006
++++ js/src/Makefile.in Wed Oct 18 09:27:27 2006
+@@ -244,6 +244,7 @@
+ endif
+
+ LDFLAGS += $(pathsubst -l%,$(NSPR_STATIC_PATH)/%.a,$(NSPR_LIBS))
++LDFLAGS += -lc
+
+ # BeOS and HP-UX do not require the extra linking of "-lm"
+ ifeq (,$(filter BeOS HP-UX WINNT WINCE OpenVMS,$(OS_ARCH)))
diff --git a/www/firefox-devel/files/patch-js_src_jsnum.c b/www/firefox-devel/files/patch-js_src_jsnum.c
new file mode 100644
index 0000000..a3ef276
--- /dev/null
+++ b/www/firefox-devel/files/patch-js_src_jsnum.c
@@ -0,0 +1,28 @@
+--- js/src/jsnum.c.orig Sun Nov 5 18:37:07 2006
++++ js/src/jsnum.c Sun Nov 5 18:42:31 2006
+@@ -45,6 +45,9 @@
+ #if defined(XP_WIN) || defined(XP_OS2)
+ #include <float.h>
+ #endif
++#if defined(__FreeBSD__)
++#include <sys/param.h>
++#endif
+ #include <locale.h>
+ #include <limits.h>
+ #include <math.h>
+@@ -532,7 +535,15 @@ static jsdouble NaN;
+
+ #else
+
++#if defined(__FreeBSD__) && __FreeBSD_version >= 601000
++#include <fenv.h>
++#define FIX_FPU() (fedisableexcept(FE_ALL_EXCEPT))
++
++#else
++
+ #define FIX_FPU() ((void)0)
++
++#endif /* defined(__FreeBSD__) && __FreeBSD_version >= 503000 */
+
+ #endif
+
diff --git a/www/firefox-devel/files/patch-modules_libpref_src_init_all.js b/www/firefox-devel/files/patch-modules_libpref_src_init_all.js
new file mode 100644
index 0000000..1700380
--- /dev/null
+++ b/www/firefox-devel/files/patch-modules_libpref_src_init_all.js
@@ -0,0 +1,53 @@
+--- modules/libpref/src/init/all.js.orig Mon Feb 13 22:58:15 2006
++++ modules/libpref/src/init/all.js Tue May 2 00:32:55 2006
+@@ -1883,33 +1883,33 @@
+
+ // th
+
+-pref("font.name.serif.tr", "Times");
+-pref("font.name.sans-serif.tr", "Helvetica");
+-pref("font.name.monospace.tr", "Courier");
++pref("font.name.serif.tr", "serif");
++pref("font.name.sans-serif.tr", "sans-serif");
++pref("font.name.monospace.tr", "monospace");
+
+ pref("font.name.serif.x-baltic", "serif");
+ pref("font.name.sans-serif.x-baltic", "sans-serif");
+ pref("font.name.monospace.x-baltic", "monospace");
+
+-pref("font.name.serif.x-central-euro", "Times");
+-pref("font.name.sans-serif.x-central-euro", "Helvetica");
+-pref("font.name.monospace.x-central-euro", "Courier");
++pref("font.name.serif.x-central-euro", "serif");
++pref("font.name.sans-serif.x-central-euro", "sans-serif");
++pref("font.name.monospace.x-central-euro", "monospace");
+
+ pref("font.name.serif.x-cyrillic", "serif");
+ pref("font.name.sans-serif.x-cyrillic", "sans-serif");
+ pref("font.name.monospace.x-cyrillic", "monospace");
+
+-pref("font.name.serif.x-unicode", "Times");
+-pref("font.name.sans-serif.x-unicode", "Helvetica");
+-pref("font.name.monospace.x-unicode", "Courier");
+-
+-pref("font.name.serif.x-user-def", "Times");
+-pref("font.name.sans-serif.x-user-def", "Helvetica");
+-pref("font.name.monospace.x-user-def", "Courier");
+-
+-pref("font.name.serif.x-western", "Times");
+-pref("font.name.sans-serif.x-western", "Helvetica");
+-pref("font.name.monospace.x-western", "Courier");
++pref("font.name.serif.x-unicode", "serif");
++pref("font.name.sans-serif.x-unicode", "sans-serif");
++pref("font.name.monospace.x-unicode", "monospace");
++
++pref("font.name.serif.x-user-def", "serif");
++pref("font.name.sans-serif.x-user-def", "sans-serif");
++pref("font.name.monospace.x-user-def", "monospace");
++
++pref("font.name.serif.x-western", "serif");
++pref("font.name.sans-serif.x-western", "sans-serif");
++pref("font.name.monospace.x-western", "monospace");
+
+ pref("font.name.serif.zh-CN", "serif");
+ pref("font.name.sans-serif.zh-CN", "sans-serif");
diff --git a/www/firefox-devel/files/patch-security-coreconf-FreeBSD.mk b/www/firefox-devel/files/patch-security-coreconf-FreeBSD.mk
new file mode 100644
index 0000000..0f7a04a
--- /dev/null
+++ b/www/firefox-devel/files/patch-security-coreconf-FreeBSD.mk
@@ -0,0 +1,24 @@
+--- security/coreconf/FreeBSD.mk.orig Mon Sep 25 18:26:23 2006
++++ security/coreconf/FreeBSD.mk Mon Sep 25 18:27:03 2006
+@@ -45,8 +45,12 @@
+ ifeq ($(OS_TEST),alpha)
+ CPU_ARCH = alpha
+ else
++ifeq ($(OS_TEST),amd64)
++CPU_ARCH = amd64
++else
+ CPU_ARCH = x86
+ endif
++endif
+
+ OS_CFLAGS = $(DSO_CFLAGS) -ansi -Wall -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK
+
+@@ -73,7 +77,7 @@
+ DLL_SUFFIX = so.1.0
+ endif
+
+-MKSHLIB = $(CC) $(DSO_LDOPTS)
++MKSHLIB = $(CC) -Wl,-Bsymbolic -lc $(DSO_LDOPTS) -o $@
+ ifdef MAPFILE
+ MKSHLIB += -Wl,--version-script,$(MAPFILE)
+ endif
diff --git a/www/firefox-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp b/www/firefox-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp
new file mode 100644
index 0000000..f30d122
--- /dev/null
+++ b/www/firefox-devel/files/patch-security_manager_ssl_src_nsNSSComponent.cpp
@@ -0,0 +1,10 @@
+--- security/manager/ssl/src/nsNSSComponent.cpp.orig Mon May 29 23:10:54 2006
++++ security/manager/ssl/src/nsNSSComponent.cpp Mon May 29 23:12:22 2006
+@@ -110,6 +110,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-devel/files/patch-storage_build_Makefile.in b/www/firefox-devel/files/patch-storage_build_Makefile.in
new file mode 100644
index 0000000..18202a5
--- /dev/null
+++ b/www/firefox-devel/files/patch-storage_build_Makefile.in
@@ -0,0 +1,10 @@
+--- storage/build/Makefile.in.orig Tue Feb 21 11:18:56 2006
++++ storage/build/Makefile.in Sun Nov 5 16:16:06 2006
+@@ -77,6 +77,7 @@
+ $(EXTRA_DSO_LIBS) \
+ $(MOZ_COMPONENT_LIBS) \
+ $(MOZ_JS_LIBS) \
++ %%PTHREAD_LIBS%% \
+ $(NULL)
+
+ include $(topsrcdir)/config/rules.mk
diff --git a/www/firefox-devel/files/patch-sysnss b/www/firefox-devel/files/patch-sysnss
new file mode 100644
index 0000000..6f3d062
--- /dev/null
+++ b/www/firefox-devel/files/patch-sysnss
@@ -0,0 +1,34 @@
+--- security/manager/ssl/src/Makefile.in.orig 2007-07-23 15:03:01.000000000 -0400
++++ security/manager/ssl/src/Makefile.in 2007-09-04 20:47:03.000000000 -0400
+@@ -125,13 +125,11 @@
+ pipboot \
+ $(NULL)
+
+-EXTRA_DEPS = $(NSS_DEP_LIBS)
+-
+ DEFINES += -DNSS_ENABLE_ECC
+
+ # Use local includes because they are inserted before INCLUDES
+ # so that Mozilla's nss.h is used, not glibc's
+-LOCAL_INCLUDES += $(NSS_CFLAGS)
++LOCAL_INCLUDES += -I%%LOCALBASE%%/include/nss/nss
+
+ ifeq ($(OS_ARCH),Darwin)
+ EXTRA_DSO_LDOPTS += \
+@@ -143,6 +141,7 @@
+ $(MOZ_COMPONENT_LIBS) \
+ $(MOZ_JS_LIBS) \
+ $(NSS_LIBS) \
++ $(LOCAL_INCLUDES) \
+ $(NULL)
+
+ include $(topsrcdir)/config/rules.mk
+--- toolkit/components/url-classifier/src/Makefile.in.orig 2007-09-05 09:00:23.000000000 -0400
++++ toolkit/components/url-classifier/src/Makefile.in 2007-09-05 09:00:27.000000000 -0400
+@@ -36,6 +36,3 @@
+ $(NULL)
+
+ include $(topsrcdir)/config/rules.mk
+-
+-export:: $(topsrcdir)/security/nss/lib/freebl/sha512.c
+- $(INSTALL) $^ .
diff --git a/www/firefox-devel/files/patch-toolkit_xre_Makefile.in b/www/firefox-devel/files/patch-toolkit_xre_Makefile.in
new file mode 100644
index 0000000..4a9c853
--- /dev/null
+++ b/www/firefox-devel/files/patch-toolkit_xre_Makefile.in
@@ -0,0 +1,8 @@
+--- toolkit/xre/Makefile.in.orig 2007-09-10 10:31:53.000000000 -0400
++++ toolkit/xre/Makefile.in 2007-09-10 10:35:00.000000000 -0400
+@@ -263,5 +263,3 @@
+ libs:: platform.ini
+ $(INSTALL) $^ $(DIST)/bin
+
+-install::
+- $(INSTALL) $(IFLAGS1) $^ $(DESTDIR)$(mozappdir)
diff --git a/www/firefox-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp b/www/firefox-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
new file mode 100644
index 0000000..7f8e55f
--- /dev/null
+++ b/www/firefox-devel/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
@@ -0,0 +1,29 @@
+--- uriloader/exthandler/unix/nsGNOMERegistry.cpp.orig Fri Dec 24 04:30:00 2004
++++ uriloader/exthandler/unix/nsGNOMERegistry.cpp Fri Dec 24 04:34:05 2004
+@@ -143,7 +143,7 @@
+ PR_END_MACRO
+
+ // Attempt to open libgconf
+- gconfLib = LoadVersionedLibrary("gconf-2", ".4");
++ gconfLib = PR_LoadLibrary("libgconf-2.so");
+ ENSURE_LIB(gconfLib);
+
+ GET_LIB_FUNCTION(gconf, gconf_client_get_default);
+@@ -151,7 +151,7 @@
+ GET_LIB_FUNCTION(gconf, gconf_client_get_bool);
+
+ // Attempt to open libgnome
+- gnomeLib = LoadVersionedLibrary("gnome-2", ".0");
++ gnomeLib = PR_LoadLibrary("libgnome-2.so");
+ ENSURE_LIB(gnomeLib);
+
+ GET_LIB_FUNCTION(gnome, gnome_url_show);
+@@ -160,7 +160,7 @@
+ GET_LIB_FUNCTION(gnome, gnome_program_get);
+
+ // Attempt to open libgnomevfs
+- vfsLib = LoadVersionedLibrary("gnomevfs-2", ".0");
++ vfsLib = PR_LoadLibrary("libgnomevfs-2.so");
+ ENSURE_LIB(vfsLib);
+
+ GET_LIB_FUNCTION(vfs, gnome_vfs_mime_type_from_name);
diff --git a/www/firefox-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc b/www/firefox-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc
new file mode 100644
index 0000000..9a41bbf
--- /dev/null
+++ b/www/firefox-devel/files/patch-xpcom-reflect-xptcall-public-xptcstubsdecl.inc
@@ -0,0 +1,11 @@
+--- xpcom/reflect/xptcall/public/xptcstubsdecl.inc.orig Tue Mar 16 03:07:25 2004
++++ xpcom/reflect/xptcall/public/xptcstubsdecl.inc Tue Jun 15 12:52:36 2004
+@@ -8,7 +8,7 @@
+ * 1 is AddRef
+ * 2 is Release
+ */
+-#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__))
++#if !defined(__ia64)
+ NS_IMETHOD Stub3();
+ NS_IMETHOD Stub4();
+ NS_IMETHOD Stub5();
diff --git a/www/firefox-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in b/www/firefox-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in
new file mode 100644
index 0000000..51edeb9
--- /dev/null
+++ b/www/firefox-devel/files/patch-xpcom-reflect-xptcall-src-md-unix-Makefile.in
@@ -0,0 +1,54 @@
+--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig Thu Aug 14 21:00:23 2003
++++ xpcom/reflect/xptcall/src/md/unix/Makefile.in Sun Feb 1 15:06:40 2004
+@@ -49,6 +49,9 @@
+ ifeq (86,$(findstring 86,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_unixish_x86.cpp xptcstubs_unixish_x86.cpp
+ endif
++ifeq (amd64,$(OS_TEST))
++CPPSRCS := xptcinvoke_x86_64_linux.cpp xptcstubs_x86_64_linux.cpp
++endif
+ endif
+ #
+ # New code for Linux, et. al., with gcc
+@@ -60,7 +63,7 @@
+ endif
+ endif
+ # IA64 Linux
+-ifneq (,$(filter Linux,$(OS_ARCH)))
++ifneq (,$(filter Linux FreeBSD,$(OS_ARCH)))
+ ifneq (,$(findstring ia64,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_ipf64.cpp xptcstubs_ipf64.cpp
+ ASFILES := xptcstubs_asm_ipf64.s xptcinvoke_asm_ipf64.s
+@@ -106,9 +109,15 @@
+ ASFILES := xptcinvoke_asm_osf1_alpha.s xptcstubs_asm_osf1_alpha.s
+ endif
+ #
++# FreeBSD/Alpha
++#
++ifeq ($(OS_ARCH)$(OS_TEST),FreeBSDalpha)
++CPPSRCS := xptcinvoke_freebsd_alpha.cpp xptcstubs_freebsd_alpha.cpp
++endif
++#
+ # Linux/Alpha
+ #
+-ifneq (,$(filter Linuxalpha FreeBSDalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
++ifneq (,$(filter Linuxalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
+ CPPSRCS := xptcinvoke_linux_alpha.cpp xptcstubs_linux_alpha.cpp
+ endif
+ #
+@@ -294,6 +303,15 @@
+ ifeq ($(OS_ARCH)$(OS_TEST),NetBSDsparc)
+ CPPSRCS := xptcinvoke_sparc_netbsd.cpp xptcstubs_sparc_netbsd.cpp
+ ASFILES := xptcinvoke_asm_sparc_netbsd.s xptcstubs_asm_sparc_netbsd.s
++endif
++#
++# FreeBSD/SPARC64
++#
++ifeq ($(OS_ARCH),FreeBSD)
++ifneq (,$(findstring sparc,$(OS_TEST)))
++CPPSRCS := xptcinvoke_sparc64_freebsd.cpp xptcstubs_sparc64_freebsd.cpp
++ASFILES := xptcinvoke_asm_sparc64_freebsd.s xptcstubs_asm_sparcv9_solaris.s
++endif
+ endif
+ #
+ # Solaris/SPARC
diff --git a/www/firefox-devel/files/patch-xptcall-alpha b/www/firefox-devel/files/patch-xptcall-alpha
new file mode 100644
index 0000000..29631a9
--- /dev/null
+++ b/www/firefox-devel/files/patch-xptcall-alpha
@@ -0,0 +1,459 @@
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp.orig Tue May 27 01:37:25 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp Tue May 27 01:37:00 2003
+@@ -0,0 +1,184 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* ***** BEGIN LICENSE BLOCK *****
++ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * 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 the Initial Developer are Copyright (C) 1998
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either the GNU General Public License Version 2 or later (the "GPL"), or
++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the NPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the NPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
++
++#include "xptcprivate.h"
++
++/* Prototype specifies unmangled function name and disables unused warning */
++static void
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
++__asm__("invoke_copy_to_stack") __attribute__((unused));
++
++static void
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
++{
++ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
++
++ for(PRUint32 i = 0; i < paramCount; i++, d++, s++)
++ {
++ if(s->IsPtrData())
++ {
++ *d = (PRUint64)s->ptr;
++ continue;
++ }
++ switch(s->type)
++ {
++ case nsXPTType::T_I8 : *d = (PRUint64)s->val.i8; break;
++ case nsXPTType::T_I16 : *d = (PRUint64)s->val.i16; break;
++ case nsXPTType::T_I32 : *d = (PRUint64)s->val.i32; break;
++ case nsXPTType::T_I64 : *d = (PRUint64)s->val.i64; break;
++ case nsXPTType::T_U8 : *d = (PRUint64)s->val.u8; break;
++ case nsXPTType::T_U16 : *d = (PRUint64)s->val.u16; break;
++ case nsXPTType::T_U32 : *d = (PRUint64)s->val.u32; break;
++ case nsXPTType::T_U64 : *d = (PRUint64)s->val.u64; break;
++ case nsXPTType::T_FLOAT :
++ if(i < NUM_ARG_REGS)
++ {
++ // convert floats to doubles if they are to be passed
++ // via registers so we can just deal with doubles later
++ union { PRUint64 u64; double d; } t;
++ t.d = (double)s->val.f;
++ *d = t.u64;
++ }
++ else
++ // otherwise copy to stack normally
++ *d = (PRUint64)s->val.u32;
++ break;
++ case nsXPTType::T_DOUBLE : *d = (PRUint64)s->val.u64; break;
++ case nsXPTType::T_BOOL : *d = (PRUint64)s->val.b; break;
++ case nsXPTType::T_CHAR : *d = (PRUint64)s->val.c; break;
++ case nsXPTType::T_WCHAR : *d = (PRUint64)s->val.wc; break;
++ default:
++ // all the others are plain pointer types
++ *d = (PRUint64)s->val.p;
++ break;
++ }
++ }
++}
++
++/*
++ * XPTC_PUBLIC_API(nsresult)
++ * XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
++ * PRUint32 paramCount, nsXPTCVariant* params, void* vt)
++ */
++__asm__(
++ "#### XPTC_InvokeByIndex ####\n"
++".text\n\t"
++ ".align 5\n\t"
++ ".globl XPTC_InvokeByIndex\n\t"
++ ".ent XPTC_InvokeByIndex\n"
++"XPTC_InvokeByIndex:\n\t"
++ ".frame $15,32,$26,0\n\t"
++ ".mask 0x4008000,-32\n\t"
++ "ldgp $29,0($27)\n"
++"$XPTC_InvokeByIndex..ng:\n\t"
++ "subq $30,32,$30\n\t"
++ "stq $26,0($30)\n\t"
++ "stq $15,8($30)\n\t"
++ "bis $30,$30,$15\n\t"
++ ".prologue 1\n\t"
++
++ /*
++ * Allocate enough stack space to hold the greater of 6 or "paramCount"+1
++ * parameters. (+1 for "this" pointer) Room for at least 6 parameters
++ * is required for storage of those passed via registers.
++ */
++
++ "bis $31,5,$2\n\t" /* count = MAX(5, "paramCount") */
++ "cmplt $2,$18,$1\n\t"
++ "cmovne $1,$18,$2\n\t"
++ "s8addq $2,16,$1\n\t" /* room for count+1 params (8 bytes each) */
++ "bic $1,15,$1\n\t" /* stack space is rounded up to 0 % 16 */
++ "subq $30,$1,$30\n\t"
++
++ "stq $16,0($30)\n\t" /* save "that" (as "this" pointer) */
++ "stq $17,16($15)\n\t" /* save "methodIndex" */
++
++ "addq $30,8,$16\n\t" /* pass stack pointer */
++ "bis $18,$18,$17\n\t" /* pass "paramCount" */
++ "bis $19,$19,$18\n\t" /* pass "params" */
++ "bsr $26,$invoke_copy_to_stack..ng\n\t" /* call invoke_copy_to_stack */
++
++ /*
++ * Copy the first 6 parameters to registers and remove from stack frame.
++ * Both the integer and floating point registers are set for each parameter
++ * except the first which is the "this" pointer. (integer only)
++ * The floating point registers are all set as doubles since the
++ * invoke_copy_to_stack function should have converted the floats.
++ */
++ "ldq $16,0($30)\n\t" /* integer registers */
++ "ldq $17,8($30)\n\t"
++ "ldq $18,16($30)\n\t"
++ "ldq $19,24($30)\n\t"
++ "ldq $20,32($30)\n\t"
++ "ldq $21,40($30)\n\t"
++ "ldt $f17,8($30)\n\t" /* floating point registers */
++ "ldt $f18,16($30)\n\t"
++ "ldt $f19,24($30)\n\t"
++ "ldt $f20,32($30)\n\t"
++ "ldt $f21,40($30)\n\t"
++
++ "addq $30,48,$30\n\t" /* remove params from stack */
++
++ /*
++ * Call the virtual function with the constructed stack frame.
++ */
++ "bis $16,$16,$1\n\t" /* load "this" */
++ "ldq $2,16($15)\n\t" /* load "methodIndex" */
++ "ldq $1,0($1)\n\t" /* load vtable */
++#if 0
++ "s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */
++#else
++ "mulq $2, 8, $2\n\t"
++ "addq $2, 0, $2\n\t" /* vtable index = "methodIndex" * 16 + 24 */
++#endif
++ "addq $1,$2,$1\n\t"
++ "ldq $27,0($1)\n\t" /* load address of function */
++ "jsr $26,($27),0\n\t" /* call virtual function */
++ "ldgp $29,0($26)\n\t"
++
++ "bis $15,$15,$30\n\t"
++ "ldq $26,0($30)\n\t"
++ "ldq $15,8($30)\n\t"
++ "addq $30,32,$30\n\t"
++ "ret $31,($26),1\n\t"
++ ".end XPTC_InvokeByIndex"
++ );
++
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp.orig Tue May 27 01:37:30 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp Tue May 27 01:37:04 2003
+@@ -0,0 +1,269 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* ***** BEGIN LICENSE BLOCK *****
++ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * 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 the Initial Developer are Copyright (C) 1999
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either the GNU General Public License Version 2 or later (the "GPL"), or
++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the NPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the NPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++/* Implement shared vtbl methods. */
++
++/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
++
++#include <sys/types.h>
++#include <machine/cpu.h>
++#include "xptcprivate.h"
++
++/* Prototype specifies unmangled function name and disables unused warning */
++static nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
++__asm__("PrepareAndDispatch") __attribute__((unused));
++
++static nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
++{
++ const PRUint8 PARAM_BUFFER_COUNT = 16;
++ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
++
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint8 paramCount;
++ PRUint8 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++
++ iface_info->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");
++
++ // args[0] to args[NUM_ARG_REGS] hold floating point register values
++ PRUint64* ap = args + NUM_ARG_REGS;
++ 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_I8 : dp->val.i8 = (PRInt8) *ap; break;
++ case nsXPTType::T_I16 : dp->val.i16 = (PRInt16) *ap; break;
++ case nsXPTType::T_I32 : dp->val.i32 = (PRInt32) *ap; break;
++ case nsXPTType::T_I64 : dp->val.i64 = (PRInt64) *ap; break;
++ case nsXPTType::T_U8 : dp->val.u8 = (PRUint8) *ap; break;
++ case nsXPTType::T_U16 : dp->val.u16 = (PRUint16) *ap; break;
++ case nsXPTType::T_U32 : dp->val.u32 = (PRUint32) *ap; break;
++ case nsXPTType::T_U64 : dp->val.u64 = (PRUint64) *ap; break;
++ case nsXPTType::T_FLOAT :
++ if(i < NUM_ARG_REGS)
++ {
++ // floats passed via registers are stored as doubles
++ // in the first NUM_ARG_REGS entries in args
++ dp->val.u64 = (PRUint64) args[i];
++ dp->val.f = (float) dp->val.d; // convert double to float
++ }
++ else
++ dp->val.u32 = (PRUint32) *ap;
++ break;
++ case nsXPTType::T_DOUBLE :
++ // doubles passed via registers are also stored
++ // in the first NUM_ARG_REGS entries in args
++ dp->val.u64 = (i < NUM_ARG_REGS) ? args[i] : *ap;
++ break;
++ case nsXPTType::T_BOOL : dp->val.b = (PRBool) *ap; break;
++ case nsXPTType::T_CHAR : dp->val.c = (char) *ap; break;
++ case nsXPTType::T_WCHAR : dp->val.wc = (PRUnichar) *ap; break;
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ if(dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++/*
++ * SharedStub()
++ * Collects arguments and calls PrepareAndDispatch. The "methodIndex" is
++ * passed to this function via $1 to preserve the argument registers.
++ */
++__asm__(
++ "#### SharedStub ####\n"
++".text\n\t"
++ ".align 5\n\t"
++ ".ent SharedStub\n"
++"SharedStub:\n\t"
++ ".frame $30,96,$26,0\n\t"
++ ".mask 0x4000000,-96\n\t"
++ "ldgp $29,0($27)\n"
++"$SharedStub..ng:\n\t"
++ "subq $30,96,$30\n\t"
++ "stq $26,0($30)\n\t"
++ ".prologue 1\n\t"
++
++ /*
++ * Store arguments passed via registers to the stack.
++ * Floating point registers are stored as doubles and converted
++ * to floats in PrepareAndDispatch if necessary.
++ */
++ "stt $f17,16($30)\n\t" /* floating point registers */
++ "stt $f18,24($30)\n\t"
++ "stt $f19,32($30)\n\t"
++ "stt $f20,40($30)\n\t"
++ "stt $f21,48($30)\n\t"
++ "stq $17,56($30)\n\t" /* integer registers */
++ "stq $18,64($30)\n\t"
++ "stq $19,72($30)\n\t"
++ "stq $20,80($30)\n\t"
++ "stq $21,88($30)\n\t"
++
++ /*
++ * Call PrepareAndDispatch function.
++ */
++ "bis $1,$1,$17\n\t" /* pass "methodIndex" */
++ "addq $30,16,$18\n\t" /* pass "args" */
++ "bsr $26,$PrepareAndDispatch..ng\n\t"
++
++ "ldq $26,0($30)\n\t"
++ "addq $30,96,$30\n\t"
++ "ret $31,($26),1\n\t"
++ ".end SharedStub"
++ );
++
++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
++/*
++ * nsresult nsXPTCStubBase::Stub##n()
++ * Sets register $1 to "methodIndex" and jumps to SharedStub.
++ */
++#define STUB_ENTRY(n) \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase5Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase5Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase5Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase5Stub"#n"Ev" \
++ ); \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase6Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase6Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase6Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase6Stub"#n"Ev" \
++ ); \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase7Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase7Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase7Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase7Stub"#n"Ev" \
++ );
++#else
++/*
++ * nsresult nsXPTCStubBase::Stub##n()
++ * Sets register $1 to "methodIndex" and jumps to SharedStub.
++ */
++#define STUB_ENTRY(n) \
++nsresult nsXPTCStubBase::Stub##n() \
++{ \
++ nsresult result; \
++__asm__ __volatile__( \
++ "ldah $29,0($27)\n\t" \
++ "lda $29,0($29)\n\t" \
++ "lda $1, "#n"\n\t" \
++ "br $31, $SharedStub..ng\n\t" \
++ "mov $0, %0\n\t" \
++ : "=r" (result) \
++ ); \
++ return result; \
++}
++#endif
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
++
diff --git a/www/firefox-devel/files/patch-xptcall-sparc64 b/www/firefox-devel/files/patch-xptcall-sparc64
new file mode 100644
index 0000000..9599a8a
--- /dev/null
+++ b/www/firefox-devel/files/patch-xptcall-sparc64
@@ -0,0 +1,327 @@
+--- /dev/null Mon May 26 13:22:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_freebsd.cpp Mon May 26 04:12:55 2003
+@@ -0,0 +1,123 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ */
++
++/* Implement shared vtbl methods. */
++
++#include "xptcprivate.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;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint8 paramCount;
++ PRUint8 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++
++ iface_info->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");
++
++ 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_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_DOUBLE : dp->val.d = *((double*) ap); break;
++ case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) 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_FLOAT : dp->val.f = ((float*) ap)[1]; break;
++ 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;
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ 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__ */
+--- /dev/null Mon May 26 13:22:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc64_freebsd.s Mon May 26 04:06:09 2003
+@@ -0,0 +1,104 @@
++/* -*- Mode: asm; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ * Chris Seawood <cls@seawood.org>
++ */
++
++/*
++ Platform specific code to invoke XPCOM methods on native objects
++ for sparcv9 Solaris.
++
++ See the SPARC Compliance Definition (SCD) Chapter 3
++ for more information about what is going on here, including
++ the use of BIAS (0x7ff).
++ The SCD is available from http://www.sparc.com/.
++*/
++
++ .global XPTC_InvokeByIndex
++ .type XPTC_InvokeByIndex, #function
++
++/*
++ XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant* params);
++
++*/
++XPTC_InvokeByIndex:
++ 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 %d2
++ 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
++! add %l0,16,%l0 ! there are 2 extra entries in the vTable (16bytes)
++ ldx [%i0],%l1 ! *that --> address of vtable
++ ldx [%l0 + %l1],%l0 ! that->vtable[index * 8 + 16] --> 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 XPTC_InvokeByIndex, .-XPTC_InvokeByIndex
+--- /dev/null Mon May 26 14:00:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_sparc64_freebsd.cpp Mon May 26 14:00:49 2003
+@@ -0,0 +1,91 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ * Chris Seawood <cls@seawood.org>
++ */
++
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++#include "xptcprivate.h"
++
++#if !defined(__sparc) && !defined(__sparc__)
++#error "This code is for Sparc only"
++#endif
++
++/* Prototype specifies unmangled function name */
++extern "C" PRUint64
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s);
++
++extern "C" PRUint64
++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-devel/pkg-descr b/www/firefox-devel/pkg-descr
new file mode 100644
index 0000000..166df46
--- /dev/null
+++ b/www/firefox-devel/pkg-descr
@@ -0,0 +1,12 @@
+Firefox is an award winning, free, open-source web browser for many platforms
+and is based on the Mozilla codebase. It is small, fast and easy to use, and
+offers many advanced features:
+ o Popup Blocking
+ o Tabbed Browsing
+ o Live Bookmarks (ie. RSS)
+ o Extensions
+ o Themes
+ o FastFind
+ o Improved Security
+
+WWW: http://www.mozilla.com/firefox
diff --git a/www/firefox-devel/pkg-message b/www/firefox-devel/pkg-message
new file mode 100644
index 0000000..5c9d24b
--- /dev/null
+++ b/www/firefox-devel/pkg-message
@@ -0,0 +1,32 @@
+======================================================================
+
+SMB issues:
+Network group, machine, and share browsing does not work correctly.
+
+SFTP:
+Only sftp access using public key authentication works. To easily
+setup public key authentication to "remote_host":
+
+ssh-keygen -t dsa
+cat ~/.ssh/id_dsa.pub | ssh remote_host "cat >> .ssh/authorized_keys"
+
+The SSH sever on remote_host must allow pub key authentication.
+
+======================================================================
+
+Any bug reports should be addressed to the maintainers at:
+ gnome@FreeBSD.org
+You may also Cc: freebsd-ports@FreeBSD.org. Please do not send
+bug reports to any other addresses.
+
+Please include the following information with any bug report:
+* Output from 'uname -a'.
+* Date/time stamp from www/firefox-devel/Makefile.
+* Where/when did the problem occur: configuring, building, or
+ running firefox
+* How can you reproduce the problem?
+
+Thank you for your help in testing and reporting bugs, and we hope you
+enjoy using Firefox.
+The Maintainers (gnome@)
+======================================================================
diff --git a/www/mozilla/Makefile b/www/mozilla/Makefile
new file mode 100644
index 0000000..726f045
--- /dev/null
+++ b/www/mozilla/Makefile
@@ -0,0 +1,162 @@
+# New ports collection makefile for: mozilla
+# Date created: 31 Mar 1998
+# Whom: eivind/dima/jseger
+#
+# $FreeBSD$
+# $MCom$
+#
+
+PORTNAME= mozilla
+PORTVERSION= 1.7.13
+PORTREVISION?= 3
+PORTEPOCH= 2
+CATEGORIES?= www
+MASTER_SITES= ${MASTER_SITE_MOZILLA} \
+ ${MASTER_SITE_LOCAL:S/$/:local/}
+MASTER_SITE_SUBDIR= mozilla/releases/${PORTNAME}${PORTVERSION}/source \
+ ahze/:local
+DISTFILES= ${PORTNAME}-${PORTVERSION}-source${EXTRACT_SUFX} \
+ libart_lgpl-1${EXTRACT_SUFX}:local
+
+MAINTAINER= gnome@FreeBSD.org
+COMMENT= The open source, standards compliant web browser
+
+DEPRECATED= The mozilla team has shifted the development branch of mozilla to \
+ seamonkey, this port is outdated and has many vulnerabilities. \
+ Please consider using www/seamonkey or www/firefox instead.
+
+MAKE_ENV+= LD_LIBRARY_PATH=${WRKSRC}/dist/bin
+USE_GMAKE= yes
+USE_BZIP2= yes
+WANT_GNOME= yes
+HAS_CONFIGURE= yes
+MAKE_ENV= LD_LIBRARY_PATH=${WRKSRC}/dist/bin
+ALL_TARGET= default
+
+CONFIGURE_ENV= LOCALBASE=${LOCALBASE}
+
+MOZ_EXTENSIONS= default
+MOZ_EXPORT+= MOZ_INTERNAL_LIBART_LGPL=1
+MOZ_MK_OPTIONS+=MOZ_INTERNAL_LIBART_LGPL=1
+MOZ_OPTIONS+= --enable-svg-renderer-libart --enable-svg \
+ --disable-plaintext-editor-only
+
+NOT_FOR_ARCHS= ia64
+
+OPTIONS=CALENDAR "Enable the Calendar module" off \
+ MAILNEWS "Enable Mail and News modules" on \
+ COMPOSER "Enable the HTML Composer module" on \
+ LDAP "Enable LDAP support for Mailnews" on \
+ CHATZILLA "Enable the Chatzilla IRC module" on \
+ XMLTERM "Enable the XMLTerm module" on \
+ JAVASCRIPT_DEBUGGER "Enable DTD and JavaScript debuggers" off \
+ SMB "Enable smb:// URI support using gnomevfs" off
+
+.if !defined(WITHOUT_MAILNEWS)
+GECKO_PLIST_PRE_FILES= lib/${MOZILLA}/defaults/isp/US/movemail.rdf \
+ lib/${MOZILLA}/defaults/isp/movemail.rdf
+GECKO_PLIST_PRE_DIRS= lib/${MOZILLA}/defaults/isp/US/ \
+ lib/${MOZILLA}/defaults/isp
+.endif
+
+.include <bsd.port.pre.mk>
+
+# libart patches
+.if ${OSVERSION} < 500035
+EXTRA_PATCHES+= ${FILESDIR}/extra-patch-nsSVGLibartGlyphMetricsFT.cpp
+.else
+EXTRA_PATCHES+= ${FILESDIR}/extra-patch2-nsSVGLibartGlyphMetricsFT.cpp
+.endif
+
+LATEST_LINK= ${MOZILLA}
+
+.if ${ARCH} == "alpha" && ${OSVERSION} < 500035
+IGNORE= core dumps on ${ARCH} during post-build
+.endif
+
+.if defined(WITH_CALENDAR) && (defined(WITHOUT_MAILNEWS) || \
+ defined(WITHOUT_COMPOSER))
+BROKEN= Calendar requires Composer and Mailnews support.
+.endif
+.if defined(WITHOUT_MAILNEWS)
+MOZ_OPTIONS+= --disable-ldap --disable-mailnews
+.else
+# mail and news desired, but not LDAP
+.if defined(WITHOUT_LDAP)
+MOZ_OPTIONS+= --disable-ldap --enable-mailnews
+.else
+MOZ_OPTIONS+= --enable-ldap --enable-mailnews
+.endif
+.endif
+
+.if !defined(WITHOUT_CHATZILLA)
+MOZ_EXTENSIONS:= ${MOZ_EXTENSIONS},irc
+.endif
+
+.if !defined(WITHOUT_XMLTERM) && defined(WITH_JAVASCRIPT_DEBUGGER)
+MOZ_EXTENSIONS:= ${MOZ_EXTENSIONS},xmlterm
+.endif
+
+.if defined(WITH_JAVASCRIPT_DEBUGGER)
+MOZ_OPTIONS+= --enable-jsd \
+ --enable-dtd-debug
+.else
+MOZ_OPTIONS+= --disable-jsd \
+ --disable-dtd-debug
+.endif
+
+.if defined(WITH_CALENDAR)
+MOZ_OPTIONS+= --enable-calendar
+.endif
+
+.if defined(WITHOUT_COMPOSER)
+MOZ_OPTIONS+= --disable-composer
+.endif
+
+post-patch:
+ @${FIND} ${WRKSRC}/other-licenses/libical -name "*.c" | ${XARGS} \
+ ${REINPLACE_CMD} 's|<malloc.h>|<stdlib.h>|g'
+ @${REINPLACE_CMD} -e '/accessibility.typeaheadfind.enablesound/s/true/false/' \
+ ${WRKSRC}/modules/libpref/src/init/all.js
+ @${REINPLACE_CMD} -e 's|<iconv.h>|\"${LOCALBASE}/include/iconv.h\"|g' \
+ ${WRKSRC}/configure \
+ ${WRKSRC}/intl/uconv/native/nsNativeUConvService.cpp \
+ ${WRKSRC}/xpcom/io/nsNativeCharsetUtils.cpp
+ @${SED} -e 's|%%PREFIX%%|${PREFIX}|g' \
+ < ${FILESDIR}/mozilla.desktop.in > \
+ ${WRKDIR}/mozilla.desktop
+
+pre-install:
+ if [ ! -L ${PREFIX}/lib/browser_plugins/libjavaplugin_oji.so ]; then \
+ for jpi in ${JPI_LIST}; do \
+ if [ -f $${jpi} ]; then \
+ ${ECHO_CMD} lib/browser_plugins/libjavaplugin_oji.so >> ${PLIST} ; \
+ break; \
+ fi; \
+ done; \
+ fi
+.if !defined(WITHOUT_MAILNEWS)
+ @${CP} -RL ${WRKSRC}/dist/bin/defaults/isp ${FAKEDIR}/lib/${MOZILLA}/defaults
+.endif
+ ${ECHO_CMD} share/applications/mozilla.desktop >> ${PLIST}
+ ${ECHO_CMD} "@unexec ${RMDIR} %D/share/applications 2>/dev/null || ${TRUE}" >> ${PLIST}
+
+do-install:
+ if [ ! -L ${PREFIX}/lib/browser_plugins/libjavaplugin_oji.so ]; then \
+ for jpi in ${JPI_LIST}; do \
+ if [ -f $${jpi} ]; then \
+ ${LN} -sf $${jpi} \
+ ${PREFIX}/lib/browser_plugins/libjavaplugin_oji.so ; \
+ break; \
+ fi; \
+ done; \
+ fi
+ ${MKDIR} ${PREFIX}/share/applications
+ ${INSTALL_DATA} ${WRKDIR}/mozilla.desktop \
+ ${PREFIX}/share/applications
+
+post-install:
+ @${CHMOD} -R u-w ${PREFIX}/lib/${MOZILLA}/components
+
+.include "${.CURDIR}/Makefile.common"
+.include <bsd.port.post.mk>
diff --git a/www/mozilla/Makefile.common b/www/mozilla/Makefile.common
new file mode 100644
index 0000000..391eb67
--- /dev/null
+++ b/www/mozilla/Makefile.common
@@ -0,0 +1,433 @@
+# Makefile.common handles common tasks and dependencies for mozilla ports.
+#
+# Date created: 12 Nov 2005
+# Whom: Michael Johnson <ahze@FreeBSD.org>
+#
+# $FreeBSD$
+# $MCom$
+#
+
+# This file contains some reusable components for mozilla ports. It's of
+# use primarily to apps from the mozilla project itself (such as Firefox,
+# Thunderbird, etc.), and probably won't be of use for gecko-based ports
+# like epiphany, galeon, etc. The reusable components for gecko-based ports
+# lives in www/mozilla/bsd.gecko.mk.
+#
+#
+# Ports can use the following:
+#
+# GECKO_PLIST_PRE_FILES List of files to add to the beginning of plist
+# GECKO_PLIST_PRE_DIRS
+#
+# MOZILLA_PLIST_DIRS List of directories to descend into when
+# installing and creating the plist
+# MOZ_PIS_SCRIPTS List of scripts residing in ${FILESDIR} to
+# be filtered through MOZCONFIG_SED and installed
+# along with our Pluggable Init Scripts (PIS)
+# MOZ_SED_ARGS sed(1) commands through which MOZ_PIS_SCRIPTS
+# are filtered. There is a default set defined here,
+# so you probably want to add to MOZ_SED_ARGS rather
+# than clobber it
+#
+# MOZ_OPTIONS configure arguments (added to .mozconfig). If
+# NOMOZCONFIG is defined, you probably want to set
+# CONFIGURE_ARGS+=${MOZ_OPTIONS}
+# MOZ_MK_OPTIONS make(1) arguments (added to .mozconfig). If
+# NOMOZCONFIG is defined, you probably want to set
+# MAKE_ARGS+=${MOZ_MK_OPTIONS}
+# MOZ_EXPORT environment variables for the build process
+# (added to .mozconfig). If NOMOZCONFIG is defined,
+# you probably want to set MAKE_ENV+=${MOZ_EXPORT}
+# MOZ_EXTENSIONS A list of extensions to build
+# MOZ_GRAPHICS A list of image decoders to build
+# MOZ_PROTOCOLS A list of protocols to build (http, ftp, etc.)
+#
+# PORT_MOZCONFIG Defaults to ${FILESDIR}/mozconfig.in, but can
+# be set to a generic mozconfig included with
+# the port
+#
+# NOGECKO_INSTALL Don't install the built gecko (most likely
+# for testing)
+# NOGECKO_PLIST Don't create a dynamically-generated playlist
+# NOMOZCONFIG Don't drop a customized .mozconfig into the
+# build directory. Options will have to be
+# specified in CONFIGURE_ARGS instead
+
+BUILD_DEPENDS+= zip:${PORTSDIR}/archivers/zip
+LIB_DEPENDS+= jpeg.9:${PORTSDIR}/graphics/jpeg \
+ png.5:${PORTSDIR}/graphics/png \
+ nspr4:${PORTSDIR}/devel/nspr \
+ nss3:${PORTSDIR}/security/nss \
+ Xft.2:${PORTSDIR}/x11-fonts/libXft
+
+MAINTAINER?= gnome@FreeBSD.org
+
+MOZILLA?= ${PORTNAME}
+MOZILLA_VER?= ${PORTVERSION}
+MOZILLA_BIN?= ${PORTNAME}-bin
+MOZ_RPATH?= ${MOZILLA}
+USE_GNOME+= gtk20 libidl desktopfileutils
+USE_ICONV= yes
+USE_PERL5_BUILD=yes
+USE_XLIB= yes
+
+MOZILLA_SUFX?= none
+WRKSRC?= ${WRKDIR}/mozilla
+FAKEDIR?= ${WRKDIR}/fake
+PLIST?= ${WRKDIR}/plist
+MASTER_DIR?= ${.CURDIR}/../../www/mozilla
+
+KRB5_HOME?= /usr
+BROWSER_PLUGINS_DIR?= lib/browser_plugins
+MOZ_PIS_DIR?= lib/${MOZILLA}/init.d
+
+ESD_LIB?= libesd.so.2
+FREETYPE_LIB?= libfreetype.so.9
+
+GENERIC_MOZCONFIG?= ${.CURDIR}/../../www/mozilla/files/mozconfig-generic.in
+PORT_MOZCONFIG?= ${FILESDIR}/mozconfig.in
+MOZCONFIG?= ${WRKSRC}/.mozconfig
+MOZILLA_PLIST_DIRS?= bin include lib share/idl
+GECKO_PTHREAD_LIBS!=${CC} -dumpspecs | ${GREP} -m 1 pthread | ${SED} -e 's|^.*%{\!pg: %{pthread:|| ; s|}.*$$||' || ${TRUE}
+PKGINSTALL?= ${WRKDIR}/pkg-install
+PKGDEINSTALL?= ${WRKDIR}/pkg-deinstall
+MASTER_MOZDIR?= ${PORTSDIR}/www/mozilla
+PKGINSTALL_INC?= ${MASTER_MOZDIR}/pkg-install.in
+PKGDEINSTALL_INC?= ${MASTER_MOZDIR}/pkg-deinstall.in
+
+EXTRACT_AFTER_ARGS?= | ${TAR} -xf - --exclude */CVS/* \
+ --exclude */macbuild/* \
+ --exclude */package/* \
+ --exclude mozilla/jpeg \
+ --exclude mozilla/dbm \
+ --exclude mozilla/security/nss \
+ --exclude mozilla/gc/boehm \
+ --exclude mozilla/gfx/cairo
+
+JPI_LIST?=\
+ ${LOCALBASE}/jdk1.5.0/jre/plugin/${ARCH}/ns7/libjavaplugin_oji.so \
+ ${LOCALBASE}/jdk1.4.2/jre/plugin/${ARCH}/ns610/libjavaplugin_oji.so
+
+MOZ_PKGCONFIG_FILES?= ${MOZILLA}-gtkmozembed ${MOZILLA}-js \
+ ${MOZILLA}-xpcom ${MOZILLA}-plugin
+
+CPPFLAGS+= -I${LOCALBASE}/include/nss -I${LOCALBASE}/include/nss/nss
+CFLAGS+= ${PTHREAD_CFLAGS}
+LDFLAGS+= -L${LOCALBASE}/lib/nss -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}
+LIBS+= ${PTHREAD_LIBS} -L${LOCALBASE}/lib -liconv
+
+_USE_GECKO_OPTIONS_ALL= java debug logging optimized_cflags
+
+.if !defined(USE_GECKO_OPTIONS)
+USE_GECKO_OPTIONS= debug logging optimized_cflags
+.endif
+
+debug_OPTION= "Build a debugging image" off
+java_OPTION= "Enable JAVA xpcom" off
+logging_OPTION= "Enable additional log messages" off
+optimized_cflags_OPTION= "Enable some additional optimizations" off
+
+.for option in ${USE_GECKO_OPTIONS:L}
+.if ${_USE_GECKO_OPTIONS_ALL:M${option}}!=""
+OPTIONS+= ${option:U} ${${option}_OPTION}
+_${option}= ${TRUE}
+.endif
+.endfor
+
+# Standard options from README
+MOZ_TOOLKIT?= gtk2
+MOZ_OPTIONS+= --enable-crypto \
+ --disable-tests \
+ --enable-default-toolkit=${MOZ_TOOLKIT} \
+ --enable-xft \
+ --with-pthreads
+# Configure options for install
+MOZ_OPTIONS+= --x-includes=${LOCALBASE}/include \
+ --x-libraries=${LOCALBASE}/lib
+.if !defined(MOZ_EXTENSIONS)
+MOZ_OPTIONS+= --enable-extensions=default
+.else
+MOZ_OPTIONS+= --enable-extensions=${MOZ_EXTENSIONS}
+.endif
+.if !defined(MOZ_GRAPHICS)
+MOZ_OPTIONS+= --enable-image-decoders=default
+.else
+MOZ_OPTIONS+= --enable-image-decoders=${MOZ_GRAPHICS}
+.endif
+.if !defined(MOZ_PROTOCOLS)
+MOZ_OPTIONS+= --enable-necko-protocols=default
+.else
+MOZ_OPTIONS+= --enable-necko-protocols=${MOZ_PROTOCOLS}
+.endif
+# others
+MOZ_OPTIONS+= --with-system-jpeg=${LOCALBASE} \
+ --with-system-zlib=/usr \
+ --with-system-png=${LOCALBASE} \
+ --with-gssapi=${KRB5_HOME} \
+ --with-system-nspr \
+ --disable-auto-deps \
+ --enable-chrome-format=jar \
+ --disable-cpp-exceptions \
+ --disable-cpp-rtti \
+ --disable-glibtest \
+ --disable-gtktest \
+ --disable-freetypetest \
+ --enable-double-buffer \
+ --enable-mathml \
+ --disable-installer \
+ --disable-md \
+ --disable-pedantic \
+ --disable-bidi \
+ --disable-xterm-updates \
+ --enable-xinerama
+MOZ_MK_OPTIONS+= XP_UNIX=1 \
+ PERL=${PERL}
+
+.if defined(WITH_OPTIMIZED_CFLAGS)
+CFLAGS:= ${CFLAGS} -O2 -fno-strict-aliasing ${EXTRA_CFLAGS}
+WITH_OPTIMIZE?= -O2
+.else
+CFLAGS:= ${CFLAGS} ${EXTRA_CFLAGS}
+WITH_OPTIMIZE?=
+.endif
+
+.if defined(WITH_SMB)
+USE_GNOME+= gnomevfs2
+MOZ_OPTIONS+= --enable-gnomevfs
+.endif
+
+.if defined(WITH_DEBUG)
+MOZ_OPTIONS+= --enable-debug \
+ --disable-strip
+WITH_LOGGING= yes
+.else
+MOZ_OPTIONS+= --disable-debug \
+ --enable-optimize=${WITH_OPTIMIZE} \
+ --enable-strip
+.endif
+
+.if defined(WITH_JAVA) && defined(_WITH_JAVA)
+USE_JAVA= yes
+JAVA_VERSION+= 1.4+
+JAVA_OS+= native
+CONFIGURE_ENV+= JAVA_HOME="${JAVA_HOME}"
+MOZ_OPTIONS+= --enable-javaxpcom
+.endif
+
+.if defined(WITH_LOGGING)
+MOZ_OPTIONS+= --enable-logging
+.else
+MOZ_OPTIONS+= --disable-logging
+.endif
+
+MOZ_SED_ARGS+= -e's|@CPPFLAGS@|${CPPFLAGS}|g' \
+ -e 's|@CFLAGS@|${CFLAGS}|g' \
+ -e 's|@LDFLAGS@|${LDFLAGS}|g' \
+ -e 's|@LIBS@|${LIBS}|g' \
+ -e 's|@X11BASE@|${LOCALBASE}|g' \
+ -e 's|@LOCALBASE@|${LOCALBASE}|g' \
+ -e 's|@FAKEDIR@|${FAKEDIR}|g' \
+ -e 's|@PERL@|${PERL5}|g' \
+ -e 's|@KRB5_HOME@|${KRB5_HOME}|g' \
+ -e 's|@MOZDIR@|${PREFIX}/lib/${MOZILLA}|g' \
+ -e 's|%%PREFIX%%|${PREFIX}|g' \
+ -e 's|%%CFLAGS%%|${CFLAGS}|g' \
+ -e 's|%%LDFLAGS%%|${LDFLAGS}|g' \
+ -e 's|%%LIBS%%|${LIBS}|g' \
+ -e 's|%%X11BASE%%|${LOCALBASE}|g' \
+ -e 's|%%LOCALBASE%%|${LOCALBASE}|g' \
+ -e 's|%%FAKEDIR%%|${FAKEDIR}|g' \
+ -e 's|%%PERL%%|${PERL5}|g' \
+ -e 's|%%KRB5_HOME%%|${KRB5_HOME}|g' \
+ -e 's|%%MOZILLA%%|${MOZILLA}|g' \
+ -e 's|%%MOZILLA_BIN%%|${MOZILLA_BIN}|g' \
+ -e 's|%%MOZDIR%%|${PREFIX}/lib/${MOZILLA}|g'
+MOZCONFIG_SED?= ${SED} ${MOZ_SED_ARGS}
+
+.if ${OSVERSION} >= 700000 || exists(/usr/lib/libbz2_p.a)
+LIB_BZ2= -lbz2_p
+.else
+LIB_BZ2= -lbz2
+.endif
+
+post-patch: gecko-post-patch gecko-moz-pis-patch
+
+gecko-post-patch:
+.if exists(${PKGINSTALL_INC})
+ @${MOZCONFIG_SED} < ${PKGINSTALL_INC} > ${PKGINSTALL}
+.endif
+.if exists(${PKGDEINSTALL_INC})
+ @${MOZCONFIG_SED} < ${PKGDEINSTALL_INC} > ${PKGDEINSTALL}
+.endif
+ @${RM} -f ${MOZCONFIG}
+.if !defined(NOMOZCONFIG)
+.if exists(${GENERIC_MOZCONFIG})
+ @${MOZCONFIG_SED} < ${GENERIC_MOZCONFIG} >> ${MOZCONFIG}
+.endif
+ @if [ -e ${PORT_MOZCONFIG} ] ; then \
+ ${MOZCONFIG_SED} < ${PORT_MOZCONFIG} >> ${MOZCONFIG} ; \
+ fi
+.for arg in ${MOZ_OPTIONS}
+ @${ECHO_CMD} ac_add_options ${arg} >> ${MOZCONFIG}
+.endfor
+.for arg in ${MOZ_MK_OPTIONS}
+ @${ECHO_CMD} mk_add_options ${arg} >> ${MOZCONFIG}
+.endfor
+.for var in ${MOZ_EXPORT}
+ @${ECHO_CMD} "export ${var}" >> ${MOZCONFIG}
+.endfor
+.endif # .if !defined(NOMOZCONFIG)
+ @${REINPLACE_CMD} -e 's/%{idldir}/%idldir%/g ; \
+ s|"%FULL_NSPR_CFLAGS%"|`nspr-config --cflags`|g ; \
+ s|"%FULL_NSPR_LIBS%"|`nspr-config --libs`|g' \
+ ${WRKSRC}/build/unix/mozilla-config.in
+ @${REINPLACE_CMD} -e 's|<iconv.h>|\"${LOCALBASE}/include/iconv.h\"|g' \
+ ${WRKSRC}/configure \
+ ${WRKSRC}/intl/uconv/native/nsNativeUConvService.cpp \
+ ${WRKSRC}/xpcom/io/nsNativeCharsetUtils.cpp
+ @${REINPLACE_CMD} -e 's|%%MOZILLA%%|${MOZILLA}|g' \
+ ${WRKSRC}/config/autoconf.mk.in
+ @${REINPLACE_CMD} -e 's|-pthread|${PTHREAD_LIBS}|g ; \
+ s|echo aout|echo elf|g ; s|/usr/X11R6|${LOCALBASE}|g' \
+ ${WRKSRC}/security/coreconf/FreeBSD.mk \
+ ${WRKSRC}/js/src/Makefile.in
+ @if [ -d ${WRKSRC}/directory/c-sdk ]; then \
+ ${REINPLACE_CMD} -e 's|echo aout|echo elf|g' \
+ ${WRKSRC}/directory/c-sdk/config/FreeBSD.mk \
+ ${WRKSRC}/directory/c-sdk/configure ; \
+ fi
+ @${REINPLACE_CMD} -e 's|-lc_r|${PTHREAD_LIBS}|g ; \
+ s|-lpthread|${PTHREAD_LIBS}|g ; \
+ s|echo aout|echo elf|g ; \
+ s|/usr/X11R6|${LOCALBASE}|g' \
+ ${WRKSRC}/configure
+ @${REINPLACE_CMD} -e 's|%%PREFIX%%|${PREFIX}|g' \
+ ${WRKSRC}/build/unix/run-mozilla.sh
+ @${REINPLACE_CMD} -E -e 's|libesd\.so\.[0-9]+|libesd.so|g' \
+ ${WRKSRC}/widget/src/gtk2/nsSound.cpp
+ @${REINPLACE_CMD} -E -e 's|libcups\.so\.[0-9]+|libcups.so|g' \
+ ${WRKSRC}/*/*/*/nsDeviceContextSpecG.cpp
+ @${REINPLACE_CMD} -e 's|/usr/local/netscape|${LOCALBASE}|g ; \
+ s|/usr/local/lib/netscape|${LOCALBASE}/lib|g' \
+ ${WRKSRC}/xpcom/*/SpecialSystemDirectory.cpp
+ @if [ -n "`${PKG_INFO} -xI '^bind[0-9]*-base-[0-9]'`" ]; then \
+ ${ECHO_CMD} "${PKGNAME}: bind installed with PORT_REPLACES_BASE_BIND causes build problems."; \
+ ${FALSE}; \
+ fi
+
+# handles mozilla pis scripts.
+gecko-moz-pis-patch:
+.for moz in ${MOZ_PIS_SCRIPTS}
+ @${MOZCONFIG_SED} < ${FILESDIR}/${moz} > ${WRKDIR}/${moz}
+.endfor
+
+post-configure: gecko-post-configure
+
+gecko-post-configure:
+ @${ECHO_CMD} "#define JNIIMPORT" >> ${WRKSRC}/mozilla-config.h
+
+post-build: gecko-post-build
+
+gecko-post-build:
+ @${REINPLACE_CMD} -e "s|\(Libs:.*\)\($$\)|\1 -Wl,-rpath,${PREFIX}/lib/${MOZ_RPATH}\2|" \
+ ${WRKSRC}/build/unix/*.pc
+
+pre-install: gecko-moz-pis-pre-install gecko-pre-install port-pre-install gecko-create-plist
+
+.if !target(port-pre-install)
+port-pre-install:
+ @${DO_NADA}
+.endif
+
+gecko-pre-install:
+.if !defined(NOGECKO_PLIST)
+ @${RM} -rf ${FAKEDIR} ${PLIST}
+ @${TOUCH} -f ${PLIST}
+ @cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${GMAKE} ${MAKE_FLAGS} \
+ ${MAKEFILE} ${MAKE_ARGS} prefix=${FAKEDIR} ${INSTALL_TARGET}
+.if defined(MOZILLA_SUFX) && ${MOZILLA_SUFX}!="none"
+ ${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//} ${FAKEDIR}/bin/${MOZILLA}
+ ${MV} ${FAKEDIR}/bin/${MOZILLA:S/${MOZILLA_SUFX}//}-config ${FAKEDIR}/bin/${MOZILLA}-config
+.for pc in ${MOZ_PKGCONFIG_FILES:S|${MOZILLA_SUFX}||}
+ ${SED} -e 's|Requires: ${MOZILLA:S/${MOZILLA_SUFX}//}|Requires: ${MOZILLA}|' \
+ ${FAKEDIR}/lib/pkgconfig/${pc}.pc > ${FAKEDIR}/lib/pkgconfig/${pc:S/${MOZILLA:S,${MOZILLA_SUFX},,}/${MOZILLA}/}.pc
+.endfor
+ @${REINPLACE_CMD} -e 's|${MOZILLA}-bin|${MOZILLA:S/${MOZILLA_SUFX}//}|; \
+ s|$${progbase}-bin|${MOZILLA:S/${MOZILLA_SUFX}//}-bin|' \
+ ${FAKEDIR}/bin/${MOZILLA} \
+ ${FAKEDIR}/bin/${MOZILLA}-config
+.endif
+ @${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
+ ${FAKEDIR}/bin/${MOZILLA} \
+ ${FAKEDIR}/bin/${MOZILLA}-config
+ ${RM} -f ${FAKEDIR}/bin/*.bak
+.endif
+
+gecko-create-plist:
+.if !defined(NOGECKO_PLIST)
+# Create the plist
+.for f in ${GECKO_PLIST_PRE_FILES}
+ ${ECHO_CMD} ${f} >> ${PLIST}
+.endfor
+.for f in ${GECKO_PLIST_PRE_DIRS}
+ ${ECHO_CMD} "@dirrm ${f}" >> ${PLIST}
+.endfor
+ ${ECHO_CMD} "${BROWSER_PLUGINS_DIR}/.${MOZILLA}.keep" >> ${PLIST}
+ ${ECHO_CMD} "@unexec ${RMDIR} %D/${BROWSER_PLUGINS_DIR} 2>/dev/null || ${TRUE}" >> ${PLIST}
+ ${MKDIR} ${FAKEDIR}/libdata
+ ${MV} -f ${FAKEDIR}/lib/pkgconfig ${FAKEDIR}/libdata/
+ ${RM} -f ${FAKEDIR}/lib/pkgconfig
+.for dir in ${MOZILLA_PLIST_DIRS}
+ @cd ${FAKEDIR}/${dir} && ${FIND} -s * -type f -o -type l | \
+ ${SED} -e 's|^|${dir}/|' >> ${PLIST} && \
+ ${FIND} -d * -type d | \
+ ${SED} -e 's|^|@dirrm ${dir}/|' >> ${PLIST}
+.endfor
+.for pcfile in ${MOZ_PKGCONFIG_FILES}
+ ${ECHO_CMD} "libdata/pkgconfig/${pcfile}.pc" >> ${PLIST}
+ @${REINPLACE_CMD} -e 's|${FAKEDIR}|${PREFIX}|g' \
+ -e 's|${MOZILLA}-nspr = ${PORTVERSION}|nspr|' \
+ ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc
+.endfor
+ ${ECHO_CMD} "@exec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
+ ${ECHO_CMD} "@unexec ${LOCALBASE}/bin/update-desktop-database > /dev/null || ${TRUE}" >> ${PLIST}
+ ${ECHO_CMD} "@unexec ${RMDIR} %D/share/idl 2>/dev/null || ${TRUE}" >> ${PLIST}
+.endif # !defined(NOGECKO_PLIST)
+
+do-install: gecko-do-install
+
+gecko-do-install:
+.if !defined(NOGECKO_INSTALL)
+.for dir in ${MOZILLA_PLIST_DIRS}
+.if !exists(${PREFIX}/${dir})
+ ${MKDIR} ${PREFIX}/${dir}
+ ${CHMOD} 755 ${PREFIX}/${dir}
+.endif
+ cd ${FAKEDIR}/${dir} && ${FIND} . | \
+ ${CPIO} -pdm -L -R ${LIBOWN}:${LIBGRP} ${PREFIX}/${dir}
+.endfor
+.for pcfile in ${MOZ_PKGCONFIG_FILES}
+ ${INSTALL_DATA} ${FAKEDIR}/libdata/pkgconfig/${pcfile}.pc \
+ ${PREFIX}/libdata/pkgconfig/${pcfile}.pc
+.endfor
+ ${MKDIR} ${PREFIX}/${BROWSER_PLUGINS_DIR}
+ ${TOUCH} -f ${PREFIX}/${BROWSER_PLUGINS_DIR}/.${MOZILLA}.keep
+.endif # !defined(NOGECKO_INSTALL)
+
+gecko-moz-pis-pre-install:
+.if defined(MOZ_PIS_SCRIPTS)
+ ${MKDIR} ${FAKEDIR}/${MOZ_PIS_DIR}
+.for moz in ${MOZ_PIS_SCRIPTS}
+ ${INSTALL_SCRIPT} ${WRKDIR}/${moz} ${FAKEDIR}/${MOZ_PIS_DIR}
+.endfor
+.endif
+
+post-install: gecko-post-install
+
+gecko-post-install:
+.if !defined(PACKAGE_BUILDING) && !defined(NO_MOZPKGINSTALL)
+ @if [ -e ${PKGINSTALL} ] ; then \
+ ${SETENV} PKG_PREFIX=${PREFIX} ${SH} ${PKGINSTALL} ${PKGNAME} POST-INSTALL; \
+ fi
+.endif
+ @-update-desktop-database
diff --git a/www/mozilla/bsd.gecko.mk b/www/mozilla/bsd.gecko.mk
new file mode 100644
index 0000000..c7b6a52
--- /dev/null
+++ b/www/mozilla/bsd.gecko.mk
@@ -0,0 +1,171 @@
+#-*- mode: Fundamental; tab-width: 4; -*-
+# ex:ts=4
+#
+# $FreeBSD$
+# $MCom$
+#
+# 4 column tabs prevent hair loss and tooth decay!
+
+# bsd.gecko.mk abstracts the selection of gecko-based backends. It allows users
+# and porters to support any available gecko backend without needing to build
+# many conditional tests. ${USE_GECKO} is the list of backends that your port
+# can handle, and ${GECKO} is set by bsd.gecko.mk to be the chosen backend.
+# Users set ${WITH_GECKO} to the list of gecko backends they want on their system.
+
+.if defined(USE_GECKO)
+#.if defined(_POSTMKINCLUDED) && !defined(Gecko_Pre_Include)
+
+# Please make sure all changes to this file are passed through the maintainer.
+# Do not commit them yourself (unless of course you're the Port's Wraith ;).
+Gecko_Include_MAINTAINER= gnome@FreeBSD.org
+Gecko_Pre_Include= bsd.gecko.mk
+
+
+# Users should use the following syntax:
+#
+# WITH_GECKO= mozilla firefox seamonkey
+# Use mozilla whenever a port supports it, falling back on firefox and
+# then seamonkey.
+# WITH_GECKO= firefox
+# Sets your preferred backend. With this example, firefox will always
+# be chosen, unless the port doesn't support a firefox backend. In that
+# case, you get whatever the porter chose as the default. Better to use
+# the first example.
+#
+#
+# Ports should use the following:
+#
+# USE_GECKO= mozilla firefox seamonkey
+# The list of gecko backends that the port supports. Unless the user
+# overrides it with WITH_GECKO, the first gecko listed in USE_GECKO
+# will be the default. In the above example, www/mozilla will be used
+# as a gecko backend unless WITH_GECKO=firefox or WITH_GECKO=seamonkey
+# is defined by the user.
+#
+# USE_GECKO= firefox-devel<->firefox
+# This will sed -e 's/firefox/firefox-devel/' on Makefile.in's and configure
+# if ${GECKO}=="firefox-devel"
+#
+# Example:
+# USE_GECKO= mozilla firefox seamonkey
+# .include <bsd.port.pre.mk>
+# .include "${.CURDIR}/../../www/mozilla/bsd.gecko.mk"
+# post-patch:
+# @${REINPALCE_CMD} -e 's|mozilla-|${GECKO}-|' \
+# ${WRKSRC}/configure
+#
+# If you want your port to check the ${GECKO} variable to see which backend
+# has been chosen.
+#
+# Example:
+# USE_GECKO= mozilla firefox seamonkey
+# .include <bsd.port.pre.mk>
+# .include "${.CURDIR}/../../www/mozilla/bsd.gecko.mk"
+# post-patch:
+# .if ${GECKO}=="seamonkey"
+# @${REINPLACE_CMD} -e 's|mozilla-|seamonkey-|' \
+# ${WRKSRC}/configure
+# .endif
+
+.if ${OSVERSION} >= 500000
+.if (${ARCH}!="sparc64" || ${OSVERSION} >= 601101) && ${ARCH}!="ia64"
+_GECKO_ALL= firefox nvu seamonkey thunderbird xulrunner flock firefox15
+.endif
+.endif
+_GECKO_ALL+= mozilla
+
+thunderbird_PORTSDIR= mail
+
+.for gecko in ${_GECKO_ALL}
+${gecko}_PORTSDIR?= www
+${gecko}_DEPENDS?= ${PORTSDIR}/${${gecko}_PORTSDIR}/${gecko}
+${gecko}_PLIST?= ${LOCALBASE}/lib/${gecko}/libgtkembedmoz.so
+.endfor
+
+# Figure out which mozilla to use
+# Weed out bad options in USE_GECKO
+.for badgecko in ${USE_GECKO}
+. if ${_GECKO_ALL:M${badgecko:C/^([^<->]+).*/\1/}}!=""
+GOOD_USE_GECKO+= ${badgecko:C/^([^<->]+).*/\1/}
+. endif
+. if ${_GECKO_ALL:M${badgecko:C/^[^<->]+<->([^<->]+).*/\1/}}!="${badgecko:C/^([^<->]+).*/\1/}"
+${badgecko:C/^([^<->]+).*/\1/}_HACK= s:${badgecko:C/^[^<->]+<->([^<->]+).*/\1/}:${badgecko:C/^([^<->]+).*/\1/}:g
+. endif
+.endfor
+
+.undef GECKO_FALLTHROUGH
+.undef _FOUND_WITH_GECKO
+# Figure out which gecko to use and weed out the bad ones
+.if defined(WITH_GECKO) && defined(GOOD_USE_GECKO)
+. for badgecko in ${WITH_GECKO}
+. if ${GOOD_USE_GECKO:M${badgecko}}!=""
+GOOD_WITH_GECKO+= ${badgecko}
+. endif
+. endfor
+. if defined(GOOD_WITH_GECKO)
+. for gecko in ${GOOD_WITH_GECKO}
+. if !defined(GECKO_FALLTHROUGH)
+GECKO= ${gecko}
+GECKO_FALLTHROUGH= ${TRUE}
+_FOUND_WITH_GECKO= ${TRUE}
+. endif
+. endfor
+. endif
+.endif
+
+.if !defined(GECKO) && defined(GOOD_USE_GECKO)
+. for gecko in ${GOOD_USE_GECKO}
+. if !defined(GECKO_FALLTRHOUGH)
+GECKO= ${gecko}
+GECKO_FALLTRHOUGH= ${TRUE}
+. endif
+. endfor
+.endif
+
+# Generic defines
+BROWSER_LINUX_PLUGINS_DIR?= ${LOCALBASE}/lib/browser_linux_plugins
+BROWSER_PLUGINS_DIR?= ${LOCALBASE}/lib/browser_plugins
+
+GECKO_CONFIG?= ${LOCALBASE}/bin/${GECKO}-config
+XPIDL?= ${LOCALBASE}/lib/${GECKO}/xpidl
+XPIDL_INCL?= `${GECKO_CONFIG} --idlflags`
+
+.if defined(GECKO) && ${_GECKO_ALL:M${GECKO}}!=""
+BUILD_DEPENDS+= ${${GECKO}_PLIST}:${${GECKO}_DEPENDS}
+RUN_DEPENDS+= ${${GECKO}_PLIST}:${${GECKO}_DEPENDS}
+.else
+IGNORE= Unable to find a supported gecko, please check USE_GECKO
+.endif
+
+pre-everything:: _gecko-pre-everything
+
+_gecko-pre-everything::
+ @${ECHO_CMD} ""
+.if !defined(_FOUND_WITH_GECKO) && defined(WITH_GECKO)
+ @${ECHO_CMD} " Warning: ${PORTNAME} does not support any gecko you"
+ @${ECHO_CMD} " listed in WITH_GECKO=${WITH_GECKO}."
+ @${ECHO_CMD} " \"${GECKO}\" will be used"
+ @${ECHO_CMD} ""
+ @${ECHO_CMD} " for gecko support, but you can change that by using one of"
+ @${ECHO_CMD} " the following values:"
+.else
+ @${ECHO_CMD} " ${PORTNAME} is using ${GECKO} for gecko support, but you can"
+ @${ECHO_CMD} " change that by defining WITH_GECKO to the following values:"
+.endif
+ @${ECHO_CMD} ""
+.for gecko in ${GOOD_USE_GECKO}
+ @${ECHO_CMD} " ${gecko} "
+.endfor
+ @${ECHO_CMD} ""
+
+post-patch: gecko-post-patch
+
+gecko-post-patch:
+.if defined(${GECKO}_HACK)
+ ${FIND} ${WRKSRC} -name "Makefile.in" -type f -o -name "configure" -type f | \
+ ${XARGS} ${REINPLACE_CMD} -e ${${GECKO}_HACK}
+.endif
+
+#.endif # end it all
+.endif
+# HERE THERE BE TACOS
diff --git a/www/mozilla/distinfo b/www/mozilla/distinfo
new file mode 100644
index 0000000..8243935
--- /dev/null
+++ b/www/mozilla/distinfo
@@ -0,0 +1,6 @@
+MD5 (mozilla-1.7.13-source.tar.bz2) = eb0683207f7668319c65e403d04bfc41
+SHA256 (mozilla-1.7.13-source.tar.bz2) = 015018ffa88843563c8acbbcad16ffdc22a1e2d1a9e5a28972164ab86273b01e
+SIZE (mozilla-1.7.13-source.tar.bz2) = 30525187
+MD5 (libart_lgpl-1.tar.bz2) = c6dba83a091336ef8abdb7c85694f16e
+SHA256 (libart_lgpl-1.tar.bz2) = cd964fb67183c048f2c245ee26beeade29f3109e947c6d8a8993374c8f8392df
+SIZE (libart_lgpl-1.tar.bz2) = 102977
diff --git a/www/mozilla/files/extra-patch-nsSVGLibartGlyphMetricsFT.cpp b/www/mozilla/files/extra-patch-nsSVGLibartGlyphMetricsFT.cpp
new file mode 100644
index 0000000..758c014
--- /dev/null
+++ b/www/mozilla/files/extra-patch-nsSVGLibartGlyphMetricsFT.cpp
@@ -0,0 +1,88 @@
+--- layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp.orig Wed Mar 2 12:36:59 2005
++++ layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp Wed Mar 2 12:36:37 2005
+@@ -56,6 +56,13 @@
+ #include "nsArray.h"
+ #include "nsDataHashtable.h"
+
++
++#ifdef HAVE_CPP_2BYTE_WCHAR_T
++ typedef nsDependentString nsLiteralString;
++#else
++ typedef NS_ConvertASCIItoUTF16 nsLiteralString;
++#endif
++
+ /**
+ * \addtogroup libart_renderer Libart Rendering Engine
+ * @{
+@@ -112,7 +119,7 @@
+ nsCOMPtr<nsISVGGlyphMetricsSource> mSource;
+
+ public:
+- static nsDataHashtable<nsStringHashKey,nsDependentString*> sFontAliases;
++ static nsDataHashtable<nsStringHashKey,nsLiteralString*> sFontAliases;
+ };
+
+ /** @} */
+@@ -120,7 +127,7 @@
+ //----------------------------------------------------------------------
+ // nsSVGLibartGlyphMetricsFT implementation:
+
+-nsDataHashtable<nsStringHashKey,nsDependentString*>
++nsDataHashtable<nsStringHashKey,nsLiteralString*>
+ nsSVGLibartGlyphMetricsFT::sFontAliases;
+
+
+@@ -155,15 +162,15 @@
+
+ static NS_NAMED_LITERAL_STRING(arial, "arial");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("helvetica"),
+- &arial);
++ (nsLiteralString *)&arial);
+
+ static NS_NAMED_LITERAL_STRING(courier, "courier new");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("courier"),
+- &courier);
++ (nsLiteralString *)&courier);
+
+ static NS_NAMED_LITERAL_STRING(times, "times new roman");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("times"),
+- &times);
++ (nsLiteralString *)&times);
+ }
+
+ void NS_FreeSVGLibartGlyphMetricsFTGlobals()
+@@ -406,7 +413,7 @@
+ }
+ else {
+ // try alias if there is one:
+- nsDependentString *alias = nsnull;
++ nsLiteralString *alias = nsnull;
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Get(NS_ConvertUTF8toUCS2(family_name),
+ &alias);
+ if (alias) {
+@@ -440,19 +447,19 @@
+ return;
+ }
+
+- FTC_Image_Desc imageDesc;
+- imageDesc.font.face_id=(void*)font_data.font_entry.get(); // XXX do we need to addref?
++ FTC_ImageType imageDesc;
++ imageDesc->face_id = (FTC_FaceID)font_data.font_entry.get(); // XXX do we need to addref?
+ float twipstopixel = GetTwipsToPixels();
+ float scale = GetPixelScale();
+- imageDesc.font.pix_width = (int)((float)(font_data.font.size)*twipstopixel/scale);
+- imageDesc.font.pix_height = (int)((float)(font_data.font.size)*twipstopixel/scale);
+- imageDesc.image_type |= ftc_image_grays;
++ imageDesc->width = (int)((float)(font_data.font.size)*twipstopixel/scale);
++ imageDesc->height = (int)((float)(font_data.font.size)*twipstopixel/scale);
++ imageDesc->flags = 0;
+
+ // get the face
+ nsresult rv;
+ FTC_Manager mgr;
+ nsSVGLibartFreetype::ft2->GetFTCacheManager(&mgr);
+- rv = nsSVGLibartFreetype::ft2->ManagerLookupSize(mgr, &imageDesc.font, &mFace, nsnull);
++ rv = nsSVGLibartFreetype::ft2->ManagerLookupFace(mgr, imageDesc->face_id, &mFace);
+ NS_ASSERTION(mFace, "failed to get face/size");
+ }
+
diff --git a/www/mozilla/files/extra-patch2-nsSVGLibartGlyphMetricsFT.cpp b/www/mozilla/files/extra-patch2-nsSVGLibartGlyphMetricsFT.cpp
new file mode 100644
index 0000000..84392bd
--- /dev/null
+++ b/www/mozilla/files/extra-patch2-nsSVGLibartGlyphMetricsFT.cpp
@@ -0,0 +1,50 @@
+$NetBSD: patch-by,v 1.2 2004/07/05 14:22:42 taya Exp $
+
+diff -ru ../Orig/mozilla/layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp ./layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp
+--- ../Orig/mozilla/layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp 2004-03-19 10:36:16.000000000 +0900
++++ ./layout/svg/renderer/src/libart/nsSVGLibartGlyphMetricsFT.cpp 2004-07-04 22:59:19.000000000 +0900
+@@ -155,15 +155,15 @@
+
+ static NS_NAMED_LITERAL_STRING(arial, "arial");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("helvetica"),
+- &arial);
++ (nsDependentString *)&arial);
+
+ static NS_NAMED_LITERAL_STRING(courier, "courier new");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("courier"),
+- &courier);
++ (nsDependentString *)&courier);
+
+ static NS_NAMED_LITERAL_STRING(times, "times new roman");
+ nsSVGLibartGlyphMetricsFT::sFontAliases.Put(NS_LITERAL_STRING("times"),
+- &times);
++ (nsDependentString *)&times);
+ }
+
+ void NS_FreeSVGLibartGlyphMetricsFTGlobals()
+@@ -440,19 +440,19 @@
+ return;
+ }
+
+- FTC_Image_Desc imageDesc;
+- imageDesc.font.face_id=(void*)font_data.font_entry.get(); // XXX do we need to addref?
++ FTC_ImageType imageDesc;
++ imageDesc->face_id = (FTC_FaceID)font_data.font_entry.get(); // XXX do we need to addref?
+ float twipstopixel = GetTwipsToPixels();
+ float scale = GetPixelScale();
+- imageDesc.font.pix_width = (int)((float)(font_data.font.size)*twipstopixel/scale);
+- imageDesc.font.pix_height = (int)((float)(font_data.font.size)*twipstopixel/scale);
+- imageDesc.image_type |= ftc_image_grays;
++ imageDesc->width = (int)((float)(font_data.font.size)*twipstopixel/scale);
++ imageDesc->height = (int)((float)(font_data.font.size)*twipstopixel/scale);
++ imageDesc->flags = 0;
+
+ // get the face
+ nsresult rv;
+ FTC_Manager mgr;
+ nsSVGLibartFreetype::ft2->GetFTCacheManager(&mgr);
+- rv = nsSVGLibartFreetype::ft2->ManagerLookupSize(mgr, &imageDesc.font, &mFace, nsnull);
++ rv = nsSVGLibartFreetype::ft2->ManagerLookupFace(mgr, imageDesc->face_id, &mFace);
+ NS_ASSERTION(mFace, "failed to get face/size");
+ }
+
diff --git a/www/mozilla/files/mozconfig-generic.in b/www/mozilla/files/mozconfig-generic.in
new file mode 100644
index 0000000..9af187e
--- /dev/null
+++ b/www/mozilla/files/mozconfig-generic.in
@@ -0,0 +1,8 @@
+ac_add_options --prefix=@FAKEDIR@
+export CPPFLAGS="@CPPFLAGS@"
+export CFLAGS="@CFLAGS@"
+export LIBS="@LIBS@"
+export LDFLAGS="@LDFLAGS@"
+export CONFIG_SH=/bin/sh
+export XP_UNIX=1
+export PERL="@PERL@"
diff --git a/www/mozilla/files/mozilla.desktop.in b/www/mozilla/files/mozilla.desktop.in
new file mode 100644
index 0000000..1917656
--- /dev/null
+++ b/www/mozilla/files/mozilla.desktop.in
@@ -0,0 +1,169 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=Mozilla Web Browser
+Name[az]=Mozilla Veb Səyyahı
+Name[bg]=Интернет браузър (Mozilla)
+Name[bs]=Mozilla web preglednik
+Name[ca]=Navegador web Mozilla
+Name[cs]=ProhlížeÄ WWW Mozilla
+Name[cy]=Y Porwr Gwe Mozilla
+Name[da]=Mozilla - internetbrowser
+Name[de]=Mozilla Webbrowser
+Name[el]=ΠεÏιηγητής ΔιαδικτÏου Mozilla
+Name[en_CA]=Mozilla Web Browser
+Name[en_GB]=Mozilla Web Browser
+Name[es]=Navegador Web Mozilla
+Name[et]=Mozilla veebibrauser
+Name[eu]=Mozilla web arakatzailea
+Name[fa]=مرورگر وب Mozilla
+Name[fi]=Mozilla, WWW-selain
+Name[fr]=Navigateur Web Mozilla
+Name[ga]=Brabhsálaí Lín Mozilla
+Name[he]=דפדפן Mozilla
+Name[hr]=Mozilla Web preglednik
+Name[hu]=Mozilla webböngésző
+Name[id]=Web Browser Mozilla
+Name[it]=Browser web Mozilla
+Name[ja]=Mozilla ウェブ・ブラウザ
+Name[ko]=Mozilla 웹 브ë¼ìš°ì €
+Name[li]=Mozilla Web Browser
+Name[lt]=Mozilla web naršyklė
+Name[mk]=Mozilla Веб ПрелиÑтувач
+Name[mn]=Mozilla веб хөтөч
+Name[ms]=Pelungsur Web Mozilla
+Name[nb]=Mozilla nettleser
+Name[nl]=Mozilla webbrowser
+Name[nn]=Mozilla nettlesar
+Name[no]=Mozilla nettleser
+Name[pl]=PrzeglÄ…darka WWW Mozilla
+Name[pt]=Navegador Web Mozilla
+Name[pt_BR]=Navegador Web Mozilla
+Name[ro]=Navigatorul Mozilla
+Name[sl]=Spletni brskalnik Mozilla
+Name[sq]=Mozilla - Shfletuesi Web
+Name[sv]=Webbläsaren Mozilla
+Name[tk]=Mozilla Web Ahtarçisi
+Name[tr]=Mozilla Web Tarayıcı
+Name[uk]=ПереглÑдач web Mozilla
+Name[vi]=Trình Duyệt Web Mozilla
+Name[wa]=Betchteu waibe mozilla
+Name[zh_CN]=Mozilla Web æµè§ˆå™¨
+Name[zh_TW]=Mozilla ç¶²é ç€è¦½å™¨
+GenericName=Mozilla Web Browser
+GenericName[az]=Mozilla Veb Səyyahı
+GenericName[bg]=Интернет браузър (Mozilla)
+GenericName[bs]=Mozilla web preglednik
+GenericName[ca]=Navegador web Mozilla
+GenericName[cs]=ProhlížeÄ WWW Mozilla
+GenericName[cy]=Y Porwr Gwe Mozilla
+GenericName[da]=Mozilla - internetbrowser
+GenericName[de]=Mozilla Webbrowser
+GenericName[el]=ΠεÏιηγητής ΔιαδικτÏου Mozilla
+GenericName[en_CA]=Mozilla Web Browser
+GenericName[en_GB]=Mozilla Web Browser
+GenericName[es]=Navegador Web Mozilla
+GenericName[et]=Mozilla veebibrauser
+GenericName[eu]=Mozilla web arakatzailea
+GenericName[fa]=مرورگر وب Mozilla
+GenericName[fi]=Mozilla, WWW-selain
+GenericName[fr]=Navigateur Web Mozilla
+GenericName[ga]=Brabhsálaí Lín Mozilla
+GenericName[he]=דפדפן Mozilla
+GenericName[hr]=Mozilla Web preglednik
+GenericName[hu]=Mozilla webböngésző
+GenericName[id]=Web Browser Mozilla
+GenericName[it]=Browser web Mozilla
+GenericName[ja]=Mozilla ウェブ・ブラウザ
+GenericName[ko]=Mozilla 웹 브ë¼ìš°ì €
+GenericName[li]=Mozilla Web Browser
+GenericName[lt]=Mozilla web naršyklė
+GenericName[mk]=Mozilla Веб ПрелиÑтувач
+GenericName[mn]=Mozilla веб хөтөч
+GenericName[ms]=Pelungsur Web Mozilla
+GenericName[nb]=Mozilla nettleser
+GenericName[nl]=Mozilla webbrowser
+GenericName[nn]=Mozilla nettlesar
+GenericName[no]=Mozilla nettleser
+GenericName[pl]=PrzeglÄ…darka WWW Mozilla
+GenericName[pt]=Navegador Web Mozilla
+GenericName[pt_BR]=Navegador Web Mozilla
+GenericName[ro]=Navigatorul Mozilla
+GenericName[sl]=Spletni brskalnik Mozilla
+GenericName[sq]=Mozilla - Shfletuesi Web
+GenericName[sv]=Webbläsaren Mozilla
+GenericName[tk]=Mozilla Web Ahtarçisi
+GenericName[tr]=Mozilla Web Tarayıcı
+GenericName[uk]=ПереглÑдач web Mozilla
+GenericName[vi]=Trình Duyệt Web Mozilla
+GenericName[wa]=Betchteu waibe mozilla
+GenericName[zh_CN]=Mozilla Web æµè§ˆå™¨
+GenericName[zh_TW]=Mozilla ç¶²é ç€è¦½å™¨
+Comment=Browse the web
+Comment[ar]=ØªØµÙØ­ الانترنت
+Comment[az]=Vebi gəzin
+Comment[be]=Вандраваць па павуціньню
+Comment[bg]=Сърфиране в интернет
+Comment[bn]=ওয়েব বà§à¦°à¦¾à¦‰à¦œ করà§à¦¨
+Comment[bs]=Pregledaj na internetu
+Comment[ca]=Navegueu per la web
+Comment[cs]=Prohlížet WWW
+Comment[cy]=Pori'r we
+Comment[da]=Benyt internettet
+Comment[de]=Im Web surfen
+Comment[el]=ΠεÏιήγηση στον παγκόσμιο ιστό
+Comment[en_CA]=Browse the web
+Comment[en_GB]=Browse the web
+Comment[es]=Navegar por la web
+Comment[et]=Sirvi veebi
+Comment[eu]=Arakatu web-a
+Comment[fa]=مرور وب
+Comment[fi]=Selaa WWW:tä
+Comment[fr]=Naviguer sur Internet
+Comment[ga]=Brabhsáil an Líon
+Comment[gu]=વેબમાં શોધો
+Comment[he]=גלוש ברשת
+Comment[hi]=वेब बà¥à¤°à¤¾à¤‰à¤œà¤¼ करें
+Comment[hr]=Pregledaj Web
+Comment[hu]=A világháló böngészése
+Comment[id]=Jelajah web
+Comment[it]=Esplora il web
+Comment[ja]=ウェブを閲覧ã—ã¾ã™
+Comment[ko]=ì›¹ì„ ëŒì•„ 다닙니다
+Comment[li]=Blajere op internet
+Comment[lt]=Naršyti internete
+Comment[mk]=ПрелиÑтувајте го вебот
+Comment[ml]=വലകàµà´•െടàµà´Ÿàµ തിരയàµà´•
+Comment[mn]=Веб броузе хийх
+Comment[ms]=Layari web
+Comment[nb]=Surf på nettet
+Comment[nl]=Websurfen
+Comment[nn]=Surf på nettet
+Comment[no]=Surf på nettet
+Comment[pa]=ਵੈਬ ਬਰਾਊਜ਼
+Comment[pl]=PrzeglÄ…danie stron WWW
+Comment[pt]=Navegar na web
+Comment[pt_BR]=Navegar na web
+Comment[ro]=Navigare Internet
+Comment[ru]=Программа Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра веб-Ñтраниц
+Comment[sk]=Prehliadať internet
+Comment[sl]=Brskaj po spletu
+Comment[sq]=Eksploro web-in
+Comment[sr]=Прегледај веб
+Comment[sr@Latn]=Pregledaj veb
+Comment[sv]=Surfa på nätet
+Comment[ta]=வலையில௠உலாவà¯
+Comment[th]=ใช้งานเว็บบราวเซอร์ Mozilla
+Comment[tk]=Webi Ahtar
+Comment[tr]=Web'e Gözat
+Comment[uk]=Програма переглÑду web-Ñторінок
+Comment[vi]=Duyệt web
+Comment[wa]=Naivyî avå les waibes
+Comment[zh_CN]=æµè§ˆ Web
+Comment[zh_TW]=ç€è¦½ç¶²é 
+Exec=mozilla %U
+StartupNotify=false
+Terminal=false
+Type=Application
+Icon=%%PREFIX%%/lib/mozilla/chrome/icons/default/default.xpm
+Categories=Application;Network;
+MimeType=text/html;text/xml;application/xhtml+xml;
diff --git a/www/mozilla/files/patch-Double.cpp b/www/mozilla/files/patch-Double.cpp
new file mode 100644
index 0000000..5cd13e4
--- /dev/null
+++ b/www/mozilla/files/patch-Double.cpp
@@ -0,0 +1,59 @@
+--- extensions/transformiix/source/base/Double.cpp.orig Thu Jan 30 09:26:46 2003
++++ extensions/transformiix/source/base/Double.cpp Sun Nov 16 01:46:42 2003
+@@ -51,10 +51,10 @@
+ //A trick to handle IEEE floating point exceptions on FreeBSD - E.D.
+ #ifdef __FreeBSD__
+ #include <ieeefp.h>
+-#ifdef __alpha__
+-fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
+-#else
++#if defined(__i386__)
+ fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP|FP_X_DNML;
++#else
++fp_except_t allmask = FP_X_INV|FP_X_OFL|FP_X_UFL|FP_X_DZ|FP_X_IMP;
+ #endif
+ fp_except_t oldmask = fpsetmask(~allmask);
+ #endif
+@@ -75,22 +75,31 @@
+ #define TX_DOUBLE_HI32_EXPMASK 0x7ff00000
+ #define TX_DOUBLE_HI32_MANTMASK 0x000fffff
+
++union ui32dun {
++ PRUint32 i[2];
++ double d;
++};
++
+ //-- Initialize Double related constants
+ #ifdef IS_BIG_ENDIAN
+-const PRUint32 nanMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK,
+- 0xffffffff};
+-const PRUint32 infMask[2] = {TX_DOUBLE_HI32_EXPMASK, 0};
+-const PRUint32 negInfMask[2] = {TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0};
++const union ui32dun nanMask =
++ {{TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK, 0xffffffff}};
++const union ui32dun infMask =
++ {{TX_DOUBLE_HI32_EXPMASK, 0}};
++const union ui32dun negInfMask =
++ {{TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT, 0}};
+ #else
+-const PRUint32 nanMask[2] = {0xffffffff,
+- TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK};
+-const PRUint32 infMask[2] = {0, TX_DOUBLE_HI32_EXPMASK};
+-const PRUint32 negInfMask[2] = {0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT};
++const union ui32dun nanMask =
++ {{0xffffffff, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_MANTMASK}};
++const union ui32dun infMask =
++ {{0, TX_DOUBLE_HI32_EXPMASK}};
++const union ui32dun negInfMask =
++ {{0, TX_DOUBLE_HI32_EXPMASK | TX_DOUBLE_HI32_SIGNBIT}};
+ #endif
+
+-const double Double::NaN = *((double*)nanMask);
+-const double Double::POSITIVE_INFINITY = *((double*)infMask);
+-const double Double::NEGATIVE_INFINITY = *((double*)negInfMask);
++const double Double::NaN = nanMask.d;
++const double Double::POSITIVE_INFINITY = infMask.d;
++const double Double::NEGATIVE_INFINITY = negInfMask.d;
+
+ /*
+ * Determines whether the given double represents positive or negative
diff --git a/www/mozilla/files/patch-Makefile.in b/www/mozilla/files/patch-Makefile.in
new file mode 100644
index 0000000..5480cb7
--- /dev/null
+++ b/www/mozilla/files/patch-Makefile.in
@@ -0,0 +1,22 @@
+--- Makefile.in.orig Fri Aug 29 20:20:58 2003
++++ Makefile.in Sat Oct 18 15:34:15 2003
+@@ -67,8 +67,7 @@
+ $(tier_2_dirs) \
+ $(tier_9_dirs) \
+ $(tier_40_dirs) \
+- $(tier_50_dirs) \
+- $(NULL)
++ $(tier_50_dirs)
+
+ ifdef GC_LEAK_DETECTOR
+ DIRS += gc/boehm
+@@ -87,7 +86,8 @@
+ DIRS += $(tier_98_dirs)
+ endif
+
+-DIRS += $(tier_99_dirs)
++DIRS += $(tier_99_dirs) \
++ $(NULL)
+
+ #
+ # tier 0 - base build config dirs
diff --git a/www/mozilla/files/patch-bugzilla149334 b/www/mozilla/files/patch-bugzilla149334
new file mode 100644
index 0000000..fe1be5b
--- /dev/null
+++ b/www/mozilla/files/patch-bugzilla149334
@@ -0,0 +1,342 @@
+Index: gfx/idl/nsIFreeType2.idl
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/idl/nsIFreeType2.idl,v
+retrieving revision 1.10
+diff -u -3 -p -r1.10 nsIFreeType2.idl
+--- gfx/idl/nsIFreeType2.idl 15 Apr 2004 23:30:02 -0000 1.10
++++ gfx/idl/nsIFreeType2.idl 26 May 2004 10:00:54 -0000
+@@ -76,10 +76,11 @@ native FT_Pointer(FT_Pointer);
+ native FT_Sfnt_Tag(FT_Sfnt_Tag);
+ native FT_Size(FT_Size);
+
+-[ptr] native FTC_Image_Desc_p(FTC_Image_Desc);
++[ptr] native FTC_ImageType_p(FTC_ImageType);
+ native FTC_Face_Requester(FTC_Face_Requester);
+ native FTC_Font(FTC_Font);
+-native FTC_Image_Cache(FTC_Image_Cache);
++native FTC_FaceID(FTC_FaceID);
++native FTC_ImageCache(FTC_ImageCache);
+ native FTC_Manager(FTC_Manager);
+
+ // #ifdef MOZ_SVG
+@@ -99,7 +100,7 @@ interface nsIFreeType2 : nsISupports
+
+ readonly attribute FT_Library library;
+ readonly attribute FTC_Manager FTCacheManager;
+- readonly attribute FTC_Image_Cache ImageCache;
++ readonly attribute FTC_ImageCache ImageCache;
+
+ void doneFace(in FT_Face face);
+ void doneFreeType(in FT_Library lib);
+@@ -115,16 +116,16 @@ interface nsIFreeType2 : nsISupports
+ void outlineDecompose(in FT_Outline_p outline,
+ in const_FT_Outline_Funcs_p funcs, in voidPtr p);
+ void setCharmap(in FT_Face face, in FT_CharMap charmap);
+- void imageCacheLookup(in FTC_Image_Cache cache, in FTC_Image_Desc_p desc,
++ void imageCacheLookup(in FTC_ImageCache cache, in FTC_ImageType_p desc,
+ in FT_UInt gindex, out FT_Glyph glyph);
+- void managerLookupSize(in FTC_Manager manager, in FTC_Font font,
+- out FT_Face face, out FT_Size size);
++ void managerLookupFace(in FTC_Manager manager, in FTC_FaceID face_id,
++ out FT_Face face);
+ void managerDone(in FTC_Manager manager);
+ void managerNew(in FT_Library lib, in FT_UInt max_faces,
+ in FT_UInt max_sizes, in FT_ULong max_bytes,
+ in FTC_Face_Requester requester, in FT_Pointer req_data,
+ out FTC_Manager manager);
+- void imageCacheNew(in FTC_Manager manager, out FTC_Image_Cache cache);
++ void imageCacheNew(in FTC_Manager manager, out FTC_ImageCache cache);
+ /* #ifdef MOZ_SVG */
+ void glyphTransform(in FT_Glyph glyph, in FT_Matrix_p matrix,
+ in FT_Vector_p delta);
+Index: gfx/src/freetype/nsFreeType.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/freetype/nsFreeType.cpp,v
+retrieving revision 1.25
+diff -u -3 -p -r1.25 nsFreeType.cpp
+--- gfx/src/freetype/nsFreeType.cpp 17 Apr 2004 21:52:29 -0000 1.25
++++ gfx/src/freetype/nsFreeType.cpp 26 May 2004 10:00:54 -0000
+@@ -110,11 +110,11 @@ FtFuncList nsFreeType2::FtFuncs [] = {
+ {"FT_New_Face", NS_FT2_OFFSET(nsFT_New_Face), PR_TRUE},
+ {"FT_Outline_Decompose", NS_FT2_OFFSET(nsFT_Outline_Decompose), PR_TRUE},
+ {"FT_Set_Charmap", NS_FT2_OFFSET(nsFT_Set_Charmap), PR_TRUE},
+- {"FTC_Image_Cache_Lookup", NS_FT2_OFFSET(nsFTC_Image_Cache_Lookup), PR_TRUE},
+- {"FTC_Manager_Lookup_Size", NS_FT2_OFFSET(nsFTC_Manager_Lookup_Size), PR_TRUE},
++ {"FTC_ImageCache_Lookup", NS_FT2_OFFSET(nsFTC_Image_Cache_Lookup), PR_TRUE},
++ {"FTC_Manager_LookupFace", NS_FT2_OFFSET(nsFTC_Manager_LookupFace), PR_TRUE},
+ {"FTC_Manager_Done", NS_FT2_OFFSET(nsFTC_Manager_Done), PR_TRUE},
+ {"FTC_Manager_New", NS_FT2_OFFSET(nsFTC_Manager_New), PR_TRUE},
+- {"FTC_Image_Cache_New", NS_FT2_OFFSET(nsFTC_Image_Cache_New), PR_TRUE},
++ {"FTC_ImageCache_New", NS_FT2_OFFSET(nsFTC_Image_Cache_New), PR_TRUE},
+ // #ifdef MOZ_SVG
+ {"FT_Glyph_Transform", NS_FT2_OFFSET(nsFT_Glyph_Transform), PR_TRUE},
+ {"FT_Get_Kerning", NS_FT2_OFFSET(nsFT_Get_Kerning), PR_TRUE},
+@@ -282,7 +282,7 @@ nsFreeType2::SetCharmap(FT_Face face, FT
+ }
+
+ NS_IMETHODIMP
+-nsFreeType2::ImageCacheLookup(FTC_Image_Cache cache, FTC_Image_Desc *desc,
++nsFreeType2::ImageCacheLookup(FTC_ImageCache cache, FTC_ImageType *desc,
+ FT_UInt glyphID, FT_Glyph *glyph)
+ {
+ // call the FreeType2 function via the function pointer
+@@ -291,11 +291,11 @@ nsFreeType2::ImageCacheLookup(FTC_Image_
+ }
+
+ NS_IMETHODIMP
+-nsFreeType2::ManagerLookupSize(FTC_Manager manager, FTC_Font font,
+- FT_Face *face, FT_Size *size)
++nsFreeType2::ManagerLookupFace(FTC_Manager manager, FTC_FaceID face_id,
++ FT_Face *face)
+ {
+ // call the FreeType2 function via the function pointer
+- FT_Error error = nsFTC_Manager_Lookup_Size(manager, font, face, size);
++ FT_Error error = nsFTC_Manager_LookupFace(manager, face_id, face);
+ return error ? NS_ERROR_FAILURE : NS_OK;
+ }
+
+@@ -320,7 +320,7 @@ nsFreeType2::ManagerNew(FT_Library libra
+ }
+
+ NS_IMETHODIMP
+-nsFreeType2::ImageCacheNew(FTC_Manager manager, FTC_Image_Cache *cache)
++nsFreeType2::ImageCacheNew(FTC_Manager manager, FTC_ImageCache *cache)
+ {
+ // call the FreeType2 function via the function pointer
+ FT_Error error = nsFTC_Image_Cache_New(manager, cache);
+@@ -389,7 +389,7 @@ nsFreeType2::SupportsExtFunc(PRBool *res
+ }
+
+ NS_IMETHODIMP
+-nsFreeType2::GetImageCache(FTC_Image_Cache *aCache)
++nsFreeType2::GetImageCache(FTC_ImageCache *aCache)
+ {
+ *aCache = mImageCache;
+ return NS_OK;
+Index: gfx/src/freetype/nsFreeType.h
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/freetype/nsFreeType.h,v
+retrieving revision 1.17
+diff -u -3 -p -r1.17 nsFreeType.h
+--- gfx/src/freetype/nsFreeType.h 17 Apr 2004 21:52:29 -0000 1.17
++++ gfx/src/freetype/nsFreeType.h 26 May 2004 10:00:54 -0000
+@@ -120,13 +120,13 @@ typedef FT_Error (*FT_Outline_Decompose_
+ typedef FT_Error (*FT_New_Face_t)(FT_Library, const char*, FT_Long, FT_Face*);
+ typedef FT_Error (*FT_Set_Charmap_t)(FT_Face face, FT_CharMap charmap);
+ typedef FT_Error (*FTC_Image_Cache_Lookup_t)
+- (FTC_Image_Cache, FTC_Image_Desc*, FT_UInt, FT_Glyph*);
+-typedef FT_Error (*FTC_Manager_Lookup_Size_t)
+- (FTC_Manager, FTC_Font, FT_Face*, FT_Size*);
++ (FTC_ImageCache, FTC_ImageType*, FT_UInt, FT_Glyph*);
++typedef FT_Error (*FTC_Manager_LookupFace_t)
++ (FTC_Manager, FTC_FaceID, FT_Face*);
+ typedef FT_Error (*FTC_Manager_Done_t)(FTC_Manager);
+ typedef FT_Error (*FTC_Manager_New_t)(FT_Library, FT_UInt, FT_UInt, FT_ULong,
+ FTC_Face_Requester, FT_Pointer, FTC_Manager*);
+-typedef FT_Error (*FTC_Image_Cache_New_t)(FTC_Manager, FTC_Image_Cache*);
++typedef FT_Error (*FTC_Image_Cache_New_t)(FTC_Manager, FTC_ImageCache*);
+ // #ifdef MOZ_SVG
+ typedef FT_Error (*FT_Glyph_Transform_t)(FT_Glyph, FT_Matrix*, FT_Vector*);
+ typedef FT_Error (*FT_Get_Kerning_t)
+@@ -181,7 +181,7 @@ protected:
+ FT_Outline_Decompose_t nsFT_Outline_Decompose;
+ FT_Set_Charmap_t nsFT_Set_Charmap;
+ FTC_Image_Cache_Lookup_t nsFTC_Image_Cache_Lookup;
+- FTC_Manager_Lookup_Size_t nsFTC_Manager_Lookup_Size;
++ FTC_Manager_LookupFace_t nsFTC_Manager_LookupFace;
+ FTC_Manager_Done_t nsFTC_Manager_Done;
+ FTC_Manager_New_t nsFTC_Manager_New;
+ FTC_Image_Cache_New_t nsFTC_Image_Cache_New;
+@@ -229,7 +229,7 @@ protected:
+ PRLibrary *mSharedLib;
+ FT_Library mFreeTypeLibrary;
+ FTC_Manager mFTCacheManager;
+- FTC_Image_Cache mImageCache;
++ FTC_ImageCache mImageCache;
+
+ static nsHashtable *sFontFamilies;
+ static nsHashtable *sRange1CharSetNames;
+Index: gfx/src/ps/nsFontMetricsPS.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/ps/nsFontMetricsPS.cpp,v
+retrieving revision 1.43
+diff -u -3 -p -r1.43 nsFontMetricsPS.cpp
+--- gfx/src/ps/nsFontMetricsPS.cpp 17 Apr 2004 21:52:31 -0000 1.43
++++ gfx/src/ps/nsFontMetricsPS.cpp 26 May 2004 10:01:03 -0000
+@@ -1140,10 +1140,10 @@ nsFontPSFreeType::Init(nsITrueTypeFontCa
+
+ mPixelSize = NSToIntRound(app2dev * mFont->size);
+
+- mImageDesc.font.face_id = (void*)mEntry;
+- mImageDesc.font.pix_width = mPixelSize;
+- mImageDesc.font.pix_height = mPixelSize;
+- mImageDesc.image_type = 0;
++ mImageDesc->face_id = (FTC_FaceID)&mEntry;
++ mImageDesc->width = mPixelSize;
++ mImageDesc->height = mPixelSize;
++ mImageDesc->flags = 0;
+
+ nsresult rv;
+ mFt2 = do_GetService(NS_FREETYPE2_CONTRACTID, &rv);
+@@ -1189,7 +1189,7 @@ nsFontPSFreeType::GetWidth(const PRUnich
+ if (!face)
+ return 0;
+
+- FTC_Image_Cache iCache;
++ FTC_ImageCache iCache;
+ nsresult rv = mFt2->GetImageCache(&iCache);
+ if (NS_FAILED(rv)) {
+ NS_ERROR("Failed to get Image Cache");
+@@ -1227,8 +1227,8 @@ nsFontPSFreeType::getFTFace()
+
+ FTC_Manager cManager;
+ mFt2->GetFTCacheManager(&cManager);
+- nsresult rv = mFt2->ManagerLookupSize(cManager, &mImageDesc.font,
+- &face, nsnull);
++ nsresult rv = mFt2->ManagerLookupFace(cManager, mImageDesc->face_id,
++ &face);
+ NS_ASSERTION(rv==0, "failed to get face/size");
+ if (rv)
+ return nsnull;
+@@ -1621,16 +1621,16 @@ void nsFT2Type8Generator::GeneratePSFont
+ mEntry->GetFamilyName(fontName);
+ mEntry->GetStyleName(styleName);
+
+- mImageDesc.font.face_id = (void*)mEntry;
++ mImageDesc->face_id = (FTC_FaceID)&mEntry;
+ // TT glyph has no relation to size
+- mImageDesc.font.pix_width = 16;
+- mImageDesc.font.pix_height = 16;
+- mImageDesc.image_type = 0;
++ mImageDesc->width = 16;
++ mImageDesc->height = 16;
++ mImageDesc->flags = 0;
+ FT_Face face = nsnull;
+ FTC_Manager cManager;
+ mFt2->GetFTCacheManager(&cManager);
+- nsresult rv = mFt2->ManagerLookupSize(cManager, &mImageDesc.font,
+- &face, nsnull);
++ nsresult rv = mFt2->ManagerLookupFace(cManager, mImageDesc->face_id,
++ &face);
+ if (NS_FAILED(rv))
+ return;
+
+Index: gfx/src/ps/nsFontMetricsPS.h
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/ps/nsFontMetricsPS.h,v
+retrieving revision 1.25
+diff -u -3 -p -r1.25 nsFontMetricsPS.h
+--- gfx/src/ps/nsFontMetricsPS.h 17 Apr 2004 21:52:31 -0000 1.25
++++ gfx/src/ps/nsFontMetricsPS.h 26 May 2004 10:01:03 -0000
+@@ -319,7 +319,7 @@ protected:
+ nsCOMPtr<nsITrueTypeFontCatalogEntry> mFaceID;
+ nsCOMPtr<nsIFreeType2> mFt2;
+ PRUint16 mPixelSize;
+- FTC_Image_Desc mImageDesc;
++ FTC_ImageType mImageDesc;
+
+
+ static PRBool AddUserPref(nsIAtom *aLang, const nsFont& aFont,
+@@ -362,7 +362,7 @@ public:
+ protected:
+ nsCOMPtr<nsITrueTypeFontCatalogEntry> mEntry;
+ nsCOMPtr<nsIFreeType2> mFt2;
+- FTC_Image_Desc mImageDesc;
++ FTC_ImageType mImageDesc;
+ };
+ #endif
+
+Index: gfx/src/x11shared/nsFontFreeType.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/x11shared/nsFontFreeType.cpp,v
+retrieving revision 1.14
+diff -u -3 -p -r1.14 nsFontFreeType.cpp
+--- gfx/src/x11shared/nsFontFreeType.cpp 17 Apr 2004 21:52:34 -0000 1.14
++++ gfx/src/x11shared/nsFontFreeType.cpp 26 May 2004 10:01:03 -0000
+@@ -177,7 +177,7 @@ nsFreeTypeFont::getFTFace()
+ FTC_Manager mgr;
+ nsresult rv;
+ mFt2->GetFTCacheManager(&mgr);
+- rv = mFt2->ManagerLookupSize(mgr, &mImageDesc.font, &face, nsnull);
++ rv = mFt2->ManagerLookupFace(mgr, mImageDesc->face_id, &face);
+ NS_ASSERTION(NS_SUCCEEDED(rv), "failed to get face/size");
+ if (NS_FAILED(rv))
+ return nsnull;
+@@ -191,22 +191,15 @@ nsFreeTypeFont::nsFreeTypeFont(nsITrueTy
+ PRBool embedded_bimap = PR_FALSE;
+ mFaceID = aFaceID;
+ mPixelSize = aPixelSize;
+- mImageDesc.font.face_id = (void*)mFaceID;
+- mImageDesc.font.pix_width = aPixelSize;
+- mImageDesc.font.pix_height = aPixelSize;
+- mImageDesc.image_type = 0;
++ mImageDesc->face_id = (FTC_FaceID)&mFaceID;
++ mImageDesc->width = aPixelSize;
++ mImageDesc->height = aPixelSize;
++ mImageDesc->flags = 0;
+
+ if (aPixelSize < nsFreeType2::gAntiAliasMinimum) {
+- mImageDesc.image_type |= ftc_image_mono;
+ anti_alias = PR_FALSE;
+ }
+
+- if (nsFreeType2::gFreeType2Autohinted)
+- mImageDesc.image_type |= ftc_image_flag_autohinted;
+-
+- if (nsFreeType2::gFreeType2Unhinted)
+- mImageDesc.image_type |= ftc_image_flag_unhinted;
+-
+ PRUint32 num_embedded_bitmaps, i;
+ PRInt32* embedded_bitmapheights;
+ mFaceID->GetEmbeddedBitmapHeights(&num_embedded_bitmaps,
+@@ -218,7 +211,6 @@ nsFreeTypeFont::nsFreeTypeFont(nsITrueTy
+ if (embedded_bitmapheights[i] == aPixelSize) {
+ embedded_bimap = PR_TRUE;
+ // unhinted must be set for embedded bitmaps to be used
+- mImageDesc.image_type |= ftc_image_flag_unhinted;
+ break;
+ }
+ }
+@@ -312,7 +304,7 @@ nsFreeTypeFont::doGetBoundingMetrics(con
+ if (!face)
+ return NS_ERROR_FAILURE;
+
+- FTC_Image_Cache icache;
++ FTC_ImageCache icache;
+ mFt2->GetImageCache(&icache);
+ if (!icache)
+ return NS_ERROR_FAILURE;
+@@ -401,7 +393,7 @@ nsFreeTypeFont::GetWidth(const PRUnichar
+ if (!face)
+ return 0;
+
+- FTC_Image_Cache icache;
++ FTC_ImageCache icache;
+ mFt2->GetImageCache(&icache);
+ if (!icache)
+ return 0;
+@@ -723,7 +715,7 @@ nsFreeTypeXImage::DrawString(nsRendering
+ if (y%4==0) (*blendPixelFunc)(sub_image, y, ascent-1, black, 255/2);
+ #endif
+
+- FTC_Image_Cache icache;
++ FTC_ImageCache icache;
+ mFt2->GetImageCache(&icache);
+ if (!icache)
+ return 0;
+Index: gfx/src/x11shared/nsFontFreeType.h
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/x11shared/nsFontFreeType.h,v
+retrieving revision 1.10
+diff -u -3 -p -r1.10 nsFontFreeType.h
+--- gfx/src/x11shared/nsFontFreeType.h 17 Apr 2004 21:52:34 -0000 1.10
++++ gfx/src/x11shared/nsFontFreeType.h 26 May 2004 10:01:03 -0000
+@@ -110,7 +110,7 @@ protected:
+ XImage *GetXImage(PRUint32 width, PRUint32 height);
+ nsITrueTypeFontCatalogEntry *mFaceID;
+ PRUint16 mPixelSize;
+- FTC_Image_Desc mImageDesc;
++ FTC_ImageType mImageDesc;
+ nsCOMPtr<nsIFreeType2> mFt2;
+ };
+
diff --git a/www/mozilla/files/patch-build_unix_run-mozilla.sh b/www/mozilla/files/patch-build_unix_run-mozilla.sh
new file mode 100644
index 0000000..87114cc
--- /dev/null
+++ b/www/mozilla/files/patch-build_unix_run-mozilla.sh
@@ -0,0 +1,21 @@
+--- build/unix/run-mozilla.sh.orig Mon Dec 15 12:27:28 2003
++++ build/unix/run-mozilla.sh Wed Feb 11 14:24:17 2004
+@@ -355,7 +355,7 @@
+ fi
+ ##
+ ## Set LD_LIBRARY_PATH
+-LD_LIBRARY_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARY_PATH+":$LD_LIBRARY_PATH"}
++LD_LIBRARY_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:%%PREFIX%%/lib/browser_plugins:%%PREFIX%%/lib/browser_linux_plugins:${MRE_HOME}${LD_LIBRARY_PATH+":$LD_LIBRARY_PATH"}
+ if [ -n "$LD_LIBRARYN32_PATH" ]
+ then
+ LD_LIBRARYN32_PATH=${MOZ_DIST_BIN}:${MOZ_DIST_BIN}/plugins:${MRE_HOME}${LD_LIBRARYN32_PATH+":$LD_LIBRARYN32_PATH"}
+@@ -442,6 +442,9 @@
+ #
+ export MOZILLA_FIVE_HOME LD_LIBRARY_PATH
+ export SHLIB_PATH LIBPATH LIBRARY_PATH ADDON_PATH DYLD_LIBRARY_PATH
++
++MOZ_PLUGIN_PATH=%%PREFIX%%/lib/browser_plugins:%%PREFIX%%/lib/browser_linux_plugins
++export MOZ_PLUGIN_PATH
+
+ if [ $moz_debug -eq 1 ]
+ then
diff --git a/www/mozilla/files/patch-config-mkdepend-imakemdep.h b/www/mozilla/files/patch-config-mkdepend-imakemdep.h
new file mode 100644
index 0000000..b688e66
--- /dev/null
+++ b/www/mozilla/files/patch-config-mkdepend-imakemdep.h
@@ -0,0 +1,10 @@
+--- config/mkdepend/imakemdep.h Fri Sep 4 21:22:25 1998
++++ config/mkdepend/imakemdep.h Thu Oct 16 22:43:25 2003
+@@ -278,4 +278,7 @@
+ "-D__i386__",
+ # endif
++# if defined(__amd64__) || defined(__x86_64__)
++ "-D__amd64__ -D__x86_64__",
++# endif
+ # ifdef __GNUC__
+ "-traditional",
diff --git a/www/mozilla/files/patch-config::mkdepend::Makefile.in b/www/mozilla/files/patch-config::mkdepend::Makefile.in
new file mode 100644
index 0000000..bace012
--- /dev/null
+++ b/www/mozilla/files/patch-config::mkdepend::Makefile.in
@@ -0,0 +1,10 @@
+--- config/mkdepend/Makefile.in.orig Sun Dec 12 07:36:57 2004
++++ config/mkdepend/Makefile.in Sun Dec 12 07:37:55 2004
+@@ -57,6 +57,7 @@
+ include $(topsrcdir)/config/rules.mk
+
+ HOST_CFLAGS += -DINCLUDEDIR=\"/usr/include\" -DOBJSUFFIX=\".$(OBJ_SUFFIX)\"
++HOST_CFLAGS += $(XCFLAGS)
+
+ ifdef GNU_CC
+ _GCCDIR = $(shell $(CC) -print-file-name=include)
diff --git a/www/mozilla/files/patch-config::rules.mk b/www/mozilla/files/patch-config::rules.mk
new file mode 100644
index 0000000..16cb6ae
--- /dev/null
+++ b/www/mozilla/files/patch-config::rules.mk
@@ -0,0 +1,14 @@
+--- config/rules.mk.orig Sun May 18 16:10:18 2003
++++ config/rules.mk Sun Jul 20 18:07:26 2003
+@@ -448,7 +448,11 @@
+
+ ifeq ($(OS_ARCH),FreeBSD)
+ ifdef IS_COMPONENT
++ifneq (,$(filter alpha ia64,$(OS_TEST)))
++EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic -lc
++else
+ EXTRA_DSO_LDOPTS += -Wl,-Bsymbolic
++endif
+ endif
+ endif
+
diff --git a/www/mozilla/files/patch-config_autoconf.mk.in b/www/mozilla/files/patch-config_autoconf.mk.in
new file mode 100644
index 0000000..c4fa0b5
--- /dev/null
+++ b/www/mozilla/files/patch-config_autoconf.mk.in
@@ -0,0 +1,18 @@
+--- config/autoconf.mk.in.orig Mon Mar 15 22:56:25 2004
++++ config/autoconf.mk.in Fri Mar 19 15:17:50 2004
+@@ -31,13 +31,13 @@
+ prefix = @prefix@
+ exec_prefix = @exec_prefix@
+ bindir = @bindir@
+-includedir = @includedir@/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++includedir = @includedir@/%%MOZILLA%%
+ libdir = @libdir@
+ datadir = @datadir@
+ mandir = @mandir@
+ idldir = @datadir@/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
+
+-mozappdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
++mozappdir = $(libdir)/%%MOZILLA%%
+ mredir = $(libdir)/mre/mre-$(MOZ_APP_VERSION)
+ mrelibdir = $(mredir)/lib
+
diff --git a/www/mozilla/files/patch-extensions_p3p_Makefile.in b/www/mozilla/files/patch-extensions_p3p_Makefile.in
new file mode 100644
index 0000000..efade70
--- /dev/null
+++ b/www/mozilla/files/patch-extensions_p3p_Makefile.in
@@ -0,0 +1,30 @@
+--- extensions/p3p/Makefile.in.orig Sun Jul 9 14:10:16 2006
++++ extensions/p3p/Makefile.in Sun Jul 9 14:20:10 2006
+@@ -62,23 +62,23 @@
+ p3p200010.xsl: resources/content/p3p.xsl.in Makefile.in
+ @$(RM) -f $@
+ $(PP) -DNAMESPACE=http://www.w3.org/2000/10/18/P3Pv1 \
+- -DHAS_TMPL_RETENTION\
++ -DHAS_TMPL_RETENTION \
+ $< > $@
+
+ p3p200012.xsl: resources/content/p3p.xsl.in Makefile.in
+ @$(RM) -f $@
+ $(PP) -DNAMESPACE=http://www.w3.org/2000/12/P3Pv1 \
+- -DHAS_CALL_OURS\
++ -DHAS_CALL_OURS \
+ $< > $@
+
+ p3p200109.xsl: resources/content/p3p.xsl.in Makefile.in
+ @$(RM) -f $@
+ $(PP) -DNAMESPACE=http://www.w3.org/2001/09/P3Pv1 \
+- -DHAS_CALL_OURS\
++ -DHAS_CALL_OURS \
+ $< > $@
+
+ p3p200201.xsl: resources/content/p3p.xsl.in Makefile.in
+ @$(RM) -f $@
+ $(PP) -DNAMESPACE=http://www.w3.org/2002/01/P3Pv1 \
+- -DHAS_CALL_OURS -DHAS_PURPOSE_SRC\
++ -DHAS_CALL_OURS -DHAS_PURPOSE_SRC \
+ $< > $@
diff --git a/www/mozilla/files/patch-gcc4 b/www/mozilla/files/patch-gcc4
new file mode 100644
index 0000000..855a756
--- /dev/null
+++ b/www/mozilla/files/patch-gcc4
@@ -0,0 +1,79 @@
+Index: gfx/src/freetype/nsFreeType.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/gfx/src/freetype/nsFreeType.cpp,v
+retrieving revision 1.24
+diff -u -r1.24 nsFreeType.cpp
+--- gfx/src/freetype/nsFreeType.cpp 7 Feb 2004 15:22:30 -0000 1.24
++++ gfx/src/freetype/nsFreeType.cpp 4 Mar 2005 19:59:53 -0000
+@@ -96,7 +96,7 @@
+ // Define the FreeType2 functions we resolve at run time.
+ // see the comment near nsFreeType2::DoneFace() for more info
+ //
+-#define NS_FT2_OFFSET(f) (int)&((nsFreeType2*)0)->f
++#define NS_FT2_OFFSET(f) (NS_PTR_TO_INT32(&((nsFreeType2*)0)->f))
+ FtFuncList nsFreeType2::FtFuncs [] = {
+ {"FT_Done_Face", NS_FT2_OFFSET(nsFT_Done_Face), PR_TRUE},
+ {"FT_Done_FreeType", NS_FT2_OFFSET(nsFT_Done_FreeType), PR_TRUE},
+Index: widget/src/gtk2/nsDragService.cpp
+===================================================================
+RCS file: /cvsroot/mozilla/widget/src/gtk2/nsDragService.cpp,v
+retrieving revision 1.5
+diff -u -r1.5 nsDragService.cpp
+--- widget/src/gtk2/nsDragService.cpp 30 Oct 2003 01:48:41 -0000 1.5
++++ widget/src/gtk2/nsDragService.cpp 4 Mar 2005 20:00:01 -0000
+@@ -838,7 +838,7 @@
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
+ listTarget->target = g_strdup(gMimeListType);
+ listTarget->flags = 0;
+- listTarget->info = (guint)listAtom;
++ listTarget->info = (guint)(NS_PTR_TO_INT32(listAtom));
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
+ ("automatically adding target %s with id %ld\n",
+ listTarget->target, listAtom));
+@@ -877,7 +877,7 @@
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
+ listTarget->target = g_strdup(gTextUriListType);
+ listTarget->flags = 0;
+- listTarget->info = (guint)listAtom;
++ listTarget->info = (guint)NS_PTR_TO_INT32(listAtom);
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
+ ("automatically adding target %s with \
+ id %ld\n", listTarget->target, listAtom));
+@@ -914,7 +914,7 @@
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
+ target->target = g_strdup(flavorStr);
+ target->flags = 0;
+- target->info = (guint)atom;
++ target->info = (guint)NS_PTR_TO_INT32(atom);
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
+ ("adding target %s with id %ld\n",
+ target->target, atom));
+@@ -931,7 +931,7 @@
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
+ plainTarget->target = g_strdup(kTextMime);
+ plainTarget->flags = 0;
+- plainTarget->info = (guint)plainAtom;
++ plainTarget->info = (guint)NS_PTR_TO_INT32(plainAtom);
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
+ ("automatically adding target %s with \
+ id %ld\n", plainTarget->target, plainAtom));
+@@ -948,7 +948,7 @@
+ (GtkTargetEntry *)g_malloc(sizeof(GtkTargetEntry));
+ urlTarget->target = g_strdup(gMozUrlType);
+ urlTarget->flags = 0;
+- urlTarget->info = (guint)urlAtom;
++ urlTarget->info = (guint)NS_PTR_TO_INT32(urlAtom);
+ PR_LOG(sDragLm, PR_LOG_DEBUG,
+ ("automatically adding target %s with \
+ id %ld\n", urlTarget->target, urlAtom));
+--- mailnews/mime/src/mimeeobj.h.orig Sat Dec 16 14:01:13 2006
++++ mailnews/mime/src/mimeeobj.h Sat Dec 16 14:01:28 2006
+@@ -54,7 +54,7 @@ struct MimeExternalObjectClass {
+ MimeLeafClass leaf;
+ };
+
+-extern MimeExternalObjectClass mimeExternalObjectClass;
++extern "C" MimeExternalObjectClass mimeExternalObjectClass;
+
+ struct MimeExternalObject {
+ MimeLeaf leaf;
diff --git a/www/mozilla/files/patch-gfx-src-gtk-Makefile.in b/www/mozilla/files/patch-gfx-src-gtk-Makefile.in
new file mode 100644
index 0000000..ff8b699
--- /dev/null
+++ b/www/mozilla/files/patch-gfx-src-gtk-Makefile.in
@@ -0,0 +1,15 @@
+When using ``--with-system-nspr'' option, MOZ_COMPONENT_LIBS does not
+contain the ``-L../../../dist/lib'' -- only ``-L../../../dist/bin''.
+
+This causes an error, because libgfxshared_s is only under dist/lib.
+
+ -mi
+
+--- gfx/src/gtk/Makefile.in Mon Nov 10 07:24:51 2003
++++ gfx/src/gtk/Makefile.in Thu Jul 21 23:58:26 2005
+@@ -165,4 +165,5 @@
+ ifdef MOZ_ENABLE_GTK2
+ EXTRA_DSO_LDOPTS += $(MOZ_COMPONENT_LIBS) \
++ $(LIBS_DIR) \
+ -lgkgfx \
+ -lgfxshared_s \
diff --git a/www/mozilla/files/patch-gfx_src_ps_nsType1.cpp b/www/mozilla/files/patch-gfx_src_ps_nsType1.cpp
new file mode 100644
index 0000000..29752f3
--- /dev/null
+++ b/www/mozilla/files/patch-gfx_src_ps_nsType1.cpp
@@ -0,0 +1,58 @@
+--- gfx/src/ps/nsType1.cpp.orig Wed Dec 11 01:24:47 2002
++++ gfx/src/ps/nsType1.cpp Sun Sep 10 09:52:45 2006
+@@ -81,8 +81,8 @@
+ int wmode;
+ } FT2PT1_info;
+
+-static int cubicto(FT_Vector *aControlPt1, FT_Vector *aControlPt2,
+- FT_Vector *aEndPt, void *aClosure);
++static int cubicto(const FT_Vector *aControlPt1, const FT_Vector *aControlPt2,
++ const FT_Vector *aEndPt, void *aClosure);
+ static int Type1CharStringCommand(unsigned char **aBufPtrPtr, int aCmd);
+ static int Type1EncodeCharStringInt(unsigned char **aBufPtrPtr, int aValue);
+
+@@ -173,7 +173,7 @@
+ }
+
+ static PRBool
+-sideWidthAndBearing(FT_Vector *aEndPt, FT2PT1_info *aFti)
++sideWidthAndBearing(const FT_Vector *aEndPt, FT2PT1_info *aFti)
+ {
+ int aw = 0;
+ int ah = 0;
+@@ -216,7 +216,7 @@
+ }
+
+ static int
+-moveto(FT_Vector *aEndPt, void *aClosure)
++moveto(const FT_Vector *aEndPt, void *aClosure)
+ {
+ FT2PT1_info *fti = (FT2PT1_info *)aClosure;
+ FT_UShort upm = fti->face->units_per_EM;
+@@ -253,7 +253,7 @@
+ }
+
+ static int
+-lineto(FT_Vector *aEndPt, void *aClosure)
++lineto(const FT_Vector *aEndPt, void *aClosure)
+ {
+ FT2PT1_info *fti = (FT2PT1_info *)aClosure;
+ FT_UShort upm = fti->face->units_per_EM;
+@@ -279,7 +279,7 @@
+ }
+
+ static int
+-conicto(FT_Vector *aControlPt, FT_Vector *aEndPt, void *aClosure)
++conicto(const FT_Vector *aControlPt, const FT_Vector *aEndPt, void *aClosure)
+ {
+ FT2PT1_info *ftinfo = (FT2PT1_info *)aClosure;
+ FT_UShort upm = ftinfo->face->units_per_EM;
+@@ -311,7 +311,7 @@
+ }
+
+ static int
+-cubicto(FT_Vector *aControlPt1, FT_Vector *aControlPt2, FT_Vector *aEndPt,
++cubicto(const FT_Vector *aControlPt1, const FT_Vector *aControlPt2, const FT_Vector *aEndPt,
+ void *aClosure)
+ {
+ FT2PT1_info *ftinfo = (FT2PT1_info *)aClosure;
diff --git a/www/mozilla/files/patch-libm b/www/mozilla/files/patch-libm
new file mode 100644
index 0000000..7de64b2
--- /dev/null
+++ b/www/mozilla/files/patch-libm
@@ -0,0 +1,25 @@
+--- js/src/Makefile.in Thu Aug 4 22:26:52 2005
++++ js/src/Makefile.in Thu Aug 4 23:02:32 2005
+@@ -148,5 +148,4 @@
+ endif
+
+-FDLIBM_LIBRARY = fdlibm/$(LIB_PREFIX)fdm.$(LIB_SUFFIX)
+ JSMATH_PRELINK = jsmathtemp.o
+ JS_SAFE_ARENA = 1
+@@ -320,7 +319,4 @@
+ endif
+ @$(RM) -f $(JSMATH_PRELINK)
+-else
+-# Create dependency so we build fdlibm
+-jsmath.o: $(FDLIBM_LIBRARY) Makefile.in
+ endif
+
+--- js/Makefile.in Sun Mar 23 14:36:00 2003
++++ js/Makefile.in Thu Aug 4 23:08:06 2005
+@@ -46,5 +46,5 @@
+ #
+
+-DIRS = src/fdlibm src
++DIRS = src
+
+ include $(topsrcdir)/config/rules.mk
diff --git a/www/mozilla/files/patch-qt b/www/mozilla/files/patch-qt
new file mode 100644
index 0000000..d1cb9f9
--- /dev/null
+++ b/www/mozilla/files/patch-qt
@@ -0,0 +1,65 @@
+--- configure.orig Tue Oct 12 00:13:29 2004
++++ configure Wed Nov 23 01:48:55 2005
+@@ -9368,7 +9368,7 @@
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ ac_save_LIBS="$LIBS"
+-LIBS="-liconv $LIBS"
++LIBS="-L$LOCALBASE/lib -liconv $LIBS"
+ cat > conftest.$ac_ext <<EOF
+ #line 9374 "configure"
+ #include "confdefs.h"
+@@ -9399,7 +9399,7 @@
+ fi
+ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+- _ICONV_LIBS="$_ICONV_LIBS -liconv"
++ _ICONV_LIBS="$_ICONV_LIBS -L$LOCALBASE/lib -liconv"
+ else
+ echo "$ac_t""no" 1>&6
+ echo $ac_n "checking for libiconv in -liconv""... $ac_c" 1>&6
+@@ -9409,7 +9409,7 @@
+ echo $ac_n "(cached) $ac_c" 1>&6
+ else
+ ac_save_LIBS="$LIBS"
+-LIBS="-liconv $LIBS"
++LIBS="-L$LOCALBASE/lib -liconv $LIBS"
+ cat > conftest.$ac_ext <<EOF
+ #line 9415 "configure"
+ #include "confdefs.h"
+@@ -9440,7 +9440,7 @@
+ fi
+ if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+- _ICONV_LIBS="$_ICONV_LIBS -liconv"
++ _ICONV_LIBS="$_ICONV_LIBS -L$LOCALBASE/lib -liconv"
+ else
+ echo "$ac_t""no" 1>&6
+ fi
+@@ -11401,12 +11401,12 @@
+
+ echo $ac_n "checking MOZ_GTK2_CFLAGS""... $ac_c" 1>&6
+ echo "configure:11404: checking MOZ_GTK2_CFLAGS" >&5
+- MOZ_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 1.3.7"`
++ MOZ_GTK2_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 1.3.7" "pangox >= 1.1.0"`
+ echo "$ac_t""$MOZ_GTK2_CFLAGS" 1>&6
+
+ echo $ac_n "checking MOZ_GTK2_LIBS""... $ac_c" 1>&6
+ echo "configure:11409: checking MOZ_GTK2_LIBS" >&5
+- MOZ_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 1.3.7"`
++ MOZ_GTK2_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 1.3.7" "pangox >= 1.1.0"`
+ echo "$ac_t""$MOZ_GTK2_LIBS" 1>&6
+ else
+ MOZ_GTK2_CFLAGS=""
+@@ -12344,9 +12344,9 @@
+
+
+
+-MOZ_EXTENSIONS_DEFAULT=" cookie wallet content-packs xml-rpc xmlextras help p3p pref transformiix venkman inspector irc universalchardet typeaheadfind webservices spellcheck gnomevfs negotiateauth"
++MOZ_EXTENSIONS_DEFAULT=" cookie wallet content-packs xml-rpc xmlextras help p3p pref transformiix venkman inspector universalchardet typeaheadfind webservices spellcheck gnomevfs negotiateauth"
+
+-MOZ_EXTENSIONS_ALL="$MOZ_EXTENSIONS_DEFAULT xmlterm datetime finger cview layout-debug tasks"
++MOZ_EXTENSIONS_ALL="$MOZ_EXTENSIONS_DEFAULT irc xmlterm datetime finger cview layout-debug tasks"
+
+ # Check whether --enable-extensions or --disable-extensions was given.
+ if test "${enable_extensions+set}" = set; then
diff --git a/www/mozilla/files/patch-security::coreconf::FreeBSD.mk b/www/mozilla/files/patch-security::coreconf::FreeBSD.mk
new file mode 100644
index 0000000..5c76b5a
--- /dev/null
+++ b/www/mozilla/files/patch-security::coreconf::FreeBSD.mk
@@ -0,0 +1,37 @@
+--- security/coreconf/FreeBSD.mk.orig Wed Mar 26 20:17:25 2003
++++ security/coreconf/FreeBSD.mk Thu Jul 8 12:56:24 2004
+@@ -35,16 +35,18 @@
+
+ include $(CORE_DEPTH)/coreconf/UNIX.mk
+
+-DEFAULT_COMPILER = gcc
+-CC = gcc
+-CCC = g++
++CCC = ${CXX}
+ RANLIB = ranlib
+
+ ifeq ($(OS_TEST),alpha)
+ CPU_ARCH = alpha
+ else
++ifeq ($(OS_TEST),amd64)
++CPU_ARCH = amd64
++else
+ CPU_ARCH = x86
+ endif
++endif
+
+ OS_CFLAGS = $(DSO_CFLAGS) -ansi -Wall -DFREEBSD -DHAVE_STRERROR -DHAVE_BSD_FLOCK
+
+@@ -71,7 +73,11 @@
+ DLL_SUFFIX = so.1.0
+ endif
+
+-MKSHLIB = $(CC) $(DSO_LDOPTS)
++ifneq (,$(filter alpha ia64,$(OS_TEST)))
++MKSHLIB = $(CC) -Wl,-Bsymbolic -lc $(DSO_LDOPTS) -o $@
++else
++MKSHLIB = $(CC) -Wl,-Bsymbolic $(DSO_LDOPTS) -o $@
++endif
+ ifdef MAPFILE
+ # Add LD options to restrict exported symbols to those in the map file
+ endif
diff --git a/www/mozilla/files/patch-sysnspr b/www/mozilla/files/patch-sysnspr
new file mode 100644
index 0000000..19e2703
--- /dev/null
+++ b/www/mozilla/files/patch-sysnspr
@@ -0,0 +1,21 @@
+--- directory/c-sdk/ldap/include/Makefile.in.orig Sat Aug 20 02:15:05 2005
++++ directory/c-sdk/ldap/include/Makefile.in Sat Aug 20 02:15:55 2005
+@@ -76,7 +76,6 @@
+ $(INSTALL) $(INSTALLFLAGS) -m 644 $(HEADERS) $(INCLUDEDIR)
+ $(INSTALL) $(INSTALLFLAGS) -m 644 $(PRIVATEHEADERS) $(PRIVATEINCDIR)
+ rm -rf $(NSPRINCDIR)/*
+- cp -r $(DIST)/$(OBJDIR_NAME)/include/nspr/* $(NSPRINCDIR)
+
+ $(INCLUDEDIR): FORCE
+ $(NSINSTALL) -D $(INCLUDEDIR)
+--- directory/c-sdk/ldap/libraries/libprldap/Makefile.in.orig Sat Aug 20 02:14:33 2005
++++ directory/c-sdk/ldap/libraries/libprldap/Makefile.in Sat Aug 20 02:14:39 2005
+@@ -58,7 +58,7 @@
+
+ LOCAL_INCLUDES = -I$(PUBLIC)/nspr
+ INCLUDES += -I$(DISTHDIR) -I$(HDIR) -I$(INSTALLDIR)/include \
+- -I$(DIST)/include/nspr
++ $(shell nspr-config --cflags)
+ DEFINES += $(DEFS)
+
+ PLATFORMCFLAGS = -DUSE_WAITPID -DNEEDPROTOS
diff --git a/www/mozilla/files/patch-sysnss b/www/mozilla/files/patch-sysnss
new file mode 100644
index 0000000..d854cab
--- /dev/null
+++ b/www/mozilla/files/patch-sysnss
@@ -0,0 +1,178 @@
+--- Makefile.in Tue Sep 14 16:59:40 2004
++++ Makefile.in Tue Aug 2 08:26:55 2005
+@@ -102,6 +102,4 @@
+ # tier 1 - 3rd party individual libraries
+ #
+-tier_1_dirs += dbm
+-
+ ifndef MOZ_NATIVE_JPEG
+ tier_1_dirs += jpeg
+--- security/manager/Makefile.in Mon Mar 28 19:56:36 2005
++++ security/manager/Makefile.in Tue Aug 2 09:02:50 2005
+@@ -37,16 +37,7 @@
+ SOFTOKEN3_LIB \
+ SOFTOKEN3_CHK \
+- LOADABLE_ROOT_MODULE \
+ HAVE_FREEBL_MODULES \
+ $(NULL)
+
+-LOADABLE_ROOT_MODULE = $(DLL_PREFIX)nssckbi$(DLL_SUFFIX)
+-
+-NSS3_LIB = $(DLL_PREFIX)nss3$(DLL_SUFFIX)
+-SMIME3_LIB = $(DLL_PREFIX)smime3$(DLL_SUFFIX)
+-SSL3_LIB = $(DLL_PREFIX)ssl3$(DLL_SUFFIX)
+-SOFTOKEN3_LIB = $(DLL_PREFIX)softokn3$(DLL_SUFFIX)
+-SOFTOKEN3_CHK = $(DLL_PREFIX)softokn3.chk
+-
+ ifneq (,$(filter SunOS HP-UX,$(OS_ARCH)))
+ ifeq (,$(filter i86pc ia64,$(OS_TEST)))
+@@ -132,9 +123,4 @@
+ .nss.cleaned: .nss.checkout
+ $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean
+- $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean
+-ifndef SKIP_CHK
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) clean
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean
+-endif
+ touch $@
+
+@@ -153,43 +139,4 @@
+ ifeq ($(OS_ARCH),WINNT)
+ cd $(DIST)/lib; cp -f $(LIB_PREFIX)dbm$(MOZ_BITS).$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX)
+-else
+- cd $(DIST)/lib; cp -f $(LIB_PREFIX)mozdbm_s.$(LIB_SUFFIX) $(LIB_PREFIX)dbm.$(LIB_SUFFIX); $(RANLIB) $(LIB_PREFIX)dbm.$(LIB_SUFFIX)
+-endif
+- $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS)
+-ifndef SKIP_CHK
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS)
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS)
+-endif
+-ifndef DISABLE_DIST_GRE
+- $(INSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(GRE_DIST)
+-ifndef SKIP_CHK
+- $(INSTALL) -m 644 $(DIST)/lib/$(SOFTOKEN3_CHK) $(GRE_DIST)
+-endif
+- $(INSTALL) -m 755 $(DIST)/lib/$(SOFTOKEN3_LIB) $(GRE_DIST)
+- $(INSTALL) -m 755 $(DIST)/lib/$(NSS3_LIB) $(GRE_DIST)
+- $(INSTALL) -m 755 $(DIST)/lib/$(SSL3_LIB) $(GRE_DIST)
+- $(INSTALL) -m 755 $(DIST)/lib/$(SMIME3_LIB) $(GRE_DIST)
+-ifdef HAVE_FREEBL_MODULES
+- $(INSTALL) -m 644 $(DIST)/lib/$(FREEBL_PURE32_CHK) $(GRE_DIST)
+- $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_PURE32_MODULE) $(GRE_DIST)
+- $(INSTALL) -m 644 $(DIST)/lib/$(FREEBL_HYBRID_CHK) $(GRE_DIST)
+- $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(GRE_DIST)
+-endif
+-endif
+-ifndef _SKIP_OLD_GRE_INSTALL
+- $(INSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(DIST)/bin
+-ifndef SKIP_CHK
+- $(INSTALL) -m 644 $(DIST)/lib/$(SOFTOKEN3_CHK) $(DIST)/bin
+-endif
+- $(INSTALL) -m 755 $(DIST)/lib/$(SOFTOKEN3_LIB) $(DIST)/bin
+- $(INSTALL) -m 755 $(DIST)/lib/$(NSS3_LIB) $(DIST)/bin
+- $(INSTALL) -m 755 $(DIST)/lib/$(SSL3_LIB) $(DIST)/bin
+- $(INSTALL) -m 755 $(DIST)/lib/$(SMIME3_LIB) $(DIST)/bin
+-ifdef HAVE_FREEBL_MODULES
+- $(INSTALL) -m 644 $(DIST)/lib/$(FREEBL_PURE32_CHK) $(DIST)/bin
+- $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_PURE32_MODULE) $(DIST)/bin
+- $(INSTALL) -m 644 $(DIST)/lib/$(FREEBL_HYBRID_CHK) $(DIST)/bin
+- $(INSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(DIST)/bin
+-endif
+ endif
+ $(MAKE) -C boot $@
+@@ -200,18 +147,4 @@
+
+ install::
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(LOADABLE_ROOT_MODULE) $(DESTDIR)$(mozappdir)
+-ifndef SKIP_CHK
+- $(SYSINSTALL) -m 644 $(DIST)/lib/$(SOFTOKEN3_CHK) $(DESTDIR)$(mozappdir)
+-endif
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(SOFTOKEN3_LIB) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(NSS3_LIB) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(SSL3_LIB) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(SMIME3_LIB) $(DESTDIR)$(mozappdir)
+-ifdef HAVE_FREEBL_MODULES
+- $(SYSINSTALL) -m 644 $(DIST)/lib/$(FREEBL_PURE32_CHK) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(FREEBL_PURE32_MODULE) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 644 $(DIST)/lib/$(FREEBL_HYBRID_CHK) $(DESTDIR)$(mozappdir)
+- $(SYSINSTALL) -m 755 $(DIST)/lib/$(FREEBL_HYBRID_MODULE) $(DESTDIR)$(mozappdir)
+-endif
+ $(MAKE) -C boot $@
+ $(MAKE) -C ssl $@
+@@ -227,9 +160,4 @@
+ endif
+ $(MAKE) -C $(topsrcdir)/security/coreconf $(DEFAULT_GMAKE_FLAGS) clean
+- $(MAKE) -C $(topsrcdir)/security/nss/lib $(DEFAULT_GMAKE_FLAGS) clean
+-ifndef SKIP_CHK
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/lib $(DEFAULT_GMAKE_FLAGS) clean
+- $(MAKE) -C $(topsrcdir)/security/nss/cmd/shlibsign $(DEFAULT_GMAKE_FLAGS) clean
+-endif
+
+ echo-requires-recursive::
+--- security/manager/ssl/src/Makefile.in Wed Jan 7 08:36:51 2004
++++ security/manager/ssl/src/Makefile.in Tue Aug 2 09:13:07 2005
+@@ -117,5 +117,5 @@
+ # Use local includes because they are inserted before INCLUDES
+ # so that Mozilla's nss.h is used, not glibc's
+-LOCAL_INCLUDES += -I$(DIST)/public/nss \
++LOCAL_INCLUDES += -I$(LOCALBASE)/include/nss/nss \
+ $(NULL)
+
+--- config/config.mk Tue Oct 12 00:11:11 2004
++++ config/config.mk Tue Aug 2 09:19:18 2005
+@@ -170,5 +170,4 @@
+ NSS_LIBS = \
+ $(LIBS_DIR) \
+- $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \
+ -lsmime3 \
+ -lssl3 \
+@@ -189,11 +188,5 @@
+ endif
+
+-NSS_DEP_LIBS = \
+- $(DIST)/lib/$(LIB_PREFIX)crmf.$(LIB_SUFFIX) \
+- $(DIST)/lib/$(DLL_PREFIX)smime3$(DLL_SUFFIX) \
+- $(DIST)/lib/$(DLL_PREFIX)ssl3$(DLL_SUFFIX) \
+- $(DIST)/lib/$(DLL_PREFIX)nss3$(DLL_SUFFIX) \
+- $(DIST)/lib/$(DLL_PREFIX)softokn3$(DLL_SUFFIX) \
+- $(NULL)
++NSS_DEP_LIBS =
+
+ MOZ_UNICHARUTIL_LIBS = $(DIST)/lib/$(LIB_PREFIX)unicharutil_s.$(LIB_SUFFIX)
+--- security/manager/ssl/src/nsNSSComponent.cpp Thu Apr 22 15:48:30 2004
++++ security/manager/ssl/src/nsNSSComponent.cpp Thu Aug 4 16:44:27 2005
+@@ -88,4 +88,8 @@
+ }
+
++#include <sys/types.h>
++#include <sys/stat.h>
++#include <errno.h>
++
+ #ifdef PR_LOGGING
+ PRLogModuleInfo* gPIPNSSLog = nsnull;
+@@ -406,4 +410,5 @@
+ const char *possible_ckbi_locations[] = {
+ NS_GRE_DIR,
++ NS_UNIX_LIB_DIR,
+ NS_XPCOM_CURRENT_PROCESS_DIR
+ };
+@@ -419,5 +424,5 @@
+ }
+
+- char *fullModuleName = nsnull;
++ char *fullModuleName;
+ #ifdef XP_MAC
+ nsCAutoString nativePath;
+@@ -431,4 +436,12 @@
+ fullModuleName = PR_GetLibraryName(processDir.get(), "nssckbi");
+ #endif
++ if (fullModuleName == nsnull)
++ continue;
++ struct stat sb;
++ if (stat(fullModuleName, &sb)) {
++ if (errno != ENOENT)
++ perror(fullModuleName);
++ continue;
++ }
+ /* If a module exists with the same name, delete it. */
+ NS_ConvertUCS2toUTF8 modNameUTF8(modName);
diff --git a/www/mozilla/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp b/www/mozilla/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
new file mode 100644
index 0000000..7f8e55f
--- /dev/null
+++ b/www/mozilla/files/patch-uriloader_exthandler_unix_nsGNOMERegistry.cpp
@@ -0,0 +1,29 @@
+--- uriloader/exthandler/unix/nsGNOMERegistry.cpp.orig Fri Dec 24 04:30:00 2004
++++ uriloader/exthandler/unix/nsGNOMERegistry.cpp Fri Dec 24 04:34:05 2004
+@@ -143,7 +143,7 @@
+ PR_END_MACRO
+
+ // Attempt to open libgconf
+- gconfLib = LoadVersionedLibrary("gconf-2", ".4");
++ gconfLib = PR_LoadLibrary("libgconf-2.so");
+ ENSURE_LIB(gconfLib);
+
+ GET_LIB_FUNCTION(gconf, gconf_client_get_default);
+@@ -151,7 +151,7 @@
+ GET_LIB_FUNCTION(gconf, gconf_client_get_bool);
+
+ // Attempt to open libgnome
+- gnomeLib = LoadVersionedLibrary("gnome-2", ".0");
++ gnomeLib = PR_LoadLibrary("libgnome-2.so");
+ ENSURE_LIB(gnomeLib);
+
+ GET_LIB_FUNCTION(gnome, gnome_url_show);
+@@ -160,7 +160,7 @@
+ GET_LIB_FUNCTION(gnome, gnome_program_get);
+
+ // Attempt to open libgnomevfs
+- vfsLib = LoadVersionedLibrary("gnomevfs-2", ".0");
++ vfsLib = PR_LoadLibrary("libgnomevfs-2.so");
+ ENSURE_LIB(vfsLib);
+
+ GET_LIB_FUNCTION(vfs, gnome_vfs_mime_type_from_name);
diff --git a/www/mozilla/files/patch-widget_src_gtk2_nsDragService.cpp b/www/mozilla/files/patch-widget_src_gtk2_nsDragService.cpp
new file mode 100644
index 0000000..df9abae
--- /dev/null
+++ b/www/mozilla/files/patch-widget_src_gtk2_nsDragService.cpp
@@ -0,0 +1,18 @@
+--- widget/src/gtk2/nsDragService.cpp.nograb 2007-01-16 21:26:49.000000000 -0500
++++ widget/src/gtk2/nsDragService.cpp 2007-01-16 21:27:04.000000000 -0500
+@@ -799,7 +799,6 @@
+ void
+ nsDragService::GetTargetDragData(GdkAtom aFlavor)
+ {
+- gtk_grab_add(mHiddenWidget);
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("getting data flavor %d\n", aFlavor));
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("mLastWidget is %p and mLastContext is %p\n",
+ mTargetWidget, mTargetDragContext));
+@@ -817,7 +816,6 @@
+ gtk_main_iteration();
+ }
+ PR_LOG(sDragLm, PR_LOG_DEBUG, ("finished inner iteration\n"));
+- gtk_grab_remove(mHiddenWidget);
+ }
+
+ void
diff --git a/www/mozilla/files/patch-xpcom::reflect::xptcall::public::xptcstubsdecl.inc b/www/mozilla/files/patch-xpcom::reflect::xptcall::public::xptcstubsdecl.inc
new file mode 100644
index 0000000..ebe5474
--- /dev/null
+++ b/www/mozilla/files/patch-xpcom::reflect::xptcall::public::xptcstubsdecl.inc
@@ -0,0 +1,11 @@
+--- xpcom/reflect/xptcall/public/xptcstubsdecl.inc.orig Tue Mar 16 03:07:25 2004
++++ xpcom/reflect/xptcall/public/xptcstubsdecl.inc Fri Mar 19 15:58:14 2004
+@@ -8,7 +8,7 @@
+ * 1 is AddRef
+ * 2 is Release
+ */
+-#if !defined(__ia64) || (!defined(__hpux) && !defined(__linux__))
++#if !defined(__ia64)
+ NS_IMETHOD Stub3();
+ NS_IMETHOD Stub4();
+ NS_IMETHOD Stub5();
diff --git a/www/mozilla/files/patch-xpcom_reflect_xptcall_src_md_unix_Makefile.in b/www/mozilla/files/patch-xpcom_reflect_xptcall_src_md_unix_Makefile.in
new file mode 100644
index 0000000..dbdc47b
--- /dev/null
+++ b/www/mozilla/files/patch-xpcom_reflect_xptcall_src_md_unix_Makefile.in
@@ -0,0 +1,56 @@
+--- xpcom/reflect/xptcall/src/md/unix/Makefile.in.orig Thu Aug 14 21:00:23 2003
++++ xpcom/reflect/xptcall/src/md/unix/Makefile.in Sun Feb 1 14:31:25 2004
+@@ -49,6 +49,9 @@
+ ifeq (86,$(findstring 86,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_unixish_x86.cpp xptcstubs_unixish_x86.cpp
+ endif
++ifeq (amd64,$(OS_TEST))
++CPPSRCS := xptcinvoke_amd64_freebsd.cpp xptcstubs_amd64_freebsd.cpp
++endif
+ endif
+ #
+ # New code for Linux, et. al., with gcc
+@@ -59,8 +62,8 @@
+ CPPSRCS := xptcinvoke_gcc_x86_unix.cpp xptcstubs_gcc_x86_unix.cpp
+ endif
+ endif
+-# IA64 Linux
+-ifneq (,$(filter Linux,$(OS_ARCH)))
++# IA64 Linux & FreeBSD
++ifneq (,$(filter Linux FreeBSD,$(OS_ARCH)))
+ ifneq (,$(findstring ia64,$(OS_TEST)))
+ CPPSRCS := xptcinvoke_ipf64.cpp xptcstubs_ipf64.cpp
+ ASFILES := xptcstubs_asm_ipf64.s xptcinvoke_asm_ipf64.s
+@@ -106,9 +109,15 @@
+ ASFILES := xptcinvoke_asm_osf1_alpha.s xptcstubs_asm_osf1_alpha.s
+ endif
+ #
++# FreeBSD/Alpha
++#
++ifeq ($(OS_ARCH)$(OS_TEST),FreeBSDalpha)
++CPPSRCS := xptcinvoke_freebsd_alpha.cpp xptcstubs_freebsd_alpha.cpp
++endif
++#
+ # Linux/Alpha
+ #
+-ifneq (,$(filter Linuxalpha FreeBSDalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
++ifneq (,$(filter Linuxalpha NetBSDalpha,$(OS_ARCH)$(OS_TEST)))
+ CPPSRCS := xptcinvoke_linux_alpha.cpp xptcstubs_linux_alpha.cpp
+ endif
+ #
+@@ -294,6 +303,15 @@
+ ifeq ($(OS_ARCH)$(OS_TEST),NetBSDsparc)
+ CPPSRCS := xptcinvoke_sparc_netbsd.cpp xptcstubs_sparc_netbsd.cpp
+ ASFILES := xptcinvoke_asm_sparc_netbsd.s xptcstubs_asm_sparc_netbsd.s
++endif
++#
++# FreeBSD/SPARC64
++#
++ifeq ($(OS_ARCH),FreeBSD)
++ifneq (,$(findstring sparc,$(OS_TEST)))
++CPPSRCS := xptcinvoke_sparc64_freebsd.cpp xptcstubs_sparc64_freebsd.cpp
++ASFILES := xptcinvoke_asm_sparc64_freebsd.s xptcstubs_asm_sparcv9_solaris.s
++endif
+ endif
+ #
+ # Solaris/SPARC
diff --git a/www/mozilla/files/patch-xpfe_bootstrap_mozilla.in b/www/mozilla/files/patch-xpfe_bootstrap_mozilla.in
new file mode 100644
index 0000000..768eaf6
--- /dev/null
+++ b/www/mozilla/files/patch-xpfe_bootstrap_mozilla.in
@@ -0,0 +1,436 @@
+--- xpfe/bootstrap/mozilla.in.orig Fri Feb 20 19:13:46 2004
++++ xpfe/bootstrap/mozilla.in Tue Mar 22 22:40:43 2005
+@@ -29,141 +29,324 @@
+ ## the mozilla-bin binary to work.
+ ##
+
++#
++# MOZ_PIS, "Mozilla Plugable Init Scripts"
++# MOZ_PIS_ is the name space used
++# These variables and there meaning are specified in
++# mozilla/xpfe/bootstrap/init.d/README
+ moz_pis_startstop_scripts()
+ {
+- MOZ_USER_DIR="%MOZ_USER_DIR%"
+- # MOZ_PIS_ is the name space for "Mozilla Plugable Init Scripts"
+- # These variables and there meaning are specified in
+- # mozilla/xpfe/bootstrap/init.d/README
+- MOZ_PIS_API=2
+- MOZ_PIS_MOZBINDIR="${dist_bin}"
+- MOZ_PIS_SESSION_PID="$$"
+- MOZ_PIS_USER_DIR="${MOZ_USER_DIR}"
+- export MOZ_PIS_API MOZ_PIS_MOZBINDIR MOZ_PIS_SESSION_PID MOZ_PIS_USER_DIR
+-
+- case "${1}" in
+- "start")
+- for curr_pis in "${dist_bin}/init.d"/S* "${HOME}/${MOZ_USER_DIR}/init.d"/S* ; do
+- if [ -x "${curr_pis}" ] ; then
+- case "${curr_pis}" in
+- *.sh) . "${curr_pis}" ;;
+- *) "${curr_pis}" "start" ;;
+- esac
+- fi
+- done
+- ;;
+- "stop")
+- for curr_pis in "${HOME}/${MOZ_USER_DIR}/init.d"/K* "${dist_bin}/init.d"/K* ; do
+- if [ -x "${curr_pis}" ] ; then
+- case "${curr_pis}" in
+- *.sh) . "${curr_pis}" ;;
+- *) "${curr_pis}" "stop" ;;
+- esac
+- fi
+- done
+- ;;
+- *)
+- echo 1>&2 "$0: Internal error in moz_pis_startstop_scripts."
+- exit 1
+- ;;
+- esac
++ MOZ_PIS_API=2
++ MOZ_PIS_MOZBINDIR="${dist_bin}"
++ MOZ_PIS_SESSION_PID="$$"
++ MOZ_PIS_USER_DIR="${MOZ_USER_DIR}"
++ export MOZ_PIS_API MOZ_PIS_MOZBINDIR MOZ_PIS_SESSION_PID MOZ_PIS_USER_DIR
++
++ case "${1}" in
++ "start")
++ for curr_pis in "${MOZ_PIS_MOZBINDIR}/init.d"/S* \
++ "${HOME}/${MOZ_PIS_USER_DIR}/init.d"/S*; do
++ if [ -x "${curr_pis}" ]; then
++ case "${curr_pis}" in
++ *.sh)
++ . "${curr_pis}"
++ ;;
++ *)
++ ${curr_pis} "start"
++ ;;
++ esac
++ fi
++ done
++ ;;
++ "stop")
++ for curr_pis in "${MOZ_PIS_MOZBINDIR}/init.d"/K* \
++ "${HOME}/${MOZ_PIS_USER_DIR}/init.d"/K*; do
++ if [ -x "${curr_pis}" ]; then
++ case "${curr_pis}" in
++ *.sh)
++ . "${curr_pis}"
++ ;;
++ *)
++ ${curr_pis} "stop"
++ ;;
++ esac
++ fi
++ done
++ ;;
++ *)
++ echo "$0: Internal error in moz_pis_startstop_scripts." 1>&2
++ exit 1
++ ;;
++ esac
+ }
+
+ #uncomment for debugging
+ #set -x
+
+-moz_libdir=%MOZAPPDIR%
+-MRE_HOME=%MREDIR%
++#
++# variables
++#
++location="new-tab"
++#MOZILLA_UILOCALE="en-US"
++#MOZILLA_UIREGION="US"
+
+-# honor MOZILLA_FIVE_HOME if it's there
+-if [ -n "$MOZILLA_FIVE_HOME" ] ; then
+- dist_bin="$MOZILLA_FIVE_HOME"
+-else
+- # Use run-mozilla.sh in the current dir if it exists
+- # If not, then start resolving symlinks until we find run-mozilla.sh
+- found=0
+- progname=$0
+- curdir=`dirname "$progname"`
+- run_moz="$curdir/run-mozilla.sh"
+- if test -x "$run_moz"; then
+- dist_bin=$curdir
++#
++# working definitions
++#
++MOZ_USER_DIR="%MOZ_USER_DIR%"
++moz_libdir="%MOZAPPDIR%"
++MRE_HOME="%MREDIR%"
++
++debugging= # set the debugging level
++use_openFile="yes" # use openFile() for file/dir
++here=`pwd`
++
++if [ ! -d "${MRE_HOME}" ]; then
++ # use moz_libdir as MRE_HOME
++ MRE_HOME="${moz_libdir}"
++fi
++export MRE_HOME
++
++# Use run-mozilla.sh in the current dir if it exists
++# If not, then start resolving symlinks until we find run-mozilla.sh
++found=0
++progname="$0"
++curdir=`dirname "$progname"`
++progbase=`basename "$progname"`
++run_moz="$curdir/run-mozilla.sh"
++# mozilla must obey MOZILLA_FIVE_HOME
++if [ -n "$MOZILLA_FIVE_HOME" -a -d "$MOZILLA_FIVE_HOME" -a \
++ -x "$MOZILLA_FIVE_HOME/run-mozilla.sh" ]; then
++ curdir="$MOZILLA_FIVE_HOME"
++ run_moz="$curdir/run-mozilla.sh"
++ dist_bin="$curdir"
+ found=1
+- else
+- here=`/bin/pwd`
+- while [ -h "$progname" ]; do
+- bn=`basename "$progname"`
+- cd `dirname "$progname"`
+- progname=`/bin/ls -l "$bn" |sed -e 's/^.* -> //' `
+- if [ ! -x "$progname" ]; then
+- break
+- fi
+- curdir=`dirname "$progname"`
+- run_moz="$curdir/run-mozilla.sh"
+- if [ -x "$run_moz" ]; then
+- cd "$curdir"
+- dist_bin=`pwd`
+- found=1
+- break
+- fi
++elif [ -x "$run_moz" ]; then
++ dist_bin="$curdir"
++ found=1
++else
++ while [ -h "${progname}" ]; do
++ bn=`basename "${progname}"`
++ cd `dirname "${progname}"`
++ progname=`ls -l "${bn}" | sed -e 's/^.* -> //'`
++ if [ ! -x "$progname" ]; then
++ break
++ fi
++ curdir=`dirname "${progname}"`
++ run_moz="${curdir}/run-mozilla.sh"
++ if [ -x "${run_moz}" ]; then
++ cd "$curdir"
++ dist_bin=`pwd`
++ run_moz="${dist_bin}/run-mozilla.sh"
++ found=1
++ break
++ fi
+ done
+- cd "$here"
+- fi
+- if [ $found = 0 ]; then
++ cd "${here}"
++fi
++if [ $found = 0 ]; then
+ # Check default compile-time libdir
+- if [ -x "$moz_libdir/run-mozilla.sh" ]; then
+- dist_bin=$moz_libdir
+- else
+- echo "Cannot find mozilla runtime directory. Exiting."
+- exit 1
+- fi
+- fi
++ if [ -x "${moz_libdir}/run-mozilla.sh" ]; then
++ dist_bin="$moz_libdir"
++ run_moz="${dist_bin}/run-mozilla.sh"
++ else
++ echo "$0: Cannot find mozilla runtime directory. Exiting." 1>&2
++ exit 1
++ fi
+ fi
+
+-script_args=""
+-debugging=0
+-MOZILLA_BIN="%MOZILLA-BIN%"
+-
++MOZILLA_BIN="${progbase}-bin"
+ if [ "$OSTYPE" = "beos" ]; then
+- mimeset -F $MOZILLA_BIN
++ mimeset -F "$MOZILLA_BIN"
+ fi
+
++# test for binary apps in ${dist_bin}
++if [ -x "${dist_bin}/${MOZILLA_BIN}" ]; then
++ MOZILLA_BIN="${dist_bin}/${progbase}-bin"
++else
++ echo "$0: Cannot find mozilla binary executable. Exiting." 1>&2
++ exit 1
++fi
++if [ -x "${dist_bin}/mozilla-xremote-client" ]; then
++ MOZ_CLIENT_PROGRAM="${dist_bin}/mozilla-xremote-client -a ${progbase}"
++else
++ MOZ_CLIENT_PROGRAM="${MOZILLA_BIN} -remote -a ${progbase}"
++fi
++
++# guest a default remote command
++_remote_cmd="xfeDoCommand(openBrowser)"
++
++# parse options
++script_args= # null
++moreargs= # null
++target= # null
++ALREADY_RUNNING="test"
+ pass_arg_count=0
+ while [ $# -gt $pass_arg_count ]
+ do
+- case "$1" in
+- -p | -pure)
+- MOZILLA_BIN="%MOZILLA-BIN%.pure"
+- shift
+- ;;
+- -g | --debug)
+- script_args="$script_args -g"
+- debugging=1
+- shift
+- ;;
+- -d | --debugger)
+- script_args="$script_args -d $2"
+- shift 2
+- ;;
+- *)
+- # Move the unrecognized argument to the end of the list.
+- arg="$1"
+- shift
+- set -- "$@" "$arg"
+- pass_arg_count=`expr $pass_arg_count + 1`
+- ;;
+- esac
++ if [ -n "${target}" ]; then
++ # well, this can't be the target if not last
++ moreargs="${moreargs} \"${target}\""
++ target= # null
++ fi
++ case "$1" in
++ # preserve [pP] for profile
++ --pure | -pure)
++ MOZILLA_BIN="${MOZILLA_BIN}.pure"
++ shift
++ ;;
++ -g | --debug)
++ script_args="${script_args} -g"
++ debugging=1
++ shift
++ ;;
++ -d | --debugger)
++ if [ -n "$2" ]; then
++ script_args="${script_args} -d $2"
++ shift 2
++ else
++ "$0: ERROR, $1 needs an argument. Exiting" 1>&2
++ exit 1
++ fi
++ ;;
++ -[Uu][Ii][Ll]ocale)
++ if [ -n "$2" ]; then
++ uilocale="$2"
++ shift 2
++ else
++ echo "$0: ERROR, $1 needs an argument. Exiting" 1>&2
++ exit 1
++ fi
++ ;;
++ -[Uu][Ii][Rr]egion)
++ if [ -n "$2" ]; then
++ uiregion="$2"
++ shift 2
++ else
++ echo "$0: ERROR, $1 needs an argument. Exiting" 1>&2
++ exit 1
++ fi
++ ;;
++ -browser)
++ # browser is default for mozilla
++ shift
++ ;;
++ -mail)
++ _remote_cmd="xfeDoCommand(openInbox)"
++ moreargs="${moreargs} $1"
++ shift
++ ;;
++ -compose)
++ _remote_cmd="xfeDoCommand(composeMessage)"
++ moreargs="${moreargs} $1"
++ shift
++ ;;
++ -turbo | -nosplash | -quiet)
++ # use remote even with this
++ moreargs="${moreargs} $1"
++ shift
++ ;;
++ -*)
++ # don't use remote with options
++ ALREADY_RUNNING= # null
++ moreargs="${moreargs} $1"
++ shift
++ ;;
++ *)
++ target="$1"
++ shift
++ ;;
++ esac
+ done
+
+-export MRE_HOME
++# test for a running copy of firefox
++# seems this is not needed
++#if [-n "${ALREADY_RUNNING}" ]; then
++# if [ -n "${DISPLAY}" ]; then
++# if [ -n "${debugging}" ]; then
++# echo "${run_moz} ${MOZ_CLIENT_PROGRAM} ping()"
++# ${run_moz} ${MOZ_CLIENT_PROGRAM} 'ping()' && ALREADY_RUNNING="yes"
++# else
++# ${run_moz} ${MOZ_CLIENT_PROGRAM} 'ping()' >/dev/null 2>&1 &&
++# ALREADY_RUNNING="yes"
++# fi
++# elif [ -n "${debugging}" ]; then
++# echo "$0: WARN, no DISPLAY environment" 1>&2
++# fi
++#fi
++
++# process target
++if [ -n "${target}" ]; then
++ moreargs="${moreargs} \"${target}\""
++ if [ -n "${ALREADY_RUNNING}" ]; then
++ if [ `expr "${target}" : '.*:.*'` -eq 0 ]; then
++ if [ `expr "${target}" : '/.*'` -eq 0 ]; then
++ target="${here}/${target}"
++ fi
++ if [ -r "${target}" -o -d "${target}" ]; then
++ [ -n "${use_openFile}" ] || target="file://${target}"
++ else
++ echo "$0: WARN, target: ${target} not an URI/file/dir" 1>&2
++ ALREADY_RUNNING= # null
++ fi
++ else
++ # an former URI, don't use openFile
++ use_openFile= # null
++ fi
++ fi
++fi
++
++# try remote protocol if running
++if [ -n "${ALREADY_RUNNING}" ]; then
++ if [ -n "${target}" ]; then
++ if [ -n "${use_openFile}" ]; then
++ _remote_cmd="openFile(${target})"
++ elif [ -n "${location}" ]; then
++ _remote_cmd="openURL(${target},${location})"
++ else
++ _remote_cmd="openURL(${target})"
++ fi
++ fi
++ # FIXME problems with freedesktop StartupNotify
++ if [ -n "${debugging}" ]; then
++ echo "${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd}"
++ ${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd} &&
++ exit 0
++ else
++ ${run_moz} ${script_args} ${MOZ_CLIENT_PROGRAM} ${_remote_cmd} \
++ >/dev/null 2>&1 && exit 0
++ fi
++fi
++
++# fallback to direct invocation
++
++# UILocale, UIRegion
++if [ -z "${uilocale}" -a -n "${MOZILLA_UILOCALE}" ]; then
++ uilocale="${MOZILLA_UILOCALE}"
++fi
++if [ -z "${uiregion}" -a -n "${MOZILLA_UIREGION}" ]; then
++ uiregion="${MOZILLA_UIREGION}"
++fi
++if [ -n "${uiregion}" -a -z "${uilocale}" ]; then
++ uilocale="en-US"
++fi
++if [ -n "${uilocale}" ]; then
++ if [ -n "${uiregion}" ]; then
++ moreargs="-UIRegion ${uiregion} ${moreargs}"
++ fi
++ moreargs="-UILocale ${uilocale} ${moreargs}"
++fi
++
++# real invocation
++eval "set -- ${moreargs}"
+
+ ## Start addon scripts
+ moz_pis_startstop_scripts "start"
+
+-if [ $debugging = 1 ]
+-then
+- echo $dist_bin/run-mozilla.sh $script_args $dist_bin/$MOZILLA_BIN "$@"
++if [ -n "${debugging}" ]; then
++ echo "${run_moz} ${script_args} ${MOZILLA_BIN} $@"
+ fi
+-"$dist_bin/run-mozilla.sh" $script_args "$dist_bin/$MOZILLA_BIN" "$@"
++${run_moz} ${script_args} ${MOZILLA_BIN} "$@"
+ exitcode=$?
+
+ ## Stop addon scripts
diff --git a/www/mozilla/files/patch-xptcall-alpha b/www/mozilla/files/patch-xptcall-alpha
new file mode 100644
index 0000000..29631a9
--- /dev/null
+++ b/www/mozilla/files/patch-xptcall-alpha
@@ -0,0 +1,459 @@
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp.orig Tue May 27 01:37:25 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_freebsd_alpha.cpp Tue May 27 01:37:00 2003
+@@ -0,0 +1,184 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* ***** BEGIN LICENSE BLOCK *****
++ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * 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 the Initial Developer are Copyright (C) 1998
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either the GNU General Public License Version 2 or later (the "GPL"), or
++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the NPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the NPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
++
++#include "xptcprivate.h"
++
++/* Prototype specifies unmangled function name and disables unused warning */
++static void
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
++__asm__("invoke_copy_to_stack") __attribute__((unused));
++
++static void
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s)
++{
++ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
++
++ for(PRUint32 i = 0; i < paramCount; i++, d++, s++)
++ {
++ if(s->IsPtrData())
++ {
++ *d = (PRUint64)s->ptr;
++ continue;
++ }
++ switch(s->type)
++ {
++ case nsXPTType::T_I8 : *d = (PRUint64)s->val.i8; break;
++ case nsXPTType::T_I16 : *d = (PRUint64)s->val.i16; break;
++ case nsXPTType::T_I32 : *d = (PRUint64)s->val.i32; break;
++ case nsXPTType::T_I64 : *d = (PRUint64)s->val.i64; break;
++ case nsXPTType::T_U8 : *d = (PRUint64)s->val.u8; break;
++ case nsXPTType::T_U16 : *d = (PRUint64)s->val.u16; break;
++ case nsXPTType::T_U32 : *d = (PRUint64)s->val.u32; break;
++ case nsXPTType::T_U64 : *d = (PRUint64)s->val.u64; break;
++ case nsXPTType::T_FLOAT :
++ if(i < NUM_ARG_REGS)
++ {
++ // convert floats to doubles if they are to be passed
++ // via registers so we can just deal with doubles later
++ union { PRUint64 u64; double d; } t;
++ t.d = (double)s->val.f;
++ *d = t.u64;
++ }
++ else
++ // otherwise copy to stack normally
++ *d = (PRUint64)s->val.u32;
++ break;
++ case nsXPTType::T_DOUBLE : *d = (PRUint64)s->val.u64; break;
++ case nsXPTType::T_BOOL : *d = (PRUint64)s->val.b; break;
++ case nsXPTType::T_CHAR : *d = (PRUint64)s->val.c; break;
++ case nsXPTType::T_WCHAR : *d = (PRUint64)s->val.wc; break;
++ default:
++ // all the others are plain pointer types
++ *d = (PRUint64)s->val.p;
++ break;
++ }
++ }
++}
++
++/*
++ * XPTC_PUBLIC_API(nsresult)
++ * XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
++ * PRUint32 paramCount, nsXPTCVariant* params, void* vt)
++ */
++__asm__(
++ "#### XPTC_InvokeByIndex ####\n"
++".text\n\t"
++ ".align 5\n\t"
++ ".globl XPTC_InvokeByIndex\n\t"
++ ".ent XPTC_InvokeByIndex\n"
++"XPTC_InvokeByIndex:\n\t"
++ ".frame $15,32,$26,0\n\t"
++ ".mask 0x4008000,-32\n\t"
++ "ldgp $29,0($27)\n"
++"$XPTC_InvokeByIndex..ng:\n\t"
++ "subq $30,32,$30\n\t"
++ "stq $26,0($30)\n\t"
++ "stq $15,8($30)\n\t"
++ "bis $30,$30,$15\n\t"
++ ".prologue 1\n\t"
++
++ /*
++ * Allocate enough stack space to hold the greater of 6 or "paramCount"+1
++ * parameters. (+1 for "this" pointer) Room for at least 6 parameters
++ * is required for storage of those passed via registers.
++ */
++
++ "bis $31,5,$2\n\t" /* count = MAX(5, "paramCount") */
++ "cmplt $2,$18,$1\n\t"
++ "cmovne $1,$18,$2\n\t"
++ "s8addq $2,16,$1\n\t" /* room for count+1 params (8 bytes each) */
++ "bic $1,15,$1\n\t" /* stack space is rounded up to 0 % 16 */
++ "subq $30,$1,$30\n\t"
++
++ "stq $16,0($30)\n\t" /* save "that" (as "this" pointer) */
++ "stq $17,16($15)\n\t" /* save "methodIndex" */
++
++ "addq $30,8,$16\n\t" /* pass stack pointer */
++ "bis $18,$18,$17\n\t" /* pass "paramCount" */
++ "bis $19,$19,$18\n\t" /* pass "params" */
++ "bsr $26,$invoke_copy_to_stack..ng\n\t" /* call invoke_copy_to_stack */
++
++ /*
++ * Copy the first 6 parameters to registers and remove from stack frame.
++ * Both the integer and floating point registers are set for each parameter
++ * except the first which is the "this" pointer. (integer only)
++ * The floating point registers are all set as doubles since the
++ * invoke_copy_to_stack function should have converted the floats.
++ */
++ "ldq $16,0($30)\n\t" /* integer registers */
++ "ldq $17,8($30)\n\t"
++ "ldq $18,16($30)\n\t"
++ "ldq $19,24($30)\n\t"
++ "ldq $20,32($30)\n\t"
++ "ldq $21,40($30)\n\t"
++ "ldt $f17,8($30)\n\t" /* floating point registers */
++ "ldt $f18,16($30)\n\t"
++ "ldt $f19,24($30)\n\t"
++ "ldt $f20,32($30)\n\t"
++ "ldt $f21,40($30)\n\t"
++
++ "addq $30,48,$30\n\t" /* remove params from stack */
++
++ /*
++ * Call the virtual function with the constructed stack frame.
++ */
++ "bis $16,$16,$1\n\t" /* load "this" */
++ "ldq $2,16($15)\n\t" /* load "methodIndex" */
++ "ldq $1,0($1)\n\t" /* load vtable */
++#if 0
++ "s8addq $2,16,$2\n\t" /* vtable index = "methodIndex" * 8 + 16 */
++#else
++ "mulq $2, 8, $2\n\t"
++ "addq $2, 0, $2\n\t" /* vtable index = "methodIndex" * 16 + 24 */
++#endif
++ "addq $1,$2,$1\n\t"
++ "ldq $27,0($1)\n\t" /* load address of function */
++ "jsr $26,($27),0\n\t" /* call virtual function */
++ "ldgp $29,0($26)\n\t"
++
++ "bis $15,$15,$30\n\t"
++ "ldq $26,0($30)\n\t"
++ "ldq $15,8($30)\n\t"
++ "addq $30,32,$30\n\t"
++ "ret $31,($26),1\n\t"
++ ".end XPTC_InvokeByIndex"
++ );
++
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp.orig Tue May 27 01:37:30 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_freebsd_alpha.cpp Tue May 27 01:37:04 2003
+@@ -0,0 +1,269 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++/* ***** BEGIN LICENSE BLOCK *****
++ * Version: NPL 1.1/GPL 2.0/LGPL 2.1
++ *
++ * 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 the Initial Developer are Copyright (C) 1999
++ * the Initial Developer. All Rights Reserved.
++ *
++ * Contributor(s):
++ *
++ * Alternatively, the contents of this file may be used under the terms of
++ * either the GNU General Public License Version 2 or later (the "GPL"), or
++ * the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
++ * in which case the provisions of the GPL or the LGPL are applicable instead
++ * of those above. If you wish to allow use of your version of this file only
++ * under the terms of either the GPL or the LGPL, and not to allow others to
++ * use your version of this file under the terms of the NPL, indicate your
++ * decision by deleting the provisions above and replace them with the notice
++ * and other provisions required by the GPL or the LGPL. If you do not delete
++ * the provisions above, a recipient may use your version of this file under
++ * the terms of any one of the NPL, the GPL or the LGPL.
++ *
++ * ***** END LICENSE BLOCK ***** */
++
++/* Implement shared vtbl methods. */
++
++/* contributed by Glen Nakamura <glen.nakamura@usa.net> */
++
++#include <sys/types.h>
++#include <machine/cpu.h>
++#include "xptcprivate.h"
++
++/* Prototype specifies unmangled function name and disables unused warning */
++static nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
++__asm__("PrepareAndDispatch") __attribute__((unused));
++
++static nsresult
++PrepareAndDispatch(nsXPTCStubBase* self, uint32 methodIndex, PRUint64* args)
++{
++ const PRUint8 PARAM_BUFFER_COUNT = 16;
++ const PRUint8 NUM_ARG_REGS = 6-1; // -1 for "this" pointer
++
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint8 paramCount;
++ PRUint8 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++
++ iface_info->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");
++
++ // args[0] to args[NUM_ARG_REGS] hold floating point register values
++ PRUint64* ap = args + NUM_ARG_REGS;
++ 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_I8 : dp->val.i8 = (PRInt8) *ap; break;
++ case nsXPTType::T_I16 : dp->val.i16 = (PRInt16) *ap; break;
++ case nsXPTType::T_I32 : dp->val.i32 = (PRInt32) *ap; break;
++ case nsXPTType::T_I64 : dp->val.i64 = (PRInt64) *ap; break;
++ case nsXPTType::T_U8 : dp->val.u8 = (PRUint8) *ap; break;
++ case nsXPTType::T_U16 : dp->val.u16 = (PRUint16) *ap; break;
++ case nsXPTType::T_U32 : dp->val.u32 = (PRUint32) *ap; break;
++ case nsXPTType::T_U64 : dp->val.u64 = (PRUint64) *ap; break;
++ case nsXPTType::T_FLOAT :
++ if(i < NUM_ARG_REGS)
++ {
++ // floats passed via registers are stored as doubles
++ // in the first NUM_ARG_REGS entries in args
++ dp->val.u64 = (PRUint64) args[i];
++ dp->val.f = (float) dp->val.d; // convert double to float
++ }
++ else
++ dp->val.u32 = (PRUint32) *ap;
++ break;
++ case nsXPTType::T_DOUBLE :
++ // doubles passed via registers are also stored
++ // in the first NUM_ARG_REGS entries in args
++ dp->val.u64 = (i < NUM_ARG_REGS) ? args[i] : *ap;
++ break;
++ case nsXPTType::T_BOOL : dp->val.b = (PRBool) *ap; break;
++ case nsXPTType::T_CHAR : dp->val.c = (char) *ap; break;
++ case nsXPTType::T_WCHAR : dp->val.wc = (PRUnichar) *ap; break;
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ if(dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++/*
++ * SharedStub()
++ * Collects arguments and calls PrepareAndDispatch. The "methodIndex" is
++ * passed to this function via $1 to preserve the argument registers.
++ */
++__asm__(
++ "#### SharedStub ####\n"
++".text\n\t"
++ ".align 5\n\t"
++ ".ent SharedStub\n"
++"SharedStub:\n\t"
++ ".frame $30,96,$26,0\n\t"
++ ".mask 0x4000000,-96\n\t"
++ "ldgp $29,0($27)\n"
++"$SharedStub..ng:\n\t"
++ "subq $30,96,$30\n\t"
++ "stq $26,0($30)\n\t"
++ ".prologue 1\n\t"
++
++ /*
++ * Store arguments passed via registers to the stack.
++ * Floating point registers are stored as doubles and converted
++ * to floats in PrepareAndDispatch if necessary.
++ */
++ "stt $f17,16($30)\n\t" /* floating point registers */
++ "stt $f18,24($30)\n\t"
++ "stt $f19,32($30)\n\t"
++ "stt $f20,40($30)\n\t"
++ "stt $f21,48($30)\n\t"
++ "stq $17,56($30)\n\t" /* integer registers */
++ "stq $18,64($30)\n\t"
++ "stq $19,72($30)\n\t"
++ "stq $20,80($30)\n\t"
++ "stq $21,88($30)\n\t"
++
++ /*
++ * Call PrepareAndDispatch function.
++ */
++ "bis $1,$1,$17\n\t" /* pass "methodIndex" */
++ "addq $30,16,$18\n\t" /* pass "args" */
++ "bsr $26,$PrepareAndDispatch..ng\n\t"
++
++ "ldq $26,0($30)\n\t"
++ "addq $30,96,$30\n\t"
++ "ret $31,($26),1\n\t"
++ ".end SharedStub"
++ );
++
++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
++/*
++ * nsresult nsXPTCStubBase::Stub##n()
++ * Sets register $1 to "methodIndex" and jumps to SharedStub.
++ */
++#define STUB_ENTRY(n) \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase5Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase5Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase5Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase5Stub"#n"Ev" \
++ ); \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase6Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase6Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase6Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase6Stub"#n"Ev" \
++ ); \
++__asm__( \
++ "#### Stub"#n" ####\n" \
++".text\n\t" \
++ ".align 5\n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub"#n"Ev\n\t" \
++ ".ent _ZN14nsXPTCStubBase7Stub"#n"Ev\n" \
++"_ZN14nsXPTCStubBase7Stub"#n"Ev:\n\t" \
++ ".frame $30,0,$26,0\n\t" \
++ "ldgp $29,0($27)\n" \
++"$_ZN14nsXPTCStubBase7Stub"#n"Ev..ng:\n\t" \
++ ".prologue 1\n\t" \
++ "lda $1,"#n"\n\t" \
++ "br $31,$SharedStub..ng\n\t" \
++ ".end _ZN14nsXPTCStubBase7Stub"#n"Ev" \
++ );
++#else
++/*
++ * nsresult nsXPTCStubBase::Stub##n()
++ * Sets register $1 to "methodIndex" and jumps to SharedStub.
++ */
++#define STUB_ENTRY(n) \
++nsresult nsXPTCStubBase::Stub##n() \
++{ \
++ nsresult result; \
++__asm__ __volatile__( \
++ "ldah $29,0($27)\n\t" \
++ "lda $29,0($29)\n\t" \
++ "lda $1, "#n"\n\t" \
++ "br $31, $SharedStub..ng\n\t" \
++ "mov $0, %0\n\t" \
++ : "=r" (result) \
++ ); \
++ return result; \
++}
++#endif
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
++
diff --git a/www/mozilla/files/patch-xptcall-amd64 b/www/mozilla/files/patch-xptcall-amd64
new file mode 100644
index 0000000..3227cad
--- /dev/null
+++ b/www/mozilla/files/patch-xptcall-amd64
@@ -0,0 +1,386 @@
+--- /dev/null Wed Dec 31 16:00:00 1969
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_amd64_freebsd.cpp Thu Oct 16 22:59:43 2003
+@@ -0,0 +1,174 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++// Platform specific code to invoke XPCOM methods on native objects
++
++#include "xptcprivate.h"
++
++// 6 integral parameters are passed in registers
++const PRUint32 GPR_COUNT = 6;
++
++// 8 floating point parameters are passed in SSE registers
++const PRUint32 FPR_COUNT = 8;
++
++// Remember that these 'words' are 64-bit long
++static inline void
++invoke_count_words(PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint32 & nr_gpr, PRUint32 & nr_fpr, PRUint32 & nr_stack)
++{
++ nr_gpr = 1; // skip one GP register for 'that'
++ nr_fpr = 0;
++ nr_stack = 0;
++
++ /* Compute number of eightbytes of class MEMORY. */
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (!s->IsPtrData()
++ && (s->type == nsXPTType::T_FLOAT || s->type == nsXPTType::T_DOUBLE)) {
++ if (nr_fpr < FPR_COUNT)
++ nr_fpr++;
++ else
++ nr_stack++;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ nr_gpr++;
++ else
++ nr_stack++;
++ }
++ }
++}
++
++static void
++invoke_copy_to_stack(PRUint64 * d, PRUint32 paramCount, nsXPTCVariant * s,
++ PRUint64 * gpregs, double * fpregs)
++{
++ PRUint32 nr_gpr = 1; // skip one GP register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for (uint32 i = 0; i < paramCount; i++, s++) {
++ if (s->IsPtrData())
++ value = (PRUint64) s->ptr;
++ else {
++ switch (s->type) {
++ case nsXPTType::T_FLOAT: break;
++ case nsXPTType::T_DOUBLE: break;
++ case nsXPTType::T_I8: value = s->val.i8; break;
++ case nsXPTType::T_I16: value = s->val.i16; break;
++ case nsXPTType::T_I32: value = s->val.i32; break;
++ case nsXPTType::T_I64: value = s->val.i64; break;
++ case nsXPTType::T_U8: value = s->val.u8; break;
++ case nsXPTType::T_U16: value = s->val.u16; break;
++ case nsXPTType::T_U32: value = s->val.u32; break;
++ case nsXPTType::T_U64: value = s->val.u64; break;
++ case nsXPTType::T_BOOL: value = s->val.b; break;
++ case nsXPTType::T_CHAR: value = s->val.c; break;
++ case nsXPTType::T_WCHAR: value = s->val.wc; break;
++ default: value = (PRUint64) s->val.p; break;
++ }
++ }
++
++ if (!s->IsPtrData() && s->type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((double *)d) = s->val.d;
++ d++;
++ }
++ }
++ else if (!s->IsPtrData() && s->type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ fpregs[nr_fpr++] = s->val.d;
++ else {
++ *((float *)d) = s->val.f;
++ d++;
++ }
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ gpregs[nr_gpr++] = value;
++ else
++ *d++ = value;
++ }
++ }
++}
++
++extern "C"
++XPTC_PUBLIC_API(nsresult)
++XPTC_InvokeByIndex(nsISupports * that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant * params)
++{
++ PRUint32 nr_gpr, nr_fpr, nr_stack;
++ invoke_count_words(paramCount, params, nr_gpr, nr_fpr, nr_stack);
++
++ // Stack, if used, must be 16-bytes aligned
++ if (nr_stack)
++ nr_stack = (nr_stack + 1) & ~1;
++
++ // Load parameters to stack, if necessary
++ PRUint64 *stack = (PRUint64 *) __builtin_alloca(nr_stack * 8);
++ PRUint64 gpregs[GPR_COUNT];
++ double fpregs[FPR_COUNT];
++ invoke_copy_to_stack(stack, paramCount, params, gpregs, fpregs);
++
++ // Load FPR registers from fpregs[]
++ register double d0 asm("xmm0");
++ register double d1 asm("xmm1");
++ register double d2 asm("xmm2");
++ register double d3 asm("xmm3");
++ register double d4 asm("xmm4");
++ register double d5 asm("xmm5");
++ register double d6 asm("xmm6");
++ register double d7 asm("xmm7");
++
++ switch (nr_fpr) {
++#define ARG_FPR(N) \
++ case N+1: d##N = fpregs[N];
++ ARG_FPR(7);
++ ARG_FPR(6);
++ ARG_FPR(5);
++ ARG_FPR(4);
++ ARG_FPR(3);
++ ARG_FPR(2);
++ ARG_FPR(1);
++ ARG_FPR(0);
++ case 0:;
++#undef ARG_FPR
++ }
++
++ // Load GPR registers from gpregs[]
++ register PRUint64 a0 asm("rdi");
++ register PRUint64 a1 asm("rsi");
++ register PRUint64 a2 asm("rdx");
++ register PRUint64 a3 asm("rcx");
++ register PRUint64 a4 asm("r8");
++ register PRUint64 a5 asm("r9");
++
++ switch (nr_gpr) {
++#define ARG_GPR(N) \
++ case N+1: a##N = gpregs[N];
++ ARG_GPR(5);
++ ARG_GPR(4);
++ ARG_GPR(3);
++ ARG_GPR(2);
++ ARG_GPR(1);
++ case 1: a0 = (PRUint64) that;
++ case 0:;
++#undef ARG_GPR
++ }
++
++ // Ensure that assignments to SSE registers won't be optimized away
++ asm("" ::
++ "x" (d0), "x" (d1), "x" (d2), "x" (d3),
++ "x" (d4), "x" (d5), "x" (d6), "x" (d7));
++
++ // Get pointer to method
++ PRUint64 methodAddress = *((PRUint64 *)that);
++ methodAddress += 8 * methodIndex;
++ methodAddress = *((PRUint64 *)methodAddress);
++
++ typedef PRUint32 (*Method)(PRUint64, PRUint64, PRUint64, PRUint64, PRUint64, PRUint64);
++ PRUint32 result = ((Method)methodAddress)(a0, a1, a2, a3, a4, a5);
++ return result;
++}
+--- /dev/null Wed Dec 31 16:00:00 1969
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_amd64_freebsd.cpp Thu Oct 16 23:01:08 2003
+@@ -0,0 +1,206 @@
++/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
++
++// Implement shared vtbl methods.
++
++#include "xptcprivate.h"
++
++// The Linux/x86-64 ABI passes the first 6 integral parameters and the
++// first 8 floating point parameters in registers (rdi, rsi, rdx, rcx,
++// r8, r9 and xmm0-xmm7), no stack space is allocated for these by the
++// caller. The rest of the parameters are passed in the callers stack
++// area.
++
++const PRUint32 PARAM_BUFFER_COUNT = 16;
++const PRUint32 GPR_COUNT = 6;
++const PRUint32 FPR_COUNT = 8;
++
++// PrepareAndDispatch() is called by SharedStub() and calls the actual method.
++//
++// - 'args[]' contains the arguments passed on stack
++// - 'gpregs[]' contains the arguments passed in integer registers
++// - 'fpregs[]' contains the arguments passed in floating point registers
++//
++// The parameters are mapped into an array of type 'nsXPTCMiniVariant'
++// and then the method gets called.
++
++extern "C" nsresult
++PrepareAndDispatch(nsXPTCStubBase * self, PRUint32 methodIndex,
++ PRUint64 * args, PRUint64 * gpregs, double *fpregs)
++{
++ nsXPTCMiniVariant paramBuffer[PARAM_BUFFER_COUNT];
++ nsXPTCMiniVariant* dispatchParams = NULL;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint32 paramCount;
++ PRUint32 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++ if (! iface_info)
++ return NS_ERROR_UNEXPECTED;
++
++ iface_info->GetMethodInfo(PRUint16(methodIndex), &info);
++ NS_ASSERTION(info,"no method info");
++ if (! info)
++ return NS_ERROR_UNEXPECTED;
++
++ 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;
++ PRUint32 nr_gpr = 1; // skip one GPR register for 'that'
++ PRUint32 nr_fpr = 0;
++ PRUint64 value;
++
++ for(i = 0; i < paramCount; i++) {
++ const nsXPTParamInfo& param = info->GetParam(i);
++ const nsXPTType& type = param.GetType();
++ nsXPTCMiniVariant* dp = &dispatchParams[i];
++
++ if (!param.IsOut() && type == nsXPTType::T_DOUBLE) {
++ if (nr_fpr < FPR_COUNT)
++ dp->val.d = fpregs[nr_fpr++];
++ else
++ dp->val.d = *(double*) ap++;
++ continue;
++ }
++ else if (!param.IsOut() && type == nsXPTType::T_FLOAT) {
++ if (nr_fpr < FPR_COUNT)
++ // The value in %xmm register is already prepared to
++ // be retrieved as a float. Therefore, we pass the
++ // value verbatim, as a double without conversion.
++ dp->val.d = *(double*) ap++;
++ else
++ dp->val.f = *(float*) ap++;
++ continue;
++ }
++ else {
++ if (nr_gpr < GPR_COUNT)
++ value = gpregs[nr_gpr++];
++ else
++ value = *ap++;
++ }
++
++ if (param.IsOut() || !type.IsArithmetic()) {
++ dp->val.p = (void*) value;
++ continue;
++ }
++
++ switch (type) {
++ case nsXPTType::T_I8: dp->val.i8 = (PRInt8) value; break;
++ case nsXPTType::T_I16: dp->val.i16 = (PRInt16) value; break;
++ case nsXPTType::T_I32: dp->val.i32 = (PRInt32) value; break;
++ case nsXPTType::T_I64: dp->val.i64 = (PRInt64) value; break;
++ case nsXPTType::T_U8: dp->val.u8 = (PRUint8) value; break;
++ case nsXPTType::T_U16: dp->val.u16 = (PRUint16) value; break;
++ case nsXPTType::T_U32: dp->val.u32 = (PRUint32) value; break;
++ case nsXPTType::T_U64: dp->val.u64 = (PRUint64) value; break;
++ case nsXPTType::T_BOOL: dp->val.b = (PRBool) value; break;
++ case nsXPTType::T_CHAR: dp->val.c = (char) value; break;
++ case nsXPTType::T_WCHAR: dp->val.wc = (wchar_t) value; break;
++
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16) methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ if (dispatchParams != paramBuffer)
++ delete [] dispatchParams;
++
++ return result;
++}
++
++#if defined(__GXX_ABI_VERSION) && __GXX_ABI_VERSION >= 100 /* G++ V3 ABI */
++// Linux/x86-64 uses gcc >= 3.1
++#define STUB_ENTRY(n) \
++asm(".section \".text\"\n\t" \
++ ".align 2\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".globl _ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase5Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase5Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".globl _ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase6Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase6Stub" #n "Ev:\n\t" \
++ ".elseif " #n " < 1000\n\t" \
++ ".globl _ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".type _ZN14nsXPTCStubBase7Stub" #n "Ev,@function\n" \
++ "_ZN14nsXPTCStubBase7Stub" #n "Ev:\n\t" \
++ ".else\n\t" \
++ ".err \"stub number " #n " >= 1000 not yet supported\"\n\t" \
++ ".endif\n\t" \
++ "movl $" #n ", %eax\n\t" \
++ "jmp SharedStub\n\t" \
++ ".if " #n " < 10\n\t" \
++ ".size _ZN14nsXPTCStubBase5Stub" #n "Ev,.-_ZN14nsXPTCStubBase5Stub" #n "Ev\n\t" \
++ ".elseif " #n " < 100\n\t" \
++ ".size _ZN14nsXPTCStubBase6Stub" #n "Ev,.-_ZN14nsXPTCStubBase6Stub" #n "Ev\n\t" \
++ ".else\n\t" \
++ ".size _ZN14nsXPTCStubBase7Stub" #n "Ev,.-_ZN14nsXPTCStubBase7Stub" #n "Ev\n\t" \
++ ".endif");
++
++// static nsresult SharedStub(PRUint32 methodIndex)
++asm(".section \".text\"\n\t"
++ ".align 2\n\t"
++ ".type SharedStub,@function\n\t"
++ "SharedStub:\n\t"
++ // make room for gpregs (48), fpregs (64)
++ "pushq %rbp\n\t"
++ "movq %rsp,%rbp\n\t"
++ "subq $112,%rsp\n\t"
++ // save GP registers
++ "movq %rdi,-112(%rbp)\n\t"
++ "movq %rsi,-104(%rbp)\n\t"
++ "movq %rdx, -96(%rbp)\n\t"
++ "movq %rcx, -88(%rbp)\n\t"
++ "movq %r8 , -80(%rbp)\n\t"
++ "movq %r9 , -72(%rbp)\n\t"
++ "leaq -112(%rbp),%rcx\n\t"
++ // save FP registers
++ "movsd %xmm0,-64(%rbp)\n\t"
++ "movsd %xmm1,-56(%rbp)\n\t"
++ "movsd %xmm2,-48(%rbp)\n\t"
++ "movsd %xmm3,-40(%rbp)\n\t"
++ "movsd %xmm4,-32(%rbp)\n\t"
++ "movsd %xmm5,-24(%rbp)\n\t"
++ "movsd %xmm6,-16(%rbp)\n\t"
++ "movsd %xmm7, -8(%rbp)\n\t"
++ "leaq -64(%rbp),%r8\n\t"
++ // rdi has the 'self' pointer already
++ "movl %eax,%esi\n\t"
++ "leaq 16(%rbp),%rdx\n\t"
++ "call PrepareAndDispatch\n\t"
++ "leave\n\t"
++ "ret\n\t"
++ ".size SharedStub,.-SharedStub");
++
++#define SENTINEL_ENTRY(n) \
++nsresult nsXPTCStubBase::Sentinel##n() \
++{ \
++ NS_ASSERTION(0,"nsXPTCStubBase::Sentinel called"); \
++ return NS_ERROR_NOT_IMPLEMENTED; \
++}
++
++#include "xptcstubsdef.inc"
++
++#else
++#error "can't find a compiler to use"
++#endif /* __GNUC__ */
diff --git a/www/mozilla/files/patch-xptcall-ia64 b/www/mozilla/files/patch-xptcall-ia64
new file mode 100644
index 0000000..9cd07f7
--- /dev/null
+++ b/www/mozilla/files/patch-xptcall-ia64
@@ -0,0 +1,38 @@
+--- xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ipf64.s.orig Sun Jul 20 00:05:32 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_ipf64.s Sun Jul 20 00:06:37 2003
+@@ -8,6 +8,7 @@
+ // Section has executable code
+ .section .text, "ax","progbits"
+ // procedure named 'XPTC_InvokeByIndex'
++ .global XPTC_InvokeByIndex
+ .proc XPTC_InvokeByIndex
+ // manual bundling
+ .explicit
+@@ -24,7 +25,7 @@
+
+ // XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
+ // PRUint32 paramCount, nsXPTCVariant* params);
+-XPTC_InvokeByIndex::
++XPTC_InvokeByIndex:
+ .prologue
+ .save ar.pfs, r37
+ // allocate 4 input args, 6 local args, and 8 output args
+--- xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf64.s.orig Sun Jul 20 00:02:02 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_asm_ipf64.s Sun Jul 20 00:02:40 2003
+@@ -6,6 +6,7 @@
+ // Section has executable code
+ .section .text, "ax","progbits"
+ // procedure named 'SharedStub'
++ .global SharedStub
+ .proc SharedStub
+ // manual bundling
+ .explicit
+@@ -14,7 +15,7 @@
+ // .exclass PrepareAndDispatch, @fullyvisible
+ .type PrepareAndDispatch,@function
+
+-SharedStub::
++SharedStub:
+ // 9 arguments, first 8 are the input arguments of previous
+ // function call. The last one is methodIndex, and is passed in memory
+ .prologue
diff --git a/www/mozilla/files/patch-xptcall-sparc64 b/www/mozilla/files/patch-xptcall-sparc64
new file mode 100755
index 0000000..9599a8a
--- /dev/null
+++ b/www/mozilla/files/patch-xptcall-sparc64
@@ -0,0 +1,327 @@
+--- /dev/null Mon May 26 13:22:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcstubs_sparc64_freebsd.cpp Mon May 26 04:12:55 2003
+@@ -0,0 +1,123 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ */
++
++/* Implement shared vtbl methods. */
++
++#include "xptcprivate.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;
++ nsIInterfaceInfo* iface_info = NULL;
++ const nsXPTMethodInfo* info;
++ PRUint8 paramCount;
++ PRUint8 i;
++ nsresult result = NS_ERROR_FAILURE;
++
++ NS_ASSERTION(self,"no self");
++
++ self->GetInterfaceInfo(&iface_info);
++ NS_ASSERTION(iface_info,"no interface info");
++
++ iface_info->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");
++
++ 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_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_DOUBLE : dp->val.d = *((double*) ap); break;
++ case nsXPTType::T_U64 : dp->val.u64 = *((PRUint64*) 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_FLOAT : dp->val.f = ((float*) ap)[1]; break;
++ 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;
++ default:
++ NS_ASSERTION(0, "bad type");
++ break;
++ }
++ }
++
++ result = self->CallMethod((PRUint16)methodIndex, info, dispatchParams);
++
++ NS_RELEASE(iface_info);
++
++ 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__ */
+--- /dev/null Mon May 26 13:22:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_asm_sparc64_freebsd.s Mon May 26 04:06:09 2003
+@@ -0,0 +1,104 @@
++/* -*- Mode: asm; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ * Chris Seawood <cls@seawood.org>
++ */
++
++/*
++ Platform specific code to invoke XPCOM methods on native objects
++ for sparcv9 Solaris.
++
++ See the SPARC Compliance Definition (SCD) Chapter 3
++ for more information about what is going on here, including
++ the use of BIAS (0x7ff).
++ The SCD is available from http://www.sparc.com/.
++*/
++
++ .global XPTC_InvokeByIndex
++ .type XPTC_InvokeByIndex, #function
++
++/*
++ XPTC_InvokeByIndex(nsISupports* that, PRUint32 methodIndex,
++ PRUint32 paramCount, nsXPTCVariant* params);
++
++*/
++XPTC_InvokeByIndex:
++ 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 %d2
++ 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
++! add %l0,16,%l0 ! there are 2 extra entries in the vTable (16bytes)
++ ldx [%i0],%l1 ! *that --> address of vtable
++ ldx [%l0 + %l1],%l0 ! that->vtable[index * 8 + 16] --> 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 XPTC_InvokeByIndex, .-XPTC_InvokeByIndex
+--- /dev/null Mon May 26 14:00:00 2003
++++ xpcom/reflect/xptcall/src/md/unix/xptcinvoke_sparc64_freebsd.cpp Mon May 26 14:00:49 2003
+@@ -0,0 +1,91 @@
++/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
++ *
++ * The contents of this file are subject to the Mozilla 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/MPL/
++ *
++ * 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) 2001 Netscape Communications Corporation. All
++ * Rights Reserved.
++ *
++ * Contributor(s):
++ * Stuart Parmenter <pavlov@netscape.com>
++ * Chris Seawood <cls@seawood.org>
++ */
++
++
++/* Platform specific code to invoke XPCOM methods on native objects */
++
++#include "xptcprivate.h"
++
++#if !defined(__sparc) && !defined(__sparc__)
++#error "This code is for Sparc only"
++#endif
++
++/* Prototype specifies unmangled function name */
++extern "C" PRUint64
++invoke_copy_to_stack(PRUint64* d, PRUint32 paramCount, nsXPTCVariant* s);
++
++extern "C" PRUint64
++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/mozilla/pkg-deinstall.in b/www/mozilla/pkg-deinstall.in
new file mode 100644
index 0000000..c1086f4
--- /dev/null
+++ b/www/mozilla/pkg-deinstall.in
@@ -0,0 +1,28 @@
+#!/bin/sh
+#
+# $MCom: ports/www/mozilla/pkg-deinstall.in,v 1.21 2007/07/05 17:01:49 ahze Exp $
+#
+# Date created: Mon Nov 29, 2003
+# Whom: Thierry Thomas (<thierry@pompo.net>)
+# Fix the chrome registry.
+
+umask 022
+PATH=/bin:/usr/bin
+
+[ "x$1" = "x" ] && exit 1
+[ "x$2" != "xDEINSTALL" ] && exit 0
+
+MOZDIR=%%MOZDIR%%
+
+rm -rf ${MOZDIR}/chrome/overlayinfo
+rm -f ${MOZDIR}/chrome/*.rdf
+rm -f ${MOZDIR}/component.reg
+rm -f ${MOZDIR}/components/*.dat
+rm -f ${MOZDIR}/components.ini
+rm -f ${MOZDIR}/defaults.ini
+rm -f ${MOZDIR}/chrome/app-chrome.manifest
+rm -rf ${MOZDIR}/updates
+find %%MOZDIR%%/plugins/ -depth 1 -type l -delete > /dev/null 2>&1
+find %%MOZDIR%%/extensions/ -depth 1 -type l -delete > /dev/null 2>&1
+
+exit 0
diff --git a/www/mozilla/pkg-descr b/www/mozilla/pkg-descr
new file mode 100644
index 0000000..37a7a64
--- /dev/null
+++ b/www/mozilla/pkg-descr
@@ -0,0 +1,10 @@
+This is the current release of the Mozilla open source web browser. It should
+be fully compliant with all W3C standards, including HTML, CSS, XML, XSL,
+JavaScript, MathML, SVG and RDF. This version also supports SSL encryption,
+and Java with the use of the FreeBSD native Java plug-in.
+
+This is the latest release of the Mozilla browser. It contains all the
+bugfixes and security enhancements from the mozilla port as well as
+new new features.
+
+WWW: http://www.mozilla.org/
diff --git a/www/mozilla/pkg-install.in b/www/mozilla/pkg-install.in
new file mode 100644
index 0000000..ad8d6b6
--- /dev/null
+++ b/www/mozilla/pkg-install.in
@@ -0,0 +1,42 @@
+#!/bin/sh
+#
+# $MCom: ports/www/mozilla/pkg-install.in,v 1.21 2007/07/05 17:01:49 ahze Exp $
+#
+# Date created: Mon Nov 29, 2003
+# Whom: Thierry Thomas (<thierry@pompo.net>)
+# Fix the chrome registry.
+
+umask 022
+PATH=/bin:/usr/bin
+
+[ "x$1" = "x" ] && exit 1
+[ "x$2" != "xPOST-INSTALL" ] && exit 0
+
+MOZDIR=%%MOZDIR%%
+MOZBIN=${MOZDIR}/%%MOZILLA_BIN%%
+REGXPCOM=${MOZDIR}/regxpcom
+REGCHROME=${MOZDIR}/regchrome
+
+echo "===> Building Chrome's registry..."
+rm -rf ${MOZDIR}/chrome/overlayinfo
+rm -f ${MOZDIR}/chrome/*.rdf
+mkdir -p ${MOZDIR}/chrome/overlayinfo
+rm -f ${MOZDIR}/component.reg
+
+cd ${MOZDIR} || exit 1
+if [ -f ${REGXPCOM} ]; then
+ ./run-mozilla.sh ${REGXPCOM} || true
+fi
+if [ -f ${REGCHROME} ]; then
+ ./run-mozilla.sh ${REGCHROME} || true
+fi
+if [ -f ${MOZBIN} -a "${1%-*}" = "nvu" ]; then
+ ./run-mozilla.sh ${MOZBIN} -register > /dev/null 2>&1
+fi
+if [ ! -d %%PREFIX%%/lib/browser_plugins ]; then
+ mkdir -p %%PREFIX%%/lib/browser_plugins
+fi
+cp -R %%LOCALBASE%%/lib/npapi/symlinks/%%MOZILLA%%/ %%MOZDIR%%/plugins/ > /dev/null 2>&1
+cp -R %%LOCALBASE%%/lib/xpi/symlinks/%%MOZILLA%%/ %%MOZDIR%%/extensions/ > /dev/null 2>&1
+
+exit 0