Thu Dec 26 13:17:38 2013 UTC ()
Update to 2.23

Changelog:
SeaMonkey-specific changes

    Download progress is now shown in the Mac OS X app dock icon.
    EXIF orientation is now being used when displaying attached images in MailNews.
    "This folder is being processed... to get messages." alerts on active MailNews folders now identify the account or folder.
    MailNews notifications have a new look.
    See the changes page for a more complete overview.

Mozilla platform changes

    All plugins, with the exception of recent Flash plugins, now default to click-to-play.
    The password manager now supports script-generated password fields.
    Support for H.264 on Linux is now available if the appropriate GStreamer plugins are installed.
    Support for MP3 decoding on Windows XP has been added, completing MP3 support across Windows OS versions.
    The CSP implementation now supports multiple policies, including the case of both an enforced and Report-Only policy, per the spec.
    There is no longer a prompt when websites use appcache.
    Support for the CSS image orientation property has been added.
    IndexedDB can now be used as an "optimistic" storage area so it does not require any prompts and data is stored in a pool with LRU eviction policy, in short temporary storage.
    When displaying a standalone images, the EXIF orientation information contained within the JPEG image is now matched (bug 298619).
    Page load times have been improved due to no longer decoding images that are not visible (bug 847223).
    Support for the AudioToolbox MP3 backend has been added on Mac OS X (bug 914479).
    Fixed several stability issues.

Fixed in SeaMonkey 2.23
MFSA 2013-117 Mis-issued ANSSI/DCSSI certificate
MFSA 2013-116 JPEG information leak
MFSA 2013-115 GetElementIC typed array stubs can be generated outside observed typesets
MFSA 2013-114 Use-after-free in synthetic mouse movement
MFSA 2013-113 Trust settings for built-in roots ignored during EV certificate validation
MFSA 2013-112 Linux clipboard information disclosure though selection paste
MFSA 2013-111 Segmentation violation when replacing ordered list elements
MFSA 2013-110 Potential overflow in JavaScript binary search algorithms
MFSA 2013-109 Use-after-free during Table Editing
MFSA 2013-108 Use-after-free in event listeners
MFSA 2013-107 Sandbox restrictions not applied to nested object elements
MFSA 2013-106 Character encoding cross-origin XSS attack
MFSA 2013-104 Miscellaneous memory safety hazards (rv:26.0 / rv:24.2)


(ryoon)
diff -r1.111 -r1.112 pkgsrc/www/seamonkey/Makefile
diff -r1.41 -r1.42 pkgsrc/www/seamonkey/PLIST
diff -r1.9 -r1.10 pkgsrc/www/seamonkey/PLIST.enigmail
diff -r1.14 -r1.15 pkgsrc/www/seamonkey/PLIST.lightning
diff -r1.107 -r1.108 pkgsrc/www/seamonkey/distinfo
diff -r1.11 -r1.12 pkgsrc/www/seamonkey/enigmail.mk
diff -r1.27 -r1.28 pkgsrc/www/seamonkey/options.mk
diff -r1.19 -r1.20 pkgsrc/www/seamonkey/patches/patch-aa
diff -r1.14 -r1.15 pkgsrc/www/seamonkey/patches/patch-as
diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/patch-config_baseconfig.mk
diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h
diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/patch-mozilla_netwerk_wifi_moz.build
diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/patch-mozilla_xpcom_ds_moz.build
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-config_config.mk
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mozilla_memory_mozalloc_fallible.h
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mozilla_memory_mozalloc_mozalloc.h
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp
diff -r0 -r1.1 pkgsrc/www/seamonkey/patches/patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp
diff -r1.6 -r1.7 pkgsrc/www/seamonkey/patches/patch-mail_app_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_config_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_config_stl-headers
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_config_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_gdb_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_jsapi-tests_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_shell_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_objs.mk
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_test_Makefile.in
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nICEr_nicer.gyp
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nICEr_src_stun_stun.h
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nrappkit_nrappkit.gyp
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nrappkit_src_log_r__log.c
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nrappkit_src_util_util.c
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_build_build__config.h
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_audio__device__impl.cc
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture__factory.cc
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_mfbt_Atomics.h
diff -r1.1 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_modules_libpref_src_init_all.js
diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/patch-mozilla_config_baseconfig.mk
diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_Makefile.in
diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_vm_SPSProfiler.cpp
diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi
diff -r1.8 -r1.9 pkgsrc/www/seamonkey/patches/patch-mozilla_config_system-headers
diff -r1.8 -r1.9 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_config_system-headers
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_ipc_chromium_src_base_file__util.h
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_ipc_chromium_src_base_file__util__posix.cc
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_signaling_signaling.gyp
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_signaling_test_Makefile.in
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_toolkit_library_Makefile.in
diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/patch-mozilla_toolkit_toolkit.mozbuild
diff -r1.4 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_js_src_vm_ObjectImpl-inl.h
diff -r1.4 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nICEr_src_stun_addrs.c
diff -r1.4 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc
diff -r1.2 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_mtransport_third__party_nICEr_src_util_mbslen.c
diff -r1.2 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_test_audio__device__test__api.cc
diff -r1.3 -r0 pkgsrc/www/seamonkey/patches/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc
diff -r0 -r1.3 pkgsrc/www/seamonkey/patches/patch-mozilla_memory_mozalloc_mozalloc.cpp

cvs diff -r1.111 -r1.112 pkgsrc/www/seamonkey/Makefile (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/Makefile 2013/11/23 02:39:25 1.111
+++ pkgsrc/www/seamonkey/Makefile 2013/12/26 13:17:37 1.112
@@ -1,89 +1,88 @@ @@ -1,89 +1,88 @@
1# $NetBSD: Makefile,v 1.111 2013/11/23 02:39:25 ryoon Exp $ 1# $NetBSD: Makefile,v 1.112 2013/12/26 13:17:37 ryoon Exp $
2 2
3DISTNAME= # empty 3DISTNAME= # empty
4PKGNAME= seamonkey-${SM_VER:S/b/beta/} 4PKGNAME= seamonkey-${SM_VER:S/b/beta/}
5SM_VER= 2.22.1 5SM_VER= 2.23
6#LIGHTNINGVER= 1.9 6#LIGHTNINGVER= 1.9
7CATEGORIES= www 7CATEGORIES= www
8#${MASTER_SITE_MOZILLA:=seamonkey/releases/${SM_VER}/source/} 8#${MASTER_SITE_MOZILLA:=seamonkey/releases/${SM_VER}/source/}
9MASTER_SITES= ${MASTER_SITE_MOZILLA_ALL:=seamonkey/releases/${SM_VER}/source/} 9MASTER_SITES= ${MASTER_SITE_MOZILLA_ALL:=seamonkey/releases/${SM_VER}/source/}
10DISTFILES= seamonkey-${SM_VER}.source.tar.bz2 10DISTFILES= seamonkey-${SM_VER}.source.tar.bz2
11# lightning-${LIGHTNINGVER}.source.tar.bz2 11# lightning-${LIGHTNINGVER}.source.tar.bz2
12#SITES.lightning-${LIGHTNINGVER}.source.tar.bz2= ${MASTER_SITE_MOZILLA:=calendar/lightning/releases/${LIGHTNINGVER}/source/} 12#SITES.lightning-${LIGHTNINGVER}.source.tar.bz2= ${MASTER_SITE_MOZILLA:=calendar/lightning/releases/${LIGHTNINGVER}/source/}
13EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2= ${WRKSRC}/lightning 13EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2= ${WRKSRC}/lightning
14 14
15MAINTAINER= pkgsrc-users@NetBSD.org 15MAINTAINER= pkgsrc-users@NetBSD.org
16HOMEPAGE= http://www.seamonkey-project.org/ 16HOMEPAGE= http://www.seamonkey-project.org/
17COMMENT= Full-featured gecko-based browser 17COMMENT= Full-featured gecko-based browser
18 18
19WRKSRC= ${WRKDIR}/comm-release 19WRKSRC= ${WRKDIR}/comm-release
20MOZILLA_DIR= mozilla/ 20MOZILLA_DIR= mozilla/
21PLIST_SRC+= ${PLIST_SRC_DFLT} 21PLIST_SRC+= ${PLIST_SRC_DFLT}
22USE_LANGUAGES+= c c++ 22USE_LANGUAGES+= c c++
23USE_TOOLS+= unzip pax 23USE_TOOLS+= unzip pax
24 24
 25.include "../../www/firefox/mozilla-common.mk"
 26.include "options.mk"
 27
25CONFIG_GUESS_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.guess 28CONFIG_GUESS_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.guess
26CONFIG_SUB_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.sub 29CONFIG_SUB_OVERRIDE+= ldap/sdks/c-sdk/config/autoconf/config.sub
27 30
28CONFIGURE_ARGS+= --enable-application=suite 31CONFIGURE_ARGS+= --enable-application=suite
29 32
30ALL_ENV+= MOZILLA_PKG_NAME=seamonkey 33ALL_ENV+= MOZILLA_PKG_NAME=seamonkey
31 34
32.include "../../mk/bsd.prefs.mk" 35.include "../../mk/bsd.prefs.mk"
33 36
34#.if (${OPSYS} == "Linux" || ${OPSYS} == "SunOS" || ${OPSYS} == "Darwin" || \ 37#.if (${OPSYS} == "Linux" || ${OPSYS} == "SunOS" || ${OPSYS} == "Darwin" || \
35# ${OPSYS} == "DragonFly") && \ 38# ${OPSYS} == "DragonFly") && \
36# (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64") 39# (${MACHINE_ARCH} == "i386" || ${MACHINE_ARCH} == "x86_64")
37#BUILD_DEPENDS+= yasm>=1.1.0:../../devel/yasm 40#BUILD_DEPENDS+= yasm>=1.1.0:../../devel/yasm
38#.endif 41#.endif
39 42
40CHECK_PORTABILITY_SKIP=mozilla/js/src/tests/update-test262.sh 43CHECK_PORTABILITY_SKIP+=mozilla/js/src/tests/update-test262.sh
 44CHECK_PORTABILITY_SKIP+=mozilla/security/nss/tests/libpkix/libpkix.sh
41 45
42CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/header.py 46CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/header.py
43CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/typelib.py 47CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/typelib.py
44CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpidl.py 48CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpidl.py
45CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpt.py 49CHECK_INTERPRETER_SKIP+=lib/seamonkey-sdk/sdk/bin/xpt.py
46 50
47SUBST_CLASSES+= sys-dic 51SUBST_CLASSES+= sys-dic
48SUBST_STAGE.sys-dic= pre-configure 52SUBST_STAGE.sys-dic= pre-configure
49SUBST_MESSAGE.sys-dic= Reference to system hunspell dictionaries. 53SUBST_MESSAGE.sys-dic= Reference to system hunspell dictionaries.
50SUBST_FILES.sys-dic= mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp 54SUBST_FILES.sys-dic= mozilla/extensions/spellcheck/hunspell/src/mozHunspell.cpp
51SUBST_VARS.sys-dic= PREFIX 55SUBST_VARS.sys-dic= PREFIX
52 56
53#post-extract: 57#post-extract:
54# cd ${WRKSRC} && ${RM} -r calendar 58# cd ${WRKSRC} && ${RM} -r calendar
55# ${CP} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2}/comm-beta/calendar ${WRKSRC} 59# ${CP} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2}/comm-beta/calendar ${WRKSRC}
56# ${RM} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2} 60# ${RM} -r ${EXTRACT_DIR.lightning-${LIGHTNINGVER}.source.tar.bz2}
57 61
58pre-configure: 62pre-configure:
 63 cd ${WRKSRC} && mkdir ${OBJDIR}
59 cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} autoconf 64 cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} autoconf
60 cd ${WRKSRC}/mozilla && ${SETENV} ${CONFIGURE_ENV} autoconf 65 cd ${WRKSRC}/mozilla && ${SETENV} ${CONFIGURE_ENV} autoconf
61 cd ${WRKSRC}/mozilla/js/src && ${SETENV} ${CONFIGURE_ENV} autoconf 66 cd ${WRKSRC}/mozilla/js/src && ${SETENV} ${CONFIGURE_ENV} autoconf
62 cd ${WRKSRC}/mozilla/nsprpub && ${SETENV} ${CONFIGURE_ENV} autoconf 67 cd ${WRKSRC}/mozilla/nsprpub && ${SETENV} ${CONFIGURE_ENV} autoconf
63 cd ${WRKSRC}/ldap/sdks/c-sdk && ${SETENV} ${CONFIGURE_ENV} autoconf 68 cd ${WRKSRC}/ldap/sdks/c-sdk && ${SETENV} ${CONFIGURE_ENV} autoconf
64 mkdir ${WRKSRC}/mozilla/js/src/.deps 69 mkdir ${WRKSRC}/mozilla/js/src/.deps
65 70
66do-build: 
67# XXX for some reason it doesn't work unless -j is explicitly specified 
68 cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} -j${MAKE_JOBS:U1} 
69 
70post-install: 71post-install:
71# ${TOUCH} ${TOUCH_FLAGS} \ 72# ${TOUCH} ${TOUCH_FLAGS} \
72# ${DESTDIR}${PREFIX}/include/seamonkey/mozilla/throw_gcc.h 73# ${DESTDIR}${PREFIX}/include/seamonkey/mozilla/throw_gcc.h
73 @${STEP_MSG} "Installing bundled seamonkey extensions." 74 @${STEP_MSG} "Installing bundled seamonkey extensions."
74 rm -rf ${WRKDIR}/extensions 75 rm -rf ${WRKDIR}/${OBJDIR}/extensions
75 ${MKDIR} ${WRKDIR}/extensions 76 ${MKDIR} ${WRKDIR}/${OBJDIR}/extensions
76 ${RUN} for e in ${XPI_FILES}; do \ 77 ${RUN} for e in ${XPI_FILES}; do \
77 subdir=`${UNZIP_CMD} -c "$$e" install.rdf | awk '/^ <em:id>/ {sub(".*<em:id>","");sub("</em:id>.*","");print;exit;}'` && \ 78 subdir=`${UNZIP_CMD} -c "$$e" install.rdf | awk '/^ <em:id>/ {sub(".*<em:id>","");sub("</em:id>.*","");print;exit;}'` && \
78 ${MKDIR} "${WRKDIR}/extensions/$$subdir" && \ 79 ${MKDIR} "${WRKDIR}/${OBJDIR}/extensions/$$subdir" && \
79 cd "${WRKDIR}/extensions/$$subdir" && \ 80 cd "${WRKDIR}/${OBJDIR}/extensions/$$subdir" && \
80 ${UNZIP_CMD} -aqo $$e; \ 81 ${UNZIP_CMD} -aqo $$e; \
81 done 82 done
82 ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/lib/seamonkey/extensions 83 ${INSTALL_DATA_DIR} ${DESTDIR}${PREFIX}/lib/seamonkey/extensions
83 cd ${WRKDIR}/extensions && pax -rw . \ 84 cd ${WRKDIR}/${OBJDIR}/extensions && pax -rw . \
84 ${DESTDIR}${PREFIX}/lib/seamonkey/extensions/. 85 ${DESTDIR}${PREFIX}/lib/seamonkey/extensions/.
85 rm -rf ${WRKDIR}/extensions 86 rm -rf ${WRKDIR}/${OBJDIR}/extensions
86 87
87.include "../../www/firefox/mozilla-common.mk" 
88.include "options.mk" 
89.include "../../mk/bsd.pkg.mk" 88.include "../../mk/bsd.pkg.mk"

cvs diff -r1.41 -r1.42 pkgsrc/www/seamonkey/PLIST (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/PLIST 2013/11/23 02:39:25 1.41
+++ pkgsrc/www/seamonkey/PLIST 2013/12/26 13:17:37 1.42
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1@comment $NetBSD: PLIST,v 1.41 2013/11/23 02:39:25 ryoon Exp $ 1@comment $NetBSD: PLIST,v 1.42 2013/12/26 13:17:37 ryoon Exp $
2bin/seamonkey 2bin/seamonkey
3lib/seamonkey/application.ini 3lib/seamonkey/application.ini
4lib/seamonkey/blocklist.xml 4lib/seamonkey/blocklist.xml
5lib/seamonkey/chrome.manifest 5lib/seamonkey/chrome.manifest
6lib/seamonkey/chrome/chrome.manifest 6lib/seamonkey/chrome/chrome.manifest
7lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSessionRestore.css 7lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSessionRestore.css
8lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSyncTabs.css 8lib/seamonkey/chrome/classic/skin/classic/communicator/aboutSyncTabs.css
9lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/allBookmarks.png 9lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/allBookmarks.png
10lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-closed.png 10lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-closed.png
11lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-dis.png 11lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-dis.png
12lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-open.png 12lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-folder-open.png
13lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-dis.png 13lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-dis.png
14lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-updated.png 14lib/seamonkey/chrome/classic/skin/classic/communicator/bookmarks/bookmark-item-updated.png
@@ -216,27 +216,28 @@ lib/seamonkey/chrome/classic/skin/classi @@ -216,27 +216,28 @@ lib/seamonkey/chrome/classic/skin/classi
216lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share-open.png 216lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share-open.png
217lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share.png 217lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent-share.png
218lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent.png 218lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-sent.png
219lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share-open.png 219lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share-open.png
220lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share.png 220lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-share.png
221lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-open.png 221lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-open.png
222lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share-open.png 222lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share-open.png
223lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share.png 223lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template-share.png
224lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template.png 224lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-template.png
225lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-open.png 225lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-open.png
226lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share-open.png 226lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share-open.png
227lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share.png 227lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash-share.png
228lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash.png 228lib/seamonkey/chrome/classic/skin/classic/messenger/icons/folder-trash.png
229lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkBar.png 229lib/seamonkey/chrome/classic/skin/classic/messenger/icons/info.png
 230lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junk.png
230lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkcol.png 231lib/seamonkey/chrome/classic/skin/classic/messenger/icons/junkcol.png
231lib/seamonkey/chrome/classic/skin/classic/messenger/icons/local-mailhost.png 232lib/seamonkey/chrome/classic/skin/classic/messenger/icons/local-mailhost.png
232lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-del.png 233lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-del.png
233lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl-reply.png 234lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl-reply.png
234lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl.png 235lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-offl.png
235lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-reply.png 236lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd-reply.png
236lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd.png 237lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-fwd.png
237lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl-reply.png 238lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl-reply.png
238lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl.png 239lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-offl.png
239lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-reply.png 240lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach-reply.png
240lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach.png 241lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-attach.png
241lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-delete-offl.png 242lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-delete-offl.png
242lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-fwd-offl-reply.png 243lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-mail-fwd-offl-reply.png
@@ -255,26 +256,27 @@ lib/seamonkey/chrome/classic/skin/classi @@ -255,26 +256,27 @@ lib/seamonkey/chrome/classic/skin/classi
255lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach-offl.png 256lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach-offl.png
256lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach.png 257lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-attach.png
257lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill-offl.png 258lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill-offl.png
258lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill.png 259lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-kill.png
259lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach-off.png 260lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach-off.png
260lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach.png 261lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-attach.png
261lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-offl.png 262lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new-offl.png
262lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new.png 263lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-new.png
263lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-offl.png 264lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news-offl.png
264lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news.png 265lib/seamonkey/chrome/classic/skin/classic/messenger/icons/message-news.png
265lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons-small.png 266lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons-small.png
266lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons.png 267lib/seamonkey/chrome/classic/skin/classic/messenger/icons/messengericons.png
267lib/seamonkey/chrome/classic/skin/classic/messenger/icons/new-mail-alert.png 268lib/seamonkey/chrome/classic/skin/classic/messenger/icons/new-mail-alert.png
 269lib/seamonkey/chrome/classic/skin/classic/messenger/icons/phishing.png
268lib/seamonkey/chrome/classic/skin/classic/messenger/icons/readcol.png 270lib/seamonkey/chrome/classic/skin/classic/messenger/icons/readcol.png
269lib/seamonkey/chrome/classic/skin/classic/messenger/icons/remote-blocked.png 271lib/seamonkey/chrome/classic/skin/classic/messenger/icons/remote-blocked.png
270lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local-new.png 272lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local-new.png
271lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local.png 273lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-local.png
272lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail-new.png 274lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail-new.png
273lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail.png 275lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-mail.png
274lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-lock.png 276lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-lock.png
275lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-new.png 277lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news-new.png
276lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news.png 278lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-news.png
277lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock-new.png 279lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock-new.png
278lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock.png 280lib/seamonkey/chrome/classic/skin/classic/messenger/icons/server-remote-lock.png
279lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-eye.png 281lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-eye.png
280lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-kill.png 282lib/seamonkey/chrome/classic/skin/classic/messenger/icons/thread-closed-kill.png
@@ -1059,26 +1061,27 @@ lib/seamonkey/chrome/en-US/locale/en-US/ @@ -1059,26 +1061,27 @@ lib/seamonkey/chrome/en-US/locale/en-US/
1059lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/accessible.properties 1061lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/accessible.properties
1060lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/intl.properties 1062lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/intl.properties
1061lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/platformKeys.properties 1063lib/seamonkey/chrome/en-US/locale/en-US/global-platform/mac/platformKeys.properties
1062lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/accessible.properties 1064lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/accessible.properties
1063lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/intl.properties 1065lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/intl.properties
1064lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/platformKeys.properties 1066lib/seamonkey/chrome/en-US/locale/en-US/global-platform/unix/platformKeys.properties
1065lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/accessible.properties 1067lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/accessible.properties
1066lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/intl.properties 1068lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/intl.properties
1067lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/platformKeys.properties 1069lib/seamonkey/chrome/en-US/locale/en-US/global-platform/win/platformKeys.properties
1068lib/seamonkey/chrome/en-US/locale/en-US/global-region/region.properties 1070lib/seamonkey/chrome/en-US/locale/en-US/global-region/region.properties
1069lib/seamonkey/chrome/en-US/locale/en-US/global/AccessFu.properties 1071lib/seamonkey/chrome/en-US/locale/en-US/global/AccessFu.properties
1070lib/seamonkey/chrome/en-US/locale/en-US/global/about.dtd 1072lib/seamonkey/chrome/en-US/locale/en-US/global/about.dtd
1071lib/seamonkey/chrome/en-US/locale/en-US/global/aboutAbout.dtd 1073lib/seamonkey/chrome/en-US/locale/en-US/global/aboutAbout.dtd
 1074lib/seamonkey/chrome/en-US/locale/en-US/global/aboutNetworking.dtd
1072lib/seamonkey/chrome/en-US/locale/en-US/global/aboutRights.dtd 1075lib/seamonkey/chrome/en-US/locale/en-US/global/aboutRights.dtd
1073lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.dtd 1076lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.dtd
1074lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.properties 1077lib/seamonkey/chrome/en-US/locale/en-US/global/aboutSupport.properties
1075lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.dtd 1078lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.dtd
1076lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.properties 1079lib/seamonkey/chrome/en-US/locale/en-US/global/aboutTelemetry.properties
1077lib/seamonkey/chrome/en-US/locale/en-US/global/actions.dtd 1080lib/seamonkey/chrome/en-US/locale/en-US/global/actions.dtd
1078lib/seamonkey/chrome/en-US/locale/en-US/global/appPicker.dtd 1081lib/seamonkey/chrome/en-US/locale/en-US/global/appPicker.dtd
1079lib/seamonkey/chrome/en-US/locale/en-US/global/appstrings.properties 1082lib/seamonkey/chrome/en-US/locale/en-US/global/appstrings.properties
1080lib/seamonkey/chrome/en-US/locale/en-US/global/brand.dtd 1083lib/seamonkey/chrome/en-US/locale/en-US/global/brand.dtd
1081lib/seamonkey/chrome/en-US/locale/en-US/global/browser.properties 1084lib/seamonkey/chrome/en-US/locale/en-US/global/browser.properties
1082lib/seamonkey/chrome/en-US/locale/en-US/global/charsetOverlay.dtd 1085lib/seamonkey/chrome/en-US/locale/en-US/global/charsetOverlay.dtd
1083lib/seamonkey/chrome/en-US/locale/en-US/global/charsetTitles.properties 1086lib/seamonkey/chrome/en-US/locale/en-US/global/charsetTitles.properties
1084lib/seamonkey/chrome/en-US/locale/en-US/global/commonDialog.dtd 1087lib/seamonkey/chrome/en-US/locale/en-US/global/commonDialog.dtd
@@ -1664,27 +1667,26 @@ lib/seamonkey/chrome/pippki/content/pipp @@ -1664,27 +1667,26 @@ lib/seamonkey/chrome/pippki/content/pipp
1664lib/seamonkey/chrome/pippki/content/pippki/clientauthask.js 1667lib/seamonkey/chrome/pippki/content/pippki/clientauthask.js
1665lib/seamonkey/chrome/pippki/content/pippki/clientauthask.xul 1668lib/seamonkey/chrome/pippki/content/pippki/clientauthask.xul
1666lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.js 1669lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.js
1667lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.xul 1670lib/seamonkey/chrome/pippki/content/pippki/createCertInfo.xul
1668lib/seamonkey/chrome/pippki/content/pippki/deletecert.js 1671lib/seamonkey/chrome/pippki/content/pippki/deletecert.js
1669lib/seamonkey/chrome/pippki/content/pippki/deletecert.xul 1672lib/seamonkey/chrome/pippki/content/pippki/deletecert.xul
1670lib/seamonkey/chrome/pippki/content/pippki/device_manager.js 1673lib/seamonkey/chrome/pippki/content/pippki/device_manager.js
1671lib/seamonkey/chrome/pippki/content/pippki/device_manager.xul 1674lib/seamonkey/chrome/pippki/content/pippki/device_manager.xul
1672lib/seamonkey/chrome/pippki/content/pippki/downloadcert.js 1675lib/seamonkey/chrome/pippki/content/pippki/downloadcert.js
1673lib/seamonkey/chrome/pippki/content/pippki/downloadcert.xul 1676lib/seamonkey/chrome/pippki/content/pippki/downloadcert.xul
1674lib/seamonkey/chrome/pippki/content/pippki/editcacert.xul 1677lib/seamonkey/chrome/pippki/content/pippki/editcacert.xul
1675lib/seamonkey/chrome/pippki/content/pippki/editcerts.js 1678lib/seamonkey/chrome/pippki/content/pippki/editcerts.js
1676lib/seamonkey/chrome/pippki/content/pippki/editemailcert.xul 1679lib/seamonkey/chrome/pippki/content/pippki/editemailcert.xul
1677lib/seamonkey/chrome/pippki/content/pippki/editsslcert.xul 
1678lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.js 1680lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.js
1679lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.xul 1681lib/seamonkey/chrome/pippki/content/pippki/escrowWarn.xul
1680lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.js 1682lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.js
1681lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.xul 1683lib/seamonkey/chrome/pippki/content/pippki/exceptionDialog.xul
1682lib/seamonkey/chrome/pippki/content/pippki/formsigning.js 1684lib/seamonkey/chrome/pippki/content/pippki/formsigning.js
1683lib/seamonkey/chrome/pippki/content/pippki/formsigning.xul 1685lib/seamonkey/chrome/pippki/content/pippki/formsigning.xul
1684lib/seamonkey/chrome/pippki/content/pippki/getp12password.xul 1686lib/seamonkey/chrome/pippki/content/pippki/getp12password.xul
1685lib/seamonkey/chrome/pippki/content/pippki/getpassword.xul 1687lib/seamonkey/chrome/pippki/content/pippki/getpassword.xul
1686lib/seamonkey/chrome/pippki/content/pippki/load_device.xul 1688lib/seamonkey/chrome/pippki/content/pippki/load_device.xul
1687lib/seamonkey/chrome/pippki/content/pippki/password.js 1689lib/seamonkey/chrome/pippki/content/pippki/password.js
1688lib/seamonkey/chrome/pippki/content/pippki/pippki.js 1690lib/seamonkey/chrome/pippki/content/pippki/pippki.js
1689lib/seamonkey/chrome/pippki/content/pippki/pref-certs.js 1691lib/seamonkey/chrome/pippki/content/pippki/pref-certs.js
1690lib/seamonkey/chrome/pippki/content/pippki/pref-certs.xul 1692lib/seamonkey/chrome/pippki/content/pippki/pref-certs.xul
@@ -1697,38 +1699,42 @@ lib/seamonkey/chrome/pippki/content/pipp @@ -1697,38 +1699,42 @@ lib/seamonkey/chrome/pippki/content/pipp
1697lib/seamonkey/chrome/pippki/content/pippki/resetpassword.js 1699lib/seamonkey/chrome/pippki/content/pippki/resetpassword.js
1698lib/seamonkey/chrome/pippki/content/pippki/resetpassword.xul 1700lib/seamonkey/chrome/pippki/content/pippki/resetpassword.xul
1699lib/seamonkey/chrome/pippki/content/pippki/setp12password.xul 1701lib/seamonkey/chrome/pippki/content/pippki/setp12password.xul
1700lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.js 1702lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.js
1701lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.xul 1703lib/seamonkey/chrome/pippki/content/pippki/viewCertDetails.xul
1702lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.js 1704lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.js
1703lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.xul 1705lib/seamonkey/chrome/toolkit/content/cookie/cookieAcceptDialog.xul
1704lib/seamonkey/chrome/toolkit/content/global/BrowserElementChild.js 1706lib/seamonkey/chrome/toolkit/content/global/BrowserElementChild.js
1705lib/seamonkey/chrome/toolkit/content/global/BrowserElementChildPreload.js 1707lib/seamonkey/chrome/toolkit/content/global/BrowserElementChildPreload.js
1706lib/seamonkey/chrome/toolkit/content/global/BrowserElementPanning.js 1708lib/seamonkey/chrome/toolkit/content/global/BrowserElementPanning.js
1707lib/seamonkey/chrome/toolkit/content/global/XPCNativeWrapper.js 1709lib/seamonkey/chrome/toolkit/content/global/XPCNativeWrapper.js
1708lib/seamonkey/chrome/toolkit/content/global/about.xhtml 1710lib/seamonkey/chrome/toolkit/content/global/about.xhtml
1709lib/seamonkey/chrome/toolkit/content/global/aboutAbout.xhtml 1711lib/seamonkey/chrome/toolkit/content/global/aboutAbout.xhtml
 1712lib/seamonkey/chrome/toolkit/content/global/aboutCompartments.xhtml
1710lib/seamonkey/chrome/toolkit/content/global/aboutMemory.css 1713lib/seamonkey/chrome/toolkit/content/global/aboutMemory.css
1711lib/seamonkey/chrome/toolkit/content/global/aboutMemory.js 1714lib/seamonkey/chrome/toolkit/content/global/aboutMemory.js
1712lib/seamonkey/chrome/toolkit/content/global/aboutMemory.xhtml 1715lib/seamonkey/chrome/toolkit/content/global/aboutMemory.xhtml
 1716lib/seamonkey/chrome/toolkit/content/global/aboutNetworking.js
 1717lib/seamonkey/chrome/toolkit/content/global/aboutNetworking.xhtml
1713lib/seamonkey/chrome/toolkit/content/global/aboutRights-unbranded.xhtml 1718lib/seamonkey/chrome/toolkit/content/global/aboutRights-unbranded.xhtml
1714lib/seamonkey/chrome/toolkit/content/global/aboutRights.xhtml 1719lib/seamonkey/chrome/toolkit/content/global/aboutRights.xhtml
1715lib/seamonkey/chrome/toolkit/content/global/aboutSupport.js 1720lib/seamonkey/chrome/toolkit/content/global/aboutSupport.js
1716lib/seamonkey/chrome/toolkit/content/global/aboutSupport.xhtml 1721lib/seamonkey/chrome/toolkit/content/global/aboutSupport.xhtml
1717lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.css 1722lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.css
1718lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.js 1723lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.js
1719lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.xhtml 1724lib/seamonkey/chrome/toolkit/content/global/aboutTelemetry.xhtml
1720lib/seamonkey/chrome/toolkit/content/global/accessibility/AccessFu.css 1725lib/seamonkey/chrome/toolkit/content/global/accessibility/AccessFu.css
1721lib/seamonkey/chrome/toolkit/content/global/accessibility/content-script.js 1726lib/seamonkey/chrome/toolkit/content/global/accessibility/content-script.js
 1727lib/seamonkey/chrome/toolkit/content/global/accessibility/tick.wav
1722lib/seamonkey/chrome/toolkit/content/global/alerts/alert.css 1728lib/seamonkey/chrome/toolkit/content/global/alerts/alert.css
1723lib/seamonkey/chrome/toolkit/content/global/alerts/alert.js 1729lib/seamonkey/chrome/toolkit/content/global/alerts/alert.js
1724lib/seamonkey/chrome/toolkit/content/global/alerts/alert.xul 1730lib/seamonkey/chrome/toolkit/content/global/alerts/alert.xul
1725lib/seamonkey/chrome/toolkit/content/global/appPicker.js 1731lib/seamonkey/chrome/toolkit/content/global/appPicker.js
1726lib/seamonkey/chrome/toolkit/content/global/appPicker.xul 1732lib/seamonkey/chrome/toolkit/content/global/appPicker.xul
1727lib/seamonkey/chrome/toolkit/content/global/autocomplete.css 1733lib/seamonkey/chrome/toolkit/content/global/autocomplete.css
1728lib/seamonkey/chrome/toolkit/content/global/autocomplete.xml 1734lib/seamonkey/chrome/toolkit/content/global/autocomplete.xml
1729lib/seamonkey/chrome/toolkit/content/global/bindings/autocomplete.xml 1735lib/seamonkey/chrome/toolkit/content/global/bindings/autocomplete.xml
1730lib/seamonkey/chrome/toolkit/content/global/bindings/browser.xml 1736lib/seamonkey/chrome/toolkit/content/global/bindings/browser.xml
1731lib/seamonkey/chrome/toolkit/content/global/bindings/button.xml 1737lib/seamonkey/chrome/toolkit/content/global/bindings/button.xml
1732lib/seamonkey/chrome/toolkit/content/global/bindings/checkbox.xml 1738lib/seamonkey/chrome/toolkit/content/global/bindings/checkbox.xml
1733lib/seamonkey/chrome/toolkit/content/global/bindings/colorpicker.xml 1739lib/seamonkey/chrome/toolkit/content/global/bindings/colorpicker.xml
1734lib/seamonkey/chrome/toolkit/content/global/bindings/datetimepicker.xml 1740lib/seamonkey/chrome/toolkit/content/global/bindings/datetimepicker.xml
@@ -1819,26 +1825,27 @@ lib/seamonkey/chrome/toolkit/content/glo @@ -1819,26 +1825,27 @@ lib/seamonkey/chrome/toolkit/content/glo
1819lib/seamonkey/chrome/toolkit/content/global/printPreviewProgress.xul 1825lib/seamonkey/chrome/toolkit/content/global/printPreviewProgress.xul
1820lib/seamonkey/chrome/toolkit/content/global/printProgress.js 1826lib/seamonkey/chrome/toolkit/content/global/printProgress.js
1821lib/seamonkey/chrome/toolkit/content/global/printProgress.xul 1827lib/seamonkey/chrome/toolkit/content/global/printProgress.xul
1822lib/seamonkey/chrome/toolkit/content/global/printUtils.js 1828lib/seamonkey/chrome/toolkit/content/global/printUtils.js
1823lib/seamonkey/chrome/toolkit/content/global/printdialog.js 1829lib/seamonkey/chrome/toolkit/content/global/printdialog.js
1824lib/seamonkey/chrome/toolkit/content/global/printdialog.xul 1830lib/seamonkey/chrome/toolkit/content/global/printdialog.xul
1825lib/seamonkey/chrome/toolkit/content/global/printjoboptions.js 1831lib/seamonkey/chrome/toolkit/content/global/printjoboptions.js
1826lib/seamonkey/chrome/toolkit/content/global/printjoboptions.xul 1832lib/seamonkey/chrome/toolkit/content/global/printjoboptions.xul
1827lib/seamonkey/chrome/toolkit/content/global/remote-test-ipc.js 1833lib/seamonkey/chrome/toolkit/content/global/remote-test-ipc.js
1828lib/seamonkey/chrome/toolkit/content/global/resetProfile.css 1834lib/seamonkey/chrome/toolkit/content/global/resetProfile.css
1829lib/seamonkey/chrome/toolkit/content/global/resetProfile.js 1835lib/seamonkey/chrome/toolkit/content/global/resetProfile.js
1830lib/seamonkey/chrome/toolkit/content/global/resetProfile.xul 1836lib/seamonkey/chrome/toolkit/content/global/resetProfile.xul
1831lib/seamonkey/chrome/toolkit/content/global/resetProfileProgress.xul 1837lib/seamonkey/chrome/toolkit/content/global/resetProfileProgress.xul
 1838lib/seamonkey/chrome/toolkit/content/global/select-child.js
1832lib/seamonkey/chrome/toolkit/content/global/selectDialog.js 1839lib/seamonkey/chrome/toolkit/content/global/selectDialog.js
1833lib/seamonkey/chrome/toolkit/content/global/selectDialog.xul 1840lib/seamonkey/chrome/toolkit/content/global/selectDialog.xul
1834lib/seamonkey/chrome/toolkit/content/global/strres.js 1841lib/seamonkey/chrome/toolkit/content/global/strres.js
1835lib/seamonkey/chrome/toolkit/content/global/svg/svgBindings.xml 1842lib/seamonkey/chrome/toolkit/content/global/svg/svgBindings.xml
1836lib/seamonkey/chrome/toolkit/content/global/tabprompts.css 1843lib/seamonkey/chrome/toolkit/content/global/tabprompts.css
1837lib/seamonkey/chrome/toolkit/content/global/tabprompts.xml 1844lib/seamonkey/chrome/toolkit/content/global/tabprompts.xml
1838lib/seamonkey/chrome/toolkit/content/global/test-ipc.xul 1845lib/seamonkey/chrome/toolkit/content/global/test-ipc.xul
1839lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-chrome.js 1846lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-chrome.js
1840lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-content.js 1847lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser-content.js
1841lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser.xul 1848lib/seamonkey/chrome/toolkit/content/global/test-ipcbrowser.xul
1842lib/seamonkey/chrome/toolkit/content/global/textbox.css 1849lib/seamonkey/chrome/toolkit/content/global/textbox.css
1843lib/seamonkey/chrome/toolkit/content/global/treeUtils.js 1850lib/seamonkey/chrome/toolkit/content/global/treeUtils.js
1844lib/seamonkey/chrome/toolkit/content/global/viewPartialSource.js 1851lib/seamonkey/chrome/toolkit/content/global/viewPartialSource.js
@@ -2125,26 +2132,27 @@ lib/seamonkey/chrome/toolkit/skin/classi @@ -2125,26 +2132,27 @@ lib/seamonkey/chrome/toolkit/skin/classi
2125lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc-classic.png 2132lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc-classic.png
2126lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc.png 2133lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-asc.png
2127lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc-classic.png 2134lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc-classic.png
2128lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc.png 2135lib/seamonkey/chrome/toolkit/skin/classic/global/tree/sort-dsc.png
2129lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-clsd.png 2136lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-clsd.png
2130lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-open.png 2137lib/seamonkey/chrome/toolkit/skin/classic/global/tree/twisty-open.png
2131lib/seamonkey/chrome/toolkit/skin/classic/global/wizard.css 2138lib/seamonkey/chrome/toolkit/skin/classic/global/wizard.css
2132lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar-rtl.png 2139lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar-rtl.png
2133lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar.png 2140lib/seamonkey/chrome/toolkit/skin/classic/help/Toolbar.png
2134lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink-rtl.png 2141lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink-rtl.png
2135lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink.png 2142lib/seamonkey/chrome/toolkit/skin/classic/help/Weblink.png
2136lib/seamonkey/chrome/toolkit/skin/classic/help/help.css 2143lib/seamonkey/chrome/toolkit/skin/classic/help/help.css
2137lib/seamonkey/chrome/toolkit/skin/classic/help/helpFileLayout.css 2144lib/seamonkey/chrome/toolkit/skin/classic/help/helpFileLayout.css
 2145lib/seamonkey/chrome/toolkit/skin/classic/mozapps/aboutNetworking.css
2138lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png 2146lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png
2139lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadIcon.png 2147lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloadIcon.png
2140lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloads.css 2148lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/downloads.css
2141lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/unknownContentType.css 2149lib/seamonkey/chrome/toolkit/skin/classic/mozapps/downloads/unknownContentType.css
2142lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/about.css 2150lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/about.css
2143lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-error.png 2151lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-error.png
2144lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-negative.png 2152lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-negative.png
2145lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-positive.png 2153lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-info-positive.png
2146lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-warning.png 2154lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/alerticon-warning.png
2147lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/blocklist.css 2155lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/blocklist.css
2148lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/cancel.png 2156lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/cancel.png
2149lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-available.png 2157lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-available.png
2150lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png 2158lib/seamonkey/chrome/toolkit/skin/classic/mozapps/extensions/category-dictionaries.png
@@ -2212,29 +2220,31 @@ lib/seamonkey/chrome/toolkit/skin/classi @@ -2212,29 +2220,31 @@ lib/seamonkey/chrome/toolkit/skin/classi
2212lib/seamonkey/components/AlarmsManager.js 2220lib/seamonkey/components/AlarmsManager.js
2213lib/seamonkey/components/AppsService.js 2221lib/seamonkey/components/AppsService.js
2214lib/seamonkey/components/BrowserElementParent.js 2222lib/seamonkey/components/BrowserElementParent.js
2215lib/seamonkey/components/ColorAnalyzer.js 2223lib/seamonkey/components/ColorAnalyzer.js
2216lib/seamonkey/components/ConsoleAPI.js 2224lib/seamonkey/components/ConsoleAPI.js
2217lib/seamonkey/components/ContactManager.js 2225lib/seamonkey/components/ContactManager.js
2218lib/seamonkey/components/DownloadLegacy.js 2226lib/seamonkey/components/DownloadLegacy.js
2219lib/seamonkey/components/FeedConverter.js 2227lib/seamonkey/components/FeedConverter.js
2220lib/seamonkey/components/FeedProcessor.js 2228lib/seamonkey/components/FeedProcessor.js
2221lib/seamonkey/components/FeedWriter.js 2229lib/seamonkey/components/FeedWriter.js
2222lib/seamonkey/components/FormHistoryStartup.js 2230lib/seamonkey/components/FormHistoryStartup.js
2223lib/seamonkey/components/NetworkGeolocationProvider.js 2231lib/seamonkey/components/NetworkGeolocationProvider.js
2224lib/seamonkey/components/PermissionSettings.js 2232lib/seamonkey/components/PermissionSettings.js
 2233lib/seamonkey/components/PhoneNumberService.js
2225lib/seamonkey/components/PlacesCategoriesStarter.js 2234lib/seamonkey/components/PlacesCategoriesStarter.js
2226lib/seamonkey/components/SettingsManager.js 2235lib/seamonkey/components/SettingsManager.js
2227lib/seamonkey/components/SiteSpecificUserAgent.js 2236lib/seamonkey/components/SiteSpecificUserAgent.js
 2237lib/seamonkey/components/SuiteProfileMigrator.js
2228lib/seamonkey/components/TCPSocket.js 2238lib/seamonkey/components/TCPSocket.js
2229lib/seamonkey/components/TCPSocketParentIntermediary.js 2239lib/seamonkey/components/TCPSocketParentIntermediary.js
2230lib/seamonkey/components/TelemetryPing.js 2240lib/seamonkey/components/TelemetryPing.js
2231lib/seamonkey/components/Weave.js 2241lib/seamonkey/components/Weave.js
2232lib/seamonkey/components/WebContentConverter.js 2242lib/seamonkey/components/WebContentConverter.js
2233lib/seamonkey/components/Webapps.js 2243lib/seamonkey/components/Webapps.js
2234lib/seamonkey/components/addonManager.js 2244lib/seamonkey/components/addonManager.js
2235lib/seamonkey/components/amContentHandler.js 2245lib/seamonkey/components/amContentHandler.js
2236lib/seamonkey/components/amWebInstallListener.js 2246lib/seamonkey/components/amWebInstallListener.js
2237lib/seamonkey/components/components.manifest 2247lib/seamonkey/components/components.manifest
2238lib/seamonkey/components/contentAreaDropListener.js 2248lib/seamonkey/components/contentAreaDropListener.js
2239lib/seamonkey/components/contentSecurityPolicy.js 2249lib/seamonkey/components/contentSecurityPolicy.js
2240lib/seamonkey/components/crypto-SDR.js 2250lib/seamonkey/components/crypto-SDR.js
@@ -2283,28 +2293,26 @@ lib/seamonkey/components/nsPlacesExpirat @@ -2283,28 +2293,26 @@ lib/seamonkey/components/nsPlacesExpirat
2283lib/seamonkey/components/nsPrompter.js 2293lib/seamonkey/components/nsPrompter.js
2284lib/seamonkey/components/nsSMTPProtocolHandler.js 2294lib/seamonkey/components/nsSMTPProtocolHandler.js
2285lib/seamonkey/components/nsSearchService.js 2295lib/seamonkey/components/nsSearchService.js
2286lib/seamonkey/components/nsSearchSuggestions.js 2296lib/seamonkey/components/nsSearchSuggestions.js
2287lib/seamonkey/components/nsSessionStartup.js 2297lib/seamonkey/components/nsSessionStartup.js
2288lib/seamonkey/components/nsSessionStore.js 2298lib/seamonkey/components/nsSessionStore.js
2289lib/seamonkey/components/nsSetDefault.js 2299lib/seamonkey/components/nsSetDefault.js
2290lib/seamonkey/components/nsSidebar.js 2300lib/seamonkey/components/nsSidebar.js
2291lib/seamonkey/components/nsSuiteDownloadManagerUI.js 2301lib/seamonkey/components/nsSuiteDownloadManagerUI.js
2292lib/seamonkey/components/nsSuiteGlue.js 2302lib/seamonkey/components/nsSuiteGlue.js
2293lib/seamonkey/components/nsTaggingService.js 2303lib/seamonkey/components/nsTaggingService.js
2294lib/seamonkey/components/nsTypeAheadFind.js 2304lib/seamonkey/components/nsTypeAheadFind.js
2295lib/seamonkey/components/nsURLFormatter.js 2305lib/seamonkey/components/nsURLFormatter.js
2296lib/seamonkey/components/nsUpdateService.js 
2297lib/seamonkey/components/nsUpdateServiceStub.js 
2298lib/seamonkey/components/nsUpdateTimerManager.js 2306lib/seamonkey/components/nsUpdateTimerManager.js
2299lib/seamonkey/components/nsUrlClassifierHashCompleter.js 2307lib/seamonkey/components/nsUrlClassifierHashCompleter.js
2300lib/seamonkey/components/nsUrlClassifierLib.js 2308lib/seamonkey/components/nsUrlClassifierLib.js
2301lib/seamonkey/components/nsUrlClassifierListManager.js 2309lib/seamonkey/components/nsUrlClassifierListManager.js
2302lib/seamonkey/components/nsWebHandlerApp.js 2310lib/seamonkey/components/nsWebHandlerApp.js
2303lib/seamonkey/components/offlineStartup.js 2311lib/seamonkey/components/offlineStartup.js
2304lib/seamonkey/components/smileApplication.js 2312lib/seamonkey/components/smileApplication.js
2305lib/seamonkey/components/smime-service.js 2313lib/seamonkey/components/smime-service.js
2306lib/seamonkey/components/storage-Legacy.js 2314lib/seamonkey/components/storage-Legacy.js
2307lib/seamonkey/components/storage-mozStorage.js 2315lib/seamonkey/components/storage-mozStorage.js
2308lib/seamonkey/components/txEXSLTRegExFunctions.js 2316lib/seamonkey/components/txEXSLTRegExFunctions.js
2309lib/seamonkey/defaults/autoconfig/platform.js 2317lib/seamonkey/defaults/autoconfig/platform.js
2310lib/seamonkey/defaults/autoconfig/prefcalls.js 2318lib/seamonkey/defaults/autoconfig/prefcalls.js
@@ -2756,26 +2764,28 @@ lib/seamonkey/extensions/modern@themes.m @@ -2756,26 +2764,28 @@ lib/seamonkey/extensions/modern@themes.m
2756lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share-open.gif 2764lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share-open.gif
2757lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share.gif 2765lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent-share.gif
2758lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent.gif 2766lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-sent.gif
2759lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share-open.gif 2767lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share-open.gif
2760lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share.gif 2768lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-share.gif
2761lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-open.gif 2769lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-open.gif
2762lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share-open.gif 2770lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share-open.gif
2763lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share.gif 2771lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template-share.gif
2764lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template.gif 2772lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-template.gif
2765lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-open.gif 2773lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-open.gif
2766lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share-open.gif 2774lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share-open.gif
2767lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share.gif 2775lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash-share.gif
2768lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash.gif 2776lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/folder-trash.gif
 2777lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/info.png
 2778lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junk.png
2769lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junkBar.gif 2779lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/junkBar.gif
2770lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/local-mailhost.gif 2780lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/local-mailhost.gif
2771lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/mast-mail.gif 2781lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/mast-mail.gif
2772lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-junk-other.gif 2782lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-junk-other.gif
2773lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-del.gif 2783lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-del.gif
2774lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl-reply.png 2784lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl-reply.png
2775lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl.png 2785lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-offl.png
2776lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-reply.png 2786lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd-reply.png
2777lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd.png 2787lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-fwd.png
2778lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl-reply.png 2788lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl-reply.png
2779lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl.gif 2789lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-offl.gif
2780lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-reply.png 2790lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach-reply.png
2781lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach.gif 2791lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-mail-attach.gif
@@ -2794,26 +2804,27 @@ lib/seamonkey/extensions/modern@themes.m @@ -2794,26 +2804,27 @@ lib/seamonkey/extensions/modern@themes.m
2794lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill-offl.png 2804lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill-offl.png
2795lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill.png 2805lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-kill.png
2796lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-offl.gif 2806lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach-offl.gif
2797lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach.gif 2807lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-attach.gif
2798lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill-offl.png 2808lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill-offl.png
2799lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill.png 2809lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-kill.png
2800lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach-off.gif 2810lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach-off.gif
2801lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach.gif 2811lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-attach.gif
2802lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-offl.gif 2812lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new-offl.gif
2803lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new.gif 2813lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-new.gif
2804lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-offl.gif 2814lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news-offl.gif
2805lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news.gif 2815lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/message-news.gif
2806lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/new-mail-alert.png 2816lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/new-mail-alert.png
 2817lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/phishing.png
2807lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-read.gif 2818lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-read.gif
2808lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-unread.gif 2819lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/readcol-unread.gif
2809lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/remote-blocked.png 2820lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/remote-blocked.png
2810lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local-new.gif 2821lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local-new.gif
2811lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local.gif 2822lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-local.gif
2812lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail-new.gif 2823lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail-new.gif
2813lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail.gif 2824lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-mail.gif
2814lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-lock.gif 2825lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-lock.gif
2815lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-new.gif 2826lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news-new.gif
2816lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news.gif 2827lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-news.gif
2817lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock-new.gif 2828lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock-new.gif
2818lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock.gif 2829lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/server-remote-lock.gif
2819lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-eye.gif 2830lib/seamonkey/extensions/modern@themes.mozilla.org/chrome/modern/skin/modern/messenger/icons/thread-closed-eye.gif
@@ -2998,158 +3009,172 @@ lib/seamonkey/hyphenation/hyph_kmr.dic @@ -2998,158 +3009,172 @@ lib/seamonkey/hyphenation/hyph_kmr.dic
2998lib/seamonkey/hyphenation/hyph_la.dic 3009lib/seamonkey/hyphenation/hyph_la.dic
2999lib/seamonkey/hyphenation/hyph_lt.dic 3010lib/seamonkey/hyphenation/hyph_lt.dic
3000lib/seamonkey/hyphenation/hyph_mn.dic 3011lib/seamonkey/hyphenation/hyph_mn.dic
3001lib/seamonkey/hyphenation/hyph_nb.dic 3012lib/seamonkey/hyphenation/hyph_nb.dic
3002lib/seamonkey/hyphenation/hyph_nl.dic 3013lib/seamonkey/hyphenation/hyph_nl.dic
3003lib/seamonkey/hyphenation/hyph_nn.dic 3014lib/seamonkey/hyphenation/hyph_nn.dic
3004lib/seamonkey/hyphenation/hyph_pt.dic 3015lib/seamonkey/hyphenation/hyph_pt.dic
3005lib/seamonkey/hyphenation/hyph_ru.dic 3016lib/seamonkey/hyphenation/hyph_ru.dic
3006lib/seamonkey/hyphenation/hyph_sh.dic 3017lib/seamonkey/hyphenation/hyph_sh.dic
3007lib/seamonkey/hyphenation/hyph_sl.dic 3018lib/seamonkey/hyphenation/hyph_sl.dic
3008lib/seamonkey/hyphenation/hyph_sv.dic 3019lib/seamonkey/hyphenation/hyph_sv.dic
3009lib/seamonkey/hyphenation/hyph_tr.dic 3020lib/seamonkey/hyphenation/hyph_tr.dic
3010lib/seamonkey/hyphenation/hyph_uk.dic 3021lib/seamonkey/hyphenation/hyph_uk.dic
3011lib/seamonkey/icons/updater.png 
3012lib/seamonkey/isp/Bogofilter.sfd 3022lib/seamonkey/isp/Bogofilter.sfd
3013lib/seamonkey/isp/DSPAM.sfd 3023lib/seamonkey/isp/DSPAM.sfd
3014lib/seamonkey/isp/POPFile.sfd 3024lib/seamonkey/isp/POPFile.sfd
3015lib/seamonkey/isp/SpamAssassin.sfd 3025lib/seamonkey/isp/SpamAssassin.sfd
3016lib/seamonkey/isp/SpamPal.sfd 3026lib/seamonkey/isp/SpamPal.sfd
3017lib/seamonkey/isp/movemail.rdf 3027lib/seamonkey/isp/movemail.rdf
3018lib/seamonkey/isp/rss.rdf 3028lib/seamonkey/isp/rss.rdf
3019lib/seamonkey/libldap60.so 3029lib/seamonkey/libldap60.so
3020lib/seamonkey/libldif60.so 3030lib/seamonkey/libldif60.so
3021lib/seamonkey/libmozalloc.so 3031lib/seamonkey/libmozalloc.so
3022lib/seamonkey/libmozjs.so 3032lib/seamonkey/libmozjs.so
3023lib/seamonkey/libprldap60.so 3033lib/seamonkey/libprldap60.so
3024lib/seamonkey/libxul.so 3034lib/seamonkey/libxul.so
3025lib/seamonkey/license.txt 3035lib/seamonkey/license.txt
3026lib/seamonkey/modules/ActivitiesService.jsm 3036lib/seamonkey/modules/ActivitiesService.jsm
3027lib/seamonkey/modules/ActivitiesServiceFilter.jsm 3037lib/seamonkey/modules/ActivitiesServiceFilter.jsm
3028lib/seamonkey/modules/AddonLogging.jsm 3038lib/seamonkey/modules/AddonLogging.jsm
3029lib/seamonkey/modules/AddonManager.jsm 3039lib/seamonkey/modules/AddonManager.jsm
3030lib/seamonkey/modules/AddonRepository.jsm 3040lib/seamonkey/modules/AddonRepository.jsm
3031lib/seamonkey/modules/AddonRepository_SQLiteMigrator.jsm 3041lib/seamonkey/modules/AddonRepository_SQLiteMigrator.jsm
3032lib/seamonkey/modules/AddonUpdateChecker.jsm 3042lib/seamonkey/modules/AddonUpdateChecker.jsm
3033lib/seamonkey/modules/AlarmDB.jsm 3043lib/seamonkey/modules/AlarmDB.jsm
3034lib/seamonkey/modules/AlarmService.jsm 3044lib/seamonkey/modules/AlarmService.jsm
3035lib/seamonkey/modules/AppDownloadManager.jsm 3045lib/seamonkey/modules/AppDownloadManager.jsm
3036lib/seamonkey/modules/AppsServiceChild.jsm 3046lib/seamonkey/modules/AppsServiceChild.jsm
3037lib/seamonkey/modules/AppsUtils.jsm 3047lib/seamonkey/modules/AppsUtils.jsm
 3048lib/seamonkey/modules/AsyncShutdown.jsm
3038lib/seamonkey/modules/AsyncSpellCheckTestHelper.jsm 3049lib/seamonkey/modules/AsyncSpellCheckTestHelper.jsm
3039lib/seamonkey/modules/BookmarkHTMLUtils.jsm 3050lib/seamonkey/modules/BookmarkHTMLUtils.jsm
3040lib/seamonkey/modules/BookmarkJSONUtils.jsm 3051lib/seamonkey/modules/BookmarkJSONUtils.jsm
3041lib/seamonkey/modules/BrowserElementParent.jsm 3052lib/seamonkey/modules/BrowserElementParent.jsm
3042lib/seamonkey/modules/BrowserElementPromptService.jsm 3053lib/seamonkey/modules/BrowserElementPromptService.jsm
3043lib/seamonkey/modules/CSPUtils.jsm 3054lib/seamonkey/modules/CSPUtils.jsm
3044lib/seamonkey/modules/CertUtils.jsm 3055lib/seamonkey/modules/CertUtils.jsm
3045lib/seamonkey/modules/ChromeManifestParser.jsm 3056lib/seamonkey/modules/ChromeManifestParser.jsm
3046lib/seamonkey/modules/ClusterLib.js 3057lib/seamonkey/modules/ClusterLib.js
3047lib/seamonkey/modules/ColorAnalyzer_worker.js 3058lib/seamonkey/modules/ColorAnalyzer_worker.js
3048lib/seamonkey/modules/ColorConversion.js 3059lib/seamonkey/modules/ColorConversion.js
3049lib/seamonkey/modules/CommonDialog.jsm 3060lib/seamonkey/modules/CommonDialog.jsm
3050lib/seamonkey/modules/ConsoleAPIStorage.jsm 3061lib/seamonkey/modules/ConsoleAPIStorage.jsm
3051lib/seamonkey/modules/ContactDB.jsm 3062lib/seamonkey/modules/ContactDB.jsm
3052lib/seamonkey/modules/ContactService.jsm 3063lib/seamonkey/modules/ContactService.jsm
3053lib/seamonkey/modules/ContentPrefInstance.jsm 3064lib/seamonkey/modules/ContentPrefInstance.jsm
3054lib/seamonkey/modules/ContentPrefService2.jsm 3065lib/seamonkey/modules/ContentPrefService2.jsm
3055lib/seamonkey/modules/ContentPrefStore.jsm 3066lib/seamonkey/modules/ContentPrefStore.jsm
3056lib/seamonkey/modules/DOMIdentity.jsm 3067lib/seamonkey/modules/DOMIdentity.jsm
3057lib/seamonkey/modules/DOMRequestHelper.jsm 3068lib/seamonkey/modules/DOMRequestHelper.jsm
3058lib/seamonkey/modules/DeferredSave.jsm 3069lib/seamonkey/modules/DeferredSave.jsm
3059lib/seamonkey/modules/DeferredTask.jsm 3070lib/seamonkey/modules/DeferredTask.jsm
3060lib/seamonkey/modules/Deprecated.jsm 3071lib/seamonkey/modules/Deprecated.jsm
3061lib/seamonkey/modules/Dict.jsm 3072lib/seamonkey/modules/Dict.jsm
3062lib/seamonkey/modules/DownloadCore.jsm 3073lib/seamonkey/modules/DownloadCore.jsm
 3074lib/seamonkey/modules/DownloadImport.jsm
3063lib/seamonkey/modules/DownloadIntegration.jsm 3075lib/seamonkey/modules/DownloadIntegration.jsm
3064lib/seamonkey/modules/DownloadLastDir.jsm 3076lib/seamonkey/modules/DownloadLastDir.jsm
3065lib/seamonkey/modules/DownloadList.jsm 3077lib/seamonkey/modules/DownloadList.jsm
3066lib/seamonkey/modules/DownloadPaths.jsm 3078lib/seamonkey/modules/DownloadPaths.jsm
3067lib/seamonkey/modules/DownloadStore.jsm 3079lib/seamonkey/modules/DownloadStore.jsm
3068lib/seamonkey/modules/DownloadTaskbarIntegration.jsm 
3069lib/seamonkey/modules/DownloadTaskbarProgress.jsm 3080lib/seamonkey/modules/DownloadTaskbarProgress.jsm
3070lib/seamonkey/modules/DownloadUIHelper.jsm 3081lib/seamonkey/modules/DownloadUIHelper.jsm
3071lib/seamonkey/modules/DownloadUtils.jsm 3082lib/seamonkey/modules/DownloadUtils.jsm
3072lib/seamonkey/modules/Downloads.jsm 3083lib/seamonkey/modules/Downloads.jsm
3073lib/seamonkey/modules/FileUtils.jsm 3084lib/seamonkey/modules/FileUtils.jsm
3074lib/seamonkey/modules/ForgetAboutSite.jsm 3085lib/seamonkey/modules/ForgetAboutSite.jsm
3075lib/seamonkey/modules/FormHistory.jsm 3086lib/seamonkey/modules/FormHistory.jsm
3076lib/seamonkey/modules/FrameWorker.jsm 3087lib/seamonkey/modules/FrameWorker.jsm
 3088lib/seamonkey/modules/FrameWorkerContent.js
3077lib/seamonkey/modules/FreeSpaceWatcher.jsm 3089lib/seamonkey/modules/FreeSpaceWatcher.jsm
3078lib/seamonkey/modules/Geometry.jsm 3090lib/seamonkey/modules/Geometry.jsm
3079lib/seamonkey/modules/Http.jsm 3091lib/seamonkey/modules/Http.jsm
3080lib/seamonkey/modules/IOUtils.js 3092lib/seamonkey/modules/IOUtils.js
3081lib/seamonkey/modules/ISO8601DateUtils.jsm 3093lib/seamonkey/modules/ISO8601DateUtils.jsm
3082lib/seamonkey/modules/IndexedDBHelper.jsm 3094lib/seamonkey/modules/IndexedDBHelper.jsm
3083lib/seamonkey/modules/InlineSpellChecker.jsm 3095lib/seamonkey/modules/InlineSpellChecker.jsm
 3096lib/seamonkey/modules/InsecurePasswordUtils.jsm
3084lib/seamonkey/modules/JXON.js 3097lib/seamonkey/modules/JXON.js
 3098lib/seamonkey/modules/Keyboard.jsm
3085lib/seamonkey/modules/LightweightThemeConsumer.jsm 3099lib/seamonkey/modules/LightweightThemeConsumer.jsm
3086lib/seamonkey/modules/LightweightThemeImageOptimizer.jsm 3100lib/seamonkey/modules/LightweightThemeImageOptimizer.jsm
3087lib/seamonkey/modules/LightweightThemeManager.jsm 3101lib/seamonkey/modules/LightweightThemeManager.jsm
3088lib/seamonkey/modules/LoginManagerContent.jsm 3102lib/seamonkey/modules/LoginManagerContent.jsm
3089lib/seamonkey/modules/MailUtils.js 3103lib/seamonkey/modules/MailUtils.js
3090lib/seamonkey/modules/MessagePortBase.jsm 3104lib/seamonkey/modules/MessagePortBase.jsm
3091lib/seamonkey/modules/MessagePortWorker.js 3105lib/seamonkey/modules/MessagePortWorker.js
3092lib/seamonkey/modules/Microformats.js 3106lib/seamonkey/modules/Microformats.js
3093lib/seamonkey/modules/MozSocialAPI.jsm 3107lib/seamonkey/modules/MozSocialAPI.jsm
3094lib/seamonkey/modules/NetUtil.jsm 3108lib/seamonkey/modules/NetUtil.jsm
3095lib/seamonkey/modules/NewTabUtils.jsm 3109lib/seamonkey/modules/NewTabUtils.jsm
3096lib/seamonkey/modules/ObjectWrapper.jsm 3110lib/seamonkey/modules/ObjectWrapper.jsm
3097lib/seamonkey/modules/OfflineCacheInstaller.jsm 3111lib/seamonkey/modules/OfflineCacheInstaller.jsm
 3112lib/seamonkey/modules/OperatorApps.jsm
3098lib/seamonkey/modules/PageMenu.jsm 3113lib/seamonkey/modules/PageMenu.jsm
3099lib/seamonkey/modules/PageThumbs.jsm 3114lib/seamonkey/modules/PageThumbs.jsm
3100lib/seamonkey/modules/PageThumbsWorker.js 3115lib/seamonkey/modules/PageThumbsWorker.js
3101lib/seamonkey/modules/PerfMeasurement.jsm 3116lib/seamonkey/modules/PerfMeasurement.jsm
3102lib/seamonkey/modules/PermissionPromptHelper.jsm 3117lib/seamonkey/modules/PermissionPromptHelper.jsm
3103lib/seamonkey/modules/PermissionSettings.jsm 3118lib/seamonkey/modules/PermissionSettings.jsm
3104lib/seamonkey/modules/PermissionsInstaller.jsm 3119lib/seamonkey/modules/PermissionsInstaller.jsm
3105lib/seamonkey/modules/PermissionsTable.jsm 3120lib/seamonkey/modules/PermissionsTable.jsm
3106lib/seamonkey/modules/PhoneNumber.jsm 3121lib/seamonkey/modules/PhoneNumber.jsm
3107lib/seamonkey/modules/PhoneNumberMetaData.jsm 3122lib/seamonkey/modules/PhoneNumberMetaData.jsm
 3123lib/seamonkey/modules/PhoneNumberNormalizer.jsm
3108lib/seamonkey/modules/PhoneNumberUtils.jsm 3124lib/seamonkey/modules/PhoneNumberUtils.jsm
3109lib/seamonkey/modules/PlacesBackups.jsm 3125lib/seamonkey/modules/PlacesBackups.jsm
3110lib/seamonkey/modules/PlacesDBUtils.jsm 3126lib/seamonkey/modules/PlacesDBUtils.jsm
3111lib/seamonkey/modules/PlacesUIUtils.jsm 3127lib/seamonkey/modules/PlacesUIUtils.jsm
3112lib/seamonkey/modules/PlacesUtils.jsm 3128lib/seamonkey/modules/PlacesUtils.jsm
3113lib/seamonkey/modules/PluginProvider.jsm 3129lib/seamonkey/modules/PluginProvider.jsm
3114lib/seamonkey/modules/PluralForm.jsm 3130lib/seamonkey/modules/PluralForm.jsm
3115lib/seamonkey/modules/PopupNotifications.jsm 3131lib/seamonkey/modules/PopupNotifications.jsm
3116lib/seamonkey/modules/Preferences.jsm 3132lib/seamonkey/modules/Preferences.jsm
3117lib/seamonkey/modules/PrivateBrowsingUtils.jsm 3133lib/seamonkey/modules/PrivateBrowsingUtils.jsm
3118lib/seamonkey/modules/Promise.jsm 3134lib/seamonkey/modules/Promise.jsm
3119lib/seamonkey/modules/PropertyListUtils.jsm 3135lib/seamonkey/modules/PropertyListUtils.jsm
3120lib/seamonkey/modules/PushService.jsm 3136lib/seamonkey/modules/PushService.jsm
 3137lib/seamonkey/modules/RemoteAddonsChild.jsm
 3138lib/seamonkey/modules/RemoteAddonsParent.jsm
 3139lib/seamonkey/modules/RemoteController.jsm
3121lib/seamonkey/modules/RemoteSecurityUI.jsm 3140lib/seamonkey/modules/RemoteSecurityUI.jsm
 3141lib/seamonkey/modules/RemoteWebNavigation.jsm
3122lib/seamonkey/modules/RemoteWebProgress.jsm 3142lib/seamonkey/modules/RemoteWebProgress.jsm
3123lib/seamonkey/modules/ResetProfile.jsm 3143lib/seamonkey/modules/ResetProfile.jsm
3124lib/seamonkey/modules/SafeBrowsing.jsm 3144lib/seamonkey/modules/SafeBrowsing.jsm
3125lib/seamonkey/modules/Sanitizer.jsm 3145lib/seamonkey/modules/Sanitizer.jsm
 3146lib/seamonkey/modules/SelectContentHelper.jsm
 3147lib/seamonkey/modules/SelectParentHelper.jsm
3126lib/seamonkey/modules/Services.jsm 3148lib/seamonkey/modules/Services.jsm
3127lib/seamonkey/modules/SettingsChangeNotifier.jsm 3149lib/seamonkey/modules/SettingsChangeNotifier.jsm
3128lib/seamonkey/modules/SettingsDB.jsm 3150lib/seamonkey/modules/SettingsDB.jsm
3129lib/seamonkey/modules/SettingsQueue.jsm 3151lib/seamonkey/modules/SettingsQueue.jsm
 3152lib/seamonkey/modules/Sntp.jsm
3130lib/seamonkey/modules/SocialService.jsm 3153lib/seamonkey/modules/SocialService.jsm
3131lib/seamonkey/modules/SpellCheckDictionaryBootstrap.js 3154lib/seamonkey/modules/SpellCheckDictionaryBootstrap.js
3132lib/seamonkey/modules/Sqlite.jsm 3155lib/seamonkey/modules/Sqlite.jsm
3133lib/seamonkey/modules/StringBundle.js 3156lib/seamonkey/modules/StringBundle.js
3134lib/seamonkey/modules/SystemMessagePermissionsChecker.jsm 3157lib/seamonkey/modules/SystemMessagePermissionsChecker.jsm
3135lib/seamonkey/modules/Task.jsm 3158lib/seamonkey/modules/Task.jsm
 3159lib/seamonkey/modules/TelemetryFile.jsm
3136lib/seamonkey/modules/TelemetryStopwatch.jsm 3160lib/seamonkey/modules/TelemetryStopwatch.jsm
3137lib/seamonkey/modules/TelemetryTimestamps.jsm 3161lib/seamonkey/modules/TelemetryTimestamps.jsm
3138lib/seamonkey/modules/ThirdPartyCookieProbe.jsm 3162lib/seamonkey/modules/ThirdPartyCookieProbe.jsm
3139lib/seamonkey/modules/Timer.jsm 3163lib/seamonkey/modules/Timer.jsm
3140lib/seamonkey/modules/Troubleshoot.jsm 3164lib/seamonkey/modules/Troubleshoot.jsm
3141lib/seamonkey/modules/UpdateChannel.jsm 3165lib/seamonkey/modules/UpdateChannel.jsm
3142lib/seamonkey/modules/UserAgentOverrides.jsm 3166lib/seamonkey/modules/UserAgentOverrides.jsm
 3167lib/seamonkey/modules/UserAgentUpdates.jsm
3143lib/seamonkey/modules/WebappOSUtils.jsm 3168lib/seamonkey/modules/WebappOSUtils.jsm
3144lib/seamonkey/modules/Webapps.jsm 3169lib/seamonkey/modules/Webapps.jsm
3145lib/seamonkey/modules/WebappsInstaller.jsm 3170lib/seamonkey/modules/WebappsInstaller.jsm
3146lib/seamonkey/modules/WindowDraggingUtils.jsm 3171lib/seamonkey/modules/WindowDraggingUtils.jsm
3147lib/seamonkey/modules/WindowsPreviewPerTab.jsm 3172lib/seamonkey/modules/WindowsPreviewPerTab.jsm
3148lib/seamonkey/modules/WorkerAPI.jsm 3173lib/seamonkey/modules/WorkerAPI.jsm
3149lib/seamonkey/modules/XPCOMUtils.jsm 3174lib/seamonkey/modules/XPCOMUtils.jsm
3150lib/seamonkey/modules/XPIProvider.jsm 3175lib/seamonkey/modules/XPIProvider.jsm
3151lib/seamonkey/modules/XPIProviderUtils.js 3176lib/seamonkey/modules/XPIProviderUtils.js
3152lib/seamonkey/modules/accessibility/AccessFu.jsm 3177lib/seamonkey/modules/accessibility/AccessFu.jsm
3153lib/seamonkey/modules/accessibility/EventManager.jsm 3178lib/seamonkey/modules/accessibility/EventManager.jsm
3154lib/seamonkey/modules/accessibility/Makefile.in 3179lib/seamonkey/modules/accessibility/Makefile.in
3155lib/seamonkey/modules/accessibility/OutputGenerator.jsm 3180lib/seamonkey/modules/accessibility/OutputGenerator.jsm
@@ -3244,26 +3269,27 @@ lib/seamonkey/modules/commonjs/sdk/net/u @@ -3244,26 +3269,27 @@ lib/seamonkey/modules/commonjs/sdk/net/u
3244lib/seamonkey/modules/commonjs/sdk/net/xhr.js 3269lib/seamonkey/modules/commonjs/sdk/net/xhr.js
3245lib/seamonkey/modules/commonjs/sdk/notifications.js 3270lib/seamonkey/modules/commonjs/sdk/notifications.js
3246lib/seamonkey/modules/commonjs/sdk/page-mod.js 3271lib/seamonkey/modules/commonjs/sdk/page-mod.js
3247lib/seamonkey/modules/commonjs/sdk/page-mod/match-pattern.js 3272lib/seamonkey/modules/commonjs/sdk/page-mod/match-pattern.js
3248lib/seamonkey/modules/commonjs/sdk/page-worker.js 3273lib/seamonkey/modules/commonjs/sdk/page-worker.js
3249lib/seamonkey/modules/commonjs/sdk/panel.js 3274lib/seamonkey/modules/commonjs/sdk/panel.js
3250lib/seamonkey/modules/commonjs/sdk/panel/events.js 3275lib/seamonkey/modules/commonjs/sdk/panel/events.js
3251lib/seamonkey/modules/commonjs/sdk/panel/utils.js 3276lib/seamonkey/modules/commonjs/sdk/panel/utils.js
3252lib/seamonkey/modules/commonjs/sdk/panel/window.js 3277lib/seamonkey/modules/commonjs/sdk/panel/window.js
3253lib/seamonkey/modules/commonjs/sdk/passwords.js 3278lib/seamonkey/modules/commonjs/sdk/passwords.js
3254lib/seamonkey/modules/commonjs/sdk/passwords/utils.js 3279lib/seamonkey/modules/commonjs/sdk/passwords/utils.js
3255lib/seamonkey/modules/commonjs/sdk/places/bookmarks.js 3280lib/seamonkey/modules/commonjs/sdk/places/bookmarks.js
3256lib/seamonkey/modules/commonjs/sdk/places/contract.js 3281lib/seamonkey/modules/commonjs/sdk/places/contract.js
 3282lib/seamonkey/modules/commonjs/sdk/places/events.js
3257lib/seamonkey/modules/commonjs/sdk/places/favicon.js 3283lib/seamonkey/modules/commonjs/sdk/places/favicon.js
3258lib/seamonkey/modules/commonjs/sdk/places/history.js 3284lib/seamonkey/modules/commonjs/sdk/places/history.js
3259lib/seamonkey/modules/commonjs/sdk/places/host/host-bookmarks.js 3285lib/seamonkey/modules/commonjs/sdk/places/host/host-bookmarks.js
3260lib/seamonkey/modules/commonjs/sdk/places/host/host-query.js 3286lib/seamonkey/modules/commonjs/sdk/places/host/host-query.js
3261lib/seamonkey/modules/commonjs/sdk/places/host/host-tags.js 3287lib/seamonkey/modules/commonjs/sdk/places/host/host-tags.js
3262lib/seamonkey/modules/commonjs/sdk/places/utils.js 3288lib/seamonkey/modules/commonjs/sdk/places/utils.js
3263lib/seamonkey/modules/commonjs/sdk/platform/xpcom.js 3289lib/seamonkey/modules/commonjs/sdk/platform/xpcom.js
3264lib/seamonkey/modules/commonjs/sdk/preferences/event-target.js 3290lib/seamonkey/modules/commonjs/sdk/preferences/event-target.js
3265lib/seamonkey/modules/commonjs/sdk/preferences/service.js 3291lib/seamonkey/modules/commonjs/sdk/preferences/service.js
3266lib/seamonkey/modules/commonjs/sdk/private-browsing.js 3292lib/seamonkey/modules/commonjs/sdk/private-browsing.js
3267lib/seamonkey/modules/commonjs/sdk/private-browsing/utils.js 3293lib/seamonkey/modules/commonjs/sdk/private-browsing/utils.js
3268lib/seamonkey/modules/commonjs/sdk/private-browsing/window/utils.js 3294lib/seamonkey/modules/commonjs/sdk/private-browsing/window/utils.js
3269lib/seamonkey/modules/commonjs/sdk/querystring.js 3295lib/seamonkey/modules/commonjs/sdk/querystring.js
@@ -3294,26 +3320,36 @@ lib/seamonkey/modules/commonjs/sdk/tabs/ @@ -3294,26 +3320,36 @@ lib/seamonkey/modules/commonjs/sdk/tabs/
3294lib/seamonkey/modules/commonjs/sdk/tabs/tabs-firefox.js 3320lib/seamonkey/modules/commonjs/sdk/tabs/tabs-firefox.js
3295lib/seamonkey/modules/commonjs/sdk/tabs/tabs.js 3321lib/seamonkey/modules/commonjs/sdk/tabs/tabs.js
3296lib/seamonkey/modules/commonjs/sdk/tabs/utils.js 3322lib/seamonkey/modules/commonjs/sdk/tabs/utils.js
3297lib/seamonkey/modules/commonjs/sdk/tabs/worker.js 3323lib/seamonkey/modules/commonjs/sdk/tabs/worker.js
3298lib/seamonkey/modules/commonjs/sdk/test.js 3324lib/seamonkey/modules/commonjs/sdk/test.js
3299lib/seamonkey/modules/commonjs/sdk/test/assert.js 3325lib/seamonkey/modules/commonjs/sdk/test/assert.js
3300lib/seamonkey/modules/commonjs/sdk/test/harness.js 3326lib/seamonkey/modules/commonjs/sdk/test/harness.js
3301lib/seamonkey/modules/commonjs/sdk/test/httpd.js 3327lib/seamonkey/modules/commonjs/sdk/test/httpd.js
3302lib/seamonkey/modules/commonjs/sdk/test/loader.js 3328lib/seamonkey/modules/commonjs/sdk/test/loader.js
3303lib/seamonkey/modules/commonjs/sdk/test/runner.js 3329lib/seamonkey/modules/commonjs/sdk/test/runner.js
3304lib/seamonkey/modules/commonjs/sdk/test/tmp-file.js 3330lib/seamonkey/modules/commonjs/sdk/test/tmp-file.js
3305lib/seamonkey/modules/commonjs/sdk/test/utils.js 3331lib/seamonkey/modules/commonjs/sdk/test/utils.js
3306lib/seamonkey/modules/commonjs/sdk/timers.js 3332lib/seamonkey/modules/commonjs/sdk/timers.js
 3333lib/seamonkey/modules/commonjs/sdk/ui.js
 3334lib/seamonkey/modules/commonjs/sdk/ui/button.js
 3335lib/seamonkey/modules/commonjs/sdk/ui/button/view.js
 3336lib/seamonkey/modules/commonjs/sdk/ui/sidebar.js
 3337lib/seamonkey/modules/commonjs/sdk/ui/sidebar/actions.js
 3338lib/seamonkey/modules/commonjs/sdk/ui/sidebar/contract.js
 3339lib/seamonkey/modules/commonjs/sdk/ui/sidebar/namespace.js
 3340lib/seamonkey/modules/commonjs/sdk/ui/sidebar/utils.js
 3341lib/seamonkey/modules/commonjs/sdk/ui/sidebar/view.js
 3342lib/seamonkey/modules/commonjs/sdk/ui/state.js
3307lib/seamonkey/modules/commonjs/sdk/url.js 3343lib/seamonkey/modules/commonjs/sdk/url.js
3308lib/seamonkey/modules/commonjs/sdk/url/utils.js 3344lib/seamonkey/modules/commonjs/sdk/url/utils.js
3309lib/seamonkey/modules/commonjs/sdk/util/array.js 3345lib/seamonkey/modules/commonjs/sdk/util/array.js
3310lib/seamonkey/modules/commonjs/sdk/util/collection.js 3346lib/seamonkey/modules/commonjs/sdk/util/collection.js
3311lib/seamonkey/modules/commonjs/sdk/util/contract.js 3347lib/seamonkey/modules/commonjs/sdk/util/contract.js
3312lib/seamonkey/modules/commonjs/sdk/util/deprecate.js 3348lib/seamonkey/modules/commonjs/sdk/util/deprecate.js
3313lib/seamonkey/modules/commonjs/sdk/util/list.js 3349lib/seamonkey/modules/commonjs/sdk/util/list.js
3314lib/seamonkey/modules/commonjs/sdk/util/match-pattern.js 3350lib/seamonkey/modules/commonjs/sdk/util/match-pattern.js
3315lib/seamonkey/modules/commonjs/sdk/util/object.js 3351lib/seamonkey/modules/commonjs/sdk/util/object.js
3316lib/seamonkey/modules/commonjs/sdk/util/registry.js 3352lib/seamonkey/modules/commonjs/sdk/util/registry.js
3317lib/seamonkey/modules/commonjs/sdk/util/rules.js 3353lib/seamonkey/modules/commonjs/sdk/util/rules.js
3318lib/seamonkey/modules/commonjs/sdk/util/uuid.js 3354lib/seamonkey/modules/commonjs/sdk/util/uuid.js
3319lib/seamonkey/modules/commonjs/sdk/view/core.js 3355lib/seamonkey/modules/commonjs/sdk/view/core.js
@@ -3329,52 +3365,64 @@ lib/seamonkey/modules/commonjs/sdk/windo @@ -3329,52 +3365,64 @@ lib/seamonkey/modules/commonjs/sdk/windo
3329lib/seamonkey/modules/commonjs/sdk/windows/firefox.js 3365lib/seamonkey/modules/commonjs/sdk/windows/firefox.js
3330lib/seamonkey/modules/commonjs/sdk/windows/loader.js 3366lib/seamonkey/modules/commonjs/sdk/windows/loader.js
3331lib/seamonkey/modules/commonjs/sdk/windows/observer.js 3367lib/seamonkey/modules/commonjs/sdk/windows/observer.js
3332lib/seamonkey/modules/commonjs/sdk/windows/tabs-fennec.js 3368lib/seamonkey/modules/commonjs/sdk/windows/tabs-fennec.js
3333lib/seamonkey/modules/commonjs/sdk/windows/tabs-firefox.js 3369lib/seamonkey/modules/commonjs/sdk/windows/tabs-firefox.js
3334lib/seamonkey/modules/commonjs/sdk/worker/utils.js 3370lib/seamonkey/modules/commonjs/sdk/worker/utils.js
3335lib/seamonkey/modules/commonjs/test.js 3371lib/seamonkey/modules/commonjs/test.js
3336lib/seamonkey/modules/commonjs/toolkit/loader.js 3372lib/seamonkey/modules/commonjs/toolkit/loader.js
3337lib/seamonkey/modules/ctypes.jsm 3373lib/seamonkey/modules/ctypes.jsm
3338lib/seamonkey/modules/debug.js 3374lib/seamonkey/modules/debug.js
3339lib/seamonkey/modules/devtools/Console.jsm 3375lib/seamonkey/modules/devtools/Console.jsm
3340lib/seamonkey/modules/devtools/DevToolsUtils.js 3376lib/seamonkey/modules/devtools/DevToolsUtils.js
3341lib/seamonkey/modules/devtools/DevToolsUtils.jsm 3377lib/seamonkey/modules/devtools/DevToolsUtils.jsm
 3378lib/seamonkey/modules/devtools/Devices.jsm
 3379lib/seamonkey/modules/devtools/LayoutHelpers.jsm
3342lib/seamonkey/modules/devtools/Loader.jsm 3380lib/seamonkey/modules/devtools/Loader.jsm
3343lib/seamonkey/modules/devtools/Require.jsm 3381lib/seamonkey/modules/devtools/Require.jsm
 3382lib/seamonkey/modules/devtools/Simulator.jsm
3344lib/seamonkey/modules/devtools/SourceMap.jsm 3383lib/seamonkey/modules/devtools/SourceMap.jsm
3345lib/seamonkey/modules/devtools/Templater.jsm 3384lib/seamonkey/modules/devtools/Templater.jsm
 3385lib/seamonkey/modules/devtools/app-actor-front.js
 3386lib/seamonkey/modules/devtools/client/connection-manager.js
3346lib/seamonkey/modules/devtools/dbg-client.jsm 3387lib/seamonkey/modules/devtools/dbg-client.jsm
3347lib/seamonkey/modules/devtools/dbg-server.jsm 3388lib/seamonkey/modules/devtools/dbg-server.jsm
 3389lib/seamonkey/modules/devtools/escodegen/escodegen.js
 3390lib/seamonkey/modules/devtools/escodegen/estraverse.js
 3391lib/seamonkey/modules/devtools/escodegen/package.json.js
3348lib/seamonkey/modules/devtools/gcli.jsm 3392lib/seamonkey/modules/devtools/gcli.jsm
3349lib/seamonkey/modules/devtools/server/actors/childtab.js 3393lib/seamonkey/modules/devtools/server/actors/childtab.js
 3394lib/seamonkey/modules/devtools/server/actors/device.js
3350lib/seamonkey/modules/devtools/server/actors/gcli.js 3395lib/seamonkey/modules/devtools/server/actors/gcli.js
3351lib/seamonkey/modules/devtools/server/actors/inspector.js 3396lib/seamonkey/modules/devtools/server/actors/inspector.js
3352lib/seamonkey/modules/devtools/server/actors/profiler.js 3397lib/seamonkey/modules/devtools/server/actors/profiler.js
3353lib/seamonkey/modules/devtools/server/actors/root.js 3398lib/seamonkey/modules/devtools/server/actors/root.js
3354lib/seamonkey/modules/devtools/server/actors/script.js 3399lib/seamonkey/modules/devtools/server/actors/script.js
3355lib/seamonkey/modules/devtools/server/actors/string.js 3400lib/seamonkey/modules/devtools/server/actors/string.js
3356lib/seamonkey/modules/devtools/server/actors/styleeditor.js 3401lib/seamonkey/modules/devtools/server/actors/styleeditor.js
 3402lib/seamonkey/modules/devtools/server/actors/styles.js
3357lib/seamonkey/modules/devtools/server/actors/tracer.js 3403lib/seamonkey/modules/devtools/server/actors/tracer.js
3358lib/seamonkey/modules/devtools/server/actors/webapps.js 3404lib/seamonkey/modules/devtools/server/actors/webapps.js
3359lib/seamonkey/modules/devtools/server/actors/webbrowser.js 3405lib/seamonkey/modules/devtools/server/actors/webbrowser.js
3360lib/seamonkey/modules/devtools/server/actors/webconsole.js 3406lib/seamonkey/modules/devtools/server/actors/webconsole.js
3361lib/seamonkey/modules/devtools/server/child.js 3407lib/seamonkey/modules/devtools/server/child.js
3362lib/seamonkey/modules/devtools/server/main.js 3408lib/seamonkey/modules/devtools/server/main.js
3363lib/seamonkey/modules/devtools/server/protocol.js 3409lib/seamonkey/modules/devtools/server/protocol.js
3364lib/seamonkey/modules/devtools/server/transport.js 3410lib/seamonkey/modules/devtools/server/transport.js
 3411lib/seamonkey/modules/devtools/styleinspector/css-logic.js
3365lib/seamonkey/modules/devtools/toolkit/webconsole/client.js 3412lib/seamonkey/modules/devtools/toolkit/webconsole/client.js
3366lib/seamonkey/modules/devtools/toolkit/webconsole/network-helper.js 3413lib/seamonkey/modules/devtools/toolkit/webconsole/network-helper.js
3367lib/seamonkey/modules/devtools/toolkit/webconsole/utils.js 3414lib/seamonkey/modules/devtools/toolkit/webconsole/utils.js
 3415lib/seamonkey/modules/devtools/touch-events.js
3368lib/seamonkey/modules/editorUtilities.jsm 3416lib/seamonkey/modules/editorUtilities.jsm
3369lib/seamonkey/modules/errUtils.js 3417lib/seamonkey/modules/errUtils.js
3370lib/seamonkey/modules/folderUtils.jsm 3418lib/seamonkey/modules/folderUtils.jsm
3371lib/seamonkey/modules/gloda/collection.js 3419lib/seamonkey/modules/gloda/collection.js
3372lib/seamonkey/modules/gloda/connotent.js 3420lib/seamonkey/modules/gloda/connotent.js
3373lib/seamonkey/modules/gloda/databind.js 3421lib/seamonkey/modules/gloda/databind.js
3374lib/seamonkey/modules/gloda/datamodel.js 3422lib/seamonkey/modules/gloda/datamodel.js
3375lib/seamonkey/modules/gloda/datastore.js 3423lib/seamonkey/modules/gloda/datastore.js
3376lib/seamonkey/modules/gloda/dbview.js 3424lib/seamonkey/modules/gloda/dbview.js
3377lib/seamonkey/modules/gloda/everybody.js 3425lib/seamonkey/modules/gloda/everybody.js
3378lib/seamonkey/modules/gloda/explattr.js 3426lib/seamonkey/modules/gloda/explattr.js
3379lib/seamonkey/modules/gloda/facet.js 3427lib/seamonkey/modules/gloda/facet.js
3380lib/seamonkey/modules/gloda/fundattr.js 3428lib/seamonkey/modules/gloda/fundattr.js
@@ -3434,27 +3482,26 @@ lib/seamonkey/modules/services-common/lo @@ -3434,27 +3482,26 @@ lib/seamonkey/modules/services-common/lo
3434lib/seamonkey/modules/services-common/observers.js 3482lib/seamonkey/modules/services-common/observers.js
3435lib/seamonkey/modules/services-common/rest.js 3483lib/seamonkey/modules/services-common/rest.js
3436lib/seamonkey/modules/services-common/storageservice.js 3484lib/seamonkey/modules/services-common/storageservice.js
3437lib/seamonkey/modules/services-common/stringbundle.js 3485lib/seamonkey/modules/services-common/stringbundle.js
3438lib/seamonkey/modules/services-common/tokenserverclient.js 3486lib/seamonkey/modules/services-common/tokenserverclient.js
3439lib/seamonkey/modules/services-common/utils.js 3487lib/seamonkey/modules/services-common/utils.js
3440lib/seamonkey/modules/services-crypto/WeaveCrypto.js 3488lib/seamonkey/modules/services-crypto/WeaveCrypto.js
3441lib/seamonkey/modules/services-crypto/utils.js 3489lib/seamonkey/modules/services-crypto/utils.js
3442lib/seamonkey/modules/services-sync/addonsreconciler.js 3490lib/seamonkey/modules/services-sync/addonsreconciler.js
3443lib/seamonkey/modules/services-sync/addonutils.js 3491lib/seamonkey/modules/services-sync/addonutils.js
3444lib/seamonkey/modules/services-sync/constants.js 3492lib/seamonkey/modules/services-sync/constants.js
3445lib/seamonkey/modules/services-sync/engines.js 3493lib/seamonkey/modules/services-sync/engines.js
3446lib/seamonkey/modules/services-sync/engines/addons.js 3494lib/seamonkey/modules/services-sync/engines/addons.js
3447lib/seamonkey/modules/services-sync/engines/apps.js 
3448lib/seamonkey/modules/services-sync/engines/bookmarks.js 3495lib/seamonkey/modules/services-sync/engines/bookmarks.js
3449lib/seamonkey/modules/services-sync/engines/clients.js 3496lib/seamonkey/modules/services-sync/engines/clients.js
3450lib/seamonkey/modules/services-sync/engines/forms.js 3497lib/seamonkey/modules/services-sync/engines/forms.js
3451lib/seamonkey/modules/services-sync/engines/history.js 3498lib/seamonkey/modules/services-sync/engines/history.js
3452lib/seamonkey/modules/services-sync/engines/passwords.js 3499lib/seamonkey/modules/services-sync/engines/passwords.js
3453lib/seamonkey/modules/services-sync/engines/prefs.js 3500lib/seamonkey/modules/services-sync/engines/prefs.js
3454lib/seamonkey/modules/services-sync/engines/tabs.js 3501lib/seamonkey/modules/services-sync/engines/tabs.js
3455lib/seamonkey/modules/services-sync/identity.js 3502lib/seamonkey/modules/services-sync/identity.js
3456lib/seamonkey/modules/services-sync/jpakeclient.js 3503lib/seamonkey/modules/services-sync/jpakeclient.js
3457lib/seamonkey/modules/services-sync/keys.js 3504lib/seamonkey/modules/services-sync/keys.js
3458lib/seamonkey/modules/services-sync/main.js 3505lib/seamonkey/modules/services-sync/main.js
3459lib/seamonkey/modules/services-sync/notifications.js 3506lib/seamonkey/modules/services-sync/notifications.js
3460lib/seamonkey/modules/services-sync/policies.js 3507lib/seamonkey/modules/services-sync/policies.js
@@ -3516,17 +3563,13 @@ lib/seamonkey/res/table-add-row-before.g @@ -3516,17 +3563,13 @@ lib/seamonkey/res/table-add-row-before.g
3516lib/seamonkey/res/table-remove-column-active.gif 3563lib/seamonkey/res/table-remove-column-active.gif
3517lib/seamonkey/res/table-remove-column-hover.gif 3564lib/seamonkey/res/table-remove-column-hover.gif
3518lib/seamonkey/res/table-remove-column.gif 3565lib/seamonkey/res/table-remove-column.gif
3519lib/seamonkey/res/table-remove-row-active.gif 3566lib/seamonkey/res/table-remove-row-active.gif
3520lib/seamonkey/res/table-remove-row-hover.gif 3567lib/seamonkey/res/table-remove-row-hover.gif
3521lib/seamonkey/res/table-remove-row.gif 3568lib/seamonkey/res/table-remove-row.gif
3522lib/seamonkey/run-mozilla.sh 3569lib/seamonkey/run-mozilla.sh
3523lib/seamonkey/seamonkey 3570lib/seamonkey/seamonkey
3524lib/seamonkey/seamonkey-bin 3571lib/seamonkey/seamonkey-bin
3525lib/seamonkey/searchplugins/creativecommons.xml 3572lib/seamonkey/searchplugins/creativecommons.xml
3526lib/seamonkey/searchplugins/google.xml 3573lib/seamonkey/searchplugins/google.xml
3527lib/seamonkey/searchplugins/wikipedia.xml 3574lib/seamonkey/searchplugins/wikipedia.xml
3528lib/seamonkey/searchplugins/yahoo.xml 3575lib/seamonkey/searchplugins/yahoo.xml
3529lib/seamonkey/update-settings.ini 
3530lib/seamonkey/update.locale 
3531lib/seamonkey/updater 
3532lib/seamonkey/updater.ini 

cvs diff -r1.9 -r1.10 pkgsrc/www/seamonkey/Attic/PLIST.enigmail (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/Attic/PLIST.enigmail 2013/11/23 02:39:25 1.9
+++ pkgsrc/www/seamonkey/Attic/PLIST.enigmail 2013/12/26 13:17:37 1.10
@@ -1,21 +1,23 @@ @@ -1,21 +1,23 @@
1@comment $NetBSD: PLIST.enigmail,v 1.9 2013/11/23 02:39:25 ryoon Exp $ 1@comment $NetBSD: PLIST.enigmail,v 1.10 2013/12/26 13:17:37 ryoon Exp $
2lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome.manifest 2lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome.manifest
3lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome/enigmail.jar 3lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/chrome/enigmail.jar
4lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigMsgCompFields.js 4lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigMsgCompFields.js
5lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.js 5lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.js
6lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.xpt 6lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigmail.xpt
7lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigprefs-service.js 7lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/enigprefs-service.js
8lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeDecrypt.js 8lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeDecrypt.js
9lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeEncrypt.js 9lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/components/mimeEncrypt.js
10lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/defaults/preferences/enigmail.js 10lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/defaults/preferences/enigmail.js
11lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/install.rdf 11lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/install.rdf
12lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/commonFuncs.jsm 12lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/commonFuncs.jsm
13lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/enigmailCommon.jsm 13lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/enigmailCommon.jsm
14lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/gpgAgentHandler.jsm 14lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/gpgAgentHandler.jsm
 15lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/installGnuPG.jsm
15lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/keyManagement.jsm 16lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/keyManagement.jsm
16lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/mimeVerify.jsm 17lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/mimeVerify.jsm
17lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/pipeConsole.jsm 18lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/pipeConsole.jsm
18lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess.jsm 19lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess.jsm
19lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_unix.js 20lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_unix.js
20lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_win.js 21lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/modules/subprocess_worker_win.js
21lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/platform/${OPSYS}_${TARGET_XPCOM_ABI}/lib/libsubprocess-${TARGET_XPCOM_ABI}.so 22lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/platform/${OPSYS}_${TARGET_XPCOM_ABI}/lib/libsubprocess-${TARGET_XPCOM_ABI}.so
 23lib/seamonkey/extensions/{847b3a00-7ab1-11d4-8f02-006008948af5}/wrappers/gpg-agent-wrapper.sh

cvs diff -r1.14 -r1.15 pkgsrc/www/seamonkey/Attic/PLIST.lightning (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/Attic/PLIST.lightning 2013/11/23 02:39:25 1.14
+++ pkgsrc/www/seamonkey/Attic/PLIST.lightning 2013/12/26 13:17:37 1.15
@@ -1,26 +1,27 @@ @@ -1,26 +1,27 @@
1@comment $NetBSD: PLIST.lightning,v 1.14 2013/11/23 02:39:25 ryoon Exp $ 1@comment $NetBSD: PLIST.lightning,v 1.15 2013/12/26 13:17:37 ryoon Exp $
2lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome.manifest 2lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome.manifest
3lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.dtd 3lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.dtd
4lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.properties 4lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider-en-US/locale/en-US/gdata.properties
5lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/calendarCreation.xul 5lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/calendarCreation.xul
6lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gcal.png 6lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gcal.png
7lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-calendar-event-dialog.xul 7lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-calendar-event-dialog.xul
8lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-event-dialog-reminder.xul 8lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-event-dialog-reminder.xul
9lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-overlay.xul 9lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-overlay.xul
10lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-wizard.xul 10lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration-wizard.xul
11lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration.js 11lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/content/gdata-migration.js
12lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/gdata-event-dialog-reminder.css 12lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/gdata-event-dialog-reminder.css
13lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/reminder-action-sms.png 13lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/chrome/gdata-provider/skin/reminder-action-sms.png
 14lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/.mkdir.done
14lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.js 15lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.js
15lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.manifest 16lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/calGoogleCalendarModule.manifest
16lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/gdata.xpt 17lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/gdata.xpt
17lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/interfaces.manifest 18lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/components/interfaces.manifest
18lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/defaults/preferences/preferences.js 19lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/defaults/preferences/preferences.js
19lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/install.rdf 20lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/install.rdf
20lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleCalendar.js 21lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleCalendar.js
21lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleRequest.js 22lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleRequest.js
22lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleSession.js 23lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleSession.js
23lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleUtils.js 24lib/seamonkey/extensions/{a62ef8ec-5fdc-40c2-873c-223b8a6925cc}/js/calGoogleUtils.js
24lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/application.ini 25lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/application.ini
25lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js 26lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarm.js
26lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js 27lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/calendar-js/calAlarmMonitor.js
@@ -273,26 +274,27 @@ lib/seamonkey/extensions/{e2fda1a4-762b- @@ -273,26 +274,27 @@ lib/seamonkey/extensions/{e2fda1a4-762b-
273lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.js 274lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.js
274lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.xul 275lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/messenger-overlay-sidebar.xul
275lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-preferences.xul 276lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-preferences.xul
276lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.js 277lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.js
277lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.xul 278lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/content/lightning/suite-overlay-sidebar.xul
278lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/accountCentral.css 279lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/accountCentral.css
279lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/common/imip.css 280lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/common/imip.css
280lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/imip.css 281lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/imip.css
281lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-toolbar.css 282lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-toolbar.css
282lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-widgets.css 283lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning-widgets.css
283lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning.css 284lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/lightning.css
284lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/mode-switch-icons.png 285lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/mode-switch-icons.png
285lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/suite-accountCentral.css 286lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/chrome/lightning/skin/lightning/suite-accountCentral.css
 287lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/.mkdir.done
286lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js 288lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.js
287lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.manifest 289lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calBackendLoader.manifest
288lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js 290lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.js
289lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.manifest 291lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calCompositeCalendar.manifest
290lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js 292lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.js
291lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.manifest 293lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDavCalendar.manifest
292lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js 294lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.js
293lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.manifest 295lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calDefaultACLManager.manifest
294lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js 296lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICALJSComponents.js
295lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js 297lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.js
296lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.manifest 298lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calICSCalendar.manifest
297lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js 299lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.js
298lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.manifest 300lib/seamonkey/extensions/{e2fda1a4-762b-4020-b5ad-a41df1933103}/components/calImportExportModule.manifest

cvs diff -r1.107 -r1.108 pkgsrc/www/seamonkey/distinfo (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/distinfo 2013/11/23 02:39:25 1.107
+++ pkgsrc/www/seamonkey/distinfo 2013/12/26 13:17:37 1.108
@@ -1,143 +1,126 @@ @@ -1,143 +1,126 @@
1$NetBSD: distinfo,v 1.107 2013/11/23 02:39:25 ryoon Exp $ 1$NetBSD: distinfo,v 1.108 2013/12/26 13:17:37 ryoon Exp $
2 2
3SHA1 (enigmail-1.6.tar.gz) = 51a7eb7d86ce24d8199f741a0079f0d56ecd6368 3SHA1 (enigmail-1.6.tar.gz) = 51a7eb7d86ce24d8199f741a0079f0d56ecd6368
4RMD160 (enigmail-1.6.tar.gz) = a854bb37a6a7f298f6cc268110dcb21d00909fa4 4RMD160 (enigmail-1.6.tar.gz) = a854bb37a6a7f298f6cc268110dcb21d00909fa4
5Size (enigmail-1.6.tar.gz) = 1231111 bytes 5Size (enigmail-1.6.tar.gz) = 1231111 bytes
6SHA1 (seamonkey-2.22.1.source.tar.bz2) = 20d661a675b7f812bc8172a5e37f1f8f83896e0f 6SHA1 (seamonkey-2.23.source.tar.bz2) = 3bc97d6f97987925a1ae30fdcc8ef4a4c2606bc2
7RMD160 (seamonkey-2.22.1.source.tar.bz2) = d1cc946eba801a0d2129bf77e54ed8a15af3c286 7RMD160 (seamonkey-2.23.source.tar.bz2) = 1e12add289b122c62a0f29ea1b965ed5578cca2a
8Size (seamonkey-2.22.1.source.tar.bz2) = 148035166 bytes 8Size (seamonkey-2.23.source.tar.bz2) = 148268011 bytes
9SHA1 (patch-aa) = d2582a11a50a94bca98434f5af228a0bb65a633a 9SHA1 (patch-aa) = f6ec49ef5293672d3b5102ca8a0de35d6809e07b
10SHA1 (patch-ak) = a36dd36a037a76a40955316200b1f4603b9ed8e9 10SHA1 (patch-ak) = a36dd36a037a76a40955316200b1f4603b9ed8e9
11SHA1 (patch-al) = 06ddb5f0f55ca02bee0d55ddb5316ddd9099f2d9 11SHA1 (patch-al) = 06ddb5f0f55ca02bee0d55ddb5316ddd9099f2d9
12SHA1 (patch-ao) = f1d598ebb88cd719c8ed34c64f96abca8a19d85e 12SHA1 (patch-ao) = f1d598ebb88cd719c8ed34c64f96abca8a19d85e
13SHA1 (patch-as) = d9be0c3720e4fd5446d81145df781583f0138739 13SHA1 (patch-as) = 3a06af86d91aa7ad4085de29fcd802fc64a89d7f
14SHA1 (patch-bf) = cf7fef695c6db66a3653d3258a2385c6f1eb709e 14SHA1 (patch-bf) = cf7fef695c6db66a3653d3258a2385c6f1eb709e
15SHA1 (patch-bg) = 9aba8618a4f0777527c6e7af33cb234cb0627501 15SHA1 (patch-bg) = 9aba8618a4f0777527c6e7af33cb234cb0627501
16SHA1 (patch-bi) = 904ec1a966d6224f873836d8cbee2eb80eb2d2a9 16SHA1 (patch-bi) = 904ec1a966d6224f873836d8cbee2eb80eb2d2a9
17SHA1 (patch-config_baseconfig.mk) = 3fdb27d227ef0d858b56023b9c709117d5cc5e00 17SHA1 (patch-config_baseconfig.mk) = e6f3cfe0f8aafcf5bc48d691a05d2d450fdba4ae
 18SHA1 (patch-config_config.mk) = c99b04603be0091a82409811c3cca8301d21923b
18SHA1 (patch-ldap_sdks_c-sdk_build.mk) = 541604f0f63f5c1b3ce5509260517f68f417eb73 19SHA1 (patch-ldap_sdks_c-sdk_build.mk) = 541604f0f63f5c1b3ce5509260517f68f417eb73
19SHA1 (patch-ldap_sdks_c-sdk_ldap_include_portable.h) = 4ce9e1a0e8f0d05367243e8d2b5118606a35da94 20SHA1 (patch-ldap_sdks_c-sdk_ldap_include_portable.h) = 4ce9e1a0e8f0d05367243e8d2b5118606a35da94
20SHA1 (patch-mail_app_Makefile.in) = d66563480442a43e70715ecabf54ffeda5e5cf79 21SHA1 (patch-mail_app_Makefile.in) = 3d85f5b9ba0af52732f05c30a77cf03593ec0f8e
21SHA1 (patch-mailnews_base_search_src_nsMsgSearchTerm.cpp) = 0cbabcf5b188e86404e3ded8452c73a7f498efe3 22SHA1 (patch-mailnews_base_search_src_nsMsgSearchTerm.cpp) = 0cbabcf5b188e86404e3ded8452c73a7f498efe3
 23SHA1 (patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm) = 18e3cc5ff4ba287b669e1720767bad1750701d37
 24SHA1 (patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig) = d91e90a8fd1b7f2505bd18ffa9d1aae66d9c1614
22SHA1 (patch-mb) = f153b28aeb71a0ace4a4c1d55c3e31648d242bd5 25SHA1 (patch-mb) = f153b28aeb71a0ace4a4c1d55c3e31648d242bd5
23SHA1 (patch-mozilla_browser_app_profile_firefox.js) = 2e8d8470d239b6be2c6c64a8a752f8229d421dc6 26SHA1 (patch-mozilla_browser_app_profile_firefox.js) = 2e8d8470d239b6be2c6c64a8a752f8229d421dc6
24SHA1 (patch-mozilla_browser_installer_package-manifest.in) = a61eec2dc12b341bfd84bdda0d70842a627e9c9a 27SHA1 (patch-mozilla_browser_installer_package-manifest.in) = a61eec2dc12b341bfd84bdda0d70842a627e9c9a
25SHA1 (patch-mozilla_browser_locales_en-US_chrome_browser-region_region.properties) = 3783a98ead12f5bab87e944d4cc129261d015007 28SHA1 (patch-mozilla_browser_locales_en-US_chrome_browser-region_region.properties) = 3783a98ead12f5bab87e944d4cc129261d015007
26SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_duckduckgo.xml) = 828def5acc7c9dc18727a27b0c47e44d87a94eaf 29SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_duckduckgo.xml) = 828def5acc7c9dc18727a27b0c47e44d87a94eaf
27SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_list.txt) = b1e4c051977fa8fc46bba6afcdbe4e3de778be75 30SHA1 (patch-mozilla_browser_locales_en-US_searchplugins_list.txt) = b1e4c051977fa8fc46bba6afcdbe4e3de778be75
28SHA1 (patch-mozilla_build_autoconf_nss.m4) = 3b05127e72a76ac2f87c8362cbde13ce76485a19 31SHA1 (patch-mozilla_build_autoconf_nss.m4) = 3b05127e72a76ac2f87c8362cbde13ce76485a19
29SHA1 (patch-mozilla_config_Makefile.in) = 88906ecbe21393239965d9dfcc4975be6e2ed071 32SHA1 (patch-mozilla_config_baseconfig.mk) = beaa3691cef5adcc67fd96e8f199ba896fefadce
30SHA1 (patch-mozilla_config_baseconfig.mk) = d6f27cdc853e6d026c151bf40cb898428c37455c 
31SHA1 (patch-mozilla_config_stl-headers) = a0ff5cba5074d84e49d09eb3cc11cf9ef04db852 
32SHA1 (patch-mozilla_config_stl__wrappers_ios) = 066a9f3db9203afa8131b2ff91d212033e5950e0 33SHA1 (patch-mozilla_config_stl__wrappers_ios) = 066a9f3db9203afa8131b2ff91d212033e5950e0
33SHA1 (patch-mozilla_config_stl__wrappers_ostream) = 67559c5ab17088680b86dea6b081a48b781f59b5 34SHA1 (patch-mozilla_config_stl__wrappers_ostream) = 67559c5ab17088680b86dea6b081a48b781f59b5
34SHA1 (patch-mozilla_config_system-headers) = bc44741903e57169a2e3c2675a6e4f15c72e42d2 35SHA1 (patch-mozilla_config_system-headers) = 482ca62e715eb77b2bc636dafe4492caa188129c
35SHA1 (patch-mozilla_config_system__wrappers_unwind.h) = e9a5a86146cffef99ab306ff3d3059649801c0ab 36SHA1 (patch-mozilla_config_system__wrappers_unwind.h) = e9a5a86146cffef99ab306ff3d3059649801c0ab
36SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.cpp) = 400a5af9988d4392d92e493c73bbe61cd1915edb 37SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.cpp) = 400a5af9988d4392d92e493c73bbe61cd1915edb
37SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.h) = 14038ce0ee2b38db6c7952056a97a65839a2c1a9 38SHA1 (patch-mozilla_dom_plugins_ipc_PluginModuleChild.h) = 14038ce0ee2b38db6c7952056a97a65839a2c1a9
38SHA1 (patch-mozilla_extensions_auth_nsAuthGSSAPI.cpp) = 527f00c7001e9de95b9ccb4b4eaad62107b49fef 39SHA1 (patch-mozilla_extensions_auth_nsAuthGSSAPI.cpp) = 527f00c7001e9de95b9ccb4b4eaad62107b49fef
39SHA1 (patch-mozilla_extensions_spellcheck_hunspell_src_mozHunspell.cpp) = 5f4c28f07469f402035cc607bf82b851bf60a0a4 40SHA1 (patch-mozilla_extensions_spellcheck_hunspell_src_mozHunspell.cpp) = 5f4c28f07469f402035cc607bf82b851bf60a0a4
40SHA1 (patch-mozilla_gfx_graphite2_src_Bidi.cpp) = fb97becdfeeea742e8c0bc51e10efc124a2a11f3 41SHA1 (patch-mozilla_gfx_graphite2_src_Bidi.cpp) = fb97becdfeeea742e8c0bc51e10efc124a2a11f3
41SHA1 (patch-mozilla_gfx_skia_include_core_SkPreConfig.h) = 5a45df0ec2be71f9406333488632bb7c42cafa68 42SHA1 (patch-mozilla_gfx_skia_include_core_SkPreConfig.h) = 5a45df0ec2be71f9406333488632bb7c42cafa68
42SHA1 (patch-mozilla_gfx_skia_moz.build) = d74b274c0a1cfa02804c154669e200c764a900e5 43SHA1 (patch-mozilla_gfx_skia_moz.build) = d74b274c0a1cfa02804c154669e200c764a900e5
43SHA1 (patch-mozilla_gfx_skia_src_utils_SkThreadUtils__pthread__linux.cpp) = a25edef88cb3a7d905acdf0267a75eb666eac6d6 44SHA1 (patch-mozilla_gfx_skia_src_utils_SkThreadUtils__pthread__linux.cpp) = a25edef88cb3a7d905acdf0267a75eb666eac6d6
44SHA1 (patch-mozilla_image_decoders_nsJPEGDecoder.cpp) = 316bfe765e20f188c847efa30cfa0ccc9f4fc7e5 45SHA1 (patch-mozilla_image_decoders_nsJPEGDecoder.cpp) = 316bfe765e20f188c847efa30cfa0ccc9f4fc7e5
45SHA1 (patch-mozilla_intl_hyphenation_src_hnjalloc.h) = 8b670bca826d17e373c1c09893e335c1bb3d4546 46SHA1 (patch-mozilla_intl_hyphenation_src_hnjalloc.h) = 8b670bca826d17e373c1c09893e335c1bb3d4546
46SHA1 (patch-mozilla_ipc_chromium_Makefile.in) = 076293610dc66961d8179863b056eb666f10391e 47SHA1 (patch-mozilla_ipc_chromium_Makefile.in) = 076293610dc66961d8179863b056eb666f10391e
47SHA1 (patch-mozilla_ipc_chromium_chromium-config.mk) = 7908071f6465cb17fe5fba517b0d628bb437f9e3 48SHA1 (patch-mozilla_ipc_chromium_chromium-config.mk) = 7908071f6465cb17fe5fba517b0d628bb437f9e3
48SHA1 (patch-mozilla_ipc_chromium_src_base_base__paths.h) = 87e8a5b3e859bba908d985d6952bf1a7ca1f60b2 49SHA1 (patch-mozilla_ipc_chromium_src_base_base__paths.h) = 87e8a5b3e859bba908d985d6952bf1a7ca1f60b2
49SHA1 (patch-mozilla_ipc_chromium_src_base_debug__util__posix.cc) = b7fb6d1e607e1b00fe3cdde1376fb18e783fa801 50SHA1 (patch-mozilla_ipc_chromium_src_base_debug__util__posix.cc) = b7fb6d1e607e1b00fe3cdde1376fb18e783fa801
50SHA1 (patch-mozilla_ipc_chromium_src_base_file__util.h) = d6ba7a0876840306148c29041f352bee850255cc 51SHA1 (patch-mozilla_ipc_chromium_src_base_file__util.h) = 384cf596d292b4a02bd9d9c51e9f4fc96c4fc200
51SHA1 (patch-mozilla_ipc_chromium_src_base_file__util__posix.cc) = 0d43d6a5de73f88c159dd4caf372be7544aa7c6e 52SHA1 (patch-mozilla_ipc_chromium_src_base_file__util__posix.cc) = 5bda4f8e05ccc3482158c79094f9fc2bf291a0ce
52SHA1 (patch-mozilla_ipc_chromium_src_base_file__version__info.h) = 463e8d0c433618fe3750627be88d95d8ac4b7def 53SHA1 (patch-mozilla_ipc_chromium_src_base_file__version__info.h) = 463e8d0c433618fe3750627be88d95d8ac4b7def
53SHA1 (patch-mozilla_ipc_chromium_src_base_message__pump__libevent.cc) = 7c18b292b688f4185c9012ba03135ab95e5c473b 54SHA1 (patch-mozilla_ipc_chromium_src_base_message__pump__libevent.cc) = 7c18b292b688f4185c9012ba03135ab95e5c473b
54SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread.h) = 487468d70d9644e6b09c548ab607310ff54add84 55SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread.h) = 487468d70d9644e6b09c548ab607310ff54add84
55SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread__posix.cc) = 250ae7c2f00bf019fc7f574744d5bfc3830553e5 56SHA1 (patch-mozilla_ipc_chromium_src_base_platform__thread__posix.cc) = 250ae7c2f00bf019fc7f574744d5bfc3830553e5
56SHA1 (patch-mozilla_ipc_chromium_src_base_process__util.h) = 1d570ebf920496f8fd5747d26c620c1a30a28942 57SHA1 (patch-mozilla_ipc_chromium_src_base_process__util.h) = 1d570ebf920496f8fd5747d26c620c1a30a28942
57SHA1 (patch-mozilla_ipc_chromium_src_base_process__util__posix.cc) = d67e126dfb26e2394a9c21aab5e3b6cc3ab238f1 58SHA1 (patch-mozilla_ipc_chromium_src_base_process__util__posix.cc) = d67e126dfb26e2394a9c21aab5e3b6cc3ab238f1
58SHA1 (patch-mozilla_ipc_chromium_src_base_sys__info__posix.cc) = 7897c20672810e796cb09d0df9ab6d4b46302c99 59SHA1 (patch-mozilla_ipc_chromium_src_base_sys__info__posix.cc) = 7897c20672810e796cb09d0df9ab6d4b46302c99
59SHA1 (patch-mozilla_ipc_chromium_src_base_time__posix.cc) = 2662bf55bf5276d06c4754cdce125a0bfbac17a0 60SHA1 (patch-mozilla_ipc_chromium_src_base_time__posix.cc) = 2662bf55bf5276d06c4754cdce125a0bfbac17a0
60SHA1 (patch-mozilla_ipc_chromium_src_build_build__config.h) = 86e88aa90bd4d573fd59d47f5a3e45c5c52c7e45 61SHA1 (patch-mozilla_ipc_chromium_src_build_build__config.h) = 86e88aa90bd4d573fd59d47f5a3e45c5c52c7e45
61SHA1 (patch-mozilla_ipc_chromium_src_chrome_common_transport__dib.h) = 53c37dedaf5f0b302627be5dddebcb39decfa5e3 62SHA1 (patch-mozilla_ipc_chromium_src_chrome_common_transport__dib.h) = 53c37dedaf5f0b302627be5dddebcb39decfa5e3
62SHA1 (patch-mozilla_ipc_glue_AsyncChannel.cpp) = 8a93fe19a4badf0bf62bffb62a17d1a118625d50 63SHA1 (patch-mozilla_ipc_glue_AsyncChannel.cpp) = 8a93fe19a4badf0bf62bffb62a17d1a118625d50
63SHA1 (patch-mozilla_ipc_glue_GeckoChildProcessHost.cpp) = eeff8f44c9b781f006f6e9a90c36c2e43cfdf54b 64SHA1 (patch-mozilla_ipc_glue_GeckoChildProcessHost.cpp) = eeff8f44c9b781f006f6e9a90c36c2e43cfdf54b
64SHA1 (patch-mozilla_ipc_ipdl_ipdl_lower.py) = 2bf473a505692adc68c9cdc75a23d53d61c0fc8b 65SHA1 (patch-mozilla_ipc_ipdl_ipdl_lower.py) = 2bf473a505692adc68c9cdc75a23d53d61c0fc8b
65SHA1 (patch-mozilla_js_src_Makefile.in) = 9679856fb0e7ff29227fa15d60812ddfccc7fa9c 66SHA1 (patch-mozilla_js_src_Makefile.in) = 7b204bdced39d850614e27d458be3ec142ab57d0
66SHA1 (patch-mozilla_js_src_config_Makefile.in) = e85ebe41a6c6e68a7cb5ef3a975cb30082010e7c 67SHA1 (patch-mozilla_js_src_config_system-headers) = 3d882e3ed1b2a76882cade0b190cc896c2384eaf
67SHA1 (patch-mozilla_js_src_config_system-headers) = 5477897124d1418ebb1ea73e62bf0dda14e01623 
68SHA1 (patch-mozilla_js_src_ctypes_CTypes.h) = 3cbc360db82af7f40161d22f4e04c8a720811c3a 68SHA1 (patch-mozilla_js_src_ctypes_CTypes.h) = 3cbc360db82af7f40161d22f4e04c8a720811c3a
69SHA1 (patch-mozilla_js_src_frontend_ParseMaps.cpp) = af9c153c78a3d50e926f7820db3c98b7fe1db063 69SHA1 (patch-mozilla_js_src_frontend_ParseMaps.cpp) = af9c153c78a3d50e926f7820db3c98b7fe1db063
70SHA1 (patch-mozilla_js_src_gdb_Makefile.in) = 324bd666c020295d654d4eb07fa7d4f566fdb1c0 
71SHA1 (patch-mozilla_js_src_jit_AsmJSSignalHandlers.cpp) = 42eae6278a1d34607552c81474c0ece7d3c66b50 70SHA1 (patch-mozilla_js_src_jit_AsmJSSignalHandlers.cpp) = 42eae6278a1d34607552c81474c0ece7d3c66b50
72SHA1 (patch-mozilla_js_src_jsapi-tests_Makefile.in) = 5a0eb03ee1835ebf7ccdc5cc15bb623d0abf663e 
73SHA1 (patch-mozilla_js_src_jscompartment.h) = dbe4cec8f27f9e694a73232638a834dfad53431f 71SHA1 (patch-mozilla_js_src_jscompartment.h) = dbe4cec8f27f9e694a73232638a834dfad53431f
74SHA1 (patch-mozilla_js_src_jsmath.cpp) = 25225d4b9f05766314dfb7a809e8f4cf7ffa1f4b 72SHA1 (patch-mozilla_js_src_jsmath.cpp) = 25225d4b9f05766314dfb7a809e8f4cf7ffa1f4b
75SHA1 (patch-mozilla_js_src_shell_Makefile.in) = baf021d7fe8de763205949b6ffd85abcd8dcdcb8 73SHA1 (patch-mozilla_js_src_vm_SPSProfiler.cpp) = c1579080ef9ad56ad9780ad5bb7278a0f778087b
76SHA1 (patch-mozilla_js_src_vm_ObjectImpl-inl.h) = 6389aa919cb3c414ba380760030cd4ccaf100704 
77SHA1 (patch-mozilla_js_src_vm_SPSProfiler.cpp) = e59ef5e6cb02d9466b90998fe9ec0c2575b09738 
78SHA1 (patch-mozilla_media_libcubeb_src_cubeb__alsa.c) = b4a9115230383158f45b5bf7005130a8d320fd56 74SHA1 (patch-mozilla_media_libcubeb_src_cubeb__alsa.c) = b4a9115230383158f45b5bf7005130a8d320fd56
79SHA1 (patch-mozilla_media_libpng_pngpriv.h) = 43f554286be3ed7916c065d89fbf59764e5c7bbe 75SHA1 (patch-mozilla_media_libpng_pngpriv.h) = 43f554286be3ed7916c065d89fbf59764e5c7bbe
80SHA1 (patch-mozilla_media_libsoundtouch_src_cpu__detect__x86.cpp) = 83dcc1ffc6ffdd92b5c44f35875b107e46348916 76SHA1 (patch-mozilla_media_libsoundtouch_src_cpu__detect__x86.cpp) = 83dcc1ffc6ffdd92b5c44f35875b107e46348916
81SHA1 (patch-mozilla_media_mtransport_objs.mk) = c14ca9e5f727311495d74107282b0452144a1537 77SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = 533e7f8bb727e88b1c39834d5d701f100ee71933
82SHA1 (patch-mozilla_media_mtransport_test_Makefile.in) = 2f6341529a79596ffcfcdb96275b243d1a700356 78SHA1 (patch-mozilla_media_webrtc_signaling_signaling.gyp) = da5af008d351da2558c00402053ad4feb4c826fc
83SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_nicer.gyp) = 41eca45bba8612b9c995b5a8e29ccda3ef06735b 79SHA1 (patch-mozilla_media_webrtc_signaling_test_Makefile.in) = 605e52abfdefde959ff701062de08ebdfa0b3c9d
84SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_stun_addrs.c) = 2a58e499393caa8c105bd64c5b7e1061a1cfa87d 80SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi) = c245585c1fc3ddbafe931cf7c8dc8c0f2c466825
85SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_stun_stun.h) = ddbc02a8529086ddc1dc0b99664cc829f27700c4 
86SHA1 (patch-mozilla_media_mtransport_third__party_nICEr_src_util_mbslen.c) = 73fc5b93224b5e48853d4412f8c2e0b8ee50238e 
87SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_nrappkit.gyp) = d7109ef00d55d910d04cba98ff55ad639da28b9a 
88SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_log_r__log.c) = 8c94e88fc49624041d799341fb2111e072e4f6a7 
89SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h) = bdc146627d56abfb6ff9e083a48ddabf4b8bdc37 
90SHA1 (patch-mozilla_media_mtransport_third__party_nrappkit_src_util_util.c) = 5e584a7186fd4f3b29ad3a2b12ee3a9c343f3fc8 
91SHA1 (patch-mozilla_media_webrtc_signaling_signaling.gyp) = dc04e99b4231e4364f9cb347d83bad663dcfcdfd 
92SHA1 (patch-mozilla_media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c) = 266164bbf2d9c0d64971eb58f7c57dbd71604e44 
93SHA1 (patch-mozilla_media_webrtc_signaling_test_Makefile.in) = 3f1ebf8e02671eac6a0bd919d304d0065fbe6572 
94SHA1 (patch-mozilla_media_webrtc_trunk_build_build__config.h) = 851e7c9464e9cecd9599ae104a25622c64f5f41e 
95SHA1 (patch-mozilla_media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py) = 77536c92ebe9928302e10fd566cbabcb00bce0f5 
96SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi) = 69cebc33717779a39f31082a0385e2badf4df88b 
97SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_audio__device__impl.cc) = bb1dbd928570a0a23c0d38fd9dae41dd754b2c94 
98SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_test_audio__device__test__api.cc) = f6a3d554332502f7d92006044a7884bb516baad9 
99SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc) = 5f998126ad44ffdfe79f62a8f8221631eea7f459 81SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_device__info__linux.cc) = 5f998126ad44ffdfe79f62a8f8221631eea7f459
100SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc) = f66c65c46789417941805721116f7fa789be4904 82SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_linux_video__capture__linux.cc) = f66c65c46789417941805721116f7fa789be4904
101SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi) = 4040cfa0170417d96115b4c87940786099366b13 83SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture.gypi) = 4040cfa0170417d96115b4c87940786099366b13
102SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture__factory.cc) = b699a6fd714b542e2087d8409d74f25db889d8e3 84SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc) = 942f11a6a9433a8d7ca75e21524aeed5e95f253d
103SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc) = 74191cd2ef207e5abd465c9759d279fafddefb2d 85SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp) = aaef09e06b2fe769d2502a41febcbc38c3a75b41
104SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp) = fd8c2a801427e4354b759b2545a11f8acad4fdf6 86SHA1 (patch-mozilla_memory_mozalloc_fallible.h) = c9b581ad467858e5bbcaec3ecdb4630ee64378c2
105SHA1 (patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc) = 9c76fc29799dee291a9276054d0b0cea3d63b75b 87SHA1 (patch-mozilla_memory_mozalloc_mozalloc.cpp) = 12b27ce71eea0a14006bf5443b33110bb353bc58
 88SHA1 (patch-mozilla_memory_mozalloc_mozalloc.h) = 686a53ad5ea6a1a3c36592b6334d6bf1455f0c14
106SHA1 (patch-mozilla_memory_mozalloc_mozalloc__abort.cpp) = 6fc6da6ea50b85377a27e2448b2d95570c539479 89SHA1 (patch-mozilla_memory_mozalloc_mozalloc__abort.cpp) = 6fc6da6ea50b85377a27e2448b2d95570c539479
107SHA1 (patch-mozilla_mfbt_Atomics.h) = 7d4e4a394063eabda1fddd3a3d0228c84ecaf2e8 
108SHA1 (patch-mozilla_mfbt_Poison.cpp) = c01b2ef4bbb061585673d434a88036c67aa1a153 90SHA1 (patch-mozilla_mfbt_Poison.cpp) = c01b2ef4bbb061585673d434a88036c67aa1a153
109SHA1 (patch-mozilla_modules_libjar_nsZipArchive.cpp) = a399e0bd0e83c47938bbee077eaa79fc52386241 91SHA1 (patch-mozilla_modules_libjar_nsZipArchive.cpp) = a399e0bd0e83c47938bbee077eaa79fc52386241
110SHA1 (patch-mozilla_modules_libpref_src_init_all.js) = 3580919b10fd558713b08d5fa93c64c15d8c0764 
111SHA1 (patch-mozilla_netwerk_sctp_src_netinet6_sctp6__usrreq.c) = dd166d48093684ee650a059d83008939cfad23fe 92SHA1 (patch-mozilla_netwerk_sctp_src_netinet6_sctp6__usrreq.c) = dd166d48093684ee650a059d83008939cfad23fe
112SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__os__userspace.h) = 0961bbaa82191669a52ef9464776fbe744dec548 93SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__os__userspace.h) = 0961bbaa82191669a52ef9464776fbe744dec548
113SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__usrreq.c) = 398c6638c71aa499e2b60f8b71f0c4006d832d5c 94SHA1 (patch-mozilla_netwerk_sctp_src_netinet_sctp__usrreq.c) = 398c6638c71aa499e2b60f8b71f0c4006d832d5c
114SHA1 (patch-mozilla_netwerk_sctp_src_user__recv__thread.c) = c143363510a179c3c46e106dd8cd46718a7b1ac3 95SHA1 (patch-mozilla_netwerk_sctp_src_user__recv__thread.c) = c143363510a179c3c46e106dd8cd46718a7b1ac3
115SHA1 (patch-mozilla_netwerk_sctp_src_user__socket.c) = a82b0f6d0d4717bfa593e7f3c53c3a229cfa6942 96SHA1 (patch-mozilla_netwerk_sctp_src_user__socket.c) = a82b0f6d0d4717bfa593e7f3c53c3a229cfa6942
116SHA1 (patch-mozilla_netwerk_sctp_src_user__socketvar.h) = 6d34abb3d8ecc5c8b36bfa594dc11a99facfa13b 97SHA1 (patch-mozilla_netwerk_sctp_src_user__socketvar.h) = 6d34abb3d8ecc5c8b36bfa594dc11a99facfa13b
117SHA1 (patch-mozilla_netwerk_wifi_moz.build) = f2232f82ee267fdbbcf1c4090390a6bea9bf5849 98SHA1 (patch-mozilla_netwerk_wifi_moz.build) = 24659fc9471a30ca5e961cca53544700877e80ed
118SHA1 (patch-mozilla_netwerk_wifi_nsWifiScannerFreeBSD.cpp) = 780dabd37ea0eab07932489181de4cdfe0a5b4a3 99SHA1 (patch-mozilla_netwerk_wifi_nsWifiScannerFreeBSD.cpp) = 780dabd37ea0eab07932489181de4cdfe0a5b4a3
119SHA1 (patch-mozilla_security_manager_ssl_src_JARSignatureVerification.cpp) = 9f265784d23be668dbb1fcb4e09185670a298293 100SHA1 (patch-mozilla_security_manager_ssl_src_JARSignatureVerification.cpp) = 9f265784d23be668dbb1fcb4e09185670a298293
120SHA1 (patch-mozilla_security_manager_ssl_src_nsNSSComponent.cpp) = 56531146315f3eac703a02ed23ef90f7ac4917b9 101SHA1 (patch-mozilla_security_manager_ssl_src_nsNSSComponent.cpp) = 56531146315f3eac703a02ed23ef90f7ac4917b9
121SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__back.jsm) = bef62d06b0a840be9d41f7c96acb39ca5bd107d7 102SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__back.jsm) = bef62d06b0a840be9d41f7c96acb39ca5bd107d7
122SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__front.jsm) = 84c7aeeab671115c99f9b9afa7b0958830167e49 103SHA1 (patch-mozilla_toolkit_components_osfile_modules_osfile__unix__front.jsm) = 84c7aeeab671115c99f9b9afa7b0958830167e49
123SHA1 (patch-mozilla_toolkit_library_Makefile.in) = e7915dacee2a0bd3983cafd421ffe55ed54a5874 104SHA1 (patch-mozilla_toolkit_library_Makefile.in) = fdd37a7fd39b2cd82b3dd2a3e57bbc3b39e11d4d
124SHA1 (patch-mozilla_toolkit_mozapps_update_updater_updater.cpp) = 2d4769262671a41950d872f46806374efbbccb37 105SHA1 (patch-mozilla_toolkit_mozapps_update_updater_updater.cpp) = 2d4769262671a41950d872f46806374efbbccb37
125SHA1 (patch-mozilla_toolkit_toolkit.mozbuild) = d0510df2e3fb3a7c5dd713b36351e72961788345 106SHA1 (patch-mozilla_toolkit_toolkit.mozbuild) = fbab6bc812003f4af11524fa4e50f48476972eac
126SHA1 (patch-mozilla_toolkit_xre_Makefile.in) = b8d51e994008f007b4fc1caec24a6eebe200b55b 107SHA1 (patch-mozilla_toolkit_xre_Makefile.in) = b8d51e994008f007b4fc1caec24a6eebe200b55b
127SHA1 (patch-mozilla_toolkit_xre_nsEmbedFunctions.cpp) = 70030e59b2ed09b9bc9827d35e17b12be7f0cd71 108SHA1 (patch-mozilla_toolkit_xre_nsEmbedFunctions.cpp) = 70030e59b2ed09b9bc9827d35e17b12be7f0cd71
 109SHA1 (patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp) = e22308b4b60ba5393a74d4a619a7342f7a121756
 110SHA1 (patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp) = 0d9cf3feb87523e7845409b27363d13d2b054a1e
128SHA1 (patch-mozilla_xpcom_base_nsStackWalk.cpp) = 6946cbbd8389e35a13ad457b8cbb4da91e0d8925 111SHA1 (patch-mozilla_xpcom_base_nsStackWalk.cpp) = 6946cbbd8389e35a13ad457b8cbb4da91e0d8925
129SHA1 (patch-mozilla_xpcom_ds_TimeStamp.h) = 3f751a097ec60ad743a3fa2d6ba9c3b36d633176 112SHA1 (patch-mozilla_xpcom_ds_TimeStamp.h) = 3f751a097ec60ad743a3fa2d6ba9c3b36d633176
130SHA1 (patch-mozilla_xpcom_ds_moz.build) = 6abb1dc070e51fde11f49859bcc7359e87323dfb 113SHA1 (patch-mozilla_xpcom_ds_moz.build) = 2b47c1c699863d0d823a11f1cad514c95b034509
131SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_moz.build) = 75baafd5ccb281d54cc38cb1ca6b24d79b655626 114SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_moz.build) = 75baafd5ccb281d54cc38cb1ca6b24d79b655626
132SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 2868370f4112bcb8da5ed879e661856949750fb9 115SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__gcc__x86__unix.cpp) = 2868370f4112bcb8da5ed879e661856949750fb9
133SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__ppc__netbsd.cpp) = e6bdc6adc373dab89bd1ab9546db8fffd41cb38c 116SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcinvoke__ppc__netbsd.cpp) = e6bdc6adc373dab89bd1ab9546db8fffd41cb38c
134SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = bbdb627a4130b36e1512d7350f92012163067940 117SHA1 (patch-mozilla_xpcom_reflect_xptcall_src_md_unix_xptcstubs__gcc__x86__unix.cpp) = bbdb627a4130b36e1512d7350f92012163067940
135SHA1 (patch-mozilla_xpcom_string_public_nsAlgorithm.h) = 90d1159982ef11d1ba6bfb01bfb64c0ce3cf8cd3 118SHA1 (patch-mozilla_xpcom_string_public_nsAlgorithm.h) = 90d1159982ef11d1ba6bfb01bfb64c0ce3cf8cd3
136SHA1 (patch-mozilla_xulrunner_installer_Makefile.in) = 013e4de8500a17deb6c68bd1cd3072bed5785fa0 119SHA1 (patch-mozilla_xulrunner_installer_Makefile.in) = 013e4de8500a17deb6c68bd1cd3072bed5785fa0
137SHA1 (patch-pb) = 0ce511845a30024e1abd357c24ecb925d81e1db1 120SHA1 (patch-pb) = 0ce511845a30024e1abd357c24ecb925d81e1db1
138SHA1 (patch-pc) = a1995c9ef5d675b5a8826390cd94abdf0e4b48a7 121SHA1 (patch-pc) = a1995c9ef5d675b5a8826390cd94abdf0e4b48a7
139SHA1 (patch-rc) = e4dbdbb142869c84cc9a79d54b72352db4afdfc0 122SHA1 (patch-rc) = e4dbdbb142869c84cc9a79d54b72352db4afdfc0
140SHA1 (patch-suite_installer_Makefile.in) = ec8d455118fa3f64762f91c32027d712b58f5ea5 123SHA1 (patch-suite_installer_Makefile.in) = ec8d455118fa3f64762f91c32027d712b58f5ea5
141SHA1 (patch-suite_installer_package-manifest.in) = 8e8b999bd7eca81da50e658eec584199522aee66 124SHA1 (patch-suite_installer_package-manifest.in) = 8e8b999bd7eca81da50e658eec584199522aee66
142SHA1 (patch-xb) = 7573f9f27db06621a591958e44bd78122488365e 125SHA1 (patch-xb) = 7573f9f27db06621a591958e44bd78122488365e
143SHA1 (patch-xc) = 6fb07a53443c6a762ff279cd4712c9f1450eccbd 126SHA1 (patch-xc) = 6fb07a53443c6a762ff279cd4712c9f1450eccbd

cvs diff -r1.11 -r1.12 pkgsrc/www/seamonkey/Attic/enigmail.mk (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/Attic/enigmail.mk 2013/11/04 06:01:46 1.11
+++ pkgsrc/www/seamonkey/Attic/enigmail.mk 2013/12/26 13:17:37 1.12
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: enigmail.mk,v 1.11 2013/11/04 06:01:46 ryoon Exp $ 1# $NetBSD: enigmail.mk,v 1.12 2013/12/26 13:17:37 ryoon Exp $
2# 2#
3# This Makefile fragment hooks the Enigmail OpenPGP extension 3# This Makefile fragment hooks the Enigmail OpenPGP extension
4# (see http://www.mozilla-enigmail.org/ ) into the build. 4# (see http://www.mozilla-enigmail.org/ ) into the build.
5 5
6ENIGMAIL_DIST= enigmail-1.6.tar.gz 6ENIGMAIL_DIST= enigmail-1.6.tar.gz
7XPI_FILES+= ${WRKDIR}/enigmail.xpi 7XPI_FILES+= ${WRKDIR}/enigmail.xpi
8.if !defined(DISTFILES) 8.if !defined(DISTFILES)
9DISTFILES= ${DEFAULT_DISTFILES} 9DISTFILES= ${DEFAULT_DISTFILES}
10.endif 10.endif
11DISTFILES+= ${ENIGMAIL_DIST} 11DISTFILES+= ${ENIGMAIL_DIST}
12SITES.${ENIGMAIL_DIST}= http://www.mozilla-enigmail.org/download/source/ 12SITES.${ENIGMAIL_DIST}= http://www.mozilla-enigmail.org/download/source/
13 13
14DEPENDS+= gnupg-[0-9]*:../../security/gnupg 14DEPENDS+= gnupg-[0-9]*:../../security/gnupg
@@ -20,29 +20,31 @@ PLIST_SUBST+= TARGET_XPCOM_ABI=${TARGET @@ -20,29 +20,31 @@ PLIST_SUBST+= TARGET_XPCOM_ABI=${TARGET
20USE_TOOLS+= patch pax 20USE_TOOLS+= patch pax
21 21
22post-extract: enigmail-post-extract 22post-extract: enigmail-post-extract
23.PHONY: enigmail-post-extract 23.PHONY: enigmail-post-extract
24enigmail-post-extract: 24enigmail-post-extract:
25 ${RUN} mv ${WRKDIR}/enigmail ${WRKSRC}/mailnews/extensions/ 25 ${RUN} mv ${WRKDIR}/enigmail ${WRKSRC}/mailnews/extensions/
26 ${RUN} cd ${WRKSRC} && \ 26 ${RUN} cd ${WRKSRC} && \
27 ${PATCH} < ${FILESDIR}/mailnews_extensions_enigmail_ipc_modules_subprocess.jsm && \ 27 ${PATCH} < ${FILESDIR}/mailnews_extensions_enigmail_ipc_modules_subprocess.jsm && \
28 ${PATCH} < ${FILESDIR}/patch-files_mailnews_extensions_enigmail_ipc_src_Makefile.enig 28 ${PATCH} < ${FILESDIR}/patch-files_mailnews_extensions_enigmail_ipc_src_Makefile.enig
29 29
30post-configure: enigmail-post-configure 30post-configure: enigmail-post-configure
31.PHONY: enigmail-post-configure 31.PHONY: enigmail-post-configure
32enigmail-post-configure: 32enigmail-post-configure:
33 ${RUN} cd ${WRKSRC}/mailnews/extensions/enigmail && \ 33 ${MKDIR} -p ${WRKSRC}/${OBJDIR}/mailnews/extensions/enigmail
34 ${SETENV} ${CONFIGURE_ENV} ${PERL5} ./makemake -r 34 cd ${WRKSRC}/mailnews/extensions/enigmail && \
 35 ${SETENV} ${CONFIGURE_ENV} ${PERL5} ./makemake -r \
 36 -o ${WRKSRC}/${OBJDIR}
35 37
36# We need to do a switcheroo of the dist directory while building enigmail; 38# We need to do a switcheroo of the dist directory while building enigmail;
37# otherwise we get extra files contamination in the PLIST. 39# otherwise we get extra files contamination in the PLIST.
38post-build: enigmail-post-build 40post-build: enigmail-post-build
39.PHONY: enigmail-post-build 41.PHONY: enigmail-post-build
40enigmail-post-build: 42enigmail-post-build:
41 ${RUN} cd ${WRKSRC}/mozilla/dist && pax -rwpe . ../dist.save 43 rm -rf ${WRKSRC}/${OBJDIR}/mozilla/dist.save
42 ${RUN} cd ${WRKSRC}/mailnews/extensions/enigmail && \ 44 cd ${WRKSRC}/${OBJDIR}/mozilla/dist && pax -rwpe . ../dist.save
43 ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} && \ 45 cd ${WRKSRC}/${OBJDIR}/mailnews/extensions/enigmail && \
44 ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} xpi 46 ${SETENV} ${MAKE_ENV} ${MAKE_PROGRAM} all xpi
45 ${CP} ${WRKSRC}/mozilla/dist/bin/enigmail*.xpi \ 47 ${CP} ${WRKSRC}/${OBJDIR}/mozilla/dist/bin/enigmail*.xpi \
46 ${WRKDIR}/enigmail.xpi 48 ${WRKDIR}/enigmail.xpi
47 ${RUN} rm -rf ${WRKSRC}/mozilla/dist 49 rm -rf ${WRKSRC}/${OBJDIR}/mozilla/dist
48 ${RUN} cd ${WRKSRC}/mozilla/dist.save && pax -rwpe . ../dist 50 cd ${WRKSRC}/${OBJDIR}/mozilla/dist.save && pax -rwpe . ../dist

cvs diff -r1.27 -r1.28 pkgsrc/www/seamonkey/options.mk (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/options.mk 2013/11/23 02:39:25 1.27
+++ pkgsrc/www/seamonkey/options.mk 2013/12/26 13:17:37 1.28
@@ -1,14 +1,14 @@ @@ -1,14 +1,14 @@
1# $NetBSD: options.mk,v 1.27 2013/11/23 02:39:25 ryoon Exp $ 1# $NetBSD: options.mk,v 1.28 2013/12/26 13:17:37 ryoon Exp $
2 2
3PKG_OPTIONS_VAR= PKG_OPTIONS.seamonkey 3PKG_OPTIONS_VAR= PKG_OPTIONS.seamonkey
4PKG_SUPPORTED_OPTIONS= debug mozilla-jemalloc gnome mozilla-enigmail 4PKG_SUPPORTED_OPTIONS= debug mozilla-jemalloc gnome mozilla-enigmail
5PKG_SUPPORTED_OPTIONS+= mozilla-lightning webrtc mozilla-chatzilla 5PKG_SUPPORTED_OPTIONS+= mozilla-lightning webrtc mozilla-chatzilla
6 6
7PLIST_VARS+= debug gnome jemalloc 7PLIST_VARS+= debug gnome jemalloc
8 8
9.if ${OPSYS} == "Linux" || ${OPSYS} == "SunOS" 9.if ${OPSYS} == "Linux" || ${OPSYS} == "SunOS"
10PKG_SUGGESTED_OPTIONS+= mozilla-jemalloc 10PKG_SUGGESTED_OPTIONS+= mozilla-jemalloc
11.endif 11.endif
12 12
13# On NetBSD/amd64 6.99.21 libxul.so is invalid when --enable-webrtc is set. 13# On NetBSD/amd64 6.99.21 libxul.so is invalid when --enable-webrtc is set.
14.if (${OPSYS} == "FreeBSD") || (${OPSYS} == "Linux") || (${OPSYS} == "OpenBSD") 14.if (${OPSYS} == "FreeBSD") || (${OPSYS} == "Linux") || (${OPSYS} == "OpenBSD")
@@ -44,26 +44,26 @@ CONFIGURE_ARGS+= --disable-install-strip @@ -44,26 +44,26 @@ CONFIGURE_ARGS+= --disable-install-strip
44PLIST.debug= yes 44PLIST.debug= yes
45.else 45.else
46CONFIGURE_ARGS+= --disable-debug --disable-debug-symbols 46CONFIGURE_ARGS+= --disable-debug --disable-debug-symbols
47CONFIGURE_ARGS+= --enable-install-strip 47CONFIGURE_ARGS+= --enable-install-strip
48.endif 48.endif
49 49
50.if !empty(PKG_OPTIONS:Mmozilla-enigmail) || make(distinfo) 50.if !empty(PKG_OPTIONS:Mmozilla-enigmail) || make(distinfo)
51.include "enigmail.mk" 51.include "enigmail.mk"
52.endif 52.endif
53 53
54.if !empty(PKG_OPTIONS:Mmozilla-lightning) 54.if !empty(PKG_OPTIONS:Mmozilla-lightning)
55CONFIGURE_ARGS+= --enable-calendar 55CONFIGURE_ARGS+= --enable-calendar
56PLIST_SRC+= PLIST.lightning 56PLIST_SRC+= PLIST.lightning
57XPI_FILES+= ${WRKSRC}/mozilla/dist/xpi-stage/gdata-provider*.xpi 57XPI_FILES+= ${WRKSRC}/${OBJDIR}/mozilla/dist/xpi-stage/gdata-provider*.xpi
58XPI_FILES+= ${WRKSRC}/mozilla/dist/xpi-stage/lightning*.xpi 58XPI_FILES+= ${WRKSRC}/${OBJDIR}/mozilla/dist/xpi-stage/lightning*.xpi
59.else 59.else
60CONFIGURE_ARGS+= --disable-calendar 60CONFIGURE_ARGS+= --disable-calendar
61.endif 61.endif
62 62
63PLIST_VARS+= webrtc 63PLIST_VARS+= webrtc
64.if !empty(PKG_OPTIONS:Mwebrtc) 64.if !empty(PKG_OPTIONS:Mwebrtc)
65.include "../../graphics/libv4l/buildlink3.mk" 65.include "../../graphics/libv4l/buildlink3.mk"
66CONFIGURE_ARGS+= --enable-webrtc 66CONFIGURE_ARGS+= --enable-webrtc
67.else 67.else
68CONFIGURE_ARGS+= --disable-webrtc 68CONFIGURE_ARGS+= --disable-webrtc
69.endif 69.endif

cvs diff -r1.19 -r1.20 pkgsrc/www/seamonkey/patches/Attic/patch-aa (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-aa 2013/11/04 06:01:46 1.19
+++ pkgsrc/www/seamonkey/patches/Attic/patch-aa 2013/12/26 13:17:37 1.20
@@ -1,177 +1,157 @@ @@ -1,177 +1,157 @@
1$NetBSD: patch-aa,v 1.19 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-aa,v 1.20 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/configure.in.orig 2013-10-29 01:20:42.000000000 +0000 3--- mozilla/configure.in.orig 2013-12-11 04:28:28.000000000 +0000
4+++ mozilla/configure.in 4+++ mozilla/configure.in
5@@ -2819,6 +2819,7 @@ EOF 5@@ -2752,6 +2752,7 @@ EOF
6 #pragma GCC visibility push(hidden) 6 #pragma GCC visibility push(hidden)
7 #pragma GCC visibility push(default) 7 #pragma GCC visibility push(default)
8 #include <string.h> 8 #include <string.h>
9+#include <iterator> 9+#include <iterator>
10 #pragma GCC visibility pop 10 #pragma GCC visibility pop
11  11
12 __attribute__ ((visibility ("default"))) void Func() { 12 __attribute__ ((visibility ("default"))) void Func() {
13@@ -2827,7 +2828,7 @@ __attribute__ ((visibility ("default"))) 13@@ -2760,7 +2761,7 @@ __attribute__ ((visibility ("default")))
14 } 14 }
15 EOF 15 EOF
16 ac_cv_have_visibility_builtin_bug=no 16 ac_cv_have_visibility_builtin_bug=no
17- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then 17- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
18+ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then 18+ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
19 ac_cv_have_visibility_builtin_bug=yes 19 ac_cv_have_visibility_builtin_bug=yes
20 else 20 else
21 if test `grep -c "@PLT" conftest.S` = 0; then 21 if test `grep -c "@PLT" conftest.S` = 0; then
22@@ -3283,14 +3284,22 @@ fi 22@@ -3216,14 +3217,22 @@ fi
23 AC_CACHE_CHECK( 23 AC_CACHE_CHECK(
24 [for res_ninit()], 24 [for res_ninit()],
25 ac_cv_func_res_ninit, 25 ac_cv_func_res_ninit,
26- [AC_TRY_LINK([ 26- [AC_TRY_LINK([
27+ [AC_TRY_RUN([ 27+ [AC_TRY_RUN([
28 #ifdef linux 28 #ifdef linux
29 #define _BSD_SOURCE 1 29 #define _BSD_SOURCE 1
30 #endif 30 #endif
31+ #ifdef __NetBSD__ 31+ #ifdef __NetBSD__
32+ #error use of global _res variable in threaded programs is not portable 32+ #error use of global _res variable in threaded programs is not portable
33+ #endif 33+ #endif
34+ #include <sys/types.h> 34+ #include <sys/types.h>
35+ #include <netinet/in.h> 35+ #include <netinet/in.h>
36+ #include <arpa/nameser.h> 36+ #include <arpa/nameser.h>
37 #include <resolv.h> 37 #include <resolv.h>
38- ], 38- ],
39- [int foo = res_ninit(&_res);], 39- [int foo = res_ninit(&_res);],
40+ int main(int argc, char **argv){ 40+ int main(int argc, char **argv){
41+ int foo = res_ninit(&_res); 41+ int foo = res_ninit(&_res);
42+ }], 42+ }],
43 [ac_cv_func_res_ninit=yes], 43 [ac_cv_func_res_ninit=yes],
44+ [ac_cv_func_res_ninit=no], 44+ [ac_cv_func_res_ninit=no],
45 [ac_cv_func_res_ninit=no]) 45 [ac_cv_func_res_ninit=no])
46 ]) 46 ])
47  47
48@@ -3941,6 +3950,14 @@ if test -n "$YASM"; then 48@@ -3874,6 +3883,14 @@ if test -n "$YASM"; then
49 _YASM_BUILD=` echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'` 49 _YASM_BUILD=` echo ${YASM_VERSION} | $AWK -F\. '{ print $4 }'`
50 fi 50 fi
51  51
52+if test -n "${LIBXUL_SDK_DIR}"; then 52+if test -n "${LIBXUL_SDK_DIR}"; then
53+ AC_MSG_WARN([pkgsrc: LIBXUL_SDK_DIR is set; assuming we want nss and nspr from xulrunner.]) 53+ AC_MSG_WARN([pkgsrc: LIBXUL_SDK_DIR is set; assuming we want nss and nspr from xulrunner.])
54+ NSPR_CFLAGS="-I${prefix}/include/xulrunner/unstable `pkg-config --cflags nspr`" 54+ NSPR_CFLAGS="-I${prefix}/include/xulrunner/unstable `pkg-config --cflags nspr`"
55+ NSPR_LIBS="`pkg-config --libs nspr`" 55+ NSPR_LIBS="`pkg-config --libs nspr`"
56+ NSS_CFLAGS="`pkg-config --cflags nss`" 56+ NSS_CFLAGS="`pkg-config --cflags nss`"
57+ NSS_LIBS="`pkg-config --libs nss`" 57+ NSS_LIBS="`pkg-config --libs nss`"
58+fi 58+fi
59+ 59+
60 if test -z "$SKIP_LIBRARY_CHECKS"; then 60 if test -z "$SKIP_LIBRARY_CHECKS"; then
61 dnl system JPEG support 61 dnl system JPEG support
62 dnl ======================================================== 62 dnl ========================================================
63@@ -3968,11 +3985,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then 63@@ -3901,11 +3918,7 @@ if test "$MOZ_NATIVE_JPEG" = 1; then
64 #include <jpeglib.h> ], 64 #include <jpeglib.h> ],
65 [ #if JPEG_LIB_VERSION < $MOZJPEG 65 [ #if JPEG_LIB_VERSION < $MOZJPEG
66 #error "Insufficient JPEG library version ($MOZJPEG required)." 66 #error "Insufficient JPEG library version ($MOZJPEG required)."
67- #endif 67- #endif
68- #ifndef JCS_EXTENSIONS 68- #ifndef JCS_EXTENSIONS
69- #error "libjpeg-turbo JCS_EXTENSIONS required" 69- #error "libjpeg-turbo JCS_EXTENSIONS required"
70- #endif 70- #endif
71- ], 71- ],
72+ #endif ], 72+ #endif ],
73 MOZ_NATIVE_JPEG=1, 73 MOZ_NATIVE_JPEG=1,
74 AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg])) 74 AC_MSG_ERROR([Insufficient JPEG library version for --with-system-jpeg]))
75 fi 75 fi
76@@ -4113,6 +4126,22 @@ if test -n "$MOZ_NATIVE_FFI"; then 76@@ -4062,6 +4075,22 @@ fi
77 fi 77 AC_SUBST(MOZ_NATIVE_ICU)
78  78
79 dnl ======================================================== 79 dnl ========================================================
80+dnl system icu support 80+dnl system icu support
81+dnl ======================================================== 81+dnl ========================================================
82+MOZ_NATIVE_ICU= 82+MOZ_NATIVE_ICU=
83+MOZ_ARG_WITH_BOOL(system-icu, 83+MOZ_ARG_WITH_BOOL(system-icu,
84+[ --with-system-icu 84+[ --with-system-icu
85+ Use system icu (located with pkgconfig)], 85+ Use system icu (located with pkgconfig)],
86+ MOZ_NATIVE_ICU=1) 86+ MOZ_NATIVE_ICU=1)
87+ 87+
88+if test -n "$MOZ_NATIVE_ICU"; then 88+if test -n "$MOZ_NATIVE_ICU"; then
89+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) 89+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1)
90+ MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS" 90+ MOZ_JS_STATIC_LIBS="$MOZ_JS_STATIC_LIBS $MOZ_ICU_LIBS"
91+fi 91+fi
92+ 92+
93+AC_SUBST(MOZ_NATIVE_ICU) 93+AC_SUBST(MOZ_NATIVE_ICU)
94+ 94+
95+dnl ======================================================== 95+dnl ========================================================
96 dnl Java SDK support 96 dnl Java SDK support
97 dnl ======================================================== 97 dnl ========================================================
98  98
99@@ -5256,7 +5285,7 @@ dnl --enable-webrtc to override. Can di 99@@ -5281,6 +5310,12 @@ if test -n "$MOZ_WEBRTC"; then
100 dnl the master list above. 
101 if test -n "$MOZ_WEBRTC"; then 
102 case "$target" in 
103- *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*) 
104+ *-linux*|*-mingw*|*-darwin*|*-android*|*-linuxandroid*|*-dragonfly*|*-freebsd*|*-netbsd*|*-openbsd*) 
105 dnl Leave enabled 
106 ;; 
107 *) 
108@@ -5312,6 +5341,9 @@ if test -n "$MOZ_WEBRTC"; then 
109 MOZ_VP8_ENCODER=1 100 MOZ_VP8_ENCODER=1
110 MOZ_VP8_ERROR_CONCEALMENT=1 101 MOZ_VP8_ERROR_CONCEALMENT=1
111  102
112+ dnl with libv4l2 we can support more cameras 103+ dnl with libv4l2 we can support more cameras
113+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2) 104+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2)
114+ 105+
 106+ dnl with libv4l2 we can support more cameras
 107+ PKG_CHECK_MODULES(MOZ_LIBV4L2, libv4l2)
 108+
115 dnl enable once Signaling lands 109 dnl enable once Signaling lands
116 MOZ_WEBRTC_SIGNALING=1 110 MOZ_WEBRTC_SIGNALING=1
117 AC_DEFINE(MOZ_WEBRTC_SIGNALING) 111 AC_DEFINE(MOZ_WEBRTC_SIGNALING)
118@@ -5338,15 +5370,18 @@ AC_SUBST(MOZ_SRTP) 112@@ -5307,15 +5342,18 @@ AC_SUBST(MOZ_SRTP)
119  113
120 dnl Use integers over floats for audio on B2G and Android, because audio 114 dnl Use integers over floats for audio on B2G and Android, because audio
121 dnl backends for those platforms don't support floats. 115 dnl backends for those platforms don't support floats.
122-if test "$OS_TARGET" = "Android"; then 116-if test "$OS_TARGET" = "Android"; then
123+case "$OS_TARGET" in 117+case "$OS_TARGET" in
124+ndroid|DragonFly|FreeBSD|NetBSD|OpenBSD) 118+ndroid|DragonFly|FreeBSD|NetBSD|OpenBSD)
125 MOZ_SAMPLE_TYPE_S16=1 119 MOZ_SAMPLE_TYPE_S16=1
126 AC_DEFINE(MOZ_SAMPLE_TYPE_S16) 120 AC_DEFINE(MOZ_SAMPLE_TYPE_S16)
127 AC_SUBST(MOZ_SAMPLE_TYPE_S16) 121 AC_SUBST(MOZ_SAMPLE_TYPE_S16)
128-else 122-else
129+ ;; 123+ ;;
130+*) 124+*)
131 MOZ_SAMPLE_TYPE_FLOAT32=1 125 MOZ_SAMPLE_TYPE_FLOAT32=1
132 AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32) 126 AC_DEFINE(MOZ_SAMPLE_TYPE_FLOAT32)
133 AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32) 127 AC_SUBST(MOZ_SAMPLE_TYPE_FLOAT32)
134-fi 128-fi
135+ ;; 129+ ;;
136+esac 130+esac
137  131
138 dnl ======================================================== 132 dnl ========================================================
139 dnl = Disable Speech API code 133 dnl = Disable Speech API code
140@@ -8402,7 +8437,7 @@ case "$OS_TARGET" in 134@@ -8276,7 +8314,7 @@ case "$OS_TARGET" in
141 NECKO_WIFI=1 135 NECKO_WIFI=1
142 fi 136 fi
143 ;; 137 ;;
144- Darwin|SunOS|WINNT) 138- Darwin|SunOS|WINNT)
145+ Darwin|FreeBSD|SunOS|WINNT) 139+ Darwin|FreeBSD|SunOS|WINNT)
146 NECKO_WIFI=1 140 NECKO_WIFI=1
147 ;; 141 ;;
148 Linux) 142 Linux)
149@@ -9124,6 +9159,10 @@ if test -n "$INTEL_ARCHITECTURE"; then 143@@ -9005,6 +9043,14 @@ if test -n "$INTEL_ARCHITECTURE"; then
150 fi 144 fi
151 fi 145 fi
152  146
153+if test -n "$MOZ_LIBV4L2_LIBS"; then 147+if test -n "$MOZ_LIBV4L2_LIBS"; then
154+ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1" 148+ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1"
155+fi 149+fi
156+ 150+
 151+if test -n "$MOZ_LIBV4L2_LIBS"; then
 152+ EXTRA_GYP_DEFINES="$EXTRA_GYP_DEFINES -D use_libv4l2=1"
 153+fi
 154+
157 if test -n "$MOZ_WEBRTC"; then 155 if test -n "$MOZ_WEBRTC"; then
158 AC_MSG_RESULT("generating WebRTC Makefiles...") 156 AC_MSG_RESULT("generating WebRTC Makefiles...")
159  157
160@@ -9419,15 +9458,14 @@ dist=$MOZ_BUILD_ROOT/dist 
161 ac_configure_args="$_SUBDIR_CONFIG_ARGS" 
162 ac_configure_args="$ac_configure_args --enable-threadsafe" 
163 # Switch to "$MOZ_BUILD_APP" != "browser" when enabling for desktop builds. 
164-if test "A" = "A"; then 
165+#if test "A" = "A"; then 
166 # The Internationalization API isn't on by default except in standalone JS 
167 # engine builds. Bugs to enable it in the browser: 
168 # 
169 # Desktop: bug 853301 
170 # Android: bug 864843 
171 # B2G: bug 866301 
172- ac_configure_args="$ac_configure_args --disable-intl-api" 
173-fi 
174+#fi 
175 if test "$BUILD_CTYPES"; then 
176 # Build js-ctypes on the platforms we can. 
177 ac_configure_args="$ac_configure_args --enable-ctypes" 

cvs diff -r1.14 -r1.15 pkgsrc/www/seamonkey/patches/Attic/patch-as (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-as 2013/11/04 06:01:46 1.14
+++ pkgsrc/www/seamonkey/patches/Attic/patch-as 2013/12/26 13:17:37 1.15
@@ -1,145 +1,85 @@ @@ -1,145 +1,85 @@
1$NetBSD: patch-as,v 1.14 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-as,v 1.15 2013/12/26 13:17:37 ryoon Exp $
2 2
3* Fix _res is not supported for multi-threaded programs. error. 3* Fix _res is not supported for multi-threaded programs. error.
4* Treat DragonFly like FreeBSD. 4* Treat DragonFly like FreeBSD.
5 5
6--- mozilla/js/src/configure.in.orig 2013-10-29 01:20:53.000000000 +0000 6--- mozilla/js/src/configure.in.orig 2013-12-11 04:28:40.000000000 +0000
7+++ mozilla/js/src/configure.in 7+++ mozilla/js/src/configure.in
8@@ -2347,6 +2347,7 @@ EOF 8@@ -2290,6 +2290,7 @@ EOF
9 #pragma GCC visibility push(hidden) 9 #pragma GCC visibility push(hidden)
10 #pragma GCC visibility push(default) 10 #pragma GCC visibility push(default)
11 #include <string.h> 11 #include <string.h>
12+#include <iterator> 12+#include <iterator>
13 #pragma GCC visibility pop 13 #pragma GCC visibility pop
14  14
15 __attribute__ ((visibility ("default"))) void Func() { 15 __attribute__ ((visibility ("default"))) void Func() {
16@@ -2355,7 +2356,7 @@ __attribute__ ((visibility ("default"))) 16@@ -2298,7 +2299,7 @@ __attribute__ ((visibility ("default")))
17 } 17 }
18 EOF 18 EOF
19 ac_cv_have_visibility_builtin_bug=no 19 ac_cv_have_visibility_builtin_bug=no
20- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then 20- if ! ${CC-cc} ${CFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
21+ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then 21+ if ! ${CXX-c++} ${CXXFLAGS} ${DSO_PIC_CFLAGS} ${DSO_LDOPTS} -O2 -S -o conftest.S conftest.c > /dev/null 2>&1 ; then
22 ac_cv_have_visibility_builtin_bug=yes 22 ac_cv_have_visibility_builtin_bug=yes
23 else 23 else
24 if test `grep -c "@PLT" conftest.S` = 0; then 24 if test `grep -c "@PLT" conftest.S` = 0; then
25@@ -2572,7 +2573,7 @@ then 25@@ -2515,7 +2516,7 @@ then
26 fi 26 fi
27  27
28 case "$target" in 28 case "$target" in
29- *-*-freebsd*) 29- *-*-freebsd*)
30+ *-*-freebsd*|*-dragonfly*) 30+ *-*-freebsd*|*-dragonfly*)
31 AC_DEFINE(_REENTRANT) 31 AC_DEFINE(_REENTRANT)
32 AC_DEFINE(_THREAD_SAFE) 32 AC_DEFINE(_THREAD_SAFE)
33 dnl -pthread links in -lpthread, so don't specify it explicitly. 33 dnl -pthread links in -lpthread, so don't specify it explicitly.
34@@ -2657,14 +2658,22 @@ fi 34@@ -2600,14 +2601,22 @@ fi
35 AC_CACHE_CHECK( 35 AC_CACHE_CHECK(
36 [for res_ninit()], 36 [for res_ninit()],
37 ac_cv_func_res_ninit, 37 ac_cv_func_res_ninit,
38- [AC_TRY_LINK([ 38- [AC_TRY_LINK([
39+ [AC_TRY_RUN([ 39+ [AC_TRY_RUN([
40 #ifdef linux 40 #ifdef linux
41 #define _BSD_SOURCE 1 41 #define _BSD_SOURCE 1
42 #endif 42 #endif
43+ #ifdef __NetBSD__ 43+ #ifdef __NetBSD__
44+ #error use of global _res variable in threaded programs is not portable 44+ #error use of global _res variable in threaded programs is not portable
45+ #endif 45+ #endif
46+ #include <sys/types.h> 46+ #include <sys/types.h>
47+ #include <netinet/in.h> 47+ #include <netinet/in.h>
48+ #include <arpa/nameser.h> 48+ #include <arpa/nameser.h>
49 #include <resolv.h> 49 #include <resolv.h>
50- ], 50- ],
51- [int foo = res_ninit(&_res);], 51- [int foo = res_ninit(&_res);],
52+ int main(int argc, char **argv){ 52+ int main(int argc, char **argv){
53+ int foo = res_ninit(&_res); 53+ int foo = res_ninit(&_res);
54+ }], 54+ }],
55 [ac_cv_func_res_ninit=yes], 55 [ac_cv_func_res_ninit=yes],
56+ [ac_cv_func_res_ninit=no], 56+ [ac_cv_func_res_ninit=no],
57 [ac_cv_func_res_ninit=no]) 57 [ac_cv_func_res_ninit=no])
58 ]) 58 ])
59  59
60@@ -3361,7 +3370,7 @@ if test "$MOZ_MEMORY"; then 60@@ -3316,7 +3325,7 @@ if test "$MOZ_MEMORY"; then
61 *-darwin*) 61 *-darwin*)
62 AC_DEFINE(MOZ_MEMORY_DARWIN) 62 AC_DEFINE(MOZ_MEMORY_DARWIN)
63 ;; 63 ;;
64- *-*freebsd*) 64- *-*freebsd*)
65+ *-*freebsd*|*-*dragonfly*) 65+ *-*freebsd*|*-*dragonfly*)
66 AC_DEFINE(MOZ_MEMORY_BSD) 66 AC_DEFINE(MOZ_MEMORY_BSD)
67 ;; 67 ;;
68 *-android*|*-linuxandroid*) 68 *-android*|*-linuxandroid*)
69@@ -4246,6 +4255,16 @@ fi 69@@ -4339,6 +4348,16 @@ fi
70 dnl ======================================================== 70 dnl ========================================================
71 dnl ECMAScript Internationalization API Support (uses ICU) 71 dnl JavaScript shell
72 dnl ======================================================== 72 dnl ========================================================
73+ICU_LIB_NAMES= 73+ICU_LIB_NAMES=
74+MOZ_NATIVE_ICU= 74+MOZ_NATIVE_ICU=
75+MOZ_ARG_WITH_BOOL(system-icu, 75+MOZ_ARG_WITH_BOOL(system-icu,
76+[ --with-system-icu 76+[ --with-system-icu
77+ Use system icu (located with pkgconfig)], 77+ Use system icu (located with pkgconfig)],
78+ MOZ_NATIVE_ICU=1) 78+ MOZ_NATIVE_ICU=1)
79+ 79+
80+if test -n "$MOZ_NATIVE_ICU"; then 80+if test -n "$MOZ_NATIVE_ICU"; then
81+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1) 81+ PKG_CHECK_MODULES(MOZ_ICU, icu-i18n >= 50.1)
82+fi 82+fi
83  83
84 ENABLE_INTL_API=1 84 AC_HAVE_FUNCS(setlocale)
85 MOZ_ARG_DISABLE_BOOL(intl-api, 85 AC_HAVE_FUNCS(localeconv)
86@@ -4255,37 +4274,36 @@ MOZ_ARG_DISABLE_BOOL(intl-api, 
87 dnl Settings for the implementation of the ECMAScript Internationalization API 
88 if test -n "$ENABLE_INTL_API"; then 
89 AC_DEFINE(ENABLE_INTL_API) 
90- # We build ICU as a static library. 
91- AC_DEFINE(U_STATIC_IMPLEMENTATION) 
92- 
93- case "$OS_TARGET" in 
94- WINNT) 
95- ICU_LIB_NAMES="icuin icuuc icudt" 
96- ;; 
97- Darwin|Linux) 
98- ICU_LIB_NAMES="icui18n icuuc icudata" 
99- ;; 
100- *) 
101- AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) 
102- esac 
103  
104- ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' 
105-else 
106- ICU_LIB_NAMES= 
107- ICU_LIBS= 
108+ if test -z "$MOZ_NATIVE_ICU"; then 
109+ case "$OS_TARGET" in 
110+ WINNT) 
111+ ICU_LIB_NAMES="icuin icuuc icudt" 
112+ ;; 
113+ Darwin|Linux) 
114+ ICU_LIB_NAMES="icui18n icuuc icudata" 
115+ ;; 
116+ *) 
117+ AC_MSG_ERROR([ECMAScript Internationalization API is not yet supported on this platform]) 
118+ esac 
119+ MOZ_ICU_LIBS='$(call EXPAND_LIBNAME_PATH,$(ICU_LIB_NAMES),$(DEPTH)/intl/icu/lib)' 
120+ fi 
121 fi 
122  
123 AC_SUBST(ENABLE_INTL_API) 
124 AC_SUBST(ICU_LIB_NAMES) 
125-AC_SUBST(ICU_LIBS) 
126+AC_SUBST(MOZ_ICU_LIBS) 
127+AC_SUBST(MOZ_NATIVE_ICU) 
128  
129-dnl Source files that use ICU should have control over which parts of the ICU 
130-dnl namespace they want to use. 
131-AC_DEFINE(U_USING_ICU_NAMESPACE,0) 
132+dnl Settings for ICU 
133+if test -n "$ENABLE_INTL_API" -a -z "$MOZ_NATIVE_ICU"; then 
134+ dnl We build ICU as a static library. 
135+ AC_DEFINE(U_STATIC_IMPLEMENTATION) 
136  
137+ dnl Source files that use ICU should have control over which parts of the ICU 
138+ dnl namespace they want to use. 
139+ AC_DEFINE(U_USING_ICU_NAMESPACE,0) 
140  
141-dnl Settings for ICU 
142-if test -n "$ENABLE_INTL_API" ; then 
143 # Set ICU compile options 
144 ICU_CPPFLAGS="" 
145 # don't use icu namespace automatically in client code 

cvs diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/Attic/patch-config_baseconfig.mk (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-config_baseconfig.mk 2013/01/07 21:55:30 1.2
+++ pkgsrc/www/seamonkey/patches/Attic/patch-config_baseconfig.mk 2013/12/26 13:17:37 1.3
@@ -1,18 +1,16 @@ @@ -1,18 +1,16 @@
1$NetBSD: patch-config_baseconfig.mk,v 1.2 2013/01/07 21:55:30 ryoon Exp $ 1$NetBSD: patch-config_baseconfig.mk,v 1.3 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- config/baseconfig.mk.orig 2012-11-18 10:14:23.000000000 +0000 3--- config/baseconfig.mk.orig 2013-12-11 04:19:54.000000000 +0000
4+++ config/baseconfig.mk 4+++ config/baseconfig.mk
5@@ -1,9 +1,9 @@ 5@@ -1,7 +1,7 @@
6 INCLUDED_AUTOCONF_MK = 1 
7  
8-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 6-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
9-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 7-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
10-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 8-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
11-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) 9-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
12+includedir := $(includedir)/$(MOZILLA_PKG_NAME) 10+includedir := $(includedir)/$(MOZILLA_PKG_NAME)
13+idldir = $(datadir)/idl/$(MOZILLA_PKG_NAME) 11+idldir = $(datadir)/idl/$(MOZILLA_PKG_NAME)
14+installdir = $(libdir)/$(MOZILLA_PKG_NAME) 12+installdir = $(libdir)/$(MOZILLA_PKG_NAME)
15+sdkdir = $(libdir)/$(MOZILLA_PKG_NAME)-sdk 13+sdkdir = $(libdir)/$(MOZILLA_PKG_NAME)-sdk
16 MOZILLA_SRCDIR = $(topsrcdir)/mozilla 14 MOZILLA_SRCDIR = $(topsrcdir)/mozilla
17 MOZDEPTH = $(DEPTH)/mozilla 15 MOZDEPTH = $(DEPTH)/mozilla
18 DIST = $(MOZDEPTH)/dist 16 DIST = $(MOZDEPTH)/dist

cvs diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h 2013/11/04 06:01:46 1.2
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h 2013/12/26 13:17:37 1.3
@@ -1,28 +1,28 @@ @@ -1,28 +1,28 @@
1$NetBSD: patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h,v 1.2 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_media_mtransport_third__party_nrappkit_src_port_generic_include_sys_queue.h,v 1.3 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h.orig 2013-10-29 01:21:04.000000000 +0000 3--- mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h.orig 2013-12-11 04:28:54.000000000 +0000
4+++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h 4+++ mozilla/media/mtransport/third_party/nrappkit/src/port/generic/include/sys/queue.h
5@@ -30,12 +30,15 @@ 5@@ -30,12 +30,15 @@
6 * $FreeBSD: src/sys/sys/queue.h,v 1.58 2004/04/07 04:19:49 imp Exp $ 6 * $FreeBSD: src/sys/sys/queue.h,v 1.58 2004/04/07 04:19:49 imp Exp $
7 */ 7 */
8  8
9-#ifndef _SYS_QUEUE_H_ 9-#ifndef _SYS_QUEUE_H_
10+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN) 10+#if (defined(BSD) && !defined(__OpenBSD__)) || defined(DARWIN)
11+#include_next <sys/queue.h> 11+#include_next <sys/queue.h>
12+#elif !defined(_SYS_QUEUE_H_) 12+#elif !defined(_SYS_QUEUE_H_)
13 #define _SYS_QUEUE_H_ 13 #define _SYS_QUEUE_H_
14  14
15-#ifndef DARWIN 15-#if !defined(__FreeBSD__) && !defined(DARWIN)
16 #include <stddef.h> 16 #include <stddef.h>
17-#define __offsetof offsetof 17-#define __offsetof offsetof
18+ 18+
19+#ifndef offsetof 19+#ifndef offsetof
20+#define offsetof(type, field) ((size_t)(&((type *)0)->field)) 20+#define offsetof(type, field) ((size_t)(&((type *)0)->field))
21 #endif 21 #endif
22  22
23 #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \ 23 #define STAILQ_FOREACH_SAFE(var, head, field, tvar) \
24@@ -43,8 +46,6 @@ 24@@ -43,8 +46,6 @@
25 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \ 25 (var) && ((tvar) = STAILQ_NEXT((var), field), 1); \
26 (var) = (tvar)) 26 (var) = (tvar))
27  27
28-// #define __offsetof(type, field) ((size_t)(&((type *)0)->field)) 28-// #define __offsetof(type, field) ((size_t)(&((type *)0)->field))

cvs diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_netwerk_wifi_moz.build (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_netwerk_wifi_moz.build 2013/11/04 06:01:46 1.2
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_netwerk_wifi_moz.build 2013/12/26 13:17:37 1.3
@@ -1,19 +1,15 @@ @@ -1,19 +1,15 @@
1$NetBSD: patch-mozilla_netwerk_wifi_moz.build,v 1.2 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_netwerk_wifi_moz.build,v 1.3 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/netwerk/wifi/moz.build.orig 2013-10-29 01:21:08.000000000 +0000 3--- mozilla/netwerk/wifi/moz.build.orig 2013-12-11 04:29:10.000000000 +0000
4+++ mozilla/netwerk/wifi/moz.build 4+++ mozilla/netwerk/wifi/moz.build
5@@ -34,6 +34,14 @@ if CONFIG['OS_ARCH'] == 'Darwin': 5@@ -38,6 +38,10 @@ if CONFIG['OS_ARCH'] == 'Darwin':
6 CMMSRCS += [ 6 CMMSRCS += [
7 'osx_corewlan.mm', 7 'osx_corewlan.mm',
8 ] 8 ]
9+elif CONFIG['OS_ARCH'] == 'FreeBSD': 9+elif CONFIG['OS_ARCH'] == 'FreeBSD':
10+ CPP_SOURCES += [ 10+ CPP_SOURCES += [
11+ 'nsWifiScannerFreeBSD.cpp', 11+ 'nsWifiScannerFreeBSD.cpp',
12+ ] 12+ ]
13+elif CONFIG['OS_ARCH'] == 'FreeBSD': 
14+ CPP_SOURCES += [ 
15+ 'nsWifiScannerFreeBSD.cpp', 
16+ ] 
17 elif CONFIG['OS_ARCH'] == 'WINNT': 13 elif CONFIG['OS_ARCH'] == 'WINNT':
18 CPP_SOURCES += [ 14 CPP_SOURCES += [
19 'nsWifiScannerWin.cpp', 15 'nsWifiScannerWin.cpp',

cvs diff -r1.2 -r1.3 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_xpcom_ds_moz.build (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_xpcom_ds_moz.build 2013/11/04 06:01:46 1.2
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_xpcom_ds_moz.build 2013/12/26 13:17:37 1.3
@@ -1,23 +1,23 @@ @@ -1,23 +1,23 @@
1$NetBSD: patch-mozilla_xpcom_ds_moz.build,v 1.2 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_xpcom_ds_moz.build,v 1.3 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/xpcom/ds/moz.build.orig 2013-10-29 01:21:14.000000000 +0000 3--- mozilla/xpcom/ds/moz.build.orig 2013-12-11 04:29:24.000000000 +0000
4+++ mozilla/xpcom/ds/moz.build 4+++ mozilla/xpcom/ds/moz.build
5@@ -95,7 +95,6 @@ CPP_SOURCES += [ 5@@ -90,7 +90,6 @@ CPP_SOURCES += [
 6 'nsSupportsArrayEnumerator.cpp',
6 'nsSupportsPrimitives.cpp', 7 'nsSupportsPrimitives.cpp',
7 'nsUnicharBuffer.cpp', 
8 'nsVariant.cpp', 8 'nsVariant.cpp',
9- 'TimeStamp.cpp', 9- 'TimeStamp.cpp',
10 ] 10 ]
11  11
12 if CONFIG['OS_ARCH'] == 'WINNT': 12 if CONFIG['OS_ARCH'] == 'WINNT':
13@@ -113,6 +112,10 @@ elif CONFIG['OS_ARCH'] == 'Darwin': 13@@ -108,6 +107,10 @@ elif CONFIG['OS_ARCH'] == 'Darwin':
14 else: 14 else:
15 error('No TimeStamp implementation on this platform. Build will not succeed') 15 error('No TimeStamp implementation on this platform. Build will not succeed')
16  16
17+CPP_SOURCES += [ 17+CPP_SOURCES += [
18+ 'TimeStamp.cpp', 18+ 'TimeStamp.cpp',
19+] 19+]
20+ 20+
21 EXTRA_COMPONENTS += [ 21 EXTRA_COMPONENTS += [
22 'nsINIProcessor.js', 22 'nsINIProcessor.js',
23 'nsINIProcessor.manifest', 23 'nsINIProcessor.manifest',

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-config_config.mk
$NetBSD: patch-config_config.mk,v 1.1 2013/12/26 13:17:37 ryoon Exp $

From
http://www.openbsd.org/cgi-bin/cvsweb/ports/www/seamonkey/patches/patch-config_config_mk?rev=1.1

Fix fallout from http://hg.mozilla.org/releases/comm-release/rev/a6ab55f00e21
XPIDL_LINK being undefined breaks enigmail build

--- config/config.mk.orig	2013-12-11 04:19:54.000000000 +0000
+++ config/config.mk
@@ -325,6 +325,7 @@ MY_RULES	:= $(DEPTH)/config/myrules.mk
 # Default command macros; can be overridden in <arch>.mk.
 #
 CCC		= $(CXX)
+XPIDL_LINK = $(PYTHON) $(LIBXUL_DIST)/sdk/bin/xpt.py link
 
 OS_INCLUDES += $(NSPR_CFLAGS) $(NSS_CFLAGS) $(MOZ_JPEG_CFLAGS) $(MOZ_PNG_CFLAGS) $(MOZ_ZLIB_CFLAGS)
 

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm
$NetBSD: patch-mailnews_extensions_enigmail_ipc_modules_subprocess.jsm,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mailnews/extensions/enigmail/ipc/modules/subprocess.jsm.orig	2013-10-06 16:31:34.000000000 +0000
+++ mailnews/extensions/enigmail/ipc/modules/subprocess.jsm
@@ -324,7 +324,9 @@ function getPlatformValue(valueType) {
         //            library name   O_NONBLOCK RLIM_T                RLIMIT_NOFILE
         'darwin':  [ 'libc.dylib',   0x04     , ctypes.uint64_t     , 8 ],
         'linux':   [ 'libc.so.6',    2024     , ctypes.unsigned_long, 7 ],
+        'dragonfly': [ 'libc.so',    0x04     , ctypes.int64_t      , 8 ],
         'freebsd': [ 'libc.so.7',    0x04     , ctypes.int64_t      , 8 ],
+        'netbsd': [ 'libc.so', 0x04     , ctypes.int64_t      , 8 ],
         'openbsd': [ 'libc.so.61.0', 0x04     , ctypes.int64_t      , 8 ],
         'sunos':   [ 'libc.so',      0x80     , ctypes.unsigned_long, 5 ]
     };

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig
$NetBSD: patch-mailnews_extensions_enigmail_ipc_src_Makefile.enig,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mailnews/extensions/enigmail/ipc/src/Makefile.enig.orig	2013-10-06 16:31:34.000000000 +0000
+++ mailnews/extensions/enigmail/ipc/src/Makefile.enig
@@ -18,8 +18,8 @@ LDFLAGS	+= -dynamiclib -install_name @ex
 endif
 
 ifeq ($(OS_ARCH),NetBSD)
-ifeq ($(DLL_SUFFIX),.so.1.0)
-LDFLAGS += -Wl,-Bsymbolic
+ifeq ($(DLL_SUFFIX),.so)
+LDFLAGS += -shared -Wl,-Bsymbolic
 CFLAGS += -fPIC
 endif
 endif

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc
$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_clock.cc,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/clock.cc.orig	2013-12-11 04:28:57.000000000 +0000
+++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/clock.cc
@@ -15,7 +15,7 @@
 #include <Windows.h>
 #include <WinSock.h>
 #include <MMSystem.h>
-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
 #include <sys/time.h>
 #include <time.h>
 #endif
@@ -209,7 +209,7 @@ class WindowsRealTimeClock : public Real
   WindowsHelpTimer* _helpTimer;
 };
 
-#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_MAC))
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
 class UnixRealTimeClock : public RealTimeClock {
  public:
   UnixRealTimeClock() {}
@@ -240,7 +240,7 @@ Clock* Clock::GetRealTimeClock() {
 #if defined(_WIN32)
   static WindowsRealTimeClock clock(&global_help_timer);
   return &clock;
-#elif defined(WEBRTC_LINUX) || defined(WEBRTC_MAC)
+#elif ((defined WEBRTC_LINUX) || (defined WEBRTC_BSD) || (defined WEBRTC_MAC))
   static UnixRealTimeClock clock;
   return &clock;
 #else

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_memory_mozalloc_fallible.h
$NetBSD: patch-mozilla_memory_mozalloc_fallible.h,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/memory/mozalloc/fallible.h.orig	2013-12-11 04:29:01.000000000 +0000
+++ mozilla/memory/mozalloc/fallible.h
@@ -5,9 +5,22 @@
 #ifndef mozilla_fallible_h
 #define mozilla_fallible_h
 
+#if defined(MOZALLOC_EXPORT)
+/* do nothing: it's been defined to __declspec(dllexport) by
+ * mozalloc*.cpp on platforms where that's required. */
+#elif defined(XP_WIN) || (defined(XP_OS2) && defined(__declspec))
+#  define MOZALLOC_EXPORT __declspec(dllimport)
+#elif defined(HAVE_VISIBILITY_ATTRIBUTE)
+/* Make sure symbols are still exported even if we're wrapped in a
+ * |visibility push(hidden)| blanket. */
+#  define MOZALLOC_EXPORT __attribute__ ((visibility ("default")))
+#else
+#  define MOZALLOC_EXPORT
+#endif
+
 namespace mozilla {
 
-struct fallible_t { };
+struct MOZALLOC_EXPORT fallible_t { };
 
 } // namespace mozilla
 

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_memory_mozalloc_mozalloc.h
$NetBSD: patch-mozilla_memory_mozalloc_mozalloc.h,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/memory/mozalloc/mozalloc.h.orig	2013-12-11 04:29:02.000000000 +0000
+++ mozilla/memory/mozalloc/mozalloc.h
@@ -39,15 +39,6 @@
 #  define MOZALLOC_EXPORT
 #endif
 
-
-#if defined(MOZ_ALWAYS_INLINE_EVEN_DEBUG)
-#  define MOZALLOC_INLINE MOZ_ALWAYS_INLINE_EVEN_DEBUG
-#elif defined(HAVE_FORCEINLINE)
-#  define MOZALLOC_INLINE __forceinline
-#else
-#  define MOZALLOC_INLINE inline
-#endif
-
 /* Workaround build problem with Sun Studio 12 */
 #if defined(__SUNPRO_C) || defined(__SUNPRO_CC)
 #  undef NS_WARN_UNUSED_RESULT
@@ -171,15 +162,6 @@ MOZALLOC_EXPORT void* moz_valloc(size_t 
  * that |::operator new() throw(std::bad_alloc)| will never return NULL.
  */
 
-/* NB: This is defined just to silence vacuous warnings about symbol
- * visibility on OS X/gcc. These symbols are force-inline and not
- * exported. */
-#if defined(XP_MACOSX)
-#  define MOZALLOC_EXPORT_NEW MOZALLOC_EXPORT
-#else
-#  define MOZALLOC_EXPORT_NEW
-#endif
-
 #if defined(ANDROID) || defined(_MSC_VER)
 /*
  * Android doesn't fully support exceptions, so its <new> header
@@ -195,53 +177,29 @@ MOZALLOC_EXPORT void* moz_valloc(size_t 
 
 #define MOZALLOC_THROW_BAD_ALLOC MOZALLOC_THROW_BAD_ALLOC_IF_HAS_EXCEPTIONS
 
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC
-{
-    return moz_xmalloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_malloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC
-{
-    return moz_xmalloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_malloc(size);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_free(ptr);
-}
-
-MOZALLOC_EXPORT_NEW MOZALLOC_INLINE
-void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_free(ptr);
-}
+MOZALLOC_EXPORT
+void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC;
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
 
 
 /*
@@ -263,29 +221,17 @@ void operator delete[](void* ptr, const 
  *   (4) the matching system |operator delete(void*) throw(std::bad_alloc)|
  */
 
-MOZALLOC_INLINE
-void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_malloc(size);
-}
-
-MOZALLOC_INLINE
-void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    return moz_malloc(size);
-}
-
-MOZALLOC_INLINE
-void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    moz_free(ptr);
-}
-
-MOZALLOC_INLINE
-void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
-{
-    moz_free(ptr);
-}
+MOZALLOC_EXPORT
+void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS;
 
 #endif  /* ifdef __cplusplus */
 

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp
$NetBSD: patch-mozilla_xpcom_base_nsMemoryInfoDumper.cpp,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/xpcom/base/nsMemoryInfoDumper.cpp.orig	2013-12-11 04:29:24.000000000 +0000
+++ mozilla/xpcom/base/nsMemoryInfoDumper.cpp
@@ -30,7 +30,7 @@
 #include <unistd.h>
 #endif
 
-#ifdef XP_LINUX
+#if defined(XP_LINUX) || defined(__FreeBSD__)
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
@@ -109,7 +109,7 @@ private:
 
 } // anonymous namespace
 
-#ifdef XP_LINUX // {
+#if defined(XP_LINUX) || defined(__FreeBSD__) // {
 namespace {
 
 /*
@@ -548,7 +548,7 @@ nsMemoryInfoDumper::~nsMemoryInfoDumper(
 /* static */ void
 nsMemoryInfoDumper::Initialize()
 {
-#ifdef XP_LINUX
+#if defined(XP_LINUX) || defined(__FreeBSD__)
   SignalPipeWatcher::Create();
   FifoWatcher::MaybeCreate();
 #endif

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp
$NetBSD: patch-mozilla_xpcom_base_nsMemoryReporterManager.cpp,v 1.1 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/xpcom/base/nsMemoryReporterManager.cpp.orig	2013-12-11 04:29:24.000000000 +0000
+++ mozilla/xpcom/base/nsMemoryReporterManager.cpp
@@ -196,6 +196,43 @@ static nsresult GetResidentFast(int64_t*
     return GetResident(aN);
 }
 
+#ifdef __FreeBSD__
+#include <libutil.h>
+
+static nsresult
+GetKinfoVmentrySelf(int64_t* prss)
+{
+    int cnt;
+    struct kinfo_vmentry *vmmap, *kve;
+    if ((vmmap = kinfo_getvmmap(getpid(), &cnt)) == NULL)
+        return NS_ERROR_FAILURE;
+
+    if (prss)
+        *prss = 0;
+
+    for (int i = 0; i < cnt; i++) {
+        kve = &vmmap[i];
+        if (prss)
+            *prss += kve->kve_private_resident;
+    }
+
+    free(vmmap);
+    return NS_OK;
+}
+
+#define HAVE_PRIVATE_REPORTER
+static nsresult
+GetPrivate(int64_t* aN)
+{
+    int64_t priv;
+    nsresult rv = GetKinfoVmentrySelf(&priv);
+    if (NS_SUCCEEDED(rv))
+        *aN = priv * getpagesize();
+
+    return NS_OK;
+}
+#endif // FreeBSD
+
 #elif defined(SOLARIS)
 
 #include <procfs.h>
@@ -370,6 +407,24 @@ static nsresult GetResidentFast(int64_t*
 }
 
 #define HAVE_PRIVATE_REPORTER
+static nsresult
+GetPrivate(int64_t* aN)
+{
+    PROCESS_MEMORY_COUNTERS_EX pmcex;
+    pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
+
+    if (!GetProcessMemoryInfo(
+            GetCurrentProcess(),
+            (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
+        return NS_ERROR_FAILURE;
+    }
+
+    *aN = pmcex.PrivateUsage;
+    return NS_OK;
+}
+#endif  // XP_<PLATFORM>
+
+#ifdef HAVE_PRIVATE_REPORTER
 class PrivateReporter MOZ_FINAL : public MemoryUniReporter
 {
 public:
@@ -382,21 +437,10 @@ public:
 
     NS_IMETHOD GetAmount(int64_t* aAmount)
     {
-        PROCESS_MEMORY_COUNTERS_EX pmcex;
-        pmcex.cb = sizeof(PROCESS_MEMORY_COUNTERS_EX);
-
-        if (!GetProcessMemoryInfo(
-                GetCurrentProcess(),
-                (PPROCESS_MEMORY_COUNTERS) &pmcex, sizeof(pmcex))) {
-            return NS_ERROR_FAILURE;
-        }
-
-        *aAmount = pmcex.PrivateUsage;
-        return NS_OK;
+        return GetPrivate(aAmount);
     }
 };
-
-#endif  // XP_<PLATFORM>
+#endif
 
 #ifdef HAVE_VSIZE_AND_RESIDENT_REPORTERS
 class VsizeReporter MOZ_FINAL : public MemoryUniReporter
@@ -780,7 +824,7 @@ nsMemoryReporterManager::Init()
     RegisterReporter(new mozilla::dmd::DMDReporter);
 #endif
 
-#if defined(XP_LINUX)
+#if defined(XP_LINUX) || defined(__FreeBSD__)
     nsMemoryInfoDumper::Initialize();
 #endif
 

cvs diff -r1.6 -r1.7 pkgsrc/www/seamonkey/patches/Attic/patch-mail_app_Makefile.in (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mail_app_Makefile.in 2013/01/07 21:55:30 1.6
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mail_app_Makefile.in 2013/12/26 13:17:37 1.7
@@ -1,15 +1,15 @@ @@ -1,15 +1,15 @@
1$NetBSD: patch-mail_app_Makefile.in,v 1.6 2013/01/07 21:55:30 ryoon Exp $ 1$NetBSD: patch-mail_app_Makefile.in,v 1.7 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mail/app/Makefile.in.orig 2012-11-18 10:14:23.000000000 +0000 3--- mail/app/Makefile.in.orig 2013-12-11 04:19:55.000000000 +0000
4+++ mail/app/Makefile.in 4+++ mail/app/Makefile.in
5@@ -63,6 +63,10 @@ LOCAL_INCLUDES += \ 5@@ -57,6 +57,10 @@ LOCAL_INCLUDES += \
6 DEFINES += -DXPCOM_GLUE 6 DEFINES += -DXPCOM_GLUE
7 STL_FLAGS= 7 STL_FLAGS=
8  8
9+ifeq ($(OS_ARCH),NetBSD) 9+ifeq ($(OS_ARCH),NetBSD)
10+LIBS += -lossaudio 10+LIBS += -lossaudio
11+endif 11+endif
12+ 12+
13 LIBS += \ 13 LIBS += \
14 $(EXTRA_DSO_LIBS) \ 
15 $(XPCOM_STANDALONE_GLUE_LDOPTS) \ 14 $(XPCOM_STANDALONE_GLUE_LDOPTS) \
 15 $(NULL)

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_stl-headers

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_config_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_gdb_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_jsapi-tests_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_shell_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_objs.mk

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_test_Makefile.in

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nICEr_nicer.gyp

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nICEr_src_stun_stun.h

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_nrappkit.gyp

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_src_log_r__log.c

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nrappkit_src_util_util.c

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_src_sipcc_cpr_darwin_cpr__darwin__ipc.c

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_build_build__config.h

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_tools_gyp_pylib_gyp_generator_mozmake.py

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_audio__device__impl.cc

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_modules_video__capture_video__capture__factory.cc

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_mfbt_Atomics.h

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_modules_libpref_src_init_all.js

cvs diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_baseconfig.mk (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_baseconfig.mk 2013/08/11 03:18:46 1.3
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_baseconfig.mk 2013/12/26 13:17:37 1.4
@@ -1,18 +1,16 @@ @@ -1,18 +1,16 @@
1$NetBSD: patch-mozilla_config_baseconfig.mk,v 1.3 2013/08/11 03:18:46 ryoon Exp $ 1$NetBSD: patch-mozilla_config_baseconfig.mk,v 1.4 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/config/baseconfig.mk.orig 2013-08-04 03:05:18.000000000 +0000 3--- mozilla/config/baseconfig.mk.orig 2013-12-11 04:28:28.000000000 +0000
4+++ mozilla/config/baseconfig.mk 4+++ mozilla/config/baseconfig.mk
5@@ -1,9 +1,9 @@ 5@@ -1,7 +1,7 @@
6 INCLUDED_AUTOCONF_MK = 1 
7  
8-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 6-includedir := $(includedir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
9-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 7-idldir = $(datadir)/idl/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
10-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION) 8-installdir = $(libdir)/$(MOZ_APP_NAME)-$(MOZ_APP_VERSION)
11-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION) 9-sdkdir = $(libdir)/$(MOZ_APP_NAME)-devel-$(MOZ_APP_VERSION)
12+includedir := $(includedir)/${MOZILLA_PKG_NAME} 10+includedir := $(includedir)/${MOZILLA_PKG_NAME}
13+idldir = $(datadir)/idl/${MOZILLA_PKG_NAME} 11+idldir = $(datadir)/idl/${MOZILLA_PKG_NAME}
14+installdir = $(libdir)/${MOZILLA_PKG_NAME} 12+installdir = $(libdir)/${MOZILLA_PKG_NAME}
15+sdkdir = $(libdir)/${MOZILLA_PKG_NAME}-sdk 13+sdkdir = $(libdir)/${MOZILLA_PKG_NAME}-sdk
16 DIST = $(DEPTH)/dist 14 DIST = $(DEPTH)/dist
17  15
18 # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't 16 # We do magic with OBJ_SUFFIX in config.mk, the following ensures we don't

cvs diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_Makefile.in (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_Makefile.in 2013/11/04 06:01:46 1.3
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_Makefile.in 2013/12/26 13:17:37 1.4
@@ -1,62 +1,18 @@ @@ -1,62 +1,18 @@
1$NetBSD: patch-mozilla_js_src_Makefile.in,v 1.3 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_js_src_Makefile.in,v 1.4 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/js/src/Makefile.in.orig 2013-10-29 01:20:53.000000000 +0000 3--- mozilla/js/src/Makefile.in.orig 2013-12-11 04:28:40.000000000 +0000
4+++ mozilla/js/src/Makefile.in 4+++ mozilla/js/src/Makefile.in
5@@ -232,10 +232,14 @@ endif 5@@ -467,6 +467,13 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsock
6 # ICU headers need to be available whether we build with the complete 
7 # Internationalization API or not - ICU stubs rely on them. 
8  
9+ifdef MOZ_NATIVE_ICU 
10+LOCAL_INCLUDES += $(MOZ_ICU_CFLAGS) 
11+else 
12 LOCAL_INCLUDES += \ 
13 -I$(topsrcdir)/../../intl/icu/source/common \ 
14 -I$(topsrcdir)/../../intl/icu/source/i18n \ 
15 $(NULL) 
16+endif 
17  
18 ifdef ENABLE_INTL_API 
19  
20@@ -255,6 +259,7 @@ else 
21 ICU_MAKE = $(MAKE) 
22 endif 
23  
24+ifndef MOZ_NATIVE_ICU 
25 # - Build ICU as part of the "export" target, so things get built 
26 # in the right order. 
27 # - ICU requires GNU make according to its readme.html. pymake can't be used 
28@@ -269,6 +274,7 @@ export:: 
29  
30 distclean clean:: 
31 $(call SUBMAKE,$@,intl/icu) 
32+endif 
33  
34 endif 
35  
36@@ -394,7 +400,11 @@ ifneq (,$(MOZ_ZLIB_LIBS)$(MOZ_GLUE_LDFLA 
37 DEFINES += -DUSE_ZLIB 
38 endif 
39  
40-SHARED_LIBRARY_LIBS += $(ICU_LIBS) 
41+ifdef MOZ_NATIVE_ICU 
42+EXTRA_DSO_LDOPTS += $(MOZ_ICU_LIBS) 
43+else 
44+SHARED_LIBRARY_LIBS += $(MOZ_ICU_LIBS) 
45+endif 
46  
47 # Prevent floating point errors caused by VC++ optimizations 
48 ifdef _MSC_VER 
49@@ -453,6 +463,13 @@ EXTRA_LIBS += -lposix4 -ldl -lnsl -lsock 
50 endif 6 endif
51 endif 7 endif
52  8
53+# clang 3.3 + -O2 makes jaeger crash in FixupArity 9+# clang 3.3 + -O2 makes jaeger crash in FixupArity
54+ifdef CLANG_CXX 10+ifdef CLANG_CXX
55+ifndef MOZ_DEBUG 11+ifndef MOZ_DEBUG
56+Compiler.$(OBJ_SUFFIX): CXXFLAGS += -fno-inline-functions 12+Compiler.$(OBJ_SUFFIX): CXXFLAGS += -fno-inline-functions
57+endif 13+endif
58+endif 14+endif
59+ 15+
60 # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result. 16 # An AIX Optimization bug causes PR_dtoa() & JS_dtoa to produce wrong result.
61 # This suppresses optimization for this single compilation unit. 17 # This suppresses optimization for this single compilation unit.
62 ifeq ($(OS_ARCH),AIX) 18 ifeq ($(OS_ARCH),AIX)

cvs diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_vm_SPSProfiler.cpp (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_vm_SPSProfiler.cpp 2013/11/04 06:01:46 1.3
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_vm_SPSProfiler.cpp 2013/12/26 13:17:37 1.4
@@ -1,12 +1,20 @@ @@ -1,12 +1,20 @@
1$NetBSD: patch-mozilla_js_src_vm_SPSProfiler.cpp,v 1.3 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_js_src_vm_SPSProfiler.cpp,v 1.4 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/js/src/vm/SPSProfiler.cpp.orig 2013-10-29 01:20:57.000000000 +0000 3--- mozilla/js/src/vm/SPSProfiler.cpp.orig 2013-12-11 04:28:45.000000000 +0000
4+++ mozilla/js/src/vm/SPSProfiler.cpp 4+++ mozilla/js/src/vm/SPSProfiler.cpp
5@@ -10,6 +10,7 @@ 5@@ -4,12 +4,15 @@
 6 * License, v. 2.0. If a copy of the MPL was not distributed with this
 7 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 8
 9+#include "jscntxtinlines.h"
 10+
 11 #include "vm/SPSProfiler.h"
 12
 13 #include "mozilla/DebugOnly.h"
6  14
7 #include "jsnum.h" 15 #include "jsnum.h"
8 #include "jsscript.h" 16 #include "jsscript.h"
9+#include "jscntxtinlines.h" 17+#include "jscntxtinlines.h"
10  18
11 #include "jit/BaselineJIT.h" 19 #include "jit/BaselineJIT.h"
12 #include "vm/StringBuffer.h" 20 #include "vm/StringBuffer.h"

cvs diff -r1.3 -r1.4 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi 2013/09/28 14:37:05 1.3
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi 2013/12/26 13:17:37 1.4
@@ -1,25 +1,25 @@ @@ -1,25 +1,25 @@
1$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi,v 1.3 2013/09/28 14:37:05 ryoon Exp $ 1$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_build_common.gypi,v 1.4 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/media/webrtc/trunk/webrtc/build/common.gypi.orig 2013-09-16 18:26:50.000000000 +0000 3--- mozilla/media/webrtc/trunk/webrtc/build/common.gypi.orig 2013-12-11 04:28:56.000000000 +0000
4+++ mozilla/media/webrtc/trunk/webrtc/build/common.gypi 4+++ mozilla/media/webrtc/trunk/webrtc/build/common.gypi
5@@ -71,9 +71,9 @@ 5@@ -78,9 +78,9 @@
6 'enable_data_logging%': 0, 6 'enable_protobuf%': 1,
7  7
8 # Disable these to not build components which can be externally provided. 8 # Disable these to not build components which can be externally provided.
9- 'build_libjpeg%': 1, 9- 'build_libjpeg%': 1,
10+ 'build_libjpeg%': 0, 10+ 'build_libjpeg%': 0,
11 'build_libyuv%': 1, 11 'build_libyuv%': 1,
12- 'build_libvpx%': 1, 12- 'build_libvpx%': 1,
13+ 'build_libvpx%': 0, 13+ 'build_libvpx%': 0,
14  14
15 # Enable to use the Mozilla internal settings. 15 # Enable to use the Mozilla internal settings.
16 'build_with_mozilla%': 0, 16 'build_with_mozilla%': 0,
17@@ -238,7 +238,7 @@ 17@@ -241,7 +241,7 @@
18 }], 18 }],
19 ['OS=="dragonfly" or OS=="netbsd"', { 19 ['OS=="dragonfly" or OS=="netbsd"', {
20 'defines': [ 20 'defines': [
21- # doesn't support pthread_condattr_setclock 21- # doesn't support pthread_condattr_setclock
22+ # doesn't support pthread_condattr_setclock, NetBSD 6 supports it. 22+ # doesn't support pthread_condattr_setclock, NetBSD 6 supports it.
23 'WEBRTC_CLOCK_TYPE_REALTIME', 23 'WEBRTC_CLOCK_TYPE_REALTIME',
24 ], 24 ],
25 }], 25 }],

cvs diff -r1.8 -r1.9 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_system-headers (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_system-headers 2013/11/04 06:01:46 1.8
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_config_system-headers 2013/12/26 13:17:37 1.9
@@ -1,27 +1,9 @@ @@ -1,27 +1,9 @@
1$NetBSD: patch-mozilla_config_system-headers,v 1.8 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_config_system-headers,v 1.9 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/config/system-headers.orig 2013-10-29 01:20:42.000000000 +0000 3--- mozilla/config/system-headers.orig 2013-12-11 04:28:28.000000000 +0000
4+++ mozilla/config/system-headers 4+++ mozilla/config/system-headers
5@@ -469,6 +469,7 @@ IOKit/IOMessage.h 5@@ -1144,3 +1144,4 @@ unicode/unum.h
6 IOKit/pwr_mgt/IOPMLib.h 6 unicode/ustring.h
7 iomanip 7 unicode/utypes.h
8 ios 8 #endif
9+iosfwd 9+libutil.h
10 iostream 
11 iostream.h 
12 iterator 
13@@ -1132,3 +1133,14 @@ kvm.h 
14 spawn.h 
15 err.h 
16 xlocale.h 
17+#if MOZ_NATIVE_ICU==1 
18+unicode/locid.h 
19+unicode/numsys.h 
20+unicode/ucal.h 
21+unicode/ucol.h 
22+unicode/udat.h 
23+unicode/udatpg.h 
24+unicode/uenum.h 
25+unicode/unum.h 
26+unicode/ustring.h 
27+#endif 

cvs diff -r1.8 -r1.9 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_config_system-headers (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_config_system-headers 2013/11/04 06:01:46 1.8
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_config_system-headers 2013/12/26 13:17:37 1.9
@@ -1,27 +1,9 @@ @@ -1,27 +1,9 @@
1$NetBSD: patch-mozilla_js_src_config_system-headers,v 1.8 2013/11/04 06:01:46 ryoon Exp $ 1$NetBSD: patch-mozilla_js_src_config_system-headers,v 1.9 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/js/src/config/system-headers.orig 2013-10-29 01:20:53.000000000 +0000 3--- mozilla/js/src/config/system-headers.orig 2013-12-11 04:28:40.000000000 +0000
4+++ mozilla/js/src/config/system-headers 4+++ mozilla/js/src/config/system-headers
5@@ -469,6 +469,7 @@ IOKit/IOMessage.h 5@@ -1144,3 +1144,4 @@ unicode/unum.h
6 IOKit/pwr_mgt/IOPMLib.h 6 unicode/ustring.h
7 iomanip 7 unicode/utypes.h
8 ios 8 #endif
9+iosfwd 9+libutil.h
10 iostream 
11 iostream.h 
12 iterator 
13@@ -1132,3 +1133,14 @@ kvm.h 
14 spawn.h 
15 err.h 
16 xlocale.h 
17+#if MOZ_NATIVE_ICU==1 
18+unicode/locid.h 
19+unicode/numsys.h 
20+unicode/ucal.h 
21+unicode/ucol.h 
22+unicode/udat.h 
23+unicode/udatpg.h 
24+unicode/uenum.h 
25+unicode/unum.h 
26+unicode/ustring.h 
27+#endif 

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util.h (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util.h 2013/08/11 03:18:46 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util.h 2013/12/26 13:17:37 1.2
@@ -1,23 +1,14 @@ @@ -1,23 +1,14 @@
1$NetBSD: patch-mozilla_ipc_chromium_src_base_file__util.h,v 1.1 2013/08/11 03:18:46 ryoon Exp $ 1$NetBSD: patch-mozilla_ipc_chromium_src_base_file__util.h,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/ipc/chromium/src/base/file_util.h.orig 2013-08-04 03:05:29.000000000 +0000 3--- mozilla/ipc/chromium/src/base/file_util.h.orig 2013-12-11 04:28:40.000000000 +0000
4+++ mozilla/ipc/chromium/src/base/file_util.h 4+++ mozilla/ipc/chromium/src/base/file_util.h
5@@ -16,7 +16,9 @@ 5@@ -16,7 +16,9 @@
6 #include <sys/stat.h> 6 #include <sys/stat.h>
7 #elif defined(OS_POSIX)  7 #elif defined(OS_POSIX)
8 #include <sys/types.h> 8 #include <sys/types.h>
9+#if !defined(OS_SOLARIS) 9+#if !defined(OS_SOLARIS)
10 #include <fts.h> 10 #include <fts.h>
11+#endif 11+#endif
12 #include <sys/stat.h> 12 #include <sys/stat.h>
13 #endif 13 #endif
14  14
15@@ -466,7 +468,7 @@ class FileEnumerator { 
16 #if defined(OS_WIN) 
17 WIN32_FIND_DATA find_data_; 
18 HANDLE find_handle_; 
19-#elif defined(ANDROID) 
20+#elif defined(ANDROID) || defined(OS_SOLARIS) 
21 void *fts_; 
22 #elif defined(OS_POSIX) 
23 FTS* fts_; 

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util__posix.cc (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util__posix.cc 2013/08/11 03:18:46 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_ipc_chromium_src_base_file__util__posix.cc 2013/12/26 13:17:37 1.2
@@ -1,58 +1,31 @@ @@ -1,58 +1,31 @@
1$NetBSD: patch-mozilla_ipc_chromium_src_base_file__util__posix.cc,v 1.1 2013/08/11 03:18:46 ryoon Exp $ 1$NetBSD: patch-mozilla_ipc_chromium_src_base_file__util__posix.cc,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/ipc/chromium/src/base/file_util_posix.cc.orig 2013-08-04 03:05:29.000000000 +0000 3--- mozilla/ipc/chromium/src/base/file_util_posix.cc.orig 2013-12-11 04:28:40.000000000 +0000
4+++ mozilla/ipc/chromium/src/base/file_util_posix.cc 4+++ mozilla/ipc/chromium/src/base/file_util_posix.cc
5@@ -8,7 +8,7 @@ 5@@ -8,7 +8,7 @@
6 #include <errno.h> 6 #include <errno.h>
7 #include <fcntl.h> 7 #include <fcntl.h>
8 #include <fnmatch.h> 8 #include <fnmatch.h>
9-#ifndef ANDROID 9-#ifndef ANDROID
10+#if !defined(ANDROID) && !defined(OS_SOLARIS) 10+#if !defined(ANDROID) && !defined(OS_SOLARIS)
11 #include <fts.h> 11 #include <fts.h>
12 #endif 12 #endif
13 #include <libgen.h> 13 #include <libgen.h>
14@@ -121,7 +121,7 @@ bool Delete(const FilePath& path, bool r 14@@ -67,7 +67,7 @@ bool Delete(const FilePath& path, bool r
15 if (!recursive) 15 if (!recursive)
16 return (rmdir(path_str) == 0); 16 return (rmdir(path_str) == 0);
17  17
18-#ifdef ANDROID 18-#ifdef ANDROID
19+#if defined(ANDROID) || defined(OS_SOLARIS) 19+#if defined(ANDROID) || defined(OS_SOLARIS)
20 // XXX Need ftsless impl for bionic 20 // XXX Need ftsless impl for bionic
21 return false; 21 return false;
22 #else 22 #else
23@@ -194,7 +194,7 @@ bool CopyDirectory(const FilePath& from_ 23@@ -140,7 +140,7 @@ bool CopyDirectory(const FilePath& from_
24 return false; 24 return false;
25 } 25 }
26  26
27-#ifdef ANDROID 27-#ifdef ANDROID
28+#if defined(ANDROID) || defined(OS_SOLARIS) 28+#if defined(ANDROID) || defined(OS_SOLARIS)
29 // XXX Need ftsless impl for bionic 29 // XXX Need ftsless impl for bionic
30 return false; 30 return false;
31 #else 31 #else
32@@ -613,7 +613,7 @@ FileEnumerator::FileEnumerator(const Fil 
33 } 
34  
35 FileEnumerator::~FileEnumerator() { 
36-#ifndef ANDROID 
37+#if !defined(ANDROID) && !defined(OS_SOLARIS) 
38 if (fts_) 
39 fts_close(fts_); 
40 #endif 
41@@ -625,7 +625,7 @@ void FileEnumerator::GetFindInfo(FindInf 
42 if (!is_in_find_op_) 
43 return; 
44  
45-#ifndef ANDROID 
46+#if !defined(ANDROID) && !defined(OS_SOLARIS) 
47 memcpy(&(info->stat), fts_ent_->fts_statp, sizeof(info->stat)); 
48 info->filename.assign(fts_ent_->fts_name); 
49 #endif 
50@@ -636,7 +636,7 @@ void FileEnumerator::GetFindInfo(FindInf 
51 // large directories with many files this can be quite deep. 
52 // TODO(erikkay) - get rid of this recursive pattern 
53 FilePath FileEnumerator::Next() { 
54-#ifdef ANDROID 
55+#if defined(ANDROID) || defined(OS_SOLARIS) 
56 return FilePath(); 
57 #else 
58 if (!is_in_find_op_) { 

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_signaling.gyp (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_signaling.gyp 2013/05/23 13:25:30 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_signaling.gyp 2013/12/26 13:17:37 1.2
@@ -1,49 +1,40 @@ @@ -1,49 +1,40 @@
1$NetBSD: patch-mozilla_media_webrtc_signaling_signaling.gyp,v 1.1 2013/05/23 13:25:30 ryoon Exp $ 1$NetBSD: patch-mozilla_media_webrtc_signaling_signaling.gyp,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/media/webrtc/signaling/signaling.gyp.orig 2013-05-03 03:08:06.000000000 +0000 3--- mozilla/media/webrtc/signaling/signaling.gyp.orig 2013-12-11 04:28:54.000000000 +0000
4+++ mozilla/media/webrtc/signaling/signaling.gyp 4+++ mozilla/media/webrtc/signaling/signaling.gyp
5@@ -217,6 +217,19 @@ 5@@ -244,6 +244,19 @@
6 'cflags_mozilla': [ 6 'cflags_mozilla': [
7 ], 7 ],
8 }], 8 }],
9+ ['os_bsd==1', { 9+ ['os_bsd==1', {
10+ 'include_dirs': [ 10+ 'include_dirs': [
11+ ], 11+ ],
12+ 'defines': [ 12+ 'defines': [
13+ # avoiding pointless ifdef churn 13+ # avoiding pointless ifdef churn
14+ 'SIP_OS_OSX', 14+ 'SIP_OS_OSX',
15+ 'OSX', 15+ 'OSX',
16+ 'SECLIB_OPENSSL', 16+ 'SECLIB_OPENSSL',
17+ ], 17+ ],
18+ 18+
19+ 'cflags_mozilla': [ 19+ 'cflags_mozilla': [
20+ ], 20+ ],
21+ }], 21+ }],
22 ['OS=="mac"', { 22 ['OS=="mac"', {
23 'include_dirs': [ 23 'include_dirs': [
24 ], 24 ],
25@@ -752,7 +765,7 @@ 25@@ -823,14 +836,13 @@
26 ], 26 ['OS=="mac"', {
27  27 'defines' : [
28 }], 28 'SIP_OS_OSX',
29- ['OS=="mac"', { 29- '_POSIX_SOURCE',
30+ ['OS=="mac" or os_bsd==1', { 30+ # using BSD extensions, leave _POSIX_SOURCE undefined
31  31 'CPR_MEMORY_LITTLE_ENDIAN',
32 'include_dirs': [ 32 'NO_SOCKET_POLLING',
33 ], 33 'USE_TIMER_SELECT_BASED',
34@@ -797,14 +810,13 @@ 34 'FULL_BUILD',
35  35 'STUBBED_OUT',
36 'defines' : [ 36 'USE_PRINTF',
37 'SIP_OS_OSX', 37- '_DARWIN_C_SOURCE',
38- '_POSIX_SOURCE', 38 'NO_NSPR_10_SUPPORT',
39+ # using BSD extensions, leave _POSIX_SOURCE undefined 39 ],
40 'CPR_MEMORY_LITTLE_ENDIAN', 40 }],
41 'NO_SOCKET_POLLING', 
42 'USE_TIMER_SELECT_BASED', 
43 'FULL_BUILD', 
44 'STUBBED_OUT', 
45 'USE_PRINTF', 
46- '_DARWIN_C_SOURCE', 
47 'NO_NSPR_10_SUPPORT', 
48 ], 
49  

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_test_Makefile.in (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_test_Makefile.in 2013/05/23 13:25:30 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_signaling_test_Makefile.in 2013/12/26 13:17:37 1.2
@@ -1,21 +1,12 @@ @@ -1,21 +1,12 @@
1$NetBSD: patch-mozilla_media_webrtc_signaling_test_Makefile.in,v 1.1 2013/05/23 13:25:30 ryoon Exp $ 1$NetBSD: patch-mozilla_media_webrtc_signaling_test_Makefile.in,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/media/webrtc/signaling/test/Makefile.in.orig 2013-05-03 03:08:06.000000000 +0000 3--- mozilla/media/webrtc/signaling/test/Makefile.in.orig 2013-12-11 04:28:55.000000000 +0000
4+++ mozilla/media/webrtc/signaling/test/Makefile.in 4+++ mozilla/media/webrtc/signaling/test/Makefile.in
5@@ -17,6 +17,7 @@ LIBS = \ 5@@ -7,6 +7,7 @@ LIBS = \
6 $(NSPR_LIBS) \ 6 $(NSPR_LIBS) \
7 $(NSS_LIBS) \ 7 $(NSS_LIBS) \
8 $(REALTIME_LIBS) \ 8 $(REALTIME_LIBS) \
9+ $(MOZ_LIBV4L2_LIBS) \ 9+ $(MOZ_LIBV4L2_LIBS) \
10 $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \ 10 $(DEPTH)/xpcom/glue/$(LIB_PREFIX)xpcomglue_s.$(LIB_SUFFIX) \
11 $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \ 11 $(DEPTH)/media/mtransport/standalone/$(LIB_PREFIX)mtransport_s.$(LIB_SUFFIX) \
12 $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \ 12 $(DEPTH)/media/webrtc/signalingtest/signaling_ecc/$(LIB_PREFIX)ecc.$(LIB_SUFFIX) \
13@@ -86,7 +87,7 @@ LIBS += \ 
14 $(NULL) 
15 endif 
16  
17-ifeq ($(OS_TARGET),Linux) 
18+ifneq (,$(filter Linux DragonFly FreeBSD NetBSD OpenBSD,$(OS_TARGET))) 
19 LIBS += \ 
20 $(MOZ_CAIRO_OSLIBS) \ 
21 $(NULL) 

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp 2013/05/23 13:25:30 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp 2013/12/26 13:17:37 1.2
@@ -1,18 +1,3388 @@ @@ -1,18 +1,3388 @@
1$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp,v 1.1 2013/05/23 13:25:30 ryoon Exp $ 1$NetBSD: patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_spreadsortlib_spreadsort.hpp,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig 2013-05-03 03:08:07.000000000 +0000 3--- mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp.orig 2013-12-11 04:28:57.000000000 +0000
4+++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp 4+++ mozilla/media/webrtc/trunk/webrtc/system_wrappers/source/spreadsortlib/spreadsort.hpp
5@@ -21,6 +21,13 @@ Scott McMurray  5@@ -1,1688 +1,1695 @@
6 #include "constants.hpp"  6-//Templated spread_sort library
7 #include <cstring>  7-
8  8-// Copyright Steven J. Ross 2001 - 2009.
9+#ifdef __FreeBSD__  9-// Distributed under the Boost Software License, Version 1.0.
10+# include <osreldate.h>  10-// (See accompanying file LICENSE_1_0.txt or copy at
11+# if __FreeBSD_version < 900506  11-// http://www.boost.org/LICENSE_1_0.txt)
12+# define getchar boost_getchar  12-
13+# endif  13-// See http://www.boost.org/ for updates, documentation, and revision history.
14+#endif  14-
15+  15-/*
16 namespace boost {  16-Some improvements suggested by:
17 namespace detail {  17-Phil Endecott and Frank Gennari
18 //This only works on unsigned data types  18-Cygwin fix provided by:
 19-Scott McMurray
 20-*/
 21-
 22-#ifndef BOOST_SPREAD_SORT_H
 23-#define BOOST_SPREAD_SORT_H
 24-#include <algorithm>
 25-#include <cstring>
 26-#include <vector>
 27-#include "webrtc/system_wrappers/source/spreadsortlib/constants.hpp"
 28-
 29-namespace boost {
 30- namespace detail {
 31- //This only works on unsigned data types
 32- template <typename T>
 33- inline unsigned
 34- rough_log_2_size(const T& input)
 35- {
 36- unsigned result = 0;
 37- //The && is necessary on some compilers to avoid infinite loops; it doesn't significantly impair performance
 38- while((input >> result) && (result < (8*sizeof(T)))) ++result;
 39- return result;
 40- }
 41-
 42- //Gets the maximum size which we'll call spread_sort on to control worst-case performance
 43- //Maintains both a minimum size to recurse and a check of distribution size versus count
 44- //This is called for a set of bins, instead of bin-by-bin, to avoid performance overhead
 45- inline size_t
 46- get_max_count(unsigned log_range, size_t count)
 47- {
 48- unsigned divisor = rough_log_2_size(count);
 49- //Making sure the divisor is positive
 50- if(divisor > LOG_MEAN_BIN_SIZE)
 51- divisor -= LOG_MEAN_BIN_SIZE;
 52- else
 53- divisor = 1;
 54- unsigned relative_width = (LOG_CONST * log_range)/((divisor > MAX_SPLITS) ? MAX_SPLITS : divisor);
 55- //Don't try to bitshift more than the size of an element
 56- if((8*sizeof(size_t)) <= relative_width)
 57- relative_width = (8*sizeof(size_t)) - 1;
 58- return (size_t)1 << ((relative_width < (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT)) ?
 59- (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT) : relative_width);
 60- }
 61-
 62- //Find the minimum and maximum using <
 63- template <class RandomAccessIter>
 64- inline void
 65- find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min)
 66- {
 67- min = max = current;
 68- //Start from the second item, as max and min are initialized to the first
 69- while(++current < last) {
 70- if(*max < *current)
 71- max = current;
 72- else if(*current < *min)
 73- min = current;
 74- }
 75- }
 76-
 77- //Uses a user-defined comparison operator to find minimum and maximum
 78- template <class RandomAccessIter, class compare>
 79- inline void
 80- find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min, compare comp)
 81- {
 82- min = max = current;
 83- while(++current < last) {
 84- if(comp(*max, *current))
 85- max = current;
 86- else if(comp(*current, *min))
 87- min = current;
 88- }
 89- }
 90-
 91- //Gets a non-negative right bit shift to operate as a logarithmic divisor
 92- inline int
 93- get_log_divisor(size_t count, unsigned log_range)
 94- {
 95- int log_divisor;
 96- //If we can finish in one iteration without exceeding either (2 to the MAX_SPLITS) or n bins, do so
 97- if((log_divisor = log_range - rough_log_2_size(count)) <= 0 && log_range < MAX_SPLITS)
 98- log_divisor = 0;
 99- else {
 100- //otherwise divide the data into an optimized number of pieces
 101- log_divisor += LOG_MEAN_BIN_SIZE;
 102- if(log_divisor < 0)
 103- log_divisor = 0;
 104- //Cannot exceed MAX_SPLITS or cache misses slow down bin lookups dramatically
 105- if((log_range - log_divisor) > MAX_SPLITS)
 106- log_divisor = log_range - MAX_SPLITS;
 107- }
 108- return log_divisor;
 109- }
 110-
 111- template <class RandomAccessIter>
 112- inline RandomAccessIter *
 113- size_bins(std::vector<size_t> &bin_sizes, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
 114- {
 115- //Assure space for the size of each bin, followed by initializing sizes
 116- if(bin_count > bin_sizes.size())
 117- bin_sizes.resize(bin_count);
 118- for(size_t u = 0; u < bin_count; u++)
 119- bin_sizes[u] = 0;
 120- //Make sure there is space for the bins
 121- cache_end = cache_offset + bin_count;
 122- if(cache_end > bin_cache.size())
 123- bin_cache.resize(cache_end);
 124- return &(bin_cache[cache_offset]);
 125- }
 126-
 127- //Implementation for recursive integer sorting
 128- template <class RandomAccessIter, class div_type, class data_type>
 129- inline void
 130- spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 131- , std::vector<size_t> &bin_sizes)
 132- {
 133- //This step is roughly 10% of runtime, but it helps avoid worst-case behavior and improve behavior with real data
 134- //If you know the maximum and minimum ahead of time, you can pass those values in and skip this step for the first iteration
 135- RandomAccessIter max, min;
 136- find_extremes(first, last, max, min);
 137- //max and min will be the same (the first item) iff all values are equivalent
 138- if(max == min)
 139- return;
 140- RandomAccessIter * target_bin;
 141- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(*max >> 0) - (*min >> 0)));
 142- div_type div_min = *min >> log_divisor;
 143- div_type div_max = *max >> log_divisor;
 144- unsigned bin_count = div_max - div_min + 1;
 145- unsigned cache_end;
 146- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 147-
 148- //Calculating the size of each bin; this takes roughly 10% of runtime
 149- for (RandomAccessIter current = first; current != last;)
 150- bin_sizes[(*(current++) >> log_divisor) - div_min]++;
 151- //Assign the bin positions
 152- bins[0] = first;
 153- for(unsigned u = 0; u < bin_count - 1; u++)
 154- bins[u + 1] = bins[u] + bin_sizes[u];
 155-
 156- //Swap into place
 157- //This dominates runtime, mostly in the swap and bin lookups
 158- RandomAccessIter nextbinstart = first;
 159- for(unsigned u = 0; u < bin_count - 1; ++u) {
 160- RandomAccessIter * local_bin = bins + u;
 161- nextbinstart += bin_sizes[u];
 162- //Iterating over each element in this bin
 163- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 164- //Swapping elements in current into place until the correct element has been swapped in
 165- for(target_bin = (bins + ((*current >> log_divisor) - div_min)); target_bin != local_bin;
 166- target_bin = bins + ((*current >> log_divisor) - div_min)) {
 167- //3-way swap; this is about 1% faster than a 2-way swap with integers
 168- //The main advantage is less copies are involved per item put in the correct place
 169- data_type tmp;
 170- RandomAccessIter b = (*target_bin)++;
 171- RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min);
 172- if (b_bin != local_bin) {
 173- RandomAccessIter c = (*b_bin)++;
 174- tmp = *c;
 175- *c = *b;
 176- }
 177- else
 178- tmp = *b;
 179- *b = *current;
 180- *current = tmp;
 181- }
 182- }
 183- *local_bin = nextbinstart;
 184- }
 185- bins[bin_count - 1] = last;
 186-
 187- //If we've bucketsorted, the array is sorted and we should skip recursion
 188- if(!log_divisor)
 189- return;
 190-
 191- //Recursing; log_divisor is the remaining range
 192- size_t max_count = get_max_count(log_divisor, last - first);
 193- RandomAccessIter lastPos = first;
 194- for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 195- size_t count = bin_cache[u] - lastPos;
 196- //don't sort unless there are at least two items to compare
 197- if(count < 2)
 198- continue;
 199- //using std::sort if its worst-case is better
 200- if(count < max_count)
 201- std::sort(lastPos, bin_cache[u]);
 202- else
 203- spread_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 204- }
 205- }
 206-
 207- //Generic bitshift-based 3-way swapping code
 208- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 209- inline void inner_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift
 210- , const unsigned log_divisor, const div_type div_min)
 211- {
 212- RandomAccessIter * local_bin = bins + ii;
 213- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 214- for(RandomAccessIter * target_bin = (bins + (shift(*current, log_divisor) - div_min)); target_bin != local_bin;
 215- target_bin = bins + (shift(*current, log_divisor) - div_min)) {
 216- data_type tmp;
 217- RandomAccessIter b = (*target_bin)++;
 218- RandomAccessIter * b_bin = bins + (shift(*b, log_divisor) - div_min);
 219- //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs
 220- if (b_bin != local_bin) {
 221- RandomAccessIter c = (*b_bin)++;
 222- tmp = *c;
 223- *c = *b;
 224- }
 225- //Note: we could increment current once the swap is done in this case, but that seems to impair performance
 226- else
 227- tmp = *b;
 228- *b = *current;
 229- *current = tmp;
 230- }
 231- }
 232- *local_bin = nextbinstart;
 233- }
 234-
 235- //Standard swapping wrapper for ascending values
 236- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 237- inline void swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift
 238- , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min)
 239- {
 240- nextbinstart += bin_sizes[ii];
 241- inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, log_divisor, div_min);
 242- }
 243-
 244- //Functor implementation for recursive sorting
 245- template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 246- inline void
 247- spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 248- , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 249- {
 250- RandomAccessIter max, min;
 251- find_extremes(first, last, max, min, comp);
 252- if(max == min)
 253- return;
 254- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0))));
 255- div_type div_min = shift(*min, log_divisor);
 256- div_type div_max = shift(*max, log_divisor);
 257- unsigned bin_count = div_max - div_min + 1;
 258- unsigned cache_end;
 259- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 260-
 261- //Calculating the size of each bin
 262- for (RandomAccessIter current = first; current != last;)
 263- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 264- bins[0] = first;
 265- for(unsigned u = 0; u < bin_count - 1; u++)
 266- bins[u + 1] = bins[u] + bin_sizes[u];
 267-
 268- //Swap into place
 269- RandomAccessIter nextbinstart = first;
 270- for(unsigned u = 0; u < bin_count - 1; ++u)
 271- swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, bin_sizes, log_divisor, div_min);
 272- bins[bin_count - 1] = last;
 273-
 274- //If we've bucketsorted, the array is sorted and we should skip recursion
 275- if(!log_divisor)
 276- return;
 277-
 278- //Recursing
 279- size_t max_count = get_max_count(log_divisor, last - first);
 280- RandomAccessIter lastPos = first;
 281- for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 282- size_t count = bin_cache[u] - lastPos;
 283- if(count < 2)
 284- continue;
 285- if(count < max_count)
 286- std::sort(lastPos, bin_cache[u], comp);
 287- else
 288- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp);
 289- }
 290- }
 291-
 292- //Functor implementation for recursive sorting with only Shift overridden
 293- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 294- inline void
 295- spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 296- , std::vector<size_t> &bin_sizes, right_shift shift)
 297- {
 298- RandomAccessIter max, min;
 299- find_extremes(first, last, max, min);
 300- if(max == min)
 301- return;
 302- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0))));
 303- div_type div_min = shift(*min, log_divisor);
 304- div_type div_max = shift(*max, log_divisor);
 305- unsigned bin_count = div_max - div_min + 1;
 306- unsigned cache_end;
 307- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 308-
 309- //Calculating the size of each bin
 310- for (RandomAccessIter current = first; current != last;)
 311- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 312- bins[0] = first;
 313- for(unsigned u = 0; u < bin_count - 1; u++)
 314- bins[u + 1] = bins[u] + bin_sizes[u];
 315-
 316- //Swap into place
 317- RandomAccessIter nextbinstart = first;
 318- for(unsigned ii = 0; ii < bin_count - 1; ++ii)
 319- swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 320- bins[bin_count - 1] = last;
 321-
 322- //If we've bucketsorted, the array is sorted and we should skip recursion
 323- if(!log_divisor)
 324- return;
 325-
 326- //Recursing
 327- size_t max_count = get_max_count(log_divisor, last - first);
 328- RandomAccessIter lastPos = first;
 329- for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 330- size_t count = bin_cache[u] - lastPos;
 331- if(count < 2)
 332- continue;
 333- if(count < max_count)
 334- std::sort(lastPos, bin_cache[u]);
 335- else
 336- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift);
 337- }
 338- }
 339-
 340- //Holds the bin vector and makes the initial recursive call
 341- template <class RandomAccessIter, class div_type, class data_type>
 342- inline void
 343- spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type)
 344- {
 345- std::vector<size_t> bin_sizes;
 346- std::vector<RandomAccessIter> bin_cache;
 347- spread_sort_rec<RandomAccessIter, div_type, data_type>(first, last, bin_cache, 0, bin_sizes);
 348- }
 349-
 350- template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 351- inline void
 352- spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp)
 353- {
 354- std::vector<size_t> bin_sizes;
 355- std::vector<RandomAccessIter> bin_cache;
 356- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(first, last, bin_cache, 0, bin_sizes, shift, comp);
 357- }
 358-
 359- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 360- inline void
 361- spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift)
 362- {
 363- std::vector<size_t> bin_sizes;
 364- std::vector<RandomAccessIter> bin_cache;
 365- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift);
 366- }
 367- }
 368-
 369- //Top-level sorting call for integers
 370- template <class RandomAccessIter>
 371- inline void integer_sort(RandomAccessIter first, RandomAccessIter last)
 372- {
 373- //Don't sort if it's too small to optimize
 374- if(last - first < detail::MIN_SORT_SIZE)
 375- std::sort(first, last);
 376- else
 377- detail::spread_sort(first, last, *first >> 0, *first);
 378- }
 379-
 380- //integer_sort with functors
 381- template <class RandomAccessIter, class right_shift, class compare>
 382- inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
 383- right_shift shift, compare comp) {
 384- if(last - first < detail::MIN_SORT_SIZE)
 385- std::sort(first, last, comp);
 386- else
 387- detail::spread_sort(first, last, shift(*first, 0), *first, shift, comp);
 388- }
 389-
 390- //integer_sort with right_shift functor
 391- template <class RandomAccessIter, class right_shift>
 392- inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
 393- right_shift shift) {
 394- if(last - first < detail::MIN_SORT_SIZE)
 395- std::sort(first, last);
 396- else
 397- detail::spread_sort(first, last, shift(*first, 0), *first, shift);
 398- }
 399-
 400- //------------------------------------------------------ float_sort source --------------------------------------
 401- //Casts a RandomAccessIter to the specified data type
 402- template<class cast_type, class RandomAccessIter>
 403- inline cast_type
 404- cast_float_iter(const RandomAccessIter & floatiter)
 405- {
 406- cast_type result;
 407- std::memcpy(&result, &(*floatiter), sizeof(cast_type));
 408- return result;
 409- }
 410-
 411- //Casts a data element to the specified datinner_float_a type
 412- template<class data_type, class cast_type>
 413- inline cast_type
 414- mem_cast(const data_type & data)
 415- {
 416- cast_type result;
 417- std::memcpy(&result, &data, sizeof(cast_type));
 418- return result;
 419- }
 420-
 421- namespace detail {
 422- template <class RandomAccessIter, class div_type, class right_shift>
 423- inline void
 424- find_extremes(RandomAccessIter current, RandomAccessIter last, div_type & max, div_type & min, right_shift shift)
 425- {
 426- min = max = shift(*current, 0);
 427- while(++current < last) {
 428- div_type value = shift(*current, 0);
 429- if(max < value)
 430- max = value;
 431- else if(value < min)
 432- min = value;
 433- }
 434- }
 435-
 436- //Specialized swap loops for floating-point casting
 437- template <class RandomAccessIter, class div_type, class data_type>
 438- inline void inner_float_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii
 439- , const unsigned log_divisor, const div_type div_min)
 440- {
 441- RandomAccessIter * local_bin = bins + ii;
 442- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 443- for(RandomAccessIter * target_bin = (bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)); target_bin != local_bin;
 444- target_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)) {
 445- data_type tmp;
 446- RandomAccessIter b = (*target_bin)++;
 447- RandomAccessIter * b_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(b) >> log_divisor) - div_min);
 448- //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs
 449- if (b_bin != local_bin) {
 450- RandomAccessIter c = (*b_bin)++;
 451- tmp = *c;
 452- *c = *b;
 453- }
 454- else
 455- tmp = *b;
 456- *b = *current;
 457- *current = tmp;
 458- }
 459- }
 460- *local_bin = nextbinstart;
 461- }
 462-
 463- template <class RandomAccessIter, class div_type, class data_type>
 464- inline void float_swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii
 465- , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min)
 466- {
 467- nextbinstart += bin_sizes[ii];
 468- inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, log_divisor, div_min);
 469- }
 470-
 471- template <class RandomAccessIter, class cast_type>
 472- inline void
 473- find_extremes(RandomAccessIter current, RandomAccessIter last, cast_type & max, cast_type & min)
 474- {
 475- min = max = cast_float_iter<cast_type, RandomAccessIter>(current);
 476- while(++current < last) {
 477- cast_type value = cast_float_iter<cast_type, RandomAccessIter>(current);
 478- if(max < value)
 479- max = value;
 480- else if(value < min)
 481- min = value;
 482- }
 483- }
 484-
 485- //Special-case sorting of positive floats with casting instead of a right_shift
 486- template <class RandomAccessIter, class div_type, class data_type>
 487- inline void
 488- positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 489- , std::vector<size_t> &bin_sizes)
 490- {
 491- div_type max, min;
 492- find_extremes(first, last, max, min);
 493- if(max == min)
 494- return;
 495- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 496- div_type div_min = min >> log_divisor;
 497- div_type div_max = max >> log_divisor;
 498- unsigned bin_count = div_max - div_min + 1;
 499- unsigned cache_end;
 500- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 501-
 502- //Calculating the size of each bin
 503- for (RandomAccessIter current = first; current != last;)
 504- bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 505- bins[0] = first;
 506- for(unsigned u = 0; u < bin_count - 1; u++)
 507- bins[u + 1] = bins[u] + bin_sizes[u];
 508-
 509- //Swap into place
 510- RandomAccessIter nextbinstart = first;
 511- for(unsigned u = 0; u < bin_count - 1; ++u)
 512- float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, bin_sizes, log_divisor, div_min);
 513- bins[bin_count - 1] = last;
 514-
 515- //Return if we've completed bucketsorting
 516- if(!log_divisor)
 517- return;
 518-
 519- //Recursing
 520- size_t max_count = get_max_count(log_divisor, last - first);
 521- RandomAccessIter lastPos = first;
 522- for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 523- size_t count = bin_cache[u] - lastPos;
 524- if(count < 2)
 525- continue;
 526- if(count < max_count)
 527- std::sort(lastPos, bin_cache[u]);
 528- else
 529- positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 530- }
 531- }
 532-
 533- //Sorting negative_ float_s
 534- //Note that bins are iterated in reverse order because max_neg_float = min_neg_int
 535- template <class RandomAccessIter, class div_type, class data_type>
 536- inline void
 537- negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 538- , std::vector<size_t> &bin_sizes)
 539- {
 540- div_type max, min;
 541- find_extremes(first, last, max, min);
 542- if(max == min)
 543- return;
 544- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 545- div_type div_min = min >> log_divisor;
 546- div_type div_max = max >> log_divisor;
 547- unsigned bin_count = div_max - div_min + 1;
 548- unsigned cache_end;
 549- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 550-
 551- //Calculating the size of each bin
 552- for (RandomAccessIter current = first; current != last;)
 553- bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 554- bins[bin_count - 1] = first;
 555- for(int ii = bin_count - 2; ii >= 0; --ii)
 556- bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 557-
 558- //Swap into place
 559- RandomAccessIter nextbinstart = first;
 560- //The last bin will always have the correct elements in it
 561- for(int ii = bin_count - 1; ii > 0; --ii)
 562- float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, bin_sizes, log_divisor, div_min);
 563- //Since we don't process the last bin, we need to update its end position
 564- bin_cache[cache_offset] = last;
 565-
 566- //Return if we've completed bucketsorting
 567- if(!log_divisor)
 568- return;
 569-
 570- //Recursing
 571- size_t max_count = get_max_count(log_divisor, last - first);
 572- RandomAccessIter lastPos = first;
 573- for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 574- size_t count = bin_cache[ii] - lastPos;
 575- if(count < 2)
 576- continue;
 577- if(count < max_count)
 578- std::sort(lastPos, bin_cache[ii]);
 579- else
 580- negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
 581- }
 582- }
 583-
 584- //Sorting negative_ float_s
 585- //Note that bins are iterated in reverse order because max_neg_float = min_neg_int
 586- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 587- inline void
 588- negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 589- , std::vector<size_t> &bin_sizes, right_shift shift)
 590- {
 591- div_type max, min;
 592- find_extremes(first, last, max, min, shift);
 593- if(max == min)
 594- return;
 595- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 596- div_type div_min = min >> log_divisor;
 597- div_type div_max = max >> log_divisor;
 598- unsigned bin_count = div_max - div_min + 1;
 599- unsigned cache_end;
 600- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 601-
 602- //Calculating the size of each bin
 603- for (RandomAccessIter current = first; current != last;)
 604- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 605- bins[bin_count - 1] = first;
 606- for(int ii = bin_count - 2; ii >= 0; --ii)
 607- bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 608-
 609- //Swap into place
 610- RandomAccessIter nextbinstart = first;
 611- //The last bin will always have the correct elements in it
 612- for(int ii = bin_count - 1; ii > 0; --ii)
 613- swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 614- //Since we don't process the last bin, we need to update its end position
 615- bin_cache[cache_offset] = last;
 616-
 617- //Return if we've completed bucketsorting
 618- if(!log_divisor)
 619- return;
 620-
 621- //Recursing
 622- size_t max_count = get_max_count(log_divisor, last - first);
 623- RandomAccessIter lastPos = first;
 624- for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 625- size_t count = bin_cache[ii] - lastPos;
 626- if(count < 2)
 627- continue;
 628- if(count < max_count)
 629- std::sort(lastPos, bin_cache[ii]);
 630- else
 631- negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift);
 632- }
 633- }
 634-
 635- template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 636- inline void
 637- negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 638- , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 639- {
 640- div_type max, min;
 641- find_extremes(first, last, max, min, shift);
 642- if(max == min)
 643- return;
 644- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 645- div_type div_min = min >> log_divisor;
 646- div_type div_max = max >> log_divisor;
 647- unsigned bin_count = div_max - div_min + 1;
 648- unsigned cache_end;
 649- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 650-
 651- //Calculating the size of each bin
 652- for (RandomAccessIter current = first; current != last;)
 653- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 654- bins[bin_count - 1] = first;
 655- for(int ii = bin_count - 2; ii >= 0; --ii)
 656- bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 657-
 658- //Swap into place
 659- RandomAccessIter nextbinstart = first;
 660- //The last bin will always have the correct elements in it
 661- for(int ii = bin_count - 1; ii > 0; --ii)
 662- swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 663- //Since we don't process the last bin, we need to update its end position
 664- bin_cache[cache_offset] = last;
 665-
 666- //Return if we've completed bucketsorting
 667- if(!log_divisor)
 668- return;
 669-
 670- //Recursing
 671- size_t max_count = get_max_count(log_divisor, last - first);
 672- RandomAccessIter lastPos = first;
 673- for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 674- size_t count = bin_cache[ii] - lastPos;
 675- if(count < 2)
 676- continue;
 677- if(count < max_count)
 678- std::sort(lastPos, bin_cache[ii], comp);
 679- else
 680- negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp);
 681- }
 682- }
 683-
 684- //Casting special-case for floating-point sorting
 685- template <class RandomAccessIter, class div_type, class data_type>
 686- inline void
 687- float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 688- , std::vector<size_t> &bin_sizes)
 689- {
 690- div_type max, min;
 691- find_extremes(first, last, max, min);
 692- if(max == min)
 693- return;
 694- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 695- div_type div_min = min >> log_divisor;
 696- div_type div_max = max >> log_divisor;
 697- unsigned bin_count = div_max - div_min + 1;
 698- unsigned cache_end;
 699- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 700-
 701- //Calculating the size of each bin
 702- for (RandomAccessIter current = first; current != last;)
 703- bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 704- //The index of the first positive bin
 705- div_type first_positive = (div_min < 0) ? -div_min : 0;
 706- //Resetting if all bins are negative
 707- if(cache_offset + first_positive > cache_end)
 708- first_positive = cache_end - cache_offset;
 709- //Reversing the order of the negative bins
 710- //Note that because of the negative/positive ordering direction flip
 711- //We can not depend upon bin order and positions matching up
 712- //so bin_sizes must be reused to contain the end of the bin
 713- if(first_positive > 0) {
 714- bins[first_positive - 1] = first;
 715- for(int ii = first_positive - 2; ii >= 0; --ii) {
 716- bins[ii] = first + bin_sizes[ii + 1];
 717- bin_sizes[ii] += bin_sizes[ii + 1];
 718- }
 719- //Handling positives following negatives
 720- if((unsigned)first_positive < bin_count) {
 721- bins[first_positive] = first + bin_sizes[0];
 722- bin_sizes[first_positive] += bin_sizes[0];
 723- }
 724- }
 725- else
 726- bins[0] = first;
 727- for(unsigned u = first_positive; u < bin_count - 1; u++) {
 728- bins[u + 1] = first + bin_sizes[u];
 729- bin_sizes[u + 1] += bin_sizes[u];
 730- }
 731-
 732- //Swap into place
 733- RandomAccessIter nextbinstart = first;
 734- for(unsigned u = 0; u < bin_count; ++u) {
 735- nextbinstart = first + bin_sizes[u];
 736- inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, log_divisor, div_min);
 737- }
 738-
 739- if(!log_divisor)
 740- return;
 741-
 742- //Handling negative values first
 743- size_t max_count = get_max_count(log_divisor, last - first);
 744- RandomAccessIter lastPos = first;
 745- for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 746- size_t count = bin_cache[ii] - lastPos;
 747- if(count < 2)
 748- continue;
 749- if(count < max_count)
 750- std::sort(lastPos, bin_cache[ii]);
 751- //sort negative values using reversed-bin spread_sort
 752- else
 753- negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
 754- }
 755-
 756- for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 757- size_t count = bin_cache[u] - lastPos;
 758- if(count < 2)
 759- continue;
 760- if(count < max_count)
 761- std::sort(lastPos, bin_cache[u]);
 762- //sort positive values using normal spread_sort
 763- else
 764- positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 765- }
 766- }
 767-
 768- //Functor implementation for recursive sorting
 769- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 770- inline void
 771- float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 772- , std::vector<size_t> &bin_sizes, right_shift shift)
 773- {
 774- div_type max, min;
 775- find_extremes(first, last, max, min, shift);
 776- if(max == min)
 777- return;
 778- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 779- div_type div_min = min >> log_divisor;
 780- div_type div_max = max >> log_divisor;
 781- unsigned bin_count = div_max - div_min + 1;
 782- unsigned cache_end;
 783- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 784-
 785- //Calculating the size of each bin
 786- for (RandomAccessIter current = first; current != last;)
 787- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 788- //The index of the first positive bin
 789- div_type first_positive = (div_min < 0) ? -div_min : 0;
 790- //Resetting if all bins are negative
 791- if(cache_offset + first_positive > cache_end)
 792- first_positive = cache_end - cache_offset;
 793- //Reversing the order of the negative bins
 794- //Note that because of the negative/positive ordering direction flip
 795- //We can not depend upon bin order and positions matching up
 796- //so bin_sizes must be reused to contain the end of the bin
 797- if(first_positive > 0) {
 798- bins[first_positive - 1] = first;
 799- for(int ii = first_positive - 2; ii >= 0; --ii) {
 800- bins[ii] = first + bin_sizes[ii + 1];
 801- bin_sizes[ii] += bin_sizes[ii + 1];
 802- }
 803- //Handling positives following negatives
 804- if((unsigned)first_positive < bin_count) {
 805- bins[first_positive] = first + bin_sizes[0];
 806- bin_sizes[first_positive] += bin_sizes[0];
 807- }
 808- }
 809- else
 810- bins[0] = first;
 811- for(unsigned u = first_positive; u < bin_count - 1; u++) {
 812- bins[u + 1] = first + bin_sizes[u];
 813- bin_sizes[u + 1] += bin_sizes[u];
 814- }
 815-
 816- //Swap into place
 817- RandomAccessIter nextbinstart = first;
 818- for(unsigned u = 0; u < bin_count; ++u) {
 819- nextbinstart = first + bin_sizes[u];
 820- inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min);
 821- }
 822-
 823- //Return if we've completed bucketsorting
 824- if(!log_divisor)
 825- return;
 826-
 827- //Handling negative values first
 828- size_t max_count = get_max_count(log_divisor, last - first);
 829- RandomAccessIter lastPos = first;
 830- for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 831- size_t count = bin_cache[ii] - lastPos;
 832- if(count < 2)
 833- continue;
 834- if(count < max_count)
 835- std::sort(lastPos, bin_cache[ii]);
 836- //sort negative values using reversed-bin spread_sort
 837- else
 838- negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift);
 839- }
 840-
 841- for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 842- size_t count = bin_cache[u] - lastPos;
 843- if(count < 2)
 844- continue;
 845- if(count < max_count)
 846- std::sort(lastPos, bin_cache[u]);
 847- //sort positive values using normal spread_sort
 848- else
 849- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift);
 850- }
 851- }
 852-
 853- template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 854- inline void
 855- float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 856- , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 857- {
 858- div_type max, min;
 859- find_extremes(first, last, max, min, shift);
 860- if(max == min)
 861- return;
 862- unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 863- div_type div_min = min >> log_divisor;
 864- div_type div_max = max >> log_divisor;
 865- unsigned bin_count = div_max - div_min + 1;
 866- unsigned cache_end;
 867- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 868-
 869- //Calculating the size of each bin
 870- for (RandomAccessIter current = first; current != last;)
 871- bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 872- //The index of the first positive bin
 873- div_type first_positive = (div_min < 0) ? -div_min : 0;
 874- //Resetting if all bins are negative
 875- if(cache_offset + first_positive > cache_end)
 876- first_positive = cache_end - cache_offset;
 877- //Reversing the order of the negative bins
 878- //Note that because of the negative/positive ordering direction flip
 879- //We can not depend upon bin order and positions matching up
 880- //so bin_sizes must be reused to contain the end of the bin
 881- if(first_positive > 0) {
 882- bins[first_positive - 1] = first;
 883- for(int ii = first_positive - 2; ii >= 0; --ii) {
 884- bins[ii] = first + bin_sizes[ii + 1];
 885- bin_sizes[ii] += bin_sizes[ii + 1];
 886- }
 887- //Handling positives following negatives
 888- if((unsigned)first_positive < bin_count) {
 889- bins[first_positive] = first + bin_sizes[0];
 890- bin_sizes[first_positive] += bin_sizes[0];
 891- }
 892- }
 893- else
 894- bins[0] = first;
 895- for(unsigned u = first_positive; u < bin_count - 1; u++) {
 896- bins[u + 1] = first + bin_sizes[u];
 897- bin_sizes[u + 1] += bin_sizes[u];
 898- }
 899-
 900- //Swap into place
 901- RandomAccessIter nextbinstart = first;
 902- for(unsigned u = 0; u < bin_count; ++u) {
 903- nextbinstart = first + bin_sizes[u];
 904- inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min);
 905- }
 906-
 907- //Return if we've completed bucketsorting
 908- if(!log_divisor)
 909- return;
 910-
 911- //Handling negative values first
 912- size_t max_count = get_max_count(log_divisor, last - first);
 913- RandomAccessIter lastPos = first;
 914- for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 915- size_t count = bin_cache[ii] - lastPos;
 916- if(count < 2)
 917- continue;
 918- if(count < max_count)
 919- std::sort(lastPos, bin_cache[ii]);
 920- //sort negative values using reversed-bin spread_sort
 921- else
 922- negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp);
 923- }
 924-
 925- for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 926- size_t count = bin_cache[u] - lastPos;
 927- if(count < 2)
 928- continue;
 929- if(count < max_count)
 930- std::sort(lastPos, bin_cache[u]);
 931- //sort positive values using normal spread_sort
 932- else
 933- spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp);
 934- }
 935- }
 936-
 937- template <class RandomAccessIter, class cast_type, class data_type>
 938- inline void
 939- float_Sort(RandomAccessIter first, RandomAccessIter last, cast_type, data_type)
 940- {
 941- std::vector<size_t> bin_sizes;
 942- std::vector<RandomAccessIter> bin_cache;
 943- float_sort_rec<RandomAccessIter, cast_type, data_type>(first, last, bin_cache, 0, bin_sizes);
 944- }
 945-
 946- template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 947- inline void
 948- float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift)
 949- {
 950- std::vector<size_t> bin_sizes;
 951- std::vector<RandomAccessIter> bin_cache;
 952- float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift);
 953- }
 954-
 955- template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 956- inline void
 957- float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp)
 958- {
 959- std::vector<size_t> bin_sizes;
 960- std::vector<RandomAccessIter> bin_cache;
 961- float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift, comp);
 962- }
 963- }
 964-
 965- //float_sort with casting
 966- //The cast_type must be equal in size to the data type, and must be a signed integer
 967- template <class RandomAccessIter, class cast_type>
 968- inline void float_sort_cast(RandomAccessIter first, RandomAccessIter last, cast_type cVal)
 969- {
 970- if(last - first < detail::MIN_SORT_SIZE)
 971- std::sort(first, last);
 972- else
 973- detail::float_Sort(first, last, cVal, *first);
 974- }
 975-
 976- //float_sort with casting to an int
 977- //Only use this with IEEE floating-point numbers
 978- template <class RandomAccessIter>
 979- inline void float_sort_cast_to_int(RandomAccessIter first, RandomAccessIter last)
 980- {
 981- int cVal = 0;
 982- float_sort_cast(first, last, cVal);
 983- }
 984-
 985- //float_sort with functors
 986- template <class RandomAccessIter, class right_shift>
 987- inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift)
 988- {
 989- if(last - first < detail::MIN_SORT_SIZE)
 990- std::sort(first, last);
 991- else
 992- detail::float_Sort(first, last, shift(*first, 0), *first, shift);
 993- }
 994-
 995- template <class RandomAccessIter, class right_shift, class compare>
 996- inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift, compare comp)
 997- {
 998- if(last - first < detail::MIN_SORT_SIZE)
 999- std::sort(first, last, comp);
 1000- else
 1001- detail::float_Sort(first, last, shift(*first, 0), *first, shift, comp);
 1002- }
 1003-
 1004- //------------------------------------------------- string_sort source ---------------------------------------------
 1005- namespace detail {
 1006- //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance.
 1007- template<class RandomAccessIter>
 1008- inline void
 1009- update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset)
 1010- {
 1011- unsigned nextOffset = char_offset;
 1012- bool done = false;
 1013- while(!done) {
 1014- RandomAccessIter curr = first;
 1015- do {
 1016- //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character
 1017- if((*curr).size() > char_offset && ((*curr).size() <= (nextOffset + 1) || (*curr)[nextOffset] != (*first)[nextOffset])) {
 1018- done = true;
 1019- break;
 1020- }
 1021- } while(++curr != finish);
 1022- if(!done)
 1023- ++nextOffset;
 1024- }
 1025- char_offset = nextOffset;
 1026- }
 1027-
 1028- //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance.
 1029- template<class RandomAccessIter, class get_char, class get_length>
 1030- inline void
 1031- update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset, get_char getchar, get_length length)
 1032- {
 1033- unsigned nextOffset = char_offset;
 1034- bool done = false;
 1035- while(!done) {
 1036- RandomAccessIter curr = first;
 1037- do {
 1038- //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character
 1039- if(length(*curr) > char_offset && (length(*curr) <= (nextOffset + 1) || getchar((*curr), nextOffset) != getchar((*first), nextOffset))) {
 1040- done = true;
 1041- break;
 1042- }
 1043- } while(++curr != finish);
 1044- if(!done)
 1045- ++nextOffset;
 1046- }
 1047- char_offset = nextOffset;
 1048- }
 1049-
 1050- //A comparison functor for strings that assumes they are identical up to char_offset
 1051- template<class data_type, class unsignedchar_type>
 1052- struct offset_lessthan {
 1053- offset_lessthan(unsigned char_offset) : fchar_offset(char_offset){}
 1054- inline bool operator()(const data_type &x, const data_type &y) const
 1055- {
 1056- unsigned minSize = std::min(x.size(), y.size());
 1057- for(unsigned u = fchar_offset; u < minSize; ++u) {
 1058- if(static_cast<unsignedchar_type>(x[u]) < static_cast<unsignedchar_type>(y[u]))
 1059- return true;
 1060- else if(static_cast<unsignedchar_type>(y[u]) < static_cast<unsignedchar_type>(x[u]))
 1061- return false;
 1062- }
 1063- return x.size() < y.size();
 1064- }
 1065- unsigned fchar_offset;
 1066- };
 1067-
 1068- //A comparison functor for strings that assumes they are identical up to char_offset
 1069- template<class data_type, class unsignedchar_type>
 1070- struct offset_greaterthan {
 1071- offset_greaterthan(unsigned char_offset) : fchar_offset(char_offset){}
 1072- inline bool operator()(const data_type &x, const data_type &y) const
 1073- {
 1074- unsigned minSize = std::min(x.size(), y.size());
 1075- for(unsigned u = fchar_offset; u < minSize; ++u) {
 1076- if(static_cast<unsignedchar_type>(x[u]) > static_cast<unsignedchar_type>(y[u]))
 1077- return true;
 1078- else if(static_cast<unsignedchar_type>(y[u]) > static_cast<unsignedchar_type>(x[u]))
 1079- return false;
 1080- }
 1081- return x.size() > y.size();
 1082- }
 1083- unsigned fchar_offset;
 1084- };
 1085-
 1086- //A comparison functor for strings that assumes they are identical up to char_offset
 1087- template<class data_type, class get_char, class get_length>
 1088- struct offset_char_lessthan {
 1089- offset_char_lessthan(unsigned char_offset) : fchar_offset(char_offset){}
 1090- inline bool operator()(const data_type &x, const data_type &y) const
 1091- {
 1092- unsigned minSize = std::min(length(x), length(y));
 1093- for(unsigned u = fchar_offset; u < minSize; ++u) {
 1094- if(getchar(x, u) < getchar(y, u))
 1095- return true;
 1096- else if(getchar(y, u) < getchar(x, u))
 1097- return false;
 1098- }
 1099- return length(x) < length(y);
 1100- }
 1101- unsigned fchar_offset;
 1102- get_char getchar;
 1103- get_length length;
 1104- };
 1105-
 1106- //String sorting recursive implementation
 1107- template <class RandomAccessIter, class data_type, class unsignedchar_type>
 1108- inline void
 1109- string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 1110- , unsigned cache_offset, std::vector<size_t> &bin_sizes)
 1111- {
 1112- //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 1113- //Iterate to the end of the empties. If all empty, return
 1114- while((*first).size() <= char_offset) {
 1115- if(++first == last)
 1116- return;
 1117- }
 1118- RandomAccessIter finish = last - 1;
 1119- //Getting the last non-empty
 1120- for(;(*finish).size() <= char_offset; --finish) { }
 1121- ++finish;
 1122- //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 1123- update_offset(first, finish, char_offset);
 1124-
 1125- const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 1126- //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 1127- const unsigned max_size = bin_count;
 1128- const unsigned membin_count = bin_count + 1;
 1129- unsigned cache_end;
 1130- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 1131-
 1132- //Calculating the size of each bin; this takes roughly 10% of runtime
 1133- for (RandomAccessIter current = first; current != last; ++current) {
 1134- if((*current).size() <= char_offset) {
 1135- bin_sizes[0]++;
 1136- }
 1137- else
 1138- bin_sizes[static_cast<unsignedchar_type>((*current)[char_offset]) + 1]++;
 1139- }
 1140- //Assign the bin positions
 1141- bin_cache[cache_offset] = first;
 1142- for(unsigned u = 0; u < membin_count - 1; u++)
 1143- bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 1144-
 1145- //Swap into place
 1146- RandomAccessIter nextbinstart = first;
 1147- //handling empty bins
 1148- RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 1149- nextbinstart += bin_sizes[0];
 1150- RandomAccessIter * target_bin;
 1151- //Iterating over each element in the bin of empties
 1152- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1153- //empties belong in this bin
 1154- while((*current).size() > char_offset) {
 1155- target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]);
 1156- iter_swap(current, (*target_bin)++);
 1157- }
 1158- }
 1159- *local_bin = nextbinstart;
 1160- //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 1161- unsigned last_bin = bin_count - 1;
 1162- for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 1163- //This dominates runtime, mostly in the swap and bin lookups
 1164- for(unsigned u = 0; u < last_bin; ++u) {
 1165- local_bin = bins + u;
 1166- nextbinstart += bin_sizes[u + 1];
 1167- //Iterating over each element in this bin
 1168- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1169- //Swapping elements in current into place until the correct element has been swapped in
 1170- for(target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin;
 1171- target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]))
 1172- iter_swap(current, (*target_bin)++);
 1173- }
 1174- *local_bin = nextbinstart;
 1175- }
 1176- bins[last_bin] = last;
 1177- //Recursing
 1178- RandomAccessIter lastPos = bin_cache[cache_offset];
 1179- //Skip this loop for empties
 1180- for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 1181- size_t count = bin_cache[u] - lastPos;
 1182- //don't sort unless there are at least two items to compare
 1183- if(count < 2)
 1184- continue;
 1185- //using std::sort if its worst-case is better
 1186- if(count < max_size)
 1187- std::sort(lastPos, bin_cache[u], offset_lessthan<data_type, unsignedchar_type>(char_offset + 1));
 1188- else
 1189- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
 1190- }
 1191- }
 1192-
 1193- //Sorts strings in reverse order, with empties at the end
 1194- template <class RandomAccessIter, class data_type, class unsignedchar_type>
 1195- inline void
 1196- reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 1197- , unsigned cache_offset, std::vector<size_t> &bin_sizes)
 1198- {
 1199- //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 1200- RandomAccessIter curr = first;
 1201- //Iterate to the end of the empties. If all empty, return
 1202- while((*curr).size() <= char_offset) {
 1203- if(++curr == last)
 1204- return;
 1205- }
 1206- //Getting the last non-empty
 1207- while((*(--last)).size() <= char_offset) { }
 1208- ++last;
 1209- //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 1210- update_offset(curr, last, char_offset);
 1211- RandomAccessIter * target_bin;
 1212-
 1213- const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 1214- //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 1215- const unsigned max_size = bin_count;
 1216- const unsigned membin_count = bin_count + 1;
 1217- const unsigned max_bin = bin_count - 1;
 1218- unsigned cache_end;
 1219- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count);
 1220- RandomAccessIter * end_bin = &(bin_cache[cache_offset + max_bin]);
 1221-
 1222- //Calculating the size of each bin; this takes roughly 10% of runtime
 1223- for (RandomAccessIter current = first; current != last; ++current) {
 1224- if((*current).size() <= char_offset) {
 1225- bin_sizes[bin_count]++;
 1226- }
 1227- else
 1228- bin_sizes[max_bin - static_cast<unsignedchar_type>((*current)[char_offset])]++;
 1229- }
 1230- //Assign the bin positions
 1231- bin_cache[cache_offset] = first;
 1232- for(unsigned u = 0; u < membin_count - 1; u++)
 1233- bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 1234-
 1235- //Swap into place
 1236- RandomAccessIter nextbinstart = last;
 1237- //handling empty bins
 1238- RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
 1239- RandomAccessIter lastFull = *local_bin;
 1240- //Iterating over each element in the bin of empties
 1241- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1242- //empties belong in this bin
 1243- while((*current).size() > char_offset) {
 1244- target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]);
 1245- iter_swap(current, (*target_bin)++);
 1246- }
 1247- }
 1248- *local_bin = nextbinstart;
 1249- nextbinstart = first;
 1250- //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 1251- unsigned last_bin = max_bin;
 1252- for(; last_bin && !bin_sizes[last_bin]; --last_bin) { }
 1253- //This dominates runtime, mostly in the swap and bin lookups
 1254- for(unsigned u = 0; u < last_bin; ++u) {
 1255- local_bin = bins + u;
 1256- nextbinstart += bin_sizes[u];
 1257- //Iterating over each element in this bin
 1258- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1259- //Swapping elements in current into place until the correct element has been swapped in
 1260- for(target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin;
 1261- target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]))
 1262- iter_swap(current, (*target_bin)++);
 1263- }
 1264- *local_bin = nextbinstart;
 1265- }
 1266- bins[last_bin] = lastFull;
 1267- //Recursing
 1268- RandomAccessIter lastPos = first;
 1269- //Skip this loop for empties
 1270- for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) {
 1271- size_t count = bin_cache[u] - lastPos;
 1272- //don't sort unless there are at least two items to compare
 1273- if(count < 2)
 1274- continue;
 1275- //using std::sort if its worst-case is better
 1276- if(count < max_size)
 1277- std::sort(lastPos, bin_cache[u], offset_greaterthan<data_type, unsignedchar_type>(char_offset + 1));
 1278- else
 1279- reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
 1280- }
 1281- }
 1282-
 1283- //String sorting recursive implementation
 1284- template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length>
 1285- inline void
 1286- string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 1287- , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length)
 1288- {
 1289- //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 1290- //Iterate to the end of the empties. If all empty, return
 1291- while(length(*first) <= char_offset) {
 1292- if(++first == last)
 1293- return;
 1294- }
 1295- RandomAccessIter finish = last - 1;
 1296- //Getting the last non-empty
 1297- for(;length(*finish) <= char_offset; --finish) { }
 1298- ++finish;
 1299- update_offset(first, finish, char_offset, getchar, length);
 1300-
 1301- const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 1302- //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 1303- const unsigned max_size = bin_count;
 1304- const unsigned membin_count = bin_count + 1;
 1305- unsigned cache_end;
 1306- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 1307-
 1308- //Calculating the size of each bin; this takes roughly 10% of runtime
 1309- for (RandomAccessIter current = first; current != last; ++current) {
 1310- if(length(*current) <= char_offset) {
 1311- bin_sizes[0]++;
 1312- }
 1313- else
 1314- bin_sizes[getchar((*current), char_offset) + 1]++;
 1315- }
 1316- //Assign the bin positions
 1317- bin_cache[cache_offset] = first;
 1318- for(unsigned u = 0; u < membin_count - 1; u++)
 1319- bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 1320-
 1321- //Swap into place
 1322- RandomAccessIter nextbinstart = first;
 1323- //handling empty bins
 1324- RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 1325- nextbinstart += bin_sizes[0];
 1326- RandomAccessIter * target_bin;
 1327- //Iterating over each element in the bin of empties
 1328- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1329- //empties belong in this bin
 1330- while(length(*current) > char_offset) {
 1331- target_bin = bins + getchar((*current), char_offset);
 1332- iter_swap(current, (*target_bin)++);
 1333- }
 1334- }
 1335- *local_bin = nextbinstart;
 1336- //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 1337- unsigned last_bin = bin_count - 1;
 1338- for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 1339- //This dominates runtime, mostly in the swap and bin lookups
 1340- for(unsigned ii = 0; ii < last_bin; ++ii) {
 1341- local_bin = bins + ii;
 1342- nextbinstart += bin_sizes[ii + 1];
 1343- //Iterating over each element in this bin
 1344- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1345- //Swapping elements in current into place until the correct element has been swapped in
 1346- for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin;
 1347- target_bin = bins + getchar((*current), char_offset))
 1348- iter_swap(current, (*target_bin)++);
 1349- }
 1350- *local_bin = nextbinstart;
 1351- }
 1352- bins[last_bin] = last;
 1353-
 1354- //Recursing
 1355- RandomAccessIter lastPos = bin_cache[cache_offset];
 1356- //Skip this loop for empties
 1357- for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 1358- size_t count = bin_cache[u] - lastPos;
 1359- //don't sort unless there are at least two items to compare
 1360- if(count < 2)
 1361- continue;
 1362- //using std::sort if its worst-case is better
 1363- if(count < max_size)
 1364- std::sort(lastPos, bin_cache[u], offset_char_lessthan<data_type, get_char, get_length>(char_offset + 1));
 1365- else
 1366- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length);
 1367- }
 1368- }
 1369-
 1370- //String sorting recursive implementation
 1371- template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare>
 1372- inline void
 1373- string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 1374- , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp)
 1375- {
 1376- //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 1377- //Iterate to the end of the empties. If all empty, return
 1378- while(length(*first) <= char_offset) {
 1379- if(++first == last)
 1380- return;
 1381- }
 1382- RandomAccessIter finish = last - 1;
 1383- //Getting the last non-empty
 1384- for(;length(*finish) <= char_offset; --finish) { }
 1385- ++finish;
 1386- update_offset(first, finish, char_offset, getchar, length);
 1387-
 1388- const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 1389- //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 1390- const unsigned max_size = bin_count;
 1391- const unsigned membin_count = bin_count + 1;
 1392- unsigned cache_end;
 1393- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 1394-
 1395- //Calculating the size of each bin; this takes roughly 10% of runtime
 1396- for (RandomAccessIter current = first; current != last; ++current) {
 1397- if(length(*current) <= char_offset) {
 1398- bin_sizes[0]++;
 1399- }
 1400- else
 1401- bin_sizes[getchar((*current), char_offset) + 1]++;
 1402- }
 1403- //Assign the bin positions
 1404- bin_cache[cache_offset] = first;
 1405- for(unsigned u = 0; u < membin_count - 1; u++)
 1406- bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 1407-
 1408- //Swap into place
 1409- RandomAccessIter nextbinstart = first;
 1410- //handling empty bins
 1411- RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 1412- nextbinstart += bin_sizes[0];
 1413- RandomAccessIter * target_bin;
 1414- //Iterating over each element in the bin of empties
 1415- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1416- //empties belong in this bin
 1417- while(length(*current) > char_offset) {
 1418- target_bin = bins + getchar((*current), char_offset);
 1419- iter_swap(current, (*target_bin)++);
 1420- }
 1421- }
 1422- *local_bin = nextbinstart;
 1423- //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 1424- unsigned last_bin = bin_count - 1;
 1425- for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 1426- //This dominates runtime, mostly in the swap and bin lookups
 1427- for(unsigned u = 0; u < last_bin; ++u) {
 1428- local_bin = bins + u;
 1429- nextbinstart += bin_sizes[u + 1];
 1430- //Iterating over each element in this bin
 1431- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1432- //Swapping elements in current into place until the correct element has been swapped in
 1433- for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin;
 1434- target_bin = bins + getchar((*current), char_offset))
 1435- iter_swap(current, (*target_bin)++);
 1436- }
 1437- *local_bin = nextbinstart;
 1438- }
 1439- bins[last_bin] = last;
 1440-
 1441- //Recursing
 1442- RandomAccessIter lastPos = bin_cache[cache_offset];
 1443- //Skip this loop for empties
 1444- for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 1445- size_t count = bin_cache[u] - lastPos;
 1446- //don't sort unless there are at least two items to compare
 1447- if(count < 2)
 1448- continue;
 1449- //using std::sort if its worst-case is better
 1450- if(count < max_size)
 1451- std::sort(lastPos, bin_cache[u], comp);
 1452- else
 1453- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos
 1454- , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp);
 1455- }
 1456- }
 1457-
 1458- //Sorts strings in reverse order, with empties at the end
 1459- template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare>
 1460- inline void
 1461- reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 1462- , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp)
 1463- {
 1464- //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 1465- RandomAccessIter curr = first;
 1466- //Iterate to the end of the empties. If all empty, return
 1467- while(length(*curr) <= char_offset) {
 1468- if(++curr == last)
 1469- return;
 1470- }
 1471- //Getting the last non-empty
 1472- while(length(*(--last)) <= char_offset) { }
 1473- ++last;
 1474- //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 1475- update_offset(first, last, char_offset, getchar, length);
 1476-
 1477- const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 1478- //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 1479- const unsigned max_size = bin_count;
 1480- const unsigned membin_count = bin_count + 1;
 1481- const unsigned max_bin = bin_count - 1;
 1482- unsigned cache_end;
 1483- RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count);
 1484- RandomAccessIter *end_bin = &(bin_cache[cache_offset + max_bin]);
 1485-
 1486- //Calculating the size of each bin; this takes roughly 10% of runtime
 1487- for (RandomAccessIter current = first; current != last; ++current) {
 1488- if(length(*current) <= char_offset) {
 1489- bin_sizes[bin_count]++;
 1490- }
 1491- else
 1492- bin_sizes[max_bin - getchar((*current), char_offset)]++;
 1493- }
 1494- //Assign the bin positions
 1495- bin_cache[cache_offset] = first;
 1496- for(unsigned u = 0; u < membin_count - 1; u++)
 1497- bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 1498-
 1499- //Swap into place
 1500- RandomAccessIter nextbinstart = last;
 1501- //handling empty bins
 1502- RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
 1503- RandomAccessIter lastFull = *local_bin;
 1504- RandomAccessIter * target_bin;
 1505- //Iterating over each element in the bin of empties
 1506- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1507- //empties belong in this bin
 1508- while(length(*current) > char_offset) {
 1509- target_bin = end_bin - getchar((*current), char_offset);
 1510- iter_swap(current, (*target_bin)++);
 1511- }
 1512- }
 1513- *local_bin = nextbinstart;
 1514- nextbinstart = first;
 1515- //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 1516- unsigned last_bin = max_bin;
 1517- for(; last_bin && !bin_sizes[last_bin]; --last_bin) { }
 1518- //This dominates runtime, mostly in the swap and bin lookups
 1519- for(unsigned u = 0; u < last_bin; ++u) {
 1520- local_bin = bins + u;
 1521- nextbinstart += bin_sizes[u];
 1522- //Iterating over each element in this bin
 1523- for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1524- //Swapping elements in current into place until the correct element has been swapped in
 1525- for(target_bin = end_bin - getchar((*current), char_offset); target_bin != local_bin;
 1526- target_bin = end_bin - getchar((*current), char_offset))
 1527- iter_swap(current, (*target_bin)++);
 1528- }
 1529- *local_bin = nextbinstart;
 1530- }
 1531- bins[last_bin] = lastFull;
 1532- //Recursing
 1533- RandomAccessIter lastPos = first;
 1534- //Skip this loop for empties
 1535- for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) {
 1536- size_t count = bin_cache[u] - lastPos;
 1537- //don't sort unless there are at least two items to compare
 1538- if(count < 2)
 1539- continue;
 1540- //using std::sort if its worst-case is better
 1541- if(count < max_size)
 1542- std::sort(lastPos, bin_cache[u], comp);
 1543- else
 1544- reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos
 1545- , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp);
 1546- }
 1547- }
 1548-
 1549- //Holds the bin vector and makes the initial recursive call
 1550- template <class RandomAccessIter, class data_type, class unsignedchar_type>
 1551- inline void
 1552- string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type)
 1553- {
 1554- std::vector<size_t> bin_sizes;
 1555- std::vector<RandomAccessIter> bin_cache;
 1556- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes);
 1557- }
 1558-
 1559- //Holds the bin vector and makes the initial recursive call
 1560- template <class RandomAccessIter, class data_type, class unsignedchar_type>
 1561- inline void
 1562- reverse_string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type)
 1563- {
 1564- std::vector<size_t> bin_sizes;
 1565- std::vector<RandomAccessIter> bin_cache;
 1566- reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes);
 1567- }
 1568-
 1569- //Holds the bin vector and makes the initial recursive call
 1570- template <class RandomAccessIter, class get_char, class get_length, class data_type, class unsignedchar_type>
 1571- inline void
 1572- string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, data_type, unsignedchar_type)
 1573- {
 1574- std::vector<size_t> bin_sizes;
 1575- std::vector<RandomAccessIter> bin_cache;
 1576- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length);
 1577- }
 1578-
 1579- //Holds the bin vector and makes the initial recursive call
 1580- template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type>
 1581- inline void
 1582- string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type)
 1583- {
 1584- std::vector<size_t> bin_sizes;
 1585- std::vector<RandomAccessIter> bin_cache;
 1586- string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
 1587- }
 1588-
 1589- //Holds the bin vector and makes the initial recursive call
 1590- template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type>
 1591- inline void
 1592- reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type)
 1593- {
 1594- std::vector<size_t> bin_sizes;
 1595- std::vector<RandomAccessIter> bin_cache;
 1596- reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
 1597- }
 1598- }
 1599-
 1600- //Allows character-type overloads
 1601- template <class RandomAccessIter, class unsignedchar_type>
 1602- inline void string_sort(RandomAccessIter first, RandomAccessIter last, unsignedchar_type unused)
 1603- {
 1604- //Don't sort if it's too small to optimize
 1605- if(last - first < detail::MIN_SORT_SIZE)
 1606- std::sort(first, last);
 1607- else
 1608- detail::string_sort(first, last, *first, unused);
 1609- }
 1610-
 1611- //Top-level sorting call; wraps using default of unsigned char
 1612- template <class RandomAccessIter>
 1613- inline void string_sort(RandomAccessIter first, RandomAccessIter last)
 1614- {
 1615- unsigned char unused = '\0';
 1616- string_sort(first, last, unused);
 1617- }
 1618-
 1619- //Allows character-type overloads
 1620- template <class RandomAccessIter, class compare, class unsignedchar_type>
 1621- inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp, unsignedchar_type unused)
 1622- {
 1623- //Don't sort if it's too small to optimize
 1624- if(last - first < detail::MIN_SORT_SIZE)
 1625- std::sort(first, last, comp);
 1626- else
 1627- detail::reverse_string_sort(first, last, *first, unused);
 1628- }
 1629-
 1630- //Top-level sorting call; wraps using default of unsigned char
 1631- template <class RandomAccessIter, class compare>
 1632- inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp)
 1633- {
 1634- unsigned char unused = '\0';
 1635- reverse_string_sort(first, last, comp, unused);
 1636- }
 1637-
 1638- template <class RandomAccessIter, class get_char, class get_length>
 1639- inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length)
 1640- {
 1641- //Don't sort if it's too small to optimize
 1642- if(last - first < detail::MIN_SORT_SIZE)
 1643- std::sort(first, last);
 1644- else {
 1645- //skipping past empties at the beginning, which allows us to get the character type
 1646- //.empty() is not used so as not to require a user declaration of it
 1647- while(!length(*first)) {
 1648- if(++first == last)
 1649- return;
 1650- }
 1651- detail::string_sort(first, last, getchar, length, *first, getchar((*first), 0));
 1652- }
 1653- }
 1654-
 1655- template <class RandomAccessIter, class get_char, class get_length, class compare>
 1656- inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp)
 1657- {
 1658- //Don't sort if it's too small to optimize
 1659- if(last - first < detail::MIN_SORT_SIZE)
 1660- std::sort(first, last, comp);
 1661- else {
 1662- //skipping past empties at the beginning, which allows us to get the character type
 1663- //.empty() is not used so as not to require a user declaration of it
 1664- while(!length(*first)) {
 1665- if(++first == last)
 1666- return;
 1667- }
 1668- detail::string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0));
 1669- }
 1670- }
 1671-
 1672- template <class RandomAccessIter, class get_char, class get_length, class compare>
 1673- inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp)
 1674- {
 1675- //Don't sort if it's too small to optimize
 1676- if(last - first < detail::MIN_SORT_SIZE)
 1677- std::sort(first, last, comp);
 1678- else {
 1679- //skipping past empties at the beginning, which allows us to get the character type
 1680- //.empty() is not used so as not to require a user declaration of it
 1681- while(!length(*(--last))) {
 1682- //Note: if there is just one non-empty, and it's at the beginning, then it's already in sorted order
 1683- if(first == last)
 1684- return;
 1685- }
 1686- //making last just after the end of the non-empty part of the array
 1687- ++last;
 1688- detail::reverse_string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0));
 1689- }
 1690- }
 1691-}
 1692-
 1693-#endif
 1694+//Templated spread_sort library
 1695+
 1696+// Copyright Steven J. Ross 2001 - 2009.
 1697+// Distributed under the Boost Software License, Version 1.0.
 1698+// (See accompanying file LICENSE_1_0.txt or copy at
 1699+// http://www.boost.org/LICENSE_1_0.txt)
 1700+
 1701+// See http://www.boost.org/ for updates, documentation, and revision history.
 1702+
 1703+/*
 1704+Some improvements suggested by:
 1705+Phil Endecott and Frank Gennari
 1706+Cygwin fix provided by:
 1707+Scott McMurray
 1708+*/
 1709+
 1710+#ifndef BOOST_SPREAD_SORT_H
 1711+#define BOOST_SPREAD_SORT_H
 1712+#include <algorithm>
 1713+#include <cstring>
 1714+#include <vector>
 1715+#include "webrtc/system_wrappers/source/spreadsortlib/constants.hpp"
 1716+
 1717+#ifdef __FreeBSD__
 1718+# include <osreldate.h>
 1719+# if __FreeBSD_version < 900506
 1720+# define getchar boost_getchar
 1721+# endif
 1722+#endif
 1723+
 1724+namespace boost {
 1725+ namespace detail {
 1726+ //This only works on unsigned data types
 1727+ template <typename T>
 1728+ inline unsigned
 1729+ rough_log_2_size(const T& input)
 1730+ {
 1731+ unsigned result = 0;
 1732+ //The && is necessary on some compilers to avoid infinite loops; it doesn't significantly impair performance
 1733+ while((input >> result) && (result < (8*sizeof(T)))) ++result;
 1734+ return result;
 1735+ }
 1736+
 1737+ //Gets the maximum size which we'll call spread_sort on to control worst-case performance
 1738+ //Maintains both a minimum size to recurse and a check of distribution size versus count
 1739+ //This is called for a set of bins, instead of bin-by-bin, to avoid performance overhead
 1740+ inline size_t
 1741+ get_max_count(unsigned log_range, size_t count)
 1742+ {
 1743+ unsigned divisor = rough_log_2_size(count);
 1744+ //Making sure the divisor is positive
 1745+ if(divisor > LOG_MEAN_BIN_SIZE)
 1746+ divisor -= LOG_MEAN_BIN_SIZE;
 1747+ else
 1748+ divisor = 1;
 1749+ unsigned relative_width = (LOG_CONST * log_range)/((divisor > MAX_SPLITS) ? MAX_SPLITS : divisor);
 1750+ //Don't try to bitshift more than the size of an element
 1751+ if((8*sizeof(size_t)) <= relative_width)
 1752+ relative_width = (8*sizeof(size_t)) - 1;
 1753+ return (size_t)1 << ((relative_width < (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT)) ?
 1754+ (LOG_MEAN_BIN_SIZE + LOG_MIN_SPLIT_COUNT) : relative_width);
 1755+ }
 1756+
 1757+ //Find the minimum and maximum using <
 1758+ template <class RandomAccessIter>
 1759+ inline void
 1760+ find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min)
 1761+ {
 1762+ min = max = current;
 1763+ //Start from the second item, as max and min are initialized to the first
 1764+ while(++current < last) {
 1765+ if(*max < *current)
 1766+ max = current;
 1767+ else if(*current < *min)
 1768+ min = current;
 1769+ }
 1770+ }
 1771+
 1772+ //Uses a user-defined comparison operator to find minimum and maximum
 1773+ template <class RandomAccessIter, class compare>
 1774+ inline void
 1775+ find_extremes(RandomAccessIter current, RandomAccessIter last, RandomAccessIter & max, RandomAccessIter & min, compare comp)
 1776+ {
 1777+ min = max = current;
 1778+ while(++current < last) {
 1779+ if(comp(*max, *current))
 1780+ max = current;
 1781+ else if(comp(*current, *min))
 1782+ min = current;
 1783+ }
 1784+ }
 1785+
 1786+ //Gets a non-negative right bit shift to operate as a logarithmic divisor
 1787+ inline int
 1788+ get_log_divisor(size_t count, unsigned log_range)
 1789+ {
 1790+ int log_divisor;
 1791+ //If we can finish in one iteration without exceeding either (2 to the MAX_SPLITS) or n bins, do so
 1792+ if((log_divisor = log_range - rough_log_2_size(count)) <= 0 && log_range < MAX_SPLITS)
 1793+ log_divisor = 0;
 1794+ else {
 1795+ //otherwise divide the data into an optimized number of pieces
 1796+ log_divisor += LOG_MEAN_BIN_SIZE;
 1797+ if(log_divisor < 0)
 1798+ log_divisor = 0;
 1799+ //Cannot exceed MAX_SPLITS or cache misses slow down bin lookups dramatically
 1800+ if((log_range - log_divisor) > MAX_SPLITS)
 1801+ log_divisor = log_range - MAX_SPLITS;
 1802+ }
 1803+ return log_divisor;
 1804+ }
 1805+
 1806+ template <class RandomAccessIter>
 1807+ inline RandomAccessIter *
 1808+ size_bins(std::vector<size_t> &bin_sizes, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset, unsigned &cache_end, unsigned bin_count)
 1809+ {
 1810+ //Assure space for the size of each bin, followed by initializing sizes
 1811+ if(bin_count > bin_sizes.size())
 1812+ bin_sizes.resize(bin_count);
 1813+ for(size_t u = 0; u < bin_count; u++)
 1814+ bin_sizes[u] = 0;
 1815+ //Make sure there is space for the bins
 1816+ cache_end = cache_offset + bin_count;
 1817+ if(cache_end > bin_cache.size())
 1818+ bin_cache.resize(cache_end);
 1819+ return &(bin_cache[cache_offset]);
 1820+ }
 1821+
 1822+ //Implementation for recursive integer sorting
 1823+ template <class RandomAccessIter, class div_type, class data_type>
 1824+ inline void
 1825+ spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 1826+ , std::vector<size_t> &bin_sizes)
 1827+ {
 1828+ //This step is roughly 10% of runtime, but it helps avoid worst-case behavior and improve behavior with real data
 1829+ //If you know the maximum and minimum ahead of time, you can pass those values in and skip this step for the first iteration
 1830+ RandomAccessIter max, min;
 1831+ find_extremes(first, last, max, min);
 1832+ //max and min will be the same (the first item) iff all values are equivalent
 1833+ if(max == min)
 1834+ return;
 1835+ RandomAccessIter * target_bin;
 1836+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(*max >> 0) - (*min >> 0)));
 1837+ div_type div_min = *min >> log_divisor;
 1838+ div_type div_max = *max >> log_divisor;
 1839+ unsigned bin_count = div_max - div_min + 1;
 1840+ unsigned cache_end;
 1841+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 1842+
 1843+ //Calculating the size of each bin; this takes roughly 10% of runtime
 1844+ for (RandomAccessIter current = first; current != last;)
 1845+ bin_sizes[(*(current++) >> log_divisor) - div_min]++;
 1846+ //Assign the bin positions
 1847+ bins[0] = first;
 1848+ for(unsigned u = 0; u < bin_count - 1; u++)
 1849+ bins[u + 1] = bins[u] + bin_sizes[u];
 1850+
 1851+ //Swap into place
 1852+ //This dominates runtime, mostly in the swap and bin lookups
 1853+ RandomAccessIter nextbinstart = first;
 1854+ for(unsigned u = 0; u < bin_count - 1; ++u) {
 1855+ RandomAccessIter * local_bin = bins + u;
 1856+ nextbinstart += bin_sizes[u];
 1857+ //Iterating over each element in this bin
 1858+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1859+ //Swapping elements in current into place until the correct element has been swapped in
 1860+ for(target_bin = (bins + ((*current >> log_divisor) - div_min)); target_bin != local_bin;
 1861+ target_bin = bins + ((*current >> log_divisor) - div_min)) {
 1862+ //3-way swap; this is about 1% faster than a 2-way swap with integers
 1863+ //The main advantage is less copies are involved per item put in the correct place
 1864+ data_type tmp;
 1865+ RandomAccessIter b = (*target_bin)++;
 1866+ RandomAccessIter * b_bin = bins + ((*b >> log_divisor) - div_min);
 1867+ if (b_bin != local_bin) {
 1868+ RandomAccessIter c = (*b_bin)++;
 1869+ tmp = *c;
 1870+ *c = *b;
 1871+ }
 1872+ else
 1873+ tmp = *b;
 1874+ *b = *current;
 1875+ *current = tmp;
 1876+ }
 1877+ }
 1878+ *local_bin = nextbinstart;
 1879+ }
 1880+ bins[bin_count - 1] = last;
 1881+
 1882+ //If we've bucketsorted, the array is sorted and we should skip recursion
 1883+ if(!log_divisor)
 1884+ return;
 1885+
 1886+ //Recursing; log_divisor is the remaining range
 1887+ size_t max_count = get_max_count(log_divisor, last - first);
 1888+ RandomAccessIter lastPos = first;
 1889+ for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 1890+ size_t count = bin_cache[u] - lastPos;
 1891+ //don't sort unless there are at least two items to compare
 1892+ if(count < 2)
 1893+ continue;
 1894+ //using std::sort if its worst-case is better
 1895+ if(count < max_count)
 1896+ std::sort(lastPos, bin_cache[u]);
 1897+ else
 1898+ spread_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 1899+ }
 1900+ }
 1901+
 1902+ //Generic bitshift-based 3-way swapping code
 1903+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 1904+ inline void inner_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift
 1905+ , const unsigned log_divisor, const div_type div_min)
 1906+ {
 1907+ RandomAccessIter * local_bin = bins + ii;
 1908+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 1909+ for(RandomAccessIter * target_bin = (bins + (shift(*current, log_divisor) - div_min)); target_bin != local_bin;
 1910+ target_bin = bins + (shift(*current, log_divisor) - div_min)) {
 1911+ data_type tmp;
 1912+ RandomAccessIter b = (*target_bin)++;
 1913+ RandomAccessIter * b_bin = bins + (shift(*b, log_divisor) - div_min);
 1914+ //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs
 1915+ if (b_bin != local_bin) {
 1916+ RandomAccessIter c = (*b_bin)++;
 1917+ tmp = *c;
 1918+ *c = *b;
 1919+ }
 1920+ //Note: we could increment current once the swap is done in this case, but that seems to impair performance
 1921+ else
 1922+ tmp = *b;
 1923+ *b = *current;
 1924+ *current = tmp;
 1925+ }
 1926+ }
 1927+ *local_bin = nextbinstart;
 1928+ }
 1929+
 1930+ //Standard swapping wrapper for ascending values
 1931+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 1932+ inline void swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii, right_shift &shift
 1933+ , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min)
 1934+ {
 1935+ nextbinstart += bin_sizes[ii];
 1936+ inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, log_divisor, div_min);
 1937+ }
 1938+
 1939+ //Functor implementation for recursive sorting
 1940+ template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 1941+ inline void
 1942+ spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 1943+ , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 1944+ {
 1945+ RandomAccessIter max, min;
 1946+ find_extremes(first, last, max, min, comp);
 1947+ if(max == min)
 1948+ return;
 1949+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0))));
 1950+ div_type div_min = shift(*min, log_divisor);
 1951+ div_type div_max = shift(*max, log_divisor);
 1952+ unsigned bin_count = div_max - div_min + 1;
 1953+ unsigned cache_end;
 1954+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 1955+
 1956+ //Calculating the size of each bin
 1957+ for (RandomAccessIter current = first; current != last;)
 1958+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 1959+ bins[0] = first;
 1960+ for(unsigned u = 0; u < bin_count - 1; u++)
 1961+ bins[u + 1] = bins[u] + bin_sizes[u];
 1962+
 1963+ //Swap into place
 1964+ RandomAccessIter nextbinstart = first;
 1965+ for(unsigned u = 0; u < bin_count - 1; ++u)
 1966+ swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, bin_sizes, log_divisor, div_min);
 1967+ bins[bin_count - 1] = last;
 1968+
 1969+ //If we've bucketsorted, the array is sorted and we should skip recursion
 1970+ if(!log_divisor)
 1971+ return;
 1972+
 1973+ //Recursing
 1974+ size_t max_count = get_max_count(log_divisor, last - first);
 1975+ RandomAccessIter lastPos = first;
 1976+ for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 1977+ size_t count = bin_cache[u] - lastPos;
 1978+ if(count < 2)
 1979+ continue;
 1980+ if(count < max_count)
 1981+ std::sort(lastPos, bin_cache[u], comp);
 1982+ else
 1983+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp);
 1984+ }
 1985+ }
 1986+
 1987+ //Functor implementation for recursive sorting with only Shift overridden
 1988+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 1989+ inline void
 1990+ spread_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 1991+ , std::vector<size_t> &bin_sizes, right_shift shift)
 1992+ {
 1993+ RandomAccessIter max, min;
 1994+ find_extremes(first, last, max, min);
 1995+ if(max == min)
 1996+ return;
 1997+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(shift(*max, 0)) - (shift(*min, 0))));
 1998+ div_type div_min = shift(*min, log_divisor);
 1999+ div_type div_max = shift(*max, log_divisor);
 2000+ unsigned bin_count = div_max - div_min + 1;
 2001+ unsigned cache_end;
 2002+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2003+
 2004+ //Calculating the size of each bin
 2005+ for (RandomAccessIter current = first; current != last;)
 2006+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 2007+ bins[0] = first;
 2008+ for(unsigned u = 0; u < bin_count - 1; u++)
 2009+ bins[u + 1] = bins[u] + bin_sizes[u];
 2010+
 2011+ //Swap into place
 2012+ RandomAccessIter nextbinstart = first;
 2013+ for(unsigned ii = 0; ii < bin_count - 1; ++ii)
 2014+ swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 2015+ bins[bin_count - 1] = last;
 2016+
 2017+ //If we've bucketsorted, the array is sorted and we should skip recursion
 2018+ if(!log_divisor)
 2019+ return;
 2020+
 2021+ //Recursing
 2022+ size_t max_count = get_max_count(log_divisor, last - first);
 2023+ RandomAccessIter lastPos = first;
 2024+ for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 2025+ size_t count = bin_cache[u] - lastPos;
 2026+ if(count < 2)
 2027+ continue;
 2028+ if(count < max_count)
 2029+ std::sort(lastPos, bin_cache[u]);
 2030+ else
 2031+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift);
 2032+ }
 2033+ }
 2034+
 2035+ //Holds the bin vector and makes the initial recursive call
 2036+ template <class RandomAccessIter, class div_type, class data_type>
 2037+ inline void
 2038+ spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type)
 2039+ {
 2040+ std::vector<size_t> bin_sizes;
 2041+ std::vector<RandomAccessIter> bin_cache;
 2042+ spread_sort_rec<RandomAccessIter, div_type, data_type>(first, last, bin_cache, 0, bin_sizes);
 2043+ }
 2044+
 2045+ template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 2046+ inline void
 2047+ spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp)
 2048+ {
 2049+ std::vector<size_t> bin_sizes;
 2050+ std::vector<RandomAccessIter> bin_cache;
 2051+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(first, last, bin_cache, 0, bin_sizes, shift, comp);
 2052+ }
 2053+
 2054+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 2055+ inline void
 2056+ spread_sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift)
 2057+ {
 2058+ std::vector<size_t> bin_sizes;
 2059+ std::vector<RandomAccessIter> bin_cache;
 2060+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift);
 2061+ }
 2062+ }
 2063+
 2064+ //Top-level sorting call for integers
 2065+ template <class RandomAccessIter>
 2066+ inline void integer_sort(RandomAccessIter first, RandomAccessIter last)
 2067+ {
 2068+ //Don't sort if it's too small to optimize
 2069+ if(last - first < detail::MIN_SORT_SIZE)
 2070+ std::sort(first, last);
 2071+ else
 2072+ detail::spread_sort(first, last, *first >> 0, *first);
 2073+ }
 2074+
 2075+ //integer_sort with functors
 2076+ template <class RandomAccessIter, class right_shift, class compare>
 2077+ inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
 2078+ right_shift shift, compare comp) {
 2079+ if(last - first < detail::MIN_SORT_SIZE)
 2080+ std::sort(first, last, comp);
 2081+ else
 2082+ detail::spread_sort(first, last, shift(*first, 0), *first, shift, comp);
 2083+ }
 2084+
 2085+ //integer_sort with right_shift functor
 2086+ template <class RandomAccessIter, class right_shift>
 2087+ inline void integer_sort(RandomAccessIter first, RandomAccessIter last,
 2088+ right_shift shift) {
 2089+ if(last - first < detail::MIN_SORT_SIZE)
 2090+ std::sort(first, last);
 2091+ else
 2092+ detail::spread_sort(first, last, shift(*first, 0), *first, shift);
 2093+ }
 2094+
 2095+ //------------------------------------------------------ float_sort source --------------------------------------
 2096+ //Casts a RandomAccessIter to the specified data type
 2097+ template<class cast_type, class RandomAccessIter>
 2098+ inline cast_type
 2099+ cast_float_iter(const RandomAccessIter & floatiter)
 2100+ {
 2101+ cast_type result;
 2102+ std::memcpy(&result, &(*floatiter), sizeof(cast_type));
 2103+ return result;
 2104+ }
 2105+
 2106+ //Casts a data element to the specified datinner_float_a type
 2107+ template<class data_type, class cast_type>
 2108+ inline cast_type
 2109+ mem_cast(const data_type & data)
 2110+ {
 2111+ cast_type result;
 2112+ std::memcpy(&result, &data, sizeof(cast_type));
 2113+ return result;
 2114+ }
 2115+
 2116+ namespace detail {
 2117+ template <class RandomAccessIter, class div_type, class right_shift>
 2118+ inline void
 2119+ find_extremes(RandomAccessIter current, RandomAccessIter last, div_type & max, div_type & min, right_shift shift)
 2120+ {
 2121+ min = max = shift(*current, 0);
 2122+ while(++current < last) {
 2123+ div_type value = shift(*current, 0);
 2124+ if(max < value)
 2125+ max = value;
 2126+ else if(value < min)
 2127+ min = value;
 2128+ }
 2129+ }
 2130+
 2131+ //Specialized swap loops for floating-point casting
 2132+ template <class RandomAccessIter, class div_type, class data_type>
 2133+ inline void inner_float_swap_loop(RandomAccessIter * bins, const RandomAccessIter & nextbinstart, unsigned ii
 2134+ , const unsigned log_divisor, const div_type div_min)
 2135+ {
 2136+ RandomAccessIter * local_bin = bins + ii;
 2137+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 2138+ for(RandomAccessIter * target_bin = (bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)); target_bin != local_bin;
 2139+ target_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(current) >> log_divisor) - div_min)) {
 2140+ data_type tmp;
 2141+ RandomAccessIter b = (*target_bin)++;
 2142+ RandomAccessIter * b_bin = bins + ((cast_float_iter<div_type, RandomAccessIter>(b) >> log_divisor) - div_min);
 2143+ //Three-way swap; if the item to be swapped doesn't belong in the current bin, swap it to where it belongs
 2144+ if (b_bin != local_bin) {
 2145+ RandomAccessIter c = (*b_bin)++;
 2146+ tmp = *c;
 2147+ *c = *b;
 2148+ }
 2149+ else
 2150+ tmp = *b;
 2151+ *b = *current;
 2152+ *current = tmp;
 2153+ }
 2154+ }
 2155+ *local_bin = nextbinstart;
 2156+ }
 2157+
 2158+ template <class RandomAccessIter, class div_type, class data_type>
 2159+ inline void float_swap_loop(RandomAccessIter * bins, RandomAccessIter & nextbinstart, unsigned ii
 2160+ , const std::vector<size_t> &bin_sizes, const unsigned log_divisor, const div_type div_min)
 2161+ {
 2162+ nextbinstart += bin_sizes[ii];
 2163+ inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, log_divisor, div_min);
 2164+ }
 2165+
 2166+ template <class RandomAccessIter, class cast_type>
 2167+ inline void
 2168+ find_extremes(RandomAccessIter current, RandomAccessIter last, cast_type & max, cast_type & min)
 2169+ {
 2170+ min = max = cast_float_iter<cast_type, RandomAccessIter>(current);
 2171+ while(++current < last) {
 2172+ cast_type value = cast_float_iter<cast_type, RandomAccessIter>(current);
 2173+ if(max < value)
 2174+ max = value;
 2175+ else if(value < min)
 2176+ min = value;
 2177+ }
 2178+ }
 2179+
 2180+ //Special-case sorting of positive floats with casting instead of a right_shift
 2181+ template <class RandomAccessIter, class div_type, class data_type>
 2182+ inline void
 2183+ positive_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2184+ , std::vector<size_t> &bin_sizes)
 2185+ {
 2186+ div_type max, min;
 2187+ find_extremes(first, last, max, min);
 2188+ if(max == min)
 2189+ return;
 2190+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2191+ div_type div_min = min >> log_divisor;
 2192+ div_type div_max = max >> log_divisor;
 2193+ unsigned bin_count = div_max - div_min + 1;
 2194+ unsigned cache_end;
 2195+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2196+
 2197+ //Calculating the size of each bin
 2198+ for (RandomAccessIter current = first; current != last;)
 2199+ bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 2200+ bins[0] = first;
 2201+ for(unsigned u = 0; u < bin_count - 1; u++)
 2202+ bins[u + 1] = bins[u] + bin_sizes[u];
 2203+
 2204+ //Swap into place
 2205+ RandomAccessIter nextbinstart = first;
 2206+ for(unsigned u = 0; u < bin_count - 1; ++u)
 2207+ float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, bin_sizes, log_divisor, div_min);
 2208+ bins[bin_count - 1] = last;
 2209+
 2210+ //Return if we've completed bucketsorting
 2211+ if(!log_divisor)
 2212+ return;
 2213+
 2214+ //Recursing
 2215+ size_t max_count = get_max_count(log_divisor, last - first);
 2216+ RandomAccessIter lastPos = first;
 2217+ for(unsigned u = cache_offset; u < cache_end; lastPos = bin_cache[u], ++u) {
 2218+ size_t count = bin_cache[u] - lastPos;
 2219+ if(count < 2)
 2220+ continue;
 2221+ if(count < max_count)
 2222+ std::sort(lastPos, bin_cache[u]);
 2223+ else
 2224+ positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 2225+ }
 2226+ }
 2227+
 2228+ //Sorting negative_ float_s
 2229+ //Note that bins are iterated in reverse order because max_neg_float = min_neg_int
 2230+ template <class RandomAccessIter, class div_type, class data_type>
 2231+ inline void
 2232+ negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2233+ , std::vector<size_t> &bin_sizes)
 2234+ {
 2235+ div_type max, min;
 2236+ find_extremes(first, last, max, min);
 2237+ if(max == min)
 2238+ return;
 2239+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2240+ div_type div_min = min >> log_divisor;
 2241+ div_type div_max = max >> log_divisor;
 2242+ unsigned bin_count = div_max - div_min + 1;
 2243+ unsigned cache_end;
 2244+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2245+
 2246+ //Calculating the size of each bin
 2247+ for (RandomAccessIter current = first; current != last;)
 2248+ bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 2249+ bins[bin_count - 1] = first;
 2250+ for(int ii = bin_count - 2; ii >= 0; --ii)
 2251+ bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 2252+
 2253+ //Swap into place
 2254+ RandomAccessIter nextbinstart = first;
 2255+ //The last bin will always have the correct elements in it
 2256+ for(int ii = bin_count - 1; ii > 0; --ii)
 2257+ float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, ii, bin_sizes, log_divisor, div_min);
 2258+ //Since we don't process the last bin, we need to update its end position
 2259+ bin_cache[cache_offset] = last;
 2260+
 2261+ //Return if we've completed bucketsorting
 2262+ if(!log_divisor)
 2263+ return;
 2264+
 2265+ //Recursing
 2266+ size_t max_count = get_max_count(log_divisor, last - first);
 2267+ RandomAccessIter lastPos = first;
 2268+ for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 2269+ size_t count = bin_cache[ii] - lastPos;
 2270+ if(count < 2)
 2271+ continue;
 2272+ if(count < max_count)
 2273+ std::sort(lastPos, bin_cache[ii]);
 2274+ else
 2275+ negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
 2276+ }
 2277+ }
 2278+
 2279+ //Sorting negative_ float_s
 2280+ //Note that bins are iterated in reverse order because max_neg_float = min_neg_int
 2281+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 2282+ inline void
 2283+ negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2284+ , std::vector<size_t> &bin_sizes, right_shift shift)
 2285+ {
 2286+ div_type max, min;
 2287+ find_extremes(first, last, max, min, shift);
 2288+ if(max == min)
 2289+ return;
 2290+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2291+ div_type div_min = min >> log_divisor;
 2292+ div_type div_max = max >> log_divisor;
 2293+ unsigned bin_count = div_max - div_min + 1;
 2294+ unsigned cache_end;
 2295+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2296+
 2297+ //Calculating the size of each bin
 2298+ for (RandomAccessIter current = first; current != last;)
 2299+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 2300+ bins[bin_count - 1] = first;
 2301+ for(int ii = bin_count - 2; ii >= 0; --ii)
 2302+ bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 2303+
 2304+ //Swap into place
 2305+ RandomAccessIter nextbinstart = first;
 2306+ //The last bin will always have the correct elements in it
 2307+ for(int ii = bin_count - 1; ii > 0; --ii)
 2308+ swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 2309+ //Since we don't process the last bin, we need to update its end position
 2310+ bin_cache[cache_offset] = last;
 2311+
 2312+ //Return if we've completed bucketsorting
 2313+ if(!log_divisor)
 2314+ return;
 2315+
 2316+ //Recursing
 2317+ size_t max_count = get_max_count(log_divisor, last - first);
 2318+ RandomAccessIter lastPos = first;
 2319+ for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 2320+ size_t count = bin_cache[ii] - lastPos;
 2321+ if(count < 2)
 2322+ continue;
 2323+ if(count < max_count)
 2324+ std::sort(lastPos, bin_cache[ii]);
 2325+ else
 2326+ negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift);
 2327+ }
 2328+ }
 2329+
 2330+ template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 2331+ inline void
 2332+ negative_float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2333+ , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 2334+ {
 2335+ div_type max, min;
 2336+ find_extremes(first, last, max, min, shift);
 2337+ if(max == min)
 2338+ return;
 2339+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2340+ div_type div_min = min >> log_divisor;
 2341+ div_type div_max = max >> log_divisor;
 2342+ unsigned bin_count = div_max - div_min + 1;
 2343+ unsigned cache_end;
 2344+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2345+
 2346+ //Calculating the size of each bin
 2347+ for (RandomAccessIter current = first; current != last;)
 2348+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 2349+ bins[bin_count - 1] = first;
 2350+ for(int ii = bin_count - 2; ii >= 0; --ii)
 2351+ bins[ii] = bins[ii + 1] + bin_sizes[ii + 1];
 2352+
 2353+ //Swap into place
 2354+ RandomAccessIter nextbinstart = first;
 2355+ //The last bin will always have the correct elements in it
 2356+ for(int ii = bin_count - 1; ii > 0; --ii)
 2357+ swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, ii, shift, bin_sizes, log_divisor, div_min);
 2358+ //Since we don't process the last bin, we need to update its end position
 2359+ bin_cache[cache_offset] = last;
 2360+
 2361+ //Return if we've completed bucketsorting
 2362+ if(!log_divisor)
 2363+ return;
 2364+
 2365+ //Recursing
 2366+ size_t max_count = get_max_count(log_divisor, last - first);
 2367+ RandomAccessIter lastPos = first;
 2368+ for(int ii = cache_end - 1; ii >= (int)cache_offset; lastPos = bin_cache[ii], --ii) {
 2369+ size_t count = bin_cache[ii] - lastPos;
 2370+ if(count < 2)
 2371+ continue;
 2372+ if(count < max_count)
 2373+ std::sort(lastPos, bin_cache[ii], comp);
 2374+ else
 2375+ negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift, compare>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp);
 2376+ }
 2377+ }
 2378+
 2379+ //Casting special-case for floating-point sorting
 2380+ template <class RandomAccessIter, class div_type, class data_type>
 2381+ inline void
 2382+ float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2383+ , std::vector<size_t> &bin_sizes)
 2384+ {
 2385+ div_type max, min;
 2386+ find_extremes(first, last, max, min);
 2387+ if(max == min)
 2388+ return;
 2389+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2390+ div_type div_min = min >> log_divisor;
 2391+ div_type div_max = max >> log_divisor;
 2392+ unsigned bin_count = div_max - div_min + 1;
 2393+ unsigned cache_end;
 2394+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2395+
 2396+ //Calculating the size of each bin
 2397+ for (RandomAccessIter current = first; current != last;)
 2398+ bin_sizes[(cast_float_iter<div_type, RandomAccessIter>(current++) >> log_divisor) - div_min]++;
 2399+ //The index of the first positive bin
 2400+ div_type first_positive = (div_min < 0) ? -div_min : 0;
 2401+ //Resetting if all bins are negative
 2402+ if(cache_offset + first_positive > cache_end)
 2403+ first_positive = cache_end - cache_offset;
 2404+ //Reversing the order of the negative bins
 2405+ //Note that because of the negative/positive ordering direction flip
 2406+ //We can not depend upon bin order and positions matching up
 2407+ //so bin_sizes must be reused to contain the end of the bin
 2408+ if(first_positive > 0) {
 2409+ bins[first_positive - 1] = first;
 2410+ for(int ii = first_positive - 2; ii >= 0; --ii) {
 2411+ bins[ii] = first + bin_sizes[ii + 1];
 2412+ bin_sizes[ii] += bin_sizes[ii + 1];
 2413+ }
 2414+ //Handling positives following negatives
 2415+ if((unsigned)first_positive < bin_count) {
 2416+ bins[first_positive] = first + bin_sizes[0];
 2417+ bin_sizes[first_positive] += bin_sizes[0];
 2418+ }
 2419+ }
 2420+ else
 2421+ bins[0] = first;
 2422+ for(unsigned u = first_positive; u < bin_count - 1; u++) {
 2423+ bins[u + 1] = first + bin_sizes[u];
 2424+ bin_sizes[u + 1] += bin_sizes[u];
 2425+ }
 2426+
 2427+ //Swap into place
 2428+ RandomAccessIter nextbinstart = first;
 2429+ for(unsigned u = 0; u < bin_count; ++u) {
 2430+ nextbinstart = first + bin_sizes[u];
 2431+ inner_float_swap_loop<RandomAccessIter, div_type, data_type>(bins, nextbinstart, u, log_divisor, div_min);
 2432+ }
 2433+
 2434+ if(!log_divisor)
 2435+ return;
 2436+
 2437+ //Handling negative values first
 2438+ size_t max_count = get_max_count(log_divisor, last - first);
 2439+ RandomAccessIter lastPos = first;
 2440+ for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 2441+ size_t count = bin_cache[ii] - lastPos;
 2442+ if(count < 2)
 2443+ continue;
 2444+ if(count < max_count)
 2445+ std::sort(lastPos, bin_cache[ii]);
 2446+ //sort negative values using reversed-bin spread_sort
 2447+ else
 2448+ negative_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes);
 2449+ }
 2450+
 2451+ for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 2452+ size_t count = bin_cache[u] - lastPos;
 2453+ if(count < 2)
 2454+ continue;
 2455+ if(count < max_count)
 2456+ std::sort(lastPos, bin_cache[u]);
 2457+ //sort positive values using normal spread_sort
 2458+ else
 2459+ positive_float_sort_rec<RandomAccessIter, div_type, data_type>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes);
 2460+ }
 2461+ }
 2462+
 2463+ //Functor implementation for recursive sorting
 2464+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 2465+ inline void
 2466+ float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2467+ , std::vector<size_t> &bin_sizes, right_shift shift)
 2468+ {
 2469+ div_type max, min;
 2470+ find_extremes(first, last, max, min, shift);
 2471+ if(max == min)
 2472+ return;
 2473+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2474+ div_type div_min = min >> log_divisor;
 2475+ div_type div_max = max >> log_divisor;
 2476+ unsigned bin_count = div_max - div_min + 1;
 2477+ unsigned cache_end;
 2478+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2479+
 2480+ //Calculating the size of each bin
 2481+ for (RandomAccessIter current = first; current != last;)
 2482+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 2483+ //The index of the first positive bin
 2484+ div_type first_positive = (div_min < 0) ? -div_min : 0;
 2485+ //Resetting if all bins are negative
 2486+ if(cache_offset + first_positive > cache_end)
 2487+ first_positive = cache_end - cache_offset;
 2488+ //Reversing the order of the negative bins
 2489+ //Note that because of the negative/positive ordering direction flip
 2490+ //We can not depend upon bin order and positions matching up
 2491+ //so bin_sizes must be reused to contain the end of the bin
 2492+ if(first_positive > 0) {
 2493+ bins[first_positive - 1] = first;
 2494+ for(int ii = first_positive - 2; ii >= 0; --ii) {
 2495+ bins[ii] = first + bin_sizes[ii + 1];
 2496+ bin_sizes[ii] += bin_sizes[ii + 1];
 2497+ }
 2498+ //Handling positives following negatives
 2499+ if((unsigned)first_positive < bin_count) {
 2500+ bins[first_positive] = first + bin_sizes[0];
 2501+ bin_sizes[first_positive] += bin_sizes[0];
 2502+ }
 2503+ }
 2504+ else
 2505+ bins[0] = first;
 2506+ for(unsigned u = first_positive; u < bin_count - 1; u++) {
 2507+ bins[u + 1] = first + bin_sizes[u];
 2508+ bin_sizes[u + 1] += bin_sizes[u];
 2509+ }
 2510+
 2511+ //Swap into place
 2512+ RandomAccessIter nextbinstart = first;
 2513+ for(unsigned u = 0; u < bin_count; ++u) {
 2514+ nextbinstart = first + bin_sizes[u];
 2515+ inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min);
 2516+ }
 2517+
 2518+ //Return if we've completed bucketsorting
 2519+ if(!log_divisor)
 2520+ return;
 2521+
 2522+ //Handling negative values first
 2523+ size_t max_count = get_max_count(log_divisor, last - first);
 2524+ RandomAccessIter lastPos = first;
 2525+ for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 2526+ size_t count = bin_cache[ii] - lastPos;
 2527+ if(count < 2)
 2528+ continue;
 2529+ if(count < max_count)
 2530+ std::sort(lastPos, bin_cache[ii]);
 2531+ //sort negative values using reversed-bin spread_sort
 2532+ else
 2533+ negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift);
 2534+ }
 2535+
 2536+ for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 2537+ size_t count = bin_cache[u] - lastPos;
 2538+ if(count < 2)
 2539+ continue;
 2540+ if(count < max_count)
 2541+ std::sort(lastPos, bin_cache[u]);
 2542+ //sort positive values using normal spread_sort
 2543+ else
 2544+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift);
 2545+ }
 2546+ }
 2547+
 2548+ template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 2549+ inline void
 2550+ float_sort_rec(RandomAccessIter first, RandomAccessIter last, std::vector<RandomAccessIter> &bin_cache, unsigned cache_offset
 2551+ , std::vector<size_t> &bin_sizes, right_shift shift, compare comp)
 2552+ {
 2553+ div_type max, min;
 2554+ find_extremes(first, last, max, min, shift);
 2555+ if(max == min)
 2556+ return;
 2557+ unsigned log_divisor = get_log_divisor(last - first, rough_log_2_size((size_t)(max) - min));
 2558+ div_type div_min = min >> log_divisor;
 2559+ div_type div_max = max >> log_divisor;
 2560+ unsigned bin_count = div_max - div_min + 1;
 2561+ unsigned cache_end;
 2562+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, bin_count);
 2563+
 2564+ //Calculating the size of each bin
 2565+ for (RandomAccessIter current = first; current != last;)
 2566+ bin_sizes[shift(*(current++), log_divisor) - div_min]++;
 2567+ //The index of the first positive bin
 2568+ div_type first_positive = (div_min < 0) ? -div_min : 0;
 2569+ //Resetting if all bins are negative
 2570+ if(cache_offset + first_positive > cache_end)
 2571+ first_positive = cache_end - cache_offset;
 2572+ //Reversing the order of the negative bins
 2573+ //Note that because of the negative/positive ordering direction flip
 2574+ //We can not depend upon bin order and positions matching up
 2575+ //so bin_sizes must be reused to contain the end of the bin
 2576+ if(first_positive > 0) {
 2577+ bins[first_positive - 1] = first;
 2578+ for(int ii = first_positive - 2; ii >= 0; --ii) {
 2579+ bins[ii] = first + bin_sizes[ii + 1];
 2580+ bin_sizes[ii] += bin_sizes[ii + 1];
 2581+ }
 2582+ //Handling positives following negatives
 2583+ if((unsigned)first_positive < bin_count) {
 2584+ bins[first_positive] = first + bin_sizes[0];
 2585+ bin_sizes[first_positive] += bin_sizes[0];
 2586+ }
 2587+ }
 2588+ else
 2589+ bins[0] = first;
 2590+ for(unsigned u = first_positive; u < bin_count - 1; u++) {
 2591+ bins[u + 1] = first + bin_sizes[u];
 2592+ bin_sizes[u + 1] += bin_sizes[u];
 2593+ }
 2594+
 2595+ //Swap into place
 2596+ RandomAccessIter nextbinstart = first;
 2597+ for(unsigned u = 0; u < bin_count; ++u) {
 2598+ nextbinstart = first + bin_sizes[u];
 2599+ inner_swap_loop<RandomAccessIter, div_type, data_type, right_shift>(bins, nextbinstart, u, shift, log_divisor, div_min);
 2600+ }
 2601+
 2602+ //Return if we've completed bucketsorting
 2603+ if(!log_divisor)
 2604+ return;
 2605+
 2606+ //Handling negative values first
 2607+ size_t max_count = get_max_count(log_divisor, last - first);
 2608+ RandomAccessIter lastPos = first;
 2609+ for(int ii = cache_offset + first_positive - 1; ii >= (int)cache_offset ; lastPos = bin_cache[ii--]) {
 2610+ size_t count = bin_cache[ii] - lastPos;
 2611+ if(count < 2)
 2612+ continue;
 2613+ if(count < max_count)
 2614+ std::sort(lastPos, bin_cache[ii]);
 2615+ //sort negative values using reversed-bin spread_sort
 2616+ else
 2617+ negative_float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[ii], bin_cache, cache_end, bin_sizes, shift, comp);
 2618+ }
 2619+
 2620+ for(unsigned u = cache_offset + first_positive; u < cache_end; lastPos = bin_cache[u], ++u) {
 2621+ size_t count = bin_cache[u] - lastPos;
 2622+ if(count < 2)
 2623+ continue;
 2624+ if(count < max_count)
 2625+ std::sort(lastPos, bin_cache[u]);
 2626+ //sort positive values using normal spread_sort
 2627+ else
 2628+ spread_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(lastPos, bin_cache[u], bin_cache, cache_end, bin_sizes, shift, comp);
 2629+ }
 2630+ }
 2631+
 2632+ template <class RandomAccessIter, class cast_type, class data_type>
 2633+ inline void
 2634+ float_Sort(RandomAccessIter first, RandomAccessIter last, cast_type, data_type)
 2635+ {
 2636+ std::vector<size_t> bin_sizes;
 2637+ std::vector<RandomAccessIter> bin_cache;
 2638+ float_sort_rec<RandomAccessIter, cast_type, data_type>(first, last, bin_cache, 0, bin_sizes);
 2639+ }
 2640+
 2641+ template <class RandomAccessIter, class div_type, class data_type, class right_shift>
 2642+ inline void
 2643+ float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift)
 2644+ {
 2645+ std::vector<size_t> bin_sizes;
 2646+ std::vector<RandomAccessIter> bin_cache;
 2647+ float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift);
 2648+ }
 2649+
 2650+ template <class RandomAccessIter, class div_type, class data_type, class right_shift, class compare>
 2651+ inline void
 2652+ float_Sort(RandomAccessIter first, RandomAccessIter last, div_type, data_type, right_shift shift, compare comp)
 2653+ {
 2654+ std::vector<size_t> bin_sizes;
 2655+ std::vector<RandomAccessIter> bin_cache;
 2656+ float_sort_rec<RandomAccessIter, div_type, data_type, right_shift>(first, last, bin_cache, 0, bin_sizes, shift, comp);
 2657+ }
 2658+ }
 2659+
 2660+ //float_sort with casting
 2661+ //The cast_type must be equal in size to the data type, and must be a signed integer
 2662+ template <class RandomAccessIter, class cast_type>
 2663+ inline void float_sort_cast(RandomAccessIter first, RandomAccessIter last, cast_type cVal)
 2664+ {
 2665+ if(last - first < detail::MIN_SORT_SIZE)
 2666+ std::sort(first, last);
 2667+ else
 2668+ detail::float_Sort(first, last, cVal, *first);
 2669+ }
 2670+
 2671+ //float_sort with casting to an int
 2672+ //Only use this with IEEE floating-point numbers
 2673+ template <class RandomAccessIter>
 2674+ inline void float_sort_cast_to_int(RandomAccessIter first, RandomAccessIter last)
 2675+ {
 2676+ int cVal = 0;
 2677+ float_sort_cast(first, last, cVal);
 2678+ }
 2679+
 2680+ //float_sort with functors
 2681+ template <class RandomAccessIter, class right_shift>
 2682+ inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift)
 2683+ {
 2684+ if(last - first < detail::MIN_SORT_SIZE)
 2685+ std::sort(first, last);
 2686+ else
 2687+ detail::float_Sort(first, last, shift(*first, 0), *first, shift);
 2688+ }
 2689+
 2690+ template <class RandomAccessIter, class right_shift, class compare>
 2691+ inline void float_sort(RandomAccessIter first, RandomAccessIter last, right_shift shift, compare comp)
 2692+ {
 2693+ if(last - first < detail::MIN_SORT_SIZE)
 2694+ std::sort(first, last, comp);
 2695+ else
 2696+ detail::float_Sort(first, last, shift(*first, 0), *first, shift, comp);
 2697+ }
 2698+
 2699+ //------------------------------------------------- string_sort source ---------------------------------------------
 2700+ namespace detail {
 2701+ //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance.
 2702+ template<class RandomAccessIter>
 2703+ inline void
 2704+ update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset)
 2705+ {
 2706+ unsigned nextOffset = char_offset;
 2707+ bool done = false;
 2708+ while(!done) {
 2709+ RandomAccessIter curr = first;
 2710+ do {
 2711+ //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character
 2712+ if((*curr).size() > char_offset && ((*curr).size() <= (nextOffset + 1) || (*curr)[nextOffset] != (*first)[nextOffset])) {
 2713+ done = true;
 2714+ break;
 2715+ }
 2716+ } while(++curr != finish);
 2717+ if(!done)
 2718+ ++nextOffset;
 2719+ }
 2720+ char_offset = nextOffset;
 2721+ }
 2722+
 2723+ //Offsetting on identical characters. This function works a character at a time for optimal worst-case performance.
 2724+ template<class RandomAccessIter, class get_char, class get_length>
 2725+ inline void
 2726+ update_offset(RandomAccessIter first, RandomAccessIter finish, unsigned &char_offset, get_char getchar, get_length length)
 2727+ {
 2728+ unsigned nextOffset = char_offset;
 2729+ bool done = false;
 2730+ while(!done) {
 2731+ RandomAccessIter curr = first;
 2732+ do {
 2733+ //ignore empties, but if the nextOffset would exceed the length or not match, exit; we've found the last matching character
 2734+ if(length(*curr) > char_offset && (length(*curr) <= (nextOffset + 1) || getchar((*curr), nextOffset) != getchar((*first), nextOffset))) {
 2735+ done = true;
 2736+ break;
 2737+ }
 2738+ } while(++curr != finish);
 2739+ if(!done)
 2740+ ++nextOffset;
 2741+ }
 2742+ char_offset = nextOffset;
 2743+ }
 2744+
 2745+ //A comparison functor for strings that assumes they are identical up to char_offset
 2746+ template<class data_type, class unsignedchar_type>
 2747+ struct offset_lessthan {
 2748+ offset_lessthan(unsigned char_offset) : fchar_offset(char_offset){}
 2749+ inline bool operator()(const data_type &x, const data_type &y) const
 2750+ {
 2751+ unsigned minSize = std::min(x.size(), y.size());
 2752+ for(unsigned u = fchar_offset; u < minSize; ++u) {
 2753+ if(static_cast<unsignedchar_type>(x[u]) < static_cast<unsignedchar_type>(y[u]))
 2754+ return true;
 2755+ else if(static_cast<unsignedchar_type>(y[u]) < static_cast<unsignedchar_type>(x[u]))
 2756+ return false;
 2757+ }
 2758+ return x.size() < y.size();
 2759+ }
 2760+ unsigned fchar_offset;
 2761+ };
 2762+
 2763+ //A comparison functor for strings that assumes they are identical up to char_offset
 2764+ template<class data_type, class unsignedchar_type>
 2765+ struct offset_greaterthan {
 2766+ offset_greaterthan(unsigned char_offset) : fchar_offset(char_offset){}
 2767+ inline bool operator()(const data_type &x, const data_type &y) const
 2768+ {
 2769+ unsigned minSize = std::min(x.size(), y.size());
 2770+ for(unsigned u = fchar_offset; u < minSize; ++u) {
 2771+ if(static_cast<unsignedchar_type>(x[u]) > static_cast<unsignedchar_type>(y[u]))
 2772+ return true;
 2773+ else if(static_cast<unsignedchar_type>(y[u]) > static_cast<unsignedchar_type>(x[u]))
 2774+ return false;
 2775+ }
 2776+ return x.size() > y.size();
 2777+ }
 2778+ unsigned fchar_offset;
 2779+ };
 2780+
 2781+ //A comparison functor for strings that assumes they are identical up to char_offset
 2782+ template<class data_type, class get_char, class get_length>
 2783+ struct offset_char_lessthan {
 2784+ offset_char_lessthan(unsigned char_offset) : fchar_offset(char_offset){}
 2785+ inline bool operator()(const data_type &x, const data_type &y) const
 2786+ {
 2787+ unsigned minSize = std::min(length(x), length(y));
 2788+ for(unsigned u = fchar_offset; u < minSize; ++u) {
 2789+ if(getchar(x, u) < getchar(y, u))
 2790+ return true;
 2791+ else if(getchar(y, u) < getchar(x, u))
 2792+ return false;
 2793+ }
 2794+ return length(x) < length(y);
 2795+ }
 2796+ unsigned fchar_offset;
 2797+ get_char getchar;
 2798+ get_length length;
 2799+ };
 2800+
 2801+ //String sorting recursive implementation
 2802+ template <class RandomAccessIter, class data_type, class unsignedchar_type>
 2803+ inline void
 2804+ string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 2805+ , unsigned cache_offset, std::vector<size_t> &bin_sizes)
 2806+ {
 2807+ //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 2808+ //Iterate to the end of the empties. If all empty, return
 2809+ while((*first).size() <= char_offset) {
 2810+ if(++first == last)
 2811+ return;
 2812+ }
 2813+ RandomAccessIter finish = last - 1;
 2814+ //Getting the last non-empty
 2815+ for(;(*finish).size() <= char_offset; --finish) { }
 2816+ ++finish;
 2817+ //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 2818+ update_offset(first, finish, char_offset);
 2819+
 2820+ const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 2821+ //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 2822+ const unsigned max_size = bin_count;
 2823+ const unsigned membin_count = bin_count + 1;
 2824+ unsigned cache_end;
 2825+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 2826+
 2827+ //Calculating the size of each bin; this takes roughly 10% of runtime
 2828+ for (RandomAccessIter current = first; current != last; ++current) {
 2829+ if((*current).size() <= char_offset) {
 2830+ bin_sizes[0]++;
 2831+ }
 2832+ else
 2833+ bin_sizes[static_cast<unsignedchar_type>((*current)[char_offset]) + 1]++;
 2834+ }
 2835+ //Assign the bin positions
 2836+ bin_cache[cache_offset] = first;
 2837+ for(unsigned u = 0; u < membin_count - 1; u++)
 2838+ bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 2839+
 2840+ //Swap into place
 2841+ RandomAccessIter nextbinstart = first;
 2842+ //handling empty bins
 2843+ RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 2844+ nextbinstart += bin_sizes[0];
 2845+ RandomAccessIter * target_bin;
 2846+ //Iterating over each element in the bin of empties
 2847+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 2848+ //empties belong in this bin
 2849+ while((*current).size() > char_offset) {
 2850+ target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]);
 2851+ iter_swap(current, (*target_bin)++);
 2852+ }
 2853+ }
 2854+ *local_bin = nextbinstart;
 2855+ //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 2856+ unsigned last_bin = bin_count - 1;
 2857+ for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 2858+ //This dominates runtime, mostly in the swap and bin lookups
 2859+ for(unsigned u = 0; u < last_bin; ++u) {
 2860+ local_bin = bins + u;
 2861+ nextbinstart += bin_sizes[u + 1];
 2862+ //Iterating over each element in this bin
 2863+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 2864+ //Swapping elements in current into place until the correct element has been swapped in
 2865+ for(target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin;
 2866+ target_bin = bins + static_cast<unsignedchar_type>((*current)[char_offset]))
 2867+ iter_swap(current, (*target_bin)++);
 2868+ }
 2869+ *local_bin = nextbinstart;
 2870+ }
 2871+ bins[last_bin] = last;
 2872+ //Recursing
 2873+ RandomAccessIter lastPos = bin_cache[cache_offset];
 2874+ //Skip this loop for empties
 2875+ for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 2876+ size_t count = bin_cache[u] - lastPos;
 2877+ //don't sort unless there are at least two items to compare
 2878+ if(count < 2)
 2879+ continue;
 2880+ //using std::sort if its worst-case is better
 2881+ if(count < max_size)
 2882+ std::sort(lastPos, bin_cache[u], offset_lessthan<data_type, unsignedchar_type>(char_offset + 1));
 2883+ else
 2884+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
 2885+ }
 2886+ }
 2887+
 2888+ //Sorts strings in reverse order, with empties at the end
 2889+ template <class RandomAccessIter, class data_type, class unsignedchar_type>
 2890+ inline void
 2891+ reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 2892+ , unsigned cache_offset, std::vector<size_t> &bin_sizes)
 2893+ {
 2894+ //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 2895+ RandomAccessIter curr = first;
 2896+ //Iterate to the end of the empties. If all empty, return
 2897+ while((*curr).size() <= char_offset) {
 2898+ if(++curr == last)
 2899+ return;
 2900+ }
 2901+ //Getting the last non-empty
 2902+ while((*(--last)).size() <= char_offset) { }
 2903+ ++last;
 2904+ //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 2905+ update_offset(curr, last, char_offset);
 2906+ RandomAccessIter * target_bin;
 2907+
 2908+ const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 2909+ //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 2910+ const unsigned max_size = bin_count;
 2911+ const unsigned membin_count = bin_count + 1;
 2912+ const unsigned max_bin = bin_count - 1;
 2913+ unsigned cache_end;
 2914+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count);
 2915+ RandomAccessIter * end_bin = &(bin_cache[cache_offset + max_bin]);
 2916+
 2917+ //Calculating the size of each bin; this takes roughly 10% of runtime
 2918+ for (RandomAccessIter current = first; current != last; ++current) {
 2919+ if((*current).size() <= char_offset) {
 2920+ bin_sizes[bin_count]++;
 2921+ }
 2922+ else
 2923+ bin_sizes[max_bin - static_cast<unsignedchar_type>((*current)[char_offset])]++;
 2924+ }
 2925+ //Assign the bin positions
 2926+ bin_cache[cache_offset] = first;
 2927+ for(unsigned u = 0; u < membin_count - 1; u++)
 2928+ bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 2929+
 2930+ //Swap into place
 2931+ RandomAccessIter nextbinstart = last;
 2932+ //handling empty bins
 2933+ RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
 2934+ RandomAccessIter lastFull = *local_bin;
 2935+ //Iterating over each element in the bin of empties
 2936+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 2937+ //empties belong in this bin
 2938+ while((*current).size() > char_offset) {
 2939+ target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]);
 2940+ iter_swap(current, (*target_bin)++);
 2941+ }
 2942+ }
 2943+ *local_bin = nextbinstart;
 2944+ nextbinstart = first;
 2945+ //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 2946+ unsigned last_bin = max_bin;
 2947+ for(; last_bin && !bin_sizes[last_bin]; --last_bin) { }
 2948+ //This dominates runtime, mostly in the swap and bin lookups
 2949+ for(unsigned u = 0; u < last_bin; ++u) {
 2950+ local_bin = bins + u;
 2951+ nextbinstart += bin_sizes[u];
 2952+ //Iterating over each element in this bin
 2953+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 2954+ //Swapping elements in current into place until the correct element has been swapped in
 2955+ for(target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]); target_bin != local_bin;
 2956+ target_bin = end_bin - static_cast<unsignedchar_type>((*current)[char_offset]))
 2957+ iter_swap(current, (*target_bin)++);
 2958+ }
 2959+ *local_bin = nextbinstart;
 2960+ }
 2961+ bins[last_bin] = lastFull;
 2962+ //Recursing
 2963+ RandomAccessIter lastPos = first;
 2964+ //Skip this loop for empties
 2965+ for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) {
 2966+ size_t count = bin_cache[u] - lastPos;
 2967+ //don't sort unless there are at least two items to compare
 2968+ if(count < 2)
 2969+ continue;
 2970+ //using std::sort if its worst-case is better
 2971+ if(count < max_size)
 2972+ std::sort(lastPos, bin_cache[u], offset_greaterthan<data_type, unsignedchar_type>(char_offset + 1));
 2973+ else
 2974+ reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes);
 2975+ }
 2976+ }
 2977+
 2978+ //String sorting recursive implementation
 2979+ template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length>
 2980+ inline void
 2981+ string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 2982+ , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length)
 2983+ {
 2984+ //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 2985+ //Iterate to the end of the empties. If all empty, return
 2986+ while(length(*first) <= char_offset) {
 2987+ if(++first == last)
 2988+ return;
 2989+ }
 2990+ RandomAccessIter finish = last - 1;
 2991+ //Getting the last non-empty
 2992+ for(;length(*finish) <= char_offset; --finish) { }
 2993+ ++finish;
 2994+ update_offset(first, finish, char_offset, getchar, length);
 2995+
 2996+ const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 2997+ //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 2998+ const unsigned max_size = bin_count;
 2999+ const unsigned membin_count = bin_count + 1;
 3000+ unsigned cache_end;
 3001+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 3002+
 3003+ //Calculating the size of each bin; this takes roughly 10% of runtime
 3004+ for (RandomAccessIter current = first; current != last; ++current) {
 3005+ if(length(*current) <= char_offset) {
 3006+ bin_sizes[0]++;
 3007+ }
 3008+ else
 3009+ bin_sizes[getchar((*current), char_offset) + 1]++;
 3010+ }
 3011+ //Assign the bin positions
 3012+ bin_cache[cache_offset] = first;
 3013+ for(unsigned u = 0; u < membin_count - 1; u++)
 3014+ bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 3015+
 3016+ //Swap into place
 3017+ RandomAccessIter nextbinstart = first;
 3018+ //handling empty bins
 3019+ RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 3020+ nextbinstart += bin_sizes[0];
 3021+ RandomAccessIter * target_bin;
 3022+ //Iterating over each element in the bin of empties
 3023+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3024+ //empties belong in this bin
 3025+ while(length(*current) > char_offset) {
 3026+ target_bin = bins + getchar((*current), char_offset);
 3027+ iter_swap(current, (*target_bin)++);
 3028+ }
 3029+ }
 3030+ *local_bin = nextbinstart;
 3031+ //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 3032+ unsigned last_bin = bin_count - 1;
 3033+ for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 3034+ //This dominates runtime, mostly in the swap and bin lookups
 3035+ for(unsigned ii = 0; ii < last_bin; ++ii) {
 3036+ local_bin = bins + ii;
 3037+ nextbinstart += bin_sizes[ii + 1];
 3038+ //Iterating over each element in this bin
 3039+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3040+ //Swapping elements in current into place until the correct element has been swapped in
 3041+ for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin;
 3042+ target_bin = bins + getchar((*current), char_offset))
 3043+ iter_swap(current, (*target_bin)++);
 3044+ }
 3045+ *local_bin = nextbinstart;
 3046+ }
 3047+ bins[last_bin] = last;
 3048+
 3049+ //Recursing
 3050+ RandomAccessIter lastPos = bin_cache[cache_offset];
 3051+ //Skip this loop for empties
 3052+ for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 3053+ size_t count = bin_cache[u] - lastPos;
 3054+ //don't sort unless there are at least two items to compare
 3055+ if(count < 2)
 3056+ continue;
 3057+ //using std::sort if its worst-case is better
 3058+ if(count < max_size)
 3059+ std::sort(lastPos, bin_cache[u], offset_char_lessthan<data_type, get_char, get_length>(char_offset + 1));
 3060+ else
 3061+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(lastPos, bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length);
 3062+ }
 3063+ }
 3064+
 3065+ //String sorting recursive implementation
 3066+ template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare>
 3067+ inline void
 3068+ string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 3069+ , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp)
 3070+ {
 3071+ //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 3072+ //Iterate to the end of the empties. If all empty, return
 3073+ while(length(*first) <= char_offset) {
 3074+ if(++first == last)
 3075+ return;
 3076+ }
 3077+ RandomAccessIter finish = last - 1;
 3078+ //Getting the last non-empty
 3079+ for(;length(*finish) <= char_offset; --finish) { }
 3080+ ++finish;
 3081+ update_offset(first, finish, char_offset, getchar, length);
 3082+
 3083+ const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 3084+ //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 3085+ const unsigned max_size = bin_count;
 3086+ const unsigned membin_count = bin_count + 1;
 3087+ unsigned cache_end;
 3088+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count) + 1;
 3089+
 3090+ //Calculating the size of each bin; this takes roughly 10% of runtime
 3091+ for (RandomAccessIter current = first; current != last; ++current) {
 3092+ if(length(*current) <= char_offset) {
 3093+ bin_sizes[0]++;
 3094+ }
 3095+ else
 3096+ bin_sizes[getchar((*current), char_offset) + 1]++;
 3097+ }
 3098+ //Assign the bin positions
 3099+ bin_cache[cache_offset] = first;
 3100+ for(unsigned u = 0; u < membin_count - 1; u++)
 3101+ bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 3102+
 3103+ //Swap into place
 3104+ RandomAccessIter nextbinstart = first;
 3105+ //handling empty bins
 3106+ RandomAccessIter * local_bin = &(bin_cache[cache_offset]);
 3107+ nextbinstart += bin_sizes[0];
 3108+ RandomAccessIter * target_bin;
 3109+ //Iterating over each element in the bin of empties
 3110+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3111+ //empties belong in this bin
 3112+ while(length(*current) > char_offset) {
 3113+ target_bin = bins + getchar((*current), char_offset);
 3114+ iter_swap(current, (*target_bin)++);
 3115+ }
 3116+ }
 3117+ *local_bin = nextbinstart;
 3118+ //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 3119+ unsigned last_bin = bin_count - 1;
 3120+ for(; last_bin && !bin_sizes[last_bin + 1]; --last_bin) { }
 3121+ //This dominates runtime, mostly in the swap and bin lookups
 3122+ for(unsigned u = 0; u < last_bin; ++u) {
 3123+ local_bin = bins + u;
 3124+ nextbinstart += bin_sizes[u + 1];
 3125+ //Iterating over each element in this bin
 3126+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3127+ //Swapping elements in current into place until the correct element has been swapped in
 3128+ for(target_bin = bins + getchar((*current), char_offset); target_bin != local_bin;
 3129+ target_bin = bins + getchar((*current), char_offset))
 3130+ iter_swap(current, (*target_bin)++);
 3131+ }
 3132+ *local_bin = nextbinstart;
 3133+ }
 3134+ bins[last_bin] = last;
 3135+
 3136+ //Recursing
 3137+ RandomAccessIter lastPos = bin_cache[cache_offset];
 3138+ //Skip this loop for empties
 3139+ for(unsigned u = cache_offset + 1; u < cache_offset + last_bin + 2; lastPos = bin_cache[u], ++u) {
 3140+ size_t count = bin_cache[u] - lastPos;
 3141+ //don't sort unless there are at least two items to compare
 3142+ if(count < 2)
 3143+ continue;
 3144+ //using std::sort if its worst-case is better
 3145+ if(count < max_size)
 3146+ std::sort(lastPos, bin_cache[u], comp);
 3147+ else
 3148+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos
 3149+ , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp);
 3150+ }
 3151+ }
 3152+
 3153+ //Sorts strings in reverse order, with empties at the end
 3154+ template <class RandomAccessIter, class data_type, class unsignedchar_type, class get_char, class get_length, class compare>
 3155+ inline void
 3156+ reverse_string_sort_rec(RandomAccessIter first, RandomAccessIter last, unsigned char_offset, std::vector<RandomAccessIter> &bin_cache
 3157+ , unsigned cache_offset, std::vector<size_t> &bin_sizes, get_char getchar, get_length length, compare comp)
 3158+ {
 3159+ //This section is not strictly necessary, but makes handling of long identical substrings much faster, with a mild average performance impact.
 3160+ RandomAccessIter curr = first;
 3161+ //Iterate to the end of the empties. If all empty, return
 3162+ while(length(*curr) <= char_offset) {
 3163+ if(++curr == last)
 3164+ return;
 3165+ }
 3166+ //Getting the last non-empty
 3167+ while(length(*(--last)) <= char_offset) { }
 3168+ ++last;
 3169+ //Offsetting on identical characters. This section works a character at a time for optimal worst-case performance.
 3170+ update_offset(first, last, char_offset, getchar, length);
 3171+
 3172+ const unsigned bin_count = (1 << (sizeof(unsignedchar_type)*8));
 3173+ //Equal worst-case between radix and comparison-based is when bin_count = n*log(n).
 3174+ const unsigned max_size = bin_count;
 3175+ const unsigned membin_count = bin_count + 1;
 3176+ const unsigned max_bin = bin_count - 1;
 3177+ unsigned cache_end;
 3178+ RandomAccessIter * bins = size_bins(bin_sizes, bin_cache, cache_offset, cache_end, membin_count);
 3179+ RandomAccessIter *end_bin = &(bin_cache[cache_offset + max_bin]);
 3180+
 3181+ //Calculating the size of each bin; this takes roughly 10% of runtime
 3182+ for (RandomAccessIter current = first; current != last; ++current) {
 3183+ if(length(*current) <= char_offset) {
 3184+ bin_sizes[bin_count]++;
 3185+ }
 3186+ else
 3187+ bin_sizes[max_bin - getchar((*current), char_offset)]++;
 3188+ }
 3189+ //Assign the bin positions
 3190+ bin_cache[cache_offset] = first;
 3191+ for(unsigned u = 0; u < membin_count - 1; u++)
 3192+ bin_cache[cache_offset + u + 1] = bin_cache[cache_offset + u] + bin_sizes[u];
 3193+
 3194+ //Swap into place
 3195+ RandomAccessIter nextbinstart = last;
 3196+ //handling empty bins
 3197+ RandomAccessIter * local_bin = &(bin_cache[cache_offset + bin_count]);
 3198+ RandomAccessIter lastFull = *local_bin;
 3199+ RandomAccessIter * target_bin;
 3200+ //Iterating over each element in the bin of empties
 3201+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3202+ //empties belong in this bin
 3203+ while(length(*current) > char_offset) {
 3204+ target_bin = end_bin - getchar((*current), char_offset);
 3205+ iter_swap(current, (*target_bin)++);
 3206+ }
 3207+ }
 3208+ *local_bin = nextbinstart;
 3209+ nextbinstart = first;
 3210+ //iterate backwards to find the last bin with elements in it; this saves iterations in multiple loops
 3211+ unsigned last_bin = max_bin;
 3212+ for(; last_bin && !bin_sizes[last_bin]; --last_bin) { }
 3213+ //This dominates runtime, mostly in the swap and bin lookups
 3214+ for(unsigned u = 0; u < last_bin; ++u) {
 3215+ local_bin = bins + u;
 3216+ nextbinstart += bin_sizes[u];
 3217+ //Iterating over each element in this bin
 3218+ for(RandomAccessIter current = *local_bin; current < nextbinstart; ++current) {
 3219+ //Swapping elements in current into place until the correct element has been swapped in
 3220+ for(target_bin = end_bin - getchar((*current), char_offset); target_bin != local_bin;
 3221+ target_bin = end_bin - getchar((*current), char_offset))
 3222+ iter_swap(current, (*target_bin)++);
 3223+ }
 3224+ *local_bin = nextbinstart;
 3225+ }
 3226+ bins[last_bin] = lastFull;
 3227+ //Recursing
 3228+ RandomAccessIter lastPos = first;
 3229+ //Skip this loop for empties
 3230+ for(unsigned u = cache_offset; u <= cache_offset + last_bin; lastPos = bin_cache[u], ++u) {
 3231+ size_t count = bin_cache[u] - lastPos;
 3232+ //don't sort unless there are at least two items to compare
 3233+ if(count < 2)
 3234+ continue;
 3235+ //using std::sort if its worst-case is better
 3236+ if(count < max_size)
 3237+ std::sort(lastPos, bin_cache[u], comp);
 3238+ else
 3239+ reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(lastPos
 3240+ , bin_cache[u], char_offset + 1, bin_cache, cache_end, bin_sizes, getchar, length, comp);
 3241+ }
 3242+ }
 3243+
 3244+ //Holds the bin vector and makes the initial recursive call
 3245+ template <class RandomAccessIter, class data_type, class unsignedchar_type>
 3246+ inline void
 3247+ string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type)
 3248+ {
 3249+ std::vector<size_t> bin_sizes;
 3250+ std::vector<RandomAccessIter> bin_cache;
 3251+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes);
 3252+ }
 3253+
 3254+ //Holds the bin vector and makes the initial recursive call
 3255+ template <class RandomAccessIter, class data_type, class unsignedchar_type>
 3256+ inline void
 3257+ reverse_string_sort(RandomAccessIter first, RandomAccessIter last, data_type, unsignedchar_type)
 3258+ {
 3259+ std::vector<size_t> bin_sizes;
 3260+ std::vector<RandomAccessIter> bin_cache;
 3261+ reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type>(first, last, 0, bin_cache, 0, bin_sizes);
 3262+ }
 3263+
 3264+ //Holds the bin vector and makes the initial recursive call
 3265+ template <class RandomAccessIter, class get_char, class get_length, class data_type, class unsignedchar_type>
 3266+ inline void
 3267+ string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, data_type, unsignedchar_type)
 3268+ {
 3269+ std::vector<size_t> bin_sizes;
 3270+ std::vector<RandomAccessIter> bin_cache;
 3271+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length);
 3272+ }
 3273+
 3274+ //Holds the bin vector and makes the initial recursive call
 3275+ template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type>
 3276+ inline void
 3277+ string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type)
 3278+ {
 3279+ std::vector<size_t> bin_sizes;
 3280+ std::vector<RandomAccessIter> bin_cache;
 3281+ string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
 3282+ }
 3283+
 3284+ //Holds the bin vector and makes the initial recursive call
 3285+ template <class RandomAccessIter, class get_char, class get_length, class compare, class data_type, class unsignedchar_type>
 3286+ inline void
 3287+ reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp, data_type, unsignedchar_type)
 3288+ {
 3289+ std::vector<size_t> bin_sizes;
 3290+ std::vector<RandomAccessIter> bin_cache;
 3291+ reverse_string_sort_rec<RandomAccessIter, data_type, unsignedchar_type, get_char, get_length, compare>(first, last, 0, bin_cache, 0, bin_sizes, getchar, length, comp);
 3292+ }
 3293+ }
 3294+
 3295+ //Allows character-type overloads
 3296+ template <class RandomAccessIter, class unsignedchar_type>
 3297+ inline void string_sort(RandomAccessIter first, RandomAccessIter last, unsignedchar_type unused)
 3298+ {
 3299+ //Don't sort if it's too small to optimize
 3300+ if(last - first < detail::MIN_SORT_SIZE)
 3301+ std::sort(first, last);
 3302+ else
 3303+ detail::string_sort(first, last, *first, unused);
 3304+ }
 3305+
 3306+ //Top-level sorting call; wraps using default of unsigned char
 3307+ template <class RandomAccessIter>
 3308+ inline void string_sort(RandomAccessIter first, RandomAccessIter last)
 3309+ {
 3310+ unsigned char unused = '\0';
 3311+ string_sort(first, last, unused);
 3312+ }
 3313+
 3314+ //Allows character-type overloads
 3315+ template <class RandomAccessIter, class compare, class unsignedchar_type>
 3316+ inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp, unsignedchar_type unused)
 3317+ {
 3318+ //Don't sort if it's too small to optimize
 3319+ if(last - first < detail::MIN_SORT_SIZE)
 3320+ std::sort(first, last, comp);
 3321+ else
 3322+ detail::reverse_string_sort(first, last, *first, unused);
 3323+ }
 3324+
 3325+ //Top-level sorting call; wraps using default of unsigned char
 3326+ template <class RandomAccessIter, class compare>
 3327+ inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, compare comp)
 3328+ {
 3329+ unsigned char unused = '\0';
 3330+ reverse_string_sort(first, last, comp, unused);
 3331+ }
 3332+
 3333+ template <class RandomAccessIter, class get_char, class get_length>
 3334+ inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length)
 3335+ {
 3336+ //Don't sort if it's too small to optimize
 3337+ if(last - first < detail::MIN_SORT_SIZE)
 3338+ std::sort(first, last);
 3339+ else {
 3340+ //skipping past empties at the beginning, which allows us to get the character type
 3341+ //.empty() is not used so as not to require a user declaration of it
 3342+ while(!length(*first)) {
 3343+ if(++first == last)
 3344+ return;
 3345+ }
 3346+ detail::string_sort(first, last, getchar, length, *first, getchar((*first), 0));
 3347+ }
 3348+ }
 3349+
 3350+ template <class RandomAccessIter, class get_char, class get_length, class compare>
 3351+ inline void string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp)
 3352+ {
 3353+ //Don't sort if it's too small to optimize
 3354+ if(last - first < detail::MIN_SORT_SIZE)
 3355+ std::sort(first, last, comp);
 3356+ else {
 3357+ //skipping past empties at the beginning, which allows us to get the character type
 3358+ //.empty() is not used so as not to require a user declaration of it
 3359+ while(!length(*first)) {
 3360+ if(++first == last)
 3361+ return;
 3362+ }
 3363+ detail::string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0));
 3364+ }
 3365+ }
 3366+
 3367+ template <class RandomAccessIter, class get_char, class get_length, class compare>
 3368+ inline void reverse_string_sort(RandomAccessIter first, RandomAccessIter last, get_char getchar, get_length length, compare comp)
 3369+ {
 3370+ //Don't sort if it's too small to optimize
 3371+ if(last - first < detail::MIN_SORT_SIZE)
 3372+ std::sort(first, last, comp);
 3373+ else {
 3374+ //skipping past empties at the beginning, which allows us to get the character type
 3375+ //.empty() is not used so as not to require a user declaration of it
 3376+ while(!length(*(--last))) {
 3377+ //Note: if there is just one non-empty, and it's at the beginning, then it's already in sorted order
 3378+ if(first == last)
 3379+ return;
 3380+ }
 3381+ //making last just after the end of the non-empty part of the array
 3382+ ++last;
 3383+ detail::reverse_string_sort(first, last, getchar, length, comp, *first, getchar((*first), 0));
 3384+ }
 3385+ }
 3386+}
 3387+
 3388+#endif

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_library_Makefile.in (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_library_Makefile.in 2013/05/23 13:25:30 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_library_Makefile.in 2013/12/26 13:17:37 1.2
@@ -1,12 +1,23 @@ @@ -1,12 +1,23 @@
1$NetBSD: patch-mozilla_toolkit_library_Makefile.in,v 1.1 2013/05/23 13:25:30 ryoon Exp $ 1$NetBSD: patch-mozilla_toolkit_library_Makefile.in,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/toolkit/library/Makefile.in.orig 2013-05-03 03:08:13.000000000 +0000 3--- mozilla/toolkit/library/Makefile.in.orig 2013-12-11 04:29:15.000000000 +0000
4+++ mozilla/toolkit/library/Makefile.in 4+++ mozilla/toolkit/library/Makefile.in
5@@ -405,6 +405,7 @@ endif 5@@ -399,6 +399,7 @@ endif
6 EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib) 6 EXTRA_DSO_LDOPTS += $(call EXPAND_LIBNAME_PATH,gkmedias,$(DIST)/lib)
7  7
8 ifdef MOZ_WEBRTC 8 ifdef MOZ_WEBRTC
9+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS) 9+EXTRA_DSO_LDOPTS += $(MOZ_LIBV4L2_LIBS)
10 ifdef MOZ_PEERCONNECTION 10 ifdef MOZ_PEERCONNECTION
11 COMPONENT_LIBS += peerconnection 11 COMPONENT_LIBS += peerconnection
12 endif 12 endif
 13@@ -541,6 +542,10 @@ OS_LIBS += $(call EXPAND_LIBNAME,kvm)
 14 EXTRA_DSO_LDOPTS += -Wl,--warn-unresolved-symbols
 15 endif
 16
 17+ifeq ($(OS_ARCH),FreeBSD)
 18+OS_LIBS += $(call EXPAND_LIBNAME,util)
 19+endif
 20+
 21 ifeq ($(OS_ARCH),WINNT)
 22 OS_LIBS += $(call EXPAND_LIBNAME,shell32 ole32 version winspool comdlg32 imm32 msimg32 shlwapi psapi ws2_32 dbghelp rasapi32 rasdlg iphlpapi uxtheme setupapi secur32 sensorsapi portabledeviceguids windowscodecs wininet)
 23 ifdef ACCESSIBILITY

cvs diff -r1.1 -r1.2 pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_toolkit.mozbuild (expand / switch to unified diff)

--- pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_toolkit.mozbuild 2013/07/12 12:24:11 1.1
+++ pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_toolkit_toolkit.mozbuild 2013/12/26 13:17:37 1.2
@@ -1,13 +1,15 @@ @@ -1,13 +1,15 @@
1$NetBSD: patch-mozilla_toolkit_toolkit.mozbuild,v 1.1 2013/07/12 12:24:11 ryoon Exp $ 1$NetBSD: patch-mozilla_toolkit_toolkit.mozbuild,v 1.2 2013/12/26 13:17:37 ryoon Exp $
2 2
3--- mozilla/toolkit/toolkit.mozbuild.orig 2013-06-20 04:35:23.000000000 +0000 3--- mozilla/toolkit/toolkit.mozbuild.orig 2013-12-11 04:29:23.000000000 +0000
4+++ mozilla/toolkit/toolkit.mozbuild 4+++ mozilla/toolkit/toolkit.mozbuild
5@@ -46,7 +46,7 @@ if CONFIG['MOZ_UPDATER']: 5@@ -43,8 +43,8 @@ add_tier_dir('platform', [
6 if not CONFIG['MOZ_NATIVE_BZ2']: 6 if CONFIG['MOZ_AUTH_EXTENSION']:
7 add_tier_dir('platform', 'modules/libbz2') 7 add_tier_dir('platform', 'extensions/auth')
8  8
 9-if CONFIG['MOZ_UPDATER']:
9- add_tier_dir('platform', 'other-licenses/bsdiff') 10- add_tier_dir('platform', 'other-licenses/bsdiff')
 11+#if CONFIG['MOZ_UPDATER']:
10+# add_tier_dir('platform', 'other-licenses/bsdiff') 12+# add_tier_dir('platform', 'other-licenses/bsdiff')
11  13
12 # Gecko/Core components. 14 # Gecko/Core components.
13  15

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_js_src_vm_ObjectImpl-inl.h

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nICEr_src_stun_addrs.c

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_thread__posix.cc

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_mtransport_third__party_nICEr_src_util_mbslen.c

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_modules_audio__device_test_audio__device__test__api.cc

File Deleted: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_media_webrtc_trunk_webrtc_system__wrappers_source_condition__variable.cc

File Added: pkgsrc/www/seamonkey/patches/Attic/patch-mozilla_memory_mozalloc_mozalloc.cpp
$NetBSD: patch-mozilla_memory_mozalloc_mozalloc.cpp,v 1.3 2013/12/26 13:17:37 ryoon Exp $

--- mozilla/memory/mozalloc/mozalloc.cpp.orig	2013-12-11 04:29:01.000000000 +0000
+++ mozilla/memory/mozalloc/mozalloc.cpp
@@ -229,3 +229,76 @@ namespace mozilla {
 const fallible_t fallible = fallible_t();
 
 } // namespace mozilla
+
+
+MOZALLOC_EXPORT
+void* operator new(size_t size) MOZALLOC_THROW_BAD_ALLOC
+{
+    return moz_xmalloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size) MOZALLOC_THROW_BAD_ALLOC
+{
+    return moz_xmalloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const std::nothrow_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void* operator new(size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void* operator new[](size_t size, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    return moz_malloc(size);
+}
+
+MOZALLOC_EXPORT
+void operator delete(void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    moz_free(ptr);
+}
+
+MOZALLOC_EXPORT
+void operator delete[](void* ptr, const mozilla::fallible_t&) MOZALLOC_THROW_IF_HAS_EXCEPTIONS
+{
+    moz_free(ptr);
+}