firefox-38.6 套件實例

  1. 緣由:firefox v38.0.1 某些網頁會當掉。
  2. v38.6 有 firefox hello 視訊 (video+audio),但沒有文字聊天室。
  3. 下載 SRPM 套件
    [dywang@dywnb ~]$ cd rpmbuild
    [dywang@dywnb rpmbuild]$ wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub\
    /redhat/linux/enterprise/6Workstation/en/os/SRPMS/firefox-38.6.1-1.el6_7.src.rpm
    
  4. 安裝 SRPM 套件
    [dywang@dywnb rpmbuild]$ rpm -ivh firefox-38.6.1-1.el6_7.src.rpm
    
  5. 查看安裝的所有檔案。
    [dywang@dywnb rpmbuild]$ cd SOURCES/
    [dywang@dywnb SOURCES]$ rpm -qpl ../firefox-38.6.1-1.el6_7.src.rpm 
    warning: ../firefox-38.6.1-1.el6_7.src.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
    Python-2.7.8.tgz
    aarch64-fix-skia.patch
    build-no-format.patch
    build-nspr-prbool.patch
    find-external-requires
    firefox-38.6.1esr.source.tar.bz2
    firefox-debug.patch
    firefox-default.patch
    firefox-duckduckgo.patch
    firefox-enable-addons.patch
    firefox-enable-plugins.patch
    firefox-install-dir.patch
    firefox-langpacks-38.6.1esr-20160211.tar.bz2
    firefox-mozconfig
    firefox-mozconfig-branded
    firefox-nss-3.19.1.patch
    firefox-nss-build.patch
    firefox-ppc64le.patch
    firefox-redhat-default-prefs.js
    firefox.1
    firefox.desktop
    firefox.sh.in
    firefox.spec
    gcc48-4.8.2-15.el6.src.rpm
    mozilla-1005535.patch
    mozilla-1152515.patch
    mozilla-1204147.patch
    mozilla-api-key
    rhbz-1173156.patch
    rhbz-966424.patch
    xulrunner-24.0-jemalloc-ppc.patch
    xulrunner-nspr-version.patch
    
  6. 查看程式主要的打包壓縮檔。
    [dywang@dywnb SOURCES]$ ls firefox-38.6.1esr.source.tar.bz2 
    firefox-38.6.1esr.source.tar.bz2
    
  7. 解壓縮原始碼 tarball,產生 mozilla-esr38 目錄,存放原始碼。
    [dywang@dywnb SOURCES]$ tar jxvf firefox-38.6.1esr.source.tar.bz2
    
  8. 至 mozilla-esr38 目錄,查看檔案。
    [dywang@dywnb SOURCES]$ ls mozilla-esr38
    accessible  configure     ipc          mozilla-config.h.in  testing
    aclocal.m4  configure.in  js           netwerk              toolkit
    addon-sdk   content       layout       nsprpub              tools
    Android.mk  db            LEGAL        other-licenses       uriloader
    AUTHORS     docshell      LICENSE      parser               view
    b2g         dom           mach         probes               webapprt
    browser     editor        Makefile.in  profile              widget
    build       embedding     media        python               xpcom
    caps        extensions    memory       rdf                  xpfe
    chrome      gfx           mfbt         README.txt           xulrunner
    client.mk   GNUmakefile   mobile       security
    client.py   hal           modules      services
    CLOBBER     image         moz.build    startupcache
    config      intl          mozglue      storage
    
  9. 切換到暫存目錄,不安裝 rpm 檔下抽取 rpm 檔,做為修改前後之比較。
    [dywang@dywnb SOURCES]$ cd ../tmp/
    [dywang@dywnb tmp]$ rpm2cpio ../firefox-38.6.1-1.el6_7.src.rpm | cpio -idmv
    Python-2.7.8.tgz
    aarch64-fix-skia.patch
    build-no-format.patch
    build-nspr-prbool.patch
    find-external-requires
    firefox-38.6.1esr.source.tar.bz2
    firefox-debug.patch
    firefox-default.patch
    firefox-duckduckgo.patch
    firefox-enable-addons.patch
    firefox-enable-plugins.patch
    firefox-install-dir.patch
    firefox-langpacks-38.6.1esr-20160211.tar.bz2
    firefox-mozconfig
    firefox-mozconfig-branded
    firefox-nss-3.19.1.patch
    firefox-nss-build.patch
    firefox-ppc64le.patch
    firefox-redhat-default-prefs.js
    firefox.1
    firefox.desktop
    firefox.sh.in
    firefox.spec
    gcc48-4.8.2-15.el6.src.rpm
    mozilla-1005535.patch
    mozilla-1152515.patch
    mozilla-1204147.patch
    mozilla-api-key
    rhbz-1173156.patch
    rhbz-966424.patch
    xulrunner-24.0-jemalloc-ppc.patch
    xulrunner-nspr-version.patch
    656508 blocks
    
  10. 暫存目錄下解開 firefox-38.6.1esr.source.tar.bz2。
    [dywang@dywnb tmp]$ tar jxvf firefox-38.6.1esr.source.tar.bz2
    
  11. 修改 RPM spec 規格檔,版本加入 dyw。
    [dywang@dywnb tmp]$ cd -
    /home/dywang/rpmbuild/SOURCES
    [dywang@dywnb SOURCES]$ vim ../SPECS/firefox.spec
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/firefox.spec ../SPECS/firefox.spec
    --- ../tmp/firefox.spec	2016-02-11 16:57:21.000000000 +0800
    +++ ../SPECS/firefox.spec	2016-03-10 08:14:36.820241162 +0800
    @@ -52,7 +52,7 @@
     Summary:        Mozilla Firefox Web browser
     Name:           firefox
     Version:        38.6.1
    -Release:        1%{?prever}%{?dist}
    +Release:        1%{?prever}%{?dist}.dyw
     URL:            http://www.mozilla.org/projects/firefox/
     License:        MPLv1.1 or GPLv2+ or LGPLv2+
     Group:          Applications/Internet
    
  12. 程式修改前後檔案比較。
    [dywang@dywssd SOURCES]$ diff -qr ../tmp/mozilla-esr38 mozilla-esr38
    Files ../tmp/mozilla-esr38/browser/components/preferences/fonts.xul \
    and mozilla-esr38/browser/components/preferences/fonts.xul differ
    Files ../tmp/mozilla-esr38/browser/locales/all-locales \
    and mozilla-esr38/browser/locales/all-locales differ
    Files ../tmp/mozilla-esr38/dom/encoding/FallbackEncoding.cpp \
    and mozilla-esr38/dom/encoding/FallbackEncoding.cpp differ
    Files ../tmp/mozilla-esr38/extensions/universalchardet/tests/CharsetDetectionTests.js \
    and mozilla-esr38/extensions/universalchardet/tests/CharsetDetectionTests.js differ
    Files ../tmp/mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp \
    and mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp differ
    Files ../tmp/mozilla-esr38/modules/libpref/init/all.js \
    and mozilla-esr38/modules/libpref/init/all.js differ
    Files ../tmp/mozilla-esr38/toolkit/locales/all-locales \
    and mozilla-esr38/toolkit/locales/all-locales differ
    Files ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties \
    and mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties differ
    Files ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties \
    and mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties differ
    
  13. 修改其他編碼為 UTF-8。
    [dywang@dywnb SOURCES]$ vim mozilla-esr38/browser/components/preferences/fonts.xul 
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/browser/components/preferences/fonts.xul \
    > mozilla-esr38/browser/components/preferences/fonts.xul
    --- ../tmp/mozilla-esr38/browser/components/preferences/fonts.xul	2016-02-11 04:58:51.000000000 +0800
    +++ mozilla-esr38/browser/components/preferences/fonts.xul	2016-03-10 08:17:42.524245316 +0800
    @@ -269,7 +269,7 @@
                 <menuitem label="&languages.customize.Fallback.thai;"        value="windows-874"/>
                 <menuitem label="&languages.customize.Fallback.turkish;"     value="windows-1254"/>
                 <menuitem label="&languages.customize.Fallback.vietnamese;"  value="windows-1258"/>
    -            <menuitem label="&languages.customize.Fallback.other;"       value="windows-1252"/>
    +            <menuitem label="&languages.customize.Fallback.other;"       value="UTF-8"/>
               </menupopup>
             </menulist>
           </hbox>
    
  14. 增加瀏覽器語系 en-US。
    [dywang@dywssd SOURCES]$ diff -uN ../tmp/mozilla-esr38/browser/locales/all-locales \
    mozilla-esr38/browser/locales/all-locales
    --- ../tmp/mozilla-esr38/browser/locales/all-locales	2015-05-15 01:39:52.000000000 +0800
    +++ mozilla-esr38/browser/locales/all-locales	2015-09-18 14:11:43.000000000 +0800
    @@ -18,6 +18,7 @@
     de
     dsb
     el
    +en-US
     en-GB
     en-ZA
     eo
    
  15. 當找不到編碼時預設使用 UTF-8。
    [dywang@dywnb SOURCES]$ vim mozilla-esr38/dom/encoding/FallbackEncoding.cpp
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/dom/encoding/FallbackEncoding.cpp \
    mozilla-esr38/dom/encoding/FallbackEncoding.cpp
    --- ../tmp/mozilla-esr38/dom/encoding/FallbackEncoding.cpp	2016-02-11 04:58:57.000000000 +0800
    +++ mozilla-esr38/dom/encoding/FallbackEncoding.cpp	2016-03-10 08:19:29.320247705 +0800
    @@ -95,7 +95,7 @@
     
       if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
           localesFallbacks, ArrayLength(localesFallbacks), locale, mFallback))) {
    -    mFallback.AssignLiteral("windows-1252");
    +    mFallback.AssignLiteral("UTF-8");
       }
     
       aFallback = mFallback;
    @@ -160,7 +160,7 @@
     {
       if (NS_FAILED(nsUConvPropertySearch::SearchPropertyValue(
           domainsFallbacks, ArrayLength(domainsFallbacks), aTLD, aFallback))) {
    -    aFallback.AssignLiteral("windows-1252");
    +    aFallback.AssignLiteral("UTF-8");
       }
     }
    
  16. unix 系統預設使用 UTF-8 編碼。
    [dywang@dywnb SOURCES]$ vim mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp \
    mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp
    --- ../tmp/mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp	2016-02-11 04:58:52.000000000 +0800
    +++ mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp	2016-03-10 08:20:39.057249265 +0800
    @@ -45,7 +45,7 @@
         }
       }
     
    -  mCharset.AssignLiteral("windows-1252");
    +  mCharset.AssignLiteral("UTF-8");
       mPlatformLocale.AssignLiteral("en_US");
     
       // get locale name string, use app default if no locale specified
    
  17. 預設等寬字 monospace,實際使用時不會等寬,故修改成 DejaVu Sans Mono,並修改預設字型大小等寬字為 14。
    [dywang@dywnb SOURCES]$ sed -i 's/windows-1252/UTF-8/g' \
    mozilla-esr38/modules/libpref/init/all.js
    [dywang@dywnb SOURCES]$ sed -i 's/\(font.size.fixed.*\)1[0-9]/\114/g' \
    mozilla-esr38/modules/libpref/init/all.js
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/modules/libpref/init/all.js \
    mozilla-esr38/modules/libpref/init/all.js
    --- ../tmp/mozilla-esr38/modules/libpref/init/all.js	2016-02-11 04:59:02.000000000 +0800
    +++ mozilla-esr38/modules/libpref/init/all.js	2016-03-10 08:35:42.921269485 +0800
    @@ -1718,7 +1718,7 @@
     // fallback charset list for Unicode conversion (converting from Unicode)
     // currently used for mail send only to handle symbol characters (e.g Euro, trademark, smartquotes)
     // for ISO-8859-1
    -pref("intl.fallbackCharsetList.ISO-8859-1", "windows-1252");
    +pref("intl.fallbackCharsetList.ISO-8859-1", "UTF-8");
     pref("font.language.group",                 "chrome://global/locale/intl.properties");
     
     // these locales have right-to-left UI
    @@ -2407,142 +2407,142 @@
     pref("font.default.ar", "sans-serif");
     pref("font.minimum-size.ar", 0);
     pref("font.size.variable.ar", 16);
    -pref("font.size.fixed.ar", 13);
    +pref("font.size.fixed.ar", 14);
     
     pref("font.default.el", "serif");
     pref("font.minimum-size.el", 0);
     pref("font.size.variable.el", 16);
    -pref("font.size.fixed.el", 13);
    +pref("font.size.fixed.el", 14);
     
     pref("font.default.he", "sans-serif");
     pref("font.minimum-size.he", 0);
     pref("font.size.variable.he", 16);
    -pref("font.size.fixed.he", 13);
    +pref("font.size.fixed.he", 14);
     
     pref("font.default.ja", "sans-serif");
     pref("font.minimum-size.ja", 0);
     pref("font.size.variable.ja", 16);
    -pref("font.size.fixed.ja", 16);
    +pref("font.size.fixed.ja", 14);
     
     pref("font.default.ko", "sans-serif");
     pref("font.minimum-size.ko", 0);
     pref("font.size.variable.ko", 16);
    -pref("font.size.fixed.ko", 16);
    +pref("font.size.fixed.ko", 14);
     
     pref("font.default.th", "serif");
     pref("font.minimum-size.th", 0);
     pref("font.size.variable.th", 16);
    -pref("font.size.fixed.th", 13);
    +pref("font.size.fixed.th", 14);
     
     pref("font.default.x-cyrillic", "serif");
     pref("font.minimum-size.x-cyrillic", 0);
     pref("font.size.variable.x-cyrillic", 16);
    -pref("font.size.fixed.x-cyrillic", 13);
    +pref("font.size.fixed.x-cyrillic", 14);
     
     pref("font.default.x-devanagari", "serif");
     pref("font.minimum-size.x-devanagari", 0);
     pref("font.size.variable.x-devanagari", 16);
    -pref("font.size.fixed.x-devanagari", 13);
    +pref("font.size.fixed.x-devanagari", 14);
     
     pref("font.default.x-tamil", "serif");
     pref("font.minimum-size.x-tamil", 0);
     pref("font.size.variable.x-tamil", 16);
    -pref("font.size.fixed.x-tamil", 13);
    +pref("font.size.fixed.x-tamil", 14);
     
     pref("font.default.x-armn", "serif");
     pref("font.minimum-size.x-armn", 0);
     pref("font.size.variable.x-armn", 16);
    -pref("font.size.fixed.x-armn", 13);
    +pref("font.size.fixed.x-armn", 14);
     
     pref("font.default.x-beng", "serif");
     pref("font.minimum-size.x-beng", 0);
     pref("font.size.variable.x-beng", 16);
    -pref("font.size.fixed.x-beng", 13);
    +pref("font.size.fixed.x-beng", 14);
     
     pref("font.default.x-cans", "serif");
     pref("font.minimum-size.x-cans", 0);
     pref("font.size.variable.x-cans", 16);
    -pref("font.size.fixed.x-cans", 13);
    +pref("font.size.fixed.x-cans", 14);
     
     pref("font.default.x-ethi", "serif");
     pref("font.minimum-size.x-ethi", 0);
     pref("font.size.variable.x-ethi", 16);
    -pref("font.size.fixed.x-ethi", 13);
    +pref("font.size.fixed.x-ethi", 14);
     
     pref("font.default.x-geor", "serif");
     pref("font.minimum-size.x-geor", 0);
     pref("font.size.variable.x-geor", 16);
    -pref("font.size.fixed.x-geor", 13);
    +pref("font.size.fixed.x-geor", 14);
     
     pref("font.default.x-gujr", "serif");
     pref("font.minimum-size.x-gujr", 0);
     pref("font.size.variable.x-gujr", 16);
    -pref("font.size.fixed.x-gujr", 13);
    +pref("font.size.fixed.x-gujr", 14);
     
     pref("font.default.x-guru", "serif");
     pref("font.minimum-size.x-guru", 0);
     pref("font.size.variable.x-guru", 16);
    -pref("font.size.fixed.x-guru", 13);
    +pref("font.size.fixed.x-guru", 14);
     
     pref("font.default.x-khmr", "serif");
     pref("font.minimum-size.x-khmr", 0);
     pref("font.size.variable.x-khmr", 16);
    -pref("font.size.fixed.x-khmr", 13);
    +pref("font.size.fixed.x-khmr", 14);
     
     pref("font.default.x-mlym", "serif");
     pref("font.minimum-size.x-mlym", 0);
     pref("font.size.variable.x-mlym", 16);
    -pref("font.size.fixed.x-mlym", 13);
    +pref("font.size.fixed.x-mlym", 14);
     
     pref("font.default.x-orya", "serif");
     pref("font.minimum-size.x-orya", 0);
     pref("font.size.variable.x-orya", 16);
    -pref("font.size.fixed.x-orya", 13);
    +pref("font.size.fixed.x-orya", 14);
     
     pref("font.default.x-telu", "serif");
     pref("font.minimum-size.x-telu", 0);
     pref("font.size.variable.x-telu", 16);
    -pref("font.size.fixed.x-telu", 13);
    +pref("font.size.fixed.x-telu", 14);
     
     pref("font.default.x-knda", "serif");
     pref("font.minimum-size.x-knda", 0);
     pref("font.size.variable.x-knda", 16);
    -pref("font.size.fixed.x-knda", 13);
    +pref("font.size.fixed.x-knda", 14);
     
     pref("font.default.x-sinh", "serif");
     pref("font.minimum-size.x-sinh", 0);
     pref("font.size.variable.x-sinh", 16);
    -pref("font.size.fixed.x-sinh", 13);
    +pref("font.size.fixed.x-sinh", 14);
     
     pref("font.default.x-tibt", "serif");
     pref("font.minimum-size.x-tibt", 0);
     pref("font.size.variable.x-tibt", 16);
    -pref("font.size.fixed.x-tibt", 13);
    +pref("font.size.fixed.x-tibt", 14);
     
     pref("font.default.x-unicode", "serif");
     pref("font.minimum-size.x-unicode", 0);
     pref("font.size.variable.x-unicode", 16);
    -pref("font.size.fixed.x-unicode", 13);
    +pref("font.size.fixed.x-unicode", 14);
     
     pref("font.default.x-western", "serif");
     pref("font.minimum-size.x-western", 0);
     pref("font.size.variable.x-western", 16);
    -pref("font.size.fixed.x-western", 13);
    +pref("font.size.fixed.x-western", 14);
     
     pref("font.default.zh-CN", "sans-serif");
     pref("font.minimum-size.zh-CN", 0);
     pref("font.size.variable.zh-CN", 16);
    -pref("font.size.fixed.zh-CN", 16);
    +pref("font.size.fixed.zh-CN", 14);
     
     pref("font.default.zh-HK", "sans-serif");
     pref("font.minimum-size.zh-HK", 0);
     pref("font.size.variable.zh-HK", 16);
    -pref("font.size.fixed.zh-HK", 16);
    +pref("font.size.fixed.zh-HK", 14);
     
     pref("font.default.zh-TW", "sans-serif");
     pref("font.minimum-size.zh-TW", 0);
     pref("font.size.variable.zh-TW", 16);
    -pref("font.size.fixed.zh-TW", 16);
    +pref("font.size.fixed.zh-TW", 14);
     
     /*
      * A value greater than zero enables font size inflation for
    @@ -2677,191 +2677,191 @@
     pref("font.name.serif.ar", "Times New Roman");
     pref("font.name.sans-serif.ar", "Segoe UI");
     pref("font.name-list.sans-serif.ar", "Segoe UI, Tahoma, Arial");
    -pref("font.name.monospace.ar", "Courier New");
    +pref("font.name.monospace.ar", "Dejavu Sans Mono");
     pref("font.name.cursive.ar", "Comic Sans MS");
     
     pref("font.name.serif.el", "Times New Roman");
     pref("font.name.sans-serif.el", "Arial");
    -pref("font.name.monospace.el", "Courier New");
    +pref("font.name.monospace.el", "Dejavu Sans Mono");
     pref("font.name.cursive.el", "Comic Sans MS");
     
     pref("font.name.serif.he", "Narkisim");
     pref("font.name.sans-serif.he", "Arial");
    -pref("font.name.monospace.he", "Fixed Miriam Transparent");
    +pref("font.name.monospace.he", "Dejavu Sans Mono");
     pref("font.name.cursive.he", "Guttman Yad");
     pref("font.name-list.serif.he", "Narkisim, David");
    -pref("font.name-list.monospace.he", "Fixed Miriam Transparent, Miriam Fixed, Rod, Courier New");
    +pref("font.name-list.monospace.he", "Dejavu Sans Mono");
     pref("font.name-list.cursive.he", "Guttman Yad, Ktav, Arial");
     
     pref("font.name.serif.ja", "MS PMincho");
     pref("font.name.sans-serif.ja", "MS PGothic");
    -pref("font.name.monospace.ja", "MS Gothic");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     pref("font.name-list.serif.ja", "MS PMincho, MS Mincho, MS PGothic, MS Gothic,Meiryo");
     pref("font.name-list.sans-serif.ja", "MS PGothic, MS Gothic, MS PMincho, MS Mincho,Meiryo");
    -pref("font.name-list.monospace.ja", "MS Gothic, MS Mincho, MS PGothic, MS PMincho,Meiryo");
    +pref("font.name-list.monospace.ja", "Dejavu Sans Mono");
     
     pref("font.name.serif.ko", "Batang");
     pref("font.name.sans-serif.ko", "Gulim");
    -pref("font.name.monospace.ko", "GulimChe");
    +pref("font.name.monospace.ko", "Dejavu Sans Mono");
     pref("font.name.cursive.ko", "Gungsuh");
     
     pref("font.name-list.serif.ko", "Batang, Gulim");
     pref("font.name-list.sans-serif.ko", "Gulim");
    -pref("font.name-list.monospace.ko", "GulimChe");
    +pref("font.name-list.monospace.ko", "Dejavu Sans Mono");
     pref("font.name-list.cursive.ko", "Gungsuh");
     
     pref("font.name.serif.th", "Tahoma");
     pref("font.name.sans-serif.th", "Tahoma");
    -pref("font.name.monospace.th", "Tahoma");
    +pref("font.name.monospace.th", "Dejavu Sans Mono");
     pref("font.name.cursive.th", "Tahoma");
     
     pref("font.name.serif.x-cyrillic", "Times New Roman");
     pref("font.name.sans-serif.x-cyrillic", "Arial");
    -pref("font.name.monospace.x-cyrillic", "Courier New");
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
     pref("font.name.cursive.x-cyrillic", "Comic Sans MS");
     
     pref("font.name.serif.x-unicode", "Times New Roman");
     pref("font.name.sans-serif.x-unicode", "Arial");
    -pref("font.name.monospace.x-unicode", "Courier New");
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
     pref("font.name.cursive.x-unicode", "Comic Sans MS");
     
     pref("font.name.serif.x-western", "Times New Roman");
     pref("font.name.sans-serif.x-western", "Arial");
    -pref("font.name.monospace.x-western", "Courier New");
    +pref("font.name.monospace.x-western", "Dejavu Sans Mono");
     pref("font.name.cursive.x-western", "Comic Sans MS");
     
     pref("font.name.serif.zh-CN", "SimSun");
     pref("font.name.sans-serif.zh-CN", "Microsoft YaHei");
    -pref("font.name.monospace.zh-CN", "SimSun");
    +pref("font.name.monospace.zh-CN", "Dejavu Sans Mono");
     pref("font.name.cursive.zh-CN", "KaiTi");
     pref("font.name-list.serif.zh-CN", "MS Song, SimSun, SimSun-ExtB");
     pref("font.name-list.sans-serif.zh-CN", "Microsoft YaHei, SimHei, Arial Unicode MS");
    -pref("font.name-list.monospace.zh-CN", "MS Song, SimSun, SimSun-ExtB");
    +pref("font.name-list.monospace.zh-CN", "Dejavu Sans Mono");
     
     // Per Taiwanese users' demand. They don't want to use TC fonts for
     // rendering Latin letters. (bug 88579)
     pref("font.name.serif.zh-TW", "Times New Roman");
     pref("font.name.sans-serif.zh-TW", "Arial");
    -pref("font.name.monospace.zh-TW", "MingLiU");
    +pref("font.name.monospace.zh-TW", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-TW", "PMingLiu, MingLiU, MingLiU-ExtB");
     pref("font.name-list.sans-serif.zh-TW", "PMingLiU, MingLiU, MingLiU-ExtB");
    -pref("font.name-list.monospace.zh-TW", "MingLiU, MingLiU-ExtB");
    +pref("font.name-list.monospace.zh-TW", "Dejavu Sans Mono");
     
     // hkscsm3u.ttf (HKSCS-2001) :  http://www.microsoft.com/hk/hkscs
     // Hong Kong users have the same demand about glyphs for Latin letters (bug 88579)
     pref("font.name.serif.zh-HK", "Times New Roman");
     pref("font.name.sans-serif.zh-HK", "Arial");
    -pref("font.name.monospace.zh-HK", "MingLiu_HKSCS");
    +pref("font.name.monospace.zh-HK", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-HK", "MingLiu_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
     pref("font.name-list.sans-serif.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
    -pref("font.name-list.monospace.zh-HK", "MingLiU_HKSCS, Ming(for ISO10646), MingLiU, MingLiU_HKSCS-ExtB");
    +pref("font.name-list.monospace.zh-HK", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-devanagari", "Kokila");
     pref("font.name.sans-serif.x-devanagari", "Nirmala UI");
    -pref("font.name.monospace.x-devanagari", "Mangal");
    +pref("font.name.monospace.x-devanagari", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-devanagari", "Kokila, Raghindi");
     pref("font.name-list.sans-serif.x-devanagari", "Nirmala UI, Mangal");
    -pref("font.name-list.monospace.x-devanagari", "Mangal, Nirmala UI");
    +pref("font.name-list.monospace.x-devanagari", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-tamil", "Latha");
     pref("font.name.sans-serif.x-tamil", "Code2000");
    -pref("font.name.monospace.x-tamil", "Latha");
    +pref("font.name.monospace.x-tamil", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-tamil", "Latha, Code2000");
    -pref("font.name-list.monospace.x-tamil", "Latha, Code2000");
    +pref("font.name-list.monospace.x-tamil", "Dejavu Sans Mono");
     
     # http://www.alanwood.net/unicode/fonts.html
     
     pref("font.name.serif.x-armn", "Sylfaen");
     pref("font.name.sans-serif.x-armn", "Arial AMU");
    -pref("font.name.monospace.x-armn", "Arial AMU");
    +pref("font.name.monospace.x-armn", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-armn", "Sylfaen,Arial Unicode MS, Code2000");
    -pref("font.name-list.monospace.x-armn", "Arial AMU, Arial Unicode MS, Code2000");
    +pref("font.name-list.monospace.x-armn", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-beng", "Vrinda");
     pref("font.name.sans-serif.x-beng", "Vrinda");
    -pref("font.name.monospace.x-beng", "Mitra Mono");
    +pref("font.name.monospace.x-beng", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-beng", "Vrinda, Akaash, Likhan, Ekushey Punarbhaba, Code2000, Arial Unicode MS");
     pref("font.name-list.sans-serif.x-beng", "Vrinda, Akaash, Likhan, Ekushey Punarbhaba, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-beng", "Likhan, Mukti Narrow, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-beng", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-cans", "Aboriginal Serif");
     pref("font.name.sans-serif.x-cans", "Aboriginal Sans");
    -pref("font.name.monospace.x-cans", "Aboriginal Sans");
    +pref("font.name.monospace.x-cans", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-cans", "Aboriginal Serif, BJCree Uni");
    -pref("font.name-list.monospace.x-cans", "Aboriginal Sans, OskiDakelh, Pigiarniq, Uqammaq");
    +pref("font.name-list.monospace.x-cans", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-ethi", "Visual Geez Unicode");
     pref("font.name.sans-serif.x-ethi", "GF Zemen Unicode");
     pref("font.name.cursive.x-ethi", "Visual Geez Unicode Title");
    -pref("font.name.monospace.x-ethi", "Ethiopia Jiret");
    +pref("font.name.monospace.x-ethi", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-ethi", "Visual Geez Unicode, Visual Geez Unicode Agazian, Code2000");
    -pref("font.name-list.monospace.x-ethi", "Ethiopia Jiret, Code2000");
    +pref("font.name-list.monospace.x-ethi", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-geor", "Sylfaen");
     pref("font.name.sans-serif.x-geor", "BPG Classic 99U");
    -pref("font.name.monospace.x-geor", "Code2000");
    +pref("font.name.monospace.x-geor", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-geor", "Sylfaen, BPG Paata Khutsuri U, TITUS Cyberbit Basic");
    -pref("font.name-list.monospace.x-geor", "BPG Classic 99U, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-geor", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-gujr", "Shruti");
     pref("font.name.sans-serif.x-gujr", "Shruti");
    -pref("font.name.monospace.x-gujr", "Code2000");
    +pref("font.name.monospace.x-gujr", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-gujr", "Shruti, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-gujr", "Code2000, Shruti, Arial Unicode MS");
    +pref("font.name-list.monospace.x-gujr", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-guru", "Raavi");
     pref("font.name.sans-serif.x-guru", "Code2000");
    -pref("font.name.monospace.x-guru", "Code2000");
    +pref("font.name.monospace.x-guru", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-guru", "Raavi, Saab, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-guru", "Code2000, Raavi, Saab, Arial Unicode MS");
    +pref("font.name-list.monospace.x-guru", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-khmr", "PhnomPenh OT");
     pref("font.name.sans-serif.x-khmr", "Khmer OS");
    -pref("font.name.monospace.x-khmr", "Code2000");
    +pref("font.name.monospace.x-khmr", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-khmr", "PhnomPenh OT,.Mondulkiri U GR 1.5, Khmer OS");
    -pref("font.name-list.monospace.x-khmr", "Code2000, Khmer OS, Khmer OS System");
    +pref("font.name-list.monospace.x-khmr", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-mlym", "Rachana_w01");
     pref("font.name.sans-serif.x-mlym", "Rachana_w01");
    -pref("font.name.monospace.x-mlym", "Rachana_w01");
    +pref("font.name.monospace.x-mlym", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-mlym", "AnjaliOldLipi, Kartika, ThoolikaUnicode, Code2000, Arial Unicode MS");
     pref("font.name-list.sans-serif.x-mlym", "AnjaliOldLipi, Kartika, ThoolikaUnicode, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-mlym", "AnjaliOldLipi, Kartika, ThoolikaUnicode, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-mlym", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-orya", "ori1Uni");
     pref("font.name.sans-serif.x-orya", "ori1Uni");
    -pref("font.name.monospace.x-orya", "ori1Uni");
    +pref("font.name.monospace.x-orya", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-orya", "Kalinga, ori1Uni, Code2000, Arial Unicode MS");
     pref("font.name-list.sans-serif.x-orya", "Kalinga, ori1Uni, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-orya", "Kalinga, ori1Uni, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-orya", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-telu", "Gautami");
     pref("font.name.sans-serif.x-telu", "Gautami");
    -pref("font.name.monospace.x-telu", "Gautami");
    +pref("font.name.monospace.x-telu", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-telu", "Gautami, Akshar Unicode, Code2000, Arial Unicode MS");
     pref("font.name-list.sans-serif.x-telu", "Gautami, Akshar Unicode, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-telu", "Gautami, Akshar Unicode, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-telu", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-knda", "Tunga");
     pref("font.name.sans-serif.x-knda", "Tunga");
    -pref("font.name.monospace.x-knda", "Tunga");
    +pref("font.name.monospace.x-knda", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-knda", "Tunga, AksharUnicode, Code2000, Arial Unicode MS");
     pref("font.name-list.sans-serif.x-knda", "Tunga, AksharUnicode, Code2000, Arial Unicode MS");
    -pref("font.name-list.monospace.x-knda", "Tunga, AksharUnicode, Code2000, Arial Unicode MS");
    +pref("font.name-list.monospace.x-knda", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-sinh", "Iskoola Pota");
     pref("font.name.sans-serif.x-sinh", "Iskoola Pota");
    -pref("font.name.monospace.x-sinh", "Iskoola Pota");
    +pref("font.name.monospace.x-sinh", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-sinh", "Iskoola Pota, AksharUnicode");
     pref("font.name-list.sans-serif.x-sinh", "Iskoola Pota, AksharUnicode");
    -pref("font.name-list.monospace.x-sinh", "Iskoola Pota, AksharUnicode");
    +pref("font.name-list.monospace.x-sinh", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-tibt", "Tibetan Machine Uni");
     pref("font.name.sans-serif.x-tibt", "Tibetan Machine Uni");
    -pref("font.name.monospace.x-tibt", "Tibetan Machine Uni");
    +pref("font.name.monospace.x-tibt", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-tibt", "Tibetan Machine Uni, Jomolhari, Microsoft Himalaya");
     pref("font.name-list.sans-serif.x-tibt", "Tibetan Machine Uni, Jomolhari, Microsoft Himalaya");
    -pref("font.name-list.monospace.x-tibt", "Tibetan Machine Uni, Jomolhari, Microsoft Himalaya");
    +pref("font.name-list.monospace.x-tibt", "Dejavu Sans Mono");
     
     pref("font.minimum-size.th", 10);
     
    @@ -3027,105 +3027,105 @@
     
     pref("font.name.serif.ar", "Al Bayan");
     pref("font.name.sans-serif.ar", "Geeza Pro");
    -pref("font.name.monospace.ar", "Geeza Pro");
    +pref("font.name.monospace.ar", "Dejavu Sans Mono");
     pref("font.name.cursive.ar", "DecoType Naskh");
     pref("font.name.fantasy.ar", "KufiStandardGK");
     pref("font.name-list.serif.ar", "Al Bayan");
     pref("font.name-list.sans-serif.ar", "Geeza Pro");
    -pref("font.name-list.monospace.ar", "Geeza Pro");
    +pref("font.name-list.monospace.ar", "Dejavu Sans Mono");
     pref("font.name-list.cursive.ar", "DecoType Naskh");
     pref("font.name-list.fantasy.ar", "KufiStandardGK");
     
     pref("font.name.serif.el", "Times");
     pref("font.name.sans-serif.el", "Helvetica");
    -pref("font.name.monospace.el", "Courier New");
    +pref("font.name.monospace.el", "Dejavu Sans Mono");
     pref("font.name.cursive.el", "Lucida Grande");
     pref("font.name.fantasy.el", "Lucida Grande");
     pref("font.name-list.serif.el", "Times,Times New Roman");
     pref("font.name-list.sans-serif.el", "Helvetica,Lucida Grande");
    -pref("font.name-list.monospace.el", "Courier New,Lucida Grande");
    +pref("font.name-list.monospace.el", "Dejavu Sans Mono");
     pref("font.name-list.cursive.el", "Times,Lucida Grande");
     pref("font.name-list.fantasy.el", "Times,Lucida Grande");
     
     pref("font.name.serif.he", "Times New Roman");
     pref("font.name.sans-serif.he", "Arial");
    -pref("font.name.monospace.he", "Courier New");
    +pref("font.name.monospace.he", "Dejavu Sans Mono");
     pref("font.name.cursive.he", "Times New Roman");
     pref("font.name.fantasy.he", "Times New Roman");
     pref("font.name-list.serif.he", "Times New Roman");
     pref("font.name-list.sans-serif.he", "Arial");
    -pref("font.name-list.monospace.he", "Courier New");
    +pref("font.name-list.monospace.he", "Dejavu Sans Mono");
     pref("font.name-list.cursive.he", "Times New Roman");
     pref("font.name-list.fantasy.he", "Times New Roman");
     
     pref("font.name.serif.ja", "Hiragino Mincho ProN");
     pref("font.name.sans-serif.ja", "Hiragino Kaku Gothic ProN");
    -pref("font.name.monospace.ja", "Osaka-Mono");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     pref("font.name-list.serif.ja", "Hiragino Mincho ProN,Hiragino Mincho Pro");
     pref("font.name-list.sans-serif.ja", "Hiragino Kaku Gothic ProN,Hiragino Kaku Gothic Pro");
    -pref("font.name-list.monospace.ja", "Osaka-Mono");
    +pref("font.name-list.monospace.ja", "Dejavu Sans Mono");
     
     pref("font.name.serif.ko", "AppleMyungjo");
     pref("font.name.sans-serif.ko", "Apple SD Gothic Neo");
    -pref("font.name.monospace.ko", "Apple SD Gothic Neo");
    +pref("font.name.monospace.ko", "Dejavu Sans Mono");
     pref("font.name-list.serif.ko", "AppleMyungjo");
     pref("font.name-list.sans-serif.ko", "Apple SD Gothic Neo,AppleGothic");
    -pref("font.name-list.monospace.ko", "Apple SD Gothic Neo,AppleGothic");
    +pref("font.name-list.monospace.ko", "Dejavu Sans Mono");
     
     pref("font.name.serif.th", "Thonburi");
     pref("font.name.sans-serif.th", "Thonburi");
    -pref("font.name.monospace.th", "Ayuthaya");
    +pref("font.name.monospace.th", "Dejavu Sans Mono");
     pref("font.name-list.serif.th", "Thonburi");
     pref("font.name-list.sans-serif.th", "Thonburi");
    -pref("font.name-list.monospace.th", "Ayuthaya");
    +pref("font.name-list.monospace.th", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-armn", "Mshtakan");
     pref("font.name.sans-serif.x-armn", "Mshtakan");
    -pref("font.name.monospace.x-armn", "Mshtakan");
    +pref("font.name.monospace.x-armn", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-armn", "Mshtakan");
     pref("font.name-list.sans-serif.x-armn", "Mshtakan");
    -pref("font.name-list.monospace.x-armn", "Mshtakan");
    +pref("font.name-list.monospace.x-armn", "Dejavu Sans Mono");
     
     // SolaimanLipi, Rupali http://ekushey.org/?page/mac_download
     pref("font.name.serif.x-beng", "Bangla MN");
     pref("font.name.sans-serif.x-beng", "Bangla Sangam MN");
    -pref("font.name.monospace.x-beng", "Bangla Sangam MN");
    +pref("font.name.monospace.x-beng", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-beng", "Bangla MN");
     pref("font.name-list.sans-serif.x-beng", "Bangla Sangam MN");
    -pref("font.name-list.monospace.x-beng", "Bangla Sangam MN");
    +pref("font.name-list.monospace.x-beng", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-cans", "Euphemia UCAS");
     pref("font.name.sans-serif.x-cans", "Euphemia UCAS");
    -pref("font.name.monospace.x-cans", "Euphemia UCAS");
    +pref("font.name.monospace.x-cans", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-cans", "Euphemia UCAS");
     pref("font.name-list.sans-serif.x-cans", "Euphemia UCAS");
    -pref("font.name-list.monospace.x-cans", "Euphemia UCAS");
    +pref("font.name-list.monospace.x-cans", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-cyrillic", "Times");
     pref("font.name.sans-serif.x-cyrillic", "Helvetica");
    -pref("font.name.monospace.x-cyrillic", "Monaco");
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
     pref("font.name.cursive.x-cyrillic", "Geneva");
     pref("font.name.fantasy.x-cyrillic", "Charcoal CY");
     pref("font.name-list.serif.x-cyrillic", "Times,Times New Roman");
     pref("font.name-list.sans-serif.x-cyrillic", "Helvetica,Arial");
    -pref("font.name-list.monospace.x-cyrillic", "Monaco,Courier New");
    +pref("font.name-list.monospace.x-cyrillic", "Dejavu Sans Mono");
     pref("font.name-list.cursive.x-cyrillic", "Geneva");
     pref("font.name-list.fantasy.x-cyrillic", "Charcoal CY");
     
     pref("font.name.serif.x-devanagari", "Devanagari MT");
     pref("font.name.sans-serif.x-devanagari", "Devanagari Sangam MN");
    -pref("font.name.monospace.x-devanagari", "Devanagari Sangam MN");
    +pref("font.name.monospace.x-devanagari", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-devanagari", "Devanagari MT");
     pref("font.name-list.sans-serif.x-devanagari", "Devanagari Sangam MN,Devanagari MT");
    -pref("font.name-list.monospace.x-devanagari", "Devanagari Sangam MN,Devanagari MT");
    +pref("font.name-list.monospace.x-devanagari", "Dejavu Sans Mono");
     
     // Abyssinica SIL http://scripts.sil.org/AbyssinicaSIL_Download
     pref("font.name.serif.x-ethi", "Kefa");
     pref("font.name.sans-serif.x-ethi", "Kefa");
    -pref("font.name.monospace.x-ethi", "Kefa");
    +pref("font.name.monospace.x-ethi", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-ethi", "Kefa,Abyssinica SIL");
     pref("font.name-list.sans-serif.x-ethi", "Kefa,Abyssinica SIL");
    -pref("font.name-list.monospace.x-ethi", "Kefa,Abyssinica SIL");
    +pref("font.name-list.monospace.x-ethi", "Dejavu Sans Mono");
     
     // no suitable fonts for georgian ship with mac os x
     // however some can be freely downloaded
    @@ -3133,126 +3133,126 @@
     // Zuzumbo http://homepage.mac.com/rsiradze/FileSharing91.html
     pref("font.name.serif.x-geor", "TITUS Cyberbit Basic");
     pref("font.name.sans-serif.x-geor", "Zuzumbo");
    -pref("font.name.monospace.x-geor", "Zuzumbo");
    +pref("font.name.monospace.x-geor", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-geor", "TITUS Cyberbit Basic");
     pref("font.name-list.sans-serif.x-geor", "Zuzumbo");
    -pref("font.name-list.monospace.x-geor", "Zuzumbo");
    +pref("font.name-list.monospace.x-geor", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-gujr", "Gujarati MT");
     pref("font.name.sans-serif.x-gujr", "Gujarati Sangam MN");
    -pref("font.name.monospace.x-gujr", "Gujarati Sangam MN");
    +pref("font.name.monospace.x-gujr", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-gujr", "Gujarati MT");
     pref("font.name-list.sans-serif.x-gujr", "Gujarati Sangam MN,Gujarati MT");
    -pref("font.name-list.monospace.x-gujr", "Gujarati Sangam MN,Gujarati MT");
    +pref("font.name-list.monospace.x-gujr", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-guru", "Gurmukhi MT");
     pref("font.name.sans-serif.x-guru", "Gurmukhi MT");
    -pref("font.name.monospace.x-guru", "Gurmukhi MT");
    +pref("font.name.monospace.x-guru", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-guru", "Gurmukhi MT");
     pref("font.name-list.sans-serif.x-guru", "Gurmukhi MT");
    -pref("font.name-list.monospace.x-guru", "Gurmukhi MT");
    +pref("font.name-list.monospace.x-guru", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-khmr", "Khmer MN");
     pref("font.name.sans-serif.x-khmr", "Khmer Sangam MN");
    -pref("font.name.monospace.x-khmr", "Khmer Sangam MN");
    +pref("font.name.monospace.x-khmr", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-khmr", "Khmer MN");
     pref("font.name-list.sans-serif.x-khmr", "Khmer Sangam MN");
    -pref("font.name-list.monospace.x-khmr", "Khmer Sangam MN");
    +pref("font.name-list.monospace.x-khmr", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-mlym", "Malayalam MN");
     pref("font.name.sans-serif.x-mlym", "Malayalam Sangam MN");
    -pref("font.name.monospace.x-mlym", "Malayalam Sangam MN");
    +pref("font.name.monospace.x-mlym", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-mlym", "Malayalam MN");
     pref("font.name-list.sans-serif.x-mlym", "Malayalam Sangam MN");
    -pref("font.name-list.monospace.x-mlym", "Malayalam Sangam MN");
    +pref("font.name-list.monospace.x-mlym", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-orya", "Oriya MN");
     pref("font.name.sans-serif.x-orya", "Oriya Sangam MN");
    -pref("font.name.monospace.x-orya", "Oriya Sangam MN");
    +pref("font.name.monospace.x-orya", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-orya", "Oriya MN");
     pref("font.name-list.sans-serif.x-orya", "Oriya Sangam MN");
    -pref("font.name-list.monospace.x-orya", "Oriya Sangam MN");
    +pref("font.name-list.monospace.x-orya", "Dejavu Sans Mono");
     
     // Pothana http://web.nickshanks.com/typography/telugu/
     pref("font.name.serif.x-telu", "Telugu MN");
     pref("font.name.sans-serif.x-telu", "Telugu Sangam MN");
    -pref("font.name.monospace.x-telu", "Telugu Sangam MN");
    +pref("font.name.monospace.x-telu", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-telu", "Telugu MN,Pothana");
     pref("font.name-list.sans-serif.x-telu", "Telugu Sangam MN,Pothana");
    -pref("font.name-list.monospace.x-telu", "Telugu Sangam MN,Pothana");
    +pref("font.name-list.monospace.x-telu", "Dejavu Sans Mono");
     
     // Kedage http://web.nickshanks.com/typography/kannada/
     pref("font.name.serif.x-knda", "Kannada MN");
     pref("font.name.sans-serif.x-knda", "Kannada Sangam MN");
    -pref("font.name.monospace.x-knda", "Kannada Sangam MN");
    +pref("font.name.monospace.x-knda", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-knda", "Kannada MN,Kedage");
     pref("font.name-list.sans-serif.x-knda", "Kannada Sangam MN,Kedage");
    -pref("font.name-list.monospace.x-knda", "Kannada Sangam MN,Kedage");
    +pref("font.name-list.monospace.x-knda", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-sinh", "Sinhala MN");
     pref("font.name.sans-serif.x-sinh", "Sinhala Sangam MN");
    -pref("font.name.monospace.x-sinh", "Sinhala Sangam MN");
    +pref("font.name.monospace.x-sinh", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-sinh", "Sinhala MN");
     pref("font.name-list.sans-serif.x-sinh", "Sinhala Sangam MN");
    -pref("font.name-list.monospace.x-sinh", "Sinhala Sangam MN");
    +pref("font.name-list.monospace.x-sinh", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-tamil", "InaiMathi");
     pref("font.name.sans-serif.x-tamil", "InaiMathi");
    -pref("font.name.monospace.x-tamil", "InaiMathi");
    +pref("font.name.monospace.x-tamil", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-tamil", "InaiMathi");
     pref("font.name-list.sans-serif.x-tamil", "InaiMathi");
    -pref("font.name-list.monospace.x-tamil", "InaiMathi");
    +pref("font.name-list.monospace.x-tamil", "Dejavu Sans Mono");
     
     // Kailasa ships with mac os x >= 10.5
     pref("font.name.serif.x-tibt", "Kailasa");
     pref("font.name.sans-serif.x-tibt", "Kailasa");
    -pref("font.name.monospace.x-tibt", "Kailasa");
    +pref("font.name.monospace.x-tibt", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-tibt", "Kailasa");
     pref("font.name-list.sans-serif.x-tibt", "Kailasa");
    -pref("font.name-list.monospace.x-tibt", "Kailasa");
    +pref("font.name-list.monospace.x-tibt", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-unicode", "Times");
     pref("font.name.sans-serif.x-unicode", "Helvetica");
    -pref("font.name.monospace.x-unicode", "Courier");
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
     pref("font.name.cursive.x-unicode", "Apple Chancery");
     pref("font.name.fantasy.x-unicode", "Papyrus");
     pref("font.name-list.serif.x-unicode", "Times");
     pref("font.name-list.sans-serif.x-unicode", "Helvetica");
    -pref("font.name-list.monospace.x-unicode", "Courier");
    +pref("font.name-list.monospace.x-unicode", "Dejavu Sans Mono");
     pref("font.name-list.cursive.x-unicode", "Apple Chancery");
     pref("font.name-list.fantasy.x-unicode", "Papyrus");
     
     pref("font.name.serif.x-western", "Times");
     pref("font.name.sans-serif.x-western", "Helvetica");
    -pref("font.name.monospace.x-western", "Courier");
    +pref("font.name.monospace.x-western", "Dejavu Sans Mono");
     pref("font.name.cursive.x-western", "Apple Chancery");
     pref("font.name.fantasy.x-western", "Papyrus");
     pref("font.name-list.serif.x-western", "Times,Times New Roman");
     pref("font.name-list.sans-serif.x-western", "Helvetica,Arial");
    -pref("font.name-list.monospace.x-western", "Courier,Courier New");
    +pref("font.name-list.monospace.x-western", "Dejavu Sans Mono");
     pref("font.name-list.cursive.x-western", "Apple Chancery");
     pref("font.name-list.fantasy.x-western", "Papyrus");
     
     pref("font.name.serif.zh-CN", "Times");
     pref("font.name.sans-serif.zh-CN", "Helvetica");
    -pref("font.name.monospace.zh-CN", "Courier");
    +pref("font.name.monospace.zh-CN", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-CN", "Times,STSong,Heiti SC");
     pref("font.name-list.sans-serif.zh-CN", "Helvetica,STHeiti,Heiti SC");
    -pref("font.name-list.monospace.zh-CN", "Courier,STHeiti,Heiti SC");
    +pref("font.name-list.monospace.zh-CN", "Dejavu Sans Mono");
     
     pref("font.name.serif.zh-TW", "Times");
     pref("font.name.sans-serif.zh-TW", "Helvetica");
    -pref("font.name.monospace.zh-TW", "Courier");
    +pref("font.name.monospace.zh-TW", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-TW", "Times,LiSong Pro,Heiti TC");
     pref("font.name-list.sans-serif.zh-TW", "Helvetica,Heiti TC,LiHei Pro");
    -pref("font.name-list.monospace.zh-TW", "Courier,Heiti TC,LiHei Pro");
    +pref("font.name-list.monospace.zh-TW", "Dejavu Sans Mono");
     
     pref("font.name.serif.zh-HK", "Times");
     pref("font.name.sans-serif.zh-HK", "Helvetica");
    -pref("font.name.monospace.zh-HK", "Courier");
    +pref("font.name.monospace.zh-HK", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-HK", "Times,LiSong Pro,Heiti TC");
     pref("font.name-list.sans-serif.zh-HK", "Helvetica,Heiti TC,LiHei Pro");
    -pref("font.name-list.monospace.zh-HK", "Courier,Heiti TC,LiHei Pro");
    +pref("font.name-list.monospace.zh-HK", "Dejavu Sans Mono");
     
     // XP_MACOSX changes to default font sizes
     pref("font.minimum-size.th", 10);
    @@ -3439,55 +3439,55 @@
     
     // font names
     
    -pref("font.size.fixed.ar", 12);
    +pref("font.size.fixed.ar", 14);
     
     pref("font.name.serif.el", "serif");
     pref("font.name.sans-serif.el", "sans-serif");
    -pref("font.name.monospace.el", "monospace");
    -pref("font.size.fixed.el", 12);
    +pref("font.name.monospace.el", "Dejavu Sans Mono");
    +pref("font.size.fixed.el", 14);
     
     pref("font.name.serif.he", "serif");
     pref("font.name.sans-serif.he", "sans-serif");
    -pref("font.name.monospace.he", "monospace");
    -pref("font.size.fixed.he", 12);
    +pref("font.name.monospace.he", "Dejavu Sans Mono");
    +pref("font.size.fixed.he", 14);
     
     pref("font.name.serif.ja", "serif");
     pref("font.name.sans-serif.ja", "sans-serif");
    -pref("font.name.monospace.ja", "monospace");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     
     pref("font.name.serif.ko", "serif");
     pref("font.name.sans-serif.ko", "sans-serif");
    -pref("font.name.monospace.ko", "monospace");
    +pref("font.name.monospace.ko", "Dejavu Sans Mono");
     
     pref("font.name.serif.th", "serif");
     pref("font.name.sans-serif.th", "sans-serif");
     pref("font.minimum-size.th", 13);
    -pref("font.name.monospace.th", "monospace");
    +pref("font.name.monospace.th", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-cyrillic", "serif");
     pref("font.name.sans-serif.x-cyrillic", "sans-serif");
    -pref("font.name.monospace.x-cyrillic", "monospace");
    -pref("font.size.fixed.x-cyrillic", 12);
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
    +pref("font.size.fixed.x-cyrillic", 14);
     
     pref("font.name.serif.x-unicode", "serif");
     pref("font.name.sans-serif.x-unicode", "sans-serif");
    -pref("font.name.monospace.x-unicode", "monospace");
    -pref("font.size.fixed.x-unicode", 12);
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
    +pref("font.size.fixed.x-unicode", 14);
     
     pref("font.name.serif.x-western", "serif");
     pref("font.name.sans-serif.x-western", "sans-serif");
    -pref("font.name.monospace.x-western", "monospace");
    -pref("font.size.fixed.x-western", 12);
    +pref("font.name.monospace.x-western", "Dejavu Sans Mono");
    +pref("font.size.fixed.x-western", 14);
     
     pref("font.name.serif.zh-CN", "serif");
     pref("font.name.sans-serif.zh-CN", "sans-serif");
    -pref("font.name.monospace.zh-CN", "monospace");
    +pref("font.name.monospace.zh-CN", "Dejavu Sans Mono");
     
     // ming_uni.ttf (HKSCS-2001)
     // http://www.info.gov.hk/digital21/eng/hkscs/download/uime.exe
     pref("font.name.serif.zh-HK", "serif");
     pref("font.name.sans-serif.zh-HK", "sans-serif");
    -pref("font.name.monospace.zh-HK", "monospace");
    +pref("font.name.monospace.zh-HK", "Dejavu Sans Mono");
     
     // zh-TW
     
    @@ -3523,21 +3523,21 @@
     
     #if defined(ANDROID) || defined(MOZ_B2G)
     
    -pref("font.size.fixed.ar", 12);
    +pref("font.size.fixed.ar", 14);
     
     pref("font.default.el", "sans-serif");
    -pref("font.size.fixed.el", 12);
    +pref("font.size.fixed.el", 14);
     
    -pref("font.size.fixed.he", 12);
    +pref("font.size.fixed.he", 14);
     
     pref("font.default.x-cyrillic", "sans-serif");
    -pref("font.size.fixed.x-cyrillic", 12);
    +pref("font.size.fixed.x-cyrillic", 14);
     
     pref("font.default.x-unicode", "sans-serif");
    -pref("font.size.fixed.x-unicode", 12);
    +pref("font.size.fixed.x-unicode", 14);
     
     pref("font.default.x-western", "sans-serif");
    -pref("font.size.fixed.x-western", 12);
    +pref("font.size.fixed.x-western", 14);
     
     # ANDROID || MOZ_B2G
     #endif
    @@ -3551,53 +3551,53 @@
     
     pref("font.name.serif.el", "Droid Serif"); // not Charis SIL Compact, only has a few Greek chars
     pref("font.name.sans-serif.el", "Fira Sans");
    -pref("font.name.monospace.el", "Fira Mono");
    +pref("font.name.monospace.el", "Dejavu Sans Mono");
     
     pref("font.name.serif.he", "Charis SIL Compact");
     pref("font.name.sans-serif.he", "Fira Sans");
    -pref("font.name.monospace.he", "Fira Mono");
    +pref("font.name.monospace.he", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.he", "Droid Sans Hebrew, Fira Sans");
     
     pref("font.name.serif.ja", "Charis SIL Compact");
     pref("font.name.sans-serif.ja", "Fira Sans");
    -pref("font.name.monospace.ja", "MotoyaLMaru");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.ja", "Fira Sans, MotoyaLMaru, MotoyaLCedar, Droid Sans Japanese");
    -pref("font.name-list.monospace.ja", "MotoyaLMaru, MotoyaLCedar, Fira Mono");
    +pref("font.name-list.monospace.ja", "Dejavu Sans Mono");
     
     pref("font.name.serif.ko", "Charis SIL Compact");
     pref("font.name.sans-serif.ko", "Fira Sans");
    -pref("font.name.monospace.ko", "Fira Mono");
    +pref("font.name.monospace.ko", "Dejavu Sans Mono");
     
     pref("font.name.serif.th", "Charis SIL Compact");
     pref("font.name.sans-serif.th", "Fira Sans");
    -pref("font.name.monospace.th", "Fira Mono");
    +pref("font.name.monospace.th", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.th", "Fira Sans, Noto Sans Thai, Droid Sans Thai");
     
     pref("font.name.serif.x-cyrillic", "Charis SIL Compact");
     pref("font.name.sans-serif.x-cyrillic", "Fira Sans");
    -pref("font.name.monospace.x-cyrillic", "Fira Mono");
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-unicode", "Charis SIL Compact");
     pref("font.name.sans-serif.x-unicode", "Fira Sans");
    -pref("font.name.monospace.x-unicode", "Fira Mono");
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
     
     pref("font.name.serif.x-western", "Charis SIL Compact");
     pref("font.name.sans-serif.x-western", "Fira Sans");
    -pref("font.name.monospace.x-western", "Fira Mono");
    +pref("font.name.monospace.x-western", "Dejavu Sans Mono");
     
     pref("font.name.serif.zh-CN", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-CN", "Fira Sans");
    -pref("font.name.monospace.zh-CN", "Fira Mono");
    +pref("font.name.monospace.zh-CN", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.zh-CN", "Fira Sans,Droid Sans Fallback");
     
     pref("font.name.serif.zh-HK", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-HK", "Fira Sans");
    -pref("font.name.monospace.zh-HK", "Fira Mono");
    +pref("font.name.monospace.zh-HK", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.zh-HK", "Fira Sans,Droid Sans Fallback");
     
     pref("font.name.serif.zh-TW", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-TW", "Fira Sans");
    -pref("font.name.monospace.zh-TW", "Fira Mono");
    +pref("font.name.monospace.zh-TW", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.zh-TW", "Fira Sans,Droid Sans Fallback");
     
     #elif defined(ANDROID)
    @@ -3607,71 +3607,71 @@
     
     pref("font.name.serif.el", "Droid Serif"); // not Charis SIL Compact, only has a few Greek chars
     pref("font.name.sans-serif.el", "Clear Sans");
    -pref("font.name.monospace.el", "Droid Sans Mono");
    +pref("font.name.monospace.el", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.el", "Clear Sans, Roboto, Droid Sans");
     
     pref("font.name.serif.he", "Droid Serif");
     pref("font.name.sans-serif.he", "Clear Sans");
    -pref("font.name.monospace.he", "Droid Sans Mono");
    +pref("font.name.monospace.he", "Dejavu Sans Mono");
     pref("font.name-list.sans-serif.he", "Droid Sans Hebrew, Clear Sans, Droid Sans");
     
     pref("font.name.serif.ja", "Charis SIL Compact");
     pref("font.name.sans-serif.ja", "Clear Sans");
    -pref("font.name.monospace.ja", "MotoyaLMaru");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     pref("font.name-list.serif.ja", "Droid Serif");
     pref("font.name-list.sans-serif.ja", "Clear Sans, Roboto, Droid Sans, MotoyaLMaru, MotoyaLCedar, Noto Sans JP, Droid Sans Japanese");
    -pref("font.name-list.monospace.ja", "MotoyaLMaru, MotoyaLCedar, Droid Sans Mono");
    +pref("font.name-list.monospace.ja", "Dejavu Sans Mono");
     
     pref("font.name.serif.ko", "Charis SIL Compact");
     pref("font.name.sans-serif.ko", "Clear Sans");
    -pref("font.name.monospace.ko", "Droid Sans Mono");
    +pref("font.name.monospace.ko", "Dejavu Sans Mono");
     pref("font.name-list.serif.ko", "Droid Serif, HYSerif");
     pref("font.name-list.sans-serif.ko", "SmartGothic, NanumGothic, Noto Sans KR, DroidSansFallback, Droid Sans Fallback");
     
     pref("font.name.serif.th", "Charis SIL Compact");
     pref("font.name.sans-serif.th", "Clear Sans");
    -pref("font.name.monospace.th", "Droid Sans Mono");
    +pref("font.name.monospace.th", "Dejavu Sans Mono");
     pref("font.name-list.serif.th", "Droid Serif");
     pref("font.name-list.sans-serif.th", "Droid Sans Thai, Clear Sans, Droid Sans");
     
     pref("font.name.serif.x-cyrillic", "Charis SIL Compact");
     pref("font.name.sans-serif.x-cyrillic", "Clear Sans");
    -pref("font.name.monospace.x-cyrillic", "Droid Sans Mono");
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-cyrillic", "Droid Serif");
     pref("font.name-list.sans-serif.x-cyrillic", "Clear Sans, Roboto, Droid Sans");
     
     pref("font.name.serif.x-unicode", "Charis SIL Compact");
     pref("font.name.sans-serif.x-unicode", "Clear Sans");
    -pref("font.name.monospace.x-unicode", "Droid Sans Mono");
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-unicode", "Droid Serif");
     pref("font.name-list.sans-serif.x-unicode", "Clear Sans, Roboto, Droid Sans");
     
     pref("font.name.serif.x-western", "Charis SIL Compact");
     pref("font.name.sans-serif.x-western", "Clear Sans");
    -pref("font.name.monospace.x-western", "Droid Sans Mono");
    +pref("font.name.monospace.x-western", "Dejavu Sans Mono");
     pref("font.name-list.serif.x-western", "Droid Serif");
     pref("font.name-list.sans-serif.x-western", "Clear Sans, Roboto, Droid Sans");
     
     pref("font.name.serif.zh-CN", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-CN", "Clear Sans");
    -pref("font.name.monospace.zh-CN", "Droid Sans Mono");
    +pref("font.name.monospace.zh-CN", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-CN", "Droid Serif, Droid Sans Fallback");
     pref("font.name-list.sans-serif.zh-CN", "Roboto, Droid Sans, Noto Sans SC, Droid Sans Fallback");
    -pref("font.name-list.monospace.zh-CN", "Droid Sans Fallback");
    +pref("font.name-list.monospace.zh-CN", "Dejavu Sans Mono");
     
     pref("font.name.serif.zh-HK", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-HK", "Clear Sans");
    -pref("font.name.monospace.zh-HK", "Droid Sans Mono");
    +pref("font.name.monospace.zh-HK", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-HK", "Droid Serif, Droid Sans Fallback");
     pref("font.name-list.sans-serif.zh-HK", "Roboto, Droid Sans, Noto Sans TC, Noto Sans SC, Droid Sans Fallback");
    -pref("font.name-list.monospace.zh-HK", "Droid Sans Fallback");
    +pref("font.name-list.monospace.zh-HK", "Dejavu Sans Mono");
     
     pref("font.name.serif.zh-TW", "Charis SIL Compact");
     pref("font.name.sans-serif.zh-TW", "Clear Sans");
    -pref("font.name.monospace.zh-TW", "Droid Sans Mono");
    +pref("font.name.monospace.zh-TW", "Dejavu Sans Mono");
     pref("font.name-list.serif.zh-TW", "Droid Serif, Droid Sans Fallback");
     pref("font.name-list.sans-serif.zh-TW", "Roboto, Droid Sans, Noto Sans TC, Noto Sans SC, Droid Sans Fallback");
    -pref("font.name-list.monospace.zh-TW", "Droid Sans Fallback");
    +pref("font.name-list.monospace.zh-TW", "Dejavu Sans Mono");
     
     #endif
     
    @@ -3680,17 +3680,17 @@
     // Override default Japanese fonts
     pref("font.name.serif.ja", "dt-interface system-jisx0208.1983-0");
     pref("font.name.sans-serif.ja", "dt-interface system-jisx0208.1983-0");
    -pref("font.name.monospace.ja", "dt-interface user-jisx0208.1983-0");
    +pref("font.name.monospace.ja", "Dejavu Sans Mono");
     
     // Override default Cyrillic fonts
     pref("font.name.serif.x-cyrillic", "dt-interface system-iso8859-5");
     pref("font.name.sans-serif.x-cyrillic", "dt-interface system-iso8859-5");
    -pref("font.name.monospace.x-cyrillic", "dt-interface user-iso8859-5");
    +pref("font.name.monospace.x-cyrillic", "Dejavu Sans Mono");
     
     // Override default Unicode fonts
     pref("font.name.serif.x-unicode", "dt-interface system-ucs2.cjk_japan-0");
     pref("font.name.sans-serif.x-unicode", "dt-interface system-ucs2.cjk_japan-0");
    -pref("font.name.monospace.x-unicode", "dt-interface user-ucs2.cjk_japan-0");
    +pref("font.name.monospace.x-unicode", "Dejavu Sans Mono");
     
     # AIX
     #endif
    
  18. toolkit 語系增加 en-US。
    [dywang@dywnb SOURCES]$ echo en_US >> mozilla-esr38/toolkit/locales/all-locales
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/toolkit/locales/all-locales \
    mozilla-esr38/toolkit/locales/all-locales
    --- ../tmp/mozilla-esr38/toolkit/locales/all-locales	2016-02-11 04:59:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/all-locales	2016-03-10 08:40:13.466275537 +0800
    @@ -12,3 +12,4 @@
     ro
     sv-SE
     ru
    +en_US
    
  19. 增加 zh-TW 可用語系。
    [dywang@dywnb SOURCES]$ vim mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/\
    global/intl.properties mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties
    --- ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties	2016-02-11 04:59:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties	2016-03-10 08:42:34.862278700 +0800
    @@ -30,7 +30,7 @@
     # British English in their list, since those languages are commonly spoken in
     # the same area as Breton:
     # intl.accept_languages=br, fr-FR, fr, en-GB, en
    -intl.accept_languages=en-US, en
    +intl.accept_languages=en-US, en, zh-TW
     
     # LOCALIZATION NOTE (font.language.group):
     # This preference controls the initial setting of the language drop-down menu
    
  20. 系統預設使用 UTF-8 編碼。
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/\
    global-platform/unix/intl.properties \
    mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties
    --- ../tmp/mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties	2016-02-11 04:59:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties	2016-03-10 08:45:44.049282932 +0800
    @@ -4,4 +4,4 @@
     
     # LOCALIZATION NOTE (intl.ellipsis): Use the unicode ellipsis char, \u2026,
     # or use "..." if \u2026 doesn't suit traditions in your locale.
    -intl.ellipsis=…
    +intl.charset.default=UTF-8
    
  21. 修改預設首頁到個人網頁。
    [dywang@dywnb SOURCES]$ sed -i 's|\(startup.homepage.*\",\ *\"\).*\"|\1http://dy.csie.cyut.edu.tw\"|g' \
    firefox-redhat-default-prefs.js | grep homepage
    [dywang@dywnb SOURCES]$ diff -uN ../tmp/firefox-redhat-default-prefs.js firefox-redhat-default-prefs.js
    --- ../tmp/firefox-redhat-default-prefs.js	2016-02-11 16:56:44.000000000 +0800
    +++ firefox-redhat-default-prefs.js	2016-03-10 09:04:30.301308126 +0800
    @@ -14,10 +14,10 @@
     pref("dom.ipc.plugins.enabled.nswrapper*",  false);
     pref("network.manage-offline-status",       true);
     pref("toolkit.networkmanager.disable",      false);
    -pref("browser.startup.homepage",            "data:text/plain,browser.startup.homepage=file:///usr/share/doc/HTML/index.html");
    +pref("browser.startup.homepage",            "http://dy.csie.cyut.edu.tw");
     pref("toolkit.storage.synchronous",         0);
    -pref("startup.homepage_override_url",       "http://www.redhat.com");
    -pref("startup.homepage_welcome_url",        "http://www.redhat.com");
    +pref("startup.homepage_override_url",       "http://dy.csie.cyut.edu.tw");
    +pref("startup.homepage_welcome_url",        "http://dy.csie.cyut.edu.tw");
     /* Workaround for rhbz#1134876 */
     pref("javascript.options.baselinejit",      true);
     pref("extensions.shownSelectionUI",         true);
    
  22. 重新打包壓縮 mozilla-esr31 目錄。
    [dywang@dywnb SOURCES]$ tar jcvf firefox-38.6.1esr.source.tar.bz2 mozilla-esr38
    
  23. 建立 RPM 二進位檔,出現相依套件問題,不同的建立環境缺的套件不會相同,必須把缺的套件都安裝起來。
    [dywang@dywnb SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec
    Building target platforms: x86_64
    Building for target x86_64
    error: Failed build dependencies:
    	nspr-devel >= 4.10.8-2 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	nss-devel >= 3.19.1-5 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	libvpx-devel >= 1.3.0 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	hunspell-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	bzip2-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	libIDL-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	gnome-vfs2-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	libgnome-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	libgnomeui-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	krb5-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	startup-notification-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	libnotify-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	autoconf213 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	mesa-libGL-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	python-simplejson is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	pulseaudio-libs-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	openssl-devel is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	glibc-static is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	dejagnu is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	bison is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	flex is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	texinfo is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	sharutils is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	elfutils-devel >= 0.147 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	elfutils-libelf-devel >= 0.147 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	/lib/libc.so.6 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	/usr/lib/libc.so is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	gmp-devel >= 4.1.2-8 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	mpfr-devel >= 2.2.1 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    
  24. 安裝 firefox 開發相依套件。
    [dywang@dywnb SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) \
    ../SPECS/firefox.spec 2>&1 | grep 'is need' | awk '{print $1}'
    nspr-devel
    nss-devel
    libvpx-devel
    hunspell-devel
    bzip2-devel
    libIDL-devel
    gnome-vfs2-devel
    libgnomeui-devel
    krb5-devel
    startup-notification-devel
    libnotify-devel
    autoconf213
    mesa-libGL-devel
    python-simplejson
    pulseaudio-libs-devel
    openssl-devel
    glibc-static
    dejagnu
    bison
    flex
    texinfo
    sharutils
    elfutils-devel
    elfutils-libelf-devel
    /lib/libc.so.6
    /usr/lib/libc.so
    gmp-devel
    mpfr-devel
    
    [dywang@dywnb SOURCES]$ packages=$(rpmbuild -ba --clean --target=$(uname -m) \
    ../SPECS/firefox.spec 2>&1 | grep 'is need' | awk '{print $1}' | grep -v '/')
    [dywang@dywnb SOURCES]$ yum install $packages --enablerepo=centos
    
  25. 再同時建立 RPM 及 SRPM 二進位檔字,還需要 libc.so.6 及 libc.so 函式,經查為 glibc.i686 套件提供,再安裝此套件。
    [dywang@dywnb SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec 
    Building target platforms: x86_64
    Building for target x86_64
    error: Failed build dependencies:
    	/lib/libc.so.6 is needed by firefox-38.6.1-1.el6.dyw.x86_64
    	/usr/lib/libc.so is needed by firefox-38.6.1-1.el6.dyw.x86_64
    [dywang@dywnb SOURCES]$ yum provides /lib/libc.so.6
    Loaded plugins: fastestmirror, priorities, refresh-packagekit
    Determining fastest mirrors
    dywang/filelists_db                                      | 2.7 MB     00:00     
    glibc-2.12-1.166.el6.i686 : The GNU libc libraries
    Repo        : dywang
    Matched from:
    Filename    : /lib/libc.so.6
    
    [dywang@dywnb SOURCES]$ sudo yum install glibc.i686 glibc-devel.i686 --enablerepo=centos
    
  26. 再同時建立 RPM 及 SRPM 二進位檔字,firefox RPM 建立要 1 小時以上,要耐心等候。成功建立的訊息最後幾行,看到產生 firefox firefox-debuginfo 二個 RPM 檔及一個 firefox SRPM 檔。
    [dywang@dywnb SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec
    ...................
    Processing files: firefox-debuginfo-38.6.1-1.el6.dyw.x86_64
    Checking for unpackaged file(s): /usr/lib/rpm/check-files /home/dywang/rpmbuild/BUILDROOT/firefox-38.6.1-1.el6.dyw.x86_64
    Wrote: /home/dywang/rpmbuild/SRPMS/firefox-38.6.1-1.el6.dyw.src.rpm
    Wrote: /home/dywang/rpmbuild/RPMS/x86_64/firefox-38.6.1-1.el6.dyw.x86_64.rpm
    Wrote: /home/dywang/rpmbuild/RPMS/x86_64/firefox-debuginfo-38.6.1-1.el6.dyw.x86_64.rpm
    Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.iuECBX
    + umask 022
    + cd /home/dywang/rpmbuild/BUILD
    + cd firefox-38.6.1
    + /bin/rm -rf /home/dywang/rpmbuild/BUILDROOT/firefox-38.6.1-1.el6.dyw.x86_64
    + exit 0
    Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.fwBTuo
    + umask 022
    + cd /home/dywang/rpmbuild/BUILD
    + rm -rf firefox-38.6.1
    + exit 0
    
  27. 啟動 firefox 出現以下錯誤訊息:
    [dywang@dyw219 ~]$ firefox 
    console.error: 
      [CustomizableUI]
      Custom widget with id loop-button does not return a valid node
    console.error: 
      [CustomizableUI]
      Custom widget with id loop-button does not return a valid node
    hashcompleter: cancelling request to https://safebrowsing.google.com/safebrowsing/gethash?client=navclient-auto-ffox&appver=38.0.1&pver=2.2
    hashcompleter: notifying failure
    hashcompleter: Can't make request to https://safebrowsing.google.com/safebrowsing/gethash?client=navclient-auto-ffox&appver=38.0.1&pver=2.2
    hashcompleter: notifying failure
    
  28. 在 firefox 網址列輸入 about:config,將 loop.enabled 改成 true,可解決上述問題。
    loop.enabled ===== true
    
  29. 在 firefox 網址列輸入 about:config,將 loop.enabled 改成 true,可解決上述問題。
    [dywang@dywnb ~]$ firefox 
    2016-05-31 08:19:42: stackwalker.cc:125: INFO: Couldn't load symbols for: /lib64/libc.so.6|C4A46F8E59B0354C5C1B90C1D49990360
    2016-05-31 08:19:42: basic_code_modules.cc:88: INFO: No module at 0x7ffd8307a9c8
    2016-05-31 08:19:42: basic_code_modules.cc:88: INFO: No module at 0x7f1c00000107
    2016-05-31 08:19:42: basic_code_modules.cc:88: INFO: No module at 0x9
    2016-05-31 08:19:42: basic_code_modules.cc:88: INFO: No module at 0x7f1bfa333ba0
    2016-05-31 08:19:42: basic_code_modules.cc:88: INFO: No module at 0x7f1c0ffbfb90
    2016-05-31 08:19:42: stackwalker.cc:125: INFO: Couldn't load symbols for: /usr/lib64/firefox/libxul.so|A187B08578F7B802DDC06D09A3254D0C0
    .........
    
  30. firefox 經常 crash,尤其只要瀏覽 google 翻譯一定 crash。
    [dywang@dywnb ~]$ firefox
    Vector smash protection is enabled.
    Crash Annotation GraphicsCriticalError: |[0][GFX1]: Failed to create similar cairo surface! Size: Size(9,9) Status: 1[GFX1]: Failed to create similar cairo surface! Size: Size(9,9) Status: 1
    Crash Annotation GraphicsCriticalError: |[0][GFX1]: Failed to create similar cairo surface! Size: Size(9,9) Status: 1|[1][GFX1]: Failed to create similar cairo surface! Size: Size(64,64) Status: 1[GFX1]: Failed to create similar cairo surface! Size: Size(64,64) Status: 1
    [NPAPI 6489] ###!!! ABORT: Aborting on channel error.: file /home/dywang/rpmbuild/BUILD/firefox-38.6.1/mozilla-esr38/ipc/glue/MessageChannel.cpp, line 1584
    [NPAPI 6489] ###!!! ABORT: Aborting on channel error.: file /home/dywang/rpmbuild/BUILD/firefox-38.6.1/mozilla-esr38/ipc/glue/MessageChannel.cpp, line 1584
    Segmentation fault (core dumped)
    
  31. 更新 nss-* 套件,解決上述問題。還是無法解決,關閉所有分頁瀏覽,重新開啟網頁,暫時不崩潰。
    [root@dywnb ~]# yum update nss-* nspr-* --enablerepo=centos