firefox-38.0.1 套件實例

  1. 緣由:firefox v31 不支援 google hangouts。
  2. 下載 SRPM 套件
    [dywang@dywH ~]$ cd rpmbuild
    [dywang@dywH rpmbuild]$ wget ftp://ftp.pbone.net/mirror/ftp.redhat.com/pub\
    /redhat/linux/enterprise/6Client/en/os/SRPMS/firefox-38.0.1-1.el6_6.src.rpm
    
  3. 安裝 SRPM 套件
    [dywang@dywH rpmbuild]$ rpm -ivh firefox-38.0.1-1.el6_6.src.rpm
    
  4. 查看安裝的所有檔案。
    [dywang@dywH SOURCES]$ rpm -qpl ../firefox-38.0.1-1.el6_6.src.rpm 
    warning: ../firefox-38.0.1-1.el6_6.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.0.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.0.1esr-20150515.tar.bz2
    firefox-mozconfig
    firefox-mozconfig-branded
    firefox-nss-3.18.0.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-api-key
    rhbz-1173156.patch
    rhbz-966424.patch
    xulrunner-24.0-jemalloc-ppc.patch
    xulrunner-nspr-version.patch
    
  5. 查看程式主要的打包壓縮檔。
    [dywang@dywH SOURCES]$ ls firefox-38.0.1esr.source.tar.bz2 
    firefox-38.0.1esr.source.tar.bz2
    
  6. 解壓縮原始碼 tarball,產生 mozilla-esr38 目錄,存放原始碼。
    [dywang@dywH SOURCES]$ tar jxvf firefox-38.0.1esr.source.tar.bz2
    

  7. 至 mozilla-esr38 目錄,查看檔案。
    [dywang@dywH SOURCES]$ ls mozilla-esr38
    accessible    db           Makefile.in          README.txt
    aclocal.m4    docshell     media                security
    addon-sdk     dom          memory               services
    Android.mk    editor       mfbt                 startupcache
    AUTHORS       embedding    mobile               storage
    b2g           extensions   modules              testing
    browser       gfx          moz.build            toolkit
    build         GNUmakefile  mozglue              tools
    caps          hal          mozilla-config.h.in  uriloader
    chrome        image        netwerk              view
    client.mk     intl         nsprpub              webapprt
    client.py     ipc          other-licenses       widget
    CLOBBER       js           parser               xpcom
    config        layout       probes               xpfe
    configure     LEGAL        profile              xulrunner
    configure.in  LICENSE      python
    content       mach         rdf
    
  8. 切換到暫存目錄,不安裝 rpm 檔下抽取 rpm 檔,做為修改前後之比較。
    [dywang@dywH SOURCES]$ cd ../tmp/
    [dywang@dywH tmp]$ rpm2cpio ../firefox-38.0.1-1.el6_6.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.0.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.0.1esr-20150515.tar.bz2
    firefox-mozconfig
    firefox-mozconfig-branded
    firefox-nss-3.18.0.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-api-key
    rhbz-1173156.patch
    rhbz-966424.patch
    xulrunner-24.0-jemalloc-ppc.patch
    xulrunner-nspr-version.patch
    655151 blocks
    
  9. 暫存目錄下解開 firefox-38.0.1esr.source.tar.bz2。
    [dywang@dywH tmp]$ tar jxvf firefox-38.0.1esr.source.tar.bz2
    
  10. 修改 RPM spec 規格檔,版本加入 dyw。
    [dywang@dywH SOURCES]$ vim ../SPECS/firefox.spec
    [dywang@dywH SOURCES]$ diff -uN ../tmp/firefox.spec ../SPECS/firefox.spec
    --- ../tmp/firefox.spec	2015-05-15 16:11:42.000000000 +0800
    +++ ../SPECS/firefox.spec	2015-09-17 21:58:19.939319845 +0800
    @@ -53,7 +53,7 @@
     Summary:        Mozilla Firefox Web browser
     Name:           firefox
     Version:        38.0.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
    
  11. 程式修改前後檔案比較。
    [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
    
  12. 修改其他編碼為 UTF-8。
    [dywang@dywssd 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	2015-05-15 01:39:50.000000000 +0800
    +++ mozilla-esr38/browser/components/preferences/fonts.xul	2015-10-21 15:50:04.227835597 +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>
    
  13. 增加瀏覽器語系 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
    
  14. 當找不到編碼時預設使用 UTF-8。
    [dywang@dywssd SOURCES]$ diff -uN ../tmp/mozilla-esr38/dom/encoding/FallbackEncoding.cpp \
    mozilla-esr38/dom/encoding/FallbackEncoding.cpp
    --- ../tmp/mozilla-esr38/dom/encoding/FallbackEncoding.cpp	2015-05-15 01:39:57.000000000 +0800
    +++ mozilla-esr38/dom/encoding/FallbackEncoding.cpp	2015-09-18 14:56:54.000000000 +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");
       }
     }
    
  15. 預設使用 UTF-8 編碼。
    [dywang@dywssd SOURCES]$ diff -uN ../tmp/mozilla-esr38/extensions/universalchardet/tests/\
    CharsetDetectionTests.js mozilla-esr38/extensions/universalchardet/tests/CharsetDetectionTests.js
    --- ../tmp/mozilla-esr38/extensions/universalchardet/tests/CharsetDetectionTests.js	2015-05-15 01:40:04.000000000 +0800
    +++ mozilla-esr38/extensions/universalchardet/tests/CharsetDetectionTests.js	2015-09-18 16:39:36.000000000 +0800
    @@ -47,7 +47,7 @@
         if (gExpectedCharset == "default") {
             // No point trying to be generic here, because we have plenty of other
             // unit tests that fail if run using a non-windows-1252 locale.
    -        gExpectedCharset = "windows-1252";
    +        gExpectedCharset = "UTF-8";
         }
     
         // Get the local directory. This needs to be a file: URI because chrome:
    
  16. unix 系統預設使用 UTF-8 編碼。
    [dywang@dywssd 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	2015-05-15 01:39:52.000000000 +0800
    +++ mozilla-esr38/intl/locale/unix/nsDateTimeFormatUnix.cpp	2015-09-18 15:15:39.000000000 +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,非等寬字為16。 設定為 15 時 webmail squirrelmail 在某狀況會背景全黑
    [dywang@dywssd 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	2015-05-15 01:40:01.000000000 +0800
    +++ mozilla-esr38/modules/libpref/init/all.js	2015-10-21 15:47:57.233835646 +0800
    @@ -550,9 +550,9 @@
     pref("apz.zoom_animation_duration_ms", 250);
     
     #ifdef XP_MACOSX
    -pref("apz.fling_repaint_interval", 16);
    -pref("apz.smooth_scroll_repaint_interval", 16);
    -pref("apz.pan_repaint_interval", 16);
    +pref("apz.fling_repaint_interval", 15);
    +pref("apz.smooth_scroll_repaint_interval", 15);
    +pref("apz.pan_repaint_interval", 15);
     pref("apz.x_skate_size_multiplier", "2.5");
     pref("apz.y_skate_size_multiplier", "3.5");
     #else
    @@ -1110,7 +1110,7 @@
     // network reads and on wifi to mitigate 802.11 Power Save Polling delays
     pref("network.tickle-wifi.enabled", false);
     pref("network.tickle-wifi.duration", 400);
    -pref("network.tickle-wifi.delay", 16);
    +pref("network.tickle-wifi.delay", 15);
     
     // Turn off interprocess security checks. Needed to run xpcshell tests.
     pref("network.disable.ipc.security", false);
    @@ -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
    @@ -2727,7 +2727,7 @@
     
     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");
    @@ -2742,10 +2742,10 @@
     // 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)
    @@ -3224,12 +3224,12 @@
     
     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");
     
    @@ -3242,10 +3242,10 @@
     
     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");
    @@ -3256,9 +3256,9 @@
     
     // XP_MACOSX changes to default font sizes
     pref("font.minimum-size.th", 10);
    -pref("font.size.variable.zh-CN", 15);
    -pref("font.size.variable.zh-HK", 15);
    -pref("font.size.variable.zh-TW", 15);
    +pref("font.size.variable.zh-CN", 16);
    +pref("font.size.variable.zh-HK", 16);
    +pref("font.size.variable.zh-TW", 16);
     
     // Apple's Symbol is Unicode so use it
     pref("font.mathfont-family", "Latin Modern Math, XITS Math, STIX Math, Cambria Math, Asana Math, TeX Gyre Bonum Math, TeX Gyre Pagella Math, TeX Gyre Termes Math, Neo Euler, Lucida Bright Math, MathJax_Main, STIXNonUnicode, STIXSizeOneSym, STIXGeneral, Symbol, DejaVu Sans");
    @@ -3439,17 +3439,17 @@
     
     // 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.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.size.fixed.he", 14);
     
     pref("font.name.serif.ja", "serif");
     pref("font.name.sans-serif.ja", "sans-serif");
    @@ -3461,23 +3461,23 @@
     
     pref("font.name.serif.th", "serif");
     pref("font.name.sans-serif.th", "sans-serif");
    -pref("font.minimum-size.th", 13);
    +pref("font.minimum-size.th", 15);
     pref("font.name.monospace.th", "monospace");
     
     pref("font.name.serif.x-cyrillic", "serif");
     pref("font.name.sans-serif.x-cyrillic", "sans-serif");
     pref("font.name.monospace.x-cyrillic", "monospace");
    -pref("font.size.fixed.x-cyrillic", 12);
    +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.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");
    @@ -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
    @@ -3583,7 +3583,7 @@
     
     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");
    @@ -3597,7 +3597,7 @@
     
     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)
    @@ -3648,7 +3648,7 @@
     
     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");
     
    @@ -3668,10 +3668,10 @@
     
     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
    
  18. toolkit 語系增加 en-US。
    [dywang@dywssd SOURCES]$ diff -uN ../tmp/mozilla-esr38/toolkit/locales/all-locales \
    mozilla-esr38/toolkit/locales/all-locales
    --- ../tmp/mozilla-esr38/toolkit/locales/all-locales	2015-05-15 01:40:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/all-locales	2015-09-18 14:17:24.000000000 +0800
    @@ -12,3 +12,4 @@
     ro
     sv-SE
     ru
    +en-US
    
  19. 增加 zh-TW 可用語系。
    [dywang@dywssd 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	2015-05-15 01:40:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/en-US/chrome/global/intl.properties	2015-09-18 15:12:24.000000000 +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@dywssd 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\
    	2015-05-15 01:40:03.000000000 +0800
    +++ mozilla-esr38/toolkit/locales/en-US/chrome/global-platform/unix/intl.properties\
    	2015-09-18 14:20:57.000000000 +0800
    @@ -4,4 +4,5 @@
     
     # 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@dywH SOURCES]$ vim firefox-centos-default-prefs.js 
    [dywang@dywH SOURCES]$ diff -uN ../tmp/firefox-redhat-default-prefs.js firefox-redhat-default-prefs.js 
    --- ../tmp/firefox-redhat-default-prefs.js	2015-05-15 16:11:23.000000000 +0800
    +++ firefox-redhat-default-prefs.js	2015-09-17 22:02:01.938319573 +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",            "data:text/plain,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",      false);
     pref("extensions.shownSelectionUI",         true);
    
  22. 重新打包壓縮 mozilla-esr31 目錄。
    [dywang@dywH SOURCES]$ tar jcvf firefox-38.0.1esr.source.tar.bz2 mozilla-esr38
    
  23. 建立 RPM 二進位檔,出現相依套件問題,不同的建立環境缺的套件不會相同,必須把缺的套件都安裝起來。
    [dywang@dywH 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 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	nss-devel >= 3.18.0 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	pulseaudio-libs-devel is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	glibc-static is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	dejagnu is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	bison is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	flex is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	texinfo is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	sharutils is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	elfutils-devel >= 0.147 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	elfutils-libelf-devel >= 0.147 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	/lib/libc.so.6 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	/usr/lib/libc.so is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	gmp-devel >= 4.1.2-8 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    	mpfr-devel >= 2.2.1 is needed by firefox-38.1.0-1.el6.dyw.x86_64
    
  24. 安裝 firefox 開發相依套件。
    [root@dywH ~]# yum install pulseaudio-libs-devel glibc-static dejagnu \
    bison flex texinfo sharutils elfutils-devel elfutils-libelf-devel \
    gmp-devel mpfr-devel glibc-devel-2.12-1.166.el6.i686
    

  25. 再同時建立 RPM 及 SRPM 二進位檔字,firefox RPM 建立要 1 小時以上,要耐心等候。成功建立的訊息最後幾行,看到產生 firefox firefox-debuginfo 二個 RPM 檔及一個 firefox SRPM 檔。
    [dywang@dywH SOURCES]$ rpmbuild -ba --clean --target=$(uname -m) ../SPECS/firefox.spec
    ...................
    Wrote: /home/dywang/rpmbuild/SRPMS/firefox-38.0.1-1.el6.dyw.src.rpm
    Wrote: /home/dywang/rpmbuild/RPMS/x86_64/firefox-38.0.1-1.el6.dyw.x86_64.rpm
    Wrote: /home/dywang/rpmbuild/RPMS/x86_64/firefox-debuginfo-38.0.1-1.el6.dyw.x86_64.rpm
    Executing(%clean): /bin/sh -e /var/tmp/rpm-tmp.RLL8rf
    + umask 022
    + cd /home/dywang/rpmbuild/BUILD
    + cd firefox-38.0.1
    + /bin/rm -rf /home/dywang/rpmbuild/BUILDROOT/firefox-38.0.1-1.el6.dyw.x86_64
    + exit 0
    Executing(--clean): /bin/sh -e /var/tmp/rpm-tmp.wH9adX
    + umask 022
    + cd /home/dywang/rpmbuild/BUILD
    + rm -rf firefox-38.0.1
    + exit 0